]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- access-control-tag-action and access-control-tag-data config
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 6 Jun 2016 13:47:24 +0000 (13:47 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 6 Jun 2016 13:47:24 +0000 (13:47 +0000)
  directives.
- make depend

git-svn-id: file:///svn/unbound/trunk@3759 be551aaa-1e26-0410-a405-d3ace91eadb9

12 files changed:
Makefile.in
daemon/acl_list.c
daemon/acl_list.h
doc/Changelog
doc/example.conf.in
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y

index b064e655df002f77b4a82ccb7ea53303d56f9032..de5768b3a339a3803a24296dba6cd923022773d0 100644 (file)
@@ -704,11 +704,12 @@ listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h
  $(srcdir)/util/rbtree.h  $(srcdir)/util/log.h $(srcdir)/util/config_file.h \
  $(srcdir)/util/net_help.h $(srcdir)/sldns/sbuffer.h
 localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \
- $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h \
- $(srcdir)/util/net_help.h $(srcdir)/util/netevent.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/util/as112.h
+ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/netevent.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/util/as112.h
 mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
  $(srcdir)/util/netevent.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
  $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \
@@ -759,7 +760,7 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/
  $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
  $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \
  $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h  \
- $(srcdir)/services/localzone.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/cache/infra.h \
  $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \
  $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \
  $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \
@@ -956,7 +957,8 @@ unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/lo
  $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h
 acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \
  $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/regional.h $(srcdir)/util/log.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h
+ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/locks.h \
+ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h
 cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h $(srcdir)/daemon/cachedump.h \
  $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
  $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
@@ -1063,7 +1065,8 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr
  $(srcdir)/libunbound/libworker.h
 acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \
  $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/regional.h $(srcdir)/util/log.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h
+ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/locks.h \
+ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h
 daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \
  $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h  \
  $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
@@ -1134,8 +1137,8 @@ context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbou
  $(srcdir)/libunbound/unbound.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
  $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
  $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h \
- $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
+ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/sldns/sbuffer.h
 libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbound/unbound.h \
  $(srcdir)/libunbound/unbound-event.h config.h $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h \
  $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
@@ -1143,7 +1146,7 @@ libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbou
  $(srcdir)/util/config_file.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
  $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h \
  $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h $(srcdir)/util/ub_event.h \
- $(srcdir)/services/localzone.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/cache/infra.h \
  $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
  $(srcdir)/sldns/sbuffer.h
 libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h $(srcdir)/libunbound/libworker.h \
@@ -1153,11 +1156,12 @@ libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h $(srcdir)/li
  $(srcdir)/libunbound/unbound-event.h $(srcdir)/services/outside_network.h $(srcdir)/util/netevent.h \
   $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \
  $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/services/localzone.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
- $(srcdir)/services/outbound_list.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/regional.h \
- $(srcdir)/util/random.h $(srcdir)/util/config_file.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/net_help.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/iterator/iter_fwd.h \
- $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/str2wire.h
+ $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/cache/rrset.h \
+ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/outbound_list.h $(srcdir)/util/fptr_wlist.h \
+ $(srcdir)/util/tube.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/util/config_file.h \
+ $(srcdir)/util/storage/lookup3.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/util/data/msgencode.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \
+ $(srcdir)/sldns/str2wire.h
 unbound-host.lo unbound-host.o: $(srcdir)/smallapp/unbound-host.c config.h $(srcdir)/libunbound/unbound.h \
  $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h
 asynclook.lo asynclook.o: $(srcdir)/testcode/asynclook.c config.h $(srcdir)/libunbound/unbound.h \
@@ -1225,7 +1229,6 @@ snprintf.lo snprintf.o: $(srcdir)/compat/snprintf.c config.h
 strlcat.lo strlcat.o: $(srcdir)/compat/strlcat.c config.h
 strlcpy.lo strlcpy.o: $(srcdir)/compat/strlcpy.c config.h
 strptime.lo strptime.o: $(srcdir)/compat/strptime.c config.h
-strsep.lo strsep.o: $(srcdir)/compat/strsep.c config.h
 getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h
 getentropy_osx.lo getentropy_osx.o: $(srcdir)/compat/getentropy_osx.c config.h
 getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h
@@ -1237,3 +1240,4 @@ arc4_lock.lo arc4_lock.o: $(srcdir)/compat/arc4_lock.c config.h $(srcdir)/util/l
 sha512.lo sha512.o: $(srcdir)/compat/sha512.c config.h
 reallocarray.lo reallocarray.o: $(srcdir)/compat/reallocarray.c config.h
 isblank.lo isblank.o: $(srcdir)/compat/isblank.c config.h
+strsep.lo strsep.o: $(srcdir)/compat/strsep.c config.h
index d663295bd23227079a728fcde19350703f575b80..b2b66ceef19feb5a115243e1c93e50d3cc1be9d6 100644 (file)
@@ -45,6 +45,8 @@
 #include "util/log.h"
 #include "util/config_file.h"
 #include "util/net_help.h"
+#include "services/localzone.h"
+#include "sldns/str2wire.h"
 
 struct acl_list* 
 acl_list_create(void)
@@ -76,13 +78,11 @@ acl_list_insert(struct acl_list* acl, struct sockaddr_storage* addr,
        socklen_t addrlen, int net, enum acl_access control, 
        int complain_duplicates)
 {
-       struct acl_addr* node = regional_alloc(acl->region,
+       struct acl_addr* node = regional_alloc_zero(acl->region,
                sizeof(struct acl_addr));
        if(!node)
                return NULL;
        node->control = control;
-       node->taglist = NULL;
-       node->taglen = 0;
        if(!addr_tree_insert(&acl->tree, &node->node, addr, addrlen, net)) {
                if(complain_duplicates)
                        verbose(VERB_QUERY, "duplicate acl address ignored.");
@@ -127,18 +127,17 @@ acl_list_str_cfg(struct acl_list* acl, const char* str, const char* s2,
        return 1;
 }
 
-/** apply acl_tag string */
-static int
-acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap,
-       size_t bitmaplen)
+/** find or create node (NULL on parse or error) */
+static struct acl_addr*
+acl_find_or_create(struct acl_list* acl, const char* str)
 {
+       struct acl_addr* node;
        struct sockaddr_storage addr;
        int net;
        socklen_t addrlen;
-       struct acl_addr* node;
        if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) {
-               log_err("cannot parse netblock in access-control-tag: %s", str);
-               return 0;
+               log_err("cannot parse netblock: %s", str);
+               return NULL;
        }
        /* find or create node */
        if(!(node=(struct acl_addr*)addr_tree_find(&acl->tree, &addr,
@@ -148,10 +147,20 @@ acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap,
                if(!(node=(struct acl_addr*)acl_list_insert(acl, &addr,
                        addrlen, net, acl_allow, 1))) {
                        log_err("out of memory");
-                       return 0;
+                       return NULL;
                }
        }
-       log_assert(node);
+       return node;
+}
+
+/** apply acl_tag string */
+static int
+acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap,
+       size_t bitmaplen)
+{
+       struct acl_addr* node;
+       if(!(node=acl_find_or_create(acl, str)))
+               return 0;
        node->taglen = bitmaplen;
        node->taglist = regional_alloc_init(acl->region, bitmap, bitmaplen);
        if(!node->taglist) {
@@ -161,6 +170,113 @@ acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap,
        return 1;
 }
 
+/** apply acl_tag_action string */
+static int
+acl_list_tag_action_cfg(struct acl_list* acl, struct config_file* cfg,
+       const char* str, const char* tag, const char* action)
+{
+       struct acl_addr* node;
+       int tagid;
+       enum localzone_type t;
+       if(!(node=acl_find_or_create(acl, str)))
+               return 0;
+       /* allocate array if not yet */
+       if(!node->tag_actions) {
+               node->tag_actions = (uint8_t*)regional_alloc_zero(acl->region,
+                       sizeof(*node->tag_actions)*cfg->num_tags);
+               if(!node->tag_actions) {
+                       log_err("out of memory");
+                       return 0;
+               }
+               node->tag_actions_size = cfg->num_tags;
+       }
+       /* parse tag */
+       if((tagid=find_tag_id(cfg, tag)) == -1) {
+               log_err("cannot parse tag (define-tag it): %s %s", str, tag);
+               return 0;
+       }
+       if((size_t)tagid >= node->tag_actions_size) {
+               log_err("tagid too large for array %s %s", str, tag);
+               return 0;
+       }
+       if(!local_zone_str2type(action, &t)) {
+               log_err("cannot parse access control action type: %s %s %s",
+                       str, tag, action);
+               return 0;
+       }
+       node->tag_actions[tagid] = (uint8_t)t;
+       return 1;
+}
+
+/** check wire data parse */
+static int
+check_data(const char* data)
+{
+       char buf[65536];
+       uint8_t rr[LDNS_RR_BUF_SIZE];
+       size_t len = sizeof(rr);
+       int res;
+       snprintf(buf, sizeof(buf), "%s %s", "example.com.", data);
+       res = sldns_str2wire_rr_buf(buf, rr, &len, NULL, 3600, NULL, 0,
+               NULL, 0);
+       if(res == 0)
+               return 1;
+       log_err("rr data [char %d] parse error %s",
+               (int)LDNS_WIREPARSE_OFFSET(res)-13,
+               sldns_get_errorstr_parse(res));
+       return 0;
+}
+
+/** apply acl_tag_data string */
+static int
+acl_list_tag_data_cfg(struct acl_list* acl, struct config_file* cfg,
+       const char* str, const char* tag, const char* data)
+{
+       struct acl_addr* node;
+       int tagid;
+       char* dupdata;
+       if(!(node=acl_find_or_create(acl, str)))
+               return 0;
+       /* allocate array if not yet */
+       if(!node->tag_datas) {
+               node->tag_datas = (struct config_strlist**)regional_alloc_zero(
+                       acl->region, sizeof(*node->tag_datas)*cfg->num_tags);
+               if(!node->tag_datas) {
+                       log_err("out of memory");
+                       return 0;
+               }
+               node->tag_datas_size = cfg->num_tags;
+       }
+       /* parse tag */
+       if((tagid=find_tag_id(cfg, tag)) == -1) {
+               log_err("cannot parse tag (define-tag it): %s %s", str, tag);
+               return 0;
+       }
+       if((size_t)tagid >= node->tag_datas_size) {
+               log_err("tagid too large for array %s %s", str, tag);
+               return 0;
+       }
+
+       /* check data? */
+       if(!check_data(data)) {
+               log_err("cannot parse access-control-tag data: %s %s '%s'",
+                       str, tag, data);
+               return 0;
+       }
+
+       dupdata = regional_strdup(acl->region, data);
+       if(!dupdata) {
+               log_err("out of memory");
+               return 0;
+       }
+       if(!cfg_region_strlist_insert(acl->region,
+               &(node->tag_datas[tagid]), dupdata)) {
+               log_err("out of memory");
+               return 0;
+       }
+       return 1;
+}
+
 /** read acl_list config */
 static int 
 read_acl_list(struct acl_list* acl, struct config_file* cfg)
@@ -187,6 +303,33 @@ read_acl_tags(struct acl_list* acl, struct config_file* cfg)
        return 1;
 }
 
+/** read acl tag actions config */
+static int 
+read_acl_tag_actions(struct acl_list* acl, struct config_file* cfg)
+{
+       struct config_str3list* p;
+       for(p = cfg->acl_tag_actions; p; p = p->next) {
+               log_assert(p->str && p->str2 && p->str3);
+               if(!acl_list_tag_action_cfg(acl, cfg, p->str, p->str2,
+                       p->str3))
+                       return 0;
+       }
+       return 1;
+}
+
+/** read acl tag datas config */
+static int 
+read_acl_tag_datas(struct acl_list* acl, struct config_file* cfg)
+{
+       struct config_str3list* p;
+       for(p = cfg->acl_tag_datas; p; p = p->next) {
+               log_assert(p->str && p->str2 && p->str3);
+               if(!acl_list_tag_data_cfg(acl, cfg, p->str, p->str2, p->str3))
+                       return 0;
+       }
+       return 1;
+}
+
 int 
 acl_list_apply_cfg(struct acl_list* acl, struct config_file* cfg)
 {
@@ -196,6 +339,10 @@ acl_list_apply_cfg(struct acl_list* acl, struct config_file* cfg)
                return 0;
        if(!read_acl_tags(acl, cfg))
                return 0;
+       if(!read_acl_tag_actions(acl, cfg))
+               return 0;
+       if(!read_acl_tag_datas(acl, cfg))
+               return 0;
        /* insert defaults, with '0' to ignore them if they are duplicates */
        if(!acl_list_str_cfg(acl, "0.0.0.0/0", "refuse", 0))
                return 0;
index c3f033f2a2e6ec373511ad391fccd11b5e59d1b3..fd4374d8f327b38a524789da02fbdb3da3a356e6 100644 (file)
@@ -91,6 +91,15 @@ struct acl_addr {
        uint8_t* taglist;
        /** length of the taglist (in bytes) */
        size_t taglen;
+       /** array per tagnumber of localzonetype(in one byte). NULL if none. */
+       uint8_t* tag_actions;
+       /** size of the tag_actions_array */
+       size_t tag_actions_size;
+       /** array per tagnumber, with per tag a list of rdata strings.
+        * NULL if none.  strings are like 'A 127.0.0.1' 'AAAA ::1' */
+       struct config_strlist** tag_datas;
+       /** size of the tag_datas array */
+       size_t tag_datas_size;
 };
 
 /**
index b6a6b6bc43444fc0101e8f0a4900c1fe84c7f450..98d42f0e27e88d269d81203612b218244229dd02 100644 (file)
@@ -2,6 +2,8 @@
        - Better help text from -h (from Ray Griffith).
        - access-control-tag config directive.
        - local-zone-override config directive.
+       - access-control-tag-action and access-control-tag-data config
+         directives.
 
 3 June 2016: Wouter
        - Fix to not ignore return value of chown() in daemon startup.
index ee297697082e22c54b609dcac61270860d7dfd59..48f26074692eaef66ae5839bb2b7213f2540ae24 100644 (file)
@@ -212,6 +212,12 @@ server:
        # are tagged with one of these tags.
        # access-control-tag: 192.0.2.0/24 "tag2 tag3"
 
+       # set action for particular tag for given access control element
+       # access-control-tag-action: 192.0.2.0/24 tag3 refuse
+
+       # set redirect data for particular tag for access control element
+       # access-control-tag-data: 192.0.2.0/24 tag2 "A 127.0.0.1"
+
        # if given, a chroot(2) is done to the given directory.
        # i.e. you can chroot to the working directory, for example,
        # for extra security, but make sure all files are in that directory.
index 35ca00bd1f7a1ef8d3d3fcfecc18a151c7541dd2..90ab61d8c7718c50011684709956df9ae4c90650 100644 (file)
@@ -795,6 +795,8 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_LTG(opt, "local-zone-tag", local_zone_tags)
        else O_LTG(opt, "access-control-tag", acl_tags)
        else O_LS3(opt, "local-zone-override", local_zone_overrides)
+       else O_LS3(opt, "access-control-tag-action", acl_tag_actions)
+       else O_LS3(opt, "access-control-tag-data", acl_tag_datas)
        /* not here:
         * outgoing-permit, outgoing-avoid - have list of ports
         * local-zone - zones and nodefault variables
@@ -1049,6 +1051,8 @@ config_delete(struct config_file* cfg)
        config_del_strarray(cfg->tagname, cfg->num_tags);
        config_del_strbytelist(cfg->local_zone_tags);
        config_del_strbytelist(cfg->acl_tags);
+       config_deltrplstrlist(cfg->acl_tag_actions);
+       config_deltrplstrlist(cfg->acl_tag_datas);
        config_delstrlist(cfg->control_ifs);
        free(cfg->server_key_file);
        free(cfg->server_cert_file);
@@ -1206,6 +1210,23 @@ int cfg_strlist_append(struct config_strlist_head* list, char* item)
        return 1;
 }
 
+int 
+cfg_region_strlist_insert(struct regional* region,
+       struct config_strlist** head, char* item)
+{
+       struct config_strlist *s;
+       if(!item || !head)
+               return 0;
+       s = (struct config_strlist*)regional_alloc_zero(region,
+               sizeof(struct config_strlist));
+       if(!s)
+               return 0;
+       s->str = item;
+       s->next = *head;
+       *head = s;
+       return 1;
+}
+
 int 
 cfg_strlist_insert(struct config_strlist** head, char* item)
 {
index c6842168129420cbe0d3a18d0359440413d04e1a..2483581e6108e78a04fbd608fd1e5f34861092ed 100644 (file)
@@ -49,6 +49,7 @@ struct config_strbytelist;
 struct module_qstate;
 struct sock_list;
 struct ub_packed_rrset_key;
+struct regional;
 
 /**
  * The configuration options.
@@ -303,6 +304,10 @@ struct config_file {
        struct config_strbytelist* local_zone_tags;
        /** list of aclname, tagbitlist */
        struct config_strbytelist* acl_tags;
+       /** list of aclname, tagname, localzonetype */
+       struct config_str3list* acl_tag_actions;
+       /** list of aclname, tagname, redirectdata */
+       struct config_str3list* acl_tag_datas;
        /** tag list, array with tagname[i] is malloced string */
        char** tagname;
        /** number of items in the taglist */
@@ -595,6 +600,10 @@ int cfg_strlist_append(struct config_strlist_head* list, char* item);
  */
 int cfg_strlist_insert(struct config_strlist** head, char* item);
 
+/** insert with region for allocation. */
+int cfg_region_strlist_insert(struct regional* region,
+       struct config_strlist** head, char* item);
+
 /**
  * Insert string into str2list.
  * @param head: pointer to str2list head variable.
index 88de2d8b75b52ad21001af1bff94e6b04067d5ba..bef6080707f61e115d4b357fdba1f830c84b9bc7 100644 (file)
@@ -378,8 +378,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 185
-#define YY_END_OF_BUFFER 186
+#define YY_NUM_RULES 187
+#define YY_END_OF_BUFFER 188
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -387,212 +387,214 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1861] =
+static yyconst flex_int16_t yy_accept[1874] =
     {   0,
-        1,    1,  167,  167,  171,  171,  175,  175,  179,  179,
-        1,    1,  186,  183,    1,  165,  165,  184,    2,  184,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      167,  168,  168,  169,  184,  171,  172,  172,  173,  184,
-      178,  175,  176,  176,  177,  184,  179,  180,  180,  181,
-      184,  182,  166,    2,  170,  184,  182,  183,    0,    1,
-        2,    2,    2,    2,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  167,    0,  171,    0,
-      178,    0,  175,  179,    0,  182,    0,    2,    2,  182,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  182,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  182,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,   74,  183,  183,  183,  183,  183,  183,    7,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  182,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  182,  183,  183,  183,  183,  183,   34,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  145,  183,
-       13,   14,  183,   16,   15,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  134,  183,  183,  183,
-      183,  183,  183,  183,    3,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  182,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  174,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,   37,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,   38,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,   18,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,   89,  174,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-       88,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,   72,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,   23,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,   35,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,   36,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,   25,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  159,  183,  183,  183,  183,  183,  183,   29,
-      183,   30,  183,  183,  183,   75,  183,   76,  183,   73,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,    6,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  141,
-      183,  183,  183,  183,   91,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,   26,  183,
-      183,  183,  183,  183,  183,  117,  183,  116,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,   39,  183,  183,  183,  183,  183,  183,
-      183,  183,   78,   77,  183,  183,  183,  183,  183,  183,
-      183,  113,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,   57,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,   61,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,   33,  183,  183,  183,  183,  183,  183,  183,  183,
-      115,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-        5,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  109,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  127,  183,  110,  183,  183,  139,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,   24,  183,
-      183,  183,  183,   80,  183,   81,   79,  183,  183,  183,
-      183,  183,  183,  183,   87,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  111,  183,  183,
-
-      183,  183,  183,  183,  138,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,   71,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,   31,  183,  183,   20,  183,  183,  183,
-       17,  183,   96,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,   46,   48,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  146,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,   82,  183,  183,  183,  183,  183,  183,   86,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,   90,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  133,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  100,  183,  104,  183,
-      183,  183,  183,  183,   85,  183,  183,   67,  183,  125,
-      183,  183,  183,  183,  183,  140,  183,  183,  183,  183,
-      183,  183,  183,  151,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  103,  183,  183,  183,  183,
-      183,   49,   50,  183,  183,   32,   56,  105,  183,  118,
-
-      183,  142,  114,  183,  183,   42,  183,  107,  183,  183,
-      183,  183,  183,    8,  183,  183,  183,   70,  183,  183,
-      183,  183,  161,  183,  124,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,   92,  150,  183,  183,  183,  183,
-      183,  183,  183,  183,  135,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      106,  183,  183,   41,   43,  183,  183,  183,  183,  183,
-      183,  183,   69,  183,  183,  183,  183,  160,  183,  183,
-
-      183,  183,  129,   21,   22,  183,  183,  183,  183,  183,
-      183,  183,   66,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  131,  128,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,   40,  183,  183,  183,  183,
-      183,  183,  183,   12,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,   11,  183,  183,   19,  183,  183,
-      183,  164,  183,   44,  183,  137,  130,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,   99,   98,
-      183,  183,  183,  132,  126,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,   51,  183,  183,  183,  136,  183,
-      183,  183,  183,  183,  183,  183,  183,   45,  183,  183,
-      183,   93,   95,  119,  183,  183,  183,   97,  183,  143,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  147,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  120,  183,  183,  183,   27,  183,  183,  183,
-        4,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  149,  183,
-      183,  123,  183,  183,  183,  183,  183,  183,  183,   54,
-      183,   28,  144,  183,   10,  183,  183,  183,  183,  183,
-
-      121,   58,  183,  183,  183,  102,  183,  183,  183,  183,
-      183,  183,  183,  183,  148,   83,  183,  183,  183,  183,
-       60,   64,   59,  183,   52,  183,    9,  183,  183,  162,
-      183,  183,  101,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,   65,   63,  183,   53,  183,  112,
-      183,  122,  183,  183,   94,   47,  183,  183,  183,  183,
-      183,  183,  183,   84,   62,   55,  163,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,   68,  183,  158,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  108,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  154,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  152,  183,
-      155,  156,  183,  183,  183,  183,  183,  153,  157,    0
+        1,    1,  169,  169,  173,  173,  177,  177,  181,  181,
+        1,    1,  188,  185,    1,  167,  167,  186,    2,  186,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      169,  170,  170,  171,  186,  173,  174,  174,  175,  186,
+      180,  177,  178,  178,  179,  186,  181,  182,  182,  183,
+      186,  184,  168,    2,  172,  186,  184,  185,    0,    1,
+        2,    2,    2,    2,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  169,    0,  173,    0,
+      180,    0,  177,  181,    0,  184,    0,    2,    2,  184,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,  184,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  184,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,   74,  185,  185,  185,  185,  185,  185,    7,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  184,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  184,  185,  185,  185,  185,  185,   34,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  147,  185,
+       13,   14,  185,   16,   15,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  134,  185,  185,  185,
+      185,  185,  185,  185,    3,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  184,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  176,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,   37,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,   38,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,   18,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,   89,  176,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+       88,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,   72,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,   23,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,   35,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,   36,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,   25,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  161,  185,  185,  185,  185,  185,  185,   29,
+      185,   30,  185,  185,  185,   75,  185,   76,  185,   73,
+
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,    6,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  141,
+      185,  185,  185,  185,   91,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,   26,  185,
+      185,  185,  185,  185,  185,  117,  185,  116,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,   39,  185,  185,  185,  185,  185,  185,
+      185,  185,   78,   77,  185,  185,  185,  185,  185,  185,
+      185,  113,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,   57,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,   61,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,   33,  185,  185,  185,  185,  185,  185,  185,  185,
+      115,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+        5,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  109,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  127,  185,  110,  185,  185,  139,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,   24,  185,
+      185,  185,  185,   80,  185,   81,   79,  185,  185,  185,
+      185,  185,  185,  185,   87,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  111,  185,  185,
+
+      185,  185,  185,  185,  138,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,   71,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,   31,  185,  185,   20,  185,  185,  185,
+       17,  185,   96,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,   46,   48,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  148,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,   82,  185,  185,  185,  185,  185,  185,   86,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,  185,  185,  185,  185,  185,   90,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  133,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  100,  185,  104,  185,
+      185,  185,  185,  185,   85,  185,  185,   67,  185,  125,
+      185,  185,  185,  185,  185,  140,  185,  185,  185,  185,
+      185,  185,  185,  153,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  103,  185,  185,  185,  185,
+      185,   49,   50,  185,  185,   32,   56,  105,  185,  118,
+
+      185,  142,  114,  185,  185,   42,  185,  107,  185,  185,
+      185,  185,  185,    8,  185,  185,  185,   70,  185,  185,
+      185,  185,  163,  185,  124,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,   92,  152,  185,  185,  185,  185,
+      185,  185,  185,  185,  135,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      106,  185,  185,   41,   43,  185,  185,  185,  185,  185,
+      185,  185,   69,  185,  185,  185,  185,  162,  185,  185,
+
+      185,  185,  129,   21,   22,  185,  185,  185,  185,  185,
+      185,  185,   66,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  131,  128,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,   40,  185,  185,  185,  185,
+      185,  185,  185,   12,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,   11,  185,  185,   19,  185,  185,
+      185,  166,  185,   44,  185,  137,  130,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,   99,   98,
+      185,  185,  185,  132,  126,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+
+      185,  185,  185,  185,   51,  185,  185,  185,  136,  185,
+      185,  185,  185,  185,  185,  185,  185,   45,  185,  185,
+      185,   93,   95,  119,  185,  185,  185,   97,  185,  185,
+      143,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      149,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  120,  185,  185,  185,   27,  185,  185,
+      185,    4,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  151,  185,  185,  123,  185,  185,  185,  185,  185,
+      185,  185,   54,  185,   28,  146,  185,   10,  185,  185,
+
+      185,  185,  185,  121,   58,  185,  185,  185,  102,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  150,
+       83,  185,  185,  185,  185,   60,   64,   59,  185,   52,
+      185,    9,  185,  185,  164,  185,  185,  101,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,   65,   63,  185,   53,  185,  112,  185,  122,  185,
+      185,  185,  185,   94,   47,  185,  185,  185,  185,  185,
+      185,  185,   84,   62,   55,  165,  185,  185,  185,  145,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,   68,  185,  144,
+
+      160,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  108,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  156,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  154,  185,  157,  158,  185,  185,  185,  185,  185,
+      155,  159,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -635,15 +637,15 @@ static yyconst YY_CHAR yy_meta[40] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_uint16_t yy_base[1875] =
+static yyconst flex_uint16_t yy_base[1888] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
-       87,  108, 2327, 2209,   50, 3682, 3682, 3682,  129,   94,
+       87,  108, 2327, 2209,   50, 3703, 3703, 3703,  129,   94,
        70,  104,  130,   90,   92,  115,  127,   95,   84,  111,
       137,  148,   50,  170,  122,  150,  157,  160,  140,  166,
-     2199, 3682, 3682, 3682,   70, 2123, 3682, 3682, 3682,   42,
-     2030, 1970, 3682, 3682, 3682,  192, 1217, 3682, 3682, 3682,
-      141, 1000, 3682,  198, 3682,  202,  197,  956,  210,  120,
+     2199, 3703, 3703, 3703,   70, 2123, 3703, 3703, 3703,   42,
+     2030, 1970, 3703, 3703, 3703,  192, 1217, 3703, 3703, 3703,
+      141, 1000, 3703,  198, 3703,  202,  197,  956,  210,  120,
         0,  223,    0,    0,  103,  203,  180,  205,  164,  206,
       213,  210,  125,  216,  231,  218,  227,  224,  230,  233,
       234,  236,  240,  254,  238,  251,  255,  241,  252,  263,
@@ -673,7 +675,7 @@ static yyconst flex_uint16_t yy_base[1875] =
       684,  686,  687,  692,  694,  695,  689,  697,  700,  701,
       708,  712,  705,  720,  698,  717,  721,  724,  726,  728,
       718,  734,  737,  730,  736,  738,  739,  740,  742,  744,
-      748, 3682,  752,  746,  754,  755,  756,  757, 3682,  758,
+      748, 3703,  752,  746,  754,  755,  756,  757, 3703,  758,
       759,  760,  766,  763,  768,  775,  782,  770,  771,  780,
       781,  784,  786,  787,  789,  809,  792,  794,  790,  800,
       804,  796,  797,  802,  818,  811,  820,  814,  821,  822,
@@ -688,15 +690,15 @@ static yyconst flex_uint16_t yy_base[1875] =
       972,  983,  984,  985,  987,  988,  989,  990,  992,  993,
       995,  996, 1004,  997,  998, 1014, 1006, 1012, 1019, 1018,
      1020, 1022, 1021, 1025, 1026, 1027, 1031, 1029, 1037, 1040,
-     1038, 1041, 1042, 1050, 1043, 1056, 1051, 3682, 1053, 1055,
-     1058, 1059, 1061, 1068, 1066, 1067, 1069, 1095, 3682, 1072,
-     3682, 3682, 1073, 3682, 3682, 1077, 1070, 1078, 1088, 1118,
+     1038, 1041, 1042, 1050, 1043, 1056, 1051, 3703, 1053, 1055,
+     1058, 1059, 1061, 1068, 1066, 1067, 1069, 1095, 3703, 1072,
+     3703, 3703, 1073, 3703, 3703, 1077, 1070, 1078, 1088, 1118,
 
      1084, 1080, 1081, 1093, 1092, 1101, 1102, 1097, 1109, 1111,
      1121, 1123, 1113, 1126, 1127, 1129, 1131, 1132, 1134, 1135,
      1138, 1141, 1151, 1155, 1154, 1099, 1144, 1156, 1142, 1158,
-     1159, 1161, 1168, 1162, 1174, 1165, 3682, 1172, 1173, 1175,
-     1171, 1176, 1179, 1186, 3682, 1183, 1187, 1188, 1190, 1191,
+     1159, 1161, 1168, 1162, 1174, 1165, 3703, 1172, 1173, 1175,
+     1171, 1176, 1179, 1186, 3703, 1183, 1187, 1188, 1190, 1191,
      1195, 1193, 1196, 1198, 1199, 1203, 1205, 1201, 1221, 1206,
      1208, 1228, 1229, 1227, 1211, 1225, 1233, 1214, 1239, 1241,
      1242, 1232, 1234, 1248, 1244, 1252, 1254, 1246, 1255, 1249,
@@ -704,358 +706,360 @@ static yyconst flex_uint16_t yy_base[1875] =
      1272, 1273, 1279, 1285, 1283, 1294, 1295, 1296, 1301, 1303,
 
      1305, 1312, 1313, 1276, 1315, 1304, 1316, 1323, 1325, 1326,
-     1327, 1329, 1332, 1333, 3682, 1340, 1342, 1336, 1338, 1349,
+     1327, 1329, 1332, 1333, 3703, 1340, 1342, 1336, 1338, 1349,
      1347, 1343, 1350, 1353, 1354, 1346, 1356, 1357, 1358, 1364,
-     1371, 3682, 1360, 1367, 1368, 1370, 1376, 1382, 1380, 1390,
-     1393, 1384, 3682, 1399, 1400, 1392, 1396, 1386, 1402, 1403,
+     1371, 3703, 1360, 1367, 1368, 1370, 1376, 1382, 1380, 1390,
+     1393, 1384, 3703, 1399, 1400, 1392, 1396, 1386, 1402, 1403,
      1405, 1407, 1409, 1411, 1412, 1413, 1415, 1420, 1422, 1424,
-     1427, 1425, 1426, 1432, 1433, 1434, 1435, 3682, 1436, 1438,
+     1427, 1425, 1426, 1432, 1433, 1434, 1435, 3703, 1436, 1438,
      1437, 1444, 1455, 1458, 1447, 1460, 1449, 1451, 1457, 1378,
-     1461, 1463, 1464, 1466, 3682,  158, 1467, 1470, 1473, 1476,
+     1461, 1463, 1464, 1466, 3703,  158, 1467, 1470, 1473, 1476,
      1480, 1477, 1484, 1474, 1478, 1490, 1486, 1487, 1496, 1494,
 
      1497, 1499, 1500, 1502, 1504, 1505, 1507, 1512, 1511, 1513,
      1519, 1515, 1521, 1523, 1524, 1526, 1529, 1532, 1535, 1534,
      1537, 1538, 1539, 1540, 1541, 1542, 1547, 1546, 1550, 1554,
-     3682, 1569, 1557, 1558, 1555, 1567, 1556, 1578, 1565, 1574,
+     3703, 1569, 1557, 1558, 1555, 1567, 1556, 1578, 1565, 1574,
      1579, 1576, 1581, 1587, 1585, 1591, 1592, 1593, 1595, 1598,
-     1599, 1583, 1605, 1607, 1606, 1608, 1614, 1609, 1615, 3682,
+     1599, 1583, 1605, 1607, 1606, 1608, 1614, 1609, 1615, 3703,
      1616, 1618, 1617, 1622, 1641, 1624, 1625, 1619, 1629, 1621,
-     1637, 1646, 1642, 1648, 3682, 1649, 1650, 1651, 1654, 1656,
+     1637, 1646, 1642, 1648, 3703, 1649, 1650, 1651, 1654, 1656,
      1659, 1660, 1664, 1661, 1666, 1667, 1668, 1677, 1669, 1674,
-     1672, 3682, 1688, 1689, 1685, 1691, 1692, 1693, 1694, 1696,
+     1672, 3703, 1688, 1689, 1685, 1691, 1692, 1693, 1694, 1696,
 
      1682, 1697, 1703, 1699, 1704, 1706, 1707, 1708, 1710, 1711,
-     1714, 1716, 1723, 1715, 1726, 3682, 1727, 1734, 1728, 1735,
+     1714, 1716, 1723, 1715, 1726, 3703, 1727, 1734, 1728, 1735,
      1306, 1739, 1745, 1744, 1741, 1742, 1747, 1749, 1750, 1751,
      1754, 1756, 1757, 1758, 1762, 1763, 1764, 1765, 1766, 1780,
      1781, 1770, 1759, 1782, 1783, 1772, 1785, 1796, 1799, 1800,
-     1802, 3682, 1805, 1806, 1795, 1807, 1808, 1792, 1819, 1821,
+     1802, 3703, 1805, 1806, 1795, 1807, 1808, 1792, 1819, 1821,
      1798, 1809, 1815, 1823, 1824, 1831, 1825, 1827, 1829, 1832,
      1833, 1834, 1835, 1836, 1840, 1845, 1849, 1852, 1853, 1858,
-     1859, 1862, 3682, 1860, 1839, 1865, 1869, 1863, 1876, 3682,
-     1861, 3682, 1877, 1874, 1889, 3682, 1886, 3682, 1888, 3682,
+     1859, 1862, 3703, 1860, 1839, 1865, 1869, 1863, 1876, 3703,
+     1861, 3703, 1877, 1874, 1889, 3703, 1886, 3703, 1888, 3703,
 
      1890, 1891, 1894, 1878, 1896, 1895, 1897, 1899, 1901, 1904,
-     1902, 1906, 1907, 1908, 1913, 3682, 1914, 1915, 1919, 1923,
-     1916, 1922, 1925, 1926, 1931, 1930, 1943, 1937, 1944, 3682,
-     1940, 1948, 1941, 1945, 3682, 1949, 1952, 1950, 1955, 1958,
+     1902, 1906, 1907, 1908, 1913, 3703, 1914, 1915, 1919, 1923,
+     1916, 1922, 1925, 1926, 1931, 1930, 1943, 1937, 1944, 3703,
+     1940, 1948, 1941, 1945, 3703, 1949, 1952, 1950, 1955, 1958,
      1968, 1965, 1969, 1966, 1956, 1974, 1972, 1979, 1982, 1983,
      1984, 1985, 1991, 1987, 1988, 1995, 1992, 1989, 1996, 1998,
-     1999, 2003, 2001, 2011, 2005, 2008, 2009, 2012, 3682, 2020,
-     2017, 2021, 2024, 2026, 2027, 3682, 2029, 3682, 2040, 2034,
+     1999, 2003, 2001, 2011, 2005, 2008, 2009, 2012, 3703, 2020,
+     2017, 2021, 2024, 2026, 2027, 3703, 2029, 3703, 2040, 2034,
      2041, 2032, 2042, 2045, 2047, 2052, 2055, 2054, 2057, 2058,
      2060, 2062, 2063, 2068, 2065, 2066, 2069, 2067, 2072, 2082,
 
-     2073, 2085, 2075, 3682, 2091, 2089, 2100, 2092, 2096, 2104,
-     2101, 2102, 3682, 3682, 2109, 2106, 2103, 2108, 2115, 2112,
-     2113, 3682, 2118, 2120, 2125, 2129, 2132, 2126, 2122, 2133,
+     2073, 2085, 2075, 3703, 2091, 2089, 2100, 2092, 2096, 2104,
+     2101, 2102, 3703, 3703, 2109, 2106, 2103, 2108, 2115, 2112,
+     2113, 3703, 2118, 2120, 2125, 2129, 2132, 2126, 2122, 2133,
      2140, 2136, 2142, 2141, 2143, 2144, 2151, 2147, 2152, 2154,
-     2157, 2158, 2165, 3682, 2162, 2166, 2169, 2171, 2172, 2173,
+     2157, 2158, 2165, 3703, 2162, 2166, 2169, 2171, 2172, 2173,
      2174, 2176, 2179, 2178, 2181, 2180, 2189, 2190, 2192, 2193,
-     2194, 2197, 2198, 2203, 2205, 2206, 2216, 2217, 3682, 2224,
+     2194, 2197, 2198, 2203, 2205, 2206, 2216, 2217, 3703, 2224,
      2207, 2226, 2208, 2223, 2227, 2234, 2230, 2215, 2231, 2237,
-     2236, 3682, 2238, 2239, 2241, 2245, 2246, 2248, 2250, 2253,
-     3682, 2255, 2258, 2259, 2262, 2261, 2263, 2265, 2267, 2275,
+     2236, 3703, 2238, 2239, 2241, 2245, 2246, 2248, 2250, 2253,
+     3703, 2255, 2258, 2259, 2262, 2261, 2263, 2265, 2267, 2275,
 
-     3682, 2273, 2281, 2277, 2279, 2285, 2287, 2284, 2290, 2292,
+     3703, 2273, 2281, 2277, 2279, 2285, 2287, 2284, 2290, 2292,
      2288, 2294, 2298, 2296, 2300, 2302, 2303, 2305, 2306, 2307,
      2309, 2312, 2317, 2319, 2324, 2311, 2326, 2334, 2337, 2343,
      2344, 2327, 2333, 2346, 2347, 2348, 2349, 2331, 2355, 2351,
-     2362, 2354, 3682, 2360, 2364, 2368, 2370, 2358, 2371, 2374,
-     2375, 2376, 3682, 2382, 3682, 2380, 2372, 3682, 2386, 2389,
-     2390, 2391, 2393, 2394, 2392, 2397, 2404, 2395, 3682, 2405,
-     2401, 2403, 2407, 3682, 2415, 3682, 3682, 2408, 2418, 2425,
-     1700, 2421, 2424, 2428, 3682, 2429, 2430, 2433, 2431, 2435,
-     2437, 2439, 2441, 2438, 2442, 2443, 2445, 3682, 2447, 2444,
-
-     2448, 2454, 2455, 2458, 3682, 2460, 2469, 2461, 2470, 2471,
-     2472, 2476, 2478, 2479, 2485, 2483, 2482, 2484, 3682, 2486,
+     2362, 2354, 3703, 2360, 2364, 2368, 2370, 2358, 2371, 2374,
+     2375, 2376, 3703, 2382, 3703, 2380, 2372, 3703, 2386, 2389,
+     2390, 2391, 2393, 2394, 2392, 2397, 2404, 2395, 3703, 2405,
+     2401, 2403, 2407, 3703, 2415, 3703, 3703, 2408, 2418, 2425,
+     1700, 2421, 2424, 2428, 3703, 2429, 2430, 2433, 2431, 2435,
+     2437, 2439, 2441, 2438, 2442, 2443, 2445, 3703, 2447, 2444,
+
+     2448, 2454, 2455, 2458, 3703, 2460, 2469, 2461, 2470, 2471,
+     2472, 2476, 2478, 2479, 2485, 2483, 2482, 2484, 3703, 2486,
      2489, 2491, 2493, 2497, 2498, 2506, 2502, 2508, 2504, 2511,
-     2513, 2500, 2514, 3682, 2517, 2519, 3682, 2521, 2525, 2527,
-     3682, 2529, 3682, 2530, 2531, 2528, 2532, 2538, 2533, 2540,
-     2544, 2547, 2549, 2548, 2557, 2550, 2555, 3682, 3682, 2560,
-     2562, 2565, 2566, 2568, 2569, 2577, 2573, 2582, 3682, 2570,
+     2513, 2500, 2514, 3703, 2517, 2519, 3703, 2521, 2525, 2527,
+     3703, 2529, 3703, 2530, 2531, 2528, 2532, 2538, 2533, 2540,
+     2544, 2547, 2549, 2548, 2557, 2550, 2555, 3703, 3703, 2560,
+     2562, 2565, 2566, 2568, 2569, 2577, 2573, 2582, 3703, 2570,
      2574, 2576, 2583, 2584, 2585, 2586, 2591, 2588, 2593, 2596,
-     2594, 2597, 3682, 2600, 2604, 2605, 2606, 2607, 2609, 3682,
+     2594, 2597, 3703, 2600, 2604, 2605, 2606, 2607, 2609, 3703,
      2611, 2612, 2613, 2617, 2621, 2632, 2636, 2638, 2614, 2639,
 
-     2641, 2643, 2645, 2646, 2648, 2649, 2651, 2654, 2655, 3682,
+     2641, 2643, 2645, 2646, 2648, 2649, 2651, 2654, 2655, 3703,
      2656, 2658, 2659, 2663, 2664, 2660, 2622, 2668, 2671, 2672,
-     2673, 2675, 2677, 3682, 2679, 2680, 2681, 2683, 2686, 2689,
+     2673, 2675, 2677, 3703, 2679, 2680, 2681, 2683, 2686, 2689,
      2693, 2690, 2697, 2695, 2700, 2701, 2702, 2705, 2707, 2709,
-     2710, 2711, 2713, 2715, 2724, 2717, 3682, 2723, 3682, 2726,
-     2730, 2737, 2733, 2736, 3682, 2738, 2739, 3682, 2740, 3682,
-     2741, 2745, 2746, 2747, 2755, 3682, 2758, 2749, 2760, 2762,
-     2751, 2764, 2767, 3682, 2769, 2772, 2771, 2776, 2777, 2778,
-     2780, 2779, 2782, 2790, 2788, 3682, 2786, 2791, 2798, 2795,
-     2804, 3682, 3682, 2800, 2807, 3682, 3682, 3682, 2810, 3682,
-
-     2801, 3682, 3682, 2811, 2813, 3682, 2818, 3682, 2820, 2821,
-     2789, 2823, 2824, 3682, 2825, 2826, 2828, 3682, 2830, 2836,
-     2832, 2833, 3682, 2835, 3682, 2837, 2841, 2840, 2846, 2853,
+     2710, 2711, 2713, 2715, 2724, 2717, 3703, 2723, 3703, 2726,
+     2730, 2737, 2733, 2736, 3703, 2738, 2739, 3703, 2740, 3703,
+     2741, 2745, 2746, 2747, 2755, 3703, 2758, 2749, 2760, 2762,
+     2751, 2764, 2767, 3703, 2769, 2772, 2771, 2776, 2777, 2778,
+     2780, 2779, 2782, 2790, 2788, 3703, 2786, 2791, 2798, 2795,
+     2804, 3703, 3703, 2800, 2807, 3703, 3703, 3703, 2810, 3703,
+
+     2801, 3703, 3703, 2811, 2813, 3703, 2818, 3703, 2820, 2821,
+     2789, 2823, 2824, 3703, 2825, 2826, 2828, 3703, 2830, 2836,
+     2832, 2833, 3703, 2835, 3703, 2837, 2841, 2840, 2846, 2853,
      2856, 2858, 2847, 2849, 2860, 2861, 2862, 2863, 2864, 2866,
      2869, 2870, 2871, 2875, 2876, 2879, 2880, 2877, 2882, 2885,
-     2887, 2898, 2902, 2905, 3682, 3682, 2883, 2889, 2886, 2894,
-     2909, 2899, 2910, 2911, 3682, 2916, 2913, 2917, 2920, 2921,
+     2887, 2898, 2902, 2905, 3703, 3703, 2883, 2889, 2886, 2894,
+     2909, 2899, 2910, 2911, 3703, 2916, 2913, 2917, 2920, 2921,
      2923, 2926, 2925, 2930, 2932, 2931, 2933, 2934, 2938, 2936,
-     3682, 2937, 2940, 3682, 3682, 2945, 2947, 2952, 2954, 2955,
-     2958, 2960, 3682, 2961, 2962, 2968, 2970, 3682, 2972, 2963,
-
-     2975, 2978, 3682, 3682, 3682, 2979, 2981, 2984, 2985, 2986,
-     2987, 2988, 3682, 2989, 2992, 2994, 2995, 3001, 3008, 2998,
-     3014, 3011, 3013, 3018, 3682, 3682, 3002, 3024, 3021, 3022,
-     3020, 3023, 3026, 3028, 3030, 3682, 3032, 3031, 3037, 3036,
-     3039, 3040, 3043, 3682, 3044, 3046, 3051, 3054, 3055, 3047,
-     3057, 3059, 3060, 3062, 3682, 3064, 3065, 3682, 3071, 3069,
-     3072, 3682, 3076, 3682, 3080, 3682, 3682, 3081, 3084, 3086,
-     3091, 3093, 3095, 3082, 3088, 3103, 3097, 3104, 3682, 3682,
-     3106, 3107, 3114, 3682, 3682, 3110, 3099, 3118, 3111, 3112,
-     3119, 3121, 3122, 3126, 3124, 3127, 3130, 3135, 3137, 3125,
-
-     3136, 3138, 3139, 3140, 3682, 3149, 3150, 3152, 3682, 3146,
-     3155, 3161, 3158, 3156, 3169, 3163, 3166, 3682, 3170, 3172,
-     3173, 3682, 3682, 3682, 3177, 3180, 3174, 3682, 3185, 3682,
-     3178, 3186, 3193, 3189, 3191, 3194, 3197, 3195, 3200, 3682,
-     3202, 3201, 3204, 3205, 3208, 3207, 3211, 3214, 3213, 3215,
-     3225, 3219, 3682, 3227, 3229, 3231, 3682, 3233, 3234, 3235,
-     3682, 3239, 3237, 3242, 3244, 3246, 3247, 3248, 3249, 3253,
-     3250, 3255, 3256, 3263, 3257, 3270, 3261, 3272, 3682, 3274,
-     3267, 3682, 3277, 3280, 3283, 3285, 3290, 3292, 3293, 3682,
-     3296, 3682, 3682, 3299, 3682, 3302, 3297, 3303, 3305, 3308,
-
-     3682, 3682, 3306, 3310, 3315, 3682, 3316, 3307, 3317, 3318,
-     3322, 3323, 3324, 3326, 3682, 3682, 3327, 3329, 3333, 3330,
-     3682, 3682, 3682, 3343, 3682, 3335, 3682, 3349, 3337, 3682,
-     3353, 3344, 3682, 3346, 3355, 3357, 3358, 3350, 3361, 3360,
-     3362, 3365, 3366, 3369, 3682, 3682, 3372, 3682, 3374, 3682,
-     3378, 3682, 3379, 3382, 3682, 3682, 3384, 3393, 3380, 3390,
-     3386, 3389, 3392, 3682, 3682, 3682, 3682, 3396, 3397, 3398,
-     3399, 3401, 3403, 3402, 3404, 3410, 3414, 3406, 3423, 3411,
-     3419, 3426, 3427, 3433, 3430, 3682, 3431, 3682, 3434, 3437,
-     3440, 3436, 3439, 3438, 3441, 3443, 3445, 3447, 3448, 3449,
-
-     3456, 3459, 3463, 3465, 3466, 3468, 3469, 3477, 3475, 3476,
-     3479, 3480, 3486, 3482, 3484, 3682, 3485, 3487, 3489, 3491,
-     3492, 3495, 3494, 3502, 3509, 3507, 3511, 3496, 3517, 3514,
-     3519, 3505, 3520, 3522, 3682, 3523, 3527, 3529, 3530, 3533,
-     3531, 3535, 3536, 3539, 3540, 3543, 3545, 3546, 3682, 3551,
-     3682, 3682, 3552, 3555, 3558, 3560, 3562, 3682, 3682, 3682,
-     3590, 3597, 3604, 3611, 3618,   94, 3625, 3632, 3639, 3646,
-     3653, 3660, 3667, 3674
+     3703, 2937, 2940, 3703, 3703, 2945, 2947, 2952, 2954, 2955,
+     2958, 2960, 3703, 2961, 2962, 2968, 2970, 3703, 2972, 2963,
+
+     2975, 2978, 3703, 3703, 3703, 2979, 2981, 2984, 2985, 2986,
+     2987, 2988, 3703, 2989, 2992, 2994, 2995, 3001, 3008, 2998,
+     3014, 3011, 3013, 3018, 3703, 3703, 3002, 3024, 3021, 3022,
+     3020, 3023, 3026, 3028, 3030, 3703, 3032, 3031, 3037, 3036,
+     3039, 3040, 3043, 3703, 3044, 3046, 3051, 3054, 3055, 3047,
+     3057, 3059, 3060, 3062, 3703, 3064, 3065, 3703, 3071, 3069,
+     3072, 3703, 3076, 3703, 3080, 3703, 3703, 3081, 3084, 3086,
+     3091, 3093, 3095, 3082, 3088, 3103, 3097, 3104, 3703, 3703,
+     3110, 3106, 3116, 3703, 3703, 3113, 3107, 3114, 3099, 3115,
+     3120, 3122, 3123, 3128, 3126, 3129, 3131, 3127, 3133, 3137,
+
+     3139, 3140, 3141, 3144, 3703, 3147, 3148, 3150, 3703, 3152,
+     3154, 3156, 3158, 3159, 3163, 3166, 3168, 3703, 3169, 3171,
+     3172, 3703, 3703, 3703, 3175, 3181, 3176, 3703, 3184, 3186,
+     3703, 3191, 3173, 3199, 3188, 3196, 3192, 3203, 3195, 3205,
+     3703, 3202, 3207, 3212, 3213, 3206, 3208, 3214, 3218, 3223,
+     3216, 3230, 3219, 3703, 3232, 3235, 3236, 3703, 3240, 3225,
+     3227, 3703, 3243, 3237, 3246, 3248, 3253, 3254, 3249, 3255,
+     3257, 3259, 3263, 3258, 3260, 3266, 3267, 3265, 3276, 3274,
+     3278, 3703, 3282, 3279, 3703, 3283, 3285, 3289, 3287, 3296,
+     3301, 3297, 3703, 3304, 3703, 3703, 3305, 3703, 3308, 3309,
+
+     3310, 3312, 3313, 3703, 3703, 3314, 3316, 3320, 3703, 3317,
+     3321, 3324, 3326, 3327, 3328, 3331, 3332, 3330, 3334, 3703,
+     3703, 3333, 3343, 3345, 3336, 3703, 3703, 3703, 3355, 3703,
+     3348, 3703, 3357, 3358, 3703, 3360, 3361, 3703, 3362, 3364,
+     3365, 3368, 3370, 3374, 3363, 3371, 3375, 3377, 3378, 3381,
+     3385, 3703, 3703, 3390, 3703, 3392, 3703, 3394, 3703, 3387,
+     3397, 3395, 3402, 3703, 3703, 3290, 3408, 3404, 3406, 3405,
+     3407, 3412, 3703, 3703, 3703, 3703, 3409, 3414, 3415, 3703,
+     3416, 3417, 3419, 3421, 3420, 3422, 3426, 3432, 3433, 3444,
+     3446, 3435, 3448, 3437, 3449, 3455, 3451, 3703, 3452, 3703,
+
+     3703, 3454, 3461, 3463, 3457, 3459, 3460, 3466, 3468, 3469,
+     3470, 3474, 3476, 3484, 3475, 3477, 3485, 3486, 3492, 3488,
+     3500, 3499, 3496, 3501, 3502, 3509, 3505, 3506, 3703, 3508,
+     3510, 3511, 3512, 3514, 3517, 3516, 3526, 3531, 3518, 3533,
+     3528, 3537, 3534, 3538, 3539, 3543, 3542, 3703, 3544, 3546,
+     3550, 3552, 3553, 3555, 3556, 3559, 3563, 3557, 3566, 3568,
+     3570, 3703, 3573, 3703, 3703, 3576, 3572, 3579, 3583, 3585,
+     3703, 3703, 3703, 3611, 3618, 3625, 3632, 3639,   94, 3646,
+     3653, 3660, 3667, 3674, 3681, 3688, 3695
     } ;
 
-static yyconst flex_int16_t yy_def[1875] =
+static yyconst flex_int16_t yy_def[1888] =
     {   0,
-     1860,    1, 1861, 1861, 1862, 1862, 1863, 1863, 1864, 1864,
-     1865, 1865, 1860, 1866, 1860, 1860, 1860, 1860, 1867, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1868, 1860, 1860, 1860, 1868, 1869, 1860, 1860, 1860, 1869,
-     1870, 1860, 1860, 1860, 1860, 1870, 1871, 1860, 1860, 1860,
-     1871, 1872, 1860, 1873, 1860, 1872, 1872, 1866, 1866, 1860,
-     1874, 1867, 1874, 1867, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1868, 1868, 1869, 1869,
-     1870, 1870, 1860, 1871, 1871, 1872, 1872, 1873, 1873, 1872,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1872, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1872, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1872, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1872, 1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866,
-     1860, 1860, 1866, 1860, 1860, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1872, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1872, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1860,
-     1866, 1860, 1866, 1866, 1866, 1860, 1866, 1860, 1866, 1860,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860,
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866,
-     1866, 1866, 1866, 1866, 1866, 1860, 1866, 1860, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1860, 1860, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1860, 1866, 1860, 1866, 1866, 1860, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866,
-     1866, 1866, 1866, 1860, 1866, 1860, 1860, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1860, 1866, 1866, 1860, 1866, 1866, 1866,
-     1860, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1860, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1860,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866, 1860, 1866,
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1860, 1866, 1860,
-     1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866,
-     1866, 1860, 1860, 1866, 1866, 1860, 1860, 1860, 1866, 1860,
-
-     1866, 1860, 1860, 1866, 1866, 1860, 1866, 1860, 1866, 1866,
-     1866, 1866, 1866, 1860, 1866, 1866, 1866, 1860, 1866, 1866,
-     1866, 1866, 1860, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1860, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1860, 1866, 1866, 1860, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1860, 1866, 1866, 1866, 1866, 1860, 1866, 1866,
-
-     1866, 1866, 1860, 1860, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1860, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1860, 1866, 1866,
-     1866, 1860, 1866, 1860, 1866, 1860, 1860, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1860,
-     1866, 1866, 1866, 1860, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1860, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866,
-     1866, 1860, 1860, 1860, 1866, 1866, 1866, 1860, 1866, 1860,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1860, 1866, 1866, 1866, 1860, 1866, 1866, 1866,
-     1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866,
-     1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860,
-     1866, 1860, 1860, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-
-     1860, 1860, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1860, 1866, 1866, 1866, 1866,
-     1860, 1860, 1860, 1866, 1860, 1866, 1860, 1866, 1866, 1860,
-     1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1860, 1866, 1860, 1866, 1860,
-     1866, 1860, 1866, 1866, 1860, 1860, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1860, 1860, 1860, 1860, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1860, 1866, 1860, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1860, 1866, 1866, 1866, 1866, 1866,
-     1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1860, 1866,
-     1860, 1860, 1866, 1866, 1866, 1866, 1866, 1860, 1860,    0,
-     1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-     1860, 1860, 1860, 1860
+     1873,    1, 1874, 1874, 1875, 1875, 1876, 1876, 1877, 1877,
+     1878, 1878, 1873, 1879, 1873, 1873, 1873, 1873, 1880, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1881, 1873, 1873, 1873, 1881, 1882, 1873, 1873, 1873, 1882,
+     1883, 1873, 1873, 1873, 1873, 1883, 1884, 1873, 1873, 1873,
+     1884, 1885, 1873, 1886, 1873, 1885, 1885, 1879, 1879, 1873,
+     1887, 1880, 1887, 1880, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1881, 1881, 1882, 1882,
+     1883, 1883, 1873, 1884, 1884, 1885, 1885, 1886, 1886, 1885,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1885, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1885, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1885, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1885, 1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879,
+     1873, 1873, 1879, 1873, 1873, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1885, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1873, 1885, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1873,
+     1879, 1873, 1879, 1879, 1879, 1873, 1879, 1873, 1879, 1873,
+
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873,
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879,
+     1879, 1879, 1879, 1879, 1879, 1873, 1879, 1873, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1873, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1879, 1873, 1879, 1879, 1873, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879,
+     1879, 1879, 1879, 1873, 1879, 1873, 1873, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1873, 1879, 1879, 1873, 1879, 1879, 1879,
+     1873, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1873, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1873,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879, 1873, 1879,
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1873, 1879, 1873,
+     1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879,
+     1879, 1873, 1873, 1879, 1879, 1873, 1873, 1873, 1879, 1873,
+
+     1879, 1873, 1873, 1879, 1879, 1873, 1879, 1873, 1879, 1879,
+     1879, 1879, 1879, 1873, 1879, 1879, 1879, 1873, 1879, 1879,
+     1879, 1879, 1873, 1879, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1873, 1873, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1873, 1879, 1879, 1873, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1879, 1879, 1879, 1879, 1873, 1879, 1879,
+
+     1879, 1879, 1873, 1873, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1873, 1873, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1873, 1879, 1879,
+     1879, 1873, 1879, 1873, 1879, 1873, 1873, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1873,
+     1879, 1879, 1879, 1873, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+
+     1879, 1879, 1879, 1879, 1873, 1879, 1879, 1879, 1873, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879,
+     1879, 1873, 1873, 1873, 1879, 1879, 1879, 1873, 1879, 1879,
+     1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1873, 1879, 1879, 1879, 1873, 1879, 1879,
+     1879, 1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1873, 1879, 1879, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1879, 1873, 1873, 1879, 1873, 1879, 1879,
+
+     1879, 1879, 1879, 1873, 1873, 1879, 1879, 1879, 1873, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873,
+     1873, 1879, 1879, 1879, 1879, 1873, 1873, 1873, 1879, 1873,
+     1879, 1873, 1879, 1879, 1873, 1879, 1879, 1873, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1873, 1873, 1879, 1873, 1879, 1873, 1879, 1873, 1879,
+     1879, 1879, 1879, 1873, 1873, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1873, 1873, 1873, 1873, 1879, 1879, 1879, 1873,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879, 1873,
+
+     1873, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1873, 1879, 1879,
+     1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
+     1879, 1873, 1879, 1873, 1873, 1879, 1879, 1879, 1879, 1879,
+     1873, 1873,    0, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+     1873, 1873, 1873, 1873, 1873, 1873, 1873
     } ;
 
-static yyconst flex_uint16_t yy_nxt[3722] =
+static yyconst flex_uint16_t yy_nxt[3743] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   18,   20,   21,   14,   22,   23,   24,   25,   14,
@@ -1312,7 +1316,7 @@ static yyconst flex_uint16_t yy_nxt[3722] =
 
        69, 1209,   69, 1212,   69, 1211,   69, 1220,   69, 1215,
        69, 1225,   69, 1221,   69,   69, 1228,   69,   69,   69,
-     1222,   69, 1224,   69,   69, 1223, 1860, 1232, 1234,   69,
+     1222,   69, 1224,   69,   69, 1223, 1873, 1232, 1234,   69,
      1226,   69, 1229, 1233, 1231, 1237,   69, 1230,   69,   69,
      1227, 1240, 1235,   69, 1238,   69,   69, 1236, 1241,   69,
      1242, 1244, 1239, 1247, 1243,   69,   69, 1246,   69,   69,
@@ -1346,7 +1350,7 @@ static yyconst flex_uint16_t yy_nxt[3722] =
        69, 1371, 1374,   69, 1375,   69,   69, 1367,   69,   69,
      1370, 1369,   69, 1377, 1373, 1372,   69,   69,   69,   69,
      1376,   69, 1386,   69,   69,   69,   69, 1387, 1379,   69,
-     1860, 1384, 1378,   69,   69, 1380, 1382, 1411, 1388, 1383,
+     1873, 1384, 1378,   69,   69, 1380, 1382, 1411, 1388, 1383,
      1381, 1394, 1385, 1389,   69, 1391, 1390, 1392,   69, 1393,
        69,   69, 1396,   69, 1397,   69, 1398,   69,   69, 1400,
        69,   69, 1402,   69, 1395, 1403,   69,   69,   69, 1406,
@@ -1400,76 +1404,78 @@ static yyconst flex_uint16_t yy_nxt[3722] =
 
        69, 1621, 1622,   69, 1623,   69, 1624,   69, 1628,   69,
      1627,   69, 1625, 1619, 1626,   69,   69, 1630,   69,   69,
-     1629, 1632,   69,   69,   69, 1631,   69, 1633, 1634, 1635,
-       69,   69, 1640,   69,   69, 1636,   69,   69,   69,   69,
-     1644, 1637,   69, 1645, 1638, 1639, 1642,   69,   69,   69,
-       69,   69,   69, 1641, 1647, 1643, 1860, 1648,   69, 1650,
-     1653,   69,   69, 1646,   69, 1654, 1657,   69,   69, 1655,
-       69, 1651, 1652,   69, 1649,   69, 1656, 1658,   69, 1659,
-     1661,   69,   69, 1660,   69,   69,   69, 1663, 1662,   69,
-       69, 1664,   69, 1668, 1667, 1669, 1665,   69,   69, 1671,
-
-     1673,   69, 1670,   69, 1677,   69,   69,   69, 1675,   69,
-     1666, 1679,   69,   69,   69, 1682,   69,   69, 1672,   69,
-       69, 1683, 1674,   69, 1676,   69,   69,   69, 1681, 1684,
-     1688,   69, 1678, 1680, 1687, 1685, 1690,   69, 1692,   69,
-     1693,   69, 1686,   69, 1695,   69,   69,   69, 1694,   69,
-     1691,   69, 1698, 1689,   69, 1701,   69, 1702,   69,   69,
-       69,   69,   69, 1699, 1706,   69, 1696,   69,   69,   69,
-     1697, 1709, 1704,   69, 1707,   69, 1700, 1712, 1703,   69,
-     1710, 1705,   69, 1715,   69, 1716,   69, 1708, 1711,   69,
-     1713, 1714,   69, 1860, 1718,   69, 1721,   69, 1717, 1860,
-
-     1720, 1722,   69, 1723,   69,   69, 1719, 1725,   69,   69,
-     1724,   69, 1726, 1727,   69,   69, 1730,   69,   69,   69,
-       69, 1733,   69, 1728, 1729, 1731, 1732,   69,   69,   69,
-       69, 1736, 1734, 1735,   69,   69,   69, 1737,   69,   69,
-     1745,   69,   69, 1743, 1746,   69, 1747,   69, 1738,   69,
-     1739, 1749, 1740, 1741, 1748,   69,   69, 1742,   69, 1744,
-     1750,   69,   69, 1751, 1752,   69, 1755,   69, 1756,   69,
-       69, 1753,   69,   69,   69, 1757, 1754,   69,   69, 1761,
-     1764,   69, 1762, 1765,   69, 1766,   69, 1758, 1759, 1767,
-       69,   69,   69, 1760,   69, 1769,   69, 1763,   69, 1770,
-
-     1771,   69,   69, 1768,   69,   69, 1772, 1773,   69,   69,
-       69,   69, 1777,   69,   69,   69,   69, 1774,   69, 1775,
-     1776, 1779,   69,   69, 1780, 1786,   69, 1787, 1789, 1778,
-     1783,   69, 1781, 1782, 1788,   69, 1790, 1785,   69,   69,
-     1793, 1784,   69,   69, 1797,   69,   69, 1798,   69,   69,
-       69,   69,   69,   69, 1792,   69, 1794,   69, 1795,   69,
-       69,   69, 1799, 1791, 1800, 1796, 1807, 1802,   69, 1801,
-     1804,   69, 1805, 1808, 1803,   69, 1810,   69,   69, 1806,
-       69,   69, 1811, 1812, 1815, 1813, 1816,   69,   69,   69,
-     1809,   69,   69, 1820,   69, 1817,   69,   69,   69,   69,
-
-     1814,   69, 1823,   69,   69, 1827,   69,   69,   69, 1822,
-     1818, 1819, 1828, 1821,   69, 1830, 1826,   69, 1824,   69,
-     1825,   69, 1831,   69, 1832, 1829,   69, 1834, 1835,   69,
-     1833,   69,   69, 1836,   69,   69, 1838, 1839, 1837,   69,
-     1841,   69,   69,   69, 1842,   69, 1845,   69,   69, 1848,
-     1849,   69,   69, 1840, 1851,   69, 1852,   69,   69, 1850,
-     1843, 1844, 1846,   69,   69, 1853, 1847,   69, 1854, 1855,
-       69, 1858,   69, 1859,   69, 1860, 1860, 1860, 1860, 1860,
-     1860, 1860, 1860, 1860, 1860, 1860, 1856, 1860, 1860, 1857,
-       41,   41,   41,   41,   41,   41,   41,   46,   46,   46,
-
-       46,   46,   46,   46,   51,   51,   51,   51,   51,   51,
-       51,   57,   57,   57,   57,   57,   57,   57,   62,   62,
-       62,   62,   62,   62,   62,   72,   72, 1860,   72,   72,
-       72,   72,  127,  127, 1860, 1860, 1860,  127,  127,  129,
-      129, 1860, 1860,  129, 1860,  129,  131, 1860, 1860, 1860,
-     1860, 1860,  131,  134,  134, 1860, 1860, 1860,  134,  134,
-      136, 1860, 1860, 1860, 1860, 1860,  136,  138,  138, 1860,
-      138,  138,  138,  138,   73,   73, 1860,   73,   73,   73,
-       73,   13, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-     1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-
-     1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-     1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-     1860
+     1629, 1631,   69, 1633, 1632,   69,   69,   69,   69, 1638,
+     1634, 1637,   69, 1641,   69,   69, 1635, 1636,   69,   69,
+       69,   69, 1645,   69, 1646,   69, 1640, 1639, 1643,   69,
+     1648,   69,   69,   69, 1642, 1647,   69, 1644, 1654,   69,
+       69, 1651,   69, 1655,   69, 1658,   69, 1656,   69, 1649,
+       69,   69, 1659, 1652, 1662,   69, 1653, 1650,   69, 1660,
+       69,   69, 1657,   69,   69,   69, 1661,   69,   69, 1664,
+     1665, 1663, 1668,   69, 1669, 1666,   69, 1670,   69, 1672,
+
+       69, 1671, 1673,   69,   69, 1675, 1676,   69,   69, 1667,
+     1680,   69, 1674, 1678,   69,   69, 1682,   69,   69,   69,
+       69, 1677, 1679, 1685,   69,   69,   69, 1687,   69, 1686,
+       69,   69, 1681, 1683, 1684,   69, 1688,   69, 1690,   69,
+     1691, 1693,   69, 1695,   69, 1689, 1696,   69,   69,   69,
+     1694, 1698,   69, 1697, 1692,   69, 1701, 1699,   69, 1704,
+       69,   69, 1700, 1702, 1705,   69,   69,   69, 1709,   69,
+       69,   69,   69, 1707, 1710,   69, 1711,   69,   69,   69,
+     1703, 1714, 1712, 1717, 1715, 1706,   69, 1708,   69, 1720,
+       69,   69, 1713, 1721,   69,   69, 1716,   69, 1726,   69,
+
+     1723,   69,   69, 1718, 1719, 1781, 1725, 1727,   69,   69,
+     1722, 1724, 1728,   69, 1729, 1730,   69,   69, 1731, 1732,
+       69,   69,   69, 1735,   69,   69,   69, 1738,   69,   69,
+     1736, 1734,   69,   69, 1737, 1733,   69, 1739,   69,   69,
+       69, 1742,   69,   69,   69,   69,   69, 1744,   69, 1740,
+     1743, 1750, 1754, 1741, 1752,   69, 1753,   69, 1745, 1746,
+       69, 1747, 1748, 1749, 1756, 1751, 1755,   69, 1757,   69,
+       69, 1759,   69,   69,   69,   69,   69,   69, 1763, 1764,
+       69, 1765,   69,   69, 1758, 1762,   69,   69, 1760,   69,
+       69, 1766, 1761,   69, 1770, 1771, 1773,   69, 1768,   69,
+
+     1767, 1774,   69, 1775,   69, 1776,   69,   69, 1769,   69,
+     1778, 1777, 1772, 1780,   69, 1782,   69,   69,   69,   69,
+       69,   69, 1779, 1784,   69, 1788,   69,   69,   69,   69,
+     1783,   69,   69,   69,   69, 1873, 1785, 1786,   69, 1791,
+     1787, 1790, 1792, 1798,   69,   69, 1789,   69, 1795,   69,
+     1793, 1794, 1802, 1797, 1799, 1800,   69, 1801,   69, 1796,
+       69,   69, 1806,   69,   69, 1803,   69,   69, 1810,   69,
+     1811,   69,   69,   69, 1804,   69, 1805, 1807,   69, 1808,
+       69,   69,   69, 1812, 1813, 1809,   69,   69,   69,   69,
+     1823, 1814, 1815, 1820, 1817, 1818,   69,   69,   69, 1816,
+
+       69, 1821, 1824, 1825,   69, 1819, 1822, 1828,   69, 1826,
+     1829,   69,   69,   69,   69, 1830, 1833,   69,   69, 1827,
+       69,   69,   69,   69,   69, 1836,   69, 1840,   69,   69,
+       69, 1835, 1831, 1832, 1841, 1845, 1834, 1839,   69, 1843,
+       69, 1837, 1838,   69, 1844,   69,   69, 1842, 1848,   69,
+       69,   69, 1846, 1849,   69,   69,   69, 1850,   69, 1847,
+     1852, 1854,   69, 1855,   69,   69, 1858,   69,   69,   69,
+     1851,   69, 1861, 1853, 1862,   69, 1863, 1864,   69, 1865,
+       69, 1856,   69, 1857,   69,   69, 1859, 1860,   69, 1866,
+     1867,   69, 1873, 1868, 1871,   69, 1872,   69, 1873, 1873,
+
+     1873, 1873, 1873, 1869, 1873, 1873, 1873, 1873, 1873, 1873,
+     1870,   41,   41,   41,   41,   41,   41,   41,   46,   46,
+       46,   46,   46,   46,   46,   51,   51,   51,   51,   51,
+       51,   51,   57,   57,   57,   57,   57,   57,   57,   62,
+       62,   62,   62,   62,   62,   62,   72,   72, 1873,   72,
+       72,   72,   72,  127,  127, 1873, 1873, 1873,  127,  127,
+      129,  129, 1873, 1873,  129, 1873,  129,  131, 1873, 1873,
+     1873, 1873, 1873,  131,  134,  134, 1873, 1873, 1873,  134,
+      134,  136, 1873, 1873, 1873, 1873, 1873,  136,  138,  138,
+     1873,  138,  138,  138,  138,   73,   73, 1873,   73,   73,
+
+       73,   73,   13, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+     1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+     1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+     1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+     1873, 1873
     } ;
 
-static yyconst flex_int16_t yy_chk[3722] =
+static yyconst flex_int16_t yy_chk[3743] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1480,7 +1486,7 @@ static yyconst flex_int16_t yy_chk[3722] =
         9,  158,   33,    6,    7,    7,    7,    7,    9,    7,
        10,   10,   10,   45,   45,    7,    8,    8,    8,    8,
        10,    8,   21,   33,  158,   21,   21,    8,   11,   11,
-       11,   11,   11,   11, 1866,   20,   29,   20,   20,   11,
+       11,   11,   11,   11, 1879,   20,   29,   20,   20,   11,
 
        20,   29,   24,   21,   25,   20,   24,   28,   11,   12,
        12,   12,   12,   12,   12,   75,   22,   22,   75,   25,
@@ -1813,74 +1819,76 @@ static yyconst flex_int16_t yy_chk[3722] =
      1557, 1565, 1565, 1568, 1574, 1560, 1569, 1569, 1570, 1561,
 
      1575, 1570, 1571, 1571, 1572, 1572, 1573, 1573, 1577, 1577,
-     1576, 1587, 1574, 1568, 1575, 1576, 1578, 1581, 1581, 1582,
-     1578, 1583, 1586, 1589, 1590, 1582, 1583, 1586, 1587, 1587,
-     1588, 1591, 1592, 1592, 1593, 1588, 1595, 1600, 1594, 1596,
-     1596, 1589, 1597, 1597, 1590, 1591, 1594, 1598, 1601, 1599,
-     1602, 1603, 1604, 1593, 1599, 1595,    0, 1600, 1610, 1602,
-     1606, 1606, 1607, 1598, 1608, 1607, 1611, 1611, 1614, 1608,
-     1613, 1603, 1604, 1612, 1601, 1616, 1610, 1612, 1617, 1613,
-     1615, 1615, 1619, 1614, 1620, 1621, 1627, 1617, 1616, 1625,
-     1631, 1619, 1626, 1626, 1625, 1627, 1620, 1629, 1632, 1631,
-
-     1633, 1634, 1629, 1635, 1637, 1633, 1636, 1638, 1635, 1637,
-     1621, 1639, 1639, 1642, 1641, 1643, 1643, 1644, 1632, 1646,
-     1645, 1644, 1634, 1647, 1636, 1649, 1648, 1650, 1642, 1645,
-     1649, 1652, 1638, 1641, 1648, 1646, 1651, 1651, 1654, 1654,
-     1655, 1655, 1647, 1656, 1658, 1658, 1659, 1660, 1656, 1663,
-     1652, 1662, 1662, 1650, 1664, 1665, 1665, 1666, 1666, 1667,
-     1668, 1669, 1671, 1663, 1670, 1670, 1659, 1672, 1673, 1675,
-     1660, 1673, 1668, 1677, 1671, 1674, 1664, 1676, 1667, 1681,
-     1674, 1669, 1676, 1678, 1678, 1680, 1680, 1672, 1675, 1683,
-     1677, 1677, 1684,    0, 1683, 1685, 1686, 1686, 1681,    0,
-
-     1685, 1687, 1687, 1688, 1688, 1689, 1684, 1691, 1691, 1697,
-     1689, 1694, 1694, 1696, 1696, 1698, 1699, 1699, 1703, 1708,
-     1700, 1704, 1704, 1697, 1698, 1700, 1703, 1705, 1707, 1709,
-     1710, 1708, 1705, 1707, 1711, 1712, 1713, 1709, 1714, 1717,
-     1718, 1718, 1720, 1714, 1719, 1719, 1720, 1726, 1710, 1729,
-     1711, 1726, 1712, 1712, 1724, 1724, 1732, 1713, 1734, 1717,
-     1728, 1728, 1738, 1729, 1731, 1731, 1735, 1735, 1736, 1736,
-     1737, 1732, 1740, 1739, 1741, 1737, 1734, 1742, 1743, 1741,
-     1744, 1744, 1742, 1747, 1747, 1749, 1749, 1738, 1739, 1751,
-     1751, 1753, 1759, 1740, 1754, 1754, 1757, 1743, 1761, 1757,
-
-     1758, 1762, 1760, 1753, 1763, 1758, 1759, 1760, 1768, 1769,
-     1770, 1771, 1768, 1772, 1774, 1773, 1775, 1761, 1778, 1762,
-     1763, 1770, 1776, 1780, 1771, 1777, 1777, 1778, 1780, 1769,
-     1774, 1781, 1772, 1773, 1779, 1779, 1781, 1776, 1782, 1783,
-     1784, 1775, 1785, 1787, 1790, 1784, 1789, 1791, 1792, 1790,
-     1794, 1793, 1791, 1795, 1783, 1796, 1785, 1797, 1787, 1798,
-     1799, 1800, 1792, 1782, 1793, 1789, 1800, 1795, 1801, 1794,
-     1797, 1802, 1798, 1801, 1796, 1803, 1803, 1804, 1805, 1799,
-     1806, 1807, 1804, 1805, 1808, 1806, 1809, 1809, 1810, 1808,
-     1802, 1811, 1812, 1813, 1814, 1810, 1815, 1817, 1813, 1818,
-
-     1807, 1819, 1817, 1820, 1821, 1821, 1823, 1822, 1828, 1815,
-     1811, 1812, 1822, 1814, 1824, 1824, 1820, 1832, 1818, 1826,
-     1819, 1825, 1825, 1827, 1826, 1823, 1830, 1828, 1829, 1829,
-     1827, 1831, 1833, 1830, 1834, 1836, 1832, 1833, 1831, 1837,
-     1836, 1838, 1839, 1841, 1837, 1840, 1840, 1842, 1843, 1843,
-     1844, 1844, 1845, 1834, 1846, 1846, 1847, 1847, 1848, 1845,
-     1838, 1839, 1841, 1850, 1853, 1848, 1842, 1854, 1850, 1853,
-     1855, 1856, 1856, 1857, 1857,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0, 1854,    0,    0, 1855,
-     1861, 1861, 1861, 1861, 1861, 1861, 1861, 1862, 1862, 1862,
-
-     1862, 1862, 1862, 1862, 1863, 1863, 1863, 1863, 1863, 1863,
-     1863, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1865, 1865,
-     1865, 1865, 1865, 1865, 1865, 1867, 1867,    0, 1867, 1867,
-     1867, 1867, 1868, 1868,    0,    0,    0, 1868, 1868, 1869,
-     1869,    0,    0, 1869,    0, 1869, 1870,    0,    0,    0,
-        0,    0, 1870, 1871, 1871,    0,    0,    0, 1871, 1871,
-     1872,    0,    0,    0,    0,    0, 1872, 1873, 1873,    0,
-     1873, 1873, 1873, 1873, 1874, 1874,    0, 1874, 1874, 1874,
-     1874, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-     1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-
-     1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-     1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-     1860
+     1576, 1589, 1574, 1568, 1575, 1576, 1578, 1581, 1582, 1587,
+     1578, 1581, 1581, 1583, 1582, 1586, 1588, 1590, 1583, 1589,
+     1586, 1588, 1591, 1592, 1592, 1593, 1587, 1587, 1595, 1598,
+     1594, 1596, 1596, 1597, 1597, 1599, 1591, 1590, 1594, 1600,
+     1599, 1601, 1602, 1603, 1593, 1598, 1604, 1595, 1606, 1606,
+     1607, 1602, 1608, 1607, 1610, 1611, 1611, 1608, 1612, 1600,
+     1613, 1614, 1612, 1603, 1615, 1615, 1604, 1601, 1616, 1613,
+     1617, 1619, 1610, 1620, 1621, 1633, 1614, 1625, 1627, 1617,
+     1619, 1616, 1625, 1626, 1626, 1620, 1629, 1627, 1630, 1630,
+
+     1635, 1629, 1630, 1632, 1637, 1633, 1634, 1639, 1636, 1621,
+     1638, 1634, 1632, 1636, 1642, 1638, 1640, 1640, 1646, 1643,
+     1647, 1635, 1637, 1644, 1644, 1645, 1648, 1646, 1651, 1645,
+     1649, 1653, 1639, 1642, 1643, 1650, 1647, 1660, 1649, 1661,
+     1650, 1652, 1652, 1655, 1655, 1648, 1656, 1656, 1657, 1664,
+     1653, 1659, 1659, 1657, 1651, 1663, 1663, 1660, 1665, 1666,
+     1666, 1669, 1661, 1664, 1667, 1667, 1668, 1670, 1671, 1671,
+     1674, 1672, 1675, 1669, 1672, 1673, 1673, 1678, 1676, 1677,
+     1665, 1676, 1674, 1679, 1677, 1668, 1680, 1670, 1679, 1681,
+     1681, 1684, 1675, 1683, 1683, 1686, 1678, 1687, 1689, 1689,
+
+     1686, 1688, 1766, 1680, 1680, 1766, 1688, 1690, 1690, 1692,
+     1684, 1687, 1691, 1691, 1692, 1694, 1694, 1697, 1697, 1699,
+     1699, 1700, 1701, 1702, 1702, 1703, 1706, 1707, 1707, 1710,
+     1703, 1701, 1708, 1711, 1706, 1700, 1712, 1708, 1713, 1714,
+     1715, 1712, 1718, 1716, 1717, 1722, 1719, 1714, 1725, 1710,
+     1713, 1719, 1725, 1711, 1723, 1723, 1724, 1724, 1715, 1716,
+     1731, 1717, 1717, 1718, 1731, 1722, 1729, 1729, 1733, 1733,
+     1734, 1736, 1736, 1737, 1739, 1745, 1740, 1741, 1741, 1742,
+     1742, 1743, 1743, 1746, 1734, 1740, 1744, 1747, 1737, 1748,
+     1749, 1744, 1739, 1750, 1748, 1749, 1751, 1751, 1746, 1760,
+
+     1745, 1754, 1754, 1756, 1756, 1758, 1758, 1762, 1747, 1761,
+     1761, 1760, 1750, 1763, 1763, 1767, 1768, 1770, 1769, 1771,
+     1767, 1777, 1762, 1769, 1772, 1777, 1778, 1779, 1781, 1782,
+     1768, 1783, 1785, 1784, 1786,    0, 1770, 1771, 1787, 1781,
+     1772, 1779, 1782, 1788, 1788, 1789, 1778, 1792, 1785, 1794,
+     1783, 1784, 1792, 1787, 1789, 1790, 1790, 1791, 1791, 1786,
+     1793, 1795, 1796, 1797, 1799, 1793, 1802, 1796, 1803, 1805,
+     1804, 1806, 1807, 1803, 1794, 1804, 1795, 1797, 1808, 1799,
+     1809, 1810, 1811, 1805, 1806, 1802, 1812, 1815, 1813, 1816,
+     1816, 1807, 1808, 1813, 1810, 1811, 1814, 1817, 1818, 1809,
+
+     1820, 1814, 1817, 1818, 1819, 1812, 1815, 1821, 1823, 1819,
+     1822, 1822, 1821, 1824, 1825, 1823, 1826, 1827, 1828, 1820,
+     1830, 1826, 1831, 1832, 1833, 1830, 1834, 1834, 1836, 1835,
+     1839, 1828, 1824, 1825, 1835, 1839, 1827, 1833, 1837, 1837,
+     1841, 1831, 1832, 1838, 1838, 1840, 1843, 1836, 1842, 1842,
+     1844, 1845, 1840, 1843, 1847, 1846, 1849, 1844, 1850, 1841,
+     1846, 1849, 1851, 1850, 1852, 1853, 1853, 1854, 1855, 1858,
+     1845, 1856, 1856, 1847, 1857, 1857, 1858, 1859, 1859, 1860,
+     1860, 1851, 1861, 1852, 1867, 1863, 1854, 1855, 1866, 1861,
+     1863, 1868,    0, 1866, 1869, 1869, 1870, 1870,    0,    0,
+
+        0,    0,    0, 1867,    0,    0,    0,    0,    0,    0,
+     1868, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1875, 1875,
+     1875, 1875, 1875, 1875, 1875, 1876, 1876, 1876, 1876, 1876,
+     1876, 1876, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1878,
+     1878, 1878, 1878, 1878, 1878, 1878, 1880, 1880,    0, 1880,
+     1880, 1880, 1880, 1881, 1881,    0,    0,    0, 1881, 1881,
+     1882, 1882,    0,    0, 1882,    0, 1882, 1883,    0,    0,
+        0,    0,    0, 1883, 1884, 1884,    0,    0,    0, 1884,
+     1884, 1885,    0,    0,    0,    0,    0, 1885, 1886, 1886,
+        0, 1886, 1886, 1886, 1886, 1887, 1887,    0, 1887, 1887,
+
+     1887, 1887, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+     1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+     1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+     1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
+     1873, 1873
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2085,7 +2093,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 2087 "<stdout>"
+#line 2095 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2308,7 +2316,7 @@ YY_DECL
        {
 #line 201 "./util/configlexer.lex"
 
-#line 2310 "<stdout>"
+#line 2318 "<stdout>"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2341,13 +2349,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 1861 )
+                               if ( yy_current_state >= 1874 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 3682 );
+               while ( yy_base[yy_current_state] != 3703 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -3093,149 +3101,159 @@ YY_RULE_SETUP
 case 144:
 YY_RULE_SETUP
 #line 349 "./util/configlexer.lex"
-{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
        YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 350 "./util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
        YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 351 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
        YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 352 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(0, VAR_DNSTAP) }
        YY_BREAK
 case 148:
 YY_RULE_SETUP
 #line 353 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
        YY_BREAK
 case 149:
 YY_RULE_SETUP
 #line 354 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
        YY_BREAK
 case 150:
 YY_RULE_SETUP
 #line 355 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
        YY_BREAK
 case 151:
 YY_RULE_SETUP
 #line 356 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
        YY_BREAK
 case 152:
 YY_RULE_SETUP
 #line 357 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
        YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 359 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+#line 358 "./util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
        YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 361 "./util/configlexer.lex"
+#line 359 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
        YY_BREAK
 case 155:
 YY_RULE_SETUP
-#line 363 "./util/configlexer.lex"
+#line 361 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 156:
 YY_RULE_SETUP
-#line 365 "./util/configlexer.lex"
+#line 363 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
        YY_BREAK
 case 157:
 YY_RULE_SETUP
-#line 367 "./util/configlexer.lex"
+#line 365 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
        YY_BREAK
 case 158:
 YY_RULE_SETUP
-#line 369 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+#line 367 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
        YY_BREAK
 case 159:
 YY_RULE_SETUP
-#line 370 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+#line 369 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 160:
 YY_RULE_SETUP
 #line 371 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
        YY_BREAK
 case 161:
 YY_RULE_SETUP
 #line 372 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_RATELIMIT) }
        YY_BREAK
 case 162:
 YY_RULE_SETUP
 #line 373 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
        YY_BREAK
 case 163:
 YY_RULE_SETUP
 #line 374 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
        YY_BREAK
 case 164:
 YY_RULE_SETUP
 #line 375 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
        YY_BREAK
 case 165:
-/* rule 165 can match eol */
 YY_RULE_SETUP
 #line 376 "./util/configlexer.lex"
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+       YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 377 "./util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+       YY_BREAK
+case 167:
+/* rule 167 can match eol */
+YY_RULE_SETUP
+#line 378 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 166:
+case 168:
 YY_RULE_SETUP
-#line 379 "./util/configlexer.lex"
+#line 381 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 380 "./util/configlexer.lex"
+#line 382 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 167:
+case 169:
 YY_RULE_SETUP
-#line 385 "./util/configlexer.lex"
+#line 387 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 168:
-/* rule 168 can match eol */
+case 170:
+/* rule 170 can match eol */
 YY_RULE_SETUP
-#line 386 "./util/configlexer.lex"
+#line 388 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 169:
+case 171:
 YY_RULE_SETUP
-#line 388 "./util/configlexer.lex"
+#line 390 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3248,34 +3266,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 170:
+case 172:
 YY_RULE_SETUP
-#line 400 "./util/configlexer.lex"
+#line 402 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 401 "./util/configlexer.lex"
+#line 403 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 171:
+case 173:
 YY_RULE_SETUP
-#line 406 "./util/configlexer.lex"
+#line 408 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 172:
-/* rule 172 can match eol */
+case 174:
+/* rule 174 can match eol */
 YY_RULE_SETUP
-#line 407 "./util/configlexer.lex"
+#line 409 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 173:
+case 175:
 YY_RULE_SETUP
-#line 409 "./util/configlexer.lex"
+#line 411 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3288,38 +3306,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 174:
+case 176:
 YY_RULE_SETUP
-#line 421 "./util/configlexer.lex"
+#line 423 "./util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 423 "./util/configlexer.lex"
+#line 425 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 175:
+case 177:
 YY_RULE_SETUP
-#line 427 "./util/configlexer.lex"
+#line 429 "./util/configlexer.lex"
 { LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
-case 176:
-/* rule 176 can match eol */
+case 178:
+/* rule 178 can match eol */
 YY_RULE_SETUP
-#line 428 "./util/configlexer.lex"
+#line 430 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
-case 177:
+case 179:
 YY_RULE_SETUP
-#line 429 "./util/configlexer.lex"
+#line 431 "./util/configlexer.lex"
 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
        YY_BREAK
-case 178:
+case 180:
 YY_RULE_SETUP
-#line 430 "./util/configlexer.lex"
+#line 432 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -3327,27 +3345,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 435 "./util/configlexer.lex"
+#line 437 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 179:
+case 181:
 YY_RULE_SETUP
-#line 439 "./util/configlexer.lex"
+#line 441 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 180:
-/* rule 180 can match eol */
+case 182:
+/* rule 182 can match eol */
 YY_RULE_SETUP
-#line 440 "./util/configlexer.lex"
+#line 442 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 181:
+case 183:
 YY_RULE_SETUP
-#line 442 "./util/configlexer.lex"
+#line 444 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -3357,7 +3375,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 448 "./util/configlexer.lex"
+#line 450 "./util/configlexer.lex"
 {
        LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
@@ -3369,33 +3387,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 182:
+case 184:
 YY_RULE_SETUP
-#line 459 "./util/configlexer.lex"
+#line 461 "./util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 183:
+case 185:
 YY_RULE_SETUP
-#line 463 "./util/configlexer.lex"
+#line 465 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 184:
+case 186:
 YY_RULE_SETUP
-#line 467 "./util/configlexer.lex"
+#line 469 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 185:
+case 187:
 YY_RULE_SETUP
-#line 471 "./util/configlexer.lex"
+#line 473 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 3397 "<stdout>"
+#line 3415 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -3686,7 +3704,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 1861 )
+                       if ( yy_current_state >= 1874 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3714,11 +3732,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 1861 )
+               if ( yy_current_state >= 1874 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 1860);
+       yy_is_jam = (yy_current_state == 1873);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4357,7 +4375,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 471 "./util/configlexer.lex"
+#line 473 "./util/configlexer.lex"
 
 
 
index 8665ea54e60cd8e6d9eaa72e29561db1e662cf6c..84f601f8a5ad110d9c7cda58b719fe572bbfc001 100644 (file)
@@ -346,6 +346,8 @@ dns64-synthall{COLON}               { YDVAR(1, VAR_DNS64_SYNTHALL) }
 define-tag{COLON}              { YDVAR(1, VAR_DEFINE_TAG) }
 local-zone-tag{COLON}          { YDVAR(2, VAR_LOCAL_ZONE_TAG) }
 access-control-tag{COLON}      { YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
+access-control-tag-action{COLON} { YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
+access-control-tag-data{COLON} { YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
 local-zone-override{COLON}     { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
 dnstap{COLON}                  { YDVAR(0, VAR_DNSTAP) }
 dnstap-enable{COLON}           { YDVAR(1, VAR_DNSTAP_ENABLE) }
index 2445cc4b9b2d3cba788bf1c18da20c1320b39f32..fa61e930525b41be0510d1eac5eaf39d8d86eaea 100644 (file)
@@ -292,7 +292,9 @@ extern int yydebug;
     VAR_DEFINE_TAG = 423,
     VAR_LOCAL_ZONE_TAG = 424,
     VAR_ACCESS_CONTROL_TAG = 425,
-    VAR_LOCAL_ZONE_OVERRIDE = 426
+    VAR_LOCAL_ZONE_OVERRIDE = 426,
+    VAR_ACCESS_CONTROL_TAG_ACTION = 427,
+    VAR_ACCESS_CONTROL_TAG_DATA = 428
   };
 #endif
 /* Tokens.  */
@@ -465,6 +467,8 @@ extern int yydebug;
 #define VAR_LOCAL_ZONE_TAG 424
 #define VAR_ACCESS_CONTROL_TAG 425
 #define VAR_LOCAL_ZONE_OVERRIDE 426
+#define VAR_ACCESS_CONTROL_TAG_ACTION 427
+#define VAR_ACCESS_CONTROL_TAG_DATA 428
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -475,7 +479,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 479 "util/configparser.c" /* yacc.c:355  */
+#line 483 "util/configparser.c" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -492,7 +496,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 496 "util/configparser.c" /* yacc.c:358  */
+#line 500 "util/configparser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -734,21 +738,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   327
+#define YYLAST   335
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  172
+#define YYNTOKENS  174
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  177
+#define YYNNTS  179
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  339
+#define YYNRULES  343
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  504
+#define YYNSTATES  514
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   426
+#define YYMAXUTOK   428
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -799,47 +803,48 @@ static const yytype_uint8 yytranslate[] =
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171
+     165,   166,   167,   168,   169,   170,   171,   172,   173
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   132,   132,   132,   133,   133,   134,   134,   135,   135,
-     139,   144,   145,   146,   146,   146,   147,   147,   148,   148,
-     148,   149,   149,   150,   150,   150,   151,   151,   151,   152,
-     152,   153,   153,   154,   154,   155,   155,   156,   156,   157,
-     157,   158,   158,   159,   159,   160,   160,   160,   161,   161,
-     161,   162,   162,   162,   163,   163,   164,   164,   165,   165,
-     166,   166,   167,   167,   167,   168,   168,   169,   169,   170,
-     170,   170,   171,   171,   172,   172,   173,   173,   174,   174,
-     174,   175,   175,   176,   176,   177,   177,   178,   178,   179,
-     179,   180,   180,   180,   181,   181,   182,   182,   182,   183,
-     183,   183,   184,   184,   184,   185,   185,   185,   186,   186,
-     186,   187,   187,   187,   188,   188,   189,   189,   190,   190,
-     191,   191,   192,   192,   192,   193,   193,   194,   194,   195,
-     195,   196,   196,   197,   197,   197,   198,   198,   199,   201,
-     213,   214,   215,   215,   215,   215,   215,   217,   229,   230,
-     231,   231,   231,   231,   233,   242,   251,   262,   271,   280,
-     289,   302,   317,   326,   335,   344,   353,   362,   371,   380,
-     389,   398,   407,   416,   425,   434,   443,   450,   457,   466,
-     475,   489,   498,   507,   514,   521,   528,   536,   543,   550,
-     557,   564,   572,   580,   588,   595,   602,   611,   620,   627,
-     634,   642,   650,   660,   670,   680,   693,   704,   712,   725,
-     734,   743,   752,   762,   772,   780,   793,   802,   810,   819,
-     827,   840,   849,   856,   866,   876,   886,   896,   906,   916,
-     926,   936,   943,   950,   957,   966,   975,   984,   991,  1001,
-    1018,  1025,  1043,  1056,  1069,  1078,  1087,  1096,  1105,  1115,
-    1125,  1134,  1143,  1150,  1159,  1168,  1177,  1186,  1194,  1207,
-    1215,  1239,  1246,  1261,  1271,  1281,  1288,  1295,  1304,  1318,
-    1337,  1356,  1368,  1377,  1385,  1398,  1411,  1424,  1433,  1443,
-    1453,  1460,  1467,  1476,  1486,  1496,  1503,  1510,  1519,  1524,
-    1525,  1526,  1526,  1526,  1527,  1527,  1527,  1528,  1528,  1530,
-    1540,  1549,  1556,  1566,  1573,  1580,  1587,  1594,  1599,  1600,
-    1601,  1601,  1602,  1602,  1603,  1603,  1604,  1605,  1606,  1607,
-    1608,  1609,  1611,  1619,  1626,  1634,  1642,  1649,  1656,  1665,
-    1674,  1683,  1692,  1701,  1710,  1715,  1716,  1717,  1719,  1725
+       0,   133,   133,   133,   134,   134,   135,   135,   136,   136,
+     140,   145,   146,   147,   147,   147,   148,   148,   149,   149,
+     149,   150,   150,   151,   151,   151,   152,   152,   152,   153,
+     153,   154,   154,   155,   155,   156,   156,   157,   157,   158,
+     158,   159,   159,   160,   160,   161,   161,   161,   162,   162,
+     162,   163,   163,   163,   164,   164,   165,   165,   166,   166,
+     167,   167,   168,   168,   168,   169,   169,   170,   170,   171,
+     171,   171,   172,   172,   173,   173,   174,   174,   175,   175,
+     175,   176,   176,   177,   177,   178,   178,   179,   179,   180,
+     180,   181,   181,   181,   182,   182,   183,   183,   183,   184,
+     184,   184,   185,   185,   185,   186,   186,   186,   187,   187,
+     187,   188,   188,   188,   189,   189,   190,   190,   191,   191,
+     192,   192,   193,   193,   193,   194,   194,   195,   195,   196,
+     196,   197,   197,   198,   198,   198,   199,   199,   200,   200,
+     201,   203,   215,   216,   217,   217,   217,   217,   217,   219,
+     231,   232,   233,   233,   233,   233,   235,   244,   253,   264,
+     273,   282,   291,   304,   319,   328,   337,   346,   355,   364,
+     373,   382,   391,   400,   409,   418,   427,   436,   445,   452,
+     459,   468,   477,   491,   500,   509,   516,   523,   530,   538,
+     545,   552,   559,   566,   574,   582,   590,   597,   604,   613,
+     622,   629,   636,   644,   652,   662,   672,   682,   695,   706,
+     714,   727,   736,   745,   754,   764,   774,   782,   795,   804,
+     812,   821,   829,   842,   851,   858,   868,   878,   888,   898,
+     908,   918,   928,   938,   945,   952,   959,   968,   977,   986,
+     993,  1003,  1020,  1027,  1045,  1058,  1071,  1080,  1089,  1098,
+    1107,  1117,  1127,  1136,  1145,  1152,  1161,  1170,  1179,  1188,
+    1196,  1209,  1217,  1241,  1248,  1263,  1273,  1283,  1290,  1297,
+    1306,  1320,  1339,  1358,  1370,  1382,  1394,  1403,  1411,  1424,
+    1437,  1450,  1459,  1469,  1479,  1486,  1493,  1502,  1512,  1522,
+    1529,  1536,  1545,  1550,  1551,  1552,  1552,  1552,  1553,  1553,
+    1553,  1554,  1554,  1556,  1566,  1575,  1582,  1592,  1599,  1606,
+    1613,  1620,  1625,  1626,  1627,  1627,  1628,  1628,  1629,  1629,
+    1630,  1631,  1632,  1633,  1634,  1635,  1637,  1645,  1652,  1660,
+    1668,  1675,  1682,  1691,  1700,  1709,  1718,  1727,  1736,  1741,
+    1742,  1743,  1745,  1751
 };
 #endif
 
@@ -908,7 +913,8 @@ static const char *const yytname[] =
   "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
   "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", "VAR_IP_FREEBIND",
   "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG",
-  "VAR_LOCAL_ZONE_OVERRIDE", "$accept", "toplevelvars", "toplevelvar",
+  "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION",
+  "VAR_ACCESS_CONTROL_TAG_DATA", "$accept", "toplevelvars", "toplevelvar",
   "serverstart", "contents_server", "content_server", "stubstart",
   "contents_stub", "content_stub", "forwardstart", "contents_forward",
   "content_forward", "server_num_threads", "server_verbosity",
@@ -960,7 +966,8 @@ static const char *const yytname[] =
   "server_local_data", "server_local_data_ptr", "server_minimal_responses",
   "server_rrset_roundrobin", "server_max_udp_size", "server_dns64_prefix",
   "server_dns64_synthall", "server_define_tag", "server_local_zone_tag",
-  "server_access_control_tag", "server_local_zone_override",
+  "server_access_control_tag", "server_access_control_tag_action",
+  "server_access_control_tag_data", "server_local_zone_override",
   "server_ratelimit", "server_ratelimit_size", "server_ratelimit_slabs",
   "server_ratelimit_for_domain", "server_ratelimit_below_domain",
   "server_ratelimit_factor", "server_qname_minimisation", "stub_name",
@@ -1005,7 +1012,7 @@ static const yytype_uint16 yytoknum[] =
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
-     425,   426
+     425,   426,   427,   428
 };
 # endif
 
@@ -1026,18 +1033,18 @@ static const yytype_int16 yypact[] =
      -81,   129,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -12,    39,    47,    40,
       36,   -80,    18,    19,    20,    24,    25,    26,    69,    72,
-      73,    74,    75,    80,   108,   109,   120,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   161,   162,   163,   164,
-     166,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   -81,   -81,
+      73,    74,    75,    80,   108,   109,   120,   152,   153,   154,
+     155,   156,   157,   158,   161,   162,   163,   164,   166,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
@@ -1050,30 +1057,31 @@ static const yytype_int16 yypact[] =
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   280,   281,   282,   283,   284,
-     -81,   -81,   -81,   -81,   -81,   -81,   285,   286,   287,   288,
-     -81,   -81,   -81,   -81,   -81,   289,   290,   291,   292,   293,
-     294,   295,   296,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   309,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   284,
+     285,   286,   287,   288,   -81,   -81,   -81,   -81,   -81,   -81,
+     289,   290,   291,   292,   -81,   -81,   -81,   -81,   -81,   293,
+     294,   295,   296,   297,   298,   299,   300,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   313,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   310,   311,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   314,
+     315,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   316,   317,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   318,   319,   320,
+     321,   322,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   312,   313,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   314,   315,   316,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   317,   -81
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   323,   324,
+     325,   -81,   -81,   -81
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1081,8 +1089,8 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       2,     0,     1,    10,   139,   147,   288,   334,   307,     3,
-      12,   141,   149,   290,   309,   336,     4,     5,     6,     8,
+       2,     0,     1,    10,   141,   149,   292,   338,   311,     3,
+      12,   143,   151,   294,   313,   340,     4,     5,     6,     8,
        9,     7,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1095,43 +1103,44 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    11,    13,
-      14,    72,    75,    84,    15,    23,    63,    16,    76,    77,
-      34,    56,    71,    17,    18,    19,    20,    21,    22,   106,
-     107,   108,   109,   110,    73,    62,    88,   105,    24,    25,
-      26,    27,    28,    64,    78,    79,    94,    50,    60,    51,
-      89,    44,    45,    46,    47,    98,   102,   114,   122,   133,
-      99,    57,    29,    30,    31,    86,   115,   116,   117,    32,
-      33,    35,    36,    38,    39,    37,   120,    40,    41,    42,
-      48,    67,   103,    81,   121,    74,   129,    82,    83,   100,
-     101,    87,    43,    65,    68,    49,    52,    90,    91,    66,
-     130,    92,    53,    54,    55,   104,    93,    61,    95,    96,
-      97,   131,    58,    59,    80,    69,    70,    85,   111,   112,
-     113,   118,   119,   134,   135,   137,   138,   123,   125,   124,
-     126,   127,   128,   132,   136,     0,     0,     0,     0,     0,
-     140,   142,   143,   144,   146,   145,     0,     0,     0,     0,
-     148,   150,   151,   152,   153,     0,     0,     0,     0,     0,
-       0,     0,     0,   289,   291,   293,   292,   298,   294,   295,
-     296,   297,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   308,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,     0,   335,   337,
-     155,   154,   159,   162,   160,   168,   169,   170,   171,   172,
-     173,   183,   184,   185,   186,   187,   207,   208,   209,   214,
-     215,   165,   216,   217,   220,   218,   219,   222,   223,   224,
-     237,   196,   197,   198,   199,   225,   240,   192,   194,   241,
-     247,   248,   249,   166,   206,   257,   258,   193,   252,   180,
-     161,   188,   238,   244,   226,     0,     0,   261,   167,   156,
-     179,   230,   157,   163,   164,   189,   190,   259,   228,   232,
-     233,   158,   262,   210,   236,   181,   195,   242,   243,   246,
-     251,   191,   255,   253,   254,   200,   205,   234,   235,   201,
-     202,   227,   250,   182,   174,   175,   176,   177,   178,   263,
-     264,   265,   211,   212,   213,   221,   266,   267,   229,   203,
-     339,   272,   274,   273,     0,     0,   277,   231,   245,   256,
-     278,   204,   268,     0,     0,     0,   279,   280,   281,   283,
-     282,   284,   285,   286,   287,   299,   301,   300,   303,   304,
-     305,   306,   302,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   338,   239,   260,   275,   276,
-     269,   270,     0,   271
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      11,    13,    14,    72,    75,    84,    15,    23,    63,    16,
+      76,    77,    34,    56,    71,    17,    18,    19,    20,    21,
+      22,   106,   107,   108,   109,   110,    73,    62,    88,   105,
+      24,    25,    26,    27,    28,    64,    78,    79,    94,    50,
+      60,    51,    89,    44,    45,    46,    47,    98,   102,   114,
+     122,   133,    99,    57,    29,    30,    31,    86,   115,   116,
+     117,    32,    33,    35,    36,    38,    39,    37,   120,    40,
+      41,    42,    48,    67,   103,    81,   121,    74,   129,    82,
+      83,   100,   101,    87,    43,    65,    68,    49,    52,    90,
+      91,    66,   130,    92,    53,    54,    55,   104,    93,    61,
+      95,    96,    97,   131,    58,    59,    80,    69,    70,    85,
+     111,   112,   113,   118,   119,   134,   135,   137,   139,   140,
+     138,   123,   125,   124,   126,   127,   128,   132,   136,     0,
+       0,     0,     0,     0,   142,   144,   145,   146,   148,   147,
+       0,     0,     0,     0,   150,   152,   153,   154,   155,     0,
+       0,     0,     0,     0,     0,     0,     0,   293,   295,   297,
+     296,   302,   298,   299,   300,   301,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   312,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,     0,   339,   341,   157,   156,   161,   164,   162,   170,
+     171,   172,   173,   174,   175,   185,   186,   187,   188,   189,
+     209,   210,   211,   216,   217,   167,   218,   219,   222,   220,
+     221,   224,   225,   226,   239,   198,   199,   200,   201,   227,
+     242,   194,   196,   243,   249,   250,   251,   168,   208,   259,
+     260,   195,   254,   182,   163,   190,   240,   246,   228,     0,
+       0,   263,   169,   158,   181,   232,   159,   165,   166,   191,
+     192,   261,   230,   234,   235,   160,   264,   212,   238,   183,
+     197,   244,   245,   248,   253,   193,   257,   255,   256,   202,
+     207,   236,   237,   203,   204,   229,   252,   184,   176,   177,
+     178,   179,   180,   265,   266,   267,   213,   214,   215,   223,
+     268,   269,   231,   205,   343,   276,   278,   277,     0,     0,
+     281,   233,   247,   258,   282,   206,   270,     0,     0,     0,
+       0,     0,   283,   284,   285,   287,   286,   288,   289,   290,
+     291,   303,   305,   304,   307,   308,   309,   310,   306,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   342,   241,   262,   279,   280,   271,   272,     0,     0,
+       0,   275,   273,   274
 };
 
   /* YYPGOTO[NTERM-NUM].  */
@@ -1154,30 +1163,30 @@ static const yytype_int8 yypgoto[] =
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     9,    10,    16,   148,    11,    17,   280,    12,
-      18,   290,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   281,   282,   283,
-     284,   285,   291,   292,   293,   294,    13,    19,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,    14,    20,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,    15,    21,   338,   339,   274
+      -1,     1,     9,    10,    16,   150,    11,    17,   284,    12,
+      18,   294,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   285,
+     286,   287,   288,   289,   295,   296,   297,   298,    13,    19,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,    14,
+      20,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   338,   339,   340,    15,    21,   342,   343,   278
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1187,37 +1196,38 @@ static const yytype_uint16 yytable[] =
 {
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,   337,   340,   341,
-     342,    49,    50,    51,   343,   344,   345,    52,    53,    54,
+      42,    43,    44,    45,    46,    47,    48,   341,   344,   345,
+     346,    49,    50,    51,   347,   348,   349,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,   275,   346,
-     276,   277,   347,   348,   349,   350,   286,    93,    94,    95,
-     351,    96,    97,    98,   287,   288,    99,   100,   101,   102,
+      85,    86,    87,    88,    89,    90,    91,    92,   279,   350,
+     280,   281,   351,   352,   353,   354,   290,    93,    94,    95,
+     355,    96,    97,    98,   291,   292,    99,   100,   101,   102,
      103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   352,   353,
+     113,   114,   115,   116,   117,   118,   119,   120,   356,   357,
      121,   122,   123,   124,   125,   126,   127,   128,   129,     2,
-     354,   295,   296,   297,   298,   299,   300,   301,   302,     0,
-       3,   278,   130,   131,   132,   133,   134,   135,   136,   137,
+     358,   299,   300,   301,   302,   303,   304,   305,   306,     0,
+       3,   282,   130,   131,   132,   133,   134,   135,   136,   137,
      138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,     4,
-     279,   364,   365,   366,   367,     5,   368,   289,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     369,   370,   371,   372,   373,   374,   375,   376,   377,   378,
-     379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
-     389,   390,   391,   392,   393,   394,   395,   396,   397,     6,
-     398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
-     408,   409,   410,   411,   412,     7,   413,   414,   415,   416,
-     417,   418,   419,   420,   421,   422,   423,   424,   425,   426,
-     427,   428,   429,   430,   431,   432,   433,   434,   435,   436,
-     437,   438,   439,   440,   441,   442,   443,   444,   445,   446,
-       8,   447,   448,   449,   450,   451,   452,   453,   454,   455,
-     456,   457,   458,   459,   460,   461,   462,   463,   464,   465,
-     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
-     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
-     486,   487,   488,   489,   490,   491,   492,   493,   494,   495,
-     496,   497,   498,   499,   500,   501,   502,   503
+     148,   149,   359,   360,   361,   362,   363,   364,   365,     4,
+     283,   366,   367,   368,   369,     5,   370,   293,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,     6,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,     7,   415,   416,   417,   418,
+     419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
+     429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
+     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
+       8,   449,   450,   451,   452,   453,   454,   455,   456,   457,
+     458,   459,   460,   461,   462,   463,   464,   465,   466,   467,
+     468,   469,   470,   471,   472,   473,   474,   475,   476,   477,
+     478,   479,   480,   481,   482,   483,   484,   485,   486,   487,
+     488,   489,   490,   491,   492,   493,   494,   495,   496,   497,
+     498,   499,   500,   501,   502,   503,   504,   505,   506,   507,
+     508,   509,   510,   511,   512,   513
 };
 
 static const yytype_int16 yycheck[] =
@@ -1238,7 +1248,7 @@ static const yytype_int16 yycheck[] =
       10,    91,    92,    93,    94,    95,    96,    97,    98,    -1,
       11,   102,   154,   155,   156,   157,   158,   159,   160,   161,
      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    40,
+     172,   173,    10,    10,    10,    10,    10,    10,    10,    40,
      131,    10,    10,    10,    10,    46,    10,   130,   142,   143,
      144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
@@ -1254,16 +1264,17 @@ static const yytype_int16 yycheck[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   173,     0,    11,    40,    46,    90,   106,   141,   174,
-     175,   178,   181,   318,   329,   344,   176,   179,   182,   319,
-     330,   345,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,   175,     0,    11,    40,    46,    90,   106,   141,   176,
+     177,   180,   183,   322,   333,   348,   178,   181,   184,   323,
+     334,   349,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    43,
       44,    45,    49,    50,    51,    52,    53,    54,    55,    56,
@@ -1275,8 +1286,8 @@ static const yytype_uint16 yystos[] =
      119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
      129,   132,   133,   134,   135,   136,   137,   138,   139,   140,
      154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   177,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     179,   186,   187,   188,   189,   190,   191,   192,   193,   194,
      195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
      205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
      215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
@@ -1288,13 +1299,14 @@ static const yytype_uint16 yystos[] =
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   348,    39,    41,    42,   102,   131,
-     180,   309,   310,   311,   312,   313,    39,    47,    48,   130,
-     183,   314,   315,   316,   317,    91,    92,    93,    94,    95,
-      96,    97,    98,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   331,   332,   333,   334,   335,   336,
-     337,   338,   339,   340,   341,   342,   343,   107,   346,   347,
+     305,   306,   307,   308,   309,   310,   311,   312,   352,    39,
+      41,    42,   102,   131,   182,   313,   314,   315,   316,   317,
+      39,    47,    48,   130,   185,   318,   319,   320,   321,    91,
+      92,    93,    94,    95,    96,    97,    98,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   335,   336,
+     337,   338,   339,   340,   341,   342,   343,   344,   345,   346,
+     347,   107,   350,   351,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
@@ -1317,22 +1329,22 @@ static const yytype_uint16 yystos[] =
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   172,   173,   173,   174,   174,   174,   174,   174,   174,
-     175,   176,   176,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   178,
-     179,   179,   180,   180,   180,   180,   180,   181,   182,   182,
-     183,   183,   183,   183,   184,   185,   186,   187,   188,   189,
+       0,   174,   175,   175,   176,   176,   176,   176,   176,   176,
+     177,   178,   178,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   180,   181,   181,   182,   182,   182,   182,   182,   183,
+     184,   184,   185,   185,   185,   185,   186,   187,   188,   189,
      190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
      200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
      210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
@@ -1346,11 +1358,12 @@ static const yytype_uint16 yyr1[] =
      290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     319,   320,   320,   320,   320,   320,   320,   320,   320,   321,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,   330,
-     331,   331,   331,   331,   331,   331,   331,   331,   331,   331,
-     331,   331,   332,   333,   334,   335,   336,   337,   338,   339,
-     340,   341,   342,   343,   344,   345,   345,   346,   347,   348
+     320,   321,   322,   323,   323,   324,   324,   324,   324,   324,
+     324,   324,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,   334,   335,   335,   335,   335,   335,   335,
+     335,   335,   335,   335,   335,   335,   336,   337,   338,   339,
+     340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
+     349,   350,   351,   352
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1370,8 +1383,8 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       2,     0,     1,     1,     1,     1,     1,     1,     2,     0,
-       1,     1,     1,     1,     2,     2,     2,     2,     2,     2,
+       1,     1,     2,     0,     1,     1,     1,     1,     1,     1,
+       2,     0,     1,     1,     1,     1,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1379,17 +1392,18 @@ static const yytype_uint8 yyr2[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     3,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       3,     2,     2,     2,     2,     2,     2,     2,     2,     3,
-       3,     4,     2,     2,     2,     3,     3,     2,     2,     2,
+       2,     2,     3,     2,     2,     2,     2,     2,     2,     2,
+       2,     3,     3,     4,     4,     4,     2,     2,     2,     3,
+       3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     1,     2,     0,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
+       2,     1,     2,     0,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     1,     2,
-       0,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-       2,     2,     2,     2,     2,     2,     2,     1,     2,     0,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     1,     2,     0,     1,     2,     2
+       0,     1,     2,     2
 };
 
 
@@ -2066,15 +2080,15 @@ yyreduce:
   switch (yyn)
     {
         case 10:
-#line 140 "./util/configparser.y" /* yacc.c:1646  */
+#line 141 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(server:)\n")); 
        }
-#line 2074 "util/configparser.c" /* yacc.c:1646  */
+#line 2088 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 139:
-#line 202 "./util/configparser.y" /* yacc.c:1646  */
+  case 141:
+#line 204 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2085,11 +2099,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2089 "util/configparser.c" /* yacc.c:1646  */
+#line 2103 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 147:
-#line 218 "./util/configparser.y" /* yacc.c:1646  */
+  case 149:
+#line 220 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2100,11 +2114,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2104 "util/configparser.c" /* yacc.c:1646  */
+#line 2118 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 234 "./util/configparser.y" /* yacc.c:1646  */
+  case 156:
+#line 236 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2112,11 +2126,11 @@ yyreduce:
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2116 "util/configparser.c" /* yacc.c:1646  */
+#line 2130 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 243 "./util/configparser.y" /* yacc.c:1646  */
+  case 157:
+#line 245 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2124,11 +2138,11 @@ yyreduce:
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2128 "util/configparser.c" /* yacc.c:1646  */
+#line 2142 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 252 "./util/configparser.y" /* yacc.c:1646  */
+  case 158:
+#line 254 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); 
                if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -2138,11 +2152,11 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2142 "util/configparser.c" /* yacc.c:1646  */
+#line 2156 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 263 "./util/configparser.y" /* yacc.c:1646  */
+  case 159:
+#line 265 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2150,11 +2164,11 @@ yyreduce:
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2154 "util/configparser.c" /* yacc.c:1646  */
+#line 2168 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 272 "./util/configparser.y" /* yacc.c:1646  */
+  case 160:
+#line 274 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2162,11 +2176,11 @@ yyreduce:
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2166 "util/configparser.c" /* yacc.c:1646  */
+#line 2180 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 281 "./util/configparser.y" /* yacc.c:1646  */
+  case 161:
+#line 283 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2174,11 +2188,11 @@ yyreduce:
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2178 "util/configparser.c" /* yacc.c:1646  */
+#line 2192 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 290 "./util/configparser.y" /* yacc.c:1646  */
+  case 162:
+#line 292 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2190,11 +2204,11 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 2194 "util/configparser.c" /* yacc.c:1646  */
+#line 2208 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 303 "./util/configparser.y" /* yacc.c:1646  */
+  case 163:
+#line 305 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2208,11 +2222,11 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 2212 "util/configparser.c" /* yacc.c:1646  */
+#line 2226 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 318 "./util/configparser.y" /* yacc.c:1646  */
+  case 164:
+#line 320 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2220,11 +2234,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2224 "util/configparser.c" /* yacc.c:1646  */
+#line 2238 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 327 "./util/configparser.y" /* yacc.c:1646  */
+  case 165:
+#line 329 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
                if(!cfg_mark_ports((yyvsp[0].str), 1, 
@@ -2232,11 +2246,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2236 "util/configparser.c" /* yacc.c:1646  */
+#line 2250 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 336 "./util/configparser.y" /* yacc.c:1646  */
+  case 166:
+#line 338 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
                if(!cfg_mark_ports((yyvsp[0].str), 0, 
@@ -2244,11 +2258,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2248 "util/configparser.c" /* yacc.c:1646  */
+#line 2262 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 345 "./util/configparser.y" /* yacc.c:1646  */
+  case 167:
+#line 347 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2256,11 +2270,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2260 "util/configparser.c" /* yacc.c:1646  */
+#line 2274 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 354 "./util/configparser.y" /* yacc.c:1646  */
+  case 168:
+#line 356 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2268,11 +2282,11 @@ yyreduce:
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2272 "util/configparser.c" /* yacc.c:1646  */
+#line 2286 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 363 "./util/configparser.y" /* yacc.c:1646  */
+  case 169:
+#line 365 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2280,11 +2294,11 @@ yyreduce:
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2284 "util/configparser.c" /* yacc.c:1646  */
+#line 2298 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 372 "./util/configparser.y" /* yacc.c:1646  */
+  case 170:
+#line 374 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2292,11 +2306,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2296 "util/configparser.c" /* yacc.c:1646  */
+#line 2310 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 381 "./util/configparser.y" /* yacc.c:1646  */
+  case 171:
+#line 383 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2304,11 +2318,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2308 "util/configparser.c" /* yacc.c:1646  */
+#line 2322 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 390 "./util/configparser.y" /* yacc.c:1646  */
+  case 172:
+#line 392 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2316,11 +2330,11 @@ yyreduce:
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2320 "util/configparser.c" /* yacc.c:1646  */
+#line 2334 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 399 "./util/configparser.y" /* yacc.c:1646  */
+  case 173:
+#line 401 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2328,11 +2342,11 @@ yyreduce:
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2332 "util/configparser.c" /* yacc.c:1646  */
+#line 2346 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 408 "./util/configparser.y" /* yacc.c:1646  */
+  case 174:
+#line 410 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2340,11 +2354,11 @@ yyreduce:
                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                 free((yyvsp[0].str));
        }
-#line 2344 "util/configparser.c" /* yacc.c:1646  */
+#line 2358 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 417 "./util/configparser.y" /* yacc.c:1646  */
+  case 175:
+#line 419 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2352,11 +2366,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2356 "util/configparser.c" /* yacc.c:1646  */
+#line 2370 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 426 "./util/configparser.y" /* yacc.c:1646  */
+  case 176:
+#line 428 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2364,11 +2378,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2368 "util/configparser.c" /* yacc.c:1646  */
+#line 2382 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 435 "./util/configparser.y" /* yacc.c:1646  */
+  case 177:
+#line 437 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2376,31 +2390,31 @@ yyreduce:
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2380 "util/configparser.c" /* yacc.c:1646  */
+#line 2394 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 444 "./util/configparser.y" /* yacc.c:1646  */
+  case 178:
+#line 446 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_key);
                cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
        }
-#line 2390 "util/configparser.c" /* yacc.c:1646  */
+#line 2404 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 451 "./util/configparser.y" /* yacc.c:1646  */
+  case 179:
+#line 453 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_pem);
                cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
        }
-#line 2400 "util/configparser.c" /* yacc.c:1646  */
+#line 2414 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 458 "./util/configparser.y" /* yacc.c:1646  */
+  case 180:
+#line 460 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2408,11 +2422,11 @@ yyreduce:
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2412 "util/configparser.c" /* yacc.c:1646  */
+#line 2426 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 467 "./util/configparser.y" /* yacc.c:1646  */
+  case 181:
+#line 469 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2420,11 +2434,11 @@ yyreduce:
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2424 "util/configparser.c" /* yacc.c:1646  */
+#line 2438 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 476 "./util/configparser.y" /* yacc.c:1646  */
+  case 182:
+#line 478 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2437,11 +2451,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 2441 "util/configparser.c" /* yacc.c:1646  */
+#line 2455 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 490 "./util/configparser.y" /* yacc.c:1646  */
+  case 183:
+#line 492 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2449,11 +2463,11 @@ yyreduce:
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2453 "util/configparser.c" /* yacc.c:1646  */
+#line 2467 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 499 "./util/configparser.y" /* yacc.c:1646  */
+  case 184:
+#line 501 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2461,145 +2475,145 @@ yyreduce:
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2465 "util/configparser.c" /* yacc.c:1646  */
+#line 2479 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 508 "./util/configparser.y" /* yacc.c:1646  */
+  case 185:
+#line 510 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->chrootdir);
                cfg_parser->cfg->chrootdir = (yyvsp[0].str);
        }
-#line 2475 "util/configparser.c" /* yacc.c:1646  */
+#line 2489 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 515 "./util/configparser.y" /* yacc.c:1646  */
+  case 186:
+#line 517 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->username);
                cfg_parser->cfg->username = (yyvsp[0].str);
        }
-#line 2485 "util/configparser.c" /* yacc.c:1646  */
+#line 2499 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 522 "./util/configparser.y" /* yacc.c:1646  */
+  case 187:
+#line 524 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
                cfg_parser->cfg->directory = (yyvsp[0].str);
        }
-#line 2495 "util/configparser.c" /* yacc.c:1646  */
+#line 2509 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 529 "./util/configparser.y" /* yacc.c:1646  */
+  case 188:
+#line 531 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->logfile);
                cfg_parser->cfg->logfile = (yyvsp[0].str);
                cfg_parser->cfg->use_syslog = 0;
        }
-#line 2506 "util/configparser.c" /* yacc.c:1646  */
+#line 2520 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 537 "./util/configparser.y" /* yacc.c:1646  */
+  case 189:
+#line 539 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->pidfile);
                cfg_parser->cfg->pidfile = (yyvsp[0].str);
        }
-#line 2516 "util/configparser.c" /* yacc.c:1646  */
+#line 2530 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 544 "./util/configparser.y" /* yacc.c:1646  */
+  case 190:
+#line 546 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2526 "util/configparser.c" /* yacc.c:1646  */
+#line 2540 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 551 "./util/configparser.y" /* yacc.c:1646  */
+  case 191:
+#line 553 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dlv_anchor_file);
                cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str);
        }
-#line 2536 "util/configparser.c" /* yacc.c:1646  */
+#line 2550 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 558 "./util/configparser.y" /* yacc.c:1646  */
+  case 192:
+#line 560 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2546 "util/configparser.c" /* yacc.c:1646  */
+#line 2560 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 565 "./util/configparser.y" /* yacc.c:1646  */
+  case 193:
+#line 567 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        auto_trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2557 "util/configparser.c" /* yacc.c:1646  */
+#line 2571 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 573 "./util/configparser.y" /* yacc.c:1646  */
+  case 194:
+#line 575 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2568 "util/configparser.c" /* yacc.c:1646  */
+#line 2582 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 581 "./util/configparser.y" /* yacc.c:1646  */
+  case 195:
+#line 583 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        trusted_keys_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2579 "util/configparser.c" /* yacc.c:1646  */
+#line 2593 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 589 "./util/configparser.y" /* yacc.c:1646  */
+  case 196:
+#line 591 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2589 "util/configparser.c" /* yacc.c:1646  */
+#line 2603 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 596 "./util/configparser.y" /* yacc.c:1646  */
+  case 197:
+#line 598 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2599 "util/configparser.c" /* yacc.c:1646  */
+#line 2613 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 603 "./util/configparser.y" /* yacc.c:1646  */
+  case 198:
+#line 605 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2607,11 +2621,11 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2611 "util/configparser.c" /* yacc.c:1646  */
+#line 2625 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 197:
-#line 612 "./util/configparser.y" /* yacc.c:1646  */
+  case 199:
+#line 614 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2619,53 +2633,53 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2623 "util/configparser.c" /* yacc.c:1646  */
+#line 2637 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 198:
-#line 621 "./util/configparser.y" /* yacc.c:1646  */
+  case 200:
+#line 623 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->identity);
                cfg_parser->cfg->identity = (yyvsp[0].str);
        }
