]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- [dnscrypt] prevent dnscrypt-secret-key, dnscrypt-provider-cert
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 17 Oct 2017 07:34:49 +0000 (07:34 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 17 Oct 2017 07:34:49 +0000 (07:34 +0000)
  duplicates
- [dnscrypt] introduce dnscrypt-provider-cert-rotated option,
  from Manu Bretelle.
This option allows handling multiple cert/key pairs while only
distributing some of them.
In order to reliably match a client magic with a given key without
strong assumption as to how those were generated, we need both key and
cert. Likewise, in order to know which ES version should be used.
On the other hand, when rotating a cert, it can be desirable to only
serve the new cert but still be able to handle clients that are still
using the old certs's public key.
The `dnscrypt-provider-cert-rotated` allow to instruct unbound to not
publish the cert as part of the DNS's provider_name's TXT answer.

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

dnscrypt/dnscrypt.c
dnscrypt/dnscrypt.h
doc/Changelog
doc/unbound.conf.5.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 a0db120770938b1e51a46f824cc8083717c5733c..8103107b2ab06dcd57e7ba5e24ed9baab9656120 100644 (file)
@@ -5,6 +5,7 @@
 #ifdef HAVE_TIME_H
 #include <time.h>
 #endif
+#include <inttypes.h>
 #include <sys/time.h>
 #include <sys/types.h>
 #include "sldns/sbuffer.h"
@@ -588,18 +589,26 @@ dnsc_chroot_path(struct config_file *cfg, char *path)
 static int
 dnsc_parse_certs(struct dnsc_env *env, struct config_file *cfg)
 {
-       struct config_strlist *head;
+       struct config_strlist *head, *head2;
        size_t signed_cert_id;
+       size_t rotated_cert_id;
        char *nm;
 
        env->signed_certs_count = 0U;
+       env->rotated_certs_count = 0U;
        for (head = cfg->dnscrypt_provider_cert; head; head = head->next) {
                env->signed_certs_count++;
        }
+       for (head = cfg->dnscrypt_provider_cert_rotated; head; head = head->next) {
+               env->rotated_certs_count++;
+       }
        env->signed_certs = sodium_allocarray(env->signed_certs_count,
                                                                                  sizeof *env->signed_certs);
 
+       env->rotated_certs = sodium_allocarray(env->rotated_certs_count,
+                                                                                 sizeof env->signed_certs);
        signed_cert_id = 0U;
+       rotated_cert_id = 0U;
        for(head = cfg->dnscrypt_provider_cert; head; head = head->next, signed_cert_id++) {
                nm = dnsc_chroot_path(cfg, head->str);
                if(dnsc_read_from_file(
@@ -608,6 +617,14 @@ dnsc_parse_certs(struct dnsc_env *env, struct config_file *cfg)
                                sizeof(struct SignedCert)) != 0) {
                        fatal_exit("dnsc_parse_certs: failed to load %s: %s", head->str, strerror(errno));
                }
+               for(head2 = cfg->dnscrypt_provider_cert_rotated; head2; head2 = head2->next) {
+                       if(strcmp(head->str, head2->str) == 0) {
+                               *(env->rotated_certs + rotated_cert_id) = env->signed_certs + signed_cert_id;
+                               rotated_cert_id++;
+                               verbose(VERB_OPS, "Cert %s is rotated and will not be distributed via DNS", head->str);
+                               break;
+                       }
+               }
                verbose(VERB_OPS, "Loaded cert %s", head->str);
        }
        return signed_cert_id;
@@ -692,7 +709,27 @@ dnsc_load_local_data(struct dnsc_env* dnscenv, struct config_file *cfg)
     // 2.dnscrypt-cert.example.com 86400 IN TXT "DNSC......"
     for(i=0; i<dnscenv->signed_certs_count; i++) {
         const char *ttl_class_type = " 86400 IN TXT \"";
+        int rotated_cert = 0;
+               uint32_t serial;
         struct SignedCert *cert = dnscenv->signed_certs + i;
+               // Check if the certificate is being rotated and should not be published
+        for(j=0; j<dnscenv->rotated_certs_count; j++){
+            if(cert == dnscenv->rotated_certs[j]) {
+                rotated_cert = 1;
+                break;
+            }
+        }
+               memcpy(&serial, cert->serial, sizeof serial);
+               serial = htonl(serial);
+        if(rotated_cert) {
+            verbose(VERB_OPS,
+                "DNSCrypt: not adding cert with serial #%"
+                PRIu32
+                " to local-data as it is rotated",
+                serial
+            );
+            continue;
+        }
         uint16_t rrlen = strlen(dnscenv->provider_name) +
                          strlen(ttl_class_type) +
                          4 * sizeof(struct SignedCert) + // worst case scenario
@@ -705,14 +742,19 @@ dnsc_load_local_data(struct dnsc_env* dnscenv, struct config_file *cfg)
         }
         snprintf(rr, rrlen - 1, "%s 86400 IN TXT \"", dnscenv->provider_name);
         for(j=0; j<sizeof(struct SignedCert); j++) {
-                   int c = (int)*((const uint8_t *) cert + j);
+                       int c = (int)*((const uint8_t *) cert + j);
             if (isprint(c) && c != '"' && c != '\\') {
                 snprintf(rr + strlen(rr), rrlen - 1 - strlen(rr), "%c", c);
             } else {
                 snprintf(rr + strlen(rr), rrlen - 1 - strlen(rr), "\\%03d", c);
             }
         }
-        verbose(VERB_OPS, "DNSCrypt: adding local data to config: %s", rr);
+        verbose(VERB_OPS,
+                       "DNSCrypt: adding cert with serial #%"
+                       PRIu32
+                       " to local-data to config: %s",
+                       serial, rr
+               );
         snprintf(rr + strlen(rr), rrlen - 1 - strlen(rr), "\"");
         cfg_strlist_insert(&cfg->local_data, strdup(rr));
         free(rr);
@@ -957,6 +999,7 @@ dnsc_delete(struct dnsc_env *env)
        }
        verbose(VERB_OPS, "DNSCrypt: Freeing environment.");
        sodium_free(env->signed_certs);
+       sodium_free(env->rotated_certs);
        sodium_free(env->certs);
        sodium_free(env->keypairs);
        slabhash_delete(env->shared_secrets_cache);
index 7dec2c488cf385f67b614e38802b5396db5fb450..666f54e62aa46c34a28ba2986db70fc887c0b122 100644 (file)
@@ -54,8 +54,10 @@ typedef struct cert_ {
 
 struct dnsc_env {
        struct SignedCert *signed_certs;
+       struct SignedCert **rotated_certs;
        dnsccert *certs;
        size_t signed_certs_count;
+       size_t rotated_certs_count;
        uint8_t provider_publickey[crypto_sign_ed25519_PUBLICKEYBYTES];
        uint8_t provider_secretkey[crypto_sign_ed25519_SECRETKEYBYTES];
        KeyPair *keypairs;
index 68ac8646d5ce36fc9bda9015df688dbb09779c0a..dfbdc9bcf92c0e7e52a772154489579d78c30204 100644 (file)
@@ -1,6 +1,20 @@
-11 October 2017: Wouter 
+17 October 2017: Wouter 
        - Fix #1749: With harden-referral-path: performance drops, due to
          circular dependency in NS and DS lookups.
+       - [dnscrypt] prevent dnscrypt-secret-key, dnscrypt-provider-cert
+         duplicates
+       - [dnscrypt] introduce dnscrypt-provider-cert-rotated option,
+         from Manu Bretelle.
+       This option allows handling multiple cert/key pairs while only
+       distributing some of them.
+       In order to reliably match a client magic with a given key without
+       strong assumption as to how those were generated, we need both key and
+       cert. Likewise, in order to know which ES version should be used.
+       On the other hand, when rotating a cert, it can be desirable to only
+       serve the new cert but still be able to handle clients that are still
+       using the old certs's public key.
+       The `dnscrypt-provider-cert-rotated` allow to instruct unbound to not
+       publish the cert as part of the DNS's provider_name's TXT answer.
 
 10 October 2017: Wouter 
        - tag 1.6.7
index c613404880086ad71fe91750d46f3311eb6f559f..41154bee2dd7f279290692790e68a32c5296110e 100644 (file)
@@ -1513,6 +1513,19 @@ times.
 Path to the certificate related to the \fBdnscrypt\-secret\-key\fRs.
 This option may be specified multiple times.
 .TP
+.B dnscrypt\-provider\-cert\-rotated: \fI<path to cert file>\fR
+Path to a certificate that we should be able to serve existing connection from
+but do not want to advertise over \fBdnscrypt\-provider\fR's TXT record certs
+distribution.
+A typical use case is when rotating certificates, existing clients may still use
+the client magic from the old cert in their queries until they fetch and update
+the new cert. Likewise, it would allow to prime the new cert/key without
+distributing the new cert yet, this can be useful when using a network of
+servers using anycast and on which the configuration may not get updated at the
+exact same time. By priming the cert, the servers can handle both old and new
+certs traffic while distributing only one.
+This option may be specified multiple times.
+.TP
 .B dnscrypt\-shared\-secret\-cache\-size: \fI<memory size>
 Give the size of the data structure in which the shared secret keys are kept
 in.  Default 4m.  In bytes or use m(mega), k(kilo), g(giga).
index ae3b6682ebf584b4c5e14012f05b71a18aae8741..c20d0ba89ec0d018d587853ea319a443336f76ca 100644 (file)
@@ -282,6 +282,7 @@ config_create(void)
        cfg->dnscrypt_port = 0;
        cfg->dnscrypt_provider = NULL;
        cfg->dnscrypt_provider_cert = NULL;
+       cfg->dnscrypt_provider_cert_rotated = NULL;
        cfg->dnscrypt_secret_key = NULL;
        cfg->dnscrypt_shared_secret_cache_size = 4*1024*1024;
        cfg->dnscrypt_shared_secret_cache_slabs = 4;
@@ -374,6 +375,10 @@ struct config_file* config_create_forlib(void)
 /** put string into strlist */
 #define S_STRLIST(str, var) if(strcmp(opt, str)==0) \
        { return cfg_strlist_insert(&cfg->var, strdup(val)); }
+/** put string into strlist if not present yet*/
+#define S_STRLIST_UNIQ(str, var) if(strcmp(opt, str)==0) \
+       { if(cfg_strlist_find(cfg->var, val)) { return 0;} \
+         return cfg_strlist_insert(&cfg->var, strdup(val)); }
 
 int config_set_option(struct config_file* cfg, const char* opt,
        const char* val)
@@ -570,8 +575,9 @@ int config_set_option(struct config_file* cfg, const char* opt,
        else S_YNO("dnscrypt-enable:", dnscrypt)
        else S_NUMBER_NONZERO("dnscrypt-port:", dnscrypt_port)
        else S_STR("dnscrypt-provider:", dnscrypt_provider)
-       else S_STRLIST("dnscrypt-provider-cert:", dnscrypt_provider_cert)
-       else S_STRLIST("dnscrypt-secret-key:", dnscrypt_secret_key)
+       else S_STRLIST_UNIQ("dnscrypt-provider-cert:", dnscrypt_provider_cert)
+       else S_STRLIST("dnscrypt-provider-cert-rotated:", dnscrypt_provider_cert_rotated)
+       else S_STRLIST_UNIQ("dnscrypt-secret-key:", dnscrypt_secret_key)
        else S_MEMSIZE("dnscrypt-shared-secret-cache-size:",
                dnscrypt_shared_secret_cache_size)
        else S_POW2("dnscrypt-shared-secret-cache-slabs:",
@@ -941,6 +947,7 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_DEC(opt, "dnscrypt-port", dnscrypt_port)
        else O_STR(opt, "dnscrypt-provider", dnscrypt_provider)
        else O_LST(opt, "dnscrypt-provider-cert", dnscrypt_provider_cert)
+       else O_LST(opt, "dnscrypt-provider-cert-rotated", dnscrypt_provider_cert_rotated)
        else O_LST(opt, "dnscrypt-secret-key", dnscrypt_secret_key)
        else O_MEM(opt, "dnscrypt-shared-secret-cache-size",
                dnscrypt_shared_secret_cache_size)
@@ -1458,6 +1465,22 @@ cfg_region_strlist_insert(struct regional* region,
        return 1;
 }
 
+struct config_strlist*
+cfg_strlist_find(struct config_strlist* head, const char *item)
+{
+       struct config_strlist *s = head;
+       if(!head){
+               return NULL;
+       }
+       while(s) {
+               if(strcmp(s->str, item) == 0) {
+                       return s;
+               }
+               s = s->next;
+       }
+       return NULL;
+}
+
 int 
 cfg_strlist_insert(struct config_strlist** head, char* item)
 {
index 5d9b2d0be15e608b12aef16c68d8cb8bcbc42b15..364d0265d34d1c5426562402f310f67927f8a667 100644 (file)
@@ -466,6 +466,10 @@ struct config_file {
        struct config_strlist* dnscrypt_secret_key;
        /** dnscrypt provider certs 1.cert */
        struct config_strlist* dnscrypt_provider_cert;
+       /** dnscrypt provider certs 1.cert which have been rotated and should not be
+       * advertised through DNS's providername TXT record but are required to be
+       * able to handle existing traffic using the old cert. */
+       struct config_strlist* dnscrypt_provider_cert_rotated;
        /** memory size in bytes for dnscrypt shared secrets cache */
        size_t dnscrypt_shared_secret_cache_size;
        /** number of slabs for dnscrypt shared secrets cache */
@@ -720,6 +724,15 @@ char* config_collate_cat(struct config_strlist* list);
  */
 int cfg_strlist_append(struct config_strlist_head* list, char* item);
 
+/**
+ * Find string in strlist.
+ * @param head: pointer to strlist head variable.
+ * @param item: the item to search for.
+ * @return: the element in the list when found, NULL otherwise.
+ */
+struct config_strlist* cfg_strlist_find(struct config_strlist* head,
+       const char* item);
+
 /**
  * Insert string into strlist.
  * @param head: pointer to strlist head variable.
index 866156d1b9e2f0d5261984ed183f4d3b0e66c1ba..64d9c596c9bb7da9a3958a77eaf6c402e53debb9 100644 (file)
@@ -363,8 +363,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 237
-#define YY_END_OF_BUFFER 238
+#define YY_NUM_RULES 238
+#define YY_END_OF_BUFFER 239
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -372,265 +372,266 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[2341] =
+static yyconst flex_int16_t yy_accept[2350] =
     {   0,
-        1,    1,  219,  219,  223,  223,  227,  227,  231,  231,
-        1,    1,  238,  235,    1,  217,  217,  236,    2,  236,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  219,  220,  220,  221,  236,  223,  224,  224,  225,
-      236,  230,  227,  228,  228,  229,  236,  231,  232,  232,
-      233,  236,  234,  218,    2,  222,  236,  234,  235,    0,
-        1,    2,    2,    2,    2,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  219,    0,  223,    0,  230,    0,  227,
-      231,    0,  234,    0,    2,    2,  234,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  234,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  234,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,   77,
-      235,  235,  235,  235,  235,  235,    8,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,   88,
-      234,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  234,
-      235,  235,  235,  235,  235,  235,  235,   37,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      170,  235,   14,   15,  235,   18,   17,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  156,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,    3,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  234,  235,  235,  235,
-      214,  235,  235,  213,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  226,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,   40,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,   41,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  145,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,   20,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  103,  235,  226,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  197,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  120,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      102,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,   75,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,   25,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,   38,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,   39,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  121,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,   28,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  185,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,   32,  235,
-       33,  235,  235,  235,   78,  235,   79,  235,  235,   76,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,    7,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  163,  235,  235,  235,  235,  105,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-       29,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  137,  235,  136,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,   16,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,   42,  235,  235,
-      235,  235,  235,  235,  235,  144,  235,  235,  235,  235,
-
-       81,   80,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  131,  235,  235,  235,  235,  235,  235,  235,  235,
-       89,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,   60,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,   64,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,   36,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  134,
-
-      135,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,    6,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      195,  235,  235,  215,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,   26,  235,  235,  235,  235,  235,  235,  235,
-      235,  127,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  149,  235,  128,  235,  235,  161,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,   27,  235,  235,  235,  235,   84,
-
-      235,   85,  235,   83,  235,  235,  235,  235,  235,  235,
-      235,  235,  100,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  184,  235,  235,  235,  235,  235,
-      235,  235,  235,  129,  235,  235,  235,  235,  235,  132,
-      235,  235,  160,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,   74,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,   34,  235,  235,   22,  235,
-      235,  235,  235,   19,  235,  110,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,   49,   51,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  199,  235,  235,  235,  171,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,   86,  235,  235,  235,  235,  235,  235,
-      235,   99,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  209,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  104,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  155,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  119,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  115,  235,  122,  235,  235,
-      235,  235,  235,   92,  235,  235,   70,  235,  235,  235,
-      235,  147,  235,  235,  235,  235,  235,  162,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      176,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  118,  235,  235,  235,  235,  235,
-       52,   53,  235,  235,  235,  235,  235,   35,  235,  235,
-      235,  235,  235,   59,  123,  235,  138,  235,  164,  133,
-      235,  235,  235,   45,  235,  125,  235,  235,  235,  235,
-
-      235,    9,  235,  235,  235,   73,  235,  235,  235,  235,
-      189,  235,  146,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  106,  198,  235,  235,  235,  235,  175,  235,
-      235,  235,  235,  235,  235,  235,  235,  157,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  212,  235,  124,  235,  235,  235,   44,   46,  235,
-
-      235,  235,  235,  235,  235,  235,   72,  235,  235,  235,
-      235,  187,  235,  194,  235,  235,  235,  235,  235,  151,
-       23,   24,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,   69,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  153,  150,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,   43,  235,  235,  235,  235,  235,  235,
-      235,  235,  101,   13,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  207,  235,  210,  235,  235,  235,  235,
-      235,  235,   12,  235,  235,   21,  235,  235,  235,  193,
-
-      235,  196,   47,  235,  159,  235,  152,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  114,  113,  235,  235,  235,  235,  235,  235,  235,
-      154,  148,  235,  235,  235,  200,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,   54,  235,  235,
-      235,  188,  235,  235,  235,  235,  235,  158,  235,  235,
-      235,  235,  235,  235,  235,  235,   48,  235,  235,  235,
-       82,  235,  107,  235,  109,  235,  139,  235,  235,  235,
-      112,  235,  235,  165,  235,  235,  235,  235,  235,   94,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  172,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  140,  235,  235,  186,  235,
-      211,  235,  235,  235,   30,  235,  235,  235,  235,    4,
-      235,  235,   93,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  168,  235,  235,  235,  235,  235,
-      235,  235,  201,  235,  235,  235,  235,  235,  235,  174,
-      235,  235,  143,  235,  235,  235,  235,  235,  235,  235,
-      235,   57,  235,   31,  192,  235,  169,  235,  235,   11,
-      235,  235,  235,  235,  235,  235,  141,   61,  235,  235,
-
-      235,  235,  235,  117,  235,  235,  235,  235,  235,   96,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  173,
-       90,  235,   87,  235,  235,  235,   63,   67,   62,  235,
-       55,  235,  235,  235,   10,  235,  235,  235,  190,  235,
-      235,  235,  235,  116,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,   68,   66,  235,   56,  208,  235,  235,  235,  130,
-      235,  235,  142,  235,  235,  235,  235,  235,  235,  108,
-       50,  235,  235,  235,  235,  202,  235,  235,  235,  235,
-      235,  235,  235,   91,   65,   97,   98,   58,  235,  191,
-
-      111,  235,  235,  235,  235,  167,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,   71,  235,  166,  235,  183,
-      205,  235,  235,  235,  235,  235,  235,  235,  235,    5,
-      235,  235,  235,  206,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,   95,  235,  235,  235,  235,  235,  235,
-      235,  235,  126,  235,  235,  235,  235,  235,  235,  235,
-      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
-
-      235,  235,  235,  235,  235,  235,  235,  235,  216,  235,
-      235,  179,  235,  235,  235,  235,  235,  203,  235,  235,
-      235,  235,  235,  235,  204,  235,  235,  235,  177,  235,
-      180,  181,  235,  235,  235,  235,  235,  178,  182,    0
+        1,    1,  220,  220,  224,  224,  228,  228,  232,  232,
+        1,    1,  239,  236,    1,  218,  218,  237,    2,  237,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  220,  221,  221,  222,  237,  224,  225,  225,  226,
+      237,  231,  228,  229,  229,  230,  237,  232,  233,  233,
+      234,  237,  235,  219,    2,  223,  237,  235,  236,    0,
+        1,    2,    2,    2,    2,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  220,    0,  224,    0,  231,    0,  228,
+      232,    0,  235,    0,    2,    2,  235,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  235,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  235,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,   77,
+      236,  236,  236,  236,  236,  236,    8,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,   88,
+      235,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  235,
+      236,  236,  236,  236,  236,  236,  236,   37,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      170,  236,   14,   15,  236,   18,   17,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  156,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,    3,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  235,  236,  236,  236,
+      215,  236,  236,  214,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  227,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,   40,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,   41,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  145,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,   20,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  103,  236,  227,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  197,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  120,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      102,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,   75,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+
+      236,  236,  236,  236,  236,   25,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,   38,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,   39,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  121,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,   28,  236,  236,  236,  236,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  185,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,   32,  236,
+       33,  236,  236,  236,   78,  236,   79,  236,  236,   76,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,    7,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  163,  236,  236,  236,  236,  105,  236,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+       29,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  137,  236,  136,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,   16,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,   42,  236,  236,
+      236,  236,  236,  236,  236,  144,  236,  236,  236,  236,
+
+       81,   80,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  131,  236,  236,  236,  236,  236,  236,  236,  236,
+       89,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,   60,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,   64,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,   36,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  134,
+
+      135,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,    6,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      195,  236,  236,  216,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,   26,  236,  236,  236,  236,  236,  236,  236,
+      236,  127,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  149,  236,  128,  236,  236,  161,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,   27,  236,  236,  236,  236,   84,
+
+      236,   85,  236,   83,  236,  236,  236,  236,  236,  236,
+      236,  236,  100,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  184,  236,  236,  236,  236,  236,
+      236,  236,  236,  129,  236,  236,  236,  236,  236,  132,
+      236,  236,  160,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,   74,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,   34,  236,  236,   22,  236,
+      236,  236,  236,   19,  236,  110,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+
+      236,   49,   51,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  199,  236,  236,  236,  171,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,   86,  236,  236,  236,  236,  236,  236,
+      236,   99,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  210,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  104,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  155,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  119,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  115,  236,  122,  236,  236,
+      236,  236,  236,   92,  236,  236,   70,  236,  236,  236,
+      236,  147,  236,  236,  236,  236,  236,  162,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      176,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  118,  236,  236,  236,  236,  236,
+       52,   53,  236,  236,  236,  236,  236,   35,  236,  236,
+      236,  236,  236,   59,  123,  236,  138,  236,  164,  133,
+      236,  236,  236,   45,  236,  125,  236,  236,  236,  236,
+
+      236,    9,  236,  236,  236,   73,  236,  236,  236,  236,
+      189,  236,  146,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  106,  198,  236,  236,  236,  236,  175,  236,
+      236,  236,  236,  236,  236,  236,  236,  157,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  213,  236,  124,  236,  236,  236,   44,   46,  236,
+
+      236,  236,  236,  236,  236,  236,   72,  236,  236,  236,
+      236,  187,  236,  194,  236,  236,  236,  236,  236,  151,
+       23,   24,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,   69,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  153,  150,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,   43,  236,  236,  236,  236,  236,  236,
+      236,  236,  101,   13,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  208,  236,  211,  236,  236,  236,  236,
+      236,  236,   12,  236,  236,   21,  236,  236,  236,  193,
+
+      236,  196,   47,  236,  159,  236,  152,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  114,  113,  236,  236,  236,  236,  236,  236,  236,
+      154,  148,  236,  236,  236,  200,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,   54,  236,  236,
+      236,  188,  236,  236,  236,  236,  236,  158,  236,  236,
+      236,  236,  236,  236,  236,  236,   48,  236,  236,  236,
+       82,  236,  107,  236,  109,  236,  139,  236,  236,  236,
+      112,  236,  236,  165,  236,  236,  236,  236,  236,   94,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  172,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  140,  236,  236,  186,  236,
+      212,  236,  236,  236,   30,  236,  236,  236,  236,    4,
+      236,  236,   93,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  168,  236,  236,  236,  236,  236,
+      236,  236,  201,  236,  236,  236,  236,  236,  236,  174,
+      236,  236,  143,  236,  236,  236,  236,  236,  236,  236,
+      236,   57,  236,   31,  192,  236,  169,  236,  236,   11,
+      236,  236,  236,  236,  236,  236,  141,   61,  236,  236,
+
+      236,  236,  236,  117,  236,  236,  236,  236,  236,   96,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  173,
+       90,  236,   87,  236,  236,  236,   63,   67,   62,  236,
+       55,  236,  236,  236,   10,  236,  236,  236,  190,  236,
+      236,  236,  236,  116,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,   68,   66,  236,   56,  209,  236,  236,  236,  130,
+      236,  236,  142,  236,  236,  236,  236,  236,  236,  108,
+       50,  236,  236,  236,  236,  236,  202,  236,  236,  236,
+      236,  236,  236,  236,   91,   65,   97,   98,   58,  236,
+
+      191,  111,  236,  236,  236,  236,  167,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,   71,  236,
+      166,  236,  183,  206,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,    5,  236,  236,  236,  207,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,   95,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  126,
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  203,
+
+      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+      236,  236,  236,  236,  236,  236,  236,  217,  236,  236,
+      179,  236,  236,  236,  236,  236,  204,  236,  236,  236,
+      236,  236,  236,  205,  236,  236,  236,  177,  236,  180,
+      181,  236,  236,  236,  236,  236,  178,  182,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -673,15 +674,15 @@ static yyconst YY_CHAR yy_meta[41] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_uint16_t yy_base[2355] =
+static yyconst flex_uint16_t yy_base[2364] =
     {   0,
         0,    0,   38,   41,   44,   46,   59,   65,   71,   77,
-       90,  112, 3642, 3416,   81, 4589, 4589, 4589,   96,   52,
+       90,  112, 3642, 3416,   81, 4607, 4607, 4607,   96,   52,
        72,   63,  107,  111,   70,   91,  109,  124,   98,  127,
       114,  133,  136,  130,  144,  146,  163,  165,  171,  179,
-      186, 3294, 4589, 4589, 4589,  164, 3246, 4589, 4589, 4589,
-       95, 2906, 2815, 4589, 4589, 4589,  206, 2513, 4589, 4589,
-     4589,  176, 2465, 4589,  212, 4589,  216,  147, 2167,  220,
+      186, 3294, 4607, 4607, 4607,  164, 3246, 4607, 4607, 4607,
+       95, 2906, 2815, 4607, 4607, 4607,  206, 2513, 4607, 4607,
+     4607,  176, 2465, 4607,  212, 4607,  216,  147, 2167,  220,
       147,    0,  227,    0,    0,  221,  188,   97,  222,  228,
       158,  214,  216,  229,  232,  233,  156,  240,  238,  236,
       190,  239,  242,  243,  145,  245,  258,  254,  246,  262,
@@ -714,13 +715,13 @@ static yyconst flex_uint16_t yy_base[2355] =
       763,  772,  762,  764,  765,  771,  773,  783,  784,  776,
       777,  786,  708,  792,  789,  790,  802,  798,  801,  800,
       805,  809,  811,  813,  815,  814,  816,  824,  821,  822,
-      823,  830,  832,  833,  831,  836,  841,  834,  847, 4589,
-      849,  838,  624,  842,  840,  852, 4589,  853,  854,  856,
+      823,  830,  832,  833,  831,  836,  841,  834,  847, 4607,
+      849,  838,  624,  842,  840,  852, 4607,  853,  854,  856,
       863,  858,  861,  862,  869,  878,  865,  879,  881,  880,
       883,  868,  884,  887,  886,  892,  893,  889,  910,  895,
 
       898,  896,  919,  904,  900,  902,  906,  914,  927,  923,
-      921,  925,  930,  931,  932,  934,  935,  941,  942, 4589,
+      921,  925,  930,  931,  932,  934,  935,  941,  942, 4607,
       946,  951,  947,  944,  957,  952,  958,  955,  967,  970,
       968,  975,  971,  973,  972,  974,  978,  977,  982,  990,
       986,  992,  995, 1003, 1001, 1005, 1008,  985, 1007, 1009,
@@ -734,472 +735,474 @@ static yyconst flex_uint16_t yy_base[2355] =
      1134, 1135, 1137, 1136, 1139, 1138, 1142, 1143, 1152, 1147,
      1148, 1159, 1164, 1150, 1162, 1165, 1163, 1157, 1171, 1174,
      1172, 1175, 1178, 1180, 1186, 1187, 1188, 1189, 1190, 1191,
-     1192, 1198, 1193, 1201, 1206, 1209, 1210, 4589, 1205, 1217,
+     1192, 1198, 1193, 1201, 1206, 1209, 1210, 4607, 1205, 1217,
      1212, 1216, 1213, 1218, 1227, 1222, 1223, 1226, 1228, 1233,
-     4589, 1229, 4589, 4589, 1237, 4589, 4589, 1231, 1243, 1235,
+     4607, 1229, 4607, 4607, 1237, 4607, 4607, 1231, 1243, 1235,
      1246, 1256, 1259, 1260, 1258, 1250, 1265, 1266, 1270, 1269,
      1274, 1275, 1277, 1284, 1282, 1286, 1288, 1294, 1290, 1280,
      1297, 1295, 1298, 1300, 1303, 1305, 1307, 1306, 1310, 1309,
 
      1312, 1313, 1325, 1329, 1327, 1326, 1328, 1331, 1316, 1333,
-     1335, 1337, 1341, 1343, 1345, 1350, 1346, 4589, 1348, 1349,
-     1351, 1355, 1347, 1362, 1359, 1364, 1366, 1367, 1368, 4589,
+     1335, 1337, 1341, 1343, 1345, 1350, 1346, 4607, 1348, 1349,
+     1351, 1355, 1347, 1362, 1359, 1364, 1366, 1367, 1368, 4607,
      1370, 1377, 1369, 1373, 1380, 1382, 1381, 1384, 1385, 1388,
      1387, 1389, 1386, 1397, 1393, 1400, 1399, 1396, 1410, 1417,
      1412, 1419, 1414, 1415, 1421, 1420, 1422, 1426, 1429, 1428,
      1430, 1436, 1444, 1435, 1440, 1442, 1446, 1437, 1447, 1450,
-     4589, 1453, 1454, 4589, 1456, 1457, 1479, 1458, 1461, 1466,
+     4607, 1453, 1454, 4607, 1456, 1457, 1479, 1458, 1461, 1466,
      1462, 1463, 1470, 1475, 1472, 1497, 1489, 1494, 1492, 1499,
      1501, 1502, 1505, 1508, 1509, 1517, 1474, 1518, 1519, 1471,
 
      1523, 1510, 1521, 1529, 1531, 1532, 1534, 1493, 1535, 1542,
-     1539, 4589, 1550, 1546, 1537, 1547, 1557, 1553, 1552, 1555,
+     1539, 4607, 1550, 1546, 1537, 1547, 1557, 1553, 1552, 1555,
      1559, 1561, 1569, 1565, 1562, 1567, 1566, 1570, 1573, 1576,
-     1578, 1588, 4589, 1575, 1579, 1583, 1580, 1591, 1592, 1594,
-     1600, 1602, 1610, 1605, 4589, 1590, 1613, 1615, 1608, 1614,
+     1578, 1588, 4607, 1575, 1579, 1583, 1580, 1591, 1592, 1594,
+     1600, 1602, 1610, 1605, 4607, 1590, 1613, 1615, 1608, 1614,
      1617, 1620, 1627, 1622, 1623, 1624, 1625, 1629, 1631, 1633,
-     1636, 1632, 4589, 1640, 1639, 1643, 1651, 1648, 1652, 1653,
-     1654, 1658, 1659, 1660, 1667, 1663, 1664, 4589, 1662, 1671,
+     1636, 1632, 4607, 1640, 1639, 1643, 1651, 1648, 1652, 1653,
+     1654, 1658, 1659, 1660, 1667, 1663, 1664, 4607, 1662, 1671,
      1665, 1666, 1675, 1688, 1689, 1678, 1681, 1691, 1685, 1692,
-     1695, 1698, 1696, 1699, 1697, 1700, 4589, 1701,  143, 1703,
+     1695, 1698, 1696, 1699, 1697, 1700, 4607, 1701,  143, 1703,
 
      1709, 1702, 1711, 1718, 1710, 1719, 1723, 1713, 1726, 1729,
      1730, 1731, 1732, 1733, 1735, 1737, 1738, 1741, 1743, 1742,
-     1751, 4589, 1746, 1753, 1757, 1755, 1760, 1761, 1766, 1768,
-     1771, 1772, 1774, 4589, 1781, 1778, 1776, 1783, 1784, 1786,
+     1751, 4607, 1746, 1753, 1757, 1755, 1760, 1761, 1766, 1768,
+     1771, 1772, 1774, 4607, 1781, 1778, 1776, 1783, 1784, 1786,
      1787, 1788, 1789, 1791, 1792, 1796, 1799, 1795, 1797, 1804,
-     4589, 1811, 1806, 1816, 1807, 1818, 1809, 1831, 1819, 1822,
+     4607, 1811, 1806, 1816, 1807, 1818, 1809, 1831, 1819, 1822,
      1826, 1828, 1840, 1833, 1832, 1843, 1834, 1842, 1851, 1850,
      1852, 1861, 1844, 1856, 1866, 1854, 1858, 1873, 1875, 1872,
-     1870, 1878, 1879, 1883, 1882, 4589, 1884, 1885, 1886, 1890,
+     1870, 1878, 1879, 1883, 1882, 4607, 1884, 1885, 1886, 1890,
      1903, 1891, 1901, 1889, 1906, 1895, 1907, 1911, 1913, 1915,
 
-     1916, 1918, 1920, 1917, 1927, 4589, 1921, 1929, 1928, 1931,
+     1916, 1918, 1920, 1917, 1927, 4607, 1921, 1929, 1928, 1931,
      1935, 1937, 1938, 1939, 1945, 1942, 1946, 1940, 1949, 1952,
-     1958, 1950, 1961, 1956, 1953, 4589, 1970, 1971, 1969, 1978,
+     1958, 1950, 1961, 1956, 1953, 4607, 1970, 1971, 1969, 1978,
      1973, 1975, 1976, 1980, 1977, 1981, 1983, 1990, 1985, 1988,
      1986, 1989, 1991, 1992, 1995, 1996, 2000, 2002, 2011, 2004,
-     2012, 4589, 2013, 2020, 2016, 2022, 2023, 2024, 2026, 2028,
+     2012, 4607, 2013, 2020, 2016, 2022, 2023, 2024, 2026, 2028,
      2029, 2034, 2046, 2038, 2043, 2045, 2035, 2047, 2050, 2049,
-     2051, 4589, 2052, 2057, 2053, 2058, 2059, 2062, 2063, 2060,
+     2051, 4607, 2052, 2057, 2053, 2058, 2059, 2062, 2063, 2060,
      2069, 2076, 2080, 2066, 2081, 2086, 2082, 2088, 2068, 2091,
-     2098, 2099, 2100, 2102, 4589, 2105, 2106, 2107, 2095, 2108,
+     2098, 2099, 2100, 2102, 4607, 2105, 2106, 2107, 2095, 2108,
 
      2109, 2111, 2114, 2112, 2117, 2121, 2119, 2120, 2129, 2136,
      2127, 2131, 2134, 2137, 2144, 2140, 2141, 2142, 2149, 2145,
      2146, 2151, 2152, 2154, 2155, 2157, 2158, 2174, 2161, 2163,
-     2175, 2178, 2179, 2181, 2183, 2185, 4589, 2169, 2184, 2194,
-     2197, 2195, 2201, 2186, 2198, 2188, 2209, 2211, 4589, 2207,
-     4589, 2212, 2213, 2221, 4589, 2219, 4589, 2223, 2220, 4589,
+     2175, 2178, 2179, 2181, 2183, 2185, 4607, 2169, 2184, 2194,
+     2197, 2195, 2201, 2186, 2198, 2188, 2209, 2211, 4607, 2207,
+     4607, 2212, 2213, 2221, 4607, 2219, 4607, 2223, 2220, 4607,
      2224, 2228, 2226, 2230, 2231, 2233, 2234, 2235, 2238, 2240,
-     2242, 2245, 2243, 2248, 2249, 2251, 2252, 4589, 2261, 2254,
+     2242, 2245, 2243, 2248, 2249, 2251, 2252, 4607, 2261, 2254,
      2263, 2266, 2264, 2256, 2258, 2271, 2268, 2274, 2279, 2282,
-     2289, 2275, 2290, 4589, 2285, 2292, 2286, 2296, 4589, 2288,
+     2289, 2275, 2290, 4607, 2285, 2292, 2286, 2296, 4607, 2288,
 
      2297, 2300, 2293, 2303, 2304, 2306, 2310, 2308, 2313, 2322,
      2323, 2324, 2318, 2326, 2314, 2332, 2336, 2315, 2334, 2337,
      2338, 2347, 2343, 2350, 2342, 2346, 2354, 2355, 2345, 2349,
      2357, 2359, 2361, 2362, 2366, 2370, 2367, 2368, 2371, 2372,
-     4589, 2381, 2376, 2378, 2389, 2382, 2384, 2386, 2391, 2392,
-     2399, 2395, 2394, 2400, 4589, 2404, 4589, 2405, 2408, 2412,
+     4607, 2381, 2376, 2378, 2389, 2382, 2384, 2386, 2391, 2392,
+     2399, 2395, 2394, 2400, 4607, 2404, 4607, 2405, 2408, 2412,
      2415, 2413, 2417, 2420, 2425, 2421, 2426, 2428, 2429, 2442,
-     2427, 2431, 2433, 2439, 2443, 2445, 4589, 2446, 2448, 2449,
-     2452, 2454, 2455, 2461, 2458, 2456, 2478, 4589, 2475, 2464,
-     2480, 2487, 2483, 2490, 2485, 4589, 2473, 2492, 2489, 2494,
-
-     4589, 4589, 2495, 2496, 2498, 2499, 2500, 2505, 2507, 2506,
-     2508, 4589, 2510, 2512, 2516, 2523, 2524, 2525, 2527, 2515,
-     4589, 2531, 2534, 2521, 2537, 2539, 2540, 2541, 2542, 2549,
-     2545, 2547, 2548, 2556, 2550, 2559, 4589, 2561, 2563, 2568,
+     2427, 2431, 2433, 2439, 2443, 2445, 4607, 2446, 2448, 2449,
+     2452, 2454, 2455, 2461, 2458, 2456, 2478, 4607, 2475, 2464,
+     2480, 2487, 2483, 2490, 2485, 4607, 2473, 2492, 2489, 2494,
+
+     4607, 4607, 2495, 2496, 2498, 2499, 2500, 2505, 2507, 2506,
+     2508, 4607, 2510, 2512, 2516, 2523, 2524, 2525, 2527, 2515,
+     4607, 2531, 2534, 2521, 2537, 2539, 2540, 2541, 2542, 2549,
+     2545, 2547, 2548, 2556, 2550, 2559, 4607, 2561, 2563, 2568,
      2564, 2569, 2570, 2574, 2575, 2577, 2578, 2579, 2580, 2581,
      2583, 2582, 2590, 2585, 2586, 2592, 2606, 2588, 2602, 2603,
-     2608, 2604, 2611, 2613, 2615, 2616, 2625, 2626, 4589, 2628,
+     2608, 2604, 2611, 2613, 2615, 2616, 2625, 2626, 4607, 2628,
      2617, 2633, 2618, 2636, 2631, 2637, 2646, 2641, 2632, 2642,
-     2650, 2645, 4589, 2657, 2647, 2664, 2648, 2658, 2669, 2667,
-     2668, 2649, 2672, 2674, 2677, 2675, 2679, 2680, 2683, 4589,
+     2650, 2645, 4607, 2657, 2647, 2664, 2648, 2658, 2669, 2667,
+     2668, 2649, 2672, 2674, 2677, 2675, 2679, 2680, 2683, 4607,
 
-     4589, 2684, 2685, 2687, 2689, 2690, 2694, 2691, 2698, 2692,
-     2696, 4589, 2702, 2711, 2708, 2709, 2719, 2720, 2722, 2710,
+     4607, 2684, 2685, 2687, 2689, 2690, 2694, 2691, 2698, 2692,
+     2696, 4607, 2702, 2711, 2708, 2709, 2719, 2720, 2722, 2710,
      2723, 2724, 2726, 2725, 2727, 2729, 2731, 2733, 2735, 2736,
-     4589, 2739, 2738, 4589, 2741, 2742, 2743, 2752, 2755, 2748,
+     4607, 2739, 2738, 4607, 2741, 2742, 2743, 2752, 2755, 2748,
      2763, 2751, 2765, 2766, 2773, 2769, 2776, 2777, 2780, 2778,
-     2781, 2788, 4589, 2783, 2785, 2784, 2787, 2797, 2792, 2800,
-     2790, 4589, 2798, 2805, 2808, 2810, 2799, 2817, 2815, 2813,
-     2816, 2820, 4589, 2823, 4589, 2824, 2825, 4589, 2826, 2830,
+     2781, 2788, 4607, 2783, 2785, 2784, 2787, 2797, 2792, 2800,
+     2790, 4607, 2798, 2805, 2808, 2810, 2799, 2817, 2815, 2813,
+     2816, 2820, 4607, 2823, 4607, 2824, 2825, 4607, 2826, 2830,
      2831, 2833, 2834, 2835, 2839, 2846, 2841, 2847, 2848, 2849,
-     2850, 2852, 2859, 2851, 4589, 2862, 2855, 2858, 2860, 4589,
-
-     2871, 4589, 2864, 4589, 2872, 2875, 2882, 2877, 2878, 2881,
-     2885, 2888, 4589, 2886, 2890, 2891, 2895, 2897, 2899, 2900,
-     2901, 2898, 2902, 2903, 4589, 2905, 2907, 2915, 2908, 2916,
-     2920, 2927, 2921, 4589, 2928, 2929, 2930, 2934, 2935, 4589,
-     2937, 2938, 4589, 2943, 2945, 2947, 2949, 2950, 2951, 2953,
-     2959, 2955, 2966, 2962, 2961, 2963, 4589, 2964, 2965, 2969,
+     2850, 2852, 2859, 2851, 4607, 2862, 2855, 2858, 2860, 4607,
+
+     2871, 4607, 2864, 4607, 2872, 2875, 2882, 2877, 2878, 2881,
+     2885, 2888, 4607, 2886, 2890, 2891, 2895, 2897, 2899, 2900,
+     2901, 2898, 2902, 2903, 4607, 2905, 2907, 2915, 2908, 2916,
+     2920, 2927, 2921, 4607, 2928, 2929, 2930, 2934, 2935, 4607,
+     2937, 2938, 4607, 2943, 2945, 2947, 2949, 2950, 2951, 2953,
+     2959, 2955, 2966, 2962, 2961, 2963, 4607, 2964, 2965, 2969,
      2980, 2970, 2972, 2982, 2984, 2986, 2978, 2993, 2995, 2991,
-     2997, 2987, 3002, 2998, 3004, 4589, 3005, 3006, 4589, 3009,
-     3012, 3013, 3014, 4589, 3015, 4589, 3017, 3018, 3020, 3019,
+     2997, 2987, 3002, 2998, 3004, 4607, 3005, 3006, 4607, 3009,
+     3012, 3013, 3014, 4607, 3015, 4607, 3017, 3018, 3020, 3019,
      3024, 3026, 3027, 3029, 3037, 3038, 3040, 3039, 3049, 3046,
 
-     3047, 4589, 4589, 3051, 3057, 3053, 3060, 3063, 3061, 3066,
-     3071, 3069, 3076, 3077, 3085, 4589, 3086, 3068, 3087, 4589,
+     3047, 4607, 4607, 3051, 3057, 3053, 3060, 3063, 3061, 3066,
+     3071, 3069, 3076, 3077, 3085, 4607, 3086, 3068, 3087, 4607,
      3055, 3089, 3070, 3081, 3092, 3095, 3098, 3100, 3101, 3102,
-     3103, 3078, 3106, 4589, 3107, 3109, 3110, 3111, 3112, 3115,
-     3116, 4589, 3120, 3119, 3121, 3123, 3128, 3131, 3138, 3141,
-     3146, 3143, 3147, 3148, 3150, 3152, 3156, 4589, 3163, 3153,
+     3103, 3078, 3106, 4607, 3107, 3109, 3110, 3111, 3112, 3115,
+     3116, 4607, 3120, 3119, 3121, 3123, 3128, 3131, 3138, 3141,
+     3146, 3143, 3147, 3148, 3150, 3152, 3156, 4607, 3163, 3153,
      3154, 3155, 3165, 3170, 3157, 3172, 3166, 3178, 3180, 3175,
-     3181, 4589, 3182, 3186, 3183, 3191, 3188, 3192, 3193, 3194,
-     3204, 3197, 3199, 3201, 3208, 4589, 3205, 3209, 3211, 3213,
-     3219, 3212, 3222, 3215, 3122, 3223, 3227, 3224, 3234, 4589,
+     3181, 4607, 3182, 3186, 3183, 3191, 3188, 3192, 3193, 3194,
+     3204, 3197, 3199, 3201, 3208, 4607, 3205, 3209, 3211, 3213,
+     3219, 3212, 3222, 3215, 3122, 3223, 3227, 3224, 3234, 4607,
 
      3229, 3237, 3230, 3238, 3239, 3240, 3243, 3244, 3247, 3252,
-     3253, 3254, 3250, 3271, 3266, 4589, 3257, 4589, 3258, 3268,
-     3278, 3273, 3275, 4589, 3276, 3279, 4589, 3280, 3283, 3281,
-     3286, 4589, 3284, 3285, 3289, 3293, 3301, 4589, 3303, 3304,
+     3253, 3254, 3250, 3271, 3266, 4607, 3257, 4607, 3258, 3268,
+     3278, 3273, 3275, 4607, 3276, 3279, 4607, 3280, 3283, 3281,
+     3286, 4607, 3284, 3285, 3289, 3293, 3301, 4607, 3303, 3304,
      3306, 3314, 3316, 3313, 3315, 3317, 3319, 3320, 3321, 3322,
-     4589, 3324, 3327, 3326, 3332, 3333, 3335, 3336, 3338, 3339,
-     3341, 3349, 3345, 3344, 4589, 3347, 3352, 3354, 3356, 3358,
-     4589, 4589, 3361, 3365, 3367, 3368, 3371, 4589, 3369, 3380,
-     3376, 3378, 3381, 4589, 4589, 3383, 4589, 3379, 4589, 4589,
-     3384, 3386, 3393, 4589, 3396, 4589, 3404, 3399, 3385, 3387,
-
-     3402, 4589, 3403, 3405, 3411, 4589, 3406, 3414, 3412, 3413,
-     4589, 3419, 4589, 3420, 3424, 3426, 3425, 3429, 3432, 3433,
+     4607, 3324, 3327, 3326, 3332, 3333, 3335, 3336, 3338, 3339,
+     3341, 3349, 3345, 3344, 4607, 3347, 3352, 3354, 3356, 3358,
+     4607, 4607, 3361, 3365, 3367, 3368, 3371, 4607, 3369, 3380,
+     3376, 3378, 3381, 4607, 4607, 3383, 4607, 3379, 4607, 4607,
+     3384, 3386, 3393, 4607, 3396, 4607, 3404, 3399, 3385, 3387,
+
+     3402, 4607, 3403, 3405, 3411, 4607, 3406, 3414, 3412, 3413,
+     4607, 3419, 4607, 3420, 3424, 3426, 3425, 3429, 3432, 3433,
      3435, 3437, 3440, 3441, 3442, 3444, 3447, 3449, 3448, 3450,
      3451, 3452, 3454, 3464, 3456, 3458, 3466, 3467, 3468, 3469,
      3472, 3470, 3475, 3476, 3477, 3478, 3482, 3485, 3489, 3488,
-     3502, 3503, 4589, 4589, 3505, 3491, 3497, 3495, 4589, 3499,
-     3507, 3510, 3511, 3512, 3513, 3516, 3517, 4589, 3523, 3515,
+     3502, 3503, 4607, 4607, 3505, 3491, 3497, 3495, 4607, 3499,
+     3507, 3510, 3511, 3512, 3513, 3516, 3517, 4607, 3523, 3515,
      3520, 3528, 3526, 3527, 3529, 3530, 3536, 3540, 3543, 3550,
      3548, 3537, 3549, 3551, 3553, 3554, 3557, 3558, 3564, 3559,
-     3570, 4589, 3565, 4589, 3567, 3571, 3575, 4589, 4589, 3572,
+     3570, 4607, 3565, 4607, 3567, 3571, 3575, 4607, 4607, 3572,
 
-     3577, 3579, 3581, 3582, 3586, 3583, 4589, 3588, 3589, 3598,
-     3595, 4589, 3602, 4589, 3605, 3590, 3607, 3610, 3612, 4589,
-     4589, 4589, 3613, 3599, 3616, 3617, 3618, 3619, 3620, 3622,
-     3624, 3627, 4589, 3631, 3632, 3634, 3636, 3641, 3645, 3642,
-     3647, 3654, 3650, 3656, 3638, 3658, 3660, 3662, 4589, 4589,
+     3577, 3579, 3581, 3582, 3586, 3583, 4607, 3588, 3589, 3598,
+     3595, 4607, 3602, 4607, 3605, 3590, 3607, 3610, 3612, 4607,
+     4607, 4607, 3613, 3599, 3616, 3617, 3618, 3619, 3620, 3622,
+     3624, 3627, 4607, 3631, 3632, 3634, 3636, 3641, 3645, 3642,
+     3647, 3654, 3650, 3656, 3638, 3658, 3660, 3662, 4607, 4607,
      3664, 3665, 3672, 3669, 3670, 3673, 3676, 3678, 3679, 3681,
-     3682, 3684, 3685, 4589, 3691, 3687, 3686, 3693, 3698, 3699,
-     3700, 3702, 4589, 4589, 3695, 3703, 3705, 3710, 3712, 3713,
-     3715, 3717, 3718, 4589, 3719, 4589, 3720, 3721, 3732, 3728,
-     3733, 3738, 4589, 3735, 3729, 4589, 3745, 3736, 3739, 4589,
+     3682, 3684, 3685, 4607, 3691, 3687, 3686, 3693, 3698, 3699,
+     3700, 3702, 4607, 4607, 3695, 3703, 3705, 3710, 3712, 3713,
+     3715, 3717, 3718, 4607, 3719, 4607, 3720, 3721, 3732, 3728,
+     3733, 3738, 4607, 3735, 3729, 4607, 3745, 3736, 3739, 4607,
 
-     3746, 4589, 4589, 3752, 4589, 3748, 4589, 3753, 3755, 3758,
+     3746, 4607, 4607, 3752, 4607, 3748, 4607, 3753, 3755, 3758,
      3759, 3761, 3763, 3766, 3767, 3770, 3771, 3772, 3780, 3776,
-     3777, 4589, 4589, 3784, 3779, 3785, 3793, 3788, 3790, 3796,
-     4589, 4589, 3792, 3798, 3800, 4589, 3799, 3801, 3805, 3807,
+     3777, 4607, 4607, 3784, 3779, 3785, 3793, 3788, 3790, 3796,
+     4607, 4607, 3792, 3798, 3800, 4607, 3799, 3801, 3805, 3807,
      3808, 3809, 3811, 3815, 3816, 3810, 3817, 3819, 3827, 3830,
-     3821, 3833, 3832, 3834, 3839, 3841, 3842, 4589, 3844, 3846,
-     3840, 4589, 3851, 3847, 3856, 3859, 3857, 4589, 3845, 3868,
-     3865, 3870, 3871, 3878, 3874, 3873, 4589, 3876, 3880, 3881,
-     4589, 3883, 4589, 3884, 4589, 3885, 4589, 3890, 3891, 3888,
-     4589, 3894, 3900, 4589, 3903, 3898, 3905, 3909, 3910, 4589,
+     3821, 3833, 3832, 3834, 3839, 3841, 3842, 4607, 3844, 3846,
+     3840, 4607, 3851, 3847, 3856, 3859, 3857, 4607, 3845, 3868,
+     3865, 3870, 3871, 3878, 3874, 3873, 4607, 3876, 3880, 3881,
+     4607, 3883, 4607, 3884, 4607, 3885, 4607, 3890, 3891, 3888,
+     4607, 3894, 3900, 4607, 3903, 3898, 3905, 3909, 3910, 4607,
 
      3917, 3913, 3914, 3921, 3912, 3916, 3922, 3923, 3932, 3924,
-     3934, 4589, 3929, 3931, 3936, 3938, 3939, 3944, 3940, 3942,
-     3947, 3945, 3952, 3958, 3954, 4589, 3960, 3963, 4589, 3964,
-     4589, 3966, 3967, 3969, 4589, 3971, 3968, 3972, 3975, 4589,
-     3976, 3979, 4589, 3980, 3982, 3987, 3989, 3984, 3990, 3991,
-     3992, 3997, 4005, 3999, 4589, 4001, 4006, 4016, 4015, 4017,
-     4024, 4007, 4589, 4022, 4023, 4011, 4035, 4019, 4032, 4589,
-     4034, 4021, 4589, 4039, 4041, 4042, 4043, 4045, 4050, 4052,
-     4053, 4589, 4055, 4589, 4589, 4047, 4589, 4057, 4059, 4589,
-     4062, 4063, 4064, 4065, 4068, 4070, 4589, 4589, 4069, 4078,
-
-     4073, 4086, 4071, 4589, 4080, 4082, 4087, 4089, 4088, 4589,
-     4090, 4091, 4093, 4095, 4096, 4103, 4099, 4097, 4104, 4589,
-     4589, 4105, 4589, 4107, 4112, 4120, 4589, 4589, 4589, 4122,
-     4589, 4127, 4131, 4130, 4589, 4133, 4123, 4135, 4589, 4137,
-     4138, 4139, 4140, 4589, 4142, 4144, 4146, 4151, 4157, 4148,
-     4154, 4152, 4166, 4168, 4158, 4167, 4169, 4170, 4171, 4172,
-     4174, 4589, 4589, 4178, 4589, 4589, 4180, 4185, 4187, 4589,
-     4188, 4193, 4589, 4195, 4181, 4189, 4198, 4200, 4203, 4589,
-     4589, 4204, 4205, 4206, 4209, 4589, 4211, 4213, 4212, 4216,
-     4217, 4219, 4218, 4589, 4589, 4589, 4589, 4589, 4220, 4589,
-
-     4589, 4224, 4225, 4228, 4227, 4589, 4230, 4231, 4233, 4243,
-     4239, 4244, 4235, 4246, 4249, 4250, 4251, 4252, 4255, 4259,
-     4261, 4263, 4267, 4274, 4277, 4260, 4278, 4280, 4282, 4271,
-     4283, 4290, 4286, 4289, 4291, 4589, 4292, 4589, 4293, 4589,
-     4589, 4295, 4297, 4299, 4308, 4309, 4301, 4304, 4306, 4589,
-     4312, 4313, 4316, 4589, 4314, 4321, 4322, 4323, 4324, 4326,
-     4328, 4329, 4330, 4338, 4345, 4341, 4346, 4348, 4350, 4344,
-     4358, 4354, 4357, 4589, 4360, 4361, 4362, 4364, 4371, 4366,
-     4367, 4369, 4589, 4375, 4372, 4373, 4374, 4376, 4390, 4394,
-     4382, 4378, 4396, 4386, 4400, 4402, 4406, 4407, 4398, 4409,
-
-     4410, 4416, 4413, 4419, 4420, 4421, 4423, 4422, 4589, 4425,
-     4429, 4589, 4430, 4431, 4432, 4433, 4437, 4589, 4443, 4434,
-     4439, 4444, 4447, 4449, 4589, 4455, 4460, 4450, 4589, 4461,
-     4589, 4589, 4462, 4463, 4464, 4469, 4471, 4589, 4589, 4589,
-     4497, 4504, 4511, 4518, 4525,   70, 4532, 4539, 4546, 4553,
-     4560, 4567, 4574, 4581
+     3934, 4607, 3929, 3931, 3936, 3938, 3939, 3944, 3940, 3942,
+     3947, 3945, 3952, 3958, 3954, 4607, 3960, 3963, 4607, 3964,
+     4607, 3966, 3967, 3969, 4607, 3971, 3968, 3972, 3975, 4607,
+     3976, 3979, 4607, 3980, 3982, 3987, 3989, 3984, 3990, 3991,
+     3992, 3997, 4005, 3999, 4607, 4001, 4006, 4016, 4015, 4017,
+     4024, 4007, 4607, 4022, 4023, 4011, 4035, 4019, 4032, 4607,
+     4034, 4021, 4607, 4039, 4041, 4042, 4043, 4045, 4050, 4052,
+     4053, 4607, 4055, 4607, 4607, 4047, 4607, 4057, 4059, 4607,
+     4062, 4063, 4064, 4065, 4068, 4070, 4607, 4607, 4069, 4078,
+
+     4073, 4086, 4071, 4607, 4080, 4082, 4087, 4089, 4088, 4607,
+     4090, 4091, 4093, 4095, 4096, 4103, 4099, 4097, 4104, 4607,
+     4607, 4105, 4607, 4107, 4112, 4120, 4607, 4607, 4607, 4122,
+     4607, 4127, 4131, 4130, 4607, 4133, 4123, 4135, 4607, 4137,
+     4138, 4139, 4140, 4607, 4142, 4144, 4146, 4151, 4157, 4148,
+     4154, 4152, 4168, 4171, 4158, 4166, 4169, 4170, 4172, 4173,
+     4179, 4607, 4607, 4185, 4607, 4607, 4187, 4189, 4194, 4607,
+     4182, 4196, 4607, 4198, 4199, 4200, 4201, 4203, 4205, 4607,
+     4607, 4206, 4207, 4208, 4215, 4209, 4607, 4217, 4180, 4211,
+     4221, 4213, 4219, 4222, 4607, 4607, 4607, 4607, 4607, 4228,
+
+     4607, 4607, 4223, 4229, 4230, 4235, 4607, 4236, 4240, 4239,
+     4241, 4242, 4247, 4245, 4252, 4254, 4253, 4255, 4260, 4256,
+     4263, 4262, 4264, 4266, 4267, 4279, 4282, 4270, 4274, 4283,
+     4285, 4287, 4284, 4288, 4297, 4293, 4296, 4298, 4607, 4299,
+     4607, 4300, 4607, 4607, 4302, 4304, 4308, 4306, 4319, 4321,
+     4310, 4320, 4311, 4607, 4312, 4322, 4323, 4607, 4326, 4329,
+     4328, 4331, 4335, 4337, 4338, 4340, 4339, 4341, 4350, 4353,
+     4361, 4351, 4354, 4362, 4363, 4364, 4371, 4369, 4373, 4607,
+     4366, 4375, 4377, 4376, 4378, 4385, 4380, 4387, 4381, 4607,
+     4389, 4392, 4386, 4390, 4393, 4398, 4402, 4405, 4406, 4607,
+
+     4396, 4407, 4413, 4414, 4416, 4418, 4420, 4421, 4425, 4426,
+     4428, 4434, 4429, 4435, 4437, 4438, 4439, 4607, 4445, 4441,
+     4607, 4446, 4447, 4448, 4449, 4453, 4607, 4462, 4450, 4455,
+     4463, 4466, 4470, 4607, 4472, 4476, 4473, 4607, 4478, 4607,
+     4607, 4479, 4481, 4482, 4486, 4488, 4607, 4607, 4607, 4515,
+     4522, 4529, 4536, 4543,   70, 4550, 4557, 4564, 4571, 4578,
+     4585, 4592, 4599
     } ;
 
-static yyconst flex_int16_t yy_def[2355] =
+static yyconst flex_int16_t yy_def[2364] =
     {   0,
-     2340,    1, 2341, 2341, 2342, 2342, 2343, 2343, 2344, 2344,
-     2345, 2345, 2340, 2346, 2340, 2340, 2340, 2340, 2347, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2348, 2340, 2340, 2340, 2348, 2349, 2340, 2340, 2340,
-     2349, 2350, 2340, 2340, 2340, 2340, 2350, 2351, 2340, 2340,
-     2340, 2351, 2352, 2340, 2353, 2340, 2352, 2352, 2346, 2346,
-     2340, 2354, 2347, 2354, 2347, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2348, 2348, 2349, 2349, 2350, 2350, 2340,
-     2351, 2351, 2352, 2352, 2353, 2353, 2352, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2352, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2352, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340,
-     2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340,
-     2352, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2352,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2340, 2346, 2340, 2340, 2346, 2340, 2340, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2352, 2346, 2346, 2346,
-     2340, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2352, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346,
-     2340, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2340,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2340, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346,
-
-     2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340,
-
-     2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2340, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2340, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2340,
-
-     2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2340, 2346,
-     2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2340,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2340, 2346, 2346, 2340, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346,
-     2340, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2340, 2340, 2346, 2340, 2346, 2340, 2340,
-     2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346,
-
-     2346, 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346,
-     2340, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2340, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2340, 2346, 2346, 2346, 2340, 2340, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346,
-     2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340,
-     2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2340,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2346, 2340, 2346, 2346, 2346, 2340,
-
-     2346, 2340, 2340, 2346, 2340, 2346, 2340, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2340, 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346,
-     2340, 2346, 2340, 2346, 2340, 2346, 2340, 2346, 2346, 2346,
-     2340, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2340, 2346,
-     2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2340,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2340,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2346, 2340, 2340, 2346, 2340, 2346, 2346, 2340,
-     2346, 2346, 2346, 2346, 2346, 2346, 2340, 2340, 2346, 2346,
-
-     2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340,
-     2340, 2346, 2340, 2346, 2346, 2346, 2340, 2340, 2340, 2346,
-     2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2340, 2346,
-     2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2340, 2340, 2346, 2340, 2340, 2346, 2346, 2346, 2340,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2340,
-     2340, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2340, 2340, 2340, 2340, 2340, 2346, 2340,
-
-     2340, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2340,
-     2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340,
-     2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
-
-     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346,
-     2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346,
-     2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2340, 2346,
-     2340, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2340,    0,
-     2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
-     2340, 2340, 2340, 2340
+     2349,    1, 2350, 2350, 2351, 2351, 2352, 2352, 2353, 2353,
+     2354, 2354, 2349, 2355, 2349, 2349, 2349, 2349, 2356, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2357, 2349, 2349, 2349, 2357, 2358, 2349, 2349, 2349,
+     2358, 2359, 2349, 2349, 2349, 2349, 2359, 2360, 2349, 2349,
+     2349, 2360, 2361, 2349, 2362, 2349, 2361, 2361, 2355, 2355,
+     2349, 2363, 2356, 2363, 2356, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2357, 2357, 2358, 2358, 2359, 2359, 2349,
+     2360, 2360, 2361, 2361, 2362, 2362, 2361, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2361, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2361, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+     2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+     2361, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2361,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2349, 2355, 2349, 2349, 2355, 2349, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2361, 2355, 2355, 2355,
+     2349, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2361, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355,
+     2349, 2355, 2355, 2355, 2349, 2355, 2349, 2355, 2355, 2349,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2349, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2349, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355,
+
+     2349, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+
+     2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2349, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2355, 2349, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2349,
+
+     2355, 2349, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2349,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2349, 2355,
+     2355, 2355, 2355, 2349, 2355, 2349, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+
+     2355, 2349, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2349,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2349, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2349, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355,
+     2349, 2349, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2349, 2349, 2355, 2349, 2355, 2349, 2349,
+     2355, 2355, 2355, 2349, 2355, 2349, 2355, 2355, 2355, 2355,
+
+     2355, 2349, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355,
+     2349, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2349, 2355, 2355, 2355, 2355, 2349, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2349, 2355, 2355, 2355, 2349, 2349, 2355,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2349, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2349,
+     2349, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2349,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2349, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2349, 2355, 2349, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2355, 2355, 2349, 2355, 2355, 2355, 2349,
+
+     2355, 2349, 2349, 2355, 2349, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2349, 2349, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2349, 2355, 2349, 2355, 2349, 2355, 2349, 2355, 2355, 2355,
+     2349, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2349,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2349, 2355,
+     2349, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2349,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2355, 2349, 2349, 2355, 2349, 2355, 2355, 2349,
+     2355, 2355, 2355, 2355, 2355, 2355, 2349, 2349, 2355, 2355,
+
+     2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2349,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+     2349, 2355, 2349, 2355, 2355, 2355, 2349, 2349, 2349, 2355,
+     2349, 2355, 2355, 2355, 2349, 2355, 2355, 2355, 2349, 2355,
+     2355, 2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2349, 2349, 2355, 2349, 2349, 2355, 2355, 2355, 2349,
+     2355, 2355, 2349, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+     2349, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2349, 2349, 2349, 2349, 2349, 2355,
+
+     2349, 2349, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355,
+     2349, 2355, 2349, 2349, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2349, 2355, 2355, 2355, 2349, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349,
+
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+     2355, 2355, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355,
+     2349, 2355, 2355, 2355, 2355, 2355, 2349, 2355, 2355, 2355,
+     2355, 2355, 2355, 2349, 2355, 2355, 2355, 2349, 2355, 2349,
+     2349, 2355, 2355, 2355, 2355, 2355, 2349, 2349,    0, 2349,
+     2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+     2349, 2349, 2349
     } ;
 
-static yyconst flex_uint16_t yy_nxt[4630] =
+static yyconst flex_uint16_t yy_nxt[4648] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   14,   18,   20,   21,   22,   23,   24,   25,   26,
@@ -1601,7 +1604,7 @@ static yyconst flex_uint16_t yy_nxt[4630] =
      1900,   70,   70, 1895, 1902,   70, 1898, 1903,   70, 1905,
        70, 1901, 1904,   70, 1907,   70,   70, 1908, 1906,   70,
        70,   70,   70,   70, 1909,   70, 1912,   70, 1914, 1911,
-       70, 2340, 1910, 1915,   70,   70, 1913,   70, 1917,   70,
+       70, 2349, 1910, 1915,   70,   70, 1913,   70, 1917,   70,
      1919,   70, 1920, 1922,   70,   70, 1916, 1923,   70, 1918,
        70, 1926, 1924,   70, 1921, 1925, 1929,   70, 1927,   70,
      1928,   70, 1931,   70, 1932,   70, 1930,   70,   70, 1935,
@@ -1625,7 +1628,7 @@ static yyconst flex_uint16_t yy_nxt[4630] =
        70, 2014,   70, 2016,   70, 2006, 2007, 2004, 2011, 2009,
        70, 2017, 2010,   70, 2018,   70,   70,   70, 2013, 2015,
      2019, 2020,   70,   70,   70,   70, 2026,   70,   70,   70,
-       70, 2023, 2027, 2029,   70, 2021, 2340, 2030, 2031,   70,
+       70, 2023, 2027, 2029,   70, 2021, 2349, 2030, 2031,   70,
        70, 2028,   70, 2022, 2024, 2025, 2034, 2032,   70, 2033,
      2035,   70, 2036,   70,   70, 2039,   70,   70, 2043,   70,
      2040,   70, 2037,   70,   70, 2042,   70,   70,   70, 2038,
@@ -1654,65 +1657,67 @@ static yyconst flex_uint16_t yy_nxt[4630] =
 
        70,   70,   70,   70,   70, 2148,   70, 2150,   70,   70,
        70, 2151,   70, 2146, 2149, 2147,   70,   70,   70, 2162,
-       70, 2340, 2160, 2152, 2163,   70, 2153, 2155, 2154, 2157,
+       70, 2349, 2160, 2152, 2163,   70, 2153, 2155, 2154, 2157,
      2158, 2159, 2156,   70, 2165,   70,   70, 2164, 2161, 2166,
        70, 2167, 2168,   70,   70, 2170,   70, 2169,   70, 2173,
        70,   70,   70,   70, 2171,   70, 2175,   70, 2174,   70,
      2179,   70, 2172, 2180,   70,   70, 2178,   70, 2176, 2181,
-       70,   70, 2183, 2177, 2184, 2187, 2182, 2185, 2186,   70,
-       70,   70,   70,   70,   70,   70, 2194,   70, 2191, 2192,
-     2195,   70, 2196,   70,   70, 2189, 2188, 2197,   70, 2198,
-
-       70,   70,   70, 2190, 2193, 2200,   70, 2201,   70, 2202,
-     2199,   70, 2204,   70, 2203, 2206,   70,   70,   70,   70,
-     2212, 2208,   70, 2210,   70,   70,   70, 2211, 2205,   70,
-       70,   70,   70,   70, 2214, 2207, 2218,   70,   70, 2213,
-       70,   70, 2220,   70,   70, 2209,   70, 2217,   70, 2215,
-     2216, 2225,   70, 2227, 2222, 2224,   70,   70, 2226,   70,
-     2219, 2221,   70,   70,   70,   70, 2223, 2229,   70, 2340,
-     2228, 2236,   70,   70,   70, 2238,   70, 2230, 2231, 2233,
-       70, 2239, 2235, 2237,   70, 2234, 2240,   70, 2232, 2241,
-       70,   70, 2242,   70, 2243,   70,   70, 2248, 2244,   70,
-
-     2245, 2250,   70,   70,   70,   70,   70, 2254,   70, 2246,
-       70, 2247,   70, 2249,   70, 2257, 2258,   70, 2255,   70,
-     2252,   70,   70, 2251, 2253,   70,   70,   70, 2259,   70,
-     2260, 2256, 2265, 2264,   70,   70,   70,   70, 2261,   70,
-     2263,   70,   70,   70, 2270, 2262, 2271, 2340, 2267, 2268,
-     2274,   70, 2275, 2266,   70, 2276, 2269,   70,   70,   70,
-     2272,   70, 2273,   70, 2277, 2281, 2278,   70, 2279, 2283,
-       70,   70, 2282,   70,   70,   70, 2280,   70, 2288,   70,
-       70, 2285,   70, 2291,   70,   70,   70,   70,   70,   70,
-     2294,   70, 2284, 2290, 2286,   70, 2287, 2292, 2289,   70,
-
-     2293, 2340, 2297,   70, 2298, 2295, 2296,   70, 2300,   70,
-     2302,   70, 2299,   70, 2304,   70, 2305, 2301, 2303,   70,
-       70, 2309,   70,   70, 2306, 2312,   70, 2307, 2310,   70,
-     2308, 2311,   70,   70,   70,   70,   70, 2318,   70, 2313,
-     2314, 2316,   70,   70,   70,   70,   70,   70, 2320, 2321,
-       70, 2324,   70, 2315, 2317, 2325,   70,   70, 2328, 2329,
-       70, 2319,   70,   70, 2322, 2323, 2326, 2331,   70, 2330,
-     2333, 2327, 2332,   70,   70,   70,   70,   70, 2340, 2334,
-     2335, 2338,   70, 2339,   70, 2340, 2340, 2340, 2340, 2340,
-     2340, 2340, 2340, 2340, 2340, 2336, 2337,   42,   42,   42,
-
-       42,   42,   42,   42,   47,   47,   47,   47,   47,   47,
-       47,   52,   52,   52,   52,   52,   52,   52,   58,   58,
-       58,   58,   58,   58,   58,   63,   63,   63,   63,   63,
-       63,   63,   73,   73, 2340,   73,   73,   73,   73,  134,
-      134, 2340, 2340, 2340,  134,  134,  136,  136, 2340, 2340,
-      136, 2340,  136,  138, 2340, 2340, 2340, 2340, 2340,  138,
-      141,  141, 2340, 2340, 2340,  141,  141,  143, 2340, 2340,
-     2340, 2340, 2340,  143,  145,  145, 2340,  145,  145,  145,
-      145,   74,   74, 2340,   74,   74,   74,   74,   13, 2340,
-     2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
-
-     2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
-     2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
-     2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340
+       70,   70, 2183, 2177, 2184, 2186, 2182, 2185, 2188,   70,
+     2187,   70,   70,   70,   70,   70,   70, 2214, 2192, 2349,
+     2193, 2195,   70,   70, 2190,   70, 2189, 2196,   70, 2197,
+
+       70, 2198,   70, 2191, 2200, 2194, 2199,   70, 2201,   70,
+     2202,   70,   70,   70,   70, 2205,   70, 2207,   70,   70,
+       70,   70,   70, 2209,   70, 2204,   70, 2203,   70, 2211,
+       70, 2206,   70, 2213,   70,   70,   70, 2208, 2215, 2216,
+     2212,   70,   70,   70, 2220, 2217, 2222, 2210,   70,   70,
+     2218, 2219,   70,   70,   70,   70, 2228, 2227,   70, 2221,
+       70, 2230, 2224, 2223, 2226,   70,   70,   70,   70,   70,
+     2229, 2231, 2225,   70, 2239,   70,   70,   70, 2241,   70,
+       70, 2242, 2234,   70, 2232, 2233, 2240,   70, 2236, 2237,
+     2238, 2243,   70, 2235, 2244,   70,   70,   70,   70, 2247,
+
+       70,   70, 2245, 2248, 2252, 2249,   70, 2246, 2254,   70,
+       70,   70,   70,   70, 2258,   70, 2251,   70, 2259,   70,
+     2253,   70, 2250,   70,   70,   70, 2262, 2256, 2263, 2260,
+     2255, 2257,   70,   70,   70,   70,   70, 2264, 2261,   70,
+     2269,   70,   70, 2266,   70, 2267, 2265, 2271,   70, 2268,
+       70,   70,   70,   70,   70, 2349, 2276, 2273, 2277, 2270,
+     2272, 2274, 2280,   70,   70, 2283,   70,   70, 2282, 2275,
+     2278, 2281, 2284, 2279,   70,   70,   70,   70, 2288,   70,
+     2285, 2286,   70, 2291,   70, 2290,   70, 2289,   70,   70,
+       70,   70, 2296,   70,   70, 2299, 2287, 2293,   70,   70,
+
+       70, 2300,   70,   70, 2303,   70,   70, 2292, 2294,   70,
+     2295,   70, 2297, 2298, 2301,   70, 2307, 2302,   70,   70,
+       70, 2311, 2304, 2308, 2306, 2305,   70,   70, 2313,   70,
+     2314,   70, 2309,   70,   70, 2310, 2315, 2318,   70,   70,
+     2316,   70,   70, 2320, 2319, 2312, 2321,   70,   70, 2322,
+       70,   70,   70, 2317,   70, 2323, 2325, 2327,   70,   70,
+       70,   70,   70,   70, 2329, 2330,   70, 2333,   70, 2324,
+     2349, 2326, 2349, 2328, 2334,   70,   70, 2337, 2338,   70,
+     2331, 2332, 2335,   70, 2340,   70,   70, 2336, 2341,   70,
+     2339,   70,   70, 2342,   70,   70, 2343, 2344, 2347,   70,
+
+     2348,   70, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+     2349, 2349, 2349, 2345, 2346,   42,   42,   42,   42,   42,
+       42,   42,   47,   47,   47,   47,   47,   47,   47,   52,
+       52,   52,   52,   52,   52,   52,   58,   58,   58,   58,
+       58,   58,   58,   63,   63,   63,   63,   63,   63,   63,
+       73,   73, 2349,   73,   73,   73,   73,  134,  134, 2349,
+     2349, 2349,  134,  134,  136,  136, 2349, 2349,  136, 2349,
+      136,  138, 2349, 2349, 2349, 2349, 2349,  138,  141,  141,
+     2349, 2349, 2349,  141,  141,  143, 2349, 2349, 2349, 2349,
+     2349,  143,  145,  145, 2349,  145,  145,  145,  145,   74,
+
+       74, 2349,   74,   74,   74,   74,   13, 2349, 2349, 2349,
+     2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+     2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+     2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+     2349, 2349, 2349, 2349, 2349, 2349, 2349
     } ;
 
-static yyconst flex_int16_t yy_chk[4630] =
+static yyconst flex_int16_t yy_chk[4648] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1721,7 +1726,7 @@ static yyconst flex_int16_t yy_chk[4630] =
         3,    3,    3,    4,    4,    4,    5,    5,    6,    6,
         5,    3,    6,   20,    4,   20,   20,    5,   20,    6,
         7,    7,    7,    7,   20,    7,    8,    8,    8,    8,
-     2346,    8,    7,    9,    9,    9,   22,   22,    8,   10,
+     2355,    8,    7,    9,    9,    9,   22,   22,    8,   10,
        10,   10,   15,   25,    9,   21,   15,   25,   21,   21,
        10,   11,   11,   11,   11,   11,   11,   19,   51,   19,
 
@@ -2172,57 +2177,59 @@ static yyconst flex_int16_t yy_chk[4630] =
      2132, 2133, 2133, 2134, 2133, 2136, 2136, 2134, 2138, 2140,
      2140, 2141, 2142, 2143, 2137, 2145, 2142, 2146, 2141, 2147,
      2147, 2150, 2138, 2148, 2148, 2152, 2146, 2151, 2143, 2149,
-     2149, 2155, 2151, 2145, 2152, 2154, 2150, 2152, 2153, 2153,
-     2156, 2154, 2157, 2158, 2159, 2160, 2161, 2161, 2158, 2159,
-     2164, 2164, 2167, 2167, 2175, 2156, 2155, 2168, 2168, 2169,
-
-     2169, 2171, 2176, 2157, 2160, 2172, 2172, 2174, 2174, 2175,
-     2171, 2177, 2177, 2178, 2176, 2179, 2179, 2182, 2183, 2184,
-     2188, 2183, 2185, 2185, 2187, 2189, 2188, 2187, 2178, 2190,
-     2191, 2193, 2192, 2199, 2190, 2182, 2199, 2202, 2203, 2189,
-     2205, 2204, 2203, 2207, 2208, 2184, 2209, 2193, 2213, 2191,
-     2192, 2209, 2211, 2211, 2205, 2208, 2210, 2212, 2210, 2214,
-     2202, 2204, 2215, 2216, 2217, 2218, 2207, 2213, 2219,    0,
-     2212, 2220, 2220, 2226, 2221, 2222, 2222, 2214, 2215, 2217,
-     2223, 2223, 2219, 2221, 2230, 2218, 2224, 2224, 2216, 2225,
-     2225, 2227, 2226, 2228, 2227, 2229, 2231, 2232, 2228, 2233,
-
-     2229, 2234, 2234, 2232, 2235, 2237, 2239, 2242, 2242, 2230,
-     2243, 2231, 2244, 2233, 2247, 2245, 2246, 2248, 2243, 2249,
-     2237, 2245, 2246, 2235, 2239, 2251, 2252, 2255, 2247, 2253,
-     2248, 2244, 2255, 2253, 2256, 2257, 2258, 2259, 2249, 2260,
-     2252, 2261, 2262, 2263, 2260, 2251, 2261,    0, 2257, 2258,
-     2264, 2264, 2265, 2256, 2266, 2266, 2259, 2270, 2265, 2267,
-     2262, 2268, 2263, 2269, 2267, 2271, 2268, 2272, 2269, 2273,
-     2273, 2271, 2272, 2275, 2276, 2277, 2270, 2278, 2279, 2280,
-     2281, 2276, 2282, 2282, 2279, 2285, 2286, 2287, 2284, 2288,
-     2285, 2292, 2275, 2281, 2277, 2291, 2278, 2284, 2280, 2294,
-
-     2284,    0, 2288, 2289, 2289, 2286, 2287, 2290, 2291, 2293,
-     2293, 2299, 2290, 2295, 2295, 2296, 2296, 2292, 2294, 2297,
-     2298, 2300, 2300, 2301, 2297, 2303, 2303, 2298, 2301, 2302,
-     2299, 2302, 2304, 2305, 2306, 2308, 2307, 2310, 2310, 2304,
-     2305, 2307, 2311, 2313, 2314, 2315, 2316, 2320, 2313, 2314,
-     2317, 2317, 2321, 2306, 2308, 2319, 2319, 2322, 2322, 2323,
-     2323, 2311, 2324, 2328, 2315, 2316, 2320, 2326, 2326, 2324,
-     2328, 2321, 2327, 2327, 2330, 2333, 2334, 2335,    0, 2330,
-     2333, 2336, 2336, 2337, 2337,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0, 2334, 2335, 2341, 2341, 2341,
-
-     2341, 2341, 2341, 2341, 2342, 2342, 2342, 2342, 2342, 2342,
-     2342, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2344, 2344,
-     2344, 2344, 2344, 2344, 2344, 2345, 2345, 2345, 2345, 2345,
-     2345, 2345, 2347, 2347,    0, 2347, 2347, 2347, 2347, 2348,
-     2348,    0,    0,    0, 2348, 2348, 2349, 2349,    0,    0,
-     2349,    0, 2349, 2350,    0,    0,    0,    0,    0, 2350,
-     2351, 2351,    0,    0,    0, 2351, 2351, 2352,    0,    0,
-        0,    0,    0, 2352, 2353, 2353,    0, 2353, 2353, 2353,
-     2353, 2354, 2354,    0, 2354, 2354, 2354, 2354, 2340, 2340,
-     2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
-
-     2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
-     2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
-     2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340
+     2149, 2155, 2151, 2145, 2152, 2153, 2150, 2152, 2154, 2156,
+     2153, 2153, 2157, 2158, 2154, 2159, 2160, 2189, 2158,    0,
+     2159, 2161, 2161, 2189, 2156, 2171, 2155, 2164, 2164, 2167,
+
+     2167, 2168, 2168, 2157, 2171, 2160, 2169, 2169, 2172, 2172,
+     2174, 2174, 2175, 2176, 2177, 2177, 2178, 2179, 2179, 2182,
+     2183, 2184, 2186, 2183, 2190, 2176, 2192, 2175, 2185, 2185,
+     2188, 2178, 2193, 2188, 2191, 2194, 2203, 2182, 2190, 2191,
+     2186, 2200, 2204, 2205, 2200, 2192, 2204, 2184, 2206, 2208,
+     2193, 2194, 2210, 2209, 2211, 2212, 2211, 2210, 2214, 2203,
+     2213, 2213, 2206, 2205, 2209, 2215, 2217, 2216, 2218, 2220,
+     2212, 2214, 2208, 2219, 2222, 2222, 2221, 2223, 2224, 2224,
+     2225, 2225, 2217, 2228, 2215, 2216, 2223, 2229, 2219, 2220,
+     2221, 2226, 2226, 2218, 2227, 2227, 2230, 2233, 2231, 2230,
+
+     2232, 2234, 2228, 2231, 2235, 2232, 2236, 2229, 2237, 2237,
+     2235, 2238, 2240, 2242, 2245, 2245, 2234, 2246, 2246, 2248,
+     2236, 2247, 2233, 2251, 2253, 2255, 2249, 2240, 2250, 2247,
+     2238, 2242, 2249, 2252, 2250, 2256, 2257, 2251, 2248, 2259,
+     2257, 2261, 2260, 2253, 2262, 2255, 2252, 2260, 2263, 2256,
+     2264, 2265, 2267, 2266, 2268,    0, 2265, 2262, 2266, 2259,
+     2261, 2263, 2269, 2269, 2272, 2272, 2270, 2273, 2271, 2264,
+     2267, 2270, 2273, 2268, 2271, 2274, 2275, 2276, 2277, 2281,
+     2274, 2275, 2278, 2281, 2277, 2279, 2279, 2278, 2282, 2284,
+     2283, 2285, 2286, 2287, 2289, 2289, 2276, 2283, 2286, 2293,
+
+     2288, 2291, 2291, 2294, 2293, 2292, 2295, 2282, 2284, 2301,
+     2285, 2296, 2287, 2288, 2292, 2297, 2297, 2292, 2298, 2299,
+     2302, 2302, 2294, 2298, 2296, 2295, 2303, 2304, 2304, 2305,
+     2305, 2306, 2299, 2307, 2308, 2301, 2306, 2309, 2309, 2310,
+     2307, 2311, 2313, 2311, 2310, 2303, 2312, 2312, 2314, 2313,
+     2315, 2316, 2317, 2308, 2320, 2314, 2316, 2319, 2319, 2322,
+     2323, 2324, 2325, 2329, 2322, 2323, 2326, 2326, 2330, 2315,
+        0, 2317,    0, 2320, 2328, 2328, 2331, 2331, 2332, 2332,
+     2324, 2325, 2329, 2333, 2335, 2335, 2337, 2330, 2336, 2336,
+     2333, 2339, 2342, 2337, 2343, 2344, 2339, 2342, 2345, 2345,
+
+     2346, 2346,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 2343, 2344, 2350, 2350, 2350, 2350, 2350,
+     2350, 2350, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2352,
+     2352, 2352, 2352, 2352, 2352, 2352, 2353, 2353, 2353, 2353,
+     2353, 2353, 2353, 2354, 2354, 2354, 2354, 2354, 2354, 2354,
+     2356, 2356,    0, 2356, 2356, 2356, 2356, 2357, 2357,    0,
+        0,    0, 2357, 2357, 2358, 2358,    0,    0, 2358,    0,
+     2358, 2359,    0,    0,    0,    0,    0, 2359, 2360, 2360,
+        0,    0,    0, 2360, 2360, 2361,    0,    0,    0,    0,
+        0, 2361, 2362, 2362,    0, 2362, 2362, 2362, 2362, 2363,
+
+     2363,    0, 2363, 2363, 2363, 2363, 2349, 2349, 2349, 2349,
+     2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+     2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+     2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+     2349, 2349, 2349, 2349, 2349, 2349, 2349
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2433,7 +2440,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 2435 "<stdout>"
+#line 2442 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2656,7 +2663,7 @@ YY_DECL
        {
 #line 207 "./util/configlexer.lex"
 
-#line 2658 "<stdout>"
+#line 2665 "<stdout>"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2689,13 +2696,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 >= 2341 )
+                               if ( yy_current_state >= 2350 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 4589 );
+               while ( yy_base[yy_current_state] != 4607 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -3742,110 +3749,115 @@ YY_RULE_SETUP
 case 203:
 YY_RULE_SETUP
 #line 420 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
        YY_BREAK
 case 204:
 YY_RULE_SETUP
-#line 422 "./util/configlexer.lex"
+#line 421 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
+               YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
        YY_BREAK
 case 205:
 YY_RULE_SETUP
-#line 424 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
+#line 423 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
        YY_BREAK
 case 206:
 YY_RULE_SETUP
 #line 425 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
        YY_BREAK
 case 207:
 YY_RULE_SETUP
 #line 426 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
        YY_BREAK
 case 208:
 YY_RULE_SETUP
 #line 427 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
+{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
        YY_BREAK
 case 209:
 YY_RULE_SETUP
 #line 428 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_HOOK) }
+{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
        YY_BREAK
 case 210:
 YY_RULE_SETUP
 #line 429 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
+{ YDVAR(1, VAR_IPSECMOD_HOOK) }
        YY_BREAK
 case 211:
 YY_RULE_SETUP
 #line 430 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
+{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
        YY_BREAK
 case 212:
 YY_RULE_SETUP
 #line 431 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_STRICT) }
+{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
        YY_BREAK
 case 213:
 YY_RULE_SETUP
 #line 432 "./util/configlexer.lex"
-{ YDVAR(0, VAR_CACHEDB) }
+{ YDVAR(1, VAR_IPSECMOD_STRICT) }
        YY_BREAK
 case 214:
 YY_RULE_SETUP
 #line 433 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_BACKEND) }
+{ YDVAR(0, VAR_CACHEDB) }
        YY_BREAK
 case 215:
 YY_RULE_SETUP
 #line 434 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
+{ YDVAR(1, VAR_CACHEDB_BACKEND) }
        YY_BREAK
 case 216:
 YY_RULE_SETUP
 #line 435 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
+{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
        YY_BREAK
 case 217:
-/* rule 217 can match eol */
 YY_RULE_SETUP
 #line 436 "./util/configlexer.lex"
+{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
+       YY_BREAK
+case 218:
+/* rule 218 can match eol */
+YY_RULE_SETUP
+#line 437 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 218:
+case 219:
 YY_RULE_SETUP
-#line 439 "./util/configlexer.lex"
+#line 440 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 440 "./util/configlexer.lex"
+#line 441 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 219:
+case 220:
 YY_RULE_SETUP
-#line 445 "./util/configlexer.lex"
+#line 446 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 220:
-/* rule 220 can match eol */
+case 221:
+/* rule 221 can match eol */
 YY_RULE_SETUP
-#line 446 "./util/configlexer.lex"
+#line 447 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 221:
+case 222:
 YY_RULE_SETUP
-#line 448 "./util/configlexer.lex"
+#line 449 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3858,34 +3870,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 222:
+case 223:
 YY_RULE_SETUP
-#line 460 "./util/configlexer.lex"
+#line 461 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 461 "./util/configlexer.lex"
+#line 462 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 223:
+case 224:
 YY_RULE_SETUP
-#line 466 "./util/configlexer.lex"
+#line 467 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 224:
-/* rule 224 can match eol */
+case 225:
+/* rule 225 can match eol */
 YY_RULE_SETUP
-#line 467 "./util/configlexer.lex"
+#line 468 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 225:
+case 226:
 YY_RULE_SETUP
-#line 469 "./util/configlexer.lex"
+#line 470 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3898,38 +3910,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 226:
+case 227:
 YY_RULE_SETUP
-#line 481 "./util/configlexer.lex"
+#line 482 "./util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 483 "./util/configlexer.lex"
+#line 484 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 227:
-YY_RULE_SETUP
-#line 487 "./util/configlexer.lex"
-{ LEXOUT(("ISP ")); /* ignore */ }
-       YY_BREAK
 case 228:
-/* rule 228 can match eol */
 YY_RULE_SETUP
 #line 488 "./util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+{ LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 229:
+/* rule 229 can match eol */
 YY_RULE_SETUP
 #line 489 "./util/configlexer.lex"
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 230:
 YY_RULE_SETUP
 #line 490 "./util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+       YY_BREAK
+case 231:
+YY_RULE_SETUP
+#line 491 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -3937,27 +3949,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 495 "./util/configlexer.lex"
+#line 496 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 231:
+case 232:
 YY_RULE_SETUP
-#line 499 "./util/configlexer.lex"
+#line 500 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 232:
-/* rule 232 can match eol */
+case 233:
+/* rule 233 can match eol */
 YY_RULE_SETUP
-#line 500 "./util/configlexer.lex"
+#line 501 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 233:
+case 234:
 YY_RULE_SETUP
-#line 502 "./util/configlexer.lex"
+#line 503 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -3967,7 +3979,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 508 "./util/configlexer.lex"
+#line 509 "./util/configlexer.lex"
 {
        LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
@@ -3979,33 +3991,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 234:
+case 235:
 YY_RULE_SETUP
-#line 519 "./util/configlexer.lex"
+#line 520 "./util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 235:
+case 236:
 YY_RULE_SETUP
-#line 523 "./util/configlexer.lex"
+#line 524 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 236:
+case 237:
 YY_RULE_SETUP
-#line 527 "./util/configlexer.lex"
+#line 528 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 237:
+case 238:
 YY_RULE_SETUP
-#line 531 "./util/configlexer.lex"
+#line 532 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 4007 "<stdout>"
+#line 4019 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -4296,7 +4308,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 >= 2341 )
+                       if ( yy_current_state >= 2350 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
@@ -4324,11 +4336,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 >= 2341 )
+               if ( yy_current_state >= 2350 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-       yy_is_jam = (yy_current_state == 2340);
+       yy_is_jam = (yy_current_state == 2349);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4967,7 +4979,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 531 "./util/configlexer.lex"
+#line 532 "./util/configlexer.lex"
 
 
 
index b7b1ae5e89bb4718653ebbb1c0fe3b0c1303c4a9..51758ca518ed206b0232e7c01a9c06732ca7dc4b 100644 (file)
@@ -417,6 +417,7 @@ dnscrypt-port{COLON}                { YDVAR(1, VAR_DNSCRYPT_PORT) }
 dnscrypt-provider{COLON}       { YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
 dnscrypt-secret-key{COLON}     { YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
 dnscrypt-provider-cert{COLON}  { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
+dnscrypt-provider-cert-rotated{COLON}  { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
 dnscrypt-shared-secret-cache-size{COLON}       {
                YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
 dnscrypt-shared-secret-cache-slabs{COLON}      {
index e3da5652947b179bb3fbf3162fb2b59b2473dee8..a9361863dbbab0ba6ee48ea7e06bb501d4a8ee16 100644 (file)
@@ -333,20 +333,21 @@ extern int yydebug;
     VAR_DNSCRYPT_PROVIDER = 462,
     VAR_DNSCRYPT_SECRET_KEY = 463,
     VAR_DNSCRYPT_PROVIDER_CERT = 464,
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 465,
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 466,
-    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 467,
-    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 468,
-    VAR_IPSECMOD_ENABLED = 469,
-    VAR_IPSECMOD_HOOK = 470,
-    VAR_IPSECMOD_IGNORE_BOGUS = 471,
-    VAR_IPSECMOD_MAX_TTL = 472,
-    VAR_IPSECMOD_WHITELIST = 473,
-    VAR_IPSECMOD_STRICT = 474,
-    VAR_CACHEDB = 475,
-    VAR_CACHEDB_BACKEND = 476,
-    VAR_CACHEDB_SECRETSEED = 477,
-    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 478
+    VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 465,
+    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 466,
+    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 467,
+    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 468,
+    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 469,
+    VAR_IPSECMOD_ENABLED = 470,
+    VAR_IPSECMOD_HOOK = 471,
+    VAR_IPSECMOD_IGNORE_BOGUS = 472,
+    VAR_IPSECMOD_MAX_TTL = 473,
+    VAR_IPSECMOD_WHITELIST = 474,
+    VAR_IPSECMOD_STRICT = 475,
+    VAR_CACHEDB = 476,
+    VAR_CACHEDB_BACKEND = 477,
+    VAR_CACHEDB_SECRETSEED = 478,
+    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 479
   };
 #endif
 /* Tokens.  */
@@ -557,20 +558,21 @@ extern int yydebug;
 #define VAR_DNSCRYPT_PROVIDER 462
 #define VAR_DNSCRYPT_SECRET_KEY 463
 #define VAR_DNSCRYPT_PROVIDER_CERT 464
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 465
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 466
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 467
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 468
-#define VAR_IPSECMOD_ENABLED 469
-#define VAR_IPSECMOD_HOOK 470
-#define VAR_IPSECMOD_IGNORE_BOGUS 471
-#define VAR_IPSECMOD_MAX_TTL 472
-#define VAR_IPSECMOD_WHITELIST 473
-#define VAR_IPSECMOD_STRICT 474
-#define VAR_CACHEDB 475
-#define VAR_CACHEDB_BACKEND 476
-#define VAR_CACHEDB_SECRETSEED 477
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 478
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 465
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 466
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 467
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 468
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 469
+#define VAR_IPSECMOD_ENABLED 470
+#define VAR_IPSECMOD_HOOK 471
+#define VAR_IPSECMOD_IGNORE_BOGUS 472
+#define VAR_IPSECMOD_MAX_TTL 473
+#define VAR_IPSECMOD_WHITELIST 474
+#define VAR_IPSECMOD_STRICT 475
+#define VAR_CACHEDB 476
+#define VAR_CACHEDB_BACKEND 477
+#define VAR_CACHEDB_SECRETSEED 478
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 479
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -581,7 +583,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 585 "util/configparser.c" /* yacc.c:355  */
+#line 587 "util/configparser.c" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -598,7 +600,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 602 "util/configparser.c" /* yacc.c:358  */
+#line 604 "util/configparser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -840,21 +842,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   452
+#define YYLAST   454
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  224
+#define YYNTOKENS  225
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  241
+#define YYNNTS  242
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  461
+#define YYNRULES  463
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  692
+#define YYNSTATES  695
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   478
+#define YYMAXUTOK   479
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -910,60 +912,60 @@ static const yytype_uint8 yytranslate[] =
      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
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   157,   157,   157,   158,   158,   159,   159,   160,   160,
-     160,   162,   163,   167,   172,   173,   174,   174,   174,   175,
-     175,   176,   176,   177,   177,   178,   178,   179,   179,   179,
-     180,   180,   180,   181,   181,   182,   182,   183,   183,   184,
-     184,   185,   185,   186,   186,   187,   187,   188,   188,   189,
-     189,   189,   190,   190,   190,   191,   191,   191,   192,   192,
-     193,   193,   194,   194,   195,   195,   196,   196,   196,   197,
-     197,   198,   198,   199,   199,   199,   200,   200,   201,   201,
-     202,   202,   203,   203,   203,   204,   204,   205,   205,   206,
-     206,   207,   207,   208,   208,   209,   209,   209,   210,   210,
-     211,   211,   211,   212,   212,   212,   213,   213,   213,   214,
-     214,   214,   214,   215,   215,   215,   216,   216,   216,   217,
-     217,   218,   218,   219,   219,   220,   220,   221,   221,   221,
-     222,   222,   223,   223,   224,   225,   225,   226,   226,   227,
-     227,   228,   229,   229,   230,   230,   231,   231,   232,   232,
-     232,   233,   233,   234,   234,   235,   235,   236,   236,   237,
-     237,   237,   238,   238,   238,   239,   239,   239,   240,   240,
-     241,   241,   242,   242,   243,   243,   244,   246,   258,   259,
-     260,   260,   260,   260,   260,   261,   263,   275,   276,   277,
-     277,   277,   277,   278,   280,   294,   295,   296,   296,   296,
-     296,   297,   297,   297,   299,   308,   317,   328,   337,   346,
-     355,   366,   375,   386,   399,   414,   425,   442,   459,   472,
-     487,   496,   505,   514,   523,   532,   541,   550,   559,   568,
-     577,   586,   595,   604,   613,   622,   631,   638,   645,   654,
-     663,   672,   686,   695,   704,   713,   720,   727,   753,   761,
-     768,   775,   782,   789,   797,   805,   813,   820,   831,   838,
-     847,   856,   865,   872,   879,   887,   895,   905,   915,   925,
-     938,   949,   957,   970,   979,   988,   997,  1007,  1017,  1025,
-    1038,  1047,  1055,  1064,  1072,  1085,  1094,  1101,  1111,  1121,
-    1131,  1141,  1151,  1161,  1171,  1181,  1188,  1195,  1202,  1211,
-    1220,  1229,  1236,  1246,  1263,  1270,  1288,  1301,  1314,  1323,
-    1332,  1341,  1350,  1360,  1370,  1379,  1388,  1401,  1414,  1423,
-    1430,  1439,  1448,  1457,  1466,  1474,  1487,  1495,  1523,  1530,
-    1545,  1555,  1565,  1572,  1579,  1588,  1602,  1621,  1640,  1652,
-    1664,  1676,  1687,  1706,  1716,  1725,  1733,  1741,  1754,  1767,
-    1780,  1793,  1802,  1811,  1821,  1831,  1844,  1857,  1868,  1881,
-    1892,  1905,  1915,  1922,  1929,  1938,  1948,  1958,  1968,  1975,
-    1982,  1991,  2001,  2011,  2040,  2050,  2058,  2067,  2082,  2091,
-    2096,  2097,  2098,  2098,  2098,  2099,  2099,  2099,  2100,  2100,
-    2102,  2112,  2121,  2128,  2138,  2145,  2152,  2159,  2166,  2171,
-    2172,  2173,  2173,  2174,  2174,  2175,  2175,  2176,  2177,  2178,
-    2179,  2180,  2181,  2183,  2191,  2198,  2206,  2214,  2221,  2228,
-    2237,  2246,  2255,  2264,  2273,  2282,  2287,  2288,  2289,  2291,
-    2297,  2307,  2314,  2323,  2331,  2337,  2338,  2340,  2340,  2340,
-    2341,  2341,  2342,  2343,  2344,  2345,  2347,  2357,  2367,  2374,
-    2381,  2388,  2396,  2409,  2417,  2430,  2435,  2436,  2437,  2437,
-    2439,  2453
+       0,   158,   158,   158,   159,   159,   160,   160,   161,   161,
+     161,   163,   164,   168,   173,   174,   175,   175,   175,   176,
+     176,   177,   177,   178,   178,   179,   179,   180,   180,   180,
+     181,   181,   181,   182,   182,   183,   183,   184,   184,   185,
+     185,   186,   186,   187,   187,   188,   188,   189,   189,   190,
+     190,   190,   191,   191,   191,   192,   192,   192,   193,   193,
+     194,   194,   195,   195,   196,   196,   197,   197,   197,   198,
+     198,   199,   199,   200,   200,   200,   201,   201,   202,   202,
+     203,   203,   204,   204,   204,   205,   205,   206,   206,   207,
+     207,   208,   208,   209,   209,   210,   210,   210,   211,   211,
+     212,   212,   212,   213,   213,   213,   214,   214,   214,   215,
+     215,   215,   215,   216,   216,   216,   217,   217,   217,   218,
+     218,   219,   219,   220,   220,   221,   221,   222,   222,   222,
+     223,   223,   224,   224,   225,   226,   226,   227,   227,   228,
+     228,   229,   230,   230,   231,   231,   232,   232,   233,   233,
+     233,   234,   234,   235,   235,   236,   236,   237,   237,   238,
+     238,   238,   239,   239,   239,   240,   240,   240,   241,   241,
+     242,   242,   243,   243,   244,   244,   245,   247,   259,   260,
+     261,   261,   261,   261,   261,   262,   264,   276,   277,   278,
+     278,   278,   278,   279,   281,   295,   296,   297,   297,   297,
+     297,   298,   298,   298,   300,   309,   318,   329,   338,   347,
+     356,   367,   376,   387,   400,   415,   426,   443,   460,   473,
+     488,   497,   506,   515,   524,   533,   542,   551,   560,   569,
+     578,   587,   596,   605,   614,   623,   632,   639,   646,   655,
+     664,   673,   687,   696,   705,   714,   721,   728,   754,   762,
+     769,   776,   783,   790,   798,   806,   814,   821,   832,   839,
+     848,   857,   866,   873,   880,   888,   896,   906,   916,   926,
+     939,   950,   958,   971,   980,   989,   998,  1008,  1018,  1026,
+    1039,  1048,  1056,  1065,  1073,  1086,  1095,  1102,  1112,  1122,
+    1132,  1142,  1152,  1162,  1172,  1182,  1189,  1196,  1203,  1212,
+    1221,  1230,  1237,  1247,  1264,  1271,  1289,  1302,  1315,  1324,
+    1333,  1342,  1351,  1361,  1371,  1380,  1389,  1402,  1415,  1424,
+    1431,  1440,  1449,  1458,  1467,  1475,  1488,  1496,  1524,  1531,
+    1546,  1556,  1566,  1573,  1580,  1589,  1603,  1622,  1641,  1653,
+    1665,  1677,  1688,  1707,  1717,  1726,  1734,  1742,  1755,  1768,
+    1781,  1794,  1803,  1812,  1822,  1832,  1845,  1858,  1869,  1882,
+    1893,  1906,  1916,  1923,  1930,  1939,  1949,  1959,  1969,  1976,
+    1983,  1992,  2002,  2012,  2041,  2051,  2059,  2068,  2083,  2092,
+    2097,  2098,  2099,  2099,  2099,  2100,  2100,  2100,  2101,  2101,
+    2103,  2113,  2122,  2129,  2139,  2146,  2153,  2160,  2167,  2172,
+    2173,  2174,  2174,  2175,  2175,  2176,  2176,  2177,  2178,  2179,
+    2180,  2181,  2182,  2184,  2192,  2199,  2207,  2215,  2222,  2229,
+    2238,  2247,  2256,  2265,  2274,  2283,  2288,  2289,  2290,  2292,
+    2298,  2308,  2315,  2324,  2332,  2338,  2339,  2341,  2341,  2341,
+    2342,  2342,  2343,  2344,  2345,  2346,  2347,  2349,  2359,  2369,
+    2376,  2385,  2392,  2401,  2409,  2422,  2430,  2443,  2448,  2449,
+    2450,  2450,  2452,  2466
 };
 #endif
 
@@ -1046,6 +1048,7 @@ static const char *const yytname[] =
   "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE", "VAR_SHM_KEY", "VAR_DNSCRYPT",
   "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER",
   "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT",
+  "VAR_DNSCRYPT_PROVIDER_CERT_ROTATED",
   "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE",
   "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS",
   "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS",
@@ -1145,8 +1148,8 @@ static const char *const yytname[] =
   "server_response_ip", "server_response_ip_data", "dnscstart",
   "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
   "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider",
-  "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_secret_key",
-  "dnsc_dnscrypt_shared_secret_cache_size",
+  "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated",
+  "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size",
   "dnsc_dnscrypt_shared_secret_cache_slabs",
   "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs",
   "cachedbstart", "contents_cachedb", "content_cachedb",
@@ -1181,14 +1184,14 @@ static const yytype_uint16 yytoknum[] =
      445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
      455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
      465,   466,   467,   468,   469,   470,   471,   472,   473,   474,
-     475,   476,   477,   478
+     475,   476,   477,   478,   479
 };
 # endif
 
-#define YYPACT_NINF -215
+#define YYPACT_NINF -216
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-215)))
+  (!!((Yystate) == (-216)))
 
 #define YYTABLE_NINF -1
 
@@ -1199,76 +1202,76 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -215,     0,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,   209,   -38,   -34,   -39,   -44,  -130,  -105,  -177,
-    -214,    -1,     2,     3,    29,    30,    32,    33,    34,    35,
-      36,    46,    47,    48,    49,    50,    51,    53,    54,    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,    82,    83,    84,    86,    89,    91,
-      92,    93,    94,    95,    96,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   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,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     239,   240,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,   241,   242,   246,   247,   248,   290,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,   291,   292,   293,
-     294,   295,  -215,  -215,  -215,  -215,  -215,  -215,   296,   297,
-     298,   302,   306,   307,   331,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,   332,   333,   334,   344,   345,   346,   347,
-     348,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-     349,   350,   351,   352,   353,   354,   355,   356,   391,   393,
-     403,   404,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,   405,  -215,  -215,   406,   407,
-     408,   409,   410,   411,   412,   419,   420,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,   421,   423,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,   424,   425,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,   426,   427,   428,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,   429,   430,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,   431,   432,   433,   434,   435,   436,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,   437,  -215,  -215,   438,   439,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,   440,   441,   442,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215
+    -216,     0,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,   210,   -38,   -34,   -39,   -64,  -130,  -105,  -157,
+    -215,    -1,     2,     3,    26,    29,    30,    32,    33,    34,
+      35,    36,    48,    49,    50,    51,    53,    54,    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,    82,    83,    84,    86,    89,    91,    92,
+      93,    94,    95,    96,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   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,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     240,   241,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,   242,   243,   247,   248,   249,   291,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,   292,   293,   294,
+     295,   296,  -216,  -216,  -216,  -216,  -216,  -216,   297,   298,
+     299,   303,   307,   308,   332,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,   333,   334,   335,   345,   346,   347,   348,
+     349,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+     350,   351,   352,   353,   354,   355,   356,   357,   392,   394,
+     404,   405,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,   406,  -216,  -216,   407,   408,
+     409,   410,   411,   412,   413,   414,   421,   422,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,   423,
+     425,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+     426,   427,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,   428,   429,   430,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,   431,   432,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,   433,   434,   435,   436,   437,   438,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,   439,  -216,  -216,
+     440,   441,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,   442,   443,   444,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1277,8 +1280,8 @@ static const yytype_int16 yypact[] =
 static const yytype_uint16 yydefact[] =
 {
        2,     0,     1,    13,   177,   186,   379,   425,   398,   194,
-     434,   455,     3,    15,   179,   188,   196,   381,   400,   427,
-     436,   457,     4,     5,     6,    10,     8,     9,     7,    11,
+     434,   457,     3,    15,   179,   188,   196,   381,   400,   427,
+     436,   459,     4,     5,     6,    10,     8,     9,     7,    11,
       12,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1320,62 +1323,62 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   399,   401,   402,   403,   404,   405,   406,   407,
      408,   409,   410,   411,   412,     0,   426,   428,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   435,   437,   438,
-     439,   441,   440,   442,   443,   444,   445,     0,     0,   456,
-     458,   459,   205,   204,   211,   220,   218,   226,   227,   230,
-     228,   229,   231,   232,   245,   246,   247,   248,   249,   271,
-     272,   273,   278,   279,   223,   280,   281,   284,   282,   283,
-     286,   287,   288,   301,   259,   260,   262,   263,   289,   304,
-     254,   256,   305,   311,   312,   313,   224,   270,   324,   325,
-     255,   319,   241,   219,   250,   302,   308,   290,     0,     0,
-     328,   225,   206,   240,   294,   207,   221,   222,   251,   252,
-     326,   292,   296,   297,   208,   329,   274,   300,   242,   258,
-     306,   307,   310,   318,   253,   322,   320,   321,   264,   269,
-     298,   299,   265,   266,   291,   314,   243,   244,   233,   235,
-     236,   237,   238,   330,   331,   332,   275,   276,   277,   285,
-     333,   334,     0,     0,     0,   293,   267,   430,   343,   347,
-     345,   344,   348,   346,     0,     0,   351,   352,   212,   213,
-     214,   215,   216,   217,   295,   309,   323,   353,   354,   268,
-     335,     0,     0,     0,     0,     0,     0,   315,   316,   317,
-     431,   261,   257,   239,   209,   210,   355,   357,   356,   358,
-     359,   360,   234,   361,   362,   363,   366,   365,   364,   367,
-     368,   369,   370,   371,   372,     0,   376,   377,     0,     0,
-     378,   390,   392,   391,   394,   395,   396,   397,   393,   413,
-     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   429,   446,   447,   448,   450,   449,   451,   452,   453,
-     454,   460,   461,   303,   327,   342,   432,   433,   349,   350,
-     336,   337,     0,     0,     0,   341,   373,   374,   375,   340,
-     338,   339
+       0,     0,     0,     0,     0,     0,     0,     0,   435,   437,
+     438,   439,   441,   442,   440,   443,   444,   445,   446,     0,
+       0,   458,   460,   461,   205,   204,   211,   220,   218,   226,
+     227,   230,   228,   229,   231,   232,   245,   246,   247,   248,
+     249,   271,   272,   273,   278,   279,   223,   280,   281,   284,
+     282,   283,   286,   287,   288,   301,   259,   260,   262,   263,
+     289,   304,   254,   256,   305,   311,   312,   313,   224,   270,
+     324,   325,   255,   319,   241,   219,   250,   302,   308,   290,
+       0,     0,   328,   225,   206,   240,   294,   207,   221,   222,
+     251,   252,   326,   292,   296,   297,   208,   329,   274,   300,
+     242,   258,   306,   307,   310,   318,   253,   322,   320,   321,
+     264,   269,   298,   299,   265,   266,   291,   314,   243,   244,
+     233,   235,   236,   237,   238,   330,   331,   332,   275,   276,
+     277,   285,   333,   334,     0,     0,     0,   293,   267,   430,
+     343,   347,   345,   344,   348,   346,     0,     0,   351,   352,
+     212,   213,   214,   215,   216,   217,   295,   309,   323,   353,
+     354,   268,   335,     0,     0,     0,     0,     0,     0,   315,
+     316,   317,   431,   261,   257,   239,   209,   210,   355,   357,
+     356,   358,   359,   360,   234,   361,   362,   363,   366,   365,
+     364,   367,   368,   369,   370,   371,   372,     0,   376,   377,
+       0,     0,   378,   390,   392,   391,   394,   395,   396,   397,
+     393,   413,   414,   415,   416,   417,   418,   419,   420,   421,
+     422,   423,   424,   429,   447,   448,   449,   452,   450,   451,
+     453,   454,   455,   456,   462,   463,   303,   327,   342,   432,
+     433,   349,   350,   336,   337,     0,     0,     0,   341,   373,
+     374,   375,   340,   338,   339
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
+    -216,  -216
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
@@ -1403,9 +1406,9 @@ static const yytype_int16 yydefgoto[] =
       17,    26,   401,   402,   403,   404,   405,   406,   407,   408,
      409,    18,    27,   422,   423,   424,   425,   426,   427,   428,
      429,   430,   431,   432,   433,   434,    19,    28,   436,   437,
-     350,   351,   352,   353,    20,    29,   447,   448,   449,   450,
-     451,   452,   453,   454,   455,   456,    21,    30,   459,   460,
-     461
+     350,   351,   352,   353,    20,    29,   448,   449,   450,   451,
+     452,   453,   454,   455,   456,   457,   458,    21,    30,   461,
+     462,   463
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1413,62 +1416,62 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint16 yytable[] =
 {
-       2,   378,   354,   435,   355,   356,   367,   457,   458,   462,
-       0,     3,   463,   464,   368,   369,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,   420,   421,   438,   439,
-     440,   441,   442,   443,   444,   445,   446,   379,   380,   465,
-     466,     4,   467,   468,   469,   470,   471,     5,   393,   394,
-     395,   396,   397,   398,   399,   400,   472,   473,   474,   475,
-     476,   477,   381,   478,   479,   357,   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,     6,   505,   506,   507,   358,   508,   359,   370,   509,
-     371,   510,   511,   512,   513,   514,   515,     7,   516,   517,
-     518,   519,   520,   521,   522,   523,   524,   525,   526,   527,
-     382,   383,   528,   529,   530,   531,   532,   533,   534,   535,
-     536,   537,   538,   539,   540,   541,   542,   543,   544,   545,
-     546,   547,   548,   549,   550,     8,   551,   552,   553,   554,
-     555,   556,   557,   558,   559,   384,   560,   561,   562,   563,
-     564,   565,   566,   567,   568,   569,   570,   571,   572,   573,
-     574,   575,   576,   577,   578,   579,   580,   581,   582,   583,
-     584,   585,   586,   587,   588,   589,   590,   591,   592,   593,
-     594,   595,     9,   596,   597,   598,   599,   600,   601,   602,
-     603,   604,   605,   606,    10,   607,   608,   609,   610,   611,
-     612,   613,   614,   615,   616,   617,   618,   619,   620,     0,
-      11,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,   621,
-     622,   623,   624,    59,    60,    61,   625,   626,   627,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     628,   629,   630,   631,   632,   633,   634,   635,   636,   103,
-     104,   105,   637,   106,   107,   108,   638,   639,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   640,   641,   642,   643,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   644,   645,   646,   647,   648,   649,
-     650,   651,   652,   653,   654,   655,   656,   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,   172,   173,
-     174,   657,   175,   658,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   659,   660,   661,   662,   663,   664,   665,
-     666,   667,   668,   185,   186,   187,   188,   189,   190,   669,
-     670,   671,   191,   672,   673,   674,   675,   676,   677,   678,
-     679,   680,   681,   682,   683,   684,   685,   686,   687,   688,
-     689,   690,   691
+       2,   378,   354,   435,   355,   356,   367,   459,   460,   464,
+       0,     3,   465,   466,   368,   369,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,   419,   420,   421,   393,   394,
+     395,   396,   397,   398,   399,   400,   467,   379,   380,   468,
+     469,     4,   470,   471,   472,   473,   474,     5,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   475,   476,
+     477,   478,   381,   479,   480,   357,   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,     6,   506,   507,   508,   358,   509,   359,   370,   510,
+     371,   511,   512,   513,   514,   515,   516,     7,   517,   518,
+     519,   520,   521,   522,   523,   524,   525,   526,   527,   528,
+     382,   383,   529,   530,   531,   532,   533,   534,   535,   536,
+     537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
+     547,   548,   549,   550,   551,     8,   552,   553,   554,   555,
+     556,   557,   558,   559,   560,   384,   561,   562,   563,   564,
+     565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
+     575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
+     585,   586,   587,   588,   589,   590,   591,   592,   593,   594,
+     595,   596,     9,   597,   598,   599,   600,   601,   602,   603,
+     604,   605,   606,   607,    10,   608,   609,   610,   611,   612,
+     613,   614,   615,   616,   617,   618,   619,   620,   621,   622,
+       0,    11,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+     623,   624,   625,   626,    59,    60,    61,   627,   628,   629,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   630,   631,   632,   633,   634,   635,   636,   637,   638,
+     103,   104,   105,   639,   106,   107,   108,   640,   641,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   642,   643,   644,   645,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   646,   647,   648,   649,   650,
+     651,   652,   653,   654,   655,   656,   657,   658,   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,   172,
+     173,   174,   659,   175,   660,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   661,   662,   663,   664,   665,   666,
+     667,   668,   669,   670,   671,   185,   186,   187,   188,   189,
+     190,   672,   673,   674,   191,   675,   676,   677,   678,   679,
+     680,   681,   682,   683,   684,   685,   686,   687,   688,   689,
+     690,   691,   692,   693,   694
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    40,    40,   108,    42,    43,    40,   221,   222,    10,
+       0,    40,    40,   108,    42,    43,    40,   222,   223,    10,
       -1,    11,    10,    10,    48,    49,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,    76,    77,    10,
-      10,    41,    10,    10,    10,    10,    10,    47,    92,    93,
-      94,    95,    96,    97,    98,    99,    10,    10,    10,    10,
+     150,   151,   152,   153,   154,   155,   156,   157,    92,    93,
+      94,    95,    96,    97,    98,    99,    10,    76,    77,    10,
+      10,    41,    10,    10,    10,    10,    10,    47,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,    10,    10,
       10,    10,   101,    10,    10,   103,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
@@ -1484,41 +1487,41 @@ static const yytype_int16 yycheck[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,   192,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,   204,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    -1,
-     220,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    10,
-      10,    10,    10,    44,    45,    46,    10,    10,    10,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,   100,
-     101,   102,    10,   104,   105,   106,    10,    10,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,    10,    10,    10,    10,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,   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,    10,   193,    10,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,   214,   215,   216,   217,   218,   219,    10,
-      10,    10,   223,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10
+      -1,   221,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      10,    10,    10,    10,    44,    45,    46,    10,    10,    10,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+     100,   101,   102,    10,   104,   105,   106,    10,    10,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,    10,    10,    10,    10,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,   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,    10,   193,    10,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,   215,   216,   217,   218,   219,
+     220,    10,    10,    10,   224,    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,   225,     0,    11,    41,    47,    91,   107,   145,   192,
-     204,   220,   226,   227,   230,   233,   236,   414,   425,   440,
-     448,   460,   228,   231,   234,   237,   415,   426,   441,   449,
-     461,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+       0,   226,     0,    11,    41,    47,    91,   107,   145,   192,
+     204,   221,   227,   228,   231,   234,   237,   415,   426,   441,
+     449,   462,   229,   232,   235,   238,   416,   427,   442,   450,
+     463,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    44,
       45,    46,    50,    51,    52,    53,    54,    55,    56,    57,
@@ -1533,35 +1536,35 @@ static const yytype_uint16 yystos[] =
      167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
      177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
      187,   188,   189,   190,   191,   193,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   214,   215,   216,   217,   218,
-     219,   223,   229,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
-     336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
-     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
-     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
-     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
-     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
-     444,   445,   446,   447,    40,    42,    43,   103,   133,   135,
-     232,   396,   397,   398,   399,   400,   401,    40,    48,    49,
-     132,   134,   235,   402,   403,   404,   405,   406,    40,    76,
-      77,   101,   159,   160,   194,   238,   407,   408,   409,   410,
-     411,   412,   413,    92,    93,    94,    95,    96,    97,    98,
-      99,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     199,   200,   201,   202,   203,   215,   216,   217,   218,   219,
+     220,   224,   230,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   338,   339,   340,   341,   342,   343,   344,   345,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
+     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+     445,   446,   447,   448,    40,    42,    43,   103,   133,   135,
+     233,   397,   398,   399,   400,   401,   402,    40,    48,    49,
+     132,   134,   236,   403,   404,   405,   406,   407,    40,    76,
+      77,   101,   159,   160,   194,   239,   408,   409,   410,   411,
+     412,   413,   414,    92,    93,    94,    95,    96,    97,    98,
+      99,   417,   418,   419,   420,   421,   422,   423,   424,   425,
      146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438,   439,   108,   442,   443,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   450,   451,   452,
-     453,   454,   455,   456,   457,   458,   459,   221,   222,   462,
-     463,   464,    10,    10,    10,    10,    10,    10,    10,    10,
+     156,   157,   428,   429,   430,   431,   432,   433,   434,   435,
+     436,   437,   438,   439,   440,   108,   443,   444,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   451,   452,
+     453,   454,   455,   456,   457,   458,   459,   460,   461,   222,
+     223,   464,   465,   466,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
@@ -1584,59 +1587,59 @@ static const yytype_uint16 yystos[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10
+      10,    10,    10,    10,    10
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   224,   225,   225,   226,   226,   226,   226,   226,   226,
-     226,   226,   226,   227,   228,   228,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   230,   231,   231,
-     232,   232,   232,   232,   232,   232,   233,   234,   234,   235,
-     235,   235,   235,   235,   236,   237,   237,   238,   238,   238,
-     238,   238,   238,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   415,   416,   416,   416,   416,   416,   416,   416,   416,
-     417,   418,   419,   420,   421,   422,   423,   424,   425,   426,
-     426,   427,   427,   427,   427,   427,   427,   427,   427,   427,
-     427,   427,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438,   439,   440,   441,   441,   442,   443,
-     444,   445,   446,   447,   448,   449,   449,   450,   450,   450,
-     450,   450,   450,   450,   450,   450,   451,   452,   453,   454,
-     455,   456,   457,   458,   459,   460,   461,   461,   462,   462,
-     463,   464
+       0,   225,   226,   226,   227,   227,   227,   227,   227,   227,
+     227,   227,   227,   228,   229,   229,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   231,   232,   232,
+     233,   233,   233,   233,   233,   233,   234,   235,   235,   236,
+     236,   236,   236,   236,   237,   238,   238,   239,   239,   239,
+     239,   239,   239,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
+     336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
+     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
+     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   416,   417,   417,   417,   417,   417,   417,   417,   417,
+     418,   419,   420,   421,   422,   423,   424,   425,   426,   427,
+     427,   428,   428,   428,   428,   428,   428,   428,   428,   428,
+     428,   428,   428,   429,   430,   431,   432,   433,   434,   435,
+     436,   437,   438,   439,   440,   441,   442,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   450,   451,   451,   451,
+     451,   451,   451,   451,   451,   451,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   463,
+     464,   464,   465,   466
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1686,9 +1689,9 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     1,     2,     0,     1,     2,
        2,     2,     3,     3,     1,     2,     0,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     1,     2,     0,     1,     1,
-       2,     2
+       1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     1,     2,     0,
+       1,     1,     2,     2
 };
 
 
@@ -2365,15 +2368,15 @@ yyreduce:
   switch (yyn)
     {
         case 13:
-#line 168 "./util/configparser.y" /* yacc.c:1646  */
+#line 169 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(server:)\n")); 
        }
-#line 2373 "util/configparser.c" /* yacc.c:1646  */
+#line 2376 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 247 "./util/configparser.y" /* yacc.c:1646  */
+#line 248 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2384,11 +2387,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2388 "util/configparser.c" /* yacc.c:1646  */
+#line 2391 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 264 "./util/configparser.y" /* yacc.c:1646  */
+#line 265 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2399,11 +2402,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2403 "util/configparser.c" /* yacc.c:1646  */
+#line 2406 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 281 "./util/configparser.y" /* yacc.c:1646  */
+#line 282 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_view* s;
                OUTYY(("\nP(view:)\n")); 
@@ -2416,11 +2419,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2420 "util/configparser.c" /* yacc.c:1646  */
+#line 2423 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 204:
-#line 300 "./util/configparser.y" /* yacc.c:1646  */
+#line 301 "./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)
@@ -2428,11 +2431,11 @@ yyreduce:
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2432 "util/configparser.c" /* yacc.c:1646  */
+#line 2435 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 309 "./util/configparser.y" /* yacc.c:1646  */
+#line 310 "./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)
@@ -2440,11 +2443,11 @@ yyreduce:
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2444 "util/configparser.c" /* yacc.c:1646  */
+#line 2447 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 318 "./util/configparser.y" /* yacc.c:1646  */
+#line 319 "./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)
@@ -2454,11 +2457,11 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2458 "util/configparser.c" /* yacc.c:1646  */
+#line 2461 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 207:
-#line 329 "./util/configparser.y" /* yacc.c:1646  */
+#line 330 "./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)
@@ -2466,11 +2469,11 @@ yyreduce:
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2470 "util/configparser.c" /* yacc.c:1646  */
+#line 2473 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 338 "./util/configparser.y" /* yacc.c:1646  */
+#line 339 "./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)
@@ -2478,11 +2481,11 @@ yyreduce:
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2482 "util/configparser.c" /* yacc.c:1646  */
+#line 2485 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 347 "./util/configparser.y" /* yacc.c:1646  */
+#line 348 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2490,11 +2493,11 @@ yyreduce:
                else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2494 "util/configparser.c" /* yacc.c:1646  */
+#line 2497 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 356 "./util/configparser.y" /* yacc.c:1646  */
+#line 357 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); 
                if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -2504,11 +2507,11 @@ yyreduce:
                else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2508 "util/configparser.c" /* yacc.c:1646  */
+#line 2511 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 367 "./util/configparser.y" /* yacc.c:1646  */
+#line 368 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2516,11 +2519,11 @@ yyreduce:
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2520 "util/configparser.c" /* yacc.c:1646  */
+#line 2523 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 212:
-#line 376 "./util/configparser.y" /* yacc.c:1646  */
+#line 377 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
@@ -2530,11 +2533,11 @@ yyreduce:
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
        }
-#line 2534 "util/configparser.c" /* yacc.c:1646  */
+#line 2537 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 213:
-#line 387 "./util/configparser.y" /* yacc.c:1646  */
+#line 388 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
@@ -2545,11 +2548,11 @@ yyreduce:
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
        }
-#line 2549 "util/configparser.c" /* yacc.c:1646  */
+#line 2552 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 214:
-#line 400 "./util/configparser.y" /* yacc.c:1646  */
+#line 401 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
@@ -2563,11 +2566,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 2567 "util/configparser.c" /* yacc.c:1646  */
+#line 2570 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 215:
-#line 415 "./util/configparser.y" /* yacc.c:1646  */
+#line 416 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
@@ -2577,11 +2580,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 2581 "util/configparser.c" /* yacc.c:1646  */
+#line 2584 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 216:
-#line 426 "./util/configparser.y" /* yacc.c:1646  */
+#line 427 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -2597,11 +2600,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 2601 "util/configparser.c" /* yacc.c:1646  */
+#line 2604 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 217:
-#line 443 "./util/configparser.y" /* yacc.c:1646  */
+#line 444 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -2617,11 +2620,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 2621 "util/configparser.c" /* yacc.c:1646  */
+#line 2624 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 218:
-#line 460 "./util/configparser.y" /* yacc.c:1646  */
+#line 461 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2633,11 +2636,11 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 2637 "util/configparser.c" /* yacc.c:1646  */
+#line 2640 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 219:
-#line 473 "./util/configparser.y" /* yacc.c:1646  */
+#line 474 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2651,11 +2654,11 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 2655 "util/configparser.c" /* yacc.c:1646  */
+#line 2658 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 220:
-#line 488 "./util/configparser.y" /* yacc.c:1646  */
+#line 489 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2663,11 +2666,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2667 "util/configparser.c" /* yacc.c:1646  */
+#line 2670 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 221:
-#line 497 "./util/configparser.y" /* yacc.c:1646  */
+#line 498 "./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, 
@@ -2675,11 +2678,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2679 "util/configparser.c" /* yacc.c:1646  */
+#line 2682 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 222:
-#line 506 "./util/configparser.y" /* yacc.c:1646  */
+#line 507 "./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, 
@@ -2687,11 +2690,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2691 "util/configparser.c" /* yacc.c:1646  */
+#line 2694 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 223:
-#line 515 "./util/configparser.y" /* yacc.c:1646  */
+#line 516 "./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)
@@ -2699,11 +2702,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2703 "util/configparser.c" /* yacc.c:1646  */
+#line 2706 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 224:
-#line 524 "./util/configparser.y" /* yacc.c:1646  */
+#line 525 "./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)
@@ -2711,11 +2714,11 @@ yyreduce:
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2715 "util/configparser.c" /* yacc.c:1646  */
+#line 2718 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 225:
-#line 533 "./util/configparser.y" /* yacc.c:1646  */
+#line 534 "./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)
@@ -2723,11 +2726,11 @@ yyreduce:
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2727 "util/configparser.c" /* yacc.c:1646  */
+#line 2730 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 226:
-#line 542 "./util/configparser.y" /* yacc.c:1646  */
+#line 543 "./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)
@@ -2735,11 +2738,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2739 "util/configparser.c" /* yacc.c:1646  */
+#line 2742 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 227:
-#line 551 "./util/configparser.y" /* yacc.c:1646  */
+#line 552 "./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)
@@ -2747,11 +2750,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2751 "util/configparser.c" /* yacc.c:1646  */
+#line 2754 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 228:
-#line 560 "./util/configparser.y" /* yacc.c:1646  */
+#line 561 "./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)
@@ -2759,11 +2762,11 @@ yyreduce:
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2763 "util/configparser.c" /* yacc.c:1646  */
+#line 2766 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 229:
-#line 569 "./util/configparser.y" /* yacc.c:1646  */
+#line 570 "./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)
@@ -2771,11 +2774,11 @@ yyreduce:
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2775 "util/configparser.c" /* yacc.c:1646  */
+#line 2778 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 230:
-#line 578 "./util/configparser.y" /* yacc.c:1646  */
+#line 579 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2783,11 +2786,11 @@ yyreduce:
                else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2787 "util/configparser.c" /* yacc.c:1646  */
+#line 2790 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 231:
-#line 587 "./util/configparser.y" /* yacc.c:1646  */
+#line 588 "./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)
@@ -2795,11 +2798,11 @@ yyreduce:
                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                 free((yyvsp[0].str));
        }
-#line 2799 "util/configparser.c" /* yacc.c:1646  */
+#line 2802 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 232:
-#line 596 "./util/configparser.y" /* yacc.c:1646  */
+#line 597 "./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)
@@ -2807,11 +2810,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2811 "util/configparser.c" /* yacc.c:1646  */
+#line 2814 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 233:
-#line 605 "./util/configparser.y" /* yacc.c:1646  */
+#line 606 "./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)
@@ -2819,11 +2822,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2823 "util/configparser.c" /* yacc.c:1646  */
+#line 2826 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 234:
-#line 614 "./util/configparser.y" /* yacc.c:1646  */
+#line 615 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2831,11 +2834,11 @@ yyreduce:
                else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2835 "util/configparser.c" /* yacc.c:1646  */
+#line 2838 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 235:
-#line 623 "./util/configparser.y" /* yacc.c:1646  */
+#line 624 "./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)
@@ -2843,31 +2846,31 @@ yyreduce:
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2847 "util/configparser.c" /* yacc.c:1646  */
+#line 2850 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 236:
-#line 632 "./util/configparser.y" /* yacc.c:1646  */
+#line 633 "./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 2857 "util/configparser.c" /* yacc.c:1646  */
+#line 2860 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 237:
-#line 639 "./util/configparser.y" /* yacc.c:1646  */
+#line 640 "./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 2867 "util/configparser.c" /* yacc.c:1646  */
+#line 2870 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 238:
-#line 646 "./util/configparser.y" /* yacc.c:1646  */
+#line 647 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2875,11 +2878,11 @@ yyreduce:
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2879 "util/configparser.c" /* yacc.c:1646  */
+#line 2882 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 239:
-#line 655 "./util/configparser.y" /* yacc.c:1646  */
+#line 656 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2887,11 +2890,11 @@ yyreduce:
                else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2891 "util/configparser.c" /* yacc.c:1646  */
+#line 2894 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 240:
-#line 664 "./util/configparser.y" /* yacc.c:1646  */
+#line 665 "./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)
@@ -2899,11 +2902,11 @@ yyreduce:
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2903 "util/configparser.c" /* yacc.c:1646  */
+#line 2906 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 241:
-#line 673 "./util/configparser.y" /* yacc.c:1646  */
+#line 674 "./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)
@@ -2916,11 +2919,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 2920 "util/configparser.c" /* yacc.c:1646  */
+#line 2923 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 242:
-#line 687 "./util/configparser.y" /* yacc.c:1646  */
+#line 688 "./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)
@@ -2928,11 +2931,11 @@ yyreduce:
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2932 "util/configparser.c" /* yacc.c:1646  */
+#line 2935 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 243:
-#line 696 "./util/configparser.y" /* yacc.c:1646  */
+#line 697 "./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)
@@ -2940,11 +2943,11 @@ yyreduce:
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2944 "util/configparser.c" /* yacc.c:1646  */
+#line 2947 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 244:
-#line 705 "./util/configparser.y" /* yacc.c:1646  */
+#line 706 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2952,31 +2955,31 @@ yyreduce:
        else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
        free((yyvsp[0].str));
   }
-#line 2956 "util/configparser.c" /* yacc.c:1646  */
+#line 2959 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 245:
-#line 714 "./util/configparser.y" /* yacc.c:1646  */
+#line 715 "./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 2966 "util/configparser.c" /* yacc.c:1646  */
+#line 2969 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 721 "./util/configparser.y" /* yacc.c:1646  */
+#line 722 "./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 2976 "util/configparser.c" /* yacc.c:1646  */
+#line 2979 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 728 "./util/configparser.y" /* yacc.c:1646  */
+#line 729 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
@@ -3001,105 +3004,105 @@ yyreduce:
                        }
                }
        }
-#line 3005 "util/configparser.c" /* yacc.c:1646  */
+#line 3008 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 754 "./util/configparser.y" /* yacc.c:1646  */
+#line 755 "./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 3016 "util/configparser.c" /* yacc.c:1646  */
+#line 3019 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 249:
-#line 762 "./util/configparser.y" /* yacc.c:1646  */
+#line 763 "./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 3026 "util/configparser.c" /* yacc.c:1646  */
+#line 3029 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 250:
-#line 769 "./util/configparser.y" /* yacc.c:1646  */
+#line 770 "./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 3036 "util/configparser.c" /* yacc.c:1646  */
+#line 3039 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 251:
-#line 776 "./util/configparser.y" /* yacc.c:1646  */
+#line 777 "./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 3046 "util/configparser.c" /* yacc.c:1646  */
+#line 3049 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 252:
-#line 783 "./util/configparser.y" /* yacc.c:1646  */
+#line 784 "./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 3056 "util/configparser.c" /* yacc.c:1646  */
+#line 3059 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 253:
-#line 790 "./util/configparser.y" /* yacc.c:1646  */
+#line 791 "./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 3067 "util/configparser.c" /* yacc.c:1646  */
+#line 3070 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 798 "./util/configparser.y" /* yacc.c:1646  */
+#line 799 "./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 3078 "util/configparser.c" /* yacc.c:1646  */
+#line 3081 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 255:
-#line 806 "./util/configparser.y" /* yacc.c:1646  */
+#line 807 "./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 3089 "util/configparser.c" /* yacc.c:1646  */
+#line 3092 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 814 "./util/configparser.y" /* yacc.c:1646  */
+#line 815 "./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 3099 "util/configparser.c" /* yacc.c:1646  */
+#line 3102 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 821 "./util/configparser.y" /* yacc.c:1646  */
+#line 822 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3109,21 +3112,21 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3113 "util/configparser.c" /* yacc.c:1646  */
+#line 3116 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 258:
-#line 832 "./util/configparser.y" /* yacc.c:1646  */
+#line 833 "./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 3123 "util/configparser.c" /* yacc.c:1646  */
+#line 3126 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 259:
-#line 839 "./util/configparser.y" /* yacc.c:1646  */
+#line 840 "./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)
@@ -3131,11 +3134,11 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3135 "util/configparser.c" /* yacc.c:1646  */
+#line 3138 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 260:
-#line 848 "./util/configparser.y" /* yacc.c:1646  */
+#line 849 "./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)
@@ -3143,11 +3146,11 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3147 "util/configparser.c" /* yacc.c:1646  */
+#line 3150 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 261:
-#line 857 "./util/configparser.y" /* yacc.c:1646  */
+#line 858 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3155,53 +3158,53 @@ yyreduce:
                else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3159 "util/configparser.c" /* yacc.c:1646  */
+#line 3162 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 262:
-#line 866 "./util/configparser.y" /* yacc.c:1646  */
+#line 867 "./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 3169 "util/configparser.c" /* yacc.c:1646  */
+#line 3172 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 263:
-#line 873 "./util/configparser.y" /* yacc.c:1646  */
+#line 874 "./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 3179 "util/configparser.c" /* yacc.c:1646  */
+#line 3182 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 264:
-#line 880 "./util/configparser.y" /* yacc.c:1646  */
+#line 881 "./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 3190 "util/configparser.c" /* yacc.c:1646  */
+#line 3193 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 265:
-#line 888 "./util/configparser.y" /* yacc.c:1646  */
+#line 889 "./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 3201 "util/configparser.c" /* yacc.c:1646  */
+#line 3204 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 266:
-#line 896 "./util/configparser.y" /* yacc.c:1646  */
+#line 897 "./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)
@@ -3210,11 +3213,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3214 "util/configparser.c" /* yacc.c:1646  */
+#line 3217 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 267:
-#line 906 "./util/configparser.y" /* yacc.c:1646  */
+#line 907 "./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)
@@ -3223,11 +3226,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3227 "util/configparser.c" /* yacc.c:1646  */
+#line 3230 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 268:
-#line 916 "./util/configparser.y" /* yacc.c:1646  */
+#line 917 "./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)
@@ -3236,11 +3239,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3240 "util/configparser.c" /* yacc.c:1646  */
+#line 3243 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 269:
-#line 926 "./util/configparser.y" /* yacc.c:1646  */
+#line 927 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3252,11 +3255,11 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3256 "util/configparser.c" /* yacc.c:1646  */
+#line 3259 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 270:
-#line 939 "./util/configparser.y" /* yacc.c:1646  */
+#line 940 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3266,22 +3269,22 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3270 "util/configparser.c" /* yacc.c:1646  */
+#line 3273 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 271:
-#line 950 "./util/configparser.y" /* yacc.c:1646  */
+#line 951 "./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 3281 "util/configparser.c" /* yacc.c:1646  */
+#line 3284 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 272:
-#line 958 "./util/configparser.y" /* yacc.c:1646  */
+#line 959 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3293,11 +3296,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3297 "util/configparser.c" /* yacc.c:1646  */
+#line 3300 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 273:
-#line 971 "./util/configparser.y" /* yacc.c:1646  */
+#line 972 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3305,11 +3308,11 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3309 "util/configparser.c" /* yacc.c:1646  */
+#line 3312 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 274:
-#line 980 "./util/configparser.y" /* yacc.c:1646  */
+#line 981 "./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)
@@ -3317,11 +3320,11 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3321 "util/configparser.c" /* yacc.c:1646  */
+#line 3324 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 275:
-#line 989 "./util/configparser.y" /* yacc.c:1646  */
+#line 990 "./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)
@@ -3329,11 +3332,11 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3333 "util/configparser.c" /* yacc.c:1646  */
+#line 3336 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 276:
-#line 998 "./util/configparser.y" /* yacc.c:1646  */
+#line 999 "./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)
@@ -3342,11 +3345,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3346 "util/configparser.c" /* yacc.c:1646  */
+#line 3349 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 277:
-#line 1008 "./util/configparser.y" /* yacc.c:1646  */
+#line 1009 "./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)
@@ -3355,22 +3358,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3359 "util/configparser.c" /* yacc.c:1646  */
+#line 3362 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 278:
-#line 1018 "./util/configparser.y" /* yacc.c:1646  */
+#line 1019 "./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 3370 "util/configparser.c" /* yacc.c:1646  */
+#line 3373 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 279:
-#line 1026 "./util/configparser.y" /* yacc.c:1646  */
+#line 1027 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3382,11 +3385,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3386 "util/configparser.c" /* yacc.c:1646  */
+#line 3389 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 1039 "./util/configparser.y" /* yacc.c:1646  */
+#line 1040 "./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)
@@ -3394,22 +3397,22 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3398 "util/configparser.c" /* yacc.c:1646  */
+#line 3401 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 1048 "./util/configparser.y" /* yacc.c:1646  */
+#line 1049 "./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 3409 "util/configparser.c" /* yacc.c:1646  */
+#line 3412 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 1056 "./util/configparser.y" /* yacc.c:1646  */
+#line 1057 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3417,22 +3420,22 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3421 "util/configparser.c" /* yacc.c:1646  */
+#line 3424 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 1065 "./util/configparser.y" /* yacc.c:1646  */
+#line 1066 "./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 3432 "util/configparser.c" /* yacc.c:1646  */
+#line 3435 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 1073 "./util/configparser.y" /* yacc.c:1646  */
+#line 1074 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3444,11 +3447,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3448 "util/configparser.c" /* yacc.c:1646  */
+#line 3451 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 1086 "./util/configparser.y" /* yacc.c:1646  */
+#line 1087 "./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)
@@ -3456,21 +3459,21 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3460 "util/configparser.c" /* yacc.c:1646  */
+#line 3463 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 1095 "./util/configparser.y" /* yacc.c:1646  */
+#line 1096 "./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 3470 "util/configparser.c" /* yacc.c:1646  */
+#line 3473 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 1102 "./util/configparser.y" /* yacc.c:1646  */
+#line 1103 "./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)
@@ -3479,11 +3482,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3483 "util/configparser.c" /* yacc.c:1646  */
+#line 3486 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 1112 "./util/configparser.y" /* yacc.c:1646  */
+#line 1113 "./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)
@@ -3492,11 +3495,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3496 "util/configparser.c" /* yacc.c:1646  */
+#line 3499 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 1122 "./util/configparser.y" /* yacc.c:1646  */
+#line 1123 "./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)
@@ -3505,11 +3508,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3509 "util/configparser.c" /* yacc.c:1646  */
+#line 3512 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 1132 "./util/configparser.y" /* yacc.c:1646  */
+#line 1133 "./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)
@@ -3518,11 +3521,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3522 "util/configparser.c" /* yacc.c:1646  */
+#line 3525 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 1142 "./util/configparser.y" /* yacc.c:1646  */
+#line 1143 "./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)
@@ -3531,11 +3534,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3535 "util/configparser.c" /* yacc.c:1646  */
+#line 3538 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 1152 "./util/configparser.y" /* yacc.c:1646  */
+#line 1153 "./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)
@@ -3544,11 +3547,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3548 "util/configparser.c" /* yacc.c:1646  */
+#line 3551 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 1162 "./util/configparser.y" /* yacc.c:1646  */
+#line 1163 "./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)
@@ -3557,11 +3560,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3561 "util/configparser.c" /* yacc.c:1646  */
+#line 3564 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 1172 "./util/configparser.y" /* yacc.c:1646  */
+#line 1173 "./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)
@@ -3570,41 +3573,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3574 "util/configparser.c" /* yacc.c:1646  */
+#line 3577 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 295:
-#line 1182 "./util/configparser.y" /* yacc.c:1646  */
+#line 1183 "./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 3584 "util/configparser.c" /* yacc.c:1646  */
+#line 3587 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 296:
-#line 1189 "./util/configparser.y" /* yacc.c:1646  */
+#line 1190 "./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 3594 "util/configparser.c" /* yacc.c:1646  */
+#line 3597 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 297:
-#line 1196 "./util/configparser.y" /* yacc.c:1646  */
+#line 1197 "./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 3604 "util/configparser.c" /* yacc.c:1646  */
+#line 3607 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 298:
-#line 1203 "./util/configparser.y" /* yacc.c:1646  */
+#line 1204 "./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)
@@ -3612,11 +3615,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3616 "util/configparser.c" /* yacc.c:1646  */
+#line 3619 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 299:
-#line 1212 "./util/configparser.y" /* yacc.c:1646  */
+#line 1213 "./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)
@@ -3624,11 +3627,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3628 "util/configparser.c" /* yacc.c:1646  */
+#line 3631 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 300:
-#line 1221 "./util/configparser.y" /* yacc.c:1646  */
+#line 1222 "./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)
@@ -3636,21 +3639,21 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3640 "util/configparser.c" /* yacc.c:1646  */
+#line 3643 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 301:
-#line 1230 "./util/configparser.y" /* yacc.c:1646  */
+#line 1231 "./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 3650 "util/configparser.c" /* yacc.c:1646  */
+#line 3653 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 302:
-#line 1237 "./util/configparser.y" /* yacc.c:1646  */
+#line 1238 "./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)
@@ -3659,11 +3662,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3663 "util/configparser.c" /* yacc.c:1646  */
+#line 3666 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 303:
-#line 1247 "./util/configparser.y" /* yacc.c:1646  */
+#line 1248 "./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 &&
@@ -3679,21 +3682,21 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 3683 "util/configparser.c" /* yacc.c:1646  */
+#line 3686 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 304:
-#line 1264 "./util/configparser.y" /* yacc.c:1646  */
+#line 1265 "./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 3693 "util/configparser.c" /* yacc.c:1646  */
+#line 3696 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 305:
-#line 1271 "./util/configparser.y" /* yacc.c:1646  */
+#line 1272 "./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) {
@@ -3710,11 +3713,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3714 "util/configparser.c" /* yacc.c:1646  */
+#line 3717 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 306:
-#line 1289 "./util/configparser.y" /* yacc.c:1646  */
+#line 1290 "./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) {
@@ -3726,11 +3729,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3730 "util/configparser.c" /* yacc.c:1646  */
+#line 3733 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 307:
-#line 1302 "./util/configparser.y" /* yacc.c:1646  */
+#line 1303 "./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) {
@@ -3742,11 +3745,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3746 "util/configparser.c" /* yacc.c:1646  */
+#line 3749 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 308:
-#line 1315 "./util/configparser.y" /* yacc.c:1646  */
+#line 1316 "./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)
@@ -3754,11 +3757,11 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3758 "util/configparser.c" /* yacc.c:1646  */
+#line 3761 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 309:
-#line 1324 "./util/configparser.y" /* yacc.c:1646  */
+#line 1325 "./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)
@@ -3766,11 +3769,11 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3770 "util/configparser.c" /* yacc.c:1646  */
+#line 3773 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 310:
-#line 1333 "./util/configparser.y" /* yacc.c:1646  */
+#line 1334 "./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)
@@ -3778,11 +3781,11 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3782 "util/configparser.c" /* yacc.c:1646  */
+#line 3785 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 311:
-#line 1342 "./util/configparser.y" /* yacc.c:1646  */
+#line 1343 "./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)
@@ -3790,11 +3793,11 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3794 "util/configparser.c" /* yacc.c:1646  */
+#line 3797 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 312:
-#line 1351 "./util/configparser.y" /* yacc.c:1646  */
+#line 1352 "./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)
@@ -3803,11 +3806,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3807 "util/configparser.c" /* yacc.c:1646  */
+#line 3810 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 313:
-#line 1361 "./util/configparser.y" /* yacc.c:1646  */
+#line 1362 "./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)
@@ -3816,11 +3819,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3820 "util/configparser.c" /* yacc.c:1646  */
+#line 3823 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 314:
-#line 1371 "./util/configparser.y" /* yacc.c:1646  */
+#line 1372 "./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)
@@ -3828,11 +3831,11 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3832 "util/configparser.c" /* yacc.c:1646  */
+#line 3835 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 315:
-#line 1380 "./util/configparser.y" /* yacc.c:1646  */
+#line 1381 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3840,11 +3843,11 @@ yyreduce:
                else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3844 "util/configparser.c" /* yacc.c:1646  */
+#line 3847 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 316:
-#line 1389 "./util/configparser.y" /* yacc.c:1646  */
+#line 1390 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3856,11 +3859,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 3860 "util/configparser.c" /* yacc.c:1646  */
+#line 3863 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 317:
-#line 1402 "./util/configparser.y" /* yacc.c:1646  */
+#line 1403 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3872,11 +3875,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 3876 "util/configparser.c" /* yacc.c:1646  */
+#line 3879 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 318:
-#line 1415 "./util/configparser.y" /* yacc.c:1646  */
+#line 1416 "./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)
@@ -3884,21 +3887,21 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3888 "util/configparser.c" /* yacc.c:1646  */
+#line 3891 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 319:
-#line 1424 "./util/configparser.y" /* yacc.c:1646  */
+#line 1425 "./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 3898 "util/configparser.c" /* yacc.c:1646  */
+#line 3901 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 320:
-#line 1431 "./util/configparser.y" /* yacc.c:1646  */
+#line 1432 "./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)
@@ -3906,11 +3909,11 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3910 "util/configparser.c" /* yacc.c:1646  */
+#line 3913 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 321:
-#line 1440 "./util/configparser.y" /* yacc.c:1646  */
+#line 1441 "./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)
@@ -3918,11 +3921,11 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3922 "util/configparser.c" /* yacc.c:1646  */
+#line 3925 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 322:
-#line 1449 "./util/configparser.y" /* yacc.c:1646  */
+#line 1450 "./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)
@@ -3930,11 +3933,11 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3934 "util/configparser.c" /* yacc.c:1646  */
+#line 3937 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 323:
-#line 1458 "./util/configparser.y" /* yacc.c:1646  */
+#line 1459 "./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)
@@ -3943,22 +3946,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3947 "util/configparser.c" /* yacc.c:1646  */
+#line 3950 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 324:
-#line 1467 "./util/configparser.y" /* yacc.c:1646  */
+#line 1468 "./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 3958 "util/configparser.c" /* yacc.c:1646  */
+#line 3961 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 325:
-#line 1475 "./util/configparser.y" /* yacc.c:1646  */
+#line 1476 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3970,22 +3973,22 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3974 "util/configparser.c" /* yacc.c:1646  */
+#line 3977 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 326:
-#line 1488 "./util/configparser.y" /* yacc.c:1646  */
+#line 1489 "./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 3985 "util/configparser.c" /* yacc.c:1646  */
+#line 3988 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 327:
-#line 1496 "./util/configparser.y" /* yacc.c:1646  */
+#line 1497 "./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 &&
@@ -4012,21 +4015,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 4016 "util/configparser.c" /* yacc.c:1646  */
+#line 4019 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 328:
-#line 1524 "./util/configparser.y" /* yacc.c:1646  */
+#line 1525 "./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 4026 "util/configparser.c" /* yacc.c:1646  */
+#line 4029 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 329:
-#line 1531 "./util/configparser.y" /* yacc.c:1646  */
+#line 1532 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -4040,11 +4043,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 4044 "util/configparser.c" /* yacc.c:1646  */
+#line 4047 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 330:
-#line 1546 "./util/configparser.y" /* yacc.c:1646  */
+#line 1547 "./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)
@@ -4053,11 +4056,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4057 "util/configparser.c" /* yacc.c:1646  */
+#line 4060 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 331:
-#line 1556 "./util/configparser.y" /* yacc.c:1646  */
+#line 1557 "./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)
@@ -4066,31 +4069,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4070 "util/configparser.c" /* yacc.c:1646  */
+#line 4073 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 332:
-#line 1566 "./util/configparser.y" /* yacc.c:1646  */
+#line 1567 "./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 4080 "util/configparser.c" /* yacc.c:1646  */
+#line 4083 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 333:
-#line 1573 "./util/configparser.y" /* yacc.c:1646  */
+#line 1574 "./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 4090 "util/configparser.c" /* yacc.c:1646  */
+#line 4093 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 334:
-#line 1580 "./util/configparser.y" /* yacc.c:1646  */
+#line 1581 "./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)
@@ -4098,11 +4101,11 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4102 "util/configparser.c" /* yacc.c:1646  */
+#line 4105 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 335:
-#line 1589 "./util/configparser.y" /* yacc.c:1646  */
+#line 1590 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -4115,11 +4118,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4119 "util/configparser.c" /* yacc.c:1646  */
+#line 4122 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 336:
-#line 1603 "./util/configparser.y" /* yacc.c:1646  */
+#line 1604 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4137,11 +4140,11 @@ yyreduce:
                        }
                }
        }
-#line 4141 "util/configparser.c" /* yacc.c:1646  */
+#line 4144 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 337:
-#line 1622 "./util/configparser.y" /* yacc.c:1646  */
+#line 1623 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4159,11 +4162,11 @@ yyreduce:
                        }
                }
        }
