Codebase list unbound / 7ef7689
Merge tag 'upstream/1.5.9' Upstream version 1.5.9 Robert Edmonds 7 years ago
96 changed file(s) with 8194 addition(s) and 4009 deletion(s). Raw diff Collapse all Expand all
107107 util/netevent.c util/net_help.c util/random.c util/rbtree.c util/regional.c \
108108 util/rtt.c util/storage/dnstree.c util/storage/lookup3.c \
109109 util/storage/lruhash.c util/storage/slabhash.c util/timehist.c util/tube.c \
110 util/winsock_event.c validator/autotrust.c validator/val_anchor.c \
111 validator/validator.c validator/val_kcache.c validator/val_kentry.c \
112 validator/val_neg.c validator/val_nsec3.c validator/val_nsec.c \
113 validator/val_secalgo.c validator/val_sigcrypt.c \
114 validator/val_utils.c dns64/dns64.c $(CHECKLOCK_SRC) $(DNSTAP_SRC)
110 util/ub_event.c util/ub_event_pluggable.c util/winsock_event.c \
111 validator/autotrust.c validator/val_anchor.c validator/validator.c \
112 validator/val_kcache.c validator/val_kentry.c validator/val_neg.c \
113 validator/val_nsec3.c validator/val_nsec.c validator/val_secalgo.c \
114 validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c cachedb/cachedb.c $(CHECKLOCK_SRC) \
115 $(DNSTAP_SRC)
115116 COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \
116117 as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \
117118 iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \
121122 random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \
122123 slabhash.lo timehist.lo tube.lo winsock_event.lo autotrust.lo val_anchor.lo \
123124 validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \
124 val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo \
125 val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo \
125126 $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ)
126 COMMON_OBJ=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \
127 COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \
127128 outside_network.lo
129 COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo
128130 # set to $COMMON_OBJ or to "" if --enableallsymbols
129131 COMMON_OBJ_ALL_SYMBOLS=@COMMON_OBJ_ALL_SYMBOLS@
130132 COMPAT_SRC=compat/ctime_r.c compat/fake-rfc2553.c compat/gmtime_r.c \
133135 compat/strlcpy.c compat/strptime.c compat/getentropy_linux.c \
134136 compat/getentropy_osx.c compat/getentropy_solaris.c compat/getentropy_win.c \
135137 compat/explicit_bzero.c compat/arc4random.c compat/arc4random_uniform.c \
136 compat/arc4_lock.c compat/sha512.c compat/reallocarray.c compat/isblank.c
138 compat/arc4_lock.c compat/sha512.c compat/reallocarray.c compat/isblank.c \
139 compat/strsep.c
137140 COMPAT_OBJ=$(LIBOBJS:.o=.lo)
138141 COMPAT_OBJ_WITHOUT_CTIME=$(LIBOBJ_WITHOUT_CTIME:.o=.lo)
139142 COMPAT_OBJ_WITHOUT_CTIMEARC4=$(LIBOBJ_WITHOUT_CTIMEARC4:.o=.lo)
176179 testcode/replay.c testcode/fake_event.c
177180 TESTBOUND_OBJ=testbound.lo replay.lo fake_event.lo
178181 TESTBOUND_OBJ_LINK=$(TESTBOUND_OBJ) testpkts.lo worker.lo acl_list.lo \
179 daemon.lo stats.lo $(COMMON_OBJ_WITHOUT_NETCALL) $(SLDNS_OBJ) $(COMPAT_OBJ)
182 daemon.lo stats.lo $(COMMON_OBJ_WITHOUT_NETCALL) ub_event.lo $(SLDNS_OBJ) \
183 $(COMPAT_OBJ)
180184 LOCKVERIFY_SRC=testcode/lock_verify.c
181185 LOCKVERIFY_OBJ=lock_verify.lo
182186 LOCKVERIFY_OBJ_LINK=$(LOCKVERIFY_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \
208212 $(SLDNS_OBJ)
209213 LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \
210214 libunbound/libworker.c
211 LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo
212 LIBUNBOUND_OBJ_LINK=$(LIBUNBOUND_OBJ) $(COMMON_OBJ) $(SLDNS_OBJ) $(COMPAT_OBJ)
215 LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo ub_event_pluggable.lo
216 LIBUNBOUND_OBJ_LINK=$(LIBUNBOUND_OBJ) $(COMMON_OBJ_WITHOUT_UB_EVENT) $(SLDNS_OBJ) $(COMPAT_OBJ)
213217
214218 # win apps or "" if not on windows
215219 WINAPPS=@WINAPPS@
551555 @echo "You still need to remove "`dirname $(DESTDIR)$(configfile)`" , $(DESTDIR)$(configfile) by hand"
552556
553557 iana_update:
554 curl -o port-numbers.tmp http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml --compressed
558 curl -o port-numbers.tmp https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml --compressed
555559 if file port-numbers.tmp | grep 'gzip' >/dev/null; then zcat port-numbers.tmp; else cat port-numbers.tmp; fi | awk '/<record>/ {p=0;} /<protocol>udp/ {p=1;} /<protocol>[^u]/ {p=0;} /Decomissioned|Decommissioned|Removed|De-registered|unassigned|Unassigned|Reserved/ {u=1;} /<number>/ { if(u==1) {u=0;} else { if(p==1) { match($$0,/[0-9]+/); print substr($$0, RSTART, RLENGTH) ","}}}' | sort -nu > util/iana_ports.inc
556560 rm -f port-numbers.tmp
557561
595599 rm -f $(DEPEND_TMP) $(DEPEND_TMP2)
596600
597601 # Dependencies
598 as112.lo as112.o: $(srcdir)/util/as112.c $(srcdir)/util/as112.h
599602 dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \
600603 $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
601604 $(srcdir)/util/locks.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/msgreply.h \
613616 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/slabhash.h \
614617 $(srcdir)/util/data/packed_rrset.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \
615618 $(srcdir)/util/data/msgreply.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h
619 as112.lo as112.o: $(srcdir)/util/as112.c $(srcdir)/util/as112.h
616620 dname.lo dname.o: $(srcdir)/util/data/dname.c config.h $(srcdir)/util/data/dname.h \
617621 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h \
618622 $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/storage/lookup3.h $(srcdir)/sldns/sbuffer.h
623627 $(srcdir)/sldns/sbuffer.h
624628 msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c config.h $(srcdir)/util/data/msgparse.h \
625629 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \
626 $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/packed_rrset.h \
627 $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h \
628 $(srcdir)/sldns/wire2str.h
630 $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
631 $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/sldns/sbuffer.h \
632 $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h
629633 msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/data/msgreply.h \
630634 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \
631635 $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/netevent.h $(srcdir)/util/net_help.h \
717721 $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \
718722 $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h \
719723 $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h \
720 $(srcdir)/validator/val_utils.h
724 $(srcdir)/validator/val_utils.h $(PYTHONMOD_HEADER) $(srcdir)/cachedb/cachedb.h
721725 outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \
722726 $(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \
723727 $(srcdir)/util/netevent.h
761765 $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \
762766 $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \
763767 $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h \
764 $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h
768 $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \
769 $(PYTHONMOD_HEADER) $(srcdir)/cachedb/cachedb.h
765770 locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h
766771 log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h
767772 mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \
772777 module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \
773778 $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
774779 $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h
775 netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/util/log.h \
776 $(srcdir)/util/net_help.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
777 $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
780 netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/util/ub_event.h \
781 $(srcdir)/util/log.h $(srcdir)/util/net_help.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h \
782 $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
778783 $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
779784 $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h \
780 $(srcdir)/dnstap/dnstap.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
785 $(srcdir)/dnstap/dnstap.h
781786 net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \
782787 $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \
783788 $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
807812 $(srcdir)/util/netevent.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
808813 $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
809814 $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h \
810 $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h
815 $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/ub_event.h
816 ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \
817 $(srcdir)/util/netevent.h $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
818 ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \
819 $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \
820 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
821 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
822 $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
823 $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
811824 winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h
812825 autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \
813826 $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
821834 val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/validator/val_anchor.h \
822835 $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \
823836 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/autotrust.h \
824 $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h \
825 $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h $(srcdir)/util/as112.h
837 $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/util/as112.h \
838 $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h
826839 validator.lo validator.o: $(srcdir)/validator/validator.c config.h $(srcdir)/validator/validator.h \
827840 $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
828841 $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
879892 $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h \
880893 $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/rrset.h \
881894 $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/dname.h \
882 $(srcdir)/util/net_help.h $(srcdir)/util/regional.h
895 $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h
883896 dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(srcdir)/dns64/dns64.h $(srcdir)/util/module.h \
884897 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \
885898 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
887900 $(srcdir)/util/storage/slabhash.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \
888901 $(srcdir)/util/netevent.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
889902 $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h
903 cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h $(srcdir)/cachedb/cachedb.h $(srcdir)/util/module.h \
904 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \
905 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
906 $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \
907 $(srcdir)/util/data/msgencode.h $(srcdir)/services/cache/dns.h $(srcdir)/validator/val_neg.h \
908 $(srcdir)/util/rbtree.h $(srcdir)/validator/val_secalgo.h $(srcdir)/iterator/iter_utils.h \
909 $(srcdir)/iterator/iter_resptype.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \
910 $(srcdir)/sldns/sbuffer.h
890911 checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
891912 $(srcdir)/testcode/checklocks.h
892913 unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \
9931014 $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/fptr_wlist.h \
9941015 $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
9951016 $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h \
996 $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
1017 $(srcdir)/util/ub_event.h
9971018 worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \
9981019 $(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
9991020 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
10191040 $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
10201041 $(srcdir)/util/rtt.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
10211042 $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
1022 $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
1043 $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h
10231044 testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcode/testpkts.h \
10241045 $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h \
10251046 $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h
11001121 $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \
11011122 $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \
11021123 $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/localzone.h \
1103 $(srcdir)/sldns/sbuffer.h
1124 $(srcdir)/sldns/sbuffer.h $(PYTHONMOD_HEADER)
11041125 worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \
11051126 $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
11061127 $(srcdir)/libunbound/unbound.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
11201141 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/libworker.h \
11211142 $(srcdir)/util/config_file.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
11221143 $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h \
1123 $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h $(srcdir)/services/localzone.h \
1124 $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \
1125 $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/sldns/sbuffer.h
1144 $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h $(srcdir)/util/ub_event.h \
1145 $(srcdir)/services/localzone.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
1146 $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
1147 $(srcdir)/sldns/sbuffer.h
11261148 libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h $(srcdir)/libunbound/libworker.h \
11271149 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
11281150 $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
11621184 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
11631185 $(srcdir)/sldns/rrdef.h $(srcdir)/util/netevent.h $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h \
11641186 $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/regional.h \
1165 $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h
1187 $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h \
1188
11661189 win_svc.lo win_svc.o: $(srcdir)/winrc/win_svc.c config.h $(srcdir)/winrc/win_svc.h $(srcdir)/winrc/w_inst.h \
11671190 $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
11681191 $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \
11691192 $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
11701193 $(srcdir)/util/netevent.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
11711194 $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/util/module.h \
1172 $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/util/winsock_event.h
1195 $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h
11731196 w_inst.lo w_inst.o: $(srcdir)/winrc/w_inst.c config.h $(srcdir)/winrc/w_inst.h $(srcdir)/winrc/win_svc.h
11741197 unbound-service-install.lo unbound-service-install.o: $(srcdir)/winrc/unbound-service-install.c config.h \
11751198 $(srcdir)/winrc/w_inst.h
12011224 strlcat.lo strlcat.o: $(srcdir)/compat/strlcat.c config.h
12021225 strlcpy.lo strlcpy.o: $(srcdir)/compat/strlcpy.c config.h
12031226 strptime.lo strptime.o: $(srcdir)/compat/strptime.c config.h
1227 strsep.lo strsep.o: $(srcdir)/compat/strsep.c config.h
12041228 getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h
12051229 getentropy_osx.lo getentropy_osx.o: $(srcdir)/compat/getentropy_osx.c config.h
12061230 getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h
11 # Copyright 2009, Wouter Wijngaards, NLnet Labs.
22 # BSD licensed.
33 #
4 # Version 32
4 # Version 34
5 # 2016-03-21 Check -ldl -pthread for libcrypto for ldns and openssl 1.1.0.
6 # 2016-03-21 Use HMAC_Update instead of HMAC_CTX_Init (for openssl-1.1.0).
57 # 2016-01-04 -D_DEFAULT_SOURCE defined with -D_BSD_SOURCE for Linux glibc 2.20
68 # 2015-12-11 FLTO check for new OSX, clang.
79 # 2015-11-18 spelling check fix.
670672 ACX_RUNTIME_PATH_ADD([$ssldir/lib])
671673 fi
672674
673 AC_MSG_CHECKING([for HMAC_CTX_init in -lcrypto])
675 AC_MSG_CHECKING([for HMAC_Update in -lcrypto])
674676 LIBS="$LIBS -lcrypto"
675677 LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto"
676678 AC_TRY_LINK(, [
677 int HMAC_CTX_init(void);
678 (void)HMAC_CTX_init();
679 int HMAC_Update(void);
680 (void)HMAC_Update();
679681 ], [
680682 AC_MSG_RESULT(yes)
681 AC_DEFINE([HAVE_HMAC_CTX_INIT], 1,
682 [If you have HMAC_CTX_init])
683 AC_DEFINE([HAVE_HMAC_UPDATE], 1,
684 [If you have HMAC_Update])
683685 ], [
684686 AC_MSG_RESULT(no)
685687 # check if -lwsock32 or -lgdi32 are needed.
689691 LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32"
690692 AC_MSG_CHECKING([if -lcrypto needs -lgdi32])
691693 AC_TRY_LINK([], [
692 int HMAC_CTX_init(void);
693 (void)HMAC_CTX_init();
694 int HMAC_Update(void);
695 (void)HMAC_Update();
694696 ],[
695 AC_DEFINE([HAVE_HMAC_CTX_INIT], 1,
696 [If you have HMAC_CTX_init])
697 AC_DEFINE([HAVE_HMAC_UPDATE], 1,
698 [If you have HMAC_Update])
697699 AC_MSG_RESULT(yes)
698700 ],[
699701 AC_MSG_RESULT(no)
703705 LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
704706 AC_MSG_CHECKING([if -lcrypto needs -ldl])
705707 AC_TRY_LINK([], [
706 int HMAC_CTX_init(void);
707 (void)HMAC_CTX_init();
708 int HMAC_Update(void);
709 (void)HMAC_Update();
708710 ],[
709 AC_DEFINE([HAVE_HMAC_CTX_INIT], 1,
710 [If you have HMAC_CTX_init])
711 AC_DEFINE([HAVE_HMAC_UPDATE], 1,
712 [If you have HMAC_Update])
711713 AC_MSG_RESULT(yes)
712714 ],[
713715 AC_MSG_RESULT(no)
714 AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required])
716 LIBS="$BAKLIBS"
717 LIBSSL_LIBS="$BAKSSLLIBS"
718 LIBS="$LIBS -ldl -pthread"
719 LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread"
720 AC_MSG_CHECKING([if -lcrypto needs -ldl -pthread])
721 AC_TRY_LINK([], [
722 int HMAC_Update(void);
723 (void)HMAC_Update();
724 ],[
725 AC_DEFINE([HAVE_HMAC_UPDATE], 1,
726 [If you have HMAC_Update])
727 AC_MSG_RESULT(yes)
728 ],[
729 AC_MSG_RESULT(no)
730 AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required])
731 ])
715732 ])
716733 ])
717734 ])
0 /*
1 * cachedb/cachedb.c - cache from a database external to the program module
2 *
3 * Copyright (c) 2016, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 /**
36 * \file
37 *
38 * This file contains a module that uses an external database to cache
39 * dns responses.
40 */
41
42 #include "config.h"
43 #ifdef USE_CACHEDB
44 #include "cachedb/cachedb.h"
45 #include "util/regional.h"
46 #include "util/net_help.h"
47 #include "util/config_file.h"
48 #include "util/data/msgreply.h"
49 #include "util/data/msgencode.h"
50 #include "services/cache/dns.h"
51 #include "validator/val_neg.h"
52 #include "validator/val_secalgo.h"
53 #include "iterator/iter_utils.h"
54 #include "sldns/parseutil.h"
55 #include "sldns/wire2str.h"
56 #include "sldns/sbuffer.h"
57
58 #define CACHEDB_HASHSIZE 256 /* bit hash */
59
60 /** the unit test testframe for cachedb, its module state contains
61 * a cache for a couple queries (in memory). */
62 struct testframe_moddata {
63 /** key for single stored data element, NULL if none */
64 char* stored_key;
65 /** data for single stored data element, NULL if none */
66 uint8_t* stored_data;
67 /** length of stored data */
68 size_t stored_datalen;
69 };
70
71 static int
72 testframe_init(struct module_env* env, struct cachedb_env* cachedb_env)
73 {
74 (void)env;
75 verbose(VERB_ALGO, "testframe_init");
76 cachedb_env->backend_data = (void*)calloc(1,
77 sizeof(struct testframe_moddata));
78 if(!cachedb_env->backend_data) {
79 log_err("out of memory");
80 return 0;
81 }
82 return 1;
83 }
84
85 static void
86 testframe_deinit(struct module_env* env, struct cachedb_env* cachedb_env)
87 {
88 struct testframe_moddata* d = (struct testframe_moddata*)
89 cachedb_env->backend_data;
90 (void)env;
91 verbose(VERB_ALGO, "testframe_deinit");
92 if(!d)
93 return;
94 free(d->stored_key);
95 free(d->stored_data);
96 free(d);
97 }
98
99 static int
100 testframe_lookup(struct module_env* env, struct cachedb_env* cachedb_env,
101 char* key, struct sldns_buffer* result_buffer)
102 {
103 struct testframe_moddata* d = (struct testframe_moddata*)
104 cachedb_env->backend_data;
105 (void)env;
106 verbose(VERB_ALGO, "testframe_lookup of %s", key);
107 if(d->stored_key && strcmp(d->stored_key, key) == 0) {
108 if(d->stored_datalen > sldns_buffer_capacity(result_buffer))
109 return 0; /* too large */
110 verbose(VERB_ALGO, "testframe_lookup found %d bytes",
111 (int)d->stored_datalen);
112 sldns_buffer_clear(result_buffer);
113 sldns_buffer_write(result_buffer, d->stored_data,
114 d->stored_datalen);
115 sldns_buffer_flip(result_buffer);
116 return 1;
117 }
118 return 0;
119 }
120
121 static void
122 testframe_store(struct module_env* env, struct cachedb_env* cachedb_env,
123 char* key, uint8_t* data, size_t data_len)
124 {
125 struct testframe_moddata* d = (struct testframe_moddata*)
126 cachedb_env->backend_data;
127 (void)env;
128 verbose(VERB_ALGO, "testframe_store %s (%d bytes)", key, (int)data_len);
129
130 /* free old data element (if any) */
131 free(d->stored_key);
132 d->stored_key = NULL;
133 free(d->stored_data);
134 d->stored_data = NULL;
135 d->stored_datalen = 0;
136
137 d->stored_data = memdup(data, data_len);
138 if(!d->stored_data) {
139 log_err("out of memory");
140 return;
141 }
142 d->stored_datalen = data_len;
143 d->stored_key = strdup(key);
144 if(!d->stored_key) {
145 free(d->stored_data);
146 d->stored_data = NULL;
147 d->stored_datalen = 0;
148 return;
149 }
150 /* (key,data) successfully stored */
151 }
152
153 /** The testframe backend is for unit tests */
154 static struct cachedb_backend testframe_backend = { "testframe",
155 testframe_init, testframe_deinit, testframe_lookup, testframe_store
156 };
157
158 /** find a particular backend from possible backends */
159 static struct cachedb_backend*
160 cachedb_find_backend(const char* str)
161 {
162 if(strcmp(str, testframe_backend.name) == 0)
163 return &testframe_backend;
164 /* TODO add more backends here */
165 return NULL;
166 }
167
168 /** apply configuration to cachedb module 'global' state */
169 static int
170 cachedb_apply_cfg(struct cachedb_env* cachedb_env, struct config_file* cfg)
171 {
172 const char* backend_str = "testframe"; /* TODO get from cfg */
173 if(backend_str && backend_str[0]) {
174 cachedb_env->backend = cachedb_find_backend(backend_str);
175 if(!cachedb_env->backend) {
176 log_err("cachedb: cannot find backend name '%s",
177 backend_str);
178 return NULL;
179 }
180 }
181 /* TODO see if more configuration needs to be applied or not */
182 return 1;
183 }
184
185 int
186 cachedb_init(struct module_env* env, int id)
187 {
188 struct cachedb_env* cachedb_env = (struct cachedb_env*)calloc(1,
189 sizeof(struct cachedb_env));
190 if(!cachedb_env) {
191 log_err("malloc failure");
192 return 0;
193 }
194 env->modinfo[id] = (void*)cachedb_env;
195 if(!cachedb_apply_cfg(cachedb_env, env->cfg)) {
196 log_err("cachedb: could not apply configuration settings.");
197 return 0;
198 }
199 /* see if a backend is selected */
200 if(!cachedb_env->backend || !cachedb_env->backend->name)
201 return 1;
202 if(!(*cachedb_env->backend->init)(env, cachedb_env)) {
203 log_err("cachedb: could not init %s backend",
204 cachedb_env->backend->name);
205 return 0;
206 }
207 cachedb_env->enabled = 1;
208 return 1;
209 }
210
211 void
212 cachedb_deinit(struct module_env* env, int id)
213 {
214 struct cachedb_env* cachedb_env;
215 if(!env || !env->modinfo[id])
216 return;
217 cachedb_env = (struct cachedb_env*)env->modinfo[id];
218 /* free contents */
219 /* TODO */
220 if(cachedb_env->enabled) {
221 (*cachedb_env->backend->deinit)(env, cachedb_env);
222 }
223
224 free(cachedb_env);
225 env->modinfo[id] = NULL;
226 }
227
228 /** new query for cachedb */
229 static int
230 cachedb_new(struct module_qstate* qstate, int id)
231 {
232 struct cachedb_qstate* iq = (struct cachedb_qstate*)regional_alloc(
233 qstate->region, sizeof(struct cachedb_qstate));
234 qstate->minfo[id] = iq;
235 if(!iq)
236 return 0;
237 memset(iq, 0, sizeof(*iq));
238 /* initialise it */
239 /* TODO */
240
241 return 1;
242 }
243
244 /**
245 * Return an error
246 * @param qstate: our query state
247 * @param id: module id
248 * @param rcode: error code (DNS errcode).
249 * @return: 0 for use by caller, to make notation easy, like:
250 * return error_response(..).
251 */
252 static int
253 error_response(struct module_qstate* qstate, int id, int rcode)
254 {
255 verbose(VERB_QUERY, "return error response %s",
256 sldns_lookup_by_id(sldns_rcodes, rcode)?
257 sldns_lookup_by_id(sldns_rcodes, rcode)->name:"??");
258 qstate->return_rcode = rcode;
259 qstate->return_msg = NULL;
260 qstate->ext_state[id] = module_finished;
261 return 0;
262 }
263
264 /**
265 * Hash the query name, type, class and dbacess-secret into lookup buffer.
266 * @param qstate: query state with query info
267 * and env->cfg with secret.
268 * @param buf: returned buffer with hash to lookup
269 * @param len: length of the buffer.
270 */
271 static void
272 calc_hash(struct module_qstate* qstate, char* buf, size_t len)
273 {
274 uint8_t clear[1024];
275 size_t clen = 0;
276 uint8_t hash[CACHEDB_HASHSIZE/8];
277 const char* hex = "0123456789ABCDEF";
278 const char* secret = "default"; /* TODO: from qstate->env->cfg */
279 size_t i;
280
281 /* copy the hash info into the clear buffer */
282 if(clen + qstate->qinfo.qname_len < sizeof(clear)) {
283 memmove(clear+clen, qstate->qinfo.qname,
284 qstate->qinfo.qname_len);
285 clen += qstate->qinfo.qname_len;
286 }
287 if(clen + 4 < sizeof(clear)) {
288 uint16_t t = htons(qstate->qinfo.qtype);
289 uint16_t c = htons(qstate->qinfo.qclass);
290 memmove(clear+clen, &t, 2);
291 memmove(clear+clen+2, &c, 2);
292 clen += 4;
293 }
294 if(secret && secret[0] && clen + strlen(secret) < sizeof(clear)) {
295 memmove(clear+clen, secret, strlen(secret));
296 clen += strlen(secret);
297 }
298
299 /* hash the buffer */
300 secalgo_hash_sha256(clear, clen, hash);
301 memset(clear, 0, clen);
302
303 /* hex encode output for portability (some online dbs need
304 * no nulls, no control characters, and so on) */
305 log_assert(len >= sizeof(hash)*2 + 1);
306 (void)len;
307 for(i=0; i<sizeof(hash); i++) {
308 buf[i*2] = hex[(hash[i]&0xf0)>>4];
309 buf[i*2+1] = hex[hash[i]&0x0f];
310 }
311 buf[sizeof(hash)*2] = 0;
312 }
313
314 /** convert data from return_msg into the data buffer */
315 static int
316 prep_data(struct module_qstate* qstate, struct sldns_buffer* buf)
317 {
318 uint64_t timestamp, expiry;
319 size_t oldlim;
320 struct edns_data edns;
321 memset(&edns, 0, sizeof(edns));
322 edns.edns_present = 1;
323 edns.bits = EDNS_DO;
324 edns.ext_rcode = 0;
325 edns.edns_version = EDNS_ADVERTISED_VERSION;
326 edns.udp_size = EDNS_ADVERTISED_SIZE;
327
328 if(!qstate->return_msg || !qstate->return_msg->rep)
329 return 0;
330 if(verbosity >= VERB_ALGO)
331 log_dns_msg("cachedb encoding", &qstate->return_msg->qinfo,
332 qstate->return_msg->rep);
333 if(!reply_info_answer_encode(&qstate->return_msg->qinfo,
334 qstate->return_msg->rep, 0, qstate->query_flags,
335 buf, 0, 1, qstate->env->scratch, 65535, &edns, 1, 0))
336 return 0;
337
338 /* TTLs in the return_msg are relative to time(0) so we have to
339 * store that, we also store the smallest ttl in the packet+time(0)
340 * as the packet expiry time */
341 /* qstate->return_msg->rep->ttl contains that relative shortest ttl */
342 timestamp = (uint64_t)*qstate->env->now;
343 expiry = timestamp + (uint64_t)qstate->return_msg->rep->ttl;
344 timestamp = htobe64(timestamp);
345 expiry = htobe64(expiry);
346 oldlim = sldns_buffer_limit(buf);
347 if(oldlim + sizeof(timestamp)+sizeof(expiry) >=
348 sldns_buffer_capacity(buf))
349 return 0; /* doesn't fit. */
350 sldns_buffer_set_limit(buf, oldlim + sizeof(timestamp)+sizeof(expiry));
351 sldns_buffer_write_at(buf, oldlim, &timestamp, sizeof(timestamp));
352 sldns_buffer_write_at(buf, oldlim+sizeof(timestamp), &expiry,
353 sizeof(expiry));
354
355 return 1;
356 }
357
358 /** check expiry, return true if matches OK */
359 static int
360 good_expiry_and_qinfo(struct module_qstate* qstate, struct sldns_buffer* buf)
361 {
362 uint64_t expiry;
363 /* the expiry time is the last bytes of the buffer */
364 if(sldns_buffer_limit(buf) < sizeof(expiry))
365 return 0;
366 sldns_buffer_read_at(buf, sldns_buffer_limit(buf)-sizeof(expiry),
367 &expiry, sizeof(expiry));
368 expiry = be64toh(expiry);
369
370 if((time_t)expiry < *qstate->env->now)
371 return 0;
372
373 return 1;
374 }
375
376 /** convert dns message in buffer to return_msg */
377 static int
378 parse_data(struct module_qstate* qstate, struct sldns_buffer* buf)
379 {
380 struct msg_parse* prs;
381 struct edns_data edns;
382 uint64_t timestamp, expiry;
383 time_t adjust;
384 size_t lim = sldns_buffer_limit(buf);
385 if(lim < LDNS_HEADER_SIZE+sizeof(timestamp)+sizeof(expiry))
386 return 0; /* too short */
387
388 /* remove timestamp and expiry from end */
389 sldns_buffer_read_at(buf, lim-sizeof(expiry), &expiry, sizeof(expiry));
390 sldns_buffer_read_at(buf, lim-sizeof(expiry)-sizeof(timestamp),
391 &timestamp, sizeof(timestamp));
392 expiry = be64toh(expiry);
393 timestamp = be64toh(timestamp);
394
395 /* parse DNS packet */
396 regional_free_all(qstate->env->scratch);
397 prs = (struct msg_parse*)regional_alloc(qstate->env->scratch,
398 sizeof(struct msg_parse));
399 if(!prs)
400 return 0; /* out of memory */
401 memset(prs, 0, sizeof(*prs));
402 memset(&edns, 0, sizeof(edns));
403 sldns_buffer_set_limit(buf, lim - sizeof(expiry)-sizeof(timestamp));
404 if(parse_packet(buf, prs, qstate->env->scratch) != LDNS_RCODE_NOERROR) {
405 sldns_buffer_set_limit(buf, lim);
406 return 0;
407 }
408 if(parse_extract_edns(prs, &edns, qstate->env->scratch) !=
409 LDNS_RCODE_NOERROR) {
410 sldns_buffer_set_limit(buf, lim);
411 return 0;
412 }
413
414 qstate->return_msg = dns_alloc_msg(buf, prs, qstate->region);
415 sldns_buffer_set_limit(buf, lim);
416 if(!qstate->return_msg)
417 return 0;
418
419 qstate->return_rcode = LDNS_RCODE_NOERROR;
420
421 /* see how much of the TTL expired, and remove it */
422 adjust = *qstate->env->now - (time_t)timestamp;
423 verbose(VERB_ALGO, "cachedb msg adjusted down by %d", (int)adjust);
424 /*adjust_msg(qstate->return_msg, adjust);*/
425 /* TODO:
426 msg->rep->ttl = r->ttl - adjust;
427 msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl);
428 for(i=0; i<d->count + d->rrsig_count; i++) {
429 if(d->rr_ttl[i] < adjust)
430 d->rr_ttl[i] = 0;
431 else d->rr_ttl[i] -= adjust;
432 }
433 if(d->ttl < adjust)
434 d->ttl = 0;
435 else d->ttl -= adjust;
436 */
437 /* TODO */
438
439 return 0;
440 }
441
442 /**
443 * Lookup the qstate.qinfo in extcache, store in qstate.return_msg.
444 * return true if lookup was successful.
445 */
446 static int
447 cachedb_extcache_lookup(struct module_qstate* qstate, struct cachedb_env* ie)
448 {
449 char key[(CACHEDB_HASHSIZE/8)*2+1];
450 calc_hash(qstate, key, sizeof(key));
451
452 /* call backend to fetch data for key into scratch buffer */
453 if( !(*ie->backend->lookup)(qstate->env, ie, key,
454 qstate->env->scratch_buffer)) {
455 return 0;
456 }
457
458 /* check expiry date and check if query-data matches */
459 if( !good_expiry_and_qinfo(qstate, qstate->env->scratch_buffer) ) {
460 return 0;
461 }
462
463 /* parse dns message into return_msg */
464 if( !parse_data(qstate, qstate->env->scratch_buffer) ) {
465 return 0;
466 }
467 return 1;
468 }
469
470 /**
471 * Store the qstate.return_msg in extcache for key qstate.info
472 */
473 static void
474 cachedb_extcache_store(struct module_qstate* qstate, struct cachedb_env* ie)
475 {
476 char key[(CACHEDB_HASHSIZE/8)*2+1];
477 calc_hash(qstate, key, sizeof(key));
478
479 /* prepare data in scratch buffer */
480 if(!prep_data(qstate, qstate->env->scratch_buffer))
481 return;
482
483 /* call backend */
484 (*ie->backend->store)(qstate->env, ie, key,
485 sldns_buffer_begin(qstate->env->scratch_buffer),
486 sldns_buffer_limit(qstate->env->scratch_buffer));
487 }
488
489 /**
490 * See if unbound's internal cache can answer the query
491 */
492 static int
493 cachedb_intcache_lookup(struct module_qstate* qstate)
494 {
495 struct dns_msg* msg;
496 msg = dns_cache_lookup(qstate->env, qstate->qinfo.qname,
497 qstate->qinfo.qname_len, qstate->qinfo.qtype,
498 qstate->qinfo.qclass, qstate->query_flags,
499 qstate->region, qstate->env->scratch);
500 if(!msg && qstate->env->neg_cache) {
501 /* lookup in negative cache; may result in
502 * NOERROR/NODATA or NXDOMAIN answers that need validation */
503 msg = val_neg_getmsg(qstate->env->neg_cache, &qstate->qinfo,
504 qstate->region, qstate->env->rrset_cache,
505 qstate->env->scratch_buffer,
506 *qstate->env->now, 1/*add SOA*/, NULL);
507 }
508 if(!msg)
509 return 0;
510 /* this is the returned msg */
511 qstate->return_rcode = LDNS_RCODE_NOERROR;
512 qstate->return_msg = msg;
513 return 1;
514 }
515
516 /**
517 * Store query into the internal cache of unbound.
518 */
519 static void
520 cachedb_intcache_store(struct module_qstate* qstate)
521 {
522 if(!qstate->return_msg)
523 return;
524 (void)dns_cache_store(qstate->env, &qstate->qinfo,
525 qstate->return_msg->rep, 0, qstate->prefetch_leeway, 0,
526 qstate->region, qstate->query_flags);
527 }
528
529 /**
530 * Handle a cachedb module event with a query
531 * @param qstate: query state (from the mesh), passed between modules.
532 * contains qstate->env module environment with global caches and so on.
533 * @param iq: query state specific for this module. per-query.
534 * @param ie: environment specific for this module. global.
535 * @param id: module id.
536 */
537 static void
538 cachedb_handle_query(struct module_qstate* qstate,
539 struct cachedb_qstate* ATTR_UNUSED(iq),
540 struct cachedb_env* ie, int id)
541 {
542 /* check if we are enabled, and skip if so */
543 if(!ie->enabled) {
544 /* pass request to next module */
545 qstate->ext_state[id] = module_wait_module;
546 return;
547 }
548
549 if(qstate->blacklist) {
550 /* cache is blacklisted */
551 /* pass request to next module */
552 qstate->ext_state[id] = module_wait_module;
553 return;
554 }
555
556 /* lookup inside unbound's internal cache */
557 if(cachedb_intcache_lookup(qstate)) {
558 if(verbosity >= VERB_ALGO)
559 log_dns_msg("cachedb internal cache lookup",
560 &qstate->return_msg->qinfo,
561 qstate->return_msg->rep);
562 /* we are done with the query */
563 qstate->ext_state[id] = module_finished;
564 return;
565 }
566
567 /* ask backend cache to see if we have data */
568 if(cachedb_extcache_lookup(qstate, ie)) {
569 if(verbosity >= VERB_ALGO)
570 log_dns_msg(ie->backend->name,
571 &qstate->return_msg->qinfo,
572 qstate->return_msg->rep);
573 /* store this result in internal cache */
574 cachedb_intcache_store(qstate);
575 /* we are done with the query */
576 qstate->ext_state[id] = module_finished;
577 return;
578 }
579
580 /* no cache fetches */
581 /* pass request to next module */
582 qstate->ext_state[id] = module_wait_module;
583 }
584
585 /**
586 * Handle a cachedb module event with a response from the iterator.
587 * @param qstate: query state (from the mesh), passed between modules.
588 * contains qstate->env module environment with global caches and so on.
589 * @param iq: query state specific for this module. per-query.
590 * @param ie: environment specific for this module. global.
591 * @param id: module id.
592 */
593 static void
594 cachedb_handle_response(struct module_qstate* qstate,
595 struct cachedb_qstate* ATTR_UNUSED(iq), struct cachedb_env* ie, int id)
596 {
597 /* check if we are enabled, and skip if not */
598 if(!ie->enabled) {
599 /* we are done with the query */
600 qstate->ext_state[id] = module_finished;
601 return;
602 }
603
604 /* store the item into the backend cache */
605 cachedb_extcache_store(qstate, ie);
606
607 /* we are done with the query */
608 qstate->ext_state[id] = module_finished;
609 }
610
611 void
612 cachedb_operate(struct module_qstate* qstate, enum module_ev event, int id,
613 struct outbound_entry* outbound)
614 {
615 struct cachedb_env* ie = (struct cachedb_env*)qstate->env->modinfo[id];
616 struct cachedb_qstate* iq = (struct cachedb_qstate*)qstate->minfo[id];
617 verbose(VERB_QUERY, "cachedb[module %d] operate: extstate:%s event:%s",
618 id, strextstate(qstate->ext_state[id]), strmodulevent(event));
619 if(iq) log_query_info(VERB_QUERY, "cachedb operate: query",
620 &qstate->qinfo);
621
622 /* perform cachedb state machine */
623 if((event == module_event_new || event == module_event_pass) &&
624 iq == NULL) {
625 if(!cachedb_new(qstate, id)) {
626 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL);
627 return;
628 }
629 iq = (struct cachedb_qstate*)qstate->minfo[id];
630 }
631 if(iq && (event == module_event_pass || event == module_event_new)) {
632 cachedb_handle_query(qstate, iq, ie, id);
633 return;
634 }
635 if(iq && (event == module_event_moddone)) {
636 cachedb_handle_response(qstate, iq, ie, id);
637 return;
638 }
639 if(iq && outbound) {
640 /* cachedb does not need to process responses at this time
641 * ignore it.
642 cachedb_process_response(qstate, iq, ie, id, outbound, event);
643 */
644 return;
645 }
646 if(event == module_event_error) {
647 verbose(VERB_ALGO, "got called with event error, giving up");
648 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL);
649 return;
650 }
651
652 log_err("bad event for cachedb");
653 (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL);
654 }
655
656 void
657 cachedb_inform_super(struct module_qstate* ATTR_UNUSED(qstate),
658 int ATTR_UNUSED(id), struct module_qstate* ATTR_UNUSED(super))
659 {
660 /* cachedb does not use subordinate requests at this time */
661 verbose(VERB_ALGO, "cachedb inform_super was called");
662 }
663
664 void
665 cachedb_clear(struct module_qstate* qstate, int id)
666 {
667 struct cachedb_qstate* iq;
668 if(!qstate)
669 return;
670 iq = (struct cachedb_qstate*)qstate->minfo[id];
671 if(iq) {
672 /* free contents of iq */
673 /* TODO */
674 }
675 qstate->minfo[id] = NULL;
676 }
677
678 size_t
679 cachedb_get_mem(struct module_env* env, int id)
680 {
681 struct cachedb_env* ie = (struct cachedb_env*)env->modinfo[id];
682 if(!ie)
683 return 0;
684 return sizeof(*ie); /* TODO - more mem */
685 }
686
687 /**
688 * The cachedb function block
689 */
690 static struct module_func_block cachedb_block = {
691 "cachedb",
692 &cachedb_init, &cachedb_deinit, &cachedb_operate,
693 &cachedb_inform_super, &cachedb_clear, &cachedb_get_mem
694 };
695
696 struct module_func_block*
697 cachedb_get_funcblock(void)
698 {
699 return &cachedb_block;
700 }
701 #endif /* USE_CACHEDB */
0 /*
1 * cachedb/cachedb.h - cache from a database external to the program module
2 *
3 * Copyright (c) 2016, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 /**
36 * \file
37 *
38 * This file contains a module that uses an external database to cache
39 * dns responses.
40 */
41 #include "util/module.h"
42 struct cachedb_backend;
43
44 /**
45 * The global variable environment contents for the cachedb
46 * Shared between threads, this represents long term information.
47 * Like database connections.
48 */
49 struct cachedb_env {
50 /** true is cachedb is enabled, the backend is turned on */
51 int enabled;
52
53 /** the backend routines */
54 struct cachedb_backend* backend;
55
56 /** backend specific data here */
57 void* backend_data;
58 };
59
60 /**
61 * Per query state for the cachedb module.
62 */
63 struct cachedb_qstate {
64 int todo;
65 };
66
67 /**
68 * Backend call routines
69 */
70 struct cachedb_backend {
71 /** backend name */
72 const char* name;
73
74 /** Init(env, cachedb_env): false on setup failure */
75 int (*init)(struct module_env*, struct cachedb_env*);
76
77 /** Deinit - close db for program exit */
78 void (*deinit)(struct module_env*, struct cachedb_env*);
79
80 /** Lookup (env, cachedb_env, key, result_buffer): true if found */
81 int (*lookup)(struct module_env*, struct cachedb_env*, char*,
82 struct sldns_buffer*);
83
84 /** Store (env, cachedb_env, key, data, data_len) */
85 void (*store)(struct module_env*, struct cachedb_env*, char*,
86 uint8_t*, size_t);
87 };
88
89 /** Init the cachedb module */
90 int cachedb_init(struct module_env* env, int id);
91 /** Deinit the cachedb module */
92 void cachedb_deinit(struct module_env* env, int id);
93 /** Operate on an event on a query (in qstate). */
94 void cachedb_operate(struct module_qstate* qstate, enum module_ev event,
95 int id, struct outbound_entry* outbound);
96 /** Subordinate query done, inform this super request of its conclusion */
97 void cachedb_inform_super(struct module_qstate* qstate, int id,
98 struct module_qstate* super);
99 /** clear the cachedb query-specific contents out of qstate */
100 void cachedb_clear(struct module_qstate* qstate, int id);
101 /** return memory estimate for cachedb module */
102 size_t cachedb_get_mem(struct module_env* env, int id);
103
104 /**
105 * Get the function block with pointers to the cachedb functions
106 * @return the function block for "cachedb".
107 */
108 struct module_func_block* cachedb_get_funcblock(void);
109
55 #include "config.h"
66 #include <string.h>
77
8 #ifdef HAVE_ATTR_WEAK
89 __attribute__((weak)) void
10 #else
11 void
12 #endif
913 __explicit_bzero_hook(void *ATTR_UNUSED(buf), size_t ATTR_UNUSED(len))
1014 {
1115 }
9393 extern int main(int, char *argv[]);
9494 #endif
9595 static int gotdata(char *buf, size_t len);
96 #ifdef SYS_getrandom
96 #if defined(SYS_getrandom) && defined(__NR_getrandom)
9797 static int getentropy_getrandom(void *buf, size_t len);
9898 #endif
9999 static int getentropy_urandom(void *buf, size_t len);
112112 return -1;
113113 }
114114
115 #ifdef SYS_getrandom
115 #if defined(SYS_getrandom) && defined(__NR_getrandom)
116116 /*
117117 * Try descriptor-less getrandom()
118118 */
208208 return 0;
209209 }
210210
211 #ifdef SYS_getrandom
211 #if defined(SYS_getrandom) && defined(__NR_getrandom)
212212 static int
213213 getentropy_getrandom(void *buf, size_t len)
214214 {
0 /**
1 * strsep implementation for compatibility.
2 *
3 * LICENSE
4 * Copyright (c) 2016, NLnet Labs
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 * * Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of NLnetLabs nor the names of its
15 * contributors may be used to endorse or promote products derived from this
16 * software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 **/
30
31 #include "config.h"
32
33 /** see if character is in the delimiter array */
34 static int
35 in_delim(char c, const char* delim)
36 {
37 const char* p;
38 if(!delim)
39 return 0;
40 for(p=delim; *p; p++) {
41 if(*p == c)
42 return 1;
43 }
44 return 0;
45 }
46
47 char *strsep(char **stringp, const char *delim)
48 {
49 char* s;
50 char* orig;
51 if(stringp == NULL || *stringp == NULL)
52 return NULL;
53 orig = *stringp;
54 s = *stringp;
55 while(*s && !in_delim(*s, delim))
56 s++;
57 if(*s) {
58 *s = 0;
59 *stringp = s+1;
60 } else {
61 *stringp = NULL;
62 }
63 return orig;
64 }
4141 /* Whether the C compiler accepts the "unused" attribute */
4242 #undef HAVE_ATTR_UNUSED
4343
44 /* Whether the C compiler accepts the "weak" attribute */
45 #undef HAVE_ATTR_WEAK
46
4447 /* Define to 1 if you have the `chown' function. */
4548 #undef HAVE_CHOWN
4649
124127 /* Define to 1 if you have the <event.h> header file. */
125128 #undef HAVE_EVENT_H
126129
130 /* Define to 1 if you have the `EVP_MD_CTX_new' function. */
131 #undef HAVE_EVP_MD_CTX_NEW
132
127133 /* Define to 1 if you have the `EVP_sha1' function. */
128134 #undef HAVE_EVP_SHA1
129135
187193 /* Define to 1 if you have the <grp.h> header file. */
188194 #undef HAVE_GRP_H
189195
190 /* If you have HMAC_CTX_init */
191 #undef HAVE_HMAC_CTX_INIT
196 /* If you have HMAC_Update */
197 #undef HAVE_HMAC_UPDATE
192198
193199 /* Define to 1 if you have the `inet_aton' function. */
194200 #undef HAVE_INET_ATON
375381
376382 /* Define to 1 if you have the `strptime' function. */
377383 #undef HAVE_STRPTIME
384
385 /* Define to 1 if you have the `strsep' function. */
386 #undef HAVE_STRSEP
378387
379388 /* Define to 1 if `ipi_spec_dst' is a member of `struct in_pktinfo'. */
380389 #undef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST
579588 /* define this to enable debug checks. */
580589 #undef UNBOUND_DEBUG
581590
591 /* Define to 1 to use cachedb support */
592 #undef USE_CACHEDB
593
582594 /* Define to 1 to enable dnstap support */
583595 #undef USE_DNSTAP
596
597 /* Define this to enable DSA support. */
598 #undef USE_DSA
584599
585600 /* Define this to enable ECDSA support. */
586601 #undef USE_ECDSA
976991 #ifndef HAVE_CTIME_R
977992 #define ctime_r unbound_ctime_r
978993 char *ctime_r(const time_t *timep, char *buf);
994 #endif
995
996 #ifndef HAVE_STRSEP
997 #define strsep unbound_strsep
998 char *strsep(char **stringp, const char *delim);
979999 #endif
9801000
9811001 #ifndef HAVE_ISBLANK
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.69 for unbound 1.5.8.
2 # Generated by GNU Autoconf 2.69 for unbound 1.5.9.
33 #
44 # Report bugs to <unbound-bugs@nlnetlabs.nl>.
55 #
589589 # Identity of this package.
590590 PACKAGE_NAME='unbound'
591591 PACKAGE_TARNAME='unbound'
592 PACKAGE_VERSION='1.5.8'
593 PACKAGE_STRING='unbound 1.5.8'
592 PACKAGE_VERSION='1.5.9'
593 PACKAGE_STRING='unbound 1.5.9'
594594 PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl'
595595 PACKAGE_URL=''
596596
831831 enable_sha2
832832 enable_gost
833833 enable_ecdsa
834 enable_dsa
834835 enable_event_api
835836 with_libevent
836837 with_libexpat
841842 with_dnstap_socket_path
842843 with_protobuf_c
843844 with_libfstrm
845 enable_cachedb
844846 with_libunbound_only
845847 '
846848 ac_precious_vars='build_alias
13961398 # Omit some internal or obsolete options to make the list less imposing.
13971399 # This message is too long to be a string in the A/UX 3.1 sh.
13981400 cat <<_ACEOF
1399 \`configure' configures unbound 1.5.8 to adapt to many kinds of systems.
1401 \`configure' configures unbound 1.5.9 to adapt to many kinds of systems.
14001402
14011403 Usage: $0 [OPTION]... [VAR=VALUE]...
14021404
14611463
14621464 if test -n "$ac_init_help"; then
14631465 case $ac_init_help in
1464 short | recursive ) echo "Configuration of unbound 1.5.8:";;
1466 short | recursive ) echo "Configuration of unbound 1.5.9:";;
14651467 esac
14661468 cat <<\_ACEOF
14671469
14941496 --disable-sha2 Disable SHA256 and SHA512 RRSIG support
14951497 --disable-gost Disable GOST support
14961498 --disable-ecdsa Disable ECDSA support
1497 --enable-event-api Enable (experimental) libevent-based libunbound API
1498 installed to unbound-event.h
1499 --disable-dsa Disable DSA support
1500 --enable-event-api Enable (experimental) pluggable event base
1501 libunbound API installed to unbound-event.h
14991502 --enable-static-exe enable to compile executables statically against
15001503 (event) libs, for debug purposes
15011504 --enable-lock-checks enable to check lock and unlock calls, for debug
15041507 to it, smaller install size but libunbound export
15051508 table is polluted by internal symbols
15061509 --enable-dnstap Enable dnstap support (requires fstrm, protobuf-c)
1510 --enable-cachedb enable cachedb module that can use external cache
1511 storage
15071512
15081513 Optional Packages:
15091514 --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
16461651 test -n "$ac_init_help" && exit $ac_status
16471652 if $ac_init_version; then
16481653 cat <<\_ACEOF
1649 unbound configure 1.5.8
1654 unbound configure 1.5.9
16501655 generated by GNU Autoconf 2.69
16511656
16521657 Copyright (C) 2012 Free Software Foundation, Inc.
23552360 This file contains any messages produced by compilers while
23562361 running configure, to aid debugging if configure makes a mistake.
23572362
2358 It was created by unbound $as_me 1.5.8, which was
2363 It was created by unbound $as_me 1.5.9, which was
23592364 generated by GNU Autoconf 2.69. Invocation command line was
23602365
23612366 $ $0 $@
27072712
27082713 UNBOUND_VERSION_MINOR=5
27092714
2710 UNBOUND_VERSION_MICRO=8
2715 UNBOUND_VERSION_MICRO=9
27112716
27122717
27132718 LIBUNBOUND_CURRENT=6
2714 LIBUNBOUND_REVISION=0
2719 LIBUNBOUND_REVISION=1
27152720 LIBUNBOUND_AGE=4
27162721 # 1.0.0 had 0:12:0
27172722 # 1.0.1 had 0:13:0
27592764 # 1.5.6 had 5:9:3
27602765 # 1.5.7 had 5:10:3
27612766 # 1.5.8 had 6:0:4 # adds ub_ctx_set_stub
2767 # 1.5.9 had 6:1:4
27622768
27632769 # Current -- the number of the binary API that we're implementing
27642770 # Revision -- which iteration of the implementation of the binary
61126118 if test $ac_cv_c_unused_attribute = yes; then
61136119
61146120 $as_echo "#define HAVE_ATTR_UNUSED 1" >>confdefs.h
6121
6122 fi
6123
6124
6125
6126
6127 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler (${CC-cc}) accepts the \"weak\" attribute" >&5
6128 $as_echo_n "checking whether the C compiler (${CC-cc}) accepts the \"weak\" attribute... " >&6; }
6129 if ${ac_cv_c_weak_attribute+:} false; then :
6130 $as_echo_n "(cached) " >&6
6131 else
6132 ac_cv_c_weak_attribute=no
6133 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6134 /* end confdefs.h. */
6135 #include <stdio.h>
6136 __attribute__((weak)) void f(int x) { printf("%d", x); }
6137
6138 int
6139 main ()
6140 {
6141
6142 f(1);
6143
6144 ;
6145 return 0;
6146 }
6147 _ACEOF
6148 if ac_fn_c_try_compile "$LINENO"; then :
6149 ac_cv_c_weak_attribute="yes"
6150 else
6151 ac_cv_c_weak_attribute="no"
6152 fi
6153 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6154
6155 fi
6156
6157
6158 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_weak_attribute" >&5
6159 $as_echo "$ac_cv_c_weak_attribute" >&6; }
6160 if test $ac_cv_c_weak_attribute = yes; then
6161
6162 $as_echo "#define HAVE_ATTR_WEAK 1" >>confdefs.h
61156163
61166164 fi
61176165
1706317111
1706417112 fi
1706517113
17066 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HMAC_CTX_init in -lcrypto" >&5
17067 $as_echo_n "checking for HMAC_CTX_init in -lcrypto... " >&6; }
17114 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HMAC_Update in -lcrypto" >&5
17115 $as_echo_n "checking for HMAC_Update in -lcrypto... " >&6; }
1706817116 LIBS="$LIBS -lcrypto"
1706917117 LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto"
1707017118 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1707417122 main ()
1707517123 {
1707617124
17077 int HMAC_CTX_init(void);
17078 (void)HMAC_CTX_init();
17125 int HMAC_Update(void);
17126 (void)HMAC_Update();
1707917127
1708017128 ;
1708117129 return 0;
1708617134 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
1708717135 $as_echo "yes" >&6; }
1708817136
17089 $as_echo "#define HAVE_HMAC_CTX_INIT 1" >>confdefs.h
17137 $as_echo "#define HAVE_HMAC_UPDATE 1" >>confdefs.h
1709017138
1709117139
1709217140 else
1710717155 main ()
1710817156 {
1710917157
17110 int HMAC_CTX_init(void);
17111 (void)HMAC_CTX_init();
17158 int HMAC_Update(void);
17159 (void)HMAC_Update();
1711217160
1711317161 ;
1711417162 return 0;
1711717165 if ac_fn_c_try_link "$LINENO"; then :
1711817166
1711917167
17120 $as_echo "#define HAVE_HMAC_CTX_INIT 1" >>confdefs.h
17168 $as_echo "#define HAVE_HMAC_UPDATE 1" >>confdefs.h
1712117169
1712217170 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
1712317171 $as_echo "yes" >&6; }
1713917187 main ()
1714017188 {
1714117189
17142 int HMAC_CTX_init(void);
17143 (void)HMAC_CTX_init();
17190 int HMAC_Update(void);
17191 (void)HMAC_Update();
1714417192
1714517193 ;
1714617194 return 0;
1714917197 if ac_fn_c_try_link "$LINENO"; then :
1715017198
1715117199
17152 $as_echo "#define HAVE_HMAC_CTX_INIT 1" >>confdefs.h
17200 $as_echo "#define HAVE_HMAC_UPDATE 1" >>confdefs.h
1715317201
1715417202 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
1715517203 $as_echo "yes" >&6; }
1715817206
1715917207 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
1716017208 $as_echo "no" >&6; }
17161 as_fn_error $? "OpenSSL found in $ssldir, but version 0.9.7 or higher is required" "$LINENO" 5
17209 LIBS="$BAKLIBS"
17210 LIBSSL_LIBS="$BAKSSLLIBS"
17211 LIBS="$LIBS -ldl -pthread"
17212 LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread"
17213 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -ldl -pthread" >&5
17214 $as_echo_n "checking if -lcrypto needs -ldl -pthread... " >&6; }
17215 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
17216 /* end confdefs.h. */
17217
17218 int
17219 main ()
17220 {
17221
17222 int HMAC_Update(void);
17223 (void)HMAC_Update();
17224
17225 ;
17226 return 0;
17227 }
17228 _ACEOF
17229 if ac_fn_c_try_link "$LINENO"; then :
17230
17231
17232 $as_echo "#define HAVE_HMAC_UPDATE 1" >>confdefs.h
17233
17234 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
17235 $as_echo "yes" >&6; }
17236
17237 else
17238
17239 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17240 $as_echo "no" >&6; }
17241 as_fn_error $? "OpenSSL found in $ssldir, but version 0.9.7 or higher is required" "$LINENO" 5
17242
17243 fi
17244 rm -f core conftest.err conftest.$ac_objext \
17245 conftest$ac_exeext conftest.$ac_ext
1716217246
1716317247 fi
1716417248 rm -f core conftest.err conftest.$ac_objext \
1740317487
1740417488 done
1740517489
17406 for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode
17490 for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new
1740717491 do :
1740817492 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
1740917493 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
1777017854 ;;
1777117855 esac
1777217856
17857 # Check whether --enable-dsa was given.
17858 if test "${enable_dsa+set}" = set; then :
17859 enableval=$enable_dsa;
17860 fi
17861
17862 use_dsa="no"
17863 case "$enable_ecdsa" in
17864 no)
17865 ;;
17866 *)
17867 # detect if DSA is supported, and turn it off if not.
17868 ac_fn_c_check_func "$LINENO" "EVP_dss1" "ac_cv_func_EVP_dss1"
17869 if test "x$ac_cv_func_EVP_dss1" = xyes; then :
17870
17871
17872 cat >>confdefs.h <<_ACEOF
17873 #define USE_DSA 1
17874 _ACEOF
17875
17876
17877 else
17878 if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5
17879 fi
17880 fi
17881
17882 ;;
17883 esac
17884
17885
1777317886 # Check whether --enable-event-api was given.
1777417887 if test "${enable_event_api+set}" = set; then :
1777517888 enableval=$enable_event_api;
1777617889 fi
1777717890
17778 use_unbound_event="no"
1777917891 case "$enable_event_api" in
1778017892 yes)
17781 use_unbound_event="yes"
17893 UNBOUND_EVENT_INSTALL=unbound-event-install
17894
17895 UNBOUND_EVENT_UNINSTALL=unbound-event-uninstall
17896
1778217897 ;;
1778317898 *)
1778417899 ;;
1812518240 if test -n "$BAK_LDFLAGS_SET"; then
1812618241 LDFLAGS="$BAK_LDFLAGS"
1812718242 fi
18128 if test "$use_unbound_event" = "yes"; then
18129 UNBOUND_EVENT_INSTALL=unbound-event-install
18130
18131 UNBOUND_EVENT_UNINSTALL=unbound-event-uninstall
18132
18133 fi
1813418243 else
1813518244
1813618245 $as_echo "#define USE_MINI_EVENT 1" >>confdefs.h
1923019339 case " $LIBOBJS " in
1923119340 *" ctime_r.$ac_objext "* ) ;;
1923219341 *) LIBOBJS="$LIBOBJS ctime_r.$ac_objext"
19342 ;;
19343 esac
19344
19345 fi
19346
19347
19348 ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep"
19349 if test "x$ac_cv_func_strsep" = xyes; then :
19350 $as_echo "#define HAVE_STRSEP 1" >>confdefs.h
19351
19352 else
19353 case " $LIBOBJS " in
19354 *" strsep.$ac_objext "* ) ;;
19355 *) LIBOBJS="$LIBOBJS strsep.$ac_objext"
1923319356 ;;
1923419357 esac
1923519358
1951919642 fi
1952019643
1952119644
19645 # check for cachedb if requested
19646 # Check whether --enable-cachedb was given.
19647 if test "${enable_cachedb+set}" = set; then :
19648 enableval=$enable_cachedb;
19649 fi
19650
19651 case "$enable_cachedb" in
19652 yes)
19653
19654 $as_echo "#define USE_CACHEDB 1" >>confdefs.h
19655
19656 ;;
19657 no|*)
19658 # nothing
19659 ;;
19660 esac
19661
1952219662 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ${MAKE:-make} supports $< with implicit rule in scope" >&5
1952319663 $as_echo_n "checking if ${MAKE:-make} supports $< with implicit rule in scope... " >&6; }
1952419664 # on openBSD, the implicit rule make $< work.
1966019800
1966119801
1966219802
19663 version=1.5.8
19803 version=1.5.9
1966419804
1966519805 date=`date +'%b %e, %Y'`
1966619806
2017520315 # report actual input values of CONFIG_FILES etc. instead of their
2017620316 # values after options handling.
2017720317 ac_log="
20178 This file was extended by unbound $as_me 1.5.8, which was
20318 This file was extended by unbound $as_me 1.5.9, which was
2017920319 generated by GNU Autoconf 2.69. Invocation command line was
2018020320
2018120321 CONFIG_FILES = $CONFIG_FILES
2024120381 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
2024220382 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
2024320383 ac_cs_version="\\
20244 unbound config.status 1.5.8
20384 unbound config.status 1.5.9
2024520385 configured by $0, generated by GNU Autoconf 2.69,
2024620386 with options \\"\$ac_cs_config\\"
2024720387
99 # must be numbers. ac_defun because of later processing
1010 m4_define([VERSION_MAJOR],[1])
1111 m4_define([VERSION_MINOR],[5])
12 m4_define([VERSION_MICRO],[8])
12 m4_define([VERSION_MICRO],[9])
1313 AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound)
1414 AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
1515 AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
1616 AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
1717
1818 LIBUNBOUND_CURRENT=6
19 LIBUNBOUND_REVISION=0
19 LIBUNBOUND_REVISION=1
2020 LIBUNBOUND_AGE=4
2121 # 1.0.0 had 0:12:0
2222 # 1.0.1 had 0:13:0
6464 # 1.5.6 had 5:9:3
6565 # 1.5.7 had 5:10:3
6666 # 1.5.8 had 6:0:4 # adds ub_ctx_set_stub
67 # 1.5.9 had 6:1:4
6768
6869 # Current -- the number of the binary API that we're implementing
6970 # Revision -- which iteration of the implementation of the binary
255256 AC_C_INLINE
256257 ACX_CHECK_FORMAT_ATTRIBUTE
257258 ACX_CHECK_UNUSED_ATTRIBUTE
259
260 AC_DEFUN([CHECK_WEAK_ATTRIBUTE],
261 [AC_REQUIRE([AC_PROG_CC])
262 AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "weak" attribute)
263 AC_CACHE_VAL(ac_cv_c_weak_attribute,
264 [ac_cv_c_weak_attribute=no
265 AC_TRY_COMPILE(
266 [ #include <stdio.h>
267 __attribute__((weak)) void f(int x) { printf("%d", x); }
268 ], [
269 f(1);
270 ],
271 [ac_cv_c_weak_attribute="yes"],
272 [ac_cv_c_weak_attribute="no"])
273 ])
274
275 AC_MSG_RESULT($ac_cv_c_weak_attribute)
276 if test $ac_cv_c_weak_attribute = yes; then
277 AC_DEFINE(HAVE_ATTR_WEAK, 1, [Whether the C compiler accepts the "weak" attribute])
278 fi
279 ])dnl End of CHECK_WEAK_ATTRIBUTE
280
281 CHECK_WEAK_ATTRIBUTE
258282
259283 if test "$srcdir" != "."; then
260284 CPPFLAGS="$CPPFLAGS -I$srcdir"
633657 fi
634658 AC_CHECK_HEADERS([openssl/conf.h],,, [AC_INCLUDES_DEFAULT])
635659 AC_CHECK_HEADERS([openssl/engine.h],,, [AC_INCLUDES_DEFAULT])
636 AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode])
660 AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new])
637661 AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [
638662 AC_INCLUDES_DEFAULT
639663 #ifdef HAVE_OPENSSL_ERR_H
815839 ;;
816840 esac
817841
818 AC_ARG_ENABLE(event-api, AC_HELP_STRING([--enable-event-api], [Enable (experimental) libevent-based libunbound API installed to unbound-event.h]))
819 use_unbound_event="no"
842 AC_ARG_ENABLE(dsa, AC_HELP_STRING([--disable-dsa], [Disable DSA support]))
843 use_dsa="no"
844 case "$enable_ecdsa" in
845 no)
846 ;;
847 *)
848 # detect if DSA is supported, and turn it off if not.
849 AC_CHECK_FUNC(EVP_dss1, [
850 AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.])
851 ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.])
852 fi ])
853 ;;
854 esac
855
856
857 AC_ARG_ENABLE(event-api, AC_HELP_STRING([--enable-event-api], [Enable (experimental) pluggable event base libunbound API installed to unbound-event.h]))
820858 case "$enable_event_api" in
821859 yes)
822 use_unbound_event="yes"
860 AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install])
861 AC_SUBST(UNBOUND_EVENT_UNINSTALL, [unbound-event-uninstall])
823862 ;;
824863 *)
825864 ;;
905944 if test -n "$BAK_LDFLAGS_SET"; then
906945 LDFLAGS="$BAK_LDFLAGS"
907946 fi
908 if test "$use_unbound_event" = "yes"; then
909 AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install])
910 AC_SUBST(UNBOUND_EVENT_UNINSTALL, [unbound-event-uninstall])
911 fi
912947 else
913948 AC_DEFINE(USE_MINI_EVENT, 1, [Define if you want to use internal select based events])
914949 fi
11391174 LIBOBJ_WITHOUT_CTIME="$LIBOBJS"
11401175 AC_SUBST(LIBOBJ_WITHOUT_CTIME)
11411176 AC_REPLACE_FUNCS(ctime_r)
1177 AC_REPLACE_FUNCS(strsep)
11421178
11431179 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]))
11441180 case "$enable_allsymbols" in
11911227 ]
11921228 )
11931229
1230 # check for cachedb if requested
1231 AC_ARG_ENABLE(cachedb, AC_HELP_STRING([--enable-cachedb], [enable cachedb module that can use external cache storage]))
1232 case "$enable_cachedb" in
1233 yes)
1234 AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support])
1235 ;;
1236 no|*)
1237 # nothing
1238 ;;
1239 esac
1240
11941241 AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope])
11951242 # on openBSD, the implicit rule make $< work.
11961243 # on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
13571404 char *ctime_r(const time_t *timep, char *buf);
13581405 #endif
13591406
1407 #ifndef HAVE_STRSEP
1408 #define strsep unbound_strsep
1409 char *strsep(char **stringp, const char *delim);
1410 #endif
1411
13601412 #ifndef HAVE_ISBLANK
13611413 #define isblank unbound_isblank
13621414 int isblank(int c);
205205 #ifdef HAVE_SSL
206206 ERR_load_crypto_strings();
207207 ERR_load_SSL_strings();
208 # ifdef HAVE_OPENSSL_CONFIG
209 OPENSSL_config("unbound");
210 # endif
211208 # ifdef USE_GOST
212209 (void)sldns_key_EVP_load_gost_id();
213210 # endif
646643 # endif
647644 # if HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS && HAVE_DECL_SK_SSL_COMP_POP_FREE
648645 # ifndef S_SPLINT_S
646 # if OPENSSL_VERSION_NUMBER < 0x10100000
649647 sk_SSL_COMP_pop_free(comp_meth, (void(*)())CRYPTO_free);
648 # endif
650649 # endif
651650 # endif
652651 # ifdef HAVE_OPENSSL_CONFIG
653652 EVP_cleanup();
653 # if OPENSSL_VERSION_NUMBER < 0x10100000
654654 ENGINE_cleanup();
655 # endif
655656 CONF_modules_free();
656657 # endif
657658 CRYPTO_cleanup_all_ex_data(); /* safe, no more threads right now */
658 ERR_remove_state(0);
659659 ERR_free_strings();
660 # if OPENSSL_VERSION_NUMBER < 0x10100000
660661 RAND_cleanup();
662 # endif
661663 # if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
662664 ub_openssl_lock_delete();
663665 # endif
4444 #include "util/locks.h"
4545 #include "util/alloc.h"
4646 #include "services/modstack.h"
47 #ifdef UB_ON_WINDOWS
48 # include "util/winsock_event.h"
49 #endif
5047 struct config_file;
5148 struct worker;
5249 struct listen_port;
139139
140140 /*
141141 * The following function was generated using the openssl utility, using
142 * the command : "openssl dhparam -dsaparam -C 1024"
142 * the command : "openssl dhparam -C 2048"
143143 * (some openssl versions reject DH that is 'too small', eg. 512).
144144 */
145145 #ifndef S_SPLINT_S
146 DH *get_dh1024()
147 {
148 static unsigned char dh1024_p[]={
149 0xB3,0x67,0x2E,0x3B,0x68,0xC5,0xDA,0x58,0x46,0xD6,0x2B,0xD3,
150 0x41,0x78,0x97,0xE4,0xE1,0x61,0x71,0x68,0xE6,0x0F,0x1D,0x78,
151 0x05,0xAA,0xF0,0xFF,0x30,0xDF,0xAC,0x49,0x7F,0xE0,0x90,0xFE,
152 0xB9,0x56,0x4E,0x3F,0xE2,0x98,0x8A,0xED,0xF5,0x28,0x39,0xEF,
153 0x2E,0xA6,0xB7,0x67,0xB2,0x43,0xE4,0x53,0xF8,0xEB,0x2C,0x1F,
154 0x06,0x77,0x3A,0x6F,0x62,0x98,0xC1,0x3B,0xF7,0xBA,0x4D,0x93,
155 0xF7,0xEB,0x5A,0xAD,0xC5,0x5F,0xF0,0xB7,0x24,0x35,0x81,0xF7,
156 0x7F,0x1F,0x24,0xC0,0xDF,0xD3,0xD8,0x40,0x72,0x7E,0xF3,0x19,
157 0x2B,0x26,0x27,0xF4,0xB6,0xB3,0xD4,0x7D,0x08,0x23,0xBE,0x68,
158 0x2B,0xCA,0xB4,0x46,0xA8,0x9E,0xDD,0x6C,0x3D,0x75,0xA6,0x48,
159 0xF7,0x44,0x43,0xBF,0x91,0xC2,0xB4,0x49,
146 DH *get_dh2048()
147 {
148 static unsigned char dh2048_p[]={
149 0xE7,0x36,0x28,0x3B,0xE4,0xC3,0x32,0x1C,0x01,0xC3,0x67,0xD6,
150 0xF5,0xF3,0xDA,0xDC,0x71,0xC0,0x42,0x8B,0xE6,0xEB,0x8D,0x80,
151 0x35,0x7F,0x09,0x45,0x30,0xE5,0xB2,0x92,0x81,0x3F,0x08,0xCD,
152 0x36,0x5E,0x19,0x83,0x62,0xCC,0xAE,0x9B,0x81,0x66,0x24,0xEE,
153 0x16,0x6F,0xA9,0x9E,0xF4,0x82,0x1B,0xDD,0x46,0xC7,0x33,0x5D,
154 0xF4,0xCA,0xE6,0x8F,0xFC,0xD4,0xD8,0x58,0x94,0x24,0x5D,0xFF,
155 0x0A,0xE8,0xEF,0x3D,0xCE,0xBB,0x50,0x94,0xE0,0x5F,0xE8,0x41,
156 0xC3,0x35,0x30,0x37,0xD5,0xCB,0x8F,0x3D,0x95,0x15,0x1A,0x77,
157 0x42,0xB2,0x06,0x86,0xF6,0x09,0x66,0x0E,0x9A,0x25,0x94,0x3E,
158 0xD2,0x04,0x25,0x25,0x1D,0x23,0xEB,0xDC,0x4D,0x0C,0x83,0x28,
159 0x2E,0x15,0x81,0x2D,0xC1,0xAF,0x8D,0x36,0x64,0xE3,0x9A,0x83,
160 0x78,0xC2,0x8D,0xC0,0x9D,0xD9,0x3A,0x1C,0xC5,0x2B,0x50,0x68,
161 0x07,0xA9,0x4B,0x8C,0x07,0x57,0xD6,0x15,0x03,0x4E,0x9E,0x01,
162 0xF2,0x6F,0x35,0xAC,0x26,0x9C,0x92,0x68,0x61,0x13,0xFB,0x01,
163 0xBA,0x22,0x36,0x01,0x55,0xB6,0x62,0xD9,0xB2,0x98,0xCE,0x5D,
164 0x4B,0xA5,0x41,0xD6,0xE5,0x70,0x78,0x12,0x1F,0x64,0xB6,0x6F,
165 0xB0,0x91,0x51,0x91,0x92,0xC0,0x94,0x3A,0xD1,0x28,0x4D,0x30,
166 0x84,0x3E,0xE4,0xE4,0x7F,0x47,0x89,0xB1,0xB6,0x8C,0x8E,0x0E,
167 0x26,0xDB,0xCD,0x17,0x07,0x2A,0x21,0x7A,0xCC,0x68,0xE8,0x57,
168 0x94,0x9E,0x59,0x61,0xEC,0x20,0x34,0x26,0x0D,0x66,0x44,0xEB,
169 0x6F,0x02,0x58,0xE2,0xED,0xF6,0xF3,0x1B,0xBF,0x9E,0x45,0x52,
170 0x5A,0x49,0xA1,0x5B,
160171 };
161 static unsigned char dh1024_g[]={
162 0x5F,0x37,0xB5,0x80,0x4D,0xB4,0xC4,0xB2,0x37,0x12,0xD5,0x2F,
163 0x56,0x81,0xB0,0xDF,0x3D,0x27,0xA2,0x54,0xE7,0x14,0x65,0x2D,
164 0x72,0xA8,0x97,0xE0,0xA9,0x4A,0x09,0x5E,0x89,0xBE,0x34,0x9A,
165 0x90,0x98,0xC1,0xE8,0xBB,0x01,0x2B,0xC2,0x74,0x74,0x90,0x59,
166 0x0B,0x72,0x62,0x5C,0xFD,0x49,0x63,0x4B,0x38,0x91,0xF1,0x7F,
167 0x13,0x25,0xEB,0x52,0x50,0x47,0xA2,0x8C,0x32,0x28,0x42,0xAC,
168 0xBD,0x7A,0xCC,0x58,0xBE,0x36,0xDA,0x6A,0x24,0x06,0xC7,0xF1,
169 0xDA,0x8D,0x8A,0x3B,0x03,0xFA,0x6F,0x25,0xE5,0x20,0xA7,0xD6,
170 0x6F,0x74,0x61,0x53,0x14,0x81,0x29,0x04,0xB5,0x61,0x12,0x53,
171 0xA3,0xD6,0x09,0x98,0x0C,0x8F,0x1C,0xBB,0xD7,0x1C,0x2C,0xEE,
172 0x56,0x4B,0x74,0x8F,0x4A,0xF8,0xA9,0xD5,
172 static unsigned char dh2048_g[]={
173 0x02,
173174 };
174175 DH *dh;
175176
176177 if ((dh=DH_new()) == NULL) return(NULL);
177 dh->p=BN_bin2bn(dh1024_p,sizeof(dh1024_p),NULL);
178 dh->g=BN_bin2bn(dh1024_g,sizeof(dh1024_g),NULL);
178 dh->p=BN_bin2bn(dh2048_p,sizeof(dh2048_p),NULL);
179 dh->g=BN_bin2bn(dh2048_g,sizeof(dh2048_g),NULL);
179180 if ((dh->p == NULL) || (dh->g == NULL))
180181 { DH_free(dh); return(NULL); }
181 dh->length = 160;
182182 return(dh);
183183 }
184184 #endif /* SPLINT */
230230 /* Since we have no certificates and hence no source of
231231 * DH params, let's generate and set them
232232 */
233 if(!SSL_CTX_set_tmp_dh(rc->ctx,get_dh1024())) {
233 if(!SSL_CTX_set_tmp_dh(rc->ctx,get_dh2048())) {
234234 log_crypto_err("Wanted to set DH param, but failed");
235235 return NULL;
236236 }
388388
389389 /* open fd */
390390 fd = create_tcp_accept_sock(res, 1, &noproto, 0,
391 cfg->ip_transparent, 0);
391 cfg->ip_transparent, 0, cfg->ip_freebind);
392392 freeaddrinfo(res);
393393 }
394394
5656 #include "util/data/msgreply.h"
5757 #include "util/module.h"
5858 #include "util/net_help.h"
59 #include "util/ub_event.h"
5960 #include <signal.h>
6061 #include <fcntl.h>
6162 #include <openssl/crypto.h>
7677 #include <login_cap.h>
7778 #endif
7879
79 #ifdef USE_MINI_EVENT
80 # ifdef USE_WINSOCK
81 # include "util/winsock_event.h"
82 # else
83 # include "util/mini_event.h"
84 # endif
85 #else
86 # ifdef HAVE_EVENT_H
87 # include <event.h>
88 # else
89 # include "event2/event.h"
90 # include "event2/event_struct.h"
91 # include "event2/event_compat.h"
92 # endif
93 #endif
94
9580 #ifdef UB_ON_WINDOWS
9681 # include "winrc/win_svc.h"
9782 #endif
10590 /** global debug value to keep track of heap memory allocation */
10691 void* unbound_start_brk = 0;
10792 #endif
108
109 #if !defined(HAVE_EVENT_BASE_GET_METHOD) && (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP))
110 static const char* ev_backend2str(int b)
111 {
112 switch(b) {
113 case EVBACKEND_SELECT: return "select";
114 case EVBACKEND_POLL: return "poll";
115 case EVBACKEND_EPOLL: return "epoll";
116 case EVBACKEND_KQUEUE: return "kqueue";
117 case EVBACKEND_DEVPOLL: return "devpoll";
118 case EVBACKEND_PORT: return "evport";
119 }
120 return "unknown";
121 }
122 #endif
123
124 /** get the event system in use */
125 static void get_event_sys(const char** n, const char** s, const char** m)
126 {
127 #ifdef USE_WINSOCK
128 *n = "event";
129 *s = "winsock";
130 *m = "WSAWaitForMultipleEvents";
131 #elif defined(USE_MINI_EVENT)
132 *n = "mini-event";
133 *s = "internal";
134 *m = "select";
135 #else
136 struct event_base* b;
137 *s = event_get_version();
138 # ifdef HAVE_EVENT_BASE_GET_METHOD
139 *n = "libevent";
140 b = event_base_new();
141 *m = event_base_get_method(b);
142 # elif defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
143 *n = "libev";
144 b = (struct event_base*)ev_default_loop(EVFLAG_AUTO);
145 *m = ev_backend2str(ev_backend((struct ev_loop*)b));
146 # else
147 *n = "unknown";
148 *m = "not obtainable";
149 b = NULL;
150 # endif
151 # ifdef HAVE_EVENT_BASE_FREE
152 event_base_free(b);
153 # endif
154 #endif
155 }
15693
15794 /** print usage. */
15895 static void usage()
172109 printf(" service - used to start from services control panel\n");
173110 #endif
174111 printf("Version %s\n", PACKAGE_VERSION);
175 get_event_sys(&evnm, &evsys, &evmethod);
112 ub_get_event_sys(NULL, &evnm, &evsys, &evmethod);
176113 printf("linked libs: %s %s (it uses %s), %s\n",
177114 evnm, evsys, evmethod,
178115 #ifdef HAVE_SSL
229166 struct rlimit rlim;
230167
231168 if(total > 1024 &&
232 strncmp(event_get_version(), "mini-event", 10) == 0) {
169 strncmp(ub_event_get_version(), "mini-event", 10) == 0) {
233170 log_warn("too many file descriptors requested. The builtin"
234171 "mini-event cannot handle more than 1024. Config "
235172 "for less fds or compile with libevent");
243180 total = 1024;
244181 }
245182 if(perthread > 64 &&
246 strncmp(event_get_version(), "winsock-event", 13) == 0) {
183 strncmp(ub_event_get_version(), "winsock-event", 13) == 0) {
247184 log_err("too many file descriptors requested. The winsock"
248185 " event handler cannot handle more than 64 per "
249186 " thread. Config for less fds");
482482 qinfo->qname_len, qinfo->qtype, qinfo->qclass,
483483 worker->scratchpad, &msg, timenow);
484484 if(!dp) { /* no delegation, need to reprime */
485 regional_free_all(worker->scratchpad);
486485 return 0;
487486 }
488487 if(must_validate) {
490489 case sec_status_unchecked:
491490 /* some rrsets have not been verified yet, go and
492491 * let validator do that */
493 regional_free_all(worker->scratchpad);
494492 return 0;
495493 case sec_status_bogus:
496494 /* some rrsets are bogus, reply servfail */
498496 edns->udp_size = EDNS_ADVERTISED_SIZE;
499497 edns->ext_rcode = 0;
500498 edns->bits &= EDNS_DO;
499 if(!edns_opt_inplace_reply(edns, worker->scratchpad))
500 return 0;
501501 error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
502502 &msg->qinfo, id, flags, edns);
503 regional_free_all(worker->scratchpad);
504503 if(worker->stats.extended) {
505504 worker->stats.ans_bogus++;
506505 worker->stats.ans_rcode[LDNS_RCODE_SERVFAIL]++;
526525 edns->udp_size = EDNS_ADVERTISED_SIZE;
527526 edns->ext_rcode = 0;
528527 edns->bits &= EDNS_DO;
528 if(!edns_opt_inplace_reply(edns, worker->scratchpad))
529 return 0;
529530 msg->rep->flags |= BIT_QR|BIT_RA;
530531 if(!reply_info_answer_encode(&msg->qinfo, msg->rep, id, flags,
531532 repinfo->c->buffer, 0, 1, worker->scratchpad,
533534 error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
534535 &msg->qinfo, id, flags, edns);
535536 }
536 regional_free_all(worker->scratchpad);
537537 if(worker->stats.extended) {
538538 if(secure) worker->stats.ans_secure++;
539539 server_stats_insrcode(&worker->stats, repinfo->c->buffer);
573573 bail_out:
574574 rrset_array_unlock_touch(worker->env.rrset_cache,
575575 worker->scratchpad, rep->ref, rep->rrset_count);
576 regional_free_all(worker->scratchpad);
577576 return 0;
578577 }
579578 }
584583 edns->udp_size = EDNS_ADVERTISED_SIZE;
585584 edns->ext_rcode = 0;
586585 edns->bits &= EDNS_DO;
586 if(!edns_opt_inplace_reply(edns, worker->scratchpad))
587 return 0;
587588 error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
588589 qinfo, id, flags, edns);
589590 rrset_array_unlock_touch(worker->env.rrset_cache,
590591 worker->scratchpad, rep->ref, rep->rrset_count);
591 regional_free_all(worker->scratchpad);
592592 if(worker->stats.extended) {
593593 worker->stats.ans_bogus ++;
594594 worker->stats.ans_rcode[LDNS_RCODE_SERVFAIL] ++;
615615 edns->udp_size = EDNS_ADVERTISED_SIZE;
616616 edns->ext_rcode = 0;
617617 edns->bits &= EDNS_DO;
618 if(!edns_opt_inplace_reply(edns, worker->scratchpad))
619 return 0;
618620 if(!reply_info_answer_encode(qinfo, rep, id, flags,
619621 repinfo->c->buffer, timenow, 1, worker->scratchpad,
620622 udpsize, edns, (int)(edns->bits & EDNS_DO), secure)) {
625627 * is bad while holding locks. */
626628 rrset_array_unlock_touch(worker->env.rrset_cache, worker->scratchpad,
627629 rep->ref, rep->rrset_count);
628 regional_free_all(worker->scratchpad);
629630 if(worker->stats.extended) {
630631 if(secure) worker->stats.ans_secure++;
631632 server_stats_insrcode(&worker->stats, repinfo->c->buffer);
657658 * @param pkt: buffer
658659 * @param str: string to put into text record (<255).
659660 * @param edns: edns reply information.
661 * @param worker: worker with scratch region.
660662 */
661663 static void
662 chaos_replystr(sldns_buffer* pkt, const char* str, struct edns_data* edns)
664 chaos_replystr(sldns_buffer* pkt, const char* str, struct edns_data* edns,
665 struct worker* worker)
663666 {
664667 size_t len = strlen(str);
665668 unsigned int rd = LDNS_RD_WIRE(sldns_buffer_begin(pkt));
688691 edns->edns_version = EDNS_ADVERTISED_VERSION;
689692 edns->udp_size = EDNS_ADVERTISED_SIZE;
690693 edns->bits &= EDNS_DO;
694 if(!edns_opt_inplace_reply(edns, worker->scratchpad))
695 edns->opt_list = NULL;
691696 attach_edns_record(pkt, edns);
692697 }
693698
717722 char buf[MAXHOSTNAMELEN+1];
718723 if (gethostname(buf, MAXHOSTNAMELEN) == 0) {
719724 buf[MAXHOSTNAMELEN] = 0;
720 chaos_replystr(pkt, buf, edns);
725 chaos_replystr(pkt, buf, edns, w);
721726 } else {
722727 log_err("gethostname: %s", strerror(errno));
723 chaos_replystr(pkt, "no hostname", edns);
728 chaos_replystr(pkt, "no hostname", edns, w);
724729 }
725730 }
726 else chaos_replystr(pkt, cfg->identity, edns);
731 else chaos_replystr(pkt, cfg->identity, edns, w);
727732 return 1;
728733 }
729734 if(query_dname_compare(qinfo->qname,
734739 if(cfg->hide_version)
735740 return 0;
736741 if(cfg->version==NULL || cfg->version[0]==0)
737 chaos_replystr(pkt, PACKAGE_STRING, edns);
738 else chaos_replystr(pkt, cfg->version, edns);
742 chaos_replystr(pkt, PACKAGE_STRING, edns, w);
743 else chaos_replystr(pkt, cfg->version, edns, w);
739744 return 1;
740745 }
741746 return 0;
864869 }
865870 goto send_reply;
866871 }
867 if((ret=parse_edns_from_pkt(c->buffer, &edns)) != 0) {
872 if((ret=parse_edns_from_pkt(c->buffer, &edns, worker->scratchpad)) != 0) {
868873 struct edns_data reply_edns;
869874 verbose(VERB_ALGO, "worker parse edns: formerror.");
870875 log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen);
875880 error_encode(c->buffer, ret, &qinfo,
876881 *(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
877882 sldns_buffer_read_u16_at(c->buffer, 2), &reply_edns);
883 regional_free_all(worker->scratchpad);
878884 server_stats_insrcode(&worker->stats, c->buffer);
879885 goto send_reply;
880886 }
883889 edns.edns_version = EDNS_ADVERTISED_VERSION;
884890 edns.udp_size = EDNS_ADVERTISED_SIZE;
885891 edns.bits &= EDNS_DO;
892 edns.opt_list = NULL;
886893 verbose(VERB_ALGO, "query with bad edns version.");
887894 log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen);
888895 error_encode(c->buffer, EDNS_RCODE_BADVERS&0xf, &qinfo,
889896 *(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
890897 sldns_buffer_read_u16_at(c->buffer, 2), NULL);
891898 attach_edns_record(c->buffer, &edns);
899 regional_free_all(worker->scratchpad);
892900 goto send_reply;
893901 }
894902 if(edns.edns_present && edns.udp_size < NORMAL_UDP_SIZE &&
917925 sldns_buffer_write_at(c->buffer, 4,
918926 (uint8_t*)"\0\0\0\0\0\0\0\0", 8);
919927 sldns_buffer_flip(c->buffer);
928 regional_free_all(worker->scratchpad);
920929 goto send_reply;
921930 }
922931 if(worker->stats.extended)
927936 if(qinfo.qclass == LDNS_RR_CLASS_CH && answer_chaos(worker, &qinfo,
928937 &edns, c->buffer)) {
929938 server_stats_insrcode(&worker->stats, c->buffer);
939 regional_free_all(worker->scratchpad);
930940 goto send_reply;
931941 }
932942 if(local_zones_answer(worker->daemon->local_zones, &qinfo, &edns,
944954 * might need to bail out based on ACLs now. */
945955 if((ret=deny_refuse_non_local(c, acl, worker, repinfo)) != -1)
946956 {
957 regional_free_all(worker->scratchpad);
947958 if(ret == 1)
948959 goto send_reply;
949960 return ret;
960971 LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
961972 LDNS_RCODE_REFUSED);
962973 sldns_buffer_flip(c->buffer);
974 regional_free_all(worker->scratchpad);
963975 server_stats_insrcode(&worker->stats, c->buffer);
964976 log_addr(VERB_ALGO, "refused nonrec (cache snoop) query from",
965977 &repinfo->addr, repinfo->addrlen);
983995 sldns_buffer_read_u16_at(c->buffer, 2),
984996 repinfo, leeway);
985997 rc = 0;
998 regional_free_all(worker->scratchpad);
986999 goto send_reply_rc;
9871000 }
9881001 lock_rw_unlock(&e->lock);
1002 regional_free_all(worker->scratchpad);
9891003 goto send_reply;
9901004 }
9911005 verbose(VERB_ALGO, "answer from the cache failed");
9961010 *(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
9971011 sldns_buffer_read_u16_at(c->buffer, 2), repinfo,
9981012 &edns)) {
1013 regional_free_all(worker->scratchpad);
9991014 goto send_reply;
10001015 }
10011016 verbose(VERB_ALGO, "answer norec from cache -- "
10161031 mesh_new_client(worker->env.mesh, &qinfo,
10171032 sldns_buffer_read_u16_at(c->buffer, 2),
10181033 &edns, repinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer));
1034 regional_free_all(worker->scratchpad);
10191035 worker_mem_report(worker, NULL);
10201036 return 0;
10211037
13541370 struct outbound_entry*
13551371 worker_send_query(uint8_t* qname, size_t qnamelen, uint16_t qtype,
13561372 uint16_t qclass, uint16_t flags, int dnssec, int want_dnssec,
1357 int nocaps, struct sockaddr_storage* addr, socklen_t addrlen,
1358 uint8_t* zone, size_t zonelen, struct module_qstate* q)
1373 int nocaps, struct edns_option* opt_list,
1374 struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
1375 size_t zonelen, struct module_qstate* q)
13591376 {
13601377 struct worker* worker = q->env->worker;
13611378 struct outbound_entry* e = (struct outbound_entry*)regional_alloc(
13651382 e->qstate = q;
13661383 e->qsent = outnet_serviced_query(worker->back, qname,
13671384 qnamelen, qtype, qclass, flags, dnssec, want_dnssec, nocaps,
1368 q->env->cfg->tcp_upstream, q->env->cfg->ssl_upstream, addr,
1369 addrlen, zone, zonelen, worker_handle_service_reply, e,
1385 q->env->cfg->tcp_upstream, q->env->cfg->ssl_upstream, opt_list,
1386 addr, addrlen, zone, zonelen, worker_handle_service_reply, e,
13701387 worker->back->udp_buff);
13711388 if(!e->qsent) {
13721389 return NULL;
14111428 size_t ATTR_UNUSED(qnamelen), uint16_t ATTR_UNUSED(qtype),
14121429 uint16_t ATTR_UNUSED(qclass), uint16_t ATTR_UNUSED(flags),
14131430 int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
1414 int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
1431 int ATTR_UNUSED(nocaps), struct edns_option* ATTR_UNUSED(opt_list),
1432 struct sockaddr_storage* ATTR_UNUSED(addr),
14151433 socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
14161434 size_t ATTR_UNUSED(zonelen), struct module_qstate* ATTR_UNUSED(q))
14171435 {
520520 * - An internal query.
521521 * - A query for a record type other than AAAA.
522522 * - CD FLAG was set on querier
523 * - An AAAA query for which an error was returned.
523 * - An AAAA query for which an error was returned.(qstate.return_rcode)
524 * -> treated as servfail thus synthesize (sec 5.1.3 6147), thus
525 * synthesize in (sec 5.1.2 of RFC6147).
524526 * - A successful AAAA query with an answer.
525527 */
526528 if ( (enum dns64_qstate)qstate->minfo[id] == DNS64_INTERNAL_QUERY
527529 || qstate->qinfo.qtype != LDNS_RR_TYPE_AAAA
528530 || (qstate->query_flags & BIT_CD)
529 || qstate->return_rcode != LDNS_RCODE_NOERROR
530531 || (qstate->return_msg &&
531532 qstate->return_msg->rep &&
532533 reply_find_answer_rrset(&qstate->qinfo,
474474 return;
475475 dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__FORWARDER_RESPONSE);
476476 } else {
477 if (!env->log_resolver_query_messages)
477 if (!env->log_resolver_response_messages)
478478 return;
479479 dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__RESOLVER_RESPONSE);
480480 }
0 2 June 2016: Wouter
1 - Fix libubound for edns optlist feature.
2 - Fix distinction between free and CRYPTO_free in dsa and ecdsa alloc.
3 - Fix #752: retry resource temporarily unavailable on control pipe.
4 - un-document localzone tags.
5
6 31 May 2016: Wouter
7 - Fix windows service to be created run with limited rights, as a
8 network service account, from Mario Turschmann.
9 - compat strsep implementation.
10 - generic edns option parse and store code.
11 - and also generic edns options for upstream messages (and replies).
12 after parse use edns_opt_find(edns.opt_list, LDNS_EDNS_NSID),
13 to insert use edns_opt_append(edns, region, code, len, bindata) on
14 the opt_list passed to send_query, or in edns_opt_inplace_reply.
15
16 30 May 2016: Wouter
17 - Fix time in case answer comes from cache in ub_resolve_event().
18 - Attempted fix for #765: _unboundmodule missing for python3.
19
20 27 May 2016: Wouter
21 - Fix #770: Small subgroup attack on DH used in unix pipe on localhost
22 if unbound control uses a unix local named pipe.
23 - Document write permission to directory of trust anchor needed.
24 - Fix #768: Unbound Service Sometimes Can Not Shutdown
25 Completely, WER Report Shown Up. Close handle before closing WSA.
26
27 26 May 2016: Wouter
28 - Updated patch from Charles Walker.
29
30 24 May 2016: Wouter
31 - disable-dnssec-lame-check config option from Charles Walker.
32 - remove memory leak from lame-check patch.
33 - iana portlist update.
34
35 23 May 2016: Wouter
36 - Fix #767: Reference to an expired Internet-Draft in
37 harden-below-nxdomain documentation.
38
39 20 May 2016: Ralph
40 - No QNAME minimisation fall-back for NXDOMAIN answers from DNSSEC
41 signed zones.
42 - iana portlist update.
43
44 19 May 2016: Wouter
45 - Fix #766: dns64 should synthesize results on timeout/errors.
46
47 18 May 2016: Wouter
48 - Fix #761: DNSSEC LAME false positive resolving nic.club.
49
50 17 May 2016: Wouter
51 - trunk updated with output of flex 2.6.0.
52
53 6 May 2016: Wouter
54 - Fix memory leak in out-of-memory conditions of local zone add.
55
56 29 April 2016: Wouter
57 - Fix sldns with static checking fixes copied from getdns.
58
59 28 April 2016: Wouter
60 - Fix #759: 0x20 capsforid no longer checks type PTR, for
61 compatibility with cisco dns guard. This lowers false positives.
62
63 18 April 2016: Wouter
64 - Fix some malformed reponses to edns queries get fallback to nonedns.
65
66 15 April 2016: Wouter
67 - cachedb module event handling design.
68
69 14 April 2016: Wouter
70 - cachedb module framework (empty).
71 - iana portlist update.
72
73 12 April 2016: Wouter
74 - Fix #753: document dump_requestlist is for first thread.
75
76 24 March 2016: Wouter
77 - Document permit-small-holddown for 5011 debug.
78 - Fix #749: unbound-checkconf gets SIGSEGV when use against a
79 malformatted conf file.
80
81 23 March 2016: Wouter
82 - OpenSSL 1.1.0 portability, --disable-dsa configure option.
83
84 21 March 2016: Wouter
85 - Fix compile of getentropy_linux for SLES11 servicepack 4.
86 - Fix dnstap-log-resolver-response-messages, from Nikolay Edigaryev.
87 - Fix test for openssl to use HMAC_Update for 1.1.0.
88 - acx_nlnetlabs.m4 to v33, with HMAC_Update.
89 - acx_nlnetlabs.m4 to v34, with -ldl -pthread test for libcrypto.
90 - ERR_remove_state deprecated since openssl 1.0.0.
91 - OPENSSL_config is deprecated, removing.
92
93 18 March 2016: Ralph
94 - Validate QNAME minimised NXDOMAIN responses.
95 - If QNAME minimisation is enabled, do cache lookup for QTYPE NS in
96 harden-below-nxdomain.
97
98 17 March 2016: Ralph
99 - Limit number of QNAME minimisation iterations.
100
101 17 March 2016: Wouter
102 - Fix #746: Fix unbound sets CD bit on all forwards.
103 If no trust anchors, it'll not set CD bit when forwarding to another
104 server. If a trust anchor, no CD bit on the first attempt to a
105 forwarder, but CD bit thereafter on repeated attempts to get DNSSEC.
106 - iana portlist update.
107
108 16 March 2016: Wouter
109 - Fix ip-transparent for ipv6 on FreeBSD, thanks to Nick Hibma.
110 - Fix ip-transparent for tcp on freebsd.
111
112 15 March 2016: Wouter
113 - ip_freebind: yesno option in unbound.conf sets IP_FREEBIND for
114 binding to an IP address while the interface or address is down.
115
116 14 March 2016: Wouter
117 - Fix warnings in ifdef corner case, older or unknown libevent.
118 - Fix compile for ub_event code with older libev.
119
120 11 March 2016: Wouter
121 - Remove warning about unused parameter in event_pluggable.c.
122 - Fix libev usage of dispatch return value.
123 - No side effects in tolower() call, in case it is a macro.
124 - For test put free in pluggable api in parenthesis.
125
126 10 March 2016: Wouter
127 - Fixup backend2str for libev.
128
129 09 March 2016: Willem
130 - User defined pluggable event API for libunbound
131 - Fixup of compile fix for pluggable event API from P.Y. Adi
132 Prasaja.
133
134 09 March 2016: Wouter
135 - Updated configure and ltmain.sh.
136 - Updated L root IPv6 address.
137
138 07 March 2016: Wouter
139 - Fix #747: assert in outnet_serviced_query_stop.
140 - iana ports fetched via https.
141 - iana portlist update.
142
143 03 March 2016: Wouter
144 - configure tests for the weak attribute support by the compiler.
145
146 02 March 2016: Wouter
147 - 1.5.8 release tag
148 - trunk contains 1.5.9 in development.
149 - iana portlist update.
150 - Fix #745: unbound.py - idn2dname throws UnicodeError when idnname
151 contains trailing dot.
152
0153 24 February 2016: Wouter
1154 - Fix OpenBSD asynclook lock free that gets used later (fix test code).
2155 - Fix that NSEC3 negative cache is used when there is no salt.
0 README for Unbound 1.5.8
0 README for Unbound 1.5.9
11 Copyright 2007 NLnet Labs
22 http://unbound.net
33
00 #
11 # Example configuration file.
22 #
3 # See unbound.conf(5) man page, version 1.5.8.
3 # See unbound.conf(5) man page, version 1.5.9.
44 #
55 # this is a comment.
66
9191 # and you can config non-existing IPs that are going to work later on
9292 # (uses IP_BINDANY on FreeBSD).
9393 # ip-transparent: no
94
95 # use IP_FREEBIND so the interface: addresses can be non-local
96 # and you can bind to nonexisting IPs and interfaces that are down.
97 # Linux only. On Linux you also have ip-transparent that is similar.
98 # ip-freebind: no
9499
95100 # EDNS reassembly buffer to advertise to UDP peers (the actual buffer
96101 # is set with msg-buffer-size). 1480 can solve fragmentation (timeouts).
363368 # into response messages when those sections are not required.
364369 # minimal-responses: no
365370
371 # true to disable DNSSEC lameness check in iterator.
372 # disable-dnssec-lame-check: no
373
366374 # module configuration of the server. A string with identifiers
367375 # separated by spaces. Syntax: "[dns64] [validator] iterator"
368376 # module-config: "validator iterator"
458466 # If the value 0 is given, missing anchors are not removed.
459467 # keep-missing: 31622400 # 366 days
460468
461 # debug option that allows very small holddown times for key rollover
469 # debug option that allows very small holddown times for key rollover,
470 # otherwise the RFC mandates probe intervals must be at least 1 hour.
462471 # permit-small-holddown: no
463472
464473 # the amount of memory to use for the key cache.
0 .TH "libunbound" "3" "Mar 2, 2016" "NLnet Labs" "unbound 1.5.8"
0 .TH "libunbound" "3" "Jun 9, 2016" "NLnet Labs" "unbound 1.5.9"
11 .\"
22 .\" libunbound.3 -- unbound library functions manual
33 .\"
4242 .B ub_ctx_zone_remove,
4343 .B ub_ctx_data_add,
4444 .B ub_ctx_data_remove
45 \- Unbound DNS validating resolver 1.5.8 functions.
45 \- Unbound DNS validating resolver 1.5.9 functions.
4646 .SH "SYNOPSIS"
4747 .B #include <unbound.h>
4848 .LP
0 .TH "unbound-anchor" "8" "Mar 2, 2016" "NLnet Labs" "unbound 1.5.8"
0 .TH "unbound-anchor" "8" "Jun 9, 2016" "NLnet Labs" "unbound 1.5.9"
11 .\"
22 .\" unbound-anchor.8 -- unbound anchor maintenance utility manual
33 .\"
0 .TH "unbound-checkconf" "8" "Mar 2, 2016" "NLnet Labs" "unbound 1.5.8"
0 .TH "unbound-checkconf" "8" "Jun 9, 2016" "NLnet Labs" "unbound 1.5.9"
11 .\"
22 .\" unbound-checkconf.8 -- unbound configuration checker manual
33 .\"
0 .TH "unbound-control" "8" "Mar 2, 2016" "NLnet Labs" "unbound 1.5.8"
0 .TH "unbound-control" "8" "Jun 9, 2016" "NLnet Labs" "unbound 1.5.9"
11 .\"
22 .\" unbound-control.8 -- unbound remote control manual
33 .\"
0 .TH "unbound\-host" "1" "Mar 2, 2016" "NLnet Labs" "unbound 1.5.8"
0 .TH "unbound\-host" "1" "Jun 9, 2016" "NLnet Labs" "unbound 1.5.9"
11 .\"
22 .\" unbound-host.1 -- unbound DNS lookup utility
33 .\"
0 .TH "unbound" "8" "Mar 2, 2016" "NLnet Labs" "unbound 1.5.8"
0 .TH "unbound" "8" "Jun 9, 2016" "NLnet Labs" "unbound 1.5.9"
11 .\"
22 .\" unbound.8 -- unbound manual
33 .\"
88 .\"
99 .SH "NAME"
1010 .B unbound
11 \- Unbound DNS validating resolver 1.5.8.
11 \- Unbound DNS validating resolver 1.5.9.
1212 .SH "SYNOPSIS"
1313 .B unbound
1414 .RB [ \-h ]
0 .TH "unbound.conf" "5" "Mar 2, 2016" "NLnet Labs" "unbound 1.5.8"
0 .TH "unbound.conf" "5" "Jun 9, 2016" "NLnet Labs" "unbound 1.5.9"
11 .\"
22 .\" unbound.conf.5 -- unbound.conf manual
33 .\"
276276 provides service on. This option needs unbound to be started with root
277277 permissions on some systems. The option uses IP_BINDANY on FreeBSD systems.
278278 .TP
279 .B ip\-freebind: \fI<yes or no>
280 If yes, then use IP_FREEBIND socket option on sockets where unbound
281 is listening to incoming traffic. Default no. Allows you to bind to
282 IP addresses that are nonlocal or do not exist, like when the network
283 interface or IP adress is down. Exists only on Linux, where the similar
284 ip\-transparent option is also available.
285 .TP
279286 .B rrset\-cache\-size: \fI<number>
280287 Number of bytes size of the RRset cache. Default is 4 megabytes.
281288 A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
569576 IP address lookups), and thus may be incompatible with this. To try to avoid
570577 this only DNSSEC-secure nxdomains are used, because the old software does not
571578 have DNSSEC. Default is off.
579 Currently, draft\-ietf\-dnsop\-nxdomain\-cut promotes this technique.
572580 .TP
573581 .B harden\-referral\-path: \fI<yes or no>
574582 Harden the referral path by performing additional queries for
672680 protocol RFCs mandate these sections, and the additional content could
673681 be of use and save roundtrips for clients.
674682 .TP
683 .B disable-dnssec-lame-check: \fI<yes or no>
684 If true, disables the DNSSEC lameness check in the iterator. This check
685 sees if RRSIGs are present in the answer, when dnssec is expected,
686 and retries another authority if RRSIGs are unexpectedly missing.
687 The validator will insist in RRSIGs for DNSSEC signed domains regardless
688 of this setting, if a trust anchor is loaded.
689 .TP
675690 .B module\-config: \fI<"module names">
676691 Module configuration, a list of module names separated by spaces, surround
677692 the string with quotes (""). The modules can be validator, iterator.
690705 The probes are several times per month, thus the machine must be online
691706 frequently. The initial file can be one with contents as described in
692707 \fBtrust\-anchor\-file\fR. The file is written to when the anchor is updated,
693 so the unbound user must have write permission.
708 so the unbound user must have write permission. Write permission to the file,
709 but also to the directory it is in (to create a temporary file, which is
710 necessary to deal with filesystem full events).
694711 .TP
695712 .B trust\-anchor: \fI<"Resource Record">
696713 A DS or DNSKEY RR for a key to use for validation. Multiple entries can be
293293 uint8_t* dname;
294294 size_t dname_len;
295295 for(s = cfg->stubs; s; s = s->next) {
296 if(!s->name) continue;
296297 dname = sldns_str2wire_dname(s->name, &dname_len);
297298 if(!dname) {
298299 log_err("cannot parse stub name '%s'", s->name);
151151 if(!ah(dp, "I.ROOT-SERVERS.NET.", "2001:7fe::53")) goto failed;
152152 if(!ah(dp, "J.ROOT-SERVERS.NET.", "2001:503:c27::2:30")) goto failed;
153153 if(!ah(dp, "K.ROOT-SERVERS.NET.", "2001:7fd::1")) goto failed;
154 if(!ah(dp, "L.ROOT-SERVERS.NET.", "2001:500:3::42")) goto failed;
154 if(!ah(dp, "L.ROOT-SERVERS.NET.", "2001:500:9f::42")) goto failed;
155155 if(!ah(dp, "M.ROOT-SERVERS.NET.", "2001:dc3::35")) goto failed;
156156 }
157157 return dp;
589589 return 1;
590590 }
591591
592 int
593 iter_indicates_dnssec_fwd(struct module_env* env, struct query_info *qinfo)
594 {
595 struct trust_anchor* a;
596 if(!env || !env->anchors || !qinfo || !qinfo->qname)
597 return 0;
598 /* a trust anchor exists above the name? */
599 if((a=anchors_lookup(env->anchors, qinfo->qname, qinfo->qname_len,
600 qinfo->qclass))) {
601 if(a->numDS == 0 && a->numDNSKEY == 0) {
602 /* insecure trust point */
603 lock_basic_unlock(&a->lock);
604 return 0;
605 }
606 lock_basic_unlock(&a->lock);
607 return 1;
608 }
609 /* no trust anchor above it. */
610 return 0;
611 }
612
592613 int
593614 iter_indicates_dnssec(struct module_env* env, struct delegpt* dp,
594615 struct dns_msg* msg, uint16_t dclass)
173173 struct delegpt* dp);
174174
175175 /**
176 * See if qname has DNSSEC needs in the forwarding case. This is true if
177 * there is a trust anchor above it. Whether there is an insecure delegation
178 * to the data is unknown, but CD-retry is needed.
179 * @param env: environment with anchors.
180 * @param qinfo: query name and class.
181 * @return true if trust anchor above qname, false if no anchor or insecure
182 * point above qname.
183 */
184 int iter_indicates_dnssec_fwd(struct module_env* env,
185 struct query_info *qinfo);
186
187 /**
176188 * See if delegation is expected to have DNSSEC information (RRSIGs) in
177189 * its answers, or not. Inspects delegation point (name), trust anchors,
178190 * and delegation message (DS RRset) to determine this.
8181 log_err("iterator: could not apply configuration settings.");
8282 return 0;
8383 }
84 if(env->cfg->qname_minimisation) {
85 uint8_t dname[LDNS_MAX_DOMAINLEN+1];
86 size_t len = sizeof(dname);
87 if(sldns_str2wire_dname_buf("ip6.arpa.", dname, &len) != 0) {
88 log_err("ip6.arpa. parse error");
89 return 0;
90 }
91 iter_env->ip6arpa_dname = (uint8_t*)malloc(len);
92 if(!iter_env->ip6arpa_dname) {
93 log_err("malloc failure");
94 return 0;
95 }
96 memcpy(iter_env->ip6arpa_dname, dname, len);
97 }
9884
9985 return 1;
10086 }
116102 if(!env || !env->modinfo[id])
117103 return;
118104 iter_env = (struct iter_env*)env->modinfo[id];
119 free(iter_env->ip6arpa_dname);
120105 free(iter_env->target_fetch_policy);
121106 priv_delete(iter_env->priv);
122107 donotq_delete(iter_env->donotq);
161146 /* Start with the (current) qname. */
162147 iq->qchase = qstate->qinfo;
163148 outbound_list_init(&iq->outlist);
149 iq->minimise_count = 0;
164150 if (qstate->env->cfg->qname_minimisation)
165151 iq->minimisation_state = INIT_MINIMISE_STATE;
166152 else
17991785 int tf_policy;
18001786 struct delegpt_addr* target;
18011787 struct outbound_entry* outq;
1788 /* EDNS options to set on outgoing packet */
1789 struct edns_option* opt_list = NULL;
18021790
18031791 /* NOTE: a request will encounter this state for each target it
18041792 * needs to send a query to. That is, at least one per referral,
20081996 }
20091997
20101998 if(iq->minimisation_state == INIT_MINIMISE_STATE) {
2011 /* (Re)set qinfo_out to (new) delegation point, except
2012 * when qinfo_out is already a subdomain of dp. This happens
2013 * when resolving ip6.arpa dnames. */
1999 /* (Re)set qinfo_out to (new) delegation point, except when
2000 * qinfo_out is already a subdomain of dp. This happens when
2001 * increasing by more than one label at once (QNAMEs with more
2002 * than MAX_MINIMISE_COUNT labels). */
20142003 if(!(iq->qinfo_out.qname_len
20152004 && dname_subdomain_c(iq->qchase.qname,
20162005 iq->qinfo_out.qname)
20202009 iq->qinfo_out.qname_len = iq->dp->namelen;
20212010 iq->qinfo_out.qtype = LDNS_RR_TYPE_NS;
20222011 iq->qinfo_out.qclass = iq->qchase.qclass;
2012 iq->minimise_count = 0;
20232013 }
20242014
20252015 iq->minimisation_state = MINIMISE_STATE;
20262016 }
20272017 if(iq->minimisation_state == MINIMISE_STATE) {
2028 int labdiff = dname_count_labels(iq->qchase.qname) -
2018 int qchaselabs = dname_count_labels(iq->qchase.qname);
2019 int labdiff = qchaselabs -
20292020 dname_count_labels(iq->qinfo_out.qname);
20302021
20312022 iq->qinfo_out.qname = iq->qchase.qname;
20322023 iq->qinfo_out.qname_len = iq->qchase.qname_len;
2033
2034 /* Special treatment for ip6.arpa lookups.
2035 * Reverse IPv6 dname has 34 labels, increment the IP part
2036 * (usually first 32 labels) by 8 labels (7 more than the
2037 * default 1 label increment). */
2038 if(labdiff <= 32 &&
2039 dname_subdomain_c(iq->qchase.qname, ie->ip6arpa_dname)) {
2040 labdiff -= 7;
2041 /* Small chance of zone cut after first label. Stop
2042 * minimising */
2043 if(labdiff <= 1)
2044 labdiff = 0;
2024 iq->minimise_count++;
2025
2026 /* Limit number of iterations for QNAMEs with more
2027 * than MAX_MINIMISE_COUNT labels. Send first MINIMISE_ONE_LAB
2028 * labels of QNAME always individually.
2029 */
2030 if(qchaselabs > MAX_MINIMISE_COUNT && labdiff > 1 &&
2031 iq->minimise_count > MINIMISE_ONE_LAB) {
2032 if(iq->minimise_count < MAX_MINIMISE_COUNT) {
2033 int multilabs = qchaselabs - 1 -
2034 MINIMISE_ONE_LAB;
2035 int extralabs = multilabs /
2036 MINIMISE_MULTIPLE_LABS;
2037
2038 if (MAX_MINIMISE_COUNT - iq->minimise_count >=
2039 multilabs % MINIMISE_MULTIPLE_LABS)
2040 /* Default behaviour is to add 1 label
2041 * every iteration. Therefore, decrement
2042 * the extralabs by 1 */
2043 extralabs--;
2044 if (extralabs < labdiff)
2045 labdiff -= extralabs;
2046 else
2047 labdiff = 1;
2048 }
2049 /* Last minimised iteration, send all labels with
2050 * QTYPE=NS */
2051 else
2052 labdiff = 1;
20452053 }
20462054
20472055 if(labdiff > 1) {
20672075 * cached as NOERROR/NODATA */
20682076 return 1;
20692077 }
2070
20712078 }
20722079 if(iq->minimisation_state == SKIP_MINIMISE_STATE)
20732080 /* Do not increment qname, continue incrementing next
20892096 outq = (*qstate->env->send_query)(
20902097 iq->qinfo_out.qname, iq->qinfo_out.qname_len,
20912098 iq->qinfo_out.qtype, iq->qinfo_out.qclass,
2092 iq->chase_flags | (iq->chase_to_rd?BIT_RD:0), EDNS_DO|BIT_CD,
2099 iq->chase_flags | (iq->chase_to_rd?BIT_RD:0),
2100 /* unset CD if to forwarder(RD set) and not dnssec retry
2101 * (blacklist nonempty) and no trust-anchors are configured
2102 * above the qname or on the first attempt when dnssec is on */
2103 EDNS_DO| ((iq->chase_to_rd||(iq->chase_flags&BIT_RD)!=0)&&
2104 !qstate->blacklist&&(!iter_indicates_dnssec_fwd(qstate->env,
2105 &iq->qinfo_out)||target->attempts==1)?0:BIT_CD),
20932106 iq->dnssec_expected, iq->caps_fallback || is_caps_whitelisted(
2094 ie, iq), &target->addr, target->addrlen, iq->dp->name,
2095 iq->dp->namelen, qstate);
2107 ie, iq), opt_list, &target->addr, target->addrlen,
2108 iq->dp->name, iq->dp->namelen, qstate);
20962109 if(!outq) {
20972110 log_addr(VERB_DETAIL, "error sending query to auth server",
20982111 &target->addr, target->addrlen);
21602173 * differently. No queries should be sent elsewhere */
21612174 type = RESPONSE_TYPE_ANSWER;
21622175 }
2163 if(iq->dnssec_expected && !iq->dnssec_lame_query &&
2176 if(!qstate->env->cfg->disable_dnssec_lame_check && iq->dnssec_expected
2177 && !iq->dnssec_lame_query &&
21642178 !(iq->chase_flags&BIT_RD)
2179 && iq->sent_count < DNSSEC_LAME_DETECT_COUNT
21652180 && type != RESPONSE_TYPE_LAME
21662181 && type != RESPONSE_TYPE_REC_LAME
21672182 && type != RESPONSE_TYPE_THROWAWAY
22492264 if(iq->minimisation_state != DONOT_MINIMISE_STATE) {
22502265 /* Best effort qname-minimisation.
22512266 * Stop minimising and send full query when RCODE
2252 * is not NOERROR */
2267 * is not NOERROR. */
22532268 if(FLAGS_GET_RCODE(iq->response->rep->flags) !=
22542269 LDNS_RCODE_NOERROR)
22552270 iq->minimisation_state = DONOT_MINIMISE_STATE;
2271 if(FLAGS_GET_RCODE(iq->response->rep->flags) ==
2272 LDNS_RCODE_NXDOMAIN) {
2273 /* Stop resolving when NXDOMAIN is DNSSEC
2274 * signed. Based on assumption that namservers
2275 * serving signed zones do not return NXDOMAIN
2276 * for empty-non-terminals. */
2277 if(iq->dnssec_expected)
2278 return final_state(iq);
2279 /* Make subrequest to validate intermediate
2280 * NXDOMAIN if harden-below-nxdomain is
2281 * enabled. */
2282 if(qstate->env->cfg->harden_below_nxdomain) {
2283 struct module_qstate* subq = NULL;
2284 log_query_info(VERB_QUERY,
2285 "schedule NXDOMAIN validation:",
2286 &iq->response->qinfo);
2287 if(!generate_sub_request(
2288 iq->response->qinfo.qname,
2289 iq->response->qinfo.qname_len,
2290 iq->response->qinfo.qtype,
2291 iq->response->qinfo.qclass,
2292 qstate, id, iq,
2293 INIT_REQUEST_STATE,
2294 FINISHED_STATE, &subq, 1))
2295 verbose(VERB_ALGO,
2296 "could not validate NXDOMAIN "
2297 "response");
2298 }
2299 }
22562300 return next_state(iq, QUERYTARGETS_STATE);
22572301 }
22582302 return final_state(iq);
30813125 goto handle_it;
30823126 }
30833127 /* edns is not examined, but removed from message to help cache */
3084 if(parse_extract_edns(prs, &edns) != LDNS_RCODE_NOERROR)
3128 if(parse_extract_edns(prs, &edns, qstate->env->scratch) !=
3129 LDNS_RCODE_NOERROR)
30853130 goto handle_it;
30863131 /* remove CD-bit, we asked for in case we handle validation ourself */
30873132 prs->flags &= ~BIT_CD;
6060 #define MAX_REFERRAL_COUNT 130
6161 /** max number of queries-sent-out. Make sure large NS set does not loop */
6262 #define MAX_SENT_COUNT 32
63 /** max number of queries for which to perform dnsseclameness detection,
64 * (rrsigs misssing detection) after that, just pick up that response */
65 #define DNSSEC_LAME_DETECT_COUNT 4
66 /**
67 * max number of QNAME minimisation iterations. Limits number of queries for
68 * QNAMEs with a lot of labels.
69 */
70 #define MAX_MINIMISE_COUNT 10
71 /**
72 * number of labels from QNAME that are always send individually when using
73 * QNAME minimisation, even when the number of labels of the QNAME is bigger
74 * tham MAX_MINIMISE_COUNT */
75 #define MINIMISE_ONE_LAB 4
76 #define MINIMISE_MULTIPLE_LABS (MAX_MINIMISE_COUNT - MINIMISE_ONE_LAB)
6377 /** at what query-sent-count to stop target fetch policy */
6478 #define TARGET_FETCH_STOP 3
6579 /** how nice is a server without further information, in msec
348362 /** list of pending queries to authoritative servers. */
349363 struct outbound_list outlist;
350364
351 /** QNAME minimisation state */
365 /** QNAME minimisation state, RFC7816 */
352366 enum minimisation_state minimisation_state;
353367
354368 /**
356370 * when qname minimisation is enabled.
357371 */
358372 struct query_info qinfo_out;
373
374 /**
375 * Count number of QNAME minisation iterations. Used to limit number of
376 * outgoing queries when QNAME minimisation is enabled.
377 */
378 int minimise_count;
359379 };
360380
361381 /**
4848 struct libworker;
4949 struct tube;
5050 struct sldns_buffer;
51 struct event_base;
51 struct ub_event_base;
5252
5353 /**
5454 * The context structure
113113 struct ub_randstate* seed_rnd;
114114
115115 /** event base for event oriented interface */
116 struct event_base* event_base;
116 struct ub_event_base* event_base;
117117 /** libworker for event based interface */
118118 struct libworker* event_worker;
119119
5656 #include "util/random.h"
5757 #include "util/net_help.h"
5858 #include "util/tube.h"
59 #include "util/ub_event.h"
5960 #include "services/modstack.h"
6061 #include "services/localzone.h"
6162 #include "services/cache/infra.h"
169170 }
170171
171172 struct ub_ctx*
172 ub_ctx_create_event(struct event_base* eb)
173 ub_ctx_create_ub_event(struct ub_event_base* ueb)
173174 {
174175 struct ub_ctx* ctx = ub_ctx_create_nopipe();
175176 if(!ctx)
178179 ctx->created_bg = 0;
179180 ctx->dothread = 1; /* the processing is in the same process,
180181 makes ub_cancel and ub_ctx_delete do the right thing */
181 ctx->event_base = eb;
182 ctx->event_base = ueb;
183 return ctx;
184 }
185
186 struct ub_ctx*
187 ub_ctx_create_event(struct event_base* eb)
188 {
189 struct ub_ctx* ctx = ub_ctx_create_nopipe();
190 if(!ctx)
191 return NULL;
192 /* no pipes, but we have the locks to make sure everything works */
193 ctx->created_bg = 0;
194 ctx->dothread = 1; /* the processing is in the same process,
195 makes ub_cancel and ub_ctx_delete do the right thing */
196 ctx->event_base = ub_libevent_event_base(eb);
197 if (!ctx->event_base) {
198 ub_ctx_delete(ctx);
199 return NULL;
200 }
182201 return ctx;
183202 }
184203
696715 return UB_INITFAIL;
697716 }
698717 }
718
719 /* set time in case answer comes from cache */
720 ub_comm_base_now(ctx->event_worker->base);
699721
700722 /* create new ctx_query and attempt to add to the list */
701723 q = context_new(ctx, name, rrtype, rrclass, (ub_callback_t)callback,
13221344
13231345 int
13241346 ub_ctx_set_event(struct ub_ctx* ctx, struct event_base* base) {
1347 struct ub_event_base* new_base;
1348
13251349 if (!ctx || !ctx->event_base || !base) {
13261350 return UB_INITFAIL;
13271351 }
1328 if (ctx->event_base == base) {
1352 if (ub_libevent_get_event_base(ctx->event_base) == base) {
13291353 /* already set */
13301354 return UB_NOERROR;
13311355 }
13341358 /* destroy the current worker - safe to pass in NULL */
13351359 libworker_delete_event(ctx->event_worker);
13361360 ctx->event_worker = NULL;
1337 ctx->event_base = base;
1361 new_base = ub_libevent_event_base(base);
1362 if (new_base)
1363 ctx->event_base = new_base;
13381364 ctx->created_bg = 0;
13391365 ctx->dothread = 1;
13401366 lock_basic_unlock(&ctx->cfglock);
1341 return UB_NOERROR;
1342 }
1367 return new_base ? UB_NOERROR : UB_INITFAIL;
1368 }
118118
119119 /** setup fresh libworker struct */
120120 static struct libworker*
121 libworker_setup(struct ub_ctx* ctx, int is_bg, struct event_base* eb)
121 libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb)
122122 {
123123 unsigned int seed;
124124 struct libworker* w = (struct libworker*)calloc(1, sizeof(*w));
257257 }
258258
259259 struct libworker* libworker_create_event(struct ub_ctx* ctx,
260 struct event_base* eb)
260 struct ub_event_base* eb)
261261 {
262262 return libworker_setup(ctx, 0, eb);
263263 }
580580 edns->ext_rcode = 0;
581581 edns->edns_version = 0;
582582 edns->bits = EDNS_DO;
583 edns->opt_list = NULL;
583584 if(sldns_buffer_capacity(w->back->udp_buff) < 65535)
584585 edns->udp_size = (uint16_t)sldns_buffer_capacity(
585586 w->back->udp_buff);
821822
822823 struct outbound_entry* libworker_send_query(uint8_t* qname, size_t qnamelen,
823824 uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec,
824 int want_dnssec, int nocaps, struct sockaddr_storage* addr,
825 socklen_t addrlen, uint8_t* zone, size_t zonelen,
826 struct module_qstate* q)
825 int want_dnssec, int nocaps, struct edns_option* opt_list,
826 struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
827 size_t zonelen, struct module_qstate* q)
827828 {
828829 struct libworker* w = (struct libworker*)q->env->worker;
829830 struct outbound_entry* e = (struct outbound_entry*)regional_alloc(
833834 e->qstate = q;
834835 e->qsent = outnet_serviced_query(w->back, qname,
835836 qnamelen, qtype, qclass, flags, dnssec, want_dnssec, nocaps,
836 q->env->cfg->tcp_upstream, q->env->cfg->ssl_upstream, addr,
837 addrlen, zone, zonelen, libworker_handle_service_reply, e,
838 w->back->udp_buff);
837 q->env->cfg->tcp_upstream, q->env->cfg->ssl_upstream, opt_list,
838 addr, addrlen, zone, zonelen, libworker_handle_service_reply,
839 e, w->back->udp_buff);
839840 if(!e->qsent) {
840841 return NULL;
841842 }
954955 size_t ATTR_UNUSED(qnamelen), uint16_t ATTR_UNUSED(qtype),
955956 uint16_t ATTR_UNUSED(qclass), uint16_t ATTR_UNUSED(flags),
956957 int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
957 int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
958 int ATTR_UNUSED(nocaps), struct edns_option* ATTR_UNUSED(opt_list),
959 struct sockaddr_storage* ATTR_UNUSED(addr),
958960 socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
959961 size_t ATTR_UNUSED(zonelen), struct module_qstate* ATTR_UNUSED(q))
960962 {
5757 struct regional;
5858 struct tube;
5959 struct sldns_buffer;
60 struct event_base;
60 struct ub_event_base;
6161
6262 /**
6363 * The library-worker status structure
114114 * @return new worker or NULL.
115115 */
116116 struct libworker* libworker_create_event(struct ub_ctx* ctx,
117 struct event_base* eb);
117 struct ub_event_base* eb);
118118
119119 /**
120120 * Attach context_query to mesh for callback in event-driven setup.
944944 :param idnname: (unicode string) IDN name
945945 :returns: (string) domain name
946946 """
947 return '.'.join([encodings.idna.ToASCII(a) for a in idnname.split('.')])
947 return '.'.join([encodings.idna.ToASCII(a) if a else '' for a in idnname.split('.')])
948948
949949 def dname2idn(name):
950950 """Converts canonic domain name in IDN format to unicode string
55 ub_ctx_config
66 ub_ctx_create
77 ub_ctx_create_event
8 ub_ctx_create_ub_event
89 ub_ctx_data_add
910 ub_ctx_data_remove
1011 ub_ctx_debuglevel
3535 /**
3636 * \file
3737 *
38 * This file contains the unbound interface for use with libevent.
39 * You have to use the same libevent that unbound was compiled with,
40 * otherwise it wouldn't work, the event and event_base structures would
41 * be different. If unbound is compiled without libevent support then
42 * this header file is not supposed to be installed on the system.
43 *
44 * Use ub_ctx_create_event_base() to create an unbound context that uses
45 * the event base that you have made. Then, use the ub_resolve_event call
46 * to add DNS resolve queries to the context. Those then run when you
47 * call event_dispatch() on your event_base, and when they are done you
48 * get a function callback.
38 * This file contains the unbound interface for use with user defined
39 * pluggable event bases.
40 *
41 * Use ub_ctx_create_event_ub_base() to create an unbound context that uses
42 * the user provided event base API. Then, use the ub_resolve_event call
43 * to add DNS resolve queries to the context. Those then run whith the
44 * provided event_base, and when they are done you get a function callback.
4945 *
5046 * This method does not fork another process or create a thread, the effort
51 * is done by the unbound state machines that are connected to the event_base.
47 * is done by the unbound state machines that are connected to the event base.
48 *
49 * It is also possible to provide a libevent based event base by using
50 * ub_ctx_create_event_base(). But you have to use the same libevent that
51 * unbound was compiled with, otherwise it wouldn't work, the event and
52 * event_base structures would be different.
5253 */
5354 #ifndef _UB_UNBOUND_EVENT_H
5455 #define _UB_UNBOUND_EVENT_H
6162 struct ub_result;
6263 struct event_base;
6364
65 /** event timeout */
66 #define UB_EV_TIMEOUT 0x01
67 /** event fd readable */
68 #define UB_EV_READ 0x02
69 /** event fd writable */
70 #define UB_EV_WRITE 0x04
71 /** event signal */
72 #define UB_EV_SIGNAL 0x08
73 /** event must persist */
74 #define UB_EV_PERSIST 0x10
75
76 /** magic number to identify this version of the pluggable event api */
77 #define UB_EVENT_MAGIC 0x44d74d78
78
79 struct ub_event;
80 struct ub_event_base;
81 struct timeval;
82
83 /**
84 * The Virtual Method Table for and ub_event_base "object"
85 */
86 struct ub_event_base_vmt {
87 /** Destructor for the ub_event_base object,
88 * (not called by libunbound) */
89 void (*free)(struct ub_event_base*);
90 /** Run the event loop
91 * (not called by libunbound when using ub_resolve_event) */
92 int (*dispatch)(struct ub_event_base*);
93 /** Exit the given event loop */
94 int (*loopexit)(struct ub_event_base*, struct timeval*);
95 /** Instantiate a new ub_event associated with this event base */
96 struct ub_event* (*new_event)(struct ub_event_base*,
97 int fd, short bits, void (*cb)(int, short, void*), void* arg);
98 /** Instantiate a new signal associated with this event base,
99 * (not called by libunbound) */
100 struct ub_event* (*new_signal)(struct ub_event_base*, int fd,
101 void (*cb)(int, short, void*), void* arg);
102 /** Create a new ub_event associated with the given wsaevent,
103 * (not called by libunbound) */
104 struct ub_event* (*winsock_register_wsaevent)(struct ub_event_base*,
105 void* wsaevent, void (*cb)(int, short, void*), void* arg);
106 };
107
108 /**
109 * A user defined pluggable event base is registered by providing a
110 * ub_event_base "object" with the ub_ctx_create_ub_event() function.
111 * The magic number must be correct and the Virtual Method Table must be
112 * fully equipped providing the event base API to be used by libunbound.
113 */
114 struct ub_event_base {
115 /** magic must be UB_EVENT_MAGIC (0x44d74d78) */
116 unsigned long magic;
117 /** Virtual Method Table for ub_event_base */
118 struct ub_event_base_vmt* vmt;
119 };
120
121 /**
122 * The Virtual Method Table for and ub_event "object"
123 */
124 struct ub_event_vmt {
125 /** Add event bits for this event to fire on.
126 * The event will be deactivated before this function is called. */
127 void (*add_bits)(struct ub_event*, short);
128 /** Configure the event so it will not longer fire on given bits
129 * The event will be deactivated before this function is called. */
130 void (*del_bits)(struct ub_event*, short);
131 /** Change or set the file descriptor on the event
132 * The event will be deactivated before this function is called. */
133 void (*set_fd)(struct ub_event*, int);
134 /** Destructor for the ub_event object */
135 void (*free)(struct ub_event*);
136 /** Activate the event. The given timeval is an timeout value. */
137 int (*add)(struct ub_event*, struct timeval*);
138 /** Deactivate the event */
139 int (*del)(struct ub_event*);
140 /** Reconfigure and activate a timeout event */
141 int (*add_timer)(struct ub_event*, struct ub_event_base*,
142 void (*cb)(int, short, void*), void* arg, struct timeval*);
143 /** Deactivate the timeout event */
144 int (*del_timer)(struct ub_event*);
145 /** Activate a signal event (not called by libunbound). */
146 int (*add_signal)(struct ub_event*, struct timeval*);
147 /** Deactivate a signal event (not called by libunbound). */
148 int (*del_signal)(struct ub_event*);
149 /** Destructor for a ub_event associated with a wsaevent,
150 * (not called by libunbound)
151 */
152 void (*winsock_unregister_wsaevent)(struct ub_event* ev);
153 /** Libunbound will signal the eventloop when a TCP windows socket
154 * will block on next read or write (given by the eventbits), to work
155 * around edge trigger event behaviour of select on windows with TCP.
156 */
157 void (*winsock_tcp_wouldblock)(struct ub_event*, int eventbit);
158 };
159
160 /**
161 * An "object" comprising a user defined pluggable event.
162 * The magic number must be correct and the Virtual Method Table must be
163 * fully equipped providing the ub_event API to be used by libunbound.
164 */
165 struct ub_event {
166 /** magic must be UB_EVENT_MAGIC (0x44d74d78) */
167 unsigned long magic;
168 /** Virtual Method Table for ub_event */
169 struct ub_event_vmt* vmt;
170 };
171
64172 typedef void (*ub_event_callback_t)(void*, int, void*, int, int, char*);
65173
66174 /**
67175 * Create a resolving and validation context.
68176 * The information from /etc/resolv.conf and /etc/hosts is not utilised by
69177 * default. Use ub_ctx_resolvconf and ub_ctx_hosts to read them.
178 * @param base: the pluggable event base that the caller has created.
179 * The unbound context uses this event base.
180 * @return a new context. default initialisation.
181 * returns NULL on error.
182 * You must use ub_resolve_event with this context.
183 * Do not call ub_ctx_async, ub_poll, ub_wait, ub_process, this is all done
184 * with the event_base. Setup the options you like with the other functions.
185 */
186 struct ub_ctx* ub_ctx_create_ub_event(struct ub_event_base* base);
187
188 /**
189 * Create a resolving and validation context.
190 * The information from /etc/resolv.conf and /etc/hosts is not utilised by
191 * default. Use ub_ctx_resolvconf and ub_ctx_hosts to read them.
192 * You have to use the same libevent that unbound was compiled with,
193 * otherwise it wouldn't work, the event and event_base structures would
194 * be different.
70195 * @param base: the event base that the caller has created. The unbound
71196 * context uses this event base.
72197 * @return a new context. default initialisation.
78203 struct ub_ctx* ub_ctx_create_event(struct event_base* base);
79204
80205 /**
81 * Set a new event_base on a context created with ub_ctx_create_event.
206 * Set a new libevent event_base on a context created with ub_ctx_create_event.
207 * You have to use the same libevent that unbound was compiled with,
208 * otherwise it wouldn't work, the event and event_base structures would
209 * be different.
82210 * Any outbound queries will be canceled.
83211 * @param ctx the ub_ctx to update. Must have been created with ub_ctx_create_event
84212 * @param base the new event_base to attach to the ctx
4747 struct comm_point;
4848 struct module_qstate;
4949 struct tube;
50 struct edns_option;
5051
5152 /**
5253 * Worker service routine to send serviced queries to authoritative servers.
5859 * @param dnssec: if set, EDNS record will have DO bit set.
5960 * @param want_dnssec: signatures needed.
6061 * @param nocaps: ignore capsforid(if in config), do not perturb qname.
62 * @param opt_list: EDNS options on outgoing packet.
6163 * @param addr: where to.
6264 * @param addrlen: length of addr.
6365 * @param zone: delegation point name.
6870 */
6971 struct outbound_entry* libworker_send_query(uint8_t* qname, size_t qnamelen,
7072 uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec,
71 int want_dnssec, int nocaps, struct sockaddr_storage* addr,
72 socklen_t addrlen, uint8_t* zone, size_t zonelen,
73 struct module_qstate* q);
73 int want_dnssec, int nocaps, struct edns_option* opt_list,
74 struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
75 size_t zonelen, struct module_qstate* q);
7476
7577 /** process incoming replies from the network */
7678 int libworker_handle_reply(struct comm_point* c, void* arg, int error,
113115 * @param dnssec: if set, EDNS record will have DO bit set.
114116 * @param want_dnssec: signatures needed.
115117 * @param nocaps: ignore capsforid(if in config), do not perturb qname.
118 * @param opt_list: EDNS options on outgoing packet.
116119 * @param addr: where to.
117120 * @param addrlen: length of addr.
118121 * @param zone: wireformat dname of the zone.
123126 */
124127 struct outbound_entry* worker_send_query(uint8_t* qname, size_t qnamelen,
125128 uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec,
126 int want_dnssec, int nocaps, struct sockaddr_storage* addr,
127 socklen_t addrlen, uint8_t* zone, size_t zonelen,
128 struct module_qstate* q);
129 int want_dnssec, int nocaps, struct edns_option* opt_list,
130 struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
131 size_t zonelen, struct module_qstate* q);
129132
130133 /**
131134 * process control messages from the main thread. Frees the control
140140 #endif
141141 Py_SetProgramName(progname);
142142 Py_NoSiteFlag = 1;
143 #if PY_MAJOR_VERSION >= 3
144 PyImport_AppendInittab(SWIG_name, (void*)SWIG_init);
145 #endif
143146 Py_Initialize();
144147 PyEval_InitThreads();
145148 SWIG_init();
128128 return 0;
129129 }
130130 /* edns is not examined, but removed from message to help cache */
131 if(parse_extract_edns(prs, &edns) != LDNS_RCODE_NOERROR)
131 if(parse_extract_edns(prs, &edns, qstate->env->scratch) !=
132 LDNS_RCODE_NOERROR)
132133 return 0;
133134
134135 /* remove CD-bit, we asked for in case we handle validation ourself */
794794 dname_remove_label(&k.qname, &k.qname_len);
795795 h = query_info_hash(&k, flags);
796796 e = slabhash_lookup(env->msg_cache, h, &k, 0);
797 if(!e && k.qtype != LDNS_RR_TYPE_NS &&
798 env->cfg->qname_minimisation) {
799 k.qtype = LDNS_RR_TYPE_NS;
800 h = query_info_hash(&k, flags);
801 e = slabhash_lookup(env->msg_cache, h, &k, 0);
802 }
797803 if(e) {
798804 struct reply_info* data = (struct reply_info*)e->data;
799805 struct dns_msg* msg;
809815 }
810816 lock_rw_unlock(&e->lock);
811817 }
818 k.qtype = qtype;
812819 }
813820
814821 /* fill common RR types for ANY response to avoid requery */
9595 int
9696 create_udp_sock(int family, int socktype, struct sockaddr* addr,
9797 socklen_t addrlen, int v6only, int* inuse, int* noproto,
98 int rcv, int snd, int listen, int* reuseport, int transparent)
98 int rcv, int snd, int listen, int* reuseport, int transparent,
99 int freebind)
99100 {
100101 int s;
101 #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_USE_MIN_MTU) || defined(IP_TRANSPARENT) || defined(IP_BINDANY)
102 #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_USE_MIN_MTU) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND)
102103 int on=1;
103104 #endif
104105 #ifdef IPV6_MTU
115116 #endif
116117 #if !defined(IP_TRANSPARENT) && !defined(IP_BINDANY)
117118 (void)transparent;
119 #endif
120 #if !defined(IP_FREEBIND)
121 (void)freebind;
118122 #endif
119123 if((s = socket(family, socktype, 0)) == -1) {
120124 *inuse = 0;
179183 #else
180184 (void)reuseport;
181185 #endif /* defined(SO_REUSEPORT) */
186 #ifdef IP_FREEBIND
187 if (freebind &&
188 setsockopt(s, IPPROTO_IP, IP_FREEBIND, (void*)&on,
189 (socklen_t)sizeof(on)) < 0) {
190 log_warn("setsockopt(.. IP_FREEBIND ..) failed: %s",
191 strerror(errno));
192 }
193 #endif /* IP_FREEBIND */
182194 #ifdef IP_TRANSPARENT
183195 if (transparent &&
184196 setsockopt(s, IPPROTO_IP, IP_TRANSPARENT, (void*)&on,
189201 #elif defined(IP_BINDANY)
190202 if (transparent &&
191203 setsockopt(s, (family==AF_INET6? IPPROTO_IPV6:IPPROTO_IP),
192 IP_BINDANY, (void*)&on, (socklen_t)sizeof(on)) < 0) {
193 log_warn("setsockopt(.. IP_BINDANY ..) failed: %s",
194 strerror(errno));
204 (family == AF_INET6? IPV6_BINDANY:IP_BINDANY),
205 (void*)&on, (socklen_t)sizeof(on)) < 0) {
206 log_warn("setsockopt(.. IP%s_BINDANY ..) failed: %s",
207 (family==AF_INET6?"V6":""), strerror(errno));
195208 }
196209 #endif /* IP_TRANSPARENT || IP_BINDANY */
197210 }
489502
490503 int
491504 create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
492 int* reuseport, int transparent, int mss)
505 int* reuseport, int transparent, int mss, int freebind)
493506 {
494507 int s;
495 #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT)
508 #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND)
496509 int on = 1;
497510 #endif
498 #ifndef IP_TRANSPARENT
511 #if !defined(IP_TRANSPARENT) && !defined(IP_BINDANY)
499512 (void)transparent;
513 #endif
514 #if !defined(IP_FREEBIND)
515 (void)freebind;
500516 #endif
501517 verbose_print_addr(addr);
502518 *noproto = 0;
552568 return -1;
553569 }
554570 #endif /* SO_REUSEADDR */
571 #ifdef IP_FREEBIND
572 if (freebind && setsockopt(s, IPPROTO_IP, IP_FREEBIND, (void*)&on,
573 (socklen_t)sizeof(on)) < 0) {
574 log_warn("setsockopt(.. IP_FREEBIND ..) failed: %s",
575 strerror(errno));
576 }
577 #endif /* IP_FREEBIND */
555578 #ifdef SO_REUSEPORT
556579 /* try to set SO_REUSEPORT so that incoming
557580 * connections are distributed evenly among the receiving threads.
598621 log_warn("setsockopt(.. IP_TRANSPARENT ..) failed: %s",
599622 strerror(errno));
600623 }
601 #endif /* IP_TRANSPARENT */
624 #elif defined(IP_BINDANY)
625 if (transparent &&
626 setsockopt(s, (addr->ai_family==AF_INET6? IPPROTO_IPV6:IPPROTO_IP),
627 (addr->ai_family == AF_INET6? IPV6_BINDANY:IP_BINDANY),
628 (void*)&on, (socklen_t)sizeof(on)) < 0) {
629 log_warn("setsockopt(.. IP%s_BINDANY ..) failed: %s",
630 (addr->ai_family==AF_INET6?"V6":""), strerror(errno));
631 }
632 #endif /* IP_TRANSPARENT || IP_BINDANY */
602633 if(bind(s, addr->ai_addr, addr->ai_addrlen) != 0) {
603634 #ifndef USE_WINSOCK
604635 /* detect freebsd jail with no ipv6 permission */
703734 static int
704735 make_sock(int stype, const char* ifname, const char* port,
705736 struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
706 int* reuseport, int transparent, int tcp_mss)
737 int* reuseport, int transparent, int tcp_mss, int freebind)
707738 {
708739 struct addrinfo *res = NULL;
709740 int r, s, inuse, noproto;
731762 s = create_udp_sock(res->ai_family, res->ai_socktype,
732763 (struct sockaddr*)res->ai_addr, res->ai_addrlen,
733764 v6only, &inuse, &noproto, (int)rcv, (int)snd, 1,
734 reuseport, transparent);
765 reuseport, transparent, freebind);
735766 if(s == -1 && inuse) {
736767 log_err("bind: address already in use");
737768 } else if(s == -1 && noproto && hints->ai_family == AF_INET6){
739770 }
740771 } else {
741772 s = create_tcp_accept_sock(res, v6only, &noproto, reuseport,
742 transparent, tcp_mss);
773 transparent, tcp_mss, freebind);
743774 if(s == -1 && noproto && hints->ai_family == AF_INET6){
744775 *noip6 = 1;
745776 }
752783 static int
753784 make_sock_port(int stype, const char* ifname, const char* port,
754785 struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
755 int* reuseport, int transparent, int tcp_mss)
786 int* reuseport, int transparent, int tcp_mss, int freebind)
756787 {
757788 char* s = strchr(ifname, '@');
758789 if(s) {
774805 (void)strlcpy(p, s+1, sizeof(p));
775806 p[strlen(s+1)]=0;
776807 return make_sock(stype, newif, p, hints, v6only, noip6,
777 rcv, snd, reuseport, transparent, tcp_mss);
808 rcv, snd, reuseport, transparent, tcp_mss, freebind);
778809 }
779810 return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd,
780 reuseport, transparent, tcp_mss);
811 reuseport, transparent, tcp_mss, freebind);
781812 }
782813
783814 /**
873904 * set to false on exit if reuseport failed due to no kernel support.
874905 * @param transparent: set IP_TRANSPARENT socket option.
875906 * @param tcp_mss: maximum segment size of tcp socket. default if zero.
907 * @param freebind: set IP_FREEBIND socket option.
876908 * @return: returns false on error.
877909 */
878910 static int
879911 ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
880912 struct addrinfo *hints, const char* port, struct listen_port** list,
881913 size_t rcv, size_t snd, int ssl_port, int* reuseport, int transparent,
882 int tcp_mss)
914 int tcp_mss, int freebind)
883915 {
884916 int s, noip6=0;
885917 if(!do_udp && !do_tcp)
887919 if(do_auto) {
888920 if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
889921 &noip6, rcv, snd, reuseport, transparent,
890 tcp_mss)) == -1) {
922 tcp_mss, freebind)) == -1) {
891923 if(noip6) {
892924 log_warn("IPv6 protocol not available");
893925 return 1;
915947 /* regular udp socket */
916948 if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
917949 &noip6, rcv, snd, reuseport, transparent,
918 tcp_mss)) == -1) {
950 tcp_mss, freebind)) == -1) {
919951 if(noip6) {
920952 log_warn("IPv6 protocol not available");
921953 return 1;
936968 atoi(strchr(ifname, '@')+1) == ssl_port) ||
937969 (!strchr(ifname, '@') && atoi(port) == ssl_port));
938970 if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1,
939 &noip6, 0, 0, reuseport, transparent, tcp_mss)) == -1) {
971 &noip6, 0, 0, reuseport, transparent, tcp_mss,
972 freebind)) == -1) {
940973 if(noip6) {
941974 /*log_warn("IPv6 protocol not available");*/
942975 return 1;
10941127 cfg->so_rcvbuf, cfg->so_sndbuf,
10951128 cfg->ssl_port, reuseport,
10961129 cfg->ip_transparent,
1097 cfg->tcp_mss)) {
1130 cfg->tcp_mss, cfg->ip_freebind)) {
10981131 listening_ports_free(list);
10991132 return NULL;
11001133 }
11071140 cfg->so_rcvbuf, cfg->so_sndbuf,
11081141 cfg->ssl_port, reuseport,
11091142 cfg->ip_transparent,
1110 cfg->tcp_mss)) {
1143 cfg->tcp_mss, cfg->ip_freebind)) {
11111144 listening_ports_free(list);
11121145 return NULL;
11131146 }
11221155 cfg->so_rcvbuf, cfg->so_sndbuf,
11231156 cfg->ssl_port, reuseport,
11241157 cfg->ip_transparent,
1125 cfg->tcp_mss)) {
1158 cfg->tcp_mss, cfg->ip_freebind)) {
11261159 listening_ports_free(list);
11271160 return NULL;
11281161 }
11351168 cfg->so_rcvbuf, cfg->so_sndbuf,
11361169 cfg->ssl_port, reuseport,
11371170 cfg->ip_transparent,
1138 cfg->tcp_mss)) {
1171 cfg->tcp_mss, cfg->ip_freebind)) {
11391172 listening_ports_free(list);
11401173 return NULL;
11411174 }
189189 * @param reuseport: if nonNULL and true, try to set SO_REUSEPORT on
190190 * listening UDP port. Set to false on return if it failed to do so.
191191 * @param transparent: set IP_TRANSPARENT socket option.
192 * @param freebind: set IP_FREEBIND socket option.
192193 * @return: the socket. -1 on error.
193194 */
194195 int create_udp_sock(int family, int socktype, struct sockaddr* addr,
195196 socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv,
196 int snd, int listen, int* reuseport, int transparent);
197 int snd, int listen, int* reuseport, int transparent, int freebind);
197198
198199 /**
199200 * Create and bind TCP listening socket
204205 * listening UDP port. Set to false on return if it failed to do so.
205206 * @param transparent: set IP_TRANSPARENT socket option.
206207 * @param mss: maximum segment size of the socket. if zero, leaves the default.
208 * @param freebind: set IP_FREEBIND socket option.
207209 * @return: the socket. -1 on error.
208210 */
209211 int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
210 int* reuseport, int transparent, int mss);
212 int* reuseport, int transparent, int mss, int freebind);
211213
212214 /**
213215 * Create and bind local listening socket
9393 lock_rw_destroy(&z->lock);
9494 regional_destroy(z->region);
9595 free(z->name);
96 free(z->taglist);
9697 free(z);
9798 }
9899
170171 {
171172 struct local_zone* z = local_zone_create(nm, len, labs, t, c);
172173 if(!z) {
174 free(nm);
173175 log_err("out of memory");
174176 return NULL;
175177 }
501503 lock_rw_unlock(&zones->lock);
502504 free(rr_name);
503505 r = lz_enter_rr_into_zone(z, rr);
506 lock_rw_unlock(&z->lock);
507 return r;
508 }
509
510 /** enter tagstring into zone */
511 static int
512 lz_enter_zone_tag(struct local_zones* zones, char* zname, uint8_t* list,
513 size_t len, uint16_t rr_class)
514 {
515 uint8_t dname[LDNS_MAX_DOMAINLEN+1];
516 size_t dname_len = sizeof(dname);
517 int dname_labs, r = 0;
518 struct local_zone* z;
519
520 if(sldns_str2wire_dname_buf(zname, dname, &dname_len) != 0) {
521 log_err("cannot parse zone name in local-zone-tag: %s", zname);
522 return 0;
523 }
524 dname_labs = dname_count_labels(dname);
525
526 lock_rw_rdlock(&zones->lock);
527 z = local_zones_lookup(zones, dname, dname_len, dname_labs, rr_class);
528 if(!z) {
529 lock_rw_unlock(&zones->lock);
530 log_err("no local-zone for tag %s", zname);
531 return 0;
532 }
533 lock_rw_wrlock(&z->lock);
534 lock_rw_unlock(&zones->lock);
535 free(z->taglist);
536 z->taglist = memdup(list, len);
537 z->taglen = len;
538 if(z->taglist)
539 r = 1;
504540 lock_rw_unlock(&z->lock);
505541 return r;
506542 }
799835 return 1;
800836 }
801837
838 /** enter local-zone-tag info */
839 static int
840 lz_enter_zone_tags(struct local_zones* zones, struct config_file* cfg)
841 {
842 struct config_strbytelist* p;
843 int c = 0;
844 for(p = cfg->local_zone_tags; p; p = p->next) {
845 if(!lz_enter_zone_tag(zones, p->str, p->str2, p->str2len,
846 LDNS_RR_CLASS_IN))
847 return 0;
848 c++;
849 }
850 if(c) verbose(VERB_ALGO, "applied tags to %d local zones", c);
851 return 1;
852 }
853
802854 /** enter auth data */
803855 static int
804856 lz_enter_data(struct local_zones* zones, struct config_file* cfg)
841893
842894 /* setup parent ptrs for lookup during data entry */
843895 init_parents(zones);
896 /* insert local zone tags */
897 if(!lz_enter_zone_tags(zones, cfg)) {
898 return 0;
899 }
844900 /* insert local data */
845901 if(!lz_enter_data(zones, cfg)) {
846902 return 0;
9851041 edns->udp_size = EDNS_ADVERTISED_SIZE;
9861042 edns->ext_rcode = 0;
9871043 edns->bits &= EDNS_DO;
988 if(!reply_info_answer_encode(qinfo, &rep,
1044 if(!edns_opt_inplace_reply(edns, temp) ||
1045 !reply_info_answer_encode(qinfo, &rep,
9891046 *(uint16_t*)sldns_buffer_begin(buf),
9901047 sldns_buffer_read_u16_at(buf, 2),
9911048 buf, 0, 0, temp, udpsize, edns,
12191276 {
12201277 /* create */
12211278 struct local_zone* z = local_zone_create(name, len, labs, tp, dclass);
1222 if(!z) return NULL;
1279 if(!z) {
1280 free(name);
1281 return NULL;
1282 }
12231283 lock_rw_wrlock(&z->lock);
12241284
12251285 /* find the closest parent */
114114
115115 /** how to process zone */
116116 enum localzone_type type;
117 /** tag bitlist */
118 uint8_t* taglist;
119 /** length of the taglist (in bytes) */
120 size_t taglen;
117121
118122 /** in this region the zone's data is allocated.
119123 * the struct local_zone itself is malloced. */
314314 s = mesh_state_create(mesh->env, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0);
315315 if(!s) {
316316 log_err("mesh_state_create: out of memory; SERVFAIL");
317 if(!edns_opt_inplace_reply(edns, mesh->env->scratch))
318 edns->opt_list = NULL;
317319 error_encode(rep->c->buffer, LDNS_RCODE_SERVFAIL,
318320 qinfo, qid, qflags, edns);
319321 comm_point_send_reply(rep);
337339 /* add reply to s */
338340 if(!mesh_state_add_reply(s, edns, rep, qid, qflags, qinfo->qname)) {
339341 log_err("mesh_new_client: out of memory; SERVFAIL");
342 if(!edns_opt_inplace_reply(edns, mesh->env->scratch))
343 edns->opt_list = NULL;
340344 error_encode(rep->c->buffer, LDNS_RCODE_SERVFAIL,
341345 qinfo, qid, qflags, edns);
342346 comm_point_send_reply(rep);
808812 r->edns.udp_size = EDNS_ADVERTISED_SIZE;
809813 r->edns.ext_rcode = 0;
810814 r->edns.bits &= EDNS_DO;
811 if(!reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
815 if(!edns_opt_inplace_reply(&r->edns, m->s.region) ||
816 !reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
812817 r->qflags, r->buf, 0, 1,
813818 m->s.env->scratch, udp_size, &r->edns,
814819 (int)(r->edns.bits & EDNS_DO), secure))
858863 if(prev && prev->qflags == r->qflags &&
859864 prev->edns.edns_present == r->edns.edns_present &&
860865 prev->edns.bits == r->edns.bits &&
861 prev->edns.udp_size == r->edns.udp_size) {
866 prev->edns.udp_size == r->edns.udp_size &&
867 edns_opt_list_compare(prev->edns.opt_list, r->edns.opt_list)
868 == 0) {
862869 /* if the previous reply is identical to this one, fix ID */
863870 if(prev->query_reply.c->buffer != r->query_reply.c->buffer)
864871 sldns_buffer_copy(r->query_reply.c->buffer,
880887 r->edns.ext_rcode = 0;
881888 r->edns.bits &= EDNS_DO;
882889 m->s.qinfo.qname = r->qname;
883 if(!reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
890 if(!edns_opt_inplace_reply(&r->edns, m->s.region) ||
891 !reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
884892 r->qflags, r->query_reply.c->buffer, 0, 1,
885893 m->s.env->scratch, udp_size, &r->edns,
886894 (int)(r->edns.bits & EDNS_DO), secure))
972980 r->cb = cb;
973981 r->cb_arg = cb_arg;
974982 r->edns = *edns;
983 if(edns->opt_list) {
984 r->edns.opt_list = edns_opt_copy_region(edns->opt_list,
985 s->s.region);
986 if(!r->edns.opt_list)
987 return 0;
988 }
975989 r->qid = qid;
976990 r->qflags = qflags;
977991 r->next = s->cb_list;
9891003 return 0;
9901004 r->query_reply = *rep;
9911005 r->edns = *edns;
1006 if(edns->opt_list) {
1007 r->edns.opt_list = edns_opt_copy_region(edns->opt_list,
1008 s->s.region);
1009 if(!r->edns.opt_list)
1010 return 0;
1011 }
9921012 r->qid = qid;
9931013 r->qflags = qflags;
9941014 r->start_time = *s->s.env->now_tv;
9991019 return 0;
10001020 s->reply_list = r;
10011021 return 1;
1002
10031022 }
10041023
10051024 /**
4949 #ifdef WITH_PYTHONMODULE
5050 #include "pythonmod/pythonmod.h"
5151 #endif
52 #ifdef USE_CACHEDB
53 #include "cachedb/cachedb.h"
54 #endif
5255
5356 /** count number of modules (words) in the string */
5457 static int
120123 #ifdef WITH_PYTHONMODULE
121124 "python",
122125 #endif
126 #ifdef USE_CACHEDB
127 "cachedb",
128 #endif
123129 "validator",
124130 "iterator",
125131 NULL};
137143 &dns64_get_funcblock,
138144 #ifdef WITH_PYTHONMODULE
139145 &pythonmod_get_funcblock,
146 #endif
147 #ifdef USE_CACHEDB
148 &cachedb_get_funcblock,
140149 #endif
141150 &val_get_funcblock,
142151 &iter_get_funcblock,
121121 }
122122 if((r = query_dname_compare(q1->qbuf+10, q2->qbuf+10)) != 0)
123123 return r;
124 if((r = edns_opt_list_compare(q1->opt_list, q2->opt_list)) != 0)
125 return r;
124126 return sockaddr_cmp(&q1->addr, q1->addrlen, &q2->addr, q2->addrlen);
125127 }
126128
756758 struct service_callback* p = sq->cblist, *np;
757759 free(sq->qbuf);
758760 free(sq->zone);
761 edns_opt_list_free(sq->opt_list);
759762 while(p) {
760763 np = p->next;
761764 free(p);
908911 sa->sin6_port = (in_port_t)htons((uint16_t)port);
909912 fd = create_udp_sock(AF_INET6, SOCK_DGRAM,
910913 (struct sockaddr*)addr, addrlen, 1, inuse, &noproto,
911 0, 0, 0, NULL, 0);
914 0, 0, 0, NULL, 0, 0);
912915 } else {
913916 struct sockaddr_in* sa = (struct sockaddr_in*)addr;
914917 sa->sin_port = (in_port_t)htons((uint16_t)port);
915918 fd = create_udp_sock(AF_INET, SOCK_DGRAM,
916919 (struct sockaddr*)addr, addrlen, 1, inuse, &noproto,
917 0, 0, 0, NULL, 0);
920 0, 0, 0, NULL, 0, 0);
918921 }
919922 return fd;
920923 }
12181221 /** lookup serviced query in serviced query rbtree */
12191222 static struct serviced_query*
12201223 lookup_serviced(struct outside_network* outnet, sldns_buffer* buff, int dnssec,
1221 struct sockaddr_storage* addr, socklen_t addrlen)
1224 struct sockaddr_storage* addr, socklen_t addrlen,
1225 struct edns_option* opt_list)
12221226 {
12231227 struct serviced_query key;
12241228 key.node.key = &key;
12281232 memcpy(&key.addr, addr, addrlen);
12291233 key.addrlen = addrlen;
12301234 key.outnet = outnet;
1235 key.opt_list = opt_list;
12311236 return (struct serviced_query*)rbtree_search(outnet->serviced, &key);
12321237 }
12331238
12361241 serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec,
12371242 int want_dnssec, int nocaps, int tcp_upstream, int ssl_upstream,
12381243 struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
1239 size_t zonelen, int qtype)
1244 size_t zonelen, int qtype, struct edns_option* opt_list)
12401245 {
12411246 struct serviced_query* sq = (struct serviced_query*)malloc(sizeof(*sq));
12421247 #ifdef UNBOUND_DEBUG
12661271 sq->ssl_upstream = ssl_upstream;
12671272 memcpy(&sq->addr, addr, addrlen);
12681273 sq->addrlen = addrlen;
1274 sq->opt_list = NULL;
1275 if(opt_list) {
1276 sq->opt_list = edns_opt_copy_alloc(opt_list);
1277 if(!sq->opt_list) {
1278 free(sq->zone);
1279 free(sq->qbuf);
1280 free(sq);
1281 return NULL;
1282 }
1283 }
12691284 sq->outnet = outnet;
12701285 sq->cblist = NULL;
12711286 sq->pending = NULL;
13931408 edns.edns_present = 1;
13941409 edns.ext_rcode = 0;
13951410 edns.edns_version = EDNS_ADVERTISED_VERSION;
1411 edns.opt_list = sq->opt_list;
13961412 if(sq->status == serviced_query_UDP_EDNS_FRAG) {
13971413 if(addr_is_ip6(&sq->addr, sq->addrlen)) {
13981414 if(EDNS_FRAG_SIZE_IP6 < EDNS_ADVERTISED_SIZE)
15261542 sq->to_be_deleted = 1;
15271543 verbose(VERB_ALGO, "svcd callbacks start");
15281544 if(sq->outnet->use_caps_for_id && error == NETEVENT_NOERROR && c &&
1529 !sq->nocaps) {
1545 !sq->nocaps && sq->qtype != LDNS_RR_TYPE_PTR) {
1546 /* for type PTR do not check perturbed name in answer,
1547 * compatibility with cisco dns guard boxes that mess up
1548 * reverse queries 0x20 contents */
15301549 /* noerror and nxdomain must have a qname in reply */
15311550 if(sldns_buffer_read_u16_at(c->buffer, 4) == 0 &&
15321551 (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer))
17071726 return sq->pending != NULL;
17081727 }
17091728
1729 /* see if packet is edns malformed; got zeroes at start.
1730 * This is from servers that return malformed packets to EDNS0 queries,
1731 * but they return good packets for nonEDNS0 queries.
1732 * We try to detect their output; without resorting to a full parse or
1733 * check for too many bytes after the end of the packet. */
1734 static int
1735 packet_edns_malformed(struct sldns_buffer* buf, int qtype)
1736 {
1737 size_t len;
1738 if(sldns_buffer_limit(buf) < LDNS_HEADER_SIZE)
1739 return 1; /* malformed */
1740 /* they have NOERROR rcode, 1 answer. */
1741 if(LDNS_RCODE_WIRE(sldns_buffer_begin(buf)) != LDNS_RCODE_NOERROR)
1742 return 0;
1743 /* one query (to skip) and answer records */
1744 if(LDNS_QDCOUNT(sldns_buffer_begin(buf)) != 1 ||
1745 LDNS_ANCOUNT(sldns_buffer_begin(buf)) == 0)
1746 return 0;
1747 /* skip qname */
1748 len = dname_valid(sldns_buffer_at(buf, LDNS_HEADER_SIZE),
1749 sldns_buffer_limit(buf)-LDNS_HEADER_SIZE);
1750 if(len == 0)
1751 return 0;
1752 if(len == 1 && qtype == 0)
1753 return 0; /* we asked for '.' and type 0 */
1754 /* and then 4 bytes (type and class of query) */
1755 if(sldns_buffer_limit(buf) < LDNS_HEADER_SIZE + len + 4 + 3)
1756 return 0;
1757
1758 /* and start with 11 zeroes as the answer RR */
1759 /* so check the qtype of the answer record, qname=0, type=0 */
1760 if(sldns_buffer_at(buf, LDNS_HEADER_SIZE+len+4)[0] == 0 &&
1761 sldns_buffer_at(buf, LDNS_HEADER_SIZE+len+4)[1] == 0 &&
1762 sldns_buffer_at(buf, LDNS_HEADER_SIZE+len+4)[2] == 0)
1763 return 1;
1764 return 0;
1765 }
1766
17101767 int
17111768 serviced_udp_callback(struct comm_point* c, void* arg, int error,
17121769 struct comm_reply* rep)
17771834 ||sq->status == serviced_query_UDP_EDNS_FRAG)
17781835 && (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer))
17791836 == LDNS_RCODE_FORMERR || LDNS_RCODE_WIRE(
1780 sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOTIMPL)) {
1837 sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOTIMPL
1838 || packet_edns_malformed(c->buffer, sq->qtype)
1839 )) {
17811840 /* try to get an answer by falling back without EDNS */
17821841 verbose(VERB_ALGO, "serviced query: attempt without EDNS");
17831842 sq->status = serviced_query_UDP_EDNS_fallback;
18721931 outnet_serviced_query(struct outside_network* outnet,
18731932 uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
18741933 uint16_t flags, int dnssec, int want_dnssec, int nocaps,
1875 int tcp_upstream, int ssl_upstream, struct sockaddr_storage* addr,
1876 socklen_t addrlen, uint8_t* zone, size_t zonelen,
1877 comm_point_callback_t* callback, void* callback_arg,
1934 int tcp_upstream, int ssl_upstream, struct edns_option* opt_list,
1935 struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
1936 size_t zonelen, comm_point_callback_t* callback, void* callback_arg,
18781937 sldns_buffer* buff)
18791938 {
18801939 struct serviced_query* sq;
18811940 struct service_callback* cb;
18821941 serviced_gen_query(buff, qname, qnamelen, qtype, qclass, flags);
1883 sq = lookup_serviced(outnet, buff, dnssec, addr, addrlen);
1942 sq = lookup_serviced(outnet, buff, dnssec, addr, addrlen, opt_list);
18841943 /* duplicate entries are included in the callback list, because
18851944 * there is a counterpart registration by our caller that needs to
18861945 * be doubly-removed (with callbacks perhaps). */
18901949 /* make new serviced query entry */
18911950 sq = serviced_create(outnet, buff, dnssec, want_dnssec, nocaps,
18921951 tcp_upstream, ssl_upstream, addr, addrlen, zone,
1893 zonelen, (int)qtype);
1952 zonelen, (int)qtype, opt_list);
18941953 if(!sq) {
18951954 free(cb);
18961955 return NULL;
19472006 callback_list_remove(sq, cb_arg);
19482007 /* if callbacks() routine scheduled deletion, let it do that */
19492008 if(!sq->cblist && !sq->to_be_deleted) {
1950 #ifdef UNBOUND_DEBUG
1951 rbnode_t* rem =
1952 #else
1953 (void)
1954 #endif
1955 rbtree_delete(sq->outnet->serviced, sq);
1956 log_assert(rem); /* should be present */
2009 (void)rbtree_delete(sq->outnet->serviced, sq);
19572010 serviced_delete(sq);
19582011 }
19592012 }
5757 struct sldns_buffer;
5858 struct serviced_query;
5959 struct dt_env;
60 struct edns_option;
6061
6162 /**
6263 * Send queries to outside servers and wait for answers from servers.
366367 int last_rtt;
367368 /** do we know edns probe status already, for UDP_EDNS queries */
368369 int edns_lame_known;
370 /** edns options to use for sending upstream packet */
371 struct edns_option* opt_list;
369372 /** outside network this is part of */
370373 struct outside_network* outnet;
371374 /** list of interested parties that need callback on results. */
476479 * @param nocaps: ignore use_caps_for_id and use unperturbed qname.
477480 * @param tcp_upstream: use TCP for upstream queries.
478481 * @param ssl_upstream: use SSL for upstream queries.
482 * @param opt_list: pass edns option list (deep copied into serviced query)
483 * these options are set on the outgoing packets.
479484 * @param callback: callback function.
480485 * @param callback_arg: user argument to callback function.
481486 * @param addr: to which server to send the query.
491496 struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
492497 uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
493498 uint16_t flags, int dnssec, int want_dnssec, int nocaps,
494 int tcp_upstream, int ssl_upstream, struct sockaddr_storage* addr,
495 socklen_t addrlen, uint8_t* zone, size_t zonelen,
496 comm_point_callback_t* callback, void* callback_arg,
499 int tcp_upstream, int ssl_upstream, struct edns_option* opt_list,
500 struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
501 size_t zonelen, comm_point_callback_t* callback, void* callback_arg,
497502 struct sldns_buffer* buff);
498503
499504 /**
205205 offset += length;
206206
207207 Y = BN_bin2bn(key+offset, (int)length, NULL);
208 offset += length;
209208
210209 /* create the key and set its properties */
211210 if(!Q || !P || !G || !Y || !(dsa = DSA_new())) {
636636 target[o+1] = b64[ ((src[i]&0x03)<<4) | (src[i+1]>>4) ];
637637 target[o+2] = b64[ ((src[i+1]&0x0f)<<2) ];
638638 target[o+3] = pad64;
639 i += 2;
639 /* i += 2; */
640640 o += 4;
641641 break;
642642 case 1:
645645 target[o+1] = b64[ ((src[i]&0x03)<<4) ];
646646 target[o+2] = pad64;
647647 target[o+3] = pad64;
648 i += 1;
648 /* i += 1; */
649649 o += 4;
650650 break;
651651 case 0:
419419 LDNS_EDNS_DAU = 5, /* RFC6975 */
420420 LDNS_EDNS_DHU = 6, /* RFC6975 */
421421 LDNS_EDNS_N3U = 7, /* RFC6975 */
422 LDNS_EDNS_CLIENT_SUBNET = 8 /* draft-vandergaast-edns-client-subnet */
422 LDNS_EDNS_CLIENT_SUBNET = 8, /* draft-vandergaast-edns-client-subnet */
423 LDNS_EDNS_PADDING = 12 /* RFC7830 */
423424 };
424425 typedef enum sldns_enum_edns_option sldns_edns_option;
425426
891891 parse_state?parse_state->default_ttl:0,
892892 (parse_state&&parse_state->origin_len)?
893893 parse_state->origin:NULL,
894 parse_state->origin_len,
894 parse_state?parse_state->origin_len:0,
895895 (parse_state&&parse_state->prev_rr_len)?
896896 parse_state->prev_rr:NULL,
897 parse_state->prev_rr_len);
897 parse_state?parse_state->prev_rr_len:0);
898898 }
899899 return LDNS_WIREPARSE_ERR_OK;
900900 }
164164 { 6, "DHU" },
165165 { 7, "N3U" },
166166 { 8, "edns-client-subnet" },
167 { 12, "Padding" },
167168 { 0, NULL}
168169 };
169170 sldns_lookup_table* sldns_edns_options = sldns_edns_options_data;
18631864 case LDNS_EDNS_CLIENT_SUBNET:
18641865 w += sldns_wire2str_edns_subnet_print(s, sl, optdata, optlen);
18651866 break;
1867 case LDNS_EDNS_PADDING:
1868 w += print_hex_buf(s, sl, optdata, optlen);
1869 break;
18661870 default:
18671871 /* unknown option code */
18681872 w += print_hex_buf(s, sl, optdata, optlen);
411411 && strcmp(cfg->module_conf, "python dns64 iterator") != 0
412412 && strcmp(cfg->module_conf, "python dns64 validator iterator") != 0
413413 #endif
414 #ifdef USE_CACHEDB
415 && strcmp(cfg->module_conf, "validator cachedb iterator") != 0
416 && strcmp(cfg->module_conf, "cachedb iterator") != 0
417 && strcmp(cfg->module_conf, "dns64 validator cachedb iterator") != 0
418 && strcmp(cfg->module_conf, "dns64 cachedb iterator") != 0
419 && strcmp(cfg->module_conf, "python dns64 cachedb iterator") != 0
420 && strcmp(cfg->module_conf, "python dns64 validator cachedb iterator") != 0
421 && strcmp(cfg->module_conf, "dns64 python cachedb iterator") != 0
422 && strcmp(cfg->module_conf, "dns64 python validator cachedb iterator") != 0
423 && strcmp(cfg->module_conf, "python cachedb iterator") != 0
424 && strcmp(cfg->module_conf, "python validator cachedb iterator") != 0
425 && strcmp(cfg->module_conf, "cachedb python iterator") != 0
426 && strcmp(cfg->module_conf, "validator cachedb python iterator") != 0
427 && strcmp(cfg->module_conf, "validator python cachedb iterator") != 0
428 #endif
414429 ) {
415430 fatal_exit("module conf '%s' is not known to work",
416431 cfg->module_conf);
101101 printf(" flush_negative flush all negative data\n");
102102 printf(" flush_stats flush statistics, make zero\n");
103103 printf(" flush_requestlist drop queries that are worked on\n");
104 printf(" dump_requestlist show what is worked on\n");
104 printf(" dump_requestlist show what is worked on by first thread\n");
105105 printf(" flush_infra [all | ip] remove ping, edns for one IP or all\n");
106106 printf(" dump_infra show ping and edns entries\n");
107107 printf(" set_option opt: val set option to value, no reload\n");
102102 size_t ATTR_UNUSED(qnamelen), uint16_t ATTR_UNUSED(qtype),
103103 uint16_t ATTR_UNUSED(qclass), uint16_t ATTR_UNUSED(flags),
104104 int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
105 int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
105 int ATTR_UNUSED(nocaps), struct edns_option* ATTR_UNUSED(opt_list),
106 struct sockaddr_storage* ATTR_UNUSED(addr),
106107 socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
107108 size_t ATTR_UNUSED(zonelen), struct module_qstate* ATTR_UNUSED(q))
108109 {
134135 size_t ATTR_UNUSED(qnamelen), uint16_t ATTR_UNUSED(qtype),
135136 uint16_t ATTR_UNUSED(qclass), uint16_t ATTR_UNUSED(flags),
136137 int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
137 int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
138 int ATTR_UNUSED(nocaps), struct edns_option* ATTR_UNUSED(opt_list),
139 struct sockaddr_storage* ATTR_UNUSED(addr),
138140 socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
139141 size_t ATTR_UNUSED(zonelen), struct module_qstate* ATTR_UNUSED(q))
140142 {
10381038 uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
10391039 uint16_t flags, int dnssec, int ATTR_UNUSED(want_dnssec),
10401040 int ATTR_UNUSED(nocaps), int ATTR_UNUSED(tcp_upstream),
1041 int ATTR_UNUSED(ssl_upstream), struct sockaddr_storage* addr,
1042 socklen_t addrlen, uint8_t* zone, size_t zonelen,
1043 comm_point_callback_t* callback, void* callback_arg,
1041 int ATTR_UNUSED(ssl_upstream), struct edns_option* opt_list,
1042 struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
1043 size_t zonelen, comm_point_callback_t* callback, void* callback_arg,
10441044 sldns_buffer* ATTR_UNUSED(buff))
10451045 {
10461046 struct replay_runtime* runtime = (struct replay_runtime*)outnet->base;
10761076 edns.edns_version = EDNS_ADVERTISED_VERSION;
10771077 edns.udp_size = EDNS_ADVERTISED_SIZE;
10781078 edns.bits = 0;
1079 edns.opt_list = opt_list;
10791080 if(dnssec)
10801081 edns.bits = EDNS_DO;
10811082 attach_edns_record(pend->buffer, &edns);
13861387 (void)start_acc;
13871388 }
13881389
1389 struct event_base* comm_base_internal(struct comm_base* ATTR_UNUSED(b))
1390 struct ub_event_base* comm_base_internal(struct comm_base* ATTR_UNUSED(b))
13901391 {
13911392 /* no pipe comm possible in testbound */
13921393 return NULL;
641641 do_service(addr, port, key, cert);
642642
643643 CRYPTO_cleanup_all_ex_data();
644 ERR_remove_state(0);
645644 ERR_free_strings();
646 RAND_cleanup();
647645 return 0;
648646 }
379379 unit_assert( cfg_parse_memsize("0 Gb", &v) && v==0*1024*1024);
380380 }
381381
382 /** test config_file: test tag code */
383 static void
384 config_tag_test(void)
385 {
386 unit_show_func("util/config_file.c", "taglist_intersect");
387 unit_assert( taglist_intersect(
388 (uint8_t*)"\000\000\000", 3, (uint8_t*)"\001\000\001", 3
389 ) == 0);
390 unit_assert( taglist_intersect(
391 (uint8_t*)"\000\000\001", 3, (uint8_t*)"\001\000\001", 3
392 ) == 1);
393 unit_assert( taglist_intersect(
394 (uint8_t*)"\001\000\000", 3, (uint8_t*)"\001\000\001", 3
395 ) == 1);
396 unit_assert( taglist_intersect(
397 (uint8_t*)"\001", 1, (uint8_t*)"\001\000\001", 3
398 ) == 1);
399 unit_assert( taglist_intersect(
400 (uint8_t*)"\001\000\001", 3, (uint8_t*)"\001", 1
401 ) == 1);
402 }
403
382404 #include "util/rtt.h"
383405 /** test RTT code */
384406 static void
563585 printf("Start of %s unit test.\n", PACKAGE_STRING);
564586 #ifdef HAVE_SSL
565587 ERR_load_crypto_strings();
566 # ifdef HAVE_OPENSSL_CONFIG
567 OPENSSL_config("unbound");
568 # endif
569588 # ifdef USE_GOST
570589 (void)sldns_key_EVP_load_gost_id();
571590 # endif
579598 verify_test();
580599 net_test();
581600 config_memsize_test();
601 config_tag_test();
582602 dname_test();
583603 rtt_test();
584604 anchors_test();
601621 CONF_modules_free();
602622 # endif
603623 CRYPTO_cleanup_all_ex_data();
604 ERR_remove_state(0);
605624 ERR_free_strings();
606625 RAND_cleanup();
607626 #elif defined(HAVE_NSS)
496496 {
497497 unit_show_feature("signature verify");
498498 verifytest_file("testdata/test_signatures.1", "20070818005004");
499 #ifdef USE_DSA
499500 verifytest_file("testdata/test_signatures.2", "20080414005004");
500501 verifytest_file("testdata/test_signatures.3", "20080416005004");
501502 verifytest_file("testdata/test_signatures.4", "20080416005004");
502503 verifytest_file("testdata/test_signatures.5", "20080416005004");
503504 verifytest_file("testdata/test_signatures.6", "20080416005004");
504505 verifytest_file("testdata/test_signatures.7", "20070829144150");
506 #endif /* USE_DSA */
505507 verifytest_file("testdata/test_signatures.8", "20070829144150");
506508 #if (defined(HAVE_EVP_SHA256) || defined(HAVE_NSS) || defined(HAVE_NETTLE)) && defined(USE_SHA2)
507509 verifytest_file("testdata/test_sigs.rsasha256", "20070829144150");
0 ; config options
1 ; The island of trust is at example.com
2 server:
3 trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
4 val-override-date: "20070916134226"
5 target-fetch-policy: "0 0 0 0 0"
6
7 stub-zone:
8 name: "."
9 stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
10 CONFIG_END
11
12 SCENARIO_BEGIN Test validator with unsigned delegation with no NS bit in NSEC
13
14 ; K.ROOT-SERVERS.NET.
15 RANGE_BEGIN 0 100
16 ADDRESS 193.0.14.129
17 ENTRY_BEGIN
18 MATCH opcode qtype qname
19 ADJUST copy_id
20 REPLY QR NOERROR
21 SECTION QUESTION
22 . IN NS
23 SECTION ANSWER
24 . IN NS K.ROOT-SERVERS.NET.
25 SECTION ADDITIONAL
26 K.ROOT-SERVERS.NET. IN A 193.0.14.129
27 ENTRY_END
28
29 ENTRY_BEGIN
30 MATCH opcode subdomain
31 ADJUST copy_id copy_query
32 REPLY QR NOERROR
33 SECTION QUESTION
34 com. IN A
35 SECTION AUTHORITY
36 com. IN NS a.gtld-servers.net.
37 SECTION ADDITIONAL
38 a.gtld-servers.net. IN A 192.5.6.30
39 ENTRY_END
40 RANGE_END
41
42 ; a.gtld-servers.net.
43 RANGE_BEGIN 0 100
44 ADDRESS 192.5.6.30
45 ENTRY_BEGIN
46 MATCH opcode qtype qname
47 ADJUST copy_id
48 REPLY QR NOERROR
49 SECTION QUESTION
50 com. IN NS
51 SECTION ANSWER
52 com. IN NS a.gtld-servers.net.
53 SECTION ADDITIONAL
54 a.gtld-servers.net. IN A 192.5.6.30
55 ENTRY_END
56
57 ENTRY_BEGIN
58 MATCH opcode subdomain
59 ADJUST copy_id copy_query
60 REPLY QR NOERROR
61 SECTION QUESTION
62 example.com. IN A
63 SECTION AUTHORITY
64 example.com. IN NS ns.example.com.
65 SECTION ADDITIONAL
66 ns.example.com. IN A 1.2.3.4
67 ENTRY_END
68
69 ENTRY_BEGIN
70 MATCH opcode qtype qname
71 ADJUST copy_id
72 REPLY QR AA NOERROR
73 SECTION QUESTION
74 ns.example.com. IN AAAA
75 SECTION ANSWER
76 ENTRY_END
77 RANGE_END
78
79 ; ns.example.com.
80 RANGE_BEGIN 0 100
81 ADDRESS 1.2.3.4
82 ENTRY_BEGIN
83 MATCH opcode qtype qname
84 ADJUST copy_id
85 REPLY QR NOERROR
86 SECTION QUESTION
87 ns.example.com. IN AAAA
88 SECTION ANSWER
89 SECTION AUTHORITY
90 example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
91 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
92 SECTION ADDITIONAL
93 ENTRY_END
94
95 ENTRY_BEGIN
96 MATCH opcode qtype qname
97 ADJUST copy_id
98 REPLY QR NOERROR
99 SECTION QUESTION
100 ns3.example.com. IN AAAA
101 SECTION ANSWER
102 SECTION AUTHORITY
103 example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
104 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
105 SECTION ADDITIONAL
106 ENTRY_END
107
108 ENTRY_BEGIN
109 MATCH opcode qtype qname
110 ADJUST copy_id
111 REPLY QR NOERROR
112 SECTION QUESTION
113 ns.example.com. IN A
114 SECTION ANSWER
115 ns.example.com. IN A 1.2.3.4
116 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
117 SECTION AUTHORITY
118 example.com. IN NS ns.example.com.
119 example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
120 SECTION ADDITIONAL
121 ENTRY_END
122
123 ENTRY_BEGIN
124 MATCH opcode qtype qname
125 ADJUST copy_id
126 REPLY QR NOERROR
127 SECTION QUESTION
128 example.com. IN NS
129 SECTION ANSWER
130 example.com. IN NS ns.example.com.
131 example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
132 SECTION ADDITIONAL
133 ns.example.com. IN A 1.2.3.4
134 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
135 ENTRY_END
136
137 ; response to DNSKEY priming query
138 ENTRY_BEGIN
139 MATCH opcode qtype qname
140 ADJUST copy_id
141 REPLY QR NOERROR
142 SECTION QUESTION
143 example.com. IN DNSKEY
144 SECTION ANSWER
145 example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
146 example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
147 SECTION AUTHORITY
148 example.com. IN NS ns.example.com.
149 example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
150 SECTION ADDITIONAL
151 ns.example.com. IN A 1.2.3.4
152 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
153 ENTRY_END
154
155 ; response to query of interest
156 ENTRY_BEGIN
157 MATCH opcode qtype qname
158 ADJUST copy_id
159 REPLY QR AA NOERROR
160 SECTION QUESTION
161 foo.www.example.com. IN A
162 SECTION ANSWER
163 foo.www.example.com. IN A 1.2.3.4
164 ; unsigned, no delegation.
165 ENTRY_END
166
167 ; DS query
168 ENTRY_BEGIN
169 MATCH opcode qtype qname
170 ADJUST copy_id
171 REPLY QR AA NOERROR
172 SECTION QUESTION
173 www.example.com. IN DS
174 SECTION ANSWER
175 SECTION AUTHORITY
176 ; NSEC3 here: 1 0 1 1234
177 ; www.example.com. -> h8c0nvkuibedn7ia997iegdl7h0i6h8b.
178 h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. IN NSEC3 1 0 1 1234 h8c0nvkuibedn7ia997iegdl7h0i6h8c TXT
179 h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AH+bPQZST3COwJ1vSe05N7E5BM2GmXzJUKsiWwXKrmm/XjYKSxSuNPE=
180
181 ;www.example.com. IN NSEC zzz.example.com. RRSIG NSEC
182 ;www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AA9Dm626WvHXHPQXJkVyjyTqJ/dCHfZgt6PWCn9gd8ZmPxyl3STW3iI=
183 example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
184 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
185 SECTION ADDITIONAL
186 ENTRY_END
187
188 ; DS query for foo.www.example.com returns the referral without record.
189 ENTRY_BEGIN
190 MATCH opcode qtype qname
191 ADJUST copy_id
192 REPLY QR AA NOERROR
193 SECTION QUESTION
194 foo.www.example.com. IN DS
195 SECTION ANSWER
196 SECTION AUTHORITY
197 mipf0g23547qunto04vboegh9vadsrpo.example.com. IN NSEC3 1 0 1 1234 mipf0g23547qunto04vboegh9vadsrpq TXT
198 mipf0g23547qunto04vboegh9vadsrpo.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. ADc6JrdKuTmIJe4sAjpKZSUZKdHdfhmREk2F5A5cftU9053b0/3ILQM=
199
200 example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
201 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
202
203
204 ;www.example.com. IN NS ns3.example.com.
205 ;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. IN NSEC3 1 0 1 1234 h8c0nvkuibedn7ia997iegdl7h0i6h8c TXT
206 ;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AH+bPQZST3COwJ1vSe05N7E5BM2GmXzJUKsiWwXKrmm/XjYKSxSuNPE=
207 ;SECTION ADDITIONAL
208 ;ns3.example.com. IN A 1.2.3.5
209
210
211 ; NSEC3 here: 1 0 1 1234
212 ; www.example.com. -> h8c0nvkuibedn7ia997iegdl7h0i6h8b.
213 ; *.www.example.com. -> cg2lpgpr8k7ck69h7bqu3od9pkht2o79.
214 ; foo.www.example.com. -> mipf0g23547qunto04vboegh9vadsrpo.
215
216 ;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. IN NSEC3 1 0 1 1234 h8c0nvkuibedn7ia997iegdl7h0i6h8c TXT
217 ;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AH+bPQZST3COwJ1vSe05N7E5BM2GmXzJUKsiWwXKrmm/XjYKSxSuNPE=
218 ;cg2lpgpr8k7ck69h7bqu3od9pkht2o78.example.com. IN NSEC3 1 0 1 1234 cg2lpgpr8k7ck69h7bqu3od9pkht2o89 TXT
219 ;cg2lpgpr8k7ck69h7bqu3od9pkht2o78.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. ACzxBHMyDB5tTrXijboPSsB0ws1lJe3/B62QNAMcZv7l9DYNDEDKsXY=
220 ;mipf0g23547qunto04vboegh9vadsrph.example.com. IN NSEC3 1 0 1 1234 mipf0g23547qunto04vboegh9vadsrpp TXT
221 ;mipf0g23547qunto04vboegh9vadsrph.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AG2B7lrIVtBgg+WIt0yNYekGDBKkY7xkKfI0GLQ8q3brGy/+jubxba0=
222
223 ;www.example.com. IN NSEC zzz.example.com. RRSIG NSEC
224 ;www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AA9Dm626WvHXHPQXJkVyjyTqJ/dCHfZgt6PWCn9gd8ZmPxyl3STW3iI=
225
226 ;example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
227 ;example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
228 SECTION ADDITIONAL
229 ENTRY_END
230
231 RANGE_END
232
233 ; ns3.example.com.
234 RANGE_BEGIN 0 100
235 ADDRESS 1.2.3.5
236 ENTRY_BEGIN
237 MATCH opcode qtype qname
238 ADJUST copy_id
239 REPLY QR NOERROR
240 SECTION QUESTION
241 foo.www.example.com. IN DS
242 SECTION ANSWER
243 SECTION AUTHORITY
244 foo.www.example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
245 SECTION ADDITIONAL
246 ENTRY_END
247 RANGE_END
248
249
250 STEP 1 QUERY
251 ENTRY_BEGIN
252 REPLY RD DO
253 SECTION QUESTION
254 foo.www.example.com. IN A
255 ENTRY_END
256
257 ; recursion happens here.
258 STEP 10 CHECK_ANSWER
259 ENTRY_BEGIN
260 MATCH all
261 REPLY QR RD RA DO SERVFAIL
262 SECTION QUESTION
263 foo.www.example.com. IN A
264 SECTION ANSWER
265 ENTRY_END
266
267 SCENARIO_END
162162 cfg->so_sndbuf = 0;
163163 cfg->so_reuseport = 0;
164164 cfg->ip_transparent = 0;
165 cfg->ip_freebind = 0;
165166 cfg->num_ifs = 0;
166167 cfg->ifs = NULL;
167168 cfg->num_out_ifs = 0;
236237 if(!(cfg->dnstap_socket_path = strdup(DNSTAP_SOCKET_PATH)))
237238 goto error_exit;
238239 #endif
240 cfg->disable_dnssec_lame_check = 0;
239241 cfg->ratelimit = 0;
240242 cfg->ratelimit_slabs = 4;
241243 cfg->ratelimit_size = 4*1024*1024;
392394 else S_MEMSIZE("so-sndbuf:", so_sndbuf)
393395 else S_YNO("so-reuseport:", so_reuseport)
394396 else S_YNO("ip-transparent:", ip_transparent)
397 else S_YNO("ip-freebind:", ip_freebind)
395398 else S_MEMSIZE("rrset-cache-size:", rrset_cache_size)
396399 else S_POW2("rrset-cache-slabs:", rrset_cache_slabs)
397400 else S_YNO("prefetch:", prefetch)
472475 else S_STR("control-cert-file:", control_cert_file)
473476 else S_STR("module-config:", module_conf)
474477 else S_STR("python-script:", python_script)
478 else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check)
475479 else if(strcmp(opt, "ratelimit:") == 0) {
476480 IS_NUMBER_OR_ZERO; cfg->ratelimit = atoi(val);
477481 infra_dp_ratelimit=cfg->ratelimit;
480484 else S_POW2("ratelimit-slabs:", ratelimit_slabs)
481485 else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor)
482486 else S_YNO("qname-minimisation:", qname_minimisation)
487 else if(strcmp(opt, "define-tag:") ==0) {
488 return config_add_tag(cfg, val);
483489 /* val_sig_skew_min and max are copied into val_env during init,
484490 * so this does not update val_env with set_option */
485 else if(strcmp(opt, "val-sig-skew-min:") == 0)
491 } else if(strcmp(opt, "val-sig-skew-min:") == 0)
486492 { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_min = (int32_t)atoi(val); }
487493 else if(strcmp(opt, "val-sig-skew-max:") == 0)
488494 { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_max = (int32_t)atoi(val); }
503509 * stub-zone, name, stub-addr, stub-host, stub-prime
504510 * forward-first, stub-first,
505511 * forward-zone, name, forward-addr, forward-host,
506 * ratelimit-for-domain, ratelimit-below-domain */
512 * ratelimit-for-domain, ratelimit-below-domain,
513 * local-zone-tag */
507514 return 0;
508515 }
509516 return 1;
627634 /** compare and print list option */
628635 #define O_LS2(opt, name, lst) if(strcmp(opt, name)==0) { \
629636 struct config_str2list* p = cfg->lst; \
630 for(p = cfg->lst; p; p = p->next) \
631 snprintf(buf, len, "%s %s\n", p->str, p->str2); \
637 for(p = cfg->lst; p; p = p->next) { \
638 snprintf(buf, len, "%s %s", p->str, p->str2); \
632639 func(buf, arg); \
640 } \
641 }
642 /** compare and print taglist option */
643 #define O_LTG(opt, name, lst) if(strcmp(opt, name)==0) { \
644 char* tmpstr = NULL; \
645 struct config_strbytelist *p = cfg->lst; \
646 for(p = cfg->lst; p; p = p->next) {\
647 tmpstr = config_taglist2str(cfg, p->str2, p->str2len); \
648 if(tmpstr) {\
649 snprintf(buf, len, "%s %s", p->str, tmpstr); \
650 func(buf, arg); \
651 free(tmpstr); \
652 } \
653 } \
633654 }
634655
635656 int
663684 else O_MEM(opt, "so-sndbuf", so_sndbuf)
664685 else O_YNO(opt, "so-reuseport", so_reuseport)
665686 else O_YNO(opt, "ip-transparent", ip_transparent)
687 else O_YNO(opt, "ip-freebind", ip_freebind)
666688 else O_MEM(opt, "rrset-cache-size", rrset_cache_size)
667689 else O_DEC(opt, "rrset-cache-slabs", rrset_cache_slabs)
668690 else O_YNO(opt, "prefetch-key", prefetch_key)
749771 else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones)
750772 else O_DEC(opt, "max-udp-size", max_udp_size)
751773 else O_STR(opt, "python-script", python_script)
774 else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check)
752775 else O_DEC(opt, "ratelimit", ratelimit)
753776 else O_MEM(opt, "ratelimit-size", ratelimit_size)
754777 else O_DEC(opt, "ratelimit-slabs", ratelimit_slabs)
758781 else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)
759782 else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max)
760783 else O_YNO(opt, "qname-minimisation", qname_minimisation)
784 else O_IFC(opt, "define-tag", num_tags, tagname)
785 else O_LTG(opt, "local-zone-tag", local_zone_tags)
761786 /* not here:
762787 * outgoing-permit, outgoing-avoid - have list of ports
763788 * local-zone - zones and nodefault variables
930955 }
931956 }
932957
958 /** delete string array */
959 static void
960 config_del_strarray(char** array, int num)
961 {
962 int i;
963 if(!array)
964 return;
965 for(i=0; i<num; i++) {
966 free(array[i]);
967 }
968 free(array);
969 }
970
971 /** delete stringbytelist */
972 static void
973 config_del_strbytelist(struct config_strbytelist* p)
974 {
975 struct config_strbytelist* np;
976 while(p) {
977 np = p->next;
978 free(p->str);
979 free(p->str2);
980 free(p);
981 p = np;
982 }
983 }
984
933985 void
934986 config_delete(struct config_file* cfg)
935987 {
942994 free(cfg->target_fetch_policy);
943995 free(cfg->ssl_service_key);
944996 free(cfg->ssl_service_pem);
945 if(cfg->ifs) {
946 int i;
947 for(i=0; i<cfg->num_ifs; i++)
948 free(cfg->ifs[i]);
949 free(cfg->ifs);
950 }
951 if(cfg->out_ifs) {
952 int i;
953 for(i=0; i<cfg->num_out_ifs; i++)
954 free(cfg->out_ifs[i]);
955 free(cfg->out_ifs);
956 }
997 config_del_strarray(cfg->ifs, cfg->num_ifs);
998 config_del_strarray(cfg->out_ifs, cfg->num_out_ifs);
957999 config_delstubs(cfg->stubs);
9581000 config_delstubs(cfg->forwards);
9591001 config_delstrlist(cfg->donotqueryaddrs);
9771019 config_deldblstrlist(cfg->local_zones);
9781020 config_delstrlist(cfg->local_zones_nodefault);
9791021 config_delstrlist(cfg->local_data);
1022 config_del_strarray(cfg->tagname, cfg->num_tags);
1023 config_del_strbytelist(cfg->local_zone_tags);
9801024 config_delstrlist(cfg->control_ifs);
9811025 free(cfg->server_key_file);
9821026 free(cfg->server_cert_file);
11651209 return 1;
11661210 }
11671211
1212 int
1213 cfg_strbytelist_insert(struct config_strbytelist** head, char* item,
1214 uint8_t* i2, size_t i2len)
1215 {
1216 struct config_strbytelist* s;
1217 if(!item || !i2 || !head)
1218 return 0;
1219 s = (struct config_strbytelist*)calloc(1, sizeof(*s));
1220 if(!s)
1221 return 0;
1222 s->str = item;
1223 s->str2 = i2;
1224 s->str2len = i2len;
1225 s->next = *head;
1226 *head = s;
1227 return 1;
1228 }
1229
11681230 time_t
11691231 cfg_convert_timeval(const char* str)
11701232 {
12671329 }
12681330 *res = ((size_t)atol(str)) * mult;
12691331 return 1;
1332 }
1333
1334 int
1335 find_tag_id(struct config_file* cfg, const char* tag)
1336 {
1337 int i;
1338 for(i=0; i<cfg->num_tags; i++) {
1339 if(strcmp(cfg->tagname[i], tag) == 0)
1340 return i;
1341 }
1342 return -1;
1343 }
1344
1345 int
1346 config_add_tag(struct config_file* cfg, const char* tag)
1347 {
1348 char** newarray;
1349 char* newtag;
1350 if(find_tag_id(cfg, tag) != -1)
1351 return 1; /* nothing to do */
1352 newarray = (char**)malloc(sizeof(char*)*(cfg->num_tags+1));
1353 if(!newarray)
1354 return 0;
1355 newtag = strdup(tag);
1356 if(!newtag) {
1357 free(newarray);
1358 return 0;
1359 }
1360 if(cfg->tagname) {
1361 memcpy(newarray, cfg->tagname, sizeof(char*)*cfg->num_tags);
1362 free(cfg->tagname);
1363 }
1364 newarray[cfg->num_tags++] = newtag;
1365 cfg->tagname = newarray;
1366 return 1;
1367 }
1368
1369 /** set a bit in a bit array */
1370 static void
1371 cfg_set_bit(uint8_t* bitlist, size_t len, int id)
1372 {
1373 int pos = id/8;
1374 log_assert((size_t)pos < len);
1375 bitlist[pos] |= 1<<(id%8);
1376 }
1377
1378 uint8_t* config_parse_taglist(struct config_file* cfg, char* str,
1379 size_t* listlen)
1380 {
1381 uint8_t* taglist = NULL;
1382 size_t len = 0;
1383 char* p, *s;
1384
1385 /* allocate */
1386 if(cfg->num_tags == 0) {
1387 log_err("parse taglist, but no tags defined");
1388 return 0;
1389 }
1390 len = (size_t)(cfg->num_tags+7)/8;
1391 taglist = calloc(1, len);
1392 if(!taglist) {
1393 log_err("out of memory");
1394 return 0;
1395 }
1396
1397 /* parse */
1398 s = str;
1399 while((p=strsep(&s, " \t\n")) != NULL) {
1400 if(*p) {
1401 int id = find_tag_id(cfg, p);
1402 /* set this bit in the bitlist */
1403 if(id == -1) {
1404 log_err("unknown tag: %s", p);
1405 free(taglist);
1406 return 0;
1407 }
1408 cfg_set_bit(taglist, len, id);
1409 }
1410 }
1411
1412 *listlen = len;
1413 return taglist;
1414 }
1415
1416 char* config_taglist2str(struct config_file* cfg, uint8_t* taglist,
1417 size_t taglen)
1418 {
1419 char buf[10240];
1420 size_t i, j, len = 0;
1421 buf[0] = 0;
1422 for(i=0; i<taglen; i++) {
1423 if(taglist[i] == 0)
1424 continue;
1425 for(j=0; j<8; j++) {
1426 if((taglist[i] & (1<<j)) != 0) {
1427 size_t id = i*8 + j;
1428 snprintf(buf+len, sizeof(buf)-len, "%s%s",
1429 (len==0?"":" "), cfg->tagname[id]);
1430 len += strlen(buf+len);
1431 }
1432 }
1433 }
1434 return strdup(buf);
1435 }
1436
1437 int taglist_intersect(uint8_t* list1, size_t list1len, uint8_t* list2,
1438 size_t list2len)
1439 {
1440 size_t i;
1441 if(!list1 || !list2)
1442 return 0;
1443 for(i=0; i<list1len && i<list2len; i++) {
1444 if((list1[i] & list2[i]) != 0)
1445 return 1;
1446 }
1447 return 0;
12701448 }
12711449
12721450 void
4343 struct config_stub;
4444 struct config_strlist;
4545 struct config_str2list;
46 struct config_strbytelist;
4647 struct module_qstate;
4748 struct sock_list;
4849 struct ub_packed_rrset_key;
141142 int so_reuseport;
142143 /** IP_TRANSPARENT socket option requested on port 53 sockets */
143144 int ip_transparent;
145 /** IP_FREEBIND socket option request on port 53 sockets */
146 int ip_freebind;
144147
145148 /** number of interfaces to open. If 0 default all interfaces. */
146149 int num_ifs;
292295 int unblock_lan_zones;
293296 /** insecure lan zones (don't validate AS112 zones) */
294297 int insecure_lan_zones;
298 /** list of zonename, tagbitlist */
299 struct config_strbytelist* local_zone_tags;
300 /** tag list, array with tagname[i] is malloced string */
301 char** tagname;
302 /** number of items in the taglist */
303 int num_tags;
295304
296305 /** remote control section. enable toggle. */
297306 int remote_control_enable;
357366 /** true to log dnstap FORWARDER_RESPONSE message events */
358367 int dnstap_log_forwarder_response_messages;
359368
369 /** true to disable DNSSEC lameness check in iterator */
370 int disable_dnssec_lame_check;
371
360372 /** ratelimit 0 is off, otherwise qps (unless overridden) */
361373 int ratelimit;
362374 /** number of slabs for ratelimit cache */
420432 char* str2;
421433 };
422434
435 /**
436 * List of string, bytestring for config options
437 */
438 struct config_strbytelist {
439 /** next item in list */
440 struct config_strbytelist* next;
441 /** first string */
442 char* str;
443 /** second bytestring */
444 uint8_t* str2;
445 size_t str2len;
446 };
447
423448 /** List head for strlist processing, used for append operation. */
424449 struct config_strlist_head {
425450 /** first in list of text items */
559584 int cfg_str2list_insert(struct config_str2list** head, char* item, char* i2);
560585
561586 /**
587 * Insert string into strbytelist.
588 * @param head: pointer to str2list head variable.
589 * @param item: new item. malloced by caller. If NULL the insertion fails.
590 * @param i2: 2nd string, malloced by caller. If NULL the insertion fails.
591 * @param i2len: length of the i2 bytestring.
592 * @return: true on success.
593 */
594 int cfg_strbytelist_insert(struct config_strbytelist** head, char* item,
595 uint8_t* i2, size_t i2len);
596
597 /**
562598 * Find stub in config list, also returns prevptr (for deletion).
563599 * @param pp: call routine with pointer to a pointer to the start of the list,
564600 * if the stub is found, on exit, the value contains a pointer to the
622658 * is logged).
623659 */
624660 int cfg_parse_memsize(const char* str, size_t* res);
661
662 /**
663 * Add a tag name to the config. It is added at the end with a new ID value.
664 * @param cfg: the config structure.
665 * @param tag: string (which is copied) with the name.
666 * @return: false on alloc failure.
667 */
668 int config_add_tag(struct config_file* cfg, const char* tag);
669
670 /**
671 * Find tag ID in the tag list.
672 * @param cfg: the config structure.
673 * @param tag: string with tag name to search for.
674 * @return: 0..(num_tags-1) with tag ID, or -1 if tagname is not found.
675 */
676 int find_tag_id(struct config_file* cfg, const char* tag);
677
678 /**
679 * parse taglist from string into bytestring with bitlist.
680 * @param cfg: the config structure (with tagnames)
681 * @param str: the string to parse. Parse puts 0 bytes in string.
682 * @param listlen: returns length of in bytes.
683 * @return malloced bytes with a bitlist of the tags. or NULL on parse error
684 * or malloc failure.
685 */
686 uint8_t* config_parse_taglist(struct config_file* cfg, char* str,
687 size_t* listlen);
688
689 /**
690 * convert tag bitlist to a malloced string with tag names. For debug output.
691 * @param cfg: the config structure (with tagnames)
692 * @param taglist: the tag bitlist.
693 * @param len: length of the tag bitlist.
694 * @return malloced string or NULL.
695 */
696 char* config_taglist2str(struct config_file* cfg, uint8_t* taglist,
697 size_t len);
698
699 /**
700 * see if two taglists intersect (have tags in common).
701 * @param list1: first tag bitlist.
702 * @param list1len: length in bytes of first list.
703 * @param list2: second tag bitlist.
704 * @param list2len: length in bytes of second list.
705 * @return true if there are tags in common, 0 if not.
706 */
707 int taglist_intersect(uint8_t* list1, size_t list1len, uint8_t* list2,
708 size_t list2len);
625709
626710 /**
627711 * Parse local-zone directive into two strings and register it in the config.
88
99 #define FLEX_SCANNER
1010 #define YY_FLEX_MAJOR_VERSION 2
11 #define YY_FLEX_MINOR_VERSION 5
12 #define YY_FLEX_SUBMINOR_VERSION 39
11 #define YY_FLEX_MINOR_VERSION 6
12 #define YY_FLEX_SUBMINOR_VERSION 0
1313 #if YY_FLEX_SUBMINOR_VERSION > 0
1414 #define FLEX_BETA
1515 #endif
142142
143143 /* Size of default input buffer. */
144144 #ifndef YY_BUF_SIZE
145 #ifdef __ia64__
146 /* On IA-64, the buffer size is 16k, not 8k.
147 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
148 * Ditto for the __ia64__ case accordingly.
149 */
150 #define YY_BUF_SIZE 32768
151 #else
145152 #define YY_BUF_SIZE 16384
153 #endif /* __ia64__ */
146154 #endif
147155
148156 /* The state buf must be large enough to hold one state per character in the main buffer.
175183 do \
176184 { \
177185 /* Undo effects of setting up yytext. */ \
178 int yyless_macro_arg = (n); \
186 yy_size_t yyless_macro_arg = (n); \
179187 YY_LESS_LINENO(yyless_macro_arg);\
180188 *yy_cp = (yy_hold_char); \
181189 YY_RESTORE_YY_MORE_OFFSET \
345353 int yylineno = 1;
346354
347355 extern char *yytext;
356 #ifdef yytext_ptr
357 #undef yytext_ptr
358 #endif
348359 #define yytext_ptr yytext
349360
350361 static yy_state_type yy_get_previous_state (void );
351362 static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
352363 static int yy_get_next_buffer (void );
364 #if defined(__GNUC__) && __GNUC__ >= 3
365 __attribute__((__noreturn__))
366 #endif
353367 static void yy_fatal_error (yyconst char msg[] );
354368
355369 /* Done after the current pattern has been matched and before the
363377 *yy_cp = '\0'; \
364378 (yy_c_buf_p) = yy_cp;
365379
366 #define YY_NUM_RULES 179
367 #define YY_END_OF_BUFFER 180
380 #define YY_NUM_RULES 183
381 #define YY_END_OF_BUFFER 184
368382 /* This struct is not used in this scanner,
369383 but its presence is necessary. */
370384 struct yy_trans_info
372386 flex_int32_t yy_verify;
373387 flex_int32_t yy_nxt;
374388 };
375 static yyconst flex_int16_t yy_accept[1800] =
389 static yyconst flex_int16_t yy_accept[1847] =
376390 { 0,
377 1, 1, 161, 161, 165, 165, 169, 169, 173, 173,
378 1, 1, 180, 177, 1, 159, 159, 178, 2, 177,
379 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
380 177, 177, 177, 177, 177, 177, 177, 177, 177, 178,
381 161, 162, 162, 163, 178, 165, 166, 166, 167, 178,
382 172, 169, 170, 170, 171, 178, 173, 174, 174, 175,
383 178, 176, 160, 2, 164, 176, 178, 177, 0, 1,
384 2, 2, 2, 2, 177, 177, 177, 177, 177, 177,
385 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
386 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
387
388 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
389 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
390 177, 177, 177, 177, 177, 177, 161, 0, 165, 0,
391 172, 0, 169, 173, 0, 176, 0, 2, 2, 176,
392 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
393 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
394 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
395 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
396 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
397 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
398
399 177, 177, 176, 177, 177, 177, 177, 177, 177, 177,
400 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
401 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
402 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
403 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
404 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
405 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
406 177, 177, 177, 177, 177, 177, 177, 176, 177, 177,
407 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
408 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
409
410 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
411 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
412 177, 177, 177, 73, 177, 177, 177, 177, 177, 177,
413 7, 177, 177, 177, 177, 177, 177, 177, 177, 177,
414 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
415 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
416 177, 177, 177, 177, 177, 177, 176, 177, 177, 177,
417 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
418 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
419 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
420
421 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
422 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
423 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
424 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
425 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
426 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
427 176, 177, 177, 177, 177, 177, 33, 177, 177, 177,
428 177, 177, 177, 177, 177, 140, 177, 13, 14, 177,
429 16, 15, 177, 177, 177, 177, 177, 177, 177, 177,
430 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
431
432 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
433 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
434 177, 177, 133, 177, 177, 177, 177, 177, 177, 177,
435 3, 177, 177, 177, 177, 177, 177, 177, 177, 177,
436 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
437 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
438 177, 177, 176, 177, 177, 177, 177, 177, 177, 177,
439 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
440 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
441 177, 177, 177, 177, 177, 177, 177, 177, 168, 177,
442
443 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
444 177, 177, 177, 177, 36, 177, 177, 177, 177, 177,
445 177, 177, 177, 177, 177, 37, 177, 177, 177, 177,
446 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
447 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
448 18, 177, 177, 177, 177, 177, 177, 177, 177, 177,
449 177, 177, 177, 177, 177, 177, 177, 88, 168, 177,
450 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
451 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
452 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
453
454 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
455 177, 87, 177, 177, 177, 177, 177, 177, 177, 177,
456 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
457 177, 177, 177, 177, 177, 177, 177, 177, 177, 71,
458 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
459 177, 177, 177, 177, 23, 177, 177, 177, 177, 177,
460 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
461 177, 34, 177, 177, 177, 177, 177, 177, 177, 177,
462 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
463 177, 177, 177, 177, 35, 177, 177, 177, 177, 177,
464
465 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
466 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
467 177, 177, 177, 177, 177, 177, 177, 177, 177, 25,
468 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
469 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
470 177, 177, 177, 177, 177, 177, 177, 177, 177, 153,
471 177, 177, 177, 177, 177, 177, 29, 177, 30, 177,
472 177, 177, 74, 177, 75, 177, 72, 177, 177, 177,
473 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
474 177, 177, 6, 177, 177, 177, 177, 177, 177, 177,
475
476 177, 177, 177, 177, 177, 177, 177, 177, 177, 90,
477 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
478 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
479 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
480 177, 177, 177, 26, 177, 177, 177, 177, 177, 116,
481 115, 177, 177, 177, 177, 177, 177, 177, 177, 177,
482 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
483 177, 177, 177, 177, 177, 177, 38, 177, 177, 177,
484 177, 177, 177, 177, 177, 77, 76, 177, 177, 177,
485 177, 177, 177, 177, 112, 177, 177, 177, 177, 177,
486
487 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
488 177, 177, 177, 177, 177, 177, 56, 177, 177, 177,
489 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
490 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
491 60, 177, 177, 177, 177, 177, 177, 177, 177, 177,
492 177, 177, 177, 177, 177, 177, 177, 177, 177, 114,
493 177, 177, 177, 177, 177, 177, 177, 177, 177, 5,
494 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
495 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
496 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
497
498 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
499 177, 108, 177, 177, 177, 177, 177, 177, 177, 177,
500 177, 126, 177, 109, 177, 138, 177, 177, 177, 177,
501 177, 177, 177, 177, 177, 177, 24, 177, 177, 177,
502 177, 79, 177, 80, 78, 177, 177, 177, 177, 177,
503 177, 177, 86, 177, 177, 177, 177, 177, 177, 177,
504 177, 177, 177, 177, 177, 110, 177, 177, 177, 177,
505 137, 177, 177, 177, 177, 177, 177, 177, 177, 177,
506 177, 177, 177, 177, 70, 177, 177, 177, 177, 177,
507 177, 177, 177, 177, 177, 177, 177, 177, 177, 31,
508
509 177, 177, 20, 177, 177, 177, 17, 177, 95, 177,
510 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
511 177, 177, 177, 45, 47, 177, 177, 177, 177, 177,
512 177, 177, 177, 141, 177, 177, 177, 177, 177, 177,
513 177, 177, 177, 177, 177, 177, 177, 81, 177, 177,
514 177, 177, 177, 177, 85, 177, 177, 177, 177, 177,
515 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
516 177, 177, 89, 177, 177, 177, 177, 177, 177, 177,
517 177, 177, 177, 177, 177, 177, 132, 177, 177, 177,
518 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
519
520 177, 177, 177, 177, 177, 177, 177, 177, 177, 99,
521 177, 103, 177, 177, 177, 177, 84, 177, 177, 66,
522 177, 124, 177, 177, 177, 177, 139, 177, 177, 177,
523 177, 177, 177, 177, 146, 177, 177, 177, 177, 177,
524 177, 177, 177, 177, 177, 177, 102, 177, 177, 177,
525 177, 177, 48, 49, 177, 177, 32, 55, 104, 177,
526 117, 113, 177, 177, 41, 177, 106, 177, 177, 177,
527 177, 177, 8, 177, 177, 177, 69, 177, 177, 177,
528 177, 155, 177, 123, 177, 177, 177, 177, 177, 177,
529 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
530
531 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
532 177, 91, 145, 177, 177, 177, 177, 177, 177, 177,
533 177, 134, 177, 177, 177, 177, 177, 177, 177, 177,
534 177, 177, 177, 177, 177, 177, 177, 105, 177, 40,
535 42, 177, 177, 177, 177, 177, 177, 177, 68, 177,
536 177, 177, 177, 154, 177, 177, 177, 177, 128, 21,
537 22, 177, 177, 177, 177, 177, 177, 177, 65, 177,
538 177, 177, 177, 177, 177, 177, 177, 177, 177, 130,
539 127, 177, 177, 177, 177, 177, 177, 177, 177, 39,
540 177, 177, 177, 177, 177, 177, 177, 12, 177, 177,
541
542 177, 177, 177, 177, 177, 177, 177, 11, 177, 177,
543 19, 177, 177, 177, 158, 177, 43, 177, 136, 129,
544 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
545 177, 98, 97, 177, 177, 131, 125, 177, 177, 177,
546 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
547 177, 177, 177, 177, 177, 50, 177, 177, 135, 177,
548 177, 177, 177, 177, 177, 177, 177, 44, 177, 177,
549 177, 92, 94, 118, 177, 177, 177, 96, 177, 177,
550 177, 177, 177, 177, 177, 177, 177, 142, 177, 177,
551 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
552
553 119, 177, 177, 27, 177, 177, 177, 4, 177, 177,
554 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
555 177, 177, 177, 177, 144, 177, 177, 122, 177, 177,
556 177, 177, 177, 177, 177, 53, 177, 28, 177, 10,
557 177, 177, 177, 177, 177, 120, 57, 177, 177, 177,
558 101, 177, 177, 177, 177, 177, 177, 177, 143, 82,
559 177, 177, 177, 177, 59, 63, 58, 177, 51, 177,
560 9, 177, 177, 156, 177, 177, 100, 177, 177, 177,
561 177, 177, 177, 177, 177, 177, 177, 64, 62, 177,
562 52, 177, 111, 177, 121, 177, 177, 93, 46, 177,
563
564 177, 177, 177, 177, 177, 83, 61, 54, 157, 177,
565 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
566 177, 177, 177, 177, 177, 67, 177, 177, 177, 177,
567 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
568 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
569 177, 177, 177, 177, 107, 177, 177, 177, 177, 177,
570 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
571 177, 177, 177, 149, 177, 177, 177, 177, 177, 177,
572 177, 177, 177, 177, 177, 177, 177, 147, 177, 150,
573 151, 177, 177, 177, 177, 177, 148, 152, 0
574
391 1, 1, 165, 165, 169, 169, 173, 173, 177, 177,
392 1, 1, 184, 181, 1, 163, 163, 182, 2, 181,
393 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
394 181, 181, 181, 181, 181, 181, 181, 181, 181, 182,
395 165, 166, 166, 167, 182, 169, 170, 170, 171, 182,
396 176, 173, 174, 174, 175, 182, 177, 178, 178, 179,
397 182, 180, 164, 2, 168, 180, 182, 181, 0, 1,
398 2, 2, 2, 2, 181, 181, 181, 181, 181, 181,
399 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
400 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
401
402 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
403 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
404 181, 181, 181, 181, 181, 181, 165, 0, 169, 0,
405 176, 0, 173, 177, 0, 180, 0, 2, 2, 180,
406 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
407 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
408 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
409 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
410 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
411 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
412
413 181, 181, 181, 181, 180, 181, 181, 181, 181, 181,
414 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
415 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
416 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
417 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
418 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
419 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
420 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
421 181, 181, 180, 181, 181, 181, 181, 181, 181, 181,
422 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
423
424 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
425 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
426 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
427 181, 74, 181, 181, 181, 181, 181, 181, 7, 181,
428 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
429 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
430 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
431 181, 181, 181, 181, 180, 181, 181, 181, 181, 181,
432 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
433 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
434
435 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
436 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
437 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
438 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
439 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
440 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
441 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
442 181, 180, 181, 181, 181, 181, 181, 34, 181, 181,
443 181, 181, 181, 181, 181, 181, 181, 181, 143, 181,
444 13, 14, 181, 16, 15, 181, 181, 181, 181, 181,
445
446 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
447 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
448 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
449 181, 181, 181, 181, 181, 181, 134, 181, 181, 181,
450 181, 181, 181, 181, 3, 181, 181, 181, 181, 181,
451 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
452 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
453 181, 181, 181, 181, 181, 181, 180, 181, 181, 181,
454 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
455 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
456
457 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
458 181, 181, 181, 181, 172, 181, 181, 181, 181, 181,
459 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
460 181, 37, 181, 181, 181, 181, 181, 181, 181, 181,
461 181, 181, 38, 181, 181, 181, 181, 181, 181, 181,
462 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
463 181, 181, 181, 181, 181, 181, 181, 18, 181, 181,
464 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
465 181, 181, 181, 181, 89, 172, 181, 181, 181, 181,
466 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
467
468 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
469 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
470 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
471 88, 181, 181, 181, 181, 181, 181, 181, 181, 181,
472 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
473 181, 181, 181, 181, 181, 181, 181, 181, 181, 72,
474 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
475 181, 181, 181, 181, 23, 181, 181, 181, 181, 181,
476 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
477 181, 35, 181, 181, 181, 181, 181, 181, 181, 181,
478
479 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
480 181, 181, 181, 181, 181, 36, 181, 181, 181, 181,
481 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
482 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
483 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
484 181, 25, 181, 181, 181, 181, 181, 181, 181, 181,
485 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
486 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
487 181, 181, 157, 181, 181, 181, 181, 181, 181, 29,
488 181, 30, 181, 181, 181, 75, 181, 76, 181, 73,
489
490 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
491 181, 181, 181, 181, 181, 6, 181, 181, 181, 181,
492 181, 181, 181, 181, 181, 181, 181, 181, 181, 141,
493 181, 181, 181, 181, 91, 181, 181, 181, 181, 181,
494 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
495 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
496 181, 181, 181, 181, 181, 181, 181, 181, 26, 181,
497 181, 181, 181, 181, 181, 117, 181, 116, 181, 181,
498 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
499 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
500
501 181, 181, 181, 39, 181, 181, 181, 181, 181, 181,
502 181, 181, 78, 77, 181, 181, 181, 181, 181, 181,
503 181, 113, 181, 181, 181, 181, 181, 181, 181, 181,
504 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
505 181, 181, 181, 57, 181, 181, 181, 181, 181, 181,
506 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
507 181, 181, 181, 181, 181, 181, 181, 181, 61, 181,
508 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
509 181, 33, 181, 181, 181, 181, 181, 181, 181, 115,
510 181, 181, 181, 181, 181, 181, 181, 181, 181, 5,
511
512 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
513 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
514 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
515 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
516 181, 109, 181, 181, 181, 181, 181, 181, 181, 181,
517 181, 127, 181, 110, 181, 181, 139, 181, 181, 181,
518 181, 181, 181, 181, 181, 181, 181, 24, 181, 181,
519 181, 181, 80, 181, 81, 79, 181, 181, 181, 181,
520 181, 181, 181, 87, 181, 181, 181, 181, 181, 181,
521 181, 181, 181, 181, 181, 181, 111, 181, 181, 181,
522
523 181, 181, 138, 181, 181, 181, 181, 181, 181, 181,
524 181, 181, 181, 181, 181, 181, 71, 181, 181, 181,
525 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
526 181, 31, 181, 181, 20, 181, 181, 181, 17, 181,
527 96, 181, 181, 181, 181, 181, 181, 181, 181, 181,
528 181, 181, 181, 181, 181, 46, 48, 181, 181, 181,
529 181, 181, 181, 181, 181, 181, 144, 181, 181, 181,
530 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
531 82, 181, 181, 181, 181, 181, 181, 86, 181, 181,
532 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
533
534 181, 181, 181, 181, 181, 181, 90, 181, 181, 181,
535 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
536 133, 181, 181, 181, 181, 181, 181, 181, 181, 181,
537 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
538 181, 181, 181, 100, 181, 104, 181, 181, 181, 181,
539 85, 181, 181, 67, 181, 125, 181, 181, 181, 181,
540 181, 140, 181, 181, 181, 181, 181, 181, 181, 149,
541 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
542 181, 103, 181, 181, 181, 181, 181, 49, 50, 181,
543 181, 32, 56, 105, 181, 118, 142, 114, 181, 181,
544
545 42, 181, 107, 181, 181, 181, 181, 181, 8, 181,
546 181, 181, 70, 181, 181, 181, 181, 159, 181, 124,
547 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
548 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
549 181, 181, 181, 181, 181, 181, 181, 181, 92, 148,
550 181, 181, 181, 181, 181, 181, 181, 181, 135, 181,
551 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
552 181, 181, 181, 181, 106, 181, 41, 43, 181, 181,
553 181, 181, 181, 181, 181, 69, 181, 181, 181, 181,
554 158, 181, 181, 181, 181, 129, 21, 22, 181, 181,
555
556 181, 181, 181, 181, 181, 66, 181, 181, 181, 181,
557 181, 181, 181, 181, 181, 181, 131, 128, 181, 181,
558 181, 181, 181, 181, 181, 181, 181, 40, 181, 181,
559 181, 181, 181, 181, 181, 12, 181, 181, 181, 181,
560 181, 181, 181, 181, 181, 11, 181, 181, 19, 181,
561 181, 181, 162, 181, 44, 181, 137, 130, 181, 181,
562 181, 181, 181, 181, 181, 181, 181, 181, 181, 99,
563 98, 181, 181, 132, 126, 181, 181, 181, 181, 181,
564 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
565 181, 181, 181, 181, 51, 181, 181, 136, 181, 181,
566
567 181, 181, 181, 181, 181, 181, 45, 181, 181, 181,
568 93, 95, 119, 181, 181, 181, 97, 181, 181, 181,
569 181, 181, 181, 181, 181, 181, 181, 145, 181, 181,
570 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
571 120, 181, 181, 27, 181, 181, 181, 4, 181, 181,
572 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
573 181, 181, 181, 181, 181, 147, 181, 181, 123, 181,
574 181, 181, 181, 181, 181, 181, 54, 181, 28, 181,
575 10, 181, 181, 181, 181, 181, 121, 58, 181, 181,
576 181, 102, 181, 181, 181, 181, 181, 181, 181, 181,
577
578 146, 83, 181, 181, 181, 181, 60, 64, 59, 181,
579 52, 181, 9, 181, 181, 160, 181, 181, 101, 181,
580 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
581 65, 63, 181, 53, 181, 112, 181, 122, 181, 181,
582 94, 47, 181, 181, 181, 181, 181, 181, 181, 84,
583 62, 55, 161, 181, 181, 181, 181, 181, 181, 181,
584 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
585 181, 68, 181, 156, 181, 181, 181, 181, 181, 181,
586 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
587 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
588
589 181, 108, 181, 181, 181, 181, 181, 181, 181, 181,
590 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
591 152, 181, 181, 181, 181, 181, 181, 181, 181, 181,
592 181, 181, 181, 181, 150, 181, 153, 154, 181, 181,
593 181, 181, 181, 151, 155, 0
575594 } ;
576595
577 static yyconst flex_int32_t yy_ec[256] =
596 static yyconst YY_CHAR yy_ec[256] =
578597 { 0,
579598 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
580599 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
606625 1, 1, 1, 1, 1
607626 } ;
608627
609 static yyconst flex_int32_t yy_meta[66] =
628 static yyconst YY_CHAR yy_meta[66] =
610629 { 0,
611630 1, 2, 3, 4, 5, 1, 6, 1, 1, 1,
612631 1, 7, 1, 1, 1, 1, 1, 1, 1, 1,
617636 1, 1, 1, 1, 1
618637 } ;
619638
620 static yyconst flex_int16_t yy_base[1814] =
639 static yyconst flex_uint16_t yy_base[1861] =
621640 { 0,
622641 0, 0, 63, 66, 69, 71, 77, 83, 88, 91,
623 129, 135, 344, 303, 95, 5211, 5211, 5211, 107, 110,
642 129, 135, 355, 314, 95, 5329, 5329, 5329, 107, 110,
624643 142, 180, 108, 50, 145, 172, 118, 148, 121, 181,
625644 197, 166, 241, 137, 225, 260, 233, 228, 257, 116,
626 263, 5211, 5211, 5211, 94, 244, 5211, 5211, 5211, 96,
627 221, 251, 5211, 5211, 5211, 304, 212, 5211, 5211, 5211,
628 102, 208, 5211, 308, 5211, 268, 318, 206, 322, 111,
645 263, 5329, 5329, 5329, 94, 244, 5329, 5329, 5329, 96,
646 221, 251, 5329, 5329, 5329, 304, 212, 5329, 5329, 5329,
647 102, 208, 5329, 308, 5329, 268, 318, 206, 322, 111,
629648 0, 326, 0, 0, 201, 170, 217, 317, 193, 309,
630 312, 307, 183, 310, 332, 313, 311, 328, 330, 245,
631 336, 335, 358, 156, 347, 362, 376, 357, 355, 382,
632
633 363, 385, 373, 388, 372, 384, 391, 399, 411, 403,
634 426, 404, 408, 418, 413, 419, 438, 429, 448, 434,
635 439, 415, 460, 453, 445, 459, 164, 174, 141, 296,
636 134, 498, 165, 122, 312, 115, 502, 508, 0, 475,
637 494, 443, 491, 501, 488, 496, 492, 521, 515, 517,
638 525, 569, 513, 510, 526, 527, 528, 538, 547, 542,
639 552, 548, 555, 571, 579, 565, 570, 575, 594, 605,
640 608, 600, 593, 612, 610, 622, 623, 617, 616, 619,
641 613, 628, 626, 637, 641, 642, 643, 639, 652, 640,
642 664, 667, 651, 663, 666, 680, 668, 676, 695, 681,
643
644 684, 700, 685, 686, 693, 708, 711, 710, 703, 707,
645 709, 706, 736, 720, 344, 740, 748, 726, 735, 751,
646 752, 746, 744, 743, 758, 760, 764, 768, 762, 769,
647 781, 771, 797, 775, 770, 785, 792, 809, 807, 799,
648 796, 805, 801, 812, 806, 844, 254, 826, 831, 827,
649 841, 852, 481, 830, 854, 845, 858, 853, 839, 868,
650 856, 862, 888, 870, 880, 889, 904, 897, 892, 890,
651 894, 900, 903, 920, 960, 923, 930, 921, 924, 929,
652 926, 908, 931, 957, 940, 953, 956, 958, 980, 964,
653 970, 983, 1010, 973, 995, 996, 1000, 990, 1020, 998,
654
655 1004, 1026, 1019, 1025, 1029, 1023, 1002, 1013, 1036, 1040,
656 1053, 1059, 1045, 1065, 1069, 1047, 1061, 1067, 1072, 1077,
657 1082, 1062, 1089, 5211, 1097, 1080, 1092, 1075, 1088, 1106,
658 5211, 1093, 1102, 1107, 1116, 1114, 1125, 1124, 1135, 1119,
659 1117, 1115, 1134, 1140, 1142, 1144, 1149, 1195, 1150, 1153,
660 1157, 1183, 1151, 1165, 1189, 1131, 1192, 1171, 1179, 1187,
661 1205, 1182, 1220, 1199, 1214, 1212, 1230, 1209, 1228, 1219,
662 1229, 1235, 1126, 1232, 1238, 1246, 1248, 1255, 1262, 1272,
663 1253, 1274, 1279, 1257, 1283, 1286, 1291, 1267, 1287, 1293,
664 1295, 1294, 1299, 1276, 1306, 1302, 1303, 1324, 1310, 1311,
665
666 1322, 1321, 1315, 1334, 1338, 1346, 1342, 1339, 1348, 1344,
667 1364, 1361, 1375, 1355, 1380, 1373, 1366, 1382, 1368, 1385,
668 1386, 1387, 1398, 1388, 1391, 1410, 1411, 1418, 1426, 1422,
669 1408, 1428, 1414, 1415, 1425, 1419, 1446, 1431, 1441, 1416,
670 1447, 1468, 1451, 1453, 1464, 1471, 1458, 1474, 1460, 1463,
671 1473, 1477, 1483, 1487, 1500, 1502, 1490, 1509, 1503, 1504,
672 1514, 1517, 1521, 1501, 1541, 1524, 5211, 1497, 1534, 1528,
673 1535, 1529, 1536, 1532, 1580, 5211, 1551, 5211, 5211, 1556,
674 5211, 5211, 1561, 1568, 1567, 1576, 1629, 1577, 1569, 1583,
675 1588, 1579, 1598, 1610, 1607, 1612, 1618, 1624, 1637, 1625,
676
677 1626, 1640, 1635, 1654, 1650, 1658, 1656, 1590, 1670, 1682,
678 1669, 1673, 1681, 1683, 1666, 1675, 1687, 1671, 1695, 1693,
679 1708, 1686, 5211, 1703, 1706, 1716, 1709, 1724, 1711, 1734,
680 5211, 1720, 1722, 1735, 1728, 1736, 1739, 1751, 1740, 1747,
681 1750, 1761, 1762, 1767, 1757, 1771, 1766, 1783, 1785, 1778,
682 1787, 1789, 1790, 1781, 1798, 1794, 1808, 1786, 1807, 1819,
683 1803, 1824, 1827, 1817, 1833, 1821, 1812, 1828, 1825, 1870,
684 1839, 1826, 1831, 1834, 1857, 1851, 1860, 1867, 1878, 1880,
685 1872, 1876, 1861, 1896, 1905, 1900, 1913, 1903, 1920, 1902,
686 1922, 1923, 1926, 1927, 1930, 1909, 1933, 1941, 5211, 1960,
687
688 1956, 1946, 1950, 1968, 1962, 1951, 1953, 1966, 1955, 1971,
689 1961, 1977, 1990, 1983, 5211, 1986, 1982, 1992, 1979, 2009,
690 2010, 2003, 2019, 1989, 2008, 5211, 2028, 2039, 2022, 2017,
691 2018, 2035, 2033, 2048, 2036, 2049, 2056, 2058, 2052, 2063,
692 2029, 2062, 2055, 2083, 2074, 2075, 2077, 2080, 2082, 2098,
693 5211, 2081, 2102, 2095, 2100, 2115, 2119, 2101, 2117, 2104,
694 2120, 2124, 120, 2122, 2126, 2118, 2127, 5211, 76, 2141,
695 2133, 2138, 2142, 2145, 2151, 2154, 2143, 2160, 2161, 2162,
696 2171, 2165, 2172, 2173, 2176, 2189, 2182, 2196, 2200, 2199,
697 2198, 2207, 2193, 2204, 2203, 2209, 2214, 2223, 2239, 2235,
698
699 2230, 2232, 2241, 2237, 2233, 2240, 2236, 2250, 2238, 2231,
700 2264, 5211, 2286, 2270, 2277, 2267, 2288, 2278, 2296, 2276,
701 2297, 2289, 2292, 2303, 2305, 2304, 2313, 2307, 2312, 2322,
702 2323, 2320, 2314, 2330, 2339, 2342, 2365, 2350, 2332, 5211,
703 2349, 2340, 2345, 2359, 2360, 2348, 2369, 2376, 2377, 2375,
704 2372, 2394, 2390, 2398, 5211, 2404, 2395, 2409, 2413, 2396,
705 2414, 2421, 2419, 2410, 2424, 2425, 2434, 2437, 2417, 2436,
706 2440, 5211, 2449, 2453, 2445, 2458, 2459, 2451, 2460, 2473,
707 2455, 2456, 2462, 2474, 2464, 2469, 2472, 2491, 2483, 2480,
708 2486, 2507, 2493, 2509, 5211, 2526, 2515, 2517, 2521, 2513,
709
710 2532, 2529, 2534, 2519, 2531, 2537, 2542, 2544, 2543, 2564,
711 2548, 2554, 2553, 2561, 2570, 2559, 2572, 2580, 2574, 2565,
712 2589, 2581, 2603, 2590, 2597, 2617, 2619, 2620, 2625, 5211,
713 2618, 2604, 2623, 2613, 2614, 2639, 2632, 2615, 2624, 2630,
714 2644, 2631, 2666, 2646, 2648, 2649, 2650, 2658, 2653, 2664,
715 2677, 2681, 2670, 2683, 2685, 2673, 2693, 2690, 2712, 5211,
716 2699, 2698, 2716, 2720, 2707, 2711, 5211, 2705, 5211, 2717,
717 2732, 2739, 5211, 2728, 5211, 2736, 5211, 2734, 2741, 2725,
718 2745, 2748, 2751, 2738, 2757, 2754, 2772, 2749, 2766, 2775,
719 2763, 2780, 5211, 2768, 2778, 2787, 2789, 2776, 2790, 2799,
720
721 2791, 2818, 2817, 2828, 2805, 2831, 2815, 2830, 2827, 5211,
722 2812, 2839, 2834, 2821, 2847, 2832, 2857, 2842, 2859, 2845,
723 2868, 2879, 2875, 2863, 2866, 2867, 2877, 2883, 2873, 2894,
724 2888, 2900, 2889, 2891, 2893, 2903, 2910, 2906, 2928, 2909,
725 2915, 2925, 2920, 5211, 2926, 2930, 2936, 2942, 2932, 5211,
726 5211, 2901, 2947, 2955, 2949, 2952, 2964, 2977, 2958, 2968,
727 2971, 2953, 2980, 2972, 2970, 2985, 2991, 2981, 2978, 3008,
728 2998, 3010, 2997, 3025, 3022, 3020, 5211, 3036, 3021, 3046,
729 3037, 3024, 3049, 3041, 3047, 5211, 5211, 3051, 3042, 3057,
730 3053, 3061, 3063, 3067, 5211, 3069, 3083, 3086, 3088, 3090,
731
732 3092, 3077, 3082, 3098, 3094, 3096, 3099, 3117, 3112, 3109,
733 3120, 3115, 3128, 3137, 3138, 3140, 5211, 3136, 3143, 3139,
734 3144, 3148, 3142, 3135, 3147, 3164, 3160, 3167, 3183, 3189,
735 3169, 3174, 3168, 3192, 3177, 3198, 3199, 3201, 3206, 3200,
736 5211, 3210, 3194, 3215, 3204, 3208, 3213, 3222, 3231, 3226,
737 3227, 3238, 3228, 3237, 3236, 3252, 3233, 3260, 3242, 5211,
738 3258, 3266, 3253, 3269, 3272, 3256, 3289, 3265, 3284, 5211,
739 3292, 3302, 3285, 3294, 3306, 3308, 3307, 3309, 3304, 3295,
740 3311, 3298, 3317, 3321, 3319, 3322, 3328, 3332, 3337, 3347,
741 3349, 3354, 3357, 3356, 3340, 3348, 3364, 3363, 3369, 3375,
742
743 3360, 3365, 3397, 3370, 3390, 3387, 3376, 3402, 3383, 3410,
744 3395, 5211, 3408, 3414, 3412, 3416, 3398, 3413, 3422, 3417,
745 3421, 5211, 3426, 5211, 3424, 5211, 3435, 3433, 3432, 3446,
746 3438, 3442, 3460, 3462, 3470, 3454, 5211, 3474, 3453, 3463,
747 3469, 5211, 3476, 5211, 5211, 3477, 3479, 3481, 3483, 3484,
748 3505, 3509, 5211, 3508, 3494, 3516, 3513, 3497, 3511, 3519,
749 3521, 3499, 3524, 3510, 3527, 5211, 3548, 3554, 3537, 3550,
750 5211, 3549, 3561, 3541, 3557, 3568, 3560, 3564, 3575, 3551,
751 3576, 3574, 3572, 3592, 5211, 3586, 3590, 3607, 3608, 3595,
752 3591, 3612, 3616, 3613, 3602, 3635, 3622, 3619, 3618, 5211,
753
754 3645, 3648, 5211, 3639, 3634, 3640, 5211, 3657, 5211, 3658,
755 3655, 3651, 3659, 3633, 3660, 3665, 3674, 3684, 3689, 3685,
756 3673, 3691, 3682, 5211, 5211, 3704, 3696, 3706, 3707, 3701,
757 3692, 3709, 3717, 5211, 3697, 3725, 3715, 3712, 3740, 3728,
758 3731, 3743, 3744, 3735, 3751, 3733, 3734, 5211, 3741, 3739,
759 3757, 3758, 3769, 3761, 5211, 3787, 3786, 3780, 3778, 3784,
760 3794, 3798, 3799, 3785, 3788, 3802, 3804, 3810, 3811, 3817,
761 3818, 3813, 5211, 3828, 3823, 3815, 3835, 3821, 3837, 3838,
762 3851, 3836, 3827, 3854, 3853, 3847, 5211, 3829, 3848, 3862,
763 3878, 3858, 3864, 3884, 3860, 3887, 3881, 3880, 3895, 3868,
764
765 3889, 3876, 3896, 3891, 3903, 3916, 3907, 3662, 3922, 5211,
766 3911, 5211, 3923, 3934, 3940, 3936, 5211, 3927, 3938, 5211,
767 3929, 5211, 3943, 3939, 3955, 3951, 5211, 3957, 3962, 3959,
768 3965, 3966, 3964, 3978, 5211, 3981, 3987, 3988, 3989, 3991,
769 3982, 3993, 3999, 3995, 4002, 4007, 5211, 4009, 4023, 4003,
770 4024, 4029, 5211, 5211, 4021, 4036, 5211, 5211, 5211, 4033,
771 5211, 5211, 4034, 4041, 5211, 4042, 5211, 4047, 4043, 4038,
772 4045, 4048, 5211, 4030, 4061, 4077, 5211, 4069, 4083, 4064,
773 4070, 5211, 4084, 5211, 4081, 4087, 4076, 4088, 4092, 4095,
774 4098, 4094, 4100, 4111, 4112, 4114, 4102, 4108, 4130, 4122,
775
776 4110, 4120, 4119, 4137, 4129, 4142, 4144, 4147, 4149, 4148,
777 4162, 5211, 5211, 4145, 4150, 4151, 4163, 4171, 4164, 4167,
778 4181, 5211, 4186, 4187, 4190, 4188, 4198, 4200, 4204, 4202,
779 4199, 4205, 4201, 4207, 4214, 4230, 4217, 5211, 4223, 5211,
780 5211, 4231, 4236, 4238, 4225, 4241, 4253, 4250, 5211, 4246,
781 4252, 4255, 4257, 5211, 4271, 4266, 4272, 4274, 5211, 5211,
782 5211, 4275, 4265, 4280, 4286, 4290, 4277, 4292, 5211, 4279,
783 4303, 4304, 4305, 4310, 4311, 4209, 4319, 4315, 4325, 5211,
784 5211, 4330, 4329, 4323, 4331, 4326, 4335, 4334, 4332, 5211,
785 4342, 4336, 4351, 4356, 4366, 4372, 4367, 5211, 4355, 4357,
786
787 4360, 4380, 4369, 4381, 4385, 4378, 4384, 5211, 4400, 4397,
788 5211, 4391, 4405, 4399, 5211, 4420, 5211, 4398, 5211, 5211,
789 4403, 4427, 4426, 4431, 4433, 4434, 4417, 4424, 4443, 4440,
790 4441, 5211, 5211, 4436, 4447, 5211, 5211, 4458, 4452, 4446,
791 4439, 4463, 4471, 4461, 4470, 4462, 4482, 4486, 4479, 4488,
792 4472, 4474, 4485, 4491, 4496, 5211, 4517, 4521, 5211, 4507,
793 4526, 4527, 4519, 4514, 4530, 4520, 4523, 5211, 4536, 4537,
794 4510, 5211, 5211, 5211, 4534, 4541, 4556, 5211, 4562, 4561,
795 4551, 4552, 4569, 4557, 4581, 4555, 4585, 5211, 4568, 4576,
796 4586, 4589, 4590, 4588, 4592, 4597, 4601, 4583, 4621, 4603,
797
798 5211, 4623, 4620, 5211, 4627, 4614, 4612, 5211, 4628, 4626,
799 4615, 4643, 4644, 4632, 4633, 4638, 4646, 4654, 4648, 4652,
800 4650, 4667, 4665, 4674, 5211, 4676, 4661, 5211, 4681, 4673,
801 4684, 4690, 4691, 4697, 4693, 5211, 4699, 5211, 4701, 5211,
802 4704, 4692, 4696, 4712, 4710, 5211, 5211, 4713, 4722, 4725,
803 5211, 4729, 4723, 4709, 4728, 4741, 4724, 4733, 5211, 5211,
804 4726, 4743, 4747, 4760, 5211, 5211, 5211, 4763, 5211, 4762,
805 5211, 4767, 4755, 5211, 4775, 4761, 5211, 4765, 4777, 4778,
806 4754, 4780, 4787, 4792, 4793, 4782, 4784, 5211, 5211, 4799,
807 5211, 4800, 5211, 4812, 5211, 4803, 4816, 5211, 5211, 4820,
808
809 4804, 4824, 4794, 4805, 4821, 5211, 5211, 5211, 5211, 4830,
810 4826, 4825, 4814, 4831, 4839, 4842, 4844, 4836, 4845, 4857,
811 4863, 4850, 4864, 4874, 4866, 5211, 4870, 4869, 4878, 4882,
812 4873, 4886, 4884, 4890, 4889, 4897, 4905, 4900, 4893, 4916,
813 4909, 4922, 4924, 4933, 4934, 4925, 4926, 4940, 4935, 4945,
814 4949, 4951, 4954, 4950, 5211, 4952, 4955, 4956, 4967, 4958,
815 4965, 4969, 4986, 4992, 4984, 4991, 4985, 4999, 4996, 5001,
816 4990, 5000, 5002, 5211, 5017, 5019, 5014, 5015, 5036, 5020,
817 5026, 5042, 5038, 5047, 5040, 5050, 5048, 5211, 5051, 5211,
818 5211, 5052, 5049, 5061, 5058, 5059, 5211, 5211, 5211, 5119,
819
820 5126, 5133, 5140, 5147, 82, 5154, 5161, 5168, 5175, 5182,
821 5189, 5196, 5203
649 318, 310, 183, 312, 336, 311, 307, 341, 343, 245,
650 335, 350, 363, 156, 346, 370, 371, 357, 358, 376,
651
652 387, 391, 393, 398, 386, 397, 385, 399, 414, 408,
653 429, 412, 421, 422, 424, 418, 352, 435, 439, 450,
654 438, 431, 467, 448, 459, 455, 164, 174, 141, 296,
655 134, 509, 165, 122, 312, 115, 513, 517, 0, 486,
656 487, 488, 496, 510, 501, 506, 502, 515, 529, 526,
657 533, 536, 542, 586, 538, 508, 541, 532, 548, 545,
658 553, 549, 559, 560, 565, 576, 582, 584, 569, 597,
659 598, 622, 618, 610, 609, 620, 616, 624, 627, 625,
660 626, 629, 638, 634, 641, 642, 647, 659, 655, 651,
661 667, 653, 665, 646, 661, 674, 682, 697, 677, 688,
662
663 678, 699, 711, 710, 701, 695, 722, 723, 715, 725,
664 716, 718, 719, 724, 728, 745, 752, 734, 344, 763,
665 765, 751, 755, 768, 769, 774, 738, 762, 784, 772,
666 778, 782, 788, 786, 795, 813, 815, 798, 817, 801,
667 805, 812, 790, 827, 825, 836, 811, 828, 845, 847,
668 863, 254, 857, 850, 846, 862, 869, 868, 874, 880,
669 876, 877, 887, 890, 835, 892, 895, 908, 888, 904,
670 907, 928, 927, 935, 922, 918, 930, 955, 937, 1000,
671 926, 952, 945, 946, 962, 943, 940, 957, 971, 979,
672 981, 982, 999, 990, 984, 1006, 1004, 1009, 1017, 1036,
673
674 1018, 1024, 1032, 1039, 1052, 1001, 1037, 1042, 1049, 1041,
675 1057, 1066, 1051, 1061, 1065, 1067, 1068, 1069, 1089, 1097,
676 1078, 1103, 1107, 1085, 1099, 1098, 1105, 1113, 1115, 1100,
677 1118, 5329, 1122, 1117, 1131, 1134, 1132, 1141, 5329, 1135,
678 1136, 1137, 1158, 1148, 1162, 1161, 1164, 1154, 1149, 1165,
679 1170, 1175, 1168, 1177, 1184, 1230, 1185, 1187, 1191, 1220,
680 1212, 1201, 1222, 1183, 1226, 1228, 1232, 1245, 1218, 1202,
681 1235, 1252, 1247, 1253, 1265, 1279, 1264, 1259, 1271, 1270,
682 1281, 1273, 1286, 1282, 1287, 1274, 1297, 1296, 1291, 1319,
683 1309, 1320, 1325, 1331, 1328, 1330, 1335, 1311, 1334, 1329,
684
685 1344, 1337, 1338, 1347, 1346, 1345, 1349, 1372, 1351, 1378,
686 1364, 1376, 1371, 1387, 1377, 1389, 1391, 1383, 1407, 1396,
687 1405, 1412, 1404, 1419, 1423, 1427, 1428, 1411, 1422, 1431,
688 1432, 1438, 1435, 1470, 1448, 1456, 1446, 1462, 1473, 1478,
689 1475, 1453, 1479, 1466, 1467, 1463, 1487, 1488, 1486, 1501,
690 1499, 1505, 1483, 1502, 1504, 1524, 1526, 1522, 1531, 1511,
691 1518, 1528, 1532, 1535, 1549, 1560, 1564, 1543, 1566, 1562,
692 1558, 1570, 1574, 1576, 1557, 1581, 1585, 5329, 1583, 1586,
693 1591, 1599, 1596, 1619, 1608, 1602, 1600, 1648, 5329, 1609,
694 5329, 5329, 1615, 5329, 5329, 1622, 1628, 1635, 1623, 1697,
695
696 1649, 1638, 1644, 1661, 1645, 1666, 1662, 1680, 1678, 1681,
697 1700, 1687, 1683, 1702, 1691, 1713, 1712, 1722, 1718, 1717,
698 1729, 1737, 1641, 1745, 1743, 1747, 1744, 1749, 1736, 1750,
699 1751, 1748, 1765, 1760, 1770, 1764, 5329, 1777, 1779, 1766,
700 1775, 1797, 1784, 1806, 5329, 1780, 1795, 1787, 1785, 1796,
701 1810, 1811, 1815, 1813, 1802, 1825, 1827, 1833, 1843, 1829,
702 1836, 1855, 1857, 1858, 1840, 1852, 1860, 1848, 1870, 1876,
703 1875, 1856, 1867, 1877, 1861, 1890, 1893, 1884, 1891, 1887,
704 1885, 1886, 1896, 1941, 1914, 1920, 1913, 1904, 1933, 1934,
705 1927, 1907, 1931, 1959, 1938, 1970, 1961, 1955, 1960, 1964,
706
707 1968, 1943, 1998, 1971, 1987, 1980, 1988, 2002, 2008, 2001,
708 2018, 2015, 2011, 2012, 5329, 2021, 2017, 2022, 2010, 2026,
709 2047, 2027, 2048, 2039, 2049, 2037, 2060, 2042, 2053, 2054,
710 2064, 5329, 2051, 2059, 2073, 2066, 2090, 2091, 2092, 2098,
711 2076, 2089, 5329, 2109, 2106, 2105, 2097, 2093, 2112, 2094,
712 2128, 2121, 2125, 2138, 2139, 2133, 2140, 2144, 2141, 2129,
713 2148, 2135, 2160, 2161, 2169, 2158, 2159, 5329, 2165, 2186,
714 2173, 2185, 2198, 2199, 2178, 2201, 2188, 2190, 2191, 120,
715 2196, 2210, 2202, 2208, 5329, 76, 2213, 2217, 2216, 2226,
716 2242, 2234, 2240, 2235, 2237, 2247, 2241, 2231, 2248, 2258,
717
718 2238, 2270, 2266, 2263, 2265, 2267, 2285, 2283, 2282, 2277,
719 2292, 2278, 2290, 2297, 2284, 2301, 2308, 2316, 2312, 2310,
720 2317, 2324, 2322, 2319, 2315, 2323, 2339, 2340, 2333, 2347,
721 5329, 2344, 2343, 2354, 2349, 2359, 2361, 2379, 2358, 2376,
722 2386, 2365, 2384, 2398, 2394, 2392, 2396, 2406, 2399, 2404,
723 2388, 2400, 2403, 2414, 2411, 2428, 2451, 2436, 2435, 5329,
724 2443, 2424, 2430, 2441, 2453, 2458, 2457, 2473, 2468, 2434,
725 2431, 2486, 2474, 2488, 5329, 2487, 2492, 2483, 2491, 2484,
726 2493, 2500, 2506, 2501, 2507, 2514, 2518, 2524, 2508, 2530,
727 2531, 5329, 2534, 2541, 2535, 2546, 2545, 2528, 2532, 2544,
728
729 2549, 2533, 2550, 2564, 2555, 2567, 2562, 2565, 2568, 2560,
730 2572, 2581, 2597, 2577, 2593, 5329, 2582, 2614, 2594, 2608,
731 2617, 2604, 2626, 2625, 2612, 2613, 2607, 2620, 2631, 2624,
732 2628, 2645, 2639, 2635, 2647, 2652, 2653, 2651, 2659, 2666,
733 2672, 2665, 2662, 2675, 2676, 2680, 2691, 2689, 2709, 2686,
734 2705, 5329, 2708, 2707, 2694, 2710, 2713, 2703, 2724, 2729,
735 2725, 2726, 2720, 2731, 2735, 2730, 2736, 2740, 2742, 2747,
736 2751, 2743, 2733, 2775, 2777, 2767, 2778, 2781, 2771, 2786,
737 2774, 2813, 5329, 2769, 2790, 2794, 2793, 2798, 2804, 5329,
738 2809, 5329, 2823, 2829, 2833, 5329, 2834, 5329, 2835, 5329,
739
740 2836, 2837, 2826, 2822, 2844, 2843, 2852, 2851, 2849, 2871,
741 2855, 2862, 2876, 2864, 2879, 5329, 2863, 2874, 2885, 2882,
742 2875, 2896, 2908, 2898, 2903, 2892, 2924, 2901, 2930, 5329,
743 2913, 2929, 2912, 2928, 5329, 2909, 2936, 2926, 2922, 2944,
744 2945, 2941, 2943, 2954, 2951, 2963, 2971, 2974, 2964, 2961,
745 2965, 2978, 2988, 2972, 2989, 2987, 2991, 2979, 2984, 2993,
746 3003, 3007, 3012, 3030, 3008, 3009, 3018, 3006, 5329, 3037,
747 3033, 3026, 3035, 3039, 3031, 5329, 3023, 5329, 3049, 3058,
748 3062, 3055, 3054, 3053, 3074, 3064, 3081, 3079, 3075, 3080,
749 3069, 3070, 3076, 3097, 3090, 3094, 3103, 3089, 3114, 3113,
750
751 3128, 3125, 3108, 5329, 3131, 3120, 3132, 3127, 3124, 3150,
752 3135, 3154, 5329, 5329, 3141, 3153, 3151, 3155, 3171, 3156,
753 3161, 5329, 3165, 3182, 3168, 3184, 3192, 3178, 3180, 3193,
754 3191, 3188, 3210, 3209, 3211, 3206, 3214, 3215, 3204, 3220,
755 3228, 3229, 3234, 5329, 3235, 3230, 3243, 3233, 3241, 3242,
756 3252, 3248, 3253, 3262, 3254, 3250, 3276, 3286, 3266, 3269,
757 3275, 3283, 3277, 3294, 3299, 3296, 3290, 3302, 5329, 3310,
758 3289, 3312, 3293, 3309, 3324, 3316, 3328, 3311, 3326, 3323,
759 3329, 5329, 3321, 3333, 3330, 3337, 3343, 3339, 3360, 5329,
760 3356, 3372, 3362, 3368, 3369, 3353, 3381, 3358, 3385, 5329,
761
762 3386, 3397, 3380, 3387, 3402, 3407, 3410, 3411, 3406, 3399,
763 3398, 3408, 3427, 3404, 3413, 3431, 3421, 3426, 3435, 3446,
764 3442, 3441, 3444, 3456, 3440, 3462, 3468, 3465, 3474, 3479,
765 3454, 3472, 3489, 3478, 3482, 3481, 3469, 3495, 3475, 3502,
766 3488, 5329, 3501, 3509, 3512, 3514, 3498, 3513, 3521, 3517,
767 3524, 5329, 3525, 5329, 3529, 3522, 5329, 3531, 3535, 3527,
768 3546, 3545, 3548, 3538, 3559, 3570, 3554, 5329, 3575, 3553,
769 3569, 3574, 5329, 3577, 5329, 5329, 3573, 3565, 3589, 3582,
770 3592, 3605, 3584, 5329, 3601, 3597, 3611, 3604, 3600, 3606,
771 3610, 3624, 3603, 3626, 3623, 3627, 5329, 3637, 3644, 3634,
772
773 3648, 3649, 5329, 3645, 3657, 3639, 3662, 3675, 3673, 3676,
774 3669, 3663, 3664, 3688, 3682, 3672, 5329, 3679, 3697, 3701,
775 3712, 3702, 3696, 3692, 3721, 3725, 3706, 3722, 3728, 3723,
776 3724, 5329, 3737, 3741, 5329, 3743, 3740, 3749, 5329, 3766,
777 5329, 3768, 3720, 3750, 3762, 3778, 3770, 3780, 3763, 3777,
778 3783, 3773, 3784, 3795, 3792, 5329, 5329, 3791, 3787, 3794,
779 3815, 3805, 3802, 3828, 3821, 3825, 5329, 3806, 3822, 3811,
780 3830, 3832, 3823, 3819, 3836, 3847, 3850, 3855, 3840, 3852,
781 5329, 3846, 3856, 3857, 3854, 3858, 3867, 5329, 3886, 3887,
782 3878, 3881, 3893, 3898, 3889, 3900, 3894, 3897, 3901, 3904,
783
784 3911, 3913, 3912, 3919, 3923, 3915, 5329, 3924, 3930, 3916,
785 3941, 3926, 3939, 3946, 3947, 3952, 3950, 3940, 3951, 3954,
786 5329, 3938, 3937, 3965, 3979, 3984, 3967, 3988, 3972, 3990,
787 3992, 3977, 3995, 3968, 3996, 3981, 4007, 3999, 3994, 4015,
788 4017, 4036, 4029, 5329, 4018, 5329, 4026, 4039, 4041, 4045,
789 5329, 4028, 4048, 5329, 4037, 5329, 4044, 4056, 4032, 4065,
790 4069, 5329, 4078, 4066, 4081, 4073, 4072, 4068, 4088, 5329,
791 4090, 4095, 4091, 4092, 4083, 4106, 4107, 4108, 4118, 4105,
792 4121, 5329, 4110, 4124, 4135, 4131, 4134, 5329, 5329, 4130,
793 4140, 5329, 5329, 5329, 4142, 5329, 5329, 5329, 4138, 4146,
794
795 5329, 4149, 5329, 4156, 4158, 4148, 4150, 4155, 5329, 4161,
796 4162, 4178, 5329, 4170, 4185, 4166, 4175, 5329, 4192, 5329,
797 4189, 4193, 4182, 4198, 4200, 4204, 4208, 4201, 4197, 4202,
798 4206, 4220, 4221, 4216, 4210, 4225, 4212, 4224, 4233, 4230,
799 4235, 4237, 4245, 4251, 4253, 4250, 4266, 4268, 5329, 5329,
800 4259, 4257, 4265, 4270, 4280, 4271, 4281, 4273, 5329, 4288,
801 4294, 4297, 4295, 4293, 4301, 4296, 4286, 4309, 4329, 4315,
802 4320, 4321, 4322, 4314, 5329, 4324, 5329, 5329, 4325, 4341,
803 4350, 4338, 4337, 4357, 4354, 5329, 4348, 4362, 4359, 4356,
804 5329, 4373, 4360, 4374, 4376, 5329, 5329, 5329, 4377, 4370,
805
806 4382, 4383, 4389, 4380, 4387, 5329, 4393, 4397, 4406, 4398,
807 4412, 4417, 4427, 4423, 4430, 4431, 5329, 5329, 4419, 4438,
808 4433, 4436, 4434, 4447, 4440, 4444, 4439, 5329, 4442, 4455,
809 4464, 4470, 4471, 4482, 4472, 5329, 4465, 4466, 4468, 4485,
810 4469, 4492, 4490, 4494, 4498, 5329, 4496, 4507, 5329, 4512,
811 4504, 4509, 5329, 4521, 5329, 4526, 5329, 5329, 4513, 4534,
812 4538, 4527, 4537, 4542, 4528, 4530, 4554, 4552, 4555, 5329,
813 5329, 4550, 4562, 5329, 5329, 4558, 4549, 4565, 4557, 4560,
814 4564, 4572, 4569, 4587, 4579, 4573, 4602, 4592, 4599, 4589,
815 4584, 4611, 4597, 4601, 5329, 4612, 4615, 5329, 4605, 4613,
816
817 4629, 4625, 4626, 4627, 4630, 4637, 5329, 4640, 4639, 4638,
818 5329, 5329, 5329, 4650, 4657, 4653, 5329, 4654, 4660, 4652,
819 4675, 4667, 4678, 4673, 4679, 4668, 4674, 5329, 4684, 4677,
820 4697, 4694, 4699, 4696, 4690, 4705, 4702, 4701, 4714, 4718,
821 5329, 4716, 4717, 5329, 4731, 4726, 4715, 5329, 4732, 4734,
822 4725, 4750, 4751, 4736, 4744, 4742, 4757, 4754, 4752, 4764,
823 4763, 4761, 4774, 4769, 4776, 5329, 4785, 4773, 5329, 4793,
824 4783, 4799, 4802, 4805, 4806, 4803, 5329, 4809, 5329, 4810,
825 5329, 4815, 4807, 4813, 4816, 4812, 5329, 5329, 4819, 4818,
826 4823, 5329, 4836, 4835, 4843, 4834, 4837, 4839, 4838, 4855,
827
828 5329, 5329, 4849, 4858, 4867, 4868, 5329, 5329, 5329, 4871,
829 5329, 4873, 5329, 4875, 4874, 5329, 4881, 4876, 5329, 4879,
830 4889, 4890, 4887, 4880, 4894, 4899, 4906, 4907, 4903, 4910,
831 5329, 5329, 4913, 5329, 4923, 5329, 4925, 5329, 4915, 4928,
832 5329, 5329, 4932, 4945, 4917, 4938, 4934, 4930, 4944, 5329,
833 5329, 5329, 5329, 4942, 4947, 4952, 4951, 4949, 4959, 4965,
834 4957, 4970, 4966, 4974, 4988, 4984, 4991, 4973, 4987, 5003,
835 4992, 5329, 4990, 5329, 4994, 5007, 5011, 5008, 5014, 5001,
836 5010, 5012, 5023, 5029, 5025, 5021, 5038, 5040, 5045, 5050,
837 5052, 5056, 5041, 5049, 5062, 5067, 5066, 5071, 5068, 5072,
838
839 5065, 5329, 5070, 5077, 5081, 5093, 5102, 5104, 5088, 5110,
840 5112, 5114, 5115, 5097, 5121, 5118, 5128, 5131, 5127, 5134,
841 5329, 5139, 5142, 5137, 5138, 5159, 5148, 5149, 5162, 5151,
842 5165, 5170, 5173, 5174, 5329, 5177, 5329, 5329, 5180, 5169,
843 5179, 5191, 5193, 5329, 5329, 5329, 5237, 5244, 5251, 5258,
844 5265, 82, 5272, 5279, 5286, 5293, 5300, 5307, 5314, 5321
822845 } ;
823846
824 static yyconst flex_int16_t yy_def[1814] =
847 static yyconst flex_int16_t yy_def[1861] =
825848 { 0,
826 1799, 1, 1800, 1800, 1801, 1801, 1802, 1802, 1803, 1803,
827 1804, 1804, 1799, 1805, 1799, 1799, 1799, 1799, 1806, 1805,
828 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
829 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
830 1807, 1799, 1799, 1799, 1807, 1808, 1799, 1799, 1799, 1808,
831 1809, 1799, 1799, 1799, 1799, 1809, 1810, 1799, 1799, 1799,
832 1810, 1811, 1799, 1812, 1799, 1811, 1811, 1805, 1805, 1799,
833 1813, 1806, 1813, 1806, 1805, 1805, 1805, 1805, 1805, 1805,
834 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
835 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
836
837 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
838 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
839 1805, 1805, 1805, 1805, 1805, 1805, 1807, 1807, 1808, 1808,
840 1809, 1809, 1799, 1810, 1810, 1811, 1811, 1812, 1812, 1811,
841 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
842 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
843 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
844 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
845 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
846 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
847
848 1805, 1805, 1811, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
849 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
850 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
851 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
852 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
853 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
854 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
855 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1811, 1805, 1805,
856 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
857 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
858
859 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
860 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
861 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
862 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
863 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
864 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
865 1805, 1805, 1805, 1805, 1805, 1805, 1811, 1805, 1805, 1805,
866 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
867 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
868 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
869
870 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
871 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
872 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
873 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
874 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
875 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
876 1811, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
877 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799, 1799, 1805,
878 1799, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
879 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
880
881 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
882 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
883 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
884 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
885 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
886 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
887 1805, 1805, 1811, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
888 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
889 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
890 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805,
891
892 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
893 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
894 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805,
895 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
896 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
897 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
898 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1811, 1805,
899 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
900 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
901 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
902
903 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
904 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
905 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
906 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
907 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
908 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
909 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
910 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
911 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
912 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
913
914 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
915 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
916 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
917 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
918 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
919 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
920 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799, 1805,
921 1805, 1805, 1799, 1805, 1799, 1805, 1799, 1805, 1805, 1805,
922 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
923 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
924
925 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
926 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
927 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
928 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
929 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1799,
930 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
931 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
932 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
933 1805, 1805, 1805, 1805, 1805, 1799, 1799, 1805, 1805, 1805,
934 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
935
936 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
937 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
938 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
939 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
940 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
941 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
942 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
943 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
944 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
945 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
946
947 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
948 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
949 1805, 1799, 1805, 1799, 1805, 1799, 1805, 1805, 1805, 1805,
950 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
951 1805, 1799, 1805, 1799, 1799, 1805, 1805, 1805, 1805, 1805,
952 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
953 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805,
954 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
955 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
956 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
957
958 1805, 1805, 1799, 1805, 1805, 1805, 1799, 1805, 1799, 1805,
959 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
960 1805, 1805, 1805, 1799, 1799, 1805, 1805, 1805, 1805, 1805,
961 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
962 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
963 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
964 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
965 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
966 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
967 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
968
969 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
970 1805, 1799, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1799,
971 1805, 1799, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
972 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
973 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
974 1805, 1805, 1799, 1799, 1805, 1805, 1799, 1799, 1799, 1805,
975 1799, 1799, 1805, 1805, 1799, 1805, 1799, 1805, 1805, 1805,
976 1805, 1805, 1799, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
977 1805, 1799, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
978 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
979
980 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
981 1805, 1799, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
982 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
983 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799,
984 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805,
985 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1799, 1799,
986 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805,
987 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
988 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
989 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
990
991 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
992 1799, 1805, 1805, 1805, 1799, 1805, 1799, 1805, 1799, 1799,
993 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
994 1805, 1799, 1799, 1805, 1805, 1799, 1799, 1805, 1805, 1805,
995 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
996 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1799, 1805,
997 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
998 1805, 1799, 1799, 1799, 1805, 1805, 1805, 1799, 1805, 1805,
999 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
1000 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
1001
1002 1799, 1805, 1805, 1799, 1805, 1805, 1805, 1799, 1805, 1805,
1003 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
1004 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1799, 1805, 1805,
1005 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799, 1805, 1799,
1006 1805, 1805, 1805, 1805, 1805, 1799, 1799, 1805, 1805, 1805,
1007 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1799,
1008 1805, 1805, 1805, 1805, 1799, 1799, 1799, 1805, 1799, 1805,
1009 1799, 1805, 1805, 1799, 1805, 1805, 1799, 1805, 1805, 1805,
1010 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1799, 1805,
1011 1799, 1805, 1799, 1805, 1799, 1805, 1805, 1799, 1799, 1805,
1012
1013 1805, 1805, 1805, 1805, 1805, 1799, 1799, 1799, 1799, 1805,
1014 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
1015 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805,
1016 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
1017 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
1018 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
1019 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
1020 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
1021 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799,
1022 1799, 1805, 1805, 1805, 1805, 1805, 1799, 1799, 0, 1799,
1023
1024 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
1025 1799, 1799, 1799
849 1846, 1, 1847, 1847, 1848, 1848, 1849, 1849, 1850, 1850,
850 1851, 1851, 1846, 1852, 1846, 1846, 1846, 1846, 1853, 1852,
851 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
852 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
853 1854, 1846, 1846, 1846, 1854, 1855, 1846, 1846, 1846, 1855,
854 1856, 1846, 1846, 1846, 1846, 1856, 1857, 1846, 1846, 1846,
855 1857, 1858, 1846, 1859, 1846, 1858, 1858, 1852, 1852, 1846,
856 1860, 1853, 1860, 1853, 1852, 1852, 1852, 1852, 1852, 1852,
857 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
858 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
859
860 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
861 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
862 1852, 1852, 1852, 1852, 1852, 1852, 1854, 1854, 1855, 1855,
863 1856, 1856, 1846, 1857, 1857, 1858, 1858, 1859, 1859, 1858,
864 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
865 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
866 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
867 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
868 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
869 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
870
871 1852, 1852, 1852, 1852, 1858, 1852, 1852, 1852, 1852, 1852,
872 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
873 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
874 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
875 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
876 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
877 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
878 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
879 1852, 1852, 1858, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
880 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
881
882 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
883 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
884 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
885 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
886 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
887 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
888 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
889 1852, 1852, 1852, 1852, 1858, 1852, 1852, 1852, 1852, 1852,
890 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
891 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
892
893 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
894 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
895 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
896 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
897 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
898 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
899 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
900 1852, 1858, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
901 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
902 1846, 1846, 1852, 1846, 1846, 1852, 1852, 1852, 1852, 1852,
903
904 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
905 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
906 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
907 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
908 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
909 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
910 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
911 1852, 1852, 1852, 1852, 1852, 1852, 1858, 1852, 1852, 1852,
912 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
913 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
914
915 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
916 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
917 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
918 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
919 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
920 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
921 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
922 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
923 1852, 1852, 1852, 1852, 1846, 1858, 1852, 1852, 1852, 1852,
924 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
925
926 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
927 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
928 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
929 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
930 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
931 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
932 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
933 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
934 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
935 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
936
937 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
938 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
939 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
940 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
941 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
942 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
943 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
944 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
945 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
946 1852, 1846, 1852, 1852, 1852, 1846, 1852, 1846, 1852, 1846,
947
948 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
949 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
950 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
951 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
952 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
953 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
954 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
955 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1852, 1852,
956 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
957 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
958
959 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
960 1852, 1852, 1846, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
961 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
962 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
963 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
964 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
965 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
966 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
967 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
968 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
969
970 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
971 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
972 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
973 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
974 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
975 1852, 1846, 1852, 1846, 1852, 1852, 1846, 1852, 1852, 1852,
976 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
977 1852, 1852, 1846, 1852, 1846, 1846, 1852, 1852, 1852, 1852,
978 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
979 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
980
981 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
982 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
983 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
984 1852, 1846, 1852, 1852, 1846, 1852, 1852, 1852, 1846, 1852,
985 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
986 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852, 1852, 1852,
987 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
988 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
989 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
990 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
991
992 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
993 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
994 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
995 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
996 1852, 1852, 1852, 1846, 1852, 1846, 1852, 1852, 1852, 1852,
997 1846, 1852, 1852, 1846, 1852, 1846, 1852, 1852, 1852, 1852,
998 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
999 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1000 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852,
1001 1852, 1846, 1846, 1846, 1852, 1846, 1846, 1846, 1852, 1852,
1002
1003 1846, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
1004 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1846, 1852, 1846,
1005 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1006 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1007 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1846,
1008 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
1009 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1010 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1846, 1852, 1852,
1011 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
1012 1846, 1852, 1852, 1852, 1852, 1846, 1846, 1846, 1852, 1852,
1013
1014 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
1015 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852, 1852,
1016 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
1017 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
1018 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1846, 1852,
1019 1852, 1852, 1846, 1852, 1846, 1852, 1846, 1846, 1852, 1852,
1020 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
1021 1846, 1852, 1852, 1846, 1846, 1852, 1852, 1852, 1852, 1852,
1022 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1023 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1846, 1852, 1852,
1024
1025 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
1026 1846, 1846, 1846, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
1027 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
1028 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1029 1846, 1852, 1852, 1846, 1852, 1852, 1852, 1846, 1852, 1852,
1030 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1031 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1846, 1852,
1032 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1852,
1033 1846, 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852, 1852,
1034 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1035
1036 1846, 1846, 1852, 1852, 1852, 1852, 1846, 1846, 1846, 1852,
1037 1846, 1852, 1846, 1852, 1852, 1846, 1852, 1852, 1846, 1852,
1038 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1039 1846, 1846, 1852, 1846, 1852, 1846, 1852, 1846, 1852, 1852,
1040 1846, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
1041 1846, 1846, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1042 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1043 1852, 1846, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
1044 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1045 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1046
1047 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1048 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1049 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
1050 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1846, 1852, 1852,
1051 1852, 1852, 1852, 1846, 1846, 0, 1846, 1846, 1846, 1846,
1052 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846
10261053 } ;
10271054
1028 static yyconst flex_int16_t yy_nxt[5277] =
1055 static yyconst flex_uint16_t yy_nxt[5395] =
10291056 { 0,
10301057 14, 15, 16, 17, 18, 19, 18, 14, 14, 14,
10311058 14, 18, 20, 14, 21, 22, 23, 24, 14, 25,
10401067
10411068 71, 45, 129, 88, 45, 134, 134, 50, 73, 50,
10421069 73, 73, 70, 73, 137, 56, 71, 68, 73, 68,
1043 68, 56, 68, 86, 75, 76, 61, 68, 776, 61,
1070 68, 56, 68, 86, 75, 76, 61, 68, 796, 61,
10441071 15, 16, 17, 63, 64, 65, 15, 16, 17, 63,
10451072 64, 65, 77, 87, 95, 74, 69, 97, 69, 66,
10461073 86, 75, 76, 137, 78, 66, 69, 89, 69, 69,
1047 135, 79, 111, 165, 96, 90, 133, 67, 80, 77,
1074 135, 79, 111, 167, 96, 90, 133, 67, 80, 77,
10481075 87, 95, 132, 67, 97, 69, 66, 127, 127, 130,
10491076 69, 78, 66, 69, 89, 142, 69, 91, 79, 111,
10501077 92, 96, 90, 98, 69, 80, 81, 93, 105, 94,
10511078
10521079 82, 99, 128, 83, 69, 84, 85, 100, 69, 102,
1053 69, 101, 142, 103, 91, 141, 150, 92, 69, 69,
1080 69, 101, 142, 103, 91, 141, 152, 92, 69, 69,
10541081 98, 69, 146, 81, 93, 105, 94, 82, 99, 104,
10551082 83, 69, 84, 85, 100, 69, 102, 112, 101, 69,
1056 103, 113, 141, 150, 69, 120, 137, 121, 143, 146,
1083 103, 113, 141, 152, 69, 120, 137, 121, 143, 146,
10571084 135, 114, 133, 123, 115, 69, 104, 106, 124, 132,
1058 158, 107, 122, 69, 112, 324, 69, 108, 113, 125,
1085 160, 107, 122, 69, 112, 332, 69, 108, 113, 125,
10591086 109, 69, 120, 126, 121, 143, 116, 110, 114, 69,
1060 123, 115, 130, 69, 106, 124, 117, 158, 107, 122,
1087 123, 115, 130, 69, 106, 124, 117, 160, 107, 122,
10611088 118, 119, 69, 140, 108, 69, 125, 109, 69, 129,
10621089
10631090 126, 128, 129, 116, 110, 131, 137, 131, 131, 73,
10641091 131, 73, 73, 117, 73, 134, 134, 118, 119, 136,
10651092 140, 136, 136, 68, 136, 68, 68, 73, 68, 73,
1066 73, 144, 73, 68, 147, 148, 149, 73, 154, 152,
1067 151, 69, 155, 1799, 145, 69, 139, 69, 69, 69,
1068 69, 69, 159, 290, 1799, 69, 153, 156, 144, 157,
1069 160, 147, 148, 149, 74, 154, 69, 151, 69, 155,
1070 69, 145, 161, 69, 69, 162, 1799, 166, 167, 159,
1071 172, 174, 69, 153, 156, 69, 157, 160, 163, 164,
1072 169, 176, 171, 69, 170, 69, 69, 173, 168, 161,
1073
1074 69, 69, 162, 178, 166, 167, 180, 172, 174, 175,
1075 69, 69, 177, 179, 69, 163, 164, 169, 176, 171,
1076 69, 170, 69, 69, 173, 168, 69, 182, 181, 69,
1077 178, 183, 187, 180, 184, 186, 175, 69, 185, 177,
1078 179, 69, 69, 189, 188, 191, 69, 197, 190, 69,
1079 205, 69, 192, 69, 182, 181, 69, 69, 183, 187,
1080 193, 184, 186, 195, 69, 185, 196, 69, 201, 200,
1081 189, 188, 69, 198, 197, 190, 69, 69, 1799, 192,
1082 194, 69, 1799, 69, 1799, 1799, 69, 193, 202, 203,
1083 195, 69, 331, 196, 199, 201, 200, 69, 69, 131,
1084
1085 198, 131, 131, 136, 131, 136, 136, 194, 136, 73,
1086 204, 73, 73, 137, 73, 202, 203, 206, 208, 69,
1087 207, 199, 209, 210, 214, 222, 69, 1799, 211, 69,
1088 69, 213, 69, 212, 69, 215, 1799, 204, 1799, 69,
1089 223, 1799, 224, 226, 206, 208, 139, 207, 69, 209,
1090 210, 69, 222, 69, 227, 69, 216, 1799, 213, 69,
1091 212, 225, 1799, 69, 69, 69, 69, 223, 229, 224,
1092 226, 233, 228, 1799, 1799, 230, 69, 232, 231, 1799,
1093 69, 227, 239, 216, 217, 69, 69, 234, 225, 218,
1094 69, 235, 1799, 69, 219, 229, 237, 238, 233, 228,
1095
1096 220, 221, 230, 69, 232, 231, 240, 69, 69, 69,
1097 236, 217, 241, 69, 234, 243, 218, 69, 235, 246,
1098 244, 219, 242, 237, 238, 245, 247, 220, 221, 248,
1099 249, 69, 69, 240, 1799, 250, 252, 236, 69, 1799,
1100 251, 1799, 1799, 69, 253, 254, 69, 244, 69, 242,
1101 69, 69, 245, 247, 69, 69, 256, 69, 258, 255,
1102 69, 69, 250, 252, 69, 257, 69, 251, 261, 259,
1103 260, 253, 254, 262, 265, 69, 267, 69, 69, 69,
1104 69, 69, 266, 256, 268, 258, 255, 269, 273, 69,
1105 69, 275, 257, 263, 264, 261, 259, 260, 270, 271,
1106
1107 262, 69, 69, 267, 69, 69, 69, 272, 278, 266,
1108 274, 268, 280, 276, 69, 281, 279, 283, 69, 69,
1109 263, 264, 69, 137, 69, 270, 271, 282, 286, 284,
1110 277, 69, 289, 69, 272, 278, 285, 274, 69, 280,
1111 276, 69, 287, 279, 69, 69, 69, 69, 69, 69,
1112 288, 298, 291, 293, 282, 286, 284, 277, 69, 289,
1113 292, 294, 1799, 285, 69, 295, 297, 296, 299, 287,
1114 300, 302, 1799, 69, 69, 1799, 301, 288, 69, 291,
1115 293, 69, 69, 307, 69, 310, 69, 292, 294, 69,
1116 69, 304, 295, 297, 296, 299, 69, 300, 69, 303,
1117
1118 69, 305, 69, 301, 309, 306, 69, 69, 69, 69,
1119 307, 308, 310, 69, 311, 312, 313, 1799, 304, 69,
1120 1799, 314, 315, 69, 316, 318, 303, 317, 305, 321,
1121 69, 309, 306, 319, 69, 69, 320, 69, 308, 69,
1122 325, 311, 312, 69, 69, 69, 332, 69, 314, 315,
1123 69, 316, 318, 328, 317, 1799, 321, 322, 323, 326,
1124 319, 329, 327, 320, 69, 69, 333, 325, 69, 69,
1125 337, 334, 330, 332, 335, 338, 336, 69, 340, 69,
1126 328, 1799, 69, 69, 322, 323, 326, 339, 329, 327,
1127 69, 69, 69, 333, 69, 343, 69, 337, 334, 330,
1128
1129 69, 335, 341, 336, 342, 340, 69, 344, 69, 347,
1130 345, 348, 346, 349, 339, 371, 350, 355, 69, 1799,
1131 353, 352, 343, 1799, 351, 354, 69, 69, 69, 341,
1132 69, 342, 69, 356, 344, 69, 347, 345, 69, 346,
1133 349, 69, 69, 350, 355, 357, 69, 353, 352, 365,
1134 366, 351, 354, 367, 368, 369, 1799, 370, 69, 137,
1135 356, 69, 69, 376, 69, 372, 374, 69, 69, 69,
1136 1799, 379, 357, 358, 359, 1799, 365, 366, 69, 375,
1137 367, 368, 369, 360, 370, 361, 362, 363, 373, 377,
1138 364, 69, 372, 374, 69, 69, 69, 380, 69, 381,
1139
1140 358, 359, 69, 388, 384, 378, 375, 1799, 69, 398,
1141 360, 69, 361, 362, 363, 373, 377, 364, 69, 382,
1142 383, 69, 385, 386, 380, 387, 381, 390, 69, 391,
1143 388, 384, 378, 69, 69, 389, 69, 1799, 69, 394,
1144 69, 395, 69, 397, 396, 399, 392, 1799, 69, 385,
1145 386, 69, 387, 400, 390, 401, 391, 69, 69, 393,
1146 1799, 69, 389, 69, 69, 402, 394, 69, 395, 404,
1147 397, 396, 399, 392, 69, 403, 406, 405, 69, 407,
1148 400, 408, 401, 69, 1799, 69, 393, 410, 1799, 411,
1149 409, 69, 402, 1799, 413, 418, 404, 69, 412, 69,
1150
1151 69, 414, 403, 69, 405, 69, 407, 69, 408, 415,
1152 69, 417, 416, 69, 410, 69, 411, 409, 69, 419,
1153 69, 413, 418, 424, 421, 412, 69, 69, 414, 420,
1154 69, 69, 423, 422, 425, 69, 415, 467, 417, 416,
1155 69, 426, 428, 427, 69, 69, 419, 431, 429, 432,
1156 430, 421, 69, 69, 69, 69, 420, 69, 434, 423,
1157 422, 425, 69, 69, 69, 447, 433, 450, 426, 69,
1158 427, 435, 69, 69, 431, 429, 432, 430, 69, 436,
1159 69, 442, 69, 443, 444, 434, 1799, 69, 69, 69,
1160 445, 69, 447, 433, 450, 69, 448, 452, 435, 446,
1161
1162 1799, 449, 453, 69, 451, 1799, 436, 437, 442, 69,
1163 443, 444, 438, 454, 439, 456, 462, 69, 1799, 458,
1164 69, 69, 440, 448, 452, 69, 446, 69, 449, 453,
1165 69, 451, 441, 69, 437, 455, 457, 69, 460, 438,
1166 454, 439, 456, 69, 459, 461, 458, 69, 464, 440,
1167 69, 463, 69, 465, 466, 468, 1799, 69, 69, 441,
1168 470, 469, 455, 457, 480, 460, 69, 69, 137, 472,
1169 69, 459, 461, 69, 471, 464, 69, 477, 463, 475,
1170 465, 466, 468, 476, 69, 478, 69, 470, 469, 473,
1171 479, 69, 474, 69, 481, 69, 472, 482, 483, 484,
1172
1173 69, 471, 487, 485, 477, 69, 1799, 490, 486, 488,
1174 69, 1799, 69, 491, 69, 489, 473, 69, 492, 474,
1175 1799, 69, 501, 498, 69, 69, 484, 1799, 493, 69,
1176 485, 69, 69, 69, 490, 486, 488, 69, 494, 497,
1177 69, 69, 489, 495, 69, 492, 500, 496, 69, 69,
1178 498, 499, 503, 69, 502, 493, 1799, 1799, 506, 69,
1179 69, 504, 69, 507, 508, 494, 497, 1799, 511, 513,
1180 495, 509, 69, 500, 496, 518, 69, 69, 499, 503,
1181 69, 502, 69, 505, 69, 506, 69, 510, 504, 515,
1182 507, 508, 512, 69, 514, 516, 513, 1799, 509, 69,
1183
1184 520, 519, 69, 521, 69, 522, 69, 517, 1799, 523,
1185 505, 69, 524, 69, 510, 525, 515, 526, 69, 512,
1186 69, 514, 516, 69, 69, 69, 69, 520, 519, 69,
1187 521, 527, 528, 530, 517, 532, 69, 531, 533, 524,
1188 1799, 534, 525, 535, 536, 542, 69, 529, 69, 69,
1189 538, 540, 69, 69, 69, 537, 69, 69, 527, 528,
1190 69, 539, 532, 69, 69, 533, 69, 541, 534, 69,
1191 535, 536, 542, 543, 529, 544, 547, 538, 540, 69,
1192 549, 545, 537, 546, 69, 69, 548, 551, 539, 69,
1193 550, 69, 1799, 552, 541, 554, 69, 553, 69, 555,
1194
1195 543, 69, 69, 547, 570, 556, 69, 549, 545, 69,
1196 546, 69, 69, 548, 551, 69, 557, 550, 558, 559,
1197 552, 69, 554, 561, 553, 69, 555, 560, 69, 562,
1198 563, 564, 556, 566, 1799, 69, 565, 1799, 69, 69,
1199 69, 69, 69, 557, 569, 558, 559, 69, 574, 571,
1200 561, 572, 137, 567, 560, 69, 562, 563, 564, 69,
1201 566, 568, 69, 565, 573, 575, 69, 69, 576, 1799,
1202 69, 569, 69, 69, 69, 574, 571, 582, 572, 69,
1203 567, 584, 586, 587, 583, 585, 1799, 1799, 568, 69,
1204 599, 573, 575, 595, 69, 576, 577, 1799, 596, 69,
1205
1206 578, 615, 598, 579, 582, 69, 69, 69, 584, 586,
1207 580, 583, 585, 581, 69, 69, 600, 69, 69, 597,
1208 595, 69, 601, 577, 603, 596, 69, 578, 69, 598,
1209 579, 1799, 1799, 602, 604, 1799, 69, 580, 605, 1799,
1210 581, 588, 589, 600, 590, 69, 597, 591, 69, 601,
1211 69, 603, 592, 606, 610, 607, 69, 608, 593, 594,
1212 602, 604, 69, 69, 69, 605, 611, 69, 588, 589,
1213 609, 590, 614, 69, 591, 69, 612, 616, 69, 592,
1214 606, 610, 607, 618, 608, 593, 594, 613, 69, 617,
1215 619, 623, 69, 611, 69, 622, 69, 609, 1799, 614,
1216
1217 620, 625, 621, 612, 69, 624, 626, 69, 69, 69,
1218 618, 69, 627, 69, 613, 628, 629, 619, 623, 69,
1219 69, 69, 622, 630, 69, 69, 631, 620, 625, 621,
1220 632, 69, 624, 69, 633, 1799, 634, 635, 639, 627,
1221 1799, 69, 1799, 629, 69, 1799, 69, 69, 636, 69,
1222 630, 1799, 638, 631, 69, 645, 637, 632, 69, 641,
1223 69, 633, 69, 634, 635, 639, 69, 640, 651, 642,
1224 643, 644, 69, 69, 69, 636, 646, 69, 69, 638,
1225 647, 648, 645, 637, 650, 69, 641, 649, 69, 69,
1226 654, 653, 655, 656, 640, 69, 642, 643, 644, 69,
1227
1228 69, 662, 652, 646, 69, 69, 659, 647, 648, 69,
1229 661, 650, 658, 660, 649, 664, 69, 657, 653, 69,
1230 656, 69, 663, 69, 69, 69, 666, 69, 69, 652,
1231 1799, 665, 69, 659, 667, 668, 69, 661, 669, 658,
1232 660, 69, 664, 670, 657, 69, 69, 673, 671, 663,
1233 69, 672, 683, 674, 682, 69, 675, 69, 665, 69,
1234 685, 667, 69, 69, 69, 137, 69, 684, 1799, 69,
1235 670, 69, 69, 686, 673, 671, 687, 69, 672, 683,
1236 674, 682, 689, 675, 676, 688, 677, 685, 693, 69,
1237 678, 1799, 679, 695, 684, 69, 691, 680, 69, 69,
1238
1239 686, 694, 681, 687, 690, 69, 692, 698, 69, 689,
1240 69, 676, 688, 677, 69, 693, 69, 678, 69, 679,
1241 695, 696, 697, 691, 680, 699, 703, 705, 694, 681,
1242 700, 690, 701, 692, 69, 707, 704, 1799, 69, 711,
1243 69, 69, 708, 69, 712, 706, 709, 69, 696, 697,
1244 702, 69, 699, 703, 705, 710, 713, 700, 69, 701,
1245 69, 69, 707, 704, 69, 69, 711, 714, 69, 708,
1246 715, 69, 706, 709, 717, 718, 716, 702, 719, 69,
1247 721, 720, 710, 713, 69, 723, 722, 724, 69, 69,
1248 728, 69, 725, 69, 69, 732, 737, 715, 69, 69,
1249
1250 69, 717, 726, 716, 69, 719, 69, 721, 720, 69,
1251 727, 730, 723, 722, 724, 69, 729, 69, 731, 725,
1252 69, 69, 732, 735, 69, 733, 734, 69, 69, 726,
1253 69, 736, 738, 1799, 1799, 739, 743, 727, 730, 740,
1254 755, 69, 744, 729, 1799, 731, 69, 69, 69, 745,
1255 735, 741, 733, 734, 742, 69, 69, 69, 736, 738,
1256 69, 746, 748, 743, 747, 750, 69, 69, 749, 744,
1257 1799, 69, 751, 69, 69, 752, 745, 69, 741, 753,
1258 754, 742, 756, 1799, 757, 1799, 69, 69, 746, 748,
1259 69, 747, 750, 69, 69, 749, 69, 758, 763, 751,
1260
1261 69, 69, 752, 759, 762, 760, 753, 754, 761, 756,
1262 765, 757, 69, 69, 764, 69, 766, 767, 69, 69,
1263 69, 69, 769, 768, 758, 763, 770, 771, 772, 1799,
1264 759, 762, 760, 69, 773, 761, 69, 765, 69, 69,
1265 69, 764, 69, 766, 767, 774, 778, 775, 779, 784,
1266 768, 777, 785, 69, 771, 69, 69, 69, 69, 782,
1267 69, 773, 69, 780, 69, 69, 781, 786, 788, 783,
1268 787, 69, 774, 778, 775, 779, 69, 790, 777, 69,
1269 69, 69, 1799, 69, 795, 789, 782, 1799, 791, 69,
1270 780, 793, 69, 781, 786, 788, 783, 787, 69, 69,
1271
1272 69, 792, 794, 69, 790, 796, 797, 1799, 799, 69,
1273 69, 69, 789, 798, 69, 791, 800, 801, 793, 806,
1274 69, 803, 804, 802, 805, 1799, 1799, 69, 792, 794,
1275 808, 69, 796, 797, 69, 799, 69, 69, 69, 807,
1276 798, 69, 69, 800, 801, 69, 806, 69, 803, 804,
1277 802, 805, 69, 809, 810, 811, 812, 808, 813, 814,
1278 815, 69, 821, 816, 820, 818, 807, 819, 69, 69,
1279 69, 69, 817, 69, 69, 69, 69, 69, 69, 69,
1280 809, 810, 811, 812, 822, 813, 814, 815, 69, 821,
1281 816, 820, 818, 823, 819, 824, 825, 1799, 826, 817,
1282
1283 1799, 828, 69, 829, 827, 69, 831, 830, 69, 832,
1284 835, 822, 834, 833, 69, 69, 69, 836, 1799, 839,
1285 837, 844, 824, 825, 69, 826, 69, 69, 828, 838,
1286 69, 827, 840, 831, 69, 69, 832, 845, 841, 834,
1287 833, 69, 69, 69, 836, 69, 839, 837, 842, 843,
1288 69, 69, 69, 1799, 854, 846, 838, 847, 69, 840,
1289 69, 69, 853, 1799, 855, 841, 856, 859, 69, 1799,
1290 69, 860, 1799, 861, 857, 842, 843, 69, 69, 858,
1291 69, 854, 846, 69, 847, 848, 69, 69, 69, 853,
1292 849, 855, 850, 856, 851, 863, 852, 69, 69, 862,
1293
1294 861, 857, 864, 69, 865, 867, 858, 69, 866, 869,
1295 69, 871, 848, 69, 69, 69, 868, 849, 870, 850,
1296 1799, 851, 863, 852, 873, 875, 862, 874, 69, 864,
1297 877, 865, 69, 69, 69, 866, 69, 876, 871, 872,
1298 879, 878, 69, 868, 880, 870, 883, 69, 69, 882,
1299 881, 69, 69, 884, 874, 69, 886, 69, 885, 69,
1300 887, 888, 69, 69, 876, 889, 872, 879, 878, 896,
1301 1799, 880, 69, 883, 69, 69, 882, 881, 69, 890,
1302 884, 891, 892, 69, 893, 885, 894, 69, 888, 69,
1303 895, 69, 900, 69, 69, 899, 69, 69, 69, 897,
1304
1305 69, 901, 69, 902, 1799, 898, 890, 69, 891, 892,
1306 69, 69, 69, 894, 903, 905, 904, 895, 69, 900,
1307 1799, 69, 899, 906, 69, 908, 897, 907, 901, 69,
1308 902, 69, 898, 909, 913, 911, 912, 910, 914, 915,
1309 1799, 903, 905, 904, 916, 69, 1799, 69, 1799, 918,
1310 906, 69, 908, 69, 907, 69, 917, 69, 921, 69,
1311 1799, 913, 911, 912, 69, 914, 920, 69, 919, 69,
1312 69, 916, 69, 922, 923, 69, 918, 925, 927, 924,
1313 69, 69, 69, 917, 926, 921, 69, 928, 931, 930,
1314 933, 69, 69, 920, 934, 919, 929, 69, 932, 69,
1315
1316 922, 923, 69, 69, 925, 927, 924, 936, 69, 935,
1317 69, 926, 69, 939, 928, 931, 930, 933, 69, 69,
1318 937, 934, 938, 929, 940, 932, 941, 69, 69, 944,
1319 1799, 1799, 942, 945, 936, 69, 935, 943, 947, 946,
1320 939, 69, 69, 951, 948, 952, 949, 937, 956, 938,
1321 950, 69, 69, 69, 953, 69, 69, 69, 69, 942,
1322 945, 69, 69, 69, 943, 947, 946, 954, 69, 69,
1323 69, 948, 952, 957, 955, 956, 958, 69, 959, 960,
1324 961, 953, 69, 962, 69, 963, 69, 69, 69, 965,
1325 964, 69, 1799, 967, 954, 966, 69, 970, 1799, 968,
1326
1327 969, 955, 69, 958, 69, 959, 960, 961, 69, 977,
1328 962, 69, 963, 971, 972, 69, 965, 964, 981, 69,
1329 967, 69, 966, 69, 970, 973, 968, 969, 69, 974,
1330 976, 69, 978, 983, 982, 979, 69, 69, 980, 986,
1331 971, 972, 975, 69, 984, 69, 985, 987, 988, 69,
1332 69, 990, 973, 989, 69, 69, 974, 976, 69, 978,
1333 983, 982, 979, 69, 994, 980, 69, 993, 995, 975,
1334 69, 984, 69, 992, 69, 988, 69, 69, 990, 69,
1335 989, 991, 998, 69, 997, 996, 69, 69, 999, 69,
1336 1000, 994, 69, 1001, 993, 69, 1002, 1003, 1799, 1005,
1337
1338 992, 69, 1799, 1004, 69, 1006, 69, 1007, 991, 998,
1339 69, 997, 996, 69, 69, 999, 69, 1000, 69, 1009,
1340 1001, 1008, 1010, 1002, 1003, 69, 1005, 69, 69, 69,
1341 1004, 1011, 1006, 1012, 1007, 1013, 1014, 69, 1015, 1026,
1342 1016, 1017, 1799, 69, 1018, 1799, 1009, 1019, 1008, 1010,
1343 69, 1020, 1022, 69, 1799, 69, 69, 1021, 1011, 69,
1344 1012, 1023, 1028, 1014, 1024, 69, 69, 1016, 69, 69,
1345 69, 1018, 69, 1027, 1019, 1029, 1025, 69, 1020, 1022,
1346 69, 1030, 1031, 69, 1021, 69, 1032, 1033, 1023, 1028,
1347 1038, 1024, 1034, 1037, 1799, 69, 1035, 69, 1036, 1041,
1348
1349 1027, 69, 1029, 1025, 69, 69, 69, 1039, 1030, 1031,
1350 1040, 69, 1060, 69, 1033, 69, 1042, 69, 1043, 1034,
1351 1037, 69, 1044, 1035, 1045, 1036, 69, 69, 1046, 69,
1352 1048, 69, 69, 1047, 1039, 1049, 1799, 1040, 69, 69,
1353 1050, 69, 1054, 1042, 69, 1043, 1051, 69, 69, 1044,
1354 1052, 1045, 1053, 69, 1056, 1046, 1055, 1048, 69, 1059,
1355 1047, 1061, 1057, 69, 69, 1058, 69, 1050, 69, 1054,
1356 69, 1062, 1064, 1051, 69, 1069, 1063, 1052, 1068, 1053,
1357 69, 1056, 1070, 1055, 1071, 69, 1059, 69, 1061, 1057,
1358 69, 69, 1058, 69, 1065, 1074, 69, 1066, 1062, 1064,
1359
1360 1067, 1073, 69, 1063, 1072, 1068, 69, 1078, 69, 69,
1361 69, 1071, 1075, 1082, 1076, 69, 69, 1077, 69, 69,
1362 1079, 1065, 1074, 69, 1066, 1080, 1799, 1067, 1073, 69,
1363 1081, 1072, 1799, 1799, 1078, 69, 69, 1083, 1799, 1075,
1364 1082, 1076, 1085, 1088, 1077, 1086, 69, 1079, 69, 1087,
1365 1089, 1084, 1080, 1090, 1091, 1092, 1093, 1081, 69, 69,
1366 69, 1095, 69, 69, 1083, 1094, 1098, 1096, 1101, 1085,
1367 1097, 1799, 1086, 1799, 69, 69, 1087, 1089, 1084, 69,
1368 69, 1091, 1092, 1100, 69, 69, 1099, 69, 1095, 69,
1369 1102, 69, 1094, 1098, 1096, 69, 1103, 1097, 1105, 69,
1370
1371 1104, 69, 1106, 1799, 1107, 69, 1108, 69, 1111, 1112,
1372 1100, 1110, 1109, 1099, 1114, 69, 1118, 1102, 1799, 1113,
1373 69, 69, 1115, 1103, 69, 1105, 69, 1104, 69, 1106,
1374 69, 1107, 69, 1108, 69, 1111, 69, 69, 1110, 1109,
1375 1116, 1114, 1117, 1119, 1120, 1121, 1113, 69, 1122, 1115,
1376 69, 1124, 1123, 69, 1126, 69, 1125, 1799, 69, 1799,
1377 1128, 1131, 1127, 1132, 1799, 1130, 69, 1116, 1129, 1117,
1378 1119, 1120, 1121, 69, 69, 69, 69, 69, 69, 1123,
1379 69, 69, 69, 1125, 1133, 69, 69, 1128, 1131, 1127,
1380 1132, 1135, 1130, 1136, 1137, 1129, 1138, 1134, 69, 1141,
1381
1382 1799, 1139, 69, 1142, 1140, 69, 69, 69, 1143, 1144,
1383 1145, 1133, 69, 1147, 1148, 69, 1146, 1149, 1135, 1153,
1384 1136, 69, 1151, 1150, 1134, 1154, 1141, 69, 1139, 1155,
1385 69, 1140, 69, 1799, 1799, 1143, 69, 69, 69, 69,
1386 1152, 1148, 69, 1146, 69, 1162, 69, 1799, 69, 1799,
1387 1150, 69, 1154, 69, 1156, 1157, 1158, 1160, 1161, 1163,
1388 69, 1159, 1164, 1166, 69, 69, 69, 1152, 1165, 69,
1389 1167, 69, 1168, 1169, 69, 69, 69, 1171, 1170, 1172,
1390 69, 1156, 1157, 1158, 1160, 1161, 1163, 1173, 1159, 1164,
1391 69, 69, 1174, 1175, 69, 1165, 69, 1167, 69, 1168,
1392
1393 1169, 1176, 1177, 69, 69, 1170, 1172, 69, 1179, 1180,
1394 69, 1178, 1182, 1183, 1173, 1184, 1181, 1799, 1185, 1174,
1395 1175, 1190, 69, 69, 1187, 1186, 1188, 69, 1176, 1177,
1396 69, 1191, 69, 69, 1194, 1179, 69, 1799, 1178, 1182,
1397 69, 1189, 69, 1181, 69, 69, 69, 69, 1190, 69,
1398 1192, 1187, 1186, 1188, 1195, 69, 1193, 69, 1191, 69,
1399 69, 1194, 1196, 1197, 1198, 1200, 69, 1203, 1189, 1199,
1400 69, 1206, 1204, 1205, 1207, 69, 1208, 1192, 69, 1201,
1401 1209, 1195, 1210, 1193, 1202, 69, 69, 69, 1212, 1196,
1402 1197, 1198, 69, 1214, 69, 69, 1199, 1211, 69, 1204,
1403
1404 1205, 69, 69, 69, 1213, 1215, 1201, 69, 69, 1218,
1405 1216, 1202, 1217, 69, 69, 1212, 1219, 1220, 1221, 1799,
1406 1214, 69, 1222, 1224, 1211, 69, 1223, 1225, 69, 1226,
1407 1227, 1799, 1215, 69, 1229, 69, 69, 1216, 1228, 1217,
1408 69, 1230, 1231, 1219, 1234, 1221, 69, 1232, 69, 1222,
1409 69, 69, 69, 1223, 69, 69, 1226, 1227, 1233, 69,
1410 69, 1229, 69, 1235, 69, 1228, 1236, 1237, 1230, 1231,
1411 69, 69, 1238, 69, 1232, 1239, 69, 1241, 1240, 1242,
1412 69, 1799, 1245, 1246, 69, 1233, 1243, 1248, 1251, 1247,
1413 1235, 69, 69, 1236, 1237, 1799, 1253, 1244, 69, 1238,
1414
1415 69, 69, 1239, 1249, 1250, 1240, 1242, 69, 69, 1245,
1416 1246, 1252, 69, 1243, 69, 69, 1247, 69, 1254, 69,
1417 1255, 69, 69, 1253, 1244, 1257, 1256, 1799, 1258, 1260,
1418 1249, 1250, 69, 1259, 1261, 69, 1264, 69, 1252, 1799,
1419 1799, 1266, 1262, 69, 1263, 1254, 69, 69, 69, 69,
1420 1265, 69, 1257, 1256, 69, 1258, 1260, 69, 1267, 69,
1421 1259, 1261, 69, 1264, 1268, 69, 1270, 1269, 1266, 1262,
1422 1271, 1263, 1273, 1275, 1272, 69, 1277, 1265, 1274, 69,
1423 1278, 1276, 1280, 1281, 1799, 1267, 69, 69, 69, 69,
1424 1282, 1268, 69, 1270, 1269, 69, 1283, 1271, 69, 69,
1425
1426 1275, 1272, 69, 1277, 1279, 1274, 69, 1278, 1276, 1280,
1427 69, 1284, 69, 69, 69, 1286, 1285, 1282, 1287, 1291,
1428 1288, 1289, 1290, 1283, 69, 1294, 1293, 1799, 69, 69,
1429 69, 1279, 1292, 69, 1799, 1297, 1799, 1799, 1284, 1298,
1430 69, 1299, 1286, 1285, 1310, 69, 69, 1288, 1289, 1290,
1431 69, 69, 1294, 1293, 69, 1295, 69, 69, 1296, 1292,
1432 69, 1300, 1297, 1302, 1301, 1303, 1298, 1304, 1299, 1398,
1433 1799, 69, 69, 69, 1305, 1306, 1312, 69, 69, 1309,
1434 1311, 1307, 1295, 69, 1317, 1296, 69, 1308, 1300, 69,
1435 1302, 1301, 1303, 69, 1304, 69, 69, 69, 69, 1314,
1436
1437 69, 1305, 1306, 69, 1313, 1315, 1309, 1311, 1307, 1316,
1438 1318, 69, 69, 1319, 1308, 1320, 1321, 1322, 1799, 1323,
1439 69, 1325, 69, 69, 1324, 1326, 1314, 69, 1327, 69,
1440 69, 1313, 1315, 1328, 69, 69, 1316, 1318, 1331, 69,
1441 1319, 1329, 69, 1321, 69, 69, 1323, 69, 1325, 1330,
1442 69, 1324, 1326, 69, 1335, 69, 1332, 1333, 1334, 1336,
1443 1328, 1337, 1799, 69, 1340, 1331, 69, 1338, 1329, 69,
1444 1339, 69, 69, 69, 1342, 1341, 1330, 69, 69, 69,
1445 1799, 69, 69, 1332, 1333, 1334, 1336, 1343, 1337, 69,
1446 1344, 1340, 1345, 1346, 1338, 69, 69, 1339, 1347, 69,
1447
1448 1348, 1342, 1341, 1350, 1349, 1799, 1352, 69, 1351, 1353,
1449 1354, 1355, 1356, 1357, 1343, 1358, 69, 1344, 69, 1345,
1450 1346, 1359, 69, 69, 69, 69, 69, 1348, 1361, 1362,
1451 1350, 1349, 69, 1352, 1365, 1351, 69, 69, 1355, 1356,
1452 69, 1360, 69, 1363, 1364, 1366, 1367, 1373, 69, 69,
1453 1368, 69, 1370, 69, 1369, 69, 69, 1374, 1377, 69,
1454 1378, 69, 1799, 1371, 1799, 69, 69, 69, 1360, 1382,
1455 1363, 1364, 1366, 69, 69, 69, 69, 1368, 1372, 1370,
1456 1375, 1369, 1379, 1376, 1374, 69, 69, 1378, 1380, 69,
1457 1371, 69, 69, 1381, 1383, 1384, 69, 1385, 69, 1386,
1458
1459 69, 1387, 69, 1388, 1390, 1372, 69, 1375, 1392, 1379,
1460 1376, 1389, 1393, 1391, 69, 1380, 69, 1394, 69, 69,
1461 1381, 1383, 69, 1395, 1385, 69, 1386, 69, 1387, 69,
1462 1388, 1390, 1397, 69, 69, 1392, 1396, 1399, 1389, 1393,
1463 1391, 69, 1400, 1401, 1394, 69, 1402, 1403, 1404, 69,
1464 1395, 1799, 1408, 1406, 69, 1410, 1405, 1409, 1407, 1397,
1465 69, 69, 1412, 1396, 1399, 69, 1799, 69, 1413, 1400,
1466 1401, 1415, 69, 1402, 69, 1404, 69, 69, 69, 1408,
1467 1406, 69, 1410, 1405, 1409, 1407, 1411, 1414, 1416, 69,
1468 1419, 1417, 1799, 69, 1418, 69, 1420, 69, 1415, 1422,
1469
1470 69, 1421, 69, 69, 69, 1423, 1799, 1425, 1426, 1429,
1471 1433, 1428, 1799, 1411, 1414, 1416, 69, 1419, 1417, 69,
1472 69, 1418, 1424, 1420, 1430, 69, 69, 69, 1421, 69,
1473 1427, 69, 1423, 69, 1425, 1426, 1431, 69, 1428, 1432,
1474 69, 69, 1435, 1434, 1438, 69, 1436, 69, 1437, 1424,
1475 1439, 1430, 1440, 1441, 1442, 1443, 1799, 1427, 1799, 69,
1476 1447, 69, 69, 1431, 1446, 1444, 1432, 69, 69, 1435,
1477 1434, 69, 69, 1436, 69, 1437, 69, 1439, 1445, 69,
1478 69, 69, 1443, 69, 1448, 69, 69, 1447, 1449, 1450,
1479 1451, 1446, 1444, 1452, 1799, 1454, 1453, 1455, 1799, 69,
1480
1481 1456, 1457, 69, 1459, 1458, 1445, 1460, 69, 69, 1461,
1482 1799, 1448, 1799, 1799, 69, 69, 1450, 1462, 1467, 69,
1483 1452, 69, 69, 1453, 1455, 69, 69, 1456, 1457, 1463,
1484 69, 1458, 69, 69, 1464, 1465, 69, 1466, 69, 1468,
1485 69, 1469, 1470, 1473, 1462, 1467, 69, 1471, 69, 69,
1486 69, 1472, 69, 1799, 1475, 1799, 1463, 69, 69, 1480,
1487 69, 1464, 1465, 1478, 1466, 1479, 1468, 69, 69, 1470,
1488 1473, 1476, 1474, 1481, 1471, 69, 1482, 1477, 1472, 1483,
1489 69, 1475, 69, 69, 1484, 69, 69, 69, 69, 69,
1490 1478, 1486, 1479, 1489, 1485, 1487, 1488, 1490, 1476, 1474,
1491
1492 69, 69, 69, 1482, 1477, 69, 1483, 1491, 1492, 69,
1493 1498, 1484, 1499, 1799, 1493, 1799, 1534, 1799, 1486, 69,
1494 1489, 1485, 1487, 1488, 69, 69, 69, 1494, 69, 1495,
1495 1500, 1496, 1497, 1501, 1491, 1492, 69, 69, 69, 69,
1496 69, 1493, 69, 69, 1502, 69, 1503, 69, 1504, 1508,
1497 1507, 1509, 69, 1505, 1494, 69, 1495, 1500, 1496, 1497,
1498 1501, 69, 1506, 69, 1511, 1512, 1515, 1514, 69, 69,
1499 1510, 1502, 1513, 1503, 69, 1504, 69, 1507, 1509, 69,
1500 1505, 1516, 1517, 1519, 69, 1520, 1799, 1521, 69, 1506,
1501 69, 69, 1512, 69, 1514, 69, 1518, 1510, 1522, 1513,
1502
1503 1523, 1799, 1524, 69, 69, 1528, 1525, 1526, 1516, 69,
1504 69, 1527, 69, 69, 1521, 69, 1799, 69, 69, 1529,
1505 1530, 1532, 1533, 1518, 69, 1522, 1536, 1523, 69, 1524,
1506 69, 1531, 1528, 1525, 1526, 1535, 1537, 1538, 1527, 1540,
1507 1799, 69, 69, 69, 1539, 1799, 1529, 1530, 69, 69,
1508 1544, 1541, 1542, 69, 1543, 1545, 1546, 69, 1531, 1799,
1509 1799, 69, 1535, 69, 69, 1547, 1540, 69, 69, 69,
1510 69, 1539, 69, 69, 69, 1548, 1549, 1544, 1541, 1542,
1511 69, 1543, 1545, 1546, 1551, 1553, 1550, 1552, 1554, 69,
1512 1555, 1556, 1547, 69, 69, 69, 1559, 1560, 69, 1557,
1513
1514 1561, 1558, 1548, 1549, 69, 69, 1564, 69, 1799, 1568,
1515 69, 1551, 1553, 1550, 1552, 1554, 69, 1555, 69, 69,
1516 1562, 1563, 69, 69, 1560, 1566, 1557, 1561, 1558, 69,
1517 1565, 1799, 1567, 1564, 1569, 69, 69, 69, 69, 1570,
1518 1571, 69, 1572, 69, 1573, 1574, 1575, 1562, 1563, 1576,
1519 1577, 1578, 1566, 1580, 1581, 69, 1579, 1565, 69, 1567,
1520 1799, 1569, 69, 1799, 69, 69, 1570, 1571, 1584, 69,
1521 1586, 69, 69, 1575, 69, 1585, 1576, 69, 69, 69,
1522 1580, 69, 1588, 1579, 69, 69, 1582, 1583, 1587, 1590,
1523 69, 1589, 1591, 1799, 1592, 1584, 69, 1586, 1593, 69,
1524
1525 69, 69, 1585, 1596, 1595, 1598, 1594, 1799, 69, 69,
1526 69, 1597, 69, 1582, 1583, 1587, 1590, 69, 1589, 1591,
1527 69, 1592, 1599, 69, 69, 1593, 69, 1600, 1601, 69,
1528 1596, 1595, 1598, 1594, 69, 1602, 1603, 1604, 1597, 1606,
1529 1607, 1608, 1605, 1610, 1609, 69, 1613, 1799, 69, 1599,
1530 1614, 1799, 69, 1615, 1600, 69, 1611, 69, 69, 69,
1531 1612, 69, 1602, 1603, 69, 69, 1606, 1607, 69, 1605,
1532 1610, 1609, 69, 1613, 69, 69, 1616, 1614, 1617, 69,
1533 1615, 1618, 1619, 1611, 1620, 1621, 1622, 1612, 1623, 69,
1534 69, 1624, 1799, 69, 69, 69, 1625, 1628, 1626, 69,
1535
1536 69, 1799, 1627, 1616, 1629, 1617, 69, 69, 1618, 1619,
1537 1630, 1620, 1621, 1622, 69, 1631, 1633, 1634, 1624, 69,
1538 1635, 69, 1632, 69, 69, 1626, 69, 69, 69, 1627,
1539 69, 1629, 1636, 1637, 1638, 69, 1639, 1630, 1640, 69,
1540 1643, 69, 1631, 1633, 1634, 1641, 1642, 1635, 1645, 1632,
1541 69, 1644, 69, 69, 1646, 1647, 1649, 1651, 69, 69,
1542 1637, 69, 1648, 1639, 69, 69, 69, 1643, 1654, 1650,
1543 69, 69, 1641, 1642, 1656, 1645, 69, 1652, 1644, 1653,
1544 1655, 69, 69, 1649, 69, 1659, 69, 1660, 69, 1648,
1545 69, 1661, 69, 1657, 1658, 1654, 1650, 1662, 1663, 69,
1546
1547 1664, 1665, 1666, 69, 1652, 69, 1653, 1655, 1667, 1668,
1548 1669, 69, 69, 1670, 69, 1671, 1673, 1672, 1661, 69,
1549 1657, 1658, 69, 1674, 1662, 1663, 1675, 1664, 69, 69,
1550 69, 69, 1676, 1677, 69, 69, 1668, 69, 1681, 69,
1551 1670, 1678, 69, 1673, 1672, 1679, 1680, 69, 69, 1686,
1552 69, 69, 1799, 1675, 1688, 1682, 1685, 1687, 1689, 1676,
1553 69, 69, 69, 69, 69, 1681, 69, 69, 1678, 1683,
1554 1684, 69, 1679, 1680, 1691, 1690, 1686, 1692, 1693, 69,
1555 1694, 69, 1682, 1685, 1687, 69, 1695, 1696, 1698, 1699,
1556 1700, 1799, 69, 69, 1697, 1706, 1683, 1684, 69, 69,
1557
1558 69, 69, 1690, 69, 1692, 69, 1701, 1694, 1703, 1704,
1559 1707, 1708, 1705, 69, 1696, 69, 69, 1700, 69, 1702,
1560 69, 1697, 69, 1709, 1715, 69, 1710, 1712, 1711, 1713,
1561 69, 69, 69, 1701, 1716, 1703, 1704, 69, 69, 1705,
1562 1714, 69, 69, 69, 1721, 1718, 1702, 1726, 1717, 1720,
1563 69, 1715, 69, 1710, 69, 1711, 1713, 1719, 69, 69,
1564 1722, 1716, 69, 69, 69, 1727, 1723, 1714, 69, 69,
1565 1725, 1721, 1718, 1728, 69, 1717, 1720, 69, 1724, 1729,
1566 69, 1732, 69, 69, 1719, 1736, 1730, 1722, 69, 1737,
1567 1731, 1733, 1727, 1723, 1799, 69, 1734, 1725, 1738, 1735,
1568
1569 1728, 69, 69, 1799, 69, 1724, 1729, 69, 69, 1746,
1570 1739, 69, 69, 1730, 1740, 1741, 69, 1731, 1733, 1742,
1571 69, 1743, 69, 1734, 69, 1738, 1735, 69, 69, 1744,
1572 1745, 69, 1747, 1754, 1749, 69, 1746, 1739, 69, 1748,
1573 1750, 1740, 1741, 69, 1799, 1799, 1742, 69, 1743, 1751,
1574 1752, 1755, 1799, 1756, 69, 1753, 1744, 1745, 1759, 1747,
1575 69, 1749, 69, 69, 69, 1799, 1748, 1750, 1762, 1799,
1576 1766, 69, 69, 69, 1761, 1757, 1751, 1752, 69, 1758,
1577 1756, 1767, 1753, 69, 1760, 1763, 1764, 69, 69, 69,
1578 69, 1765, 69, 69, 69, 1762, 69, 1766, 1769, 1768,
1579
1580 1771, 1761, 1757, 69, 1770, 69, 1758, 69, 1767, 1772,
1581 1774, 1760, 1763, 1764, 1775, 1773, 1778, 1799, 1765, 1776,
1582 1777, 1799, 69, 69, 69, 1769, 1768, 1771, 69, 69,
1583 69, 1770, 1779, 1780, 69, 1781, 1772, 69, 69, 69,
1584 69, 1775, 1773, 1778, 1782, 1783, 1776, 1777, 1784, 1788,
1585 1785, 1790, 69, 69, 1787, 69, 1786, 69, 69, 1779,
1586 1780, 1791, 1781, 1799, 69, 1789, 1792, 1793, 1794, 1797,
1587 1798, 1782, 1783, 1799, 69, 1784, 69, 1785, 69, 1795,
1588 69, 1787, 1799, 1786, 1799, 69, 69, 69, 69, 69,
1589 69, 1796, 1789, 1792, 1793, 1794, 69, 69, 1799, 69,
1590
1591 1799, 1799, 1799, 1799, 1799, 1799, 1795, 1799, 1799, 1799,
1592 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1796, 41,
1593 41, 41, 41, 41, 41, 41, 46, 46, 46, 46,
1594 46, 46, 46, 51, 51, 51, 51, 51, 51, 51,
1595 57, 57, 57, 57, 57, 57, 57, 62, 62, 62,
1596 62, 62, 62, 62, 72, 72, 1799, 72, 72, 72,
1597 72, 127, 127, 1799, 1799, 1799, 127, 127, 129, 129,
1598 1799, 1799, 129, 1799, 129, 131, 1799, 1799, 1799, 1799,
1599 1799, 131, 134, 134, 1799, 1799, 1799, 134, 134, 136,
1600 1799, 1799, 1799, 1799, 1799, 136, 138, 138, 1799, 138,
1601
1602 138, 138, 138, 73, 73, 1799, 73, 73, 73, 73,
1603 13, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
1604 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
1605 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
1606 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
1607 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
1608 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
1609 1799, 1799, 1799, 1799, 1799, 1799
1093 73, 144, 73, 68, 147, 148, 156, 73, 157, 150,
1094 151, 149, 153, 154, 145, 69, 139, 69, 69, 69,
1095 69, 161, 69, 297, 1846, 69, 69, 1846, 144, 193,
1096 155, 147, 148, 156, 74, 157, 150, 151, 149, 153,
1097 158, 145, 159, 69, 69, 162, 168, 163, 161, 69,
1098 164, 69, 69, 174, 69, 171, 169, 155, 69, 172,
1099 69, 175, 173, 165, 166, 69, 69, 158, 1846, 159,
1100
1101 182, 69, 162, 168, 163, 176, 170, 164, 69, 69,
1102 174, 178, 171, 169, 69, 177, 172, 180, 175, 173,
1103 165, 166, 179, 69, 69, 69, 181, 182, 183, 69,
1104 184, 69, 176, 170, 185, 69, 69, 69, 178, 186,
1105 1846, 187, 177, 188, 180, 189, 69, 192, 190, 179,
1106 69, 195, 69, 181, 191, 183, 69, 184, 194, 69,
1107 69, 185, 69, 199, 202, 198, 186, 69, 187, 69,
1108 188, 196, 189, 69, 192, 190, 69, 69, 195, 197,
1109 200, 191, 203, 1846, 204, 194, 69, 1846, 69, 1846,
1110 199, 202, 198, 69, 1846, 207, 1846, 69, 196, 1846,
1111
1112 205, 201, 1846, 206, 1846, 69, 197, 200, 1846, 203,
1113 131, 204, 131, 131, 136, 131, 136, 136, 73, 136,
1114 73, 73, 208, 73, 137, 69, 69, 205, 201, 209,
1115 206, 210, 211, 212, 69, 213, 214, 1846, 227, 69,
1116 69, 215, 216, 218, 69, 217, 69, 1846, 69, 208,
1117 226, 1846, 219, 69, 1846, 139, 209, 228, 210, 211,
1118 212, 231, 213, 230, 69, 227, 229, 69, 215, 216,
1119 69, 69, 217, 220, 69, 233, 69, 226, 232, 69,
1120 69, 237, 234, 69, 228, 235, 69, 69, 231, 236,
1121 230, 69, 238, 229, 239, 1846, 243, 69, 69, 240,
1122
1123 220, 221, 233, 69, 244, 232, 222, 69, 237, 234,
1124 245, 223, 235, 241, 69, 242, 236, 224, 225, 238,
1125 69, 239, 69, 243, 69, 248, 240, 251, 221, 246,
1126 249, 253, 252, 222, 254, 69, 69, 245, 223, 247,
1127 241, 250, 242, 255, 224, 225, 257, 69, 69, 1846,
1128 256, 259, 1846, 270, 69, 1846, 69, 249, 69, 252,
1129 69, 261, 69, 69, 69, 69, 247, 69, 250, 258,
1130 255, 262, 69, 257, 260, 263, 69, 256, 259, 69,
1131 69, 264, 265, 266, 69, 69, 267, 272, 261, 69,
1132 277, 69, 271, 69, 268, 269, 258, 69, 262, 69,
1133
1134 273, 260, 263, 69, 274, 69, 278, 275, 264, 265,
1135 266, 276, 69, 267, 272, 69, 69, 277, 280, 271,
1136 69, 268, 269, 281, 283, 284, 69, 273, 279, 1846,
1137 286, 287, 288, 69, 275, 69, 1846, 69, 276, 137,
1138 282, 285, 289, 292, 291, 305, 296, 290, 69, 69,
1139 281, 283, 284, 69, 69, 279, 69, 69, 287, 294,
1140 69, 69, 69, 69, 293, 295, 69, 282, 285, 289,
1141 292, 291, 69, 296, 290, 298, 69, 299, 300, 1846,
1142 1846, 301, 302, 69, 303, 309, 294, 306, 308, 69,
1143 69, 293, 295, 69, 304, 1846, 307, 321, 1846, 1846,
1144
1145 69, 69, 298, 69, 299, 300, 69, 69, 301, 302,
1146 69, 303, 69, 310, 306, 308, 69, 311, 312, 313,
1147 69, 304, 69, 307, 69, 314, 69, 316, 69, 315,
1148 318, 326, 317, 69, 319, 320, 69, 1846, 1846, 69,
1149 310, 322, 346, 69, 311, 312, 313, 1846, 323, 69,
1150 69, 69, 314, 69, 316, 69, 315, 318, 326, 317,
1151 327, 319, 320, 69, 324, 69, 69, 325, 322, 328,
1152 329, 333, 336, 69, 69, 323, 330, 331, 334, 339,
1153 1846, 335, 337, 69, 69, 69, 1846, 327, 69, 338,
1154 340, 324, 341, 343, 325, 69, 328, 329, 333, 336,
1155
1156 69, 69, 342, 330, 331, 334, 69, 69, 335, 337,
1157 344, 348, 69, 351, 69, 69, 338, 340, 69, 341,
1158 343, 345, 349, 347, 350, 69, 69, 355, 69, 342,
1159 69, 352, 1846, 69, 353, 356, 354, 344, 348, 1846,
1160 351, 1846, 69, 357, 361, 69, 69, 379, 345, 349,
1161 347, 350, 373, 360, 355, 362, 69, 1846, 352, 358,
1162 69, 353, 365, 354, 69, 69, 69, 359, 69, 363,
1163 357, 361, 374, 69, 378, 69, 376, 375, 69, 373,
1164 360, 69, 362, 137, 69, 364, 358, 1846, 377, 365,
1165 69, 380, 1846, 69, 359, 69, 363, 383, 1846, 374,
1166
1167 69, 378, 381, 376, 375, 382, 385, 387, 384, 69,
1168 1846, 389, 364, 366, 367, 377, 399, 69, 380, 69,
1169 69, 386, 69, 368, 383, 369, 370, 371, 69, 381,
1170 372, 388, 382, 391, 387, 384, 390, 69, 69, 69,
1171 366, 367, 69, 399, 69, 392, 393, 69, 386, 394,
1172 368, 395, 369, 370, 371, 69, 69, 372, 388, 396,
1173 391, 404, 69, 390, 397, 398, 400, 401, 408, 402,
1174 69, 407, 1846, 405, 69, 69, 394, 69, 395, 69,
1175 69, 406, 403, 411, 410, 412, 396, 69, 404, 69,
1176 69, 397, 398, 400, 401, 69, 402, 409, 407, 69,
1177
1178 405, 413, 415, 69, 69, 69, 69, 69, 406, 403,
1179 411, 410, 412, 414, 417, 416, 69, 418, 1846, 419,
1180 421, 420, 1846, 69, 409, 422, 1846, 69, 413, 415,
1181 425, 423, 424, 1846, 426, 69, 69, 69, 69, 1846,
1182 414, 69, 416, 69, 418, 69, 419, 421, 420, 427,
1183 428, 69, 422, 69, 429, 69, 69, 425, 423, 424,
1184 69, 426, 434, 430, 431, 435, 432, 433, 436, 69,
1185 69, 439, 69, 69, 69, 69, 427, 428, 437, 69,
1186 438, 429, 441, 440, 445, 443, 69, 69, 1846, 434,
1187 430, 431, 69, 432, 433, 436, 69, 442, 1846, 69,
1188
1189 69, 444, 69, 69, 446, 437, 69, 438, 69, 441,
1190 440, 445, 443, 69, 447, 69, 453, 454, 455, 461,
1191 1846, 69, 69, 69, 442, 69, 458, 456, 444, 69,
1192 1846, 446, 459, 1846, 460, 467, 457, 1846, 462, 69,
1193 69, 447, 448, 453, 454, 455, 461, 449, 466, 450,
1194 69, 468, 1846, 458, 463, 464, 69, 451, 69, 459,
1195 69, 460, 467, 457, 69, 462, 69, 452, 69, 448,
1196 69, 465, 469, 69, 449, 466, 450, 470, 468, 471,
1197 472, 463, 464, 69, 451, 69, 473, 474, 475, 477,
1198 69, 69, 478, 480, 452, 476, 479, 69, 465, 469,
1199
1200 483, 482, 69, 137, 470, 481, 471, 472, 69, 69,
1201 485, 69, 69, 484, 474, 475, 477, 69, 486, 69,
1202 69, 487, 476, 479, 69, 69, 488, 483, 482, 69,
1203 489, 491, 481, 490, 69, 69, 492, 485, 493, 494,
1204 484, 495, 496, 497, 499, 486, 1846, 69, 487, 69,
1205 498, 500, 501, 504, 502, 1846, 1846, 69, 69, 1846,
1206 490, 505, 1846, 69, 1846, 1846, 69, 69, 69, 69,
1207 497, 499, 69, 69, 506, 69, 69, 498, 503, 501,
1208 510, 502, 69, 69, 69, 69, 507, 69, 505, 69,
1209 511, 508, 513, 512, 515, 509, 514, 516, 1846, 520,
1210
1211 1846, 506, 69, 517, 1846, 503, 518, 510, 1846, 69,
1212 69, 525, 522, 507, 69, 69, 69, 511, 508, 513,
1213 512, 69, 509, 514, 516, 69, 520, 69, 519, 69,
1214 517, 521, 523, 518, 69, 524, 526, 527, 532, 522,
1215 530, 528, 69, 69, 529, 69, 1846, 531, 533, 69,
1216 69, 535, 534, 540, 1846, 519, 1846, 69, 521, 523,
1217 69, 69, 524, 526, 527, 69, 69, 530, 528, 69,
1218 69, 529, 538, 69, 531, 533, 69, 536, 535, 534,
1219 539, 537, 541, 547, 69, 544, 69, 542, 546, 545,
1220 558, 69, 548, 551, 69, 549, 550, 1846, 1846, 538,
1221
1222 69, 69, 543, 553, 69, 69, 554, 539, 69, 541,
1223 547, 69, 1846, 69, 542, 546, 69, 69, 552, 548,
1224 551, 69, 549, 550, 69, 69, 69, 555, 556, 543,
1225 553, 557, 559, 554, 560, 1846, 561, 69, 565, 69,
1226 69, 562, 69, 69, 563, 552, 1846, 564, 566, 69,
1227 568, 569, 567, 1846, 555, 556, 69, 1846, 557, 559,
1228 69, 560, 69, 561, 69, 565, 69, 570, 562, 69,
1229 69, 563, 573, 69, 564, 566, 571, 568, 569, 567,
1230 572, 69, 575, 576, 574, 1846, 577, 69, 578, 580,
1231 584, 579, 1846, 581, 570, 69, 69, 1846, 69, 573,
1232
1233 69, 582, 69, 571, 69, 583, 586, 572, 137, 575,
1234 576, 574, 69, 577, 69, 578, 580, 585, 579, 69,
1235 581, 69, 587, 69, 69, 588, 589, 590, 582, 69,
1236 603, 591, 583, 586, 69, 598, 592, 69, 69, 1846,
1237 69, 1846, 600, 599, 585, 601, 69, 69, 633, 587,
1238 602, 1846, 588, 69, 590, 1846, 615, 69, 591, 1846,
1239 69, 69, 598, 592, 593, 611, 69, 612, 594, 600,
1240 599, 595, 601, 69, 617, 614, 69, 602, 596, 69,
1241 613, 597, 69, 69, 616, 1846, 69, 69, 1846, 1846,
1242 619, 593, 611, 1846, 612, 594, 623, 620, 595, 69,
1243
1244 69, 617, 614, 622, 69, 596, 618, 613, 597, 604,
1245 605, 616, 606, 1846, 621, 607, 69, 619, 69, 69,
1246 608, 69, 625, 623, 620, 69, 609, 610, 1846, 69,
1247 622, 627, 624, 618, 628, 69, 604, 605, 69, 606,
1248 69, 621, 607, 626, 629, 631, 630, 608, 632, 625,
1249 69, 69, 634, 609, 610, 69, 69, 635, 627, 624,
1250 69, 628, 1846, 637, 636, 639, 640, 69, 638, 641,
1251 626, 629, 631, 630, 69, 69, 643, 645, 642, 644,
1252 649, 69, 69, 69, 635, 69, 69, 69, 69, 69,
1253 637, 636, 639, 640, 646, 638, 641, 647, 69, 648,
1254
1255 650, 1846, 69, 69, 69, 642, 644, 649, 69, 651,
1256 652, 656, 655, 69, 1846, 69, 658, 69, 69, 657,
1257 653, 646, 69, 69, 647, 69, 648, 650, 654, 659,
1258 662, 661, 664, 69, 69, 69, 651, 652, 656, 655,
1259 69, 660, 663, 658, 69, 665, 657, 653, 69, 69,
1260 667, 69, 666, 69, 668, 654, 659, 662, 661, 664,
1261 669, 670, 671, 69, 672, 69, 1846, 69, 660, 663,
1262 674, 69, 665, 673, 69, 675, 676, 667, 69, 666,
1263 677, 69, 678, 679, 683, 681, 69, 669, 670, 680,
1264 69, 682, 684, 69, 69, 69, 69, 674, 69, 69,
1265
1266 673, 685, 675, 676, 686, 69, 688, 677, 69, 678,
1267 687, 691, 681, 69, 69, 69, 680, 689, 682, 684,
1268 690, 1846, 69, 69, 69, 69, 699, 692, 69, 69,
1269 1846, 137, 706, 688, 69, 700, 1846, 687, 691, 701,
1270 702, 1846, 69, 705, 689, 69, 1846, 690, 703, 1846,
1271 717, 69, 69, 699, 692, 693, 707, 694, 69, 706,
1272 704, 695, 700, 696, 709, 69, 701, 702, 697, 69,
1273 705, 69, 69, 698, 708, 703, 69, 712, 1846, 69,
1274 713, 69, 693, 707, 694, 716, 710, 704, 695, 715,
1275 696, 709, 714, 69, 722, 697, 711, 69, 69, 69,
1276
1277 698, 708, 69, 723, 712, 724, 69, 713, 69, 69,
1278 718, 725, 716, 710, 726, 719, 715, 720, 69, 714,
1279 728, 722, 731, 711, 727, 69, 69, 732, 733, 1846,
1280 723, 734, 724, 737, 736, 721, 69, 718, 725, 69,
1281 69, 726, 719, 729, 720, 730, 69, 728, 69, 69,
1282 69, 727, 735, 69, 732, 69, 69, 739, 734, 69,
1283 69, 736, 721, 738, 69, 69, 741, 743, 740, 742,
1284 729, 748, 730, 745, 747, 69, 744, 69, 746, 735,
1285 69, 749, 752, 757, 739, 69, 69, 69, 750, 69,
1286 738, 69, 69, 741, 743, 740, 742, 69, 69, 751,
1287
1288 745, 747, 69, 744, 69, 746, 753, 754, 749, 752,
1289 756, 69, 755, 758, 69, 750, 759, 1846, 761, 763,
1290 760, 762, 764, 1846, 765, 767, 751, 69, 69, 69,
1291 69, 69, 69, 753, 754, 69, 69, 756, 766, 755,
1292 758, 770, 768, 69, 69, 761, 763, 69, 762, 764,
1293 69, 765, 767, 769, 771, 775, 772, 774, 777, 69,
1294 773, 776, 778, 69, 779, 766, 69, 69, 770, 768,
1295 1846, 69, 1846, 69, 783, 784, 69, 69, 69, 69,
1296 769, 771, 69, 772, 774, 777, 69, 773, 776, 778,
1297 780, 779, 781, 782, 785, 787, 69, 69, 69, 69,
1298
1299 786, 783, 784, 69, 791, 789, 790, 69, 788, 1846,
1300 1846, 69, 792, 1846, 795, 794, 69, 780, 793, 781,
1301 782, 785, 787, 69, 69, 797, 69, 786, 69, 69,
1302 798, 791, 799, 804, 69, 788, 69, 69, 801, 69,
1303 69, 795, 794, 802, 800, 793, 69, 803, 69, 805,
1304 806, 69, 797, 1846, 69, 69, 807, 798, 1846, 799,
1305 808, 812, 809, 810, 69, 801, 813, 811, 815, 69,
1306 802, 800, 69, 69, 803, 69, 69, 806, 69, 69,
1307 69, 816, 819, 807, 814, 69, 69, 808, 812, 809,
1308 810, 817, 818, 813, 811, 815, 69, 821, 820, 822,
1309
1310 823, 69, 824, 69, 69, 69, 825, 826, 69, 819,
1311 827, 814, 1846, 828, 829, 69, 69, 830, 817, 818,
1312 69, 69, 69, 69, 821, 820, 822, 823, 69, 824,
1313 69, 832, 833, 825, 826, 69, 834, 827, 831, 69,
1314 828, 829, 836, 835, 830, 837, 69, 839, 69, 838,
1315 69, 845, 840, 69, 69, 69, 841, 69, 832, 833,
1316 69, 69, 69, 834, 843, 831, 842, 844, 846, 836,
1317 835, 69, 837, 847, 839, 849, 838, 69, 69, 840,
1318 848, 69, 69, 841, 850, 69, 851, 69, 853, 856,
1319 852, 843, 69, 842, 844, 846, 69, 69, 855, 69,
1320
1321 847, 854, 849, 69, 857, 858, 859, 848, 860, 1846,
1322 867, 850, 861, 865, 69, 853, 856, 69, 862, 863,
1323 864, 868, 69, 1846, 69, 855, 69, 869, 854, 866,
1324 69, 857, 69, 859, 69, 860, 69, 69, 69, 861,
1325 865, 69, 69, 870, 69, 862, 863, 864, 876, 69,
1326 879, 1846, 69, 1846, 869, 1846, 866, 877, 878, 880,
1327 882, 881, 69, 888, 883, 1846, 69, 889, 69, 69,
1328 870, 871, 69, 69, 69, 876, 872, 879, 873, 69,
1329 874, 69, 875, 884, 877, 878, 880, 885, 881, 69,
1330 888, 69, 886, 887, 889, 69, 69, 890, 871, 892,
1331
1332 891, 893, 896, 872, 898, 873, 69, 874, 894, 875,
1333 884, 69, 69, 895, 885, 897, 899, 900, 1846, 886,
1334 887, 69, 69, 902, 69, 69, 69, 891, 893, 69,
1335 69, 69, 901, 903, 904, 894, 905, 906, 69, 69,
1336 895, 909, 897, 899, 69, 69, 69, 907, 910, 908,
1337 902, 911, 69, 912, 915, 916, 69, 919, 914, 901,
1338 903, 904, 69, 905, 906, 913, 69, 918, 69, 69,
1339 69, 69, 69, 69, 907, 1846, 908, 925, 911, 69,
1340 917, 915, 69, 69, 69, 914, 922, 69, 69, 920,
1341 923, 924, 913, 69, 918, 921, 927, 929, 69, 926,
1342
1343 69, 928, 69, 69, 925, 69, 69, 917, 930, 932,
1344 69, 931, 933, 922, 936, 69, 920, 923, 924, 69,
1345 69, 934, 921, 927, 929, 935, 926, 937, 928, 939,
1346 938, 69, 69, 940, 942, 69, 932, 1846, 931, 933,
1347 941, 936, 69, 943, 944, 69, 69, 946, 1846, 945,
1348 69, 69, 69, 947, 937, 69, 939, 938, 69, 948,
1349 949, 942, 69, 69, 69, 951, 69, 941, 950, 69,
1350 943, 944, 952, 69, 946, 956, 945, 69, 953, 954,
1351 947, 955, 960, 69, 957, 69, 948, 949, 958, 69,
1352 69, 69, 951, 962, 959, 950, 965, 69, 967, 952,
1353
1354 69, 961, 956, 69, 69, 953, 954, 964, 955, 960,
1355 69, 957, 963, 69, 69, 958, 966, 968, 69, 969,
1356 962, 959, 970, 971, 69, 967, 972, 69, 961, 69,
1357 1846, 975, 69, 974, 964, 976, 977, 984, 973, 963,
1358 978, 69, 1846, 69, 968, 69, 69, 69, 69, 970,
1359 971, 69, 983, 972, 1846, 979, 980, 981, 69, 991,
1360 974, 982, 69, 69, 69, 973, 985, 69, 69, 69,
1361 986, 69, 987, 69, 69, 990, 989, 988, 69, 983,
1362 69, 69, 979, 980, 981, 69, 991, 992, 982, 69,
1363 994, 993, 1846, 985, 995, 997, 996, 986, 999, 987,
1364
1365 1003, 1004, 990, 989, 988, 69, 998, 69, 1006, 69,
1366 1005, 1008, 69, 69, 992, 69, 69, 994, 993, 69,
1367 1846, 995, 997, 996, 69, 999, 1000, 1003, 69, 1007,
1368 1001, 69, 69, 998, 1846, 1006, 69, 1005, 1009, 1010,
1369 1012, 1011, 69, 1002, 1846, 1013, 1014, 69, 1846, 1016,
1370 1015, 69, 1017, 1000, 1846, 1846, 1007, 1001, 1018, 1020,
1371 69, 69, 1022, 1846, 69, 1009, 1010, 69, 1011, 1019,
1372 1002, 69, 69, 69, 69, 69, 1016, 1015, 1021, 1017,
1373 1023, 69, 69, 1024, 1026, 1018, 1020, 69, 1025, 69,
1374 69, 1027, 1030, 69, 1028, 1029, 1019, 1032, 1033, 1031,
1375
1376 69, 69, 69, 1846, 1846, 1021, 1034, 1023, 1039, 69,
1377 1024, 1026, 69, 69, 69, 1025, 1038, 69, 1027, 1030,
1378 69, 1028, 1029, 69, 1032, 1033, 1031, 1035, 1036, 1037,
1379 69, 1040, 1041, 1034, 69, 1039, 69, 1042, 1043, 69,
1380 1044, 69, 1045, 1038, 1047, 1046, 69, 69, 1048, 1049,
1381 69, 69, 1054, 1050, 1035, 1036, 1037, 1055, 1051, 1041,
1382 69, 1052, 69, 1056, 69, 1043, 69, 69, 69, 1045,
1383 1057, 1047, 1046, 1053, 69, 1048, 1049, 1059, 1060, 69,
1384 1050, 69, 69, 69, 1055, 1051, 1061, 1058, 1052, 69,
1385 1056, 1063, 69, 1062, 1065, 1066, 1064, 1057, 1069, 69,
1386
1387 1053, 69, 69, 69, 1059, 1068, 1067, 1070, 1071, 69,
1388 69, 1846, 69, 1061, 1058, 1072, 69, 69, 1063, 1846,
1389 1062, 1065, 69, 1064, 1073, 69, 69, 69, 1074, 69,
1390 1075, 69, 1068, 1067, 1070, 1071, 1076, 1077, 1081, 1078,
1391 1079, 69, 1072, 1080, 69, 69, 69, 69, 1082, 1083,
1392 69, 1073, 1084, 1085, 1089, 1074, 69, 1075, 1088, 1086,
1393 1090, 69, 1087, 1076, 69, 1081, 1078, 1079, 69, 69,
1394 1080, 69, 1091, 69, 1094, 69, 1083, 69, 1092, 1084,
1395 1085, 1089, 1093, 1095, 1098, 1088, 1086, 69, 1099, 1087,
1396 1100, 69, 69, 69, 1096, 1104, 69, 1097, 1103, 1091,
1397
1398 69, 1094, 69, 1105, 1102, 1092, 1101, 69, 69, 1093,
1399 1095, 1098, 69, 69, 69, 1109, 1110, 69, 69, 69,
1400 1106, 1096, 1104, 1108, 1097, 1103, 1107, 69, 69, 1112,
1401 1105, 1102, 69, 1101, 1111, 69, 1846, 1117, 1118, 1120,
1402 1113, 69, 1109, 1110, 1121, 1115, 69, 1106, 1116, 1119,
1403 1108, 69, 69, 1107, 1114, 1122, 1112, 1123, 69, 1124,
1404 1127, 1111, 69, 69, 1117, 69, 69, 1113, 1125, 69,
1405 69, 1121, 1115, 69, 1126, 1116, 1119, 1128, 1131, 69,
1406 1129, 1114, 1122, 1132, 1136, 1130, 1124, 1127, 69, 69,
1407 1133, 69, 69, 69, 69, 1125, 1134, 1135, 1139, 69,
1408
1409 1137, 1126, 1142, 69, 1128, 1846, 69, 1129, 1138, 69,
1410 1132, 1136, 1130, 1143, 1140, 1846, 69, 1133, 69, 1141,
1411 69, 1148, 69, 1134, 1135, 1139, 69, 1137, 1144, 69,
1412 69, 69, 1145, 1150, 1146, 1138, 1147, 1151, 1149, 1152,
1413 1143, 1140, 69, 1153, 69, 1154, 1141, 69, 69, 69,
1414 1156, 1155, 69, 69, 1157, 1144, 1158, 1159, 69, 1145,
1415 1150, 1146, 1160, 1147, 1151, 1149, 69, 69, 69, 1163,
1416 1153, 69, 69, 69, 1162, 1161, 1167, 1156, 1155, 69,
1417 69, 69, 1164, 1158, 1159, 1166, 69, 1168, 69, 1160,
1418 69, 69, 69, 1169, 1173, 1165, 1163, 1178, 1170, 1171,
1419
1420 69, 1162, 1161, 1167, 69, 1175, 1172, 69, 1174, 1164,
1421 1176, 1177, 1166, 69, 69, 69, 1179, 1180, 1181, 1182,
1422 1184, 69, 1165, 1186, 69, 1170, 1171, 69, 69, 1183,
1423 1193, 69, 69, 1172, 69, 1174, 1185, 69, 1177, 1846,
1424 69, 1197, 1191, 1179, 1846, 1181, 1195, 69, 69, 69,
1425 69, 1187, 1188, 1189, 69, 1199, 1183, 1192, 1190, 69,
1426 1194, 69, 69, 1185, 69, 1196, 69, 69, 69, 1191,
1427 1200, 69, 1201, 1195, 1198, 69, 1202, 69, 1187, 1188,
1428 1189, 69, 1199, 1203, 1192, 1190, 1205, 1194, 1204, 1206,
1429 1207, 69, 1196, 1208, 69, 1209, 69, 1200, 69, 1201,
1430
1431 69, 1198, 1211, 1202, 1212, 1214, 69, 69, 1846, 1215,
1432 69, 1213, 1210, 1205, 1216, 1204, 1206, 1207, 69, 69,
1433 1208, 1217, 1209, 69, 69, 69, 1219, 1218, 1221, 1211,
1434 1220, 1222, 1214, 1224, 1846, 69, 69, 69, 1213, 1210,
1435 69, 1223, 69, 1226, 69, 69, 69, 1227, 69, 69,
1436 1225, 69, 1232, 1219, 1218, 1221, 1228, 1220, 1222, 69,
1437 1224, 1229, 1231, 1230, 69, 69, 1233, 1235, 1223, 69,
1438 1226, 1234, 1236, 69, 1227, 1238, 1239, 1225, 69, 69,
1439 69, 1240, 69, 1228, 69, 1241, 1242, 1237, 1229, 1231,
1440 1230, 1243, 69, 1233, 69, 1244, 1245, 1247, 1234, 1236,
1441
1442 69, 1246, 1250, 69, 1248, 1249, 69, 69, 1251, 1252,
1443 69, 1253, 69, 69, 1237, 1254, 69, 69, 1243, 69,
1444 69, 1255, 1244, 1256, 1247, 1257, 69, 69, 1246, 1258,
1445 1259, 1248, 1249, 69, 1261, 1251, 69, 1260, 1253, 69,
1446 69, 1263, 1254, 1264, 1262, 1265, 1267, 69, 1255, 1846,
1447 69, 69, 69, 1272, 1266, 69, 1258, 1259, 1268, 69,
1448 69, 1261, 69, 69, 1260, 69, 1269, 69, 1263, 69,
1449 1264, 1262, 1265, 69, 1270, 1273, 69, 1274, 1271, 1275,
1450 1272, 1266, 1278, 69, 69, 1268, 69, 1276, 1281, 1279,
1451 1283, 69, 69, 1269, 1280, 1288, 1284, 69, 1277, 1282,
1452
1453 1846, 1270, 1273, 69, 1286, 1271, 1275, 69, 69, 1278,
1454 1285, 69, 69, 69, 1276, 69, 1279, 1283, 1287, 1289,
1455 69, 1280, 69, 1291, 1292, 1277, 1282, 69, 1290, 1294,
1456 69, 1286, 1293, 1295, 1846, 69, 1846, 1285, 69, 69,
1457 1297, 69, 69, 69, 69, 1287, 1289, 1296, 69, 69,
1458 1291, 1292, 1298, 1301, 1299, 1290, 1294, 1302, 1300, 1293,
1459 1295, 69, 69, 1303, 69, 69, 1304, 1297, 1307, 1305,
1460 1306, 1315, 69, 1846, 1296, 69, 1308, 69, 1309, 1298,
1461 1301, 1299, 69, 69, 1302, 1300, 69, 69, 1310, 1311,
1462 1303, 1318, 1312, 1304, 1314, 69, 1305, 1306, 1313, 1325,
1463
1464 69, 69, 69, 1308, 1316, 1309, 1317, 69, 1846, 1319,
1465 69, 69, 1321, 69, 69, 1310, 1311, 69, 1318, 1312,
1466 69, 1314, 1320, 1846, 1322, 1313, 69, 1324, 1323, 1328,
1467 69, 1316, 1846, 1317, 69, 69, 1319, 1326, 1327, 69,
1468 69, 1331, 1329, 1332, 69, 1330, 1341, 1333, 1846, 1320,
1469 69, 1322, 1846, 1334, 1324, 1323, 1328, 1335, 69, 69,
1470 69, 69, 69, 69, 1326, 1327, 69, 1336, 1331, 1329,
1471 1332, 1337, 1330, 1341, 1333, 69, 1338, 1846, 69, 69,
1472 1334, 69, 1343, 1339, 1335, 1340, 1342, 69, 69, 1344,
1473 1345, 1346, 1348, 1347, 1336, 1351, 1846, 1350, 1337, 1349,
1474
1475 69, 69, 1354, 1338, 69, 1356, 69, 1355, 69, 1343,
1476 1339, 69, 1340, 1342, 1352, 69, 69, 1345, 69, 1348,
1477 1347, 69, 69, 1353, 1350, 69, 1349, 1357, 1358, 69,
1478 69, 1359, 69, 69, 1355, 1360, 1362, 1361, 1364, 1846,
1479 69, 1352, 1363, 69, 69, 1365, 1369, 1370, 1367, 69,
1480 1353, 1846, 1368, 69, 1357, 1358, 1366, 69, 1359, 69,
1481 69, 69, 1371, 69, 1361, 1364, 69, 1846, 69, 1363,
1482 69, 1373, 1365, 1369, 69, 1367, 1372, 1374, 69, 1368,
1483 1376, 1380, 1375, 1366, 69, 69, 1379, 1378, 69, 1371,
1484 69, 1377, 69, 69, 69, 69, 69, 1382, 1373, 1381,
1485
1486 1388, 1383, 1384, 1372, 1374, 69, 1385, 1376, 1380, 1375,
1487 1387, 1389, 1392, 1379, 1378, 1393, 69, 1386, 1377, 69,
1488 1390, 1391, 1394, 1396, 69, 69, 1381, 69, 1383, 1384,
1489 1397, 69, 69, 1385, 1398, 69, 69, 1387, 69, 69,
1490 1400, 1401, 69, 1395, 1386, 1399, 1402, 1390, 1391, 69,
1491 69, 69, 1403, 69, 69, 1404, 1405, 69, 1846, 1407,
1492 1406, 69, 69, 1409, 69, 1413, 1411, 1400, 69, 1414,
1493 1395, 1415, 1399, 1402, 1408, 69, 69, 69, 69, 69,
1494 1410, 1412, 1404, 1405, 69, 69, 1407, 1406, 69, 69,
1495 69, 1416, 69, 1411, 1417, 1418, 1414, 1419, 1415, 1420,
1496
1497 1424, 1408, 1422, 69, 1426, 69, 69, 1410, 1412, 1421,
1498 69, 1425, 1423, 1428, 1431, 69, 1846, 69, 1416, 69,
1499 1427, 1417, 69, 1429, 1419, 1430, 69, 1424, 69, 1422,
1500 69, 1426, 69, 69, 69, 1432, 1421, 69, 1425, 1423,
1501 1428, 1431, 1433, 1434, 1435, 69, 1437, 1427, 1439, 1436,
1502 1429, 1438, 1430, 69, 1442, 69, 69, 1440, 1445, 1846,
1503 1444, 1846, 1432, 1447, 69, 1441, 69, 69, 1443, 1433,
1504 69, 1435, 1446, 1437, 69, 69, 1436, 69, 1438, 69,
1505 1449, 1442, 69, 69, 1440, 1445, 69, 1444, 1448, 1450,
1506 1447, 1451, 1441, 1452, 69, 1443, 1453, 1454, 1455, 1446,
1507
1508 1456, 1846, 1459, 69, 69, 1457, 69, 69, 1460, 1458,
1509 69, 69, 1466, 1846, 1461, 1448, 69, 1846, 1451, 69,
1510 1452, 69, 1463, 1453, 1454, 1455, 69, 1456, 69, 69,
1511 69, 1462, 1457, 69, 1465, 1460, 1458, 1468, 1467, 1464,
1512 1469, 1461, 1470, 69, 69, 69, 69, 1472, 69, 1463,
1513 1471, 1846, 1474, 1475, 1476, 1473, 69, 1477, 1462, 69,
1514 1478, 1465, 69, 1479, 1468, 1467, 1464, 1469, 69, 69,
1515 1480, 1483, 69, 69, 1472, 1481, 69, 1471, 69, 1474,
1516 69, 1476, 1473, 1482, 69, 1485, 69, 69, 69, 1486,
1517 1487, 1484, 1488, 69, 69, 1489, 69, 1480, 1483, 69,
1518
1519 69, 1490, 1481, 1491, 69, 1492, 1493, 1494, 69, 1846,
1520 1482, 1496, 1485, 69, 1495, 1497, 69, 1487, 1484, 1498,
1521 69, 1506, 1489, 69, 1499, 1501, 1500, 69, 1490, 1502,
1522 69, 69, 1492, 1493, 1494, 69, 69, 1504, 69, 69,
1523 69, 1495, 69, 1503, 69, 1507, 69, 1505, 69, 1508,
1524 69, 1499, 1501, 1500, 69, 1509, 1502, 1510, 69, 69,
1525 1512, 1517, 69, 69, 1504, 1511, 1513, 1515, 69, 1516,
1526 1503, 69, 1507, 69, 1505, 69, 1508, 1518, 1514, 1846,
1527 1519, 1846, 1509, 69, 1510, 1527, 1521, 1512, 69, 69,
1528 1520, 69, 1511, 1513, 1515, 69, 1516, 69, 1522, 1528,
1529
1530 1524, 1523, 1525, 69, 69, 1514, 69, 1519, 69, 69,
1531 1526, 69, 1527, 1521, 1529, 1530, 1535, 1520, 69, 69,
1532 1536, 1531, 1532, 1534, 69, 1522, 69, 1524, 1523, 1525,
1533 1533, 69, 69, 69, 69, 69, 1537, 1526, 1541, 69,
1534 1846, 1529, 1530, 1535, 1538, 1542, 1539, 69, 1531, 1532,
1535 1534, 1540, 69, 69, 1543, 1545, 1544, 1533, 69, 69,
1536 69, 1546, 69, 69, 1547, 1541, 1548, 69, 1549, 1550,
1537 1553, 1538, 1542, 1539, 1551, 69, 69, 1552, 1540, 69,
1538 1554, 1543, 1545, 1544, 1555, 1557, 69, 1558, 69, 1559,
1539 1556, 1547, 69, 1548, 69, 69, 1550, 69, 69, 1562,
1540
1541 69, 1551, 1561, 1560, 1552, 1563, 1565, 1554, 69, 1846,
1542 1564, 69, 69, 1567, 69, 69, 1559, 1556, 69, 1566,
1543 69, 69, 1568, 1570, 1569, 69, 1562, 69, 1571, 1561,
1544 1560, 69, 1563, 1565, 1572, 69, 69, 1564, 1846, 1573,
1545 1567, 1574, 1575, 1576, 69, 1577, 1566, 1846, 1578, 1568,
1546 69, 1569, 1579, 1846, 1580, 69, 1585, 69, 1846, 1582,
1547 1583, 69, 1584, 1846, 1846, 69, 1573, 1846, 69, 69,
1548 1576, 69, 69, 1581, 69, 1578, 69, 69, 69, 1579,
1549 69, 1580, 69, 1585, 1586, 69, 1582, 1583, 1587, 1584,
1550 1588, 1589, 1591, 69, 1590, 1592, 1595, 1593, 1594, 1596,
1551
1552 1581, 1598, 69, 69, 69, 1846, 69, 69, 69, 69,
1553 69, 1586, 1597, 1599, 1600, 1587, 1601, 1588, 1589, 1591,
1554 69, 1590, 1592, 69, 1593, 1594, 1596, 1603, 69, 1604,
1555 69, 1602, 69, 1606, 69, 1605, 69, 1607, 1611, 1597,
1556 1599, 1600, 69, 1601, 1608, 69, 1609, 69, 1612, 1846,
1557 69, 69, 1610, 1613, 1603, 1615, 1604, 1614, 1602, 69,
1558 1606, 1616, 1605, 1617, 69, 69, 69, 1619, 69, 1620,
1559 1618, 1608, 69, 1609, 1621, 69, 69, 1622, 1623, 1610,
1560 69, 1624, 1615, 1628, 1614, 1632, 1625, 69, 69, 1627,
1561 69, 1626, 69, 69, 1619, 69, 69, 1618, 69, 1629,
1562
1563 69, 1621, 69, 69, 1622, 1623, 1630, 69, 1624, 1631,
1564 69, 69, 1632, 1625, 1633, 1635, 1627, 69, 1626, 1634,
1565 1636, 1637, 69, 1641, 1644, 69, 1629, 69, 1639, 1642,
1566 69, 1638, 1640, 1630, 1643, 69, 1631, 69, 1648, 69,
1567 69, 1633, 1635, 69, 1645, 1646, 1634, 1636, 1637, 69,
1568 69, 69, 1647, 69, 1649, 1639, 1642, 1650, 1638, 1640,
1569 1651, 1643, 1652, 69, 69, 69, 1654, 69, 69, 1655,
1570 1657, 1645, 1646, 1656, 1653, 69, 69, 69, 69, 1647,
1571 1658, 1649, 1660, 1659, 1650, 1666, 1664, 1651, 69, 1652,
1572 69, 69, 69, 1654, 1662, 69, 1655, 1657, 69, 1661,
1573
1574 1656, 1653, 1663, 1668, 1665, 69, 69, 1658, 1669, 1670,
1575 1659, 69, 69, 69, 1667, 69, 69, 69, 1675, 1671,
1576 1673, 1662, 69, 1672, 1674, 1677, 1661, 1679, 69, 1663,
1577 1668, 1665, 69, 1680, 69, 69, 1670, 69, 1676, 69,
1578 69, 1667, 1681, 69, 1684, 1675, 1671, 1673, 1678, 1683,
1579 1672, 1674, 69, 69, 69, 69, 69, 1682, 1686, 1685,
1580 1680, 1687, 1688, 69, 69, 1676, 1689, 1690, 1692, 69,
1581 69, 1684, 69, 1691, 69, 1678, 1683, 1693, 1695, 1696,
1582 69, 1698, 69, 1694, 1682, 1686, 1685, 1701, 69, 69,
1583 69, 1697, 69, 1689, 1690, 69, 1702, 1699, 1700, 69,
1584
1585 1691, 69, 69, 1703, 1693, 1695, 1696, 69, 1705, 1704,
1586 1694, 69, 69, 1707, 69, 1706, 1708, 1709, 1697, 1710,
1587 1711, 69, 1712, 69, 1699, 1700, 1713, 1716, 1717, 1719,
1588 1703, 69, 1714, 1715, 1846, 1705, 1704, 69, 1718, 1720,
1589 69, 69, 1706, 69, 69, 69, 1710, 69, 69, 1712,
1590 69, 69, 1721, 69, 69, 1717, 69, 69, 1722, 1714,
1591 1715, 69, 1723, 1724, 1725, 1718, 1720, 1726, 1727, 1731,
1592 1728, 1729, 69, 69, 69, 69, 69, 69, 1732, 1721,
1593 1730, 69, 1734, 1733, 1846, 1722, 1736, 69, 1735, 1723,
1594 1724, 1725, 1738, 69, 1726, 1727, 69, 1728, 1729, 1737,
1595
1596 1741, 1742, 1739, 1743, 1846, 69, 69, 1730, 1740, 69,
1597 1733, 69, 69, 69, 69, 1735, 1744, 69, 69, 69,
1598 1745, 1750, 1747, 1748, 1751, 69, 1737, 69, 69, 1739,
1599 1743, 1746, 69, 1749, 1752, 1740, 1753, 69, 1754, 1846,
1600 1755, 69, 1758, 1744, 69, 69, 1756, 1745, 69, 1747,
1601 1748, 69, 1757, 69, 1759, 69, 1846, 1763, 1746, 1761,
1602 1749, 69, 1846, 69, 1760, 1754, 69, 1755, 69, 1758,
1603 69, 1762, 69, 1756, 1765, 1766, 69, 1772, 1764, 1767,
1604 69, 1759, 69, 69, 1763, 69, 1761, 69, 1768, 69,
1605 69, 1760, 1769, 1770, 1773, 69, 1771, 69, 1762, 1774,
1606
1607 1775, 1765, 1766, 69, 69, 1764, 1767, 1776, 69, 1777,
1608 1779, 69, 69, 1778, 1783, 1768, 1781, 1780, 1784, 1769,
1609 1770, 1773, 69, 1771, 1782, 69, 69, 1775, 69, 69,
1610 69, 1787, 69, 1785, 1776, 1788, 1777, 1793, 1786, 69,
1611 1778, 69, 1789, 1781, 1780, 69, 69, 1790, 69, 69,
1612 69, 1782, 69, 1791, 1794, 1792, 1801, 1796, 1787, 69,
1613 1785, 69, 1788, 69, 1793, 1786, 1797, 69, 1798, 1789,
1614 1795, 1800, 1799, 1802, 1790, 1806, 69, 1846, 69, 69,
1615 1791, 1794, 1792, 69, 1796, 1803, 1809, 69, 69, 1808,
1616 69, 1846, 1846, 1797, 69, 1798, 1804, 1795, 1800, 1799,
1617
1618 69, 1805, 1807, 69, 69, 69, 69, 1810, 69, 69,
1619 69, 1811, 1803, 1809, 1813, 69, 1808, 1812, 1815, 69,
1620 1814, 1846, 1816, 1804, 1817, 1846, 69, 1820, 1805, 1807,
1621 1818, 69, 1821, 1819, 1810, 69, 1822, 1846, 1811, 1846,
1622 69, 1813, 69, 1825, 1812, 1815, 1823, 1814, 69, 1816,
1623 69, 1817, 69, 69, 1820, 1827, 69, 1818, 1828, 69,
1624 1819, 1824, 1835, 1822, 1826, 69, 69, 1829, 1830, 69,
1625 1825, 1831, 69, 1823, 1834, 69, 69, 69, 1832, 1833,
1626 69, 1837, 1827, 1836, 1838, 1828, 69, 69, 1824, 69,
1627 1846, 1826, 1839, 1840, 1829, 1830, 1841, 69, 1831, 1842,
1628
1629 69, 1834, 1844, 69, 1845, 1832, 1833, 69, 69, 1843,
1630 1836, 69, 69, 1846, 1846, 69, 1846, 69, 69, 1839,
1631 1840, 1846, 1846, 1841, 1846, 1846, 1842, 1846, 1846, 69,
1632 1846, 69, 1846, 1846, 1846, 1846, 1843, 41, 41, 41,
1633 41, 41, 41, 41, 46, 46, 46, 46, 46, 46,
1634 46, 51, 51, 51, 51, 51, 51, 51, 57, 57,
1635 57, 57, 57, 57, 57, 62, 62, 62, 62, 62,
1636 62, 62, 72, 72, 1846, 72, 72, 72, 72, 127,
1637 127, 1846, 1846, 1846, 127, 127, 129, 129, 1846, 1846,
1638 129, 1846, 129, 131, 1846, 1846, 1846, 1846, 1846, 131,
1639
1640 134, 134, 1846, 1846, 1846, 134, 134, 136, 1846, 1846,
1641 1846, 1846, 1846, 136, 138, 138, 1846, 138, 138, 138,
1642 138, 73, 73, 1846, 73, 73, 73, 73, 13, 1846,
1643 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
1644 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
1645 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
1646 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
1647 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
1648 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
1649 1846, 1846, 1846, 1846
1650
16101651 } ;
16111652
1612 static yyconst flex_int16_t yy_chk[5277] =
1653 static yyconst flex_int16_t yy_chk[5395] =
16131654 { 0,
16141655 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
16151656 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
16191660 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
16201661 1, 1, 1, 1, 1, 3, 3, 3, 4, 4,
16211662 4, 5, 5, 6, 6, 5, 24, 6, 7, 7,
1622 7, 7, 1805, 7, 8, 8, 8, 8, 24, 8,
1663 7, 7, 1852, 7, 8, 8, 8, 8, 24, 8,
16231664 9, 9, 9, 10, 10, 10, 15, 45, 45, 50,
16241665
16251666 15, 3, 50, 24, 4, 61, 61, 5, 19, 6,
1626 19, 19, 70, 19, 669, 7, 70, 40, 19, 40,
1627 40, 8, 40, 23, 20, 20, 9, 40, 663, 10,
1667 19, 19, 70, 19, 686, 7, 70, 40, 19, 40,
1668 40, 8, 40, 23, 20, 20, 9, 40, 680, 10,
16281669 11, 11, 11, 11, 11, 11, 12, 12, 12, 12,
16291670 12, 12, 20, 23, 27, 19, 23, 29, 20, 11,
1630 23, 20, 20, 136, 21, 12, 27, 25, 663, 29,
1671 23, 20, 20, 136, 21, 12, 27, 25, 680, 29,
16311672 134, 21, 34, 94, 28, 25, 133, 11, 21, 20,
16321673 23, 27, 131, 12, 29, 34, 11, 128, 128, 129,
16331674 21, 21, 12, 25, 25, 76, 28, 26, 21, 34,
16391680 22, 79, 22, 22, 30, 31, 31, 35, 30, 75,
16401681 31, 35, 75, 83, 68, 37, 62, 37, 77, 79,
16411682 57, 35, 52, 38, 35, 77, 31, 33, 38, 51,
1642 90, 33, 37, 35, 35, 247, 38, 33, 35, 39,
1683 90, 33, 37, 35, 35, 252, 38, 33, 35, 39,
16431684 33, 37, 37, 39, 37, 77, 36, 33, 35, 33,
16441685 38, 35, 46, 90, 33, 38, 36, 90, 33, 37,
1645 36, 36, 247, 66, 33, 39, 39, 33, 36, 130,
1686 36, 36, 252, 66, 33, 39, 39, 33, 36, 130,
16461687
16471688 39, 41, 130, 36, 33, 56, 66, 56, 56, 64,
16481689 56, 64, 64, 36, 64, 135, 135, 36, 36, 67,
16491690 66, 67, 67, 69, 67, 69, 69, 72, 69, 72,
1650 72, 78, 72, 69, 80, 81, 82, 72, 86, 85,
1651 84, 14, 87, 13, 78, 82, 64, 80, 84, 87,
1652 81, 86, 91, 215, 0, 78, 85, 88, 78, 89,
1653 92, 80, 81, 82, 72, 86, 88, 84, 89, 87,
1654 85, 78, 93, 92, 91, 93, 0, 95, 96, 91,
1655 99, 101, 215, 85, 88, 95, 89, 92, 93, 93,
1656 97, 103, 98, 99, 97, 98, 93, 100, 96, 93,
1657
1658 96, 101, 93, 105, 95, 96, 107, 99, 101, 102,
1659 105, 103, 104, 106, 97, 93, 93, 97, 103, 98,
1660 100, 97, 106, 102, 100, 96, 104, 109, 108, 107,
1661 105, 109, 113, 107, 110, 112, 102, 108, 111, 104,
1662 106, 110, 112, 115, 114, 117, 113, 122, 116, 109,
1663 142, 115, 118, 122, 109, 108, 114, 116, 109, 113,
1664 119, 110, 112, 120, 111, 111, 121, 118, 125, 124,
1665 115, 114, 120, 123, 122, 116, 117, 121, 0, 118,
1666 119, 142, 0, 125, 0, 0, 119, 119, 126, 140,
1667 120, 124, 253, 121, 123, 125, 124, 126, 123, 132,
1668
1669 123, 132, 132, 137, 132, 137, 137, 119, 137, 138,
1670 141, 138, 138, 140, 138, 126, 140, 143, 145, 253,
1671 144, 123, 146, 147, 150, 153, 145, 0, 148, 143,
1672 147, 149, 141, 148, 146, 151, 0, 141, 0, 144,
1673 154, 0, 155, 157, 143, 145, 138, 144, 154, 146,
1674 147, 153, 153, 149, 158, 150, 151, 0, 149, 148,
1675 148, 156, 0, 151, 155, 156, 157, 154, 160, 155,
1676 157, 163, 159, 0, 0, 161, 158, 162, 161, 0,
1677 160, 158, 168, 151, 152, 159, 162, 164, 156, 152,
1678 161, 165, 0, 163, 152, 160, 166, 167, 163, 159,
1679
1680 152, 152, 161, 166, 162, 161, 169, 152, 167, 164,
1681 165, 152, 170, 168, 164, 171, 152, 165, 165, 174,
1682 172, 152, 170, 166, 167, 173, 175, 152, 152, 176,
1683 177, 173, 169, 169, 0, 178, 180, 165, 172, 0,
1684 179, 0, 0, 170, 181, 182, 171, 172, 175, 170,
1685 174, 181, 173, 175, 179, 178, 184, 180, 186, 183,
1686 176, 177, 178, 180, 183, 185, 182, 179, 189, 187,
1687 188, 181, 182, 190, 192, 184, 194, 188, 190, 185,
1688 186, 187, 193, 184, 195, 186, 183, 196, 200, 193,
1689 189, 201, 185, 191, 191, 189, 187, 188, 197, 198,
1690
1691 190, 194, 191, 194, 195, 192, 197, 199, 203, 193,
1692 200, 195, 205, 202, 198, 206, 204, 208, 196, 200,
1693 191, 191, 201, 203, 204, 197, 198, 207, 211, 209,
1694 202, 205, 214, 199, 199, 203, 210, 200, 202, 205,
1695 202, 209, 212, 204, 212, 210, 206, 211, 208, 207,
1696 213, 223, 216, 218, 207, 211, 209, 202, 214, 214,
1697 217, 219, 0, 210, 218, 220, 222, 221, 224, 212,
1698 225, 227, 0, 219, 213, 0, 226, 213, 216, 216,
1699 218, 224, 223, 232, 222, 235, 217, 217, 219, 220,
1700 221, 229, 220, 222, 221, 224, 225, 225, 226, 228,
1701
1702 229, 230, 227, 226, 234, 231, 228, 230, 235, 232,
1703 232, 233, 235, 234, 236, 237, 238, 0, 229, 231,
1704 0, 239, 240, 236, 241, 242, 228, 241, 230, 245,
1705 237, 234, 231, 243, 241, 233, 244, 240, 233, 243,
1706 248, 236, 237, 242, 245, 239, 254, 238, 239, 240,
1707 244, 241, 242, 250, 241, 0, 245, 246, 246, 249,
1708 243, 251, 249, 244, 248, 250, 255, 248, 254, 249,
1709 259, 256, 252, 254, 257, 260, 258, 259, 262, 251,
1710 250, 0, 246, 256, 246, 246, 249, 261, 251, 249,
1711 252, 258, 255, 255, 261, 264, 257, 259, 256, 252,
1712
1713 262, 257, 263, 258, 263, 262, 260, 265, 264, 266,
1714 265, 267, 265, 268, 261, 282, 269, 273, 265, 0,
1715 271, 270, 264, 0, 269, 272, 263, 266, 270, 263,
1716 269, 263, 271, 273, 265, 268, 266, 265, 272, 265,
1717 268, 273, 267, 269, 273, 274, 282, 271, 270, 276,
1718 277, 269, 272, 278, 279, 280, 0, 281, 274, 278,
1719 273, 276, 279, 287, 281, 283, 285, 280, 277, 283,
1720 0, 290, 274, 275, 275, 0, 276, 277, 285, 286,
1721 278, 279, 280, 275, 281, 275, 275, 275, 284, 288,
1722 275, 286, 283, 285, 287, 284, 288, 291, 275, 292,
1723
1724 275, 275, 290, 298, 294, 289, 286, 0, 291, 307,
1725 275, 294, 275, 275, 275, 284, 288, 275, 289, 293,
1726 293, 292, 295, 296, 291, 297, 292, 300, 298, 301,
1727 298, 294, 289, 295, 296, 299, 300, 0, 297, 303,
1728 307, 304, 301, 306, 305, 308, 302, 0, 293, 295,
1729 296, 308, 297, 309, 300, 310, 301, 303, 299, 302,
1730 0, 306, 299, 304, 302, 311, 303, 305, 304, 313,
1731 306, 305, 308, 302, 309, 312, 315, 314, 310, 316,
1732 309, 317, 310, 313, 0, 316, 302, 319, 0, 320,
1733 318, 311, 311, 0, 322, 328, 313, 312, 321, 317,
1734
1735 322, 323, 312, 314, 314, 318, 316, 315, 317, 325,
1736 319, 327, 326, 328, 319, 320, 320, 318, 326, 329,
1737 321, 322, 328, 335, 332, 321, 329, 323, 323, 330,
1738 327, 332, 334, 333, 336, 325, 325, 373, 327, 326,
1739 333, 337, 339, 338, 330, 334, 329, 342, 340, 343,
1740 341, 332, 336, 342, 335, 341, 330, 340, 345, 334,
1741 333, 336, 338, 337, 373, 353, 344, 356, 337, 356,
1742 338, 346, 343, 339, 342, 340, 343, 341, 344, 347,
1743 345, 349, 346, 350, 351, 345, 0, 347, 349, 353,
1744 352, 350, 353, 344, 356, 351, 354, 358, 346, 352,
1745
1746 0, 355, 359, 354, 357, 0, 347, 348, 349, 358,
1747 350, 351, 348, 360, 348, 362, 368, 359, 0, 364,
1748 362, 352, 348, 354, 358, 360, 352, 355, 355, 359,
1749 357, 357, 348, 348, 348, 361, 363, 364, 366, 348,
1750 360, 348, 362, 361, 365, 367, 364, 368, 370, 348,
1751 366, 369, 365, 371, 372, 374, 0, 370, 363, 348,
1752 376, 375, 361, 363, 384, 366, 369, 371, 367, 378,
1753 374, 365, 367, 372, 377, 370, 375, 381, 369, 380,
1754 371, 372, 374, 380, 376, 382, 377, 376, 375, 379,
1755 383, 381, 379, 378, 385, 384, 378, 386, 387, 388,
1756
1757 379, 377, 391, 389, 381, 388, 0, 394, 390, 392,
1758 380, 0, 382, 395, 394, 393, 379, 383, 396, 379,
1759 0, 385, 403, 400, 386, 389, 388, 0, 397, 387,
1760 389, 390, 392, 391, 394, 390, 392, 393, 398, 399,
1761 396, 397, 393, 398, 395, 396, 402, 398, 399, 400,
1762 400, 401, 405, 403, 404, 397, 0, 0, 407, 402,
1763 401, 406, 398, 408, 409, 398, 399, 0, 412, 414,
1764 398, 410, 404, 402, 398, 419, 405, 408, 401, 405,
1765 407, 404, 410, 406, 406, 407, 409, 411, 406, 416,
1766 408, 409, 413, 414, 415, 417, 414, 0, 410, 412,
1767
1768 421, 420, 411, 422, 417, 423, 419, 418, 0, 423,
1769 406, 416, 424, 413, 411, 425, 416, 426, 415, 413,
1770 418, 415, 417, 420, 421, 422, 424, 421, 420, 425,
1771 422, 427, 428, 429, 418, 430, 423, 429, 431, 424,
1772 0, 432, 425, 433, 434, 440, 431, 428, 426, 427,
1773 436, 438, 433, 434, 440, 435, 428, 436, 427, 428,
1774 430, 437, 430, 435, 429, 431, 432, 439, 432, 438,
1775 433, 434, 440, 441, 428, 442, 445, 436, 438, 439,
1776 447, 443, 435, 444, 437, 441, 446, 449, 437, 443,
1777 448, 444, 0, 450, 439, 452, 447, 451, 449, 453,
1778
1779 441, 450, 445, 445, 468, 454, 442, 447, 443, 446,
1780 444, 451, 448, 446, 449, 452, 455, 448, 456, 457,
1781 450, 453, 452, 459, 451, 454, 453, 458, 457, 460,
1782 461, 462, 454, 464, 0, 468, 463, 0, 455, 464,
1783 456, 459, 460, 455, 466, 456, 457, 458, 472, 469,
1784 459, 470, 461, 465, 458, 462, 460, 461, 462, 463,
1785 464, 465, 466, 463, 471, 473, 470, 472, 474, 0,
1786 474, 466, 469, 471, 473, 472, 469, 477, 470, 465,
1787 465, 483, 485, 486, 480, 484, 0, 0, 465, 477,
1788 492, 471, 473, 488, 480, 474, 475, 0, 489, 483,
1789
1790 475, 508, 491, 475, 477, 485, 484, 489, 483, 485,
1791 475, 480, 484, 475, 486, 488, 493, 492, 475, 490,
1792 488, 490, 494, 475, 496, 489, 491, 475, 508, 491,
1793 475, 0, 0, 495, 497, 0, 493, 475, 498, 0,
1794 475, 487, 487, 493, 487, 495, 490, 487, 494, 494,
1795 496, 496, 487, 499, 503, 500, 497, 501, 487, 487,
1796 495, 497, 498, 500, 501, 498, 504, 487, 487, 487,
1797 502, 487, 507, 503, 487, 499, 505, 509, 502, 487,
1798 499, 503, 500, 511, 501, 487, 487, 506, 505, 510,
1799 512, 516, 504, 504, 507, 515, 506, 502, 0, 507,
1800
1801 513, 518, 514, 505, 515, 517, 519, 511, 509, 518,
1802 511, 512, 520, 516, 506, 521, 522, 512, 516, 513,
1803 510, 514, 515, 524, 522, 517, 525, 513, 518, 514,
1804 526, 520, 517, 519, 527, 0, 528, 529, 533, 520,
1805 0, 524, 0, 522, 525, 0, 521, 527, 530, 529,
1806 524, 0, 532, 525, 526, 539, 530, 526, 532, 535,
1807 533, 527, 528, 528, 529, 533, 535, 534, 545, 536,
1808 537, 538, 530, 534, 536, 530, 540, 537, 539, 532,
1809 541, 542, 539, 530, 544, 540, 535, 543, 541, 538,
1810 548, 547, 549, 550, 534, 545, 536, 537, 538, 542,
1811
1812 543, 556, 546, 540, 547, 544, 553, 541, 542, 546,
1813 555, 544, 552, 554, 543, 558, 550, 551, 547, 554,
1814 550, 548, 557, 549, 558, 551, 560, 552, 553, 546,
1815 0, 559, 556, 553, 561, 562, 555, 555, 563, 552,
1816 554, 561, 558, 564, 551, 559, 557, 567, 565, 557,
1817 567, 566, 572, 568, 571, 564, 569, 560, 559, 566,
1818 574, 561, 562, 569, 572, 563, 568, 573, 0, 573,
1819 564, 565, 574, 575, 567, 565, 576, 571, 566, 572,
1820 568, 571, 578, 569, 570, 577, 570, 574, 581, 576,
1821 570, 0, 570, 583, 573, 575, 580, 570, 577, 583,
1822
1823 575, 582, 570, 576, 579, 578, 580, 586, 570, 578,
1824 581, 570, 577, 570, 582, 581, 579, 570, 580, 570,
1825 583, 584, 585, 580, 570, 587, 588, 590, 582, 570,
1826 587, 579, 587, 580, 584, 592, 589, 0, 586, 596,
1827 590, 588, 593, 585, 597, 591, 594, 596, 584, 585,
1828 587, 587, 587, 588, 590, 595, 598, 587, 589, 587,
1829 591, 592, 592, 589, 593, 594, 596, 600, 595, 593,
1830 601, 597, 591, 594, 603, 604, 602, 587, 605, 598,
1831 607, 606, 595, 598, 602, 609, 608, 610, 603, 606,
1832 614, 607, 611, 609, 601, 619, 624, 601, 600, 611,
1833
1834 605, 603, 612, 602, 608, 605, 604, 607, 606, 610,
1835 613, 617, 609, 608, 610, 612, 616, 619, 618, 611,
1836 617, 614, 619, 622, 616, 620, 621, 624, 613, 612,
1837 618, 623, 625, 0, 0, 627, 629, 613, 617, 627,
1838 641, 622, 630, 616, 0, 618, 625, 620, 621, 631,
1839 622, 628, 620, 621, 628, 630, 631, 623, 623, 625,
1840 629, 632, 634, 629, 633, 636, 627, 641, 635, 630,
1841 0, 633, 637, 632, 635, 638, 631, 628, 628, 639,
1842 640, 628, 642, 0, 643, 0, 634, 636, 632, 634,
1843 639, 633, 636, 643, 637, 635, 638, 644, 649, 637,
1844
1845 642, 640, 638, 645, 648, 646, 639, 640, 647, 642,
1846 652, 643, 645, 646, 650, 647, 653, 654, 648, 652,
1847 649, 644, 656, 655, 644, 649, 657, 658, 659, 0,
1848 645, 648, 646, 654, 660, 647, 650, 652, 655, 658,
1849 653, 650, 660, 653, 654, 661, 665, 662, 666, 673,
1850 655, 664, 674, 656, 658, 659, 666, 657, 661, 671,
1851 664, 660, 662, 667, 665, 667, 670, 675, 677, 672,
1852 676, 671, 661, 665, 662, 666, 672, 679, 664, 670,
1853 673, 677, 0, 674, 684, 678, 671, 0, 680, 675,
1854 667, 682, 676, 670, 675, 677, 672, 676, 678, 679,
1855
1856 680, 681, 683, 682, 679, 685, 686, 0, 688, 681,
1857 683, 684, 678, 687, 685, 680, 689, 690, 682, 695,
1858 687, 692, 693, 691, 694, 0, 0, 686, 681, 683,
1859 697, 693, 685, 686, 688, 688, 691, 690, 689, 696,
1860 687, 695, 694, 689, 690, 692, 695, 696, 692, 693,
1861 691, 694, 697, 698, 699, 700, 701, 697, 702, 703,
1862 704, 698, 710, 705, 709, 707, 696, 708, 701, 710,
1863 702, 705, 706, 700, 707, 704, 709, 699, 706, 703,
1864 698, 699, 700, 701, 711, 702, 703, 704, 708, 710,
1865 705, 709, 707, 713, 708, 714, 715, 0, 716, 706,
1866
1867 0, 718, 711, 719, 717, 716, 720, 719, 714, 721,
1868 724, 711, 723, 722, 720, 715, 718, 725, 0, 728,
1869 726, 733, 714, 715, 713, 716, 717, 722, 718, 727,
1870 723, 717, 729, 720, 719, 721, 721, 734, 730, 723,
1871 722, 724, 726, 725, 725, 728, 728, 726, 731, 732,
1872 729, 727, 733, 0, 739, 735, 727, 736, 732, 729,
1873 730, 731, 738, 0, 741, 730, 742, 745, 734, 0,
1874 739, 745, 0, 746, 743, 731, 732, 735, 742, 744,
1875 736, 739, 735, 743, 736, 737, 746, 741, 738, 738,
1876 737, 741, 737, 742, 737, 748, 737, 744, 745, 747,
1877
1878 746, 743, 749, 737, 750, 752, 744, 747, 751, 754,
1879 751, 757, 737, 750, 748, 749, 753, 737, 756, 737,
1880 0, 737, 748, 737, 759, 761, 747, 760, 753, 749,
1881 763, 750, 752, 757, 760, 751, 754, 762, 757, 758,
1882 765, 764, 756, 753, 766, 756, 769, 758, 764, 768,
1883 767, 759, 761, 770, 760, 769, 773, 763, 771, 762,
1884 774, 775, 765, 766, 762, 776, 758, 765, 764, 783,
1885 0, 766, 767, 769, 770, 768, 768, 767, 771, 777,
1886 770, 778, 779, 775, 780, 771, 781, 773, 775, 778,
1887 782, 774, 786, 781, 782, 785, 776, 777, 779, 784,
1888
1889 783, 787, 785, 788, 0, 784, 777, 786, 778, 779,
1890 787, 780, 784, 781, 789, 791, 790, 782, 790, 786,
1891 0, 789, 785, 792, 791, 794, 784, 793, 787, 788,
1892 788, 793, 784, 796, 799, 797, 798, 796, 800, 801,
1893 0, 789, 791, 790, 802, 792, 0, 794, 0, 804,
1894 792, 800, 794, 797, 793, 798, 803, 804, 807, 799,
1895 0, 799, 797, 798, 796, 800, 806, 802, 805, 805,
1896 801, 802, 803, 808, 809, 806, 804, 811, 813, 810,
1897 807, 809, 808, 803, 812, 807, 811, 814, 817, 816,
1898 819, 813, 812, 806, 820, 805, 815, 816, 818, 814,
1899
1900 808, 809, 810, 820, 811, 813, 810, 822, 815, 821,
1901 817, 812, 819, 825, 814, 817, 816, 819, 818, 822,
1902 823, 820, 824, 815, 826, 818, 827, 821, 824, 831,
1903 0, 0, 828, 832, 822, 825, 821, 829, 834, 833,
1904 825, 823, 832, 837, 835, 838, 836, 823, 842, 824,
1905 836, 834, 835, 838, 839, 826, 831, 827, 828, 828,
1906 832, 833, 839, 829, 829, 834, 833, 840, 840, 842,
1907 837, 835, 838, 843, 841, 842, 844, 836, 845, 846,
1908 847, 839, 841, 848, 844, 849, 845, 846, 847, 851,
1909 850, 849, 0, 853, 840, 852, 848, 856, 0, 854,
1910
1911 855, 841, 850, 844, 843, 845, 846, 847, 853, 862,
1912 848, 856, 849, 857, 858, 851, 851, 850, 866, 852,
1913 853, 854, 852, 855, 856, 859, 854, 855, 858, 859,
1914 861, 857, 863, 870, 868, 864, 862, 861, 865, 874,
1915 857, 858, 859, 868, 871, 865, 872, 876, 878, 866,
1916 859, 880, 859, 879, 863, 870, 859, 861, 864, 863,
1917 870, 868, 864, 880, 884, 865, 874, 883, 885, 859,
1918 871, 871, 878, 882, 876, 878, 884, 872, 880, 879,
1919 879, 881, 888, 881, 887, 886, 882, 888, 889, 883,
1920 890, 884, 886, 891, 883, 885, 892, 894, 0, 896,
1921
1922 882, 891, 0, 895, 889, 897, 894, 898, 881, 888,
1923 887, 887, 886, 890, 898, 889, 895, 890, 892, 900,
1924 891, 899, 901, 892, 894, 896, 896, 897, 899, 901,
1925 895, 902, 897, 903, 898, 904, 905, 900, 906, 916,
1926 907, 908, 0, 905, 909, 0, 900, 911, 899, 901,
1927 911, 912, 914, 907, 0, 903, 902, 913, 902, 914,
1928 903, 915, 918, 905, 915, 909, 904, 907, 908, 906,
1929 916, 909, 913, 917, 911, 919, 915, 912, 912, 914,
1930 918, 920, 921, 920, 913, 915, 922, 923, 915, 918,
1931 928, 915, 924, 927, 0, 917, 925, 919, 926, 931,
1932
1933 917, 924, 919, 915, 925, 926, 921, 929, 920, 921,
1934 930, 929, 952, 923, 923, 927, 932, 922, 933, 924,
1935 927, 928, 934, 925, 935, 926, 931, 933, 936, 934,
1936 938, 935, 930, 937, 929, 939, 0, 930, 932, 952,
1937 940, 936, 945, 932, 938, 933, 941, 940, 937, 934,
1938 942, 935, 943, 941, 947, 936, 946, 938, 943, 949,
1939 937, 953, 948, 942, 945, 948, 939, 940, 946, 945,
1940 949, 954, 956, 941, 947, 960, 955, 942, 959, 943,
1941 948, 947, 961, 946, 962, 953, 949, 955, 953, 948,
1942 956, 962, 948, 954, 957, 965, 959, 958, 954, 956,
1943
1944 958, 964, 957, 955, 963, 959, 960, 969, 965, 961,
1945 964, 962, 966, 973, 967, 958, 969, 968, 963, 968,
1946 970, 957, 965, 966, 958, 971, 0, 958, 964, 967,
1947 972, 963, 0, 0, 969, 973, 971, 974, 0, 966,
1948 973, 967, 975, 978, 968, 975, 970, 970, 972, 976,
1949 979, 974, 971, 980, 981, 982, 983, 972, 976, 979,
1950 975, 985, 982, 974, 974, 984, 989, 985, 992, 975,
1951 988, 0, 975, 0, 978, 981, 976, 979, 974, 984,
1952 989, 981, 982, 991, 980, 985, 990, 983, 985, 988,
1953 993, 991, 984, 989, 985, 990, 994, 988, 997, 992,
1954
1955 996, 993, 998, 0, 999, 994, 1000, 996, 1003, 1004,
1956 991, 1002, 1001, 990, 1006, 1002, 1010, 993, 0, 1005,
1957 1003, 997, 1007, 994, 998, 997, 999, 996, 1000, 998,
1958 1001, 999, 1005, 1000, 1006, 1003, 1004, 1007, 1002, 1001,
1959 1008, 1006, 1009, 1011, 1012, 1013, 1005, 1010, 1014, 1007,
1960 1009, 1016, 1015, 1012, 1019, 1008, 1018, 0, 1011, 0,
1961 1021, 1024, 1020, 1025, 0, 1023, 1013, 1008, 1022, 1009,
1962 1011, 1012, 1013, 1024, 1018, 1014, 1015, 1020, 1016, 1015,
1963 1023, 1019, 1021, 1018, 1026, 1025, 1022, 1021, 1024, 1020,
1964 1025, 1027, 1023, 1028, 1029, 1022, 1030, 1026, 1027, 1033,
1965
1966 0, 1031, 1026, 1034, 1032, 1028, 1033, 1031, 1035, 1036,
1967 1037, 1026, 1032, 1039, 1040, 1035, 1038, 1042, 1027, 1046,
1968 1028, 1029, 1044, 1043, 1026, 1047, 1033, 1030, 1031, 1048,
1969 1034, 1032, 1043, 0, 0, 1035, 1036, 1037, 1040, 1038,
1970 1045, 1040, 1045, 1038, 1039, 1052, 1046, 0, 1042, 0,
1971 1043, 1047, 1047, 1044, 1049, 1049, 1049, 1050, 1051, 1053,
1972 1048, 1049, 1054, 1056, 1050, 1051, 1053, 1045, 1055, 1049,
1973 1057, 1057, 1058, 1059, 1055, 1054, 1052, 1062, 1061, 1063,
1974 1059, 1049, 1049, 1049, 1050, 1051, 1053, 1064, 1049, 1054,
1975 1056, 1063, 1065, 1066, 1066, 1055, 1061, 1057, 1058, 1058,
1976
1977 1059, 1067, 1068, 1068, 1062, 1061, 1063, 1064, 1071, 1072,
1978 1065, 1069, 1074, 1075, 1064, 1076, 1073, 0, 1077, 1065,
1979 1066, 1082, 1069, 1073, 1079, 1078, 1080, 1067, 1067, 1068,
1980 1071, 1083, 1074, 1080, 1086, 1071, 1082, 0, 1069, 1074,
1981 1072, 1081, 1079, 1073, 1075, 1077, 1076, 1078, 1082, 1081,
1982 1084, 1079, 1078, 1080, 1087, 1083, 1085, 1085, 1083, 1084,
1983 1086, 1086, 1088, 1089, 1090, 1092, 1087, 1094, 1081, 1091,
1984 1088, 1097, 1095, 1096, 1098, 1089, 1099, 1084, 1095, 1093,
1985 1099, 1087, 1100, 1085, 1093, 1090, 1096, 1091, 1102, 1088,
1986 1089, 1090, 1092, 1104, 1094, 1093, 1091, 1101, 1101, 1095,
1987
1988 1096, 1098, 1097, 1102, 1103, 1105, 1093, 1099, 1104, 1108,
1989 1106, 1093, 1107, 1100, 1107, 1102, 1109, 1110, 1111, 0,
1990 1104, 1109, 1113, 1115, 1101, 1106, 1114, 1116, 1105, 1117,
1991 1118, 0, 1105, 1111, 1120, 1103, 1117, 1106, 1119, 1107,
1992 1108, 1121, 1123, 1109, 1128, 1111, 1113, 1125, 1110, 1113,
1993 1115, 1118, 1114, 1114, 1116, 1120, 1117, 1118, 1127, 1121,
1994 1119, 1120, 1125, 1129, 1123, 1119, 1130, 1131, 1121, 1123,
1995 1129, 1128, 1132, 1127, 1125, 1133, 1131, 1135, 1134, 1136,
1996 1132, 0, 1139, 1140, 1130, 1127, 1138, 1143, 1148, 1141,
1997 1129, 1139, 1136, 1130, 1131, 0, 1150, 1138, 1133, 1132,
1998
1999 1134, 1140, 1133, 1146, 1147, 1134, 1136, 1141, 1135, 1139,
2000 1140, 1149, 1138, 1138, 1143, 1146, 1141, 1147, 1151, 1148,
2001 1152, 1149, 1150, 1150, 1138, 1155, 1154, 0, 1156, 1158,
2002 1146, 1147, 1155, 1157, 1159, 1158, 1162, 1162, 1149, 0,
2003 0, 1164, 1160, 1151, 1161, 1151, 1154, 1152, 1164, 1159,
2004 1163, 1157, 1155, 1154, 1156, 1156, 1158, 1160, 1165, 1161,
2005 1157, 1159, 1163, 1162, 1167, 1165, 1169, 1168, 1164, 1160,
2006 1170, 1161, 1173, 1175, 1172, 1169, 1177, 1163, 1174, 1174,
2007 1178, 1176, 1180, 1181, 0, 1165, 1167, 1172, 1170, 1180,
2008 1182, 1167, 1168, 1169, 1168, 1175, 1183, 1170, 1177, 1173,
2009
2010 1175, 1172, 1178, 1177, 1179, 1174, 1176, 1178, 1176, 1180,
2011 1183, 1184, 1182, 1179, 1181, 1187, 1186, 1182, 1188, 1192,
2012 1189, 1190, 1191, 1183, 1186, 1195, 1194, 0, 1187, 1191,
2013 1184, 1179, 1193, 1190, 0, 1197, 0, 0, 1184, 1198,
2014 1195, 1199, 1187, 1186, 1214, 1188, 1189, 1189, 1190, 1191,
2015 1192, 1194, 1195, 1194, 1193, 1196, 1199, 1198, 1196, 1193,
2016 1197, 1201, 1197, 1204, 1202, 1205, 1198, 1206, 1199, 1308,
2017 0, 1214, 1205, 1196, 1208, 1210, 1216, 1204, 1206, 1213,
2018 1215, 1211, 1196, 1201, 1221, 1196, 1202, 1212, 1201, 1212,
2019 1204, 1202, 1205, 1211, 1206, 1208, 1210, 1213, 1215, 1218,
2020
2021 1308, 1208, 1210, 1216, 1217, 1219, 1213, 1215, 1211, 1220,
2022 1222, 1221, 1217, 1223, 1212, 1226, 1227, 1228, 0, 1229,
2023 1223, 1231, 1218, 1220, 1230, 1232, 1218, 1219, 1233, 1222,
2024 1231, 1217, 1219, 1235, 1227, 1235, 1220, 1222, 1238, 1230,
2025 1223, 1236, 1226, 1227, 1228, 1229, 1229, 1232, 1231, 1237,
2026 1238, 1230, 1232, 1237, 1242, 1233, 1239, 1240, 1241, 1243,
2027 1235, 1244, 0, 1236, 1247, 1238, 1240, 1245, 1236, 1241,
2028 1246, 1246, 1247, 1244, 1250, 1249, 1237, 1250, 1239, 1249,
2029 0, 1242, 1243, 1239, 1240, 1241, 1243, 1251, 1244, 1245,
2030 1252, 1247, 1253, 1254, 1245, 1251, 1252, 1246, 1256, 1254,
2031
2032 1257, 1250, 1249, 1259, 1258, 0, 1261, 1253, 1260, 1262,
2033 1263, 1264, 1265, 1266, 1251, 1267, 1259, 1252, 1258, 1253,
2034 1254, 1268, 1260, 1264, 1257, 1256, 1265, 1257, 1270, 1271,
2035 1259, 1258, 1261, 1261, 1275, 1260, 1262, 1263, 1264, 1265,
2036 1266, 1269, 1267, 1272, 1274, 1276, 1277, 1282, 1268, 1269,
2037 1278, 1272, 1280, 1276, 1279, 1270, 1271, 1283, 1286, 1278,
2038 1288, 1275, 0, 1281, 0, 1283, 1274, 1288, 1269, 1292,
2039 1272, 1274, 1276, 1277, 1282, 1279, 1280, 1278, 1281, 1280,
2040 1284, 1279, 1289, 1285, 1283, 1286, 1289, 1288, 1290, 1281,
2041 1281, 1285, 1284, 1291, 1293, 1294, 1292, 1295, 1295, 1296,
2042
2043 1290, 1297, 1293, 1298, 1300, 1281, 1300, 1284, 1302, 1289,
2044 1285, 1299, 1303, 1301, 1302, 1290, 1291, 1304, 1298, 1297,
2045 1291, 1293, 1294, 1305, 1295, 1296, 1296, 1301, 1297, 1304,
2046 1298, 1300, 1307, 1299, 1303, 1302, 1306, 1309, 1299, 1303,
2047 1301, 1305, 1311, 1313, 1304, 1307, 1314, 1315, 1316, 1311,
2048 1305, 0, 1321, 1318, 1306, 1324, 1316, 1323, 1319, 1307,
2049 1309, 1313, 1326, 1306, 1309, 1318, 0, 1321, 1328, 1311,
2050 1313, 1330, 1314, 1314, 1316, 1316, 1319, 1324, 1315, 1321,
2051 1318, 1323, 1324, 1316, 1323, 1319, 1325, 1329, 1331, 1326,
2052 1334, 1332, 0, 1325, 1333, 1328, 1336, 1330, 1330, 1338,
2053
2054 1329, 1337, 1333, 1331, 1332, 1339, 0, 1341, 1342, 1345,
2055 1350, 1344, 0, 1325, 1329, 1331, 1334, 1334, 1332, 1336,
2056 1341, 1333, 1340, 1336, 1346, 1337, 1338, 1339, 1337, 1340,
2057 1343, 1342, 1339, 1344, 1341, 1342, 1348, 1343, 1344, 1349,
2058 1345, 1350, 1352, 1351, 1360, 1346, 1355, 1348, 1356, 1340,
2059 1363, 1346, 1364, 1366, 1368, 1369, 0, 1343, 0, 1355,
2060 1374, 1349, 1351, 1348, 1372, 1370, 1349, 1352, 1374, 1352,
2061 1351, 1360, 1363, 1355, 1356, 1356, 1370, 1363, 1371, 1364,
2062 1366, 1369, 1369, 1371, 1375, 1368, 1372, 1374, 1376, 1378,
2063 1379, 1372, 1370, 1380, 0, 1383, 1381, 1385, 0, 1375,
2064
2065 1386, 1387, 1380, 1389, 1388, 1371, 1390, 1378, 1381, 1391,
2066 0, 1375, 0, 0, 1387, 1376, 1378, 1392, 1397, 1385,
2067 1380, 1379, 1383, 1381, 1385, 1386, 1388, 1386, 1387, 1393,
2068 1389, 1388, 1392, 1390, 1394, 1395, 1391, 1396, 1393, 1398,
2069 1397, 1399, 1400, 1403, 1392, 1397, 1398, 1401, 1401, 1394,
2070 1395, 1402, 1396, 0, 1405, 0, 1393, 1403, 1402, 1410,
2071 1400, 1394, 1395, 1408, 1396, 1409, 1398, 1405, 1399, 1400,
2072 1403, 1406, 1404, 1411, 1401, 1404, 1414, 1407, 1402, 1415,
2073 1406, 1405, 1407, 1414, 1416, 1408, 1410, 1409, 1415, 1416,
2074 1408, 1418, 1409, 1421, 1417, 1419, 1420, 1423, 1406, 1404,
2075
2076 1411, 1417, 1419, 1414, 1407, 1420, 1415, 1424, 1425, 1418,
2077 1431, 1416, 1432, 0, 1426, 0, 1476, 0, 1418, 1421,
2078 1421, 1417, 1419, 1420, 1423, 1424, 1426, 1427, 1425, 1428,
2079 1433, 1429, 1430, 1434, 1424, 1425, 1427, 1431, 1428, 1433,
2080 1430, 1426, 1429, 1432, 1435, 1434, 1436, 1476, 1437, 1444,
2081 1443, 1445, 1435, 1439, 1427, 1437, 1428, 1433, 1429, 1430,
2082 1434, 1439, 1442, 1445, 1447, 1448, 1452, 1451, 1436, 1442,
2083 1446, 1435, 1450, 1436, 1443, 1437, 1444, 1443, 1445, 1446,
2084 1439, 1453, 1455, 1457, 1450, 1458, 0, 1462, 1448, 1442,
2085 1451, 1447, 1448, 1452, 1451, 1453, 1456, 1446, 1463, 1450,
2086
2087 1464, 0, 1465, 1463, 1456, 1470, 1466, 1467, 1453, 1455,
2088 1457, 1468, 1458, 1462, 1462, 1467, 0, 1470, 1464, 1471,
2089 1472, 1474, 1475, 1456, 1465, 1463, 1478, 1464, 1466, 1465,
2090 1468, 1473, 1470, 1466, 1467, 1477, 1479, 1482, 1468, 1484,
2091 0, 1471, 1472, 1473, 1483, 0, 1471, 1472, 1474, 1475,
2092 1488, 1485, 1486, 1478, 1487, 1489, 1491, 1477, 1473, 0,
2093 0, 1484, 1477, 1479, 1486, 1492, 1484, 1483, 1482, 1485,
2094 1489, 1483, 1488, 1487, 1492, 1493, 1494, 1488, 1485, 1486,
2095 1491, 1487, 1489, 1491, 1496, 1499, 1495, 1497, 1500, 1493,
2096 1501, 1502, 1492, 1499, 1494, 1500, 1505, 1506, 1501, 1503,
2097
2098 1507, 1504, 1493, 1494, 1495, 1497, 1512, 1503, 0, 1518,
2099 1496, 1496, 1499, 1495, 1497, 1500, 1506, 1501, 1502, 1504,
2100 1509, 1510, 1507, 1505, 1506, 1514, 1503, 1507, 1504, 1512,
2101 1513, 0, 1516, 1512, 1521, 1510, 1518, 1514, 1509, 1522,
2102 1523, 1521, 1524, 1513, 1525, 1526, 1527, 1509, 1510, 1528,
2103 1529, 1530, 1514, 1534, 1535, 1527, 1531, 1513, 1516, 1516,
2104 0, 1521, 1528, 0, 1523, 1522, 1522, 1523, 1539, 1524,
2105 1541, 1525, 1526, 1527, 1534, 1540, 1528, 1541, 1530, 1531,
2106 1534, 1529, 1543, 1531, 1540, 1535, 1538, 1538, 1542, 1545,
2107 1539, 1544, 1546, 0, 1547, 1539, 1538, 1541, 1548, 1544,
2108
2109 1546, 1542, 1540, 1551, 1550, 1553, 1549, 0, 1545, 1543,
2110 1551, 1552, 1552, 1538, 1538, 1542, 1545, 1549, 1544, 1546,
2111 1547, 1547, 1554, 1553, 1548, 1548, 1550, 1555, 1557, 1554,
2112 1551, 1550, 1553, 1549, 1555, 1558, 1560, 1561, 1552, 1563,
2113 1564, 1565, 1562, 1567, 1566, 1560, 1571, 0, 1571, 1554,
2114 1575, 0, 1564, 1576, 1555, 1557, 1569, 1563, 1566, 1558,
2115 1570, 1567, 1558, 1560, 1561, 1562, 1563, 1564, 1565, 1562,
2116 1567, 1566, 1575, 1571, 1569, 1570, 1577, 1575, 1579, 1576,
2117 1576, 1580, 1581, 1569, 1582, 1583, 1584, 1570, 1585, 1581,
2118 1582, 1586, 0, 1586, 1577, 1584, 1587, 1591, 1589, 1580,
2119
2120 1579, 0, 1590, 1577, 1592, 1579, 1589, 1583, 1580, 1581,
2121 1593, 1582, 1583, 1584, 1590, 1594, 1596, 1597, 1586, 1585,
2122 1598, 1598, 1595, 1587, 1591, 1589, 1594, 1592, 1593, 1590,
2123 1595, 1592, 1599, 1600, 1602, 1596, 1603, 1593, 1605, 1597,
2124 1609, 1600, 1594, 1596, 1597, 1606, 1607, 1598, 1611, 1595,
2125 1607, 1610, 1606, 1611, 1612, 1613, 1615, 1617, 1603, 1599,
2126 1600, 1602, 1614, 1603, 1610, 1605, 1609, 1609, 1620, 1616,
2127 1614, 1615, 1606, 1607, 1622, 1611, 1616, 1618, 1610, 1619,
2128 1621, 1612, 1613, 1615, 1617, 1624, 1619, 1626, 1621, 1614,
2129 1620, 1627, 1618, 1623, 1623, 1620, 1616, 1629, 1630, 1627,
2130
2131 1631, 1632, 1633, 1623, 1618, 1622, 1619, 1621, 1634, 1635,
2132 1637, 1630, 1624, 1639, 1626, 1641, 1643, 1642, 1627, 1629,
2133 1623, 1623, 1631, 1644, 1629, 1630, 1645, 1631, 1632, 1633,
2134 1642, 1635, 1648, 1649, 1643, 1634, 1635, 1637, 1654, 1639,
2135 1639, 1650, 1641, 1643, 1642, 1652, 1653, 1654, 1645, 1658,
2136 1644, 1648, 0, 1645, 1662, 1655, 1657, 1661, 1663, 1648,
2137 1649, 1653, 1657, 1650, 1661, 1654, 1655, 1652, 1650, 1656,
2138 1656, 1658, 1652, 1653, 1668, 1664, 1658, 1670, 1672, 1656,
2139 1673, 1662, 1655, 1657, 1661, 1663, 1675, 1676, 1679, 1680,
2140 1681, 0, 1681, 1673, 1678, 1687, 1656, 1656, 1664, 1676,
2141
2142 1670, 1668, 1664, 1678, 1670, 1672, 1682, 1673, 1684, 1685,
2143 1690, 1692, 1686, 1675, 1676, 1679, 1680, 1681, 1682, 1683,
2144 1686, 1678, 1687, 1694, 1703, 1683, 1696, 1700, 1697, 1701,
2145 1684, 1685, 1703, 1682, 1704, 1684, 1685, 1690, 1692, 1686,
2146 1702, 1696, 1701, 1704, 1713, 1710, 1683, 1718, 1705, 1712,
2147 1694, 1703, 1713, 1696, 1697, 1697, 1701, 1711, 1700, 1705,
2148 1714, 1704, 1702, 1712, 1711, 1719, 1715, 1702, 1710, 1714,
2149 1717, 1713, 1710, 1720, 1718, 1705, 1712, 1715, 1716, 1721,
2150 1716, 1724, 1717, 1719, 1711, 1729, 1722, 1714, 1722, 1730,
2151 1723, 1725, 1719, 1715, 0, 1720, 1727, 1717, 1731, 1728,
2152
2153 1720, 1721, 1723, 0, 1725, 1716, 1721, 1728, 1727, 1739,
2154 1732, 1731, 1724, 1722, 1733, 1734, 1729, 1723, 1725, 1735,
2155 1730, 1736, 1733, 1727, 1732, 1731, 1728, 1735, 1734, 1737,
2156 1738, 1739, 1740, 1747, 1742, 1736, 1739, 1732, 1738, 1741,
2157 1743, 1733, 1734, 1737, 0, 0, 1735, 1741, 1736, 1744,
2158 1745, 1748, 0, 1749, 1740, 1746, 1737, 1738, 1752, 1740,
2159 1742, 1742, 1743, 1746, 1747, 0, 1741, 1743, 1756, 0,
2160 1760, 1744, 1745, 1749, 1754, 1750, 1744, 1745, 1748, 1751,
2161 1749, 1761, 1746, 1750, 1753, 1757, 1758, 1751, 1754, 1752,
2162 1756, 1759, 1753, 1757, 1758, 1756, 1760, 1760, 1763, 1762,
2163
2164 1765, 1754, 1750, 1761, 1764, 1759, 1751, 1762, 1761, 1766,
2165 1768, 1753, 1757, 1758, 1769, 1767, 1772, 0, 1759, 1770,
2166 1771, 0, 1765, 1767, 1763, 1763, 1762, 1765, 1771, 1766,
2167 1764, 1764, 1773, 1775, 1769, 1776, 1766, 1768, 1772, 1770,
2168 1773, 1769, 1767, 1772, 1777, 1778, 1770, 1771, 1779, 1783,
2169 1780, 1785, 1777, 1778, 1782, 1775, 1781, 1776, 1780, 1773,
2170 1775, 1786, 1776, 0, 1781, 1784, 1787, 1789, 1792, 1795,
2171 1796, 1777, 1778, 0, 1779, 1779, 1783, 1780, 1785, 1793,
2172 1782, 1782, 0, 1781, 0, 1784, 1787, 1793, 1786, 1789,
2173 1792, 1794, 1784, 1787, 1789, 1792, 1795, 1796, 0, 1794,
2174
2175 0, 0, 0, 0, 0, 0, 1793, 0, 0, 0,
2176 0, 0, 0, 0, 0, 0, 0, 0, 1794, 1800,
2177 1800, 1800, 1800, 1800, 1800, 1800, 1801, 1801, 1801, 1801,
2178 1801, 1801, 1801, 1802, 1802, 1802, 1802, 1802, 1802, 1802,
2179 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1804, 1804, 1804,
2180 1804, 1804, 1804, 1804, 1806, 1806, 0, 1806, 1806, 1806,
2181 1806, 1807, 1807, 0, 0, 0, 1807, 1807, 1808, 1808,
2182 0, 0, 1808, 0, 1808, 1809, 0, 0, 0, 0,
2183 0, 1809, 1810, 1810, 0, 0, 0, 1810, 1810, 1811,
2184 0, 0, 0, 0, 0, 1811, 1812, 1812, 0, 1812,
2185
2186 1812, 1812, 1812, 1813, 1813, 0, 1813, 1813, 1813, 1813,
2187 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
2188 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
2189 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
2190 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
2191 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
2192 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
2193 1799, 1799, 1799, 1799, 1799, 1799
1691 72, 78, 72, 69, 80, 81, 86, 72, 87, 82,
1692 82, 81, 84, 85, 78, 87, 64, 80, 82, 86,
1693 84, 91, 14, 219, 13, 78, 81, 0, 78, 117,
1694 85, 80, 81, 86, 72, 87, 82, 82, 81, 84,
1695 88, 78, 89, 91, 85, 92, 95, 93, 91, 88,
1696 93, 89, 219, 99, 95, 97, 96, 85, 92, 97,
1697 117, 100, 98, 93, 93, 98, 99, 88, 0, 89,
1698
1699 107, 93, 92, 95, 93, 101, 96, 93, 96, 97,
1700 99, 103, 97, 96, 100, 102, 97, 105, 100, 98,
1701 93, 93, 104, 107, 105, 101, 106, 107, 108, 102,
1702 109, 103, 101, 96, 109, 106, 104, 108, 103, 110,
1703 0, 111, 102, 112, 105, 113, 110, 116, 114, 104,
1704 112, 119, 109, 106, 115, 108, 116, 109, 118, 113,
1705 114, 109, 115, 122, 124, 121, 110, 111, 111, 122,
1706 112, 119, 113, 118, 116, 114, 121, 119, 119, 120,
1707 123, 115, 125, 0, 126, 118, 124, 0, 120, 0,
1708 122, 124, 121, 126, 0, 142, 0, 125, 119, 0,
1709
1710 140, 123, 0, 141, 0, 123, 120, 123, 0, 125,
1711 132, 126, 132, 132, 137, 132, 137, 137, 138, 137,
1712 138, 138, 143, 138, 140, 141, 142, 140, 123, 144,
1713 141, 145, 146, 147, 143, 148, 149, 0, 156, 145,
1714 147, 149, 150, 152, 146, 151, 156, 0, 144, 143,
1715 155, 0, 153, 148, 0, 138, 144, 157, 145, 146,
1716 147, 160, 148, 159, 150, 156, 158, 149, 149, 150,
1717 158, 151, 151, 153, 152, 162, 155, 155, 161, 157,
1718 153, 165, 163, 160, 157, 163, 159, 162, 160, 164,
1719 159, 161, 166, 158, 167, 0, 169, 163, 164, 167,
1720
1721 153, 154, 162, 165, 170, 161, 154, 169, 165, 163,
1722 171, 154, 163, 167, 166, 168, 164, 154, 154, 166,
1723 167, 167, 168, 169, 154, 173, 167, 176, 154, 172,
1724 174, 178, 177, 154, 179, 170, 171, 171, 154, 172,
1725 167, 175, 168, 180, 154, 154, 182, 175, 174, 0,
1726 181, 184, 0, 194, 177, 0, 173, 174, 176, 177,
1727 172, 186, 178, 180, 181, 179, 172, 182, 175, 183,
1728 180, 187, 184, 182, 185, 188, 183, 181, 184, 185,
1729 186, 189, 190, 191, 194, 187, 192, 196, 186, 190,
1730 201, 192, 195, 189, 193, 193, 183, 188, 187, 195,
1731
1732 197, 185, 188, 193, 198, 191, 202, 199, 189, 190,
1733 191, 200, 196, 192, 196, 199, 201, 201, 203, 195,
1734 197, 193, 193, 204, 205, 206, 200, 197, 202, 0,
1735 208, 209, 210, 206, 199, 198, 0, 202, 200, 205,
1736 204, 207, 211, 214, 213, 227, 218, 212, 204, 203,
1737 204, 205, 206, 209, 211, 202, 212, 213, 209, 216,
1738 207, 208, 214, 210, 215, 217, 215, 204, 207, 211,
1739 214, 213, 218, 218, 212, 220, 227, 221, 222, 0,
1740 0, 223, 224, 216, 225, 231, 216, 228, 230, 222,
1741 217, 215, 217, 223, 226, 0, 229, 243, 0, 0,
1742
1743 228, 220, 220, 221, 221, 222, 224, 225, 223, 224,
1744 230, 225, 226, 232, 228, 230, 231, 233, 234, 235,
1745 232, 226, 229, 229, 234, 236, 233, 238, 243, 237,
1746 240, 247, 239, 235, 241, 242, 238, 0, 0, 240,
1747 232, 244, 265, 241, 233, 234, 235, 0, 245, 247,
1748 242, 236, 236, 237, 238, 239, 237, 240, 247, 239,
1749 248, 241, 242, 245, 246, 244, 248, 246, 244, 249,
1750 250, 253, 255, 265, 246, 245, 251, 251, 254, 258,
1751 0, 254, 256, 249, 255, 250, 0, 248, 254, 257,
1752 259, 246, 260, 262, 246, 253, 249, 250, 253, 255,
1753
1754 256, 251, 261, 251, 251, 254, 258, 257, 254, 256,
1755 263, 267, 259, 269, 261, 262, 257, 259, 260, 260,
1756 262, 264, 268, 266, 268, 263, 269, 271, 264, 261,
1757 266, 270, 0, 267, 270, 272, 270, 263, 267, 0,
1758 269, 0, 270, 273, 276, 271, 268, 287, 264, 268,
1759 266, 268, 281, 275, 271, 277, 276, 0, 270, 274,
1760 275, 270, 279, 270, 281, 273, 272, 274, 277, 278,
1761 273, 276, 282, 274, 286, 279, 284, 283, 287, 281,
1762 275, 286, 277, 283, 284, 278, 274, 0, 285, 279,
1763 282, 288, 0, 278, 274, 288, 278, 291, 0, 282,
1764
1765 285, 286, 289, 284, 283, 290, 293, 295, 292, 289,
1766 0, 297, 278, 280, 280, 285, 306, 290, 288, 291,
1767 292, 294, 295, 280, 291, 280, 280, 280, 294, 289,
1768 280, 296, 290, 299, 295, 292, 298, 293, 280, 306,
1769 280, 280, 297, 306, 296, 300, 300, 298, 294, 301,
1770 280, 302, 280, 280, 280, 299, 301, 280, 296, 303,
1771 299, 310, 302, 298, 304, 305, 307, 308, 314, 309,
1772 303, 313, 0, 311, 300, 307, 301, 304, 302, 310,
1773 308, 312, 309, 317, 316, 318, 303, 309, 310, 313,
1774 305, 304, 305, 307, 308, 311, 309, 315, 313, 314,
1775
1776 311, 319, 321, 315, 312, 316, 317, 318, 312, 309,
1777 317, 316, 318, 320, 323, 322, 321, 324, 0, 325,
1778 327, 326, 0, 324, 315, 328, 0, 319, 319, 321,
1779 331, 329, 330, 0, 333, 320, 326, 325, 330, 0,
1780 320, 322, 322, 327, 324, 323, 325, 327, 326, 334,
1781 335, 328, 328, 329, 336, 334, 331, 331, 329, 330,
1782 333, 333, 342, 337, 338, 343, 340, 341, 344, 335,
1783 337, 347, 336, 340, 341, 342, 334, 335, 345, 338,
1784 346, 336, 349, 348, 353, 351, 344, 349, 0, 342,
1785 337, 338, 348, 340, 341, 344, 343, 350, 0, 346,
1786
1787 345, 352, 347, 350, 354, 345, 353, 346, 351, 349,
1788 348, 353, 351, 352, 355, 354, 357, 358, 359, 364,
1789 0, 364, 355, 357, 350, 358, 361, 360, 352, 359,
1790 0, 354, 362, 0, 363, 370, 360, 0, 365, 362,
1791 370, 355, 356, 357, 358, 359, 364, 356, 369, 356,
1792 361, 371, 0, 361, 366, 367, 369, 356, 360, 362,
1793 363, 363, 370, 360, 365, 365, 366, 356, 356, 356,
1794 367, 368, 372, 371, 356, 369, 356, 373, 371, 374,
1795 375, 366, 367, 368, 356, 373, 376, 377, 378, 380,
1796 372, 374, 381, 383, 356, 379, 382, 378, 368, 372,
1797
1798 386, 385, 377, 375, 373, 384, 374, 375, 380, 379,
1799 388, 382, 386, 387, 377, 378, 380, 376, 389, 381,
1800 384, 389, 379, 382, 383, 385, 390, 386, 385, 389,
1801 390, 392, 384, 391, 388, 387, 393, 388, 394, 395,
1802 387, 396, 397, 398, 400, 389, 0, 391, 389, 398,
1803 399, 401, 402, 405, 403, 0, 0, 390, 392, 0,
1804 391, 406, 0, 393, 0, 0, 395, 400, 396, 394,
1805 398, 400, 399, 397, 407, 402, 403, 399, 404, 402,
1806 409, 403, 401, 406, 405, 404, 408, 407, 406, 409,
1807 410, 408, 412, 411, 414, 408, 413, 415, 0, 418,
1808
1809 0, 407, 411, 416, 0, 404, 417, 409, 0, 413,
1810 408, 423, 420, 408, 412, 415, 410, 410, 408, 412,
1811 411, 418, 408, 413, 415, 414, 418, 416, 417, 417,
1812 416, 419, 421, 417, 420, 422, 424, 425, 430, 420,
1813 428, 426, 423, 421, 427, 419, 0, 429, 431, 428,
1814 422, 433, 432, 437, 0, 417, 0, 424, 419, 421,
1815 429, 425, 422, 424, 425, 426, 427, 428, 426, 430,
1816 431, 427, 435, 433, 429, 431, 432, 434, 433, 432,
1817 436, 434, 438, 442, 437, 440, 435, 439, 441, 440,
1818 453, 442, 443, 446, 436, 444, 445, 0, 0, 435,
1819
1820 438, 446, 439, 448, 444, 445, 449, 436, 434, 438,
1821 442, 439, 0, 441, 439, 441, 440, 443, 447, 443,
1822 446, 453, 444, 445, 449, 447, 448, 450, 451, 439,
1823 448, 452, 454, 449, 455, 0, 456, 451, 460, 450,
1824 454, 457, 455, 452, 458, 447, 0, 459, 461, 460,
1825 463, 464, 462, 0, 450, 451, 461, 0, 452, 454,
1826 458, 455, 456, 456, 457, 460, 462, 465, 457, 459,
1827 463, 458, 468, 464, 459, 461, 466, 463, 464, 462,
1828 467, 468, 470, 471, 469, 0, 472, 465, 473, 475,
1829 479, 474, 0, 476, 465, 475, 471, 0, 466, 468,
1830
1831 470, 476, 467, 466, 469, 477, 481, 467, 472, 470,
1832 471, 469, 473, 472, 474, 473, 475, 480, 474, 476,
1833 476, 479, 482, 477, 480, 483, 484, 485, 476, 481,
1834 499, 486, 477, 481, 483, 490, 487, 482, 487, 0,
1835 486, 0, 496, 493, 480, 497, 485, 490, 523, 482,
1836 498, 0, 483, 493, 485, 0, 505, 484, 486, 0,
1837 496, 499, 490, 487, 488, 501, 497, 502, 488, 496,
1838 493, 488, 497, 498, 507, 504, 502, 498, 488, 523,
1839 503, 488, 503, 505, 506, 0, 488, 501, 0, 0,
1840 509, 488, 501, 0, 502, 488, 513, 510, 488, 504,
1841
1842 507, 507, 504, 512, 506, 488, 508, 503, 488, 500,
1843 500, 506, 500, 0, 511, 500, 509, 509, 508, 510,
1844 500, 513, 515, 513, 510, 512, 500, 500, 0, 515,
1845 512, 517, 514, 508, 518, 500, 500, 500, 511, 500,
1846 514, 511, 500, 516, 519, 521, 520, 500, 522, 515,
1847 517, 516, 524, 500, 500, 520, 519, 525, 517, 514,
1848 518, 518, 0, 527, 526, 529, 530, 521, 528, 531,
1849 516, 519, 521, 520, 529, 522, 533, 535, 532, 534,
1850 540, 525, 527, 524, 525, 526, 532, 528, 530, 531,
1851 527, 526, 529, 530, 536, 528, 531, 538, 534, 539,
1852
1853 541, 0, 536, 533, 540, 532, 534, 540, 535, 542,
1854 543, 547, 546, 541, 0, 538, 549, 539, 546, 548,
1855 544, 536, 543, 549, 538, 548, 539, 541, 544, 550,
1856 553, 552, 555, 547, 550, 542, 542, 543, 547, 546,
1857 555, 551, 554, 549, 544, 556, 548, 544, 551, 552,
1858 558, 554, 557, 553, 559, 544, 550, 553, 552, 555,
1859 560, 561, 562, 556, 563, 557, 0, 560, 551, 554,
1860 565, 558, 556, 564, 561, 566, 567, 558, 565, 557,
1861 568, 559, 569, 570, 574, 572, 568, 560, 561, 571,
1862 566, 573, 575, 562, 572, 563, 564, 565, 567, 575,
1863
1864 564, 576, 566, 567, 577, 573, 579, 568, 569, 569,
1865 578, 582, 572, 571, 570, 574, 571, 580, 573, 575,
1866 581, 0, 578, 581, 582, 580, 585, 583, 576, 579,
1867 0, 577, 592, 579, 583, 586, 0, 578, 582, 587,
1868 588, 0, 588, 591, 580, 592, 0, 581, 589, 0,
1869 602, 587, 585, 585, 583, 584, 593, 584, 586, 592,
1870 590, 584, 586, 584, 595, 591, 587, 588, 584, 593,
1871 591, 589, 590, 584, 594, 589, 595, 597, 0, 584,
1872 598, 602, 584, 593, 584, 601, 596, 590, 584, 600,
1873 584, 595, 599, 598, 604, 584, 596, 594, 599, 597,
1874
1875 584, 594, 600, 605, 597, 606, 601, 598, 596, 604,
1876 603, 607, 601, 596, 608, 603, 600, 603, 606, 599,
1877 610, 604, 613, 596, 609, 605, 607, 614, 616, 0,
1878 605, 617, 606, 620, 619, 603, 603, 603, 607, 610,
1879 608, 608, 603, 611, 603, 612, 609, 610, 619, 613,
1880 614, 609, 618, 612, 614, 617, 611, 622, 617, 616,
1881 618, 619, 603, 621, 620, 622, 624, 626, 623, 625,
1882 611, 631, 612, 628, 630, 626, 627, 624, 629, 618,
1883 628, 633, 636, 641, 622, 621, 623, 625, 634, 633,
1884 621, 629, 630, 624, 626, 623, 625, 634, 627, 635,
1885
1886 628, 630, 631, 627, 636, 629, 637, 638, 633, 636,
1887 640, 635, 639, 642, 641, 634, 644, 0, 645, 646,
1888 644, 645, 647, 0, 648, 650, 635, 642, 637, 638,
1889 639, 648, 650, 637, 638, 647, 640, 640, 649, 639,
1890 642, 653, 651, 646, 645, 645, 646, 644, 645, 647,
1891 649, 648, 650, 652, 654, 658, 655, 657, 660, 652,
1892 656, 659, 661, 653, 662, 649, 651, 660, 653, 651,
1893 0, 656, 0, 662, 666, 667, 654, 655, 657, 659,
1894 652, 654, 658, 655, 657, 660, 661, 656, 659, 661,
1895 663, 662, 664, 665, 669, 671, 666, 667, 663, 664,
1896
1897 670, 666, 667, 669, 675, 673, 674, 665, 672, 0,
1898 0, 671, 676, 0, 679, 678, 675, 663, 677, 664,
1899 665, 669, 671, 672, 670, 681, 677, 670, 678, 679,
1900 682, 675, 683, 690, 681, 672, 673, 674, 687, 676,
1901 683, 679, 678, 688, 684, 677, 684, 689, 682, 691,
1902 692, 687, 681, 0, 689, 688, 693, 682, 0, 683,
1903 694, 698, 695, 696, 690, 687, 699, 697, 701, 698,
1904 688, 684, 692, 694, 689, 695, 701, 692, 693, 697,
1905 691, 702, 705, 693, 700, 696, 699, 694, 698, 695,
1906 696, 703, 704, 699, 697, 701, 700, 707, 706, 708,
1907
1908 709, 704, 710, 705, 703, 706, 711, 712, 702, 705,
1909 713, 700, 0, 714, 715, 710, 712, 716, 703, 704,
1910 709, 708, 715, 707, 707, 706, 708, 709, 713, 710,
1911 711, 718, 719, 711, 712, 714, 720, 713, 717, 716,
1912 714, 715, 722, 721, 716, 723, 717, 725, 720, 724,
1913 719, 732, 726, 725, 718, 721, 727, 724, 718, 719,
1914 723, 726, 722, 720, 729, 717, 728, 730, 733, 722,
1915 721, 729, 723, 734, 725, 736, 724, 727, 728, 726,
1916 735, 733, 732, 727, 737, 730, 738, 735, 739, 742,
1917 738, 729, 734, 728, 730, 733, 739, 736, 741, 737,
1918
1919 734, 740, 736, 742, 743, 744, 745, 735, 746, 0,
1920 753, 737, 747, 751, 740, 739, 742, 738, 748, 749,
1921 750, 754, 743, 0, 741, 741, 751, 755, 740, 752,
1922 746, 743, 745, 745, 747, 746, 744, 749, 752, 747,
1923 751, 753, 750, 756, 748, 748, 749, 750, 758, 755,
1924 762, 0, 754, 0, 755, 0, 752, 759, 761, 763,
1925 765, 764, 762, 770, 765, 0, 756, 771, 763, 771,
1926 756, 757, 770, 759, 758, 758, 757, 762, 757, 764,
1927 757, 761, 757, 766, 759, 761, 763, 767, 764, 757,
1928 770, 765, 768, 769, 771, 767, 766, 772, 757, 774,
1929
1930 773, 776, 779, 757, 781, 757, 769, 757, 777, 757,
1931 766, 768, 773, 778, 767, 780, 782, 783, 0, 768,
1932 769, 778, 780, 785, 772, 776, 774, 773, 776, 779,
1933 777, 781, 784, 786, 787, 777, 788, 789, 782, 784,
1934 778, 793, 780, 782, 783, 785, 789, 790, 794, 791,
1935 785, 795, 786, 796, 799, 800, 787, 803, 798, 784,
1936 786, 787, 788, 788, 789, 797, 798, 802, 790, 791,
1937 799, 802, 793, 795, 790, 0, 791, 808, 795, 794,
1938 801, 799, 800, 797, 796, 798, 805, 801, 803, 804,
1939 806, 807, 797, 805, 802, 804, 810, 812, 810, 809,
1940
1941 807, 811, 804, 808, 808, 806, 809, 801, 813, 815,
1942 811, 814, 817, 805, 819, 814, 804, 806, 807, 812,
1943 817, 818, 804, 810, 812, 818, 809, 820, 811, 822,
1944 821, 815, 819, 823, 825, 813, 815, 0, 814, 817,
1945 824, 819, 822, 826, 827, 827, 820, 829, 0, 828,
1946 825, 826, 818, 830, 820, 821, 822, 821, 828, 831,
1947 832, 825, 830, 824, 823, 834, 831, 824, 833, 829,
1948 826, 827, 835, 834, 829, 839, 828, 833, 836, 837,
1949 830, 838, 843, 832, 840, 835, 831, 832, 841, 838,
1950 836, 837, 834, 845, 842, 833, 848, 839, 850, 835,
1951
1952 843, 844, 839, 842, 840, 836, 837, 847, 838, 843,
1953 841, 840, 846, 844, 845, 841, 849, 851, 846, 853,
1954 845, 842, 854, 855, 850, 850, 856, 848, 844, 847,
1955 0, 859, 855, 858, 847, 859, 860, 866, 857, 846,
1956 860, 858, 0, 851, 851, 854, 853, 849, 856, 854,
1957 855, 857, 865, 856, 0, 861, 862, 863, 863, 873,
1958 858, 864, 859, 861, 862, 857, 867, 860, 866, 864,
1959 868, 873, 869, 865, 867, 872, 871, 870, 868, 865,
1960 869, 872, 861, 862, 863, 870, 873, 874, 864, 871,
1961 876, 875, 0, 867, 877, 879, 878, 868, 881, 869,
1962
1963 884, 885, 872, 871, 870, 876, 880, 884, 887, 879,
1964 886, 889, 881, 874, 874, 875, 877, 876, 875, 878,
1965 0, 877, 879, 878, 880, 881, 882, 884, 885, 888,
1966 882, 887, 886, 880, 0, 887, 888, 886, 891, 893,
1967 895, 894, 889, 882, 0, 897, 899, 891, 0, 902,
1968 901, 882, 903, 882, 0, 0, 888, 882, 904, 906,
1969 904, 893, 908, 0, 903, 891, 893, 894, 894, 905,
1970 882, 895, 897, 899, 901, 902, 902, 901, 907, 903,
1971 909, 906, 905, 910, 912, 904, 906, 909, 911, 908,
1972 907, 913, 917, 911, 914, 915, 905, 919, 920, 918,
1973
1974 912, 917, 914, 0, 0, 907, 921, 909, 926, 910,
1975 910, 912, 918, 921, 913, 911, 925, 915, 913, 917,
1976 920, 914, 915, 919, 919, 920, 918, 922, 923, 924,
1977 926, 927, 928, 921, 922, 926, 924, 929, 931, 928,
1978 932, 925, 933, 925, 936, 934, 923, 936, 937, 938,
1979 933, 931, 941, 939, 922, 923, 924, 942, 940, 928,
1980 939, 940, 927, 943, 938, 931, 934, 932, 929, 933,
1981 944, 936, 934, 940, 937, 937, 938, 946, 947, 942,
1982 939, 943, 940, 941, 942, 940, 948, 945, 940, 945,
1983 943, 950, 944, 949, 952, 953, 951, 944, 956, 950,
1984
1985 940, 946, 949, 951, 946, 955, 954, 957, 958, 947,
1986 954, 0, 948, 948, 945, 959, 952, 958, 950, 0,
1987 949, 952, 959, 951, 960, 956, 953, 955, 961, 957,
1988 962, 960, 955, 954, 957, 958, 963, 964, 968, 965,
1989 966, 961, 959, 967, 968, 962, 965, 966, 970, 971,
1990 963, 960, 972, 973, 977, 961, 967, 962, 975, 974,
1991 979, 977, 974, 963, 972, 968, 965, 966, 964, 975,
1992 967, 971, 980, 973, 983, 970, 971, 974, 981, 972,
1993 973, 977, 982, 984, 986, 975, 974, 979, 987, 974,
1994 988, 984, 983, 982, 985, 992, 980, 985, 991, 980,
1995
1996 981, 983, 986, 993, 990, 981, 989, 991, 992, 982,
1997 984, 986, 985, 989, 993, 997, 998, 988, 990, 987,
1998 994, 985, 992, 996, 985, 991, 995, 998, 995, 1000,
1999 993, 990, 996, 989, 999, 994, 0, 1003, 1005, 1007,
2000 1001, 997, 997, 998, 1008, 1002, 1003, 994, 1002, 1006,
2001 996, 1000, 999, 995, 1001, 1009, 1000, 1010, 1006, 1011,
2002 1015, 999, 1009, 1002, 1003, 1008, 1001, 1001, 1012, 1005,
2003 1007, 1008, 1002, 1011, 1012, 1002, 1006, 1016, 1019, 1015,
2004 1017, 1001, 1009, 1020, 1025, 1018, 1011, 1015, 1010, 1017,
2005 1021, 1016, 1012, 1018, 1020, 1012, 1023, 1024, 1028, 1021,
2006
2007 1026, 1012, 1031, 1023, 1016, 0, 1025, 1017, 1027, 1019,
2008 1020, 1025, 1018, 1032, 1029, 0, 1028, 1021, 1029, 1030,
2009 1024, 1037, 1026, 1023, 1024, 1028, 1032, 1026, 1033, 1031,
2010 1027, 1030, 1034, 1039, 1035, 1027, 1036, 1040, 1038, 1041,
2011 1032, 1029, 1039, 1042, 1036, 1043, 1030, 1034, 1033, 1035,
2012 1046, 1045, 1037, 1038, 1047, 1033, 1048, 1049, 1040, 1034,
2013 1039, 1035, 1050, 1036, 1040, 1038, 1041, 1042, 1046, 1053,
2014 1042, 1048, 1043, 1045, 1052, 1051, 1056, 1046, 1045, 1049,
2015 1050, 1047, 1054, 1048, 1049, 1055, 1052, 1057, 1056, 1050,
2016 1051, 1053, 1055, 1058, 1062, 1054, 1053, 1067, 1059, 1060,
2017
2018 1054, 1052, 1051, 1056, 1059, 1064, 1061, 1060, 1063, 1054,
2019 1065, 1066, 1055, 1061, 1057, 1063, 1068, 1070, 1071, 1072,
2020 1074, 1062, 1054, 1076, 1058, 1059, 1060, 1071, 1067, 1073,
2021 1080, 1073, 1064, 1061, 1066, 1063, 1075, 1065, 1066, 0,
2022 1068, 1085, 1078, 1068, 0, 1071, 1083, 1074, 1070, 1078,
2023 1072, 1077, 1077, 1077, 1076, 1087, 1073, 1079, 1077, 1083,
2024 1081, 1080, 1075, 1075, 1079, 1084, 1077, 1081, 1085, 1078,
2025 1088, 1084, 1089, 1083, 1086, 1086, 1091, 1088, 1077, 1077,
2026 1077, 1087, 1087, 1092, 1079, 1077, 1094, 1081, 1093, 1095,
2027 1096, 1096, 1084, 1097, 1091, 1098, 1098, 1088, 1089, 1089,
2028
2029 1093, 1086, 1101, 1091, 1102, 1104, 1094, 1095, 0, 1105,
2030 1092, 1103, 1099, 1094, 1106, 1093, 1095, 1096, 1103, 1097,
2031 1097, 1107, 1098, 1099, 1101, 1104, 1109, 1108, 1111, 1101,
2032 1110, 1112, 1104, 1114, 0, 1102, 1111, 1110, 1103, 1099,
2033 1105, 1113, 1114, 1116, 1109, 1106, 1112, 1117, 1107, 1108,
2034 1115, 1115, 1122, 1109, 1108, 1111, 1118, 1110, 1112, 1117,
2035 1114, 1119, 1121, 1120, 1118, 1113, 1123, 1124, 1113, 1116,
2036 1116, 1123, 1125, 1119, 1117, 1127, 1128, 1115, 1125, 1122,
2037 1121, 1129, 1123, 1118, 1120, 1129, 1130, 1126, 1119, 1121,
2038 1120, 1131, 1131, 1123, 1124, 1132, 1133, 1135, 1123, 1125,
2039
2040 1126, 1134, 1138, 1128, 1136, 1137, 1127, 1137, 1139, 1140,
2041 1132, 1141, 1129, 1139, 1126, 1143, 1134, 1130, 1131, 1136,
2042 1135, 1144, 1132, 1145, 1135, 1146, 1141, 1133, 1134, 1147,
2043 1148, 1136, 1137, 1138, 1150, 1139, 1147, 1149, 1141, 1143,
2044 1140, 1153, 1143, 1155, 1151, 1156, 1159, 1144, 1144, 0,
2045 1145, 1148, 1146, 1164, 1158, 1150, 1147, 1148, 1160, 1149,
2046 1156, 1150, 1151, 1153, 1149, 1160, 1161, 1155, 1153, 1158,
2047 1155, 1151, 1156, 1159, 1162, 1165, 1164, 1166, 1163, 1167,
2048 1164, 1158, 1170, 1162, 1161, 1160, 1163, 1169, 1174, 1171,
2049 1178, 1170, 1167, 1161, 1172, 1183, 1179, 1165, 1169, 1177,
2050
2051 0, 1162, 1165, 1178, 1181, 1163, 1167, 1171, 1166, 1170,
2052 1180, 1177, 1172, 1169, 1169, 1174, 1171, 1178, 1182, 1185,
2053 1180, 1172, 1183, 1187, 1188, 1169, 1177, 1179, 1186, 1190,
2054 1181, 1181, 1189, 1191, 0, 1186, 0, 1180, 1189, 1185,
2055 1193, 1193, 1188, 1182, 1190, 1182, 1185, 1192, 1191, 1187,
2056 1187, 1188, 1194, 1198, 1195, 1186, 1190, 1199, 1196, 1189,
2057 1191, 1195, 1192, 1200, 1194, 1196, 1201, 1193, 1205, 1202,
2058 1204, 1213, 1200, 0, 1192, 1198, 1206, 1206, 1207, 1194,
2059 1198, 1195, 1199, 1204, 1199, 1196, 1201, 1202, 1208, 1209,
2060 1200, 1216, 1210, 1201, 1212, 1205, 1202, 1204, 1211, 1224,
2061
2062 1207, 1212, 1213, 1206, 1214, 1207, 1215, 1211, 0, 1218,
2063 1216, 1209, 1220, 1208, 1210, 1208, 1209, 1218, 1216, 1210,
2064 1215, 1212, 1219, 0, 1221, 1211, 1214, 1223, 1222, 1227,
2065 1224, 1214, 0, 1215, 1223, 1219, 1218, 1225, 1226, 1220,
2066 1222, 1229, 1228, 1230, 1227, 1228, 1243, 1231, 0, 1219,
2067 1221, 1221, 0, 1233, 1223, 1222, 1227, 1234, 1243, 1225,
2068 1228, 1230, 1231, 1226, 1225, 1226, 1229, 1236, 1229, 1228,
2069 1230, 1237, 1228, 1243, 1231, 1233, 1238, 0, 1237, 1234,
2070 1233, 1236, 1245, 1240, 1234, 1242, 1244, 1238, 1244, 1246,
2071 1247, 1248, 1250, 1249, 1236, 1253, 0, 1252, 1237, 1251,
2072
2073 1245, 1249, 1258, 1238, 1240, 1260, 1242, 1259, 1247, 1245,
2074 1240, 1252, 1242, 1244, 1254, 1250, 1246, 1247, 1248, 1250,
2075 1249, 1251, 1253, 1255, 1252, 1259, 1251, 1261, 1262, 1258,
2076 1255, 1263, 1260, 1254, 1259, 1264, 1266, 1265, 1269, 0,
2077 1263, 1254, 1268, 1262, 1268, 1270, 1274, 1275, 1272, 1270,
2078 1255, 0, 1273, 1261, 1261, 1262, 1271, 1274, 1263, 1265,
2079 1269, 1273, 1276, 1266, 1265, 1269, 1264, 0, 1271, 1268,
2080 1272, 1278, 1270, 1274, 1275, 1272, 1277, 1279, 1279, 1273,
2081 1282, 1286, 1280, 1271, 1282, 1276, 1285, 1284, 1277, 1276,
2082 1280, 1283, 1285, 1278, 1283, 1284, 1286, 1289, 1278, 1287,
2083
2084 1295, 1290, 1291, 1277, 1279, 1287, 1292, 1282, 1286, 1280,
2085 1294, 1296, 1299, 1285, 1284, 1300, 1291, 1293, 1283, 1292,
2086 1297, 1298, 1301, 1303, 1289, 1290, 1287, 1295, 1290, 1291,
2087 1304, 1293, 1297, 1292, 1305, 1298, 1294, 1294, 1296, 1299,
2088 1308, 1309, 1300, 1302, 1293, 1306, 1310, 1297, 1298, 1301,
2089 1303, 1302, 1311, 1306, 1310, 1312, 1313, 1304, 0, 1315,
2090 1314, 1305, 1308, 1316, 1312, 1320, 1318, 1308, 1309, 1322,
2091 1302, 1323, 1306, 1310, 1315, 1323, 1322, 1313, 1318, 1311,
2092 1317, 1319, 1312, 1313, 1314, 1315, 1315, 1314, 1317, 1319,
2093 1316, 1324, 1320, 1318, 1325, 1326, 1322, 1327, 1323, 1328,
2094
2095 1332, 1315, 1330, 1324, 1334, 1327, 1334, 1317, 1319, 1329,
2096 1329, 1333, 1331, 1336, 1339, 1332, 0, 1325, 1324, 1336,
2097 1335, 1325, 1326, 1337, 1327, 1338, 1328, 1332, 1330, 1330,
2098 1331, 1334, 1339, 1333, 1335, 1340, 1329, 1338, 1333, 1331,
2099 1336, 1339, 1341, 1342, 1343, 1337, 1347, 1335, 1349, 1345,
2100 1337, 1348, 1338, 1340, 1352, 1341, 1345, 1350, 1357, 0,
2101 1355, 0, 1340, 1359, 1347, 1350, 1352, 1343, 1353, 1341,
2102 1359, 1343, 1358, 1347, 1342, 1355, 1345, 1348, 1348, 1349,
2103 1361, 1352, 1357, 1350, 1350, 1357, 1353, 1355, 1360, 1363,
2104 1359, 1364, 1350, 1365, 1358, 1353, 1366, 1367, 1368, 1358,
2105
2106 1369, 0, 1373, 1360, 1364, 1371, 1368, 1361, 1374, 1372,
2107 1367, 1366, 1380, 0, 1375, 1360, 1363, 0, 1364, 1365,
2108 1365, 1375, 1377, 1366, 1367, 1368, 1369, 1369, 1371, 1373,
2109 1374, 1376, 1371, 1372, 1379, 1374, 1372, 1383, 1381, 1378,
2110 1384, 1375, 1385, 1380, 1376, 1377, 1378, 1387, 1383, 1377,
2111 1386, 0, 1391, 1395, 1399, 1390, 1379, 1400, 1376, 1381,
2112 1402, 1379, 1384, 1404, 1383, 1381, 1378, 1384, 1390, 1386,
2113 1405, 1408, 1387, 1385, 1387, 1406, 1399, 1386, 1391, 1391,
2114 1395, 1399, 1390, 1407, 1400, 1411, 1406, 1402, 1407, 1412,
2115 1414, 1410, 1415, 1408, 1404, 1416, 1405, 1405, 1408, 1410,
2116
2117 1411, 1417, 1406, 1419, 1416, 1421, 1422, 1423, 1414, 0,
2118 1407, 1425, 1411, 1417, 1424, 1426, 1412, 1414, 1410, 1427,
2119 1423, 1435, 1416, 1415, 1428, 1430, 1429, 1421, 1417, 1431,
2120 1419, 1422, 1421, 1422, 1423, 1429, 1424, 1433, 1425, 1428,
2121 1430, 1424, 1426, 1432, 1431, 1436, 1427, 1434, 1435, 1437,
2122 1437, 1428, 1430, 1429, 1434, 1438, 1431, 1439, 1432, 1433,
2123 1441, 1446, 1438, 1436, 1433, 1440, 1442, 1444, 1440, 1445,
2124 1432, 1439, 1436, 1441, 1434, 1442, 1437, 1447, 1443, 0,
2125 1448, 0, 1438, 1443, 1439, 1458, 1452, 1441, 1446, 1444,
2126 1451, 1445, 1440, 1442, 1444, 1452, 1445, 1451, 1453, 1460,
2127
2128 1455, 1454, 1456, 1453, 1447, 1443, 1448, 1448, 1454, 1456,
2129 1457, 1458, 1458, 1452, 1461, 1462, 1467, 1451, 1455, 1457,
2130 1468, 1463, 1464, 1466, 1467, 1453, 1460, 1455, 1454, 1456,
2131 1465, 1464, 1461, 1463, 1466, 1462, 1469, 1457, 1473, 1465,
2132 0, 1461, 1462, 1467, 1470, 1474, 1471, 1468, 1463, 1464,
2133 1466, 1472, 1474, 1470, 1476, 1480, 1479, 1465, 1471, 1472,
2134 1473, 1481, 1476, 1479, 1482, 1473, 1483, 1469, 1484, 1485,
2135 1489, 1470, 1474, 1471, 1487, 1483, 1482, 1488, 1472, 1480,
2136 1490, 1476, 1480, 1479, 1492, 1494, 1487, 1495, 1481, 1499,
2137 1493, 1482, 1485, 1483, 1490, 1484, 1485, 1489, 1493, 1502,
2138
2139 1488, 1487, 1501, 1500, 1488, 1503, 1505, 1490, 1500, 0,
2140 1504, 1492, 1494, 1508, 1495, 1499, 1499, 1493, 1504, 1507,
2141 1501, 1502, 1509, 1511, 1510, 1505, 1502, 1503, 1512, 1501,
2142 1500, 1507, 1503, 1505, 1513, 1508, 1510, 1504, 0, 1514,
2143 1508, 1515, 1516, 1519, 1509, 1520, 1507, 0, 1521, 1509,
2144 1511, 1510, 1522, 0, 1523, 1512, 1529, 1519, 0, 1525,
2145 1526, 1514, 1527, 0, 0, 1513, 1514, 0, 1515, 1516,
2146 1519, 1521, 1523, 1524, 1522, 1521, 1520, 1527, 1525, 1522,
2147 1529, 1523, 1526, 1529, 1530, 1524, 1525, 1526, 1531, 1527,
2148 1532, 1533, 1535, 1530, 1534, 1537, 1540, 1538, 1539, 1541,
2149
2150 1524, 1543, 1531, 1537, 1538, 0, 1539, 1541, 1532, 1533,
2151 1535, 1530, 1542, 1544, 1545, 1531, 1547, 1532, 1533, 1535,
2152 1534, 1534, 1537, 1540, 1538, 1539, 1541, 1550, 1543, 1551,
2153 1542, 1548, 1544, 1554, 1547, 1552, 1545, 1556, 1562, 1542,
2154 1544, 1545, 1551, 1547, 1559, 1548, 1560, 1552, 1563, 0,
2155 1550, 1559, 1561, 1564, 1550, 1566, 1551, 1565, 1548, 1554,
2156 1554, 1567, 1552, 1568, 1556, 1562, 1565, 1572, 1566, 1573,
2157 1569, 1559, 1560, 1560, 1576, 1563, 1561, 1577, 1577, 1561,
2158 1564, 1578, 1566, 1582, 1565, 1586, 1579, 1577, 1572, 1581,
2159 1568, 1580, 1567, 1569, 1572, 1579, 1576, 1569, 1580, 1583,
2160
2161 1573, 1576, 1581, 1578, 1577, 1577, 1584, 1583, 1578, 1585,
2162 1582, 1586, 1586, 1579, 1587, 1589, 1581, 1585, 1580, 1588,
2163 1590, 1591, 1591, 1596, 1600, 1584, 1583, 1590, 1593, 1597,
2164 1588, 1592, 1594, 1584, 1599, 1593, 1585, 1589, 1604, 1594,
2165 1587, 1587, 1589, 1599, 1601, 1602, 1588, 1590, 1591, 1592,
2166 1596, 1600, 1603, 1597, 1605, 1593, 1597, 1606, 1592, 1594,
2167 1608, 1599, 1609, 1602, 1603, 1604, 1614, 1601, 1605, 1615,
2168 1618, 1601, 1602, 1616, 1610, 1606, 1610, 1609, 1608, 1603,
2169 1619, 1605, 1621, 1620, 1606, 1627, 1625, 1608, 1614, 1609,
2170 1620, 1616, 1618, 1614, 1623, 1615, 1615, 1618, 1619, 1622,
2171
2172 1616, 1610, 1624, 1630, 1626, 1622, 1626, 1619, 1631, 1632,
2173 1620, 1624, 1627, 1621, 1629, 1630, 1623, 1625, 1637, 1633,
2174 1635, 1623, 1629, 1634, 1636, 1639, 1622, 1642, 1635, 1624,
2175 1630, 1626, 1632, 1643, 1634, 1631, 1632, 1633, 1638, 1638,
2176 1637, 1629, 1645, 1636, 1649, 1637, 1633, 1635, 1640, 1647,
2177 1634, 1636, 1639, 1647, 1642, 1643, 1640, 1646, 1651, 1650,
2178 1643, 1652, 1653, 1651, 1646, 1638, 1654, 1655, 1657, 1645,
2179 1649, 1649, 1650, 1656, 1654, 1640, 1647, 1658, 1660, 1661,
2180 1656, 1663, 1655, 1659, 1646, 1651, 1650, 1665, 1652, 1653,
2181 1659, 1662, 1658, 1654, 1655, 1657, 1667, 1664, 1664, 1662,
2182
2183 1656, 1661, 1660, 1668, 1658, 1660, 1661, 1664, 1671, 1670,
2184 1659, 1668, 1663, 1673, 1665, 1672, 1674, 1675, 1662, 1676,
2185 1678, 1671, 1680, 1667, 1664, 1664, 1682, 1685, 1686, 1690,
2186 1668, 1670, 1683, 1684, 0, 1671, 1670, 1672, 1689, 1691,
2187 1673, 1676, 1672, 1674, 1675, 1683, 1676, 1678, 1680, 1680,
2188 1686, 1684, 1693, 1682, 1685, 1686, 1690, 1689, 1694, 1683,
2189 1684, 1691, 1695, 1696, 1697, 1689, 1691, 1698, 1698, 1704,
2190 1699, 1700, 1696, 1694, 1693, 1697, 1699, 1698, 1705, 1693,
2191 1703, 1695, 1710, 1706, 0, 1694, 1714, 1703, 1712, 1695,
2192 1696, 1697, 1717, 1700, 1698, 1698, 1704, 1699, 1700, 1715,
2193
2194 1721, 1722, 1718, 1723, 0, 1705, 1706, 1703, 1720, 1710,
2195 1706, 1712, 1715, 1714, 1718, 1712, 1724, 1720, 1724, 1717,
2196 1725, 1730, 1727, 1728, 1733, 1723, 1715, 1721, 1722, 1718,
2197 1723, 1726, 1725, 1729, 1735, 1720, 1737, 1726, 1739, 0,
2198 1740, 1729, 1745, 1724, 1727, 1728, 1743, 1725, 1730, 1727,
2199 1728, 1733, 1744, 1739, 1746, 1745, 0, 1754, 1726, 1748,
2200 1729, 1735, 0, 1737, 1747, 1739, 1740, 1740, 1748, 1745,
2201 1743, 1749, 1747, 1743, 1756, 1757, 1746, 1763, 1755, 1758,
2202 1754, 1746, 1749, 1744, 1754, 1755, 1748, 1758, 1759, 1757,
2203 1756, 1747, 1760, 1761, 1764, 1761, 1762, 1759, 1749, 1765,
2204
2205 1766, 1756, 1757, 1760, 1763, 1755, 1758, 1767, 1762, 1768,
2206 1770, 1768, 1764, 1769, 1776, 1759, 1773, 1771, 1777, 1760,
2207 1761, 1764, 1766, 1762, 1775, 1769, 1765, 1766, 1773, 1767,
2208 1771, 1780, 1775, 1778, 1767, 1781, 1768, 1786, 1779, 1780,
2209 1769, 1770, 1782, 1773, 1771, 1776, 1778, 1783, 1781, 1777,
2210 1782, 1775, 1779, 1784, 1787, 1785, 1794, 1789, 1780, 1786,
2211 1778, 1783, 1781, 1785, 1786, 1779, 1790, 1784, 1791, 1782,
2212 1788, 1793, 1792, 1795, 1783, 1799, 1787, 0, 1788, 1793,
2213 1784, 1787, 1785, 1789, 1789, 1796, 1803, 1794, 1790, 1801,
2214 1791, 0, 0, 1790, 1792, 1791, 1797, 1788, 1793, 1792,
2215
2216 1795, 1798, 1800, 1801, 1797, 1796, 1799, 1804, 1803, 1798,
2217 1800, 1805, 1796, 1803, 1807, 1804, 1801, 1806, 1809, 1805,
2218 1808, 0, 1810, 1797, 1811, 0, 1809, 1814, 1798, 1800,
2219 1812, 1806, 1815, 1813, 1804, 1814, 1816, 0, 1805, 0,
2220 1807, 1807, 1808, 1819, 1806, 1809, 1817, 1808, 1810, 1810,
2221 1811, 1811, 1812, 1813, 1814, 1822, 1816, 1812, 1823, 1815,
2222 1813, 1818, 1830, 1816, 1820, 1819, 1817, 1824, 1825, 1818,
2223 1819, 1826, 1820, 1817, 1829, 1824, 1825, 1822, 1827, 1828,
2224 1823, 1832, 1822, 1831, 1833, 1823, 1827, 1828, 1818, 1830,
2225 0, 1820, 1834, 1836, 1824, 1825, 1839, 1826, 1826, 1840,
2226
2227 1829, 1829, 1842, 1831, 1843, 1827, 1828, 1840, 1832, 1841,
2228 1831, 1833, 1834, 0, 0, 1836, 0, 1841, 1839, 1834,
2229 1836, 0, 0, 1839, 0, 0, 1840, 0, 0, 1842,
2230 0, 1843, 0, 0, 0, 0, 1841, 1847, 1847, 1847,
2231 1847, 1847, 1847, 1847, 1848, 1848, 1848, 1848, 1848, 1848,
2232 1848, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1850, 1850,
2233 1850, 1850, 1850, 1850, 1850, 1851, 1851, 1851, 1851, 1851,
2234 1851, 1851, 1853, 1853, 0, 1853, 1853, 1853, 1853, 1854,
2235 1854, 0, 0, 0, 1854, 1854, 1855, 1855, 0, 0,
2236 1855, 0, 1855, 1856, 0, 0, 0, 0, 0, 1856,
2237
2238 1857, 1857, 0, 0, 0, 1857, 1857, 1858, 0, 0,
2239 0, 0, 0, 1858, 1859, 1859, 0, 1859, 1859, 1859,
2240 1859, 1860, 1860, 0, 1860, 1860, 1860, 1860, 1846, 1846,
2241 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
2242 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
2243 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
2244 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
2245 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
2246 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
2247 1846, 1846, 1846, 1846
2248
21942249 } ;
21952250
21962251 static yy_state_type yy_last_accepting_state;
23952450 #define YY_NO_INPUT 1
23962451 #endif
23972452
2398 #line 2398 "<stdout>"
2453 #line 2453 "<stdout>"
23992454
24002455 #define INITIAL 0
24012456 #define quotedstring 1
24332488
24342489 FILE *yyget_in (void );
24352490
2436 void yyset_in (FILE * in_str );
2491 void yyset_in (FILE * _in_str );
24372492
24382493 FILE *yyget_out (void );
24392494
2440 void yyset_out (FILE * out_str );
2495 void yyset_out (FILE * _out_str );
24412496
24422497 yy_size_t yyget_leng (void );
24432498
24452500
24462501 int yyget_lineno (void );
24472502
2448 void yyset_lineno (int line_number );
2503 void yyset_lineno (int _line_number );
24492504
24502505 /* Macros after this point can all be overridden by user definitions in
24512506 * section 1.
24592514 #endif
24602515 #endif
24612516
2517 #ifndef YY_NO_UNPUT
2518
2519 #endif
2520
24622521 #ifndef yytext_ptr
24632522 static void yy_flex_strncpy (char *,yyconst char *,int );
24642523 #endif
24792538
24802539 /* Amount of stuff to slurp up with each read. */
24812540 #ifndef YY_READ_BUF_SIZE
2541 #ifdef __ia64__
2542 /* On IA-64, the buffer size is 16k, not 8k */
2543 #define YY_READ_BUF_SIZE 16384
2544 #else
24822545 #define YY_READ_BUF_SIZE 8192
2546 #endif /* __ia64__ */
24832547 #endif
24842548
24852549 /* Copy whatever the last rule matched to the standard output. */
25662630
25672631 /* Code executed at the end of each rule. */
25682632 #ifndef YY_BREAK
2569 #define YY_BREAK break;
2633 #define YY_BREAK /*LINTED*/break;
25702634 #endif
25712635
25722636 #define YY_RULE_SETUP \
25762640 */
25772641 YY_DECL
25782642 {
2579 register yy_state_type yy_current_state;
2580 register char *yy_cp, *yy_bp;
2581 register int yy_act;
2643 yy_state_type yy_current_state;
2644 char *yy_cp, *yy_bp;
2645 int yy_act;
25822646
25832647 if ( !(yy_init) )
25842648 {
26092673 {
26102674 #line 201 "util/configlexer.lex"
26112675
2612 #line 2612 "<stdout>"
2613
2614 while ( 1 ) /* loops until end-of-file is reached */
2676 #line 2676 "<stdout>"
2677
2678 while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
26152679 {
26162680 (yy_more_len) = 0;
26172681 if ( (yy_more_flag) )
26332697 yy_match:
26342698 do
26352699 {
2636 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
2700 YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
26372701 if ( yy_accept[yy_current_state] )
26382702 {
26392703 (yy_last_accepting_state) = yy_current_state;
26422706 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
26432707 {
26442708 yy_current_state = (int) yy_def[yy_current_state];
2645 if ( yy_current_state >= 1800 )
2709 if ( yy_current_state >= 1847 )
26462710 yy_c = yy_meta[(unsigned int) yy_c];
26472711 }
26482712 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
26492713 ++yy_cp;
26502714 }
2651 while ( yy_base[yy_current_state] != 5211 );
2715 while ( yy_base[yy_current_state] != 5329 );
26522716
26532717 yy_find_action:
26542718 yy_act = yy_accept[yy_current_state];
28382902 case 33:
28392903 YY_RULE_SETUP
28402904 #line 237 "util/configlexer.lex"
2905 { YDVAR(1, VAR_IP_FREEBIND) }
2906 YY_BREAK
2907 case 34:
2908 YY_RULE_SETUP
2909 #line 238 "util/configlexer.lex"
28412910 { YDVAR(1, VAR_CHROOT) }
28422911 YY_BREAK
2843 case 34:
2844 YY_RULE_SETUP
2845 #line 238 "util/configlexer.lex"
2912 case 35:
2913 YY_RULE_SETUP
2914 #line 239 "util/configlexer.lex"
28462915 { YDVAR(1, VAR_USERNAME) }
28472916 YY_BREAK
2848 case 35:
2849 YY_RULE_SETUP
2850 #line 239 "util/configlexer.lex"
2917 case 36:
2918 YY_RULE_SETUP
2919 #line 240 "util/configlexer.lex"
28512920 { YDVAR(1, VAR_DIRECTORY) }
28522921 YY_BREAK
2853 case 36:
2854 YY_RULE_SETUP
2855 #line 240 "util/configlexer.lex"
2922 case 37:
2923 YY_RULE_SETUP
2924 #line 241 "util/configlexer.lex"
28562925 { YDVAR(1, VAR_LOGFILE) }
28572926 YY_BREAK
2858 case 37:
2859 YY_RULE_SETUP
2860 #line 241 "util/configlexer.lex"
2927 case 38:
2928 YY_RULE_SETUP
2929 #line 242 "util/configlexer.lex"
28612930 { YDVAR(1, VAR_PIDFILE) }
28622931 YY_BREAK
2863 case 38:
2864 YY_RULE_SETUP
2865 #line 242 "util/configlexer.lex"
2932 case 39:
2933 YY_RULE_SETUP
2934 #line 243 "util/configlexer.lex"
28662935 { YDVAR(1, VAR_ROOT_HINTS) }
28672936 YY_BREAK
2868 case 39:
2869 YY_RULE_SETUP
2870 #line 243 "util/configlexer.lex"
2937 case 40:
2938 YY_RULE_SETUP
2939 #line 244 "util/configlexer.lex"
28712940 { YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
28722941 YY_BREAK
2873 case 40:
2874 YY_RULE_SETUP
2875 #line 244 "util/configlexer.lex"
2942 case 41:
2943 YY_RULE_SETUP
2944 #line 245 "util/configlexer.lex"
28762945 { YDVAR(1, VAR_MSG_BUFFER_SIZE) }
28772946 YY_BREAK
2878 case 41:
2879 YY_RULE_SETUP
2880 #line 245 "util/configlexer.lex"
2947 case 42:
2948 YY_RULE_SETUP
2949 #line 246 "util/configlexer.lex"
28812950 { YDVAR(1, VAR_MSG_CACHE_SIZE) }
28822951 YY_BREAK
2883 case 42:
2884 YY_RULE_SETUP
2885 #line 246 "util/configlexer.lex"
2952 case 43:
2953 YY_RULE_SETUP
2954 #line 247 "util/configlexer.lex"
28862955 { YDVAR(1, VAR_MSG_CACHE_SLABS) }
28872956 YY_BREAK
2888 case 43:
2889 YY_RULE_SETUP
2890 #line 247 "util/configlexer.lex"
2957 case 44:
2958 YY_RULE_SETUP
2959 #line 248 "util/configlexer.lex"
28912960 { YDVAR(1, VAR_RRSET_CACHE_SIZE) }
28922961 YY_BREAK
2893 case 44:
2894 YY_RULE_SETUP
2895 #line 248 "util/configlexer.lex"
2962 case 45:
2963 YY_RULE_SETUP
2964 #line 249 "util/configlexer.lex"
28962965 { YDVAR(1, VAR_RRSET_CACHE_SLABS) }
28972966 YY_BREAK
2898 case 45:
2899 YY_RULE_SETUP
2900 #line 249 "util/configlexer.lex"
2967 case 46:
2968 YY_RULE_SETUP
2969 #line 250 "util/configlexer.lex"
29012970 { YDVAR(1, VAR_CACHE_MAX_TTL) }
29022971 YY_BREAK
2903 case 46:
2904 YY_RULE_SETUP
2905 #line 250 "util/configlexer.lex"
2972 case 47:
2973 YY_RULE_SETUP
2974 #line 251 "util/configlexer.lex"
29062975 { YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
29072976 YY_BREAK
2908 case 47:
2909 YY_RULE_SETUP
2910 #line 251 "util/configlexer.lex"
2977 case 48:
2978 YY_RULE_SETUP
2979 #line 252 "util/configlexer.lex"
29112980 { YDVAR(1, VAR_CACHE_MIN_TTL) }
29122981 YY_BREAK
2913 case 48:
2914 YY_RULE_SETUP
2915 #line 252 "util/configlexer.lex"
2982 case 49:
2983 YY_RULE_SETUP
2984 #line 253 "util/configlexer.lex"
29162985 { YDVAR(1, VAR_INFRA_HOST_TTL) }
29172986 YY_BREAK
2918 case 49:
2919 YY_RULE_SETUP
2920 #line 253 "util/configlexer.lex"
2987 case 50:
2988 YY_RULE_SETUP
2989 #line 254 "util/configlexer.lex"
29212990 { YDVAR(1, VAR_INFRA_LAME_TTL) }
29222991 YY_BREAK
2923 case 50:
2924 YY_RULE_SETUP
2925 #line 254 "util/configlexer.lex"
2992 case 51:
2993 YY_RULE_SETUP
2994 #line 255 "util/configlexer.lex"
29262995 { YDVAR(1, VAR_INFRA_CACHE_SLABS) }
29272996 YY_BREAK
2928 case 51:
2929 YY_RULE_SETUP
2930 #line 255 "util/configlexer.lex"
2997 case 52:
2998 YY_RULE_SETUP
2999 #line 256 "util/configlexer.lex"
29313000 { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
29323001 YY_BREAK
2933 case 52:
2934 YY_RULE_SETUP
2935 #line 256 "util/configlexer.lex"
3002 case 53:
3003 YY_RULE_SETUP
3004 #line 257 "util/configlexer.lex"
29363005 { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
29373006 YY_BREAK
2938 case 53:
2939 YY_RULE_SETUP
2940 #line 257 "util/configlexer.lex"
3007 case 54:
3008 YY_RULE_SETUP
3009 #line 258 "util/configlexer.lex"
29413010 { YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
29423011 YY_BREAK
2943 case 54:
2944 YY_RULE_SETUP
2945 #line 258 "util/configlexer.lex"
3012 case 55:
3013 YY_RULE_SETUP
3014 #line 259 "util/configlexer.lex"
29463015 { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
29473016 YY_BREAK
2948 case 55:
2949 YY_RULE_SETUP
2950 #line 259 "util/configlexer.lex"
3017 case 56:
3018 YY_RULE_SETUP
3019 #line 260 "util/configlexer.lex"
29513020 { YDVAR(1, VAR_JOSTLE_TIMEOUT) }
29523021 YY_BREAK
2953 case 56:
2954 YY_RULE_SETUP
2955 #line 260 "util/configlexer.lex"
3022 case 57:
3023 YY_RULE_SETUP
3024 #line 261 "util/configlexer.lex"
29563025 { YDVAR(1, VAR_DELAY_CLOSE) }
29573026 YY_BREAK
2958 case 57:
2959 YY_RULE_SETUP
2960 #line 261 "util/configlexer.lex"
3027 case 58:
3028 YY_RULE_SETUP
3029 #line 262 "util/configlexer.lex"
29613030 { YDVAR(1, VAR_TARGET_FETCH_POLICY) }
29623031 YY_BREAK
2963 case 58:
2964 YY_RULE_SETUP
2965 #line 262 "util/configlexer.lex"
3032 case 59:
3033 YY_RULE_SETUP
3034 #line 263 "util/configlexer.lex"
29663035 { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
29673036 YY_BREAK
2968 case 59:
2969 YY_RULE_SETUP
2970 #line 263 "util/configlexer.lex"
3037 case 60:
3038 YY_RULE_SETUP
3039 #line 264 "util/configlexer.lex"
29713040 { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
29723041 YY_BREAK
2973 case 60:
2974 YY_RULE_SETUP
2975 #line 264 "util/configlexer.lex"
3042 case 61:
3043 YY_RULE_SETUP
3044 #line 265 "util/configlexer.lex"
29763045 { YDVAR(1, VAR_HARDEN_GLUE) }
29773046 YY_BREAK
2978 case 61:
2979 YY_RULE_SETUP
2980 #line 265 "util/configlexer.lex"
3047 case 62:
3048 YY_RULE_SETUP
3049 #line 266 "util/configlexer.lex"
29813050 { YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
29823051 YY_BREAK
2983 case 62:
2984 YY_RULE_SETUP
2985 #line 266 "util/configlexer.lex"
3052 case 63:
3053 YY_RULE_SETUP
3054 #line 267 "util/configlexer.lex"
29863055 { YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
29873056 YY_BREAK
2988 case 63:
2989 YY_RULE_SETUP
2990 #line 267 "util/configlexer.lex"
3057 case 64:
3058 YY_RULE_SETUP
3059 #line 268 "util/configlexer.lex"
29913060 { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
29923061 YY_BREAK
2993 case 64:
2994 YY_RULE_SETUP
2995 #line 268 "util/configlexer.lex"
3062 case 65:
3063 YY_RULE_SETUP
3064 #line 269 "util/configlexer.lex"
29963065 { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
29973066 YY_BREAK
2998 case 65:
2999 YY_RULE_SETUP
3000 #line 269 "util/configlexer.lex"
3067 case 66:
3068 YY_RULE_SETUP
3069 #line 270 "util/configlexer.lex"
30013070 { YDVAR(1, VAR_USE_CAPS_FOR_ID) }
30023071 YY_BREAK
3003 case 66:
3004 YY_RULE_SETUP
3005 #line 270 "util/configlexer.lex"
3072 case 67:
3073 YY_RULE_SETUP
3074 #line 271 "util/configlexer.lex"
30063075 { YDVAR(1, VAR_CAPS_WHITELIST) }
30073076 YY_BREAK
3008 case 67:
3009 YY_RULE_SETUP
3010 #line 271 "util/configlexer.lex"
3077 case 68:
3078 YY_RULE_SETUP
3079 #line 272 "util/configlexer.lex"
30113080 { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
30123081 YY_BREAK
3013 case 68:
3014 YY_RULE_SETUP
3015 #line 272 "util/configlexer.lex"
3082 case 69:
3083 YY_RULE_SETUP
3084 #line 273 "util/configlexer.lex"
30163085 { YDVAR(1, VAR_PRIVATE_ADDRESS) }
30173086 YY_BREAK
3018 case 69:
3019 YY_RULE_SETUP
3020 #line 273 "util/configlexer.lex"
3087 case 70:
3088 YY_RULE_SETUP
3089 #line 274 "util/configlexer.lex"
30213090 { YDVAR(1, VAR_PRIVATE_DOMAIN) }
30223091 YY_BREAK
3023 case 70:
3024 YY_RULE_SETUP
3025 #line 274 "util/configlexer.lex"
3092 case 71:
3093 YY_RULE_SETUP
3094 #line 275 "util/configlexer.lex"
30263095 { YDVAR(1, VAR_PREFETCH_KEY) }
30273096 YY_BREAK
3028 case 71:
3029 YY_RULE_SETUP
3030 #line 275 "util/configlexer.lex"
3097 case 72:
3098 YY_RULE_SETUP
3099 #line 276 "util/configlexer.lex"
30313100 { YDVAR(1, VAR_PREFETCH) }
30323101 YY_BREAK
3033 case 72:
3034 YY_RULE_SETUP
3035 #line 276 "util/configlexer.lex"
3102 case 73:
3103 YY_RULE_SETUP
3104 #line 277 "util/configlexer.lex"
30363105 { YDVAR(0, VAR_STUB_ZONE) }
30373106 YY_BREAK
3038 case 73:
3039 YY_RULE_SETUP
3040 #line 277 "util/configlexer.lex"
3107 case 74:
3108 YY_RULE_SETUP
3109 #line 278 "util/configlexer.lex"
30413110 { YDVAR(1, VAR_NAME) }
30423111 YY_BREAK
3043 case 74:
3044 YY_RULE_SETUP
3045 #line 278 "util/configlexer.lex"
3112 case 75:
3113 YY_RULE_SETUP
3114 #line 279 "util/configlexer.lex"
30463115 { YDVAR(1, VAR_STUB_ADDR) }
30473116 YY_BREAK
3048 case 75:
3049 YY_RULE_SETUP
3050 #line 279 "util/configlexer.lex"
3117 case 76:
3118 YY_RULE_SETUP
3119 #line 280 "util/configlexer.lex"
30513120 { YDVAR(1, VAR_STUB_HOST) }
30523121 YY_BREAK
3053 case 76:
3054 YY_RULE_SETUP
3055 #line 280 "util/configlexer.lex"
3122 case 77:
3123 YY_RULE_SETUP
3124 #line 281 "util/configlexer.lex"
30563125 { YDVAR(1, VAR_STUB_PRIME) }
30573126 YY_BREAK
3058 case 77:
3059 YY_RULE_SETUP
3060 #line 281 "util/configlexer.lex"
3127 case 78:
3128 YY_RULE_SETUP
3129 #line 282 "util/configlexer.lex"
30613130 { YDVAR(1, VAR_STUB_FIRST) }
30623131 YY_BREAK
3063 case 78:
3064 YY_RULE_SETUP
3065 #line 282 "util/configlexer.lex"
3132 case 79:
3133 YY_RULE_SETUP
3134 #line 283 "util/configlexer.lex"
30663135 { YDVAR(0, VAR_FORWARD_ZONE) }
30673136 YY_BREAK
3068 case 79:
3069 YY_RULE_SETUP
3070 #line 283 "util/configlexer.lex"
3137 case 80:
3138 YY_RULE_SETUP
3139 #line 284 "util/configlexer.lex"
30713140 { YDVAR(1, VAR_FORWARD_ADDR) }
30723141 YY_BREAK
3073 case 80:
3074 YY_RULE_SETUP
3075 #line 284 "util/configlexer.lex"
3142 case 81:
3143 YY_RULE_SETUP
3144 #line 285 "util/configlexer.lex"
30763145 { YDVAR(1, VAR_FORWARD_HOST) }
30773146 YY_BREAK
3078 case 81:
3079 YY_RULE_SETUP
3080 #line 285 "util/configlexer.lex"
3147 case 82:
3148 YY_RULE_SETUP
3149 #line 286 "util/configlexer.lex"
30813150 { YDVAR(1, VAR_FORWARD_FIRST) }
30823151 YY_BREAK
3083 case 82:
3084 YY_RULE_SETUP
3085 #line 286 "util/configlexer.lex"
3152 case 83:
3153 YY_RULE_SETUP
3154 #line 287 "util/configlexer.lex"
30863155 { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
30873156 YY_BREAK
3088 case 83:
3089 YY_RULE_SETUP
3090 #line 287 "util/configlexer.lex"
3157 case 84:
3158 YY_RULE_SETUP
3159 #line 288 "util/configlexer.lex"
30913160 { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
30923161 YY_BREAK
3093 case 84:
3094 YY_RULE_SETUP
3095 #line 288 "util/configlexer.lex"
3162 case 85:
3163 YY_RULE_SETUP
3164 #line 289 "util/configlexer.lex"
30963165 { YDVAR(2, VAR_ACCESS_CONTROL) }
30973166 YY_BREAK
3098 case 85:
3099 YY_RULE_SETUP
3100 #line 289 "util/configlexer.lex"
3167 case 86:
3168 YY_RULE_SETUP
3169 #line 290 "util/configlexer.lex"
31013170 { YDVAR(1, VAR_HIDE_IDENTITY) }
31023171 YY_BREAK
3103 case 86:
3104 YY_RULE_SETUP
3105 #line 290 "util/configlexer.lex"
3172 case 87:
3173 YY_RULE_SETUP
3174 #line 291 "util/configlexer.lex"
31063175 { YDVAR(1, VAR_HIDE_VERSION) }
31073176 YY_BREAK
3108 case 87:
3109 YY_RULE_SETUP
3110 #line 291 "util/configlexer.lex"
3177 case 88:
3178 YY_RULE_SETUP
3179 #line 292 "util/configlexer.lex"
31113180 { YDVAR(1, VAR_IDENTITY) }
31123181 YY_BREAK
3113 case 88:
3114 YY_RULE_SETUP
3115 #line 292 "util/configlexer.lex"
3182 case 89:
3183 YY_RULE_SETUP
3184 #line 293 "util/configlexer.lex"
31163185 { YDVAR(1, VAR_VERSION) }
31173186 YY_BREAK
3118 case 89:
3119 YY_RULE_SETUP
3120 #line 293 "util/configlexer.lex"
3187 case 90:
3188 YY_RULE_SETUP
3189 #line 294 "util/configlexer.lex"
31213190 { YDVAR(1, VAR_MODULE_CONF) }
31223191 YY_BREAK
3123 case 90:
3124 YY_RULE_SETUP
3125 #line 294 "util/configlexer.lex"
3192 case 91:
3193 YY_RULE_SETUP
3194 #line 295 "util/configlexer.lex"
31263195 { YDVAR(1, VAR_DLV_ANCHOR) }
31273196 YY_BREAK
3128 case 91:
3129 YY_RULE_SETUP
3130 #line 295 "util/configlexer.lex"
3197 case 92:
3198 YY_RULE_SETUP
3199 #line 296 "util/configlexer.lex"
31313200 { YDVAR(1, VAR_DLV_ANCHOR_FILE) }
31323201 YY_BREAK
3133 case 92:
3134 YY_RULE_SETUP
3135 #line 296 "util/configlexer.lex"
3202 case 93:
3203 YY_RULE_SETUP
3204 #line 297 "util/configlexer.lex"
31363205 { YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
31373206 YY_BREAK
3138 case 93:
3139 YY_RULE_SETUP
3140 #line 297 "util/configlexer.lex"
3207 case 94:
3208 YY_RULE_SETUP
3209 #line 298 "util/configlexer.lex"
31413210 { YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
31423211 YY_BREAK
3143 case 94:
3144 YY_RULE_SETUP
3145 #line 298 "util/configlexer.lex"
3212 case 95:
3213 YY_RULE_SETUP
3214 #line 299 "util/configlexer.lex"
31463215 { YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
31473216 YY_BREAK
3148 case 95:
3149 YY_RULE_SETUP
3150 #line 299 "util/configlexer.lex"
3217 case 96:
3218 YY_RULE_SETUP
3219 #line 300 "util/configlexer.lex"
31513220 { YDVAR(1, VAR_TRUST_ANCHOR) }
31523221 YY_BREAK
3153 case 96:
3154 YY_RULE_SETUP
3155 #line 300 "util/configlexer.lex"
3222 case 97:
3223 YY_RULE_SETUP
3224 #line 301 "util/configlexer.lex"
31563225 { YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
31573226 YY_BREAK
3158 case 97:
3159 YY_RULE_SETUP
3160 #line 301 "util/configlexer.lex"
3227 case 98:
3228 YY_RULE_SETUP
3229 #line 302 "util/configlexer.lex"
31613230 { YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
31623231 YY_BREAK
3163 case 98:
3164 YY_RULE_SETUP
3165 #line 302 "util/configlexer.lex"
3232 case 99:
3233 YY_RULE_SETUP
3234 #line 303 "util/configlexer.lex"
31663235 { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
31673236 YY_BREAK
3168 case 99:
3169 YY_RULE_SETUP
3170 #line 303 "util/configlexer.lex"
3237 case 100:
3238 YY_RULE_SETUP
3239 #line 304 "util/configlexer.lex"
31713240 { YDVAR(1, VAR_BOGUS_TTL) }
31723241 YY_BREAK
3173 case 100:
3174 YY_RULE_SETUP
3175 #line 304 "util/configlexer.lex"
3242 case 101:
3243 YY_RULE_SETUP
3244 #line 305 "util/configlexer.lex"
31763245 { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
31773246 YY_BREAK
3178 case 101:
3179 YY_RULE_SETUP
3180 #line 305 "util/configlexer.lex"
3247 case 102:
3248 YY_RULE_SETUP
3249 #line 306 "util/configlexer.lex"
31813250 { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
31823251 YY_BREAK
3183 case 102:
3184 YY_RULE_SETUP
3185 #line 306 "util/configlexer.lex"
3252 case 103:
3253 YY_RULE_SETUP
3254 #line 307 "util/configlexer.lex"
31863255 { YDVAR(1, VAR_IGNORE_CD_FLAG) }
31873256 YY_BREAK
3188 case 103:
3189 YY_RULE_SETUP
3190 #line 307 "util/configlexer.lex"
3257 case 104:
3258 YY_RULE_SETUP
3259 #line 308 "util/configlexer.lex"
31913260 { YDVAR(1, VAR_VAL_LOG_LEVEL) }
31923261 YY_BREAK
3193 case 104:
3194 YY_RULE_SETUP
3195 #line 308 "util/configlexer.lex"
3262 case 105:
3263 YY_RULE_SETUP
3264 #line 309 "util/configlexer.lex"
31963265 { YDVAR(1, VAR_KEY_CACHE_SIZE) }
31973266 YY_BREAK
3198 case 105:
3199 YY_RULE_SETUP
3200 #line 309 "util/configlexer.lex"
3267 case 106:
3268 YY_RULE_SETUP
3269 #line 310 "util/configlexer.lex"
32013270 { YDVAR(1, VAR_KEY_CACHE_SLABS) }
32023271 YY_BREAK
3203 case 106:
3204 YY_RULE_SETUP
3205 #line 310 "util/configlexer.lex"
3272 case 107:
3273 YY_RULE_SETUP
3274 #line 311 "util/configlexer.lex"
32063275 { YDVAR(1, VAR_NEG_CACHE_SIZE) }
32073276 YY_BREAK
3208 case 107:
3209 YY_RULE_SETUP
3210 #line 311 "util/configlexer.lex"
3277 case 108:
3278 YY_RULE_SETUP
3279 #line 312 "util/configlexer.lex"
32113280 {
32123281 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
32133282 YY_BREAK
3214 case 108:
3215 YY_RULE_SETUP
3216 #line 313 "util/configlexer.lex"
3283 case 109:
3284 YY_RULE_SETUP
3285 #line 314 "util/configlexer.lex"
32173286 { YDVAR(1, VAR_ADD_HOLDDOWN) }
32183287 YY_BREAK
3219 case 109:
3220 YY_RULE_SETUP
3221 #line 314 "util/configlexer.lex"
3288 case 110:
3289 YY_RULE_SETUP
3290 #line 315 "util/configlexer.lex"
32223291 { YDVAR(1, VAR_DEL_HOLDDOWN) }
32233292 YY_BREAK
3224 case 110:
3225 YY_RULE_SETUP
3226 #line 315 "util/configlexer.lex"
3293 case 111:
3294 YY_RULE_SETUP
3295 #line 316 "util/configlexer.lex"
32273296 { YDVAR(1, VAR_KEEP_MISSING) }
32283297 YY_BREAK
3229 case 111:
3230 YY_RULE_SETUP
3231 #line 316 "util/configlexer.lex"
3298 case 112:
3299 YY_RULE_SETUP
3300 #line 317 "util/configlexer.lex"
32323301 { YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
32333302 YY_BREAK
3234 case 112:
3235 YY_RULE_SETUP
3236 #line 317 "util/configlexer.lex"
3303 case 113:
3304 YY_RULE_SETUP
3305 #line 318 "util/configlexer.lex"
32373306 { YDVAR(1, VAR_USE_SYSLOG) }
32383307 YY_BREAK
3239 case 113:
3240 YY_RULE_SETUP
3241 #line 318 "util/configlexer.lex"
3308 case 114:
3309 YY_RULE_SETUP
3310 #line 319 "util/configlexer.lex"
32423311 { YDVAR(1, VAR_LOG_TIME_ASCII) }
32433312 YY_BREAK
3244 case 114:
3245 YY_RULE_SETUP
3246 #line 319 "util/configlexer.lex"
3313 case 115:
3314 YY_RULE_SETUP
3315 #line 320 "util/configlexer.lex"
32473316 { YDVAR(1, VAR_LOG_QUERIES) }
32483317 YY_BREAK
3249 case 115:
3250 YY_RULE_SETUP
3251 #line 320 "util/configlexer.lex"
3318 case 116:
3319 YY_RULE_SETUP
3320 #line 321 "util/configlexer.lex"
32523321 { YDVAR(2, VAR_LOCAL_ZONE) }
32533322 YY_BREAK
3254 case 116:
3255 YY_RULE_SETUP
3256 #line 321 "util/configlexer.lex"
3323 case 117:
3324 YY_RULE_SETUP
3325 #line 322 "util/configlexer.lex"
32573326 { YDVAR(1, VAR_LOCAL_DATA) }
32583327 YY_BREAK
3259 case 117:
3260 YY_RULE_SETUP
3261 #line 322 "util/configlexer.lex"
3328 case 118:
3329 YY_RULE_SETUP
3330 #line 323 "util/configlexer.lex"
32623331 { YDVAR(1, VAR_LOCAL_DATA_PTR) }
32633332 YY_BREAK
3264 case 118:
3265 YY_RULE_SETUP
3266 #line 323 "util/configlexer.lex"
3333 case 119:
3334 YY_RULE_SETUP
3335 #line 324 "util/configlexer.lex"
32673336 { YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
32683337 YY_BREAK
3269 case 119:
3270 YY_RULE_SETUP
3271 #line 324 "util/configlexer.lex"
3338 case 120:
3339 YY_RULE_SETUP
3340 #line 325 "util/configlexer.lex"
32723341 { YDVAR(1, VAR_INSECURE_LAN_ZONES) }
32733342 YY_BREAK
3274 case 120:
3275 YY_RULE_SETUP
3276 #line 325 "util/configlexer.lex"
3343 case 121:
3344 YY_RULE_SETUP
3345 #line 326 "util/configlexer.lex"
32773346 { YDVAR(1, VAR_STATISTICS_INTERVAL) }
32783347 YY_BREAK
3279 case 121:
3280 YY_RULE_SETUP
3281 #line 326 "util/configlexer.lex"
3348 case 122:
3349 YY_RULE_SETUP
3350 #line 327 "util/configlexer.lex"
32823351 { YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
32833352 YY_BREAK
3284 case 122:
3285 YY_RULE_SETUP
3286 #line 327 "util/configlexer.lex"
3353 case 123:
3354 YY_RULE_SETUP
3355 #line 328 "util/configlexer.lex"
32873356 { YDVAR(1, VAR_EXTENDED_STATISTICS) }
32883357 YY_BREAK
3289 case 123:
3290 YY_RULE_SETUP
3291 #line 328 "util/configlexer.lex"
3358 case 124:
3359 YY_RULE_SETUP
3360 #line 329 "util/configlexer.lex"
32923361 { YDVAR(0, VAR_REMOTE_CONTROL) }
32933362 YY_BREAK
3294 case 124:
3295 YY_RULE_SETUP
3296 #line 329 "util/configlexer.lex"
3363 case 125:
3364 YY_RULE_SETUP
3365 #line 330 "util/configlexer.lex"
32973366 { YDVAR(1, VAR_CONTROL_ENABLE) }
32983367 YY_BREAK
3299 case 125:
3300 YY_RULE_SETUP
3301 #line 330 "util/configlexer.lex"
3368 case 126:
3369 YY_RULE_SETUP
3370 #line 331 "util/configlexer.lex"
33023371 { YDVAR(1, VAR_CONTROL_INTERFACE) }
33033372 YY_BREAK
3304 case 126:
3305 YY_RULE_SETUP
3306 #line 331 "util/configlexer.lex"
3373 case 127:
3374 YY_RULE_SETUP
3375 #line 332 "util/configlexer.lex"
33073376 { YDVAR(1, VAR_CONTROL_PORT) }
33083377 YY_BREAK
3309 case 127:
3310 YY_RULE_SETUP
3311 #line 332 "util/configlexer.lex"
3378 case 128:
3379 YY_RULE_SETUP
3380 #line 333 "util/configlexer.lex"
33123381 { YDVAR(1, VAR_CONTROL_USE_CERT) }
33133382 YY_BREAK
3314 case 128:
3315 YY_RULE_SETUP
3316 #line 333 "util/configlexer.lex"
3383 case 129:
3384 YY_RULE_SETUP
3385 #line 334 "util/configlexer.lex"
33173386 { YDVAR(1, VAR_SERVER_KEY_FILE) }
33183387 YY_BREAK
3319 case 129:
3320 YY_RULE_SETUP
3321 #line 334 "util/configlexer.lex"
3388 case 130:
3389 YY_RULE_SETUP
3390 #line 335 "util/configlexer.lex"
33223391 { YDVAR(1, VAR_SERVER_CERT_FILE) }
33233392 YY_BREAK
3324 case 130:
3325 YY_RULE_SETUP
3326 #line 335 "util/configlexer.lex"
3393 case 131:
3394 YY_RULE_SETUP
3395 #line 336 "util/configlexer.lex"
33273396 { YDVAR(1, VAR_CONTROL_KEY_FILE) }
33283397 YY_BREAK
3329 case 131:
3330 YY_RULE_SETUP
3331 #line 336 "util/configlexer.lex"
3398 case 132:
3399 YY_RULE_SETUP
3400 #line 337 "util/configlexer.lex"
33323401 { YDVAR(1, VAR_CONTROL_CERT_FILE) }
33333402 YY_BREAK
3334 case 132:
3335 YY_RULE_SETUP
3336 #line 337 "util/configlexer.lex"
3403 case 133:
3404 YY_RULE_SETUP
3405 #line 338 "util/configlexer.lex"
33373406 { YDVAR(1, VAR_PYTHON_SCRIPT) }
33383407 YY_BREAK
3339 case 133:
3340 YY_RULE_SETUP
3341 #line 338 "util/configlexer.lex"
3408 case 134:
3409 YY_RULE_SETUP
3410 #line 339 "util/configlexer.lex"
33423411 { YDVAR(0, VAR_PYTHON) }
33433412 YY_BREAK
3344 case 134:
3345 YY_RULE_SETUP
3346 #line 339 "util/configlexer.lex"
3413 case 135:
3414 YY_RULE_SETUP
3415 #line 340 "util/configlexer.lex"
33473416 { YDVAR(1, VAR_DOMAIN_INSECURE) }
33483417 YY_BREAK
3349 case 135:
3350 YY_RULE_SETUP
3351 #line 340 "util/configlexer.lex"
3418 case 136:
3419 YY_RULE_SETUP
3420 #line 341 "util/configlexer.lex"
33523421 { YDVAR(1, VAR_MINIMAL_RESPONSES) }
33533422 YY_BREAK
3354 case 136:
3355 YY_RULE_SETUP
3356 #line 341 "util/configlexer.lex"
3423 case 137:
3424 YY_RULE_SETUP
3425 #line 342 "util/configlexer.lex"
33573426 { YDVAR(1, VAR_RRSET_ROUNDROBIN) }
33583427 YY_BREAK
3359 case 137:
3360 YY_RULE_SETUP
3361 #line 342 "util/configlexer.lex"
3428 case 138:
3429 YY_RULE_SETUP
3430 #line 343 "util/configlexer.lex"
33623431 { YDVAR(1, VAR_MAX_UDP_SIZE) }
33633432 YY_BREAK
3364 case 138:
3365 YY_RULE_SETUP
3366 #line 343 "util/configlexer.lex"
3433 case 139:
3434 YY_RULE_SETUP
3435 #line 344 "util/configlexer.lex"
33673436 { YDVAR(1, VAR_DNS64_PREFIX) }
33683437 YY_BREAK
3369 case 139:
3370 YY_RULE_SETUP
3371 #line 344 "util/configlexer.lex"
3438 case 140:
3439 YY_RULE_SETUP
3440 #line 345 "util/configlexer.lex"
33723441 { YDVAR(1, VAR_DNS64_SYNTHALL) }
33733442 YY_BREAK
3374 case 140:
3375 YY_RULE_SETUP
3376 #line 345 "util/configlexer.lex"
3443 case 141:
3444 YY_RULE_SETUP
3445 #line 346 "util/configlexer.lex"
3446 { YDVAR(1, VAR_DEFINE_TAG) }
3447 YY_BREAK
3448 case 142:
3449 YY_RULE_SETUP
3450 #line 347 "util/configlexer.lex"
3451 { YDVAR(2, VAR_LOCAL_ZONE_TAG) }
3452 YY_BREAK
3453 case 143:
3454 YY_RULE_SETUP
3455 #line 348 "util/configlexer.lex"
33773456 { YDVAR(0, VAR_DNSTAP) }
33783457 YY_BREAK
3379 case 141:
3380 YY_RULE_SETUP
3381 #line 346 "util/configlexer.lex"
3458 case 144:
3459 YY_RULE_SETUP
3460 #line 349 "util/configlexer.lex"
33823461 { YDVAR(1, VAR_DNSTAP_ENABLE) }
33833462 YY_BREAK
3384 case 142:
3385 YY_RULE_SETUP
3386 #line 347 "util/configlexer.lex"
3463 case 145:
3464 YY_RULE_SETUP
3465 #line 350 "util/configlexer.lex"
33873466 { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
33883467 YY_BREAK
3389 case 143:
3390 YY_RULE_SETUP
3391 #line 348 "util/configlexer.lex"
3468 case 146:
3469 YY_RULE_SETUP
3470 #line 351 "util/configlexer.lex"
33923471 { YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
33933472 YY_BREAK
3394 case 144:
3395 YY_RULE_SETUP
3396 #line 349 "util/configlexer.lex"
3473 case 147:
3474 YY_RULE_SETUP
3475 #line 352 "util/configlexer.lex"
33973476 { YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
33983477 YY_BREAK
3399 case 145:
3400 YY_RULE_SETUP
3401 #line 350 "util/configlexer.lex"
3478 case 148:
3479 YY_RULE_SETUP
3480 #line 353 "util/configlexer.lex"
34023481 { YDVAR(1, VAR_DNSTAP_IDENTITY) }
34033482 YY_BREAK
3404 case 146:
3405 YY_RULE_SETUP
3406 #line 351 "util/configlexer.lex"
3483 case 149:
3484 YY_RULE_SETUP
3485 #line 354 "util/configlexer.lex"
34073486 { YDVAR(1, VAR_DNSTAP_VERSION) }
34083487 YY_BREAK
3409 case 147:
3410 YY_RULE_SETUP
3411 #line 352 "util/configlexer.lex"
3488 case 150:
3489 YY_RULE_SETUP
3490 #line 355 "util/configlexer.lex"
34123491 {
34133492 YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
34143493 YY_BREAK
3415 case 148:
3416 YY_RULE_SETUP
3417 #line 354 "util/configlexer.lex"
3494 case 151:
3495 YY_RULE_SETUP
3496 #line 357 "util/configlexer.lex"
34183497 {
34193498 YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
34203499 YY_BREAK
3421 case 149:
3422 YY_RULE_SETUP
3423 #line 356 "util/configlexer.lex"
3500 case 152:
3501 YY_RULE_SETUP
3502 #line 359 "util/configlexer.lex"
34243503 {
34253504 YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
34263505 YY_BREAK
3427 case 150:
3428 YY_RULE_SETUP
3429 #line 358 "util/configlexer.lex"
3506 case 153:
3507 YY_RULE_SETUP
3508 #line 361 "util/configlexer.lex"
34303509 {
34313510 YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
34323511 YY_BREAK
3433 case 151:
3434 YY_RULE_SETUP
3435 #line 360 "util/configlexer.lex"
3512 case 154:
3513 YY_RULE_SETUP
3514 #line 363 "util/configlexer.lex"
34363515 {
34373516 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
34383517 YY_BREAK
3439 case 152:
3440 YY_RULE_SETUP
3441 #line 362 "util/configlexer.lex"
3518 case 155:
3519 YY_RULE_SETUP
3520 #line 365 "util/configlexer.lex"
34423521 {
34433522 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
34443523 YY_BREAK
3445 case 153:
3446 YY_RULE_SETUP
3447 #line 364 "util/configlexer.lex"
3524 case 156:
3525 YY_RULE_SETUP
3526 #line 367 "util/configlexer.lex"
3527 { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
3528 YY_BREAK
3529 case 157:
3530 YY_RULE_SETUP
3531 #line 368 "util/configlexer.lex"
34483532 { YDVAR(1, VAR_RATELIMIT) }
34493533 YY_BREAK
3450 case 154:
3451 YY_RULE_SETUP
3452 #line 365 "util/configlexer.lex"
3534 case 158:
3535 YY_RULE_SETUP
3536 #line 369 "util/configlexer.lex"
34533537 { YDVAR(1, VAR_RATELIMIT_SLABS) }
34543538 YY_BREAK
3455 case 155:
3456 YY_RULE_SETUP
3457 #line 366 "util/configlexer.lex"
3539 case 159:
3540 YY_RULE_SETUP
3541 #line 370 "util/configlexer.lex"
34583542 { YDVAR(1, VAR_RATELIMIT_SIZE) }
34593543 YY_BREAK
3460 case 156:
3461 YY_RULE_SETUP
3462 #line 367 "util/configlexer.lex"
3544 case 160:
3545 YY_RULE_SETUP
3546 #line 371 "util/configlexer.lex"
34633547 { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
34643548 YY_BREAK
3465 case 157:
3466 YY_RULE_SETUP
3467 #line 368 "util/configlexer.lex"
3549 case 161:
3550 YY_RULE_SETUP
3551 #line 372 "util/configlexer.lex"
34683552 { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
34693553 YY_BREAK
3470 case 158:
3471 YY_RULE_SETUP
3472 #line 369 "util/configlexer.lex"
3554 case 162:
3555 YY_RULE_SETUP
3556 #line 373 "util/configlexer.lex"
34733557 { YDVAR(1, VAR_RATELIMIT_FACTOR) }
34743558 YY_BREAK
3475 case 159:
3476 /* rule 159 can match eol */
3477 YY_RULE_SETUP
3478 #line 370 "util/configlexer.lex"
3559 case 163:
3560 /* rule 163 can match eol */
3561 YY_RULE_SETUP
3562 #line 374 "util/configlexer.lex"
34793563 { LEXOUT(("NL\n")); cfg_parser->line++; }
34803564 YY_BREAK
34813565 /* Quoted strings. Strip leading and ending quotes */
3482 case 160:
3483 YY_RULE_SETUP
3484 #line 373 "util/configlexer.lex"
3566 case 164:
3567 YY_RULE_SETUP
3568 #line 377 "util/configlexer.lex"
34853569 { BEGIN(quotedstring); LEXOUT(("QS ")); }
34863570 YY_BREAK
34873571 case YY_STATE_EOF(quotedstring):
3488 #line 374 "util/configlexer.lex"
3572 #line 378 "util/configlexer.lex"
34893573 {
34903574 yyerror("EOF inside quoted string");
34913575 if(--num_args == 0) { BEGIN(INITIAL); }
34923576 else { BEGIN(val); }
34933577 }
34943578 YY_BREAK
3495 case 161:
3496 YY_RULE_SETUP
3497 #line 379 "util/configlexer.lex"
3579 case 165:
3580 YY_RULE_SETUP
3581 #line 383 "util/configlexer.lex"
34983582 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
34993583 YY_BREAK
3500 case 162:
3501 /* rule 162 can match eol */
3502 YY_RULE_SETUP
3503 #line 380 "util/configlexer.lex"
3584 case 166:
3585 /* rule 166 can match eol */
3586 YY_RULE_SETUP
3587 #line 384 "util/configlexer.lex"
35043588 { yyerror("newline inside quoted string, no end \"");
35053589 cfg_parser->line++; BEGIN(INITIAL); }
35063590 YY_BREAK
3507 case 163:
3508 YY_RULE_SETUP
3509 #line 382 "util/configlexer.lex"
3591 case 167:
3592 YY_RULE_SETUP
3593 #line 386 "util/configlexer.lex"
35103594 {
35113595 LEXOUT(("QE "));
35123596 if(--num_args == 0) { BEGIN(INITIAL); }
35193603 }
35203604 YY_BREAK
35213605 /* Single Quoted strings. Strip leading and ending quotes */
3522 case 164:
3523 YY_RULE_SETUP
3524 #line 394 "util/configlexer.lex"
3606 case 168:
3607 YY_RULE_SETUP
3608 #line 398 "util/configlexer.lex"
35253609 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
35263610 YY_BREAK
35273611 case YY_STATE_EOF(singlequotedstr):
3528 #line 395 "util/configlexer.lex"
3612 #line 399 "util/configlexer.lex"
35293613 {
35303614 yyerror("EOF inside quoted string");
35313615 if(--num_args == 0) { BEGIN(INITIAL); }
35323616 else { BEGIN(val); }
35333617 }
35343618 YY_BREAK
3535 case 165:
3536 YY_RULE_SETUP
3537 #line 400 "util/configlexer.lex"
3619 case 169:
3620 YY_RULE_SETUP
3621 #line 404 "util/configlexer.lex"
35383622 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
35393623 YY_BREAK
3540 case 166:
3541 /* rule 166 can match eol */
3542 YY_RULE_SETUP
3543 #line 401 "util/configlexer.lex"
3624 case 170:
3625 /* rule 170 can match eol */
3626 YY_RULE_SETUP
3627 #line 405 "util/configlexer.lex"
35443628 { yyerror("newline inside quoted string, no end '");
35453629 cfg_parser->line++; BEGIN(INITIAL); }
35463630 YY_BREAK
3547 case 167:
3548 YY_RULE_SETUP
3549 #line 403 "util/configlexer.lex"
3631 case 171:
3632 YY_RULE_SETUP
3633 #line 407 "util/configlexer.lex"
35503634 {
35513635 LEXOUT(("SQE "));
35523636 if(--num_args == 0) { BEGIN(INITIAL); }
35593643 }
35603644 YY_BREAK
35613645 /* include: directive */
3562 case 168:
3563 YY_RULE_SETUP
3564 #line 415 "util/configlexer.lex"
3646 case 172:
3647 YY_RULE_SETUP
3648 #line 419 "util/configlexer.lex"
35653649 {
35663650 LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
35673651 YY_BREAK
35683652 case YY_STATE_EOF(include):
3569 #line 417 "util/configlexer.lex"
3653 #line 421 "util/configlexer.lex"
35703654 {
35713655 yyerror("EOF inside include directive");
35723656 BEGIN(inc_prev);
35733657 }
35743658 YY_BREAK
3575 case 169:
3576 YY_RULE_SETUP
3577 #line 421 "util/configlexer.lex"
3659 case 173:
3660 YY_RULE_SETUP
3661 #line 425 "util/configlexer.lex"
35783662 { LEXOUT(("ISP ")); /* ignore */ }
35793663 YY_BREAK
3580 case 170:
3581 /* rule 170 can match eol */
3582 YY_RULE_SETUP
3583 #line 422 "util/configlexer.lex"
3664 case 174:
3665 /* rule 174 can match eol */
3666 YY_RULE_SETUP
3667 #line 426 "util/configlexer.lex"
35843668 { LEXOUT(("NL\n")); cfg_parser->line++;}
35853669 YY_BREAK
3586 case 171:
3587 YY_RULE_SETUP
3588 #line 423 "util/configlexer.lex"
3670 case 175:
3671 YY_RULE_SETUP
3672 #line 427 "util/configlexer.lex"
35893673 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
35903674 YY_BREAK
3591 case 172:
3592 YY_RULE_SETUP
3593 #line 424 "util/configlexer.lex"
3675 case 176:
3676 YY_RULE_SETUP
3677 #line 428 "util/configlexer.lex"
35943678 {
35953679 LEXOUT(("Iunquotedstr(%s) ", yytext));
35963680 config_start_include_glob(yytext);
35983682 }
35993683 YY_BREAK
36003684 case YY_STATE_EOF(include_quoted):
3601 #line 429 "util/configlexer.lex"
3685 #line 433 "util/configlexer.lex"
36023686 {
36033687 yyerror("EOF inside quoted string");
36043688 BEGIN(inc_prev);
36053689 }
36063690 YY_BREAK
3607 case 173:
3608 YY_RULE_SETUP
3609 #line 433 "util/configlexer.lex"
3691 case 177:
3692 YY_RULE_SETUP
3693 #line 437 "util/configlexer.lex"
36103694 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
36113695 YY_BREAK
3612 case 174:
3613 /* rule 174 can match eol */
3614 YY_RULE_SETUP
3615 #line 434 "util/configlexer.lex"
3696 case 178:
3697 /* rule 178 can match eol */
3698 YY_RULE_SETUP
3699 #line 438 "util/configlexer.lex"
36163700 { yyerror("newline before \" in include name");
36173701 cfg_parser->line++; BEGIN(inc_prev); }
36183702 YY_BREAK
3619 case 175:
3620 YY_RULE_SETUP
3621 #line 436 "util/configlexer.lex"
3703 case 179:
3704 YY_RULE_SETUP
3705 #line 440 "util/configlexer.lex"
36223706 {
36233707 LEXOUT(("IQE "));
36243708 yytext[yyleng - 1] = '\0';
36283712 YY_BREAK
36293713 case YY_STATE_EOF(INITIAL):
36303714 case YY_STATE_EOF(val):
3631 #line 442 "util/configlexer.lex"
3715 #line 446 "util/configlexer.lex"
36323716 {
36333717 LEXOUT(("LEXEOF "));
36343718 yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
36403724 }
36413725 }
36423726 YY_BREAK
3643 case 176:
3644 YY_RULE_SETUP
3645 #line 453 "util/configlexer.lex"
3727 case 180:
3728 YY_RULE_SETUP
3729 #line 457 "util/configlexer.lex"
36463730 { LEXOUT(("unquotedstr(%s) ", yytext));
36473731 if(--num_args == 0) { BEGIN(INITIAL); }
36483732 yylval.str = strdup(yytext); return STRING_ARG; }
36493733 YY_BREAK
3650 case 177:
3651 YY_RULE_SETUP
3652 #line 457 "util/configlexer.lex"
3734 case 181:
3735 YY_RULE_SETUP
3736 #line 461 "util/configlexer.lex"
36533737 {
36543738 ub_c_error_msg("unknown keyword '%s'", yytext);
36553739 }
36563740 YY_BREAK
3657 case 178:
3658 YY_RULE_SETUP
3659 #line 461 "util/configlexer.lex"
3741 case 182:
3742 YY_RULE_SETUP
3743 #line 465 "util/configlexer.lex"
36603744 {
36613745 ub_c_error_msg("stray '%s'", yytext);
36623746 }
36633747 YY_BREAK
3664 case 179:
3665 YY_RULE_SETUP
3666 #line 465 "util/configlexer.lex"
3748 case 183:
3749 YY_RULE_SETUP
3750 #line 469 "util/configlexer.lex"
36673751 ECHO;
36683752 YY_BREAK
3669 #line 3669 "<stdout>"
3753 #line 3753 "<stdout>"
36703754
36713755 case YY_END_OF_BUFFER:
36723756 {
38073891 */
38083892 static int yy_get_next_buffer (void)
38093893 {
3810 register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
3811 register char *source = (yytext_ptr);
3812 register int number_to_move, i;
3894 char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
3895 char *source = (yytext_ptr);
3896 yy_size_t number_to_move, i;
38133897 int ret_val;
38143898
38153899 if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
38383922 /* Try to read more data. */
38393923
38403924 /* First move last chars to start of buffer. */
3841 number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
3925 number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
38423926
38433927 for ( i = 0; i < number_to_move; ++i )
38443928 *(dest++) = *(source++);
39414025
39424026 static yy_state_type yy_get_previous_state (void)
39434027 {
3944 register yy_state_type yy_current_state;
3945 register char *yy_cp;
4028 yy_state_type yy_current_state;
4029 char *yy_cp;
39464030
39474031 yy_current_state = (yy_start);
39484032
39494033 for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
39504034 {
3951 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
4035 YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
39524036 if ( yy_accept[yy_current_state] )
39534037 {
39544038 (yy_last_accepting_state) = yy_current_state;
39574041 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
39584042 {
39594043 yy_current_state = (int) yy_def[yy_current_state];
3960 if ( yy_current_state >= 1800 )
4044 if ( yy_current_state >= 1847 )
39614045 yy_c = yy_meta[(unsigned int) yy_c];
39624046 }
39634047 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
39734057 */
39744058 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
39754059 {
3976 register int yy_is_jam;
3977 register char *yy_cp = (yy_c_buf_p);
3978
3979 register YY_CHAR yy_c = 1;
4060 int yy_is_jam;
4061 char *yy_cp = (yy_c_buf_p);
4062
4063 YY_CHAR yy_c = 1;
39804064 if ( yy_accept[yy_current_state] )
39814065 {
39824066 (yy_last_accepting_state) = yy_current_state;
39854069 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
39864070 {
39874071 yy_current_state = (int) yy_def[yy_current_state];
3988 if ( yy_current_state >= 1800 )
4072 if ( yy_current_state >= 1847 )
39894073 yy_c = yy_meta[(unsigned int) yy_c];
39904074 }
39914075 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3992 yy_is_jam = (yy_current_state == 1799);
4076 yy_is_jam = (yy_current_state == 1846);
39934077
39944078 return yy_is_jam ? 0 : yy_current_state;
39954079 }
4080
4081 #ifndef YY_NO_UNPUT
4082
4083 #endif
39964084
39974085 #ifndef YY_NO_INPUT
39984086 #ifdef __cplusplus
41434231 if ( ! b )
41444232 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
41454233
4146 b->yy_buf_size = size;
4234 b->yy_buf_size = (yy_size_t)size;
41474235
41484236 /* yy_ch_buf has to be 2 characters longer than the size given because
41494237 * we need to put in 2 end-of-buffer characters.
42984386 * scanner will even need a stack. We use 2 instead of 1 to avoid an
42994387 * immediate realloc on the next call.
43004388 */
4301 num_to_alloc = 1;
4389 num_to_alloc = 1; // After all that talk, this was set to 1 anyways...
43024390 (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
43034391 (num_to_alloc * sizeof(struct yy_buffer_state*)
43044392 );
43154403 if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
43164404
43174405 /* Increase the buffer to prepare for a possible push. */
4318 int grow_size = 8 /* arbitrary grow size */;
4406 yy_size_t grow_size = 8 /* arbitrary grow size */;
43194407
43204408 num_to_alloc = (yy_buffer_stack_max) + grow_size;
43214409 (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
44234511
44244512 static void yy_fatal_error (yyconst char* msg )
44254513 {
4426 (void) fprintf( stderr, "%s\n", msg );
4514 (void) fprintf( stderr, "%s\n", msg );
44274515 exit( YY_EXIT_FAILURE );
44284516 }
44294517
44344522 do \
44354523 { \
44364524 /* Undo effects of setting up yytext. */ \
4437 int yyless_macro_arg = (n); \
4525 yy_size_t yyless_macro_arg = (n); \
44384526 YY_LESS_LINENO(yyless_macro_arg);\
44394527 yytext[yyleng] = (yy_hold_char); \
44404528 (yy_c_buf_p) = yytext + yyless_macro_arg; \
44894577 }
44904578
44914579 /** Set the current line number.
4492 * @param line_number
4580 * @param _line_number line number
44934581 *
44944582 */
4495 void yyset_lineno (int line_number )
4583 void yyset_lineno (int _line_number )
44964584 {
44974585
4498 yylineno = line_number;
4586 yylineno = _line_number;
44994587 }
45004588
45014589 /** Set the input stream. This does not discard the current
45024590 * input buffer.
4503 * @param in_str A readable stream.
4591 * @param _in_str A readable stream.
45044592 *
45054593 * @see yy_switch_to_buffer
45064594 */
4507 void yyset_in (FILE * in_str )
4508 {
4509 yyin = in_str ;
4595 void yyset_in (FILE * _in_str )
4596 {
4597 yyin = _in_str ;
45104598 }
45114599
4512 void yyset_out (FILE * out_str )
4513 {
4514 yyout = out_str ;
4600 void yyset_out (FILE * _out_str )
4601 {
4602 yyout = _out_str ;
45154603 }
45164604
45174605 int yyget_debug (void)
45194607 return yy_flex_debug;
45204608 }
45214609
4522 void yyset_debug (int bdebug )
4523 {
4524 yy_flex_debug = bdebug ;
4610 void yyset_debug (int _bdebug )
4611 {
4612 yy_flex_debug = _bdebug ;
45254613 }
45264614
45274615 static int yy_init_globals (void)
45814669 #ifndef yytext_ptr
45824670 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
45834671 {
4584 register int i;
4672
4673 int i;
45854674 for ( i = 0; i < n; ++i )
45864675 s1[i] = s2[i];
45874676 }
45904679 #ifdef YY_NEED_STRLEN
45914680 static int yy_flex_strlen (yyconst char * s )
45924681 {
4593 register int n;
4682 int n;
45944683 for ( n = 0; s[n]; ++n )
45954684 ;
45964685
46004689
46014690 void *yyalloc (yy_size_t size )
46024691 {
4603 return (void *) malloc( size );
4692 return (void *) malloc( size );
46044693 }
46054694
46064695 void *yyrealloc (void * ptr, yy_size_t size )
46074696 {
4697
46084698 /* The cast to (char *) in the following accommodates both
46094699 * implementations that use char* generic pointers, and those
46104700 * that use void* generic pointers. It works with the latter
46174707
46184708 void yyfree (void * ptr )
46194709 {
4620 free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
4710 free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
46214711 }
46224712
46234713 #define YYTABLES_NAME "yytables"
46244714
4625 #line 465 "util/configlexer.lex"
4626
4627
4628
4715 #line 469 "util/configlexer.lex"
4716
4717
4718
233233 so-sndbuf{COLON} { YDVAR(1, VAR_SO_SNDBUF) }
234234 so-reuseport{COLON} { YDVAR(1, VAR_SO_REUSEPORT) }
235235 ip-transparent{COLON} { YDVAR(1, VAR_IP_TRANSPARENT) }
236 ip-freebind{COLON} { YDVAR(1, VAR_IP_FREEBIND) }
236237 chroot{COLON} { YDVAR(1, VAR_CHROOT) }
237238 username{COLON} { YDVAR(1, VAR_USERNAME) }
238239 directory{COLON} { YDVAR(1, VAR_DIRECTORY) }
341342 max-udp-size{COLON} { YDVAR(1, VAR_MAX_UDP_SIZE) }
342343 dns64-prefix{COLON} { YDVAR(1, VAR_DNS64_PREFIX) }
343344 dns64-synthall{COLON} { YDVAR(1, VAR_DNS64_SYNTHALL) }
345 define-tag{COLON} { YDVAR(1, VAR_DEFINE_TAG) }
346 local-zone-tag{COLON} { YDVAR(2, VAR_LOCAL_ZONE_TAG) }
344347 dnstap{COLON} { YDVAR(0, VAR_DNSTAP) }
345348 dnstap-enable{COLON} { YDVAR(1, VAR_DNSTAP_ENABLE) }
346349 dnstap-socket-path{COLON} { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
360363 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
361364 dnstap-log-forwarder-response-messages{COLON} {
362365 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
366 disable-dnssec-lame-check{COLON} { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
363367 ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) }
364368 ratelimit-slabs{COLON} { YDVAR(1, VAR_RATELIMIT_SLABS) }
365369 ratelimit-size{COLON} { YDVAR(1, VAR_RATELIMIT_SIZE) }
276276 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 408,
277277 VAR_HARDEN_ALGO_DOWNGRADE = 409,
278278 VAR_IP_TRANSPARENT = 410,
279 VAR_RATELIMIT = 411,
280 VAR_RATELIMIT_SLABS = 412,
281 VAR_RATELIMIT_SIZE = 413,
282 VAR_RATELIMIT_FOR_DOMAIN = 414,
283 VAR_RATELIMIT_BELOW_DOMAIN = 415,
284 VAR_RATELIMIT_FACTOR = 416,
285 VAR_CAPS_WHITELIST = 417,
286 VAR_CACHE_MAX_NEGATIVE_TTL = 418,
287 VAR_PERMIT_SMALL_HOLDDOWN = 419,
288 VAR_QNAME_MINIMISATION = 420
279 VAR_DISABLE_DNSSEC_LAME_CHECK = 411,
280 VAR_RATELIMIT = 412,
281 VAR_RATELIMIT_SLABS = 413,
282 VAR_RATELIMIT_SIZE = 414,
283 VAR_RATELIMIT_FOR_DOMAIN = 415,
284 VAR_RATELIMIT_BELOW_DOMAIN = 416,
285 VAR_RATELIMIT_FACTOR = 417,
286 VAR_CAPS_WHITELIST = 418,
287 VAR_CACHE_MAX_NEGATIVE_TTL = 419,
288 VAR_PERMIT_SMALL_HOLDDOWN = 420,
289 VAR_QNAME_MINIMISATION = 421,
290 VAR_IP_FREEBIND = 422,
291 VAR_DEFINE_TAG = 423,
292 VAR_LOCAL_ZONE_TAG = 424
289293 };
290294 #endif
291295 /* Tokens. */
442446 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 408
443447 #define VAR_HARDEN_ALGO_DOWNGRADE 409
444448 #define VAR_IP_TRANSPARENT 410
445 #define VAR_RATELIMIT 411
446 #define VAR_RATELIMIT_SLABS 412
447 #define VAR_RATELIMIT_SIZE 413
448 #define VAR_RATELIMIT_FOR_DOMAIN 414
449 #define VAR_RATELIMIT_BELOW_DOMAIN 415
450 #define VAR_RATELIMIT_FACTOR 416
451 #define VAR_CAPS_WHITELIST 417
452 #define VAR_CACHE_MAX_NEGATIVE_TTL 418
453 #define VAR_PERMIT_SMALL_HOLDDOWN 419
454 #define VAR_QNAME_MINIMISATION 420
449 #define VAR_DISABLE_DNSSEC_LAME_CHECK 411
450 #define VAR_RATELIMIT 412
451 #define VAR_RATELIMIT_SLABS 413
452 #define VAR_RATELIMIT_SIZE 414
453 #define VAR_RATELIMIT_FOR_DOMAIN 415
454 #define VAR_RATELIMIT_BELOW_DOMAIN 416
455 #define VAR_RATELIMIT_FACTOR 417
456 #define VAR_CAPS_WHITELIST 418
457 #define VAR_CACHE_MAX_NEGATIVE_TTL 419
458 #define VAR_PERMIT_SMALL_HOLDDOWN 420
459 #define VAR_QNAME_MINIMISATION 421
460 #define VAR_IP_FREEBIND 422
461 #define VAR_DEFINE_TAG 423
462 #define VAR_LOCAL_ZONE_TAG 424
455463
456464 /* Value type. */
457465 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
462470
463471 char* str;
464472
465 #line 467 "util/configparser.c" /* yacc.c:355 */
473 #line 475 "util/configparser.c" /* yacc.c:355 */
466474 };
467475
468476 typedef union YYSTYPE YYSTYPE;
479487
480488 /* Copy the second part of user declarations. */
481489
482 #line 484 "util/configparser.c" /* yacc.c:358 */
490 #line 492 "util/configparser.c" /* yacc.c:358 */
483491
484492 #ifdef short
485493 # undef short
721729 /* YYFINAL -- State number of the termination state. */
722730 #define YYFINAL 2
723731 /* YYLAST -- Last index in YYTABLE. */
724 #define YYLAST 310
732 #define YYLAST 319
725733
726734 /* YYNTOKENS -- Number of terminals. */
727 #define YYNTOKENS 166
735 #define YYNTOKENS 170
728736 /* YYNNTS -- Number of nonterminals. */
729 #define YYNNTS 171
737 #define YYNNTS 175
730738 /* YYNRULES -- Number of rules. */
731 #define YYNRULES 327
739 #define YYNRULES 335
732740 /* YYNSTATES -- Number of states. */
733 #define YYNSTATES 482
741 #define YYNSTATES 495
734742
735743 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
736744 by yylex, with out-of-bounds checking. */
737745 #define YYUNDEFTOK 2
738 #define YYMAXUTOK 420
746 #define YYMAXUTOK 424
739747
740748 #define YYTRANSLATE(YYX) \
741749 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
786794 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
787795 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
788796 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
789 165
797 165, 166, 167, 168, 169
790798 };
791799
792800 #if YYDEBUG
793801 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
794802 static const yytype_uint16 yyrline[] =
795803 {
796 0, 130, 130, 130, 131, 131, 132, 132, 133, 133,
797 137, 142, 143, 144, 144, 144, 145, 145, 146, 146,
798 146, 147, 147, 148, 148, 148, 149, 149, 149, 150,
799 150, 151, 151, 152, 152, 153, 153, 154, 154, 155,
800 155, 156, 156, 157, 157, 158, 158, 158, 159, 159,
801 159, 160, 160, 160, 161, 161, 162, 162, 163, 163,
802 164, 164, 165, 165, 165, 166, 166, 167, 167, 168,
803 168, 168, 169, 169, 170, 170, 171, 171, 172, 172,
804 172, 173, 173, 174, 174, 175, 175, 176, 176, 177,
805 177, 178, 178, 178, 179, 179, 180, 180, 180, 181,
806 181, 181, 182, 182, 182, 183, 183, 183, 184, 184,
807 184, 185, 185, 185, 186, 186, 187, 187, 188, 188,
808 189, 189, 190, 190, 190, 191, 191, 192, 192, 193,
809 193, 194, 194, 196, 208, 209, 210, 210, 210, 210,
810 210, 212, 224, 225, 226, 226, 226, 226, 228, 237,
811 246, 257, 266, 275, 284, 297, 312, 321, 330, 339,
812 348, 357, 366, 375, 384, 393, 402, 411, 420, 429,
813 438, 445, 452, 461, 470, 484, 493, 502, 509, 516,
814 523, 531, 538, 545, 552, 559, 567, 575, 583, 590,
815 597, 606, 615, 622, 629, 637, 645, 655, 665, 678,
816 689, 697, 710, 719, 728, 737, 747, 757, 765, 778,
817 787, 795, 804, 812, 825, 834, 841, 851, 861, 871,
818 881, 891, 901, 911, 921, 928, 935, 942, 951, 960,
819 969, 976, 986, 1003, 1010, 1028, 1041, 1054, 1063, 1072,
820 1081, 1090, 1100, 1110, 1119, 1128, 1135, 1144, 1153, 1162,
821 1171, 1179, 1192, 1200, 1224, 1231, 1246, 1256, 1266, 1273,
822 1280, 1289, 1298, 1306, 1319, 1332, 1345, 1354, 1364, 1374,
823 1381, 1388, 1397, 1407, 1417, 1424, 1431, 1440, 1445, 1446,
824 1447, 1447, 1447, 1448, 1448, 1448, 1449, 1449, 1451, 1461,
825 1470, 1477, 1487, 1494, 1501, 1508, 1515, 1520, 1521, 1522,
826 1522, 1523, 1523, 1524, 1524, 1525, 1526, 1527, 1528, 1529,
827 1530, 1532, 1540, 1547, 1555, 1563, 1570, 1577, 1586, 1595,
828 1604, 1613, 1622, 1631, 1636, 1637, 1638, 1640
804 0, 131, 131, 131, 132, 132, 133, 133, 134, 134,
805 138, 143, 144, 145, 145, 145, 146, 146, 147, 147,
806 147, 148, 148, 149, 149, 149, 150, 150, 150, 151,
807 151, 152, 152, 153, 153, 154, 154, 155, 155, 156,
808 156, 157, 157, 158, 158, 159, 159, 159, 160, 160,
809 160, 161, 161, 161, 162, 162, 163, 163, 164, 164,
810 165, 165, 166, 166, 166, 167, 167, 168, 168, 169,
811 169, 169, 170, 170, 171, 171, 172, 172, 173, 173,
812 173, 174, 174, 175, 175, 176, 176, 177, 177, 178,
813 178, 179, 179, 179, 180, 180, 181, 181, 181, 182,
814 182, 182, 183, 183, 183, 184, 184, 184, 185, 185,
815 185, 186, 186, 186, 187, 187, 188, 188, 189, 189,
816 190, 190, 191, 191, 191, 192, 192, 193, 193, 194,
817 194, 195, 195, 196, 196, 196, 197, 199, 211, 212,
818 213, 213, 213, 213, 213, 215, 227, 228, 229, 229,
819 229, 229, 231, 240, 249, 260, 269, 278, 287, 300,
820 315, 324, 333, 342, 351, 360, 369, 378, 387, 396,
821 405, 414, 423, 432, 441, 448, 455, 464, 473, 487,
822 496, 505, 512, 519, 526, 534, 541, 548, 555, 562,
823 570, 578, 586, 593, 600, 609, 618, 625, 632, 640,
824 648, 658, 668, 678, 691, 702, 710, 723, 732, 741,
825 750, 760, 770, 778, 791, 800, 808, 817, 825, 838,
826 847, 854, 864, 874, 884, 894, 904, 914, 924, 934,
827 941, 948, 955, 964, 973, 982, 989, 999, 1016, 1023,
828 1041, 1054, 1067, 1076, 1085, 1094, 1103, 1113, 1123, 1132,
829 1141, 1148, 1157, 1166, 1175, 1184, 1192, 1205, 1213, 1237,
830 1244, 1259, 1269, 1279, 1286, 1293, 1302, 1316, 1335, 1344,
831 1352, 1365, 1378, 1391, 1400, 1410, 1420, 1427, 1434, 1443,
832 1453, 1463, 1470, 1477, 1486, 1491, 1492, 1493, 1493, 1493,
833 1494, 1494, 1494, 1495, 1495, 1497, 1507, 1516, 1523, 1533,
834 1540, 1547, 1554, 1561, 1566, 1567, 1568, 1568, 1569, 1569,
835 1570, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1578, 1586,
836 1593, 1601, 1609, 1616, 1623, 1632, 1641, 1650, 1659, 1668,
837 1677, 1682, 1683, 1684, 1686, 1692
829838 };
830839 #endif
831840
887896 "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES",
888897 "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
889898 "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES",
890 "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT", "VAR_RATELIMIT",
891 "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN",
899 "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT",
900 "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS",
901 "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN",
892902 "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_RATELIMIT_FACTOR",
893903 "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
894 "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", "$accept",
895 "toplevelvars", "toplevelvar", "serverstart", "contents_server",
896 "content_server", "stubstart", "contents_stub", "content_stub",
897 "forwardstart", "contents_forward", "content_forward",
898 "server_num_threads", "server_verbosity", "server_statistics_interval",
904 "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", "VAR_IP_FREEBIND",
905 "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", "$accept", "toplevelvars",
906 "toplevelvar", "serverstart", "contents_server", "content_server",
907 "stubstart", "contents_stub", "content_stub", "forwardstart",
908 "contents_forward", "content_forward", "server_num_threads",
909 "server_verbosity", "server_statistics_interval",
899910 "server_statistics_cumulative", "server_extended_statistics",
900911 "server_port", "server_interface", "server_outgoing_interface",
901912 "server_outgoing_range", "server_outgoing_port_permit",
913924 "server_domain_insecure", "server_hide_identity", "server_hide_version",
914925 "server_identity", "server_version", "server_so_rcvbuf",
915926 "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent",
916 "server_edns_buffer_size", "server_msg_buffer_size",
917 "server_msg_cache_size", "server_msg_cache_slabs",
918 "server_num_queries_per_thread", "server_jostle_timeout",
919 "server_delay_close", "server_unblock_lan_zones",
920 "server_insecure_lan_zones", "server_rrset_cache_size",
921 "server_rrset_cache_slabs", "server_infra_host_ttl",
922 "server_infra_lame_ttl", "server_infra_cache_numhosts",
923 "server_infra_cache_lame_size", "server_infra_cache_slabs",
924 "server_infra_cache_min_rtt", "server_target_fetch_policy",
925 "server_harden_short_bufsize", "server_harden_large_queries",
926 "server_harden_glue", "server_harden_dnssec_stripped",
927 "server_harden_below_nxdomain", "server_harden_referral_path",
928 "server_harden_algo_downgrade", "server_use_caps_for_id",
929 "server_caps_whitelist", "server_private_address",
930 "server_private_domain", "server_prefetch", "server_prefetch_key",
931 "server_unwanted_reply_threshold", "server_do_not_query_address",
932 "server_do_not_query_localhost", "server_access_control",
933 "server_module_conf", "server_val_override_date",
934 "server_val_sig_skew_min", "server_val_sig_skew_max",
935 "server_cache_max_ttl", "server_cache_max_negative_ttl",
936 "server_cache_min_ttl", "server_bogus_ttl",
937 "server_val_clean_additional", "server_val_permissive_mode",
938 "server_ignore_cd_flag", "server_val_log_level",
939 "server_val_nsec3_keysize_iterations", "server_add_holddown",
940 "server_del_holddown", "server_keep_missing",
927 "server_ip_freebind", "server_edns_buffer_size",
928 "server_msg_buffer_size", "server_msg_cache_size",
929 "server_msg_cache_slabs", "server_num_queries_per_thread",
930 "server_jostle_timeout", "server_delay_close",
931 "server_unblock_lan_zones", "server_insecure_lan_zones",
932 "server_rrset_cache_size", "server_rrset_cache_slabs",
933 "server_infra_host_ttl", "server_infra_lame_ttl",
934 "server_infra_cache_numhosts", "server_infra_cache_lame_size",
935 "server_infra_cache_slabs", "server_infra_cache_min_rtt",
936 "server_target_fetch_policy", "server_harden_short_bufsize",
937 "server_harden_large_queries", "server_harden_glue",
938 "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
939 "server_harden_referral_path", "server_harden_algo_downgrade",
940 "server_use_caps_for_id", "server_caps_whitelist",
941 "server_private_address", "server_private_domain", "server_prefetch",
942 "server_prefetch_key", "server_unwanted_reply_threshold",
943 "server_do_not_query_address", "server_do_not_query_localhost",
944 "server_access_control", "server_module_conf",
945 "server_val_override_date", "server_val_sig_skew_min",
946 "server_val_sig_skew_max", "server_cache_max_ttl",
947 "server_cache_max_negative_ttl", "server_cache_min_ttl",
948 "server_bogus_ttl", "server_val_clean_additional",
949 "server_val_permissive_mode", "server_ignore_cd_flag",
950 "server_val_log_level", "server_val_nsec3_keysize_iterations",
951 "server_add_holddown", "server_del_holddown", "server_keep_missing",
941952 "server_permit_small_holddown", "server_key_cache_size",
942953 "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
943954 "server_local_data", "server_local_data_ptr", "server_minimal_responses",
944955 "server_rrset_roundrobin", "server_max_udp_size", "server_dns64_prefix",
945 "server_dns64_synthall", "server_ratelimit", "server_ratelimit_size",
946 "server_ratelimit_slabs", "server_ratelimit_for_domain",
947 "server_ratelimit_below_domain", "server_ratelimit_factor",
948 "server_qname_minimisation", "stub_name", "stub_host", "stub_addr",
949 "stub_first", "stub_prime", "forward_name", "forward_host",
950 "forward_addr", "forward_first", "rcstart", "contents_rc", "content_rc",
951 "rc_control_enable", "rc_control_port", "rc_control_interface",
952 "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file",
953 "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt",
954 "content_dt", "dt_dnstap_enable", "dt_dnstap_socket_path",
955 "dt_dnstap_send_identity", "dt_dnstap_send_version",
956 "dt_dnstap_identity", "dt_dnstap_version",
956 "server_dns64_synthall", "server_define_tag", "server_local_zone_tag",
957 "server_ratelimit", "server_ratelimit_size", "server_ratelimit_slabs",
958 "server_ratelimit_for_domain", "server_ratelimit_below_domain",
959 "server_ratelimit_factor", "server_qname_minimisation", "stub_name",
960 "stub_host", "stub_addr", "stub_first", "stub_prime", "forward_name",
961 "forward_host", "forward_addr", "forward_first", "rcstart",
962 "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
963 "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
964 "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
965 "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
966 "dt_dnstap_socket_path", "dt_dnstap_send_identity",
967 "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
957968 "dt_dnstap_log_resolver_query_messages",
958969 "dt_dnstap_log_resolver_response_messages",
959970 "dt_dnstap_log_client_query_messages",
960971 "dt_dnstap_log_client_response_messages",
961972 "dt_dnstap_log_forwarder_query_messages",
962973 "dt_dnstap_log_forwarder_response_messages", "pythonstart",
963 "contents_py", "content_py", "py_script", YY_NULLPTR
974 "contents_py", "content_py", "py_script",
975 "server_disable_dnssec_lame_check", YY_NULLPTR
964976 };
965977 #endif
966978
985997 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
986998 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
987999 405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
988 415, 416, 417, 418, 419, 420
1000 415, 416, 417, 418, 419, 420, 421, 422, 423, 424
9891001 };
9901002 # endif
9911003
10061018 -81, 118, -81, -81, -81, -81, -81, -81, -81, -81,
10071019 -81, -81, -81, -81, -81, -81, -12, 39, 47, 40,
10081020 36, -80, 18, 19, 20, 24, 25, 26, 69, 72,
1009 73, 74, 75, 80, 109, 120, 129, 130, 144, 145,
1010 146, 147, 149, 150, 151, 152, 153, 155, 156, 157,
1011 158, 159, 161, 162, 163, 164, 165, 166, 180, 181,
1012 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
1013 192, 193, 194, 195, 196, 197, 199, 200, 201, 202,
1014 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
1015 213, 215, 216, 217, 218, 219, 220, 221, 222, 223,
1016 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
1017 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
1018 244, 245, 246, 247, 248, 250, 251, 252, 253, 254,
1019 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1020 265, 266, -81, -81, -81, -81, -81, -81, -81, -81,
1021 73, 74, 75, 80, 109, 120, 129, 130, 149, 150,
1022 151, 152, 153, 155, 156, 157, 158, 159, 161, 162,
1023 163, 164, 165, 166, 180, 181, 182, 183, 184, 185,
1024 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
1025 196, 197, 199, 200, 201, 202, 203, 204, 205, 206,
1026 207, 208, 209, 210, 211, 212, 213, 215, 216, 217,
1027 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
1028 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
1029 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
1030 248, 250, 251, 252, 253, 254, 255, 256, 257, 258,
1031 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
1032 269, 270, 271, 272, 273, 274, -81, -81, -81, -81,
10211033 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10221034 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10231035 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10291041 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10301042 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10311043 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
1032 -81, -81, -81, 267, 268, 269, 270, 271, -81, -81,
1033 -81, -81, -81, -81, 272, 273, 274, 275, -81, -81,
1034 -81, -81, -81, 276, 277, 278, 279, 280, 281, 282,
1035 283, -81, -81, -81, -81, -81, -81, -81, -81, -81,
1036 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
1037 294, 295, -81, -81, -81, -81, -81, -81, -81, -81,
1038 -81, -81, -81, -81, -81, 296, -81, -81, -81, -81,
1044 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
1045 -81, 275, 276, 277, 278, 279, -81, -81, -81, -81,
1046 -81, -81, 280, 281, 282, 283, -81, -81, -81, -81,
1047 -81, 284, 285, 286, 287, 288, 289, 290, 291, -81,
1048 -81, -81, -81, -81, -81, -81, -81, -81, 292, 293,
1049 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
1050 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
1051 -81, -81, -81, 304, -81, -81, -81, -81, -81, -81,
10391052 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10401053 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10411054 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10421055 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10431056 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
1044 -81, -81, -81, 297, 298, -81, -81, -81, -81, -81,
1057 -81, 305, 306, -81, -81, -81, -81, -81, -81, -81,
10451058 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10461059 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10471060 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10481061 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10491062 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
1050 -81, 299, 300, -81, -81, -81, -81, -81, -81, -81,
1063 307, 308, -81, -81, -81, -81, -81, -81, -81, 309,
10511064 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10521065 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
10531066 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
1054 -81, -81
1067 -81, -81, -81, -81, -81
10551068 };
10561069
10571070 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
10591072 means the default is an error. */
10601073 static const yytype_uint16 yydefact[] =
10611074 {
1062 2, 0, 1, 10, 133, 141, 277, 323, 296, 3,
1063 12, 135, 143, 279, 298, 325, 4, 5, 6, 8,
1075 2, 0, 1, 10, 137, 145, 284, 330, 303, 3,
1076 12, 139, 147, 286, 305, 332, 4, 5, 6, 8,
10641077 9, 7, 0, 0, 0, 0, 0, 0, 0, 0,
10651078 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10661079 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10731086 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10741087 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10751088 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1076 0, 0, 11, 13, 14, 72, 75, 84, 15, 23,
1077 63, 16, 76, 77, 34, 56, 71, 17, 18, 19,
1078 20, 21, 22, 106, 107, 108, 109, 110, 73, 62,
1079 88, 105, 24, 25, 26, 27, 28, 64, 78, 79,
1080 94, 50, 60, 51, 89, 44, 45, 46, 47, 98,
1081 102, 114, 122, 99, 57, 29, 30, 31, 86, 115,
1082 116, 117, 32, 33, 35, 36, 38, 39, 37, 120,
1083 40, 41, 42, 48, 67, 103, 81, 121, 74, 129,
1084 82, 83, 100, 101, 87, 43, 65, 68, 49, 52,
1085 90, 91, 66, 130, 92, 53, 54, 55, 104, 93,
1086 61, 95, 96, 97, 131, 58, 59, 80, 69, 70,
1087 85, 111, 112, 113, 118, 119, 123, 125, 124, 126,
1088 127, 128, 132, 0, 0, 0, 0, 0, 134, 136,
1089 137, 138, 140, 139, 0, 0, 0, 0, 142, 144,
1090 145, 146, 147, 0, 0, 0, 0, 0, 0, 0,
1091 0, 278, 280, 282, 281, 287, 283, 284, 285, 286,
1089 0, 0, 0, 0, 0, 0, 11, 13, 14, 72,
1090 75, 84, 15, 23, 63, 16, 76, 77, 34, 56,
1091 71, 17, 18, 19, 20, 21, 22, 106, 107, 108,
1092 109, 110, 73, 62, 88, 105, 24, 25, 26, 27,
1093 28, 64, 78, 79, 94, 50, 60, 51, 89, 44,
1094 45, 46, 47, 98, 102, 114, 122, 133, 99, 57,
1095 29, 30, 31, 86, 115, 116, 117, 32, 33, 35,
1096 36, 38, 39, 37, 120, 40, 41, 42, 48, 67,
1097 103, 81, 121, 74, 129, 82, 83, 100, 101, 87,
1098 43, 65, 68, 49, 52, 90, 91, 66, 130, 92,
1099 53, 54, 55, 104, 93, 61, 95, 96, 97, 131,
1100 58, 59, 80, 69, 70, 85, 111, 112, 113, 118,
1101 119, 134, 135, 123, 125, 124, 126, 127, 128, 132,
1102 136, 0, 0, 0, 0, 0, 138, 140, 141, 142,
1103 144, 143, 0, 0, 0, 0, 146, 148, 149, 150,
1104 151, 0, 0, 0, 0, 0, 0, 0, 0, 285,
1105 287, 289, 288, 294, 290, 291, 292, 293, 0, 0,
10921106 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1093 0, 0, 297, 299, 300, 301, 302, 303, 304, 305,
1094 306, 307, 308, 309, 310, 0, 324, 326, 149, 148,
1095 153, 156, 154, 162, 163, 164, 165, 166, 167, 177,
1096 178, 179, 180, 181, 200, 201, 202, 207, 208, 159,
1097 209, 210, 213, 211, 212, 215, 216, 217, 230, 190,
1098 191, 192, 193, 218, 233, 186, 188, 234, 240, 241,
1099 242, 160, 199, 250, 251, 187, 245, 174, 155, 182,
1100 231, 237, 219, 0, 0, 254, 161, 150, 173, 223,
1101 151, 157, 158, 183, 184, 252, 221, 225, 226, 152,
1102 255, 203, 229, 175, 189, 235, 236, 239, 244, 185,
1103 248, 246, 247, 194, 198, 227, 228, 195, 196, 220,
1104 243, 176, 168, 169, 170, 171, 172, 256, 257, 258,
1105 204, 205, 206, 214, 259, 260, 222, 197, 261, 263,
1106 262, 0, 0, 266, 224, 238, 249, 267, 268, 269,
1107 270, 272, 271, 273, 274, 275, 276, 288, 290, 289,
1108 292, 293, 294, 295, 291, 311, 312, 313, 314, 315,
1109 316, 317, 318, 319, 320, 321, 322, 327, 232, 253,
1110 264, 265
1107 304, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1108 315, 316, 317, 0, 331, 333, 153, 152, 157, 160,
1109 158, 166, 167, 168, 169, 170, 171, 181, 182, 183,
1110 184, 185, 205, 206, 207, 212, 213, 163, 214, 215,
1111 218, 216, 217, 220, 221, 222, 235, 194, 195, 196,
1112 197, 223, 238, 190, 192, 239, 245, 246, 247, 164,
1113 204, 255, 256, 191, 250, 178, 159, 186, 236, 242,
1114 224, 0, 0, 259, 165, 154, 177, 228, 155, 161,
1115 162, 187, 188, 257, 226, 230, 231, 156, 260, 208,
1116 234, 179, 193, 240, 241, 244, 249, 189, 253, 251,
1117 252, 198, 203, 232, 233, 199, 200, 225, 248, 180,
1118 172, 173, 174, 175, 176, 261, 262, 263, 209, 210,
1119 211, 219, 264, 265, 227, 201, 335, 268, 270, 269,
1120 0, 0, 273, 229, 243, 254, 274, 202, 266, 0,
1121 275, 276, 277, 279, 278, 280, 281, 282, 283, 295,
1122 297, 296, 299, 300, 301, 302, 298, 318, 319, 320,
1123 321, 322, 323, 324, 325, 326, 327, 328, 329, 334,
1124 237, 258, 271, 272, 267
11111125 };
11121126
11131127 /* YYPGOTO[NTERM-NUM]. */
11301144 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
11311145 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
11321146 -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
1133 -81
1147 -81, -81, -81, -81, -81
11341148 };
11351149
11361150 /* YYDEFGOTO[NTERM-NUM]. */
11371151 static const yytype_int16 yydefgoto[] =
11381152 {
1139 -1, 1, 9, 10, 16, 142, 11, 17, 268, 12,
1140 18, 278, 143, 144, 145, 146, 147, 148, 149, 150,
1141 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
1142 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
1143 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
1144 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
1145 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
1146 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
1147 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
1148 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
1149 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
1150 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
1151 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
1152 261, 262, 269, 270, 271, 272, 273, 279, 280, 281,
1153 282, 13, 19, 291, 292, 293, 294, 295, 296, 297,
1154 298, 299, 14, 20, 312, 313, 314, 315, 316, 317,
1155 318, 319, 320, 321, 322, 323, 324, 15, 21, 326,
1156 327
1153 -1, 1, 9, 10, 16, 146, 11, 17, 276, 12,
1154 18, 286, 147, 148, 149, 150, 151, 152, 153, 154,
1155 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
1156 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
1157 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
1158 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
1159 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
1160 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
1161 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
1162 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
1163 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
1164 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
1165 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1166 265, 266, 267, 268, 269, 277, 278, 279, 280, 281,
1167 287, 288, 289, 290, 13, 19, 299, 300, 301, 302,
1168 303, 304, 305, 306, 307, 14, 20, 320, 321, 322,
1169 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
1170 15, 21, 334, 335, 270
11571171 };
11581172
11591173 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
11631177 {
11641178 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
11651179 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
1166 42, 43, 44, 45, 46, 47, 48, 325, 328, 329,
1167 330, 49, 50, 51, 331, 332, 333, 52, 53, 54,
1180 42, 43, 44, 45, 46, 47, 48, 333, 336, 337,
1181 338, 49, 50, 51, 339, 340, 341, 52, 53, 54,
11681182 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
11691183 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
11701184 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1171 85, 86, 87, 88, 89, 90, 91, 92, 263, 334,
1172 264, 265, 335, 336, 337, 338, 274, 93, 94, 95,
1173 339, 96, 97, 98, 275, 276, 99, 100, 101, 102,
1185 85, 86, 87, 88, 89, 90, 91, 92, 271, 342,
1186 272, 273, 343, 344, 345, 346, 282, 93, 94, 95,
1187 347, 96, 97, 98, 283, 284, 99, 100, 101, 102,
11741188 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
1175 113, 114, 115, 116, 117, 118, 119, 120, 2, 340,
1189 113, 114, 115, 116, 117, 118, 119, 120, 2, 348,
11761190 121, 122, 123, 124, 125, 126, 127, 128, 129, 3,
1177 341, 283, 284, 285, 286, 287, 288, 289, 290, 342,
1178 343, 266, 130, 131, 132, 133, 134, 135, 136, 137,
1179 138, 139, 140, 141, 344, 345, 346, 347, 4, 348,
1180 349, 350, 351, 352, 5, 353, 354, 355, 356, 357,
1181 267, 358, 359, 360, 361, 362, 363, 277, 300, 301,
1182 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
1183 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
1184 374, 375, 376, 377, 378, 379, 380, 381, 6, 382,
1185 383, 384, 385, 386, 387, 388, 389, 390, 391, 392,
1186 393, 394, 395, 396, 7, 397, 398, 399, 400, 401,
1187 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
1188 412, 413, 414, 415, 416, 417, 418, 419, 420, 421,
1189 422, 423, 424, 425, 426, 427, 428, 429, 430, 8,
1190 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
1191 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
1192 451, 452, 453, 454, 455, 456, 457, 458, 459, 460,
1193 461, 462, 463, 464, 465, 466, 467, 468, 469, 470,
1194 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
1195 481
1191 349, 291, 292, 293, 294, 295, 296, 297, 298, 350,
1192 351, 274, 130, 131, 132, 133, 134, 135, 136, 137,
1193 138, 139, 140, 141, 142, 143, 144, 145, 4, 352,
1194 353, 354, 355, 356, 5, 357, 358, 359, 360, 361,
1195 275, 362, 363, 364, 365, 366, 367, 285, 308, 309,
1196 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
1197 368, 369, 370, 371, 372, 373, 374, 375, 376, 377,
1198 378, 379, 380, 381, 382, 383, 384, 385, 6, 386,
1199 387, 388, 389, 390, 391, 392, 393, 394, 395, 396,
1200 397, 398, 399, 400, 7, 401, 402, 403, 404, 405,
1201 406, 407, 408, 409, 410, 411, 412, 413, 414, 415,
1202 416, 417, 418, 419, 420, 421, 422, 423, 424, 425,
1203 426, 427, 428, 429, 430, 431, 432, 433, 434, 8,
1204 435, 436, 437, 438, 439, 440, 441, 442, 443, 444,
1205 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
1206 455, 456, 457, 458, 459, 460, 461, 462, 463, 464,
1207 465, 466, 467, 468, 469, 470, 471, 472, 473, 474,
1208 475, 476, 477, 478, 479, 480, 481, 482, 483, 484,
1209 485, 486, 487, 488, 489, 490, 491, 492, 493, 494
11961210 };
11971211
11981212 static const yytype_uint8 yycheck[] =
12121226 132, 133, 134, 135, 136, 137, 138, 139, 140, 11,
12131227 10, 91, 92, 93, 94, 95, 96, 97, 98, 10,
12141228 10, 102, 154, 155, 156, 157, 158, 159, 160, 161,
1215 162, 163, 164, 165, 10, 10, 10, 10, 40, 10,
1229 162, 163, 164, 165, 166, 167, 168, 169, 40, 10,
12161230 10, 10, 10, 10, 46, 10, 10, 10, 10, 10,
12171231 131, 10, 10, 10, 10, 10, 10, 130, 142, 143,
12181232 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
12281242 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
12291243 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
12301244 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1231 10
1245 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
12321246 };
12331247
12341248 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
12351249 symbol of state STATE-NUM. */
12361250 static const yytype_uint16 yystos[] =
12371251 {
1238 0, 167, 0, 11, 40, 46, 90, 106, 141, 168,
1239 169, 172, 175, 307, 318, 333, 170, 173, 176, 308,
1240 319, 334, 12, 13, 14, 15, 16, 17, 18, 19,
1252 0, 171, 0, 11, 40, 46, 90, 106, 141, 172,
1253 173, 176, 179, 314, 325, 340, 174, 177, 180, 315,
1254 326, 341, 12, 13, 14, 15, 16, 17, 18, 19,
12411255 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
12421256 30, 31, 32, 33, 34, 35, 36, 37, 38, 43,
12431257 44, 45, 49, 50, 51, 52, 53, 54, 55, 56,
12491263 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
12501264 129, 132, 133, 134, 135, 136, 137, 138, 139, 140,
12511265 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
1252 164, 165, 171, 178, 179, 180, 181, 182, 183, 184,
1266 164, 165, 166, 167, 168, 169, 175, 182, 183, 184,
12531267 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
12541268 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
12551269 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
12611275 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
12621276 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
12631277 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1264 295, 296, 297, 39, 41, 42, 102, 131, 174, 298,
1265 299, 300, 301, 302, 39, 47, 48, 130, 177, 303,
1266 304, 305, 306, 91, 92, 93, 94, 95, 96, 97,
1267 98, 309, 310, 311, 312, 313, 314, 315, 316, 317,
1268 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
1269 152, 153, 320, 321, 322, 323, 324, 325, 326, 327,
1270 328, 329, 330, 331, 332, 107, 335, 336, 10, 10,
1278 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1279 344, 39, 41, 42, 102, 131, 178, 305, 306, 307,
1280 308, 309, 39, 47, 48, 130, 181, 310, 311, 312,
1281 313, 91, 92, 93, 94, 95, 96, 97, 98, 316,
1282 317, 318, 319, 320, 321, 322, 323, 324, 142, 143,
1283 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
1284 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
1285 337, 338, 339, 107, 342, 343, 10, 10, 10, 10,
12711286 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
12721287 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
12731288 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
12831298 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
12841299 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
12851300 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1286 10, 10
1301 10, 10, 10, 10, 10
12871302 };
12881303
12891304 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
12901305 static const yytype_uint16 yyr1[] =
12911306 {
1292 0, 166, 167, 167, 168, 168, 168, 168, 168, 168,
1293 169, 170, 170, 171, 171, 171, 171, 171, 171, 171,
1294 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1295 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1296 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1297 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1298 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1299 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1300 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1301 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1302 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1303 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1304 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
1305 171, 171, 171, 172, 173, 173, 174, 174, 174, 174,
1306 174, 175, 176, 176, 177, 177, 177, 177, 178, 179,
1307 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
1307 0, 170, 171, 171, 172, 172, 172, 172, 172, 172,
1308 173, 174, 174, 175, 175, 175, 175, 175, 175, 175,
1309 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1310 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1311 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1312 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1313 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1314 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1315 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1316 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1317 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1318 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1319 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1320 175, 175, 175, 175, 175, 175, 175, 176, 177, 177,
1321 178, 178, 178, 178, 178, 179, 180, 180, 181, 181,
1322 181, 181, 182, 183, 184, 185, 186, 187, 188, 189,
13081323 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
13091324 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
13101325 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
13161331 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
13171332 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
13181333 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
1319 300, 301, 302, 303, 304, 305, 306, 307, 308, 308,
1320 309, 309, 309, 309, 309, 309, 309, 309, 310, 311,
1321 312, 313, 314, 315, 316, 317, 318, 319, 319, 320,
1322 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
1323 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
1324 330, 331, 332, 333, 334, 334, 335, 336
1334 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
1335 310, 311, 312, 313, 314, 315, 315, 316, 316, 316,
1336 316, 316, 316, 316, 316, 317, 318, 319, 320, 321,
1337 322, 323, 324, 325, 326, 326, 327, 327, 327, 327,
1338 327, 327, 327, 327, 327, 327, 327, 327, 328, 329,
1339 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
1340 340, 341, 341, 342, 343, 344
13251341 };
13261342
13271343 /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
13401356 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
13411357 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
13421358 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1343 1, 1, 1, 1, 2, 0, 1, 1, 1, 1,
1344 1, 1, 2, 0, 1, 1, 1, 1, 2, 2,
1359 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
1360 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
1361 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
13451362 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
13461363 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
13471364 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
13491366 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
13501367 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
13511368 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1369 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
13521370 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1353 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
1371 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
1372 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
1373 2, 3, 3, 2, 2, 2, 2, 2, 2, 2,
1374 2, 2, 2, 2, 1, 2, 0, 1, 1, 1,
1375 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
1376 2, 2, 2, 1, 2, 0, 1, 1, 1, 1,
1377 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
13541378 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1355 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
1356 2, 2, 2, 2, 3, 3, 2, 2, 2, 2,
1357 2, 2, 2, 2, 2, 2, 2, 1, 2, 0,
1358 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
1359 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
1360 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1361 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1362 2, 2, 2, 1, 2, 0, 1, 2
1379 1, 2, 0, 1, 2, 2
13631380 };
13641381
13651382
20362053 switch (yyn)
20372054 {
20382055 case 10:
2039 #line 138 "util/configparser.y" /* yacc.c:1646 */
2056 #line 139 "util/configparser.y" /* yacc.c:1646 */
20402057 {
20412058 OUTYY(("\nP(server:)\n"));
20422059 }
2043 #line 2045 "util/configparser.c" /* yacc.c:1646 */
2044 break;
2045
2046 case 133:
2047 #line 197 "util/configparser.y" /* yacc.c:1646 */
2060 #line 2062 "util/configparser.c" /* yacc.c:1646 */
2061 break;
2062
2063 case 137:
2064 #line 200 "util/configparser.y" /* yacc.c:1646 */
20482065 {
20492066 struct config_stub* s;
20502067 OUTYY(("\nP(stub_zone:)\n"));
20552072 } else
20562073 yyerror("out of memory");
20572074 }
2058 #line 2060 "util/configparser.c" /* yacc.c:1646 */
2059 break;
2060
2061 case 141:
2062 #line 213 "util/configparser.y" /* yacc.c:1646 */
2075 #line 2077 "util/configparser.c" /* yacc.c:1646 */
2076 break;
2077
2078 case 145:
2079 #line 216 "util/configparser.y" /* yacc.c:1646 */
20632080 {
20642081 struct config_stub* s;
20652082 OUTYY(("\nP(forward_zone:)\n"));
20702087 } else
20712088 yyerror("out of memory");
20722089 }
2073 #line 2075 "util/configparser.c" /* yacc.c:1646 */
2074 break;
2075
2076 case 148:
2077 #line 229 "util/configparser.y" /* yacc.c:1646 */
2090 #line 2092 "util/configparser.c" /* yacc.c:1646 */
2091 break;
2092
2093 case 152:
2094 #line 232 "util/configparser.y" /* yacc.c:1646 */
20782095 {
20792096 OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
20802097 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
20822099 else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
20832100 free((yyvsp[0].str));
20842101 }
2085 #line 2087 "util/configparser.c" /* yacc.c:1646 */
2086 break;
2087
2088 case 149:
2089 #line 238 "util/configparser.y" /* yacc.c:1646 */
2102 #line 2104 "util/configparser.c" /* yacc.c:1646 */
2103 break;
2104
2105 case 153:
2106 #line 241 "util/configparser.y" /* yacc.c:1646 */
20902107 {
20912108 OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
20922109 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
20942111 else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
20952112 free((yyvsp[0].str));
20962113 }
2097 #line 2099 "util/configparser.c" /* yacc.c:1646 */
2098 break;
2099
2100 case 150:
2101 #line 247 "util/configparser.y" /* yacc.c:1646 */
2114 #line 2116 "util/configparser.c" /* yacc.c:1646 */
2115 break;
2116
2117 case 154:
2118 #line 250 "util/configparser.y" /* yacc.c:1646 */
21022119 {
21032120 OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
21042121 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
21082125 else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
21092126 free((yyvsp[0].str));
21102127 }
2111 #line 2113 "util/configparser.c" /* yacc.c:1646 */
2112 break;
2113
2114 case 151:
2115 #line 258 "util/configparser.y" /* yacc.c:1646 */
2128 #line 2130 "util/configparser.c" /* yacc.c:1646 */
2129 break;
2130
2131 case 155:
2132 #line 261 "util/configparser.y" /* yacc.c:1646 */
21162133 {
21172134 OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
21182135 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
21202137 else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
21212138 free((yyvsp[0].str));
21222139 }
2123 #line 2125 "util/configparser.c" /* yacc.c:1646 */
2124 break;
2125
2126 case 152:
2127 #line 267 "util/configparser.y" /* yacc.c:1646 */
2140 #line 2142 "util/configparser.c" /* yacc.c:1646 */
2141 break;
2142
2143 case 156:
2144 #line 270 "util/configparser.y" /* yacc.c:1646 */
21282145 {
21292146 OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
21302147 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
21322149 else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
21332150 free((yyvsp[0].str));
21342151 }
2135 #line 2137 "util/configparser.c" /* yacc.c:1646 */
2136 break;
2137
2138 case 153:
2139 #line 276 "util/configparser.y" /* yacc.c:1646 */
2152 #line 2154 "util/configparser.c" /* yacc.c:1646 */
2153 break;
2154
2155 case 157:
2156 #line 279 "util/configparser.y" /* yacc.c:1646 */
21402157 {
21412158 OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
21422159 if(atoi((yyvsp[0].str)) == 0)
21442161 else cfg_parser->cfg->port = atoi((yyvsp[0].str));
21452162 free((yyvsp[0].str));
21462163 }
2147 #line 2149 "util/configparser.c" /* yacc.c:1646 */
2148 break;
2149
2150 case 154:
2151 #line 285 "util/configparser.y" /* yacc.c:1646 */
2164 #line 2166 "util/configparser.c" /* yacc.c:1646 */
2165 break;
2166
2167 case 158:
2168 #line 288 "util/configparser.y" /* yacc.c:1646 */
21522169 {
21532170 OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
21542171 if(cfg_parser->cfg->num_ifs == 0)
21602177 else
21612178 cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
21622179 }
2163 #line 2165 "util/configparser.c" /* yacc.c:1646 */
2164 break;
2165
2166 case 155:
2167 #line 298 "util/configparser.y" /* yacc.c:1646 */
2180 #line 2182 "util/configparser.c" /* yacc.c:1646 */
2181 break;
2182
2183 case 159:
2184 #line 301 "util/configparser.y" /* yacc.c:1646 */
21682185 {
21692186 OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
21702187 if(cfg_parser->cfg->num_out_ifs == 0)
21782195 cfg_parser->cfg->out_ifs[
21792196 cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
21802197 }
2181 #line 2183 "util/configparser.c" /* yacc.c:1646 */
2182 break;
2183
2184 case 156:
2185 #line 313 "util/configparser.y" /* yacc.c:1646 */
2198 #line 2200 "util/configparser.c" /* yacc.c:1646 */
2199 break;
2200
2201 case 160:
2202 #line 316 "util/configparser.y" /* yacc.c:1646 */
21862203 {
21872204 OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
21882205 if(atoi((yyvsp[0].str)) == 0)
21902207 else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
21912208 free((yyvsp[0].str));
21922209 }
2193 #line 2195 "util/configparser.c" /* yacc.c:1646 */
2194 break;
2195
2196 case 157:
2197 #line 322 "util/configparser.y" /* yacc.c:1646 */
2210 #line 2212 "util/configparser.c" /* yacc.c:1646 */
2211 break;
2212
2213 case 161:
2214 #line 325 "util/configparser.y" /* yacc.c:1646 */
21982215 {
21992216 OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
22002217 if(!cfg_mark_ports((yyvsp[0].str), 1,
22022219 yyerror("port number or range (\"low-high\") expected");
22032220 free((yyvsp[0].str));
22042221 }
2205 #line 2207 "util/configparser.c" /* yacc.c:1646 */
2206 break;
2207
2208 case 158:
2209 #line 331 "util/configparser.y" /* yacc.c:1646 */
2222 #line 2224 "util/configparser.c" /* yacc.c:1646 */
2223 break;
2224
2225 case 162:
2226 #line 334 "util/configparser.y" /* yacc.c:1646 */
22102227 {
22112228 OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
22122229 if(!cfg_mark_ports((yyvsp[0].str), 0,
22142231 yyerror("port number or range (\"low-high\") expected");
22152232 free((yyvsp[0].str));
22162233 }
2217 #line 2219 "util/configparser.c" /* yacc.c:1646 */
2218 break;
2219
2220 case 159:
2221 #line 340 "util/configparser.y" /* yacc.c:1646 */
2234 #line 2236 "util/configparser.c" /* yacc.c:1646 */
2235 break;
2236
2237 case 163:
2238 #line 343 "util/configparser.y" /* yacc.c:1646 */
22222239 {
22232240 OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
22242241 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
22262243 else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
22272244 free((yyvsp[0].str));
22282245 }
2229 #line 2231 "util/configparser.c" /* yacc.c:1646 */
2230 break;
2231
2232 case 160:
2233 #line 349 "util/configparser.y" /* yacc.c:1646 */
2246 #line 2248 "util/configparser.c" /* yacc.c:1646 */
2247 break;
2248
2249 case 164:
2250 #line 352 "util/configparser.y" /* yacc.c:1646 */
22342251 {
22352252 OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
22362253 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
22382255 else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
22392256 free((yyvsp[0].str));
22402257 }
2241 #line 2243 "util/configparser.c" /* yacc.c:1646 */
2242 break;
2243
2244 case 161:
2245 #line 358 "util/configparser.y" /* yacc.c:1646 */
2258 #line 2260 "util/configparser.c" /* yacc.c:1646 */
2259 break;
2260
2261 case 165:
2262 #line 361 "util/configparser.y" /* yacc.c:1646 */
22462263 {
22472264 OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
22482265 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
22502267 else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
22512268 free((yyvsp[0].str));
22522269 }
2253 #line 2255 "util/configparser.c" /* yacc.c:1646 */
2254 break;
2255
2256 case 162:
2257 #line 367 "util/configparser.y" /* yacc.c:1646 */
2270 #line 2272 "util/configparser.c" /* yacc.c:1646 */
2271 break;
2272
2273 case 166:
2274 #line 370 "util/configparser.y" /* yacc.c:1646 */
22582275 {
22592276 OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
22602277 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
22622279 else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
22632280 free((yyvsp[0].str));
22642281 }
2265 #line 2267 "util/configparser.c" /* yacc.c:1646 */
2266 break;
2267
2268 case 163:
2269 #line 376 "util/configparser.y" /* yacc.c:1646 */
2282 #line 2284 "util/configparser.c" /* yacc.c:1646 */
2283 break;
2284
2285 case 167:
2286 #line 379 "util/configparser.y" /* yacc.c:1646 */
22702287 {
22712288 OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
22722289 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
22742291 else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
22752292 free((yyvsp[0].str));
22762293 }
2277 #line 2279 "util/configparser.c" /* yacc.c:1646 */
2278 break;
2279
2280 case 164:
2281 #line 385 "util/configparser.y" /* yacc.c:1646 */
2294 #line 2296 "util/configparser.c" /* yacc.c:1646 */
2295 break;
2296
2297 case 168:
2298 #line 388 "util/configparser.y" /* yacc.c:1646 */
22822299 {
22832300 OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
22842301 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
22862303 else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
22872304 free((yyvsp[0].str));
22882305 }
2289 #line 2291 "util/configparser.c" /* yacc.c:1646 */
2290 break;
2291
2292 case 165:
2293 #line 394 "util/configparser.y" /* yacc.c:1646 */
2306 #line 2308 "util/configparser.c" /* yacc.c:1646 */
2307 break;
2308
2309 case 169:
2310 #line 397 "util/configparser.y" /* yacc.c:1646 */
22942311 {
22952312 OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
22962313 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
22982315 else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
22992316 free((yyvsp[0].str));
23002317 }
2301 #line 2303 "util/configparser.c" /* yacc.c:1646 */
2302 break;
2303
2304 case 166:
2305 #line 403 "util/configparser.y" /* yacc.c:1646 */
2318 #line 2320 "util/configparser.c" /* yacc.c:1646 */
2319 break;
2320
2321 case 170:
2322 #line 406 "util/configparser.y" /* yacc.c:1646 */
23062323 {
23072324 OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
23082325 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
23102327 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
23112328 free((yyvsp[0].str));
23122329 }
2313 #line 2315 "util/configparser.c" /* yacc.c:1646 */
2314 break;
2315
2316 case 167:
2317 #line 412 "util/configparser.y" /* yacc.c:1646 */
2330 #line 2332 "util/configparser.c" /* yacc.c:1646 */
2331 break;
2332
2333 case 171:
2334 #line 415 "util/configparser.y" /* yacc.c:1646 */
23182335 {
23192336 OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
23202337 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
23222339 else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
23232340 free((yyvsp[0].str));
23242341 }
2325 #line 2327 "util/configparser.c" /* yacc.c:1646 */
2326 break;
2327
2328 case 168:
2329 #line 421 "util/configparser.y" /* yacc.c:1646 */
2342 #line 2344 "util/configparser.c" /* yacc.c:1646 */
2343 break;
2344
2345 case 172:
2346 #line 424 "util/configparser.y" /* yacc.c:1646 */
23302347 {
23312348 OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
23322349 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
23342351 else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
23352352 free((yyvsp[0].str));
23362353 }
2337 #line 2339 "util/configparser.c" /* yacc.c:1646 */
2338 break;
2339
2340 case 169:
2341 #line 430 "util/configparser.y" /* yacc.c:1646 */
2354 #line 2356 "util/configparser.c" /* yacc.c:1646 */
2355 break;
2356
2357 case 173:
2358 #line 433 "util/configparser.y" /* yacc.c:1646 */
23422359 {
23432360 OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
23442361 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
23462363 else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
23472364 free((yyvsp[0].str));
23482365 }
2349 #line 2351 "util/configparser.c" /* yacc.c:1646 */
2350 break;
2351
2352 case 170:
2353 #line 439 "util/configparser.y" /* yacc.c:1646 */
2366 #line 2368 "util/configparser.c" /* yacc.c:1646 */
2367 break;
2368
2369 case 174:
2370 #line 442 "util/configparser.y" /* yacc.c:1646 */
23542371 {
23552372 OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
23562373 free(cfg_parser->cfg->ssl_service_key);
23572374 cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
23582375 }
2359 #line 2361 "util/configparser.c" /* yacc.c:1646 */
2360 break;
2361
2362 case 171:
2363 #line 446 "util/configparser.y" /* yacc.c:1646 */
2376 #line 2378 "util/configparser.c" /* yacc.c:1646 */
2377 break;
2378
2379 case 175:
2380 #line 449 "util/configparser.y" /* yacc.c:1646 */
23642381 {
23652382 OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
23662383 free(cfg_parser->cfg->ssl_service_pem);
23672384 cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
23682385 }
2369 #line 2371 "util/configparser.c" /* yacc.c:1646 */
2370 break;
2371
2372 case 172:
2373 #line 453 "util/configparser.y" /* yacc.c:1646 */
2386 #line 2388 "util/configparser.c" /* yacc.c:1646 */
2387 break;
2388
2389 case 176:
2390 #line 456 "util/configparser.y" /* yacc.c:1646 */
23742391 {
23752392 OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
23762393 if(atoi((yyvsp[0].str)) == 0)
23782395 else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
23792396 free((yyvsp[0].str));
23802397 }
2381 #line 2383 "util/configparser.c" /* yacc.c:1646 */
2382 break;
2383
2384 case 173:
2385 #line 462 "util/configparser.y" /* yacc.c:1646 */
2398 #line 2400 "util/configparser.c" /* yacc.c:1646 */
2399 break;
2400
2401 case 177:
2402 #line 465 "util/configparser.y" /* yacc.c:1646 */
23862403 {
23872404 OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
23882405 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
23902407 else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
23912408 free((yyvsp[0].str));
23922409 }
2393 #line 2395 "util/configparser.c" /* yacc.c:1646 */
2394 break;
2395
2396 case 174:
2397 #line 471 "util/configparser.y" /* yacc.c:1646 */
2410 #line 2412 "util/configparser.c" /* yacc.c:1646 */
2411 break;
2412
2413 case 178:
2414 #line 474 "util/configparser.y" /* yacc.c:1646 */
23982415 {
23992416 OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
24002417 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
24072424 #endif
24082425 free((yyvsp[0].str));
24092426 }
2410 #line 2412 "util/configparser.c" /* yacc.c:1646 */
2411 break;
2412
2413 case 175:
2414 #line 485 "util/configparser.y" /* yacc.c:1646 */
2427 #line 2429 "util/configparser.c" /* yacc.c:1646 */
2428 break;
2429
2430 case 179:
2431 #line 488 "util/configparser.y" /* yacc.c:1646 */
24152432 {
24162433 OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
24172434 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
24192436 else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
24202437 free((yyvsp[0].str));
24212438 }
2422 #line 2424 "util/configparser.c" /* yacc.c:1646 */
2423 break;
2424
2425 case 176:
2426 #line 494 "util/configparser.y" /* yacc.c:1646 */
2439 #line 2441 "util/configparser.c" /* yacc.c:1646 */
2440 break;
2441
2442 case 180:
2443 #line 497 "util/configparser.y" /* yacc.c:1646 */
24272444 {
24282445 OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
24292446 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
24312448 else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
24322449 free((yyvsp[0].str));
24332450 }
2434 #line 2436 "util/configparser.c" /* yacc.c:1646 */
2435 break;
2436
2437 case 177:
2438 #line 503 "util/configparser.y" /* yacc.c:1646 */
2451 #line 2453 "util/configparser.c" /* yacc.c:1646 */
2452 break;
2453
2454 case 181:
2455 #line 506 "util/configparser.y" /* yacc.c:1646 */
24392456 {
24402457 OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
24412458 free(cfg_parser->cfg->chrootdir);
24422459 cfg_parser->cfg->chrootdir = (yyvsp[0].str);
24432460 }
2444 #line 2446 "util/configparser.c" /* yacc.c:1646 */
2445 break;
2446
2447 case 178:
2448 #line 510 "util/configparser.y" /* yacc.c:1646 */
2461 #line 2463 "util/configparser.c" /* yacc.c:1646 */
2462 break;
2463
2464 case 182:
2465 #line 513 "util/configparser.y" /* yacc.c:1646 */
24492466 {
24502467 OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
24512468 free(cfg_parser->cfg->username);
24522469 cfg_parser->cfg->username = (yyvsp[0].str);
24532470 }
2454 #line 2456 "util/configparser.c" /* yacc.c:1646 */
2455 break;
2456
2457 case 179:
2458 #line 517 "util/configparser.y" /* yacc.c:1646 */
2471 #line 2473 "util/configparser.c" /* yacc.c:1646 */
2472 break;
2473
2474 case 183:
2475 #line 520 "util/configparser.y" /* yacc.c:1646 */
24592476 {
24602477 OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
24612478 free(cfg_parser->cfg->directory);
24622479 cfg_parser->cfg->directory = (yyvsp[0].str);
24632480 }
2464 #line 2466 "util/configparser.c" /* yacc.c:1646 */
2465 break;
2466
2467 case 180:
2468 #line 524 "util/configparser.y" /* yacc.c:1646 */
2481 #line 2483 "util/configparser.c" /* yacc.c:1646 */
2482 break;
2483
2484 case 184:
2485 #line 527 "util/configparser.y" /* yacc.c:1646 */
24692486 {
24702487 OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
24712488 free(cfg_parser->cfg->logfile);
24722489 cfg_parser->cfg->logfile = (yyvsp[0].str);
24732490 cfg_parser->cfg->use_syslog = 0;
24742491 }
2475 #line 2477 "util/configparser.c" /* yacc.c:1646 */
2476 break;
2477
2478 case 181:
2479 #line 532 "util/configparser.y" /* yacc.c:1646 */
2492 #line 2494 "util/configparser.c" /* yacc.c:1646 */
2493 break;
2494
2495 case 185:
2496 #line 535 "util/configparser.y" /* yacc.c:1646 */
24802497 {
24812498 OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
24822499 free(cfg_parser->cfg->pidfile);
24832500 cfg_parser->cfg->pidfile = (yyvsp[0].str);
24842501 }
2485 #line 2487 "util/configparser.c" /* yacc.c:1646 */
2486 break;
2487
2488 case 182:
2489 #line 539 "util/configparser.y" /* yacc.c:1646 */
2502 #line 2504 "util/configparser.c" /* yacc.c:1646 */
2503 break;
2504
2505 case 186:
2506 #line 542 "util/configparser.y" /* yacc.c:1646 */
24902507 {
24912508 OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
24922509 if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
24932510 yyerror("out of memory");
24942511 }
2495 #line 2497 "util/configparser.c" /* yacc.c:1646 */
2496 break;
2497
2498 case 183:
2499 #line 546 "util/configparser.y" /* yacc.c:1646 */
2512 #line 2514 "util/configparser.c" /* yacc.c:1646 */
2513 break;
2514
2515 case 187:
2516 #line 549 "util/configparser.y" /* yacc.c:1646 */
25002517 {
25012518 OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
25022519 free(cfg_parser->cfg->dlv_anchor_file);
25032520 cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str);
25042521 }
2505 #line 2507 "util/configparser.c" /* yacc.c:1646 */
2506 break;
2507
2508 case 184:
2509 #line 553 "util/configparser.y" /* yacc.c:1646 */
2522 #line 2524 "util/configparser.c" /* yacc.c:1646 */
2523 break;
2524
2525 case 188:
2526 #line 556 "util/configparser.y" /* yacc.c:1646 */
25102527 {
25112528 OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
25122529 if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
25132530 yyerror("out of memory");
25142531 }
2515 #line 2517 "util/configparser.c" /* yacc.c:1646 */
2516 break;
2517
2518 case 185:
2519 #line 560 "util/configparser.y" /* yacc.c:1646 */
2532 #line 2534 "util/configparser.c" /* yacc.c:1646 */
2533 break;
2534
2535 case 189:
2536 #line 563 "util/configparser.y" /* yacc.c:1646 */
25202537 {
25212538 OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
25222539 if(!cfg_strlist_insert(&cfg_parser->cfg->
25232540 auto_trust_anchor_file_list, (yyvsp[0].str)))
25242541 yyerror("out of memory");
25252542 }
2526 #line 2528 "util/configparser.c" /* yacc.c:1646 */
2527 break;
2528
2529 case 186:
2530 #line 568 "util/configparser.y" /* yacc.c:1646 */
2543 #line 2545 "util/configparser.c" /* yacc.c:1646 */
2544 break;
2545
2546 case 190:
2547 #line 571 "util/configparser.y" /* yacc.c:1646 */
25312548 {
25322549 OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
25332550 if(!cfg_strlist_insert(&cfg_parser->cfg->
25342551 trust_anchor_file_list, (yyvsp[0].str)))
25352552 yyerror("out of memory");
25362553 }
2537 #line 2539 "util/configparser.c" /* yacc.c:1646 */
2538 break;
2539
2540 case 187:
2541 #line 576 "util/configparser.y" /* yacc.c:1646 */
2554 #line 2556 "util/configparser.c" /* yacc.c:1646 */
2555 break;
2556
2557 case 191:
2558 #line 579 "util/configparser.y" /* yacc.c:1646 */
25422559 {
25432560 OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
25442561 if(!cfg_strlist_insert(&cfg_parser->cfg->
25452562 trusted_keys_file_list, (yyvsp[0].str)))
25462563 yyerror("out of memory");
25472564 }
2548 #line 2550 "util/configparser.c" /* yacc.c:1646 */
2549 break;
2550
2551 case 188:
2552 #line 584 "util/configparser.y" /* yacc.c:1646 */
2565 #line 2567 "util/configparser.c" /* yacc.c:1646 */
2566 break;
2567
2568 case 192:
2569 #line 587 "util/configparser.y" /* yacc.c:1646 */
25532570 {
25542571 OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
25552572 if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
25562573 yyerror("out of memory");
25572574 }
2558 #line 2560 "util/configparser.c" /* yacc.c:1646 */
2559 break;
2560
2561 case 189:
2562 #line 591 "util/configparser.y" /* yacc.c:1646 */
2575 #line 2577 "util/configparser.c" /* yacc.c:1646 */
2576 break;
2577
2578 case 193:
2579 #line 594 "util/configparser.y" /* yacc.c:1646 */
25632580 {
25642581 OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
25652582 if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
25662583 yyerror("out of memory");
25672584 }
2568 #line 2570 "util/configparser.c" /* yacc.c:1646 */
2569 break;
2570
2571 case 190:
2572 #line 598 "util/configparser.y" /* yacc.c:1646 */
2585 #line 2587 "util/configparser.c" /* yacc.c:1646 */
2586 break;
2587
2588 case 194:
2589 #line 601 "util/configparser.y" /* yacc.c:1646 */
25732590 {
25742591 OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
25752592 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
25772594 else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
25782595 free((yyvsp[0].str));
25792596 }
2580 #line 2582 "util/configparser.c" /* yacc.c:1646 */
2581 break;
2582
2583 case 191:
2584 #line 607 "util/configparser.y" /* yacc.c:1646 */
2597 #line 2599 "util/configparser.c" /* yacc.c:1646 */
2598 break;
2599
2600 case 195:
2601 #line 610 "util/configparser.y" /* yacc.c:1646 */
25852602 {
25862603 OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
25872604 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
25892606 else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
25902607 free((yyvsp[0].str));
25912608 }
2592 #line 2594 "util/configparser.c" /* yacc.c:1646 */
2593 break;
2594
2595 case 192:
2596 #line 616 "util/configparser.y" /* yacc.c:1646 */
2609 #line 2611 "util/configparser.c" /* yacc.c:1646 */
2610 break;
2611
2612 case 196:
2613 #line 619 "util/configparser.y" /* yacc.c:1646 */
25972614 {
25982615 OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
25992616 free(cfg_parser->cfg->identity);
26002617 cfg_parser->cfg->identity = (yyvsp[0].str);
26012618 }
2602 #line 2604 "util/configparser.c" /* yacc.c:1646 */
2603 break;
2604
2605 case 193:
2606 #line 623 "util/configparser.y" /* yacc.c:1646 */
2619 #line 2621 "util/configparser.c" /* yacc.c:1646 */
2620 break;
2621
2622 case 197:
2623 #line 626 "util/configparser.y" /* yacc.c:1646 */
26072624 {
26082625 OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
26092626 free(cfg_parser->cfg->version);
26102627 cfg_parser->cfg->version = (yyvsp[0].str);
26112628 }
2612 #line 2614 "util/configparser.c" /* yacc.c:1646 */
2613 break;
2614
2615 case 194:
2616 #line 630 "util/configparser.y" /* yacc.c:1646 */
2629 #line 2631 "util/configparser.c" /* yacc.c:1646 */
2630 break;
2631
2632 case 198:
2633 #line 633 "util/configparser.y" /* yacc.c:1646 */
26172634 {
26182635 OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
26192636 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
26202637 yyerror("buffer size expected");
26212638 free((yyvsp[0].str));
26222639 }
2623 #line 2625 "util/configparser.c" /* yacc.c:1646 */
2624 break;
2625
2626 case 195:
2627 #line 638 "util/configparser.y" /* yacc.c:1646 */
2640 #line 2642 "util/configparser.c" /* yacc.c:1646 */
2641 break;
2642
2643 case 199:
2644 #line 641 "util/configparser.y" /* yacc.c:1646 */
26282645 {
26292646 OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
26302647 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
26312648 yyerror("buffer size expected");
26322649 free((yyvsp[0].str));
26332650 }
2634 #line 2636 "util/configparser.c" /* yacc.c:1646 */
2635 break;
2636
2637 case 196:
2638 #line 646 "util/configparser.y" /* yacc.c:1646 */
2651 #line 2653 "util/configparser.c" /* yacc.c:1646 */
2652 break;
2653
2654 case 200:
2655 #line 649 "util/configparser.y" /* yacc.c:1646 */
26392656 {
26402657 OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
26412658 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
26442661 (strcmp((yyvsp[0].str), "yes")==0);
26452662 free((yyvsp[0].str));
26462663 }
2647 #line 2649 "util/configparser.c" /* yacc.c:1646 */
2648 break;
2649
2650 case 197:
2651 #line 656 "util/configparser.y" /* yacc.c:1646 */
2664 #line 2666 "util/configparser.c" /* yacc.c:1646 */
2665 break;
2666
2667 case 201:
2668 #line 659 "util/configparser.y" /* yacc.c:1646 */
26522669 {
26532670 OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
26542671 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
26572674 (strcmp((yyvsp[0].str), "yes")==0);
26582675 free((yyvsp[0].str));
26592676 }
2660 #line 2662 "util/configparser.c" /* yacc.c:1646 */
2661 break;
2662
2663 case 198:
2664 #line 666 "util/configparser.y" /* yacc.c:1646 */
2677 #line 2679 "util/configparser.c" /* yacc.c:1646 */
2678 break;
2679
2680 case 202:
2681 #line 669 "util/configparser.y" /* yacc.c:1646 */
2682 {
2683 OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
2684 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
2685 yyerror("expected yes or no.");
2686 else cfg_parser->cfg->ip_freebind =
2687 (strcmp((yyvsp[0].str), "yes")==0);
2688 free((yyvsp[0].str));
2689 }
2690 #line 2692 "util/configparser.c" /* yacc.c:1646 */
2691 break;
2692
2693 case 203:
2694 #line 679 "util/configparser.y" /* yacc.c:1646 */
26652695 {
26662696 OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
26672697 if(atoi((yyvsp[0].str)) == 0)
26732703 else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
26742704 free((yyvsp[0].str));
26752705 }
2676 #line 2678 "util/configparser.c" /* yacc.c:1646 */
2677 break;
2678
2679 case 199:
2680 #line 679 "util/configparser.y" /* yacc.c:1646 */
2706 #line 2708 "util/configparser.c" /* yacc.c:1646 */
2707 break;
2708
2709 case 204:
2710 #line 692 "util/configparser.y" /* yacc.c:1646 */
26812711 {
26822712 OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
26832713 if(atoi((yyvsp[0].str)) == 0)
26872717 else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
26882718 free((yyvsp[0].str));
26892719 }
2690 #line 2692 "util/configparser.c" /* yacc.c:1646 */
2691 break;
2692
2693 case 200:
2694 #line 690 "util/configparser.y" /* yacc.c:1646 */
2720 #line 2722 "util/configparser.c" /* yacc.c:1646 */
2721 break;
2722
2723 case 205:
2724 #line 703 "util/configparser.y" /* yacc.c:1646 */
26952725 {
26962726 OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
26972727 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
26982728 yyerror("memory size expected");
26992729 free((yyvsp[0].str));
27002730 }
2701 #line 2703 "util/configparser.c" /* yacc.c:1646 */
2702 break;
2703
2704 case 201:
2705 #line 698 "util/configparser.y" /* yacc.c:1646 */
2731 #line 2733 "util/configparser.c" /* yacc.c:1646 */
2732 break;
2733
2734 case 206:
2735 #line 711 "util/configparser.y" /* yacc.c:1646 */
27062736 {
27072737 OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
27082738 if(atoi((yyvsp[0].str)) == 0)
27142744 }
27152745 free((yyvsp[0].str));
27162746 }
2717 #line 2719 "util/configparser.c" /* yacc.c:1646 */
2718 break;
2719
2720 case 202:
2721 #line 711 "util/configparser.y" /* yacc.c:1646 */
2747 #line 2749 "util/configparser.c" /* yacc.c:1646 */
2748 break;
2749
2750 case 207:
2751 #line 724 "util/configparser.y" /* yacc.c:1646 */
27222752 {
27232753 OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
27242754 if(atoi((yyvsp[0].str)) == 0)
27262756 else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
27272757 free((yyvsp[0].str));
27282758 }
2729 #line 2731 "util/configparser.c" /* yacc.c:1646 */
2730 break;
2731
2732 case 203:
2733 #line 720 "util/configparser.y" /* yacc.c:1646 */
2759 #line 2761 "util/configparser.c" /* yacc.c:1646 */
2760 break;
2761
2762 case 208:
2763 #line 733 "util/configparser.y" /* yacc.c:1646 */
27342764 {
27352765 OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
27362766 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
27382768 else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
27392769 free((yyvsp[0].str));
27402770 }
2741 #line 2743 "util/configparser.c" /* yacc.c:1646 */
2742 break;
2743
2744 case 204:
2745 #line 729 "util/configparser.y" /* yacc.c:1646 */
2771 #line 2773 "util/configparser.c" /* yacc.c:1646 */
2772 break;
2773
2774 case 209:
2775 #line 742 "util/configparser.y" /* yacc.c:1646 */
27462776 {
27472777 OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
27482778 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
27502780 else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
27512781 free((yyvsp[0].str));
27522782 }
2753 #line 2755 "util/configparser.c" /* yacc.c:1646 */
2754 break;
2755
2756 case 205:
2757 #line 738 "util/configparser.y" /* yacc.c:1646 */
2783 #line 2785 "util/configparser.c" /* yacc.c:1646 */
2784 break;
2785
2786 case 210:
2787 #line 751 "util/configparser.y" /* yacc.c:1646 */
27582788 {
27592789 OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
27602790 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
27632793 (strcmp((yyvsp[0].str), "yes")==0);
27642794 free((yyvsp[0].str));
27652795 }
2766 #line 2768 "util/configparser.c" /* yacc.c:1646 */
2767 break;
2768
2769 case 206:
2770 #line 748 "util/configparser.y" /* yacc.c:1646 */
2796 #line 2798 "util/configparser.c" /* yacc.c:1646 */
2797 break;
2798
2799 case 211:
2800 #line 761 "util/configparser.y" /* yacc.c:1646 */
27712801 {
27722802 OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
27732803 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
27762806 (strcmp((yyvsp[0].str), "yes")==0);
27772807 free((yyvsp[0].str));
27782808 }
2779 #line 2781 "util/configparser.c" /* yacc.c:1646 */
2780 break;
2781
2782 case 207:
2783 #line 758 "util/configparser.y" /* yacc.c:1646 */
2809 #line 2811 "util/configparser.c" /* yacc.c:1646 */
2810 break;
2811
2812 case 212:
2813 #line 771 "util/configparser.y" /* yacc.c:1646 */
27842814 {
27852815 OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
27862816 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
27872817 yyerror("memory size expected");
27882818 free((yyvsp[0].str));
27892819 }
2790 #line 2792 "util/configparser.c" /* yacc.c:1646 */
2791 break;
2792
2793 case 208:
2794 #line 766 "util/configparser.y" /* yacc.c:1646 */
2820 #line 2822 "util/configparser.c" /* yacc.c:1646 */
2821 break;
2822
2823 case 213:
2824 #line 779 "util/configparser.y" /* yacc.c:1646 */
27952825 {
27962826 OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
27972827 if(atoi((yyvsp[0].str)) == 0)
28032833 }
28042834 free((yyvsp[0].str));
28052835 }
2806 #line 2808 "util/configparser.c" /* yacc.c:1646 */
2807 break;
2808
2809 case 209:
2810 #line 779 "util/configparser.y" /* yacc.c:1646 */
2836 #line 2838 "util/configparser.c" /* yacc.c:1646 */
2837 break;
2838
2839 case 214:
2840 #line 792 "util/configparser.y" /* yacc.c:1646 */
28112841 {
28122842 OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
28132843 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
28152845 else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
28162846 free((yyvsp[0].str));
28172847 }
2818 #line 2820 "util/configparser.c" /* yacc.c:1646 */
2819 break;
2820
2821 case 210:
2822 #line 788 "util/configparser.y" /* yacc.c:1646 */
2848 #line 2850 "util/configparser.c" /* yacc.c:1646 */
2849 break;
2850
2851 case 215:
2852 #line 801 "util/configparser.y" /* yacc.c:1646 */
28232853 {
28242854 OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
28252855 verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
28262856 "removed, use infra-host-ttl)", (yyvsp[0].str));
28272857 free((yyvsp[0].str));
28282858 }
2829 #line 2831 "util/configparser.c" /* yacc.c:1646 */
2830 break;
2831
2832 case 211:
2833 #line 796 "util/configparser.y" /* yacc.c:1646 */
2859 #line 2861 "util/configparser.c" /* yacc.c:1646 */
2860 break;
2861
2862 case 216:
2863 #line 809 "util/configparser.y" /* yacc.c:1646 */
28342864 {
28352865 OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
28362866 if(atoi((yyvsp[0].str)) == 0)
28382868 else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
28392869 free((yyvsp[0].str));
28402870 }
2841 #line 2843 "util/configparser.c" /* yacc.c:1646 */
2842 break;
2843
2844 case 212:
2845 #line 805 "util/configparser.y" /* yacc.c:1646 */
2871 #line 2873 "util/configparser.c" /* yacc.c:1646 */
2872 break;
2873
2874 case 217:
2875 #line 818 "util/configparser.y" /* yacc.c:1646 */
28462876 {
28472877 OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
28482878 verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
28492879 "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
28502880 free((yyvsp[0].str));
28512881 }
2852 #line 2854 "util/configparser.c" /* yacc.c:1646 */
2853 break;
2854
2855 case 213:
2856 #line 813 "util/configparser.y" /* yacc.c:1646 */
2882 #line 2884 "util/configparser.c" /* yacc.c:1646 */
2883 break;
2884
2885 case 218:
2886 #line 826 "util/configparser.y" /* yacc.c:1646 */
28572887 {
28582888 OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
28592889 if(atoi((yyvsp[0].str)) == 0)
28652895 }
28662896 free((yyvsp[0].str));
28672897 }
2868 #line 2870 "util/configparser.c" /* yacc.c:1646 */
2869 break;
2870
2871 case 214:
2872 #line 826 "util/configparser.y" /* yacc.c:1646 */
2898 #line 2900 "util/configparser.c" /* yacc.c:1646 */
2899 break;
2900
2901 case 219:
2902 #line 839 "util/configparser.y" /* yacc.c:1646 */
28732903 {
28742904 OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
28752905 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
28772907 else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
28782908 free((yyvsp[0].str));
28792909 }
2880 #line 2882 "util/configparser.c" /* yacc.c:1646 */
2881 break;
2882
2883 case 215:
2884 #line 835 "util/configparser.y" /* yacc.c:1646 */
2910 #line 2912 "util/configparser.c" /* yacc.c:1646 */
2911 break;
2912
2913 case 220:
2914 #line 848 "util/configparser.y" /* yacc.c:1646 */
28852915 {
28862916 OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
28872917 free(cfg_parser->cfg->target_fetch_policy);
28882918 cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
28892919 }
2890 #line 2892 "util/configparser.c" /* yacc.c:1646 */
2891 break;
2892
2893 case 216:
2894 #line 842 "util/configparser.y" /* yacc.c:1646 */
2920 #line 2922 "util/configparser.c" /* yacc.c:1646 */
2921 break;
2922
2923 case 221:
2924 #line 855 "util/configparser.y" /* yacc.c:1646 */
28952925 {
28962926 OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
28972927 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29002930 (strcmp((yyvsp[0].str), "yes")==0);
29012931 free((yyvsp[0].str));
29022932 }
2903 #line 2905 "util/configparser.c" /* yacc.c:1646 */
2904 break;
2905
2906 case 217:
2907 #line 852 "util/configparser.y" /* yacc.c:1646 */
2933 #line 2935 "util/configparser.c" /* yacc.c:1646 */
2934 break;
2935
2936 case 222:
2937 #line 865 "util/configparser.y" /* yacc.c:1646 */
29082938 {
29092939 OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
29102940 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29132943 (strcmp((yyvsp[0].str), "yes")==0);
29142944 free((yyvsp[0].str));
29152945 }
2916 #line 2918 "util/configparser.c" /* yacc.c:1646 */
2917 break;
2918
2919 case 218:
2920 #line 862 "util/configparser.y" /* yacc.c:1646 */
2946 #line 2948 "util/configparser.c" /* yacc.c:1646 */
2947 break;
2948
2949 case 223:
2950 #line 875 "util/configparser.y" /* yacc.c:1646 */
29212951 {
29222952 OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
29232953 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29262956 (strcmp((yyvsp[0].str), "yes")==0);
29272957 free((yyvsp[0].str));
29282958 }
2929 #line 2931 "util/configparser.c" /* yacc.c:1646 */
2930 break;
2931
2932 case 219:
2933 #line 872 "util/configparser.y" /* yacc.c:1646 */
2959 #line 2961 "util/configparser.c" /* yacc.c:1646 */
2960 break;
2961
2962 case 224:
2963 #line 885 "util/configparser.y" /* yacc.c:1646 */
29342964 {
29352965 OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
29362966 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29392969 (strcmp((yyvsp[0].str), "yes")==0);
29402970 free((yyvsp[0].str));
29412971 }
2942 #line 2944 "util/configparser.c" /* yacc.c:1646 */
2943 break;
2944
2945 case 220:
2946 #line 882 "util/configparser.y" /* yacc.c:1646 */
2972 #line 2974 "util/configparser.c" /* yacc.c:1646 */
2973 break;
2974
2975 case 225:
2976 #line 895 "util/configparser.y" /* yacc.c:1646 */
29472977 {
29482978 OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
29492979 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29522982 (strcmp((yyvsp[0].str), "yes")==0);
29532983 free((yyvsp[0].str));
29542984 }
2955 #line 2957 "util/configparser.c" /* yacc.c:1646 */
2956 break;
2957
2958 case 221:
2959 #line 892 "util/configparser.y" /* yacc.c:1646 */
2985 #line 2987 "util/configparser.c" /* yacc.c:1646 */
2986 break;
2987
2988 case 226:
2989 #line 905 "util/configparser.y" /* yacc.c:1646 */
29602990 {
29612991 OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
29622992 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29652995 (strcmp((yyvsp[0].str), "yes")==0);
29662996 free((yyvsp[0].str));
29672997 }
2968 #line 2970 "util/configparser.c" /* yacc.c:1646 */
2969 break;
2970
2971 case 222:
2972 #line 902 "util/configparser.y" /* yacc.c:1646 */
2998 #line 3000 "util/configparser.c" /* yacc.c:1646 */
2999 break;
3000
3001 case 227:
3002 #line 915 "util/configparser.y" /* yacc.c:1646 */
29733003 {
29743004 OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
29753005 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29783008 (strcmp((yyvsp[0].str), "yes")==0);
29793009 free((yyvsp[0].str));
29803010 }
2981 #line 2983 "util/configparser.c" /* yacc.c:1646 */
2982 break;
2983
2984 case 223:
2985 #line 912 "util/configparser.y" /* yacc.c:1646 */
3011 #line 3013 "util/configparser.c" /* yacc.c:1646 */
3012 break;
3013
3014 case 228:
3015 #line 925 "util/configparser.y" /* yacc.c:1646 */
29863016 {
29873017 OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
29883018 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29913021 (strcmp((yyvsp[0].str), "yes")==0);
29923022 free((yyvsp[0].str));
29933023 }
2994 #line 2996 "util/configparser.c" /* yacc.c:1646 */
2995 break;
2996
2997 case 224:
2998 #line 922 "util/configparser.y" /* yacc.c:1646 */
3024 #line 3026 "util/configparser.c" /* yacc.c:1646 */
3025 break;
3026
3027 case 229:
3028 #line 935 "util/configparser.y" /* yacc.c:1646 */
29993029 {
30003030 OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
30013031 if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
30023032 yyerror("out of memory");
30033033 }
3004 #line 3006 "util/configparser.c" /* yacc.c:1646 */
3005 break;
3006
3007 case 225:
3008 #line 929 "util/configparser.y" /* yacc.c:1646 */
3034 #line 3036 "util/configparser.c" /* yacc.c:1646 */
3035 break;
3036
3037 case 230:
3038 #line 942 "util/configparser.y" /* yacc.c:1646 */
30093039 {
30103040 OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
30113041 if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
30123042 yyerror("out of memory");
30133043 }
3014 #line 3016 "util/configparser.c" /* yacc.c:1646 */
3015 break;
3016
3017 case 226:
3018 #line 936 "util/configparser.y" /* yacc.c:1646 */
3044 #line 3046 "util/configparser.c" /* yacc.c:1646 */
3045 break;
3046
3047 case 231:
3048 #line 949 "util/configparser.y" /* yacc.c:1646 */
30193049 {
30203050 OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
30213051 if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
30223052 yyerror("out of memory");
30233053 }
3024 #line 3026 "util/configparser.c" /* yacc.c:1646 */
3025 break;
3026
3027 case 227:
3028 #line 943 "util/configparser.y" /* yacc.c:1646 */
3054 #line 3056 "util/configparser.c" /* yacc.c:1646 */
3055 break;
3056
3057 case 232:
3058 #line 956 "util/configparser.y" /* yacc.c:1646 */
30293059 {
30303060 OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
30313061 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30333063 else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
30343064 free((yyvsp[0].str));
30353065 }
3036 #line 3038 "util/configparser.c" /* yacc.c:1646 */
3037 break;
3038
3039 case 228:
3040 #line 952 "util/configparser.y" /* yacc.c:1646 */
3066 #line 3068 "util/configparser.c" /* yacc.c:1646 */
3067 break;
3068
3069 case 233:
3070 #line 965 "util/configparser.y" /* yacc.c:1646 */
30413071 {
30423072 OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
30433073 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30453075 else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
30463076 free((yyvsp[0].str));
30473077 }
3048 #line 3050 "util/configparser.c" /* yacc.c:1646 */
3049 break;
3050
3051 case 229:
3052 #line 961 "util/configparser.y" /* yacc.c:1646 */
3078 #line 3080 "util/configparser.c" /* yacc.c:1646 */
3079 break;
3080
3081 case 234:
3082 #line 974 "util/configparser.y" /* yacc.c:1646 */
30533083 {
30543084 OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
30553085 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
30573087 else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
30583088 free((yyvsp[0].str));
30593089 }
3060 #line 3062 "util/configparser.c" /* yacc.c:1646 */
3061 break;
3062
3063 case 230:
3064 #line 970 "util/configparser.y" /* yacc.c:1646 */
3090 #line 3092 "util/configparser.c" /* yacc.c:1646 */
3091 break;
3092
3093 case 235:
3094 #line 983 "util/configparser.y" /* yacc.c:1646 */
30653095 {
30663096 OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
30673097 if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
30683098 yyerror("out of memory");
30693099 }
3070 #line 3072 "util/configparser.c" /* yacc.c:1646 */
3071 break;
3072
3073 case 231:
3074 #line 977 "util/configparser.y" /* yacc.c:1646 */
3100 #line 3102 "util/configparser.c" /* yacc.c:1646 */
3101 break;
3102
3103 case 236:
3104 #line 990 "util/configparser.y" /* yacc.c:1646 */
30753105 {
30763106 OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
30773107 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30803110 (strcmp((yyvsp[0].str), "yes")==0);
30813111 free((yyvsp[0].str));
30823112 }
3083 #line 3085 "util/configparser.c" /* yacc.c:1646 */
3084 break;
3085
3086 case 232:
3087 #line 987 "util/configparser.y" /* yacc.c:1646 */
3113 #line 3115 "util/configparser.c" /* yacc.c:1646 */
3114 break;
3115
3116 case 237:
3117 #line 1000 "util/configparser.y" /* yacc.c:1646 */
30883118 {
30893119 OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
30903120 if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
31003130 fatal_exit("out of memory adding acl");
31013131 }
31023132 }
3103 #line 3105 "util/configparser.c" /* yacc.c:1646 */
3104 break;
3105
3106 case 233:
3107 #line 1004 "util/configparser.y" /* yacc.c:1646 */
3133 #line 3135 "util/configparser.c" /* yacc.c:1646 */
3134 break;
3135
3136 case 238:
3137 #line 1017 "util/configparser.y" /* yacc.c:1646 */
31083138 {
31093139 OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
31103140 free(cfg_parser->cfg->module_conf);
31113141 cfg_parser->cfg->module_conf = (yyvsp[0].str);
31123142 }
3113 #line 3115 "util/configparser.c" /* yacc.c:1646 */
3114 break;
3115
3116 case 234:
3117 #line 1011 "util/configparser.y" /* yacc.c:1646 */
3143 #line 3145 "util/configparser.c" /* yacc.c:1646 */
3144 break;
3145
3146 case 239:
3147 #line 1024 "util/configparser.y" /* yacc.c:1646 */
31183148 {
31193149 OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
31203150 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
31313161 }
31323162 free((yyvsp[0].str));
31333163 }
3134 #line 3136 "util/configparser.c" /* yacc.c:1646 */
3135 break;
3136
3137 case 235:
3138 #line 1029 "util/configparser.y" /* yacc.c:1646 */
3164 #line 3166 "util/configparser.c" /* yacc.c:1646 */
3165 break;
3166
3167 case 240:
3168 #line 1042 "util/configparser.y" /* yacc.c:1646 */
31393169 {
31403170 OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
31413171 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
31473177 }
31483178 free((yyvsp[0].str));
31493179 }
3150 #line 3152 "util/configparser.c" /* yacc.c:1646 */
3151 break;
3152
3153 case 236:
3154 #line 1042 "util/configparser.y" /* yacc.c:1646 */
3180 #line 3182 "util/configparser.c" /* yacc.c:1646 */
3181 break;
3182
3183 case 241:
3184 #line 1055 "util/configparser.y" /* yacc.c:1646 */
31553185 {
31563186 OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
31573187 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
31633193 }
31643194 free((yyvsp[0].str));
31653195 }
3166 #line 3168 "util/configparser.c" /* yacc.c:1646 */
3167 break;
3168
3169 case 237:
3170 #line 1055 "util/configparser.y" /* yacc.c:1646 */
3196 #line 3198 "util/configparser.c" /* yacc.c:1646 */
3197 break;
3198
3199 case 242:
3200 #line 1068 "util/configparser.y" /* yacc.c:1646 */
31713201 {
31723202 OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
31733203 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
31753205 else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
31763206 free((yyvsp[0].str));
31773207 }
3178 #line 3180 "util/configparser.c" /* yacc.c:1646 */
3179 break;
3180
3181 case 238:
3182 #line 1064 "util/configparser.y" /* yacc.c:1646 */
3208 #line 3210 "util/configparser.c" /* yacc.c:1646 */
3209 break;
3210
3211 case 243:
3212 #line 1077 "util/configparser.y" /* yacc.c:1646 */
31833213 {
31843214 OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
31853215 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
31873217 else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
31883218 free((yyvsp[0].str));
31893219 }
3190 #line 3192 "util/configparser.c" /* yacc.c:1646 */
3191 break;
3192
3193 case 239:
3194 #line 1073 "util/configparser.y" /* yacc.c:1646 */
3220 #line 3222 "util/configparser.c" /* yacc.c:1646 */
3221 break;
3222
3223 case 244:
3224 #line 1086 "util/configparser.y" /* yacc.c:1646 */
31953225 {
31963226 OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
31973227 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
31993229 else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
32003230 free((yyvsp[0].str));
32013231 }
3202 #line 3204 "util/configparser.c" /* yacc.c:1646 */
3203 break;
3204
3205 case 240:
3206 #line 1082 "util/configparser.y" /* yacc.c:1646 */
3232 #line 3234 "util/configparser.c" /* yacc.c:1646 */
3233 break;
3234
3235 case 245:
3236 #line 1095 "util/configparser.y" /* yacc.c:1646 */
32073237 {
32083238 OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
32093239 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
32113241 else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
32123242 free((yyvsp[0].str));
32133243 }
3214 #line 3216 "util/configparser.c" /* yacc.c:1646 */
3215 break;
3216
3217 case 241:
3218 #line 1091 "util/configparser.y" /* yacc.c:1646 */
3244 #line 3246 "util/configparser.c" /* yacc.c:1646 */
3245 break;
3246
3247 case 246:
3248 #line 1104 "util/configparser.y" /* yacc.c:1646 */
32193249 {
32203250 OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
32213251 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32243254 (strcmp((yyvsp[0].str), "yes")==0);
32253255 free((yyvsp[0].str));
32263256 }
3227 #line 3229 "util/configparser.c" /* yacc.c:1646 */
3228 break;
3229
3230 case 242:
3231 #line 1101 "util/configparser.y" /* yacc.c:1646 */
3257 #line 3259 "util/configparser.c" /* yacc.c:1646 */
3258 break;
3259
3260 case 247:
3261 #line 1114 "util/configparser.y" /* yacc.c:1646 */
32323262 {
32333263 OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
32343264 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32373267 (strcmp((yyvsp[0].str), "yes")==0);
32383268 free((yyvsp[0].str));
32393269 }
3240 #line 3242 "util/configparser.c" /* yacc.c:1646 */
3241 break;
3242
3243 case 243:
3244 #line 1111 "util/configparser.y" /* yacc.c:1646 */
3270 #line 3272 "util/configparser.c" /* yacc.c:1646 */
3271 break;
3272
3273 case 248:
3274 #line 1124 "util/configparser.y" /* yacc.c:1646 */
32453275 {
32463276 OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
32473277 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32493279 else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
32503280 free((yyvsp[0].str));
32513281 }
3252 #line 3254 "util/configparser.c" /* yacc.c:1646 */
3253 break;
3254
3255 case 244:
3256 #line 1120 "util/configparser.y" /* yacc.c:1646 */
3282 #line 3284 "util/configparser.c" /* yacc.c:1646 */
3283 break;
3284
3285 case 249:
3286 #line 1133 "util/configparser.y" /* yacc.c:1646 */
32573287 {
32583288 OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
32593289 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
32613291 else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
32623292 free((yyvsp[0].str));
32633293 }
3264 #line 3266 "util/configparser.c" /* yacc.c:1646 */
3265 break;
3266
3267 case 245:
3268 #line 1129 "util/configparser.y" /* yacc.c:1646 */
3294 #line 3296 "util/configparser.c" /* yacc.c:1646 */
3295 break;
3296
3297 case 250:
3298 #line 1142 "util/configparser.y" /* yacc.c:1646 */
32693299 {
32703300 OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
32713301 free(cfg_parser->cfg->val_nsec3_key_iterations);
32723302 cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
32733303 }
3274 #line 3276 "util/configparser.c" /* yacc.c:1646 */
3275 break;
3276
3277 case 246:
3278 #line 1136 "util/configparser.y" /* yacc.c:1646 */
3304 #line 3306 "util/configparser.c" /* yacc.c:1646 */
3305 break;
3306
3307 case 251:
3308 #line 1149 "util/configparser.y" /* yacc.c:1646 */
32793309 {
32803310 OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
32813311 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
32833313 else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
32843314 free((yyvsp[0].str));
32853315 }
3286 #line 3288 "util/configparser.c" /* yacc.c:1646 */
3287 break;
3288
3289 case 247:
3290 #line 1145 "util/configparser.y" /* yacc.c:1646 */
3316 #line 3318 "util/configparser.c" /* yacc.c:1646 */
3317 break;
3318
3319 case 252:
3320 #line 1158 "util/configparser.y" /* yacc.c:1646 */
32913321 {
32923322 OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
32933323 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
32953325 else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
32963326 free((yyvsp[0].str));
32973327 }
3298 #line 3300 "util/configparser.c" /* yacc.c:1646 */
3299 break;
3300
3301 case 248:
3302 #line 1154 "util/configparser.y" /* yacc.c:1646 */
3328 #line 3330 "util/configparser.c" /* yacc.c:1646 */
3329 break;
3330
3331 case 253:
3332 #line 1167 "util/configparser.y" /* yacc.c:1646 */
33033333 {
33043334 OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
33053335 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
33073337 else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
33083338 free((yyvsp[0].str));
33093339 }
3310 #line 3312 "util/configparser.c" /* yacc.c:1646 */
3311 break;
3312
3313 case 249:
3314 #line 1163 "util/configparser.y" /* yacc.c:1646 */
3340 #line 3342 "util/configparser.c" /* yacc.c:1646 */
3341 break;
3342
3343 case 254:
3344 #line 1176 "util/configparser.y" /* yacc.c:1646 */
33153345 {
33163346 OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
33173347 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33203350 (strcmp((yyvsp[0].str), "yes")==0);
33213351 free((yyvsp[0].str));
33223352 }
3323 #line 3325 "util/configparser.c" /* yacc.c:1646 */
3324 break;
3325
3326 case 250:
3327 #line 1172 "util/configparser.y" /* yacc.c:1646 */
3353 #line 3355 "util/configparser.c" /* yacc.c:1646 */
3354 break;
3355
3356 case 255:
3357 #line 1185 "util/configparser.y" /* yacc.c:1646 */
33283358 {
33293359 OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
33303360 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
33313361 yyerror("memory size expected");
33323362 free((yyvsp[0].str));
33333363 }
3334 #line 3336 "util/configparser.c" /* yacc.c:1646 */
3335 break;
3336
3337 case 251:
3338 #line 1180 "util/configparser.y" /* yacc.c:1646 */
3364 #line 3366 "util/configparser.c" /* yacc.c:1646 */
3365 break;
3366
3367 case 256:
3368 #line 1193 "util/configparser.y" /* yacc.c:1646 */
33393369 {
33403370 OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
33413371 if(atoi((yyvsp[0].str)) == 0)
33473377 }
33483378 free((yyvsp[0].str));
33493379 }
3350 #line 3352 "util/configparser.c" /* yacc.c:1646 */
3351 break;
3352
3353 case 252:
3354 #line 1193 "util/configparser.y" /* yacc.c:1646 */
3380 #line 3382 "util/configparser.c" /* yacc.c:1646 */
3381 break;
3382
3383 case 257:
3384 #line 1206 "util/configparser.y" /* yacc.c:1646 */
33553385 {
33563386 OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
33573387 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
33583388 yyerror("memory size expected");
33593389 free((yyvsp[0].str));
33603390 }
3361 #line 3363 "util/configparser.c" /* yacc.c:1646 */
3362 break;
3363
3364 case 253:
3365 #line 1201 "util/configparser.y" /* yacc.c:1646 */
3391 #line 3393 "util/configparser.c" /* yacc.c:1646 */
3392 break;
3393
3394 case 258:
3395 #line 1214 "util/configparser.y" /* yacc.c:1646 */
33663396 {
33673397 OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
33683398 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
33853415 fatal_exit("out of memory adding local-zone");
33863416 }
33873417 }
3388 #line 3390 "util/configparser.c" /* yacc.c:1646 */
3389 break;
3390
3391 case 254:
3392 #line 1225 "util/configparser.y" /* yacc.c:1646 */
3418 #line 3420 "util/configparser.c" /* yacc.c:1646 */
3419 break;
3420
3421 case 259:
3422 #line 1238 "util/configparser.y" /* yacc.c:1646 */
33933423 {
33943424 OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
33953425 if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
33963426 fatal_exit("out of memory adding local-data");
33973427 }
3398 #line 3400 "util/configparser.c" /* yacc.c:1646 */
3399 break;
3400
3401 case 255:
3402 #line 1232 "util/configparser.y" /* yacc.c:1646 */
3428 #line 3430 "util/configparser.c" /* yacc.c:1646 */
3429 break;
3430
3431 case 260:
3432 #line 1245 "util/configparser.y" /* yacc.c:1646 */
34033433 {
34043434 char* ptr;
34053435 OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
34133443 yyerror("local-data-ptr could not be reversed");
34143444 }
34153445 }
3416 #line 3418 "util/configparser.c" /* yacc.c:1646 */
3417 break;
3418
3419 case 256:
3420 #line 1247 "util/configparser.y" /* yacc.c:1646 */
3446 #line 3448 "util/configparser.c" /* yacc.c:1646 */
3447 break;
3448
3449 case 261:
3450 #line 1260 "util/configparser.y" /* yacc.c:1646 */
34213451 {
34223452 OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
34233453 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34263456 (strcmp((yyvsp[0].str), "yes")==0);
34273457 free((yyvsp[0].str));
34283458 }
3429 #line 3431 "util/configparser.c" /* yacc.c:1646 */
3430 break;
3431
3432 case 257:
3433 #line 1257 "util/configparser.y" /* yacc.c:1646 */
3459 #line 3461 "util/configparser.c" /* yacc.c:1646 */
3460 break;
3461
3462 case 262:
3463 #line 1270 "util/configparser.y" /* yacc.c:1646 */
34343464 {
34353465 OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
34363466 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34393469 (strcmp((yyvsp[0].str), "yes")==0);
34403470 free((yyvsp[0].str));
34413471 }
3442 #line 3444 "util/configparser.c" /* yacc.c:1646 */
3443 break;
3444
3445 case 258:
3446 #line 1267 "util/configparser.y" /* yacc.c:1646 */
3472 #line 3474 "util/configparser.c" /* yacc.c:1646 */
3473 break;
3474
3475 case 263:
3476 #line 1280 "util/configparser.y" /* yacc.c:1646 */
34473477 {
34483478 OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
34493479 cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
34503480 free((yyvsp[0].str));
34513481 }
3452 #line 3454 "util/configparser.c" /* yacc.c:1646 */
3453 break;
3454
3455 case 259:
3456 #line 1274 "util/configparser.y" /* yacc.c:1646 */
3482 #line 3484 "util/configparser.c" /* yacc.c:1646 */
3483 break;
3484
3485 case 264:
3486 #line 1287 "util/configparser.y" /* yacc.c:1646 */
34573487 {
34583488 OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
34593489 free(cfg_parser->cfg->dns64_prefix);
34603490 cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
34613491 }
3462 #line 3464 "util/configparser.c" /* yacc.c:1646 */
3463 break;
3464
3465 case 260:
3466 #line 1281 "util/configparser.y" /* yacc.c:1646 */
3492 #line 3494 "util/configparser.c" /* yacc.c:1646 */
3493 break;
3494
3495 case 265:
3496 #line 1294 "util/configparser.y" /* yacc.c:1646 */
34673497 {
34683498 OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
34693499 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34713501 else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
34723502 free((yyvsp[0].str));
34733503 }
3474 #line 3476 "util/configparser.c" /* yacc.c:1646 */
3475 break;
3476
3477 case 261:
3478 #line 1290 "util/configparser.y" /* yacc.c:1646 */
3504 #line 3506 "util/configparser.c" /* yacc.c:1646 */
3505 break;
3506
3507 case 266:
3508 #line 1303 "util/configparser.y" /* yacc.c:1646 */
3509 {
3510 char* p, *s = (yyvsp[0].str);
3511 OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
3512 while((p=strsep(&s, " \t\n")) != NULL) {
3513 if(*p) {
3514 if(!config_add_tag(cfg_parser->cfg, p))
3515 yyerror("could not define-tag, "
3516 "out of memory");
3517 }
3518 }
3519 free((yyvsp[0].str));
3520 }
3521 #line 3523 "util/configparser.c" /* yacc.c:1646 */
3522 break;
3523
3524 case 267:
3525 #line 1317 "util/configparser.y" /* yacc.c:1646 */
3526 {
3527 size_t len = 0;
3528 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
3529 &len);
3530 free((yyvsp[0].str));
3531 OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str)));
3532 if(!bitlist)
3533 yyerror("could not parse tags, (define-tag them first)");
3534 if(bitlist) {
3535 if(!cfg_strbytelist_insert(
3536 &cfg_parser->cfg->local_zone_tags,
3537 (yyvsp[-1].str), bitlist, len)) {
3538 yyerror("out of memory");
3539 free((yyvsp[-1].str));
3540 }
3541 }
3542 }
3543 #line 3545 "util/configparser.c" /* yacc.c:1646 */
3544 break;
3545
3546 case 268:
3547 #line 1336 "util/configparser.y" /* yacc.c:1646 */
34793548 {
34803549 OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
34813550 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
34833552 else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
34843553 free((yyvsp[0].str));
34853554 }
3486 #line 3488 "util/configparser.c" /* yacc.c:1646 */
3487 break;
3488
3489 case 262:
3490 #line 1299 "util/configparser.y" /* yacc.c:1646 */
3555 #line 3557 "util/configparser.c" /* yacc.c:1646 */
3556 break;
3557
3558 case 269:
3559 #line 1345 "util/configparser.y" /* yacc.c:1646 */
34913560 {
34923561 OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
34933562 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
34943563 yyerror("memory size expected");
34953564 free((yyvsp[0].str));
34963565 }
3497 #line 3499 "util/configparser.c" /* yacc.c:1646 */
3498 break;
3499
3500 case 263:
3501 #line 1307 "util/configparser.y" /* yacc.c:1646 */
3566 #line 3568 "util/configparser.c" /* yacc.c:1646 */
3567 break;
3568
3569 case 270:
3570 #line 1353 "util/configparser.y" /* yacc.c:1646 */
35023571 {
35033572 OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
35043573 if(atoi((yyvsp[0].str)) == 0)
35103579 }
35113580 free((yyvsp[0].str));
35123581 }
3513 #line 3515 "util/configparser.c" /* yacc.c:1646 */
3514 break;
3515
3516 case 264:
3517 #line 1320 "util/configparser.y" /* yacc.c:1646 */
3582 #line 3584 "util/configparser.c" /* yacc.c:1646 */
3583 break;
3584
3585 case 271:
3586 #line 1366 "util/configparser.y" /* yacc.c:1646 */
35183587 {
35193588 OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
35203589 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
35263595 "ratelimit-for-domain");
35273596 }
35283597 }
3529 #line 3531 "util/configparser.c" /* yacc.c:1646 */
3530 break;
3531
3532 case 265:
3533 #line 1333 "util/configparser.y" /* yacc.c:1646 */
3598 #line 3600 "util/configparser.c" /* yacc.c:1646 */
3599 break;
3600
3601 case 272:
3602 #line 1379 "util/configparser.y" /* yacc.c:1646 */
35343603 {
35353604 OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
35363605 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
35423611 "ratelimit-below-domain");
35433612 }
35443613 }
3545 #line 3547 "util/configparser.c" /* yacc.c:1646 */
3546 break;
3547
3548 case 266:
3549 #line 1346 "util/configparser.y" /* yacc.c:1646 */
3614 #line 3616 "util/configparser.c" /* yacc.c:1646 */
3615 break;
3616
3617 case 273:
3618 #line 1392 "util/configparser.y" /* yacc.c:1646 */
35503619 {
35513620 OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
35523621 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
35543623 else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
35553624 free((yyvsp[0].str));
35563625 }
3557 #line 3559 "util/configparser.c" /* yacc.c:1646 */
3558 break;
3559
3560 case 267:
3561 #line 1355 "util/configparser.y" /* yacc.c:1646 */
3626 #line 3628 "util/configparser.c" /* yacc.c:1646 */
3627 break;
3628
3629 case 274:
3630 #line 1401 "util/configparser.y" /* yacc.c:1646 */
35623631 {
35633632 OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
35643633 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35673636 (strcmp((yyvsp[0].str), "yes")==0);
35683637 free((yyvsp[0].str));
35693638 }
3570 #line 3572 "util/configparser.c" /* yacc.c:1646 */
3571 break;
3572
3573 case 268:
3574 #line 1365 "util/configparser.y" /* yacc.c:1646 */
3639 #line 3641 "util/configparser.c" /* yacc.c:1646 */
3640 break;
3641
3642 case 275:
3643 #line 1411 "util/configparser.y" /* yacc.c:1646 */
35753644 {
35763645 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
35773646 if(cfg_parser->cfg->stubs->name)
35803649 free(cfg_parser->cfg->stubs->name);
35813650 cfg_parser->cfg->stubs->name = (yyvsp[0].str);
35823651 }
3583 #line 3585 "util/configparser.c" /* yacc.c:1646 */
3584 break;
3585
3586 case 269:
3587 #line 1375 "util/configparser.y" /* yacc.c:1646 */
3652 #line 3654 "util/configparser.c" /* yacc.c:1646 */
3653 break;
3654
3655 case 276:
3656 #line 1421 "util/configparser.y" /* yacc.c:1646 */
35883657 {
35893658 OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
35903659 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
35913660 yyerror("out of memory");
35923661 }
3593 #line 3595 "util/configparser.c" /* yacc.c:1646 */
3594 break;
3595
3596 case 270:
3597 #line 1382 "util/configparser.y" /* yacc.c:1646 */
3662 #line 3664 "util/configparser.c" /* yacc.c:1646 */
3663 break;
3664
3665 case 277:
3666 #line 1428 "util/configparser.y" /* yacc.c:1646 */
35983667 {
35993668 OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
36003669 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
36013670 yyerror("out of memory");
36023671 }
3603 #line 3605 "util/configparser.c" /* yacc.c:1646 */
3604 break;
3605
3606 case 271:
3607 #line 1389 "util/configparser.y" /* yacc.c:1646 */
3672 #line 3674 "util/configparser.c" /* yacc.c:1646 */
3673 break;
3674
3675 case 278:
3676 #line 1435 "util/configparser.y" /* yacc.c:1646 */
36083677 {
36093678 OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
36103679 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36123681 else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
36133682 free((yyvsp[0].str));
36143683 }
3615 #line 3617 "util/configparser.c" /* yacc.c:1646 */
3616 break;
3617
3618 case 272:
3619 #line 1398 "util/configparser.y" /* yacc.c:1646 */
3684 #line 3686 "util/configparser.c" /* yacc.c:1646 */
3685 break;
3686
3687 case 279:
3688 #line 1444 "util/configparser.y" /* yacc.c:1646 */
36203689 {
36213690 OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
36223691 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36253694 (strcmp((yyvsp[0].str), "yes")==0);
36263695 free((yyvsp[0].str));
36273696 }
3628 #line 3630 "util/configparser.c" /* yacc.c:1646 */
3629 break;
3630
3631 case 273:
3632 #line 1408 "util/configparser.y" /* yacc.c:1646 */
3697 #line 3699 "util/configparser.c" /* yacc.c:1646 */
3698 break;
3699
3700 case 280:
3701 #line 1454 "util/configparser.y" /* yacc.c:1646 */
36333702 {
36343703 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
36353704 if(cfg_parser->cfg->forwards->name)
36383707 free(cfg_parser->cfg->forwards->name);
36393708 cfg_parser->cfg->forwards->name = (yyvsp[0].str);
36403709 }
3641 #line 3643 "util/configparser.c" /* yacc.c:1646 */
3642 break;
3643
3644 case 274:
3645 #line 1418 "util/configparser.y" /* yacc.c:1646 */
3710 #line 3712 "util/configparser.c" /* yacc.c:1646 */
3711 break;
3712
3713 case 281:
3714 #line 1464 "util/configparser.y" /* yacc.c:1646 */
36463715 {
36473716 OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
36483717 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
36493718 yyerror("out of memory");
36503719 }
3651 #line 3653 "util/configparser.c" /* yacc.c:1646 */
3652 break;
3653
3654 case 275:
3655 #line 1425 "util/configparser.y" /* yacc.c:1646 */
3720 #line 3722 "util/configparser.c" /* yacc.c:1646 */
3721 break;
3722
3723 case 282:
3724 #line 1471 "util/configparser.y" /* yacc.c:1646 */
36563725 {
36573726 OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
36583727 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
36593728 yyerror("out of memory");
36603729 }
3661 #line 3663 "util/configparser.c" /* yacc.c:1646 */
3662 break;
3663
3664 case 276:
3665 #line 1432 "util/configparser.y" /* yacc.c:1646 */
3730 #line 3732 "util/configparser.c" /* yacc.c:1646 */
3731 break;
3732
3733 case 283:
3734 #line 1478 "util/configparser.y" /* yacc.c:1646 */
36663735 {
36673736 OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
36683737 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36703739 else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
36713740 free((yyvsp[0].str));
36723741 }
3673 #line 3675 "util/configparser.c" /* yacc.c:1646 */
3674 break;
3675
3676 case 277:
3677 #line 1441 "util/configparser.y" /* yacc.c:1646 */
3742 #line 3744 "util/configparser.c" /* yacc.c:1646 */
3743 break;
3744
3745 case 284:
3746 #line 1487 "util/configparser.y" /* yacc.c:1646 */
36783747 {
36793748 OUTYY(("\nP(remote-control:)\n"));
36803749 }
3681 #line 3683 "util/configparser.c" /* yacc.c:1646 */
3682 break;
3683
3684 case 288:
3685 #line 1452 "util/configparser.y" /* yacc.c:1646 */
3750 #line 3752 "util/configparser.c" /* yacc.c:1646 */
3751 break;
3752
3753 case 295:
3754 #line 1498 "util/configparser.y" /* yacc.c:1646 */
36863755 {
36873756 OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
36883757 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36913760 (strcmp((yyvsp[0].str), "yes")==0);
36923761 free((yyvsp[0].str));
36933762 }
3694 #line 3696 "util/configparser.c" /* yacc.c:1646 */
3695 break;
3696
3697 case 289:
3698 #line 1462 "util/configparser.y" /* yacc.c:1646 */
3763 #line 3765 "util/configparser.c" /* yacc.c:1646 */
3764 break;
3765
3766 case 296:
3767 #line 1508 "util/configparser.y" /* yacc.c:1646 */
36993768 {
37003769 OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
37013770 if(atoi((yyvsp[0].str)) == 0)
37033772 else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
37043773 free((yyvsp[0].str));
37053774 }
3706 #line 3708 "util/configparser.c" /* yacc.c:1646 */
3707 break;
3708
3709 case 290:
3710 #line 1471 "util/configparser.y" /* yacc.c:1646 */
3775 #line 3777 "util/configparser.c" /* yacc.c:1646 */
3776 break;
3777
3778 case 297:
3779 #line 1517 "util/configparser.y" /* yacc.c:1646 */
37113780 {
37123781 OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
37133782 if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
37143783 yyerror("out of memory");
37153784 }
3716 #line 3718 "util/configparser.c" /* yacc.c:1646 */
3717 break;
3718
3719 case 291:
3720 #line 1478 "util/configparser.y" /* yacc.c:1646 */
3785 #line 3787 "util/configparser.c" /* yacc.c:1646 */
3786 break;
3787
3788 case 298:
3789 #line 1524 "util/configparser.y" /* yacc.c:1646 */
37213790 {
37223791 OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
37233792 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37263795 (strcmp((yyvsp[0].str), "yes")==0);
37273796 free((yyvsp[0].str));
37283797 }
3729 #line 3731 "util/configparser.c" /* yacc.c:1646 */
3730 break;
3731
3732 case 292:
3733 #line 1488 "util/configparser.y" /* yacc.c:1646 */
3798 #line 3800 "util/configparser.c" /* yacc.c:1646 */
3799 break;
3800
3801 case 299:
3802 #line 1534 "util/configparser.y" /* yacc.c:1646 */
37343803 {
37353804 OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
37363805 free(cfg_parser->cfg->server_key_file);
37373806 cfg_parser->cfg->server_key_file = (yyvsp[0].str);
37383807 }
3739 #line 3741 "util/configparser.c" /* yacc.c:1646 */
3740 break;
3741
3742 case 293:
3743 #line 1495 "util/configparser.y" /* yacc.c:1646 */
3808 #line 3810 "util/configparser.c" /* yacc.c:1646 */
3809 break;
3810
3811 case 300:
3812 #line 1541 "util/configparser.y" /* yacc.c:1646 */
37443813 {
37453814 OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
37463815 free(cfg_parser->cfg->server_cert_file);
37473816 cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
37483817 }
3749 #line 3751 "util/configparser.c" /* yacc.c:1646 */
3750 break;
3751
3752 case 294:
3753 #line 1502 "util/configparser.y" /* yacc.c:1646 */
3818 #line 3820 "util/configparser.c" /* yacc.c:1646 */
3819 break;
3820
3821 case 301:
3822 #line 1548 "util/configparser.y" /* yacc.c:1646 */
37543823 {
37553824 OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
37563825 free(cfg_parser->cfg->control_key_file);
37573826 cfg_parser->cfg->control_key_file = (yyvsp[0].str);
37583827 }
3759 #line 3761 "util/configparser.c" /* yacc.c:1646 */
3760 break;
3761
3762 case 295:
3763 #line 1509 "util/configparser.y" /* yacc.c:1646 */
3828 #line 3830 "util/configparser.c" /* yacc.c:1646 */
3829 break;
3830
3831 case 302:
3832 #line 1555 "util/configparser.y" /* yacc.c:1646 */
37643833 {
37653834 OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
37663835 free(cfg_parser->cfg->control_cert_file);
37673836 cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
37683837 }
3769 #line 3771 "util/configparser.c" /* yacc.c:1646 */
3770 break;
3771
3772 case 296:
3773 #line 1516 "util/configparser.y" /* yacc.c:1646 */
3838 #line 3840 "util/configparser.c" /* yacc.c:1646 */
3839 break;
3840
3841 case 303:
3842 #line 1562 "util/configparser.y" /* yacc.c:1646 */
37743843 {
37753844 OUTYY(("\nP(dnstap:)\n"));
37763845 }
3777 #line 3779 "util/configparser.c" /* yacc.c:1646 */
3778 break;
3779
3780 case 311:
3781 #line 1533 "util/configparser.y" /* yacc.c:1646 */
3846 #line 3848 "util/configparser.c" /* yacc.c:1646 */
3847 break;
3848
3849 case 318:
3850 #line 1579 "util/configparser.y" /* yacc.c:1646 */
37823851 {
37833852 OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
37843853 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37853854 yyerror("expected yes or no.");
37863855 else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
37873856 }
3788 #line 3790 "util/configparser.c" /* yacc.c:1646 */
3789 break;
3790
3791 case 312:
3792 #line 1541 "util/configparser.y" /* yacc.c:1646 */
3857 #line 3859 "util/configparser.c" /* yacc.c:1646 */
3858 break;
3859
3860 case 319:
3861 #line 1587 "util/configparser.y" /* yacc.c:1646 */
37933862 {
37943863 OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
37953864 free(cfg_parser->cfg->dnstap_socket_path);
37963865 cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
37973866 }
3798 #line 3800 "util/configparser.c" /* yacc.c:1646 */
3799 break;
3800
3801 case 313:
3802 #line 1548 "util/configparser.y" /* yacc.c:1646 */
3867 #line 3869 "util/configparser.c" /* yacc.c:1646 */
3868 break;
3869
3870 case 320:
3871 #line 1594 "util/configparser.y" /* yacc.c:1646 */
38033872 {
38043873 OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
38053874 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38063875 yyerror("expected yes or no.");
38073876 else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
38083877 }
3809 #line 3811 "util/configparser.c" /* yacc.c:1646 */
3810 break;
3811
3812 case 314:
3813 #line 1556 "util/configparser.y" /* yacc.c:1646 */
3878 #line 3880 "util/configparser.c" /* yacc.c:1646 */
3879 break;
3880
3881 case 321:
3882 #line 1602 "util/configparser.y" /* yacc.c:1646 */
38143883 {
38153884 OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
38163885 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38173886 yyerror("expected yes or no.");
38183887 else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
38193888 }
3820 #line 3822 "util/configparser.c" /* yacc.c:1646 */
3821 break;
3822
3823 case 315:
3824 #line 1564 "util/configparser.y" /* yacc.c:1646 */
3889 #line 3891 "util/configparser.c" /* yacc.c:1646 */
3890 break;
3891
3892 case 322:
3893 #line 1610 "util/configparser.y" /* yacc.c:1646 */
38253894 {
38263895 OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
38273896 free(cfg_parser->cfg->dnstap_identity);
38283897 cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
38293898 }
3830 #line 3832 "util/configparser.c" /* yacc.c:1646 */
3831 break;
3832
3833 case 316:
3834 #line 1571 "util/configparser.y" /* yacc.c:1646 */
3899 #line 3901 "util/configparser.c" /* yacc.c:1646 */
3900 break;
3901
3902 case 323:
3903 #line 1617 "util/configparser.y" /* yacc.c:1646 */
38353904 {
38363905 OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
38373906 free(cfg_parser->cfg->dnstap_version);
38383907 cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
38393908 }
3840 #line 3842 "util/configparser.c" /* yacc.c:1646 */
3841 break;
3842
3843 case 317:
3844 #line 1578 "util/configparser.y" /* yacc.c:1646 */
3909 #line 3911 "util/configparser.c" /* yacc.c:1646 */
3910 break;
3911
3912 case 324:
3913 #line 1624 "util/configparser.y" /* yacc.c:1646 */
38453914 {
38463915 OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
38473916 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38493918 else cfg_parser->cfg->dnstap_log_resolver_query_messages =
38503919 (strcmp((yyvsp[0].str), "yes")==0);
38513920 }
3852 #line 3854 "util/configparser.c" /* yacc.c:1646 */
3853 break;
3854
3855 case 318:
3856 #line 1587 "util/configparser.y" /* yacc.c:1646 */
3921 #line 3923 "util/configparser.c" /* yacc.c:1646 */
3922 break;
3923
3924 case 325:
3925 #line 1633 "util/configparser.y" /* yacc.c:1646 */
38573926 {
38583927 OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
38593928 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38613930 else cfg_parser->cfg->dnstap_log_resolver_response_messages =
38623931 (strcmp((yyvsp[0].str), "yes")==0);
38633932 }
3864 #line 3866 "util/configparser.c" /* yacc.c:1646 */
3865 break;
3866
3867 case 319:
3868 #line 1596 "util/configparser.y" /* yacc.c:1646 */
3933 #line 3935 "util/configparser.c" /* yacc.c:1646 */
3934 break;
3935
3936 case 326:
3937 #line 1642 "util/configparser.y" /* yacc.c:1646 */
38693938 {
38703939 OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
38713940 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38733942 else cfg_parser->cfg->dnstap_log_client_query_messages =
38743943 (strcmp((yyvsp[0].str), "yes")==0);
38753944 }
3876 #line 3878 "util/configparser.c" /* yacc.c:1646 */
3877 break;
3878
3879 case 320:
3880 #line 1605 "util/configparser.y" /* yacc.c:1646 */
3945 #line 3947 "util/configparser.c" /* yacc.c:1646 */
3946 break;
3947
3948 case 327:
3949 #line 1651 "util/configparser.y" /* yacc.c:1646 */
38813950 {
38823951 OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
38833952 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38853954 else cfg_parser->cfg->dnstap_log_client_response_messages =
38863955 (strcmp((yyvsp[0].str), "yes")==0);
38873956 }
3888 #line 3890 "util/configparser.c" /* yacc.c:1646 */
3889 break;
3890
3891 case 321:
3892 #line 1614 "util/configparser.y" /* yacc.c:1646 */
3957 #line 3959 "util/configparser.c" /* yacc.c:1646 */
3958 break;
3959
3960 case 328:
3961 #line 1660 "util/configparser.y" /* yacc.c:1646 */
38933962 {
38943963 OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
38953964 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38973966 else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
38983967 (strcmp((yyvsp[0].str), "yes")==0);
38993968 }
3900 #line 3902 "util/configparser.c" /* yacc.c:1646 */
3901 break;
3902
3903 case 322:
3904 #line 1623 "util/configparser.y" /* yacc.c:1646 */
3969 #line 3971 "util/configparser.c" /* yacc.c:1646 */
3970 break;
3971
3972 case 329:
3973 #line 1669 "util/configparser.y" /* yacc.c:1646 */
39053974 {
39063975 OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
39073976 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
39093978 else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
39103979 (strcmp((yyvsp[0].str), "yes")==0);
39113980 }
3912 #line 3914 "util/configparser.c" /* yacc.c:1646 */
3913 break;
3914
3915 case 323:
3916 #line 1632 "util/configparser.y" /* yacc.c:1646 */
3981 #line 3983 "util/configparser.c" /* yacc.c:1646 */
3982 break;
3983
3984 case 330:
3985 #line 1678 "util/configparser.y" /* yacc.c:1646 */
39173986 {
39183987 OUTYY(("\nP(python:)\n"));
39193988 }
3920 #line 3922 "util/configparser.c" /* yacc.c:1646 */
3921 break;
3922
3923 case 327:
3924 #line 1641 "util/configparser.y" /* yacc.c:1646 */
3989 #line 3991 "util/configparser.c" /* yacc.c:1646 */
3990 break;
3991
3992 case 334:
3993 #line 1687 "util/configparser.y" /* yacc.c:1646 */
39253994 {
39263995 OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
39273996 free(cfg_parser->cfg->python_script);
39283997 cfg_parser->cfg->python_script = (yyvsp[0].str);
39293998 }
3930 #line 3932 "util/configparser.c" /* yacc.c:1646 */
3931 break;
3932
3933
3934 #line 3936 "util/configparser.c" /* yacc.c:1646 */
3999 #line 4001 "util/configparser.c" /* yacc.c:1646 */
4000 break;
4001
4002 case 335:
4003 #line 1693 "util/configparser.y" /* yacc.c:1646 */
4004 {
4005 OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
4006 if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4007 yyerror("expected yes or no.");
4008 else cfg_parser->cfg->disable_dnssec_lame_check =
4009 (strcmp((yyvsp[0].str), "yes")==0);
4010 free((yyvsp[0].str));
4011 }
4012 #line 4014 "util/configparser.c" /* yacc.c:1646 */
4013 break;
4014
4015
4016 #line 4018 "util/configparser.c" /* yacc.c:1646 */
39354017 default: break;
39364018 }
39374019 /* User semantic actions sometimes alter yychar, and that requires
41594241 #endif
41604242 return yyresult;
41614243 }
4162 #line 1646 "util/configparser.y" /* yacc.c:1906 */
4244 #line 1701 "util/configparser.y" /* yacc.c:1906 */
41634245
41644246
41654247 /* parse helper routines could be here */
197197 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 408,
198198 VAR_HARDEN_ALGO_DOWNGRADE = 409,
199199 VAR_IP_TRANSPARENT = 410,
200 VAR_RATELIMIT = 411,
201 VAR_RATELIMIT_SLABS = 412,
202 VAR_RATELIMIT_SIZE = 413,
203 VAR_RATELIMIT_FOR_DOMAIN = 414,
204 VAR_RATELIMIT_BELOW_DOMAIN = 415,
205 VAR_RATELIMIT_FACTOR = 416,
206 VAR_CAPS_WHITELIST = 417,
207 VAR_CACHE_MAX_NEGATIVE_TTL = 418,
208 VAR_PERMIT_SMALL_HOLDDOWN = 419,
209 VAR_QNAME_MINIMISATION = 420
200 VAR_DISABLE_DNSSEC_LAME_CHECK = 411,
201 VAR_RATELIMIT = 412,
202 VAR_RATELIMIT_SLABS = 413,
203 VAR_RATELIMIT_SIZE = 414,
204 VAR_RATELIMIT_FOR_DOMAIN = 415,
205 VAR_RATELIMIT_BELOW_DOMAIN = 416,
206 VAR_RATELIMIT_FACTOR = 417,
207 VAR_CAPS_WHITELIST = 418,
208 VAR_CACHE_MAX_NEGATIVE_TTL = 419,
209 VAR_PERMIT_SMALL_HOLDDOWN = 420,
210 VAR_QNAME_MINIMISATION = 421,
211 VAR_IP_FREEBIND = 422,
212 VAR_DEFINE_TAG = 423,
213 VAR_LOCAL_ZONE_TAG = 424
210214 };
211215 #endif
212216 /* Tokens. */
363367 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 408
364368 #define VAR_HARDEN_ALGO_DOWNGRADE 409
365369 #define VAR_IP_TRANSPARENT 410
366 #define VAR_RATELIMIT 411
367 #define VAR_RATELIMIT_SLABS 412
368 #define VAR_RATELIMIT_SIZE 413
369 #define VAR_RATELIMIT_FOR_DOMAIN 414
370 #define VAR_RATELIMIT_BELOW_DOMAIN 415
371 #define VAR_RATELIMIT_FACTOR 416
372 #define VAR_CAPS_WHITELIST 417
373 #define VAR_CACHE_MAX_NEGATIVE_TTL 418
374 #define VAR_PERMIT_SMALL_HOLDDOWN 419
375 #define VAR_QNAME_MINIMISATION 420
370 #define VAR_DISABLE_DNSSEC_LAME_CHECK 411
371 #define VAR_RATELIMIT 412
372 #define VAR_RATELIMIT_SLABS 413
373 #define VAR_RATELIMIT_SIZE 414
374 #define VAR_RATELIMIT_FOR_DOMAIN 415
375 #define VAR_RATELIMIT_BELOW_DOMAIN 416
376 #define VAR_RATELIMIT_FACTOR 417
377 #define VAR_CAPS_WHITELIST 418
378 #define VAR_CACHE_MAX_NEGATIVE_TTL 419
379 #define VAR_PERMIT_SMALL_HOLDDOWN 420
380 #define VAR_QNAME_MINIMISATION 421
381 #define VAR_IP_FREEBIND 422
382 #define VAR_DEFINE_TAG 423
383 #define VAR_LOCAL_ZONE_TAG 424
376384
377385 /* Value type. */
378386 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
383391
384392 char* str;
385393
386 #line 388 "util/configparser.h" /* yacc.c:1909 */
394 #line 396 "util/configparser.h" /* yacc.c:1909 */
387395 };
388396
389397 typedef union YYSTYPE YYSTYPE;
120120 %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES
121121 %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES
122122 %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT
123 %token VAR_DISABLE_DNSSEC_LAME_CHECK
123124 %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE
124125 %token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN VAR_RATELIMIT_FACTOR
125126 %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN
126 %token VAR_QNAME_MINIMISATION
127 %token VAR_QNAME_MINIMISATION VAR_IP_FREEBIND VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG
127128
128129 %%
129130 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
190191 server_ratelimit_size | server_ratelimit_for_domain |
191192 server_ratelimit_below_domain | server_ratelimit_factor |
192193 server_caps_whitelist | server_cache_max_negative_ttl |
193 server_permit_small_holddown | server_qname_minimisation
194 server_permit_small_holddown | server_qname_minimisation |
195 server_ip_freebind | server_define_tag | server_local_zone_tag |
196 server_disable_dnssec_lame_check
194197 ;
195198 stubstart: VAR_STUB_ZONE
196199 {
661664 free($2);
662665 }
663666 ;
667 server_ip_freebind: VAR_IP_FREEBIND STRING_ARG
668 {
669 OUTYY(("P(server_ip_freebind:%s)\n", $2));
670 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
671 yyerror("expected yes or no.");
672 else cfg_parser->cfg->ip_freebind =
673 (strcmp($2, "yes")==0);
674 free($2);
675 }
676 ;
664677 server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG
665678 {
666679 OUTYY(("P(server_edns_buffer_size:%s)\n", $2));
12851298 free($2);
12861299 }
12871300 ;
1301 server_define_tag: VAR_DEFINE_TAG STRING_ARG
1302 {
1303 char* p, *s = $2;
1304 OUTYY(("P(server_define_tag:%s)\n", $2));
1305 while((p=strsep(&s, " \t\n")) != NULL) {
1306 if(*p) {
1307 if(!config_add_tag(cfg_parser->cfg, p))
1308 yyerror("could not define-tag, "
1309 "out of memory");
1310 }
1311 }
1312 free($2);
1313 }
1314 ;
1315 server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG
1316 {
1317 size_t len = 0;
1318 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3,
1319 &len);
1320 free($3);
1321 OUTYY(("P(server_local_zone_tag:%s)\n", $2));
1322 if(!bitlist)
1323 yyerror("could not parse tags, (define-tag them first)");
1324 if(bitlist) {
1325 if(!cfg_strbytelist_insert(
1326 &cfg_parser->cfg->local_zone_tags,
1327 $2, bitlist, len)) {
1328 yyerror("out of memory");
1329 free($2);
1330 }
1331 }
1332 }
1333 ;
12881334 server_ratelimit: VAR_RATELIMIT STRING_ARG
12891335 {
12901336 OUTYY(("P(server_ratelimit:%s)\n", $2));
16421688 free(cfg_parser->cfg->python_script);
16431689 cfg_parser->cfg->python_script = $2;
16441690 }
1691 server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG
1692 {
1693 OUTYY(("P(disable_dnssec_lame_check:%s)\n", $2));
1694 if (strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
1695 yyerror("expected yes or no.");
1696 else cfg_parser->cfg->disable_dnssec_lame_check =
1697 (strcmp($2, "yes")==0);
1698 free($2);
1699 }
16451700 %%
16461701
16471702 /* parse helper routines could be here */
255255 log_assert(len1 == len2 && len1 != 0);
256256 /* compare labels */
257257 while(len1--) {
258 if(tolower((unsigned char)*d1++) != tolower((unsigned char)*d2++)) {
259 if(tolower((unsigned char)d1[-1]) < tolower((unsigned char)d2[-1]))
258 if(tolower((unsigned char)*d1) != tolower((unsigned char)*d2)) {
259 if(tolower((unsigned char)*d1) < tolower((unsigned char)*d2))
260260 return -1;
261261 return 1;
262262 }
263 d1++;
264 d2++;
263265 }
264266 len1 = *d1++;
265267 len2 = *d2++;
280282 log_assert(lablen <= LDNS_MAX_LABELLEN);
281283 labuf[0] = lablen;
282284 i=0;
283 while(lablen--)
284 labuf[++i] = (uint8_t)tolower((unsigned char)*dname++);
285 while(lablen--) {
286 labuf[++i] = (uint8_t)tolower((unsigned char)*dname);
287 dname++;
288 }
285289 h = hashlittle(labuf, labuf[0] + 1, h);
286290 lablen = *dname++;
287291 }
308312 log_assert(lablen <= LDNS_MAX_LABELLEN);
309313 labuf[0] = lablen;
310314 i=0;
311 while(lablen--)
312 labuf[++i] = (uint8_t)tolower((unsigned char)*dname++);
315 while(lablen--) {
316 labuf[++i] = (uint8_t)tolower((unsigned char)*dname);
317 dname++;
318 }
313319 h = hashlittle(labuf, labuf[0] + 1, h);
314320 lablen = *dname++;
315321 }
716716 uint16_t
717717 calc_edns_field_size(struct edns_data* edns)
718718 {
719 size_t rdatalen = 0;
720 struct edns_option* opt;
719721 if(!edns || !edns->edns_present)
720722 return 0;
721 /* domain root '.' + type + class + ttl + rdatalen(=0) */
722 return 1 + 2 + 2 + 4 + 2;
723 for(opt = edns->opt_list; opt; opt = opt->next) {
724 rdatalen += 4 + opt->opt_len;
725 }
726 /* domain root '.' + type + class + ttl + rdatalen */
727 return 1 + 2 + 2 + 4 + 2 + rdatalen;
723728 }
724729
725730 void
726731 attach_edns_record(sldns_buffer* pkt, struct edns_data* edns)
727732 {
728733 size_t len;
734 size_t rdatapos;
735 struct edns_option* opt;
729736 if(!edns || !edns->edns_present)
730737 return;
731738 /* inc additional count */
741748 sldns_buffer_write_u8(pkt, edns->ext_rcode); /* ttl */
742749 sldns_buffer_write_u8(pkt, edns->edns_version);
743750 sldns_buffer_write_u16(pkt, edns->bits);
751 rdatapos = sldns_buffer_position(pkt);
744752 sldns_buffer_write_u16(pkt, 0); /* rdatalen */
753 /* write rdata */
754 for(opt=edns->opt_list; opt; opt=opt->next) {
755 sldns_buffer_write_u16(pkt, opt->opt_code);
756 sldns_buffer_write_u16(pkt, opt->opt_len);
757 if(opt->opt_len != 0)
758 sldns_buffer_write(pkt, opt->opt_data, opt->opt_len);
759 }
760 if(edns->opt_list)
761 sldns_buffer_write_u16_at(pkt, rdatapos,
762 sldns_buffer_position(pkt)-rdatapos-2);
745763 sldns_buffer_flip(pkt);
746764 }
747765
3737 */
3838 #include "config.h"
3939 #include "util/data/msgparse.h"
40 #include "util/data/msgreply.h"
4041 #include "util/data/dname.h"
4142 #include "util/data/packed_rrset.h"
4243 #include "util/storage/lookup3.h"
932933 return 0;
933934 }
934935
936 /** parse EDNS options from EDNS wireformat rdata */
937 static int
938 parse_edns_options(uint8_t* rdata_ptr, size_t rdata_len,
939 struct edns_data* edns, struct regional* region)
940 {
941 /* while still more options, and have code+len to read */
942 /* ignores partial content (i.e. rdata len 3) */
943 while(rdata_len >= 4) {
944 uint16_t opt_code = sldns_read_uint16(rdata_ptr);
945 uint16_t opt_len = sldns_read_uint16(rdata_ptr+2);
946 rdata_ptr += 4;
947 rdata_len -= 4;
948 if(opt_len > rdata_len)
949 break; /* option code partial */
950 if(!edns_opt_append(edns, region, opt_code, opt_len,
951 rdata_ptr)) {
952 log_err("out of memory");
953 return 0;
954 }
955 rdata_ptr += opt_len;
956 rdata_len -= opt_len;
957 }
958 return 1;
959 }
960
935961 int
936 parse_extract_edns(struct msg_parse* msg, struct edns_data* edns)
962 parse_extract_edns(struct msg_parse* msg, struct edns_data* edns,
963 struct regional* region)
937964 {
938965 struct rrset_parse* rrset = msg->rrset_first;
939966 struct rrset_parse* prev = 0;
940967 struct rrset_parse* found = 0;
941968 struct rrset_parse* found_prev = 0;
969 size_t rdata_len;
970 uint8_t* rdata_ptr;
942971 /* since the class encodes the UDP size, we cannot use hash table to
943972 * find the EDNS OPT record. Scan the packet. */
944973 while(rrset) {
9851014 edns->edns_version = found->rr_last->ttl_data[1];
9861015 edns->bits = sldns_read_uint16(&found->rr_last->ttl_data[2]);
9871016 edns->udp_size = ntohs(found->rrset_class);
988 /* ignore rdata and rrsigs */
1017 edns->opt_list = NULL;
1018
1019 /* take the options */
1020 rdata_len = found->rr_first->size;
1021 rdata_ptr = found->rr_first->ttl_data+6;
1022 if(!parse_edns_options(rdata_ptr, rdata_len, edns, region))
1023 return 0;
1024
1025 /* ignore rrsigs */
1026
9891027 return 0;
9901028 }
9911029
9921030 int
993 parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns)
994 {
1031 parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns,
1032 struct regional* region)
1033 {
1034 size_t rdata_len;
1035 uint8_t* rdata_ptr;
9951036 log_assert(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) == 1);
9961037 log_assert(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) == 0);
9971038 log_assert(LDNS_NSCOUNT(sldns_buffer_begin(pkt)) == 0);
10161057 edns->ext_rcode = sldns_buffer_read_u8(pkt); /* ttl used for bits */
10171058 edns->edns_version = sldns_buffer_read_u8(pkt);
10181059 edns->bits = sldns_buffer_read_u16(pkt);
1019 /* ignore rdata and rrsigs */
1060 edns->opt_list = NULL;
1061
1062 /* take the options */
1063 rdata_len = sldns_buffer_read_u16(pkt);
1064 if(sldns_buffer_remaining(pkt) < rdata_len)
1065 return LDNS_RCODE_FORMERR;
1066 rdata_ptr = sldns_buffer_current(pkt);
1067 if(!parse_edns_options(rdata_ptr, rdata_len, edns, region))
1068 return LDNS_RCODE_SERVFAIL;
1069
1070 /* ignore rrsigs */
1071
10201072 return 0;
10211073 }
6868 struct rrset_parse;
6969 struct rr_parse;
7070 struct regional;
71 struct edns_option;
7172
7273 /** number of buckets in parse rrset hash table. Must be power of 2. */
7374 #define PARSE_TABLE_SIZE 32
201202
202203 /**
203204 * EDNS data storage
204 * EDNS rdata is ignored.
205 * rdata is parsed in a list (has accessor functions). allocated in a
206 * region.
205207 */
206208 struct edns_data {
207209 /** if EDNS OPT record was present */
214216 uint16_t bits;
215217 /** UDP reassembly size. */
216218 uint16_t udp_size;
219 /** rdata element list, or NULL if none */
220 struct edns_option* opt_list;
221 };
222
223 /**
224 * EDNS option
225 */
226 struct edns_option {
227 /** next item in list */
228 struct edns_option* next;
229 /** type of this edns option */
230 uint16_t opt_code;
231 /** length of this edns option (cannot exceed uint16 in encoding) */
232 size_t opt_len;
233 /** data of this edns option; allocated in region, or NULL if len=0 */
234 uint8_t* opt_data;
217235 };
218236
219237 /**
248266 * @param msg: parsed message structure. Modified on exit, if EDNS was present
249267 * it is removed from the additional section.
250268 * @param edns: the edns data is stored here. Does not have to be initialised.
269 * @param region: region to alloc results in (edns option contents)
251270 * @return: 0 on success. or an RCODE on an error.
252271 * RCODE formerr if OPT in wrong section, and so on.
253272 */
254 int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns);
273 int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns,
274 struct regional* region);
255275
256276 /**
257277 * If EDNS data follows a query section, extract it and initialize edns struct.
259279 * section. At end, right after EDNS data or no movement if failed.
260280 * @param edns: the edns data allocated by the caller. Does not have to be
261281 * initialised.
282 * @param region: region to alloc results in (edns option contents)
262283 * @return: 0 on success, or an RCODE on error.
263284 * RCODE formerr if OPT is badly formatted and so on.
264285 */
265 int parse_edns_from_pkt(struct sldns_buffer* pkt, struct edns_data* edns);
286 int parse_edns_from_pkt(struct sldns_buffer* pkt, struct edns_data* edns,
287 struct regional* region);
266288
267289 /**
268290 * Calculate hash value for rrset in packet.
460460 if((ret = parse_packet(pkt, msg, region)) != 0) {
461461 return ret;
462462 }
463 if((ret = parse_extract_edns(msg, edns)) != 0)
463 if((ret = parse_extract_edns(msg, edns, region)) != 0)
464464 return ret;
465465
466466 /* parse OK, allocate return structures */
856856 }
857857 return 1;
858858 }
859
860 int edns_opt_append(struct edns_data* edns, struct regional* region,
861 uint16_t code, size_t len, uint8_t* data)
862 {
863 struct edns_option** prevp;
864 struct edns_option* opt;
865
866 /* allocate new element */
867 opt = (struct edns_option*)regional_alloc(region, sizeof(*opt));
868 if(!opt)
869 return 0;
870 opt->next = NULL;
871 opt->opt_code = code;
872 opt->opt_len = len;
873 opt->opt_data = regional_alloc_init(region, data, len);
874 if(!opt->opt_data)
875 return 0;
876
877 /* append at end of list */
878 prevp = &edns->opt_list;
879 while(*prevp != NULL)
880 prevp = &((*prevp)->next);
881 *prevp = opt;
882 return 1;
883 }
884
885 int edns_opt_inplace_reply(struct edns_data* edns, struct regional* region)
886 {
887 (void)region;
888 /* remove all edns options from the reply, because only the
889 * options that we understand should be in the reply
890 * (sec 6.1.2 RFC 6891) */
891 edns->opt_list = NULL;
892 return 1;
893 }
894
895 struct edns_option* edns_opt_copy_region(struct edns_option* list,
896 struct regional* region)
897 {
898 struct edns_option* result = NULL, *cur = NULL, *s;
899 while(list) {
900 /* copy edns option structure */
901 s = regional_alloc_init(region, list, sizeof(*list));
902 if(!s) return NULL;
903 s->next = NULL;
904
905 /* copy option data */
906 if(s->opt_data) {
907 s->opt_data = regional_alloc_init(region, s->opt_data,
908 s->opt_len);
909 if(!s->opt_data)
910 return NULL;
911 }
912
913 /* link into list */
914 if(cur)
915 cur->next = s;
916 else result = s;
917 cur = s;
918
919 /* examine next element */
920 list = list->next;
921 }
922 return result;
923 }
924
925 int edns_opt_compare(struct edns_option* p, struct edns_option* q)
926 {
927 if(!p && !q) return 0;
928 if(!p) return -1;
929 if(!q) return 1;
930 log_assert(p && q);
931 if(p->opt_code != q->opt_code)
932 return (int)q->opt_code - (int)p->opt_code;
933 if(p->opt_len != q->opt_len)
934 return (int)q->opt_len - (int)p->opt_len;
935 if(p->opt_len != 0)
936 return memcmp(p->opt_data, q->opt_data, p->opt_len);
937 return 0;
938 }
939
940 int edns_opt_list_compare(struct edns_option* p, struct edns_option* q)
941 {
942 int r;
943 while(p && q) {
944 r = edns_opt_compare(p, q);
945 if(r != 0)
946 return r;
947 p = p->next;
948 q = q->next;
949 }
950 if(p || q) {
951 /* uneven length lists */
952 if(p) return 1;
953 if(q) return -1;
954 }
955 return 0;
956 }
957
958 void edns_opt_list_free(struct edns_option* list)
959 {
960 struct edns_option* n;
961 while(list) {
962 free(list->opt_data);
963 n = list->next;
964 free(list);
965 list = n;
966 }
967 }
968
969 struct edns_option* edns_opt_copy_alloc(struct edns_option* list)
970 {
971 struct edns_option* result = NULL, *cur = NULL, *s;
972 while(list) {
973 /* copy edns option structure */
974 s = memdup(list, sizeof(*list));
975 if(!s) {
976 edns_opt_list_free(result);
977 return NULL;
978 }
979 s->next = NULL;
980
981 /* copy option data */
982 if(s->opt_data) {
983 s->opt_data = memdup(s->opt_data, s->opt_len);
984 if(!s->opt_data) {
985 edns_opt_list_free(result);
986 return NULL;
987 }
988 }
989
990 /* link into list */
991 if(cur)
992 cur->next = s;
993 else result = s;
994 cur = s;
995
996 /* examine next element */
997 list = list->next;
998 }
999 return result;
1000 }
1001
1002 struct edns_option* edns_opt_find(struct edns_option* list, uint16_t code)
1003 {
1004 struct edns_option* p;
1005 for(p=list; p; p=p->next) {
1006 if(p->opt_code == code)
1007 return p;
1008 }
1009 return NULL;
1010 }
436436 void log_query_info(enum verbosity_value v, const char* str,
437437 struct query_info* qinf);
438438
439 /**
440 * Append edns option to edns data structure
441 */
442 int edns_opt_append(struct edns_data* edns, struct regional* region,
443 uint16_t code, size_t len, uint8_t* data);
444
445 /**
446 * Find edns option in edns list
447 * @param list: list of edns options (eg. edns.opt_list)
448 * @param code: opt code to find.
449 * @return NULL or the edns_option element.
450 */
451 struct edns_option* edns_opt_find(struct edns_option* list, uint16_t code);
452
453 /**
454 * Transform edns data structure from query structure into reply structure.
455 * In place transform, for errors and cache replies.
456 * @param edns: on input contains the edns from the query. On output contains
457 * the edns for the answer. Add new options to the opt_list to put them
458 * in the answer (allocated in the region, with edns_opt_append).
459 * @param region: to allocate stuff in.
460 * @return false on failure (servfail to client, or for some error encodings,
461 * no EDNS options in the answer).
462 */
463 int edns_opt_inplace_reply(struct edns_data* edns, struct regional* region);
464
465 /**
466 * Copy edns option list allocated to the new region
467 */
468 struct edns_option* edns_opt_copy_region(struct edns_option* list,
469 struct regional* region);
470
471 /**
472 * Copy edns option list allocated with malloc
473 */
474 struct edns_option* edns_opt_copy_alloc(struct edns_option* list);
475
476 /**
477 * Free edns option list allocated with malloc
478 */
479 void edns_opt_list_free(struct edns_option* list);
480
481 /**
482 * Compare an edns option. (not entire list). Also compares contents.
483 */
484 int edns_opt_compare(struct edns_option* p, struct edns_option* q);
485
486 /**
487 * Compare edns option lists, also the order and contents of edns-options.
488 */
489 int edns_opt_list_compare(struct edns_option* p, struct edns_option* q);
490
439491 #endif /* UTIL_DATA_MSGREPLY_H */
7777 #ifdef WITH_PYTHONMODULE
7878 #include "pythonmod/pythonmod.h"
7979 #endif
80 #ifdef USE_CACHEDB
81 #include "cachedb/cachedb.h"
82 #endif
8083
8184 int
8285 fptr_whitelist_comm_point(comm_point_callback_t *fptr)
263266 fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
264267 uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
265268 uint16_t flags, int dnssec, int want_dnssec, int nocaps,
266 struct sockaddr_storage* addr, socklen_t addrlen,
267 uint8_t* zone, size_t zonelen,
269 struct edns_option* opt_list, struct sockaddr_storage* addr,
270 socklen_t addrlen, uint8_t* zone, size_t zonelen,
268271 struct module_qstate* q))
269272 {
270273 if(fptr == &worker_send_query) return 1;
314317 #ifdef WITH_PYTHONMODULE
315318 else if(fptr == &pythonmod_init) return 1;
316319 #endif
320 #ifdef USE_CACHEDB
321 else if(fptr == &cachedb_init) return 1;
322 #endif
317323 return 0;
318324 }
319325
326332 #ifdef WITH_PYTHONMODULE
327333 else if(fptr == &pythonmod_deinit) return 1;
328334 #endif
335 #ifdef USE_CACHEDB
336 else if(fptr == &cachedb_deinit) return 1;
337 #endif
329338 return 0;
330339 }
331340
339348 #ifdef WITH_PYTHONMODULE
340349 else if(fptr == &pythonmod_operate) return 1;
341350 #endif
351 #ifdef USE_CACHEDB
352 else if(fptr == &cachedb_operate) return 1;
353 #endif
342354 return 0;
343355 }
344356
352364 #ifdef WITH_PYTHONMODULE
353365 else if(fptr == &pythonmod_inform_super) return 1;
354366 #endif
367 #ifdef USE_CACHEDB
368 else if(fptr == &cachedb_inform_super) return 1;
369 #endif
355370 return 0;
356371 }
357372
365380 #ifdef WITH_PYTHONMODULE
366381 else if(fptr == &pythonmod_clear) return 1;
367382 #endif
383 #ifdef USE_CACHEDB
384 else if(fptr == &cachedb_clear) return 1;
385 #endif
368386 return 0;
369387 }
370388
376394 else if(fptr == &dns64_get_mem) return 1;
377395 #ifdef WITH_PYTHONMODULE
378396 else if(fptr == &pythonmod_get_mem) return 1;
397 #endif
398 #ifdef USE_CACHEDB
399 else if(fptr == &cachedb_get_mem) return 1;
379400 #endif
380401 return 0;
381402 }
211211 int fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
212212 uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
213213 uint16_t flags, int dnssec, int want_dnssec, int nocaps,
214 struct sockaddr_storage* addr, socklen_t addrlen,
214 struct edns_option*, struct sockaddr_storage* addr, socklen_t addrlen,
215215 uint8_t* zone, size_t zonelen,
216216 struct module_qstate* q));
217217
38433843 4412,
38443844 4413,
38453845 4416,
3846 4418,
3847 4420,
38463848 4425,
38473849 4426,
38483850 4430,
39033905 4599,
39043906 4600,
39053907 4601,
3908 4621,
39063909 4658,
39073910 4659,
39083911 4660,
42214224 5436,
42224225 5437,
42234226 5443,
4227 5450,
42244228 5453,
42254229 5454,
42264230 5455,
45974601 7201,
45984602 7227,
45994603 7235,
4604 7244,
46004605 7262,
46014606 7272,
46024607 7273,
46504655 7570,
46514656 7574,
46524657 7588,
4658 7606,
46534659 7624,
46544660 7627,
46554661 7628,
52685274 23004,
52695275 23005,
52705276 23272,
5277 23294,
52715278 23333,
52725279 23400,
52735280 23401,
213213 * EDNS, the answer is likely to be useless for this domain.
214214 * @param nocaps: do not use caps_for_id, use the qname as given.
215215 * (ignored if caps_for_id is disabled).
216 * @param opt_list: set these EDNS options on the outgoing packet.
217 * or NULL if none (the list is deep-copied).
216218 * @param addr: where to.
217219 * @param addrlen: length of addr.
218220 * @param zone: delegation point name.
225227 */
226228 struct outbound_entry* (*send_query)(uint8_t* qname, size_t qnamelen,
227229 uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec,
228 int want_dnssec, int nocaps, struct sockaddr_storage* addr,
229 socklen_t addrlen, uint8_t* zone, size_t zonelen,
230 struct module_qstate* q);
230 int want_dnssec, int nocaps, struct edns_option* opt_list,
231 struct sockaddr_storage* addr, socklen_t addrlen,
232 uint8_t* zone, size_t zonelen, struct module_qstate* q);
231233
232234 /**
233235 * Detach-subqueries.
782782 #endif
783783 }
784784
785 #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
785 #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK)
786786 /** global lock list for openssl locks */
787787 static lock_basic_t *ub_openssl_locks = NULL;
788788
807807
808808 int ub_openssl_lock_init(void)
809809 {
810 #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
810 #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK)
811811 int i;
812812 ub_openssl_locks = (lock_basic_t*)reallocarray(
813813 NULL, (size_t)CRYPTO_num_locks(), sizeof(lock_basic_t));
824824
825825 void ub_openssl_lock_delete(void)
826826 {
827 #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
827 #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK)
828828 int i;
829829 if(!ub_openssl_locks)
830830 return;
3939 */
4040 #include "config.h"
4141 #include "util/netevent.h"
42 #include "util/ub_event.h"
4243 #include "util/log.h"
4344 #include "util/net_help.h"
4445 #include "util/fptr_wlist.h"
8889 #define NUM_UDP_PER_SELECT 1
8990 #endif
9091
91 /* We define libevent structures here to hide the libevent stuff. */
92
93 #ifdef USE_MINI_EVENT
94 # ifdef USE_WINSOCK
95 # include "util/winsock_event.h"
96 # else
97 # include "util/mini_event.h"
98 # endif /* USE_WINSOCK */
99 #else /* USE_MINI_EVENT */
100 /* we use libevent */
101 # ifdef HAVE_EVENT_H
102 # include <event.h>
103 # else
104 # include "event2/event.h"
105 # include "event2/event_struct.h"
106 # include "event2/event_compat.h"
107 # endif
108 #endif /* USE_MINI_EVENT */
109
11092 /**
111 * The internal event structure for keeping libevent info for the event.
93 * The internal event structure for keeping ub_event info for the event.
11294 * Possibly other structures (list, tree) this is part of.
11395 */
11496 struct internal_event {
11597 /** the comm base */
11698 struct comm_base* base;
117 /** libevent event type, alloced here */
118 struct event ev;
99 /** ub_event event type */
100 struct ub_event* ev;
119101 };
120102
121103 /**
122104 * Internal base structure, so that every thread has its own events.
123105 */
124106 struct internal_base {
125 /** libevent event_base type. */
126 struct event_base* base;
107 /** ub_event event_base type. */
108 struct ub_event_base* base;
127109 /** seconds time pointer points here */
128110 time_t secs;
129111 /** timeval with current time */
130112 struct timeval now;
131113 /** the event used for slow_accept timeouts */
132 struct event slow_accept;
114 struct ub_event* slow_accept;
133115 /** true if slow_accept is enabled */
134116 int slow_accept_enabled;
135117 };
138120 * Internal timer structure, to store timer event in.
139121 */
140122 struct internal_timer {
123 /** the super struct from which derived */
124 struct comm_timer super;
141125 /** the comm base */
142126 struct comm_base* base;
143 /** libevent event type, alloced here */
144 struct event ev;
127 /** ub_event event type */
128 struct ub_event* ev;
145129 /** is timer enabled */
146130 uint8_t enabled;
147131 };
150134 * Internal signal structure, to store signal event in.
151135 */
152136 struct internal_signal {
153 /** libevent event type, alloced here */
154 struct event ev;
137 /** ub_event event type */
138 struct ub_event* ev;
155139 /** next in signal list */
156140 struct internal_signal* next;
157141 };
163147
164148 /* -------- End of local definitions -------- */
165149
166 #ifdef USE_MINI_EVENT
167 /** minievent updates the time when it blocks. */
168 #define comm_base_now(x) /* nothing to do */
169 #else /* !USE_MINI_EVENT */
170 /** fillup the time values in the event base */
171 static void
172 comm_base_now(struct comm_base* b)
173 {
174 if(gettimeofday(&b->eb->now, NULL) < 0) {
175 log_err("gettimeofday: %s", strerror(errno));
176 }
177 b->eb->secs = (time_t)b->eb->now.tv_sec;
178 }
179 #endif /* USE_MINI_EVENT */
180
181150 struct comm_base*
182151 comm_base_create(int sigs)
152 {
153 struct comm_base* b = (struct comm_base*)calloc(1,
154 sizeof(struct comm_base));
155 const char *evnm="event", *evsys="", *evmethod="";
156
157 if(!b)
158 return NULL;
159 b->eb = (struct internal_base*)calloc(1, sizeof(struct internal_base));
160 if(!b->eb) {
161 free(b);
162 return NULL;
163 }
164 b->eb->base = ub_default_event_base(sigs, &b->eb->secs, &b->eb->now);
165 if(!b->eb->base) {
166 free(b->eb);
167 free(b);
168 return NULL;
169 }
170 ub_comm_base_now(b);
171 ub_get_event_sys(b->eb->base, &evnm, &evsys, &evmethod);
172 verbose(VERB_ALGO, "%s %s user %s method.", evnm, evsys, evmethod);
173 return b;
174 }
175
176 struct comm_base*
177 comm_base_create_event(struct ub_event_base* base)
183178 {
184179 struct comm_base* b = (struct comm_base*)calloc(1,
185180 sizeof(struct comm_base));
190185 free(b);
191186 return NULL;
192187 }
193 #ifdef USE_MINI_EVENT
194 (void)sigs;
195 /* use mini event time-sharing feature */
196 b->eb->base = event_init(&b->eb->secs, &b->eb->now);
197 #else
198 # if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
199 /* libev */
200 if(sigs)
201 b->eb->base=(struct event_base *)ev_default_loop(EVFLAG_AUTO);
202 else
203 b->eb->base=(struct event_base *)ev_loop_new(EVFLAG_AUTO);
204 # else
205 (void)sigs;
206 # ifdef HAVE_EVENT_BASE_NEW
207 b->eb->base = event_base_new();
208 # else
209 b->eb->base = event_init();
210 # endif
211 # endif
212 #endif
213 if(!b->eb->base) {
214 free(b->eb);
215 free(b);
216 return NULL;
217 }
218 comm_base_now(b);
219 /* avoid event_get_method call which causes crashes even when
220 * not printing, because its result is passed */
221 verbose(VERB_ALGO,
222 #if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
223 "libev"
224 #elif defined(USE_MINI_EVENT)
225 "event "
226 #else
227 "libevent "
228 #endif
229 "%s uses %s method.",
230 event_get_version(),
231 #ifdef HAVE_EVENT_BASE_GET_METHOD
232 event_base_get_method(b->eb->base)
233 #else
234 "not_obtainable"
235 #endif
236 );
237 return b;
238 }
239
240 struct comm_base*
241 comm_base_create_event(struct event_base* base)
242 {
243 struct comm_base* b = (struct comm_base*)calloc(1,
244 sizeof(struct comm_base));
245 if(!b)
246 return NULL;
247 b->eb = (struct internal_base*)calloc(1, sizeof(struct internal_base));
248 if(!b->eb) {
249 free(b);
250 return NULL;
251 }
252188 b->eb->base = base;
253 comm_base_now(b);
189 ub_comm_base_now(b);
254190 return b;
255191 }
256192
260196 if(!b)
261197 return;
262198 if(b->eb->slow_accept_enabled) {
263 if(event_del(&b->eb->slow_accept) != 0) {
199 if(ub_event_del(b->eb->slow_accept) != 0) {
264200 log_err("could not event_del slow_accept");
265201 }
266 }
267 #ifdef USE_MINI_EVENT
268 event_base_free(b->eb->base);
269 #elif defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE)
270 /* only libevent 1.2+ has it, but in 1.2 it is broken -
271 assertion fails on signal handling ev that is not deleted
272 in libevent 1.3c (event_base_once appears) this is fixed. */
273 event_base_free(b->eb->base);
274 #endif /* HAVE_EVENT_BASE_FREE and HAVE_EVENT_BASE_ONCE */
202 ub_event_free(b->eb->slow_accept);
203 }
204 ub_event_base_free(b->eb->base);
275205 b->eb->base = NULL;
276206 free(b->eb);
277207 free(b);
283213 if(!b)
284214 return;
285215 if(b->eb->slow_accept_enabled) {
286 if(event_del(&b->eb->slow_accept) != 0) {
216 if(ub_event_del(b->eb->slow_accept) != 0) {
287217 log_err("could not event_del slow_accept");
288218 }
219 ub_event_free(b->eb->slow_accept);
289220 }
290221 b->eb->base = NULL;
291222 free(b->eb);
303234 comm_base_dispatch(struct comm_base* b)
304235 {
305236 int retval;
306 retval = event_base_dispatch(b->eb->base);
307 if(retval != 0) {
237 retval = ub_event_base_dispatch(b->eb->base);
238 if(retval < 0) {
308239 fatal_exit("event_dispatch returned error %d, "
309240 "errno is %s", retval, strerror(errno));
310241 }
312243
313244 void comm_base_exit(struct comm_base* b)
314245 {
315 if(event_base_loopexit(b->eb->base, NULL) != 0) {
246 if(ub_event_base_loopexit(b->eb->base) != 0) {
316247 log_err("Could not loopexit");
317248 }
318249 }
325256 b->cb_arg = arg;
326257 }
327258
328 struct event_base* comm_base_internal(struct comm_base* b)
259 struct ub_event_base* comm_base_internal(struct comm_base* b)
329260 {
330261 return b->eb->base;
331262 }
647578 rep.c = (struct comm_point*)arg;
648579 log_assert(rep.c->type == comm_udp);
649580
650 if(!(event&EV_READ))
581 if(!(event&UB_EV_READ))
651582 return;
652583 log_assert(rep.c && rep.c->buffer && rep.c->fd == fd);
653 comm_base_now(rep.c->ev->base);
584 ub_comm_base_now(rep.c->ev->base);
654585 for(i=0; i<NUM_UDP_PER_SELECT; i++) {
655586 sldns_buffer_clear(rep.c->buffer);
656587 rep.addrlen = (socklen_t)sizeof(rep.addr);
735666 rep.c = (struct comm_point*)arg;
736667 log_assert(rep.c->type == comm_udp);
737668
738 if(!(event&EV_READ))
669 if(!(event&UB_EV_READ))
739670 return;
740671 log_assert(rep.c && rep.c->buffer && rep.c->fd == fd);
741 comm_base_now(rep.c->ev->base);
672 ub_comm_base_now(rep.c->ev->base);
742673 for(i=0; i<NUM_UDP_PER_SELECT; i++) {
743674 sldns_buffer_clear(rep.c->buffer);
744675 rep.addrlen = (socklen_t)sizeof(rep.addr);
838769 /* set timeout, no mallocs */
839770 tv.tv_sec = NETEVENT_SLOW_ACCEPT_TIME/1000;
840771 tv.tv_usec = NETEVENT_SLOW_ACCEPT_TIME%1000;
841 event_set(&b->eb->slow_accept, -1, EV_TIMEOUT,
772 b->eb->slow_accept = ub_event_new(b->eb->base,
773 -1, UB_EV_TIMEOUT,
842774 comm_base_handle_slow_accept, b);
843 if(event_base_set(b->eb->base,
844 &b->eb->slow_accept) != 0) {
775 if(b->eb->slow_accept == NULL) {
845776 /* we do not want to log here, because
846777 * that would spam the logfiles.
847778 * error: "event_base_set failed." */
848779 }
849 if(event_add(&b->eb->slow_accept, &tv) != 0) {
780 else if(ub_event_add(b->eb->slow_accept, &tv)
781 != 0) {
850782 /* we do not want to log here,
851783 * error: "event_add failed." */
852784 }
860792 WSAGetLastError() == WSAECONNRESET)
861793 return -1;
862794 if(WSAGetLastError() == WSAEWOULDBLOCK) {
863 winsock_tcp_wouldblock(&c->ev->ev, EV_READ);
795 ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ);
864796 return -1;
865797 }
866798 log_err_addr("accept failed", wsa_strerror(WSAGetLastError()),
884816 if( (oper == (BIO_CB_READ|BIO_CB_RETURN) && argl == 0) ||
885817 (oper == (BIO_CB_GETS|BIO_CB_RETURN) && argl == 0)) {
886818 if(WSAGetLastError() == WSAEWOULDBLOCK)
887 winsock_tcp_wouldblock((struct event*)
888 BIO_get_callback_arg(b), EV_READ);
819 ub_winsock_tcp_wouldblock((struct ub_event*)
820 BIO_get_callback_arg(b), UB_EV_READ);
889821 }
890822 if( (oper == (BIO_CB_WRITE|BIO_CB_RETURN) && argl == 0) ||
891823 (oper == (BIO_CB_PUTS|BIO_CB_RETURN) && argl == 0)) {
892824 if(WSAGetLastError() == WSAEWOULDBLOCK)
893 winsock_tcp_wouldblock((struct event*)
894 BIO_get_callback_arg(b), EV_WRITE);
825 ub_winsock_tcp_wouldblock((struct ub_event*)
826 BIO_get_callback_arg(b), UB_EV_WRITE);
895827 }
896828 /* return original return value */
897829 return retvalue;
904836 SSL* ssl = (SSL*)thessl;
905837 /* set them both just in case, but usually they are the same BIO */
906838 BIO_set_callback(SSL_get_rbio(ssl), &win_bio_cb);
907 BIO_set_callback_arg(SSL_get_rbio(ssl), (char*)&c->ev->ev);
839 BIO_set_callback_arg(SSL_get_rbio(ssl), (char*)c->ev->ev);
908840 BIO_set_callback(SSL_get_wbio(ssl), &win_bio_cb);
909 BIO_set_callback_arg(SSL_get_wbio(ssl), (char*)&c->ev->ev);
841 BIO_set_callback_arg(SSL_get_wbio(ssl), (char*)c->ev->ev);
910842 }
911843 #endif
912844
916848 struct comm_point* c = (struct comm_point*)arg, *c_hdl;
917849 int new_fd;
918850 log_assert(c->type == comm_tcp_accept);
919 if(!(event & EV_READ)) {
851 if(!(event & UB_EV_READ)) {
920852 log_info("ignoring tcp accept event %d", (int)event);
921853 return;
922854 }
923 comm_base_now(c->ev->base);
855 ub_comm_base_now(c->ev->base);
924856 /* find free tcp handler. */
925857 if(!c->tcp_free) {
926858 log_warn("accepted too many tcp, connections full");
12961228 if(WSAGetLastError() == WSAEINPROGRESS)
12971229 return 1;
12981230 if(WSAGetLastError() == WSAEWOULDBLOCK) {
1299 winsock_tcp_wouldblock(&c->ev->ev, EV_READ);
1231 ub_winsock_tcp_wouldblock(c->ev->ev,
1232 UB_EV_READ);
13001233 return 1;
13011234 }
13021235 log_err_addr("read (in tcp s)",
13411274 if(WSAGetLastError() == WSAEINPROGRESS)
13421275 return 1;
13431276 if(WSAGetLastError() == WSAEWOULDBLOCK) {
1344 winsock_tcp_wouldblock(&c->ev->ev, EV_READ);
1277 ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ);
13451278 return 1;
13461279 }
13471280 log_err_addr("read (in tcp r)",
14001333 if(error == WSAEINPROGRESS)
14011334 return 1;
14021335 else if(error == WSAEWOULDBLOCK) {
1403 winsock_tcp_wouldblock(&c->ev->ev, EV_WRITE);
1336 ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE);
14041337 return 1;
14051338 } else if(error != 0 && verbosity < 2)
14061339 return 0;
14501383 if(WSAGetLastError() == WSAEINPROGRESS)
14511384 return 1;
14521385 if(WSAGetLastError() == WSAEWOULDBLOCK) {
1453 winsock_tcp_wouldblock(&c->ev->ev, EV_WRITE);
1386 ub_winsock_tcp_wouldblock(c->ev->ev,
1387 UB_EV_WRITE);
14541388 return 1;
14551389 }
14561390 log_err_addr("tcp send s",
14821416 if(WSAGetLastError() == WSAEINPROGRESS)
14831417 return 1;
14841418 if(WSAGetLastError() == WSAEWOULDBLOCK) {
1485 winsock_tcp_wouldblock(&c->ev->ev, EV_WRITE);
1419 ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE);
14861420 return 1;
14871421 }
14881422 log_err_addr("tcp send r", wsa_strerror(WSAGetLastError()),
15041438 {
15051439 struct comm_point* c = (struct comm_point*)arg;
15061440 log_assert(c->type == comm_tcp);
1507 comm_base_now(c->ev->base);
1508
1509 if(event&EV_READ) {
1441 ub_comm_base_now(c->ev->base);
1442
1443 if(event&UB_EV_READ) {
15101444 if(!comm_point_tcp_handle_read(fd, c, 0)) {
15111445 reclaim_tcp_handler(c);
15121446 if(!c->tcp_do_close) {
15181452 }
15191453 return;
15201454 }
1521 if(event&EV_WRITE) {
1455 if(event&UB_EV_WRITE) {
15221456 if(!comm_point_tcp_handle_write(fd, c)) {
15231457 reclaim_tcp_handler(c);
15241458 if(!c->tcp_do_close) {
15301464 }
15311465 return;
15321466 }
1533 if(event&EV_TIMEOUT) {
1467 if(event&UB_EV_TIMEOUT) {
15341468 verbose(VERB_QUERY, "tcp took too long, dropped");
15351469 reclaim_tcp_handler(c);
15361470 if(!c->tcp_do_close) {
15471481 {
15481482 struct comm_point* c = (struct comm_point*)arg;
15491483 log_assert(c->type == comm_local);
1550 comm_base_now(c->ev->base);
1551
1552 if(event&EV_READ) {
1484 ub_comm_base_now(c->ev->base);
1485
1486 if(event&UB_EV_READ) {
15531487 if(!comm_point_tcp_handle_read(fd, c, 1)) {
15541488 fptr_ok(fptr_whitelist_comm_point(c->callback));
15551489 (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED,
15661500 struct comm_point* c = (struct comm_point*)arg;
15671501 int err = NETEVENT_NOERROR;
15681502 log_assert(c->type == comm_raw);
1569 comm_base_now(c->ev->base);
1503 ub_comm_base_now(c->ev->base);
15701504
1571 if(event&EV_TIMEOUT)
1505 if(event&UB_EV_TIMEOUT)
15721506 err = NETEVENT_TIMEOUT;
15731507 fptr_ok(fptr_whitelist_comm_point_raw(c->callback));
15741508 (void)(*c->callback)(c, c->cb_arg, err, NULL);
16081542 c->inuse = 0;
16091543 c->callback = callback;
16101544 c->cb_arg = callback_arg;
1611 evbits = EV_READ | EV_PERSIST;
1612 /* libevent stuff */
1613 event_set(&c->ev->ev, c->fd, evbits, comm_point_udp_callback, c);
1614 if(event_base_set(base->eb->base, &c->ev->ev) != 0) {
1545 evbits = UB_EV_READ | UB_EV_PERSIST;
1546 /* ub_event stuff */
1547 c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
1548 comm_point_udp_callback, c);
1549 if(c->ev->ev == NULL) {
16151550 log_err("could not baseset udp event");
16161551 comm_point_delete(c);
16171552 return NULL;
16181553 }
1619 if(fd!=-1 && event_add(&c->ev->ev, c->timeout) != 0 ) {
1554 if(fd!=-1 && ub_event_add(c->ev->ev, c->timeout) != 0 ) {
16201555 log_err("could not add udp event");
16211556 comm_point_delete(c);
16221557 return NULL;
16591594 c->tcp_check_nb_connect = 0;
16601595 c->callback = callback;
16611596 c->cb_arg = callback_arg;
1662 evbits = EV_READ | EV_PERSIST;
1663 /* libevent stuff */
1664 event_set(&c->ev->ev, c->fd, evbits, comm_point_udp_ancil_callback, c);
1665 if(event_base_set(base->eb->base, &c->ev->ev) != 0) {
1597 evbits = UB_EV_READ | UB_EV_PERSIST;
1598 /* ub_event stuff */
1599 c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
1600 comm_point_udp_ancil_callback, c);
1601 if(c->ev->ev == NULL) {
16661602 log_err("could not baseset udp event");
16671603 comm_point_delete(c);
16681604 return NULL;
16691605 }
1670 if(fd!=-1 && event_add(&c->ev->ev, c->timeout) != 0 ) {
1606 if(fd!=-1 && ub_event_add(c->ev->ev, c->timeout) != 0 ) {
16711607 log_err("could not add udp event");
16721608 comm_point_delete(c);
16731609 return NULL;
17241660 /* add to parent free list */
17251661 c->tcp_free = parent->tcp_free;
17261662 parent->tcp_free = c;
1727 /* libevent stuff */
1728 evbits = EV_PERSIST | EV_READ | EV_TIMEOUT;
1729 event_set(&c->ev->ev, c->fd, evbits, comm_point_tcp_handle_callback, c);
1730 if(event_base_set(base->eb->base, &c->ev->ev) != 0)
1663 /* ub_event stuff */
1664 evbits = UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT;
1665 c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
1666 comm_point_tcp_handle_callback, c);
1667 if(c->ev->ev == NULL)
17311668 {
17321669 log_err("could not basetset tcphdl event");
17331670 parent->tcp_free = c->tcp_free;
17791716 c->tcp_check_nb_connect = 0;
17801717 c->callback = NULL;
17811718 c->cb_arg = NULL;
1782 evbits = EV_READ | EV_PERSIST;
1783 /* libevent stuff */
1784 event_set(&c->ev->ev, c->fd, evbits, comm_point_tcp_accept_callback, c);
1785 if(event_base_set(base->eb->base, &c->ev->ev) != 0 ||
1786 event_add(&c->ev->ev, c->timeout) != 0 )
1787 {
1719 evbits = UB_EV_READ | UB_EV_PERSIST;
1720 /* ub_event stuff */
1721 c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
1722 comm_point_tcp_accept_callback, c);
1723 if(c->ev->ev == NULL) {
1724 log_err("could not baseset tcpacc event");
1725 comm_point_delete(c);
1726 return NULL;
1727 }
1728 if (ub_event_add(c->ev->ev, c->timeout) != 0) {
17881729 log_err("could not add tcpacc event");
17891730 comm_point_delete(c);
17901731 return NULL;
17911732 }
1792
17931733 /* now prealloc the tcp handlers */
17941734 for(i=0; i<num; i++) {
17951735 c->tcp_handlers[i] = comm_point_create_tcp_handler(base,
18421782 c->repinfo.c = c;
18431783 c->callback = callback;
18441784 c->cb_arg = callback_arg;
1845 evbits = EV_PERSIST | EV_WRITE;
1846 event_set(&c->ev->ev, c->fd, evbits, comm_point_tcp_handle_callback, c);
1847 if(event_base_set(base->eb->base, &c->ev->ev) != 0)
1785 evbits = UB_EV_PERSIST | UB_EV_WRITE;
1786 c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
1787 comm_point_tcp_handle_callback, c);
1788 if(c->ev->ev == NULL)
18481789 {
1849 log_err("could not basetset tcpout event");
1790 log_err("could not baseset tcpout event");
18501791 sldns_buffer_free(c->buffer);
18511792 free(c->ev);
18521793 free(c);
18941835 c->tcp_check_nb_connect = 0;
18951836 c->callback = callback;
18961837 c->cb_arg = callback_arg;
1897 /* libevent stuff */
1898 evbits = EV_PERSIST | EV_READ;
1899 event_set(&c->ev->ev, c->fd, evbits, comm_point_local_handle_callback,
1900 c);
1901 if(event_base_set(base->eb->base, &c->ev->ev) != 0 ||
1902 event_add(&c->ev->ev, c->timeout) != 0 )
1903 {
1838 /* ub_event stuff */
1839 evbits = UB_EV_PERSIST | UB_EV_READ;
1840 c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
1841 comm_point_local_handle_callback, c);
1842 if(c->ev->ev == NULL) {
1843 log_err("could not baseset localhdl event");
1844 free(c->ev);
1845 free(c);
1846 return NULL;
1847 }
1848 if (ub_event_add(c->ev->ev, c->timeout) != 0) {
19041849 log_err("could not add localhdl event");
1850 ub_event_free(c->ev->ev);
19051851 free(c->ev);
19061852 free(c);
19071853 return NULL;
19421888 c->tcp_check_nb_connect = 0;
19431889 c->callback = callback;
19441890 c->cb_arg = callback_arg;
1945 /* libevent stuff */
1891 /* ub_event stuff */
19461892 if(writing)
1947 evbits = EV_PERSIST | EV_WRITE;
1948 else evbits = EV_PERSIST | EV_READ;
1949 event_set(&c->ev->ev, c->fd, evbits, comm_point_raw_handle_callback,
1950 c);
1951 if(event_base_set(base->eb->base, &c->ev->ev) != 0 ||
1952 event_add(&c->ev->ev, c->timeout) != 0 )
1953 {
1893 evbits = UB_EV_PERSIST | UB_EV_WRITE;
1894 else evbits = UB_EV_PERSIST | UB_EV_READ;
1895 c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
1896 comm_point_raw_handle_callback, c);
1897 if(c->ev->ev == NULL) {
1898 log_err("could not baseset rawhdl event");
1899 free(c->ev);
1900 free(c);
1901 return NULL;
1902 }
1903 if (ub_event_add(c->ev->ev, c->timeout) != 0) {
19541904 log_err("could not add rawhdl event");
1905 ub_event_free(c->ev->ev);
19551906 free(c->ev);
19561907 free(c);
19571908 return NULL;
19651916 if(!c)
19661917 return;
19671918 if(c->fd != -1)
1968 if(event_del(&c->ev->ev) != 0) {
1919 if(ub_event_del(c->ev->ev) != 0) {
19691920 log_err("could not event_del on close");
19701921 }
19711922 /* close fd after removing from event lists, or epoll.. is messed up */
20011952 free(c->timeout);
20021953 if(c->type == comm_tcp || c->type == comm_local)
20031954 sldns_buffer_free(c->buffer);
1955 ub_event_free(c->ev->ev);
20041956 free(c->ev);
20051957 free(c);
20061958 }
20502002 comm_point_stop_listening(struct comm_point* c)
20512003 {
20522004 verbose(VERB_ALGO, "comm point stop listening %d", c->fd);
2053 if(event_del(&c->ev->ev) != 0) {
2005 if(ub_event_del(c->ev->ev) != 0) {
20542006 log_err("event_del error to stoplisten");
20552007 }
20562008 }
20732025 return;
20742026 }
20752027 }
2076 c->ev->ev.ev_events |= EV_TIMEOUT;
2028 ub_event_add_bits(c->ev->ev, UB_EV_TIMEOUT);
20772029 #ifndef S_SPLINT_S /* splint fails on struct timeval. */
20782030 c->timeout->tv_sec = sec;
20792031 c->timeout->tv_usec = 0;
20802032 #endif /* S_SPLINT_S */
20812033 }
20822034 if(c->type == comm_tcp) {
2083 c->ev->ev.ev_events &= ~(EV_READ|EV_WRITE);
2035 ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE);
20842036 if(c->tcp_is_reading)
2085 c->ev->ev.ev_events |= EV_READ;
2086 else c->ev->ev.ev_events |= EV_WRITE;
2037 ub_event_add_bits(c->ev->ev, UB_EV_READ);
2038 else ub_event_add_bits(c->ev->ev, UB_EV_WRITE);
20872039 }
20882040 if(newfd != -1) {
20892041 if(c->fd != -1) {
20942046 #endif
20952047 }
20962048 c->fd = newfd;
2097 c->ev->ev.ev_fd = c->fd;
2098 }
2099 if(event_add(&c->ev->ev, sec==0?NULL:c->timeout) != 0) {
2049 ub_event_set_fd(c->ev->ev, c->fd);
2050 }
2051 if(ub_event_add(c->ev->ev, sec==0?NULL:c->timeout) != 0) {
21002052 log_err("event_add failed. in cpsl.");
21012053 }
21022054 }
21042056 void comm_point_listen_for_rw(struct comm_point* c, int rd, int wr)
21052057 {
21062058 verbose(VERB_ALGO, "comm point listen_for_rw %d %d", c->fd, wr);
2107 if(event_del(&c->ev->ev) != 0) {
2059 if(ub_event_del(c->ev->ev) != 0) {
21082060 log_err("event_del error to cplf");
21092061 }
2110 c->ev->ev.ev_events &= ~(EV_READ|EV_WRITE);
2111 if(rd) c->ev->ev.ev_events |= EV_READ;
2112 if(wr) c->ev->ev.ev_events |= EV_WRITE;
2113 if(event_add(&c->ev->ev, c->timeout) != 0) {
2062 ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE);
2063 if(rd) ub_event_add_bits(c->ev->ev, UB_EV_READ);
2064 if(wr) ub_event_add_bits(c->ev->ev, UB_EV_WRITE);
2065 if(ub_event_add(c->ev->ev, c->timeout) != 0) {
21142066 log_err("event_add failed. in cplf.");
21152067 }
21162068 }
21362088 struct comm_timer*
21372089 comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg)
21382090 {
2139 struct comm_timer *tm = (struct comm_timer*)calloc(1,
2140 sizeof(struct comm_timer));
2141 if(!tm)
2142 return NULL;
2143 tm->ev_timer = (struct internal_timer*)calloc(1,
2091 struct internal_timer *tm = (struct internal_timer*)calloc(1,
21442092 sizeof(struct internal_timer));
2145 if(!tm->ev_timer) {
2093 if(!tm) {
21462094 log_err("malloc failed");
2095 return NULL;
2096 }
2097 tm->super.ev_timer = tm;
2098 tm->base = base;
2099 tm->super.callback = cb;
2100 tm->super.cb_arg = cb_arg;
2101 tm->ev = ub_event_new(base->eb->base, -1, UB_EV_TIMEOUT,
2102 comm_timer_callback, &tm->super);
2103 if(tm->ev == NULL) {
2104 log_err("timer_create: event_base_set failed.");
21472105 free(tm);
21482106 return NULL;
21492107 }
2150 tm->ev_timer->base = base;
2151 tm->callback = cb;
2152 tm->cb_arg = cb_arg;
2153 event_set(&tm->ev_timer->ev, -1, EV_TIMEOUT,
2154 comm_timer_callback, tm);
2155 if(event_base_set(base->eb->base, &tm->ev_timer->ev) != 0) {
2156 log_err("timer_create: event_base_set failed.");
2157 free(tm->ev_timer);
2158 free(tm);
2159 return NULL;
2160 }
2161 return tm;
2108 return &tm->super;
21622109 }
21632110
21642111 void
21662113 {
21672114 if(!timer)
21682115 return;
2169 evtimer_del(&timer->ev_timer->ev);
2116 ub_timer_del(timer->ev_timer->ev);
21702117 timer->ev_timer->enabled = 0;
21712118 }
21722119
21762123 log_assert(tv);
21772124 if(timer->ev_timer->enabled)
21782125 comm_timer_disable(timer);
2179 event_set(&timer->ev_timer->ev, -1, EV_TIMEOUT,
2180 comm_timer_callback, timer);
2181 if(event_base_set(timer->ev_timer->base->eb->base,
2182 &timer->ev_timer->ev) != 0)
2183 log_err("comm_timer_set: set_base failed.");
2184 if(evtimer_add(&timer->ev_timer->ev, tv) != 0)
2126 if(ub_timer_add(timer->ev_timer->ev, timer->ev_timer->base->eb->base,
2127 comm_timer_callback, timer, tv) != 0)
21852128 log_err("comm_timer_set: evtimer_add failed.");
21862129 timer->ev_timer->enabled = 1;
21872130 }
21922135 if(!timer)
21932136 return;
21942137 comm_timer_disable(timer);
2138 /* Free the sub struct timer->ev_timer derived from the super struct timer.
2139 * i.e. assert(timer == timer->ev_timer)
2140 */
2141 ub_event_free(timer->ev_timer->ev);
21952142 free(timer->ev_timer);
2196 free(timer);
21972143 }
21982144
21992145 void
22002146 comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg)
22012147 {
22022148 struct comm_timer* tm = (struct comm_timer*)arg;
2203 if(!(event&EV_TIMEOUT))
2149 if(!(event&UB_EV_TIMEOUT))
22042150 return;
2205 comm_base_now(tm->ev_timer->base);
2151 ub_comm_base_now(tm->ev_timer->base);
22062152 tm->ev_timer->enabled = 0;
22072153 fptr_ok(fptr_whitelist_comm_timer(tm->callback));
22082154 (*tm->callback)(tm->cb_arg);
22152161 }
22162162
22172163 size_t
2218 comm_timer_get_mem(struct comm_timer* timer)
2219 {
2220 return sizeof(*timer) + sizeof(struct internal_timer);
2164 comm_timer_get_mem(struct comm_timer* ATTR_UNUSED(timer))
2165 {
2166 return sizeof(struct internal_timer);
22212167 }
22222168
22232169 struct comm_signal*
22412187 comm_signal_callback(int sig, short event, void* arg)
22422188 {
22432189 struct comm_signal* comsig = (struct comm_signal*)arg;
2244 if(!(event & EV_SIGNAL))
2190 if(!(event & UB_EV_SIGNAL))
22452191 return;
2246 comm_base_now(comsig->base);
2192 ub_comm_base_now(comsig->base);
22472193 fptr_ok(fptr_whitelist_comm_signal(comsig->callback));
22482194 (*comsig->callback)(sig, comsig->cb_arg);
22492195 }
22592205 }
22602206 log_assert(comsig);
22612207 /* add signal event */
2262 signal_set(&entry->ev, sig, comm_signal_callback, comsig);
2263 if(event_base_set(comsig->base->eb->base, &entry->ev) != 0) {
2264 log_err("Could not set signal base");
2208 entry->ev = ub_signal_new(comsig->base->eb->base, sig,
2209 comm_signal_callback, comsig);
2210 if(entry->ev == NULL) {
2211 log_err("Could not create signal event");
22652212 free(entry);
22662213 return 0;
22672214 }
2268 if(signal_add(&entry->ev, NULL) != 0) {
2215 if(ub_signal_add(entry->ev, NULL) != 0) {
22692216 log_err("Could not add signal handler");
2217 ub_event_free(entry->ev);
22702218 free(entry);
22712219 return 0;
22722220 }
22852233 p=comsig->ev_signal;
22862234 while(p) {
22872235 np = p->next;
2288 signal_del(&p->ev);
2236 ub_signal_del(p->ev);
2237 ub_event_free(p->ev);
22892238 free(p);
22902239 p = np;
22912240 }
6262 struct sldns_buffer;
6363 struct comm_point;
6464 struct comm_reply;
65 struct event_base;
65 struct ub_event_base;
6666
6767 /* internal event notification data storage structure. */
6868 struct internal_event;
6969 struct internal_base;
70 struct internal_timer;
70 struct internal_timer; /* A sub struct of the comm_timer super struct */
7171
7272 /** callback from communication point function type */
7373 typedef int comm_point_callback_t(struct comm_point*, void*, int,
264264 * Structure only for making timeout events.
265265 */
266266 struct comm_timer {
267 /** the internal event stuff */
267 /** the internal event stuff (derived) */
268268 struct internal_timer* ev_timer;
269269
270270 /** callback function, takes user arg only */
300300 struct comm_base* comm_base_create(int sigs);
301301
302302 /**
303 * Create comm base that uses the given event_base (underlying event
304 * mechanism pointer).
305 * @param base: underlying lib event base.
303 * Create comm base that uses the given ub_event_base (underlying pluggable
304 * event mechanism pointer).
305 * @param base: underlying pluggable event base.
306306 * @return: the new comm base. NULL on error.
307307 */
308 struct comm_base* comm_base_create_event(struct event_base* base);
308 struct comm_base* comm_base_create_event(struct ub_event_base* base);
309309
310310 /**
311311 * Delete comm base structure but not the underlying lib event base.
356356 /**
357357 * Access internal data structure (for util/tube.c on windows)
358358 * @param b: comm base
359 * @return event_base. Could be libevent, or internal event handler.
360 */
361 struct event_base* comm_base_internal(struct comm_base* b);
359 * @return ub_event_base.
360 */
361 struct ub_event_base* comm_base_internal(struct comm_base* b);
362362
363363 /**
364364 * Create an UDP comm point. Calls malloc.
4343 #include "util/net_help.h"
4444 #include "util/netevent.h"
4545 #include "util/fptr_wlist.h"
46 #include "util/ub_event.h"
4647
4748 #ifndef USE_WINSOCK
4849 /* on unix */
302303 d = r;
303304 while(d != (ssize_t)sizeof(len)) {
304305 if((r=write(fd, ((char*)&len)+d, sizeof(len)-d)) == -1) {
306 if(errno == EAGAIN)
307 continue; /* temporarily unavail: try again*/
305308 log_err("tube msg write failed: %s", strerror(errno));
306309 (void)fd_set_nonblock(fd);
307310 return 0;
311314 d = 0;
312315 while(d != (ssize_t)len) {
313316 if((r=write(fd, buf+d, len-d)) == -1) {
317 if(errno == EAGAIN)
318 continue; /* temporarily unavail: try again*/
314319 log_err("tube msg write failed: %s", strerror(errno));
315320 (void)fd_set_nonblock(fd);
316321 return 0;
536541 void tube_remove_bg_listen(struct tube* tube)
537542 {
538543 verbose(VERB_ALGO, "tube remove_bg_listen");
539 winsock_unregister_wsaevent(&tube->ev_listen);
544 ub_winsock_unregister_wsaevent(tube->ev_listen);
540545 }
541546
542547 void tube_remove_bg_write(struct tube* tube)
667672 tube->listen_arg = arg;
668673 if(!comm_base_internal(base))
669674 return 1; /* ignore when no comm base - testing */
670 return winsock_register_wsaevent(comm_base_internal(base),
671 &tube->ev_listen, tube->event, &tube_handle_signal, tube);
675 tube->ev_listen = ub_winsock_register_wsaevent(
676 comm_base_internal(base), tube->event, &tube_handle_signal, tube);
677 return tube->ev_listen ? 1 : 0;
672678 }
673679
674680 int tube_setup_bg_write(struct tube* ATTR_UNUSED(tube),
4747 struct tube_res_list;
4848 #ifdef USE_WINSOCK
4949 #include "util/locks.h"
50 #include "util/winsock_event.h"
5150 #endif
5251
5352 /**
9897 /** the windows sockets event (signaled if items in pipe) */
9998 WSAEVENT event;
10099 /** winsock event storage when registered with event base */
101 struct event ev_listen;
100 struct ub_event* ev_listen;
102101
103102 /** lock on the list of outstanding items */
104103 lock_basic_t res_lock;
0 /*
1 * util/ub_event.c - directly call libevent (compatability) functions
2 *
3 * Copyright (c) 2007, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 /**
36 * \file
37 *
38 * This file contains and implementation for the indirection layer for pluggable
39 * events that transparently passes it either directly to libevent, or calls
40 * the libevent compatibility layer functions.
41 */
42 #include "config.h"
43 #include <sys/time.h>
44 #include "util/ub_event.h"
45 #include "util/log.h"
46 #include "util/netevent.h"
47 #include "util/tube.h"
48
49 /* We define libevent structures here to hide the libevent stuff. */
50
51 #ifdef USE_MINI_EVENT
52 # ifdef USE_WINSOCK
53 # include "util/winsock_event.h"
54 # else
55 # include "util/mini_event.h"
56 # endif /* USE_WINSOCK */
57 #else /* USE_MINI_EVENT */
58 /* we use libevent */
59 # ifdef HAVE_EVENT_H
60 # include <event.h>
61 # else
62 # include "event2/event.h"
63 # include "event2/event_struct.h"
64 # include "event2/event_compat.h"
65 # endif
66 #endif /* USE_MINI_EVENT */
67
68 #if UB_EV_TIMEOUT != EV_TIMEOUT || UB_EV_READ != EV_READ || \
69 UB_EV_WRITE != EV_WRITE || UB_EV_SIGNAL != EV_SIGNAL || \
70 UB_EV_PERSIST != EV_PERSIST
71 /* Only necessary for libev */
72 # define NATIVE_BITS(b) ( \
73 (((b) & UB_EV_TIMEOUT) ? EV_TIMEOUT : 0) \
74 | (((b) & UB_EV_READ ) ? EV_READ : 0) \
75 | (((b) & UB_EV_WRITE ) ? EV_WRITE : 0) \
76 | (((b) & UB_EV_SIGNAL ) ? EV_SIGNAL : 0) \
77 | (((b) & UB_EV_PERSIST) ? EV_PERSIST : 0))
78
79 # define UB_EV_BITS(b) ( \
80 (((b) & EV_TIMEOUT) ? UB_EV_TIMEOUT : 0) \
81 | (((b) & EV_READ ) ? UB_EV_READ : 0) \
82 | (((b) & EV_WRITE ) ? UB_EV_WRITE : 0) \
83 | (((b) & EV_SIGNAL ) ? UB_EV_SIGNAL : 0) \
84 | (((b) & EV_PERSIST) ? UB_EV_PERSIST : 0))
85
86 # define UB_EV_BITS_CB(C) void my_ ## C (int fd, short bits, void *arg) \
87 { (C)(fd, UB_EV_BITS(bits), arg); }
88
89 UB_EV_BITS_CB(comm_point_udp_callback);
90 UB_EV_BITS_CB(comm_point_udp_ancil_callback)
91 UB_EV_BITS_CB(comm_point_tcp_accept_callback)
92 UB_EV_BITS_CB(comm_point_tcp_handle_callback)
93 UB_EV_BITS_CB(comm_timer_callback)
94 UB_EV_BITS_CB(comm_signal_callback)
95 UB_EV_BITS_CB(comm_point_local_handle_callback)
96 UB_EV_BITS_CB(comm_point_raw_handle_callback)
97 UB_EV_BITS_CB(tube_handle_signal)
98 UB_EV_BITS_CB(comm_base_handle_slow_accept)
99
100 static void (*NATIVE_BITS_CB(void (*cb)(int, short, void*)))(int, short, void*)
101 {
102 if(cb == comm_point_udp_callback)
103 return my_comm_point_udp_callback;
104 else if(cb == comm_point_udp_ancil_callback)
105 return my_comm_point_udp_ancil_callback;
106 else if(cb == comm_point_tcp_accept_callback)
107 return my_comm_point_tcp_accept_callback;
108 else if(cb == comm_point_tcp_handle_callback)
109 return my_comm_point_tcp_handle_callback;
110 else if(cb == comm_timer_callback)
111 return my_comm_timer_callback;
112 else if(cb == comm_signal_callback)
113 return my_comm_signal_callback;
114 else if(cb == comm_point_local_handle_callback)
115 return my_comm_point_local_handle_callback;
116 else if(cb == comm_point_raw_handle_callback)
117 return my_comm_point_raw_handle_callback;
118 else if(cb == tube_handle_signal)
119 return my_tube_handle_signal;
120 else if(cb == comm_base_handle_slow_accept)
121 return my_comm_base_handle_slow_accept;
122 else
123 return NULL;
124 }
125 #else
126 # define NATIVE_BITS(b) (b)
127 # define NATIVE_BITS_CB(c) (c)
128 #endif
129
130 #ifndef EVFLAG_AUTO
131 #define EVFLAG_AUTO 0
132 #endif
133
134 #define AS_EVENT_BASE(x) \
135 (((union {struct ub_event_base* a; struct event_base* b;})x).b)
136 #define AS_UB_EVENT_BASE(x) \
137 (((union {struct event_base* a; struct ub_event_base* b;})x).b)
138 #define AS_EVENT(x) \
139 (((union {struct ub_event* a; struct event* b;})x).b)
140 #define AS_UB_EVENT(x) \
141 (((union {struct event* a; struct ub_event* b;})x).b)
142
143 const char* ub_event_get_version()
144 {
145 return event_get_version();
146 }
147
148 #if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EVBACKEND_SELECT)
149 static const char* ub_ev_backend2str(int b)
150 {
151 switch(b) {
152 case EVBACKEND_SELECT: return "select";
153 case EVBACKEND_POLL: return "poll";
154 case EVBACKEND_EPOLL: return "epoll";
155 case EVBACKEND_KQUEUE: return "kqueue";
156 case EVBACKEND_DEVPOLL: return "devpoll";
157 case EVBACKEND_PORT: return "evport";
158 }
159 return "unknown";
160 }
161 #endif
162
163 void
164 ub_get_event_sys(struct ub_event_base* base, const char** n, const char** s,
165 const char** m)
166 {
167 #ifdef USE_WINSOCK
168 (void)base;
169 *n = "event";
170 *s = "winsock";
171 *m = "WSAWaitForMultipleEvents";
172 #elif defined(USE_MINI_EVENT)
173 (void)base;
174 *n = "mini-event";
175 *s = "internal";
176 *m = "select";
177 #else
178 struct event_base* b = AS_EVENT_BASE(base);
179 *s = event_get_version();
180 # if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
181 *n = "libev";
182 if (!b)
183 b = (struct event_base*)ev_default_loop(EVFLAG_AUTO);
184 # ifdef EVBACKEND_SELECT
185 *m = ub_ev_backend2str(ev_backend((struct ev_loop*)b));
186 # else
187 *m = "not obtainable";
188 # endif
189 # elif defined(HAVE_EVENT_BASE_GET_METHOD)
190 *n = "libevent";
191 if (!b)
192 b = event_base_new();
193 *m = event_base_get_method(b);
194 # else
195 *n = "unknown";
196 *m = "not obtainable";
197 (void)b;
198 # endif
199 # ifdef HAVE_EVENT_BASE_FREE
200 if (b && b != AS_EVENT_BASE(base))
201 event_base_free(b);
202 # endif
203 #endif
204 }
205
206 struct ub_event_base*
207 ub_default_event_base(int sigs, time_t* time_secs, struct timeval* time_tv)
208 {
209 void* base;
210
211 (void)base;
212 #ifdef USE_MINI_EVENT
213 (void)sigs;
214 /* use mini event time-sharing feature */
215 base = event_init(time_secs, time_tv);
216 #else
217 (void)time_secs;
218 (void)time_tv;
219 # if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
220 /* libev */
221 if(sigs)
222 base = ev_default_loop(EVFLAG_AUTO);
223 else
224 base = ev_loop_new(EVFLAG_AUTO);
225 # else
226 (void)sigs;
227 # ifdef HAVE_EVENT_BASE_NEW
228 base = event_base_new();
229 # else
230 base = event_init();
231 # endif
232 # endif
233 #endif
234 return (struct ub_event_base*)base;
235 }
236
237 struct ub_event_base *
238 ub_libevent_event_base(struct event_base* libevent_base)
239 {
240 #ifdef USE_MINI_EVENT
241 (void)libevent_base;
242 return NULL;
243 #else
244 return AS_UB_EVENT_BASE(libevent_base);
245 #endif
246 }
247
248 struct event_base *
249 ub_libevent_get_event_base(struct ub_event_base* base)
250 {
251 #ifdef USE_MINI_EVENT
252 (void)base;
253 return NULL;
254 #else
255 return AS_EVENT_BASE(base);
256 #endif
257 }
258
259 void
260 ub_event_base_free(struct ub_event_base* base)
261 {
262 #ifdef USE_MINI_EVENT
263 event_base_free(AS_EVENT_BASE(base));
264 #elif defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE)
265 /* only libevent 1.2+ has it, but in 1.2 it is broken -
266 assertion fails on signal handling ev that is not deleted
267 in libevent 1.3c (event_base_once appears) this is fixed. */
268 event_base_free(AS_EVENT_BASE(base));
269 #else
270 (void)base;
271 #endif /* HAVE_EVENT_BASE_FREE and HAVE_EVENT_BASE_ONCE */
272 }
273
274 int
275 ub_event_base_dispatch(struct ub_event_base* base)
276 {
277 return event_base_dispatch(AS_EVENT_BASE(base));
278 }
279
280 int
281 ub_event_base_loopexit(struct ub_event_base* base)
282 {
283 return event_base_loopexit(AS_EVENT_BASE(base), NULL);
284 }
285
286 struct ub_event*
287 ub_event_new(struct ub_event_base* base, int fd, short bits,
288 void (*cb)(int, short, void*), void* arg)
289 {
290 struct event *ev = (struct event*)calloc(1, sizeof(struct event));
291
292 if (!ev)
293 return NULL;
294
295 event_set(ev, fd, NATIVE_BITS(bits), NATIVE_BITS_CB(cb), arg);
296 if (event_base_set(AS_EVENT_BASE(base), ev) != 0) {
297 free(ev);
298 return NULL;
299 }
300 return AS_UB_EVENT(ev);
301 }
302
303 struct ub_event*
304 ub_signal_new(struct ub_event_base* base, int fd,
305 void (*cb)(int, short, void*), void* arg)
306 {
307 struct event *ev = (struct event*)calloc(1, sizeof(struct event));
308
309 if (!ev)
310 return NULL;
311
312 signal_set(ev, fd, NATIVE_BITS_CB(cb), arg);
313 if (event_base_set(AS_EVENT_BASE(base), ev) != 0) {
314 free(ev);
315 return NULL;
316 }
317 return AS_UB_EVENT(ev);
318 }
319
320 struct ub_event*
321 ub_winsock_register_wsaevent(struct ub_event_base* base, void* wsaevent,
322 void (*cb)(int, short, void*), void* arg)
323 {
324 #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
325 struct event *ev = (struct event*)calloc(1, sizeof(struct event));
326
327 if (!ev)
328 return NULL;
329
330 if (winsock_register_wsaevent(AS_EVENT_BASE(base), ev, wsaevent, cb,
331 arg))
332 return AS_UB_EVENT(ev);
333 free(ev);
334 return NULL;
335 #else
336 (void)base;
337 (void)wsaevent;
338 (void)cb;
339 (void)arg;
340 return NULL;
341 #endif
342 }
343
344 void
345 ub_event_add_bits(struct ub_event* ev, short bits)
346 {
347 AS_EVENT(ev)->ev_events |= NATIVE_BITS(bits);
348 }
349
350 void
351 ub_event_del_bits(struct ub_event* ev, short bits)
352 {
353 AS_EVENT(ev)->ev_events &= ~NATIVE_BITS(bits);
354 }
355
356 void
357 ub_event_set_fd(struct ub_event* ev, int fd)
358 {
359 AS_EVENT(ev)->ev_fd = fd;
360 }
361
362 void
363 ub_event_free(struct ub_event* ev)
364 {
365 if (ev)
366 free(AS_EVENT(ev));
367 }
368
369 int
370 ub_event_add(struct ub_event* ev, struct timeval* tv)
371 {
372 return event_add(AS_EVENT(ev), tv);
373 }
374
375 int
376 ub_event_del(struct ub_event* ev)
377 {
378 return event_del(AS_EVENT(ev));
379 }
380
381 int
382 ub_timer_add(struct ub_event* ev, struct ub_event_base* base,
383 void (*cb)(int, short, void*), void* arg, struct timeval* tv)
384 {
385 event_set(AS_EVENT(ev), -1, EV_TIMEOUT, NATIVE_BITS_CB(cb), arg);
386 if (event_base_set(AS_EVENT_BASE(base), AS_EVENT(ev)) != 0)
387 return -1;
388 return evtimer_add(AS_EVENT(ev), tv);
389 }
390
391 int
392 ub_timer_del(struct ub_event* ev)
393 {
394 return evtimer_del(AS_EVENT(ev));
395 }
396
397 int
398 ub_signal_add(struct ub_event* ev, struct timeval* tv)
399 {
400 return signal_add(AS_EVENT(ev), tv);
401 }
402
403 int
404 ub_signal_del(struct ub_event* ev)
405 {
406 return signal_del(AS_EVENT(ev));
407 }
408
409 void
410 ub_winsock_unregister_wsaevent(struct ub_event* ev)
411 {
412 #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
413 winsock_unregister_wsaevent(AS_EVENT(ev));
414 free(AS_EVENT(ev));
415 #else
416 (void)ev;
417 #endif
418 }
419
420 void
421 ub_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits)
422 {
423 #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
424 winsock_tcp_wouldblock(AS_EVENT(ev), NATIVE_BITS(eventbits));
425 #else
426 (void)ev;
427 (void)eventbits;
428 #endif
429 }
430
431 void ub_comm_base_now(struct comm_base* cb)
432 {
433 #ifdef USE_MINI_EVENT
434 /** minievent updates the time when it blocks. */
435 (void)cb; /* nothing to do */
436 #else /* !USE_MINI_EVENT */
437 /** fillup the time values in the event base */
438 time_t *tt;
439 struct timeval *tv;
440 comm_base_timept(cb, &tt, &tv);
441 if(gettimeofday(tv, NULL) < 0) {
442 log_err("gettimeofday: %s", strerror(errno));
443 }
444 *tt = tv->tv_sec;
445 #endif /* USE_MINI_EVENT */
446 }
447
0 /*
1 * util/ub_event.h - indirection layer for pluggable events
2 *
3 * Copyright (c) 2007, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 /**
36 * \file
37 *
38 * This file contains prototypes for event loop functions.
39 *
40 */
41
42 #ifndef UB_EVENT_H
43 #define UB_EVENT_H
44
45 struct ub_event_base;
46 struct ub_event;
47 struct comm_base;
48 struct event_base;
49
50 /** event timeout */
51 #define UB_EV_TIMEOUT 0x01
52 /** event fd readable */
53 #define UB_EV_READ 0x02
54 /** event fd writable */
55 #define UB_EV_WRITE 0x04
56 /** event signal */
57 #define UB_EV_SIGNAL 0x08
58 /** event must persist */
59 #define UB_EV_PERSIST 0x10
60
61 /** Returns event-base type. Could be "mini-event", "winsock-event" for the
62 * daemon compile, and will be "pluggable-event<PACKAGE_VERSION>" for
63 * libunbound.
64 */
65 const char* ub_event_get_version();
66 /** Return the name, system and method for the pluggable event base */
67 void ub_get_event_sys(struct ub_event_base*, const char** n, const char** s,
68 const char** m);
69 /** Return a default event base. In the deamon thess will be the only event
70 * bases used.
71 */
72 struct ub_event_base* ub_default_event_base(int, time_t*, struct timeval*);
73 /** Return an ub_event_base constructed for the given libevent event base */
74 struct ub_event_base* ub_libevent_event_base(struct event_base*);
75 /** Return the libevent base underlying the given ub_event_base. Will return
76 * NULL when the ub_event_base does not have an underlying libevent event base
77 */
78 struct event_base* ub_libevent_get_event_base(struct ub_event_base*);
79 /** Free event base. Free events yourself */
80 void ub_event_base_free(struct ub_event_base*);
81 /** Run the event base */
82 int ub_event_base_dispatch(struct ub_event_base*);
83 /** exit that loop */
84 int ub_event_base_loopexit(struct ub_event_base*);
85
86 /** Create a new ub_event for the event base */
87 struct ub_event* ub_event_new(struct ub_event_base*,
88 int fd, short bits, void (*cb)(int, short, void*), void* arg);
89 /** Create a new ub_event signal for the event base */
90 struct ub_event* ub_signal_new(struct ub_event_base*, int fd,
91 void (*cb)(int, short, void*), void* arg);
92 /** Create a new ub_event associated with the wsaevent for the event base */
93 struct ub_event* ub_winsock_register_wsaevent(struct ub_event_base*,
94 void* wsaevent, void (*cb)(int, short, void*), void* arg);
95
96 /** Add event bits for this event to fire on */
97 void ub_event_add_bits(struct ub_event*, short bits);
98 /** Configure the event so it will not longer fire on given bits */
99 void ub_event_del_bits(struct ub_event*, short bits);
100 /** Change or set the file descriptor on the event */
101 void ub_event_set_fd(struct ub_event*, int fd);
102 /** free the event */
103 void ub_event_free(struct ub_event*);
104 /** Activate the event. The given timeval is an timeout value. */
105 int ub_event_add(struct ub_event*, struct timeval*);
106 /** Deactivate the event */
107 int ub_event_del(struct ub_event*);
108 /** Reconfigure and activate a timeout event */
109 int ub_timer_add(struct ub_event*, struct ub_event_base*,
110 void (*cb)(int, short, void*), void* arg, struct timeval*);
111 /** Deactivate the timeout event */
112 int ub_timer_del(struct ub_event*);
113 /** Activate a signal event */
114 int ub_signal_add(struct ub_event*, struct timeval*);
115 /** Deactivate a signal event */
116 int ub_signal_del(struct ub_event*);
117 /** Free a with a wsaevent associated event */
118 void ub_winsock_unregister_wsaevent(struct ub_event* ev);
119 /** Signal the eventloop when a TCP windows socket will block on next read
120 * or write (given by the eventbits)
121 */
122 void ub_winsock_tcp_wouldblock(struct ub_event*, int bits);
123 /** Equip the comm_base with the current time */
124 void ub_comm_base_now(struct comm_base* cb);
125
126 #endif /* UB_EVENT_H */
0 /*
1 * util/ub_event_pluggable.c - call registered pluggable event functions
2 *
3 * Copyright (c) 2007, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 /**
36 * \file
37 *
38 * This file contains an implementation for the indirection layer for pluggable
39 * events that calls the registered pluggable event loop. It also defines a
40 * default pluggable event loop based on the default libevent (compatibility)
41 * functions.
42 */
43 #include "config.h"
44 #include <sys/time.h>
45 #include "util/ub_event.h"
46 #include "libunbound/unbound-event.h"
47 #include "util/netevent.h"
48 #include "util/log.h"
49 #include "util/fptr_wlist.h"
50
51 /* We define libevent structures here to hide the libevent stuff. */
52
53 #ifdef USE_MINI_EVENT
54 # ifdef USE_WINSOCK
55 # include "util/winsock_event.h"
56 # else
57 # include "util/mini_event.h"
58 # endif /* USE_WINSOCK */
59 #else /* USE_MINI_EVENT */
60 /* we use libevent */
61 # ifdef HAVE_EVENT_H
62 # include <event.h>
63 # else
64 # include "event2/event.h"
65 # include "event2/event_struct.h"
66 # include "event2/event_compat.h"
67 # endif
68 #endif /* USE_MINI_EVENT */
69
70 #if UB_EV_TIMEOUT != EV_TIMEOUT || UB_EV_READ != EV_READ || \
71 UB_EV_WRITE != EV_WRITE || UB_EV_SIGNAL != EV_SIGNAL || \
72 UB_EV_PERSIST != EV_PERSIST
73 /* Only necessary for libev */
74 # define NATIVE_BITS(b) ( \
75 (((b) & UB_EV_TIMEOUT) ? EV_TIMEOUT : 0) \
76 | (((b) & UB_EV_READ ) ? EV_READ : 0) \
77 | (((b) & UB_EV_WRITE ) ? EV_WRITE : 0) \
78 | (((b) & UB_EV_SIGNAL ) ? EV_SIGNAL : 0) \
79 | (((b) & UB_EV_PERSIST) ? EV_PERSIST : 0))
80
81 # define UB_EV_BITS(b) ( \
82 (((b) & EV_TIMEOUT) ? UB_EV_TIMEOUT : 0) \
83 | (((b) & EV_READ ) ? UB_EV_READ : 0) \
84 | (((b) & EV_WRITE ) ? UB_EV_WRITE : 0) \
85 | (((b) & EV_SIGNAL ) ? UB_EV_SIGNAL : 0) \
86 | (((b) & EV_PERSIST) ? UB_EV_PERSIST : 0))
87
88 # define UB_EV_BITS_CB(C) void my_ ## C (int fd, short bits, void *arg) \
89 { (C)(fd, UB_EV_BITS(bits), arg); }
90
91 UB_EV_BITS_CB(comm_point_udp_callback);
92 UB_EV_BITS_CB(comm_point_udp_ancil_callback)
93 UB_EV_BITS_CB(comm_point_tcp_accept_callback)
94 UB_EV_BITS_CB(comm_point_tcp_handle_callback)
95 UB_EV_BITS_CB(comm_timer_callback)
96 UB_EV_BITS_CB(comm_signal_callback)
97 UB_EV_BITS_CB(comm_point_local_handle_callback)
98 UB_EV_BITS_CB(comm_point_raw_handle_callback)
99 UB_EV_BITS_CB(tube_handle_signal)
100 UB_EV_BITS_CB(comm_base_handle_slow_accept)
101
102 static void (*NATIVE_BITS_CB(void (*cb)(int, short, void*)))(int, short, void*)
103 {
104 if(cb == comm_point_udp_callback)
105 return my_comm_point_udp_callback;
106 else if(cb == comm_point_udp_ancil_callback)
107 return my_comm_point_udp_ancil_callback;
108 else if(cb == comm_point_tcp_accept_callback)
109 return my_comm_point_tcp_accept_callback;
110 else if(cb == comm_point_tcp_handle_callback)
111 return my_comm_point_tcp_handle_callback;
112 else if(cb == comm_timer_callback)
113 return my_comm_timer_callback;
114 else if(cb == comm_signal_callback)
115 return my_comm_signal_callback;
116 else if(cb == comm_point_local_handle_callback)
117 return my_comm_point_local_handle_callback;
118 else if(cb == comm_point_raw_handle_callback)
119 return my_comm_point_raw_handle_callback;
120 else if(cb == tube_handle_signal)
121 return my_tube_handle_signal;
122 else if(cb == comm_base_handle_slow_accept)
123 return my_comm_base_handle_slow_accept;
124 else
125 return NULL;
126 }
127 #else
128 # define NATIVE_BITS(b) (b)
129 # define NATIVE_BITS_CB(c) (c)
130 #endif
131
132 #ifndef EVFLAG_AUTO
133 #define EVFLAG_AUTO 0
134 #endif
135
136 struct my_event_base {
137 struct ub_event_base super;
138 struct event_base* base;
139 };
140
141 struct my_event {
142 struct ub_event super;
143 struct event ev;
144 };
145
146 #define AS_MY_EVENT_BASE(x) \
147 (((union {struct ub_event_base* a; struct my_event_base* b;})x).b)
148 #define AS_MY_EVENT(x) \
149 (((union {struct ub_event* a; struct my_event* b;})x).b)
150
151 const char* ub_event_get_version()
152 {
153 return "pluggable-event"PACKAGE_VERSION;
154 }
155
156 static void
157 my_event_add_bits(struct ub_event* ev, short bits)
158 {
159 AS_MY_EVENT(ev)->ev.ev_events |= NATIVE_BITS(bits);
160 }
161
162 static void
163 my_event_del_bits(struct ub_event* ev, short bits)
164 {
165 AS_MY_EVENT(ev)->ev.ev_events &= ~NATIVE_BITS(bits);
166 }
167
168 static void
169 my_event_set_fd(struct ub_event* ev, int fd)
170 {
171 AS_MY_EVENT(ev)->ev.ev_fd = fd;
172 }
173
174 static void
175 my_event_free(struct ub_event* ev)
176 {
177 free(AS_MY_EVENT(ev));
178 }
179
180 static int
181 my_event_add(struct ub_event* ev, struct timeval* tv)
182 {
183 return event_add(&AS_MY_EVENT(ev)->ev, tv);
184 }
185
186 static int
187 my_event_del(struct ub_event* ev)
188 {
189 return event_del(&AS_MY_EVENT(ev)->ev);
190 }
191
192 static int
193 my_timer_add(struct ub_event* ev, struct ub_event_base* base,
194 void (*cb)(int, short, void*), void* arg, struct timeval* tv)
195 {
196 event_set(&AS_MY_EVENT(ev)->ev, -1, EV_TIMEOUT,NATIVE_BITS_CB(cb),arg);
197 if (event_base_set(AS_MY_EVENT_BASE(base)->base, &AS_MY_EVENT(ev)->ev)
198 != 0)
199 return -1;
200 return evtimer_add(&AS_MY_EVENT(ev)->ev, tv);
201 }
202
203 static int
204 my_timer_del(struct ub_event* ev)
205 {
206 return evtimer_del(&AS_MY_EVENT(ev)->ev);
207 }
208
209 static int
210 my_signal_add(struct ub_event* ev, struct timeval* tv)
211 {
212 return signal_add(&AS_MY_EVENT(ev)->ev, tv);
213 }
214
215 static int
216 my_signal_del(struct ub_event* ev)
217 {
218 return signal_del(&AS_MY_EVENT(ev)->ev);
219 }
220
221 static void
222 my_winsock_unregister_wsaevent(struct ub_event* ev)
223 {
224 #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
225 winsock_unregister_wsaevent(&AS_MY_EVENT(ev)->ev);
226 free(AS_MY_EVENT(ev));
227 #else
228 (void)ev;
229 #endif
230 }
231
232 static void
233 my_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits)
234 {
235 #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
236 winsock_tcp_wouldblock(&AS_MY_EVENT(ev)->ev, NATIVE_BITS(eventbits));
237 #else
238 (void)ev;
239 (void)eventbits;
240 #endif
241 }
242
243 static struct ub_event_vmt default_event_vmt = {
244 my_event_add_bits, my_event_del_bits, my_event_set_fd,
245 my_event_free, my_event_add, my_event_del,
246 my_timer_add, my_timer_del, my_signal_add, my_signal_del,
247 my_winsock_unregister_wsaevent, my_winsock_tcp_wouldblock
248 };
249
250 static void
251 my_event_base_free(struct ub_event_base* base)
252 {
253 #ifdef USE_MINI_EVENT
254 event_base_free(AS_MY_EVENT_BASE(base)->base);
255 #elif defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE)
256 /* only libevent 1.2+ has it, but in 1.2 it is broken -
257 assertion fails on signal handling ev that is not deleted
258 in libevent 1.3c (event_base_once appears) this is fixed. */
259 event_base_free(AS_MY_EVENT_BASE(base)->base);
260 #endif /* HAVE_EVENT_BASE_FREE and HAVE_EVENT_BASE_ONCE */
261 free(AS_MY_EVENT_BASE(base));
262 }
263
264 static int
265 my_event_base_dispatch(struct ub_event_base* base)
266 {
267 return event_base_dispatch(AS_MY_EVENT_BASE(base)->base);
268 }
269
270 static int
271 my_event_base_loopexit(struct ub_event_base* base, struct timeval* tv)
272 {
273 return event_base_loopexit(AS_MY_EVENT_BASE(base)->base, tv);
274 }
275
276 static struct ub_event*
277 my_event_new(struct ub_event_base* base, int fd, short bits,
278 void (*cb)(int, short, void*), void* arg)
279 {
280 struct my_event *my_ev = (struct my_event*)calloc(1,
281 sizeof(struct my_event));
282
283 if (!my_ev)
284 return NULL;
285
286 event_set(&my_ev->ev, fd, NATIVE_BITS(bits), NATIVE_BITS_CB(cb), arg);
287 if (event_base_set(AS_MY_EVENT_BASE(base)->base, &my_ev->ev) != 0) {
288 free(my_ev);
289 return NULL;
290 }
291 my_ev->super.magic = UB_EVENT_MAGIC;
292 my_ev->super.vmt = &default_event_vmt;
293 return &my_ev->super;
294 }
295
296 static struct ub_event*
297 my_signal_new(struct ub_event_base* base, int fd,
298 void (*cb)(int, short, void*), void* arg)
299 {
300 struct my_event *my_ev = (struct my_event*)calloc(1,
301 sizeof(struct my_event));
302
303 if (!my_ev)
304 return NULL;
305
306 signal_set(&my_ev->ev, fd, NATIVE_BITS_CB(cb), arg);
307 if (event_base_set(AS_MY_EVENT_BASE(base)->base, &my_ev->ev) != 0) {
308 free(my_ev);
309 return NULL;
310 }
311 my_ev->super.magic = UB_EVENT_MAGIC;
312 my_ev->super.vmt = &default_event_vmt;
313 return &my_ev->super;
314 }
315
316 static struct ub_event*
317 my_winsock_register_wsaevent(struct ub_event_base* base, void* wsaevent,
318 void (*cb)(int, short, void*), void* arg)
319 {
320 #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
321 struct my_event *my_ev = (struct my_event*)calloc(1,
322 sizeof(struct my_event));
323
324 if (!my_ev)
325 return NULL;
326
327 if (!winsock_register_wsaevent(AS_MY_EVENT_BASE(base)->base,
328 &my_ev->ev, wsaevent, cb, arg)) {
329 free(my_ev);
330 return NULL;
331
332 }
333 my_ev->super.magic = UB_EVENT_MAGIC;
334 my_ev->super.vmt = &default_event_vmt;
335 return &my_ev->super;
336 #else
337 (void)base;
338 (void)wsaevent;
339 (void)cb;
340 (void)arg;
341 return NULL;
342 #endif
343 }
344
345 static struct ub_event_base_vmt default_event_base_vmt = {
346 my_event_base_free, my_event_base_dispatch,
347 my_event_base_loopexit, my_event_new, my_signal_new,
348 my_winsock_register_wsaevent
349 };
350
351 struct ub_event_base*
352 ub_default_event_base(int sigs, time_t* time_secs, struct timeval* time_tv)
353 {
354 struct my_event_base* my_base = (struct my_event_base*)calloc(1,
355 sizeof(struct my_event_base));
356
357 if (!my_base)
358 return NULL;
359
360 #ifdef USE_MINI_EVENT
361 (void)sigs;
362 /* use mini event time-sharing feature */
363 my_base->base = event_init(time_secs, time_tv);
364 #else
365 (void)time_secs;
366 (void)time_tv;
367 # if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
368 /* libev */
369 if(sigs)
370 my_base->base = (struct event_base*)ev_default_loop(EVFLAG_AUTO);
371 else
372 my_base->base = (struct event_base*)ev_loop_new(EVFLAG_AUTO);
373 # else
374 (void)sigs;
375 # ifdef HAVE_EVENT_BASE_NEW
376 my_base->base = event_base_new();
377 # else
378 my_base->base = event_init();
379 # endif
380 # endif
381 #endif
382 if (!my_base->base) {
383 free(my_base);
384 return NULL;
385 }
386 my_base->super.magic = UB_EVENT_MAGIC;
387 my_base->super.vmt = &default_event_base_vmt;
388 return &my_base->super;
389 }
390
391 struct ub_event_base*
392 ub_libevent_event_base(struct event_base* base)
393 {
394 #ifdef USE_MINI_EVENT
395 (void)base;
396 return NULL;
397 #else
398 struct my_event_base* my_base = (struct my_event_base*)calloc(1,
399 sizeof(struct my_event_base));
400
401 if (!my_base)
402 return NULL;
403 my_base->super.magic = UB_EVENT_MAGIC;
404 my_base->super.vmt = &default_event_base_vmt;
405 my_base->base = base;
406 return &my_base->super;
407 #endif
408 }
409
410 struct event_base*
411 ub_libevent_get_event_base(struct ub_event_base* base)
412 {
413 #ifndef USE_MINI_EVENT
414 if (base->vmt == &default_event_base_vmt)
415 return AS_MY_EVENT_BASE(base)->base;
416 #else
417 (void)base;
418 #endif
419 return NULL;
420 }
421
422 #if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EVBACKEND_SELECT)
423 static const char* ub_ev_backend2str_pluggable(int b)
424 {
425 switch(b) {
426 case EVBACKEND_SELECT: return "select";
427 case EVBACKEND_POLL: return "poll";
428 case EVBACKEND_EPOLL: return "epoll";
429 case EVBACKEND_KQUEUE: return "kqueue";
430 case EVBACKEND_DEVPOLL: return "devpoll";
431 case EVBACKEND_PORT: return "evport";
432 }
433 return "unknown";
434 }
435 #endif
436
437 void
438 ub_get_event_sys(struct ub_event_base* ub_base, const char** n, const char** s,
439 const char** m)
440 {
441 #ifdef USE_WINSOCK
442 (void)ub_base;
443 *n = "pluggable-event";
444 *s = "winsock";
445 *m = "WSAWaitForMultipleEvents";
446 #elif defined(USE_MINI_EVENT)
447 (void)ub_base;
448 *n = "pluggable-event";
449 *s = "internal";
450 *m = "select";
451 #else
452 struct event_base* b = ub_libevent_get_event_base(ub_base);
453 /* This function is only called from comm_base_create, so
454 * ub_base is guaranteed to exist and to be the default
455 * event base.
456 */
457 assert(b);
458 *n = "pluggable-event";
459 *s = event_get_version();
460 # if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
461 *n = "pluggable-libev";
462 # ifdef EVBACKEND_SELECT
463 *m = ub_ev_backend2str_pluggable(ev_backend((struct ev_loop*)b));
464 # else
465 *m = "not obtainable";
466 # endif
467 # elif defined(HAVE_EVENT_BASE_GET_METHOD)
468 *n = "pluggable-libevent";
469 *m = event_base_get_method(b);
470 # else
471 *m = "not obtainable";
472 # endif
473 #endif
474 }
475
476 void
477 ub_event_base_free(struct ub_event_base* base)
478 {
479 if (base && base->magic == UB_EVENT_MAGIC) {
480 fptr_ok(base->vmt != &default_event_base_vmt ||
481 base->vmt->free == my_event_base_free);
482 (*base->vmt->free)(base);
483 }
484 }
485
486 int
487 ub_event_base_dispatch(struct ub_event_base* base)
488 {
489 if (base->magic == UB_EVENT_MAGIC) {
490 fptr_ok(base->vmt != &default_event_base_vmt ||
491 base->vmt->dispatch == my_event_base_dispatch);
492 return (*base->vmt->dispatch)(base);
493 }
494 return -1;
495 }
496
497 int
498 ub_event_base_loopexit(struct ub_event_base* base)
499 {
500 if (base->magic == UB_EVENT_MAGIC) {
501 fptr_ok(base->vmt != &default_event_base_vmt ||
502 base->vmt->loopexit == my_event_base_loopexit);
503 return (*base->vmt->loopexit)(base, NULL);
504 }
505 return -1;
506 }
507
508 struct ub_event*
509 ub_event_new(struct ub_event_base* base, int fd, short bits,
510 void (*cb)(int, short, void*), void* arg)
511 {
512 if (base->magic == UB_EVENT_MAGIC) {
513 fptr_ok(base->vmt != &default_event_base_vmt ||
514 base->vmt->new_event == my_event_new);
515 return (*base->vmt->new_event)(base, fd, bits, cb, arg);
516 }
517 return NULL;
518 }
519
520 struct ub_event*
521 ub_signal_new(struct ub_event_base* base, int fd,
522 void (*cb)(int, short, void*), void* arg)
523 {
524 if (base->magic == UB_EVENT_MAGIC) {
525 fptr_ok(base->vmt != &default_event_base_vmt ||
526 base->vmt->new_signal == my_signal_new);
527 return (*base->vmt->new_signal)(base, fd, cb, arg);
528 }
529 return NULL;
530 }
531
532 struct ub_event*
533 ub_winsock_register_wsaevent(struct ub_event_base* base, void* wsaevent,
534 void (*cb)(int, short, void*), void* arg)
535 {
536 if (base->magic == UB_EVENT_MAGIC) {
537 fptr_ok(base->vmt != &default_event_base_vmt ||
538 base->vmt->winsock_register_wsaevent ==
539 my_winsock_register_wsaevent);
540 return (*base->vmt->winsock_register_wsaevent)(base, wsaevent, cb, arg);
541 }
542 return NULL;
543 }
544
545 void
546 ub_event_add_bits(struct ub_event* ev, short bits)
547 {
548 if (ev->magic == UB_EVENT_MAGIC) {
549 fptr_ok(ev->vmt != &default_event_vmt ||
550 ev->vmt->add_bits == my_event_add_bits);
551 (*ev->vmt->add_bits)(ev, bits);
552 }
553 }
554
555 void
556 ub_event_del_bits(struct ub_event* ev, short bits)
557 {
558 if (ev->magic == UB_EVENT_MAGIC) {
559 fptr_ok(ev->vmt != &default_event_vmt ||
560 ev->vmt->del_bits == my_event_del_bits);
561 (*ev->vmt->del_bits)(ev, bits);
562 }
563 }
564
565 void
566 ub_event_set_fd(struct ub_event* ev, int fd)
567 {
568 if (ev->magic == UB_EVENT_MAGIC) {
569 fptr_ok(ev->vmt != &default_event_vmt ||
570 ev->vmt->set_fd == my_event_set_fd);
571 (*ev->vmt->set_fd)(ev, fd);
572 }
573 }
574
575 void
576 ub_event_free(struct ub_event* ev)
577 {
578 if (ev && ev->magic == UB_EVENT_MAGIC) {
579 fptr_ok(ev->vmt != &default_event_vmt ||
580 ev->vmt->free == my_event_free);
581 (*ev->vmt->free)(ev);
582 }
583 }
584
585 int
586 ub_event_add(struct ub_event* ev, struct timeval* tv)
587 {
588 if (ev->magic == UB_EVENT_MAGIC) {
589 fptr_ok(ev->vmt != &default_event_vmt ||
590 ev->vmt->add == my_event_add);
591 return (*ev->vmt->add)(ev, tv);
592 }
593 return -1;
594 }
595
596 int
597 ub_event_del(struct ub_event* ev)
598 {
599 if (ev->magic == UB_EVENT_MAGIC) {
600 fptr_ok(ev->vmt != &default_event_vmt ||
601 ev->vmt->del == my_event_del);
602 return (*ev->vmt->del)(ev);
603 }
604 return -1;
605 }
606
607 int
608 ub_timer_add(struct ub_event* ev, struct ub_event_base* base,
609 void (*cb)(int, short, void*), void* arg, struct timeval* tv)
610 {
611 if (ev->magic == UB_EVENT_MAGIC) {
612 fptr_ok(ev->vmt != &default_event_vmt ||
613 ev->vmt->add_timer == my_timer_add);
614 return (*ev->vmt->add_timer)(ev, base, cb, arg, tv);
615 }
616 return -1;
617 }
618
619 int
620 ub_timer_del(struct ub_event* ev)
621 {
622 if (ev->magic == UB_EVENT_MAGIC) {
623 fptr_ok(ev->vmt != &default_event_vmt ||
624 ev->vmt->del_timer == my_timer_del);
625 return (*ev->vmt->del_timer)(ev);
626 }
627 return -1;
628 }
629
630 int
631 ub_signal_add(struct ub_event* ev, struct timeval* tv)
632 {
633 if (ev->magic == UB_EVENT_MAGIC) {
634 fptr_ok(ev->vmt != &default_event_vmt ||
635 ev->vmt->add_signal == my_signal_add);
636 return (*ev->vmt->add_signal)(ev, tv);
637 }
638 return -1;
639 }
640
641 int
642 ub_signal_del(struct ub_event* ev)
643 {
644 if (ev->magic == UB_EVENT_MAGIC) {
645 fptr_ok(ev->vmt != &default_event_vmt ||
646 ev->vmt->del_signal == my_signal_del);
647 return (*ev->vmt->del_signal)(ev);
648 }
649 return -1;
650 }
651
652 void
653 ub_winsock_unregister_wsaevent(struct ub_event* ev)
654 {
655 if (ev->magic == UB_EVENT_MAGIC) {
656 fptr_ok(ev->vmt != &default_event_vmt ||
657 ev->vmt->winsock_unregister_wsaevent ==
658 my_winsock_unregister_wsaevent);
659 (*ev->vmt->winsock_unregister_wsaevent)(ev);
660 }
661 }
662
663 void
664 ub_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits)
665 {
666 if (ev->magic == UB_EVENT_MAGIC) {
667 fptr_ok(ev->vmt != &default_event_vmt ||
668 ev->vmt->winsock_tcp_wouldblock ==
669 my_winsock_tcp_wouldblock);
670 (*ev->vmt->winsock_tcp_wouldblock)(ev, eventbits);
671 }
672 }
673
674 void ub_comm_base_now(struct comm_base* cb)
675 {
676 time_t *tt;
677 struct timeval *tv;
678
679 #ifdef USE_MINI_EVENT
680 /** minievent updates the time when it blocks. */
681 if (comm_base_internal(cb)->magic == UB_EVENT_MAGIC &&
682 comm_base_internal(cb)->vmt == &default_event_base_vmt)
683 return; /* Actually using mini event, so do not set time */
684 #endif /* USE_MINI_EVENT */
685
686 /** fillup the time values in the event base */
687 comm_base_timept(cb, &tt, &tv);
688 if(gettimeofday(tv, NULL) < 0) {
689 log_err("gettimeofday: %s", strerror(errno));
690 }
691 *tt = tv->tv_sec;
692 }
693
23322332 edns.ext_rcode = 0;
23332333 edns.edns_version = 0;
23342334 edns.bits = EDNS_DO;
2335 edns.opt_list = NULL;
23352336 if(sldns_buffer_capacity(buf) < 65535)
23362337 edns.udp_size = (uint16_t)sldns_buffer_capacity(buf);
23372338 else edns.udp_size = 65535;
10291029 ")", b);
10301030 (void)rbtree_delete(anchors->tree, &ta->node);
10311031 lock_basic_unlock(&ta->lock);
1032 if(anchors->dlv_anchor == ta)
1033 anchors->dlv_anchor = NULL;
10321034 anchors_delfunc(&ta->node, NULL);
10331035 ta = next;
10341036 continue;
9797 }
9898 }
9999
100 void
101 secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res)
102 {
103 (void)SHA256(buf, len, res);
104 }
105
100106 /**
101107 * Return size of DS digest according to its hash algorithm.
102108 * @param algo: DS digest algo.
185191 case LDNS_RSAMD5:
186192 /* RFC 6725 deprecates RSAMD5 */
187193 return 0;
194 #ifdef USE_DSA
188195 case LDNS_DSA:
189196 case LDNS_DSA_NSEC3:
197 #endif
190198 case LDNS_RSASHA1:
191199 case LDNS_RSASHA1_NSEC3:
192200 #if defined(HAVE_EVP_SHA256) && defined(USE_SHA2)
226234 log_err("%s crypto %s", str, buf);
227235 }
228236
237 #ifdef USE_DSA
229238 /**
230239 * Setup DSA key digest in DER encoding ...
231240 * @param sig: input is signature output alloced ptr (unless failure).
267276 DSA_SIG_free(dsasig);
268277 return 1;
269278 }
279 #endif /* USE_DSA */
270280
271281 #ifdef USE_ECDSA
272282 /**
280290 static int
281291 setup_ecdsa_sig(unsigned char** sig, unsigned int* len)
282292 {
283 ECDSA_SIG* ecdsa_sig;
284 int newlen;
293 /* convert from two BIGNUMs in the rdata buffer, to ASN notation.
294 * ASN preable: 30440220 <R 32bytefor256> 0220 <S 32bytefor256>
295 * the '20' is the length of that field (=bnsize).
296 i * the '44' is the total remaining length.
297 * if negative, start with leading zero.
298 * if starts with 00s, remove them from the number.
299 */
300 uint8_t pre[] = {0x30, 0x44, 0x02, 0x20};
301 int pre_len = 4;
302 uint8_t mid[] = {0x02, 0x20};
303 int mid_len = 2;
304 int raw_sig_len, r_high, s_high, r_rem=0, s_rem=0;
285305 int bnsize = (int)((*len)/2);
306 unsigned char* d = *sig;
307 uint8_t* p;
286308 /* if too short or not even length, fails */
287309 if(*len < 16 || bnsize*2 != (int)*len)
288310 return 0;
289 /* use the raw data to parse two evenly long BIGNUMs, "r | s". */
290 ecdsa_sig = ECDSA_SIG_new();
291 if(!ecdsa_sig) return 0;
292 ecdsa_sig->r = BN_bin2bn(*sig, bnsize, ecdsa_sig->r);
293 ecdsa_sig->s = BN_bin2bn(*sig+bnsize, bnsize, ecdsa_sig->s);
294 if(!ecdsa_sig->r || !ecdsa_sig->s) {
295 ECDSA_SIG_free(ecdsa_sig);
311
312 /* strip leading zeroes from r (but not last one) */
313 while(r_rem < bnsize-1 && d[r_rem] == 0)
314 r_rem++;
315 /* strip leading zeroes from s (but not last one) */
316 while(s_rem < bnsize-1 && d[bnsize+s_rem] == 0)
317 s_rem++;
318
319 r_high = ((d[0+r_rem]&0x80)?1:0);
320 s_high = ((d[bnsize+s_rem]&0x80)?1:0);
321 raw_sig_len = pre_len + r_high + bnsize - r_rem + mid_len +
322 s_high + bnsize - s_rem;
323 *sig = (unsigned char*)malloc((size_t)raw_sig_len);
324 if(!*sig)
296325 return 0;
297 }
298
299 /* spool it into ASN format */
300 *sig = NULL;
301 newlen = i2d_ECDSA_SIG(ecdsa_sig, sig);
302 if(newlen <= 0) {
303 ECDSA_SIG_free(ecdsa_sig);
304 free(*sig);
305 return 0;
306 }
307 *len = (unsigned int)newlen;
308 ECDSA_SIG_free(ecdsa_sig);
326 p = (uint8_t*)*sig;
327 p[0] = pre[0];
328 p[1] = (uint8_t)(raw_sig_len-2);
329 p[2] = pre[2];
330 p[3] = (uint8_t)(bnsize + r_high - r_rem);
331 p += 4;
332 if(r_high) {
333 *p = 0;
334 p += 1;
335 }
336 memmove(p, d+r_rem, (size_t)bnsize-r_rem);
337 p += bnsize-r_rem;
338 memmove(p, mid, (size_t)mid_len-1);
339 p += mid_len-1;
340 *p = (uint8_t)(bnsize + s_high - s_rem);
341 p += 1;
342 if(s_high) {
343 *p = 0;
344 p += 1;
345 }
346 memmove(p, d+bnsize+s_rem, (size_t)bnsize-s_rem);
347 *len = (unsigned int)raw_sig_len;
309348 return 1;
310349 }
311350 #endif /* USE_ECDSA */
324363 setup_key_digest(int algo, EVP_PKEY** evp_key, const EVP_MD** digest_type,
325364 unsigned char* key, size_t keylen)
326365 {
366 #ifdef USE_DSA
327367 DSA* dsa;
368 #endif
328369 RSA* rsa;
329370
330371 switch(algo) {
372 #ifdef USE_DSA
331373 case LDNS_DSA:
332374 case LDNS_DSA_NSEC3:
333375 *evp_key = EVP_PKEY_new();
349391 *digest_type = EVP_dss1();
350392
351393 break;
394 #endif /* USE_DSA */
352395 case LDNS_RSASHA1:
353396 case LDNS_RSASHA1_NSEC3:
354397 #if defined(HAVE_EVP_SHA256) && defined(USE_SHA2)
507550 char** reason)
508551 {
509552 const EVP_MD *digest_type;
510 EVP_MD_CTX ctx;
511 int res, dofree = 0;
553 EVP_MD_CTX* ctx;
554 int res, dofree = 0, docrypto_free = 0;
512555 EVP_PKEY *evp_key = NULL;
513556
514557 if(!setup_key_digest(algo, &evp_key, &digest_type, key, keylen)) {
517560 EVP_PKEY_free(evp_key);
518561 return sec_status_bogus;
519562 }
563 #ifdef USE_DSA
520564 /* if it is a DSA signature in bind format, convert to DER format */
521565 if((algo == LDNS_DSA || algo == LDNS_DSA_NSEC3) &&
522566 sigblock_len == 1+2*SHA_DIGEST_LENGTH) {
526570 EVP_PKEY_free(evp_key);
527571 return sec_status_bogus;
528572 }
529 dofree = 1;
530 }
573 docrypto_free = 1;
574 }
575 #endif
576 #if defined(USE_ECDSA) && defined(USE_DSA)
577 else
578 #endif
531579 #ifdef USE_ECDSA
532 else if(algo == LDNS_ECDSAP256SHA256 || algo == LDNS_ECDSAP384SHA384) {
580 if(algo == LDNS_ECDSAP256SHA256 || algo == LDNS_ECDSAP384SHA384) {
533581 /* EVP uses ASN prefix on sig, which is not in the wire data */
534582 if(!setup_ecdsa_sig(&sigblock, &sigblock_len)) {
535583 verbose(VERB_QUERY, "verify: failed to setup ECDSA sig");
542590 #endif /* USE_ECDSA */
543591
544592 /* do the signature cryptography work */
545 EVP_MD_CTX_init(&ctx);
546 if(EVP_VerifyInit(&ctx, digest_type) == 0) {
547 verbose(VERB_QUERY, "verify: EVP_VerifyInit failed");
593 #ifdef HAVE_EVP_MD_CTX_NEW
594 ctx = EVP_MD_CTX_new();
595 #else
596 ctx = (EVP_MD_CTX*)malloc(sizeof(*ctx));
597 if(ctx) EVP_MD_CTX_init(ctx);
598 #endif
599 if(!ctx) {
600 log_err("EVP_MD_CTX_new: malloc failure");
548601 EVP_PKEY_free(evp_key);
549602 if(dofree) free(sigblock);
603 else if(docrypto_free) CRYPTO_free(sigblock);
550604 return sec_status_unchecked;
551605 }
552 if(EVP_VerifyUpdate(&ctx, (unsigned char*)sldns_buffer_begin(buf),
606 if(EVP_VerifyInit(ctx, digest_type) == 0) {
607 verbose(VERB_QUERY, "verify: EVP_VerifyInit failed");
608 EVP_MD_CTX_destroy(ctx);
609 EVP_PKEY_free(evp_key);
610 if(dofree) free(sigblock);
611 else if(docrypto_free) CRYPTO_free(sigblock);
612 return sec_status_unchecked;
613 }
614 if(EVP_VerifyUpdate(ctx, (unsigned char*)sldns_buffer_begin(buf),
553615 (unsigned int)sldns_buffer_limit(buf)) == 0) {
554616 verbose(VERB_QUERY, "verify: EVP_VerifyUpdate failed");
617 EVP_MD_CTX_destroy(ctx);
555618 EVP_PKEY_free(evp_key);
556619 if(dofree) free(sigblock);
620 else if(docrypto_free) CRYPTO_free(sigblock);
557621 return sec_status_unchecked;
558622 }
559623
560 res = EVP_VerifyFinal(&ctx, sigblock, sigblock_len, evp_key);
561 if(EVP_MD_CTX_cleanup(&ctx) == 0) {
562 verbose(VERB_QUERY, "verify: EVP_MD_CTX_cleanup failed");
563 EVP_PKEY_free(evp_key);
564 if(dofree) free(sigblock);
565 return sec_status_unchecked;
566 }
624 res = EVP_VerifyFinal(ctx, sigblock, sigblock_len, evp_key);
625 #ifdef HAVE_EVP_MD_CTX_NEW
626 EVP_MD_CTX_destroy(ctx);
627 #else
628 EVP_MD_CTX_cleanup(ctx);
629 free(ctx);
630 #endif
567631 EVP_PKEY_free(evp_key);
568632
569 if(dofree)
570 free(sigblock);
633 if(dofree) free(sigblock);
634 else if(docrypto_free) CRYPTO_free(sigblock);
571635
572636 if(res == 1) {
573637 return sec_status_secure;
619683 }
620684 }
621685
686 void
687 secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res)
688 {
689 (void)HASH_HashBuf(HASH_AlgSHA256, res, buf, (unsigned long)len);
690 }
691
622692 size_t
623693 ds_digest_size_supported(int algo)
624694 {
677747 case LDNS_RSAMD5:
678748 /* RFC 6725 deprecates RSAMD5 */
679749 return 0;
750 #ifdef USE_DSA
680751 case LDNS_DSA:
681752 case LDNS_DSA_NSEC3:
753 #endif
682754 case LDNS_RSASHA1:
683755 case LDNS_RSASHA1_NSEC3:
684756 #ifdef USE_SHA2
919991 */
920992
921993 switch(algo) {
994 #ifdef USE_DSA
922995 case LDNS_DSA:
923996 case LDNS_DSA_NSEC3:
924997 *pubkey = nss_buf2dsa(key, keylen);
9291002 *htype = HASH_AlgSHA1;
9301003 /* no prefix for DSA verification */
9311004 break;
1005 #endif
9321006 case LDNS_RSASHA1:
9331007 case LDNS_RSASHA1_NSEC3:
9341008 #ifdef USE_SHA2
10451119 return sec_status_bogus;
10461120 }
10471121
1122 #ifdef USE_DSA
10481123 /* need to convert DSA, ECDSA signatures? */
10491124 if((algo == LDNS_DSA || algo == LDNS_DSA_NSEC3)) {
10501125 if(sigblock_len == 1+2*SHA1_LENGTH) {
10671142 SECITEM_FreeItem(p, PR_TRUE);
10681143 }
10691144 }
1145 #endif /* USE_DSA */
10701146
10711147 /* do the signature cryptography work */
10721148 /* hash the data */
12051281 }
12061282 }
12071283
1284 void
1285 secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res)
1286 {
1287 _digest_nettle(SHA256_DIGEST_SIZE, (uint8_t*)buf, len, res);
1288 }
1289
12081290 /**
12091291 * Return size of DS digest according to its hash algorithm.
12101292 * @param algo: DS digest algo.
12621344 {
12631345 /* uses libnettle */
12641346 switch(id) {
1347 #ifdef USE_DSA
12651348 case LDNS_DSA:
12661349 case LDNS_DSA_NSEC3:
1350 #endif
12671351 case LDNS_RSASHA1:
12681352 case LDNS_RSASHA1_NSEC3:
12691353 #ifdef USE_SHA2
15401624 }
15411625
15421626 switch(algo) {
1627 #ifdef USE_DSA
15431628 case LDNS_DSA:
15441629 case LDNS_DSA_NSEC3:
15451630 *reason = _verify_nettle_dsa(buf, sigblock, sigblock_len, key, keylen);
15471632 return sec_status_bogus;
15481633 else
15491634 return sec_status_secure;
1635 #endif /* USE_DSA */
15501636
15511637 case LDNS_RSASHA1:
15521638 case LDNS_RSASHA1_NSEC3:
5959 unsigned char* res);
6060
6161 /**
62 * Calculate the sha256 hash for the data buffer into the result.
63 * @param buf: buffer to digest.
64 * @param len: length of the buffer to digest.
65 * @param res: result is stored here (space 256/8 bytes).
66 */
67 void secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res);
68
69 /**
6270 * Return size of DS digest according to its hash algorithm.
6371 * @param algo: DS digest algo.
6472 * @return size in bytes of digest, or 0 if not supported.
230230 NULL, /* no load ordering group */
231231 NULL, /* no tag identifier */
232232 NULL, /* no deps */
233 NULL, /* on LocalSystem */
234 NULL /* no password */
233 (LPCTSTR)"NT AUTHORITY\\NetworkService", /* network service account with restricted rights */
234 "" /* no password (must be an empty string) */
235235 );
236236 if(!sv) {
237237 CloseServiceHandle(scm);
5050 #include "daemon/remote.h"
5151 #include "util/config_file.h"
5252 #include "util/netevent.h"
53 #include "util/winsock_event.h"
53 #include "util/ub_event.h"
5454
5555 /** global service status */
5656 static SERVICE_STATUS service_status;
5959 /** global service stop event */
6060 static WSAEVENT service_stop_event = NULL;
6161 /** event struct for stop callbacks */
62 static struct event service_stop_ev;
62 static struct ub_event* service_stop_ev = NULL;
6363 /** if stop even means shutdown or restart */
6464 static int service_stop_shutdown = 0;
6565 /** config file to open. global communication to service_main() */
452452 /* exit */
453453 verbose(VERB_ALGO, "winservice - cleanup.");
454454 report_status(SERVICE_STOP_PENDING, NO_ERROR, 0);
455 if(service_stop_event) (void)WSACloseEvent(service_stop_event);
455456 service_deinit(daemon, cfg);
456457 free(service_cfgfile);
457 if(service_stop_event) (void)WSACloseEvent(service_stop_event);
458458 verbose(VERB_QUERY, "winservice - full stop");
459459 report_status(SERVICE_STOPPED, NO_ERROR, 0);
460460 }
599599 /* if not started with -w service, do nothing */
600600 if(!service_stop_event)
601601 return;
602 if(!winsock_register_wsaevent(comm_base_internal(worker->base),
603 &service_stop_ev, service_stop_event,
604 &worker_win_stop_cb, worker)) {
602 if(!(service_stop_ev = ub_winsock_register_wsaevent(
603 comm_base_internal(worker->base), service_stop_event,
604 &worker_win_stop_cb, worker))) {
605605 fatal_exit("could not register wsaevent");
606606 return;
607607 }