-#line 2633 "util/configparser.c" /* yacc.c:1646  */
+#line 2647 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 628 "./util/configparser.y" /* yacc.c:1646  */
+  case 201:
+#line 630 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->version);
                cfg_parser->cfg->version = (yyvsp[0].str);
        }
-#line 2643 "util/configparser.c" /* yacc.c:1646  */
+#line 2657 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 635 "./util/configparser.y" /* yacc.c:1646  */
+  case 202:
+#line 637 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 2654 "util/configparser.c" /* yacc.c:1646  */
+#line 2668 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 643 "./util/configparser.y" /* yacc.c:1646  */
+  case 203:
+#line 645 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 2665 "util/configparser.c" /* yacc.c:1646  */
+#line 2679 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 651 "./util/configparser.y" /* yacc.c:1646  */
+  case 204:
+#line 653 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2674,11 +2688,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2678 "util/configparser.c" /* yacc.c:1646  */
+#line 2692 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 203:
-#line 661 "./util/configparser.y" /* yacc.c:1646  */
+  case 205:
+#line 663 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2687,11 +2701,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2691 "util/configparser.c" /* yacc.c:1646  */
+#line 2705 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 204:
-#line 671 "./util/configparser.y" /* yacc.c:1646  */
+  case 206:
+#line 673 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2700,11 +2714,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2704 "util/configparser.c" /* yacc.c:1646  */
+#line 2718 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 205:
-#line 681 "./util/configparser.y" /* yacc.c:1646  */
+  case 207:
+#line 683 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2716,11 +2730,11 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2720 "util/configparser.c" /* yacc.c:1646  */
+#line 2734 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 206:
-#line 694 "./util/configparser.y" /* yacc.c:1646  */
+  case 208:
+#line 696 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2730,22 +2744,22 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2734 "util/configparser.c" /* yacc.c:1646  */
+#line 2748 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 705 "./util/configparser.y" /* yacc.c:1646  */
+  case 209:
+#line 707 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 2745 "util/configparser.c" /* yacc.c:1646  */
+#line 2759 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 208:
-#line 713 "./util/configparser.y" /* yacc.c:1646  */
+  case 210:
+#line 715 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2757,11 +2771,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2761 "util/configparser.c" /* yacc.c:1646  */
+#line 2775 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 209:
-#line 726 "./util/configparser.y" /* yacc.c:1646  */
+  case 211:
+#line 728 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2769,11 +2783,11 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2773 "util/configparser.c" /* yacc.c:1646  */
+#line 2787 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 210:
-#line 735 "./util/configparser.y" /* yacc.c:1646  */
+  case 212:
+#line 737 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2781,11 +2795,11 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2785 "util/configparser.c" /* yacc.c:1646  */
+#line 2799 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 211:
-#line 744 "./util/configparser.y" /* yacc.c:1646  */
+  case 213:
+#line 746 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2793,11 +2807,11 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2797 "util/configparser.c" /* yacc.c:1646  */
+#line 2811 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 753 "./util/configparser.y" /* yacc.c:1646  */
+  case 214:
+#line 755 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2806,11 +2820,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2810 "util/configparser.c" /* yacc.c:1646  */
+#line 2824 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 213:
-#line 763 "./util/configparser.y" /* yacc.c:1646  */
+  case 215:
+#line 765 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2819,22 +2833,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2823 "util/configparser.c" /* yacc.c:1646  */
+#line 2837 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 214:
-#line 773 "./util/configparser.y" /* yacc.c:1646  */
+  case 216:
+#line 775 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 2834 "util/configparser.c" /* yacc.c:1646  */
+#line 2848 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 215:
-#line 781 "./util/configparser.y" /* yacc.c:1646  */
+  case 217:
+#line 783 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2846,11 +2860,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2850 "util/configparser.c" /* yacc.c:1646  */
+#line 2864 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 216:
-#line 794 "./util/configparser.y" /* yacc.c:1646  */
+  case 218:
+#line 796 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2858,22 +2872,22 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2862 "util/configparser.c" /* yacc.c:1646  */
+#line 2876 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 803 "./util/configparser.y" /* yacc.c:1646  */
+  case 219:
+#line 805 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
                        "removed, use infra-host-ttl)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2873 "util/configparser.c" /* yacc.c:1646  */