-#line 4163 "util/configparser.c" /* yacc.c:1646  */
+#line 4166 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 338:
-#line 1641 "./util/configparser.y" /* yacc.c:1646  */
+#line 1642 "./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,
@@ -4174,11 +4177,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4178 "util/configparser.c" /* yacc.c:1646  */
+#line 4181 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 339:
-#line 1653 "./util/configparser.y" /* yacc.c:1646  */
+#line 1654 "./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,
@@ -4189,11 +4192,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4193 "util/configparser.c" /* yacc.c:1646  */
+#line 4196 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 340:
-#line 1665 "./util/configparser.y" /* yacc.c:1646  */
+#line 1666 "./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,
@@ -4204,11 +4207,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4208 "util/configparser.c" /* yacc.c:1646  */
+#line 4211 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 341:
-#line 1677 "./util/configparser.y" /* yacc.c:1646  */
+#line 1678 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
@@ -4218,11 +4221,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4222 "util/configparser.c" /* yacc.c:1646  */
+#line 4225 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 342:
-#line 1688 "./util/configparser.y" /* yacc.c:1646  */
+#line 1689 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4240,11 +4243,11 @@ yyreduce:
                        }
                }
        }
-#line 4244 "util/configparser.c" /* yacc.c:1646  */
+#line 4247 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 343:
-#line 1707 "./util/configparser.y" /* yacc.c:1646  */
+#line 1708 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4252,11 +4255,11 @@ yyreduce:
                else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4256 "util/configparser.c" /* yacc.c:1646  */