+#line 2887 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 811 "./util/configparser.y" /* yacc.c:1646  */
+  case 220:
+#line 813 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2881,22 +2895,22 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2885 "util/configparser.c" /* yacc.c:1646  */
+#line 2899 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 820 "./util/configparser.y" /* yacc.c:1646  */
+  case 221:
+#line 822 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
                        "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2896 "util/configparser.c" /* yacc.c:1646  */
+#line 2910 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 828 "./util/configparser.y" /* yacc.c:1646  */
+  case 222:
+#line 830 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2908,11 +2922,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2912 "util/configparser.c" /* yacc.c:1646  */
+#line 2926 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 841 "./util/configparser.y" /* yacc.c:1646  */
+  case 223:
+#line 843 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2920,21 +2934,21 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2924 "util/configparser.c" /* yacc.c:1646  */
+#line 2938 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 222:
-#line 850 "./util/configparser.y" /* yacc.c:1646  */
+  case 224:
+#line 852 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->target_fetch_policy);
                cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
        }
-#line 2934 "util/configparser.c" /* yacc.c:1646  */
+#line 2948 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 223:
-#line 857 "./util/configparser.y" /* yacc.c:1646  */
+  case 225:
+#line 859 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2943,11 +2957,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2947 "util/configparser.c" /* yacc.c:1646  */
+#line 2961 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 867 "./util/configparser.y" /* yacc.c:1646  */
+  case 226:
+#line 869 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2956,11 +2970,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2960 "util/configparser.c" /* yacc.c:1646  */
+#line 2974 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 877 "./util/configparser.y" /* yacc.c:1646  */
+  case 227:
+#line 879 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2969,11 +2983,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2973 "util/configparser.c" /* yacc.c:1646  */
+#line 2987 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 887 "./util/configparser.y" /* yacc.c:1646  */
+  case 228:
+#line 889 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2982,11 +2996,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2986 "util/configparser.c" /* yacc.c:1646  */
+#line 3000 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 897 "./util/configparser.y" /* yacc.c:1646  */
+  case 229:
+#line 899 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2995,11 +3009,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2999 "util/configparser.c" /* yacc.c:1646  */
+#line 3013 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 907 "./util/configparser.y" /* yacc.c:1646  */
+  case 230:
+#line 909 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3008,11 +3022,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3012 "util/configparser.c" /* yacc.c:1646  */
+#line 3026 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 917 "./util/configparser.y" /* yacc.c:1646  */
+  case 231:
+#line 919 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3021,11 +3035,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3025 "util/configparser.c" /* yacc.c:1646  */
+#line 3039 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 927 "./util/configparser.y" /* yacc.c:1646  */
+  case 232:
+#line 929 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3034,41 +3048,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3038 "util/configparser.c" /* yacc.c:1646  */
+#line 3052 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 937 "./util/configparser.y" /* yacc.c:1646  */
+  case 233:
+#line 939 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3048 "util/configparser.c" /* yacc.c:1646  */
+#line 3062 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 944 "./util/configparser.y" /* yacc.c:1646  */
+  case 234:
+#line 946 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3058 "util/configparser.c" /* yacc.c:1646  */
+#line 3072 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 233:
-#line 951 "./util/configparser.y" /* yacc.c:1646  */
+  case 235:
+#line 953 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3068 "util/configparser.c" /* yacc.c:1646  */
+#line 3082 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 234:
-#line 958 "./util/configparser.y" /* yacc.c:1646  */
+  case 236:
+#line 960 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3076,11 +3090,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3080 "util/configparser.c" /* yacc.c:1646  */
+#line 3094 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 235:
-#line 967 "./util/configparser.y" /* yacc.c:1646  */
+  case 237:
+#line 969 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3088,11 +3102,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3092 "util/configparser.c" /* yacc.c:1646  */
+#line 3106 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 236:
-#line 976 "./util/configparser.y" /* yacc.c:1646  */
+  case 238:
+#line 978 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3100,21 +3114,21 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3104 "util/configparser.c" /* yacc.c:1646  */
+#line 3118 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 237:
-#line 985 "./util/configparser.y" /* yacc.c:1646  */
+  case 239:
+#line 987 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3114 "util/configparser.c" /* yacc.c:1646  */
+#line 3128 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 992 "./util/configparser.y" /* yacc.c:1646  */
+  case 240:
+#line 994 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3123,11 +3137,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3127 "util/configparser.c" /* yacc.c:1646  */
+#line 3141 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 1002 "./util/configparser.y" /* yacc.c:1646  */
+  case 241:
+#line 1004 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
@@ -3143,21 +3157,21 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 3147 "util/configparser.c" /* yacc.c:1646  */
+#line 3161 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 1019 "./util/configparser.y" /* yacc.c:1646  */
+  case 242:
+#line 1021 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->module_conf);
                cfg_parser->cfg->module_conf = (yyvsp[0].str);
        }