+#line 4259 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 344:
-#line 1717 "./util/configparser.y" /* yacc.c:1646  */
+#line 1718 "./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)
@@ -4264,33 +4267,33 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4268 "util/configparser.c" /* yacc.c:1646  */
+#line 4271 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 345:
-#line 1726 "./util/configparser.y" /* yacc.c:1646  */
+#line 1727 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
        if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
                yyerror("memory size expected");
        free((yyvsp[0].str));
   }
-#line 4279 "util/configparser.c" /* yacc.c:1646  */
+#line 4282 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 346:
-#line 1734 "./util/configparser.y" /* yacc.c:1646  */
+#line 1735 "./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 4290 "util/configparser.c" /* yacc.c:1646  */
+#line 4293 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 347:
-#line 1742 "./util/configparser.y" /* yacc.c:1646  */
+#line 1743 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -4302,11 +4305,11 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 4306 "util/configparser.c" /* yacc.c:1646  */
+#line 4309 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 348:
-#line 1755 "./util/configparser.y" /* yacc.c:1646  */
+#line 1756 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4318,11 +4321,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4322 "util/configparser.c" /* yacc.c:1646  */
+#line 4325 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 349:
-#line 1768 "./util/configparser.y" /* yacc.c:1646  */
+#line 1769 "./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) {
@@ -4334,11 +4337,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 4338 "util/configparser.c" /* yacc.c:1646  */
+#line 4341 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 350:
-#line 1781 "./util/configparser.y" /* yacc.c:1646  */
+#line 1782 "./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) {
@@ -4350,11 +4353,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 4354 "util/configparser.c" /* yacc.c:1646  */
+#line 4357 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 351:
-#line 1794 "./util/configparser.y" /* yacc.c:1646  */
+#line 1795 "./util/configparser.y" /* yacc.c:1646  */
     { 
        OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
        if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4362,11 +4365,11 @@ yyreduce:
        else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
        free((yyvsp[0].str));
        }
-#line 4366 "util/configparser.c" /* yacc.c:1646  */
+#line 4369 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 352:
-#line 1803 "./util/configparser.y" /* yacc.c:1646  */
+#line 1804 "./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)
@@ -4374,11 +4377,11 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4378 "util/configparser.c" /* yacc.c:1646  */
+#line 4381 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 353:
-#line 1812 "./util/configparser.y" /* yacc.c:1646  */
+#line 1813 "./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)
@@ -4387,11 +4390,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4391 "util/configparser.c" /* yacc.c:1646  */
+#line 4394 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 354:
-#line 1822 "./util/configparser.y" /* yacc.c:1646  */
+#line 1823 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4400,11 +4403,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4404 "util/configparser.c" /* yacc.c:1646  */
+#line 4407 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 355:
-#line 1832 "./util/configparser.y" /* yacc.c:1646  */
+#line 1833 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
@@ -4416,11 +4419,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4420 "util/configparser.c" /* yacc.c:1646  */
+#line 4423 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 356:
-#line 1845 "./util/configparser.y" /* yacc.c:1646  */
+#line 1846 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
@@ -4432,11 +4435,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4436 "util/configparser.c" /* yacc.c:1646  */
+#line 4439 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 357:
-#line 1858 "./util/configparser.y" /* yacc.c:1646  */
+#line 1859 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -4446,11 +4449,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4450 "util/configparser.c" /* yacc.c:1646  */
+#line 4453 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 358:
-#line 1869 "./util/configparser.y" /* yacc.c:1646  */
+#line 1870 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -4462,11 +4465,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4466 "util/configparser.c" /* yacc.c:1646  */
+#line 4469 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 359:
-#line 1882 "./util/configparser.y" /* yacc.c:1646  */
+#line 1883 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -4476,11 +4479,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4480 "util/configparser.c" /* yacc.c:1646  */
+#line 4483 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 360:
-#line 1893 "./util/configparser.y" /* yacc.c:1646  */
+#line 1894 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -4492,11 +4495,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4496 "util/configparser.c" /* yacc.c:1646  */
+#line 4499 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 361:
-#line 1906 "./util/configparser.y" /* yacc.c:1646  */
+#line 1907 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -4505,31 +4508,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 4509 "util/configparser.c" /* yacc.c:1646  */
+#line 4512 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 362:
-#line 1916 "./util/configparser.y" /* yacc.c:1646  */
+#line 1917 "./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 4519 "util/configparser.c" /* yacc.c:1646  */
+#line 4522 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 363:
-#line 1923 "./util/configparser.y" /* yacc.c:1646  */
+#line 1924 "./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 4529 "util/configparser.c" /* yacc.c:1646  */
+#line 4532 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 364:
-#line 1930 "./util/configparser.y" /* yacc.c:1646  */
+#line 1931 "./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)
@@ -4537,11 +4540,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4541 "util/configparser.c" /* yacc.c:1646  */
+#line 4544 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 365:
-#line 1939 "./util/configparser.y" /* yacc.c:1646  */
+#line 1940 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4550,11 +4553,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4554 "util/configparser.c" /* yacc.c:1646  */
+#line 4557 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 366:
-#line 1949 "./util/configparser.y" /* yacc.c:1646  */
+#line 1950 "./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)
@@ -4563,11 +4566,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4567 "util/configparser.c" /* yacc.c:1646  */
+#line 4570 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 367:
-#line 1959 "./util/configparser.y" /* yacc.c:1646  */
+#line 1960 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -4576,31 +4579,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 4580 "util/configparser.c" /* yacc.c:1646  */
+#line 4583 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 368:
-#line 1969 "./util/configparser.y" /* yacc.c:1646  */
+#line 1970 "./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 4590 "util/configparser.c" /* yacc.c:1646  */
+#line 4593 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 369:
-#line 1976 "./util/configparser.y" /* yacc.c:1646  */
+#line 1977 "./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 4600 "util/configparser.c" /* yacc.c:1646  */
+#line 4603 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 370:
-#line 1983 "./util/configparser.y" /* yacc.c:1646  */
+#line 1984 "./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)
@@ -4608,11 +4611,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4612 "util/configparser.c" /* yacc.c:1646  */
+#line 4615 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 371:
-#line 1992 "./util/configparser.y" /* yacc.c:1646  */
+#line 1993 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4621,11 +4624,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4625 "util/configparser.c" /* yacc.c:1646  */
+#line 4628 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 372:
-#line 2002 "./util/configparser.y" /* yacc.c:1646  */
+#line 2003 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->views->name)
@@ -4634,11 +4637,11 @@ yyreduce:
                free(cfg_parser->cfg->views->name);
                cfg_parser->cfg->views->name = (yyvsp[0].str);
        }