-#line 3157 "util/configparser.c" /* yacc.c:1646  */
+#line 3171 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 241:
-#line 1026 "./util/configparser.y" /* yacc.c:1646  */
+  case 243:
+#line 1028 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3174,11 +3188,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3178 "util/configparser.c" /* yacc.c:1646  */
+#line 3192 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 242:
-#line 1044 "./util/configparser.y" /* yacc.c:1646  */
+  case 244:
+#line 1046 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3190,11 +3204,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3194 "util/configparser.c" /* yacc.c:1646  */
+#line 3208 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 243:
-#line 1057 "./util/configparser.y" /* yacc.c:1646  */
+  case 245:
+#line 1059 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3206,11 +3220,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3210 "util/configparser.c" /* yacc.c:1646  */
+#line 3224 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 244:
-#line 1070 "./util/configparser.y" /* yacc.c:1646  */
+  case 246:
+#line 1072 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3218,11 +3232,11 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3222 "util/configparser.c" /* yacc.c:1646  */
+#line 3236 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 245:
-#line 1079 "./util/configparser.y" /* yacc.c:1646  */
+  case 247:
+#line 1081 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3230,11 +3244,11 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3234 "util/configparser.c" /* yacc.c:1646  */
+#line 3248 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 246:
-#line 1088 "./util/configparser.y" /* yacc.c:1646  */
+  case 248:
+#line 1090 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3242,11 +3256,11 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3246 "util/configparser.c" /* yacc.c:1646  */
+#line 3260 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 247:
-#line 1097 "./util/configparser.y" /* yacc.c:1646  */
+  case 249:
+#line 1099 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3254,11 +3268,11 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3258 "util/configparser.c" /* yacc.c:1646  */
+#line 3272 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 1106 "./util/configparser.y" /* yacc.c:1646  */
+  case 250:
+#line 1108 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3267,11 +3281,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3271 "util/configparser.c" /* yacc.c:1646  */
+#line 3285 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 249:
-#line 1116 "./util/configparser.y" /* yacc.c:1646  */
+  case 251:
+#line 1118 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3280,11 +3294,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3284 "util/configparser.c" /* yacc.c:1646  */
+#line 3298 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 1126 "./util/configparser.y" /* yacc.c:1646  */
+  case 252:
+#line 1128 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3292,11 +3306,11 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3296 "util/configparser.c" /* yacc.c:1646  */
+#line 3310 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 1135 "./util/configparser.y" /* yacc.c:1646  */
+  case 253:
+#line 1137 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3304,21 +3318,21 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3308 "util/configparser.c" /* yacc.c:1646  */
+#line 3322 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 1144 "./util/configparser.y" /* yacc.c:1646  */
+  case 254:
+#line 1146 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
                cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
        }