-#line 4638 "util/configparser.c" /* yacc.c:1646  */
+#line 4641 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 373:
-#line 2012 "./util/configparser.y" /* yacc.c:1646  */
+#line 2013 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -4666,11 +4669,11 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 4670 "util/configparser.c" /* yacc.c:1646  */
+#line 4673 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 374:
-#line 2041 "./util/configparser.y" /* yacc.c:1646  */
+#line 2042 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
@@ -4679,22 +4682,22 @@ yyreduce:
                        fatal_exit("out of memory adding per-view "
                                "response-ip action");
        }
-#line 4683 "util/configparser.c" /* yacc.c:1646  */
+#line 4686 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 375:
-#line 2051 "./util/configparser.y" /* yacc.c:1646  */
+#line 2052 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
                if(!cfg_str2list_insert(
                        &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip-data");
        }
-#line 4694 "util/configparser.c" /* yacc.c:1646  */
+#line 4697 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 376:
-#line 2059 "./util/configparser.y" /* yacc.c:1646  */
+#line 2060 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
@@ -4702,11 +4705,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4706 "util/configparser.c" /* yacc.c:1646  */
+#line 4709 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 377:
-#line 2068 "./util/configparser.y" /* yacc.c:1646  */
+#line 2069 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -4720,11 +4723,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 4724 "util/configparser.c" /* yacc.c:1646  */
+#line 4727 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 378:
-#line 2083 "./util/configparser.y" /* yacc.c:1646  */
+#line 2084 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4732,19 +4735,19 @@ yyreduce:
                else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4736 "util/configparser.c" /* yacc.c:1646  */
+#line 4739 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 379:
-#line 2092 "./util/configparser.y" /* yacc.c:1646  */
+#line 2093 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 4744 "util/configparser.c" /* yacc.c:1646  */
+#line 4747 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 390:
-#line 2103 "./util/configparser.y" /* yacc.c:1646  */
+#line 2104 "./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)
@@ -4753,11 +4756,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4757 "util/configparser.c" /* yacc.c:1646  */
+#line 4760 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 391:
-#line 2113 "./util/configparser.y" /* yacc.c:1646  */
+#line 2114 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4765,21 +4768,21 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4769 "util/configparser.c" /* yacc.c:1646  */
+#line 4772 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 392:
-#line 2122 "./util/configparser.y" /* yacc.c:1646  */
+#line 2123 "./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 4779 "util/configparser.c" /* yacc.c:1646  */
+#line 4782 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 393:
-#line 2129 "./util/configparser.y" /* yacc.c:1646  */
+#line 2130 "./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)
@@ -4788,122 +4791,122 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4792 "util/configparser.c" /* yacc.c:1646  */
+#line 4795 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 394:
-#line 2139 "./util/configparser.y" /* yacc.c:1646  */
+#line 2140 "./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 4802 "util/configparser.c" /* yacc.c:1646  */
+#line 4805 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 395:
-#line 2146 "./util/configparser.y" /* yacc.c:1646  */
+#line 2147 "./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 4812 "util/configparser.c" /* yacc.c:1646  */
+#line 4815 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 396:
-#line 2153 "./util/configparser.y" /* yacc.c:1646  */
+#line 2154 "./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 4822 "util/configparser.c" /* yacc.c:1646  */
+#line 4825 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 397:
-#line 2160 "./util/configparser.y" /* yacc.c:1646  */
+#line 2161 "./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 4832 "util/configparser.c" /* yacc.c:1646  */
+#line 4835 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 398:
-#line 2167 "./util/configparser.y" /* yacc.c:1646  */
+#line 2168 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 4840 "util/configparser.c" /* yacc.c:1646  */
+#line 4843 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 413:
-#line 2184 "./util/configparser.y" /* yacc.c:1646  */
+#line 2185 "./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 4851 "util/configparser.c" /* yacc.c:1646  */
+#line 4854 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 414:
-#line 2192 "./util/configparser.y" /* yacc.c:1646  */
+#line 2193 "./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 4861 "util/configparser.c" /* yacc.c:1646  */
+#line 4864 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 415:
-#line 2199 "./util/configparser.y" /* yacc.c:1646  */
+#line 2200 "./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 4872 "util/configparser.c" /* yacc.c:1646  */
+#line 4875 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 416:
-#line 2207 "./util/configparser.y" /* yacc.c:1646  */
+#line 2208 "./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 4883 "util/configparser.c" /* yacc.c:1646  */
+#line 4886 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 417:
-#line 2215 "./util/configparser.y" /* yacc.c:1646  */
+#line 2216 "./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 4893 "util/configparser.c" /* yacc.c:1646  */
+#line 4896 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 418:
-#line 2222 "./util/configparser.y" /* yacc.c:1646  */
+#line 2223 "./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 4903 "util/configparser.c" /* yacc.c:1646  */
+#line 4906 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 419:
-#line 2229 "./util/configparser.y" /* yacc.c:1646  */
+#line 2230 "./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)
@@ -4911,11 +4914,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4915 "util/configparser.c" /* yacc.c:1646  */
+#line 4918 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 420:
-#line 2238 "./util/configparser.y" /* yacc.c:1646  */
+#line 2239 "./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)
@@ -4923,11 +4926,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4927 "util/configparser.c" /* yacc.c:1646  */
+#line 4930 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 421:
-#line 2247 "./util/configparser.y" /* yacc.c:1646  */
+#line 2248 "./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)
@@ -4935,11 +4938,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4939 "util/configparser.c" /* yacc.c:1646  */
+#line 4942 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 422:
-#line 2256 "./util/configparser.y" /* yacc.c:1646  */
+#line 2257 "./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)
@@ -4947,11 +4950,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4951 "util/configparser.c" /* yacc.c:1646  */
+#line 4954 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 423:
-#line 2265 "./util/configparser.y" /* yacc.c:1646  */
+#line 2266 "./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)
@@ -4959,11 +4962,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4963 "util/configparser.c" /* yacc.c:1646  */
+#line 4966 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 424:
-#line 2274 "./util/configparser.y" /* yacc.c:1646  */
+#line 2275 "./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)
@@ -4971,29 +4974,29 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4975 "util/configparser.c" /* yacc.c:1646  */
+#line 4978 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 425:
-#line 2283 "./util/configparser.y" /* yacc.c:1646  */
+#line 2284 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 4983 "util/configparser.c" /* yacc.c:1646  */
+#line 4986 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 429:
-#line 2292 "./util/configparser.y" /* yacc.c:1646  */
+#line 2293 "./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 4993 "util/configparser.c" /* yacc.c:1646  */
+#line 4996 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 430:
-#line 2298 "./util/configparser.y" /* yacc.c:1646  */
+#line 2299 "./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)
@@ -5002,21 +5005,21 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5006 "util/configparser.c" /* yacc.c:1646  */
+#line 5009 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 431:
-#line 2308 "./util/configparser.y" /* yacc.c:1646  */
+#line 2309 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->log_identity);
                cfg_parser->cfg->log_identity = (yyvsp[0].str);
        }