-#line 3318 "util/configparser.c" /* yacc.c:1646  */
+#line 3332 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 1151 "./util/configparser.y" /* yacc.c:1646  */
+  case 255:
+#line 1153 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3326,11 +3340,11 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3330 "util/configparser.c" /* yacc.c:1646  */
+#line 3344 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 1160 "./util/configparser.y" /* yacc.c:1646  */
+  case 256:
+#line 1162 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3338,11 +3352,11 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3342 "util/configparser.c" /* yacc.c:1646  */
+#line 3356 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 1169 "./util/configparser.y" /* yacc.c:1646  */
+  case 257:
+#line 1171 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3350,11 +3364,11 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3354 "util/configparser.c" /* yacc.c:1646  */
+#line 3368 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 1178 "./util/configparser.y" /* yacc.c:1646  */
+  case 258:
+#line 1180 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3363,22 +3377,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3367 "util/configparser.c" /* yacc.c:1646  */
+#line 3381 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 1187 "./util/configparser.y" /* yacc.c:1646  */
+  case 259:
+#line 1189 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3378 "util/configparser.c" /* yacc.c:1646  */
+#line 3392 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 1195 "./util/configparser.y" /* yacc.c:1646  */
+  case 260:
+#line 1197 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3390,22 +3404,22 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3394 "util/configparser.c" /* yacc.c:1646  */
+#line 3408 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 1208 "./util/configparser.y" /* yacc.c:1646  */
+  case 261:
+#line 1210 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3405 "util/configparser.c" /* yacc.c:1646  */
+#line 3419 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1216 "./util/configparser.y" /* yacc.c:1646  */
+  case 262:
+#line 1218 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -3428,21 +3442,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 3432 "util/configparser.c" /* yacc.c:1646  */
+#line 3446 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1240 "./util/configparser.y" /* yacc.c:1646  */
+  case 263:
+#line 1242 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
                        fatal_exit("out of memory adding local-data");
        }