-#line 5016 "util/configparser.c" /* yacc.c:1646  */
+#line 5019 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 432:
-#line 2315 "./util/configparser.y" /* yacc.c:1646  */
+#line 2316 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
@@ -5024,31 +5027,31 @@ yyreduce:
                        (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip");
        }
-#line 5028 "util/configparser.c" /* yacc.c:1646  */
+#line 5031 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 433:
-#line 2324 "./util/configparser.y" /* yacc.c:1646  */
+#line 2325 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
                        if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
                                (yyvsp[-1].str), (yyvsp[0].str)))
                                fatal_exit("out of memory adding response-ip-data");
        }
-#line 5039 "util/configparser.c" /* yacc.c:1646  */
+#line 5042 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 434:
-#line 2332 "./util/configparser.y" /* yacc.c:1646  */
+#line 2333 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnscrypt:)\n"));
                OUTYY(("\nP(dnscrypt:)\n"));
        }
-#line 5048 "util/configparser.c" /* yacc.c:1646  */
+#line 5051 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2348 "./util/configparser.y" /* yacc.c:1646  */
+  case 447:
+#line 2350 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5056,11 +5059,11 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5060 "util/configparser.c" /* yacc.c:1646  */
+#line 5063 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2358 "./util/configparser.y" /* yacc.c:1646  */
+  case 448:
+#line 2360 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
 
@@ -5069,52 +5072,66 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5073 "util/configparser.c" /* yacc.c:1646  */
+#line 5076 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2368 "./util/configparser.y" /* yacc.c:1646  */
+  case 449:
+#line 2370 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnscrypt_provider);
                cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
        }
-#line 5083 "util/configparser.c" /* yacc.c:1646  */
+#line 5086 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2375 "./util/configparser.y" /* yacc.c:1646  */
+  case 450:
+#line 2377 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
+               if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
+                       fatal_exit("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-provider-cert");
        }
-#line 5093 "util/configparser.c" /* yacc.c:1646  */
+#line 5098 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2382 "./util/configparser.y" /* yacc.c:1646  */
+  case 451:
+#line 2386 "./util/configparser.y" /* yacc.c:1646  */
+    {
+               OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
+                       fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
+       }
+#line 5108 "util/configparser.c" /* yacc.c:1646  */
+    break;
+
+  case 452:
+#line 2393 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
+               if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
+                       fatal_exit("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-secret-key");
        }
-#line 5103 "util/configparser.c" /* yacc.c:1646  */
+#line 5120 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 451:
-#line 2389 "./util/configparser.y" /* yacc.c:1646  */
+  case 453:
+#line 2402 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
        if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
                yyerror("memory size expected");
        free((yyvsp[0].str));
   }