-#line 3442 "util/configparser.c" /* yacc.c:1646  */
+#line 3456 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1247 "./util/configparser.y" /* yacc.c:1646  */
+  case 264:
+#line 1249 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -3456,11 +3470,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 3460 "util/configparser.c" /* yacc.c:1646  */
+#line 3474 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1262 "./util/configparser.y" /* yacc.c:1646  */
+  case 265:
+#line 1264 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3469,11 +3483,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3473 "util/configparser.c" /* yacc.c:1646  */
+#line 3487 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1272 "./util/configparser.y" /* yacc.c:1646  */
+  case 266:
+#line 1274 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3482,31 +3496,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3486 "util/configparser.c" /* yacc.c:1646  */
+#line 3500 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1282 "./util/configparser.y" /* yacc.c:1646  */
+  case 267:
+#line 1284 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
                cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3496 "util/configparser.c" /* yacc.c:1646  */
+#line 3510 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1289 "./util/configparser.y" /* yacc.c:1646  */
+  case 268:
+#line 1291 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dns64_prefix);
                cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
        }
-#line 3506 "util/configparser.c" /* yacc.c:1646  */
+#line 3520 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1296 "./util/configparser.y" /* yacc.c:1646  */
+  case 269:
+#line 1298 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3514,11 +3528,11 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3518 "util/configparser.c" /* yacc.c:1646  */
+#line 3532 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1305 "./util/configparser.y" /* yacc.c:1646  */
+  case 270:
+#line 1307 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -3531,11 +3545,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3535 "util/configparser.c" /* yacc.c:1646  */
+#line 3549 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1319 "./util/configparser.y" /* yacc.c:1646  */
+  case 271:
+#line 1321 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3553,11 +3567,11 @@ yyreduce:
                        }
                }
        }