-#line 5114 "util/configparser.c" /* yacc.c:1646  */
+#line 5131 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 452:
-#line 2397 "./util/configparser.y" /* yacc.c:1646  */
+  case 454:
+#line 2410 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -5126,22 +5143,22 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 5130 "util/configparser.c" /* yacc.c:1646  */
+#line 5147 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 453:
-#line 2410 "./util/configparser.y" /* yacc.c:1646  */
+  case 455:
+#line 2423 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
        if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
                yyerror("memory size expected");
        free((yyvsp[0].str));
   }
-#line 5141 "util/configparser.c" /* yacc.c:1646  */
+#line 5158 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 454:
-#line 2418 "./util/configparser.y" /* yacc.c:1646  */
+  case 456:
+#line 2431 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -5153,19 +5170,19 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 5157 "util/configparser.c" /* yacc.c:1646  */
+#line 5174 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 455:
-#line 2431 "./util/configparser.y" /* yacc.c:1646  */
+  case 457:
+#line 2444 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(cachedb:)\n"));
        }
-#line 5165 "util/configparser.c" /* yacc.c:1646  */
+#line 5182 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 460:
-#line 2440 "./util/configparser.y" /* yacc.c:1646  */
+  case 462:
+#line 2453 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_CACHEDB
                OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -5178,11 +5195,11 @@ yyreduce:
                OUTYY(("P(Compiled without cachedb, ignoring)\n"));
        #endif
        }
-#line 5182 "util/configparser.c" /* yacc.c:1646  */
+#line 5199 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 461:
-#line 2454 "./util/configparser.y" /* yacc.c:1646  */
+  case 463:
+#line 2467 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_CACHEDB
                OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
@@ -5196,11 +5213,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5200 "util/configparser.c" /* yacc.c:1646  */
+#line 5217 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-#line 5204 "util/configparser.c" /* yacc.c:1646  */
+#line 5221 "util/configparser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -5428,7 +5445,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2468 "./util/configparser.y" /* yacc.c:1906  */
+#line 2481 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index 0e3f53ce4cb28d2f6f431da13e2e8d1851ca6acc..c715bb1a2c567ee501a3e6c085e7fae3b6e3acf9 100644 (file)
@@ -252,20 +252,21 @@ extern int yydebug;
     VAR_DNSCRYPT_PROVIDER = 462,
     VAR_DNSCRYPT_SECRET_KEY = 463,
     VAR_DNSCRYPT_PROVIDER_CERT = 464,
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 465,
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 466,
-    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 467,
-    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 468,
-    VAR_IPSECMOD_ENABLED = 469,
-    VAR_IPSECMOD_HOOK = 470,
-    VAR_IPSECMOD_IGNORE_BOGUS = 471,
-    VAR_IPSECMOD_MAX_TTL = 472,
-    VAR_IPSECMOD_WHITELIST = 473,
-    VAR_IPSECMOD_STRICT = 474,
-    VAR_CACHEDB = 475,
-    VAR_CACHEDB_BACKEND = 476,
-    VAR_CACHEDB_SECRETSEED = 477,
-    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 478
+    VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 465,
+    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 466,
+    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 467,
+    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 468,
+    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 469,
+    VAR_IPSECMOD_ENABLED = 470,
+    VAR_IPSECMOD_HOOK = 471,
+    VAR_IPSECMOD_IGNORE_BOGUS = 472,
+    VAR_IPSECMOD_MAX_TTL = 473,
+    VAR_IPSECMOD_WHITELIST = 474,
+    VAR_IPSECMOD_STRICT = 475,
+    VAR_CACHEDB = 476,
+    VAR_CACHEDB_BACKEND = 477,
+    VAR_CACHEDB_SECRETSEED = 478,
+    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 479
   };
 #endif
 /* Tokens.  */
@@ -476,20 +477,21 @@ extern int yydebug;
 #define VAR_DNSCRYPT_PROVIDER 462
 #define VAR_DNSCRYPT_SECRET_KEY 463
 #define VAR_DNSCRYPT_PROVIDER_CERT 464
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 465
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 466
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 467
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 468
-#define VAR_IPSECMOD_ENABLED 469
-#define VAR_IPSECMOD_HOOK 470
-#define VAR_IPSECMOD_IGNORE_BOGUS 471
-#define VAR_IPSECMOD_MAX_TTL 472
-#define VAR_IPSECMOD_WHITELIST 473
-#define VAR_IPSECMOD_STRICT 474
-#define VAR_CACHEDB 475
-#define VAR_CACHEDB_BACKEND 476
-#define VAR_CACHEDB_SECRETSEED 477
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 478
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 465
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 466
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 467
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 468
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 469
+#define VAR_IPSECMOD_ENABLED 470
+#define VAR_IPSECMOD_HOOK 471
+#define VAR_IPSECMOD_IGNORE_BOGUS 472
+#define VAR_IPSECMOD_MAX_TTL 473
+#define VAR_IPSECMOD_WHITELIST 474
+#define VAR_IPSECMOD_STRICT 475
+#define VAR_CACHEDB 476
+#define VAR_CACHEDB_BACKEND 477
+#define VAR_CACHEDB_SECRETSEED 478
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 479
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -500,7 +502,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 504 "util/configparser.h" /* yacc.c:1909  */
+#line 506 "util/configparser.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index 1f72c73b08d863b131dcb7349f15688daf504897..75e88e7eabcf2a4b32b564b7f9cb6d794f3a59a9 100644 (file)
@@ -144,6 +144,7 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_USE_SYSTEMD VAR_SHM_ENABLE VAR_SHM_KEY
 %token VAR_DNSCRYPT VAR_DNSCRYPT_ENABLE VAR_DNSCRYPT_PORT VAR_DNSCRYPT_PROVIDER
 %token VAR_DNSCRYPT_SECRET_KEY VAR_DNSCRYPT_PROVIDER_CERT
+%token VAR_DNSCRYPT_PROVIDER_CERT_ROTATED
 %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE
 %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS
 %token VAR_DNSCRYPT_NONCE_CACHE_SIZE
@@ -2339,6 +2340,7 @@ contents_dnsc: contents_dnsc content_dnsc
 content_dnsc:
        dnsc_dnscrypt_enable | dnsc_dnscrypt_port | dnsc_dnscrypt_provider |
        dnsc_dnscrypt_secret_key | dnsc_dnscrypt_provider_cert |
+       dnsc_dnscrypt_provider_cert_rotated |
        dnsc_dnscrypt_shared_secret_cache_size |
        dnsc_dnscrypt_shared_secret_cache_slabs |
        dnsc_dnscrypt_nonce_cache_size |
@@ -2374,13 +2376,24 @@ dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG
 dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG
        {
                OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", $2));
+               if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, $2))
+                       fatal_exit("dnscrypt-provider-cert %s is a duplicate", $2);
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, $2))
                        fatal_exit("out of memory adding dnscrypt-provider-cert");
        }
        ;
+dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG
+       {
+               OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", $2));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, $2))
+                       fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
+       }
+       ;
 dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG
        {
                OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", $2));
+               if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, $2))
+                       fatal_exit("dnscrypt-secret-key: %s is a duplicate", $2);
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, $2))
                        fatal_exit("out of memory adding dnscrypt-secret-key");
        }