-#line 3557 "util/configparser.c" /* yacc.c:1646  */
+#line 3571 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1338 "./util/configparser.y" /* yacc.c:1646  */
+  case 272:
+#line 1340 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3575,11 +3589,41 @@ yyreduce:
                        }
                }
        }
-#line 3579 "util/configparser.c" /* yacc.c:1646  */
+#line 3593 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1357 "./util/configparser.y" /* yacc.c:1646  */
+  case 273:
+#line 1359 "./util/configparser.y" /* yacc.c:1646  */
+    {
+               OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
+               if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
+                       (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
+                       yyerror("out of memory");
+                       free((yyvsp[-2].str));
+                       free((yyvsp[-1].str));
+                       free((yyvsp[0].str));
+               }
+       }
+#line 3608 "util/configparser.c" /* yacc.c:1646  */
+    break;
+
+  case 274:
+#line 1371 "./util/configparser.y" /* yacc.c:1646  */
+    {
+               OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
+               if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
+                       (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
+                       yyerror("out of memory");
+                       free((yyvsp[-2].str));
+                       free((yyvsp[-1].str));
+                       free((yyvsp[0].str));
+               }
+       }
+#line 3623 "util/configparser.c" /* yacc.c:1646  */
+    break;
+
+  case 275:
+#line 1383 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
@@ -3590,11 +3634,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 3594 "util/configparser.c" /* yacc.c:1646  */
+#line 3638 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1369 "./util/configparser.y" /* yacc.c:1646  */
+  case 276:
+#line 1395 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3602,22 +3646,22 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3606 "util/configparser.c" /* yacc.c:1646  */
+#line 3650 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1378 "./util/configparser.y" /* yacc.c:1646  */
+  case 277:
+#line 1404 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3617 "util/configparser.c" /* yacc.c:1646  */
+#line 3661 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1386 "./util/configparser.y" /* yacc.c:1646  */
+  case 278:
+#line 1412 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3629,11 +3673,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3633 "util/configparser.c" /* yacc.c:1646  */
+#line 3677 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1399 "./util/configparser.y" /* yacc.c:1646  */
+  case 279:
+#line 1425 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -3645,11 +3689,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 3649 "util/configparser.c" /* yacc.c:1646  */
+#line 3693 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1412 "./util/configparser.y" /* yacc.c:1646  */
+  case 280:
+#line 1438 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -3661,11 +3705,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 3665 "util/configparser.c" /* yacc.c:1646  */
+#line 3709 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1425 "./util/configparser.y" /* yacc.c:1646  */
+  case 281:
+#line 1451 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3673,11 +3717,11 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3677 "util/configparser.c" /* yacc.c:1646  */
+#line 3721 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 1434 "./util/configparser.y" /* yacc.c:1646  */
+  case 282:
+#line 1460 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3686,11 +3730,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3690 "util/configparser.c" /* yacc.c:1646  */
+#line 3734 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 1444 "./util/configparser.y" /* yacc.c:1646  */
+  case 283:
+#line 1470 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -3699,31 +3743,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 3703 "util/configparser.c" /* yacc.c:1646  */
+#line 3747 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 1454 "./util/configparser.y" /* yacc.c:1646  */
+  case 284:
+#line 1480 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3713 "util/configparser.c" /* yacc.c:1646  */
+#line 3757 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 1461 "./util/configparser.y" /* yacc.c:1646  */
+  case 285:
+#line 1487 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3723 "util/configparser.c" /* yacc.c:1646  */
+#line 3767 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 1468 "./util/configparser.y" /* yacc.c:1646  */
+  case 286:
+#line 1494 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3731,11 +3775,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3735 "util/configparser.c" /* yacc.c:1646  */
+#line 3779 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 1477 "./util/configparser.y" /* yacc.c:1646  */
+  case 287:
+#line 1503 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3744,11 +3788,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3748 "util/configparser.c" /* yacc.c:1646  */
+#line 3792 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 1487 "./util/configparser.y" /* yacc.c:1646  */
+  case 288:
+#line 1513 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -3757,31 +3801,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 3761 "util/configparser.c" /* yacc.c:1646  */
+#line 3805 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 1497 "./util/configparser.y" /* yacc.c:1646  */
+  case 289:
+#line 1523 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3771 "util/configparser.c" /* yacc.c:1646  */
+#line 3815 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 1504 "./util/configparser.y" /* yacc.c:1646  */
+  case 290:
+#line 1530 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3781 "util/configparser.c" /* yacc.c:1646  */
+#line 3825 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 1511 "./util/configparser.y" /* yacc.c:1646  */
+  case 291:
+#line 1537 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3789,19 +3833,19 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3793 "util/configparser.c" /* yacc.c:1646  */
+#line 3837 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 1520 "./util/configparser.y" /* yacc.c:1646  */
+  case 292:
+#line 1546 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 3801 "util/configparser.c" /* yacc.c:1646  */
+#line 3845 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 1531 "./util/configparser.y" /* yacc.c:1646  */
+  case 303:
+#line 1557 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3810,11 +3854,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3814 "util/configparser.c" /* yacc.c:1646  */
+#line 3858 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 1541 "./util/configparser.y" /* yacc.c:1646  */
+  case 304:
+#line 1567 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3822,21 +3866,21 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3826 "util/configparser.c" /* yacc.c:1646  */
+#line 3870 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 1550 "./util/configparser.y" /* yacc.c:1646  */
+  case 305:
+#line 1576 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3836 "util/configparser.c" /* yacc.c:1646  */
+#line 3880 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 1557 "./util/configparser.y" /* yacc.c:1646  */
+  case 306:
+#line 1583 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3845,122 +3889,122 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3849 "util/configparser.c" /* yacc.c:1646  */
+#line 3893 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 1567 "./util/configparser.y" /* yacc.c:1646  */
+  case 307:
+#line 1593 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->server_key_file);
                cfg_parser->cfg->server_key_file = (yyvsp[0].str);
        }
-#line 3859 "util/configparser.c" /* yacc.c:1646  */
+#line 3903 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 1574 "./util/configparser.y" /* yacc.c:1646  */
+  case 308:
+#line 1600 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->server_cert_file);
                cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
        }
-#line 3869 "util/configparser.c" /* yacc.c:1646  */
+#line 3913 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 1581 "./util/configparser.y" /* yacc.c:1646  */
+  case 309:
+#line 1607 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->control_key_file);
                cfg_parser->cfg->control_key_file = (yyvsp[0].str);
        }
-#line 3879 "util/configparser.c" /* yacc.c:1646  */
+#line 3923 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 1588 "./util/configparser.y" /* yacc.c:1646  */
+  case 310:
+#line 1614 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->control_cert_file);
                cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
        }
-#line 3889 "util/configparser.c" /* yacc.c:1646  */
+#line 3933 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 1595 "./util/configparser.y" /* yacc.c:1646  */
+  case 311:
+#line 1621 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 3897 "util/configparser.c" /* yacc.c:1646  */
+#line 3941 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 1612 "./util/configparser.y" /* yacc.c:1646  */
+  case 326:
+#line 1638 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3908 "util/configparser.c" /* yacc.c:1646  */
+#line 3952 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 1620 "./util/configparser.y" /* yacc.c:1646  */
+  case 327:
+#line 1646 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_socket_path);
                cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
        }
-#line 3918 "util/configparser.c" /* yacc.c:1646  */
+#line 3962 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 1627 "./util/configparser.y" /* yacc.c:1646  */
+  case 328:
+#line 1653 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3929 "util/configparser.c" /* yacc.c:1646  */
+#line 3973 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 1635 "./util/configparser.y" /* yacc.c:1646  */
+  case 329:
+#line 1661 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3940 "util/configparser.c" /* yacc.c:1646  */
+#line 3984 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 1643 "./util/configparser.y" /* yacc.c:1646  */
+  case 330:
+#line 1669 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_identity);
                cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
        }
-#line 3950 "util/configparser.c" /* yacc.c:1646  */
+#line 3994 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 1650 "./util/configparser.y" /* yacc.c:1646  */
+  case 331:
+#line 1676 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_version);
                cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
        }
-#line 3960 "util/configparser.c" /* yacc.c:1646  */
+#line 4004 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 1657 "./util/configparser.y" /* yacc.c:1646  */
+  case 332:
+#line 1683 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3968,11 +4012,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3972 "util/configparser.c" /* yacc.c:1646  */
+#line 4016 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 1666 "./util/configparser.y" /* yacc.c:1646  */
+  case 333:
+#line 1692 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3980,11 +4024,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3984 "util/configparser.c" /* yacc.c:1646  */
+#line 4028 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 1675 "./util/configparser.y" /* yacc.c:1646  */
+  case 334:
+#line 1701 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3992,11 +4036,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3996 "util/configparser.c" /* yacc.c:1646  */
+#line 4040 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 1684 "./util/configparser.y" /* yacc.c:1646  */
+  case 335:
+#line 1710 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4004,11 +4048,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4008 "util/configparser.c" /* yacc.c:1646  */
+#line 4052 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 1693 "./util/configparser.y" /* yacc.c:1646  */
+  case 336:
+#line 1719 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4016,11 +4060,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4020 "util/configparser.c" /* yacc.c:1646  */
+#line 4064 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 1702 "./util/configparser.y" /* yacc.c:1646  */
+  case 337:
+#line 1728 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4028,29 +4072,29 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4032 "util/configparser.c" /* yacc.c:1646  */
+#line 4076 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 1711 "./util/configparser.y" /* yacc.c:1646  */
+  case 338:
+#line 1737 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 4040 "util/configparser.c" /* yacc.c:1646  */
+#line 4084 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 1720 "./util/configparser.y" /* yacc.c:1646  */
+  case 342:
+#line 1746 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->python_script);
                cfg_parser->cfg->python_script = (yyvsp[0].str);
        }
-#line 4050 "util/configparser.c" /* yacc.c:1646  */
+#line 4094 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 1726 "./util/configparser.y" /* yacc.c:1646  */
+  case 343:
+#line 1752 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
                if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4059,11 +4103,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4063 "util/configparser.c" /* yacc.c:1646  */
+#line 4107 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-#line 4067 "util/configparser.c" /* yacc.c:1646  */
+#line 4111 "util/configparser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4291,7 +4335,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1734 "./util/configparser.y" /* yacc.c:1906  */
+#line 1760 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index 53512fa5a193ac9d0a599f8c19a117e07bab4d8b..4417869f1e25fab94d1776172006ea560dddbcea 100644 (file)
@@ -213,7 +213,9 @@ extern int yydebug;
     VAR_DEFINE_TAG = 423,
     VAR_LOCAL_ZONE_TAG = 424,
     VAR_ACCESS_CONTROL_TAG = 425,
-    VAR_LOCAL_ZONE_OVERRIDE = 426
+    VAR_LOCAL_ZONE_OVERRIDE = 426,
+    VAR_ACCESS_CONTROL_TAG_ACTION = 427,
+    VAR_ACCESS_CONTROL_TAG_DATA = 428
   };
 #endif
 /* Tokens.  */
@@ -386,6 +388,8 @@ extern int yydebug;
 #define VAR_LOCAL_ZONE_TAG 424
 #define VAR_ACCESS_CONTROL_TAG 425
 #define VAR_LOCAL_ZONE_OVERRIDE 426
+#define VAR_ACCESS_CONTROL_TAG_ACTION 427
+#define VAR_ACCESS_CONTROL_TAG_DATA 428
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -396,7 +400,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 400 "util/configparser.h" /* yacc.c:1909  */
+#line 404 "util/configparser.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index 92e159be71d1272f6358882d9628aa3672c9177f..0283e38ff0f26828fb4b7f36fca34058e8a9748d 100644 (file)
@@ -127,6 +127,7 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN
 %token VAR_QNAME_MINIMISATION VAR_IP_FREEBIND VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG
 %token VAR_ACCESS_CONTROL_TAG VAR_LOCAL_ZONE_OVERRIDE
+%token VAR_ACCESS_CONTROL_TAG_ACTION VAR_ACCESS_CONTROL_TAG_DATA
 
 %%
 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -196,7 +197,8 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_permit_small_holddown | server_qname_minimisation |
        server_ip_freebind | server_define_tag | server_local_zone_tag |
        server_disable_dnssec_lame_check | server_access_control_tag |
-       server_local_zone_override
+       server_local_zone_override | server_access_control_tag_action |
+       server_access_control_tag_data
        ;
 stubstart: VAR_STUB_ZONE
        {
@@ -1353,6 +1355,30 @@ server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG
                }
        }
        ;
+server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG
+       {
+               OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", $2, $3, $4));
+               if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
+                       $2, $3, $4)) {
+                       yyerror("out of memory");
+                       free($2);
+                       free($3);
+                       free($4);
+               }
+       }
+       ;
+server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG
+       {
+               OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", $2, $3, $4));
+               if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
+                       $2, $3, $4)) {
+                       yyerror("out of memory");
+                       free($2);
+                       free($3);
+                       free($4);
+               }
+       }
+       ;
 server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG
        {
                OUTYY(("P(server_local_zone_override:%s %s %s)\n", $2, $3, $4));