aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/config_file.c210
-rw-r--r--util/config_file.h84
-rw-r--r--util/configlexer.c3974
-rw-r--r--util/configlexer.lex4
-rw-r--r--util/configparser.c1534
-rw-r--r--util/configparser.h50
-rw-r--r--util/configparser.y59
-rw-r--r--util/data/dname.c18
-rw-r--r--util/data/msgencode.c22
-rw-r--r--util/data/msgparse.c60
-rw-r--r--util/data/msgparse.h28
-rw-r--r--util/data/msgreply.c154
-rw-r--r--util/data/msgreply.h52
-rw-r--r--util/fptr_wlist.c25
-rw-r--r--util/fptr_wlist.h2
-rw-r--r--util/iana_ports.inc7
-rw-r--r--util/module.h8
-rw-r--r--util/net_help.c6
-rw-r--r--util/netevent.c381
-rw-r--r--util/netevent.h18
-rw-r--r--util/tube.c12
-rw-r--r--util/tube.h3
-rw-r--r--util/ub_event.c448
-rw-r--r--util/ub_event.h127
-rw-r--r--util/ub_event_pluggable.c694
25 files changed, 5018 insertions, 2962 deletions
diff --git a/util/config_file.c b/util/config_file.c
index f9b1531c23dc..3e72bcad06b1 100644
--- a/util/config_file.c
+++ b/util/config_file.c
@@ -163,6 +163,7 @@ config_create(void)
cfg->so_sndbuf = 0;
cfg->so_reuseport = 0;
cfg->ip_transparent = 0;
+ cfg->ip_freebind = 0;
cfg->num_ifs = 0;
cfg->ifs = NULL;
cfg->num_out_ifs = 0;
@@ -237,6 +238,7 @@ config_create(void)
if(!(cfg->dnstap_socket_path = strdup(DNSTAP_SOCKET_PATH)))
goto error_exit;
#endif
+ cfg->disable_dnssec_lame_check = 0;
cfg->ratelimit = 0;
cfg->ratelimit_slabs = 4;
cfg->ratelimit_size = 4*1024*1024;
@@ -393,6 +395,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_MEMSIZE("so-sndbuf:", so_sndbuf)
else S_YNO("so-reuseport:", so_reuseport)
else S_YNO("ip-transparent:", ip_transparent)
+ else S_YNO("ip-freebind:", ip_freebind)
else S_MEMSIZE("rrset-cache-size:", rrset_cache_size)
else S_POW2("rrset-cache-slabs:", rrset_cache_slabs)
else S_YNO("prefetch:", prefetch)
@@ -473,6 +476,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_STR("control-cert-file:", control_cert_file)
else S_STR("module-config:", module_conf)
else S_STR("python-script:", python_script)
+ else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check)
else if(strcmp(opt, "ratelimit:") == 0) {
IS_NUMBER_OR_ZERO; cfg->ratelimit = atoi(val);
infra_dp_ratelimit=cfg->ratelimit;
@@ -481,9 +485,11 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_POW2("ratelimit-slabs:", ratelimit_slabs)
else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor)
else S_YNO("qname-minimisation:", qname_minimisation)
+ else if(strcmp(opt, "define-tag:") ==0) {
+ return config_add_tag(cfg, val);
/* val_sig_skew_min and max are copied into val_env during init,
* so this does not update val_env with set_option */
- else if(strcmp(opt, "val-sig-skew-min:") == 0)
+ } else if(strcmp(opt, "val-sig-skew-min:") == 0)
{ IS_NUMBER_OR_ZERO; cfg->val_sig_skew_min = (int32_t)atoi(val); }
else if(strcmp(opt, "val-sig-skew-max:") == 0)
{ IS_NUMBER_OR_ZERO; cfg->val_sig_skew_max = (int32_t)atoi(val); }
@@ -504,7 +510,8 @@ int config_set_option(struct config_file* cfg, const char* opt,
* stub-zone, name, stub-addr, stub-host, stub-prime
* forward-first, stub-first,
* forward-zone, name, forward-addr, forward-host,
- * ratelimit-for-domain, ratelimit-below-domain */
+ * ratelimit-for-domain, ratelimit-below-domain,
+ * local-zone-tag */
return 0;
}
return 1;
@@ -628,9 +635,23 @@ config_collate_cat(struct config_strlist* list)
/** compare and print list option */
#define O_LS2(opt, name, lst) if(strcmp(opt, name)==0) { \
struct config_str2list* p = cfg->lst; \
- for(p = cfg->lst; p; p = p->next) \
- snprintf(buf, len, "%s %s\n", p->str, p->str2); \
+ for(p = cfg->lst; p; p = p->next) { \
+ snprintf(buf, len, "%s %s", p->str, p->str2); \
func(buf, arg); \
+ } \
+ }
+/** compare and print taglist option */
+#define O_LTG(opt, name, lst) if(strcmp(opt, name)==0) { \
+ char* tmpstr = NULL; \
+ struct config_strbytelist *p = cfg->lst; \
+ for(p = cfg->lst; p; p = p->next) {\
+ tmpstr = config_taglist2str(cfg, p->str2, p->str2len); \
+ if(tmpstr) {\
+ snprintf(buf, len, "%s %s", p->str, tmpstr); \
+ func(buf, arg); \
+ free(tmpstr); \
+ } \
+ } \
}
int
@@ -664,6 +685,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_MEM(opt, "so-sndbuf", so_sndbuf)
else O_YNO(opt, "so-reuseport", so_reuseport)
else O_YNO(opt, "ip-transparent", ip_transparent)
+ else O_YNO(opt, "ip-freebind", ip_freebind)
else O_MEM(opt, "rrset-cache-size", rrset_cache_size)
else O_DEC(opt, "rrset-cache-slabs", rrset_cache_slabs)
else O_YNO(opt, "prefetch-key", prefetch_key)
@@ -750,6 +772,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones)
else O_DEC(opt, "max-udp-size", max_udp_size)
else O_STR(opt, "python-script", python_script)
+ else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check)
else O_DEC(opt, "ratelimit", ratelimit)
else O_MEM(opt, "ratelimit-size", ratelimit_size)
else O_DEC(opt, "ratelimit-slabs", ratelimit_slabs)
@@ -759,6 +782,8 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)
else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max)
else O_YNO(opt, "qname-minimisation", qname_minimisation)
+ else O_IFC(opt, "define-tag", num_tags, tagname)
+ else O_LTG(opt, "local-zone-tag", local_zone_tags)
/* not here:
* outgoing-permit, outgoing-avoid - have list of ports
* local-zone - zones and nodefault variables
@@ -931,6 +956,33 @@ config_delstubs(struct config_stub* p)
}
}
+/** delete string array */
+static void
+config_del_strarray(char** array, int num)
+{
+ int i;
+ if(!array)
+ return;
+ for(i=0; i<num; i++) {
+ free(array[i]);
+ }
+ free(array);
+}
+
+/** delete stringbytelist */
+static void
+config_del_strbytelist(struct config_strbytelist* p)
+{
+ struct config_strbytelist* np;
+ while(p) {
+ np = p->next;
+ free(p->str);
+ free(p->str2);
+ free(p);
+ p = np;
+ }
+}
+
void
config_delete(struct config_file* cfg)
{
@@ -943,18 +995,8 @@ config_delete(struct config_file* cfg)
free(cfg->target_fetch_policy);
free(cfg->ssl_service_key);
free(cfg->ssl_service_pem);
- if(cfg->ifs) {
- int i;
- for(i=0; i<cfg->num_ifs; i++)
- free(cfg->ifs[i]);
- free(cfg->ifs);
- }
- if(cfg->out_ifs) {
- int i;
- for(i=0; i<cfg->num_out_ifs; i++)
- free(cfg->out_ifs[i]);
- free(cfg->out_ifs);
- }
+ config_del_strarray(cfg->ifs, cfg->num_ifs);
+ config_del_strarray(cfg->out_ifs, cfg->num_out_ifs);
config_delstubs(cfg->stubs);
config_delstubs(cfg->forwards);
config_delstrlist(cfg->donotqueryaddrs);
@@ -978,6 +1020,8 @@ config_delete(struct config_file* cfg)
config_deldblstrlist(cfg->local_zones);
config_delstrlist(cfg->local_zones_nodefault);
config_delstrlist(cfg->local_data);
+ config_del_strarray(cfg->tagname, cfg->num_tags);
+ config_del_strbytelist(cfg->local_zone_tags);
config_delstrlist(cfg->control_ifs);
free(cfg->server_key_file);
free(cfg->server_cert_file);
@@ -1166,6 +1210,24 @@ cfg_str2list_insert(struct config_str2list** head, char* item, char* i2)
return 1;
}
+int
+cfg_strbytelist_insert(struct config_strbytelist** head, char* item,
+ uint8_t* i2, size_t i2len)
+{
+ struct config_strbytelist* s;
+ if(!item || !i2 || !head)
+ return 0;
+ s = (struct config_strbytelist*)calloc(1, sizeof(*s));
+ if(!s)
+ return 0;
+ s->str = item;
+ s->str2 = i2;
+ s->str2len = i2len;
+ s->next = *head;
+ *head = s;
+ return 1;
+}
+
time_t
cfg_convert_timeval(const char* str)
{
@@ -1270,6 +1332,122 @@ cfg_parse_memsize(const char* str, size_t* res)
return 1;
}
+int
+find_tag_id(struct config_file* cfg, const char* tag)
+{
+ int i;
+ for(i=0; i<cfg->num_tags; i++) {
+ if(strcmp(cfg->tagname[i], tag) == 0)
+ return i;
+ }
+ return -1;
+}
+
+int
+config_add_tag(struct config_file* cfg, const char* tag)
+{
+ char** newarray;
+ char* newtag;
+ if(find_tag_id(cfg, tag) != -1)
+ return 1; /* nothing to do */
+ newarray = (char**)malloc(sizeof(char*)*(cfg->num_tags+1));
+ if(!newarray)
+ return 0;
+ newtag = strdup(tag);
+ if(!newtag) {
+ free(newarray);
+ return 0;
+ }
+ if(cfg->tagname) {
+ memcpy(newarray, cfg->tagname, sizeof(char*)*cfg->num_tags);
+ free(cfg->tagname);
+ }
+ newarray[cfg->num_tags++] = newtag;
+ cfg->tagname = newarray;
+ return 1;
+}
+
+/** set a bit in a bit array */
+static void
+cfg_set_bit(uint8_t* bitlist, size_t len, int id)
+{
+ int pos = id/8;
+ log_assert((size_t)pos < len);
+ bitlist[pos] |= 1<<(id%8);
+}
+
+uint8_t* config_parse_taglist(struct config_file* cfg, char* str,
+ size_t* listlen)
+{
+ uint8_t* taglist = NULL;
+ size_t len = 0;
+ char* p, *s;
+
+ /* allocate */
+ if(cfg->num_tags == 0) {
+ log_err("parse taglist, but no tags defined");
+ return 0;
+ }
+ len = (size_t)(cfg->num_tags+7)/8;
+ taglist = calloc(1, len);
+ if(!taglist) {
+ log_err("out of memory");
+ return 0;
+ }
+
+ /* parse */
+ s = str;
+ while((p=strsep(&s, " \t\n")) != NULL) {
+ if(*p) {
+ int id = find_tag_id(cfg, p);
+ /* set this bit in the bitlist */
+ if(id == -1) {
+ log_err("unknown tag: %s", p);
+ free(taglist);
+ return 0;
+ }
+ cfg_set_bit(taglist, len, id);
+ }
+ }
+
+ *listlen = len;
+ return taglist;
+}
+
+char* config_taglist2str(struct config_file* cfg, uint8_t* taglist,
+ size_t taglen)
+{
+ char buf[10240];
+ size_t i, j, len = 0;
+ buf[0] = 0;
+ for(i=0; i<taglen; i++) {
+ if(taglist[i] == 0)
+ continue;
+ for(j=0; j<8; j++) {
+ if((taglist[i] & (1<<j)) != 0) {
+ size_t id = i*8 + j;
+ snprintf(buf+len, sizeof(buf)-len, "%s%s",
+ (len==0?"":" "), cfg->tagname[id]);
+ len += strlen(buf+len);
+ }
+ }
+ }
+ return strdup(buf);
+}
+
+int taglist_intersect(uint8_t* list1, size_t list1len, uint8_t* list2,
+ size_t list2len)
+{
+ size_t i;
+ if(!list1 || !list2)
+ return 0;
+ for(i=0; i<list1len && i<list2len; i++) {
+ if((list1[i] & list2[i]) != 0)
+ return 1;
+ }
+ return 0;
+}
+
void
config_apply(struct config_file* config)
{
diff --git a/util/config_file.h b/util/config_file.h
index ef823fb88d3a..a51cdb464c0c 100644
--- a/util/config_file.h
+++ b/util/config_file.h
@@ -44,6 +44,7 @@
struct config_stub;
struct config_strlist;
struct config_str2list;
+struct config_strbytelist;
struct module_qstate;
struct sock_list;
struct ub_packed_rrset_key;
@@ -142,6 +143,8 @@ struct config_file {
int so_reuseport;
/** IP_TRANSPARENT socket option requested on port 53 sockets */
int ip_transparent;
+ /** IP_FREEBIND socket option request on port 53 sockets */
+ int ip_freebind;
/** number of interfaces to open. If 0 default all interfaces. */
int num_ifs;
@@ -293,6 +296,12 @@ struct config_file {
int unblock_lan_zones;
/** insecure lan zones (don't validate AS112 zones) */
int insecure_lan_zones;
+ /** list of zonename, tagbitlist */
+ struct config_strbytelist* local_zone_tags;
+ /** tag list, array with tagname[i] is malloced string */
+ char** tagname;
+ /** number of items in the taglist */
+ int num_tags;
/** remote control section. enable toggle. */
int remote_control_enable;
@@ -358,6 +367,9 @@ struct config_file {
/** true to log dnstap FORWARDER_RESPONSE message events */
int dnstap_log_forwarder_response_messages;
+ /** true to disable DNSSEC lameness check in iterator */
+ int disable_dnssec_lame_check;
+
/** ratelimit 0 is off, otherwise qps (unless overridden) */
int ratelimit;
/** number of slabs for ratelimit cache */
@@ -421,6 +433,19 @@ struct config_str2list {
char* str2;
};
+/**
+ * List of string, bytestring for config options
+ */
+struct config_strbytelist {
+ /** next item in list */
+ struct config_strbytelist* next;
+ /** first string */
+ char* str;
+ /** second bytestring */
+ uint8_t* str2;
+ size_t str2len;
+};
+
/** List head for strlist processing, used for append operation. */
struct config_strlist_head {
/** first in list of text items */
@@ -560,6 +585,17 @@ int cfg_strlist_insert(struct config_strlist** head, char* item);
int cfg_str2list_insert(struct config_str2list** head, char* item, char* i2);
/**
+ * Insert string into strbytelist.
+ * @param head: pointer to str2list head variable.
+ * @param item: new item. malloced by caller. If NULL the insertion fails.
+ * @param i2: 2nd string, malloced by caller. If NULL the insertion fails.
+ * @param i2len: length of the i2 bytestring.
+ * @return: true on success.
+ */
+int cfg_strbytelist_insert(struct config_strbytelist** head, char* item,
+ uint8_t* i2, size_t i2len);
+
+/**
* Find stub in config list, also returns prevptr (for deletion).
* @param pp: call routine with pointer to a pointer to the start of the list,
* if the stub is found, on exit, the value contains a pointer to the
@@ -625,6 +661,54 @@ int cfg_count_numbers(const char* str);
int cfg_parse_memsize(const char* str, size_t* res);
/**
+ * Add a tag name to the config. It is added at the end with a new ID value.
+ * @param cfg: the config structure.
+ * @param tag: string (which is copied) with the name.
+ * @return: false on alloc failure.
+ */
+int config_add_tag(struct config_file* cfg, const char* tag);
+
+/**
+ * Find tag ID in the tag list.
+ * @param cfg: the config structure.
+ * @param tag: string with tag name to search for.
+ * @return: 0..(num_tags-1) with tag ID, or -1 if tagname is not found.
+ */
+int find_tag_id(struct config_file* cfg, const char* tag);
+
+/**
+ * parse taglist from string into bytestring with bitlist.
+ * @param cfg: the config structure (with tagnames)
+ * @param str: the string to parse. Parse puts 0 bytes in string.
+ * @param listlen: returns length of in bytes.
+ * @return malloced bytes with a bitlist of the tags. or NULL on parse error
+ * or malloc failure.
+ */
+uint8_t* config_parse_taglist(struct config_file* cfg, char* str,
+ size_t* listlen);
+
+/**
+ * convert tag bitlist to a malloced string with tag names. For debug output.
+ * @param cfg: the config structure (with tagnames)
+ * @param taglist: the tag bitlist.
+ * @param len: length of the tag bitlist.
+ * @return malloced string or NULL.
+ */
+char* config_taglist2str(struct config_file* cfg, uint8_t* taglist,
+ size_t len);
+
+/**
+ * see if two taglists intersect (have tags in common).
+ * @param list1: first tag bitlist.
+ * @param list1len: length in bytes of first list.
+ * @param list2: second tag bitlist.
+ * @param list2len: length in bytes of second list.
+ * @return true if there are tags in common, 0 if not.
+ */
+int taglist_intersect(uint8_t* list1, size_t list1len, uint8_t* list2,
+ size_t list2len);
+
+/**
* Parse local-zone directive into two strings and register it in the config.
* @param cfg: to put it in.
* @param val: argument strings to local-zone, "example.com nodefault".
diff --git a/util/configlexer.c b/util/configlexer.c
index e09899c202ba..bd510369c25f 100644
--- a/util/configlexer.c
+++ b/util/configlexer.c
@@ -9,8 +9,8 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 39
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 0
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -143,7 +143,15 @@ typedef unsigned int flex_uint32_t;
/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
#endif
/* The state buf must be large enough to hold one state per character in the main buffer.
@@ -176,7 +184,7 @@ extern FILE *yyin, *yyout;
do \
{ \
/* Undo effects of setting up yytext. */ \
- int yyless_macro_arg = (n); \
+ yy_size_t yyless_macro_arg = (n); \
YY_LESS_LINENO(yyless_macro_arg);\
*yy_cp = (yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
@@ -346,11 +354,17 @@ extern int yylineno;
int yylineno = 1;
extern char *yytext;
+#ifdef yytext_ptr
+#undef yytext_ptr
+#endif
#define yytext_ptr yytext
static yy_state_type yy_get_previous_state (void );
static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
static int yy_get_next_buffer (void );
+#if defined(__GNUC__) && __GNUC__ >= 3
+__attribute__((__noreturn__))
+#endif
static void yy_fatal_error (yyconst char msg[] );
/* Done after the current pattern has been matched and before the
@@ -364,8 +378,8 @@ static void yy_fatal_error (yyconst char msg[] );
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 179
-#define YY_END_OF_BUFFER 180
+#define YY_NUM_RULES 183
+#define YY_END_OF_BUFFER 184
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -373,209 +387,214 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[1800] =
+static yyconst flex_int16_t yy_accept[1847] =
{ 0,
- 1, 1, 161, 161, 165, 165, 169, 169, 173, 173,
- 1, 1, 180, 177, 1, 159, 159, 178, 2, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 178,
- 161, 162, 162, 163, 178, 165, 166, 166, 167, 178,
- 172, 169, 170, 170, 171, 178, 173, 174, 174, 175,
- 178, 176, 160, 2, 164, 176, 178, 177, 0, 1,
- 2, 2, 2, 2, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 161, 0, 165, 0,
- 172, 0, 169, 173, 0, 176, 0, 2, 2, 176,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 176, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 176, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 73, 177, 177, 177, 177, 177, 177,
- 7, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 176, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 176, 177, 177, 177, 177, 177, 33, 177, 177, 177,
- 177, 177, 177, 177, 177, 140, 177, 13, 14, 177,
- 16, 15, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 133, 177, 177, 177, 177, 177, 177, 177,
- 3, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 176, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 168, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 36, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 37, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 18, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 88, 168, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 87, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 71,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 23, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 34, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 35, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 25,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 153,
- 177, 177, 177, 177, 177, 177, 29, 177, 30, 177,
- 177, 177, 74, 177, 75, 177, 72, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 6, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 90,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 26, 177, 177, 177, 177, 177, 116,
- 115, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 38, 177, 177, 177,
- 177, 177, 177, 177, 177, 77, 76, 177, 177, 177,
- 177, 177, 177, 177, 112, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 56, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 60, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 114,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 5,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 108, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 126, 177, 109, 177, 138, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 24, 177, 177, 177,
- 177, 79, 177, 80, 78, 177, 177, 177, 177, 177,
- 177, 177, 86, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 110, 177, 177, 177, 177,
- 137, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 70, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 31,
-
- 177, 177, 20, 177, 177, 177, 17, 177, 95, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 45, 47, 177, 177, 177, 177, 177,
- 177, 177, 177, 141, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 81, 177, 177,
- 177, 177, 177, 177, 85, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 89, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 132, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 99,
- 177, 103, 177, 177, 177, 177, 84, 177, 177, 66,
- 177, 124, 177, 177, 177, 177, 139, 177, 177, 177,
- 177, 177, 177, 177, 146, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 102, 177, 177, 177,
- 177, 177, 48, 49, 177, 177, 32, 55, 104, 177,
- 117, 113, 177, 177, 41, 177, 106, 177, 177, 177,
- 177, 177, 8, 177, 177, 177, 69, 177, 177, 177,
- 177, 155, 177, 123, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 91, 145, 177, 177, 177, 177, 177, 177, 177,
- 177, 134, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 105, 177, 40,
- 42, 177, 177, 177, 177, 177, 177, 177, 68, 177,
- 177, 177, 177, 154, 177, 177, 177, 177, 128, 21,
- 22, 177, 177, 177, 177, 177, 177, 177, 65, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 130,
- 127, 177, 177, 177, 177, 177, 177, 177, 177, 39,
- 177, 177, 177, 177, 177, 177, 177, 12, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 11, 177, 177,
- 19, 177, 177, 177, 158, 177, 43, 177, 136, 129,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 98, 97, 177, 177, 131, 125, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 50, 177, 177, 135, 177,
- 177, 177, 177, 177, 177, 177, 177, 44, 177, 177,
- 177, 92, 94, 118, 177, 177, 177, 96, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 142, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 119, 177, 177, 27, 177, 177, 177, 4, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 144, 177, 177, 122, 177, 177,
- 177, 177, 177, 177, 177, 53, 177, 28, 177, 10,
- 177, 177, 177, 177, 177, 120, 57, 177, 177, 177,
- 101, 177, 177, 177, 177, 177, 177, 177, 143, 82,
- 177, 177, 177, 177, 59, 63, 58, 177, 51, 177,
- 9, 177, 177, 156, 177, 177, 100, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 64, 62, 177,
- 52, 177, 111, 177, 121, 177, 177, 93, 46, 177,
-
- 177, 177, 177, 177, 177, 83, 61, 54, 157, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 67, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 107, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 149, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 147, 177, 150,
- 151, 177, 177, 177, 177, 177, 148, 152, 0
-
+ 1, 1, 165, 165, 169, 169, 173, 173, 177, 177,
+ 1, 1, 184, 181, 1, 163, 163, 182, 2, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 182,
+ 165, 166, 166, 167, 182, 169, 170, 170, 171, 182,
+ 176, 173, 174, 174, 175, 182, 177, 178, 178, 179,
+ 182, 180, 164, 2, 168, 180, 182, 181, 0, 1,
+ 2, 2, 2, 2, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 165, 0, 169, 0,
+ 176, 0, 173, 177, 0, 180, 0, 2, 2, 180,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 181, 180, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 180, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 74, 181, 181, 181, 181, 181, 181, 7, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 180, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 180, 181, 181, 181, 181, 181, 34, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 143, 181,
+ 13, 14, 181, 16, 15, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 134, 181, 181, 181,
+ 181, 181, 181, 181, 3, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 180, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 172, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 37, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 38, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 18, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 89, 172, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 88, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 72,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 23, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 35, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 36, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 25, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 157, 181, 181, 181, 181, 181, 181, 29,
+ 181, 30, 181, 181, 181, 75, 181, 76, 181, 73,
+
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 6, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 141,
+ 181, 181, 181, 181, 91, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 26, 181,
+ 181, 181, 181, 181, 181, 117, 181, 116, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 39, 181, 181, 181, 181, 181, 181,
+ 181, 181, 78, 77, 181, 181, 181, 181, 181, 181,
+ 181, 113, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 57, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 61, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 33, 181, 181, 181, 181, 181, 181, 181, 115,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 5,
+
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 109, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 127, 181, 110, 181, 181, 139, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 24, 181, 181,
+ 181, 181, 80, 181, 81, 79, 181, 181, 181, 181,
+ 181, 181, 181, 87, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 111, 181, 181, 181,
+
+ 181, 181, 138, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 71, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 31, 181, 181, 20, 181, 181, 181, 17, 181,
+ 96, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 46, 48, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 144, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 82, 181, 181, 181, 181, 181, 181, 86, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 181, 181, 181, 181, 181, 90, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 133, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 100, 181, 104, 181, 181, 181, 181,
+ 85, 181, 181, 67, 181, 125, 181, 181, 181, 181,
+ 181, 140, 181, 181, 181, 181, 181, 181, 181, 149,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 103, 181, 181, 181, 181, 181, 49, 50, 181,
+ 181, 32, 56, 105, 181, 118, 142, 114, 181, 181,
+
+ 42, 181, 107, 181, 181, 181, 181, 181, 8, 181,
+ 181, 181, 70, 181, 181, 181, 181, 159, 181, 124,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 92, 148,
+ 181, 181, 181, 181, 181, 181, 181, 181, 135, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 106, 181, 41, 43, 181, 181,
+ 181, 181, 181, 181, 181, 69, 181, 181, 181, 181,
+ 158, 181, 181, 181, 181, 129, 21, 22, 181, 181,
+
+ 181, 181, 181, 181, 181, 66, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 131, 128, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 40, 181, 181,
+ 181, 181, 181, 181, 181, 12, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 11, 181, 181, 19, 181,
+ 181, 181, 162, 181, 44, 181, 137, 130, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 99,
+ 98, 181, 181, 132, 126, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 51, 181, 181, 136, 181, 181,
+
+ 181, 181, 181, 181, 181, 181, 45, 181, 181, 181,
+ 93, 95, 119, 181, 181, 181, 97, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 145, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 120, 181, 181, 27, 181, 181, 181, 4, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 147, 181, 181, 123, 181,
+ 181, 181, 181, 181, 181, 181, 54, 181, 28, 181,
+ 10, 181, 181, 181, 181, 181, 121, 58, 181, 181,
+ 181, 102, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 146, 83, 181, 181, 181, 181, 60, 64, 59, 181,
+ 52, 181, 9, 181, 181, 160, 181, 181, 101, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 65, 63, 181, 53, 181, 112, 181, 122, 181, 181,
+ 94, 47, 181, 181, 181, 181, 181, 181, 181, 84,
+ 62, 55, 161, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 68, 181, 156, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+
+ 181, 108, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 152, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+ 181, 181, 181, 181, 150, 181, 153, 154, 181, 181,
+ 181, 181, 181, 151, 155, 0
} ;
-static yyconst flex_int32_t yy_ec[256] =
+static yyconst YY_CHAR yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
@@ -607,7 +626,7 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst flex_int32_t yy_meta[66] =
+static yyconst YY_CHAR yy_meta[66] =
{ 0,
1, 2, 3, 4, 5, 1, 6, 1, 1, 1,
1, 7, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -618,415 +637,423 @@ static yyconst flex_int32_t yy_meta[66] =
1, 1, 1, 1, 1
} ;
-static yyconst flex_int16_t yy_base[1814] =
+static yyconst flex_uint16_t yy_base[1861] =
{ 0,
0, 0, 63, 66, 69, 71, 77, 83, 88, 91,
- 129, 135, 344, 303, 95, 5211, 5211, 5211, 107, 110,
+ 129, 135, 355, 314, 95, 5329, 5329, 5329, 107, 110,
142, 180, 108, 50, 145, 172, 118, 148, 121, 181,
197, 166, 241, 137, 225, 260, 233, 228, 257, 116,
- 263, 5211, 5211, 5211, 94, 244, 5211, 5211, 5211, 96,
- 221, 251, 5211, 5211, 5211, 304, 212, 5211, 5211, 5211,
- 102, 208, 5211, 308, 5211, 268, 318, 206, 322, 111,
+ 263, 5329, 5329, 5329, 94, 244, 5329, 5329, 5329, 96,
+ 221, 251, 5329, 5329, 5329, 304, 212, 5329, 5329, 5329,
+ 102, 208, 5329, 308, 5329, 268, 318, 206, 322, 111,
0, 326, 0, 0, 201, 170, 217, 317, 193, 309,
- 312, 307, 183, 310, 332, 313, 311, 328, 330, 245,
- 336, 335, 358, 156, 347, 362, 376, 357, 355, 382,
-
- 363, 385, 373, 388, 372, 384, 391, 399, 411, 403,
- 426, 404, 408, 418, 413, 419, 438, 429, 448, 434,
- 439, 415, 460, 453, 445, 459, 164, 174, 141, 296,
- 134, 498, 165, 122, 312, 115, 502, 508, 0, 475,
- 494, 443, 491, 501, 488, 496, 492, 521, 515, 517,
- 525, 569, 513, 510, 526, 527, 528, 538, 547, 542,
- 552, 548, 555, 571, 579, 565, 570, 575, 594, 605,
- 608, 600, 593, 612, 610, 622, 623, 617, 616, 619,
- 613, 628, 626, 637, 641, 642, 643, 639, 652, 640,
- 664, 667, 651, 663, 666, 680, 668, 676, 695, 681,
-
- 684, 700, 685, 686, 693, 708, 711, 710, 703, 707,
- 709, 706, 736, 720, 344, 740, 748, 726, 735, 751,
- 752, 746, 744, 743, 758, 760, 764, 768, 762, 769,
- 781, 771, 797, 775, 770, 785, 792, 809, 807, 799,
- 796, 805, 801, 812, 806, 844, 254, 826, 831, 827,
- 841, 852, 481, 830, 854, 845, 858, 853, 839, 868,
- 856, 862, 888, 870, 880, 889, 904, 897, 892, 890,
- 894, 900, 903, 920, 960, 923, 930, 921, 924, 929,
- 926, 908, 931, 957, 940, 953, 956, 958, 980, 964,
- 970, 983, 1010, 973, 995, 996, 1000, 990, 1020, 998,
-
- 1004, 1026, 1019, 1025, 1029, 1023, 1002, 1013, 1036, 1040,
- 1053, 1059, 1045, 1065, 1069, 1047, 1061, 1067, 1072, 1077,
- 1082, 1062, 1089, 5211, 1097, 1080, 1092, 1075, 1088, 1106,
- 5211, 1093, 1102, 1107, 1116, 1114, 1125, 1124, 1135, 1119,
- 1117, 1115, 1134, 1140, 1142, 1144, 1149, 1195, 1150, 1153,
- 1157, 1183, 1151, 1165, 1189, 1131, 1192, 1171, 1179, 1187,
- 1205, 1182, 1220, 1199, 1214, 1212, 1230, 1209, 1228, 1219,
- 1229, 1235, 1126, 1232, 1238, 1246, 1248, 1255, 1262, 1272,
- 1253, 1274, 1279, 1257, 1283, 1286, 1291, 1267, 1287, 1293,
- 1295, 1294, 1299, 1276, 1306, 1302, 1303, 1324, 1310, 1311,
-
- 1322, 1321, 1315, 1334, 1338, 1346, 1342, 1339, 1348, 1344,
- 1364, 1361, 1375, 1355, 1380, 1373, 1366, 1382, 1368, 1385,
- 1386, 1387, 1398, 1388, 1391, 1410, 1411, 1418, 1426, 1422,
- 1408, 1428, 1414, 1415, 1425, 1419, 1446, 1431, 1441, 1416,
- 1447, 1468, 1451, 1453, 1464, 1471, 1458, 1474, 1460, 1463,
- 1473, 1477, 1483, 1487, 1500, 1502, 1490, 1509, 1503, 1504,
- 1514, 1517, 1521, 1501, 1541, 1524, 5211, 1497, 1534, 1528,
- 1535, 1529, 1536, 1532, 1580, 5211, 1551, 5211, 5211, 1556,
- 5211, 5211, 1561, 1568, 1567, 1576, 1629, 1577, 1569, 1583,
- 1588, 1579, 1598, 1610, 1607, 1612, 1618, 1624, 1637, 1625,
-
- 1626, 1640, 1635, 1654, 1650, 1658, 1656, 1590, 1670, 1682,
- 1669, 1673, 1681, 1683, 1666, 1675, 1687, 1671, 1695, 1693,
- 1708, 1686, 5211, 1703, 1706, 1716, 1709, 1724, 1711, 1734,
- 5211, 1720, 1722, 1735, 1728, 1736, 1739, 1751, 1740, 1747,
- 1750, 1761, 1762, 1767, 1757, 1771, 1766, 1783, 1785, 1778,
- 1787, 1789, 1790, 1781, 1798, 1794, 1808, 1786, 1807, 1819,
- 1803, 1824, 1827, 1817, 1833, 1821, 1812, 1828, 1825, 1870,
- 1839, 1826, 1831, 1834, 1857, 1851, 1860, 1867, 1878, 1880,
- 1872, 1876, 1861, 1896, 1905, 1900, 1913, 1903, 1920, 1902,
- 1922, 1923, 1926, 1927, 1930, 1909, 1933, 1941, 5211, 1960,
-
- 1956, 1946, 1950, 1968, 1962, 1951, 1953, 1966, 1955, 1971,
- 1961, 1977, 1990, 1983, 5211, 1986, 1982, 1992, 1979, 2009,
- 2010, 2003, 2019, 1989, 2008, 5211, 2028, 2039, 2022, 2017,
- 2018, 2035, 2033, 2048, 2036, 2049, 2056, 2058, 2052, 2063,
- 2029, 2062, 2055, 2083, 2074, 2075, 2077, 2080, 2082, 2098,
- 5211, 2081, 2102, 2095, 2100, 2115, 2119, 2101, 2117, 2104,
- 2120, 2124, 120, 2122, 2126, 2118, 2127, 5211, 76, 2141,
- 2133, 2138, 2142, 2145, 2151, 2154, 2143, 2160, 2161, 2162,
- 2171, 2165, 2172, 2173, 2176, 2189, 2182, 2196, 2200, 2199,
- 2198, 2207, 2193, 2204, 2203, 2209, 2214, 2223, 2239, 2235,
-
- 2230, 2232, 2241, 2237, 2233, 2240, 2236, 2250, 2238, 2231,
- 2264, 5211, 2286, 2270, 2277, 2267, 2288, 2278, 2296, 2276,
- 2297, 2289, 2292, 2303, 2305, 2304, 2313, 2307, 2312, 2322,
- 2323, 2320, 2314, 2330, 2339, 2342, 2365, 2350, 2332, 5211,
- 2349, 2340, 2345, 2359, 2360, 2348, 2369, 2376, 2377, 2375,
- 2372, 2394, 2390, 2398, 5211, 2404, 2395, 2409, 2413, 2396,
- 2414, 2421, 2419, 2410, 2424, 2425, 2434, 2437, 2417, 2436,
- 2440, 5211, 2449, 2453, 2445, 2458, 2459, 2451, 2460, 2473,
- 2455, 2456, 2462, 2474, 2464, 2469, 2472, 2491, 2483, 2480,
- 2486, 2507, 2493, 2509, 5211, 2526, 2515, 2517, 2521, 2513,
-
- 2532, 2529, 2534, 2519, 2531, 2537, 2542, 2544, 2543, 2564,
- 2548, 2554, 2553, 2561, 2570, 2559, 2572, 2580, 2574, 2565,
- 2589, 2581, 2603, 2590, 2597, 2617, 2619, 2620, 2625, 5211,
- 2618, 2604, 2623, 2613, 2614, 2639, 2632, 2615, 2624, 2630,
- 2644, 2631, 2666, 2646, 2648, 2649, 2650, 2658, 2653, 2664,
- 2677, 2681, 2670, 2683, 2685, 2673, 2693, 2690, 2712, 5211,
- 2699, 2698, 2716, 2720, 2707, 2711, 5211, 2705, 5211, 2717,
- 2732, 2739, 5211, 2728, 5211, 2736, 5211, 2734, 2741, 2725,
- 2745, 2748, 2751, 2738, 2757, 2754, 2772, 2749, 2766, 2775,
- 2763, 2780, 5211, 2768, 2778, 2787, 2789, 2776, 2790, 2799,
-
- 2791, 2818, 2817, 2828, 2805, 2831, 2815, 2830, 2827, 5211,
- 2812, 2839, 2834, 2821, 2847, 2832, 2857, 2842, 2859, 2845,
- 2868, 2879, 2875, 2863, 2866, 2867, 2877, 2883, 2873, 2894,
- 2888, 2900, 2889, 2891, 2893, 2903, 2910, 2906, 2928, 2909,
- 2915, 2925, 2920, 5211, 2926, 2930, 2936, 2942, 2932, 5211,
- 5211, 2901, 2947, 2955, 2949, 2952, 2964, 2977, 2958, 2968,
- 2971, 2953, 2980, 2972, 2970, 2985, 2991, 2981, 2978, 3008,
- 2998, 3010, 2997, 3025, 3022, 3020, 5211, 3036, 3021, 3046,
- 3037, 3024, 3049, 3041, 3047, 5211, 5211, 3051, 3042, 3057,
- 3053, 3061, 3063, 3067, 5211, 3069, 3083, 3086, 3088, 3090,
-
- 3092, 3077, 3082, 3098, 3094, 3096, 3099, 3117, 3112, 3109,
- 3120, 3115, 3128, 3137, 3138, 3140, 5211, 3136, 3143, 3139,
- 3144, 3148, 3142, 3135, 3147, 3164, 3160, 3167, 3183, 3189,
- 3169, 3174, 3168, 3192, 3177, 3198, 3199, 3201, 3206, 3200,
- 5211, 3210, 3194, 3215, 3204, 3208, 3213, 3222, 3231, 3226,
- 3227, 3238, 3228, 3237, 3236, 3252, 3233, 3260, 3242, 5211,
- 3258, 3266, 3253, 3269, 3272, 3256, 3289, 3265, 3284, 5211,
- 3292, 3302, 3285, 3294, 3306, 3308, 3307, 3309, 3304, 3295,
- 3311, 3298, 3317, 3321, 3319, 3322, 3328, 3332, 3337, 3347,
- 3349, 3354, 3357, 3356, 3340, 3348, 3364, 3363, 3369, 3375,
-
- 3360, 3365, 3397, 3370, 3390, 3387, 3376, 3402, 3383, 3410,
- 3395, 5211, 3408, 3414, 3412, 3416, 3398, 3413, 3422, 3417,
- 3421, 5211, 3426, 5211, 3424, 5211, 3435, 3433, 3432, 3446,
- 3438, 3442, 3460, 3462, 3470, 3454, 5211, 3474, 3453, 3463,
- 3469, 5211, 3476, 5211, 5211, 3477, 3479, 3481, 3483, 3484,
- 3505, 3509, 5211, 3508, 3494, 3516, 3513, 3497, 3511, 3519,
- 3521, 3499, 3524, 3510, 3527, 5211, 3548, 3554, 3537, 3550,
- 5211, 3549, 3561, 3541, 3557, 3568, 3560, 3564, 3575, 3551,
- 3576, 3574, 3572, 3592, 5211, 3586, 3590, 3607, 3608, 3595,
- 3591, 3612, 3616, 3613, 3602, 3635, 3622, 3619, 3618, 5211,
-
- 3645, 3648, 5211, 3639, 3634, 3640, 5211, 3657, 5211, 3658,
- 3655, 3651, 3659, 3633, 3660, 3665, 3674, 3684, 3689, 3685,
- 3673, 3691, 3682, 5211, 5211, 3704, 3696, 3706, 3707, 3701,
- 3692, 3709, 3717, 5211, 3697, 3725, 3715, 3712, 3740, 3728,
- 3731, 3743, 3744, 3735, 3751, 3733, 3734, 5211, 3741, 3739,
- 3757, 3758, 3769, 3761, 5211, 3787, 3786, 3780, 3778, 3784,
- 3794, 3798, 3799, 3785, 3788, 3802, 3804, 3810, 3811, 3817,
- 3818, 3813, 5211, 3828, 3823, 3815, 3835, 3821, 3837, 3838,
- 3851, 3836, 3827, 3854, 3853, 3847, 5211, 3829, 3848, 3862,
- 3878, 3858, 3864, 3884, 3860, 3887, 3881, 3880, 3895, 3868,
-
- 3889, 3876, 3896, 3891, 3903, 3916, 3907, 3662, 3922, 5211,
- 3911, 5211, 3923, 3934, 3940, 3936, 5211, 3927, 3938, 5211,
- 3929, 5211, 3943, 3939, 3955, 3951, 5211, 3957, 3962, 3959,
- 3965, 3966, 3964, 3978, 5211, 3981, 3987, 3988, 3989, 3991,
- 3982, 3993, 3999, 3995, 4002, 4007, 5211, 4009, 4023, 4003,
- 4024, 4029, 5211, 5211, 4021, 4036, 5211, 5211, 5211, 4033,
- 5211, 5211, 4034, 4041, 5211, 4042, 5211, 4047, 4043, 4038,
- 4045, 4048, 5211, 4030, 4061, 4077, 5211, 4069, 4083, 4064,
- 4070, 5211, 4084, 5211, 4081, 4087, 4076, 4088, 4092, 4095,
- 4098, 4094, 4100, 4111, 4112, 4114, 4102, 4108, 4130, 4122,
-
- 4110, 4120, 4119, 4137, 4129, 4142, 4144, 4147, 4149, 4148,
- 4162, 5211, 5211, 4145, 4150, 4151, 4163, 4171, 4164, 4167,
- 4181, 5211, 4186, 4187, 4190, 4188, 4198, 4200, 4204, 4202,
- 4199, 4205, 4201, 4207, 4214, 4230, 4217, 5211, 4223, 5211,
- 5211, 4231, 4236, 4238, 4225, 4241, 4253, 4250, 5211, 4246,
- 4252, 4255, 4257, 5211, 4271, 4266, 4272, 4274, 5211, 5211,
- 5211, 4275, 4265, 4280, 4286, 4290, 4277, 4292, 5211, 4279,
- 4303, 4304, 4305, 4310, 4311, 4209, 4319, 4315, 4325, 5211,
- 5211, 4330, 4329, 4323, 4331, 4326, 4335, 4334, 4332, 5211,
- 4342, 4336, 4351, 4356, 4366, 4372, 4367, 5211, 4355, 4357,
-
- 4360, 4380, 4369, 4381, 4385, 4378, 4384, 5211, 4400, 4397,
- 5211, 4391, 4405, 4399, 5211, 4420, 5211, 4398, 5211, 5211,
- 4403, 4427, 4426, 4431, 4433, 4434, 4417, 4424, 4443, 4440,
- 4441, 5211, 5211, 4436, 4447, 5211, 5211, 4458, 4452, 4446,
- 4439, 4463, 4471, 4461, 4470, 4462, 4482, 4486, 4479, 4488,
- 4472, 4474, 4485, 4491, 4496, 5211, 4517, 4521, 5211, 4507,
- 4526, 4527, 4519, 4514, 4530, 4520, 4523, 5211, 4536, 4537,
- 4510, 5211, 5211, 5211, 4534, 4541, 4556, 5211, 4562, 4561,
- 4551, 4552, 4569, 4557, 4581, 4555, 4585, 5211, 4568, 4576,
- 4586, 4589, 4590, 4588, 4592, 4597, 4601, 4583, 4621, 4603,
-
- 5211, 4623, 4620, 5211, 4627, 4614, 4612, 5211, 4628, 4626,
- 4615, 4643, 4644, 4632, 4633, 4638, 4646, 4654, 4648, 4652,
- 4650, 4667, 4665, 4674, 5211, 4676, 4661, 5211, 4681, 4673,
- 4684, 4690, 4691, 4697, 4693, 5211, 4699, 5211, 4701, 5211,
- 4704, 4692, 4696, 4712, 4710, 5211, 5211, 4713, 4722, 4725,
- 5211, 4729, 4723, 4709, 4728, 4741, 4724, 4733, 5211, 5211,
- 4726, 4743, 4747, 4760, 5211, 5211, 5211, 4763, 5211, 4762,
- 5211, 4767, 4755, 5211, 4775, 4761, 5211, 4765, 4777, 4778,
- 4754, 4780, 4787, 4792, 4793, 4782, 4784, 5211, 5211, 4799,
- 5211, 4800, 5211, 4812, 5211, 4803, 4816, 5211, 5211, 4820,
-
- 4804, 4824, 4794, 4805, 4821, 5211, 5211, 5211, 5211, 4830,
- 4826, 4825, 4814, 4831, 4839, 4842, 4844, 4836, 4845, 4857,
- 4863, 4850, 4864, 4874, 4866, 5211, 4870, 4869, 4878, 4882,
- 4873, 4886, 4884, 4890, 4889, 4897, 4905, 4900, 4893, 4916,
- 4909, 4922, 4924, 4933, 4934, 4925, 4926, 4940, 4935, 4945,
- 4949, 4951, 4954, 4950, 5211, 4952, 4955, 4956, 4967, 4958,
- 4965, 4969, 4986, 4992, 4984, 4991, 4985, 4999, 4996, 5001,
- 4990, 5000, 5002, 5211, 5017, 5019, 5014, 5015, 5036, 5020,
- 5026, 5042, 5038, 5047, 5040, 5050, 5048, 5211, 5051, 5211,
- 5211, 5052, 5049, 5061, 5058, 5059, 5211, 5211, 5211, 5119,
-
- 5126, 5133, 5140, 5147, 82, 5154, 5161, 5168, 5175, 5182,
- 5189, 5196, 5203
+ 318, 310, 183, 312, 336, 311, 307, 341, 343, 245,
+ 335, 350, 363, 156, 346, 370, 371, 357, 358, 376,
+
+ 387, 391, 393, 398, 386, 397, 385, 399, 414, 408,
+ 429, 412, 421, 422, 424, 418, 352, 435, 439, 450,
+ 438, 431, 467, 448, 459, 455, 164, 174, 141, 296,
+ 134, 509, 165, 122, 312, 115, 513, 517, 0, 486,
+ 487, 488, 496, 510, 501, 506, 502, 515, 529, 526,
+ 533, 536, 542, 586, 538, 508, 541, 532, 548, 545,
+ 553, 549, 559, 560, 565, 576, 582, 584, 569, 597,
+ 598, 622, 618, 610, 609, 620, 616, 624, 627, 625,
+ 626, 629, 638, 634, 641, 642, 647, 659, 655, 651,
+ 667, 653, 665, 646, 661, 674, 682, 697, 677, 688,
+
+ 678, 699, 711, 710, 701, 695, 722, 723, 715, 725,
+ 716, 718, 719, 724, 728, 745, 752, 734, 344, 763,
+ 765, 751, 755, 768, 769, 774, 738, 762, 784, 772,
+ 778, 782, 788, 786, 795, 813, 815, 798, 817, 801,
+ 805, 812, 790, 827, 825, 836, 811, 828, 845, 847,
+ 863, 254, 857, 850, 846, 862, 869, 868, 874, 880,
+ 876, 877, 887, 890, 835, 892, 895, 908, 888, 904,
+ 907, 928, 927, 935, 922, 918, 930, 955, 937, 1000,
+ 926, 952, 945, 946, 962, 943, 940, 957, 971, 979,
+ 981, 982, 999, 990, 984, 1006, 1004, 1009, 1017, 1036,
+
+ 1018, 1024, 1032, 1039, 1052, 1001, 1037, 1042, 1049, 1041,
+ 1057, 1066, 1051, 1061, 1065, 1067, 1068, 1069, 1089, 1097,
+ 1078, 1103, 1107, 1085, 1099, 1098, 1105, 1113, 1115, 1100,
+ 1118, 5329, 1122, 1117, 1131, 1134, 1132, 1141, 5329, 1135,
+ 1136, 1137, 1158, 1148, 1162, 1161, 1164, 1154, 1149, 1165,
+ 1170, 1175, 1168, 1177, 1184, 1230, 1185, 1187, 1191, 1220,
+ 1212, 1201, 1222, 1183, 1226, 1228, 1232, 1245, 1218, 1202,
+ 1235, 1252, 1247, 1253, 1265, 1279, 1264, 1259, 1271, 1270,
+ 1281, 1273, 1286, 1282, 1287, 1274, 1297, 1296, 1291, 1319,
+ 1309, 1320, 1325, 1331, 1328, 1330, 1335, 1311, 1334, 1329,
+
+ 1344, 1337, 1338, 1347, 1346, 1345, 1349, 1372, 1351, 1378,
+ 1364, 1376, 1371, 1387, 1377, 1389, 1391, 1383, 1407, 1396,
+ 1405, 1412, 1404, 1419, 1423, 1427, 1428, 1411, 1422, 1431,
+ 1432, 1438, 1435, 1470, 1448, 1456, 1446, 1462, 1473, 1478,
+ 1475, 1453, 1479, 1466, 1467, 1463, 1487, 1488, 1486, 1501,
+ 1499, 1505, 1483, 1502, 1504, 1524, 1526, 1522, 1531, 1511,
+ 1518, 1528, 1532, 1535, 1549, 1560, 1564, 1543, 1566, 1562,
+ 1558, 1570, 1574, 1576, 1557, 1581, 1585, 5329, 1583, 1586,
+ 1591, 1599, 1596, 1619, 1608, 1602, 1600, 1648, 5329, 1609,
+ 5329, 5329, 1615, 5329, 5329, 1622, 1628, 1635, 1623, 1697,
+
+ 1649, 1638, 1644, 1661, 1645, 1666, 1662, 1680, 1678, 1681,
+ 1700, 1687, 1683, 1702, 1691, 1713, 1712, 1722, 1718, 1717,
+ 1729, 1737, 1641, 1745, 1743, 1747, 1744, 1749, 1736, 1750,
+ 1751, 1748, 1765, 1760, 1770, 1764, 5329, 1777, 1779, 1766,
+ 1775, 1797, 1784, 1806, 5329, 1780, 1795, 1787, 1785, 1796,
+ 1810, 1811, 1815, 1813, 1802, 1825, 1827, 1833, 1843, 1829,
+ 1836, 1855, 1857, 1858, 1840, 1852, 1860, 1848, 1870, 1876,
+ 1875, 1856, 1867, 1877, 1861, 1890, 1893, 1884, 1891, 1887,
+ 1885, 1886, 1896, 1941, 1914, 1920, 1913, 1904, 1933, 1934,
+ 1927, 1907, 1931, 1959, 1938, 1970, 1961, 1955, 1960, 1964,
+
+ 1968, 1943, 1998, 1971, 1987, 1980, 1988, 2002, 2008, 2001,
+ 2018, 2015, 2011, 2012, 5329, 2021, 2017, 2022, 2010, 2026,
+ 2047, 2027, 2048, 2039, 2049, 2037, 2060, 2042, 2053, 2054,
+ 2064, 5329, 2051, 2059, 2073, 2066, 2090, 2091, 2092, 2098,
+ 2076, 2089, 5329, 2109, 2106, 2105, 2097, 2093, 2112, 2094,
+ 2128, 2121, 2125, 2138, 2139, 2133, 2140, 2144, 2141, 2129,
+ 2148, 2135, 2160, 2161, 2169, 2158, 2159, 5329, 2165, 2186,
+ 2173, 2185, 2198, 2199, 2178, 2201, 2188, 2190, 2191, 120,
+ 2196, 2210, 2202, 2208, 5329, 76, 2213, 2217, 2216, 2226,
+ 2242, 2234, 2240, 2235, 2237, 2247, 2241, 2231, 2248, 2258,
+
+ 2238, 2270, 2266, 2263, 2265, 2267, 2285, 2283, 2282, 2277,
+ 2292, 2278, 2290, 2297, 2284, 2301, 2308, 2316, 2312, 2310,
+ 2317, 2324, 2322, 2319, 2315, 2323, 2339, 2340, 2333, 2347,
+ 5329, 2344, 2343, 2354, 2349, 2359, 2361, 2379, 2358, 2376,
+ 2386, 2365, 2384, 2398, 2394, 2392, 2396, 2406, 2399, 2404,
+ 2388, 2400, 2403, 2414, 2411, 2428, 2451, 2436, 2435, 5329,
+ 2443, 2424, 2430, 2441, 2453, 2458, 2457, 2473, 2468, 2434,
+ 2431, 2486, 2474, 2488, 5329, 2487, 2492, 2483, 2491, 2484,
+ 2493, 2500, 2506, 2501, 2507, 2514, 2518, 2524, 2508, 2530,
+ 2531, 5329, 2534, 2541, 2535, 2546, 2545, 2528, 2532, 2544,
+
+ 2549, 2533, 2550, 2564, 2555, 2567, 2562, 2565, 2568, 2560,
+ 2572, 2581, 2597, 2577, 2593, 5329, 2582, 2614, 2594, 2608,
+ 2617, 2604, 2626, 2625, 2612, 2613, 2607, 2620, 2631, 2624,
+ 2628, 2645, 2639, 2635, 2647, 2652, 2653, 2651, 2659, 2666,
+ 2672, 2665, 2662, 2675, 2676, 2680, 2691, 2689, 2709, 2686,
+ 2705, 5329, 2708, 2707, 2694, 2710, 2713, 2703, 2724, 2729,
+ 2725, 2726, 2720, 2731, 2735, 2730, 2736, 2740, 2742, 2747,
+ 2751, 2743, 2733, 2775, 2777, 2767, 2778, 2781, 2771, 2786,
+ 2774, 2813, 5329, 2769, 2790, 2794, 2793, 2798, 2804, 5329,
+ 2809, 5329, 2823, 2829, 2833, 5329, 2834, 5329, 2835, 5329,
+
+ 2836, 2837, 2826, 2822, 2844, 2843, 2852, 2851, 2849, 2871,
+ 2855, 2862, 2876, 2864, 2879, 5329, 2863, 2874, 2885, 2882,
+ 2875, 2896, 2908, 2898, 2903, 2892, 2924, 2901, 2930, 5329,
+ 2913, 2929, 2912, 2928, 5329, 2909, 2936, 2926, 2922, 2944,
+ 2945, 2941, 2943, 2954, 2951, 2963, 2971, 2974, 2964, 2961,
+ 2965, 2978, 2988, 2972, 2989, 2987, 2991, 2979, 2984, 2993,
+ 3003, 3007, 3012, 3030, 3008, 3009, 3018, 3006, 5329, 3037,
+ 3033, 3026, 3035, 3039, 3031, 5329, 3023, 5329, 3049, 3058,
+ 3062, 3055, 3054, 3053, 3074, 3064, 3081, 3079, 3075, 3080,
+ 3069, 3070, 3076, 3097, 3090, 3094, 3103, 3089, 3114, 3113,
+
+ 3128, 3125, 3108, 5329, 3131, 3120, 3132, 3127, 3124, 3150,
+ 3135, 3154, 5329, 5329, 3141, 3153, 3151, 3155, 3171, 3156,
+ 3161, 5329, 3165, 3182, 3168, 3184, 3192, 3178, 3180, 3193,
+ 3191, 3188, 3210, 3209, 3211, 3206, 3214, 3215, 3204, 3220,
+ 3228, 3229, 3234, 5329, 3235, 3230, 3243, 3233, 3241, 3242,
+ 3252, 3248, 3253, 3262, 3254, 3250, 3276, 3286, 3266, 3269,
+ 3275, 3283, 3277, 3294, 3299, 3296, 3290, 3302, 5329, 3310,
+ 3289, 3312, 3293, 3309, 3324, 3316, 3328, 3311, 3326, 3323,
+ 3329, 5329, 3321, 3333, 3330, 3337, 3343, 3339, 3360, 5329,
+ 3356, 3372, 3362, 3368, 3369, 3353, 3381, 3358, 3385, 5329,
+
+ 3386, 3397, 3380, 3387, 3402, 3407, 3410, 3411, 3406, 3399,
+ 3398, 3408, 3427, 3404, 3413, 3431, 3421, 3426, 3435, 3446,
+ 3442, 3441, 3444, 3456, 3440, 3462, 3468, 3465, 3474, 3479,
+ 3454, 3472, 3489, 3478, 3482, 3481, 3469, 3495, 3475, 3502,
+ 3488, 5329, 3501, 3509, 3512, 3514, 3498, 3513, 3521, 3517,
+ 3524, 5329, 3525, 5329, 3529, 3522, 5329, 3531, 3535, 3527,
+ 3546, 3545, 3548, 3538, 3559, 3570, 3554, 5329, 3575, 3553,
+ 3569, 3574, 5329, 3577, 5329, 5329, 3573, 3565, 3589, 3582,
+ 3592, 3605, 3584, 5329, 3601, 3597, 3611, 3604, 3600, 3606,
+ 3610, 3624, 3603, 3626, 3623, 3627, 5329, 3637, 3644, 3634,
+
+ 3648, 3649, 5329, 3645, 3657, 3639, 3662, 3675, 3673, 3676,
+ 3669, 3663, 3664, 3688, 3682, 3672, 5329, 3679, 3697, 3701,
+ 3712, 3702, 3696, 3692, 3721, 3725, 3706, 3722, 3728, 3723,
+ 3724, 5329, 3737, 3741, 5329, 3743, 3740, 3749, 5329, 3766,
+ 5329, 3768, 3720, 3750, 3762, 3778, 3770, 3780, 3763, 3777,
+ 3783, 3773, 3784, 3795, 3792, 5329, 5329, 3791, 3787, 3794,
+ 3815, 3805, 3802, 3828, 3821, 3825, 5329, 3806, 3822, 3811,
+ 3830, 3832, 3823, 3819, 3836, 3847, 3850, 3855, 3840, 3852,
+ 5329, 3846, 3856, 3857, 3854, 3858, 3867, 5329, 3886, 3887,
+ 3878, 3881, 3893, 3898, 3889, 3900, 3894, 3897, 3901, 3904,
+
+ 3911, 3913, 3912, 3919, 3923, 3915, 5329, 3924, 3930, 3916,
+ 3941, 3926, 3939, 3946, 3947, 3952, 3950, 3940, 3951, 3954,
+ 5329, 3938, 3937, 3965, 3979, 3984, 3967, 3988, 3972, 3990,
+ 3992, 3977, 3995, 3968, 3996, 3981, 4007, 3999, 3994, 4015,
+ 4017, 4036, 4029, 5329, 4018, 5329, 4026, 4039, 4041, 4045,
+ 5329, 4028, 4048, 5329, 4037, 5329, 4044, 4056, 4032, 4065,
+ 4069, 5329, 4078, 4066, 4081, 4073, 4072, 4068, 4088, 5329,
+ 4090, 4095, 4091, 4092, 4083, 4106, 4107, 4108, 4118, 4105,
+ 4121, 5329, 4110, 4124, 4135, 4131, 4134, 5329, 5329, 4130,
+ 4140, 5329, 5329, 5329, 4142, 5329, 5329, 5329, 4138, 4146,
+
+ 5329, 4149, 5329, 4156, 4158, 4148, 4150, 4155, 5329, 4161,
+ 4162, 4178, 5329, 4170, 4185, 4166, 4175, 5329, 4192, 5329,
+ 4189, 4193, 4182, 4198, 4200, 4204, 4208, 4201, 4197, 4202,
+ 4206, 4220, 4221, 4216, 4210, 4225, 4212, 4224, 4233, 4230,
+ 4235, 4237, 4245, 4251, 4253, 4250, 4266, 4268, 5329, 5329,
+ 4259, 4257, 4265, 4270, 4280, 4271, 4281, 4273, 5329, 4288,
+ 4294, 4297, 4295, 4293, 4301, 4296, 4286, 4309, 4329, 4315,
+ 4320, 4321, 4322, 4314, 5329, 4324, 5329, 5329, 4325, 4341,
+ 4350, 4338, 4337, 4357, 4354, 5329, 4348, 4362, 4359, 4356,
+ 5329, 4373, 4360, 4374, 4376, 5329, 5329, 5329, 4377, 4370,
+
+ 4382, 4383, 4389, 4380, 4387, 5329, 4393, 4397, 4406, 4398,
+ 4412, 4417, 4427, 4423, 4430, 4431, 5329, 5329, 4419, 4438,
+ 4433, 4436, 4434, 4447, 4440, 4444, 4439, 5329, 4442, 4455,
+ 4464, 4470, 4471, 4482, 4472, 5329, 4465, 4466, 4468, 4485,
+ 4469, 4492, 4490, 4494, 4498, 5329, 4496, 4507, 5329, 4512,
+ 4504, 4509, 5329, 4521, 5329, 4526, 5329, 5329, 4513, 4534,
+ 4538, 4527, 4537, 4542, 4528, 4530, 4554, 4552, 4555, 5329,
+ 5329, 4550, 4562, 5329, 5329, 4558, 4549, 4565, 4557, 4560,
+ 4564, 4572, 4569, 4587, 4579, 4573, 4602, 4592, 4599, 4589,
+ 4584, 4611, 4597, 4601, 5329, 4612, 4615, 5329, 4605, 4613,
+
+ 4629, 4625, 4626, 4627, 4630, 4637, 5329, 4640, 4639, 4638,
+ 5329, 5329, 5329, 4650, 4657, 4653, 5329, 4654, 4660, 4652,
+ 4675, 4667, 4678, 4673, 4679, 4668, 4674, 5329, 4684, 4677,
+ 4697, 4694, 4699, 4696, 4690, 4705, 4702, 4701, 4714, 4718,
+ 5329, 4716, 4717, 5329, 4731, 4726, 4715, 5329, 4732, 4734,
+ 4725, 4750, 4751, 4736, 4744, 4742, 4757, 4754, 4752, 4764,
+ 4763, 4761, 4774, 4769, 4776, 5329, 4785, 4773, 5329, 4793,
+ 4783, 4799, 4802, 4805, 4806, 4803, 5329, 4809, 5329, 4810,
+ 5329, 4815, 4807, 4813, 4816, 4812, 5329, 5329, 4819, 4818,
+ 4823, 5329, 4836, 4835, 4843, 4834, 4837, 4839, 4838, 4855,
+
+ 5329, 5329, 4849, 4858, 4867, 4868, 5329, 5329, 5329, 4871,
+ 5329, 4873, 5329, 4875, 4874, 5329, 4881, 4876, 5329, 4879,
+ 4889, 4890, 4887, 4880, 4894, 4899, 4906, 4907, 4903, 4910,
+ 5329, 5329, 4913, 5329, 4923, 5329, 4925, 5329, 4915, 4928,
+ 5329, 5329, 4932, 4945, 4917, 4938, 4934, 4930, 4944, 5329,
+ 5329, 5329, 5329, 4942, 4947, 4952, 4951, 4949, 4959, 4965,
+ 4957, 4970, 4966, 4974, 4988, 4984, 4991, 4973, 4987, 5003,
+ 4992, 5329, 4990, 5329, 4994, 5007, 5011, 5008, 5014, 5001,
+ 5010, 5012, 5023, 5029, 5025, 5021, 5038, 5040, 5045, 5050,
+ 5052, 5056, 5041, 5049, 5062, 5067, 5066, 5071, 5068, 5072,
+
+ 5065, 5329, 5070, 5077, 5081, 5093, 5102, 5104, 5088, 5110,
+ 5112, 5114, 5115, 5097, 5121, 5118, 5128, 5131, 5127, 5134,
+ 5329, 5139, 5142, 5137, 5138, 5159, 5148, 5149, 5162, 5151,
+ 5165, 5170, 5173, 5174, 5329, 5177, 5329, 5329, 5180, 5169,
+ 5179, 5191, 5193, 5329, 5329, 5329, 5237, 5244, 5251, 5258,
+ 5265, 82, 5272, 5279, 5286, 5293, 5300, 5307, 5314, 5321
} ;
-static yyconst flex_int16_t yy_def[1814] =
+static yyconst flex_int16_t yy_def[1861] =
{ 0,
- 1799, 1, 1800, 1800, 1801, 1801, 1802, 1802, 1803, 1803,
- 1804, 1804, 1799, 1805, 1799, 1799, 1799, 1799, 1806, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1807, 1799, 1799, 1799, 1807, 1808, 1799, 1799, 1799, 1808,
- 1809, 1799, 1799, 1799, 1799, 1809, 1810, 1799, 1799, 1799,
- 1810, 1811, 1799, 1812, 1799, 1811, 1811, 1805, 1805, 1799,
- 1813, 1806, 1813, 1806, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1807, 1807, 1808, 1808,
- 1809, 1809, 1799, 1810, 1810, 1811, 1811, 1812, 1812, 1811,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1811, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1811, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1811, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1811, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799, 1799, 1805,
- 1799, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1811, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1811, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
- 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799, 1805,
- 1805, 1805, 1799, 1805, 1799, 1805, 1799, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1799,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1799, 1799, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1799, 1805, 1799, 1805, 1799, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
- 1805, 1799, 1805, 1799, 1799, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
-
- 1805, 1805, 1799, 1805, 1805, 1805, 1799, 1805, 1799, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1799, 1799, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
- 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
- 1805, 1799, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1799,
- 1805, 1799, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
- 1805, 1805, 1799, 1799, 1805, 1805, 1799, 1799, 1799, 1805,
- 1799, 1799, 1805, 1805, 1799, 1805, 1799, 1805, 1805, 1805,
- 1805, 1805, 1799, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
- 1805, 1799, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1799, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805,
- 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1799, 1799,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
- 1799, 1805, 1805, 1805, 1799, 1805, 1799, 1805, 1799, 1799,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1799, 1799, 1805, 1805, 1799, 1799, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1799, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
- 1805, 1799, 1799, 1799, 1805, 1805, 1805, 1799, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
-
- 1799, 1805, 1805, 1799, 1805, 1805, 1805, 1799, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1799, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799, 1805, 1799,
- 1805, 1805, 1805, 1805, 1805, 1799, 1799, 1805, 1805, 1805,
- 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1799,
- 1805, 1805, 1805, 1805, 1799, 1799, 1799, 1805, 1799, 1805,
- 1799, 1805, 1805, 1799, 1805, 1805, 1799, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1799, 1805,
- 1799, 1805, 1799, 1805, 1799, 1805, 1805, 1799, 1799, 1805,
-
- 1805, 1805, 1805, 1805, 1805, 1799, 1799, 1799, 1799, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
- 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799,
- 1799, 1805, 1805, 1805, 1805, 1805, 1799, 1799, 0, 1799,
-
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799
+ 1846, 1, 1847, 1847, 1848, 1848, 1849, 1849, 1850, 1850,
+ 1851, 1851, 1846, 1852, 1846, 1846, 1846, 1846, 1853, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1854, 1846, 1846, 1846, 1854, 1855, 1846, 1846, 1846, 1855,
+ 1856, 1846, 1846, 1846, 1846, 1856, 1857, 1846, 1846, 1846,
+ 1857, 1858, 1846, 1859, 1846, 1858, 1858, 1852, 1852, 1846,
+ 1860, 1853, 1860, 1853, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1854, 1854, 1855, 1855,
+ 1856, 1856, 1846, 1857, 1857, 1858, 1858, 1859, 1859, 1858,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1858, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1858, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1858, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1858, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
+ 1846, 1846, 1852, 1846, 1846, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1858, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1846, 1858, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
+ 1852, 1846, 1852, 1852, 1852, 1846, 1852, 1846, 1852, 1846,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
+ 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1846, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1846, 1852, 1852, 1846, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
+ 1852, 1852, 1846, 1852, 1846, 1846, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
+
+ 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1846, 1852, 1852, 1852, 1846, 1852,
+ 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1846, 1852, 1846, 1852, 1852, 1852, 1852,
+ 1846, 1852, 1852, 1846, 1852, 1846, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852,
+ 1852, 1846, 1846, 1846, 1852, 1846, 1846, 1846, 1852, 1852,
+
+ 1846, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
+ 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1846, 1852, 1846,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1846,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
+ 1846, 1852, 1852, 1852, 1852, 1846, 1846, 1846, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1846, 1852,
+ 1852, 1852, 1846, 1852, 1846, 1852, 1846, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
+ 1846, 1852, 1852, 1846, 1846, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1846, 1852, 1852,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
+ 1846, 1846, 1846, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1846, 1852, 1852, 1846, 1852, 1852, 1852, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1846, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1852,
+ 1846, 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852, 1852,
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1846, 1846, 1852, 1852, 1852, 1852, 1846, 1846, 1846, 1852,
+ 1846, 1852, 1846, 1852, 1852, 1846, 1852, 1852, 1846, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1846, 1846, 1852, 1846, 1852, 1846, 1852, 1846, 1852, 1852,
+ 1846, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
+ 1846, 1846, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1846, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+
+ 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1846, 1852, 1852,
+ 1852, 1852, 1852, 1846, 1846, 0, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846
} ;
-static yyconst flex_int16_t yy_nxt[5277] =
+static yyconst flex_uint16_t yy_nxt[5395] =
{ 0,
14, 15, 16, 17, 18, 19, 18, 14, 14, 14,
14, 18, 20, 14, 21, 22, 23, 24, 14, 25,
@@ -1041,576 +1068,590 @@ static yyconst flex_int16_t yy_nxt[5277] =
71, 45, 129, 88, 45, 134, 134, 50, 73, 50,
73, 73, 70, 73, 137, 56, 71, 68, 73, 68,
- 68, 56, 68, 86, 75, 76, 61, 68, 776, 61,
+ 68, 56, 68, 86, 75, 76, 61, 68, 796, 61,
15, 16, 17, 63, 64, 65, 15, 16, 17, 63,
64, 65, 77, 87, 95, 74, 69, 97, 69, 66,
86, 75, 76, 137, 78, 66, 69, 89, 69, 69,
- 135, 79, 111, 165, 96, 90, 133, 67, 80, 77,
+ 135, 79, 111, 167, 96, 90, 133, 67, 80, 77,
87, 95, 132, 67, 97, 69, 66, 127, 127, 130,
69, 78, 66, 69, 89, 142, 69, 91, 79, 111,
92, 96, 90, 98, 69, 80, 81, 93, 105, 94,
82, 99, 128, 83, 69, 84, 85, 100, 69, 102,
- 69, 101, 142, 103, 91, 141, 150, 92, 69, 69,
+ 69, 101, 142, 103, 91, 141, 152, 92, 69, 69,
98, 69, 146, 81, 93, 105, 94, 82, 99, 104,
83, 69, 84, 85, 100, 69, 102, 112, 101, 69,
- 103, 113, 141, 150, 69, 120, 137, 121, 143, 146,
+ 103, 113, 141, 152, 69, 120, 137, 121, 143, 146,
135, 114, 133, 123, 115, 69, 104, 106, 124, 132,
- 158, 107, 122, 69, 112, 324, 69, 108, 113, 125,
+ 160, 107, 122, 69, 112, 332, 69, 108, 113, 125,
109, 69, 120, 126, 121, 143, 116, 110, 114, 69,
- 123, 115, 130, 69, 106, 124, 117, 158, 107, 122,
+ 123, 115, 130, 69, 106, 124, 117, 160, 107, 122,
118, 119, 69, 140, 108, 69, 125, 109, 69, 129,
126, 128, 129, 116, 110, 131, 137, 131, 131, 73,
131, 73, 73, 117, 73, 134, 134, 118, 119, 136,
140, 136, 136, 68, 136, 68, 68, 73, 68, 73,
- 73, 144, 73, 68, 147, 148, 149, 73, 154, 152,
- 151, 69, 155, 1799, 145, 69, 139, 69, 69, 69,
- 69, 69, 159, 290, 1799, 69, 153, 156, 144, 157,
- 160, 147, 148, 149, 74, 154, 69, 151, 69, 155,
- 69, 145, 161, 69, 69, 162, 1799, 166, 167, 159,
- 172, 174, 69, 153, 156, 69, 157, 160, 163, 164,
- 169, 176, 171, 69, 170, 69, 69, 173, 168, 161,
-
- 69, 69, 162, 178, 166, 167, 180, 172, 174, 175,
- 69, 69, 177, 179, 69, 163, 164, 169, 176, 171,
- 69, 170, 69, 69, 173, 168, 69, 182, 181, 69,
- 178, 183, 187, 180, 184, 186, 175, 69, 185, 177,
- 179, 69, 69, 189, 188, 191, 69, 197, 190, 69,
- 205, 69, 192, 69, 182, 181, 69, 69, 183, 187,
- 193, 184, 186, 195, 69, 185, 196, 69, 201, 200,
- 189, 188, 69, 198, 197, 190, 69, 69, 1799, 192,
- 194, 69, 1799, 69, 1799, 1799, 69, 193, 202, 203,
- 195, 69, 331, 196, 199, 201, 200, 69, 69, 131,
-
- 198, 131, 131, 136, 131, 136, 136, 194, 136, 73,
- 204, 73, 73, 137, 73, 202, 203, 206, 208, 69,
- 207, 199, 209, 210, 214, 222, 69, 1799, 211, 69,
- 69, 213, 69, 212, 69, 215, 1799, 204, 1799, 69,
- 223, 1799, 224, 226, 206, 208, 139, 207, 69, 209,
- 210, 69, 222, 69, 227, 69, 216, 1799, 213, 69,
- 212, 225, 1799, 69, 69, 69, 69, 223, 229, 224,
- 226, 233, 228, 1799, 1799, 230, 69, 232, 231, 1799,
- 69, 227, 239, 216, 217, 69, 69, 234, 225, 218,
- 69, 235, 1799, 69, 219, 229, 237, 238, 233, 228,
-
- 220, 221, 230, 69, 232, 231, 240, 69, 69, 69,
- 236, 217, 241, 69, 234, 243, 218, 69, 235, 246,
- 244, 219, 242, 237, 238, 245, 247, 220, 221, 248,
- 249, 69, 69, 240, 1799, 250, 252, 236, 69, 1799,
- 251, 1799, 1799, 69, 253, 254, 69, 244, 69, 242,
- 69, 69, 245, 247, 69, 69, 256, 69, 258, 255,
- 69, 69, 250, 252, 69, 257, 69, 251, 261, 259,
- 260, 253, 254, 262, 265, 69, 267, 69, 69, 69,
- 69, 69, 266, 256, 268, 258, 255, 269, 273, 69,
- 69, 275, 257, 263, 264, 261, 259, 260, 270, 271,
-
- 262, 69, 69, 267, 69, 69, 69, 272, 278, 266,
- 274, 268, 280, 276, 69, 281, 279, 283, 69, 69,
- 263, 264, 69, 137, 69, 270, 271, 282, 286, 284,
- 277, 69, 289, 69, 272, 278, 285, 274, 69, 280,
- 276, 69, 287, 279, 69, 69, 69, 69, 69, 69,
- 288, 298, 291, 293, 282, 286, 284, 277, 69, 289,
- 292, 294, 1799, 285, 69, 295, 297, 296, 299, 287,
- 300, 302, 1799, 69, 69, 1799, 301, 288, 69, 291,
- 293, 69, 69, 307, 69, 310, 69, 292, 294, 69,
- 69, 304, 295, 297, 296, 299, 69, 300, 69, 303,
-
- 69, 305, 69, 301, 309, 306, 69, 69, 69, 69,
- 307, 308, 310, 69, 311, 312, 313, 1799, 304, 69,
- 1799, 314, 315, 69, 316, 318, 303, 317, 305, 321,
- 69, 309, 306, 319, 69, 69, 320, 69, 308, 69,
- 325, 311, 312, 69, 69, 69, 332, 69, 314, 315,
- 69, 316, 318, 328, 317, 1799, 321, 322, 323, 326,
- 319, 329, 327, 320, 69, 69, 333, 325, 69, 69,
- 337, 334, 330, 332, 335, 338, 336, 69, 340, 69,
- 328, 1799, 69, 69, 322, 323, 326, 339, 329, 327,
- 69, 69, 69, 333, 69, 343, 69, 337, 334, 330,
-
- 69, 335, 341, 336, 342, 340, 69, 344, 69, 347,
- 345, 348, 346, 349, 339, 371, 350, 355, 69, 1799,
- 353, 352, 343, 1799, 351, 354, 69, 69, 69, 341,
- 69, 342, 69, 356, 344, 69, 347, 345, 69, 346,
- 349, 69, 69, 350, 355, 357, 69, 353, 352, 365,
- 366, 351, 354, 367, 368, 369, 1799, 370, 69, 137,
- 356, 69, 69, 376, 69, 372, 374, 69, 69, 69,
- 1799, 379, 357, 358, 359, 1799, 365, 366, 69, 375,
- 367, 368, 369, 360, 370, 361, 362, 363, 373, 377,
- 364, 69, 372, 374, 69, 69, 69, 380, 69, 381,
-
- 358, 359, 69, 388, 384, 378, 375, 1799, 69, 398,
- 360, 69, 361, 362, 363, 373, 377, 364, 69, 382,
- 383, 69, 385, 386, 380, 387, 381, 390, 69, 391,
- 388, 384, 378, 69, 69, 389, 69, 1799, 69, 394,
- 69, 395, 69, 397, 396, 399, 392, 1799, 69, 385,
- 386, 69, 387, 400, 390, 401, 391, 69, 69, 393,
- 1799, 69, 389, 69, 69, 402, 394, 69, 395, 404,
- 397, 396, 399, 392, 69, 403, 406, 405, 69, 407,
- 400, 408, 401, 69, 1799, 69, 393, 410, 1799, 411,
- 409, 69, 402, 1799, 413, 418, 404, 69, 412, 69,
-
- 69, 414, 403, 69, 405, 69, 407, 69, 408, 415,
- 69, 417, 416, 69, 410, 69, 411, 409, 69, 419,
- 69, 413, 418, 424, 421, 412, 69, 69, 414, 420,
- 69, 69, 423, 422, 425, 69, 415, 467, 417, 416,
- 69, 426, 428, 427, 69, 69, 419, 431, 429, 432,
- 430, 421, 69, 69, 69, 69, 420, 69, 434, 423,
- 422, 425, 69, 69, 69, 447, 433, 450, 426, 69,
- 427, 435, 69, 69, 431, 429, 432, 430, 69, 436,
- 69, 442, 69, 443, 444, 434, 1799, 69, 69, 69,
- 445, 69, 447, 433, 450, 69, 448, 452, 435, 446,
-
- 1799, 449, 453, 69, 451, 1799, 436, 437, 442, 69,
- 443, 444, 438, 454, 439, 456, 462, 69, 1799, 458,
- 69, 69, 440, 448, 452, 69, 446, 69, 449, 453,
- 69, 451, 441, 69, 437, 455, 457, 69, 460, 438,
- 454, 439, 456, 69, 459, 461, 458, 69, 464, 440,
- 69, 463, 69, 465, 466, 468, 1799, 69, 69, 441,
- 470, 469, 455, 457, 480, 460, 69, 69, 137, 472,
- 69, 459, 461, 69, 471, 464, 69, 477, 463, 475,
- 465, 466, 468, 476, 69, 478, 69, 470, 469, 473,
- 479, 69, 474, 69, 481, 69, 472, 482, 483, 484,
-
- 69, 471, 487, 485, 477, 69, 1799, 490, 486, 488,
- 69, 1799, 69, 491, 69, 489, 473, 69, 492, 474,
- 1799, 69, 501, 498, 69, 69, 484, 1799, 493, 69,
- 485, 69, 69, 69, 490, 486, 488, 69, 494, 497,
- 69, 69, 489, 495, 69, 492, 500, 496, 69, 69,
- 498, 499, 503, 69, 502, 493, 1799, 1799, 506, 69,
- 69, 504, 69, 507, 508, 494, 497, 1799, 511, 513,
- 495, 509, 69, 500, 496, 518, 69, 69, 499, 503,
- 69, 502, 69, 505, 69, 506, 69, 510, 504, 515,
- 507, 508, 512, 69, 514, 516, 513, 1799, 509, 69,
-
- 520, 519, 69, 521, 69, 522, 69, 517, 1799, 523,
- 505, 69, 524, 69, 510, 525, 515, 526, 69, 512,
- 69, 514, 516, 69, 69, 69, 69, 520, 519, 69,
- 521, 527, 528, 530, 517, 532, 69, 531, 533, 524,
- 1799, 534, 525, 535, 536, 542, 69, 529, 69, 69,
- 538, 540, 69, 69, 69, 537, 69, 69, 527, 528,
- 69, 539, 532, 69, 69, 533, 69, 541, 534, 69,
- 535, 536, 542, 543, 529, 544, 547, 538, 540, 69,
- 549, 545, 537, 546, 69, 69, 548, 551, 539, 69,
- 550, 69, 1799, 552, 541, 554, 69, 553, 69, 555,
-
- 543, 69, 69, 547, 570, 556, 69, 549, 545, 69,
- 546, 69, 69, 548, 551, 69, 557, 550, 558, 559,
- 552, 69, 554, 561, 553, 69, 555, 560, 69, 562,
- 563, 564, 556, 566, 1799, 69, 565, 1799, 69, 69,
- 69, 69, 69, 557, 569, 558, 559, 69, 574, 571,
- 561, 572, 137, 567, 560, 69, 562, 563, 564, 69,
- 566, 568, 69, 565, 573, 575, 69, 69, 576, 1799,
- 69, 569, 69, 69, 69, 574, 571, 582, 572, 69,
- 567, 584, 586, 587, 583, 585, 1799, 1799, 568, 69,
- 599, 573, 575, 595, 69, 576, 577, 1799, 596, 69,
-
- 578, 615, 598, 579, 582, 69, 69, 69, 584, 586,
- 580, 583, 585, 581, 69, 69, 600, 69, 69, 597,
- 595, 69, 601, 577, 603, 596, 69, 578, 69, 598,
- 579, 1799, 1799, 602, 604, 1799, 69, 580, 605, 1799,
- 581, 588, 589, 600, 590, 69, 597, 591, 69, 601,
- 69, 603, 592, 606, 610, 607, 69, 608, 593, 594,
- 602, 604, 69, 69, 69, 605, 611, 69, 588, 589,
- 609, 590, 614, 69, 591, 69, 612, 616, 69, 592,
- 606, 610, 607, 618, 608, 593, 594, 613, 69, 617,
- 619, 623, 69, 611, 69, 622, 69, 609, 1799, 614,
-
- 620, 625, 621, 612, 69, 624, 626, 69, 69, 69,
- 618, 69, 627, 69, 613, 628, 629, 619, 623, 69,
- 69, 69, 622, 630, 69, 69, 631, 620, 625, 621,
- 632, 69, 624, 69, 633, 1799, 634, 635, 639, 627,
- 1799, 69, 1799, 629, 69, 1799, 69, 69, 636, 69,
- 630, 1799, 638, 631, 69, 645, 637, 632, 69, 641,
- 69, 633, 69, 634, 635, 639, 69, 640, 651, 642,
- 643, 644, 69, 69, 69, 636, 646, 69, 69, 638,
- 647, 648, 645, 637, 650, 69, 641, 649, 69, 69,
- 654, 653, 655, 656, 640, 69, 642, 643, 644, 69,
-
- 69, 662, 652, 646, 69, 69, 659, 647, 648, 69,
- 661, 650, 658, 660, 649, 664, 69, 657, 653, 69,
- 656, 69, 663, 69, 69, 69, 666, 69, 69, 652,
- 1799, 665, 69, 659, 667, 668, 69, 661, 669, 658,
- 660, 69, 664, 670, 657, 69, 69, 673, 671, 663,
- 69, 672, 683, 674, 682, 69, 675, 69, 665, 69,
- 685, 667, 69, 69, 69, 137, 69, 684, 1799, 69,
- 670, 69, 69, 686, 673, 671, 687, 69, 672, 683,
- 674, 682, 689, 675, 676, 688, 677, 685, 693, 69,
- 678, 1799, 679, 695, 684, 69, 691, 680, 69, 69,
-
- 686, 694, 681, 687, 690, 69, 692, 698, 69, 689,
- 69, 676, 688, 677, 69, 693, 69, 678, 69, 679,
- 695, 696, 697, 691, 680, 699, 703, 705, 694, 681,
- 700, 690, 701, 692, 69, 707, 704, 1799, 69, 711,
- 69, 69, 708, 69, 712, 706, 709, 69, 696, 697,
- 702, 69, 699, 703, 705, 710, 713, 700, 69, 701,
- 69, 69, 707, 704, 69, 69, 711, 714, 69, 708,
- 715, 69, 706, 709, 717, 718, 716, 702, 719, 69,
- 721, 720, 710, 713, 69, 723, 722, 724, 69, 69,
- 728, 69, 725, 69, 69, 732, 737, 715, 69, 69,
-
- 69, 717, 726, 716, 69, 719, 69, 721, 720, 69,
- 727, 730, 723, 722, 724, 69, 729, 69, 731, 725,
- 69, 69, 732, 735, 69, 733, 734, 69, 69, 726,
- 69, 736, 738, 1799, 1799, 739, 743, 727, 730, 740,
- 755, 69, 744, 729, 1799, 731, 69, 69, 69, 745,
- 735, 741, 733, 734, 742, 69, 69, 69, 736, 738,
- 69, 746, 748, 743, 747, 750, 69, 69, 749, 744,
- 1799, 69, 751, 69, 69, 752, 745, 69, 741, 753,
- 754, 742, 756, 1799, 757, 1799, 69, 69, 746, 748,
- 69, 747, 750, 69, 69, 749, 69, 758, 763, 751,
-
- 69, 69, 752, 759, 762, 760, 753, 754, 761, 756,
- 765, 757, 69, 69, 764, 69, 766, 767, 69, 69,
- 69, 69, 769, 768, 758, 763, 770, 771, 772, 1799,
- 759, 762, 760, 69, 773, 761, 69, 765, 69, 69,
- 69, 764, 69, 766, 767, 774, 778, 775, 779, 784,
- 768, 777, 785, 69, 771, 69, 69, 69, 69, 782,
- 69, 773, 69, 780, 69, 69, 781, 786, 788, 783,
- 787, 69, 774, 778, 775, 779, 69, 790, 777, 69,
- 69, 69, 1799, 69, 795, 789, 782, 1799, 791, 69,
- 780, 793, 69, 781, 786, 788, 783, 787, 69, 69,
-
- 69, 792, 794, 69, 790, 796, 797, 1799, 799, 69,
- 69, 69, 789, 798, 69, 791, 800, 801, 793, 806,
- 69, 803, 804, 802, 805, 1799, 1799, 69, 792, 794,
- 808, 69, 796, 797, 69, 799, 69, 69, 69, 807,
- 798, 69, 69, 800, 801, 69, 806, 69, 803, 804,
- 802, 805, 69, 809, 810, 811, 812, 808, 813, 814,
- 815, 69, 821, 816, 820, 818, 807, 819, 69, 69,
- 69, 69, 817, 69, 69, 69, 69, 69, 69, 69,
- 809, 810, 811, 812, 822, 813, 814, 815, 69, 821,
- 816, 820, 818, 823, 819, 824, 825, 1799, 826, 817,
-
- 1799, 828, 69, 829, 827, 69, 831, 830, 69, 832,
- 835, 822, 834, 833, 69, 69, 69, 836, 1799, 839,
- 837, 844, 824, 825, 69, 826, 69, 69, 828, 838,
- 69, 827, 840, 831, 69, 69, 832, 845, 841, 834,
- 833, 69, 69, 69, 836, 69, 839, 837, 842, 843,
- 69, 69, 69, 1799, 854, 846, 838, 847, 69, 840,
- 69, 69, 853, 1799, 855, 841, 856, 859, 69, 1799,
- 69, 860, 1799, 861, 857, 842, 843, 69, 69, 858,
- 69, 854, 846, 69, 847, 848, 69, 69, 69, 853,
- 849, 855, 850, 856, 851, 863, 852, 69, 69, 862,
-
- 861, 857, 864, 69, 865, 867, 858, 69, 866, 869,
- 69, 871, 848, 69, 69, 69, 868, 849, 870, 850,
- 1799, 851, 863, 852, 873, 875, 862, 874, 69, 864,
- 877, 865, 69, 69, 69, 866, 69, 876, 871, 872,
- 879, 878, 69, 868, 880, 870, 883, 69, 69, 882,
- 881, 69, 69, 884, 874, 69, 886, 69, 885, 69,
- 887, 888, 69, 69, 876, 889, 872, 879, 878, 896,
- 1799, 880, 69, 883, 69, 69, 882, 881, 69, 890,
- 884, 891, 892, 69, 893, 885, 894, 69, 888, 69,
- 895, 69, 900, 69, 69, 899, 69, 69, 69, 897,
-
- 69, 901, 69, 902, 1799, 898, 890, 69, 891, 892,
- 69, 69, 69, 894, 903, 905, 904, 895, 69, 900,
- 1799, 69, 899, 906, 69, 908, 897, 907, 901, 69,
- 902, 69, 898, 909, 913, 911, 912, 910, 914, 915,
- 1799, 903, 905, 904, 916, 69, 1799, 69, 1799, 918,
- 906, 69, 908, 69, 907, 69, 917, 69, 921, 69,
- 1799, 913, 911, 912, 69, 914, 920, 69, 919, 69,
- 69, 916, 69, 922, 923, 69, 918, 925, 927, 924,
- 69, 69, 69, 917, 926, 921, 69, 928, 931, 930,
- 933, 69, 69, 920, 934, 919, 929, 69, 932, 69,
-
- 922, 923, 69, 69, 925, 927, 924, 936, 69, 935,
- 69, 926, 69, 939, 928, 931, 930, 933, 69, 69,
- 937, 934, 938, 929, 940, 932, 941, 69, 69, 944,
- 1799, 1799, 942, 945, 936, 69, 935, 943, 947, 946,
- 939, 69, 69, 951, 948, 952, 949, 937, 956, 938,
- 950, 69, 69, 69, 953, 69, 69, 69, 69, 942,
- 945, 69, 69, 69, 943, 947, 946, 954, 69, 69,
- 69, 948, 952, 957, 955, 956, 958, 69, 959, 960,
- 961, 953, 69, 962, 69, 963, 69, 69, 69, 965,
- 964, 69, 1799, 967, 954, 966, 69, 970, 1799, 968,
-
- 969, 955, 69, 958, 69, 959, 960, 961, 69, 977,
- 962, 69, 963, 971, 972, 69, 965, 964, 981, 69,
- 967, 69, 966, 69, 970, 973, 968, 969, 69, 974,
- 976, 69, 978, 983, 982, 979, 69, 69, 980, 986,
- 971, 972, 975, 69, 984, 69, 985, 987, 988, 69,
- 69, 990, 973, 989, 69, 69, 974, 976, 69, 978,
- 983, 982, 979, 69, 994, 980, 69, 993, 995, 975,
- 69, 984, 69, 992, 69, 988, 69, 69, 990, 69,
- 989, 991, 998, 69, 997, 996, 69, 69, 999, 69,
- 1000, 994, 69, 1001, 993, 69, 1002, 1003, 1799, 1005,
-
- 992, 69, 1799, 1004, 69, 1006, 69, 1007, 991, 998,
- 69, 997, 996, 69, 69, 999, 69, 1000, 69, 1009,
- 1001, 1008, 1010, 1002, 1003, 69, 1005, 69, 69, 69,
- 1004, 1011, 1006, 1012, 1007, 1013, 1014, 69, 1015, 1026,
- 1016, 1017, 1799, 69, 1018, 1799, 1009, 1019, 1008, 1010,
- 69, 1020, 1022, 69, 1799, 69, 69, 1021, 1011, 69,
- 1012, 1023, 1028, 1014, 1024, 69, 69, 1016, 69, 69,
- 69, 1018, 69, 1027, 1019, 1029, 1025, 69, 1020, 1022,
- 69, 1030, 1031, 69, 1021, 69, 1032, 1033, 1023, 1028,
- 1038, 1024, 1034, 1037, 1799, 69, 1035, 69, 1036, 1041,
-
- 1027, 69, 1029, 1025, 69, 69, 69, 1039, 1030, 1031,
- 1040, 69, 1060, 69, 1033, 69, 1042, 69, 1043, 1034,
- 1037, 69, 1044, 1035, 1045, 1036, 69, 69, 1046, 69,
- 1048, 69, 69, 1047, 1039, 1049, 1799, 1040, 69, 69,
- 1050, 69, 1054, 1042, 69, 1043, 1051, 69, 69, 1044,
- 1052, 1045, 1053, 69, 1056, 1046, 1055, 1048, 69, 1059,
- 1047, 1061, 1057, 69, 69, 1058, 69, 1050, 69, 1054,
- 69, 1062, 1064, 1051, 69, 1069, 1063, 1052, 1068, 1053,
- 69, 1056, 1070, 1055, 1071, 69, 1059, 69, 1061, 1057,
- 69, 69, 1058, 69, 1065, 1074, 69, 1066, 1062, 1064,
-
- 1067, 1073, 69, 1063, 1072, 1068, 69, 1078, 69, 69,
- 69, 1071, 1075, 1082, 1076, 69, 69, 1077, 69, 69,
- 1079, 1065, 1074, 69, 1066, 1080, 1799, 1067, 1073, 69,
- 1081, 1072, 1799, 1799, 1078, 69, 69, 1083, 1799, 1075,
- 1082, 1076, 1085, 1088, 1077, 1086, 69, 1079, 69, 1087,
- 1089, 1084, 1080, 1090, 1091, 1092, 1093, 1081, 69, 69,
- 69, 1095, 69, 69, 1083, 1094, 1098, 1096, 1101, 1085,
- 1097, 1799, 1086, 1799, 69, 69, 1087, 1089, 1084, 69,
- 69, 1091, 1092, 1100, 69, 69, 1099, 69, 1095, 69,
- 1102, 69, 1094, 1098, 1096, 69, 1103, 1097, 1105, 69,
-
- 1104, 69, 1106, 1799, 1107, 69, 1108, 69, 1111, 1112,
- 1100, 1110, 1109, 1099, 1114, 69, 1118, 1102, 1799, 1113,
- 69, 69, 1115, 1103, 69, 1105, 69, 1104, 69, 1106,
- 69, 1107, 69, 1108, 69, 1111, 69, 69, 1110, 1109,
- 1116, 1114, 1117, 1119, 1120, 1121, 1113, 69, 1122, 1115,
- 69, 1124, 1123, 69, 1126, 69, 1125, 1799, 69, 1799,
- 1128, 1131, 1127, 1132, 1799, 1130, 69, 1116, 1129, 1117,
- 1119, 1120, 1121, 69, 69, 69, 69, 69, 69, 1123,
- 69, 69, 69, 1125, 1133, 69, 69, 1128, 1131, 1127,
- 1132, 1135, 1130, 1136, 1137, 1129, 1138, 1134, 69, 1141,
-
- 1799, 1139, 69, 1142, 1140, 69, 69, 69, 1143, 1144,
- 1145, 1133, 69, 1147, 1148, 69, 1146, 1149, 1135, 1153,
- 1136, 69, 1151, 1150, 1134, 1154, 1141, 69, 1139, 1155,
- 69, 1140, 69, 1799, 1799, 1143, 69, 69, 69, 69,
- 1152, 1148, 69, 1146, 69, 1162, 69, 1799, 69, 1799,
- 1150, 69, 1154, 69, 1156, 1157, 1158, 1160, 1161, 1163,
- 69, 1159, 1164, 1166, 69, 69, 69, 1152, 1165, 69,
- 1167, 69, 1168, 1169, 69, 69, 69, 1171, 1170, 1172,
- 69, 1156, 1157, 1158, 1160, 1161, 1163, 1173, 1159, 1164,
- 69, 69, 1174, 1175, 69, 1165, 69, 1167, 69, 1168,
-
- 1169, 1176, 1177, 69, 69, 1170, 1172, 69, 1179, 1180,
- 69, 1178, 1182, 1183, 1173, 1184, 1181, 1799, 1185, 1174,
- 1175, 1190, 69, 69, 1187, 1186, 1188, 69, 1176, 1177,
- 69, 1191, 69, 69, 1194, 1179, 69, 1799, 1178, 1182,
- 69, 1189, 69, 1181, 69, 69, 69, 69, 1190, 69,
- 1192, 1187, 1186, 1188, 1195, 69, 1193, 69, 1191, 69,
- 69, 1194, 1196, 1197, 1198, 1200, 69, 1203, 1189, 1199,
- 69, 1206, 1204, 1205, 1207, 69, 1208, 1192, 69, 1201,
- 1209, 1195, 1210, 1193, 1202, 69, 69, 69, 1212, 1196,
- 1197, 1198, 69, 1214, 69, 69, 1199, 1211, 69, 1204,
-
- 1205, 69, 69, 69, 1213, 1215, 1201, 69, 69, 1218,
- 1216, 1202, 1217, 69, 69, 1212, 1219, 1220, 1221, 1799,
- 1214, 69, 1222, 1224, 1211, 69, 1223, 1225, 69, 1226,
- 1227, 1799, 1215, 69, 1229, 69, 69, 1216, 1228, 1217,
- 69, 1230, 1231, 1219, 1234, 1221, 69, 1232, 69, 1222,
- 69, 69, 69, 1223, 69, 69, 1226, 1227, 1233, 69,
- 69, 1229, 69, 1235, 69, 1228, 1236, 1237, 1230, 1231,
- 69, 69, 1238, 69, 1232, 1239, 69, 1241, 1240, 1242,
- 69, 1799, 1245, 1246, 69, 1233, 1243, 1248, 1251, 1247,
- 1235, 69, 69, 1236, 1237, 1799, 1253, 1244, 69, 1238,
-
- 69, 69, 1239, 1249, 1250, 1240, 1242, 69, 69, 1245,
- 1246, 1252, 69, 1243, 69, 69, 1247, 69, 1254, 69,
- 1255, 69, 69, 1253, 1244, 1257, 1256, 1799, 1258, 1260,
- 1249, 1250, 69, 1259, 1261, 69, 1264, 69, 1252, 1799,
- 1799, 1266, 1262, 69, 1263, 1254, 69, 69, 69, 69,
- 1265, 69, 1257, 1256, 69, 1258, 1260, 69, 1267, 69,
- 1259, 1261, 69, 1264, 1268, 69, 1270, 1269, 1266, 1262,
- 1271, 1263, 1273, 1275, 1272, 69, 1277, 1265, 1274, 69,
- 1278, 1276, 1280, 1281, 1799, 1267, 69, 69, 69, 69,
- 1282, 1268, 69, 1270, 1269, 69, 1283, 1271, 69, 69,
-
- 1275, 1272, 69, 1277, 1279, 1274, 69, 1278, 1276, 1280,
- 69, 1284, 69, 69, 69, 1286, 1285, 1282, 1287, 1291,
- 1288, 1289, 1290, 1283, 69, 1294, 1293, 1799, 69, 69,
- 69, 1279, 1292, 69, 1799, 1297, 1799, 1799, 1284, 1298,
- 69, 1299, 1286, 1285, 1310, 69, 69, 1288, 1289, 1290,
- 69, 69, 1294, 1293, 69, 1295, 69, 69, 1296, 1292,
- 69, 1300, 1297, 1302, 1301, 1303, 1298, 1304, 1299, 1398,
- 1799, 69, 69, 69, 1305, 1306, 1312, 69, 69, 1309,
- 1311, 1307, 1295, 69, 1317, 1296, 69, 1308, 1300, 69,
- 1302, 1301, 1303, 69, 1304, 69, 69, 69, 69, 1314,
-
- 69, 1305, 1306, 69, 1313, 1315, 1309, 1311, 1307, 1316,
- 1318, 69, 69, 1319, 1308, 1320, 1321, 1322, 1799, 1323,
- 69, 1325, 69, 69, 1324, 1326, 1314, 69, 1327, 69,
- 69, 1313, 1315, 1328, 69, 69, 1316, 1318, 1331, 69,
- 1319, 1329, 69, 1321, 69, 69, 1323, 69, 1325, 1330,
- 69, 1324, 1326, 69, 1335, 69, 1332, 1333, 1334, 1336,
- 1328, 1337, 1799, 69, 1340, 1331, 69, 1338, 1329, 69,
- 1339, 69, 69, 69, 1342, 1341, 1330, 69, 69, 69,
- 1799, 69, 69, 1332, 1333, 1334, 1336, 1343, 1337, 69,
- 1344, 1340, 1345, 1346, 1338, 69, 69, 1339, 1347, 69,
-
- 1348, 1342, 1341, 1350, 1349, 1799, 1352, 69, 1351, 1353,
- 1354, 1355, 1356, 1357, 1343, 1358, 69, 1344, 69, 1345,
- 1346, 1359, 69, 69, 69, 69, 69, 1348, 1361, 1362,
- 1350, 1349, 69, 1352, 1365, 1351, 69, 69, 1355, 1356,
- 69, 1360, 69, 1363, 1364, 1366, 1367, 1373, 69, 69,
- 1368, 69, 1370, 69, 1369, 69, 69, 1374, 1377, 69,
- 1378, 69, 1799, 1371, 1799, 69, 69, 69, 1360, 1382,
- 1363, 1364, 1366, 69, 69, 69, 69, 1368, 1372, 1370,
- 1375, 1369, 1379, 1376, 1374, 69, 69, 1378, 1380, 69,
- 1371, 69, 69, 1381, 1383, 1384, 69, 1385, 69, 1386,
-
- 69, 1387, 69, 1388, 1390, 1372, 69, 1375, 1392, 1379,
- 1376, 1389, 1393, 1391, 69, 1380, 69, 1394, 69, 69,
- 1381, 1383, 69, 1395, 1385, 69, 1386, 69, 1387, 69,
- 1388, 1390, 1397, 69, 69, 1392, 1396, 1399, 1389, 1393,
- 1391, 69, 1400, 1401, 1394, 69, 1402, 1403, 1404, 69,
- 1395, 1799, 1408, 1406, 69, 1410, 1405, 1409, 1407, 1397,
- 69, 69, 1412, 1396, 1399, 69, 1799, 69, 1413, 1400,
- 1401, 1415, 69, 1402, 69, 1404, 69, 69, 69, 1408,
- 1406, 69, 1410, 1405, 1409, 1407, 1411, 1414, 1416, 69,
- 1419, 1417, 1799, 69, 1418, 69, 1420, 69, 1415, 1422,
-
- 69, 1421, 69, 69, 69, 1423, 1799, 1425, 1426, 1429,
- 1433, 1428, 1799, 1411, 1414, 1416, 69, 1419, 1417, 69,
- 69, 1418, 1424, 1420, 1430, 69, 69, 69, 1421, 69,
- 1427, 69, 1423, 69, 1425, 1426, 1431, 69, 1428, 1432,
- 69, 69, 1435, 1434, 1438, 69, 1436, 69, 1437, 1424,
- 1439, 1430, 1440, 1441, 1442, 1443, 1799, 1427, 1799, 69,
- 1447, 69, 69, 1431, 1446, 1444, 1432, 69, 69, 1435,
- 1434, 69, 69, 1436, 69, 1437, 69, 1439, 1445, 69,
- 69, 69, 1443, 69, 1448, 69, 69, 1447, 1449, 1450,
- 1451, 1446, 1444, 1452, 1799, 1454, 1453, 1455, 1799, 69,
-
- 1456, 1457, 69, 1459, 1458, 1445, 1460, 69, 69, 1461,
- 1799, 1448, 1799, 1799, 69, 69, 1450, 1462, 1467, 69,
- 1452, 69, 69, 1453, 1455, 69, 69, 1456, 1457, 1463,
- 69, 1458, 69, 69, 1464, 1465, 69, 1466, 69, 1468,
- 69, 1469, 1470, 1473, 1462, 1467, 69, 1471, 69, 69,
- 69, 1472, 69, 1799, 1475, 1799, 1463, 69, 69, 1480,
- 69, 1464, 1465, 1478, 1466, 1479, 1468, 69, 69, 1470,
- 1473, 1476, 1474, 1481, 1471, 69, 1482, 1477, 1472, 1483,
- 69, 1475, 69, 69, 1484, 69, 69, 69, 69, 69,
- 1478, 1486, 1479, 1489, 1485, 1487, 1488, 1490, 1476, 1474,
-
- 69, 69, 69, 1482, 1477, 69, 1483, 1491, 1492, 69,
- 1498, 1484, 1499, 1799, 1493, 1799, 1534, 1799, 1486, 69,
- 1489, 1485, 1487, 1488, 69, 69, 69, 1494, 69, 1495,
- 1500, 1496, 1497, 1501, 1491, 1492, 69, 69, 69, 69,
- 69, 1493, 69, 69, 1502, 69, 1503, 69, 1504, 1508,
- 1507, 1509, 69, 1505, 1494, 69, 1495, 1500, 1496, 1497,
- 1501, 69, 1506, 69, 1511, 1512, 1515, 1514, 69, 69,
- 1510, 1502, 1513, 1503, 69, 1504, 69, 1507, 1509, 69,
- 1505, 1516, 1517, 1519, 69, 1520, 1799, 1521, 69, 1506,
- 69, 69, 1512, 69, 1514, 69, 1518, 1510, 1522, 1513,
-
- 1523, 1799, 1524, 69, 69, 1528, 1525, 1526, 1516, 69,
- 69, 1527, 69, 69, 1521, 69, 1799, 69, 69, 1529,
- 1530, 1532, 1533, 1518, 69, 1522, 1536, 1523, 69, 1524,
- 69, 1531, 1528, 1525, 1526, 1535, 1537, 1538, 1527, 1540,
- 1799, 69, 69, 69, 1539, 1799, 1529, 1530, 69, 69,
- 1544, 1541, 1542, 69, 1543, 1545, 1546, 69, 1531, 1799,
- 1799, 69, 1535, 69, 69, 1547, 1540, 69, 69, 69,
- 69, 1539, 69, 69, 69, 1548, 1549, 1544, 1541, 1542,
- 69, 1543, 1545, 1546, 1551, 1553, 1550, 1552, 1554, 69,
- 1555, 1556, 1547, 69, 69, 69, 1559, 1560, 69, 1557,
-
- 1561, 1558, 1548, 1549, 69, 69, 1564, 69, 1799, 1568,
- 69, 1551, 1553, 1550, 1552, 1554, 69, 1555, 69, 69,
- 1562, 1563, 69, 69, 1560, 1566, 1557, 1561, 1558, 69,
- 1565, 1799, 1567, 1564, 1569, 69, 69, 69, 69, 1570,
- 1571, 69, 1572, 69, 1573, 1574, 1575, 1562, 1563, 1576,
- 1577, 1578, 1566, 1580, 1581, 69, 1579, 1565, 69, 1567,
- 1799, 1569, 69, 1799, 69, 69, 1570, 1571, 1584, 69,
- 1586, 69, 69, 1575, 69, 1585, 1576, 69, 69, 69,
- 1580, 69, 1588, 1579, 69, 69, 1582, 1583, 1587, 1590,
- 69, 1589, 1591, 1799, 1592, 1584, 69, 1586, 1593, 69,
-
- 69, 69, 1585, 1596, 1595, 1598, 1594, 1799, 69, 69,
- 69, 1597, 69, 1582, 1583, 1587, 1590, 69, 1589, 1591,
- 69, 1592, 1599, 69, 69, 1593, 69, 1600, 1601, 69,
- 1596, 1595, 1598, 1594, 69, 1602, 1603, 1604, 1597, 1606,
- 1607, 1608, 1605, 1610, 1609, 69, 1613, 1799, 69, 1599,
- 1614, 1799, 69, 1615, 1600, 69, 1611, 69, 69, 69,
- 1612, 69, 1602, 1603, 69, 69, 1606, 1607, 69, 1605,
- 1610, 1609, 69, 1613, 69, 69, 1616, 1614, 1617, 69,
- 1615, 1618, 1619, 1611, 1620, 1621, 1622, 1612, 1623, 69,
- 69, 1624, 1799, 69, 69, 69, 1625, 1628, 1626, 69,
-
- 69, 1799, 1627, 1616, 1629, 1617, 69, 69, 1618, 1619,
- 1630, 1620, 1621, 1622, 69, 1631, 1633, 1634, 1624, 69,
- 1635, 69, 1632, 69, 69, 1626, 69, 69, 69, 1627,
- 69, 1629, 1636, 1637, 1638, 69, 1639, 1630, 1640, 69,
- 1643, 69, 1631, 1633, 1634, 1641, 1642, 1635, 1645, 1632,
- 69, 1644, 69, 69, 1646, 1647, 1649, 1651, 69, 69,
- 1637, 69, 1648, 1639, 69, 69, 69, 1643, 1654, 1650,
- 69, 69, 1641, 1642, 1656, 1645, 69, 1652, 1644, 1653,
- 1655, 69, 69, 1649, 69, 1659, 69, 1660, 69, 1648,
- 69, 1661, 69, 1657, 1658, 1654, 1650, 1662, 1663, 69,
-
- 1664, 1665, 1666, 69, 1652, 69, 1653, 1655, 1667, 1668,
- 1669, 69, 69, 1670, 69, 1671, 1673, 1672, 1661, 69,
- 1657, 1658, 69, 1674, 1662, 1663, 1675, 1664, 69, 69,
- 69, 69, 1676, 1677, 69, 69, 1668, 69, 1681, 69,
- 1670, 1678, 69, 1673, 1672, 1679, 1680, 69, 69, 1686,
- 69, 69, 1799, 1675, 1688, 1682, 1685, 1687, 1689, 1676,
- 69, 69, 69, 69, 69, 1681, 69, 69, 1678, 1683,
- 1684, 69, 1679, 1680, 1691, 1690, 1686, 1692, 1693, 69,
- 1694, 69, 1682, 1685, 1687, 69, 1695, 1696, 1698, 1699,
- 1700, 1799, 69, 69, 1697, 1706, 1683, 1684, 69, 69,
-
- 69, 69, 1690, 69, 1692, 69, 1701, 1694, 1703, 1704,
- 1707, 1708, 1705, 69, 1696, 69, 69, 1700, 69, 1702,
- 69, 1697, 69, 1709, 1715, 69, 1710, 1712, 1711, 1713,
- 69, 69, 69, 1701, 1716, 1703, 1704, 69, 69, 1705,
- 1714, 69, 69, 69, 1721, 1718, 1702, 1726, 1717, 1720,
- 69, 1715, 69, 1710, 69, 1711, 1713, 1719, 69, 69,
- 1722, 1716, 69, 69, 69, 1727, 1723, 1714, 69, 69,
- 1725, 1721, 1718, 1728, 69, 1717, 1720, 69, 1724, 1729,
- 69, 1732, 69, 69, 1719, 1736, 1730, 1722, 69, 1737,
- 1731, 1733, 1727, 1723, 1799, 69, 1734, 1725, 1738, 1735,
-
- 1728, 69, 69, 1799, 69, 1724, 1729, 69, 69, 1746,
- 1739, 69, 69, 1730, 1740, 1741, 69, 1731, 1733, 1742,
- 69, 1743, 69, 1734, 69, 1738, 1735, 69, 69, 1744,
- 1745, 69, 1747, 1754, 1749, 69, 1746, 1739, 69, 1748,
- 1750, 1740, 1741, 69, 1799, 1799, 1742, 69, 1743, 1751,
- 1752, 1755, 1799, 1756, 69, 1753, 1744, 1745, 1759, 1747,
- 69, 1749, 69, 69, 69, 1799, 1748, 1750, 1762, 1799,
- 1766, 69, 69, 69, 1761, 1757, 1751, 1752, 69, 1758,
- 1756, 1767, 1753, 69, 1760, 1763, 1764, 69, 69, 69,
- 69, 1765, 69, 69, 69, 1762, 69, 1766, 1769, 1768,
-
- 1771, 1761, 1757, 69, 1770, 69, 1758, 69, 1767, 1772,
- 1774, 1760, 1763, 1764, 1775, 1773, 1778, 1799, 1765, 1776,
- 1777, 1799, 69, 69, 69, 1769, 1768, 1771, 69, 69,
- 69, 1770, 1779, 1780, 69, 1781, 1772, 69, 69, 69,
- 69, 1775, 1773, 1778, 1782, 1783, 1776, 1777, 1784, 1788,
- 1785, 1790, 69, 69, 1787, 69, 1786, 69, 69, 1779,
- 1780, 1791, 1781, 1799, 69, 1789, 1792, 1793, 1794, 1797,
- 1798, 1782, 1783, 1799, 69, 1784, 69, 1785, 69, 1795,
- 69, 1787, 1799, 1786, 1799, 69, 69, 69, 69, 69,
- 69, 1796, 1789, 1792, 1793, 1794, 69, 69, 1799, 69,
-
- 1799, 1799, 1799, 1799, 1799, 1799, 1795, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1796, 41,
- 41, 41, 41, 41, 41, 41, 46, 46, 46, 46,
- 46, 46, 46, 51, 51, 51, 51, 51, 51, 51,
- 57, 57, 57, 57, 57, 57, 57, 62, 62, 62,
- 62, 62, 62, 62, 72, 72, 1799, 72, 72, 72,
- 72, 127, 127, 1799, 1799, 1799, 127, 127, 129, 129,
- 1799, 1799, 129, 1799, 129, 131, 1799, 1799, 1799, 1799,
- 1799, 131, 134, 134, 1799, 1799, 1799, 134, 134, 136,
- 1799, 1799, 1799, 1799, 1799, 136, 138, 138, 1799, 138,
-
- 138, 138, 138, 73, 73, 1799, 73, 73, 73, 73,
- 13, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799
+ 73, 144, 73, 68, 147, 148, 156, 73, 157, 150,
+ 151, 149, 153, 154, 145, 69, 139, 69, 69, 69,
+ 69, 161, 69, 297, 1846, 69, 69, 1846, 144, 193,
+ 155, 147, 148, 156, 74, 157, 150, 151, 149, 153,
+ 158, 145, 159, 69, 69, 162, 168, 163, 161, 69,
+ 164, 69, 69, 174, 69, 171, 169, 155, 69, 172,
+ 69, 175, 173, 165, 166, 69, 69, 158, 1846, 159,
+
+ 182, 69, 162, 168, 163, 176, 170, 164, 69, 69,
+ 174, 178, 171, 169, 69, 177, 172, 180, 175, 173,
+ 165, 166, 179, 69, 69, 69, 181, 182, 183, 69,
+ 184, 69, 176, 170, 185, 69, 69, 69, 178, 186,
+ 1846, 187, 177, 188, 180, 189, 69, 192, 190, 179,
+ 69, 195, 69, 181, 191, 183, 69, 184, 194, 69,
+ 69, 185, 69, 199, 202, 198, 186, 69, 187, 69,
+ 188, 196, 189, 69, 192, 190, 69, 69, 195, 197,
+ 200, 191, 203, 1846, 204, 194, 69, 1846, 69, 1846,
+ 199, 202, 198, 69, 1846, 207, 1846, 69, 196, 1846,
+
+ 205, 201, 1846, 206, 1846, 69, 197, 200, 1846, 203,
+ 131, 204, 131, 131, 136, 131, 136, 136, 73, 136,
+ 73, 73, 208, 73, 137, 69, 69, 205, 201, 209,
+ 206, 210, 211, 212, 69, 213, 214, 1846, 227, 69,
+ 69, 215, 216, 218, 69, 217, 69, 1846, 69, 208,
+ 226, 1846, 219, 69, 1846, 139, 209, 228, 210, 211,
+ 212, 231, 213, 230, 69, 227, 229, 69, 215, 216,
+ 69, 69, 217, 220, 69, 233, 69, 226, 232, 69,
+ 69, 237, 234, 69, 228, 235, 69, 69, 231, 236,
+ 230, 69, 238, 229, 239, 1846, 243, 69, 69, 240,
+
+ 220, 221, 233, 69, 244, 232, 222, 69, 237, 234,
+ 245, 223, 235, 241, 69, 242, 236, 224, 225, 238,
+ 69, 239, 69, 243, 69, 248, 240, 251, 221, 246,
+ 249, 253, 252, 222, 254, 69, 69, 245, 223, 247,
+ 241, 250, 242, 255, 224, 225, 257, 69, 69, 1846,
+ 256, 259, 1846, 270, 69, 1846, 69, 249, 69, 252,
+ 69, 261, 69, 69, 69, 69, 247, 69, 250, 258,
+ 255, 262, 69, 257, 260, 263, 69, 256, 259, 69,
+ 69, 264, 265, 266, 69, 69, 267, 272, 261, 69,
+ 277, 69, 271, 69, 268, 269, 258, 69, 262, 69,
+
+ 273, 260, 263, 69, 274, 69, 278, 275, 264, 265,
+ 266, 276, 69, 267, 272, 69, 69, 277, 280, 271,
+ 69, 268, 269, 281, 283, 284, 69, 273, 279, 1846,
+ 286, 287, 288, 69, 275, 69, 1846, 69, 276, 137,
+ 282, 285, 289, 292, 291, 305, 296, 290, 69, 69,
+ 281, 283, 284, 69, 69, 279, 69, 69, 287, 294,
+ 69, 69, 69, 69, 293, 295, 69, 282, 285, 289,
+ 292, 291, 69, 296, 290, 298, 69, 299, 300, 1846,
+ 1846, 301, 302, 69, 303, 309, 294, 306, 308, 69,
+ 69, 293, 295, 69, 304, 1846, 307, 321, 1846, 1846,
+
+ 69, 69, 298, 69, 299, 300, 69, 69, 301, 302,
+ 69, 303, 69, 310, 306, 308, 69, 311, 312, 313,
+ 69, 304, 69, 307, 69, 314, 69, 316, 69, 315,
+ 318, 326, 317, 69, 319, 320, 69, 1846, 1846, 69,
+ 310, 322, 346, 69, 311, 312, 313, 1846, 323, 69,
+ 69, 69, 314, 69, 316, 69, 315, 318, 326, 317,
+ 327, 319, 320, 69, 324, 69, 69, 325, 322, 328,
+ 329, 333, 336, 69, 69, 323, 330, 331, 334, 339,
+ 1846, 335, 337, 69, 69, 69, 1846, 327, 69, 338,
+ 340, 324, 341, 343, 325, 69, 328, 329, 333, 336,
+
+ 69, 69, 342, 330, 331, 334, 69, 69, 335, 337,
+ 344, 348, 69, 351, 69, 69, 338, 340, 69, 341,
+ 343, 345, 349, 347, 350, 69, 69, 355, 69, 342,
+ 69, 352, 1846, 69, 353, 356, 354, 344, 348, 1846,
+ 351, 1846, 69, 357, 361, 69, 69, 379, 345, 349,
+ 347, 350, 373, 360, 355, 362, 69, 1846, 352, 358,
+ 69, 353, 365, 354, 69, 69, 69, 359, 69, 363,
+ 357, 361, 374, 69, 378, 69, 376, 375, 69, 373,
+ 360, 69, 362, 137, 69, 364, 358, 1846, 377, 365,
+ 69, 380, 1846, 69, 359, 69, 363, 383, 1846, 374,
+
+ 69, 378, 381, 376, 375, 382, 385, 387, 384, 69,
+ 1846, 389, 364, 366, 367, 377, 399, 69, 380, 69,
+ 69, 386, 69, 368, 383, 369, 370, 371, 69, 381,
+ 372, 388, 382, 391, 387, 384, 390, 69, 69, 69,
+ 366, 367, 69, 399, 69, 392, 393, 69, 386, 394,
+ 368, 395, 369, 370, 371, 69, 69, 372, 388, 396,
+ 391, 404, 69, 390, 397, 398, 400, 401, 408, 402,
+ 69, 407, 1846, 405, 69, 69, 394, 69, 395, 69,
+ 69, 406, 403, 411, 410, 412, 396, 69, 404, 69,
+ 69, 397, 398, 400, 401, 69, 402, 409, 407, 69,
+
+ 405, 413, 415, 69, 69, 69, 69, 69, 406, 403,
+ 411, 410, 412, 414, 417, 416, 69, 418, 1846, 419,
+ 421, 420, 1846, 69, 409, 422, 1846, 69, 413, 415,
+ 425, 423, 424, 1846, 426, 69, 69, 69, 69, 1846,
+ 414, 69, 416, 69, 418, 69, 419, 421, 420, 427,
+ 428, 69, 422, 69, 429, 69, 69, 425, 423, 424,
+ 69, 426, 434, 430, 431, 435, 432, 433, 436, 69,
+ 69, 439, 69, 69, 69, 69, 427, 428, 437, 69,
+ 438, 429, 441, 440, 445, 443, 69, 69, 1846, 434,
+ 430, 431, 69, 432, 433, 436, 69, 442, 1846, 69,
+
+ 69, 444, 69, 69, 446, 437, 69, 438, 69, 441,
+ 440, 445, 443, 69, 447, 69, 453, 454, 455, 461,
+ 1846, 69, 69, 69, 442, 69, 458, 456, 444, 69,
+ 1846, 446, 459, 1846, 460, 467, 457, 1846, 462, 69,
+ 69, 447, 448, 453, 454, 455, 461, 449, 466, 450,
+ 69, 468, 1846, 458, 463, 464, 69, 451, 69, 459,
+ 69, 460, 467, 457, 69, 462, 69, 452, 69, 448,
+ 69, 465, 469, 69, 449, 466, 450, 470, 468, 471,
+ 472, 463, 464, 69, 451, 69, 473, 474, 475, 477,
+ 69, 69, 478, 480, 452, 476, 479, 69, 465, 469,
+
+ 483, 482, 69, 137, 470, 481, 471, 472, 69, 69,
+ 485, 69, 69, 484, 474, 475, 477, 69, 486, 69,
+ 69, 487, 476, 479, 69, 69, 488, 483, 482, 69,
+ 489, 491, 481, 490, 69, 69, 492, 485, 493, 494,
+ 484, 495, 496, 497, 499, 486, 1846, 69, 487, 69,
+ 498, 500, 501, 504, 502, 1846, 1846, 69, 69, 1846,
+ 490, 505, 1846, 69, 1846, 1846, 69, 69, 69, 69,
+ 497, 499, 69, 69, 506, 69, 69, 498, 503, 501,
+ 510, 502, 69, 69, 69, 69, 507, 69, 505, 69,
+ 511, 508, 513, 512, 515, 509, 514, 516, 1846, 520,
+
+ 1846, 506, 69, 517, 1846, 503, 518, 510, 1846, 69,
+ 69, 525, 522, 507, 69, 69, 69, 511, 508, 513,
+ 512, 69, 509, 514, 516, 69, 520, 69, 519, 69,
+ 517, 521, 523, 518, 69, 524, 526, 527, 532, 522,
+ 530, 528, 69, 69, 529, 69, 1846, 531, 533, 69,
+ 69, 535, 534, 540, 1846, 519, 1846, 69, 521, 523,
+ 69, 69, 524, 526, 527, 69, 69, 530, 528, 69,
+ 69, 529, 538, 69, 531, 533, 69, 536, 535, 534,
+ 539, 537, 541, 547, 69, 544, 69, 542, 546, 545,
+ 558, 69, 548, 551, 69, 549, 550, 1846, 1846, 538,
+
+ 69, 69, 543, 553, 69, 69, 554, 539, 69, 541,
+ 547, 69, 1846, 69, 542, 546, 69, 69, 552, 548,
+ 551, 69, 549, 550, 69, 69, 69, 555, 556, 543,
+ 553, 557, 559, 554, 560, 1846, 561, 69, 565, 69,
+ 69, 562, 69, 69, 563, 552, 1846, 564, 566, 69,
+ 568, 569, 567, 1846, 555, 556, 69, 1846, 557, 559,
+ 69, 560, 69, 561, 69, 565, 69, 570, 562, 69,
+ 69, 563, 573, 69, 564, 566, 571, 568, 569, 567,
+ 572, 69, 575, 576, 574, 1846, 577, 69, 578, 580,
+ 584, 579, 1846, 581, 570, 69, 69, 1846, 69, 573,
+
+ 69, 582, 69, 571, 69, 583, 586, 572, 137, 575,
+ 576, 574, 69, 577, 69, 578, 580, 585, 579, 69,
+ 581, 69, 587, 69, 69, 588, 589, 590, 582, 69,
+ 603, 591, 583, 586, 69, 598, 592, 69, 69, 1846,
+ 69, 1846, 600, 599, 585, 601, 69, 69, 633, 587,
+ 602, 1846, 588, 69, 590, 1846, 615, 69, 591, 1846,
+ 69, 69, 598, 592, 593, 611, 69, 612, 594, 600,
+ 599, 595, 601, 69, 617, 614, 69, 602, 596, 69,
+ 613, 597, 69, 69, 616, 1846, 69, 69, 1846, 1846,
+ 619, 593, 611, 1846, 612, 594, 623, 620, 595, 69,
+
+ 69, 617, 614, 622, 69, 596, 618, 613, 597, 604,
+ 605, 616, 606, 1846, 621, 607, 69, 619, 69, 69,
+ 608, 69, 625, 623, 620, 69, 609, 610, 1846, 69,
+ 622, 627, 624, 618, 628, 69, 604, 605, 69, 606,
+ 69, 621, 607, 626, 629, 631, 630, 608, 632, 625,
+ 69, 69, 634, 609, 610, 69, 69, 635, 627, 624,
+ 69, 628, 1846, 637, 636, 639, 640, 69, 638, 641,
+ 626, 629, 631, 630, 69, 69, 643, 645, 642, 644,
+ 649, 69, 69, 69, 635, 69, 69, 69, 69, 69,
+ 637, 636, 639, 640, 646, 638, 641, 647, 69, 648,
+
+ 650, 1846, 69, 69, 69, 642, 644, 649, 69, 651,
+ 652, 656, 655, 69, 1846, 69, 658, 69, 69, 657,
+ 653, 646, 69, 69, 647, 69, 648, 650, 654, 659,
+ 662, 661, 664, 69, 69, 69, 651, 652, 656, 655,
+ 69, 660, 663, 658, 69, 665, 657, 653, 69, 69,
+ 667, 69, 666, 69, 668, 654, 659, 662, 661, 664,
+ 669, 670, 671, 69, 672, 69, 1846, 69, 660, 663,
+ 674, 69, 665, 673, 69, 675, 676, 667, 69, 666,
+ 677, 69, 678, 679, 683, 681, 69, 669, 670, 680,
+ 69, 682, 684, 69, 69, 69, 69, 674, 69, 69,
+
+ 673, 685, 675, 676, 686, 69, 688, 677, 69, 678,
+ 687, 691, 681, 69, 69, 69, 680, 689, 682, 684,
+ 690, 1846, 69, 69, 69, 69, 699, 692, 69, 69,
+ 1846, 137, 706, 688, 69, 700, 1846, 687, 691, 701,
+ 702, 1846, 69, 705, 689, 69, 1846, 690, 703, 1846,
+ 717, 69, 69, 699, 692, 693, 707, 694, 69, 706,
+ 704, 695, 700, 696, 709, 69, 701, 702, 697, 69,
+ 705, 69, 69, 698, 708, 703, 69, 712, 1846, 69,
+ 713, 69, 693, 707, 694, 716, 710, 704, 695, 715,
+ 696, 709, 714, 69, 722, 697, 711, 69, 69, 69,
+
+ 698, 708, 69, 723, 712, 724, 69, 713, 69, 69,
+ 718, 725, 716, 710, 726, 719, 715, 720, 69, 714,
+ 728, 722, 731, 711, 727, 69, 69, 732, 733, 1846,
+ 723, 734, 724, 737, 736, 721, 69, 718, 725, 69,
+ 69, 726, 719, 729, 720, 730, 69, 728, 69, 69,
+ 69, 727, 735, 69, 732, 69, 69, 739, 734, 69,
+ 69, 736, 721, 738, 69, 69, 741, 743, 740, 742,
+ 729, 748, 730, 745, 747, 69, 744, 69, 746, 735,
+ 69, 749, 752, 757, 739, 69, 69, 69, 750, 69,
+ 738, 69, 69, 741, 743, 740, 742, 69, 69, 751,
+
+ 745, 747, 69, 744, 69, 746, 753, 754, 749, 752,
+ 756, 69, 755, 758, 69, 750, 759, 1846, 761, 763,
+ 760, 762, 764, 1846, 765, 767, 751, 69, 69, 69,
+ 69, 69, 69, 753, 754, 69, 69, 756, 766, 755,
+ 758, 770, 768, 69, 69, 761, 763, 69, 762, 764,
+ 69, 765, 767, 769, 771, 775, 772, 774, 777, 69,
+ 773, 776, 778, 69, 779, 766, 69, 69, 770, 768,
+ 1846, 69, 1846, 69, 783, 784, 69, 69, 69, 69,
+ 769, 771, 69, 772, 774, 777, 69, 773, 776, 778,
+ 780, 779, 781, 782, 785, 787, 69, 69, 69, 69,
+
+ 786, 783, 784, 69, 791, 789, 790, 69, 788, 1846,
+ 1846, 69, 792, 1846, 795, 794, 69, 780, 793, 781,
+ 782, 785, 787, 69, 69, 797, 69, 786, 69, 69,
+ 798, 791, 799, 804, 69, 788, 69, 69, 801, 69,
+ 69, 795, 794, 802, 800, 793, 69, 803, 69, 805,
+ 806, 69, 797, 1846, 69, 69, 807, 798, 1846, 799,
+ 808, 812, 809, 810, 69, 801, 813, 811, 815, 69,
+ 802, 800, 69, 69, 803, 69, 69, 806, 69, 69,
+ 69, 816, 819, 807, 814, 69, 69, 808, 812, 809,
+ 810, 817, 818, 813, 811, 815, 69, 821, 820, 822,
+
+ 823, 69, 824, 69, 69, 69, 825, 826, 69, 819,
+ 827, 814, 1846, 828, 829, 69, 69, 830, 817, 818,
+ 69, 69, 69, 69, 821, 820, 822, 823, 69, 824,
+ 69, 832, 833, 825, 826, 69, 834, 827, 831, 69,
+ 828, 829, 836, 835, 830, 837, 69, 839, 69, 838,
+ 69, 845, 840, 69, 69, 69, 841, 69, 832, 833,
+ 69, 69, 69, 834, 843, 831, 842, 844, 846, 836,
+ 835, 69, 837, 847, 839, 849, 838, 69, 69, 840,
+ 848, 69, 69, 841, 850, 69, 851, 69, 853, 856,
+ 852, 843, 69, 842, 844, 846, 69, 69, 855, 69,
+
+ 847, 854, 849, 69, 857, 858, 859, 848, 860, 1846,
+ 867, 850, 861, 865, 69, 853, 856, 69, 862, 863,
+ 864, 868, 69, 1846, 69, 855, 69, 869, 854, 866,
+ 69, 857, 69, 859, 69, 860, 69, 69, 69, 861,
+ 865, 69, 69, 870, 69, 862, 863, 864, 876, 69,
+ 879, 1846, 69, 1846, 869, 1846, 866, 877, 878, 880,
+ 882, 881, 69, 888, 883, 1846, 69, 889, 69, 69,
+ 870, 871, 69, 69, 69, 876, 872, 879, 873, 69,
+ 874, 69, 875, 884, 877, 878, 880, 885, 881, 69,
+ 888, 69, 886, 887, 889, 69, 69, 890, 871, 892,
+
+ 891, 893, 896, 872, 898, 873, 69, 874, 894, 875,
+ 884, 69, 69, 895, 885, 897, 899, 900, 1846, 886,
+ 887, 69, 69, 902, 69, 69, 69, 891, 893, 69,
+ 69, 69, 901, 903, 904, 894, 905, 906, 69, 69,
+ 895, 909, 897, 899, 69, 69, 69, 907, 910, 908,
+ 902, 911, 69, 912, 915, 916, 69, 919, 914, 901,
+ 903, 904, 69, 905, 906, 913, 69, 918, 69, 69,
+ 69, 69, 69, 69, 907, 1846, 908, 925, 911, 69,
+ 917, 915, 69, 69, 69, 914, 922, 69, 69, 920,
+ 923, 924, 913, 69, 918, 921, 927, 929, 69, 926,
+
+ 69, 928, 69, 69, 925, 69, 69, 917, 930, 932,
+ 69, 931, 933, 922, 936, 69, 920, 923, 924, 69,
+ 69, 934, 921, 927, 929, 935, 926, 937, 928, 939,
+ 938, 69, 69, 940, 942, 69, 932, 1846, 931, 933,
+ 941, 936, 69, 943, 944, 69, 69, 946, 1846, 945,
+ 69, 69, 69, 947, 937, 69, 939, 938, 69, 948,
+ 949, 942, 69, 69, 69, 951, 69, 941, 950, 69,
+ 943, 944, 952, 69, 946, 956, 945, 69, 953, 954,
+ 947, 955, 960, 69, 957, 69, 948, 949, 958, 69,
+ 69, 69, 951, 962, 959, 950, 965, 69, 967, 952,
+
+ 69, 961, 956, 69, 69, 953, 954, 964, 955, 960,
+ 69, 957, 963, 69, 69, 958, 966, 968, 69, 969,
+ 962, 959, 970, 971, 69, 967, 972, 69, 961, 69,
+ 1846, 975, 69, 974, 964, 976, 977, 984, 973, 963,
+ 978, 69, 1846, 69, 968, 69, 69, 69, 69, 970,
+ 971, 69, 983, 972, 1846, 979, 980, 981, 69, 991,
+ 974, 982, 69, 69, 69, 973, 985, 69, 69, 69,
+ 986, 69, 987, 69, 69, 990, 989, 988, 69, 983,
+ 69, 69, 979, 980, 981, 69, 991, 992, 982, 69,
+ 994, 993, 1846, 985, 995, 997, 996, 986, 999, 987,
+
+ 1003, 1004, 990, 989, 988, 69, 998, 69, 1006, 69,
+ 1005, 1008, 69, 69, 992, 69, 69, 994, 993, 69,
+ 1846, 995, 997, 996, 69, 999, 1000, 1003, 69, 1007,
+ 1001, 69, 69, 998, 1846, 1006, 69, 1005, 1009, 1010,
+ 1012, 1011, 69, 1002, 1846, 1013, 1014, 69, 1846, 1016,
+ 1015, 69, 1017, 1000, 1846, 1846, 1007, 1001, 1018, 1020,
+ 69, 69, 1022, 1846, 69, 1009, 1010, 69, 1011, 1019,
+ 1002, 69, 69, 69, 69, 69, 1016, 1015, 1021, 1017,
+ 1023, 69, 69, 1024, 1026, 1018, 1020, 69, 1025, 69,
+ 69, 1027, 1030, 69, 1028, 1029, 1019, 1032, 1033, 1031,
+
+ 69, 69, 69, 1846, 1846, 1021, 1034, 1023, 1039, 69,
+ 1024, 1026, 69, 69, 69, 1025, 1038, 69, 1027, 1030,
+ 69, 1028, 1029, 69, 1032, 1033, 1031, 1035, 1036, 1037,
+ 69, 1040, 1041, 1034, 69, 1039, 69, 1042, 1043, 69,
+ 1044, 69, 1045, 1038, 1047, 1046, 69, 69, 1048, 1049,
+ 69, 69, 1054, 1050, 1035, 1036, 1037, 1055, 1051, 1041,
+ 69, 1052, 69, 1056, 69, 1043, 69, 69, 69, 1045,
+ 1057, 1047, 1046, 1053, 69, 1048, 1049, 1059, 1060, 69,
+ 1050, 69, 69, 69, 1055, 1051, 1061, 1058, 1052, 69,
+ 1056, 1063, 69, 1062, 1065, 1066, 1064, 1057, 1069, 69,
+
+ 1053, 69, 69, 69, 1059, 1068, 1067, 1070, 1071, 69,
+ 69, 1846, 69, 1061, 1058, 1072, 69, 69, 1063, 1846,
+ 1062, 1065, 69, 1064, 1073, 69, 69, 69, 1074, 69,
+ 1075, 69, 1068, 1067, 1070, 1071, 1076, 1077, 1081, 1078,
+ 1079, 69, 1072, 1080, 69, 69, 69, 69, 1082, 1083,
+ 69, 1073, 1084, 1085, 1089, 1074, 69, 1075, 1088, 1086,
+ 1090, 69, 1087, 1076, 69, 1081, 1078, 1079, 69, 69,
+ 1080, 69, 1091, 69, 1094, 69, 1083, 69, 1092, 1084,
+ 1085, 1089, 1093, 1095, 1098, 1088, 1086, 69, 1099, 1087,
+ 1100, 69, 69, 69, 1096, 1104, 69, 1097, 1103, 1091,
+
+ 69, 1094, 69, 1105, 1102, 1092, 1101, 69, 69, 1093,
+ 1095, 1098, 69, 69, 69, 1109, 1110, 69, 69, 69,
+ 1106, 1096, 1104, 1108, 1097, 1103, 1107, 69, 69, 1112,
+ 1105, 1102, 69, 1101, 1111, 69, 1846, 1117, 1118, 1120,
+ 1113, 69, 1109, 1110, 1121, 1115, 69, 1106, 1116, 1119,
+ 1108, 69, 69, 1107, 1114, 1122, 1112, 1123, 69, 1124,
+ 1127, 1111, 69, 69, 1117, 69, 69, 1113, 1125, 69,
+ 69, 1121, 1115, 69, 1126, 1116, 1119, 1128, 1131, 69,
+ 1129, 1114, 1122, 1132, 1136, 1130, 1124, 1127, 69, 69,
+ 1133, 69, 69, 69, 69, 1125, 1134, 1135, 1139, 69,
+
+ 1137, 1126, 1142, 69, 1128, 1846, 69, 1129, 1138, 69,
+ 1132, 1136, 1130, 1143, 1140, 1846, 69, 1133, 69, 1141,
+ 69, 1148, 69, 1134, 1135, 1139, 69, 1137, 1144, 69,
+ 69, 69, 1145, 1150, 1146, 1138, 1147, 1151, 1149, 1152,
+ 1143, 1140, 69, 1153, 69, 1154, 1141, 69, 69, 69,
+ 1156, 1155, 69, 69, 1157, 1144, 1158, 1159, 69, 1145,
+ 1150, 1146, 1160, 1147, 1151, 1149, 69, 69, 69, 1163,
+ 1153, 69, 69, 69, 1162, 1161, 1167, 1156, 1155, 69,
+ 69, 69, 1164, 1158, 1159, 1166, 69, 1168, 69, 1160,
+ 69, 69, 69, 1169, 1173, 1165, 1163, 1178, 1170, 1171,
+
+ 69, 1162, 1161, 1167, 69, 1175, 1172, 69, 1174, 1164,
+ 1176, 1177, 1166, 69, 69, 69, 1179, 1180, 1181, 1182,
+ 1184, 69, 1165, 1186, 69, 1170, 1171, 69, 69, 1183,
+ 1193, 69, 69, 1172, 69, 1174, 1185, 69, 1177, 1846,
+ 69, 1197, 1191, 1179, 1846, 1181, 1195, 69, 69, 69,
+ 69, 1187, 1188, 1189, 69, 1199, 1183, 1192, 1190, 69,
+ 1194, 69, 69, 1185, 69, 1196, 69, 69, 69, 1191,
+ 1200, 69, 1201, 1195, 1198, 69, 1202, 69, 1187, 1188,
+ 1189, 69, 1199, 1203, 1192, 1190, 1205, 1194, 1204, 1206,
+ 1207, 69, 1196, 1208, 69, 1209, 69, 1200, 69, 1201,
+
+ 69, 1198, 1211, 1202, 1212, 1214, 69, 69, 1846, 1215,
+ 69, 1213, 1210, 1205, 1216, 1204, 1206, 1207, 69, 69,
+ 1208, 1217, 1209, 69, 69, 69, 1219, 1218, 1221, 1211,
+ 1220, 1222, 1214, 1224, 1846, 69, 69, 69, 1213, 1210,
+ 69, 1223, 69, 1226, 69, 69, 69, 1227, 69, 69,
+ 1225, 69, 1232, 1219, 1218, 1221, 1228, 1220, 1222, 69,
+ 1224, 1229, 1231, 1230, 69, 69, 1233, 1235, 1223, 69,
+ 1226, 1234, 1236, 69, 1227, 1238, 1239, 1225, 69, 69,
+ 69, 1240, 69, 1228, 69, 1241, 1242, 1237, 1229, 1231,
+ 1230, 1243, 69, 1233, 69, 1244, 1245, 1247, 1234, 1236,
+
+ 69, 1246, 1250, 69, 1248, 1249, 69, 69, 1251, 1252,
+ 69, 1253, 69, 69, 1237, 1254, 69, 69, 1243, 69,
+ 69, 1255, 1244, 1256, 1247, 1257, 69, 69, 1246, 1258,
+ 1259, 1248, 1249, 69, 1261, 1251, 69, 1260, 1253, 69,
+ 69, 1263, 1254, 1264, 1262, 1265, 1267, 69, 1255, 1846,
+ 69, 69, 69, 1272, 1266, 69, 1258, 1259, 1268, 69,
+ 69, 1261, 69, 69, 1260, 69, 1269, 69, 1263, 69,
+ 1264, 1262, 1265, 69, 1270, 1273, 69, 1274, 1271, 1275,
+ 1272, 1266, 1278, 69, 69, 1268, 69, 1276, 1281, 1279,
+ 1283, 69, 69, 1269, 1280, 1288, 1284, 69, 1277, 1282,
+
+ 1846, 1270, 1273, 69, 1286, 1271, 1275, 69, 69, 1278,
+ 1285, 69, 69, 69, 1276, 69, 1279, 1283, 1287, 1289,
+ 69, 1280, 69, 1291, 1292, 1277, 1282, 69, 1290, 1294,
+ 69, 1286, 1293, 1295, 1846, 69, 1846, 1285, 69, 69,
+ 1297, 69, 69, 69, 69, 1287, 1289, 1296, 69, 69,
+ 1291, 1292, 1298, 1301, 1299, 1290, 1294, 1302, 1300, 1293,
+ 1295, 69, 69, 1303, 69, 69, 1304, 1297, 1307, 1305,
+ 1306, 1315, 69, 1846, 1296, 69, 1308, 69, 1309, 1298,
+ 1301, 1299, 69, 69, 1302, 1300, 69, 69, 1310, 1311,
+ 1303, 1318, 1312, 1304, 1314, 69, 1305, 1306, 1313, 1325,
+
+ 69, 69, 69, 1308, 1316, 1309, 1317, 69, 1846, 1319,
+ 69, 69, 1321, 69, 69, 1310, 1311, 69, 1318, 1312,
+ 69, 1314, 1320, 1846, 1322, 1313, 69, 1324, 1323, 1328,
+ 69, 1316, 1846, 1317, 69, 69, 1319, 1326, 1327, 69,
+ 69, 1331, 1329, 1332, 69, 1330, 1341, 1333, 1846, 1320,
+ 69, 1322, 1846, 1334, 1324, 1323, 1328, 1335, 69, 69,
+ 69, 69, 69, 69, 1326, 1327, 69, 1336, 1331, 1329,
+ 1332, 1337, 1330, 1341, 1333, 69, 1338, 1846, 69, 69,
+ 1334, 69, 1343, 1339, 1335, 1340, 1342, 69, 69, 1344,
+ 1345, 1346, 1348, 1347, 1336, 1351, 1846, 1350, 1337, 1349,
+
+ 69, 69, 1354, 1338, 69, 1356, 69, 1355, 69, 1343,
+ 1339, 69, 1340, 1342, 1352, 69, 69, 1345, 69, 1348,
+ 1347, 69, 69, 1353, 1350, 69, 1349, 1357, 1358, 69,
+ 69, 1359, 69, 69, 1355, 1360, 1362, 1361, 1364, 1846,
+ 69, 1352, 1363, 69, 69, 1365, 1369, 1370, 1367, 69,
+ 1353, 1846, 1368, 69, 1357, 1358, 1366, 69, 1359, 69,
+ 69, 69, 1371, 69, 1361, 1364, 69, 1846, 69, 1363,
+ 69, 1373, 1365, 1369, 69, 1367, 1372, 1374, 69, 1368,
+ 1376, 1380, 1375, 1366, 69, 69, 1379, 1378, 69, 1371,
+ 69, 1377, 69, 69, 69, 69, 69, 1382, 1373, 1381,
+
+ 1388, 1383, 1384, 1372, 1374, 69, 1385, 1376, 1380, 1375,
+ 1387, 1389, 1392, 1379, 1378, 1393, 69, 1386, 1377, 69,
+ 1390, 1391, 1394, 1396, 69, 69, 1381, 69, 1383, 1384,
+ 1397, 69, 69, 1385, 1398, 69, 69, 1387, 69, 69,
+ 1400, 1401, 69, 1395, 1386, 1399, 1402, 1390, 1391, 69,
+ 69, 69, 1403, 69, 69, 1404, 1405, 69, 1846, 1407,
+ 1406, 69, 69, 1409, 69, 1413, 1411, 1400, 69, 1414,
+ 1395, 1415, 1399, 1402, 1408, 69, 69, 69, 69, 69,
+ 1410, 1412, 1404, 1405, 69, 69, 1407, 1406, 69, 69,
+ 69, 1416, 69, 1411, 1417, 1418, 1414, 1419, 1415, 1420,
+
+ 1424, 1408, 1422, 69, 1426, 69, 69, 1410, 1412, 1421,
+ 69, 1425, 1423, 1428, 1431, 69, 1846, 69, 1416, 69,
+ 1427, 1417, 69, 1429, 1419, 1430, 69, 1424, 69, 1422,
+ 69, 1426, 69, 69, 69, 1432, 1421, 69, 1425, 1423,
+ 1428, 1431, 1433, 1434, 1435, 69, 1437, 1427, 1439, 1436,
+ 1429, 1438, 1430, 69, 1442, 69, 69, 1440, 1445, 1846,
+ 1444, 1846, 1432, 1447, 69, 1441, 69, 69, 1443, 1433,
+ 69, 1435, 1446, 1437, 69, 69, 1436, 69, 1438, 69,
+ 1449, 1442, 69, 69, 1440, 1445, 69, 1444, 1448, 1450,
+ 1447, 1451, 1441, 1452, 69, 1443, 1453, 1454, 1455, 1446,
+
+ 1456, 1846, 1459, 69, 69, 1457, 69, 69, 1460, 1458,
+ 69, 69, 1466, 1846, 1461, 1448, 69, 1846, 1451, 69,
+ 1452, 69, 1463, 1453, 1454, 1455, 69, 1456, 69, 69,
+ 69, 1462, 1457, 69, 1465, 1460, 1458, 1468, 1467, 1464,
+ 1469, 1461, 1470, 69, 69, 69, 69, 1472, 69, 1463,
+ 1471, 1846, 1474, 1475, 1476, 1473, 69, 1477, 1462, 69,
+ 1478, 1465, 69, 1479, 1468, 1467, 1464, 1469, 69, 69,
+ 1480, 1483, 69, 69, 1472, 1481, 69, 1471, 69, 1474,
+ 69, 1476, 1473, 1482, 69, 1485, 69, 69, 69, 1486,
+ 1487, 1484, 1488, 69, 69, 1489, 69, 1480, 1483, 69,
+
+ 69, 1490, 1481, 1491, 69, 1492, 1493, 1494, 69, 1846,
+ 1482, 1496, 1485, 69, 1495, 1497, 69, 1487, 1484, 1498,
+ 69, 1506, 1489, 69, 1499, 1501, 1500, 69, 1490, 1502,
+ 69, 69, 1492, 1493, 1494, 69, 69, 1504, 69, 69,
+ 69, 1495, 69, 1503, 69, 1507, 69, 1505, 69, 1508,
+ 69, 1499, 1501, 1500, 69, 1509, 1502, 1510, 69, 69,
+ 1512, 1517, 69, 69, 1504, 1511, 1513, 1515, 69, 1516,
+ 1503, 69, 1507, 69, 1505, 69, 1508, 1518, 1514, 1846,
+ 1519, 1846, 1509, 69, 1510, 1527, 1521, 1512, 69, 69,
+ 1520, 69, 1511, 1513, 1515, 69, 1516, 69, 1522, 1528,
+
+ 1524, 1523, 1525, 69, 69, 1514, 69, 1519, 69, 69,
+ 1526, 69, 1527, 1521, 1529, 1530, 1535, 1520, 69, 69,
+ 1536, 1531, 1532, 1534, 69, 1522, 69, 1524, 1523, 1525,
+ 1533, 69, 69, 69, 69, 69, 1537, 1526, 1541, 69,
+ 1846, 1529, 1530, 1535, 1538, 1542, 1539, 69, 1531, 1532,
+ 1534, 1540, 69, 69, 1543, 1545, 1544, 1533, 69, 69,
+ 69, 1546, 69, 69, 1547, 1541, 1548, 69, 1549, 1550,
+ 1553, 1538, 1542, 1539, 1551, 69, 69, 1552, 1540, 69,
+ 1554, 1543, 1545, 1544, 1555, 1557, 69, 1558, 69, 1559,
+ 1556, 1547, 69, 1548, 69, 69, 1550, 69, 69, 1562,
+
+ 69, 1551, 1561, 1560, 1552, 1563, 1565, 1554, 69, 1846,
+ 1564, 69, 69, 1567, 69, 69, 1559, 1556, 69, 1566,
+ 69, 69, 1568, 1570, 1569, 69, 1562, 69, 1571, 1561,
+ 1560, 69, 1563, 1565, 1572, 69, 69, 1564, 1846, 1573,
+ 1567, 1574, 1575, 1576, 69, 1577, 1566, 1846, 1578, 1568,
+ 69, 1569, 1579, 1846, 1580, 69, 1585, 69, 1846, 1582,
+ 1583, 69, 1584, 1846, 1846, 69, 1573, 1846, 69, 69,
+ 1576, 69, 69, 1581, 69, 1578, 69, 69, 69, 1579,
+ 69, 1580, 69, 1585, 1586, 69, 1582, 1583, 1587, 1584,
+ 1588, 1589, 1591, 69, 1590, 1592, 1595, 1593, 1594, 1596,
+
+ 1581, 1598, 69, 69, 69, 1846, 69, 69, 69, 69,
+ 69, 1586, 1597, 1599, 1600, 1587, 1601, 1588, 1589, 1591,
+ 69, 1590, 1592, 69, 1593, 1594, 1596, 1603, 69, 1604,
+ 69, 1602, 69, 1606, 69, 1605, 69, 1607, 1611, 1597,
+ 1599, 1600, 69, 1601, 1608, 69, 1609, 69, 1612, 1846,
+ 69, 69, 1610, 1613, 1603, 1615, 1604, 1614, 1602, 69,
+ 1606, 1616, 1605, 1617, 69, 69, 69, 1619, 69, 1620,
+ 1618, 1608, 69, 1609, 1621, 69, 69, 1622, 1623, 1610,
+ 69, 1624, 1615, 1628, 1614, 1632, 1625, 69, 69, 1627,
+ 69, 1626, 69, 69, 1619, 69, 69, 1618, 69, 1629,
+
+ 69, 1621, 69, 69, 1622, 1623, 1630, 69, 1624, 1631,
+ 69, 69, 1632, 1625, 1633, 1635, 1627, 69, 1626, 1634,
+ 1636, 1637, 69, 1641, 1644, 69, 1629, 69, 1639, 1642,
+ 69, 1638, 1640, 1630, 1643, 69, 1631, 69, 1648, 69,
+ 69, 1633, 1635, 69, 1645, 1646, 1634, 1636, 1637, 69,
+ 69, 69, 1647, 69, 1649, 1639, 1642, 1650, 1638, 1640,
+ 1651, 1643, 1652, 69, 69, 69, 1654, 69, 69, 1655,
+ 1657, 1645, 1646, 1656, 1653, 69, 69, 69, 69, 1647,
+ 1658, 1649, 1660, 1659, 1650, 1666, 1664, 1651, 69, 1652,
+ 69, 69, 69, 1654, 1662, 69, 1655, 1657, 69, 1661,
+
+ 1656, 1653, 1663, 1668, 1665, 69, 69, 1658, 1669, 1670,
+ 1659, 69, 69, 69, 1667, 69, 69, 69, 1675, 1671,
+ 1673, 1662, 69, 1672, 1674, 1677, 1661, 1679, 69, 1663,
+ 1668, 1665, 69, 1680, 69, 69, 1670, 69, 1676, 69,
+ 69, 1667, 1681, 69, 1684, 1675, 1671, 1673, 1678, 1683,
+ 1672, 1674, 69, 69, 69, 69, 69, 1682, 1686, 1685,
+ 1680, 1687, 1688, 69, 69, 1676, 1689, 1690, 1692, 69,
+ 69, 1684, 69, 1691, 69, 1678, 1683, 1693, 1695, 1696,
+ 69, 1698, 69, 1694, 1682, 1686, 1685, 1701, 69, 69,
+ 69, 1697, 69, 1689, 1690, 69, 1702, 1699, 1700, 69,
+
+ 1691, 69, 69, 1703, 1693, 1695, 1696, 69, 1705, 1704,
+ 1694, 69, 69, 1707, 69, 1706, 1708, 1709, 1697, 1710,
+ 1711, 69, 1712, 69, 1699, 1700, 1713, 1716, 1717, 1719,
+ 1703, 69, 1714, 1715, 1846, 1705, 1704, 69, 1718, 1720,
+ 69, 69, 1706, 69, 69, 69, 1710, 69, 69, 1712,
+ 69, 69, 1721, 69, 69, 1717, 69, 69, 1722, 1714,
+ 1715, 69, 1723, 1724, 1725, 1718, 1720, 1726, 1727, 1731,
+ 1728, 1729, 69, 69, 69, 69, 69, 69, 1732, 1721,
+ 1730, 69, 1734, 1733, 1846, 1722, 1736, 69, 1735, 1723,
+ 1724, 1725, 1738, 69, 1726, 1727, 69, 1728, 1729, 1737,
+
+ 1741, 1742, 1739, 1743, 1846, 69, 69, 1730, 1740, 69,
+ 1733, 69, 69, 69, 69, 1735, 1744, 69, 69, 69,
+ 1745, 1750, 1747, 1748, 1751, 69, 1737, 69, 69, 1739,
+ 1743, 1746, 69, 1749, 1752, 1740, 1753, 69, 1754, 1846,
+ 1755, 69, 1758, 1744, 69, 69, 1756, 1745, 69, 1747,
+ 1748, 69, 1757, 69, 1759, 69, 1846, 1763, 1746, 1761,
+ 1749, 69, 1846, 69, 1760, 1754, 69, 1755, 69, 1758,
+ 69, 1762, 69, 1756, 1765, 1766, 69, 1772, 1764, 1767,
+ 69, 1759, 69, 69, 1763, 69, 1761, 69, 1768, 69,
+ 69, 1760, 1769, 1770, 1773, 69, 1771, 69, 1762, 1774,
+
+ 1775, 1765, 1766, 69, 69, 1764, 1767, 1776, 69, 1777,
+ 1779, 69, 69, 1778, 1783, 1768, 1781, 1780, 1784, 1769,
+ 1770, 1773, 69, 1771, 1782, 69, 69, 1775, 69, 69,
+ 69, 1787, 69, 1785, 1776, 1788, 1777, 1793, 1786, 69,
+ 1778, 69, 1789, 1781, 1780, 69, 69, 1790, 69, 69,
+ 69, 1782, 69, 1791, 1794, 1792, 1801, 1796, 1787, 69,
+ 1785, 69, 1788, 69, 1793, 1786, 1797, 69, 1798, 1789,
+ 1795, 1800, 1799, 1802, 1790, 1806, 69, 1846, 69, 69,
+ 1791, 1794, 1792, 69, 1796, 1803, 1809, 69, 69, 1808,
+ 69, 1846, 1846, 1797, 69, 1798, 1804, 1795, 1800, 1799,
+
+ 69, 1805, 1807, 69, 69, 69, 69, 1810, 69, 69,
+ 69, 1811, 1803, 1809, 1813, 69, 1808, 1812, 1815, 69,
+ 1814, 1846, 1816, 1804, 1817, 1846, 69, 1820, 1805, 1807,
+ 1818, 69, 1821, 1819, 1810, 69, 1822, 1846, 1811, 1846,
+ 69, 1813, 69, 1825, 1812, 1815, 1823, 1814, 69, 1816,
+ 69, 1817, 69, 69, 1820, 1827, 69, 1818, 1828, 69,
+ 1819, 1824, 1835, 1822, 1826, 69, 69, 1829, 1830, 69,
+ 1825, 1831, 69, 1823, 1834, 69, 69, 69, 1832, 1833,
+ 69, 1837, 1827, 1836, 1838, 1828, 69, 69, 1824, 69,
+ 1846, 1826, 1839, 1840, 1829, 1830, 1841, 69, 1831, 1842,
+
+ 69, 1834, 1844, 69, 1845, 1832, 1833, 69, 69, 1843,
+ 1836, 69, 69, 1846, 1846, 69, 1846, 69, 69, 1839,
+ 1840, 1846, 1846, 1841, 1846, 1846, 1842, 1846, 1846, 69,
+ 1846, 69, 1846, 1846, 1846, 1846, 1843, 41, 41, 41,
+ 41, 41, 41, 41, 46, 46, 46, 46, 46, 46,
+ 46, 51, 51, 51, 51, 51, 51, 51, 57, 57,
+ 57, 57, 57, 57, 57, 62, 62, 62, 62, 62,
+ 62, 62, 72, 72, 1846, 72, 72, 72, 72, 127,
+ 127, 1846, 1846, 1846, 127, 127, 129, 129, 1846, 1846,
+ 129, 1846, 129, 131, 1846, 1846, 1846, 1846, 1846, 131,
+
+ 134, 134, 1846, 1846, 1846, 134, 134, 136, 1846, 1846,
+ 1846, 1846, 1846, 136, 138, 138, 1846, 138, 138, 138,
+ 138, 73, 73, 1846, 73, 73, 73, 73, 13, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846
+
} ;
-static yyconst flex_int16_t yy_chk[5277] =
+static yyconst flex_int16_t yy_chk[5395] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -1620,15 +1661,15 @@ static yyconst flex_int16_t yy_chk[5277] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 3, 3, 3, 4, 4,
4, 5, 5, 6, 6, 5, 24, 6, 7, 7,
- 7, 7, 1805, 7, 8, 8, 8, 8, 24, 8,
+ 7, 7, 1852, 7, 8, 8, 8, 8, 24, 8,
9, 9, 9, 10, 10, 10, 15, 45, 45, 50,
15, 3, 50, 24, 4, 61, 61, 5, 19, 6,
- 19, 19, 70, 19, 669, 7, 70, 40, 19, 40,
- 40, 8, 40, 23, 20, 20, 9, 40, 663, 10,
+ 19, 19, 70, 19, 686, 7, 70, 40, 19, 40,
+ 40, 8, 40, 23, 20, 20, 9, 40, 680, 10,
11, 11, 11, 11, 11, 11, 12, 12, 12, 12,
12, 12, 20, 23, 27, 19, 23, 29, 20, 11,
- 23, 20, 20, 136, 21, 12, 27, 25, 663, 29,
+ 23, 20, 20, 136, 21, 12, 27, 25, 680, 29,
134, 21, 34, 94, 28, 25, 133, 11, 21, 20,
23, 27, 131, 12, 29, 34, 11, 128, 128, 129,
21, 21, 12, 25, 25, 76, 28, 26, 21, 34,
@@ -1640,558 +1681,572 @@ static yyconst flex_int16_t yy_chk[5277] =
22, 79, 22, 22, 30, 31, 31, 35, 30, 75,
31, 35, 75, 83, 68, 37, 62, 37, 77, 79,
57, 35, 52, 38, 35, 77, 31, 33, 38, 51,
- 90, 33, 37, 35, 35, 247, 38, 33, 35, 39,
+ 90, 33, 37, 35, 35, 252, 38, 33, 35, 39,
33, 37, 37, 39, 37, 77, 36, 33, 35, 33,
38, 35, 46, 90, 33, 38, 36, 90, 33, 37,
- 36, 36, 247, 66, 33, 39, 39, 33, 36, 130,
+ 36, 36, 252, 66, 33, 39, 39, 33, 36, 130,
39, 41, 130, 36, 33, 56, 66, 56, 56, 64,
56, 64, 64, 36, 64, 135, 135, 36, 36, 67,
66, 67, 67, 69, 67, 69, 69, 72, 69, 72,
- 72, 78, 72, 69, 80, 81, 82, 72, 86, 85,
- 84, 14, 87, 13, 78, 82, 64, 80, 84, 87,
- 81, 86, 91, 215, 0, 78, 85, 88, 78, 89,
- 92, 80, 81, 82, 72, 86, 88, 84, 89, 87,
- 85, 78, 93, 92, 91, 93, 0, 95, 96, 91,
- 99, 101, 215, 85, 88, 95, 89, 92, 93, 93,
- 97, 103, 98, 99, 97, 98, 93, 100, 96, 93,
-
- 96, 101, 93, 105, 95, 96, 107, 99, 101, 102,
- 105, 103, 104, 106, 97, 93, 93, 97, 103, 98,
- 100, 97, 106, 102, 100, 96, 104, 109, 108, 107,
- 105, 109, 113, 107, 110, 112, 102, 108, 111, 104,
- 106, 110, 112, 115, 114, 117, 113, 122, 116, 109,
- 142, 115, 118, 122, 109, 108, 114, 116, 109, 113,
- 119, 110, 112, 120, 111, 111, 121, 118, 125, 124,
- 115, 114, 120, 123, 122, 116, 117, 121, 0, 118,
- 119, 142, 0, 125, 0, 0, 119, 119, 126, 140,
- 120, 124, 253, 121, 123, 125, 124, 126, 123, 132,
-
- 123, 132, 132, 137, 132, 137, 137, 119, 137, 138,
- 141, 138, 138, 140, 138, 126, 140, 143, 145, 253,
- 144, 123, 146, 147, 150, 153, 145, 0, 148, 143,
- 147, 149, 141, 148, 146, 151, 0, 141, 0, 144,
- 154, 0, 155, 157, 143, 145, 138, 144, 154, 146,
- 147, 153, 153, 149, 158, 150, 151, 0, 149, 148,
- 148, 156, 0, 151, 155, 156, 157, 154, 160, 155,
- 157, 163, 159, 0, 0, 161, 158, 162, 161, 0,
- 160, 158, 168, 151, 152, 159, 162, 164, 156, 152,
- 161, 165, 0, 163, 152, 160, 166, 167, 163, 159,
-
- 152, 152, 161, 166, 162, 161, 169, 152, 167, 164,
- 165, 152, 170, 168, 164, 171, 152, 165, 165, 174,
- 172, 152, 170, 166, 167, 173, 175, 152, 152, 176,
- 177, 173, 169, 169, 0, 178, 180, 165, 172, 0,
- 179, 0, 0, 170, 181, 182, 171, 172, 175, 170,
- 174, 181, 173, 175, 179, 178, 184, 180, 186, 183,
- 176, 177, 178, 180, 183, 185, 182, 179, 189, 187,
- 188, 181, 182, 190, 192, 184, 194, 188, 190, 185,
- 186, 187, 193, 184, 195, 186, 183, 196, 200, 193,
- 189, 201, 185, 191, 191, 189, 187, 188, 197, 198,
-
- 190, 194, 191, 194, 195, 192, 197, 199, 203, 193,
- 200, 195, 205, 202, 198, 206, 204, 208, 196, 200,
- 191, 191, 201, 203, 204, 197, 198, 207, 211, 209,
- 202, 205, 214, 199, 199, 203, 210, 200, 202, 205,
- 202, 209, 212, 204, 212, 210, 206, 211, 208, 207,
- 213, 223, 216, 218, 207, 211, 209, 202, 214, 214,
- 217, 219, 0, 210, 218, 220, 222, 221, 224, 212,
- 225, 227, 0, 219, 213, 0, 226, 213, 216, 216,
- 218, 224, 223, 232, 222, 235, 217, 217, 219, 220,
- 221, 229, 220, 222, 221, 224, 225, 225, 226, 228,
-
- 229, 230, 227, 226, 234, 231, 228, 230, 235, 232,
- 232, 233, 235, 234, 236, 237, 238, 0, 229, 231,
- 0, 239, 240, 236, 241, 242, 228, 241, 230, 245,
- 237, 234, 231, 243, 241, 233, 244, 240, 233, 243,
- 248, 236, 237, 242, 245, 239, 254, 238, 239, 240,
- 244, 241, 242, 250, 241, 0, 245, 246, 246, 249,
- 243, 251, 249, 244, 248, 250, 255, 248, 254, 249,
- 259, 256, 252, 254, 257, 260, 258, 259, 262, 251,
- 250, 0, 246, 256, 246, 246, 249, 261, 251, 249,
- 252, 258, 255, 255, 261, 264, 257, 259, 256, 252,
-
- 262, 257, 263, 258, 263, 262, 260, 265, 264, 266,
- 265, 267, 265, 268, 261, 282, 269, 273, 265, 0,
- 271, 270, 264, 0, 269, 272, 263, 266, 270, 263,
- 269, 263, 271, 273, 265, 268, 266, 265, 272, 265,
- 268, 273, 267, 269, 273, 274, 282, 271, 270, 276,
- 277, 269, 272, 278, 279, 280, 0, 281, 274, 278,
- 273, 276, 279, 287, 281, 283, 285, 280, 277, 283,
- 0, 290, 274, 275, 275, 0, 276, 277, 285, 286,
- 278, 279, 280, 275, 281, 275, 275, 275, 284, 288,
- 275, 286, 283, 285, 287, 284, 288, 291, 275, 292,
-
- 275, 275, 290, 298, 294, 289, 286, 0, 291, 307,
- 275, 294, 275, 275, 275, 284, 288, 275, 289, 293,
- 293, 292, 295, 296, 291, 297, 292, 300, 298, 301,
- 298, 294, 289, 295, 296, 299, 300, 0, 297, 303,
- 307, 304, 301, 306, 305, 308, 302, 0, 293, 295,
- 296, 308, 297, 309, 300, 310, 301, 303, 299, 302,
- 0, 306, 299, 304, 302, 311, 303, 305, 304, 313,
- 306, 305, 308, 302, 309, 312, 315, 314, 310, 316,
- 309, 317, 310, 313, 0, 316, 302, 319, 0, 320,
- 318, 311, 311, 0, 322, 328, 313, 312, 321, 317,
-
- 322, 323, 312, 314, 314, 318, 316, 315, 317, 325,
- 319, 327, 326, 328, 319, 320, 320, 318, 326, 329,
- 321, 322, 328, 335, 332, 321, 329, 323, 323, 330,
- 327, 332, 334, 333, 336, 325, 325, 373, 327, 326,
- 333, 337, 339, 338, 330, 334, 329, 342, 340, 343,
- 341, 332, 336, 342, 335, 341, 330, 340, 345, 334,
- 333, 336, 338, 337, 373, 353, 344, 356, 337, 356,
- 338, 346, 343, 339, 342, 340, 343, 341, 344, 347,
- 345, 349, 346, 350, 351, 345, 0, 347, 349, 353,
- 352, 350, 353, 344, 356, 351, 354, 358, 346, 352,
-
- 0, 355, 359, 354, 357, 0, 347, 348, 349, 358,
- 350, 351, 348, 360, 348, 362, 368, 359, 0, 364,
- 362, 352, 348, 354, 358, 360, 352, 355, 355, 359,
- 357, 357, 348, 348, 348, 361, 363, 364, 366, 348,
- 360, 348, 362, 361, 365, 367, 364, 368, 370, 348,
- 366, 369, 365, 371, 372, 374, 0, 370, 363, 348,
- 376, 375, 361, 363, 384, 366, 369, 371, 367, 378,
- 374, 365, 367, 372, 377, 370, 375, 381, 369, 380,
- 371, 372, 374, 380, 376, 382, 377, 376, 375, 379,
- 383, 381, 379, 378, 385, 384, 378, 386, 387, 388,
-
- 379, 377, 391, 389, 381, 388, 0, 394, 390, 392,
- 380, 0, 382, 395, 394, 393, 379, 383, 396, 379,
- 0, 385, 403, 400, 386, 389, 388, 0, 397, 387,
- 389, 390, 392, 391, 394, 390, 392, 393, 398, 399,
- 396, 397, 393, 398, 395, 396, 402, 398, 399, 400,
- 400, 401, 405, 403, 404, 397, 0, 0, 407, 402,
- 401, 406, 398, 408, 409, 398, 399, 0, 412, 414,
- 398, 410, 404, 402, 398, 419, 405, 408, 401, 405,
- 407, 404, 410, 406, 406, 407, 409, 411, 406, 416,
- 408, 409, 413, 414, 415, 417, 414, 0, 410, 412,
-
- 421, 420, 411, 422, 417, 423, 419, 418, 0, 423,
- 406, 416, 424, 413, 411, 425, 416, 426, 415, 413,
- 418, 415, 417, 420, 421, 422, 424, 421, 420, 425,
- 422, 427, 428, 429, 418, 430, 423, 429, 431, 424,
- 0, 432, 425, 433, 434, 440, 431, 428, 426, 427,
- 436, 438, 433, 434, 440, 435, 428, 436, 427, 428,
- 430, 437, 430, 435, 429, 431, 432, 439, 432, 438,
- 433, 434, 440, 441, 428, 442, 445, 436, 438, 439,
- 447, 443, 435, 444, 437, 441, 446, 449, 437, 443,
- 448, 444, 0, 450, 439, 452, 447, 451, 449, 453,
-
- 441, 450, 445, 445, 468, 454, 442, 447, 443, 446,
- 444, 451, 448, 446, 449, 452, 455, 448, 456, 457,
- 450, 453, 452, 459, 451, 454, 453, 458, 457, 460,
- 461, 462, 454, 464, 0, 468, 463, 0, 455, 464,
- 456, 459, 460, 455, 466, 456, 457, 458, 472, 469,
- 459, 470, 461, 465, 458, 462, 460, 461, 462, 463,
- 464, 465, 466, 463, 471, 473, 470, 472, 474, 0,
- 474, 466, 469, 471, 473, 472, 469, 477, 470, 465,
- 465, 483, 485, 486, 480, 484, 0, 0, 465, 477,
- 492, 471, 473, 488, 480, 474, 475, 0, 489, 483,
-
- 475, 508, 491, 475, 477, 485, 484, 489, 483, 485,
- 475, 480, 484, 475, 486, 488, 493, 492, 475, 490,
- 488, 490, 494, 475, 496, 489, 491, 475, 508, 491,
- 475, 0, 0, 495, 497, 0, 493, 475, 498, 0,
- 475, 487, 487, 493, 487, 495, 490, 487, 494, 494,
- 496, 496, 487, 499, 503, 500, 497, 501, 487, 487,
- 495, 497, 498, 500, 501, 498, 504, 487, 487, 487,
- 502, 487, 507, 503, 487, 499, 505, 509, 502, 487,
- 499, 503, 500, 511, 501, 487, 487, 506, 505, 510,
- 512, 516, 504, 504, 507, 515, 506, 502, 0, 507,
-
- 513, 518, 514, 505, 515, 517, 519, 511, 509, 518,
- 511, 512, 520, 516, 506, 521, 522, 512, 516, 513,
- 510, 514, 515, 524, 522, 517, 525, 513, 518, 514,
- 526, 520, 517, 519, 527, 0, 528, 529, 533, 520,
- 0, 524, 0, 522, 525, 0, 521, 527, 530, 529,
- 524, 0, 532, 525, 526, 539, 530, 526, 532, 535,
- 533, 527, 528, 528, 529, 533, 535, 534, 545, 536,
- 537, 538, 530, 534, 536, 530, 540, 537, 539, 532,
- 541, 542, 539, 530, 544, 540, 535, 543, 541, 538,
- 548, 547, 549, 550, 534, 545, 536, 537, 538, 542,
-
- 543, 556, 546, 540, 547, 544, 553, 541, 542, 546,
- 555, 544, 552, 554, 543, 558, 550, 551, 547, 554,
- 550, 548, 557, 549, 558, 551, 560, 552, 553, 546,
- 0, 559, 556, 553, 561, 562, 555, 555, 563, 552,
- 554, 561, 558, 564, 551, 559, 557, 567, 565, 557,
- 567, 566, 572, 568, 571, 564, 569, 560, 559, 566,
- 574, 561, 562, 569, 572, 563, 568, 573, 0, 573,
- 564, 565, 574, 575, 567, 565, 576, 571, 566, 572,
- 568, 571, 578, 569, 570, 577, 570, 574, 581, 576,
- 570, 0, 570, 583, 573, 575, 580, 570, 577, 583,
-
- 575, 582, 570, 576, 579, 578, 580, 586, 570, 578,
- 581, 570, 577, 570, 582, 581, 579, 570, 580, 570,
- 583, 584, 585, 580, 570, 587, 588, 590, 582, 570,
- 587, 579, 587, 580, 584, 592, 589, 0, 586, 596,
- 590, 588, 593, 585, 597, 591, 594, 596, 584, 585,
- 587, 587, 587, 588, 590, 595, 598, 587, 589, 587,
- 591, 592, 592, 589, 593, 594, 596, 600, 595, 593,
- 601, 597, 591, 594, 603, 604, 602, 587, 605, 598,
- 607, 606, 595, 598, 602, 609, 608, 610, 603, 606,
- 614, 607, 611, 609, 601, 619, 624, 601, 600, 611,
-
- 605, 603, 612, 602, 608, 605, 604, 607, 606, 610,
- 613, 617, 609, 608, 610, 612, 616, 619, 618, 611,
- 617, 614, 619, 622, 616, 620, 621, 624, 613, 612,
- 618, 623, 625, 0, 0, 627, 629, 613, 617, 627,
- 641, 622, 630, 616, 0, 618, 625, 620, 621, 631,
- 622, 628, 620, 621, 628, 630, 631, 623, 623, 625,
- 629, 632, 634, 629, 633, 636, 627, 641, 635, 630,
- 0, 633, 637, 632, 635, 638, 631, 628, 628, 639,
- 640, 628, 642, 0, 643, 0, 634, 636, 632, 634,
- 639, 633, 636, 643, 637, 635, 638, 644, 649, 637,
-
- 642, 640, 638, 645, 648, 646, 639, 640, 647, 642,
- 652, 643, 645, 646, 650, 647, 653, 654, 648, 652,
- 649, 644, 656, 655, 644, 649, 657, 658, 659, 0,
- 645, 648, 646, 654, 660, 647, 650, 652, 655, 658,
- 653, 650, 660, 653, 654, 661, 665, 662, 666, 673,
- 655, 664, 674, 656, 658, 659, 666, 657, 661, 671,
- 664, 660, 662, 667, 665, 667, 670, 675, 677, 672,
- 676, 671, 661, 665, 662, 666, 672, 679, 664, 670,
- 673, 677, 0, 674, 684, 678, 671, 0, 680, 675,
- 667, 682, 676, 670, 675, 677, 672, 676, 678, 679,
-
- 680, 681, 683, 682, 679, 685, 686, 0, 688, 681,
- 683, 684, 678, 687, 685, 680, 689, 690, 682, 695,
- 687, 692, 693, 691, 694, 0, 0, 686, 681, 683,
- 697, 693, 685, 686, 688, 688, 691, 690, 689, 696,
- 687, 695, 694, 689, 690, 692, 695, 696, 692, 693,
- 691, 694, 697, 698, 699, 700, 701, 697, 702, 703,
- 704, 698, 710, 705, 709, 707, 696, 708, 701, 710,
- 702, 705, 706, 700, 707, 704, 709, 699, 706, 703,
- 698, 699, 700, 701, 711, 702, 703, 704, 708, 710,
- 705, 709, 707, 713, 708, 714, 715, 0, 716, 706,
-
- 0, 718, 711, 719, 717, 716, 720, 719, 714, 721,
- 724, 711, 723, 722, 720, 715, 718, 725, 0, 728,
- 726, 733, 714, 715, 713, 716, 717, 722, 718, 727,
- 723, 717, 729, 720, 719, 721, 721, 734, 730, 723,
- 722, 724, 726, 725, 725, 728, 728, 726, 731, 732,
- 729, 727, 733, 0, 739, 735, 727, 736, 732, 729,
- 730, 731, 738, 0, 741, 730, 742, 745, 734, 0,
- 739, 745, 0, 746, 743, 731, 732, 735, 742, 744,
- 736, 739, 735, 743, 736, 737, 746, 741, 738, 738,
- 737, 741, 737, 742, 737, 748, 737, 744, 745, 747,
-
- 746, 743, 749, 737, 750, 752, 744, 747, 751, 754,
- 751, 757, 737, 750, 748, 749, 753, 737, 756, 737,
- 0, 737, 748, 737, 759, 761, 747, 760, 753, 749,
- 763, 750, 752, 757, 760, 751, 754, 762, 757, 758,
- 765, 764, 756, 753, 766, 756, 769, 758, 764, 768,
- 767, 759, 761, 770, 760, 769, 773, 763, 771, 762,
- 774, 775, 765, 766, 762, 776, 758, 765, 764, 783,
- 0, 766, 767, 769, 770, 768, 768, 767, 771, 777,
- 770, 778, 779, 775, 780, 771, 781, 773, 775, 778,
- 782, 774, 786, 781, 782, 785, 776, 777, 779, 784,
-
- 783, 787, 785, 788, 0, 784, 777, 786, 778, 779,
- 787, 780, 784, 781, 789, 791, 790, 782, 790, 786,
- 0, 789, 785, 792, 791, 794, 784, 793, 787, 788,
- 788, 793, 784, 796, 799, 797, 798, 796, 800, 801,
- 0, 789, 791, 790, 802, 792, 0, 794, 0, 804,
- 792, 800, 794, 797, 793, 798, 803, 804, 807, 799,
- 0, 799, 797, 798, 796, 800, 806, 802, 805, 805,
- 801, 802, 803, 808, 809, 806, 804, 811, 813, 810,
- 807, 809, 808, 803, 812, 807, 811, 814, 817, 816,
- 819, 813, 812, 806, 820, 805, 815, 816, 818, 814,
-
- 808, 809, 810, 820, 811, 813, 810, 822, 815, 821,
- 817, 812, 819, 825, 814, 817, 816, 819, 818, 822,
- 823, 820, 824, 815, 826, 818, 827, 821, 824, 831,
- 0, 0, 828, 832, 822, 825, 821, 829, 834, 833,
- 825, 823, 832, 837, 835, 838, 836, 823, 842, 824,
- 836, 834, 835, 838, 839, 826, 831, 827, 828, 828,
- 832, 833, 839, 829, 829, 834, 833, 840, 840, 842,
- 837, 835, 838, 843, 841, 842, 844, 836, 845, 846,
- 847, 839, 841, 848, 844, 849, 845, 846, 847, 851,
- 850, 849, 0, 853, 840, 852, 848, 856, 0, 854,
-
- 855, 841, 850, 844, 843, 845, 846, 847, 853, 862,
- 848, 856, 849, 857, 858, 851, 851, 850, 866, 852,
- 853, 854, 852, 855, 856, 859, 854, 855, 858, 859,
- 861, 857, 863, 870, 868, 864, 862, 861, 865, 874,
- 857, 858, 859, 868, 871, 865, 872, 876, 878, 866,
- 859, 880, 859, 879, 863, 870, 859, 861, 864, 863,
- 870, 868, 864, 880, 884, 865, 874, 883, 885, 859,
- 871, 871, 878, 882, 876, 878, 884, 872, 880, 879,
- 879, 881, 888, 881, 887, 886, 882, 888, 889, 883,
- 890, 884, 886, 891, 883, 885, 892, 894, 0, 896,
-
- 882, 891, 0, 895, 889, 897, 894, 898, 881, 888,
- 887, 887, 886, 890, 898, 889, 895, 890, 892, 900,
- 891, 899, 901, 892, 894, 896, 896, 897, 899, 901,
- 895, 902, 897, 903, 898, 904, 905, 900, 906, 916,
- 907, 908, 0, 905, 909, 0, 900, 911, 899, 901,
- 911, 912, 914, 907, 0, 903, 902, 913, 902, 914,
- 903, 915, 918, 905, 915, 909, 904, 907, 908, 906,
- 916, 909, 913, 917, 911, 919, 915, 912, 912, 914,
- 918, 920, 921, 920, 913, 915, 922, 923, 915, 918,
- 928, 915, 924, 927, 0, 917, 925, 919, 926, 931,
-
- 917, 924, 919, 915, 925, 926, 921, 929, 920, 921,
- 930, 929, 952, 923, 923, 927, 932, 922, 933, 924,
- 927, 928, 934, 925, 935, 926, 931, 933, 936, 934,
- 938, 935, 930, 937, 929, 939, 0, 930, 932, 952,
- 940, 936, 945, 932, 938, 933, 941, 940, 937, 934,
- 942, 935, 943, 941, 947, 936, 946, 938, 943, 949,
- 937, 953, 948, 942, 945, 948, 939, 940, 946, 945,
- 949, 954, 956, 941, 947, 960, 955, 942, 959, 943,
- 948, 947, 961, 946, 962, 953, 949, 955, 953, 948,
- 956, 962, 948, 954, 957, 965, 959, 958, 954, 956,
-
- 958, 964, 957, 955, 963, 959, 960, 969, 965, 961,
- 964, 962, 966, 973, 967, 958, 969, 968, 963, 968,
- 970, 957, 965, 966, 958, 971, 0, 958, 964, 967,
- 972, 963, 0, 0, 969, 973, 971, 974, 0, 966,
- 973, 967, 975, 978, 968, 975, 970, 970, 972, 976,
- 979, 974, 971, 980, 981, 982, 983, 972, 976, 979,
- 975, 985, 982, 974, 974, 984, 989, 985, 992, 975,
- 988, 0, 975, 0, 978, 981, 976, 979, 974, 984,
- 989, 981, 982, 991, 980, 985, 990, 983, 985, 988,
- 993, 991, 984, 989, 985, 990, 994, 988, 997, 992,
-
- 996, 993, 998, 0, 999, 994, 1000, 996, 1003, 1004,
- 991, 1002, 1001, 990, 1006, 1002, 1010, 993, 0, 1005,
- 1003, 997, 1007, 994, 998, 997, 999, 996, 1000, 998,
- 1001, 999, 1005, 1000, 1006, 1003, 1004, 1007, 1002, 1001,
- 1008, 1006, 1009, 1011, 1012, 1013, 1005, 1010, 1014, 1007,
- 1009, 1016, 1015, 1012, 1019, 1008, 1018, 0, 1011, 0,
- 1021, 1024, 1020, 1025, 0, 1023, 1013, 1008, 1022, 1009,
- 1011, 1012, 1013, 1024, 1018, 1014, 1015, 1020, 1016, 1015,
- 1023, 1019, 1021, 1018, 1026, 1025, 1022, 1021, 1024, 1020,
- 1025, 1027, 1023, 1028, 1029, 1022, 1030, 1026, 1027, 1033,
-
- 0, 1031, 1026, 1034, 1032, 1028, 1033, 1031, 1035, 1036,
- 1037, 1026, 1032, 1039, 1040, 1035, 1038, 1042, 1027, 1046,
- 1028, 1029, 1044, 1043, 1026, 1047, 1033, 1030, 1031, 1048,
- 1034, 1032, 1043, 0, 0, 1035, 1036, 1037, 1040, 1038,
- 1045, 1040, 1045, 1038, 1039, 1052, 1046, 0, 1042, 0,
- 1043, 1047, 1047, 1044, 1049, 1049, 1049, 1050, 1051, 1053,
- 1048, 1049, 1054, 1056, 1050, 1051, 1053, 1045, 1055, 1049,
- 1057, 1057, 1058, 1059, 1055, 1054, 1052, 1062, 1061, 1063,
- 1059, 1049, 1049, 1049, 1050, 1051, 1053, 1064, 1049, 1054,
- 1056, 1063, 1065, 1066, 1066, 1055, 1061, 1057, 1058, 1058,
-
- 1059, 1067, 1068, 1068, 1062, 1061, 1063, 1064, 1071, 1072,
- 1065, 1069, 1074, 1075, 1064, 1076, 1073, 0, 1077, 1065,
- 1066, 1082, 1069, 1073, 1079, 1078, 1080, 1067, 1067, 1068,
- 1071, 1083, 1074, 1080, 1086, 1071, 1082, 0, 1069, 1074,
- 1072, 1081, 1079, 1073, 1075, 1077, 1076, 1078, 1082, 1081,
- 1084, 1079, 1078, 1080, 1087, 1083, 1085, 1085, 1083, 1084,
- 1086, 1086, 1088, 1089, 1090, 1092, 1087, 1094, 1081, 1091,
- 1088, 1097, 1095, 1096, 1098, 1089, 1099, 1084, 1095, 1093,
- 1099, 1087, 1100, 1085, 1093, 1090, 1096, 1091, 1102, 1088,
- 1089, 1090, 1092, 1104, 1094, 1093, 1091, 1101, 1101, 1095,
-
- 1096, 1098, 1097, 1102, 1103, 1105, 1093, 1099, 1104, 1108,
- 1106, 1093, 1107, 1100, 1107, 1102, 1109, 1110, 1111, 0,
- 1104, 1109, 1113, 1115, 1101, 1106, 1114, 1116, 1105, 1117,
- 1118, 0, 1105, 1111, 1120, 1103, 1117, 1106, 1119, 1107,
- 1108, 1121, 1123, 1109, 1128, 1111, 1113, 1125, 1110, 1113,
- 1115, 1118, 1114, 1114, 1116, 1120, 1117, 1118, 1127, 1121,
- 1119, 1120, 1125, 1129, 1123, 1119, 1130, 1131, 1121, 1123,
- 1129, 1128, 1132, 1127, 1125, 1133, 1131, 1135, 1134, 1136,
- 1132, 0, 1139, 1140, 1130, 1127, 1138, 1143, 1148, 1141,
- 1129, 1139, 1136, 1130, 1131, 0, 1150, 1138, 1133, 1132,
-
- 1134, 1140, 1133, 1146, 1147, 1134, 1136, 1141, 1135, 1139,
- 1140, 1149, 1138, 1138, 1143, 1146, 1141, 1147, 1151, 1148,
- 1152, 1149, 1150, 1150, 1138, 1155, 1154, 0, 1156, 1158,
- 1146, 1147, 1155, 1157, 1159, 1158, 1162, 1162, 1149, 0,
- 0, 1164, 1160, 1151, 1161, 1151, 1154, 1152, 1164, 1159,
- 1163, 1157, 1155, 1154, 1156, 1156, 1158, 1160, 1165, 1161,
- 1157, 1159, 1163, 1162, 1167, 1165, 1169, 1168, 1164, 1160,
- 1170, 1161, 1173, 1175, 1172, 1169, 1177, 1163, 1174, 1174,
- 1178, 1176, 1180, 1181, 0, 1165, 1167, 1172, 1170, 1180,
- 1182, 1167, 1168, 1169, 1168, 1175, 1183, 1170, 1177, 1173,
-
- 1175, 1172, 1178, 1177, 1179, 1174, 1176, 1178, 1176, 1180,
- 1183, 1184, 1182, 1179, 1181, 1187, 1186, 1182, 1188, 1192,
- 1189, 1190, 1191, 1183, 1186, 1195, 1194, 0, 1187, 1191,
- 1184, 1179, 1193, 1190, 0, 1197, 0, 0, 1184, 1198,
- 1195, 1199, 1187, 1186, 1214, 1188, 1189, 1189, 1190, 1191,
- 1192, 1194, 1195, 1194, 1193, 1196, 1199, 1198, 1196, 1193,
- 1197, 1201, 1197, 1204, 1202, 1205, 1198, 1206, 1199, 1308,
- 0, 1214, 1205, 1196, 1208, 1210, 1216, 1204, 1206, 1213,
- 1215, 1211, 1196, 1201, 1221, 1196, 1202, 1212, 1201, 1212,
- 1204, 1202, 1205, 1211, 1206, 1208, 1210, 1213, 1215, 1218,
-
- 1308, 1208, 1210, 1216, 1217, 1219, 1213, 1215, 1211, 1220,
- 1222, 1221, 1217, 1223, 1212, 1226, 1227, 1228, 0, 1229,
- 1223, 1231, 1218, 1220, 1230, 1232, 1218, 1219, 1233, 1222,
- 1231, 1217, 1219, 1235, 1227, 1235, 1220, 1222, 1238, 1230,
- 1223, 1236, 1226, 1227, 1228, 1229, 1229, 1232, 1231, 1237,
- 1238, 1230, 1232, 1237, 1242, 1233, 1239, 1240, 1241, 1243,
- 1235, 1244, 0, 1236, 1247, 1238, 1240, 1245, 1236, 1241,
- 1246, 1246, 1247, 1244, 1250, 1249, 1237, 1250, 1239, 1249,
- 0, 1242, 1243, 1239, 1240, 1241, 1243, 1251, 1244, 1245,
- 1252, 1247, 1253, 1254, 1245, 1251, 1252, 1246, 1256, 1254,
-
- 1257, 1250, 1249, 1259, 1258, 0, 1261, 1253, 1260, 1262,
- 1263, 1264, 1265, 1266, 1251, 1267, 1259, 1252, 1258, 1253,
- 1254, 1268, 1260, 1264, 1257, 1256, 1265, 1257, 1270, 1271,
- 1259, 1258, 1261, 1261, 1275, 1260, 1262, 1263, 1264, 1265,
- 1266, 1269, 1267, 1272, 1274, 1276, 1277, 1282, 1268, 1269,
- 1278, 1272, 1280, 1276, 1279, 1270, 1271, 1283, 1286, 1278,
- 1288, 1275, 0, 1281, 0, 1283, 1274, 1288, 1269, 1292,
- 1272, 1274, 1276, 1277, 1282, 1279, 1280, 1278, 1281, 1280,
- 1284, 1279, 1289, 1285, 1283, 1286, 1289, 1288, 1290, 1281,
- 1281, 1285, 1284, 1291, 1293, 1294, 1292, 1295, 1295, 1296,
-
- 1290, 1297, 1293, 1298, 1300, 1281, 1300, 1284, 1302, 1289,
- 1285, 1299, 1303, 1301, 1302, 1290, 1291, 1304, 1298, 1297,
- 1291, 1293, 1294, 1305, 1295, 1296, 1296, 1301, 1297, 1304,
- 1298, 1300, 1307, 1299, 1303, 1302, 1306, 1309, 1299, 1303,
- 1301, 1305, 1311, 1313, 1304, 1307, 1314, 1315, 1316, 1311,
- 1305, 0, 1321, 1318, 1306, 1324, 1316, 1323, 1319, 1307,
- 1309, 1313, 1326, 1306, 1309, 1318, 0, 1321, 1328, 1311,
- 1313, 1330, 1314, 1314, 1316, 1316, 1319, 1324, 1315, 1321,
- 1318, 1323, 1324, 1316, 1323, 1319, 1325, 1329, 1331, 1326,
- 1334, 1332, 0, 1325, 1333, 1328, 1336, 1330, 1330, 1338,
-
- 1329, 1337, 1333, 1331, 1332, 1339, 0, 1341, 1342, 1345,
- 1350, 1344, 0, 1325, 1329, 1331, 1334, 1334, 1332, 1336,
- 1341, 1333, 1340, 1336, 1346, 1337, 1338, 1339, 1337, 1340,
- 1343, 1342, 1339, 1344, 1341, 1342, 1348, 1343, 1344, 1349,
- 1345, 1350, 1352, 1351, 1360, 1346, 1355, 1348, 1356, 1340,
- 1363, 1346, 1364, 1366, 1368, 1369, 0, 1343, 0, 1355,
- 1374, 1349, 1351, 1348, 1372, 1370, 1349, 1352, 1374, 1352,
- 1351, 1360, 1363, 1355, 1356, 1356, 1370, 1363, 1371, 1364,
- 1366, 1369, 1369, 1371, 1375, 1368, 1372, 1374, 1376, 1378,
- 1379, 1372, 1370, 1380, 0, 1383, 1381, 1385, 0, 1375,
-
- 1386, 1387, 1380, 1389, 1388, 1371, 1390, 1378, 1381, 1391,
- 0, 1375, 0, 0, 1387, 1376, 1378, 1392, 1397, 1385,
- 1380, 1379, 1383, 1381, 1385, 1386, 1388, 1386, 1387, 1393,
- 1389, 1388, 1392, 1390, 1394, 1395, 1391, 1396, 1393, 1398,
- 1397, 1399, 1400, 1403, 1392, 1397, 1398, 1401, 1401, 1394,
- 1395, 1402, 1396, 0, 1405, 0, 1393, 1403, 1402, 1410,
- 1400, 1394, 1395, 1408, 1396, 1409, 1398, 1405, 1399, 1400,
- 1403, 1406, 1404, 1411, 1401, 1404, 1414, 1407, 1402, 1415,
- 1406, 1405, 1407, 1414, 1416, 1408, 1410, 1409, 1415, 1416,
- 1408, 1418, 1409, 1421, 1417, 1419, 1420, 1423, 1406, 1404,
-
- 1411, 1417, 1419, 1414, 1407, 1420, 1415, 1424, 1425, 1418,
- 1431, 1416, 1432, 0, 1426, 0, 1476, 0, 1418, 1421,
- 1421, 1417, 1419, 1420, 1423, 1424, 1426, 1427, 1425, 1428,
- 1433, 1429, 1430, 1434, 1424, 1425, 1427, 1431, 1428, 1433,
- 1430, 1426, 1429, 1432, 1435, 1434, 1436, 1476, 1437, 1444,
- 1443, 1445, 1435, 1439, 1427, 1437, 1428, 1433, 1429, 1430,
- 1434, 1439, 1442, 1445, 1447, 1448, 1452, 1451, 1436, 1442,
- 1446, 1435, 1450, 1436, 1443, 1437, 1444, 1443, 1445, 1446,
- 1439, 1453, 1455, 1457, 1450, 1458, 0, 1462, 1448, 1442,
- 1451, 1447, 1448, 1452, 1451, 1453, 1456, 1446, 1463, 1450,
-
- 1464, 0, 1465, 1463, 1456, 1470, 1466, 1467, 1453, 1455,
- 1457, 1468, 1458, 1462, 1462, 1467, 0, 1470, 1464, 1471,
- 1472, 1474, 1475, 1456, 1465, 1463, 1478, 1464, 1466, 1465,
- 1468, 1473, 1470, 1466, 1467, 1477, 1479, 1482, 1468, 1484,
- 0, 1471, 1472, 1473, 1483, 0, 1471, 1472, 1474, 1475,
- 1488, 1485, 1486, 1478, 1487, 1489, 1491, 1477, 1473, 0,
- 0, 1484, 1477, 1479, 1486, 1492, 1484, 1483, 1482, 1485,
- 1489, 1483, 1488, 1487, 1492, 1493, 1494, 1488, 1485, 1486,
- 1491, 1487, 1489, 1491, 1496, 1499, 1495, 1497, 1500, 1493,
- 1501, 1502, 1492, 1499, 1494, 1500, 1505, 1506, 1501, 1503,
-
- 1507, 1504, 1493, 1494, 1495, 1497, 1512, 1503, 0, 1518,
- 1496, 1496, 1499, 1495, 1497, 1500, 1506, 1501, 1502, 1504,
- 1509, 1510, 1507, 1505, 1506, 1514, 1503, 1507, 1504, 1512,
- 1513, 0, 1516, 1512, 1521, 1510, 1518, 1514, 1509, 1522,
- 1523, 1521, 1524, 1513, 1525, 1526, 1527, 1509, 1510, 1528,
- 1529, 1530, 1514, 1534, 1535, 1527, 1531, 1513, 1516, 1516,
- 0, 1521, 1528, 0, 1523, 1522, 1522, 1523, 1539, 1524,
- 1541, 1525, 1526, 1527, 1534, 1540, 1528, 1541, 1530, 1531,
- 1534, 1529, 1543, 1531, 1540, 1535, 1538, 1538, 1542, 1545,
- 1539, 1544, 1546, 0, 1547, 1539, 1538, 1541, 1548, 1544,
-
- 1546, 1542, 1540, 1551, 1550, 1553, 1549, 0, 1545, 1543,
- 1551, 1552, 1552, 1538, 1538, 1542, 1545, 1549, 1544, 1546,
- 1547, 1547, 1554, 1553, 1548, 1548, 1550, 1555, 1557, 1554,
- 1551, 1550, 1553, 1549, 1555, 1558, 1560, 1561, 1552, 1563,
- 1564, 1565, 1562, 1567, 1566, 1560, 1571, 0, 1571, 1554,
- 1575, 0, 1564, 1576, 1555, 1557, 1569, 1563, 1566, 1558,
- 1570, 1567, 1558, 1560, 1561, 1562, 1563, 1564, 1565, 1562,
- 1567, 1566, 1575, 1571, 1569, 1570, 1577, 1575, 1579, 1576,
- 1576, 1580, 1581, 1569, 1582, 1583, 1584, 1570, 1585, 1581,
- 1582, 1586, 0, 1586, 1577, 1584, 1587, 1591, 1589, 1580,
-
- 1579, 0, 1590, 1577, 1592, 1579, 1589, 1583, 1580, 1581,
- 1593, 1582, 1583, 1584, 1590, 1594, 1596, 1597, 1586, 1585,
- 1598, 1598, 1595, 1587, 1591, 1589, 1594, 1592, 1593, 1590,
- 1595, 1592, 1599, 1600, 1602, 1596, 1603, 1593, 1605, 1597,
- 1609, 1600, 1594, 1596, 1597, 1606, 1607, 1598, 1611, 1595,
- 1607, 1610, 1606, 1611, 1612, 1613, 1615, 1617, 1603, 1599,
- 1600, 1602, 1614, 1603, 1610, 1605, 1609, 1609, 1620, 1616,
- 1614, 1615, 1606, 1607, 1622, 1611, 1616, 1618, 1610, 1619,
- 1621, 1612, 1613, 1615, 1617, 1624, 1619, 1626, 1621, 1614,
- 1620, 1627, 1618, 1623, 1623, 1620, 1616, 1629, 1630, 1627,
-
- 1631, 1632, 1633, 1623, 1618, 1622, 1619, 1621, 1634, 1635,
- 1637, 1630, 1624, 1639, 1626, 1641, 1643, 1642, 1627, 1629,
- 1623, 1623, 1631, 1644, 1629, 1630, 1645, 1631, 1632, 1633,
- 1642, 1635, 1648, 1649, 1643, 1634, 1635, 1637, 1654, 1639,
- 1639, 1650, 1641, 1643, 1642, 1652, 1653, 1654, 1645, 1658,
- 1644, 1648, 0, 1645, 1662, 1655, 1657, 1661, 1663, 1648,
- 1649, 1653, 1657, 1650, 1661, 1654, 1655, 1652, 1650, 1656,
- 1656, 1658, 1652, 1653, 1668, 1664, 1658, 1670, 1672, 1656,
- 1673, 1662, 1655, 1657, 1661, 1663, 1675, 1676, 1679, 1680,
- 1681, 0, 1681, 1673, 1678, 1687, 1656, 1656, 1664, 1676,
-
- 1670, 1668, 1664, 1678, 1670, 1672, 1682, 1673, 1684, 1685,
- 1690, 1692, 1686, 1675, 1676, 1679, 1680, 1681, 1682, 1683,
- 1686, 1678, 1687, 1694, 1703, 1683, 1696, 1700, 1697, 1701,
- 1684, 1685, 1703, 1682, 1704, 1684, 1685, 1690, 1692, 1686,
- 1702, 1696, 1701, 1704, 1713, 1710, 1683, 1718, 1705, 1712,
- 1694, 1703, 1713, 1696, 1697, 1697, 1701, 1711, 1700, 1705,
- 1714, 1704, 1702, 1712, 1711, 1719, 1715, 1702, 1710, 1714,
- 1717, 1713, 1710, 1720, 1718, 1705, 1712, 1715, 1716, 1721,
- 1716, 1724, 1717, 1719, 1711, 1729, 1722, 1714, 1722, 1730,
- 1723, 1725, 1719, 1715, 0, 1720, 1727, 1717, 1731, 1728,
-
- 1720, 1721, 1723, 0, 1725, 1716, 1721, 1728, 1727, 1739,
- 1732, 1731, 1724, 1722, 1733, 1734, 1729, 1723, 1725, 1735,
- 1730, 1736, 1733, 1727, 1732, 1731, 1728, 1735, 1734, 1737,
- 1738, 1739, 1740, 1747, 1742, 1736, 1739, 1732, 1738, 1741,
- 1743, 1733, 1734, 1737, 0, 0, 1735, 1741, 1736, 1744,
- 1745, 1748, 0, 1749, 1740, 1746, 1737, 1738, 1752, 1740,
- 1742, 1742, 1743, 1746, 1747, 0, 1741, 1743, 1756, 0,
- 1760, 1744, 1745, 1749, 1754, 1750, 1744, 1745, 1748, 1751,
- 1749, 1761, 1746, 1750, 1753, 1757, 1758, 1751, 1754, 1752,
- 1756, 1759, 1753, 1757, 1758, 1756, 1760, 1760, 1763, 1762,
-
- 1765, 1754, 1750, 1761, 1764, 1759, 1751, 1762, 1761, 1766,
- 1768, 1753, 1757, 1758, 1769, 1767, 1772, 0, 1759, 1770,
- 1771, 0, 1765, 1767, 1763, 1763, 1762, 1765, 1771, 1766,
- 1764, 1764, 1773, 1775, 1769, 1776, 1766, 1768, 1772, 1770,
- 1773, 1769, 1767, 1772, 1777, 1778, 1770, 1771, 1779, 1783,
- 1780, 1785, 1777, 1778, 1782, 1775, 1781, 1776, 1780, 1773,
- 1775, 1786, 1776, 0, 1781, 1784, 1787, 1789, 1792, 1795,
- 1796, 1777, 1778, 0, 1779, 1779, 1783, 1780, 1785, 1793,
- 1782, 1782, 0, 1781, 0, 1784, 1787, 1793, 1786, 1789,
- 1792, 1794, 1784, 1787, 1789, 1792, 1795, 1796, 0, 1794,
-
- 0, 0, 0, 0, 0, 0, 1793, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1794, 1800,
- 1800, 1800, 1800, 1800, 1800, 1800, 1801, 1801, 1801, 1801,
- 1801, 1801, 1801, 1802, 1802, 1802, 1802, 1802, 1802, 1802,
- 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1804, 1804, 1804,
- 1804, 1804, 1804, 1804, 1806, 1806, 0, 1806, 1806, 1806,
- 1806, 1807, 1807, 0, 0, 0, 1807, 1807, 1808, 1808,
- 0, 0, 1808, 0, 1808, 1809, 0, 0, 0, 0,
- 0, 1809, 1810, 1810, 0, 0, 0, 1810, 1810, 1811,
- 0, 0, 0, 0, 0, 1811, 1812, 1812, 0, 1812,
-
- 1812, 1812, 1812, 1813, 1813, 0, 1813, 1813, 1813, 1813,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
- 1799, 1799, 1799, 1799, 1799, 1799
+ 72, 78, 72, 69, 80, 81, 86, 72, 87, 82,
+ 82, 81, 84, 85, 78, 87, 64, 80, 82, 86,
+ 84, 91, 14, 219, 13, 78, 81, 0, 78, 117,
+ 85, 80, 81, 86, 72, 87, 82, 82, 81, 84,
+ 88, 78, 89, 91, 85, 92, 95, 93, 91, 88,
+ 93, 89, 219, 99, 95, 97, 96, 85, 92, 97,
+ 117, 100, 98, 93, 93, 98, 99, 88, 0, 89,
+
+ 107, 93, 92, 95, 93, 101, 96, 93, 96, 97,
+ 99, 103, 97, 96, 100, 102, 97, 105, 100, 98,
+ 93, 93, 104, 107, 105, 101, 106, 107, 108, 102,
+ 109, 103, 101, 96, 109, 106, 104, 108, 103, 110,
+ 0, 111, 102, 112, 105, 113, 110, 116, 114, 104,
+ 112, 119, 109, 106, 115, 108, 116, 109, 118, 113,
+ 114, 109, 115, 122, 124, 121, 110, 111, 111, 122,
+ 112, 119, 113, 118, 116, 114, 121, 119, 119, 120,
+ 123, 115, 125, 0, 126, 118, 124, 0, 120, 0,
+ 122, 124, 121, 126, 0, 142, 0, 125, 119, 0,
+
+ 140, 123, 0, 141, 0, 123, 120, 123, 0, 125,
+ 132, 126, 132, 132, 137, 132, 137, 137, 138, 137,
+ 138, 138, 143, 138, 140, 141, 142, 140, 123, 144,
+ 141, 145, 146, 147, 143, 148, 149, 0, 156, 145,
+ 147, 149, 150, 152, 146, 151, 156, 0, 144, 143,
+ 155, 0, 153, 148, 0, 138, 144, 157, 145, 146,
+ 147, 160, 148, 159, 150, 156, 158, 149, 149, 150,
+ 158, 151, 151, 153, 152, 162, 155, 155, 161, 157,
+ 153, 165, 163, 160, 157, 163, 159, 162, 160, 164,
+ 159, 161, 166, 158, 167, 0, 169, 163, 164, 167,
+
+ 153, 154, 162, 165, 170, 161, 154, 169, 165, 163,
+ 171, 154, 163, 167, 166, 168, 164, 154, 154, 166,
+ 167, 167, 168, 169, 154, 173, 167, 176, 154, 172,
+ 174, 178, 177, 154, 179, 170, 171, 171, 154, 172,
+ 167, 175, 168, 180, 154, 154, 182, 175, 174, 0,
+ 181, 184, 0, 194, 177, 0, 173, 174, 176, 177,
+ 172, 186, 178, 180, 181, 179, 172, 182, 175, 183,
+ 180, 187, 184, 182, 185, 188, 183, 181, 184, 185,
+ 186, 189, 190, 191, 194, 187, 192, 196, 186, 190,
+ 201, 192, 195, 189, 193, 193, 183, 188, 187, 195,
+
+ 197, 185, 188, 193, 198, 191, 202, 199, 189, 190,
+ 191, 200, 196, 192, 196, 199, 201, 201, 203, 195,
+ 197, 193, 193, 204, 205, 206, 200, 197, 202, 0,
+ 208, 209, 210, 206, 199, 198, 0, 202, 200, 205,
+ 204, 207, 211, 214, 213, 227, 218, 212, 204, 203,
+ 204, 205, 206, 209, 211, 202, 212, 213, 209, 216,
+ 207, 208, 214, 210, 215, 217, 215, 204, 207, 211,
+ 214, 213, 218, 218, 212, 220, 227, 221, 222, 0,
+ 0, 223, 224, 216, 225, 231, 216, 228, 230, 222,
+ 217, 215, 217, 223, 226, 0, 229, 243, 0, 0,
+
+ 228, 220, 220, 221, 221, 222, 224, 225, 223, 224,
+ 230, 225, 226, 232, 228, 230, 231, 233, 234, 235,
+ 232, 226, 229, 229, 234, 236, 233, 238, 243, 237,
+ 240, 247, 239, 235, 241, 242, 238, 0, 0, 240,
+ 232, 244, 265, 241, 233, 234, 235, 0, 245, 247,
+ 242, 236, 236, 237, 238, 239, 237, 240, 247, 239,
+ 248, 241, 242, 245, 246, 244, 248, 246, 244, 249,
+ 250, 253, 255, 265, 246, 245, 251, 251, 254, 258,
+ 0, 254, 256, 249, 255, 250, 0, 248, 254, 257,
+ 259, 246, 260, 262, 246, 253, 249, 250, 253, 255,
+
+ 256, 251, 261, 251, 251, 254, 258, 257, 254, 256,
+ 263, 267, 259, 269, 261, 262, 257, 259, 260, 260,
+ 262, 264, 268, 266, 268, 263, 269, 271, 264, 261,
+ 266, 270, 0, 267, 270, 272, 270, 263, 267, 0,
+ 269, 0, 270, 273, 276, 271, 268, 287, 264, 268,
+ 266, 268, 281, 275, 271, 277, 276, 0, 270, 274,
+ 275, 270, 279, 270, 281, 273, 272, 274, 277, 278,
+ 273, 276, 282, 274, 286, 279, 284, 283, 287, 281,
+ 275, 286, 277, 283, 284, 278, 274, 0, 285, 279,
+ 282, 288, 0, 278, 274, 288, 278, 291, 0, 282,
+
+ 285, 286, 289, 284, 283, 290, 293, 295, 292, 289,
+ 0, 297, 278, 280, 280, 285, 306, 290, 288, 291,
+ 292, 294, 295, 280, 291, 280, 280, 280, 294, 289,
+ 280, 296, 290, 299, 295, 292, 298, 293, 280, 306,
+ 280, 280, 297, 306, 296, 300, 300, 298, 294, 301,
+ 280, 302, 280, 280, 280, 299, 301, 280, 296, 303,
+ 299, 310, 302, 298, 304, 305, 307, 308, 314, 309,
+ 303, 313, 0, 311, 300, 307, 301, 304, 302, 310,
+ 308, 312, 309, 317, 316, 318, 303, 309, 310, 313,
+ 305, 304, 305, 307, 308, 311, 309, 315, 313, 314,
+
+ 311, 319, 321, 315, 312, 316, 317, 318, 312, 309,
+ 317, 316, 318, 320, 323, 322, 321, 324, 0, 325,
+ 327, 326, 0, 324, 315, 328, 0, 319, 319, 321,
+ 331, 329, 330, 0, 333, 320, 326, 325, 330, 0,
+ 320, 322, 322, 327, 324, 323, 325, 327, 326, 334,
+ 335, 328, 328, 329, 336, 334, 331, 331, 329, 330,
+ 333, 333, 342, 337, 338, 343, 340, 341, 344, 335,
+ 337, 347, 336, 340, 341, 342, 334, 335, 345, 338,
+ 346, 336, 349, 348, 353, 351, 344, 349, 0, 342,
+ 337, 338, 348, 340, 341, 344, 343, 350, 0, 346,
+
+ 345, 352, 347, 350, 354, 345, 353, 346, 351, 349,
+ 348, 353, 351, 352, 355, 354, 357, 358, 359, 364,
+ 0, 364, 355, 357, 350, 358, 361, 360, 352, 359,
+ 0, 354, 362, 0, 363, 370, 360, 0, 365, 362,
+ 370, 355, 356, 357, 358, 359, 364, 356, 369, 356,
+ 361, 371, 0, 361, 366, 367, 369, 356, 360, 362,
+ 363, 363, 370, 360, 365, 365, 366, 356, 356, 356,
+ 367, 368, 372, 371, 356, 369, 356, 373, 371, 374,
+ 375, 366, 367, 368, 356, 373, 376, 377, 378, 380,
+ 372, 374, 381, 383, 356, 379, 382, 378, 368, 372,
+
+ 386, 385, 377, 375, 373, 384, 374, 375, 380, 379,
+ 388, 382, 386, 387, 377, 378, 380, 376, 389, 381,
+ 384, 389, 379, 382, 383, 385, 390, 386, 385, 389,
+ 390, 392, 384, 391, 388, 387, 393, 388, 394, 395,
+ 387, 396, 397, 398, 400, 389, 0, 391, 389, 398,
+ 399, 401, 402, 405, 403, 0, 0, 390, 392, 0,
+ 391, 406, 0, 393, 0, 0, 395, 400, 396, 394,
+ 398, 400, 399, 397, 407, 402, 403, 399, 404, 402,
+ 409, 403, 401, 406, 405, 404, 408, 407, 406, 409,
+ 410, 408, 412, 411, 414, 408, 413, 415, 0, 418,
+
+ 0, 407, 411, 416, 0, 404, 417, 409, 0, 413,
+ 408, 423, 420, 408, 412, 415, 410, 410, 408, 412,
+ 411, 418, 408, 413, 415, 414, 418, 416, 417, 417,
+ 416, 419, 421, 417, 420, 422, 424, 425, 430, 420,
+ 428, 426, 423, 421, 427, 419, 0, 429, 431, 428,
+ 422, 433, 432, 437, 0, 417, 0, 424, 419, 421,
+ 429, 425, 422, 424, 425, 426, 427, 428, 426, 430,
+ 431, 427, 435, 433, 429, 431, 432, 434, 433, 432,
+ 436, 434, 438, 442, 437, 440, 435, 439, 441, 440,
+ 453, 442, 443, 446, 436, 444, 445, 0, 0, 435,
+
+ 438, 446, 439, 448, 444, 445, 449, 436, 434, 438,
+ 442, 439, 0, 441, 439, 441, 440, 443, 447, 443,
+ 446, 453, 444, 445, 449, 447, 448, 450, 451, 439,
+ 448, 452, 454, 449, 455, 0, 456, 451, 460, 450,
+ 454, 457, 455, 452, 458, 447, 0, 459, 461, 460,
+ 463, 464, 462, 0, 450, 451, 461, 0, 452, 454,
+ 458, 455, 456, 456, 457, 460, 462, 465, 457, 459,
+ 463, 458, 468, 464, 459, 461, 466, 463, 464, 462,
+ 467, 468, 470, 471, 469, 0, 472, 465, 473, 475,
+ 479, 474, 0, 476, 465, 475, 471, 0, 466, 468,
+
+ 470, 476, 467, 466, 469, 477, 481, 467, 472, 470,
+ 471, 469, 473, 472, 474, 473, 475, 480, 474, 476,
+ 476, 479, 482, 477, 480, 483, 484, 485, 476, 481,
+ 499, 486, 477, 481, 483, 490, 487, 482, 487, 0,
+ 486, 0, 496, 493, 480, 497, 485, 490, 523, 482,
+ 498, 0, 483, 493, 485, 0, 505, 484, 486, 0,
+ 496, 499, 490, 487, 488, 501, 497, 502, 488, 496,
+ 493, 488, 497, 498, 507, 504, 502, 498, 488, 523,
+ 503, 488, 503, 505, 506, 0, 488, 501, 0, 0,
+ 509, 488, 501, 0, 502, 488, 513, 510, 488, 504,
+
+ 507, 507, 504, 512, 506, 488, 508, 503, 488, 500,
+ 500, 506, 500, 0, 511, 500, 509, 509, 508, 510,
+ 500, 513, 515, 513, 510, 512, 500, 500, 0, 515,
+ 512, 517, 514, 508, 518, 500, 500, 500, 511, 500,
+ 514, 511, 500, 516, 519, 521, 520, 500, 522, 515,
+ 517, 516, 524, 500, 500, 520, 519, 525, 517, 514,
+ 518, 518, 0, 527, 526, 529, 530, 521, 528, 531,
+ 516, 519, 521, 520, 529, 522, 533, 535, 532, 534,
+ 540, 525, 527, 524, 525, 526, 532, 528, 530, 531,
+ 527, 526, 529, 530, 536, 528, 531, 538, 534, 539,
+
+ 541, 0, 536, 533, 540, 532, 534, 540, 535, 542,
+ 543, 547, 546, 541, 0, 538, 549, 539, 546, 548,
+ 544, 536, 543, 549, 538, 548, 539, 541, 544, 550,
+ 553, 552, 555, 547, 550, 542, 542, 543, 547, 546,
+ 555, 551, 554, 549, 544, 556, 548, 544, 551, 552,
+ 558, 554, 557, 553, 559, 544, 550, 553, 552, 555,
+ 560, 561, 562, 556, 563, 557, 0, 560, 551, 554,
+ 565, 558, 556, 564, 561, 566, 567, 558, 565, 557,
+ 568, 559, 569, 570, 574, 572, 568, 560, 561, 571,
+ 566, 573, 575, 562, 572, 563, 564, 565, 567, 575,
+
+ 564, 576, 566, 567, 577, 573, 579, 568, 569, 569,
+ 578, 582, 572, 571, 570, 574, 571, 580, 573, 575,
+ 581, 0, 578, 581, 582, 580, 585, 583, 576, 579,
+ 0, 577, 592, 579, 583, 586, 0, 578, 582, 587,
+ 588, 0, 588, 591, 580, 592, 0, 581, 589, 0,
+ 602, 587, 585, 585, 583, 584, 593, 584, 586, 592,
+ 590, 584, 586, 584, 595, 591, 587, 588, 584, 593,
+ 591, 589, 590, 584, 594, 589, 595, 597, 0, 584,
+ 598, 602, 584, 593, 584, 601, 596, 590, 584, 600,
+ 584, 595, 599, 598, 604, 584, 596, 594, 599, 597,
+
+ 584, 594, 600, 605, 597, 606, 601, 598, 596, 604,
+ 603, 607, 601, 596, 608, 603, 600, 603, 606, 599,
+ 610, 604, 613, 596, 609, 605, 607, 614, 616, 0,
+ 605, 617, 606, 620, 619, 603, 603, 603, 607, 610,
+ 608, 608, 603, 611, 603, 612, 609, 610, 619, 613,
+ 614, 609, 618, 612, 614, 617, 611, 622, 617, 616,
+ 618, 619, 603, 621, 620, 622, 624, 626, 623, 625,
+ 611, 631, 612, 628, 630, 626, 627, 624, 629, 618,
+ 628, 633, 636, 641, 622, 621, 623, 625, 634, 633,
+ 621, 629, 630, 624, 626, 623, 625, 634, 627, 635,
+
+ 628, 630, 631, 627, 636, 629, 637, 638, 633, 636,
+ 640, 635, 639, 642, 641, 634, 644, 0, 645, 646,
+ 644, 645, 647, 0, 648, 650, 635, 642, 637, 638,
+ 639, 648, 650, 637, 638, 647, 640, 640, 649, 639,
+ 642, 653, 651, 646, 645, 645, 646, 644, 645, 647,
+ 649, 648, 650, 652, 654, 658, 655, 657, 660, 652,
+ 656, 659, 661, 653, 662, 649, 651, 660, 653, 651,
+ 0, 656, 0, 662, 666, 667, 654, 655, 657, 659,
+ 652, 654, 658, 655, 657, 660, 661, 656, 659, 661,
+ 663, 662, 664, 665, 669, 671, 666, 667, 663, 664,
+
+ 670, 666, 667, 669, 675, 673, 674, 665, 672, 0,
+ 0, 671, 676, 0, 679, 678, 675, 663, 677, 664,
+ 665, 669, 671, 672, 670, 681, 677, 670, 678, 679,
+ 682, 675, 683, 690, 681, 672, 673, 674, 687, 676,
+ 683, 679, 678, 688, 684, 677, 684, 689, 682, 691,
+ 692, 687, 681, 0, 689, 688, 693, 682, 0, 683,
+ 694, 698, 695, 696, 690, 687, 699, 697, 701, 698,
+ 688, 684, 692, 694, 689, 695, 701, 692, 693, 697,
+ 691, 702, 705, 693, 700, 696, 699, 694, 698, 695,
+ 696, 703, 704, 699, 697, 701, 700, 707, 706, 708,
+
+ 709, 704, 710, 705, 703, 706, 711, 712, 702, 705,
+ 713, 700, 0, 714, 715, 710, 712, 716, 703, 704,
+ 709, 708, 715, 707, 707, 706, 708, 709, 713, 710,
+ 711, 718, 719, 711, 712, 714, 720, 713, 717, 716,
+ 714, 715, 722, 721, 716, 723, 717, 725, 720, 724,
+ 719, 732, 726, 725, 718, 721, 727, 724, 718, 719,
+ 723, 726, 722, 720, 729, 717, 728, 730, 733, 722,
+ 721, 729, 723, 734, 725, 736, 724, 727, 728, 726,
+ 735, 733, 732, 727, 737, 730, 738, 735, 739, 742,
+ 738, 729, 734, 728, 730, 733, 739, 736, 741, 737,
+
+ 734, 740, 736, 742, 743, 744, 745, 735, 746, 0,
+ 753, 737, 747, 751, 740, 739, 742, 738, 748, 749,
+ 750, 754, 743, 0, 741, 741, 751, 755, 740, 752,
+ 746, 743, 745, 745, 747, 746, 744, 749, 752, 747,
+ 751, 753, 750, 756, 748, 748, 749, 750, 758, 755,
+ 762, 0, 754, 0, 755, 0, 752, 759, 761, 763,
+ 765, 764, 762, 770, 765, 0, 756, 771, 763, 771,
+ 756, 757, 770, 759, 758, 758, 757, 762, 757, 764,
+ 757, 761, 757, 766, 759, 761, 763, 767, 764, 757,
+ 770, 765, 768, 769, 771, 767, 766, 772, 757, 774,
+
+ 773, 776, 779, 757, 781, 757, 769, 757, 777, 757,
+ 766, 768, 773, 778, 767, 780, 782, 783, 0, 768,
+ 769, 778, 780, 785, 772, 776, 774, 773, 776, 779,
+ 777, 781, 784, 786, 787, 777, 788, 789, 782, 784,
+ 778, 793, 780, 782, 783, 785, 789, 790, 794, 791,
+ 785, 795, 786, 796, 799, 800, 787, 803, 798, 784,
+ 786, 787, 788, 788, 789, 797, 798, 802, 790, 791,
+ 799, 802, 793, 795, 790, 0, 791, 808, 795, 794,
+ 801, 799, 800, 797, 796, 798, 805, 801, 803, 804,
+ 806, 807, 797, 805, 802, 804, 810, 812, 810, 809,
+
+ 807, 811, 804, 808, 808, 806, 809, 801, 813, 815,
+ 811, 814, 817, 805, 819, 814, 804, 806, 807, 812,
+ 817, 818, 804, 810, 812, 818, 809, 820, 811, 822,
+ 821, 815, 819, 823, 825, 813, 815, 0, 814, 817,
+ 824, 819, 822, 826, 827, 827, 820, 829, 0, 828,
+ 825, 826, 818, 830, 820, 821, 822, 821, 828, 831,
+ 832, 825, 830, 824, 823, 834, 831, 824, 833, 829,
+ 826, 827, 835, 834, 829, 839, 828, 833, 836, 837,
+ 830, 838, 843, 832, 840, 835, 831, 832, 841, 838,
+ 836, 837, 834, 845, 842, 833, 848, 839, 850, 835,
+
+ 843, 844, 839, 842, 840, 836, 837, 847, 838, 843,
+ 841, 840, 846, 844, 845, 841, 849, 851, 846, 853,
+ 845, 842, 854, 855, 850, 850, 856, 848, 844, 847,
+ 0, 859, 855, 858, 847, 859, 860, 866, 857, 846,
+ 860, 858, 0, 851, 851, 854, 853, 849, 856, 854,
+ 855, 857, 865, 856, 0, 861, 862, 863, 863, 873,
+ 858, 864, 859, 861, 862, 857, 867, 860, 866, 864,
+ 868, 873, 869, 865, 867, 872, 871, 870, 868, 865,
+ 869, 872, 861, 862, 863, 870, 873, 874, 864, 871,
+ 876, 875, 0, 867, 877, 879, 878, 868, 881, 869,
+
+ 884, 885, 872, 871, 870, 876, 880, 884, 887, 879,
+ 886, 889, 881, 874, 874, 875, 877, 876, 875, 878,
+ 0, 877, 879, 878, 880, 881, 882, 884, 885, 888,
+ 882, 887, 886, 880, 0, 887, 888, 886, 891, 893,
+ 895, 894, 889, 882, 0, 897, 899, 891, 0, 902,
+ 901, 882, 903, 882, 0, 0, 888, 882, 904, 906,
+ 904, 893, 908, 0, 903, 891, 893, 894, 894, 905,
+ 882, 895, 897, 899, 901, 902, 902, 901, 907, 903,
+ 909, 906, 905, 910, 912, 904, 906, 909, 911, 908,
+ 907, 913, 917, 911, 914, 915, 905, 919, 920, 918,
+
+ 912, 917, 914, 0, 0, 907, 921, 909, 926, 910,
+ 910, 912, 918, 921, 913, 911, 925, 915, 913, 917,
+ 920, 914, 915, 919, 919, 920, 918, 922, 923, 924,
+ 926, 927, 928, 921, 922, 926, 924, 929, 931, 928,
+ 932, 925, 933, 925, 936, 934, 923, 936, 937, 938,
+ 933, 931, 941, 939, 922, 923, 924, 942, 940, 928,
+ 939, 940, 927, 943, 938, 931, 934, 932, 929, 933,
+ 944, 936, 934, 940, 937, 937, 938, 946, 947, 942,
+ 939, 943, 940, 941, 942, 940, 948, 945, 940, 945,
+ 943, 950, 944, 949, 952, 953, 951, 944, 956, 950,
+
+ 940, 946, 949, 951, 946, 955, 954, 957, 958, 947,
+ 954, 0, 948, 948, 945, 959, 952, 958, 950, 0,
+ 949, 952, 959, 951, 960, 956, 953, 955, 961, 957,
+ 962, 960, 955, 954, 957, 958, 963, 964, 968, 965,
+ 966, 961, 959, 967, 968, 962, 965, 966, 970, 971,
+ 963, 960, 972, 973, 977, 961, 967, 962, 975, 974,
+ 979, 977, 974, 963, 972, 968, 965, 966, 964, 975,
+ 967, 971, 980, 973, 983, 970, 971, 974, 981, 972,
+ 973, 977, 982, 984, 986, 975, 974, 979, 987, 974,
+ 988, 984, 983, 982, 985, 992, 980, 985, 991, 980,
+
+ 981, 983, 986, 993, 990, 981, 989, 991, 992, 982,
+ 984, 986, 985, 989, 993, 997, 998, 988, 990, 987,
+ 994, 985, 992, 996, 985, 991, 995, 998, 995, 1000,
+ 993, 990, 996, 989, 999, 994, 0, 1003, 1005, 1007,
+ 1001, 997, 997, 998, 1008, 1002, 1003, 994, 1002, 1006,
+ 996, 1000, 999, 995, 1001, 1009, 1000, 1010, 1006, 1011,
+ 1015, 999, 1009, 1002, 1003, 1008, 1001, 1001, 1012, 1005,
+ 1007, 1008, 1002, 1011, 1012, 1002, 1006, 1016, 1019, 1015,
+ 1017, 1001, 1009, 1020, 1025, 1018, 1011, 1015, 1010, 1017,
+ 1021, 1016, 1012, 1018, 1020, 1012, 1023, 1024, 1028, 1021,
+
+ 1026, 1012, 1031, 1023, 1016, 0, 1025, 1017, 1027, 1019,
+ 1020, 1025, 1018, 1032, 1029, 0, 1028, 1021, 1029, 1030,
+ 1024, 1037, 1026, 1023, 1024, 1028, 1032, 1026, 1033, 1031,
+ 1027, 1030, 1034, 1039, 1035, 1027, 1036, 1040, 1038, 1041,
+ 1032, 1029, 1039, 1042, 1036, 1043, 1030, 1034, 1033, 1035,
+ 1046, 1045, 1037, 1038, 1047, 1033, 1048, 1049, 1040, 1034,
+ 1039, 1035, 1050, 1036, 1040, 1038, 1041, 1042, 1046, 1053,
+ 1042, 1048, 1043, 1045, 1052, 1051, 1056, 1046, 1045, 1049,
+ 1050, 1047, 1054, 1048, 1049, 1055, 1052, 1057, 1056, 1050,
+ 1051, 1053, 1055, 1058, 1062, 1054, 1053, 1067, 1059, 1060,
+
+ 1054, 1052, 1051, 1056, 1059, 1064, 1061, 1060, 1063, 1054,
+ 1065, 1066, 1055, 1061, 1057, 1063, 1068, 1070, 1071, 1072,
+ 1074, 1062, 1054, 1076, 1058, 1059, 1060, 1071, 1067, 1073,
+ 1080, 1073, 1064, 1061, 1066, 1063, 1075, 1065, 1066, 0,
+ 1068, 1085, 1078, 1068, 0, 1071, 1083, 1074, 1070, 1078,
+ 1072, 1077, 1077, 1077, 1076, 1087, 1073, 1079, 1077, 1083,
+ 1081, 1080, 1075, 1075, 1079, 1084, 1077, 1081, 1085, 1078,
+ 1088, 1084, 1089, 1083, 1086, 1086, 1091, 1088, 1077, 1077,
+ 1077, 1087, 1087, 1092, 1079, 1077, 1094, 1081, 1093, 1095,
+ 1096, 1096, 1084, 1097, 1091, 1098, 1098, 1088, 1089, 1089,
+
+ 1093, 1086, 1101, 1091, 1102, 1104, 1094, 1095, 0, 1105,
+ 1092, 1103, 1099, 1094, 1106, 1093, 1095, 1096, 1103, 1097,
+ 1097, 1107, 1098, 1099, 1101, 1104, 1109, 1108, 1111, 1101,
+ 1110, 1112, 1104, 1114, 0, 1102, 1111, 1110, 1103, 1099,
+ 1105, 1113, 1114, 1116, 1109, 1106, 1112, 1117, 1107, 1108,
+ 1115, 1115, 1122, 1109, 1108, 1111, 1118, 1110, 1112, 1117,
+ 1114, 1119, 1121, 1120, 1118, 1113, 1123, 1124, 1113, 1116,
+ 1116, 1123, 1125, 1119, 1117, 1127, 1128, 1115, 1125, 1122,
+ 1121, 1129, 1123, 1118, 1120, 1129, 1130, 1126, 1119, 1121,
+ 1120, 1131, 1131, 1123, 1124, 1132, 1133, 1135, 1123, 1125,
+
+ 1126, 1134, 1138, 1128, 1136, 1137, 1127, 1137, 1139, 1140,
+ 1132, 1141, 1129, 1139, 1126, 1143, 1134, 1130, 1131, 1136,
+ 1135, 1144, 1132, 1145, 1135, 1146, 1141, 1133, 1134, 1147,
+ 1148, 1136, 1137, 1138, 1150, 1139, 1147, 1149, 1141, 1143,
+ 1140, 1153, 1143, 1155, 1151, 1156, 1159, 1144, 1144, 0,
+ 1145, 1148, 1146, 1164, 1158, 1150, 1147, 1148, 1160, 1149,
+ 1156, 1150, 1151, 1153, 1149, 1160, 1161, 1155, 1153, 1158,
+ 1155, 1151, 1156, 1159, 1162, 1165, 1164, 1166, 1163, 1167,
+ 1164, 1158, 1170, 1162, 1161, 1160, 1163, 1169, 1174, 1171,
+ 1178, 1170, 1167, 1161, 1172, 1183, 1179, 1165, 1169, 1177,
+
+ 0, 1162, 1165, 1178, 1181, 1163, 1167, 1171, 1166, 1170,
+ 1180, 1177, 1172, 1169, 1169, 1174, 1171, 1178, 1182, 1185,
+ 1180, 1172, 1183, 1187, 1188, 1169, 1177, 1179, 1186, 1190,
+ 1181, 1181, 1189, 1191, 0, 1186, 0, 1180, 1189, 1185,
+ 1193, 1193, 1188, 1182, 1190, 1182, 1185, 1192, 1191, 1187,
+ 1187, 1188, 1194, 1198, 1195, 1186, 1190, 1199, 1196, 1189,
+ 1191, 1195, 1192, 1200, 1194, 1196, 1201, 1193, 1205, 1202,
+ 1204, 1213, 1200, 0, 1192, 1198, 1206, 1206, 1207, 1194,
+ 1198, 1195, 1199, 1204, 1199, 1196, 1201, 1202, 1208, 1209,
+ 1200, 1216, 1210, 1201, 1212, 1205, 1202, 1204, 1211, 1224,
+
+ 1207, 1212, 1213, 1206, 1214, 1207, 1215, 1211, 0, 1218,
+ 1216, 1209, 1220, 1208, 1210, 1208, 1209, 1218, 1216, 1210,
+ 1215, 1212, 1219, 0, 1221, 1211, 1214, 1223, 1222, 1227,
+ 1224, 1214, 0, 1215, 1223, 1219, 1218, 1225, 1226, 1220,
+ 1222, 1229, 1228, 1230, 1227, 1228, 1243, 1231, 0, 1219,
+ 1221, 1221, 0, 1233, 1223, 1222, 1227, 1234, 1243, 1225,
+ 1228, 1230, 1231, 1226, 1225, 1226, 1229, 1236, 1229, 1228,
+ 1230, 1237, 1228, 1243, 1231, 1233, 1238, 0, 1237, 1234,
+ 1233, 1236, 1245, 1240, 1234, 1242, 1244, 1238, 1244, 1246,
+ 1247, 1248, 1250, 1249, 1236, 1253, 0, 1252, 1237, 1251,
+
+ 1245, 1249, 1258, 1238, 1240, 1260, 1242, 1259, 1247, 1245,
+ 1240, 1252, 1242, 1244, 1254, 1250, 1246, 1247, 1248, 1250,
+ 1249, 1251, 1253, 1255, 1252, 1259, 1251, 1261, 1262, 1258,
+ 1255, 1263, 1260, 1254, 1259, 1264, 1266, 1265, 1269, 0,
+ 1263, 1254, 1268, 1262, 1268, 1270, 1274, 1275, 1272, 1270,
+ 1255, 0, 1273, 1261, 1261, 1262, 1271, 1274, 1263, 1265,
+ 1269, 1273, 1276, 1266, 1265, 1269, 1264, 0, 1271, 1268,
+ 1272, 1278, 1270, 1274, 1275, 1272, 1277, 1279, 1279, 1273,
+ 1282, 1286, 1280, 1271, 1282, 1276, 1285, 1284, 1277, 1276,
+ 1280, 1283, 1285, 1278, 1283, 1284, 1286, 1289, 1278, 1287,
+
+ 1295, 1290, 1291, 1277, 1279, 1287, 1292, 1282, 1286, 1280,
+ 1294, 1296, 1299, 1285, 1284, 1300, 1291, 1293, 1283, 1292,
+ 1297, 1298, 1301, 1303, 1289, 1290, 1287, 1295, 1290, 1291,
+ 1304, 1293, 1297, 1292, 1305, 1298, 1294, 1294, 1296, 1299,
+ 1308, 1309, 1300, 1302, 1293, 1306, 1310, 1297, 1298, 1301,
+ 1303, 1302, 1311, 1306, 1310, 1312, 1313, 1304, 0, 1315,
+ 1314, 1305, 1308, 1316, 1312, 1320, 1318, 1308, 1309, 1322,
+ 1302, 1323, 1306, 1310, 1315, 1323, 1322, 1313, 1318, 1311,
+ 1317, 1319, 1312, 1313, 1314, 1315, 1315, 1314, 1317, 1319,
+ 1316, 1324, 1320, 1318, 1325, 1326, 1322, 1327, 1323, 1328,
+
+ 1332, 1315, 1330, 1324, 1334, 1327, 1334, 1317, 1319, 1329,
+ 1329, 1333, 1331, 1336, 1339, 1332, 0, 1325, 1324, 1336,
+ 1335, 1325, 1326, 1337, 1327, 1338, 1328, 1332, 1330, 1330,
+ 1331, 1334, 1339, 1333, 1335, 1340, 1329, 1338, 1333, 1331,
+ 1336, 1339, 1341, 1342, 1343, 1337, 1347, 1335, 1349, 1345,
+ 1337, 1348, 1338, 1340, 1352, 1341, 1345, 1350, 1357, 0,
+ 1355, 0, 1340, 1359, 1347, 1350, 1352, 1343, 1353, 1341,
+ 1359, 1343, 1358, 1347, 1342, 1355, 1345, 1348, 1348, 1349,
+ 1361, 1352, 1357, 1350, 1350, 1357, 1353, 1355, 1360, 1363,
+ 1359, 1364, 1350, 1365, 1358, 1353, 1366, 1367, 1368, 1358,
+
+ 1369, 0, 1373, 1360, 1364, 1371, 1368, 1361, 1374, 1372,
+ 1367, 1366, 1380, 0, 1375, 1360, 1363, 0, 1364, 1365,
+ 1365, 1375, 1377, 1366, 1367, 1368, 1369, 1369, 1371, 1373,
+ 1374, 1376, 1371, 1372, 1379, 1374, 1372, 1383, 1381, 1378,
+ 1384, 1375, 1385, 1380, 1376, 1377, 1378, 1387, 1383, 1377,
+ 1386, 0, 1391, 1395, 1399, 1390, 1379, 1400, 1376, 1381,
+ 1402, 1379, 1384, 1404, 1383, 1381, 1378, 1384, 1390, 1386,
+ 1405, 1408, 1387, 1385, 1387, 1406, 1399, 1386, 1391, 1391,
+ 1395, 1399, 1390, 1407, 1400, 1411, 1406, 1402, 1407, 1412,
+ 1414, 1410, 1415, 1408, 1404, 1416, 1405, 1405, 1408, 1410,
+
+ 1411, 1417, 1406, 1419, 1416, 1421, 1422, 1423, 1414, 0,
+ 1407, 1425, 1411, 1417, 1424, 1426, 1412, 1414, 1410, 1427,
+ 1423, 1435, 1416, 1415, 1428, 1430, 1429, 1421, 1417, 1431,
+ 1419, 1422, 1421, 1422, 1423, 1429, 1424, 1433, 1425, 1428,
+ 1430, 1424, 1426, 1432, 1431, 1436, 1427, 1434, 1435, 1437,
+ 1437, 1428, 1430, 1429, 1434, 1438, 1431, 1439, 1432, 1433,
+ 1441, 1446, 1438, 1436, 1433, 1440, 1442, 1444, 1440, 1445,
+ 1432, 1439, 1436, 1441, 1434, 1442, 1437, 1447, 1443, 0,
+ 1448, 0, 1438, 1443, 1439, 1458, 1452, 1441, 1446, 1444,
+ 1451, 1445, 1440, 1442, 1444, 1452, 1445, 1451, 1453, 1460,
+
+ 1455, 1454, 1456, 1453, 1447, 1443, 1448, 1448, 1454, 1456,
+ 1457, 1458, 1458, 1452, 1461, 1462, 1467, 1451, 1455, 1457,
+ 1468, 1463, 1464, 1466, 1467, 1453, 1460, 1455, 1454, 1456,
+ 1465, 1464, 1461, 1463, 1466, 1462, 1469, 1457, 1473, 1465,
+ 0, 1461, 1462, 1467, 1470, 1474, 1471, 1468, 1463, 1464,
+ 1466, 1472, 1474, 1470, 1476, 1480, 1479, 1465, 1471, 1472,
+ 1473, 1481, 1476, 1479, 1482, 1473, 1483, 1469, 1484, 1485,
+ 1489, 1470, 1474, 1471, 1487, 1483, 1482, 1488, 1472, 1480,
+ 1490, 1476, 1480, 1479, 1492, 1494, 1487, 1495, 1481, 1499,
+ 1493, 1482, 1485, 1483, 1490, 1484, 1485, 1489, 1493, 1502,
+
+ 1488, 1487, 1501, 1500, 1488, 1503, 1505, 1490, 1500, 0,
+ 1504, 1492, 1494, 1508, 1495, 1499, 1499, 1493, 1504, 1507,
+ 1501, 1502, 1509, 1511, 1510, 1505, 1502, 1503, 1512, 1501,
+ 1500, 1507, 1503, 1505, 1513, 1508, 1510, 1504, 0, 1514,
+ 1508, 1515, 1516, 1519, 1509, 1520, 1507, 0, 1521, 1509,
+ 1511, 1510, 1522, 0, 1523, 1512, 1529, 1519, 0, 1525,
+ 1526, 1514, 1527, 0, 0, 1513, 1514, 0, 1515, 1516,
+ 1519, 1521, 1523, 1524, 1522, 1521, 1520, 1527, 1525, 1522,
+ 1529, 1523, 1526, 1529, 1530, 1524, 1525, 1526, 1531, 1527,
+ 1532, 1533, 1535, 1530, 1534, 1537, 1540, 1538, 1539, 1541,
+
+ 1524, 1543, 1531, 1537, 1538, 0, 1539, 1541, 1532, 1533,
+ 1535, 1530, 1542, 1544, 1545, 1531, 1547, 1532, 1533, 1535,
+ 1534, 1534, 1537, 1540, 1538, 1539, 1541, 1550, 1543, 1551,
+ 1542, 1548, 1544, 1554, 1547, 1552, 1545, 1556, 1562, 1542,
+ 1544, 1545, 1551, 1547, 1559, 1548, 1560, 1552, 1563, 0,
+ 1550, 1559, 1561, 1564, 1550, 1566, 1551, 1565, 1548, 1554,
+ 1554, 1567, 1552, 1568, 1556, 1562, 1565, 1572, 1566, 1573,
+ 1569, 1559, 1560, 1560, 1576, 1563, 1561, 1577, 1577, 1561,
+ 1564, 1578, 1566, 1582, 1565, 1586, 1579, 1577, 1572, 1581,
+ 1568, 1580, 1567, 1569, 1572, 1579, 1576, 1569, 1580, 1583,
+
+ 1573, 1576, 1581, 1578, 1577, 1577, 1584, 1583, 1578, 1585,
+ 1582, 1586, 1586, 1579, 1587, 1589, 1581, 1585, 1580, 1588,
+ 1590, 1591, 1591, 1596, 1600, 1584, 1583, 1590, 1593, 1597,
+ 1588, 1592, 1594, 1584, 1599, 1593, 1585, 1589, 1604, 1594,
+ 1587, 1587, 1589, 1599, 1601, 1602, 1588, 1590, 1591, 1592,
+ 1596, 1600, 1603, 1597, 1605, 1593, 1597, 1606, 1592, 1594,
+ 1608, 1599, 1609, 1602, 1603, 1604, 1614, 1601, 1605, 1615,
+ 1618, 1601, 1602, 1616, 1610, 1606, 1610, 1609, 1608, 1603,
+ 1619, 1605, 1621, 1620, 1606, 1627, 1625, 1608, 1614, 1609,
+ 1620, 1616, 1618, 1614, 1623, 1615, 1615, 1618, 1619, 1622,
+
+ 1616, 1610, 1624, 1630, 1626, 1622, 1626, 1619, 1631, 1632,
+ 1620, 1624, 1627, 1621, 1629, 1630, 1623, 1625, 1637, 1633,
+ 1635, 1623, 1629, 1634, 1636, 1639, 1622, 1642, 1635, 1624,
+ 1630, 1626, 1632, 1643, 1634, 1631, 1632, 1633, 1638, 1638,
+ 1637, 1629, 1645, 1636, 1649, 1637, 1633, 1635, 1640, 1647,
+ 1634, 1636, 1639, 1647, 1642, 1643, 1640, 1646, 1651, 1650,
+ 1643, 1652, 1653, 1651, 1646, 1638, 1654, 1655, 1657, 1645,
+ 1649, 1649, 1650, 1656, 1654, 1640, 1647, 1658, 1660, 1661,
+ 1656, 1663, 1655, 1659, 1646, 1651, 1650, 1665, 1652, 1653,
+ 1659, 1662, 1658, 1654, 1655, 1657, 1667, 1664, 1664, 1662,
+
+ 1656, 1661, 1660, 1668, 1658, 1660, 1661, 1664, 1671, 1670,
+ 1659, 1668, 1663, 1673, 1665, 1672, 1674, 1675, 1662, 1676,
+ 1678, 1671, 1680, 1667, 1664, 1664, 1682, 1685, 1686, 1690,
+ 1668, 1670, 1683, 1684, 0, 1671, 1670, 1672, 1689, 1691,
+ 1673, 1676, 1672, 1674, 1675, 1683, 1676, 1678, 1680, 1680,
+ 1686, 1684, 1693, 1682, 1685, 1686, 1690, 1689, 1694, 1683,
+ 1684, 1691, 1695, 1696, 1697, 1689, 1691, 1698, 1698, 1704,
+ 1699, 1700, 1696, 1694, 1693, 1697, 1699, 1698, 1705, 1693,
+ 1703, 1695, 1710, 1706, 0, 1694, 1714, 1703, 1712, 1695,
+ 1696, 1697, 1717, 1700, 1698, 1698, 1704, 1699, 1700, 1715,
+
+ 1721, 1722, 1718, 1723, 0, 1705, 1706, 1703, 1720, 1710,
+ 1706, 1712, 1715, 1714, 1718, 1712, 1724, 1720, 1724, 1717,
+ 1725, 1730, 1727, 1728, 1733, 1723, 1715, 1721, 1722, 1718,
+ 1723, 1726, 1725, 1729, 1735, 1720, 1737, 1726, 1739, 0,
+ 1740, 1729, 1745, 1724, 1727, 1728, 1743, 1725, 1730, 1727,
+ 1728, 1733, 1744, 1739, 1746, 1745, 0, 1754, 1726, 1748,
+ 1729, 1735, 0, 1737, 1747, 1739, 1740, 1740, 1748, 1745,
+ 1743, 1749, 1747, 1743, 1756, 1757, 1746, 1763, 1755, 1758,
+ 1754, 1746, 1749, 1744, 1754, 1755, 1748, 1758, 1759, 1757,
+ 1756, 1747, 1760, 1761, 1764, 1761, 1762, 1759, 1749, 1765,
+
+ 1766, 1756, 1757, 1760, 1763, 1755, 1758, 1767, 1762, 1768,
+ 1770, 1768, 1764, 1769, 1776, 1759, 1773, 1771, 1777, 1760,
+ 1761, 1764, 1766, 1762, 1775, 1769, 1765, 1766, 1773, 1767,
+ 1771, 1780, 1775, 1778, 1767, 1781, 1768, 1786, 1779, 1780,
+ 1769, 1770, 1782, 1773, 1771, 1776, 1778, 1783, 1781, 1777,
+ 1782, 1775, 1779, 1784, 1787, 1785, 1794, 1789, 1780, 1786,
+ 1778, 1783, 1781, 1785, 1786, 1779, 1790, 1784, 1791, 1782,
+ 1788, 1793, 1792, 1795, 1783, 1799, 1787, 0, 1788, 1793,
+ 1784, 1787, 1785, 1789, 1789, 1796, 1803, 1794, 1790, 1801,
+ 1791, 0, 0, 1790, 1792, 1791, 1797, 1788, 1793, 1792,
+
+ 1795, 1798, 1800, 1801, 1797, 1796, 1799, 1804, 1803, 1798,
+ 1800, 1805, 1796, 1803, 1807, 1804, 1801, 1806, 1809, 1805,
+ 1808, 0, 1810, 1797, 1811, 0, 1809, 1814, 1798, 1800,
+ 1812, 1806, 1815, 1813, 1804, 1814, 1816, 0, 1805, 0,
+ 1807, 1807, 1808, 1819, 1806, 1809, 1817, 1808, 1810, 1810,
+ 1811, 1811, 1812, 1813, 1814, 1822, 1816, 1812, 1823, 1815,
+ 1813, 1818, 1830, 1816, 1820, 1819, 1817, 1824, 1825, 1818,
+ 1819, 1826, 1820, 1817, 1829, 1824, 1825, 1822, 1827, 1828,
+ 1823, 1832, 1822, 1831, 1833, 1823, 1827, 1828, 1818, 1830,
+ 0, 1820, 1834, 1836, 1824, 1825, 1839, 1826, 1826, 1840,
+
+ 1829, 1829, 1842, 1831, 1843, 1827, 1828, 1840, 1832, 1841,
+ 1831, 1833, 1834, 0, 0, 1836, 0, 1841, 1839, 1834,
+ 1836, 0, 0, 1839, 0, 0, 1840, 0, 0, 1842,
+ 0, 1843, 0, 0, 0, 0, 1841, 1847, 1847, 1847,
+ 1847, 1847, 1847, 1847, 1848, 1848, 1848, 1848, 1848, 1848,
+ 1848, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1850, 1850,
+ 1850, 1850, 1850, 1850, 1850, 1851, 1851, 1851, 1851, 1851,
+ 1851, 1851, 1853, 1853, 0, 1853, 1853, 1853, 1853, 1854,
+ 1854, 0, 0, 0, 1854, 1854, 1855, 1855, 0, 0,
+ 1855, 0, 1855, 1856, 0, 0, 0, 0, 0, 1856,
+
+ 1857, 1857, 0, 0, 0, 1857, 1857, 1858, 0, 0,
+ 0, 0, 0, 1858, 1859, 1859, 0, 1859, 1859, 1859,
+ 1859, 1860, 1860, 0, 1860, 1860, 1860, 1860, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+ 1846, 1846, 1846, 1846
+
} ;
static yy_state_type yy_last_accepting_state;
@@ -2396,7 +2451,7 @@ static void config_end_include(void)
#define YY_NO_INPUT 1
#endif
-#line 2398 "<stdout>"
+#line 2453 "<stdout>"
#define INITIAL 0
#define quotedstring 1
@@ -2434,11 +2489,11 @@ void yyset_extra (YY_EXTRA_TYPE user_defined );
FILE *yyget_in (void );
-void yyset_in (FILE * in_str );
+void yyset_in (FILE * _in_str );
FILE *yyget_out (void );
-void yyset_out (FILE * out_str );
+void yyset_out (FILE * _out_str );
yy_size_t yyget_leng (void );
@@ -2446,7 +2501,7 @@ char *yyget_text (void );
int yyget_lineno (void );
-void yyset_lineno (int line_number );
+void yyset_lineno (int _line_number );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -2460,6 +2515,10 @@ extern int yywrap (void );
#endif
#endif
+#ifndef YY_NO_UNPUT
+
+#endif
+
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int );
#endif
@@ -2480,7 +2539,12 @@ static int input (void );
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
#endif
/* Copy whatever the last rule matched to the standard output. */
@@ -2567,7 +2631,7 @@ extern int yylex (void);
/* Code executed at the end of each rule. */
#ifndef YY_BREAK
-#define YY_BREAK break;
+#define YY_BREAK /*LINTED*/break;
#endif
#define YY_RULE_SETUP \
@@ -2577,9 +2641,9 @@ extern int yylex (void);
*/
YY_DECL
{
- register yy_state_type yy_current_state;
- register char *yy_cp, *yy_bp;
- register int yy_act;
+ yy_state_type yy_current_state;
+ char *yy_cp, *yy_bp;
+ int yy_act;
if ( !(yy_init) )
{
@@ -2610,9 +2674,9 @@ YY_DECL
{
#line 201 "util/configlexer.lex"
-#line 2612 "<stdout>"
+#line 2676 "<stdout>"
- while ( 1 ) /* loops until end-of-file is reached */
+ while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
(yy_more_len) = 0;
if ( (yy_more_flag) )
@@ -2634,7 +2698,7 @@ YY_DECL
yy_match:
do
{
- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+ YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
if ( yy_accept[yy_current_state] )
{
(yy_last_accepting_state) = yy_current_state;
@@ -2643,13 +2707,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 >= 1800 )
+ if ( yy_current_state >= 1847 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 5211 );
+ while ( yy_base[yy_current_state] != 5329 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -2839,675 +2903,695 @@ YY_RULE_SETUP
case 33:
YY_RULE_SETUP
#line 237 "util/configlexer.lex"
-{ YDVAR(1, VAR_CHROOT) }
+{ YDVAR(1, VAR_IP_FREEBIND) }
YY_BREAK
case 34:
YY_RULE_SETUP
#line 238 "util/configlexer.lex"
-{ YDVAR(1, VAR_USERNAME) }
+{ YDVAR(1, VAR_CHROOT) }
YY_BREAK
case 35:
YY_RULE_SETUP
#line 239 "util/configlexer.lex"
-{ YDVAR(1, VAR_DIRECTORY) }
+{ YDVAR(1, VAR_USERNAME) }
YY_BREAK
case 36:
YY_RULE_SETUP
#line 240 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOGFILE) }
+{ YDVAR(1, VAR_DIRECTORY) }
YY_BREAK
case 37:
YY_RULE_SETUP
#line 241 "util/configlexer.lex"
-{ YDVAR(1, VAR_PIDFILE) }
+{ YDVAR(1, VAR_LOGFILE) }
YY_BREAK
case 38:
YY_RULE_SETUP
#line 242 "util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_HINTS) }
+{ YDVAR(1, VAR_PIDFILE) }
YY_BREAK
case 39:
YY_RULE_SETUP
#line 243 "util/configlexer.lex"
-{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
+{ YDVAR(1, VAR_ROOT_HINTS) }
YY_BREAK
case 40:
YY_RULE_SETUP
#line 244 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
+{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
YY_BREAK
case 41:
YY_RULE_SETUP
#line 245 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
+{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
YY_BREAK
case 42:
YY_RULE_SETUP
#line 246 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
+{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
YY_BREAK
case 43:
YY_RULE_SETUP
#line 247 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
+{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
YY_BREAK
case 44:
YY_RULE_SETUP
#line 248 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
+{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
YY_BREAK
case 45:
YY_RULE_SETUP
#line 249 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_TTL) }
+{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
YY_BREAK
case 46:
YY_RULE_SETUP
#line 250 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_TTL) }
YY_BREAK
case 47:
YY_RULE_SETUP
#line 251 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MIN_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
YY_BREAK
case 48:
YY_RULE_SETUP
#line 252 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_HOST_TTL) }
+{ YDVAR(1, VAR_CACHE_MIN_TTL) }
YY_BREAK
case 49:
YY_RULE_SETUP
#line 253 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_LAME_TTL) }
+{ YDVAR(1, VAR_INFRA_HOST_TTL) }
YY_BREAK
case 50:
YY_RULE_SETUP
#line 254 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
+{ YDVAR(1, VAR_INFRA_LAME_TTL) }
YY_BREAK
case 51:
YY_RULE_SETUP
#line 255 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
+{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
YY_BREAK
case 52:
YY_RULE_SETUP
#line 256 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
+{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
YY_BREAK
case 53:
YY_RULE_SETUP
#line 257 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
+{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
YY_BREAK
case 54:
YY_RULE_SETUP
#line 258 "util/configlexer.lex"
-{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
+{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
YY_BREAK
case 55:
YY_RULE_SETUP
#line 259 "util/configlexer.lex"
-{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
YY_BREAK
case 56:
YY_RULE_SETUP
#line 260 "util/configlexer.lex"
-{ YDVAR(1, VAR_DELAY_CLOSE) }
+{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
YY_BREAK
case 57:
YY_RULE_SETUP
#line 261 "util/configlexer.lex"
-{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
+{ YDVAR(1, VAR_DELAY_CLOSE) }
YY_BREAK
case 58:
YY_RULE_SETUP
#line 262 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
+{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
YY_BREAK
case 59:
YY_RULE_SETUP
#line 263 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
+{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
YY_BREAK
case 60:
YY_RULE_SETUP
#line 264 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_GLUE) }
+{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
YY_BREAK
case 61:
YY_RULE_SETUP
#line 265 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
+{ YDVAR(1, VAR_HARDEN_GLUE) }
YY_BREAK
case 62:
YY_RULE_SETUP
#line 266 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
+{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
YY_BREAK
case 63:
YY_RULE_SETUP
#line 267 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
YY_BREAK
case 64:
YY_RULE_SETUP
#line 268 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
+{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
YY_BREAK
case 65:
YY_RULE_SETUP
#line 269 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
YY_BREAK
case 66:
YY_RULE_SETUP
#line 270 "util/configlexer.lex"
-{ YDVAR(1, VAR_CAPS_WHITELIST) }
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
YY_BREAK
case 67:
YY_RULE_SETUP
#line 271 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+{ YDVAR(1, VAR_CAPS_WHITELIST) }
YY_BREAK
case 68:
YY_RULE_SETUP
#line 272 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
YY_BREAK
case 69:
YY_RULE_SETUP
#line 273 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
YY_BREAK
case 70:
YY_RULE_SETUP
#line 274 "util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH_KEY) }
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
YY_BREAK
case 71:
YY_RULE_SETUP
#line 275 "util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH) }
+{ YDVAR(1, VAR_PREFETCH_KEY) }
YY_BREAK
case 72:
YY_RULE_SETUP
#line 276 "util/configlexer.lex"
-{ YDVAR(0, VAR_STUB_ZONE) }
+{ YDVAR(1, VAR_PREFETCH) }
YY_BREAK
case 73:
YY_RULE_SETUP
#line 277 "util/configlexer.lex"
-{ YDVAR(1, VAR_NAME) }
+{ YDVAR(0, VAR_STUB_ZONE) }
YY_BREAK
case 74:
YY_RULE_SETUP
#line 278 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_ADDR) }
+{ YDVAR(1, VAR_NAME) }
YY_BREAK
case 75:
YY_RULE_SETUP
#line 279 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_HOST) }
+{ YDVAR(1, VAR_STUB_ADDR) }
YY_BREAK
case 76:
YY_RULE_SETUP
#line 280 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_PRIME) }
+{ YDVAR(1, VAR_STUB_HOST) }
YY_BREAK
case 77:
YY_RULE_SETUP
#line 281 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_FIRST) }
+{ YDVAR(1, VAR_STUB_PRIME) }
YY_BREAK
case 78:
YY_RULE_SETUP
#line 282 "util/configlexer.lex"
-{ YDVAR(0, VAR_FORWARD_ZONE) }
+{ YDVAR(1, VAR_STUB_FIRST) }
YY_BREAK
case 79:
YY_RULE_SETUP
#line 283 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_ADDR) }
+{ YDVAR(0, VAR_FORWARD_ZONE) }
YY_BREAK
case 80:
YY_RULE_SETUP
#line 284 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_HOST) }
+{ YDVAR(1, VAR_FORWARD_ADDR) }
YY_BREAK
case 81:
YY_RULE_SETUP
#line 285 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_FIRST) }
+{ YDVAR(1, VAR_FORWARD_HOST) }
YY_BREAK
case 82:
YY_RULE_SETUP
#line 286 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+{ YDVAR(1, VAR_FORWARD_FIRST) }
YY_BREAK
case 83:
YY_RULE_SETUP
#line 287 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
YY_BREAK
case 84:
YY_RULE_SETUP
#line 288 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
YY_BREAK
case 85:
YY_RULE_SETUP
#line 289 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
YY_BREAK
case 86:
YY_RULE_SETUP
#line 290 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
YY_BREAK
case 87:
YY_RULE_SETUP
#line 291 "util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+{ YDVAR(1, VAR_HIDE_VERSION) }
YY_BREAK
case 88:
YY_RULE_SETUP
#line 292 "util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+{ YDVAR(1, VAR_IDENTITY) }
YY_BREAK
case 89:
YY_RULE_SETUP
#line 293 "util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+{ YDVAR(1, VAR_VERSION) }
YY_BREAK
case 90:
YY_RULE_SETUP
#line 294 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+{ YDVAR(1, VAR_MODULE_CONF) }
YY_BREAK
case 91:
YY_RULE_SETUP
#line 295 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR) }
YY_BREAK
case 92:
YY_RULE_SETUP
#line 296 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
YY_BREAK
case 93:
YY_RULE_SETUP
#line 297 "util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
YY_BREAK
case 94:
YY_RULE_SETUP
#line 298 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
YY_BREAK
case 95:
YY_RULE_SETUP
#line 299 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
YY_BREAK
case 96:
YY_RULE_SETUP
#line 300 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
YY_BREAK
case 97:
YY_RULE_SETUP
#line 301 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
YY_BREAK
case 98:
YY_RULE_SETUP
#line 302 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
YY_BREAK
case 99:
YY_RULE_SETUP
#line 303 "util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
YY_BREAK
case 100:
YY_RULE_SETUP
#line 304 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
YY_BREAK
case 101:
YY_RULE_SETUP
#line 305 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
YY_BREAK
case 102:
YY_RULE_SETUP
#line 306 "util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
YY_BREAK
case 103:
YY_RULE_SETUP
#line 307 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
YY_BREAK
case 104:
YY_RULE_SETUP
#line 308 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
YY_BREAK
case 105:
YY_RULE_SETUP
#line 309 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
YY_BREAK
case 106:
YY_RULE_SETUP
#line 310 "util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
YY_BREAK
case 107:
YY_RULE_SETUP
#line 311 "util/configlexer.lex"
-{
- YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 313 "util/configlexer.lex"
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+#line 312 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
YY_BREAK
case 109:
YY_RULE_SETUP
#line 314 "util/configlexer.lex"
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
YY_BREAK
case 110:
YY_RULE_SETUP
#line 315 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEEP_MISSING) }
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
YY_BREAK
case 111:
YY_RULE_SETUP
#line 316 "util/configlexer.lex"
-{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
+{ YDVAR(1, VAR_KEEP_MISSING) }
YY_BREAK
case 112:
YY_RULE_SETUP
#line 317 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
YY_BREAK
case 113:
YY_RULE_SETUP
#line 318 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
YY_BREAK
case 114:
YY_RULE_SETUP
#line 319 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_QUERIES) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
YY_BREAK
case 115:
YY_RULE_SETUP
#line 320 "util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_LOG_QUERIES) }
YY_BREAK
case 116:
YY_RULE_SETUP
#line 321 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
YY_BREAK
case 117:
YY_RULE_SETUP
#line 322 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
YY_BREAK
case 118:
YY_RULE_SETUP
#line 323 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
YY_BREAK
case 119:
YY_RULE_SETUP
#line 324 "util/configlexer.lex"
-{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
+{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
YY_BREAK
case 120:
YY_RULE_SETUP
#line 325 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
YY_BREAK
case 121:
YY_RULE_SETUP
#line 326 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
YY_BREAK
case 122:
YY_RULE_SETUP
#line 327 "util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
YY_BREAK
case 123:
YY_RULE_SETUP
#line 328 "util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
YY_BREAK
case 124:
YY_RULE_SETUP
#line 329 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
YY_BREAK
case 125:
YY_RULE_SETUP
#line 330 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
YY_BREAK
case 126:
YY_RULE_SETUP
#line 331 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
YY_BREAK
case 127:
YY_RULE_SETUP
#line 332 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
YY_BREAK
case 128:
YY_RULE_SETUP
#line 333 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
YY_BREAK
case 129:
YY_RULE_SETUP
#line 334 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
YY_BREAK
case 130:
YY_RULE_SETUP
#line 335 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
YY_BREAK
case 131:
YY_RULE_SETUP
#line 336 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
YY_BREAK
case 132:
YY_RULE_SETUP
#line 337 "util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
YY_BREAK
case 133:
YY_RULE_SETUP
#line 338 "util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
YY_BREAK
case 134:
YY_RULE_SETUP
#line 339 "util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(0, VAR_PYTHON) }
YY_BREAK
case 135:
YY_RULE_SETUP
#line 340 "util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
YY_BREAK
case 136:
YY_RULE_SETUP
#line 341 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
YY_BREAK
case 137:
YY_RULE_SETUP
#line 342 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
YY_BREAK
case 138:
YY_RULE_SETUP
#line 343 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_PREFIX) }
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
YY_BREAK
case 139:
YY_RULE_SETUP
#line 344 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+{ YDVAR(1, VAR_DNS64_PREFIX) }
YY_BREAK
case 140:
YY_RULE_SETUP
#line 345 "util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
YY_BREAK
case 141:
YY_RULE_SETUP
#line 346 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(1, VAR_DEFINE_TAG) }
YY_BREAK
case 142:
YY_RULE_SETUP
#line 347 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
YY_BREAK
case 143:
YY_RULE_SETUP
#line 348 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+{ YDVAR(0, VAR_DNSTAP) }
YY_BREAK
case 144:
YY_RULE_SETUP
#line 349 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
YY_BREAK
case 145:
YY_RULE_SETUP
#line 350 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
YY_BREAK
case 146:
YY_RULE_SETUP
#line 351 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
YY_BREAK
case 147:
YY_RULE_SETUP
#line 352 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 354 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+#line 353 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
YY_BREAK
case 149:
YY_RULE_SETUP
-#line 356 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+#line 354 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
YY_BREAK
case 150:
YY_RULE_SETUP
-#line 358 "util/configlexer.lex"
+#line 355 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
YY_BREAK
case 151:
YY_RULE_SETUP
-#line 360 "util/configlexer.lex"
+#line 357 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
YY_BREAK
case 152:
YY_RULE_SETUP
-#line 362 "util/configlexer.lex"
+#line 359 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
YY_BREAK
case 153:
YY_RULE_SETUP
-#line 364 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+#line 361 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
YY_BREAK
case 154:
YY_RULE_SETUP
-#line 365 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+#line 363 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
YY_BREAK
case 155:
YY_RULE_SETUP
-#line 366 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+#line 365 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
YY_BREAK
case 156:
YY_RULE_SETUP
#line 367 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
YY_BREAK
case 157:
YY_RULE_SETUP
#line 368 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT) }
YY_BREAK
case 158:
YY_RULE_SETUP
#line 369 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
YY_BREAK
case 159:
-/* rule 159 can match eol */
YY_RULE_SETUP
#line 370 "util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++; }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
YY_BREAK
-/* Quoted strings. Strip leading and ending quotes */
case 160:
YY_RULE_SETUP
+#line 371 "util/configlexer.lex"
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 372 "util/configlexer.lex"
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
#line 373 "util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+ YY_BREAK
+case 163:
+/* rule 163 can match eol */
+YY_RULE_SETUP
+#line 374 "util/configlexer.lex"
+{ LEXOUT(("NL\n")); cfg_parser->line++; }
+ YY_BREAK
+/* Quoted strings. Strip leading and ending quotes */
+case 164:
+YY_RULE_SETUP
+#line 377 "util/configlexer.lex"
{ BEGIN(quotedstring); LEXOUT(("QS ")); }
YY_BREAK
case YY_STATE_EOF(quotedstring):
-#line 374 "util/configlexer.lex"
+#line 378 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 161:
+case 165:
YY_RULE_SETUP
-#line 379 "util/configlexer.lex"
+#line 383 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 162:
-/* rule 162 can match eol */
+case 166:
+/* rule 166 can match eol */
YY_RULE_SETUP
-#line 380 "util/configlexer.lex"
+#line 384 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end \"");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 163:
+case 167:
YY_RULE_SETUP
-#line 382 "util/configlexer.lex"
+#line 386 "util/configlexer.lex"
{
LEXOUT(("QE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3520,34 +3604,34 @@ YY_RULE_SETUP
}
YY_BREAK
/* Single Quoted strings. Strip leading and ending quotes */
-case 164:
+case 168:
YY_RULE_SETUP
-#line 394 "util/configlexer.lex"
+#line 398 "util/configlexer.lex"
{ BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
YY_BREAK
case YY_STATE_EOF(singlequotedstr):
-#line 395 "util/configlexer.lex"
+#line 399 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 165:
+case 169:
YY_RULE_SETUP
-#line 400 "util/configlexer.lex"
+#line 404 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 166:
-/* rule 166 can match eol */
+case 170:
+/* rule 170 can match eol */
YY_RULE_SETUP
-#line 401 "util/configlexer.lex"
+#line 405 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end '");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 167:
+case 171:
YY_RULE_SETUP
-#line 403 "util/configlexer.lex"
+#line 407 "util/configlexer.lex"
{
LEXOUT(("SQE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3560,38 +3644,38 @@ YY_RULE_SETUP
}
YY_BREAK
/* include: directive */
-case 168:
+case 172:
YY_RULE_SETUP
-#line 415 "util/configlexer.lex"
+#line 419 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
YY_BREAK
case YY_STATE_EOF(include):
-#line 417 "util/configlexer.lex"
+#line 421 "util/configlexer.lex"
{
yyerror("EOF inside include directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 169:
+case 173:
YY_RULE_SETUP
-#line 421 "util/configlexer.lex"
+#line 425 "util/configlexer.lex"
{ LEXOUT(("ISP ")); /* ignore */ }
YY_BREAK
-case 170:
-/* rule 170 can match eol */
+case 174:
+/* rule 174 can match eol */
YY_RULE_SETUP
-#line 422 "util/configlexer.lex"
+#line 426 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++;}
YY_BREAK
-case 171:
+case 175:
YY_RULE_SETUP
-#line 423 "util/configlexer.lex"
+#line 427 "util/configlexer.lex"
{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
YY_BREAK
-case 172:
+case 176:
YY_RULE_SETUP
-#line 424 "util/configlexer.lex"
+#line 428 "util/configlexer.lex"
{
LEXOUT(("Iunquotedstr(%s) ", yytext));
config_start_include_glob(yytext);
@@ -3599,27 +3683,27 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_quoted):
-#line 429 "util/configlexer.lex"
+#line 433 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 173:
+case 177:
YY_RULE_SETUP
-#line 433 "util/configlexer.lex"
+#line 437 "util/configlexer.lex"
{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 174:
-/* rule 174 can match eol */
+case 178:
+/* rule 178 can match eol */
YY_RULE_SETUP
-#line 434 "util/configlexer.lex"
+#line 438 "util/configlexer.lex"
{ yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev); }
YY_BREAK
-case 175:
+case 179:
YY_RULE_SETUP
-#line 436 "util/configlexer.lex"
+#line 440 "util/configlexer.lex"
{
LEXOUT(("IQE "));
yytext[yyleng - 1] = '\0';
@@ -3629,7 +3713,7 @@ YY_RULE_SETUP
YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(val):
-#line 442 "util/configlexer.lex"
+#line 446 "util/configlexer.lex"
{
LEXOUT(("LEXEOF "));
yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
@@ -3641,33 +3725,33 @@ case YY_STATE_EOF(val):
}
}
YY_BREAK
-case 176:
+case 180:
YY_RULE_SETUP
-#line 453 "util/configlexer.lex"
+#line 457 "util/configlexer.lex"
{ LEXOUT(("unquotedstr(%s) ", yytext));
if(--num_args == 0) { BEGIN(INITIAL); }
yylval.str = strdup(yytext); return STRING_ARG; }
YY_BREAK
-case 177:
+case 181:
YY_RULE_SETUP
-#line 457 "util/configlexer.lex"
+#line 461 "util/configlexer.lex"
{
ub_c_error_msg("unknown keyword '%s'", yytext);
}
YY_BREAK
-case 178:
+case 182:
YY_RULE_SETUP
-#line 461 "util/configlexer.lex"
+#line 465 "util/configlexer.lex"
{
ub_c_error_msg("stray '%s'", yytext);
}
YY_BREAK
-case 179:
+case 183:
YY_RULE_SETUP
-#line 465 "util/configlexer.lex"
+#line 469 "util/configlexer.lex"
ECHO;
YY_BREAK
-#line 3669 "<stdout>"
+#line 3753 "<stdout>"
case YY_END_OF_BUFFER:
{
@@ -3808,9 +3892,9 @@ ECHO;
*/
static int yy_get_next_buffer (void)
{
- register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
- register char *source = (yytext_ptr);
- register int number_to_move, i;
+ char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ char *source = (yytext_ptr);
+ yy_size_t number_to_move, i;
int ret_val;
if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -3839,7 +3923,7 @@ static int yy_get_next_buffer (void)
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+ number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
@@ -3942,14 +4026,14 @@ static int yy_get_next_buffer (void)
static yy_state_type yy_get_previous_state (void)
{
- register yy_state_type yy_current_state;
- register char *yy_cp;
+ yy_state_type yy_current_state;
+ char *yy_cp;
yy_current_state = (yy_start);
for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
{
- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
if ( yy_accept[yy_current_state] )
{
(yy_last_accepting_state) = yy_current_state;
@@ -3958,7 +4042,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 >= 1800 )
+ if ( yy_current_state >= 1847 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3974,10 +4058,10 @@ static int yy_get_next_buffer (void)
*/
static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
{
- register int yy_is_jam;
- register char *yy_cp = (yy_c_buf_p);
+ int yy_is_jam;
+ char *yy_cp = (yy_c_buf_p);
- register YY_CHAR yy_c = 1;
+ YY_CHAR yy_c = 1;
if ( yy_accept[yy_current_state] )
{
(yy_last_accepting_state) = yy_current_state;
@@ -3986,15 +4070,19 @@ 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 >= 1800 )
+ if ( yy_current_state >= 1847 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 1799);
+ yy_is_jam = (yy_current_state == 1846);
return yy_is_jam ? 0 : yy_current_state;
}
+#ifndef YY_NO_UNPUT
+
+#endif
+
#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput (void)
@@ -4144,7 +4232,7 @@ static void yy_load_buffer_state (void)
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
- b->yy_buf_size = size;
+ b->yy_buf_size = (yy_size_t)size;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
@@ -4299,7 +4387,7 @@ static void yyensure_buffer_stack (void)
* scanner will even need a stack. We use 2 instead of 1 to avoid an
* immediate realloc on the next call.
*/
- num_to_alloc = 1;
+ num_to_alloc = 1; // After all that talk, this was set to 1 anyways...
(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
(num_to_alloc * sizeof(struct yy_buffer_state*)
);
@@ -4316,7 +4404,7 @@ static void yyensure_buffer_stack (void)
if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
/* Increase the buffer to prepare for a possible push. */
- int grow_size = 8 /* arbitrary grow size */;
+ yy_size_t grow_size = 8 /* arbitrary grow size */;
num_to_alloc = (yy_buffer_stack_max) + grow_size;
(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
@@ -4424,7 +4512,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len
static void yy_fatal_error (yyconst char* msg )
{
- (void) fprintf( stderr, "%s\n", msg );
+ (void) fprintf( stderr, "%s\n", msg );
exit( YY_EXIT_FAILURE );
}
@@ -4435,7 +4523,7 @@ static void yy_fatal_error (yyconst char* msg )
do \
{ \
/* Undo effects of setting up yytext. */ \
- int yyless_macro_arg = (n); \
+ yy_size_t yyless_macro_arg = (n); \
YY_LESS_LINENO(yyless_macro_arg);\
yytext[yyleng] = (yy_hold_char); \
(yy_c_buf_p) = yytext + yyless_macro_arg; \
@@ -4490,29 +4578,29 @@ char *yyget_text (void)
}
/** Set the current line number.
- * @param line_number
+ * @param _line_number line number
*
*/
-void yyset_lineno (int line_number )
+void yyset_lineno (int _line_number )
{
- yylineno = line_number;
+ yylineno = _line_number;
}
/** Set the input stream. This does not discard the current
* input buffer.
- * @param in_str A readable stream.
+ * @param _in_str A readable stream.
*
* @see yy_switch_to_buffer
*/
-void yyset_in (FILE * in_str )
+void yyset_in (FILE * _in_str )
{
- yyin = in_str ;
+ yyin = _in_str ;
}
-void yyset_out (FILE * out_str )
+void yyset_out (FILE * _out_str )
{
- yyout = out_str ;
+ yyout = _out_str ;
}
int yyget_debug (void)
@@ -4520,9 +4608,9 @@ int yyget_debug (void)
return yy_flex_debug;
}
-void yyset_debug (int bdebug )
+void yyset_debug (int _bdebug )
{
- yy_flex_debug = bdebug ;
+ yy_flex_debug = _bdebug ;
}
static int yy_init_globals (void)
@@ -4582,7 +4670,8 @@ int yylex_destroy (void)
#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
{
- register int i;
+
+ int i;
for ( i = 0; i < n; ++i )
s1[i] = s2[i];
}
@@ -4591,7 +4680,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * s )
{
- register int n;
+ int n;
for ( n = 0; s[n]; ++n )
;
@@ -4601,11 +4690,12 @@ static int yy_flex_strlen (yyconst char * s )
void *yyalloc (yy_size_t size )
{
- return (void *) malloc( size );
+ return (void *) malloc( size );
}
void *yyrealloc (void * ptr, yy_size_t size )
{
+
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
@@ -4618,12 +4708,12 @@ void *yyrealloc (void * ptr, yy_size_t size )
void yyfree (void * ptr )
{
- free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
}
#define YYTABLES_NAME "yytables"
-#line 465 "util/configlexer.lex"
+#line 469 "util/configlexer.lex"
diff --git a/util/configlexer.lex b/util/configlexer.lex
index 6fbf0a839c81..58d642c1da22 100644
--- a/util/configlexer.lex
+++ b/util/configlexer.lex
@@ -234,6 +234,7 @@ so-rcvbuf{COLON} { YDVAR(1, VAR_SO_RCVBUF) }
so-sndbuf{COLON} { YDVAR(1, VAR_SO_SNDBUF) }
so-reuseport{COLON} { YDVAR(1, VAR_SO_REUSEPORT) }
ip-transparent{COLON} { YDVAR(1, VAR_IP_TRANSPARENT) }
+ip-freebind{COLON} { YDVAR(1, VAR_IP_FREEBIND) }
chroot{COLON} { YDVAR(1, VAR_CHROOT) }
username{COLON} { YDVAR(1, VAR_USERNAME) }
directory{COLON} { YDVAR(1, VAR_DIRECTORY) }
@@ -342,6 +343,8 @@ rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) }
max-udp-size{COLON} { YDVAR(1, VAR_MAX_UDP_SIZE) }
dns64-prefix{COLON} { YDVAR(1, VAR_DNS64_PREFIX) }
dns64-synthall{COLON} { YDVAR(1, VAR_DNS64_SYNTHALL) }
+define-tag{COLON} { YDVAR(1, VAR_DEFINE_TAG) }
+local-zone-tag{COLON} { YDVAR(2, VAR_LOCAL_ZONE_TAG) }
dnstap{COLON} { YDVAR(0, VAR_DNSTAP) }
dnstap-enable{COLON} { YDVAR(1, VAR_DNSTAP_ENABLE) }
dnstap-socket-path{COLON} { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
@@ -361,6 +364,7 @@ dnstap-log-forwarder-query-messages{COLON} {
YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
dnstap-log-forwarder-response-messages{COLON} {
YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+disable-dnssec-lame-check{COLON} { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) }
ratelimit-slabs{COLON} { YDVAR(1, VAR_RATELIMIT_SLABS) }
ratelimit-size{COLON} { YDVAR(1, VAR_RATELIMIT_SIZE) }
diff --git a/util/configparser.c b/util/configparser.c
index 8f748f87acd4..01e37d45c23c 100644
--- a/util/configparser.c
+++ b/util/configparser.c
@@ -277,16 +277,20 @@ extern int yydebug;
VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 408,
VAR_HARDEN_ALGO_DOWNGRADE = 409,
VAR_IP_TRANSPARENT = 410,
- VAR_RATELIMIT = 411,
- VAR_RATELIMIT_SLABS = 412,
- VAR_RATELIMIT_SIZE = 413,
- VAR_RATELIMIT_FOR_DOMAIN = 414,
- VAR_RATELIMIT_BELOW_DOMAIN = 415,
- VAR_RATELIMIT_FACTOR = 416,
- VAR_CAPS_WHITELIST = 417,
- VAR_CACHE_MAX_NEGATIVE_TTL = 418,
- VAR_PERMIT_SMALL_HOLDDOWN = 419,
- VAR_QNAME_MINIMISATION = 420
+ VAR_DISABLE_DNSSEC_LAME_CHECK = 411,
+ VAR_RATELIMIT = 412,
+ VAR_RATELIMIT_SLABS = 413,
+ VAR_RATELIMIT_SIZE = 414,
+ VAR_RATELIMIT_FOR_DOMAIN = 415,
+ VAR_RATELIMIT_BELOW_DOMAIN = 416,
+ VAR_RATELIMIT_FACTOR = 417,
+ VAR_CAPS_WHITELIST = 418,
+ VAR_CACHE_MAX_NEGATIVE_TTL = 419,
+ VAR_PERMIT_SMALL_HOLDDOWN = 420,
+ VAR_QNAME_MINIMISATION = 421,
+ VAR_IP_FREEBIND = 422,
+ VAR_DEFINE_TAG = 423,
+ VAR_LOCAL_ZONE_TAG = 424
};
#endif
/* Tokens. */
@@ -443,16 +447,20 @@ extern int yydebug;
#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 408
#define VAR_HARDEN_ALGO_DOWNGRADE 409
#define VAR_IP_TRANSPARENT 410
-#define VAR_RATELIMIT 411
-#define VAR_RATELIMIT_SLABS 412
-#define VAR_RATELIMIT_SIZE 413
-#define VAR_RATELIMIT_FOR_DOMAIN 414
-#define VAR_RATELIMIT_BELOW_DOMAIN 415
-#define VAR_RATELIMIT_FACTOR 416
-#define VAR_CAPS_WHITELIST 417
-#define VAR_CACHE_MAX_NEGATIVE_TTL 418
-#define VAR_PERMIT_SMALL_HOLDDOWN 419
-#define VAR_QNAME_MINIMISATION 420
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 411
+#define VAR_RATELIMIT 412
+#define VAR_RATELIMIT_SLABS 413
+#define VAR_RATELIMIT_SIZE 414
+#define VAR_RATELIMIT_FOR_DOMAIN 415
+#define VAR_RATELIMIT_BELOW_DOMAIN 416
+#define VAR_RATELIMIT_FACTOR 417
+#define VAR_CAPS_WHITELIST 418
+#define VAR_CACHE_MAX_NEGATIVE_TTL 419
+#define VAR_PERMIT_SMALL_HOLDDOWN 420
+#define VAR_QNAME_MINIMISATION 421
+#define VAR_IP_FREEBIND 422
+#define VAR_DEFINE_TAG 423
+#define VAR_LOCAL_ZONE_TAG 424
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -463,7 +471,7 @@ union YYSTYPE
char* str;
-#line 467 "util/configparser.c" /* yacc.c:355 */
+#line 475 "util/configparser.c" /* yacc.c:355 */
};
typedef union YYSTYPE YYSTYPE;
@@ -480,7 +488,7 @@ int yyparse (void);
/* Copy the second part of user declarations. */
-#line 484 "util/configparser.c" /* yacc.c:358 */
+#line 492 "util/configparser.c" /* yacc.c:358 */
#ifdef short
# undef short
@@ -722,21 +730,21 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 310
+#define YYLAST 319
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 166
+#define YYNTOKENS 170
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 171
+#define YYNNTS 175
/* YYNRULES -- Number of rules. */
-#define YYNRULES 327
+#define YYNRULES 335
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 482
+#define YYNSTATES 495
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 420
+#define YYMAXUTOK 424
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -787,46 +795,47 @@ static const yytype_uint8 yytranslate[] =
135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165
+ 165, 166, 167, 168, 169
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 130, 130, 130, 131, 131, 132, 132, 133, 133,
- 137, 142, 143, 144, 144, 144, 145, 145, 146, 146,
- 146, 147, 147, 148, 148, 148, 149, 149, 149, 150,
- 150, 151, 151, 152, 152, 153, 153, 154, 154, 155,
- 155, 156, 156, 157, 157, 158, 158, 158, 159, 159,
- 159, 160, 160, 160, 161, 161, 162, 162, 163, 163,
- 164, 164, 165, 165, 165, 166, 166, 167, 167, 168,
- 168, 168, 169, 169, 170, 170, 171, 171, 172, 172,
- 172, 173, 173, 174, 174, 175, 175, 176, 176, 177,
- 177, 178, 178, 178, 179, 179, 180, 180, 180, 181,
- 181, 181, 182, 182, 182, 183, 183, 183, 184, 184,
- 184, 185, 185, 185, 186, 186, 187, 187, 188, 188,
- 189, 189, 190, 190, 190, 191, 191, 192, 192, 193,
- 193, 194, 194, 196, 208, 209, 210, 210, 210, 210,
- 210, 212, 224, 225, 226, 226, 226, 226, 228, 237,
- 246, 257, 266, 275, 284, 297, 312, 321, 330, 339,
- 348, 357, 366, 375, 384, 393, 402, 411, 420, 429,
- 438, 445, 452, 461, 470, 484, 493, 502, 509, 516,
- 523, 531, 538, 545, 552, 559, 567, 575, 583, 590,
- 597, 606, 615, 622, 629, 637, 645, 655, 665, 678,
- 689, 697, 710, 719, 728, 737, 747, 757, 765, 778,
- 787, 795, 804, 812, 825, 834, 841, 851, 861, 871,
- 881, 891, 901, 911, 921, 928, 935, 942, 951, 960,
- 969, 976, 986, 1003, 1010, 1028, 1041, 1054, 1063, 1072,
- 1081, 1090, 1100, 1110, 1119, 1128, 1135, 1144, 1153, 1162,
- 1171, 1179, 1192, 1200, 1224, 1231, 1246, 1256, 1266, 1273,
- 1280, 1289, 1298, 1306, 1319, 1332, 1345, 1354, 1364, 1374,
- 1381, 1388, 1397, 1407, 1417, 1424, 1431, 1440, 1445, 1446,
- 1447, 1447, 1447, 1448, 1448, 1448, 1449, 1449, 1451, 1461,
- 1470, 1477, 1487, 1494, 1501, 1508, 1515, 1520, 1521, 1522,
- 1522, 1523, 1523, 1524, 1524, 1525, 1526, 1527, 1528, 1529,
- 1530, 1532, 1540, 1547, 1555, 1563, 1570, 1577, 1586, 1595,
- 1604, 1613, 1622, 1631, 1636, 1637, 1638, 1640
+ 0, 131, 131, 131, 132, 132, 133, 133, 134, 134,
+ 138, 143, 144, 145, 145, 145, 146, 146, 147, 147,
+ 147, 148, 148, 149, 149, 149, 150, 150, 150, 151,
+ 151, 152, 152, 153, 153, 154, 154, 155, 155, 156,
+ 156, 157, 157, 158, 158, 159, 159, 159, 160, 160,
+ 160, 161, 161, 161, 162, 162, 163, 163, 164, 164,
+ 165, 165, 166, 166, 166, 167, 167, 168, 168, 169,
+ 169, 169, 170, 170, 171, 171, 172, 172, 173, 173,
+ 173, 174, 174, 175, 175, 176, 176, 177, 177, 178,
+ 178, 179, 179, 179, 180, 180, 181, 181, 181, 182,
+ 182, 182, 183, 183, 183, 184, 184, 184, 185, 185,
+ 185, 186, 186, 186, 187, 187, 188, 188, 189, 189,
+ 190, 190, 191, 191, 191, 192, 192, 193, 193, 194,
+ 194, 195, 195, 196, 196, 196, 197, 199, 211, 212,
+ 213, 213, 213, 213, 213, 215, 227, 228, 229, 229,
+ 229, 229, 231, 240, 249, 260, 269, 278, 287, 300,
+ 315, 324, 333, 342, 351, 360, 369, 378, 387, 396,
+ 405, 414, 423, 432, 441, 448, 455, 464, 473, 487,
+ 496, 505, 512, 519, 526, 534, 541, 548, 555, 562,
+ 570, 578, 586, 593, 600, 609, 618, 625, 632, 640,
+ 648, 658, 668, 678, 691, 702, 710, 723, 732, 741,
+ 750, 760, 770, 778, 791, 800, 808, 817, 825, 838,
+ 847, 854, 864, 874, 884, 894, 904, 914, 924, 934,
+ 941, 948, 955, 964, 973, 982, 989, 999, 1016, 1023,
+ 1041, 1054, 1067, 1076, 1085, 1094, 1103, 1113, 1123, 1132,
+ 1141, 1148, 1157, 1166, 1175, 1184, 1192, 1205, 1213, 1237,
+ 1244, 1259, 1269, 1279, 1286, 1293, 1302, 1316, 1335, 1344,
+ 1352, 1365, 1378, 1391, 1400, 1410, 1420, 1427, 1434, 1443,
+ 1453, 1463, 1470, 1477, 1486, 1491, 1492, 1493, 1493, 1493,
+ 1494, 1494, 1494, 1495, 1495, 1497, 1507, 1516, 1523, 1533,
+ 1540, 1547, 1554, 1561, 1566, 1567, 1568, 1568, 1569, 1569,
+ 1570, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1578, 1586,
+ 1593, 1601, 1609, 1616, 1623, 1632, 1641, 1650, 1659, 1668,
+ 1677, 1682, 1683, 1684, 1686, 1692
};
#endif
@@ -888,15 +897,17 @@ static const char *const yytname[] =
"VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES",
"VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
"VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES",
- "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT", "VAR_RATELIMIT",
- "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN",
+ "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT",
+ "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS",
+ "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN",
"VAR_RATELIMIT_BELOW_DOMAIN", "VAR_RATELIMIT_FACTOR",
"VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
- "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", "$accept",
- "toplevelvars", "toplevelvar", "serverstart", "contents_server",
- "content_server", "stubstart", "contents_stub", "content_stub",
- "forwardstart", "contents_forward", "content_forward",
- "server_num_threads", "server_verbosity", "server_statistics_interval",
+ "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", "VAR_IP_FREEBIND",
+ "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", "$accept", "toplevelvars",
+ "toplevelvar", "serverstart", "contents_server", "content_server",
+ "stubstart", "contents_stub", "content_stub", "forwardstart",
+ "contents_forward", "content_forward", "server_num_threads",
+ "server_verbosity", "server_statistics_interval",
"server_statistics_cumulative", "server_extended_statistics",
"server_port", "server_interface", "server_outgoing_interface",
"server_outgoing_range", "server_outgoing_port_permit",
@@ -914,54 +925,55 @@ static const char *const yytname[] =
"server_domain_insecure", "server_hide_identity", "server_hide_version",
"server_identity", "server_version", "server_so_rcvbuf",
"server_so_sndbuf", "server_so_reuseport", "server_ip_transparent",
- "server_edns_buffer_size", "server_msg_buffer_size",
- "server_msg_cache_size", "server_msg_cache_slabs",
- "server_num_queries_per_thread", "server_jostle_timeout",
- "server_delay_close", "server_unblock_lan_zones",
- "server_insecure_lan_zones", "server_rrset_cache_size",
- "server_rrset_cache_slabs", "server_infra_host_ttl",
- "server_infra_lame_ttl", "server_infra_cache_numhosts",
- "server_infra_cache_lame_size", "server_infra_cache_slabs",
- "server_infra_cache_min_rtt", "server_target_fetch_policy",
- "server_harden_short_bufsize", "server_harden_large_queries",
- "server_harden_glue", "server_harden_dnssec_stripped",
- "server_harden_below_nxdomain", "server_harden_referral_path",
- "server_harden_algo_downgrade", "server_use_caps_for_id",
- "server_caps_whitelist", "server_private_address",
- "server_private_domain", "server_prefetch", "server_prefetch_key",
- "server_unwanted_reply_threshold", "server_do_not_query_address",
- "server_do_not_query_localhost", "server_access_control",
- "server_module_conf", "server_val_override_date",
- "server_val_sig_skew_min", "server_val_sig_skew_max",
- "server_cache_max_ttl", "server_cache_max_negative_ttl",
- "server_cache_min_ttl", "server_bogus_ttl",
- "server_val_clean_additional", "server_val_permissive_mode",
- "server_ignore_cd_flag", "server_val_log_level",
- "server_val_nsec3_keysize_iterations", "server_add_holddown",
- "server_del_holddown", "server_keep_missing",
+ "server_ip_freebind", "server_edns_buffer_size",
+ "server_msg_buffer_size", "server_msg_cache_size",
+ "server_msg_cache_slabs", "server_num_queries_per_thread",
+ "server_jostle_timeout", "server_delay_close",
+ "server_unblock_lan_zones", "server_insecure_lan_zones",
+ "server_rrset_cache_size", "server_rrset_cache_slabs",
+ "server_infra_host_ttl", "server_infra_lame_ttl",
+ "server_infra_cache_numhosts", "server_infra_cache_lame_size",
+ "server_infra_cache_slabs", "server_infra_cache_min_rtt",
+ "server_target_fetch_policy", "server_harden_short_bufsize",
+ "server_harden_large_queries", "server_harden_glue",
+ "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
+ "server_harden_referral_path", "server_harden_algo_downgrade",
+ "server_use_caps_for_id", "server_caps_whitelist",
+ "server_private_address", "server_private_domain", "server_prefetch",
+ "server_prefetch_key", "server_unwanted_reply_threshold",
+ "server_do_not_query_address", "server_do_not_query_localhost",
+ "server_access_control", "server_module_conf",
+ "server_val_override_date", "server_val_sig_skew_min",
+ "server_val_sig_skew_max", "server_cache_max_ttl",
+ "server_cache_max_negative_ttl", "server_cache_min_ttl",
+ "server_bogus_ttl", "server_val_clean_additional",
+ "server_val_permissive_mode", "server_ignore_cd_flag",
+ "server_val_log_level", "server_val_nsec3_keysize_iterations",
+ "server_add_holddown", "server_del_holddown", "server_keep_missing",
"server_permit_small_holddown", "server_key_cache_size",
"server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
"server_local_data", "server_local_data_ptr", "server_minimal_responses",
"server_rrset_roundrobin", "server_max_udp_size", "server_dns64_prefix",
- "server_dns64_synthall", "server_ratelimit", "server_ratelimit_size",
- "server_ratelimit_slabs", "server_ratelimit_for_domain",
- "server_ratelimit_below_domain", "server_ratelimit_factor",
- "server_qname_minimisation", "stub_name", "stub_host", "stub_addr",
- "stub_first", "stub_prime", "forward_name", "forward_host",
- "forward_addr", "forward_first", "rcstart", "contents_rc", "content_rc",
- "rc_control_enable", "rc_control_port", "rc_control_interface",
- "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file",
- "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt",
- "content_dt", "dt_dnstap_enable", "dt_dnstap_socket_path",
- "dt_dnstap_send_identity", "dt_dnstap_send_version",
- "dt_dnstap_identity", "dt_dnstap_version",
+ "server_dns64_synthall", "server_define_tag", "server_local_zone_tag",
+ "server_ratelimit", "server_ratelimit_size", "server_ratelimit_slabs",
+ "server_ratelimit_for_domain", "server_ratelimit_below_domain",
+ "server_ratelimit_factor", "server_qname_minimisation", "stub_name",
+ "stub_host", "stub_addr", "stub_first", "stub_prime", "forward_name",
+ "forward_host", "forward_addr", "forward_first", "rcstart",
+ "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
+ "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
+ "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
+ "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
+ "dt_dnstap_socket_path", "dt_dnstap_send_identity",
+ "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
"dt_dnstap_log_resolver_query_messages",
"dt_dnstap_log_resolver_response_messages",
"dt_dnstap_log_client_query_messages",
"dt_dnstap_log_client_response_messages",
"dt_dnstap_log_forwarder_query_messages",
"dt_dnstap_log_forwarder_response_messages", "pythonstart",
- "contents_py", "content_py", "py_script", YY_NULLPTR
+ "contents_py", "content_py", "py_script",
+ "server_disable_dnssec_lame_check", YY_NULLPTR
};
#endif
@@ -986,7 +998,7 @@ static const yytype_uint16 yytoknum[] =
385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
- 415, 416, 417, 418, 419, 420
+ 415, 416, 417, 418, 419, 420, 421, 422, 423, 424
};
# endif
@@ -1007,18 +1019,20 @@ static const yytype_int16 yypact[] =
-81, 118, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -12, 39, 47, 40,
36, -80, 18, 19, 20, 24, 25, 26, 69, 72,
- 73, 74, 75, 80, 109, 120, 129, 130, 144, 145,
- 146, 147, 149, 150, 151, 152, 153, 155, 156, 157,
- 158, 159, 161, 162, 163, 164, 165, 166, 180, 181,
- 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 215, 216, 217, 218, 219, 220, 221, 222, 223,
- 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
- 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
- 244, 245, 246, 247, 248, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, -81, -81, -81, -81, -81, -81, -81, -81,
+ 73, 74, 75, 80, 109, 120, 129, 130, 149, 150,
+ 151, 152, 153, 155, 156, 157, 158, 159, 161, 162,
+ 163, 164, 165, 166, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 199, 200, 201, 202, 203, 204, 205, 206,
+ 207, 208, 209, 210, 211, 212, 213, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 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, -81, -81, -81, -81,
+ -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
+ -81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
@@ -1029,30 +1043,29 @@ static const yytype_int16 yypact[] =
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
+ -81, 275, 276, 277, 278, 279, -81, -81, -81, -81,
+ -81, -81, 280, 281, 282, 283, -81, -81, -81, -81,
+ -81, 284, 285, 286, 287, 288, 289, 290, 291, -81,
+ -81, -81, -81, -81, -81, -81, -81, -81, 292, 293,
+ 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
- -81, -81, -81, 267, 268, 269, 270, 271, -81, -81,
- -81, -81, -81, -81, 272, 273, 274, 275, -81, -81,
- -81, -81, -81, 276, 277, 278, 279, 280, 281, 282,
- 283, -81, -81, -81, -81, -81, -81, -81, -81, -81,
- 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, -81, -81, -81, -81, -81, -81, -81, -81,
- -81, -81, -81, -81, -81, 296, -81, -81, -81, -81,
+ -81, -81, -81, 304, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
- -81, -81, -81, 297, 298, -81, -81, -81, -81, -81,
+ -81, 305, 306, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
- -81, 299, 300, -81, -81, -81, -81, -81, -81, -81,
+ 307, 308, -81, -81, -81, -81, -81, -81, -81, 309,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
- -81, -81
+ -81, -81, -81, -81, -81
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1060,8 +1073,8 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 2, 0, 1, 10, 133, 141, 277, 323, 296, 3,
- 12, 135, 143, 279, 298, 325, 4, 5, 6, 8,
+ 2, 0, 1, 10, 137, 145, 284, 330, 303, 3,
+ 12, 139, 147, 286, 305, 332, 4, 5, 6, 8,
9, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1074,41 +1087,42 @@ static const yytype_uint16 yydefact[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 11, 13, 14, 72, 75, 84, 15, 23,
- 63, 16, 76, 77, 34, 56, 71, 17, 18, 19,
- 20, 21, 22, 106, 107, 108, 109, 110, 73, 62,
- 88, 105, 24, 25, 26, 27, 28, 64, 78, 79,
- 94, 50, 60, 51, 89, 44, 45, 46, 47, 98,
- 102, 114, 122, 99, 57, 29, 30, 31, 86, 115,
- 116, 117, 32, 33, 35, 36, 38, 39, 37, 120,
- 40, 41, 42, 48, 67, 103, 81, 121, 74, 129,
- 82, 83, 100, 101, 87, 43, 65, 68, 49, 52,
- 90, 91, 66, 130, 92, 53, 54, 55, 104, 93,
- 61, 95, 96, 97, 131, 58, 59, 80, 69, 70,
- 85, 111, 112, 113, 118, 119, 123, 125, 124, 126,
- 127, 128, 132, 0, 0, 0, 0, 0, 134, 136,
- 137, 138, 140, 139, 0, 0, 0, 0, 142, 144,
- 145, 146, 147, 0, 0, 0, 0, 0, 0, 0,
- 0, 278, 280, 282, 281, 287, 283, 284, 285, 286,
+ 0, 0, 0, 0, 0, 0, 11, 13, 14, 72,
+ 75, 84, 15, 23, 63, 16, 76, 77, 34, 56,
+ 71, 17, 18, 19, 20, 21, 22, 106, 107, 108,
+ 109, 110, 73, 62, 88, 105, 24, 25, 26, 27,
+ 28, 64, 78, 79, 94, 50, 60, 51, 89, 44,
+ 45, 46, 47, 98, 102, 114, 122, 133, 99, 57,
+ 29, 30, 31, 86, 115, 116, 117, 32, 33, 35,
+ 36, 38, 39, 37, 120, 40, 41, 42, 48, 67,
+ 103, 81, 121, 74, 129, 82, 83, 100, 101, 87,
+ 43, 65, 68, 49, 52, 90, 91, 66, 130, 92,
+ 53, 54, 55, 104, 93, 61, 95, 96, 97, 131,
+ 58, 59, 80, 69, 70, 85, 111, 112, 113, 118,
+ 119, 134, 135, 123, 125, 124, 126, 127, 128, 132,
+ 136, 0, 0, 0, 0, 0, 138, 140, 141, 142,
+ 144, 143, 0, 0, 0, 0, 146, 148, 149, 150,
+ 151, 0, 0, 0, 0, 0, 0, 0, 0, 285,
+ 287, 289, 288, 294, 290, 291, 292, 293, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 297, 299, 300, 301, 302, 303, 304, 305,
- 306, 307, 308, 309, 310, 0, 324, 326, 149, 148,
- 153, 156, 154, 162, 163, 164, 165, 166, 167, 177,
- 178, 179, 180, 181, 200, 201, 202, 207, 208, 159,
- 209, 210, 213, 211, 212, 215, 216, 217, 230, 190,
- 191, 192, 193, 218, 233, 186, 188, 234, 240, 241,
- 242, 160, 199, 250, 251, 187, 245, 174, 155, 182,
- 231, 237, 219, 0, 0, 254, 161, 150, 173, 223,
- 151, 157, 158, 183, 184, 252, 221, 225, 226, 152,
- 255, 203, 229, 175, 189, 235, 236, 239, 244, 185,
- 248, 246, 247, 194, 198, 227, 228, 195, 196, 220,
- 243, 176, 168, 169, 170, 171, 172, 256, 257, 258,
- 204, 205, 206, 214, 259, 260, 222, 197, 261, 263,
- 262, 0, 0, 266, 224, 238, 249, 267, 268, 269,
- 270, 272, 271, 273, 274, 275, 276, 288, 290, 289,
- 292, 293, 294, 295, 291, 311, 312, 313, 314, 315,
- 316, 317, 318, 319, 320, 321, 322, 327, 232, 253,
- 264, 265
+ 304, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, 317, 0, 331, 333, 153, 152, 157, 160,
+ 158, 166, 167, 168, 169, 170, 171, 181, 182, 183,
+ 184, 185, 205, 206, 207, 212, 213, 163, 214, 215,
+ 218, 216, 217, 220, 221, 222, 235, 194, 195, 196,
+ 197, 223, 238, 190, 192, 239, 245, 246, 247, 164,
+ 204, 255, 256, 191, 250, 178, 159, 186, 236, 242,
+ 224, 0, 0, 259, 165, 154, 177, 228, 155, 161,
+ 162, 187, 188, 257, 226, 230, 231, 156, 260, 208,
+ 234, 179, 193, 240, 241, 244, 249, 189, 253, 251,
+ 252, 198, 203, 232, 233, 199, 200, 225, 248, 180,
+ 172, 173, 174, 175, 176, 261, 262, 263, 209, 210,
+ 211, 219, 264, 265, 227, 201, 335, 268, 270, 269,
+ 0, 0, 273, 229, 243, 254, 274, 202, 266, 0,
+ 275, 276, 277, 279, 278, 280, 281, 282, 283, 295,
+ 297, 296, 299, 300, 301, 302, 298, 318, 319, 320,
+ 321, 322, 323, 324, 325, 326, 327, 328, 329, 334,
+ 237, 258, 271, 272, 267
};
/* YYPGOTO[NTERM-NUM]. */
@@ -1131,30 +1145,30 @@ static const yytype_int8 yypgoto[] =
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
-81, -81, -81, -81, -81, -81, -81, -81, -81, -81,
- -81
+ -81, -81, -81, -81, -81
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 1, 9, 10, 16, 142, 11, 17, 268, 12,
- 18, 278, 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, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
- 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
- 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 262, 269, 270, 271, 272, 273, 279, 280, 281,
- 282, 13, 19, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, 14, 20, 312, 313, 314, 315, 316, 317,
- 318, 319, 320, 321, 322, 323, 324, 15, 21, 326,
- 327
+ -1, 1, 9, 10, 16, 146, 11, 17, 276, 12,
+ 18, 286, 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, 182, 183, 184,
+ 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
+ 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
+ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
+ 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
+ 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
+ 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
+ 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
+ 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 277, 278, 279, 280, 281,
+ 287, 288, 289, 290, 13, 19, 299, 300, 301, 302,
+ 303, 304, 305, 306, 307, 14, 20, 320, 321, 322,
+ 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
+ 15, 21, 334, 335, 270
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1164,36 +1178,36 @@ static const yytype_uint16 yytable[] =
{
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 325, 328, 329,
- 330, 49, 50, 51, 331, 332, 333, 52, 53, 54,
+ 42, 43, 44, 45, 46, 47, 48, 333, 336, 337,
+ 338, 49, 50, 51, 339, 340, 341, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 263, 334,
- 264, 265, 335, 336, 337, 338, 274, 93, 94, 95,
- 339, 96, 97, 98, 275, 276, 99, 100, 101, 102,
+ 85, 86, 87, 88, 89, 90, 91, 92, 271, 342,
+ 272, 273, 343, 344, 345, 346, 282, 93, 94, 95,
+ 347, 96, 97, 98, 283, 284, 99, 100, 101, 102,
103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 2, 340,
+ 113, 114, 115, 116, 117, 118, 119, 120, 2, 348,
121, 122, 123, 124, 125, 126, 127, 128, 129, 3,
- 341, 283, 284, 285, 286, 287, 288, 289, 290, 342,
- 343, 266, 130, 131, 132, 133, 134, 135, 136, 137,
- 138, 139, 140, 141, 344, 345, 346, 347, 4, 348,
- 349, 350, 351, 352, 5, 353, 354, 355, 356, 357,
- 267, 358, 359, 360, 361, 362, 363, 277, 300, 301,
- 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
- 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
- 374, 375, 376, 377, 378, 379, 380, 381, 6, 382,
- 383, 384, 385, 386, 387, 388, 389, 390, 391, 392,
- 393, 394, 395, 396, 7, 397, 398, 399, 400, 401,
- 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
- 412, 413, 414, 415, 416, 417, 418, 419, 420, 421,
- 422, 423, 424, 425, 426, 427, 428, 429, 430, 8,
- 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
- 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
- 451, 452, 453, 454, 455, 456, 457, 458, 459, 460,
- 461, 462, 463, 464, 465, 466, 467, 468, 469, 470,
- 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
- 481
+ 349, 291, 292, 293, 294, 295, 296, 297, 298, 350,
+ 351, 274, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 4, 352,
+ 353, 354, 355, 356, 5, 357, 358, 359, 360, 361,
+ 275, 362, 363, 364, 365, 366, 367, 285, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+ 368, 369, 370, 371, 372, 373, 374, 375, 376, 377,
+ 378, 379, 380, 381, 382, 383, 384, 385, 6, 386,
+ 387, 388, 389, 390, 391, 392, 393, 394, 395, 396,
+ 397, 398, 399, 400, 7, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 414, 415,
+ 416, 417, 418, 419, 420, 421, 422, 423, 424, 425,
+ 426, 427, 428, 429, 430, 431, 432, 433, 434, 8,
+ 435, 436, 437, 438, 439, 440, 441, 442, 443, 444,
+ 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
+ 455, 456, 457, 458, 459, 460, 461, 462, 463, 464,
+ 465, 466, 467, 468, 469, 470, 471, 472, 473, 474,
+ 475, 476, 477, 478, 479, 480, 481, 482, 483, 484,
+ 485, 486, 487, 488, 489, 490, 491, 492, 493, 494
};
static const yytype_uint8 yycheck[] =
@@ -1213,7 +1227,7 @@ static const yytype_uint8 yycheck[] =
132, 133, 134, 135, 136, 137, 138, 139, 140, 11,
10, 91, 92, 93, 94, 95, 96, 97, 98, 10,
10, 102, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 163, 164, 165, 10, 10, 10, 10, 40, 10,
+ 162, 163, 164, 165, 166, 167, 168, 169, 40, 10,
10, 10, 10, 10, 46, 10, 10, 10, 10, 10,
131, 10, 10, 10, 10, 10, 10, 130, 142, 143,
144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
@@ -1229,16 +1243,16 @@ static const yytype_uint8 yycheck[] =
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint16 yystos[] =
{
- 0, 167, 0, 11, 40, 46, 90, 106, 141, 168,
- 169, 172, 175, 307, 318, 333, 170, 173, 176, 308,
- 319, 334, 12, 13, 14, 15, 16, 17, 18, 19,
+ 0, 171, 0, 11, 40, 46, 90, 106, 141, 172,
+ 173, 176, 179, 314, 325, 340, 174, 177, 180, 315,
+ 326, 341, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 43,
44, 45, 49, 50, 51, 52, 53, 54, 55, 56,
@@ -1250,7 +1264,7 @@ static const yytype_uint16 yystos[] =
119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
129, 132, 133, 134, 135, 136, 137, 138, 139, 140,
154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
- 164, 165, 171, 178, 179, 180, 181, 182, 183, 184,
+ 164, 165, 166, 167, 168, 169, 175, 182, 183, 184,
185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
@@ -1262,13 +1276,14 @@ static const yytype_uint16 yystos[] =
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, 39, 41, 42, 102, 131, 174, 298,
- 299, 300, 301, 302, 39, 47, 48, 130, 177, 303,
- 304, 305, 306, 91, 92, 93, 94, 95, 96, 97,
- 98, 309, 310, 311, 312, 313, 314, 315, 316, 317,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 320, 321, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 332, 107, 335, 336, 10, 10,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 344, 39, 41, 42, 102, 131, 178, 305, 306, 307,
+ 308, 309, 39, 47, 48, 130, 181, 310, 311, 312,
+ 313, 91, 92, 93, 94, 95, 96, 97, 98, 316,
+ 317, 318, 319, 320, 321, 322, 323, 324, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
+ 337, 338, 339, 107, 342, 343, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
@@ -1284,28 +1299,28 @@ 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, 166, 167, 167, 168, 168, 168, 168, 168, 168,
- 169, 170, 170, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 172, 173, 173, 174, 174, 174, 174,
- 174, 175, 176, 176, 177, 177, 177, 177, 178, 179,
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 0, 170, 171, 171, 172, 172, 172, 172, 172, 172,
+ 173, 174, 174, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 176, 177, 177,
+ 178, 178, 178, 178, 178, 179, 180, 180, 181, 181,
+ 181, 181, 182, 183, 184, 185, 186, 187, 188, 189,
190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
@@ -1317,12 +1332,13 @@ static const yytype_uint16 yyr1[] =
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, 308,
- 309, 309, 309, 309, 309, 309, 309, 309, 310, 311,
- 312, 313, 314, 315, 316, 317, 318, 319, 319, 320,
- 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
- 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 332, 333, 334, 334, 335, 336
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 315, 316, 316, 316,
+ 316, 316, 316, 316, 316, 317, 318, 319, 320, 321,
+ 322, 323, 324, 325, 326, 326, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 328, 329,
+ 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
+ 340, 341, 341, 342, 343, 344
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -1341,8 +1357,9 @@ static const yytype_uint8 yyr2[] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 2, 0, 1, 1, 1, 1,
- 1, 1, 2, 0, 1, 1, 1, 1, 2, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
+ 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -1350,17 +1367,17 @@ static const yytype_uint8 yyr2[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 3, 3, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 1, 2, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
+ 2, 3, 3, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 1, 2, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 1, 2, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 1, 2, 0, 1, 2
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 2, 0, 1, 2, 2
};
@@ -2037,15 +2054,15 @@ yyreduce:
switch (yyn)
{
case 10:
-#line 138 "util/configparser.y" /* yacc.c:1646 */
+#line 139 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("\nP(server:)\n"));
}
-#line 2045 "util/configparser.c" /* yacc.c:1646 */
+#line 2062 "util/configparser.c" /* yacc.c:1646 */
break;
- case 133:
-#line 197 "util/configparser.y" /* yacc.c:1646 */
+ case 137:
+#line 200 "util/configparser.y" /* yacc.c:1646 */
{
struct config_stub* s;
OUTYY(("\nP(stub_zone:)\n"));
@@ -2056,11 +2073,11 @@ yyreduce:
} else
yyerror("out of memory");
}
-#line 2060 "util/configparser.c" /* yacc.c:1646 */
+#line 2077 "util/configparser.c" /* yacc.c:1646 */
break;
- case 141:
-#line 213 "util/configparser.y" /* yacc.c:1646 */
+ case 145:
+#line 216 "util/configparser.y" /* yacc.c:1646 */
{
struct config_stub* s;
OUTYY(("\nP(forward_zone:)\n"));
@@ -2071,11 +2088,11 @@ yyreduce:
} else
yyerror("out of memory");
}
-#line 2075 "util/configparser.c" /* yacc.c:1646 */
+#line 2092 "util/configparser.c" /* yacc.c:1646 */
break;
- case 148:
-#line 229 "util/configparser.y" /* yacc.c:1646 */
+ case 152:
+#line 232 "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)
@@ -2083,11 +2100,11 @@ yyreduce:
else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2087 "util/configparser.c" /* yacc.c:1646 */
+#line 2104 "util/configparser.c" /* yacc.c:1646 */
break;
- case 149:
-#line 238 "util/configparser.y" /* yacc.c:1646 */
+ case 153:
+#line 241 "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)
@@ -2095,11 +2112,11 @@ yyreduce:
else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2099 "util/configparser.c" /* yacc.c:1646 */
+#line 2116 "util/configparser.c" /* yacc.c:1646 */
break;
- case 150:
-#line 247 "util/configparser.y" /* yacc.c:1646 */
+ case 154:
+#line 250 "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)
@@ -2109,11 +2126,11 @@ yyreduce:
else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2113 "util/configparser.c" /* yacc.c:1646 */
+#line 2130 "util/configparser.c" /* yacc.c:1646 */
break;
- case 151:
-#line 258 "util/configparser.y" /* yacc.c:1646 */
+ case 155:
+#line 261 "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)
@@ -2121,11 +2138,11 @@ yyreduce:
else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2125 "util/configparser.c" /* yacc.c:1646 */
+#line 2142 "util/configparser.c" /* yacc.c:1646 */
break;
- case 152:
-#line 267 "util/configparser.y" /* yacc.c:1646 */
+ case 156:
+#line 270 "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)
@@ -2133,11 +2150,11 @@ yyreduce:
else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2137 "util/configparser.c" /* yacc.c:1646 */
+#line 2154 "util/configparser.c" /* yacc.c:1646 */
break;
- case 153:
-#line 276 "util/configparser.y" /* yacc.c:1646 */
+ case 157:
+#line 279 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2145,11 +2162,11 @@ yyreduce:
else cfg_parser->cfg->port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2149 "util/configparser.c" /* yacc.c:1646 */
+#line 2166 "util/configparser.c" /* yacc.c:1646 */
break;
- case 154:
-#line 285 "util/configparser.y" /* yacc.c:1646 */
+ case 158:
+#line 288 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_ifs == 0)
@@ -2161,11 +2178,11 @@ yyreduce:
else
cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
}
-#line 2165 "util/configparser.c" /* yacc.c:1646 */
+#line 2182 "util/configparser.c" /* yacc.c:1646 */
break;
- case 155:
-#line 298 "util/configparser.y" /* yacc.c:1646 */
+ case 159:
+#line 301 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2179,11 +2196,11 @@ yyreduce:
cfg_parser->cfg->out_ifs[
cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
}
-#line 2183 "util/configparser.c" /* yacc.c:1646 */
+#line 2200 "util/configparser.c" /* yacc.c:1646 */
break;
- case 156:
-#line 313 "util/configparser.y" /* yacc.c:1646 */
+ case 160:
+#line 316 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2191,11 +2208,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2195 "util/configparser.c" /* yacc.c:1646 */
+#line 2212 "util/configparser.c" /* yacc.c:1646 */
break;
- case 157:
-#line 322 "util/configparser.y" /* yacc.c:1646 */
+ case 161:
+#line 325 "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,
@@ -2203,11 +2220,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 2207 "util/configparser.c" /* yacc.c:1646 */
+#line 2224 "util/configparser.c" /* yacc.c:1646 */
break;
- case 158:
-#line 331 "util/configparser.y" /* yacc.c:1646 */
+ case 162:
+#line 334 "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,
@@ -2215,11 +2232,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 2219 "util/configparser.c" /* yacc.c:1646 */
+#line 2236 "util/configparser.c" /* yacc.c:1646 */
break;
- case 159:
-#line 340 "util/configparser.y" /* yacc.c:1646 */
+ case 163:
+#line 343 "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)
@@ -2227,11 +2244,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2231 "util/configparser.c" /* yacc.c:1646 */
+#line 2248 "util/configparser.c" /* yacc.c:1646 */
break;
- case 160:
-#line 349 "util/configparser.y" /* yacc.c:1646 */
+ case 164:
+#line 352 "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)
@@ -2239,11 +2256,11 @@ yyreduce:
else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2243 "util/configparser.c" /* yacc.c:1646 */
+#line 2260 "util/configparser.c" /* yacc.c:1646 */
break;
- case 161:
-#line 358 "util/configparser.y" /* yacc.c:1646 */
+ case 165:
+#line 361 "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)
@@ -2251,11 +2268,11 @@ yyreduce:
else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2255 "util/configparser.c" /* yacc.c:1646 */
+#line 2272 "util/configparser.c" /* yacc.c:1646 */
break;
- case 162:
-#line 367 "util/configparser.y" /* yacc.c:1646 */
+ case 166:
+#line 370 "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)
@@ -2263,11 +2280,11 @@ yyreduce:
else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2267 "util/configparser.c" /* yacc.c:1646 */
+#line 2284 "util/configparser.c" /* yacc.c:1646 */
break;
- case 163:
-#line 376 "util/configparser.y" /* yacc.c:1646 */
+ case 167:
+#line 379 "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)
@@ -2275,11 +2292,11 @@ yyreduce:
else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2279 "util/configparser.c" /* yacc.c:1646 */
+#line 2296 "util/configparser.c" /* yacc.c:1646 */
break;
- case 164:
-#line 385 "util/configparser.y" /* yacc.c:1646 */
+ case 168:
+#line 388 "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)
@@ -2287,11 +2304,11 @@ yyreduce:
else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2291 "util/configparser.c" /* yacc.c:1646 */
+#line 2308 "util/configparser.c" /* yacc.c:1646 */
break;
- case 165:
-#line 394 "util/configparser.y" /* yacc.c:1646 */
+ case 169:
+#line 397 "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)
@@ -2299,11 +2316,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2303 "util/configparser.c" /* yacc.c:1646 */
+#line 2320 "util/configparser.c" /* yacc.c:1646 */
break;
- case 166:
-#line 403 "util/configparser.y" /* yacc.c:1646 */
+ case 170:
+#line 406 "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)
@@ -2311,11 +2328,11 @@ yyreduce:
else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2315 "util/configparser.c" /* yacc.c:1646 */
+#line 2332 "util/configparser.c" /* yacc.c:1646 */
break;
- case 167:
-#line 412 "util/configparser.y" /* yacc.c:1646 */
+ case 171:
+#line 415 "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)
@@ -2323,11 +2340,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2327 "util/configparser.c" /* yacc.c:1646 */
+#line 2344 "util/configparser.c" /* yacc.c:1646 */
break;
- case 168:
-#line 421 "util/configparser.y" /* yacc.c:1646 */
+ case 172:
+#line 424 "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)
@@ -2335,11 +2352,11 @@ yyreduce:
else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2339 "util/configparser.c" /* yacc.c:1646 */
+#line 2356 "util/configparser.c" /* yacc.c:1646 */
break;
- case 169:
-#line 430 "util/configparser.y" /* yacc.c:1646 */
+ case 173:
+#line 433 "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)
@@ -2347,31 +2364,31 @@ yyreduce:
else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2351 "util/configparser.c" /* yacc.c:1646 */
+#line 2368 "util/configparser.c" /* yacc.c:1646 */
break;
- case 170:
-#line 439 "util/configparser.y" /* yacc.c:1646 */
+ case 174:
+#line 442 "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 2361 "util/configparser.c" /* yacc.c:1646 */
+#line 2378 "util/configparser.c" /* yacc.c:1646 */
break;
- case 171:
-#line 446 "util/configparser.y" /* yacc.c:1646 */
+ case 175:
+#line 449 "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 2371 "util/configparser.c" /* yacc.c:1646 */
+#line 2388 "util/configparser.c" /* yacc.c:1646 */
break;
- case 172:
-#line 453 "util/configparser.y" /* yacc.c:1646 */
+ case 176:
+#line 456 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2379,11 +2396,11 @@ yyreduce:
else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2383 "util/configparser.c" /* yacc.c:1646 */
+#line 2400 "util/configparser.c" /* yacc.c:1646 */
break;
- case 173:
-#line 462 "util/configparser.y" /* yacc.c:1646 */
+ case 177:
+#line 465 "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)
@@ -2391,11 +2408,11 @@ yyreduce:
else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2395 "util/configparser.c" /* yacc.c:1646 */
+#line 2412 "util/configparser.c" /* yacc.c:1646 */
break;
- case 174:
-#line 471 "util/configparser.y" /* yacc.c:1646 */
+ case 178:
+#line 474 "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)
@@ -2408,11 +2425,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 2412 "util/configparser.c" /* yacc.c:1646 */
+#line 2429 "util/configparser.c" /* yacc.c:1646 */
break;
- case 175:
-#line 485 "util/configparser.y" /* yacc.c:1646 */
+ case 179:
+#line 488 "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)
@@ -2420,11 +2437,11 @@ yyreduce:
else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2424 "util/configparser.c" /* yacc.c:1646 */
+#line 2441 "util/configparser.c" /* yacc.c:1646 */
break;
- case 176:
-#line 494 "util/configparser.y" /* yacc.c:1646 */
+ case 180:
+#line 497 "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)
@@ -2432,145 +2449,145 @@ yyreduce:
else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2436 "util/configparser.c" /* yacc.c:1646 */
+#line 2453 "util/configparser.c" /* yacc.c:1646 */
break;
- case 177:
-#line 503 "util/configparser.y" /* yacc.c:1646 */
+ case 181:
+#line 506 "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 2446 "util/configparser.c" /* yacc.c:1646 */
+#line 2463 "util/configparser.c" /* yacc.c:1646 */
break;
- case 178:
-#line 510 "util/configparser.y" /* yacc.c:1646 */
+ case 182:
+#line 513 "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 2456 "util/configparser.c" /* yacc.c:1646 */
+#line 2473 "util/configparser.c" /* yacc.c:1646 */
break;
- case 179:
-#line 517 "util/configparser.y" /* yacc.c:1646 */
+ case 183:
+#line 520 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->directory);
cfg_parser->cfg->directory = (yyvsp[0].str);
}
-#line 2466 "util/configparser.c" /* yacc.c:1646 */
+#line 2483 "util/configparser.c" /* yacc.c:1646 */
break;
- case 180:
-#line 524 "util/configparser.y" /* yacc.c:1646 */
+ case 184:
+#line 527 "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 2477 "util/configparser.c" /* yacc.c:1646 */
+#line 2494 "util/configparser.c" /* yacc.c:1646 */
break;
- case 181:
-#line 532 "util/configparser.y" /* yacc.c:1646 */
+ case 185:
+#line 535 "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 2487 "util/configparser.c" /* yacc.c:1646 */
+#line 2504 "util/configparser.c" /* yacc.c:1646 */
break;
- case 182:
-#line 539 "util/configparser.y" /* yacc.c:1646 */
+ case 186:
+#line 542 "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 2497 "util/configparser.c" /* yacc.c:1646 */
+#line 2514 "util/configparser.c" /* yacc.c:1646 */
break;
- case 183:
-#line 546 "util/configparser.y" /* yacc.c:1646 */
+ case 187:
+#line 549 "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 2507 "util/configparser.c" /* yacc.c:1646 */
+#line 2524 "util/configparser.c" /* yacc.c:1646 */
break;
- case 184:
-#line 553 "util/configparser.y" /* yacc.c:1646 */
+ case 188:
+#line 556 "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 2517 "util/configparser.c" /* yacc.c:1646 */
+#line 2534 "util/configparser.c" /* yacc.c:1646 */
break;
- case 185:
-#line 560 "util/configparser.y" /* yacc.c:1646 */
+ case 189:
+#line 563 "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 2528 "util/configparser.c" /* yacc.c:1646 */
+#line 2545 "util/configparser.c" /* yacc.c:1646 */
break;
- case 186:
-#line 568 "util/configparser.y" /* yacc.c:1646 */
+ case 190:
+#line 571 "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 2539 "util/configparser.c" /* yacc.c:1646 */
+#line 2556 "util/configparser.c" /* yacc.c:1646 */
break;
- case 187:
-#line 576 "util/configparser.y" /* yacc.c:1646 */
+ case 191:
+#line 579 "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 2550 "util/configparser.c" /* yacc.c:1646 */
+#line 2567 "util/configparser.c" /* yacc.c:1646 */
break;
- case 188:
-#line 584 "util/configparser.y" /* yacc.c:1646 */
+ case 192:
+#line 587 "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 2560 "util/configparser.c" /* yacc.c:1646 */
+#line 2577 "util/configparser.c" /* yacc.c:1646 */
break;
- case 189:
-#line 591 "util/configparser.y" /* yacc.c:1646 */
+ case 193:
+#line 594 "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 2570 "util/configparser.c" /* yacc.c:1646 */
+#line 2587 "util/configparser.c" /* yacc.c:1646 */
break;
- case 190:
-#line 598 "util/configparser.y" /* yacc.c:1646 */
+ case 194:
+#line 601 "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)
@@ -2578,11 +2595,11 @@ yyreduce:
else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2582 "util/configparser.c" /* yacc.c:1646 */
+#line 2599 "util/configparser.c" /* yacc.c:1646 */
break;
- case 191:
-#line 607 "util/configparser.y" /* yacc.c:1646 */
+ case 195:
+#line 610 "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)
@@ -2590,53 +2607,53 @@ yyreduce:
else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2594 "util/configparser.c" /* yacc.c:1646 */
+#line 2611 "util/configparser.c" /* yacc.c:1646 */
break;
- case 192:
-#line 616 "util/configparser.y" /* yacc.c:1646 */
+ case 196:
+#line 619 "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 2604 "util/configparser.c" /* yacc.c:1646 */
+#line 2621 "util/configparser.c" /* yacc.c:1646 */
break;
- case 193:
-#line 623 "util/configparser.y" /* yacc.c:1646 */
+ case 197:
+#line 626 "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 2614 "util/configparser.c" /* yacc.c:1646 */
+#line 2631 "util/configparser.c" /* yacc.c:1646 */
break;
- case 194:
-#line 630 "util/configparser.y" /* yacc.c:1646 */
+ case 198:
+#line 633 "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 2625 "util/configparser.c" /* yacc.c:1646 */
+#line 2642 "util/configparser.c" /* yacc.c:1646 */
break;
- case 195:
-#line 638 "util/configparser.y" /* yacc.c:1646 */
+ case 199:
+#line 641 "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 2636 "util/configparser.c" /* yacc.c:1646 */
+#line 2653 "util/configparser.c" /* yacc.c:1646 */
break;
- case 196:
-#line 646 "util/configparser.y" /* yacc.c:1646 */
+ case 200:
+#line 649 "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)
@@ -2645,11 +2662,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2649 "util/configparser.c" /* yacc.c:1646 */
+#line 2666 "util/configparser.c" /* yacc.c:1646 */
break;
- case 197:
-#line 656 "util/configparser.y" /* yacc.c:1646 */
+ case 201:
+#line 659 "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)
@@ -2658,11 +2675,24 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2662 "util/configparser.c" /* yacc.c:1646 */
+#line 2679 "util/configparser.c" /* yacc.c:1646 */
break;
- case 198:
-#line 666 "util/configparser.y" /* yacc.c:1646 */
+ case 202:
+#line 669 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ip_freebind =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 2692 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 203:
+#line 679 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2674,11 +2704,11 @@ yyreduce:
else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2678 "util/configparser.c" /* yacc.c:1646 */
+#line 2708 "util/configparser.c" /* yacc.c:1646 */
break;
- case 199:
-#line 679 "util/configparser.y" /* yacc.c:1646 */
+ case 204:
+#line 692 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2688,22 +2718,22 @@ yyreduce:
else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2692 "util/configparser.c" /* yacc.c:1646 */
+#line 2722 "util/configparser.c" /* yacc.c:1646 */
break;
- case 200:
-#line 690 "util/configparser.y" /* yacc.c:1646 */
+ case 205:
+#line 703 "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 2703 "util/configparser.c" /* yacc.c:1646 */
+#line 2733 "util/configparser.c" /* yacc.c:1646 */
break;
- case 201:
-#line 698 "util/configparser.y" /* yacc.c:1646 */
+ case 206:
+#line 711 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2715,11 +2745,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 2719 "util/configparser.c" /* yacc.c:1646 */
+#line 2749 "util/configparser.c" /* yacc.c:1646 */
break;
- case 202:
-#line 711 "util/configparser.y" /* yacc.c:1646 */
+ case 207:
+#line 724 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2727,11 +2757,11 @@ yyreduce:
else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2731 "util/configparser.c" /* yacc.c:1646 */
+#line 2761 "util/configparser.c" /* yacc.c:1646 */
break;
- case 203:
-#line 720 "util/configparser.y" /* yacc.c:1646 */
+ case 208:
+#line 733 "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)
@@ -2739,11 +2769,11 @@ yyreduce:
else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2743 "util/configparser.c" /* yacc.c:1646 */
+#line 2773 "util/configparser.c" /* yacc.c:1646 */
break;
- case 204:
-#line 729 "util/configparser.y" /* yacc.c:1646 */
+ case 209:
+#line 742 "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)
@@ -2751,11 +2781,11 @@ yyreduce:
else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2755 "util/configparser.c" /* yacc.c:1646 */
+#line 2785 "util/configparser.c" /* yacc.c:1646 */
break;
- case 205:
-#line 738 "util/configparser.y" /* yacc.c:1646 */
+ case 210:
+#line 751 "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)
@@ -2764,11 +2794,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2768 "util/configparser.c" /* yacc.c:1646 */
+#line 2798 "util/configparser.c" /* yacc.c:1646 */
break;
- case 206:
-#line 748 "util/configparser.y" /* yacc.c:1646 */
+ case 211:
+#line 761 "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)
@@ -2777,22 +2807,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2781 "util/configparser.c" /* yacc.c:1646 */
+#line 2811 "util/configparser.c" /* yacc.c:1646 */
break;
- case 207:
-#line 758 "util/configparser.y" /* yacc.c:1646 */
+ case 212:
+#line 771 "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 2792 "util/configparser.c" /* yacc.c:1646 */
+#line 2822 "util/configparser.c" /* yacc.c:1646 */
break;
- case 208:
-#line 766 "util/configparser.y" /* yacc.c:1646 */
+ case 213:
+#line 779 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2804,11 +2834,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 2808 "util/configparser.c" /* yacc.c:1646 */
+#line 2838 "util/configparser.c" /* yacc.c:1646 */
break;
- case 209:
-#line 779 "util/configparser.y" /* yacc.c:1646 */
+ case 214:
+#line 792 "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)
@@ -2816,22 +2846,22 @@ yyreduce:
else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2820 "util/configparser.c" /* yacc.c:1646 */
+#line 2850 "util/configparser.c" /* yacc.c:1646 */
break;
- case 210:
-#line 788 "util/configparser.y" /* yacc.c:1646 */
+ case 215:
+#line 801 "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 2831 "util/configparser.c" /* yacc.c:1646 */
+#line 2861 "util/configparser.c" /* yacc.c:1646 */
break;
- case 211:
-#line 796 "util/configparser.y" /* yacc.c:1646 */
+ case 216:
+#line 809 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2839,22 +2869,22 @@ yyreduce:
else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2843 "util/configparser.c" /* yacc.c:1646 */
+#line 2873 "util/configparser.c" /* yacc.c:1646 */
break;
- case 212:
-#line 805 "util/configparser.y" /* yacc.c:1646 */
+ case 217:
+#line 818 "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 2854 "util/configparser.c" /* yacc.c:1646 */
+#line 2884 "util/configparser.c" /* yacc.c:1646 */
break;
- case 213:
-#line 813 "util/configparser.y" /* yacc.c:1646 */
+ case 218:
+#line 826 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2866,11 +2896,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 2870 "util/configparser.c" /* yacc.c:1646 */
+#line 2900 "util/configparser.c" /* yacc.c:1646 */
break;
- case 214:
-#line 826 "util/configparser.y" /* yacc.c:1646 */
+ case 219:
+#line 839 "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)
@@ -2878,21 +2908,21 @@ yyreduce:
else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2882 "util/configparser.c" /* yacc.c:1646 */
+#line 2912 "util/configparser.c" /* yacc.c:1646 */
break;
- case 215:
-#line 835 "util/configparser.y" /* yacc.c:1646 */
+ case 220:
+#line 848 "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 2892 "util/configparser.c" /* yacc.c:1646 */
+#line 2922 "util/configparser.c" /* yacc.c:1646 */
break;
- case 216:
-#line 842 "util/configparser.y" /* yacc.c:1646 */
+ case 221:
+#line 855 "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)
@@ -2901,11 +2931,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2905 "util/configparser.c" /* yacc.c:1646 */
+#line 2935 "util/configparser.c" /* yacc.c:1646 */
break;
- case 217:
-#line 852 "util/configparser.y" /* yacc.c:1646 */
+ case 222:
+#line 865 "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)
@@ -2914,11 +2944,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2918 "util/configparser.c" /* yacc.c:1646 */
+#line 2948 "util/configparser.c" /* yacc.c:1646 */
break;
- case 218:
-#line 862 "util/configparser.y" /* yacc.c:1646 */
+ case 223:
+#line 875 "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)
@@ -2927,11 +2957,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2931 "util/configparser.c" /* yacc.c:1646 */
+#line 2961 "util/configparser.c" /* yacc.c:1646 */
break;
- case 219:
-#line 872 "util/configparser.y" /* yacc.c:1646 */
+ case 224:
+#line 885 "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)
@@ -2940,11 +2970,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2944 "util/configparser.c" /* yacc.c:1646 */
+#line 2974 "util/configparser.c" /* yacc.c:1646 */
break;
- case 220:
-#line 882 "util/configparser.y" /* yacc.c:1646 */
+ case 225:
+#line 895 "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)
@@ -2953,11 +2983,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2957 "util/configparser.c" /* yacc.c:1646 */
+#line 2987 "util/configparser.c" /* yacc.c:1646 */
break;
- case 221:
-#line 892 "util/configparser.y" /* yacc.c:1646 */
+ case 226:
+#line 905 "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)
@@ -2966,11 +2996,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2970 "util/configparser.c" /* yacc.c:1646 */
+#line 3000 "util/configparser.c" /* yacc.c:1646 */
break;
- case 222:
-#line 902 "util/configparser.y" /* yacc.c:1646 */
+ case 227:
+#line 915 "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)
@@ -2979,11 +3009,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2983 "util/configparser.c" /* yacc.c:1646 */
+#line 3013 "util/configparser.c" /* yacc.c:1646 */
break;
- case 223:
-#line 912 "util/configparser.y" /* yacc.c:1646 */
+ case 228:
+#line 925 "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)
@@ -2992,41 +3022,41 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2996 "util/configparser.c" /* yacc.c:1646 */
+#line 3026 "util/configparser.c" /* yacc.c:1646 */
break;
- case 224:
-#line 922 "util/configparser.y" /* yacc.c:1646 */
+ case 229:
+#line 935 "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 3006 "util/configparser.c" /* yacc.c:1646 */
+#line 3036 "util/configparser.c" /* yacc.c:1646 */
break;
- case 225:
-#line 929 "util/configparser.y" /* yacc.c:1646 */
+ case 230:
+#line 942 "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 3016 "util/configparser.c" /* yacc.c:1646 */
+#line 3046 "util/configparser.c" /* yacc.c:1646 */
break;
- case 226:
-#line 936 "util/configparser.y" /* yacc.c:1646 */
+ case 231:
+#line 949 "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 3026 "util/configparser.c" /* yacc.c:1646 */
+#line 3056 "util/configparser.c" /* yacc.c:1646 */
break;
- case 227:
-#line 943 "util/configparser.y" /* yacc.c:1646 */
+ case 232:
+#line 956 "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)
@@ -3034,11 +3064,11 @@ yyreduce:
else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3038 "util/configparser.c" /* yacc.c:1646 */
+#line 3068 "util/configparser.c" /* yacc.c:1646 */
break;
- case 228:
-#line 952 "util/configparser.y" /* yacc.c:1646 */
+ case 233:
+#line 965 "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)
@@ -3046,11 +3076,11 @@ yyreduce:
else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3050 "util/configparser.c" /* yacc.c:1646 */
+#line 3080 "util/configparser.c" /* yacc.c:1646 */
break;
- case 229:
-#line 961 "util/configparser.y" /* yacc.c:1646 */
+ case 234:
+#line 974 "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)
@@ -3058,21 +3088,21 @@ yyreduce:
else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3062 "util/configparser.c" /* yacc.c:1646 */
+#line 3092 "util/configparser.c" /* yacc.c:1646 */
break;
- case 230:
-#line 970 "util/configparser.y" /* yacc.c:1646 */
+ case 235:
+#line 983 "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 3072 "util/configparser.c" /* yacc.c:1646 */
+#line 3102 "util/configparser.c" /* yacc.c:1646 */
break;
- case 231:
-#line 977 "util/configparser.y" /* yacc.c:1646 */
+ case 236:
+#line 990 "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)
@@ -3081,11 +3111,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3085 "util/configparser.c" /* yacc.c:1646 */
+#line 3115 "util/configparser.c" /* yacc.c:1646 */
break;
- case 232:
-#line 987 "util/configparser.y" /* yacc.c:1646 */
+ case 237:
+#line 1000 "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 &&
@@ -3101,21 +3131,21 @@ yyreduce:
fatal_exit("out of memory adding acl");
}
}
-#line 3105 "util/configparser.c" /* yacc.c:1646 */
+#line 3135 "util/configparser.c" /* yacc.c:1646 */
break;
- case 233:
-#line 1004 "util/configparser.y" /* yacc.c:1646 */
+ case 238:
+#line 1017 "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 3115 "util/configparser.c" /* yacc.c:1646 */
+#line 3145 "util/configparser.c" /* yacc.c:1646 */
break;
- case 234:
-#line 1011 "util/configparser.y" /* yacc.c:1646 */
+ case 239:
+#line 1024 "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) {
@@ -3132,11 +3162,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3136 "util/configparser.c" /* yacc.c:1646 */
+#line 3166 "util/configparser.c" /* yacc.c:1646 */
break;
- case 235:
-#line 1029 "util/configparser.y" /* yacc.c:1646 */
+ case 240:
+#line 1042 "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) {
@@ -3148,11 +3178,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3152 "util/configparser.c" /* yacc.c:1646 */
+#line 3182 "util/configparser.c" /* yacc.c:1646 */
break;
- case 236:
-#line 1042 "util/configparser.y" /* yacc.c:1646 */
+ case 241:
+#line 1055 "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) {
@@ -3164,11 +3194,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3168 "util/configparser.c" /* yacc.c:1646 */
+#line 3198 "util/configparser.c" /* yacc.c:1646 */
break;
- case 237:
-#line 1055 "util/configparser.y" /* yacc.c:1646 */
+ case 242:
+#line 1068 "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)
@@ -3176,11 +3206,11 @@ yyreduce:
else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3180 "util/configparser.c" /* yacc.c:1646 */
+#line 3210 "util/configparser.c" /* yacc.c:1646 */
break;
- case 238:
-#line 1064 "util/configparser.y" /* yacc.c:1646 */
+ case 243:
+#line 1077 "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)
@@ -3188,11 +3218,11 @@ yyreduce:
else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3192 "util/configparser.c" /* yacc.c:1646 */
+#line 3222 "util/configparser.c" /* yacc.c:1646 */
break;
- case 239:
-#line 1073 "util/configparser.y" /* yacc.c:1646 */
+ case 244:
+#line 1086 "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)
@@ -3200,11 +3230,11 @@ yyreduce:
else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3204 "util/configparser.c" /* yacc.c:1646 */
+#line 3234 "util/configparser.c" /* yacc.c:1646 */
break;
- case 240:
-#line 1082 "util/configparser.y" /* yacc.c:1646 */
+ case 245:
+#line 1095 "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)
@@ -3212,11 +3242,11 @@ yyreduce:
else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3216 "util/configparser.c" /* yacc.c:1646 */
+#line 3246 "util/configparser.c" /* yacc.c:1646 */
break;
- case 241:
-#line 1091 "util/configparser.y" /* yacc.c:1646 */
+ case 246:
+#line 1104 "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)
@@ -3225,11 +3255,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3229 "util/configparser.c" /* yacc.c:1646 */
+#line 3259 "util/configparser.c" /* yacc.c:1646 */
break;
- case 242:
-#line 1101 "util/configparser.y" /* yacc.c:1646 */
+ case 247:
+#line 1114 "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)
@@ -3238,11 +3268,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3242 "util/configparser.c" /* yacc.c:1646 */
+#line 3272 "util/configparser.c" /* yacc.c:1646 */
break;
- case 243:
-#line 1111 "util/configparser.y" /* yacc.c:1646 */
+ case 248:
+#line 1124 "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)
@@ -3250,11 +3280,11 @@ yyreduce:
else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3254 "util/configparser.c" /* yacc.c:1646 */
+#line 3284 "util/configparser.c" /* yacc.c:1646 */
break;
- case 244:
-#line 1120 "util/configparser.y" /* yacc.c:1646 */
+ case 249:
+#line 1133 "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)
@@ -3262,21 +3292,21 @@ yyreduce:
else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3266 "util/configparser.c" /* yacc.c:1646 */
+#line 3296 "util/configparser.c" /* yacc.c:1646 */
break;
- case 245:
-#line 1129 "util/configparser.y" /* yacc.c:1646 */
+ case 250:
+#line 1142 "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 3276 "util/configparser.c" /* yacc.c:1646 */
+#line 3306 "util/configparser.c" /* yacc.c:1646 */
break;
- case 246:
-#line 1136 "util/configparser.y" /* yacc.c:1646 */
+ case 251:
+#line 1149 "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)
@@ -3284,11 +3314,11 @@ yyreduce:
else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3288 "util/configparser.c" /* yacc.c:1646 */
+#line 3318 "util/configparser.c" /* yacc.c:1646 */
break;
- case 247:
-#line 1145 "util/configparser.y" /* yacc.c:1646 */
+ case 252:
+#line 1158 "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)
@@ -3296,11 +3326,11 @@ yyreduce:
else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3300 "util/configparser.c" /* yacc.c:1646 */
+#line 3330 "util/configparser.c" /* yacc.c:1646 */
break;
- case 248:
-#line 1154 "util/configparser.y" /* yacc.c:1646 */
+ case 253:
+#line 1167 "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)
@@ -3308,11 +3338,11 @@ yyreduce:
else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3312 "util/configparser.c" /* yacc.c:1646 */
+#line 3342 "util/configparser.c" /* yacc.c:1646 */
break;
- case 249:
-#line 1163 "util/configparser.y" /* yacc.c:1646 */
+ case 254:
+#line 1176 "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)
@@ -3321,22 +3351,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3325 "util/configparser.c" /* yacc.c:1646 */
+#line 3355 "util/configparser.c" /* yacc.c:1646 */
break;
- case 250:
-#line 1172 "util/configparser.y" /* yacc.c:1646 */
+ case 255:
+#line 1185 "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 3336 "util/configparser.c" /* yacc.c:1646 */
+#line 3366 "util/configparser.c" /* yacc.c:1646 */
break;
- case 251:
-#line 1180 "util/configparser.y" /* yacc.c:1646 */
+ case 256:
+#line 1193 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3348,22 +3378,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3352 "util/configparser.c" /* yacc.c:1646 */
+#line 3382 "util/configparser.c" /* yacc.c:1646 */
break;
- case 252:
-#line 1193 "util/configparser.y" /* yacc.c:1646 */
+ case 257:
+#line 1206 "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 3363 "util/configparser.c" /* yacc.c:1646 */
+#line 3393 "util/configparser.c" /* yacc.c:1646 */
break;
- case 253:
-#line 1201 "util/configparser.y" /* yacc.c:1646 */
+ case 258:
+#line 1214 "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 &&
@@ -3386,21 +3416,21 @@ yyreduce:
fatal_exit("out of memory adding local-zone");
}
}
-#line 3390 "util/configparser.c" /* yacc.c:1646 */
+#line 3420 "util/configparser.c" /* yacc.c:1646 */
break;
- case 254:
-#line 1225 "util/configparser.y" /* yacc.c:1646 */
+ case 259:
+#line 1238 "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 3400 "util/configparser.c" /* yacc.c:1646 */
+#line 3430 "util/configparser.c" /* yacc.c:1646 */
break;
- case 255:
-#line 1232 "util/configparser.y" /* yacc.c:1646 */
+ case 260:
+#line 1245 "util/configparser.y" /* yacc.c:1646 */
{
char* ptr;
OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -3414,11 +3444,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 3418 "util/configparser.c" /* yacc.c:1646 */
+#line 3448 "util/configparser.c" /* yacc.c:1646 */
break;
- case 256:
-#line 1247 "util/configparser.y" /* yacc.c:1646 */
+ case 261:
+#line 1260 "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)
@@ -3427,11 +3457,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3431 "util/configparser.c" /* yacc.c:1646 */
+#line 3461 "util/configparser.c" /* yacc.c:1646 */
break;
- case 257:
-#line 1257 "util/configparser.y" /* yacc.c:1646 */
+ case 262:
+#line 1270 "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)
@@ -3440,31 +3470,31 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3444 "util/configparser.c" /* yacc.c:1646 */
+#line 3474 "util/configparser.c" /* yacc.c:1646 */
break;
- case 258:
-#line 1267 "util/configparser.y" /* yacc.c:1646 */
+ case 263:
+#line 1280 "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 3454 "util/configparser.c" /* yacc.c:1646 */
+#line 3484 "util/configparser.c" /* yacc.c:1646 */
break;
- case 259:
-#line 1274 "util/configparser.y" /* yacc.c:1646 */
+ case 264:
+#line 1287 "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 3464 "util/configparser.c" /* yacc.c:1646 */
+#line 3494 "util/configparser.c" /* yacc.c:1646 */
break;
- case 260:
-#line 1281 "util/configparser.y" /* yacc.c:1646 */
+ case 265:
+#line 1294 "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)
@@ -3472,11 +3502,50 @@ yyreduce:
else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3476 "util/configparser.c" /* yacc.c:1646 */
+#line 3506 "util/configparser.c" /* yacc.c:1646 */
break;
- case 261:
-#line 1290 "util/configparser.y" /* yacc.c:1646 */
+ case 266:
+#line 1303 "util/configparser.y" /* yacc.c:1646 */
+ {
+ char* p, *s = (yyvsp[0].str);
+ OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
+ while((p=strsep(&s, " \t\n")) != NULL) {
+ if(*p) {
+ if(!config_add_tag(cfg_parser->cfg, p))
+ yyerror("could not define-tag, "
+ "out of memory");
+ }
+ }
+ free((yyvsp[0].str));
+ }
+#line 3523 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 267:
+#line 1317 "util/configparser.y" /* yacc.c:1646 */
+ {
+ size_t len = 0;
+ uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
+ &len);
+ free((yyvsp[0].str));
+ OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str)));
+ if(!bitlist)
+ yyerror("could not parse tags, (define-tag them first)");
+ if(bitlist) {
+ if(!cfg_strbytelist_insert(
+ &cfg_parser->cfg->local_zone_tags,
+ (yyvsp[-1].str), bitlist, len)) {
+ yyerror("out of memory");
+ free((yyvsp[-1].str));
+ }
+ }
+ }
+#line 3545 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 268:
+#line 1336 "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)
@@ -3484,22 +3553,22 @@ yyreduce:
else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3488 "util/configparser.c" /* yacc.c:1646 */
+#line 3557 "util/configparser.c" /* yacc.c:1646 */
break;
- case 262:
-#line 1299 "util/configparser.y" /* yacc.c:1646 */
+ case 269:
+#line 1345 "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 3499 "util/configparser.c" /* yacc.c:1646 */
+#line 3568 "util/configparser.c" /* yacc.c:1646 */
break;
- case 263:
-#line 1307 "util/configparser.y" /* yacc.c:1646 */
+ case 270:
+#line 1353 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3511,11 +3580,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3515 "util/configparser.c" /* yacc.c:1646 */
+#line 3584 "util/configparser.c" /* yacc.c:1646 */
break;
- case 264:
-#line 1320 "util/configparser.y" /* yacc.c:1646 */
+ case 271:
+#line 1366 "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) {
@@ -3527,11 +3596,11 @@ yyreduce:
"ratelimit-for-domain");
}
}
-#line 3531 "util/configparser.c" /* yacc.c:1646 */
+#line 3600 "util/configparser.c" /* yacc.c:1646 */
break;
- case 265:
-#line 1333 "util/configparser.y" /* yacc.c:1646 */
+ case 272:
+#line 1379 "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) {
@@ -3543,11 +3612,11 @@ yyreduce:
"ratelimit-below-domain");
}
}
-#line 3547 "util/configparser.c" /* yacc.c:1646 */
+#line 3616 "util/configparser.c" /* yacc.c:1646 */
break;
- case 266:
-#line 1346 "util/configparser.y" /* yacc.c:1646 */
+ case 273:
+#line 1392 "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)
@@ -3555,11 +3624,11 @@ yyreduce:
else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3559 "util/configparser.c" /* yacc.c:1646 */
+#line 3628 "util/configparser.c" /* yacc.c:1646 */
break;
- case 267:
-#line 1355 "util/configparser.y" /* yacc.c:1646 */
+ case 274:
+#line 1401 "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)
@@ -3568,11 +3637,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3572 "util/configparser.c" /* yacc.c:1646 */
+#line 3641 "util/configparser.c" /* yacc.c:1646 */
break;
- case 268:
-#line 1365 "util/configparser.y" /* yacc.c:1646 */
+ case 275:
+#line 1411 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->stubs->name)
@@ -3581,31 +3650,31 @@ yyreduce:
free(cfg_parser->cfg->stubs->name);
cfg_parser->cfg->stubs->name = (yyvsp[0].str);
}
-#line 3585 "util/configparser.c" /* yacc.c:1646 */
+#line 3654 "util/configparser.c" /* yacc.c:1646 */
break;
- case 269:
-#line 1375 "util/configparser.y" /* yacc.c:1646 */
+ case 276:
+#line 1421 "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 3595 "util/configparser.c" /* yacc.c:1646 */
+#line 3664 "util/configparser.c" /* yacc.c:1646 */
break;
- case 270:
-#line 1382 "util/configparser.y" /* yacc.c:1646 */
+ case 277:
+#line 1428 "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 3605 "util/configparser.c" /* yacc.c:1646 */
+#line 3674 "util/configparser.c" /* yacc.c:1646 */
break;
- case 271:
-#line 1389 "util/configparser.y" /* yacc.c:1646 */
+ case 278:
+#line 1435 "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)
@@ -3613,11 +3682,11 @@ yyreduce:
else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3617 "util/configparser.c" /* yacc.c:1646 */
+#line 3686 "util/configparser.c" /* yacc.c:1646 */
break;
- case 272:
-#line 1398 "util/configparser.y" /* yacc.c:1646 */
+ case 279:
+#line 1444 "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)
@@ -3626,11 +3695,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3630 "util/configparser.c" /* yacc.c:1646 */
+#line 3699 "util/configparser.c" /* yacc.c:1646 */
break;
- case 273:
-#line 1408 "util/configparser.y" /* yacc.c:1646 */
+ case 280:
+#line 1454 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->forwards->name)
@@ -3639,31 +3708,31 @@ yyreduce:
free(cfg_parser->cfg->forwards->name);
cfg_parser->cfg->forwards->name = (yyvsp[0].str);
}
-#line 3643 "util/configparser.c" /* yacc.c:1646 */
+#line 3712 "util/configparser.c" /* yacc.c:1646 */
break;
- case 274:
-#line 1418 "util/configparser.y" /* yacc.c:1646 */
+ case 281:
+#line 1464 "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 3653 "util/configparser.c" /* yacc.c:1646 */
+#line 3722 "util/configparser.c" /* yacc.c:1646 */
break;
- case 275:
-#line 1425 "util/configparser.y" /* yacc.c:1646 */
+ case 282:
+#line 1471 "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 3663 "util/configparser.c" /* yacc.c:1646 */
+#line 3732 "util/configparser.c" /* yacc.c:1646 */
break;
- case 276:
-#line 1432 "util/configparser.y" /* yacc.c:1646 */
+ case 283:
+#line 1478 "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)
@@ -3671,19 +3740,19 @@ yyreduce:
else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3675 "util/configparser.c" /* yacc.c:1646 */
+#line 3744 "util/configparser.c" /* yacc.c:1646 */
break;
- case 277:
-#line 1441 "util/configparser.y" /* yacc.c:1646 */
+ case 284:
+#line 1487 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("\nP(remote-control:)\n"));
}
-#line 3683 "util/configparser.c" /* yacc.c:1646 */
+#line 3752 "util/configparser.c" /* yacc.c:1646 */
break;
- case 288:
-#line 1452 "util/configparser.y" /* yacc.c:1646 */
+ case 295:
+#line 1498 "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)
@@ -3692,11 +3761,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3696 "util/configparser.c" /* yacc.c:1646 */
+#line 3765 "util/configparser.c" /* yacc.c:1646 */
break;
- case 289:
-#line 1462 "util/configparser.y" /* yacc.c:1646 */
+ case 296:
+#line 1508 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3704,21 +3773,21 @@ yyreduce:
else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3708 "util/configparser.c" /* yacc.c:1646 */
+#line 3777 "util/configparser.c" /* yacc.c:1646 */
break;
- case 290:
-#line 1471 "util/configparser.y" /* yacc.c:1646 */
+ case 297:
+#line 1517 "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 3718 "util/configparser.c" /* yacc.c:1646 */
+#line 3787 "util/configparser.c" /* yacc.c:1646 */
break;
- case 291:
-#line 1478 "util/configparser.y" /* yacc.c:1646 */
+ case 298:
+#line 1524 "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)
@@ -3727,122 +3796,122 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3731 "util/configparser.c" /* yacc.c:1646 */
+#line 3800 "util/configparser.c" /* yacc.c:1646 */
break;
- case 292:
-#line 1488 "util/configparser.y" /* yacc.c:1646 */
+ case 299:
+#line 1534 "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 3741 "util/configparser.c" /* yacc.c:1646 */
+#line 3810 "util/configparser.c" /* yacc.c:1646 */
break;
- case 293:
-#line 1495 "util/configparser.y" /* yacc.c:1646 */
+ case 300:
+#line 1541 "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 3751 "util/configparser.c" /* yacc.c:1646 */
+#line 3820 "util/configparser.c" /* yacc.c:1646 */
break;
- case 294:
-#line 1502 "util/configparser.y" /* yacc.c:1646 */
+ case 301:
+#line 1548 "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 3761 "util/configparser.c" /* yacc.c:1646 */
+#line 3830 "util/configparser.c" /* yacc.c:1646 */
break;
- case 295:
-#line 1509 "util/configparser.y" /* yacc.c:1646 */
+ case 302:
+#line 1555 "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 3771 "util/configparser.c" /* yacc.c:1646 */
+#line 3840 "util/configparser.c" /* yacc.c:1646 */
break;
- case 296:
-#line 1516 "util/configparser.y" /* yacc.c:1646 */
+ case 303:
+#line 1562 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("\nP(dnstap:)\n"));
}
-#line 3779 "util/configparser.c" /* yacc.c:1646 */
+#line 3848 "util/configparser.c" /* yacc.c:1646 */
break;
- case 311:
-#line 1533 "util/configparser.y" /* yacc.c:1646 */
+ case 318:
+#line 1579 "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 3790 "util/configparser.c" /* yacc.c:1646 */
+#line 3859 "util/configparser.c" /* yacc.c:1646 */
break;
- case 312:
-#line 1541 "util/configparser.y" /* yacc.c:1646 */
+ case 319:
+#line 1587 "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 3800 "util/configparser.c" /* yacc.c:1646 */
+#line 3869 "util/configparser.c" /* yacc.c:1646 */
break;
- case 313:
-#line 1548 "util/configparser.y" /* yacc.c:1646 */
+ case 320:
+#line 1594 "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 3811 "util/configparser.c" /* yacc.c:1646 */
+#line 3880 "util/configparser.c" /* yacc.c:1646 */
break;
- case 314:
-#line 1556 "util/configparser.y" /* yacc.c:1646 */
+ case 321:
+#line 1602 "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 3822 "util/configparser.c" /* yacc.c:1646 */
+#line 3891 "util/configparser.c" /* yacc.c:1646 */
break;
- case 315:
-#line 1564 "util/configparser.y" /* yacc.c:1646 */
+ case 322:
+#line 1610 "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 3832 "util/configparser.c" /* yacc.c:1646 */
+#line 3901 "util/configparser.c" /* yacc.c:1646 */
break;
- case 316:
-#line 1571 "util/configparser.y" /* yacc.c:1646 */
+ case 323:
+#line 1617 "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 3842 "util/configparser.c" /* yacc.c:1646 */
+#line 3911 "util/configparser.c" /* yacc.c:1646 */
break;
- case 317:
-#line 1578 "util/configparser.y" /* yacc.c:1646 */
+ case 324:
+#line 1624 "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)
@@ -3850,11 +3919,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_resolver_query_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 3854 "util/configparser.c" /* yacc.c:1646 */
+#line 3923 "util/configparser.c" /* yacc.c:1646 */
break;
- case 318:
-#line 1587 "util/configparser.y" /* yacc.c:1646 */
+ case 325:
+#line 1633 "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)
@@ -3862,11 +3931,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_resolver_response_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 3866 "util/configparser.c" /* yacc.c:1646 */
+#line 3935 "util/configparser.c" /* yacc.c:1646 */
break;
- case 319:
-#line 1596 "util/configparser.y" /* yacc.c:1646 */
+ case 326:
+#line 1642 "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)
@@ -3874,11 +3943,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_client_query_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 3878 "util/configparser.c" /* yacc.c:1646 */
+#line 3947 "util/configparser.c" /* yacc.c:1646 */
break;
- case 320:
-#line 1605 "util/configparser.y" /* yacc.c:1646 */
+ case 327:
+#line 1651 "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)
@@ -3886,11 +3955,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_client_response_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 3890 "util/configparser.c" /* yacc.c:1646 */
+#line 3959 "util/configparser.c" /* yacc.c:1646 */
break;
- case 321:
-#line 1614 "util/configparser.y" /* yacc.c:1646 */
+ case 328:
+#line 1660 "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)
@@ -3898,11 +3967,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 3902 "util/configparser.c" /* yacc.c:1646 */
+#line 3971 "util/configparser.c" /* yacc.c:1646 */
break;
- case 322:
-#line 1623 "util/configparser.y" /* yacc.c:1646 */
+ case 329:
+#line 1669 "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)
@@ -3910,29 +3979,42 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 3914 "util/configparser.c" /* yacc.c:1646 */
+#line 3983 "util/configparser.c" /* yacc.c:1646 */
break;
- case 323:
-#line 1632 "util/configparser.y" /* yacc.c:1646 */
+ case 330:
+#line 1678 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("\nP(python:)\n"));
}
-#line 3922 "util/configparser.c" /* yacc.c:1646 */
+#line 3991 "util/configparser.c" /* yacc.c:1646 */
break;
- case 327:
-#line 1641 "util/configparser.y" /* yacc.c:1646 */
+ case 334:
+#line 1687 "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 3932 "util/configparser.c" /* yacc.c:1646 */
+#line 4001 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 335:
+#line 1693 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->disable_dnssec_lame_check =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4014 "util/configparser.c" /* yacc.c:1646 */
break;
-#line 3936 "util/configparser.c" /* yacc.c:1646 */
+#line 4018 "util/configparser.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -4160,7 +4242,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 1646 "util/configparser.y" /* yacc.c:1906 */
+#line 1701 "util/configparser.y" /* yacc.c:1906 */
/* parse helper routines could be here */
diff --git a/util/configparser.h b/util/configparser.h
index e6c4993e62a4..135e4449a6ab 100644
--- a/util/configparser.h
+++ b/util/configparser.h
@@ -198,16 +198,20 @@ extern int yydebug;
VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 408,
VAR_HARDEN_ALGO_DOWNGRADE = 409,
VAR_IP_TRANSPARENT = 410,
- VAR_RATELIMIT = 411,
- VAR_RATELIMIT_SLABS = 412,
- VAR_RATELIMIT_SIZE = 413,
- VAR_RATELIMIT_FOR_DOMAIN = 414,
- VAR_RATELIMIT_BELOW_DOMAIN = 415,
- VAR_RATELIMIT_FACTOR = 416,
- VAR_CAPS_WHITELIST = 417,
- VAR_CACHE_MAX_NEGATIVE_TTL = 418,
- VAR_PERMIT_SMALL_HOLDDOWN = 419,
- VAR_QNAME_MINIMISATION = 420
+ VAR_DISABLE_DNSSEC_LAME_CHECK = 411,
+ VAR_RATELIMIT = 412,
+ VAR_RATELIMIT_SLABS = 413,
+ VAR_RATELIMIT_SIZE = 414,
+ VAR_RATELIMIT_FOR_DOMAIN = 415,
+ VAR_RATELIMIT_BELOW_DOMAIN = 416,
+ VAR_RATELIMIT_FACTOR = 417,
+ VAR_CAPS_WHITELIST = 418,
+ VAR_CACHE_MAX_NEGATIVE_TTL = 419,
+ VAR_PERMIT_SMALL_HOLDDOWN = 420,
+ VAR_QNAME_MINIMISATION = 421,
+ VAR_IP_FREEBIND = 422,
+ VAR_DEFINE_TAG = 423,
+ VAR_LOCAL_ZONE_TAG = 424
};
#endif
/* Tokens. */
@@ -364,16 +368,20 @@ extern int yydebug;
#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 408
#define VAR_HARDEN_ALGO_DOWNGRADE 409
#define VAR_IP_TRANSPARENT 410
-#define VAR_RATELIMIT 411
-#define VAR_RATELIMIT_SLABS 412
-#define VAR_RATELIMIT_SIZE 413
-#define VAR_RATELIMIT_FOR_DOMAIN 414
-#define VAR_RATELIMIT_BELOW_DOMAIN 415
-#define VAR_RATELIMIT_FACTOR 416
-#define VAR_CAPS_WHITELIST 417
-#define VAR_CACHE_MAX_NEGATIVE_TTL 418
-#define VAR_PERMIT_SMALL_HOLDDOWN 419
-#define VAR_QNAME_MINIMISATION 420
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 411
+#define VAR_RATELIMIT 412
+#define VAR_RATELIMIT_SLABS 413
+#define VAR_RATELIMIT_SIZE 414
+#define VAR_RATELIMIT_FOR_DOMAIN 415
+#define VAR_RATELIMIT_BELOW_DOMAIN 416
+#define VAR_RATELIMIT_FACTOR 417
+#define VAR_CAPS_WHITELIST 418
+#define VAR_CACHE_MAX_NEGATIVE_TTL 419
+#define VAR_PERMIT_SMALL_HOLDDOWN 420
+#define VAR_QNAME_MINIMISATION 421
+#define VAR_IP_FREEBIND 422
+#define VAR_DEFINE_TAG 423
+#define VAR_LOCAL_ZONE_TAG 424
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -384,7 +392,7 @@ union YYSTYPE
char* str;
-#line 388 "util/configparser.h" /* yacc.c:1909 */
+#line 396 "util/configparser.h" /* yacc.c:1909 */
};
typedef union YYSTYPE YYSTYPE;
diff --git a/util/configparser.y b/util/configparser.y
index ea7acdb597ed..4ff18f0ce5c7 100644
--- a/util/configparser.y
+++ b/util/configparser.y
@@ -121,10 +121,11 @@ extern struct config_parser_state* cfg_parser;
%token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES
%token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES
%token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT
+%token VAR_DISABLE_DNSSEC_LAME_CHECK
%token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE
%token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN VAR_RATELIMIT_FACTOR
%token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN
-%token VAR_QNAME_MINIMISATION
+%token VAR_QNAME_MINIMISATION VAR_IP_FREEBIND VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -191,7 +192,9 @@ content_server: server_num_threads | server_verbosity | server_port |
server_ratelimit_size | server_ratelimit_for_domain |
server_ratelimit_below_domain | server_ratelimit_factor |
server_caps_whitelist | server_cache_max_negative_ttl |
- server_permit_small_holddown | server_qname_minimisation
+ server_permit_small_holddown | server_qname_minimisation |
+ server_ip_freebind | server_define_tag | server_local_zone_tag |
+ server_disable_dnssec_lame_check
;
stubstart: VAR_STUB_ZONE
{
@@ -662,6 +665,16 @@ server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG
free($2);
}
;
+server_ip_freebind: VAR_IP_FREEBIND STRING_ARG
+ {
+ OUTYY(("P(server_ip_freebind:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ip_freebind =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG
{
OUTYY(("P(server_edns_buffer_size:%s)\n", $2));
@@ -1286,6 +1299,39 @@ server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG
free($2);
}
;
+server_define_tag: VAR_DEFINE_TAG STRING_ARG
+ {
+ char* p, *s = $2;
+ OUTYY(("P(server_define_tag:%s)\n", $2));
+ while((p=strsep(&s, " \t\n")) != NULL) {
+ if(*p) {
+ if(!config_add_tag(cfg_parser->cfg, p))
+ yyerror("could not define-tag, "
+ "out of memory");
+ }
+ }
+ free($2);
+ }
+ ;
+server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG
+ {
+ size_t len = 0;
+ uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3,
+ &len);
+ free($3);
+ OUTYY(("P(server_local_zone_tag:%s)\n", $2));
+ if(!bitlist)
+ yyerror("could not parse tags, (define-tag them first)");
+ if(bitlist) {
+ if(!cfg_strbytelist_insert(
+ &cfg_parser->cfg->local_zone_tags,
+ $2, bitlist, len)) {
+ yyerror("out of memory");
+ free($2);
+ }
+ }
+ }
+ ;
server_ratelimit: VAR_RATELIMIT STRING_ARG
{
OUTYY(("P(server_ratelimit:%s)\n", $2));
@@ -1643,6 +1689,15 @@ py_script: VAR_PYTHON_SCRIPT STRING_ARG
free(cfg_parser->cfg->python_script);
cfg_parser->cfg->python_script = $2;
}
+server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG
+ {
+ OUTYY(("P(disable_dnssec_lame_check:%s)\n", $2));
+ if (strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->disable_dnssec_lame_check =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
%%
/* parse helper routines could be here */
diff --git a/util/data/dname.c b/util/data/dname.c
index 79bf52ad4728..8fc475f7f3f1 100644
--- a/util/data/dname.c
+++ b/util/data/dname.c
@@ -256,11 +256,13 @@ dname_pkt_compare(sldns_buffer* pkt, uint8_t* d1, uint8_t* d2)
log_assert(len1 == len2 && len1 != 0);
/* compare labels */
while(len1--) {
- if(tolower((unsigned char)*d1++) != tolower((unsigned char)*d2++)) {
- if(tolower((unsigned char)d1[-1]) < tolower((unsigned char)d2[-1]))
+ if(tolower((unsigned char)*d1) != tolower((unsigned char)*d2)) {
+ if(tolower((unsigned char)*d1) < tolower((unsigned char)*d2))
return -1;
return 1;
}
+ d1++;
+ d2++;
}
len1 = *d1++;
len2 = *d2++;
@@ -281,8 +283,10 @@ dname_query_hash(uint8_t* dname, hashvalue_t h)
log_assert(lablen <= LDNS_MAX_LABELLEN);
labuf[0] = lablen;
i=0;
- while(lablen--)
- labuf[++i] = (uint8_t)tolower((unsigned char)*dname++);
+ while(lablen--) {
+ labuf[++i] = (uint8_t)tolower((unsigned char)*dname);
+ dname++;
+ }
h = hashlittle(labuf, labuf[0] + 1, h);
lablen = *dname++;
}
@@ -309,8 +313,10 @@ dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_t h)
log_assert(lablen <= LDNS_MAX_LABELLEN);
labuf[0] = lablen;
i=0;
- while(lablen--)
- labuf[++i] = (uint8_t)tolower((unsigned char)*dname++);
+ while(lablen--) {
+ labuf[++i] = (uint8_t)tolower((unsigned char)*dname);
+ dname++;
+ }
h = hashlittle(labuf, labuf[0] + 1, h);
lablen = *dname++;
}
diff --git a/util/data/msgencode.c b/util/data/msgencode.c
index 43464e9bbe0c..034bb24bd6e4 100644
--- a/util/data/msgencode.c
+++ b/util/data/msgencode.c
@@ -717,16 +717,23 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
uint16_t
calc_edns_field_size(struct edns_data* edns)
{
+ size_t rdatalen = 0;
+ struct edns_option* opt;
if(!edns || !edns->edns_present)
return 0;
- /* domain root '.' + type + class + ttl + rdatalen(=0) */
- return 1 + 2 + 2 + 4 + 2;
+ for(opt = edns->opt_list; opt; opt = opt->next) {
+ rdatalen += 4 + opt->opt_len;
+ }
+ /* domain root '.' + type + class + ttl + rdatalen */
+ return 1 + 2 + 2 + 4 + 2 + rdatalen;
}
void
attach_edns_record(sldns_buffer* pkt, struct edns_data* edns)
{
size_t len;
+ size_t rdatapos;
+ struct edns_option* opt;
if(!edns || !edns->edns_present)
return;
/* inc additional count */
@@ -742,7 +749,18 @@ attach_edns_record(sldns_buffer* pkt, struct edns_data* edns)
sldns_buffer_write_u8(pkt, edns->ext_rcode); /* ttl */
sldns_buffer_write_u8(pkt, edns->edns_version);
sldns_buffer_write_u16(pkt, edns->bits);
+ rdatapos = sldns_buffer_position(pkt);
sldns_buffer_write_u16(pkt, 0); /* rdatalen */
+ /* write rdata */
+ for(opt=edns->opt_list; opt; opt=opt->next) {
+ sldns_buffer_write_u16(pkt, opt->opt_code);
+ sldns_buffer_write_u16(pkt, opt->opt_len);
+ if(opt->opt_len != 0)
+ sldns_buffer_write(pkt, opt->opt_data, opt->opt_len);
+ }
+ if(edns->opt_list)
+ sldns_buffer_write_u16_at(pkt, rdatapos,
+ sldns_buffer_position(pkt)-rdatapos-2);
sldns_buffer_flip(pkt);
}
diff --git a/util/data/msgparse.c b/util/data/msgparse.c
index 108c9dacb39b..1d565c1ea280 100644
--- a/util/data/msgparse.c
+++ b/util/data/msgparse.c
@@ -38,6 +38,7 @@
*/
#include "config.h"
#include "util/data/msgparse.h"
+#include "util/data/msgreply.h"
#include "util/data/dname.h"
#include "util/data/packed_rrset.h"
#include "util/storage/lookup3.h"
@@ -933,13 +934,41 @@ parse_packet(sldns_buffer* pkt, struct msg_parse* msg, struct regional* region)
return 0;
}
+/** parse EDNS options from EDNS wireformat rdata */
+static int
+parse_edns_options(uint8_t* rdata_ptr, size_t rdata_len,
+ struct edns_data* edns, struct regional* region)
+{
+ /* while still more options, and have code+len to read */
+ /* ignores partial content (i.e. rdata len 3) */
+ while(rdata_len >= 4) {
+ uint16_t opt_code = sldns_read_uint16(rdata_ptr);
+ uint16_t opt_len = sldns_read_uint16(rdata_ptr+2);
+ rdata_ptr += 4;
+ rdata_len -= 4;
+ if(opt_len > rdata_len)
+ break; /* option code partial */
+ if(!edns_opt_append(edns, region, opt_code, opt_len,
+ rdata_ptr)) {
+ log_err("out of memory");
+ return 0;
+ }
+ rdata_ptr += opt_len;
+ rdata_len -= opt_len;
+ }
+ return 1;
+}
+
int
-parse_extract_edns(struct msg_parse* msg, struct edns_data* edns)
+parse_extract_edns(struct msg_parse* msg, struct edns_data* edns,
+ struct regional* region)
{
struct rrset_parse* rrset = msg->rrset_first;
struct rrset_parse* prev = 0;
struct rrset_parse* found = 0;
struct rrset_parse* found_prev = 0;
+ size_t rdata_len;
+ uint8_t* rdata_ptr;
/* since the class encodes the UDP size, we cannot use hash table to
* find the EDNS OPT record. Scan the packet. */
while(rrset) {
@@ -986,13 +1015,25 @@ parse_extract_edns(struct msg_parse* msg, struct edns_data* edns)
edns->edns_version = found->rr_last->ttl_data[1];
edns->bits = sldns_read_uint16(&found->rr_last->ttl_data[2]);
edns->udp_size = ntohs(found->rrset_class);
- /* ignore rdata and rrsigs */
+ edns->opt_list = NULL;
+
+ /* take the options */
+ rdata_len = found->rr_first->size;
+ rdata_ptr = found->rr_first->ttl_data+6;
+ if(!parse_edns_options(rdata_ptr, rdata_len, edns, region))
+ return 0;
+
+ /* ignore rrsigs */
+
return 0;
}
int
-parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns)
+parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns,
+ struct regional* region)
{
+ size_t rdata_len;
+ uint8_t* rdata_ptr;
log_assert(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) == 1);
log_assert(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) == 0);
log_assert(LDNS_NSCOUNT(sldns_buffer_begin(pkt)) == 0);
@@ -1017,6 +1058,17 @@ parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns)
edns->ext_rcode = sldns_buffer_read_u8(pkt); /* ttl used for bits */
edns->edns_version = sldns_buffer_read_u8(pkt);
edns->bits = sldns_buffer_read_u16(pkt);
- /* ignore rdata and rrsigs */
+ edns->opt_list = NULL;
+
+ /* take the options */
+ rdata_len = sldns_buffer_read_u16(pkt);
+ if(sldns_buffer_remaining(pkt) < rdata_len)
+ return LDNS_RCODE_FORMERR;
+ rdata_ptr = sldns_buffer_current(pkt);
+ if(!parse_edns_options(rdata_ptr, rdata_len, edns, region))
+ return LDNS_RCODE_SERVFAIL;
+
+ /* ignore rrsigs */
+
return 0;
}
diff --git a/util/data/msgparse.h b/util/data/msgparse.h
index 44497c8ca381..cae988ff9950 100644
--- a/util/data/msgparse.h
+++ b/util/data/msgparse.h
@@ -69,6 +69,7 @@ struct sldns_buffer;
struct rrset_parse;
struct rr_parse;
struct regional;
+struct edns_option;
/** number of buckets in parse rrset hash table. Must be power of 2. */
#define PARSE_TABLE_SIZE 32
@@ -202,7 +203,8 @@ struct rr_parse {
/**
* EDNS data storage
- * EDNS rdata is ignored.
+ * rdata is parsed in a list (has accessor functions). allocated in a
+ * region.
*/
struct edns_data {
/** if EDNS OPT record was present */
@@ -215,6 +217,22 @@ struct edns_data {
uint16_t bits;
/** UDP reassembly size. */
uint16_t udp_size;
+ /** rdata element list, or NULL if none */
+ struct edns_option* opt_list;
+};
+
+/**
+ * EDNS option
+ */
+struct edns_option {
+ /** next item in list */
+ struct edns_option* next;
+ /** type of this edns option */
+ uint16_t opt_code;
+ /** length of this edns option (cannot exceed uint16 in encoding) */
+ size_t opt_len;
+ /** data of this edns option; allocated in region, or NULL if len=0 */
+ uint8_t* opt_data;
};
/**
@@ -249,10 +267,12 @@ int parse_packet(struct sldns_buffer* pkt, struct msg_parse* msg,
* @param msg: parsed message structure. Modified on exit, if EDNS was present
* it is removed from the additional section.
* @param edns: the edns data is stored here. Does not have to be initialised.
+ * @param region: region to alloc results in (edns option contents)
* @return: 0 on success. or an RCODE on an error.
* RCODE formerr if OPT in wrong section, and so on.
*/
-int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns);
+int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns,
+ struct regional* region);
/**
* If EDNS data follows a query section, extract it and initialize edns struct.
@@ -260,10 +280,12 @@ int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns);
* section. At end, right after EDNS data or no movement if failed.
* @param edns: the edns data allocated by the caller. Does not have to be
* initialised.
+ * @param region: region to alloc results in (edns option contents)
* @return: 0 on success, or an RCODE on error.
* RCODE formerr if OPT is badly formatted and so on.
*/
-int parse_edns_from_pkt(struct sldns_buffer* pkt, struct edns_data* edns);
+int parse_edns_from_pkt(struct sldns_buffer* pkt, struct edns_data* edns,
+ struct regional* region);
/**
* Calculate hash value for rrset in packet.
diff --git a/util/data/msgreply.c b/util/data/msgreply.c
index 06593ffe1b27..f8a24918dcad 100644
--- a/util/data/msgreply.c
+++ b/util/data/msgreply.c
@@ -461,7 +461,7 @@ int reply_info_parse(sldns_buffer* pkt, struct alloc_cache* alloc,
if((ret = parse_packet(pkt, msg, region)) != 0) {
return ret;
}
- if((ret = parse_extract_edns(msg, edns)) != 0)
+ if((ret = parse_extract_edns(msg, edns, region)) != 0)
return ret;
/* parse OK, allocate return structures */
@@ -857,3 +857,155 @@ reply_all_rrsets_secure(struct reply_info* rep)
}
return 1;
}
+
+int edns_opt_append(struct edns_data* edns, struct regional* region,
+ uint16_t code, size_t len, uint8_t* data)
+{
+ struct edns_option** prevp;
+ struct edns_option* opt;
+
+ /* allocate new element */
+ opt = (struct edns_option*)regional_alloc(region, sizeof(*opt));
+ if(!opt)
+ return 0;
+ opt->next = NULL;
+ opt->opt_code = code;
+ opt->opt_len = len;
+ opt->opt_data = regional_alloc_init(region, data, len);
+ if(!opt->opt_data)
+ return 0;
+
+ /* append at end of list */
+ prevp = &edns->opt_list;
+ while(*prevp != NULL)
+ prevp = &((*prevp)->next);
+ *prevp = opt;
+ return 1;
+}
+
+int edns_opt_inplace_reply(struct edns_data* edns, struct regional* region)
+{
+ (void)region;
+ /* remove all edns options from the reply, because only the
+ * options that we understand should be in the reply
+ * (sec 6.1.2 RFC 6891) */
+ edns->opt_list = NULL;
+ return 1;
+}
+
+struct edns_option* edns_opt_copy_region(struct edns_option* list,
+ struct regional* region)
+{
+ struct edns_option* result = NULL, *cur = NULL, *s;
+ while(list) {
+ /* copy edns option structure */
+ s = regional_alloc_init(region, list, sizeof(*list));
+ if(!s) return NULL;
+ s->next = NULL;
+
+ /* copy option data */
+ if(s->opt_data) {
+ s->opt_data = regional_alloc_init(region, s->opt_data,
+ s->opt_len);
+ if(!s->opt_data)
+ return NULL;
+ }
+
+ /* link into list */
+ if(cur)
+ cur->next = s;
+ else result = s;
+ cur = s;
+
+ /* examine next element */
+ list = list->next;
+ }
+ return result;
+}
+
+int edns_opt_compare(struct edns_option* p, struct edns_option* q)
+{
+ if(!p && !q) return 0;
+ if(!p) return -1;
+ if(!q) return 1;
+ log_assert(p && q);
+ if(p->opt_code != q->opt_code)
+ return (int)q->opt_code - (int)p->opt_code;
+ if(p->opt_len != q->opt_len)
+ return (int)q->opt_len - (int)p->opt_len;
+ if(p->opt_len != 0)
+ return memcmp(p->opt_data, q->opt_data, p->opt_len);
+ return 0;
+}
+
+int edns_opt_list_compare(struct edns_option* p, struct edns_option* q)
+{
+ int r;
+ while(p && q) {
+ r = edns_opt_compare(p, q);
+ if(r != 0)
+ return r;
+ p = p->next;
+ q = q->next;
+ }
+ if(p || q) {
+ /* uneven length lists */
+ if(p) return 1;
+ if(q) return -1;
+ }
+ return 0;
+}
+
+void edns_opt_list_free(struct edns_option* list)
+{
+ struct edns_option* n;
+ while(list) {
+ free(list->opt_data);
+ n = list->next;
+ free(list);
+ list = n;
+ }
+}
+
+struct edns_option* edns_opt_copy_alloc(struct edns_option* list)
+{
+ struct edns_option* result = NULL, *cur = NULL, *s;
+ while(list) {
+ /* copy edns option structure */
+ s = memdup(list, sizeof(*list));
+ if(!s) {
+ edns_opt_list_free(result);
+ return NULL;
+ }
+ s->next = NULL;
+
+ /* copy option data */
+ if(s->opt_data) {
+ s->opt_data = memdup(s->opt_data, s->opt_len);
+ if(!s->opt_data) {
+ edns_opt_list_free(result);
+ return NULL;
+ }
+ }
+
+ /* link into list */
+ if(cur)
+ cur->next = s;
+ else result = s;
+ cur = s;
+
+ /* examine next element */
+ list = list->next;
+ }
+ return result;
+}
+
+struct edns_option* edns_opt_find(struct edns_option* list, uint16_t code)
+{
+ struct edns_option* p;
+ for(p=list; p; p=p->next) {
+ if(p->opt_code == code)
+ return p;
+ }
+ return NULL;
+}
diff --git a/util/data/msgreply.h b/util/data/msgreply.h
index 708897950089..b542b75e6970 100644
--- a/util/data/msgreply.h
+++ b/util/data/msgreply.h
@@ -437,4 +437,56 @@ void log_dns_msg(const char* str, struct query_info* qinfo,
void log_query_info(enum verbosity_value v, const char* str,
struct query_info* qinf);
+/**
+ * Append edns option to edns data structure
+ */
+int edns_opt_append(struct edns_data* edns, struct regional* region,
+ uint16_t code, size_t len, uint8_t* data);
+
+/**
+ * Find edns option in edns list
+ * @param list: list of edns options (eg. edns.opt_list)
+ * @param code: opt code to find.
+ * @return NULL or the edns_option element.
+ */
+struct edns_option* edns_opt_find(struct edns_option* list, uint16_t code);
+
+/**
+ * Transform edns data structure from query structure into reply structure.
+ * In place transform, for errors and cache replies.
+ * @param edns: on input contains the edns from the query. On output contains
+ * the edns for the answer. Add new options to the opt_list to put them
+ * in the answer (allocated in the region, with edns_opt_append).
+ * @param region: to allocate stuff in.
+ * @return false on failure (servfail to client, or for some error encodings,
+ * no EDNS options in the answer).
+ */
+int edns_opt_inplace_reply(struct edns_data* edns, struct regional* region);
+
+/**
+ * Copy edns option list allocated to the new region
+ */
+struct edns_option* edns_opt_copy_region(struct edns_option* list,
+ struct regional* region);
+
+/**
+ * Copy edns option list allocated with malloc
+ */
+struct edns_option* edns_opt_copy_alloc(struct edns_option* list);
+
+/**
+ * Free edns option list allocated with malloc
+ */
+void edns_opt_list_free(struct edns_option* list);
+
+/**
+ * Compare an edns option. (not entire list). Also compares contents.
+ */
+int edns_opt_compare(struct edns_option* p, struct edns_option* q);
+
+/**
+ * Compare edns option lists, also the order and contents of edns-options.
+ */
+int edns_opt_list_compare(struct edns_option* p, struct edns_option* q);
+
#endif /* UTIL_DATA_MSGREPLY_H */
diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c
index 1397e9c1359d..80a23f20361b 100644
--- a/util/fptr_wlist.c
+++ b/util/fptr_wlist.c
@@ -78,6 +78,9 @@
#ifdef WITH_PYTHONMODULE
#include "pythonmod/pythonmod.h"
#endif
+#ifdef USE_CACHEDB
+#include "cachedb/cachedb.h"
+#endif
int
fptr_whitelist_comm_point(comm_point_callback_t *fptr)
@@ -264,8 +267,8 @@ int
fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
uint16_t flags, int dnssec, int want_dnssec, int nocaps,
- struct sockaddr_storage* addr, socklen_t addrlen,
- uint8_t* zone, size_t zonelen,
+ struct edns_option* opt_list, struct sockaddr_storage* addr,
+ socklen_t addrlen, uint8_t* zone, size_t zonelen,
struct module_qstate* q))
{
if(fptr == &worker_send_query) return 1;
@@ -315,6 +318,9 @@ fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id))
#ifdef WITH_PYTHONMODULE
else if(fptr == &pythonmod_init) return 1;
#endif
+#ifdef USE_CACHEDB
+ else if(fptr == &cachedb_init) return 1;
+#endif
return 0;
}
@@ -327,6 +333,9 @@ fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id))
#ifdef WITH_PYTHONMODULE
else if(fptr == &pythonmod_deinit) return 1;
#endif
+#ifdef USE_CACHEDB
+ else if(fptr == &cachedb_deinit) return 1;
+#endif
return 0;
}
@@ -340,6 +349,9 @@ fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate,
#ifdef WITH_PYTHONMODULE
else if(fptr == &pythonmod_operate) return 1;
#endif
+#ifdef USE_CACHEDB
+ else if(fptr == &cachedb_operate) return 1;
+#endif
return 0;
}
@@ -353,6 +365,9 @@ fptr_whitelist_mod_inform_super(void (*fptr)(
#ifdef WITH_PYTHONMODULE
else if(fptr == &pythonmod_inform_super) return 1;
#endif
+#ifdef USE_CACHEDB
+ else if(fptr == &cachedb_inform_super) return 1;
+#endif
return 0;
}
@@ -366,6 +381,9 @@ fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate,
#ifdef WITH_PYTHONMODULE
else if(fptr == &pythonmod_clear) return 1;
#endif
+#ifdef USE_CACHEDB
+ else if(fptr == &cachedb_clear) return 1;
+#endif
return 0;
}
@@ -378,6 +396,9 @@ fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id))
#ifdef WITH_PYTHONMODULE
else if(fptr == &pythonmod_get_mem) return 1;
#endif
+#ifdef USE_CACHEDB
+ else if(fptr == &cachedb_get_mem) return 1;
+#endif
return 0;
}
diff --git a/util/fptr_wlist.h b/util/fptr_wlist.h
index 10de5d816772..98ca21bb9671 100644
--- a/util/fptr_wlist.h
+++ b/util/fptr_wlist.h
@@ -212,7 +212,7 @@ int fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_t fptr);
int fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
uint16_t flags, int dnssec, int want_dnssec, int nocaps,
- struct sockaddr_storage* addr, socklen_t addrlen,
+ struct edns_option*, struct sockaddr_storage* addr, socklen_t addrlen,
uint8_t* zone, size_t zonelen,
struct module_qstate* q));
diff --git a/util/iana_ports.inc b/util/iana_ports.inc
index df5a560aff08..3856488ba347 100644
--- a/util/iana_ports.inc
+++ b/util/iana_ports.inc
@@ -3844,6 +3844,8 @@
4412,
4413,
4416,
+4418,
+4420,
4425,
4426,
4430,
@@ -3904,6 +3906,7 @@
4599,
4600,
4601,
+4621,
4658,
4659,
4660,
@@ -4222,6 +4225,7 @@
5436,
5437,
5443,
+5450,
5453,
5454,
5455,
@@ -4598,6 +4602,7 @@
7201,
7227,
7235,
+7244,
7262,
7272,
7273,
@@ -4651,6 +4656,7 @@
7570,
7574,
7588,
+7606,
7624,
7627,
7628,
@@ -5269,6 +5275,7 @@
23004,
23005,
23272,
+23294,
23333,
23400,
23401,
diff --git a/util/module.h b/util/module.h
index b9dde36e2f3c..c3ce8a40eda2 100644
--- a/util/module.h
+++ b/util/module.h
@@ -214,6 +214,8 @@ struct module_env {
* EDNS, the answer is likely to be useless for this domain.
* @param nocaps: do not use caps_for_id, use the qname as given.
* (ignored if caps_for_id is disabled).
+ * @param opt_list: set these EDNS options on the outgoing packet.
+ * or NULL if none (the list is deep-copied).
* @param addr: where to.
* @param addrlen: length of addr.
* @param zone: delegation point name.
@@ -226,9 +228,9 @@ struct module_env {
*/
struct outbound_entry* (*send_query)(uint8_t* qname, size_t qnamelen,
uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec,
- int want_dnssec, int nocaps, struct sockaddr_storage* addr,
- socklen_t addrlen, uint8_t* zone, size_t zonelen,
- struct module_qstate* q);
+ int want_dnssec, int nocaps, struct edns_option* opt_list,
+ struct sockaddr_storage* addr, socklen_t addrlen,
+ uint8_t* zone, size_t zonelen, struct module_qstate* q);
/**
* Detach-subqueries.
diff --git a/util/net_help.c b/util/net_help.c
index eb03cd0ae6d2..5d6c033d6597 100644
--- a/util/net_help.c
+++ b/util/net_help.c
@@ -783,7 +783,7 @@ void* outgoing_ssl_fd(void* sslctx, int fd)
#endif
}
-#if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
+#if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK)
/** global lock list for openssl locks */
static lock_basic_t *ub_openssl_locks = NULL;
@@ -808,7 +808,7 @@ ub_crypto_lock_cb(int mode, int type, const char *ATTR_UNUSED(file),
int ub_openssl_lock_init(void)
{
-#if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
+#if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK)
int i;
ub_openssl_locks = (lock_basic_t*)reallocarray(
NULL, (size_t)CRYPTO_num_locks(), sizeof(lock_basic_t));
@@ -825,7 +825,7 @@ int ub_openssl_lock_init(void)
void ub_openssl_lock_delete(void)
{
-#if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
+#if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK)
int i;
if(!ub_openssl_locks)
return;
diff --git a/util/netevent.c b/util/netevent.c
index b827e6540b1f..bdb35739327b 100644
--- a/util/netevent.c
+++ b/util/netevent.c
@@ -40,6 +40,7 @@
*/
#include "config.h"
#include "util/netevent.h"
+#include "util/ub_event.h"
#include "util/log.h"
#include "util/net_help.h"
#include "util/fptr_wlist.h"
@@ -89,48 +90,29 @@
#define NUM_UDP_PER_SELECT 1
#endif
-/* We define libevent structures here to hide the libevent stuff. */
-
-#ifdef USE_MINI_EVENT
-# ifdef USE_WINSOCK
-# include "util/winsock_event.h"
-# else
-# include "util/mini_event.h"
-# endif /* USE_WINSOCK */
-#else /* USE_MINI_EVENT */
- /* we use libevent */
-# ifdef HAVE_EVENT_H
-# include <event.h>
-# else
-# include "event2/event.h"
-# include "event2/event_struct.h"
-# include "event2/event_compat.h"
-# endif
-#endif /* USE_MINI_EVENT */
-
/**
- * The internal event structure for keeping libevent info for the event.
+ * The internal event structure for keeping ub_event info for the event.
* Possibly other structures (list, tree) this is part of.
*/
struct internal_event {
/** the comm base */
struct comm_base* base;
- /** libevent event type, alloced here */
- struct event ev;
+ /** ub_event event type */
+ struct ub_event* ev;
};
/**
* Internal base structure, so that every thread has its own events.
*/
struct internal_base {
- /** libevent event_base type. */
- struct event_base* base;
+ /** ub_event event_base type. */
+ struct ub_event_base* base;
/** seconds time pointer points here */
time_t secs;
/** timeval with current time */
struct timeval now;
/** the event used for slow_accept timeouts */
- struct event slow_accept;
+ struct ub_event* slow_accept;
/** true if slow_accept is enabled */
int slow_accept_enabled;
};
@@ -139,10 +121,12 @@ struct internal_base {
* Internal timer structure, to store timer event in.
*/
struct internal_timer {
+ /** the super struct from which derived */
+ struct comm_timer super;
/** the comm base */
struct comm_base* base;
- /** libevent event type, alloced here */
- struct event ev;
+ /** ub_event event type */
+ struct ub_event* ev;
/** is timer enabled */
uint8_t enabled;
};
@@ -151,8 +135,8 @@ struct internal_timer {
* Internal signal structure, to store signal event in.
*/
struct internal_signal {
- /** libevent event type, alloced here */
- struct event ev;
+ /** ub_event event type */
+ struct ub_event* ev;
/** next in signal list */
struct internal_signal* next;
};
@@ -164,26 +148,13 @@ static struct comm_point* comm_point_create_tcp_handler(
/* -------- End of local definitions -------- */
-#ifdef USE_MINI_EVENT
-/** minievent updates the time when it blocks. */
-#define comm_base_now(x) /* nothing to do */
-#else /* !USE_MINI_EVENT */
-/** fillup the time values in the event base */
-static void
-comm_base_now(struct comm_base* b)
-{
- if(gettimeofday(&b->eb->now, NULL) < 0) {
- log_err("gettimeofday: %s", strerror(errno));
- }
- b->eb->secs = (time_t)b->eb->now.tv_sec;
-}
-#endif /* USE_MINI_EVENT */
-
struct comm_base*
comm_base_create(int sigs)
{
struct comm_base* b = (struct comm_base*)calloc(1,
sizeof(struct comm_base));
+ const char *evnm="event", *evsys="", *evmethod="";
+
if(!b)
return NULL;
b->eb = (struct internal_base*)calloc(1, sizeof(struct internal_base));
@@ -191,55 +162,20 @@ comm_base_create(int sigs)
free(b);
return NULL;
}
-#ifdef USE_MINI_EVENT
- (void)sigs;
- /* use mini event time-sharing feature */
- b->eb->base = event_init(&b->eb->secs, &b->eb->now);
-#else
-# if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
- /* libev */
- if(sigs)
- b->eb->base=(struct event_base *)ev_default_loop(EVFLAG_AUTO);
- else
- b->eb->base=(struct event_base *)ev_loop_new(EVFLAG_AUTO);
-# else
- (void)sigs;
-# ifdef HAVE_EVENT_BASE_NEW
- b->eb->base = event_base_new();
-# else
- b->eb->base = event_init();
-# endif
-# endif
-#endif
+ b->eb->base = ub_default_event_base(sigs, &b->eb->secs, &b->eb->now);
if(!b->eb->base) {
free(b->eb);
free(b);
return NULL;
}
- comm_base_now(b);
- /* avoid event_get_method call which causes crashes even when
- * not printing, because its result is passed */
- verbose(VERB_ALGO,
-#if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
- "libev"
-#elif defined(USE_MINI_EVENT)
- "event "
-#else
- "libevent "
-#endif
- "%s uses %s method.",
- event_get_version(),
-#ifdef HAVE_EVENT_BASE_GET_METHOD
- event_base_get_method(b->eb->base)
-#else
- "not_obtainable"
-#endif
- );
+ ub_comm_base_now(b);
+ ub_get_event_sys(b->eb->base, &evnm, &evsys, &evmethod);
+ verbose(VERB_ALGO, "%s %s user %s method.", evnm, evsys, evmethod);
return b;
}
struct comm_base*
-comm_base_create_event(struct event_base* base)
+comm_base_create_event(struct ub_event_base* base)
{
struct comm_base* b = (struct comm_base*)calloc(1,
sizeof(struct comm_base));
@@ -251,7 +187,7 @@ comm_base_create_event(struct event_base* base)
return NULL;
}
b->eb->base = base;
- comm_base_now(b);
+ ub_comm_base_now(b);
return b;
}
@@ -261,18 +197,12 @@ comm_base_delete(struct comm_base* b)
if(!b)
return;
if(b->eb->slow_accept_enabled) {
- if(event_del(&b->eb->slow_accept) != 0) {
+ if(ub_event_del(b->eb->slow_accept) != 0) {
log_err("could not event_del slow_accept");
}
+ ub_event_free(b->eb->slow_accept);
}
-#ifdef USE_MINI_EVENT
- event_base_free(b->eb->base);
-#elif defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE)
- /* only libevent 1.2+ has it, but in 1.2 it is broken -
- assertion fails on signal handling ev that is not deleted
- in libevent 1.3c (event_base_once appears) this is fixed. */
- event_base_free(b->eb->base);
-#endif /* HAVE_EVENT_BASE_FREE and HAVE_EVENT_BASE_ONCE */
+ ub_event_base_free(b->eb->base);
b->eb->base = NULL;
free(b->eb);
free(b);
@@ -284,9 +214,10 @@ comm_base_delete_no_base(struct comm_base* b)
if(!b)
return;
if(b->eb->slow_accept_enabled) {
- if(event_del(&b->eb->slow_accept) != 0) {
+ if(ub_event_del(b->eb->slow_accept) != 0) {
log_err("could not event_del slow_accept");
}
+ ub_event_free(b->eb->slow_accept);
}
b->eb->base = NULL;
free(b->eb);
@@ -304,8 +235,8 @@ void
comm_base_dispatch(struct comm_base* b)
{
int retval;
- retval = event_base_dispatch(b->eb->base);
- if(retval != 0) {
+ retval = ub_event_base_dispatch(b->eb->base);
+ if(retval < 0) {
fatal_exit("event_dispatch returned error %d, "
"errno is %s", retval, strerror(errno));
}
@@ -313,7 +244,7 @@ comm_base_dispatch(struct comm_base* b)
void comm_base_exit(struct comm_base* b)
{
- if(event_base_loopexit(b->eb->base, NULL) != 0) {
+ if(ub_event_base_loopexit(b->eb->base) != 0) {
log_err("Could not loopexit");
}
}
@@ -326,7 +257,7 @@ void comm_base_set_slow_accept_handlers(struct comm_base* b,
b->cb_arg = arg;
}
-struct event_base* comm_base_internal(struct comm_base* b)
+struct ub_event_base* comm_base_internal(struct comm_base* b)
{
return b->eb->base;
}
@@ -648,10 +579,10 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
rep.c = (struct comm_point*)arg;
log_assert(rep.c->type == comm_udp);
- if(!(event&EV_READ))
+ if(!(event&UB_EV_READ))
return;
log_assert(rep.c && rep.c->buffer && rep.c->fd == fd);
- comm_base_now(rep.c->ev->base);
+ ub_comm_base_now(rep.c->ev->base);
for(i=0; i<NUM_UDP_PER_SELECT; i++) {
sldns_buffer_clear(rep.c->buffer);
rep.addrlen = (socklen_t)sizeof(rep.addr);
@@ -736,10 +667,10 @@ comm_point_udp_callback(int fd, short event, void* arg)
rep.c = (struct comm_point*)arg;
log_assert(rep.c->type == comm_udp);
- if(!(event&EV_READ))
+ if(!(event&UB_EV_READ))
return;
log_assert(rep.c && rep.c->buffer && rep.c->fd == fd);
- comm_base_now(rep.c->ev->base);
+ ub_comm_base_now(rep.c->ev->base);
for(i=0; i<NUM_UDP_PER_SELECT; i++) {
sldns_buffer_clear(rep.c->buffer);
rep.addrlen = (socklen_t)sizeof(rep.addr);
@@ -839,15 +770,16 @@ int comm_point_perform_accept(struct comm_point* c,
/* set timeout, no mallocs */
tv.tv_sec = NETEVENT_SLOW_ACCEPT_TIME/1000;
tv.tv_usec = NETEVENT_SLOW_ACCEPT_TIME%1000;
- event_set(&b->eb->slow_accept, -1, EV_TIMEOUT,
+ b->eb->slow_accept = ub_event_new(b->eb->base,
+ -1, UB_EV_TIMEOUT,
comm_base_handle_slow_accept, b);
- if(event_base_set(b->eb->base,
- &b->eb->slow_accept) != 0) {
+ if(b->eb->slow_accept == NULL) {
/* we do not want to log here, because
* that would spam the logfiles.
* error: "event_base_set failed." */
}
- if(event_add(&b->eb->slow_accept, &tv) != 0) {
+ else if(ub_event_add(b->eb->slow_accept, &tv)
+ != 0) {
/* we do not want to log here,
* error: "event_add failed." */
}
@@ -861,7 +793,7 @@ int comm_point_perform_accept(struct comm_point* c,
WSAGetLastError() == WSAECONNRESET)
return -1;
if(WSAGetLastError() == WSAEWOULDBLOCK) {
- winsock_tcp_wouldblock(&c->ev->ev, EV_READ);
+ ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ);
return -1;
}
log_err_addr("accept failed", wsa_strerror(WSAGetLastError()),
@@ -885,14 +817,14 @@ static long win_bio_cb(BIO *b, int oper, const char* ATTR_UNUSED(argp),
if( (oper == (BIO_CB_READ|BIO_CB_RETURN) && argl == 0) ||
(oper == (BIO_CB_GETS|BIO_CB_RETURN) && argl == 0)) {
if(WSAGetLastError() == WSAEWOULDBLOCK)
- winsock_tcp_wouldblock((struct event*)
- BIO_get_callback_arg(b), EV_READ);
+ ub_winsock_tcp_wouldblock((struct ub_event*)
+ BIO_get_callback_arg(b), UB_EV_READ);
}
if( (oper == (BIO_CB_WRITE|BIO_CB_RETURN) && argl == 0) ||
(oper == (BIO_CB_PUTS|BIO_CB_RETURN) && argl == 0)) {
if(WSAGetLastError() == WSAEWOULDBLOCK)
- winsock_tcp_wouldblock((struct event*)
- BIO_get_callback_arg(b), EV_WRITE);
+ ub_winsock_tcp_wouldblock((struct ub_event*)
+ BIO_get_callback_arg(b), UB_EV_WRITE);
}
/* return original return value */
return retvalue;
@@ -905,9 +837,9 @@ comm_point_tcp_win_bio_cb(struct comm_point* c, void* thessl)
SSL* ssl = (SSL*)thessl;
/* set them both just in case, but usually they are the same BIO */
BIO_set_callback(SSL_get_rbio(ssl), &win_bio_cb);
- BIO_set_callback_arg(SSL_get_rbio(ssl), (char*)&c->ev->ev);
+ BIO_set_callback_arg(SSL_get_rbio(ssl), (char*)c->ev->ev);
BIO_set_callback(SSL_get_wbio(ssl), &win_bio_cb);
- BIO_set_callback_arg(SSL_get_wbio(ssl), (char*)&c->ev->ev);
+ BIO_set_callback_arg(SSL_get_wbio(ssl), (char*)c->ev->ev);
}
#endif
@@ -917,11 +849,11 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
struct comm_point* c = (struct comm_point*)arg, *c_hdl;
int new_fd;
log_assert(c->type == comm_tcp_accept);
- if(!(event & EV_READ)) {
+ if(!(event & UB_EV_READ)) {
log_info("ignoring tcp accept event %d", (int)event);
return;
}
- comm_base_now(c->ev->base);
+ ub_comm_base_now(c->ev->base);
/* find free tcp handler. */
if(!c->tcp_free) {
log_warn("accepted too many tcp, connections full");
@@ -1297,7 +1229,8 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok)
if(WSAGetLastError() == WSAEINPROGRESS)
return 1;
if(WSAGetLastError() == WSAEWOULDBLOCK) {
- winsock_tcp_wouldblock(&c->ev->ev, EV_READ);
+ ub_winsock_tcp_wouldblock(c->ev->ev,
+ UB_EV_READ);
return 1;
}
log_err_addr("read (in tcp s)",
@@ -1342,7 +1275,7 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok)
if(WSAGetLastError() == WSAEINPROGRESS)
return 1;
if(WSAGetLastError() == WSAEWOULDBLOCK) {
- winsock_tcp_wouldblock(&c->ev->ev, EV_READ);
+ ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ);
return 1;
}
log_err_addr("read (in tcp r)",
@@ -1401,7 +1334,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
if(error == WSAEINPROGRESS)
return 1;
else if(error == WSAEWOULDBLOCK) {
- winsock_tcp_wouldblock(&c->ev->ev, EV_WRITE);
+ ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE);
return 1;
} else if(error != 0 && verbosity < 2)
return 0;
@@ -1451,7 +1384,8 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
if(WSAGetLastError() == WSAEINPROGRESS)
return 1;
if(WSAGetLastError() == WSAEWOULDBLOCK) {
- winsock_tcp_wouldblock(&c->ev->ev, EV_WRITE);
+ ub_winsock_tcp_wouldblock(c->ev->ev,
+ UB_EV_WRITE);
return 1;
}
log_err_addr("tcp send s",
@@ -1483,7 +1417,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
if(WSAGetLastError() == WSAEINPROGRESS)
return 1;
if(WSAGetLastError() == WSAEWOULDBLOCK) {
- winsock_tcp_wouldblock(&c->ev->ev, EV_WRITE);
+ ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE);
return 1;
}
log_err_addr("tcp send r", wsa_strerror(WSAGetLastError()),
@@ -1505,9 +1439,9 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
{
struct comm_point* c = (struct comm_point*)arg;
log_assert(c->type == comm_tcp);
- comm_base_now(c->ev->base);
+ ub_comm_base_now(c->ev->base);
- if(event&EV_READ) {
+ if(event&UB_EV_READ) {
if(!comm_point_tcp_handle_read(fd, c, 0)) {
reclaim_tcp_handler(c);
if(!c->tcp_do_close) {
@@ -1519,7 +1453,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
}
return;
}
- if(event&EV_WRITE) {
+ if(event&UB_EV_WRITE) {
if(!comm_point_tcp_handle_write(fd, c)) {
reclaim_tcp_handler(c);
if(!c->tcp_do_close) {
@@ -1531,7 +1465,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
}
return;
}
- if(event&EV_TIMEOUT) {
+ if(event&UB_EV_TIMEOUT) {
verbose(VERB_QUERY, "tcp took too long, dropped");
reclaim_tcp_handler(c);
if(!c->tcp_do_close) {
@@ -1548,9 +1482,9 @@ void comm_point_local_handle_callback(int fd, short event, void* arg)
{
struct comm_point* c = (struct comm_point*)arg;
log_assert(c->type == comm_local);
- comm_base_now(c->ev->base);
+ ub_comm_base_now(c->ev->base);
- if(event&EV_READ) {
+ if(event&UB_EV_READ) {
if(!comm_point_tcp_handle_read(fd, c, 1)) {
fptr_ok(fptr_whitelist_comm_point(c->callback));
(void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED,
@@ -1567,9 +1501,9 @@ void comm_point_raw_handle_callback(int ATTR_UNUSED(fd),
struct comm_point* c = (struct comm_point*)arg;
int err = NETEVENT_NOERROR;
log_assert(c->type == comm_raw);
- comm_base_now(c->ev->base);
+ ub_comm_base_now(c->ev->base);
- if(event&EV_TIMEOUT)
+ if(event&UB_EV_TIMEOUT)
err = NETEVENT_TIMEOUT;
fptr_ok(fptr_whitelist_comm_point_raw(c->callback));
(void)(*c->callback)(c, c->cb_arg, err, NULL);
@@ -1609,15 +1543,16 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer,
c->inuse = 0;
c->callback = callback;
c->cb_arg = callback_arg;
- evbits = EV_READ | EV_PERSIST;
- /* libevent stuff */
- event_set(&c->ev->ev, c->fd, evbits, comm_point_udp_callback, c);
- if(event_base_set(base->eb->base, &c->ev->ev) != 0) {
+ evbits = UB_EV_READ | UB_EV_PERSIST;
+ /* ub_event stuff */
+ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
+ comm_point_udp_callback, c);
+ if(c->ev->ev == NULL) {
log_err("could not baseset udp event");
comm_point_delete(c);
return NULL;
}
- if(fd!=-1 && event_add(&c->ev->ev, c->timeout) != 0 ) {
+ if(fd!=-1 && ub_event_add(c->ev->ev, c->timeout) != 0 ) {
log_err("could not add udp event");
comm_point_delete(c);
return NULL;
@@ -1660,15 +1595,16 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd,
c->tcp_check_nb_connect = 0;
c->callback = callback;
c->cb_arg = callback_arg;
- evbits = EV_READ | EV_PERSIST;
- /* libevent stuff */
- event_set(&c->ev->ev, c->fd, evbits, comm_point_udp_ancil_callback, c);
- if(event_base_set(base->eb->base, &c->ev->ev) != 0) {
+ evbits = UB_EV_READ | UB_EV_PERSIST;
+ /* ub_event stuff */
+ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
+ comm_point_udp_ancil_callback, c);
+ if(c->ev->ev == NULL) {
log_err("could not baseset udp event");
comm_point_delete(c);
return NULL;
}
- if(fd!=-1 && event_add(&c->ev->ev, c->timeout) != 0 ) {
+ if(fd!=-1 && ub_event_add(c->ev->ev, c->timeout) != 0 ) {
log_err("could not add udp event");
comm_point_delete(c);
return NULL;
@@ -1725,10 +1661,11 @@ comm_point_create_tcp_handler(struct comm_base *base,
/* add to parent free list */
c->tcp_free = parent->tcp_free;
parent->tcp_free = c;
- /* libevent stuff */
- evbits = EV_PERSIST | EV_READ | EV_TIMEOUT;
- event_set(&c->ev->ev, c->fd, evbits, comm_point_tcp_handle_callback, c);
- if(event_base_set(base->eb->base, &c->ev->ev) != 0)
+ /* ub_event stuff */
+ evbits = UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT;
+ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
+ comm_point_tcp_handle_callback, c);
+ if(c->ev->ev == NULL)
{
log_err("could not basetset tcphdl event");
parent->tcp_free = c->tcp_free;
@@ -1780,17 +1717,20 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, size_t bufsize,
c->tcp_check_nb_connect = 0;
c->callback = NULL;
c->cb_arg = NULL;
- evbits = EV_READ | EV_PERSIST;
- /* libevent stuff */
- event_set(&c->ev->ev, c->fd, evbits, comm_point_tcp_accept_callback, c);
- if(event_base_set(base->eb->base, &c->ev->ev) != 0 ||
- event_add(&c->ev->ev, c->timeout) != 0 )
- {
+ evbits = UB_EV_READ | UB_EV_PERSIST;
+ /* ub_event stuff */
+ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
+ comm_point_tcp_accept_callback, c);
+ if(c->ev->ev == NULL) {
+ log_err("could not baseset tcpacc event");
+ comm_point_delete(c);
+ return NULL;
+ }
+ if (ub_event_add(c->ev->ev, c->timeout) != 0) {
log_err("could not add tcpacc event");
comm_point_delete(c);
return NULL;
}
-
/* now prealloc the tcp handlers */
for(i=0; i<num; i++) {
c->tcp_handlers[i] = comm_point_create_tcp_handler(base,
@@ -1843,11 +1783,12 @@ comm_point_create_tcp_out(struct comm_base *base, size_t bufsize,
c->repinfo.c = c;
c->callback = callback;
c->cb_arg = callback_arg;
- evbits = EV_PERSIST | EV_WRITE;
- event_set(&c->ev->ev, c->fd, evbits, comm_point_tcp_handle_callback, c);
- if(event_base_set(base->eb->base, &c->ev->ev) != 0)
+ evbits = UB_EV_PERSIST | UB_EV_WRITE;
+ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
+ comm_point_tcp_handle_callback, c);
+ if(c->ev->ev == NULL)
{
- log_err("could not basetset tcpout event");
+ log_err("could not baseset tcpout event");
sldns_buffer_free(c->buffer);
free(c->ev);
free(c);
@@ -1895,14 +1836,19 @@ comm_point_create_local(struct comm_base *base, int fd, size_t bufsize,
c->tcp_check_nb_connect = 0;
c->callback = callback;
c->cb_arg = callback_arg;
- /* libevent stuff */
- evbits = EV_PERSIST | EV_READ;
- event_set(&c->ev->ev, c->fd, evbits, comm_point_local_handle_callback,
- c);
- if(event_base_set(base->eb->base, &c->ev->ev) != 0 ||
- event_add(&c->ev->ev, c->timeout) != 0 )
- {
+ /* ub_event stuff */
+ evbits = UB_EV_PERSIST | UB_EV_READ;
+ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
+ comm_point_local_handle_callback, c);
+ if(c->ev->ev == NULL) {
+ log_err("could not baseset localhdl event");
+ free(c->ev);
+ free(c);
+ return NULL;
+ }
+ if (ub_event_add(c->ev->ev, c->timeout) != 0) {
log_err("could not add localhdl event");
+ ub_event_free(c->ev->ev);
free(c->ev);
free(c);
return NULL;
@@ -1943,16 +1889,21 @@ comm_point_create_raw(struct comm_base* base, int fd, int writing,
c->tcp_check_nb_connect = 0;
c->callback = callback;
c->cb_arg = callback_arg;
- /* libevent stuff */
+ /* ub_event stuff */
if(writing)
- evbits = EV_PERSIST | EV_WRITE;
- else evbits = EV_PERSIST | EV_READ;
- event_set(&c->ev->ev, c->fd, evbits, comm_point_raw_handle_callback,
- c);
- if(event_base_set(base->eb->base, &c->ev->ev) != 0 ||
- event_add(&c->ev->ev, c->timeout) != 0 )
- {
+ evbits = UB_EV_PERSIST | UB_EV_WRITE;
+ else evbits = UB_EV_PERSIST | UB_EV_READ;
+ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits,
+ comm_point_raw_handle_callback, c);
+ if(c->ev->ev == NULL) {
+ log_err("could not baseset rawhdl event");
+ free(c->ev);
+ free(c);
+ return NULL;
+ }
+ if (ub_event_add(c->ev->ev, c->timeout) != 0) {
log_err("could not add rawhdl event");
+ ub_event_free(c->ev->ev);
free(c->ev);
free(c);
return NULL;
@@ -1966,7 +1917,7 @@ comm_point_close(struct comm_point* c)
if(!c)
return;
if(c->fd != -1)
- if(event_del(&c->ev->ev) != 0) {
+ if(ub_event_del(c->ev->ev) != 0) {
log_err("could not event_del on close");
}
/* close fd after removing from event lists, or epoll.. is messed up */
@@ -2002,6 +1953,7 @@ comm_point_delete(struct comm_point* c)
free(c->timeout);
if(c->type == comm_tcp || c->type == comm_local)
sldns_buffer_free(c->buffer);
+ ub_event_free(c->ev->ev);
free(c->ev);
free(c);
}
@@ -2051,7 +2003,7 @@ void
comm_point_stop_listening(struct comm_point* c)
{
verbose(VERB_ALGO, "comm point stop listening %d", c->fd);
- if(event_del(&c->ev->ev) != 0) {
+ if(ub_event_del(c->ev->ev) != 0) {
log_err("event_del error to stoplisten");
}
}
@@ -2074,17 +2026,17 @@ comm_point_start_listening(struct comm_point* c, int newfd, int sec)
return;
}
}
- c->ev->ev.ev_events |= EV_TIMEOUT;
+ ub_event_add_bits(c->ev->ev, UB_EV_TIMEOUT);
#ifndef S_SPLINT_S /* splint fails on struct timeval. */
c->timeout->tv_sec = sec;
c->timeout->tv_usec = 0;
#endif /* S_SPLINT_S */
}
if(c->type == comm_tcp) {
- c->ev->ev.ev_events &= ~(EV_READ|EV_WRITE);
+ ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE);
if(c->tcp_is_reading)
- c->ev->ev.ev_events |= EV_READ;
- else c->ev->ev.ev_events |= EV_WRITE;
+ ub_event_add_bits(c->ev->ev, UB_EV_READ);
+ else ub_event_add_bits(c->ev->ev, UB_EV_WRITE);
}
if(newfd != -1) {
if(c->fd != -1) {
@@ -2095,9 +2047,9 @@ comm_point_start_listening(struct comm_point* c, int newfd, int sec)
#endif
}
c->fd = newfd;
- c->ev->ev.ev_fd = c->fd;
+ ub_event_set_fd(c->ev->ev, c->fd);
}
- if(event_add(&c->ev->ev, sec==0?NULL:c->timeout) != 0) {
+ if(ub_event_add(c->ev->ev, sec==0?NULL:c->timeout) != 0) {
log_err("event_add failed. in cpsl.");
}
}
@@ -2105,13 +2057,13 @@ comm_point_start_listening(struct comm_point* c, int newfd, int sec)
void comm_point_listen_for_rw(struct comm_point* c, int rd, int wr)
{
verbose(VERB_ALGO, "comm point listen_for_rw %d %d", c->fd, wr);
- if(event_del(&c->ev->ev) != 0) {
+ if(ub_event_del(c->ev->ev) != 0) {
log_err("event_del error to cplf");
}
- c->ev->ev.ev_events &= ~(EV_READ|EV_WRITE);
- if(rd) c->ev->ev.ev_events |= EV_READ;
- if(wr) c->ev->ev.ev_events |= EV_WRITE;
- if(event_add(&c->ev->ev, c->timeout) != 0) {
+ ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE);
+ if(rd) ub_event_add_bits(c->ev->ev, UB_EV_READ);
+ if(wr) ub_event_add_bits(c->ev->ev, UB_EV_WRITE);
+ if(ub_event_add(c->ev->ev, c->timeout) != 0) {
log_err("event_add failed. in cplf.");
}
}
@@ -2137,29 +2089,24 @@ size_t comm_point_get_mem(struct comm_point* c)
struct comm_timer*
comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg)
{
- struct comm_timer *tm = (struct comm_timer*)calloc(1,
- sizeof(struct comm_timer));
- if(!tm)
- return NULL;
- tm->ev_timer = (struct internal_timer*)calloc(1,
+ struct internal_timer *tm = (struct internal_timer*)calloc(1,
sizeof(struct internal_timer));
- if(!tm->ev_timer) {
+ if(!tm) {
log_err("malloc failed");
- free(tm);
return NULL;
}
- tm->ev_timer->base = base;
- tm->callback = cb;
- tm->cb_arg = cb_arg;
- event_set(&tm->ev_timer->ev, -1, EV_TIMEOUT,
- comm_timer_callback, tm);
- if(event_base_set(base->eb->base, &tm->ev_timer->ev) != 0) {
+ tm->super.ev_timer = tm;
+ tm->base = base;
+ tm->super.callback = cb;
+ tm->super.cb_arg = cb_arg;
+ tm->ev = ub_event_new(base->eb->base, -1, UB_EV_TIMEOUT,
+ comm_timer_callback, &tm->super);
+ if(tm->ev == NULL) {
log_err("timer_create: event_base_set failed.");
- free(tm->ev_timer);
free(tm);
return NULL;
}
- return tm;
+ return &tm->super;
}
void
@@ -2167,7 +2114,7 @@ comm_timer_disable(struct comm_timer* timer)
{
if(!timer)
return;
- evtimer_del(&timer->ev_timer->ev);
+ ub_timer_del(timer->ev_timer->ev);
timer->ev_timer->enabled = 0;
}
@@ -2177,12 +2124,8 @@ comm_timer_set(struct comm_timer* timer, struct timeval* tv)
log_assert(tv);
if(timer->ev_timer->enabled)
comm_timer_disable(timer);
- event_set(&timer->ev_timer->ev, -1, EV_TIMEOUT,
- comm_timer_callback, timer);
- if(event_base_set(timer->ev_timer->base->eb->base,
- &timer->ev_timer->ev) != 0)
- log_err("comm_timer_set: set_base failed.");
- if(evtimer_add(&timer->ev_timer->ev, tv) != 0)
+ if(ub_timer_add(timer->ev_timer->ev, timer->ev_timer->base->eb->base,
+ comm_timer_callback, timer, tv) != 0)
log_err("comm_timer_set: evtimer_add failed.");
timer->ev_timer->enabled = 1;
}
@@ -2193,17 +2136,20 @@ comm_timer_delete(struct comm_timer* timer)
if(!timer)
return;
comm_timer_disable(timer);
+ /* Free the sub struct timer->ev_timer derived from the super struct timer.
+ * i.e. assert(timer == timer->ev_timer)
+ */
+ ub_event_free(timer->ev_timer->ev);
free(timer->ev_timer);
- free(timer);
}
void
comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg)
{
struct comm_timer* tm = (struct comm_timer*)arg;
- if(!(event&EV_TIMEOUT))
+ if(!(event&UB_EV_TIMEOUT))
return;
- comm_base_now(tm->ev_timer->base);
+ ub_comm_base_now(tm->ev_timer->base);
tm->ev_timer->enabled = 0;
fptr_ok(fptr_whitelist_comm_timer(tm->callback));
(*tm->callback)(tm->cb_arg);
@@ -2216,9 +2162,9 @@ comm_timer_is_set(struct comm_timer* timer)
}
size_t
-comm_timer_get_mem(struct comm_timer* timer)
+comm_timer_get_mem(struct comm_timer* ATTR_UNUSED(timer))
{
- return sizeof(*timer) + sizeof(struct internal_timer);
+ return sizeof(struct internal_timer);
}
struct comm_signal*
@@ -2242,9 +2188,9 @@ void
comm_signal_callback(int sig, short event, void* arg)
{
struct comm_signal* comsig = (struct comm_signal*)arg;
- if(!(event & EV_SIGNAL))
+ if(!(event & UB_EV_SIGNAL))
return;
- comm_base_now(comsig->base);
+ ub_comm_base_now(comsig->base);
fptr_ok(fptr_whitelist_comm_signal(comsig->callback));
(*comsig->callback)(sig, comsig->cb_arg);
}
@@ -2260,14 +2206,16 @@ comm_signal_bind(struct comm_signal* comsig, int sig)
}
log_assert(comsig);
/* add signal event */
- signal_set(&entry->ev, sig, comm_signal_callback, comsig);
- if(event_base_set(comsig->base->eb->base, &entry->ev) != 0) {
- log_err("Could not set signal base");
+ entry->ev = ub_signal_new(comsig->base->eb->base, sig,
+ comm_signal_callback, comsig);
+ if(entry->ev == NULL) {
+ log_err("Could not create signal event");
free(entry);
return 0;
}
- if(signal_add(&entry->ev, NULL) != 0) {
+ if(ub_signal_add(entry->ev, NULL) != 0) {
log_err("Could not add signal handler");
+ ub_event_free(entry->ev);
free(entry);
return 0;
}
@@ -2286,7 +2234,8 @@ comm_signal_delete(struct comm_signal* comsig)
p=comsig->ev_signal;
while(p) {
np = p->next;
- signal_del(&p->ev);
+ ub_signal_del(p->ev);
+ ub_event_free(p->ev);
free(p);
p = np;
}
diff --git a/util/netevent.h b/util/netevent.h
index 4b87cdba9e51..bdcddd848bd0 100644
--- a/util/netevent.h
+++ b/util/netevent.h
@@ -63,12 +63,12 @@
struct sldns_buffer;
struct comm_point;
struct comm_reply;
-struct event_base;
+struct ub_event_base;
/* internal event notification data storage structure. */
struct internal_event;
struct internal_base;
-struct internal_timer;
+struct internal_timer; /* A sub struct of the comm_timer super struct */
/** callback from communication point function type */
typedef int comm_point_callback_t(struct comm_point*, void*, int,
@@ -265,7 +265,7 @@ struct comm_point {
* Structure only for making timeout events.
*/
struct comm_timer {
- /** the internal event stuff */
+ /** the internal event stuff (derived) */
struct internal_timer* ev_timer;
/** callback function, takes user arg only */
@@ -301,12 +301,12 @@ struct comm_signal {
struct comm_base* comm_base_create(int sigs);
/**
- * Create comm base that uses the given event_base (underlying event
- * mechanism pointer).
- * @param base: underlying lib event base.
+ * Create comm base that uses the given ub_event_base (underlying pluggable
+ * event mechanism pointer).
+ * @param base: underlying pluggable event base.
* @return: the new comm base. NULL on error.
*/
-struct comm_base* comm_base_create_event(struct event_base* base);
+struct comm_base* comm_base_create_event(struct ub_event_base* base);
/**
* Delete comm base structure but not the underlying lib event base.
@@ -357,9 +357,9 @@ void comm_base_set_slow_accept_handlers(struct comm_base* b,
/**
* Access internal data structure (for util/tube.c on windows)
* @param b: comm base
- * @return event_base. Could be libevent, or internal event handler.
+ * @return ub_event_base.
*/
-struct event_base* comm_base_internal(struct comm_base* b);
+struct ub_event_base* comm_base_internal(struct comm_base* b);
/**
* Create an UDP comm point. Calls malloc.
diff --git a/util/tube.c b/util/tube.c
index 0535474386b5..e525f1ccd8aa 100644
--- a/util/tube.c
+++ b/util/tube.c
@@ -44,6 +44,7 @@
#include "util/net_help.h"
#include "util/netevent.h"
#include "util/fptr_wlist.h"
+#include "util/ub_event.h"
#ifndef USE_WINSOCK
/* on unix */
@@ -303,6 +304,8 @@ int tube_write_msg(struct tube* tube, uint8_t* buf, uint32_t len,
d = r;
while(d != (ssize_t)sizeof(len)) {
if((r=write(fd, ((char*)&len)+d, sizeof(len)-d)) == -1) {
+ if(errno == EAGAIN)
+ continue; /* temporarily unavail: try again*/
log_err("tube msg write failed: %s", strerror(errno));
(void)fd_set_nonblock(fd);
return 0;
@@ -312,6 +315,8 @@ int tube_write_msg(struct tube* tube, uint8_t* buf, uint32_t len,
d = 0;
while(d != (ssize_t)len) {
if((r=write(fd, buf+d, len-d)) == -1) {
+ if(errno == EAGAIN)
+ continue; /* temporarily unavail: try again*/
log_err("tube msg write failed: %s", strerror(errno));
(void)fd_set_nonblock(fd);
return 0;
@@ -537,7 +542,7 @@ void tube_close_write(struct tube* ATTR_UNUSED(tube))
void tube_remove_bg_listen(struct tube* tube)
{
verbose(VERB_ALGO, "tube remove_bg_listen");
- winsock_unregister_wsaevent(&tube->ev_listen);
+ ub_winsock_unregister_wsaevent(tube->ev_listen);
}
void tube_remove_bg_write(struct tube* tube)
@@ -668,8 +673,9 @@ int tube_setup_bg_listen(struct tube* tube, struct comm_base* base,
tube->listen_arg = arg;
if(!comm_base_internal(base))
return 1; /* ignore when no comm base - testing */
- return winsock_register_wsaevent(comm_base_internal(base),
- &tube->ev_listen, tube->event, &tube_handle_signal, tube);
+ tube->ev_listen = ub_winsock_register_wsaevent(
+ comm_base_internal(base), tube->event, &tube_handle_signal, tube);
+ return tube->ev_listen ? 1 : 0;
}
int tube_setup_bg_write(struct tube* ATTR_UNUSED(tube),
diff --git a/util/tube.h b/util/tube.h
index 6cc60502b34b..7971b776ae1f 100644
--- a/util/tube.h
+++ b/util/tube.h
@@ -48,7 +48,6 @@ struct tube;
struct tube_res_list;
#ifdef USE_WINSOCK
#include "util/locks.h"
-#include "util/winsock_event.h"
#endif
/**
@@ -99,7 +98,7 @@ struct tube {
/** the windows sockets event (signaled if items in pipe) */
WSAEVENT event;
/** winsock event storage when registered with event base */
- struct event ev_listen;
+ struct ub_event* ev_listen;
/** lock on the list of outstanding items */
lock_basic_t res_lock;
diff --git a/util/ub_event.c b/util/ub_event.c
new file mode 100644
index 000000000000..af2a18ea0fc8
--- /dev/null
+++ b/util/ub_event.c
@@ -0,0 +1,448 @@
+/*
+ * util/ub_event.c - directly call libevent (compatability) functions
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file contains and implementation for the indirection layer for pluggable
+ * events that transparently passes it either directly to libevent, or calls
+ * the libevent compatibility layer functions.
+ */
+#include "config.h"
+#include <sys/time.h>
+#include "util/ub_event.h"
+#include "util/log.h"
+#include "util/netevent.h"
+#include "util/tube.h"
+
+/* We define libevent structures here to hide the libevent stuff. */
+
+#ifdef USE_MINI_EVENT
+# ifdef USE_WINSOCK
+# include "util/winsock_event.h"
+# else
+# include "util/mini_event.h"
+# endif /* USE_WINSOCK */
+#else /* USE_MINI_EVENT */
+ /* we use libevent */
+# ifdef HAVE_EVENT_H
+# include <event.h>
+# else
+# include "event2/event.h"
+# include "event2/event_struct.h"
+# include "event2/event_compat.h"
+# endif
+#endif /* USE_MINI_EVENT */
+
+#if UB_EV_TIMEOUT != EV_TIMEOUT || UB_EV_READ != EV_READ || \
+ UB_EV_WRITE != EV_WRITE || UB_EV_SIGNAL != EV_SIGNAL || \
+ UB_EV_PERSIST != EV_PERSIST
+/* Only necessary for libev */
+# define NATIVE_BITS(b) ( \
+ (((b) & UB_EV_TIMEOUT) ? EV_TIMEOUT : 0) \
+ | (((b) & UB_EV_READ ) ? EV_READ : 0) \
+ | (((b) & UB_EV_WRITE ) ? EV_WRITE : 0) \
+ | (((b) & UB_EV_SIGNAL ) ? EV_SIGNAL : 0) \
+ | (((b) & UB_EV_PERSIST) ? EV_PERSIST : 0))
+
+# define UB_EV_BITS(b) ( \
+ (((b) & EV_TIMEOUT) ? UB_EV_TIMEOUT : 0) \
+ | (((b) & EV_READ ) ? UB_EV_READ : 0) \
+ | (((b) & EV_WRITE ) ? UB_EV_WRITE : 0) \
+ | (((b) & EV_SIGNAL ) ? UB_EV_SIGNAL : 0) \
+ | (((b) & EV_PERSIST) ? UB_EV_PERSIST : 0))
+
+# define UB_EV_BITS_CB(C) void my_ ## C (int fd, short bits, void *arg) \
+ { (C)(fd, UB_EV_BITS(bits), arg); }
+
+UB_EV_BITS_CB(comm_point_udp_callback);
+UB_EV_BITS_CB(comm_point_udp_ancil_callback)
+UB_EV_BITS_CB(comm_point_tcp_accept_callback)
+UB_EV_BITS_CB(comm_point_tcp_handle_callback)
+UB_EV_BITS_CB(comm_timer_callback)
+UB_EV_BITS_CB(comm_signal_callback)
+UB_EV_BITS_CB(comm_point_local_handle_callback)
+UB_EV_BITS_CB(comm_point_raw_handle_callback)
+UB_EV_BITS_CB(tube_handle_signal)
+UB_EV_BITS_CB(comm_base_handle_slow_accept)
+
+static void (*NATIVE_BITS_CB(void (*cb)(int, short, void*)))(int, short, void*)
+{
+ if(cb == comm_point_udp_callback)
+ return my_comm_point_udp_callback;
+ else if(cb == comm_point_udp_ancil_callback)
+ return my_comm_point_udp_ancil_callback;
+ else if(cb == comm_point_tcp_accept_callback)
+ return my_comm_point_tcp_accept_callback;
+ else if(cb == comm_point_tcp_handle_callback)
+ return my_comm_point_tcp_handle_callback;
+ else if(cb == comm_timer_callback)
+ return my_comm_timer_callback;
+ else if(cb == comm_signal_callback)
+ return my_comm_signal_callback;
+ else if(cb == comm_point_local_handle_callback)
+ return my_comm_point_local_handle_callback;
+ else if(cb == comm_point_raw_handle_callback)
+ return my_comm_point_raw_handle_callback;
+ else if(cb == tube_handle_signal)
+ return my_tube_handle_signal;
+ else if(cb == comm_base_handle_slow_accept)
+ return my_comm_base_handle_slow_accept;
+ else
+ return NULL;
+}
+#else
+# define NATIVE_BITS(b) (b)
+# define NATIVE_BITS_CB(c) (c)
+#endif
+
+#ifndef EVFLAG_AUTO
+#define EVFLAG_AUTO 0
+#endif
+
+#define AS_EVENT_BASE(x) \
+ (((union {struct ub_event_base* a; struct event_base* b;})x).b)
+#define AS_UB_EVENT_BASE(x) \
+ (((union {struct event_base* a; struct ub_event_base* b;})x).b)
+#define AS_EVENT(x) \
+ (((union {struct ub_event* a; struct event* b;})x).b)
+#define AS_UB_EVENT(x) \
+ (((union {struct event* a; struct ub_event* b;})x).b)
+
+const char* ub_event_get_version()
+{
+ return event_get_version();
+}
+
+#if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EVBACKEND_SELECT)
+static const char* ub_ev_backend2str(int b)
+{
+ switch(b) {
+ case EVBACKEND_SELECT: return "select";
+ case EVBACKEND_POLL: return "poll";
+ case EVBACKEND_EPOLL: return "epoll";
+ case EVBACKEND_KQUEUE: return "kqueue";
+ case EVBACKEND_DEVPOLL: return "devpoll";
+ case EVBACKEND_PORT: return "evport";
+ }
+ return "unknown";
+}
+#endif
+
+void
+ub_get_event_sys(struct ub_event_base* base, const char** n, const char** s,
+ const char** m)
+{
+#ifdef USE_WINSOCK
+ (void)base;
+ *n = "event";
+ *s = "winsock";
+ *m = "WSAWaitForMultipleEvents";
+#elif defined(USE_MINI_EVENT)
+ (void)base;
+ *n = "mini-event";
+ *s = "internal";
+ *m = "select";
+#else
+ struct event_base* b = AS_EVENT_BASE(base);
+ *s = event_get_version();
+# if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
+ *n = "libev";
+ if (!b)
+ b = (struct event_base*)ev_default_loop(EVFLAG_AUTO);
+# ifdef EVBACKEND_SELECT
+ *m = ub_ev_backend2str(ev_backend((struct ev_loop*)b));
+# else
+ *m = "not obtainable";
+# endif
+# elif defined(HAVE_EVENT_BASE_GET_METHOD)
+ *n = "libevent";
+ if (!b)
+ b = event_base_new();
+ *m = event_base_get_method(b);
+# else
+ *n = "unknown";
+ *m = "not obtainable";
+ (void)b;
+# endif
+# ifdef HAVE_EVENT_BASE_FREE
+ if (b && b != AS_EVENT_BASE(base))
+ event_base_free(b);
+# endif
+#endif
+}
+
+struct ub_event_base*
+ub_default_event_base(int sigs, time_t* time_secs, struct timeval* time_tv)
+{
+ void* base;
+
+ (void)base;
+#ifdef USE_MINI_EVENT
+ (void)sigs;
+ /* use mini event time-sharing feature */
+ base = event_init(time_secs, time_tv);
+#else
+ (void)time_secs;
+ (void)time_tv;
+# if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
+ /* libev */
+ if(sigs)
+ base = ev_default_loop(EVFLAG_AUTO);
+ else
+ base = ev_loop_new(EVFLAG_AUTO);
+# else
+ (void)sigs;
+# ifdef HAVE_EVENT_BASE_NEW
+ base = event_base_new();
+# else
+ base = event_init();
+# endif
+# endif
+#endif
+ return (struct ub_event_base*)base;
+}
+
+struct ub_event_base *
+ub_libevent_event_base(struct event_base* libevent_base)
+{
+#ifdef USE_MINI_EVENT
+ (void)libevent_base;
+ return NULL;
+#else
+ return AS_UB_EVENT_BASE(libevent_base);
+#endif
+}
+
+struct event_base *
+ub_libevent_get_event_base(struct ub_event_base* base)
+{
+#ifdef USE_MINI_EVENT
+ (void)base;
+ return NULL;
+#else
+ return AS_EVENT_BASE(base);
+#endif
+}
+
+void
+ub_event_base_free(struct ub_event_base* base)
+{
+#ifdef USE_MINI_EVENT
+ event_base_free(AS_EVENT_BASE(base));
+#elif defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE)
+ /* only libevent 1.2+ has it, but in 1.2 it is broken -
+ assertion fails on signal handling ev that is not deleted
+ in libevent 1.3c (event_base_once appears) this is fixed. */
+ event_base_free(AS_EVENT_BASE(base));
+#else
+ (void)base;
+#endif /* HAVE_EVENT_BASE_FREE and HAVE_EVENT_BASE_ONCE */
+}
+
+int
+ub_event_base_dispatch(struct ub_event_base* base)
+{
+ return event_base_dispatch(AS_EVENT_BASE(base));
+}
+
+int
+ub_event_base_loopexit(struct ub_event_base* base)
+{
+ return event_base_loopexit(AS_EVENT_BASE(base), NULL);
+}
+
+struct ub_event*
+ub_event_new(struct ub_event_base* base, int fd, short bits,
+ void (*cb)(int, short, void*), void* arg)
+{
+ struct event *ev = (struct event*)calloc(1, sizeof(struct event));
+
+ if (!ev)
+ return NULL;
+
+ event_set(ev, fd, NATIVE_BITS(bits), NATIVE_BITS_CB(cb), arg);
+ if (event_base_set(AS_EVENT_BASE(base), ev) != 0) {
+ free(ev);
+ return NULL;
+ }
+ return AS_UB_EVENT(ev);
+}
+
+struct ub_event*
+ub_signal_new(struct ub_event_base* base, int fd,
+ void (*cb)(int, short, void*), void* arg)
+{
+ struct event *ev = (struct event*)calloc(1, sizeof(struct event));
+
+ if (!ev)
+ return NULL;
+
+ signal_set(ev, fd, NATIVE_BITS_CB(cb), arg);
+ if (event_base_set(AS_EVENT_BASE(base), ev) != 0) {
+ free(ev);
+ return NULL;
+ }
+ return AS_UB_EVENT(ev);
+}
+
+struct ub_event*
+ub_winsock_register_wsaevent(struct ub_event_base* base, void* wsaevent,
+ void (*cb)(int, short, void*), void* arg)
+{
+#if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
+ struct event *ev = (struct event*)calloc(1, sizeof(struct event));
+
+ if (!ev)
+ return NULL;
+
+ if (winsock_register_wsaevent(AS_EVENT_BASE(base), ev, wsaevent, cb,
+ arg))
+ return AS_UB_EVENT(ev);
+ free(ev);
+ return NULL;
+#else
+ (void)base;
+ (void)wsaevent;
+ (void)cb;
+ (void)arg;
+ return NULL;
+#endif
+}
+
+void
+ub_event_add_bits(struct ub_event* ev, short bits)
+{
+ AS_EVENT(ev)->ev_events |= NATIVE_BITS(bits);
+}
+
+void
+ub_event_del_bits(struct ub_event* ev, short bits)
+{
+ AS_EVENT(ev)->ev_events &= ~NATIVE_BITS(bits);
+}
+
+void
+ub_event_set_fd(struct ub_event* ev, int fd)
+{
+ AS_EVENT(ev)->ev_fd = fd;
+}
+
+void
+ub_event_free(struct ub_event* ev)
+{
+ if (ev)
+ free(AS_EVENT(ev));
+}
+
+int
+ub_event_add(struct ub_event* ev, struct timeval* tv)
+{
+ return event_add(AS_EVENT(ev), tv);
+}
+
+int
+ub_event_del(struct ub_event* ev)
+{
+ return event_del(AS_EVENT(ev));
+}
+
+int
+ub_timer_add(struct ub_event* ev, struct ub_event_base* base,
+ void (*cb)(int, short, void*), void* arg, struct timeval* tv)
+{
+ event_set(AS_EVENT(ev), -1, EV_TIMEOUT, NATIVE_BITS_CB(cb), arg);
+ if (event_base_set(AS_EVENT_BASE(base), AS_EVENT(ev)) != 0)
+ return -1;
+ return evtimer_add(AS_EVENT(ev), tv);
+}
+
+int
+ub_timer_del(struct ub_event* ev)
+{
+ return evtimer_del(AS_EVENT(ev));
+}
+
+int
+ub_signal_add(struct ub_event* ev, struct timeval* tv)
+{
+ return signal_add(AS_EVENT(ev), tv);
+}
+
+int
+ub_signal_del(struct ub_event* ev)
+{
+ return signal_del(AS_EVENT(ev));
+}
+
+void
+ub_winsock_unregister_wsaevent(struct ub_event* ev)
+{
+#if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
+ winsock_unregister_wsaevent(AS_EVENT(ev));
+ free(AS_EVENT(ev));
+#else
+ (void)ev;
+#endif
+}
+
+void
+ub_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits)
+{
+#if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
+ winsock_tcp_wouldblock(AS_EVENT(ev), NATIVE_BITS(eventbits));
+#else
+ (void)ev;
+ (void)eventbits;
+#endif
+}
+
+void ub_comm_base_now(struct comm_base* cb)
+{
+ #ifdef USE_MINI_EVENT
+/** minievent updates the time when it blocks. */
+ (void)cb; /* nothing to do */
+#else /* !USE_MINI_EVENT */
+/** fillup the time values in the event base */
+ time_t *tt;
+ struct timeval *tv;
+ comm_base_timept(cb, &tt, &tv);
+ if(gettimeofday(tv, NULL) < 0) {
+ log_err("gettimeofday: %s", strerror(errno));
+ }
+ *tt = tv->tv_sec;
+#endif /* USE_MINI_EVENT */
+}
+
diff --git a/util/ub_event.h b/util/ub_event.h
new file mode 100644
index 000000000000..cb42e7a7d23b
--- /dev/null
+++ b/util/ub_event.h
@@ -0,0 +1,127 @@
+/*
+ * util/ub_event.h - indirection layer for pluggable events
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file contains prototypes for event loop functions.
+ *
+ */
+
+#ifndef UB_EVENT_H
+#define UB_EVENT_H
+
+struct ub_event_base;
+struct ub_event;
+struct comm_base;
+struct event_base;
+
+/** event timeout */
+#define UB_EV_TIMEOUT 0x01
+/** event fd readable */
+#define UB_EV_READ 0x02
+/** event fd writable */
+#define UB_EV_WRITE 0x04
+/** event signal */
+#define UB_EV_SIGNAL 0x08
+/** event must persist */
+#define UB_EV_PERSIST 0x10
+
+/** Returns event-base type. Could be "mini-event", "winsock-event" for the
+ * daemon compile, and will be "pluggable-event<PACKAGE_VERSION>" for
+ * libunbound.
+ */
+const char* ub_event_get_version();
+/** Return the name, system and method for the pluggable event base */
+void ub_get_event_sys(struct ub_event_base*, const char** n, const char** s,
+ const char** m);
+/** Return a default event base. In the deamon thess will be the only event
+ * bases used.
+ */
+struct ub_event_base* ub_default_event_base(int, time_t*, struct timeval*);
+/** Return an ub_event_base constructed for the given libevent event base */
+struct ub_event_base* ub_libevent_event_base(struct event_base*);
+/** Return the libevent base underlying the given ub_event_base. Will return
+ * NULL when the ub_event_base does not have an underlying libevent event base
+ */
+struct event_base* ub_libevent_get_event_base(struct ub_event_base*);
+/** Free event base. Free events yourself */
+void ub_event_base_free(struct ub_event_base*);
+/** Run the event base */
+int ub_event_base_dispatch(struct ub_event_base*);
+/** exit that loop */
+int ub_event_base_loopexit(struct ub_event_base*);
+
+/** Create a new ub_event for the event base */
+struct ub_event* ub_event_new(struct ub_event_base*,
+ int fd, short bits, void (*cb)(int, short, void*), void* arg);
+/** Create a new ub_event signal for the event base */
+struct ub_event* ub_signal_new(struct ub_event_base*, int fd,
+ void (*cb)(int, short, void*), void* arg);
+/** Create a new ub_event associated with the wsaevent for the event base */
+struct ub_event* ub_winsock_register_wsaevent(struct ub_event_base*,
+ void* wsaevent, void (*cb)(int, short, void*), void* arg);
+
+/** Add event bits for this event to fire on */
+void ub_event_add_bits(struct ub_event*, short bits);
+ /** Configure the event so it will not longer fire on given bits */
+void ub_event_del_bits(struct ub_event*, short bits);
+/** Change or set the file descriptor on the event */
+void ub_event_set_fd(struct ub_event*, int fd);
+/** free the event */
+void ub_event_free(struct ub_event*);
+/** Activate the event. The given timeval is an timeout value. */
+int ub_event_add(struct ub_event*, struct timeval*);
+/** Deactivate the event */
+int ub_event_del(struct ub_event*);
+/** Reconfigure and activate a timeout event */
+int ub_timer_add(struct ub_event*, struct ub_event_base*,
+ void (*cb)(int, short, void*), void* arg, struct timeval*);
+/** Deactivate the timeout event */
+int ub_timer_del(struct ub_event*);
+/** Activate a signal event */
+int ub_signal_add(struct ub_event*, struct timeval*);
+/** Deactivate a signal event */
+int ub_signal_del(struct ub_event*);
+/** Free a with a wsaevent associated event */
+void ub_winsock_unregister_wsaevent(struct ub_event* ev);
+/** Signal the eventloop when a TCP windows socket will block on next read
+ * or write (given by the eventbits)
+ */
+void ub_winsock_tcp_wouldblock(struct ub_event*, int bits);
+/** Equip the comm_base with the current time */
+void ub_comm_base_now(struct comm_base* cb);
+
+#endif /* UB_EVENT_H */
diff --git a/util/ub_event_pluggable.c b/util/ub_event_pluggable.c
new file mode 100644
index 000000000000..5c517555e71b
--- /dev/null
+++ b/util/ub_event_pluggable.c
@@ -0,0 +1,694 @@
+/*
+ * util/ub_event_pluggable.c - call registered pluggable event functions
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file contains an implementation for the indirection layer for pluggable
+ * events that calls the registered pluggable event loop. It also defines a
+ * default pluggable event loop based on the default libevent (compatibility)
+ * functions.
+ */
+#include "config.h"
+#include <sys/time.h>
+#include "util/ub_event.h"
+#include "libunbound/unbound-event.h"
+#include "util/netevent.h"
+#include "util/log.h"
+#include "util/fptr_wlist.h"
+
+/* We define libevent structures here to hide the libevent stuff. */
+
+#ifdef USE_MINI_EVENT
+# ifdef USE_WINSOCK
+# include "util/winsock_event.h"
+# else
+# include "util/mini_event.h"
+# endif /* USE_WINSOCK */
+#else /* USE_MINI_EVENT */
+ /* we use libevent */
+# ifdef HAVE_EVENT_H
+# include <event.h>
+# else
+# include "event2/event.h"
+# include "event2/event_struct.h"
+# include "event2/event_compat.h"
+# endif
+#endif /* USE_MINI_EVENT */
+
+#if UB_EV_TIMEOUT != EV_TIMEOUT || UB_EV_READ != EV_READ || \
+ UB_EV_WRITE != EV_WRITE || UB_EV_SIGNAL != EV_SIGNAL || \
+ UB_EV_PERSIST != EV_PERSIST
+/* Only necessary for libev */
+# define NATIVE_BITS(b) ( \
+ (((b) & UB_EV_TIMEOUT) ? EV_TIMEOUT : 0) \
+ | (((b) & UB_EV_READ ) ? EV_READ : 0) \
+ | (((b) & UB_EV_WRITE ) ? EV_WRITE : 0) \
+ | (((b) & UB_EV_SIGNAL ) ? EV_SIGNAL : 0) \
+ | (((b) & UB_EV_PERSIST) ? EV_PERSIST : 0))
+
+# define UB_EV_BITS(b) ( \
+ (((b) & EV_TIMEOUT) ? UB_EV_TIMEOUT : 0) \
+ | (((b) & EV_READ ) ? UB_EV_READ : 0) \
+ | (((b) & EV_WRITE ) ? UB_EV_WRITE : 0) \
+ | (((b) & EV_SIGNAL ) ? UB_EV_SIGNAL : 0) \
+ | (((b) & EV_PERSIST) ? UB_EV_PERSIST : 0))
+
+# define UB_EV_BITS_CB(C) void my_ ## C (int fd, short bits, void *arg) \
+ { (C)(fd, UB_EV_BITS(bits), arg); }
+
+UB_EV_BITS_CB(comm_point_udp_callback);
+UB_EV_BITS_CB(comm_point_udp_ancil_callback)
+UB_EV_BITS_CB(comm_point_tcp_accept_callback)
+UB_EV_BITS_CB(comm_point_tcp_handle_callback)
+UB_EV_BITS_CB(comm_timer_callback)
+UB_EV_BITS_CB(comm_signal_callback)
+UB_EV_BITS_CB(comm_point_local_handle_callback)
+UB_EV_BITS_CB(comm_point_raw_handle_callback)
+UB_EV_BITS_CB(tube_handle_signal)
+UB_EV_BITS_CB(comm_base_handle_slow_accept)
+
+static void (*NATIVE_BITS_CB(void (*cb)(int, short, void*)))(int, short, void*)
+{
+ if(cb == comm_point_udp_callback)
+ return my_comm_point_udp_callback;
+ else if(cb == comm_point_udp_ancil_callback)
+ return my_comm_point_udp_ancil_callback;
+ else if(cb == comm_point_tcp_accept_callback)
+ return my_comm_point_tcp_accept_callback;
+ else if(cb == comm_point_tcp_handle_callback)
+ return my_comm_point_tcp_handle_callback;
+ else if(cb == comm_timer_callback)
+ return my_comm_timer_callback;
+ else if(cb == comm_signal_callback)
+ return my_comm_signal_callback;
+ else if(cb == comm_point_local_handle_callback)
+ return my_comm_point_local_handle_callback;
+ else if(cb == comm_point_raw_handle_callback)
+ return my_comm_point_raw_handle_callback;
+ else if(cb == tube_handle_signal)
+ return my_tube_handle_signal;
+ else if(cb == comm_base_handle_slow_accept)
+ return my_comm_base_handle_slow_accept;
+ else
+ return NULL;
+}
+#else
+# define NATIVE_BITS(b) (b)
+# define NATIVE_BITS_CB(c) (c)
+#endif
+
+#ifndef EVFLAG_AUTO
+#define EVFLAG_AUTO 0
+#endif
+
+struct my_event_base {
+ struct ub_event_base super;
+ struct event_base* base;
+};
+
+struct my_event {
+ struct ub_event super;
+ struct event ev;
+};
+
+#define AS_MY_EVENT_BASE(x) \
+ (((union {struct ub_event_base* a; struct my_event_base* b;})x).b)
+#define AS_MY_EVENT(x) \
+ (((union {struct ub_event* a; struct my_event* b;})x).b)
+
+const char* ub_event_get_version()
+{
+ return "pluggable-event"PACKAGE_VERSION;
+}
+
+static void
+my_event_add_bits(struct ub_event* ev, short bits)
+{
+ AS_MY_EVENT(ev)->ev.ev_events |= NATIVE_BITS(bits);
+}
+
+static void
+my_event_del_bits(struct ub_event* ev, short bits)
+{
+ AS_MY_EVENT(ev)->ev.ev_events &= ~NATIVE_BITS(bits);
+}
+
+static void
+my_event_set_fd(struct ub_event* ev, int fd)
+{
+ AS_MY_EVENT(ev)->ev.ev_fd = fd;
+}
+
+static void
+my_event_free(struct ub_event* ev)
+{
+ free(AS_MY_EVENT(ev));
+}
+
+static int
+my_event_add(struct ub_event* ev, struct timeval* tv)
+{
+ return event_add(&AS_MY_EVENT(ev)->ev, tv);
+}
+
+static int
+my_event_del(struct ub_event* ev)
+{
+ return event_del(&AS_MY_EVENT(ev)->ev);
+}
+
+static int
+my_timer_add(struct ub_event* ev, struct ub_event_base* base,
+ void (*cb)(int, short, void*), void* arg, struct timeval* tv)
+{
+ event_set(&AS_MY_EVENT(ev)->ev, -1, EV_TIMEOUT,NATIVE_BITS_CB(cb),arg);
+ if (event_base_set(AS_MY_EVENT_BASE(base)->base, &AS_MY_EVENT(ev)->ev)
+ != 0)
+ return -1;
+ return evtimer_add(&AS_MY_EVENT(ev)->ev, tv);
+}
+
+static int
+my_timer_del(struct ub_event* ev)
+{
+ return evtimer_del(&AS_MY_EVENT(ev)->ev);
+}
+
+static int
+my_signal_add(struct ub_event* ev, struct timeval* tv)
+{
+ return signal_add(&AS_MY_EVENT(ev)->ev, tv);
+}
+
+static int
+my_signal_del(struct ub_event* ev)
+{
+ return signal_del(&AS_MY_EVENT(ev)->ev);
+}
+
+static void
+my_winsock_unregister_wsaevent(struct ub_event* ev)
+{
+#if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
+ winsock_unregister_wsaevent(&AS_MY_EVENT(ev)->ev);
+ free(AS_MY_EVENT(ev));
+#else
+ (void)ev;
+#endif
+}
+
+static void
+my_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits)
+{
+#if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
+ winsock_tcp_wouldblock(&AS_MY_EVENT(ev)->ev, NATIVE_BITS(eventbits));
+#else
+ (void)ev;
+ (void)eventbits;
+#endif
+}
+
+static struct ub_event_vmt default_event_vmt = {
+ my_event_add_bits, my_event_del_bits, my_event_set_fd,
+ my_event_free, my_event_add, my_event_del,
+ my_timer_add, my_timer_del, my_signal_add, my_signal_del,
+ my_winsock_unregister_wsaevent, my_winsock_tcp_wouldblock
+};
+
+static void
+my_event_base_free(struct ub_event_base* base)
+{
+#ifdef USE_MINI_EVENT
+ event_base_free(AS_MY_EVENT_BASE(base)->base);
+#elif defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE)
+ /* only libevent 1.2+ has it, but in 1.2 it is broken -
+ assertion fails on signal handling ev that is not deleted
+ in libevent 1.3c (event_base_once appears) this is fixed. */
+ event_base_free(AS_MY_EVENT_BASE(base)->base);
+#endif /* HAVE_EVENT_BASE_FREE and HAVE_EVENT_BASE_ONCE */
+ free(AS_MY_EVENT_BASE(base));
+}
+
+static int
+my_event_base_dispatch(struct ub_event_base* base)
+{
+ return event_base_dispatch(AS_MY_EVENT_BASE(base)->base);
+}
+
+static int
+my_event_base_loopexit(struct ub_event_base* base, struct timeval* tv)
+{
+ return event_base_loopexit(AS_MY_EVENT_BASE(base)->base, tv);
+}
+
+static struct ub_event*
+my_event_new(struct ub_event_base* base, int fd, short bits,
+ void (*cb)(int, short, void*), void* arg)
+{
+ struct my_event *my_ev = (struct my_event*)calloc(1,
+ sizeof(struct my_event));
+
+ if (!my_ev)
+ return NULL;
+
+ event_set(&my_ev->ev, fd, NATIVE_BITS(bits), NATIVE_BITS_CB(cb), arg);
+ if (event_base_set(AS_MY_EVENT_BASE(base)->base, &my_ev->ev) != 0) {
+ free(my_ev);
+ return NULL;
+ }
+ my_ev->super.magic = UB_EVENT_MAGIC;
+ my_ev->super.vmt = &default_event_vmt;
+ return &my_ev->super;
+}
+
+static struct ub_event*
+my_signal_new(struct ub_event_base* base, int fd,
+ void (*cb)(int, short, void*), void* arg)
+{
+ struct my_event *my_ev = (struct my_event*)calloc(1,
+ sizeof(struct my_event));
+
+ if (!my_ev)
+ return NULL;
+
+ signal_set(&my_ev->ev, fd, NATIVE_BITS_CB(cb), arg);
+ if (event_base_set(AS_MY_EVENT_BASE(base)->base, &my_ev->ev) != 0) {
+ free(my_ev);
+ return NULL;
+ }
+ my_ev->super.magic = UB_EVENT_MAGIC;
+ my_ev->super.vmt = &default_event_vmt;
+ return &my_ev->super;
+}
+
+static struct ub_event*
+my_winsock_register_wsaevent(struct ub_event_base* base, void* wsaevent,
+ void (*cb)(int, short, void*), void* arg)
+{
+#if defined(USE_MINI_EVENT) && defined(USE_WINSOCK)
+ struct my_event *my_ev = (struct my_event*)calloc(1,
+ sizeof(struct my_event));
+
+ if (!my_ev)
+ return NULL;
+
+ if (!winsock_register_wsaevent(AS_MY_EVENT_BASE(base)->base,
+ &my_ev->ev, wsaevent, cb, arg)) {
+ free(my_ev);
+ return NULL;
+
+ }
+ my_ev->super.magic = UB_EVENT_MAGIC;
+ my_ev->super.vmt = &default_event_vmt;
+ return &my_ev->super;
+#else
+ (void)base;
+ (void)wsaevent;
+ (void)cb;
+ (void)arg;
+ return NULL;
+#endif
+}
+
+static struct ub_event_base_vmt default_event_base_vmt = {
+ my_event_base_free, my_event_base_dispatch,
+ my_event_base_loopexit, my_event_new, my_signal_new,
+ my_winsock_register_wsaevent
+};
+
+struct ub_event_base*
+ub_default_event_base(int sigs, time_t* time_secs, struct timeval* time_tv)
+{
+ struct my_event_base* my_base = (struct my_event_base*)calloc(1,
+ sizeof(struct my_event_base));
+
+ if (!my_base)
+ return NULL;
+
+#ifdef USE_MINI_EVENT
+ (void)sigs;
+ /* use mini event time-sharing feature */
+ my_base->base = event_init(time_secs, time_tv);
+#else
+ (void)time_secs;
+ (void)time_tv;
+# if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
+ /* libev */
+ if(sigs)
+ my_base->base = (struct event_base*)ev_default_loop(EVFLAG_AUTO);
+ else
+ my_base->base = (struct event_base*)ev_loop_new(EVFLAG_AUTO);
+# else
+ (void)sigs;
+# ifdef HAVE_EVENT_BASE_NEW
+ my_base->base = event_base_new();
+# else
+ my_base->base = event_init();
+# endif
+# endif
+#endif
+ if (!my_base->base) {
+ free(my_base);
+ return NULL;
+ }
+ my_base->super.magic = UB_EVENT_MAGIC;
+ my_base->super.vmt = &default_event_base_vmt;
+ return &my_base->super;
+}
+
+struct ub_event_base*
+ub_libevent_event_base(struct event_base* base)
+{
+#ifdef USE_MINI_EVENT
+ (void)base;
+ return NULL;
+#else
+ struct my_event_base* my_base = (struct my_event_base*)calloc(1,
+ sizeof(struct my_event_base));
+
+ if (!my_base)
+ return NULL;
+ my_base->super.magic = UB_EVENT_MAGIC;
+ my_base->super.vmt = &default_event_base_vmt;
+ my_base->base = base;
+ return &my_base->super;
+#endif
+}
+
+struct event_base*
+ub_libevent_get_event_base(struct ub_event_base* base)
+{
+#ifndef USE_MINI_EVENT
+ if (base->vmt == &default_event_base_vmt)
+ return AS_MY_EVENT_BASE(base)->base;
+#else
+ (void)base;
+#endif
+ return NULL;
+}
+
+#if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EVBACKEND_SELECT)
+static const char* ub_ev_backend2str_pluggable(int b)
+{
+ switch(b) {
+ case EVBACKEND_SELECT: return "select";
+ case EVBACKEND_POLL: return "poll";
+ case EVBACKEND_EPOLL: return "epoll";
+ case EVBACKEND_KQUEUE: return "kqueue";
+ case EVBACKEND_DEVPOLL: return "devpoll";
+ case EVBACKEND_PORT: return "evport";
+ }
+ return "unknown";
+}
+#endif
+
+void
+ub_get_event_sys(struct ub_event_base* ub_base, const char** n, const char** s,
+ const char** m)
+{
+#ifdef USE_WINSOCK
+ (void)ub_base;
+ *n = "pluggable-event";
+ *s = "winsock";
+ *m = "WSAWaitForMultipleEvents";
+#elif defined(USE_MINI_EVENT)
+ (void)ub_base;
+ *n = "pluggable-event";
+ *s = "internal";
+ *m = "select";
+#else
+ struct event_base* b = ub_libevent_get_event_base(ub_base);
+ /* This function is only called from comm_base_create, so
+ * ub_base is guaranteed to exist and to be the default
+ * event base.
+ */
+ assert(b);
+ *n = "pluggable-event";
+ *s = event_get_version();
+# if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
+ *n = "pluggable-libev";
+# ifdef EVBACKEND_SELECT
+ *m = ub_ev_backend2str_pluggable(ev_backend((struct ev_loop*)b));
+# else
+ *m = "not obtainable";
+# endif
+# elif defined(HAVE_EVENT_BASE_GET_METHOD)
+ *n = "pluggable-libevent";
+ *m = event_base_get_method(b);
+# else
+ *m = "not obtainable";
+# endif
+#endif
+}
+
+void
+ub_event_base_free(struct ub_event_base* base)
+{
+ if (base && base->magic == UB_EVENT_MAGIC) {
+ fptr_ok(base->vmt != &default_event_base_vmt ||
+ base->vmt->free == my_event_base_free);
+ (*base->vmt->free)(base);
+ }
+}
+
+int
+ub_event_base_dispatch(struct ub_event_base* base)
+{
+ if (base->magic == UB_EVENT_MAGIC) {
+ fptr_ok(base->vmt != &default_event_base_vmt ||
+ base->vmt->dispatch == my_event_base_dispatch);
+ return (*base->vmt->dispatch)(base);
+ }
+ return -1;
+}
+
+int
+ub_event_base_loopexit(struct ub_event_base* base)
+{
+ if (base->magic == UB_EVENT_MAGIC) {
+ fptr_ok(base->vmt != &default_event_base_vmt ||
+ base->vmt->loopexit == my_event_base_loopexit);
+ return (*base->vmt->loopexit)(base, NULL);
+ }
+ return -1;
+}
+
+struct ub_event*
+ub_event_new(struct ub_event_base* base, int fd, short bits,
+ void (*cb)(int, short, void*), void* arg)
+{
+ if (base->magic == UB_EVENT_MAGIC) {
+ fptr_ok(base->vmt != &default_event_base_vmt ||
+ base->vmt->new_event == my_event_new);
+ return (*base->vmt->new_event)(base, fd, bits, cb, arg);
+ }
+ return NULL;
+}
+
+struct ub_event*
+ub_signal_new(struct ub_event_base* base, int fd,
+ void (*cb)(int, short, void*), void* arg)
+{
+ if (base->magic == UB_EVENT_MAGIC) {
+ fptr_ok(base->vmt != &default_event_base_vmt ||
+ base->vmt->new_signal == my_signal_new);
+ return (*base->vmt->new_signal)(base, fd, cb, arg);
+ }
+ return NULL;
+}
+
+struct ub_event*
+ub_winsock_register_wsaevent(struct ub_event_base* base, void* wsaevent,
+ void (*cb)(int, short, void*), void* arg)
+{
+ if (base->magic == UB_EVENT_MAGIC) {
+ fptr_ok(base->vmt != &default_event_base_vmt ||
+ base->vmt->winsock_register_wsaevent ==
+ my_winsock_register_wsaevent);
+ return (*base->vmt->winsock_register_wsaevent)(base, wsaevent, cb, arg);
+ }
+ return NULL;
+}
+
+void
+ub_event_add_bits(struct ub_event* ev, short bits)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->add_bits == my_event_add_bits);
+ (*ev->vmt->add_bits)(ev, bits);
+ }
+}
+
+void
+ub_event_del_bits(struct ub_event* ev, short bits)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->del_bits == my_event_del_bits);
+ (*ev->vmt->del_bits)(ev, bits);
+ }
+}
+
+void
+ub_event_set_fd(struct ub_event* ev, int fd)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->set_fd == my_event_set_fd);
+ (*ev->vmt->set_fd)(ev, fd);
+ }
+}
+
+void
+ub_event_free(struct ub_event* ev)
+{
+ if (ev && ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->free == my_event_free);
+ (*ev->vmt->free)(ev);
+ }
+}
+
+int
+ub_event_add(struct ub_event* ev, struct timeval* tv)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->add == my_event_add);
+ return (*ev->vmt->add)(ev, tv);
+ }
+ return -1;
+}
+
+int
+ub_event_del(struct ub_event* ev)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->del == my_event_del);
+ return (*ev->vmt->del)(ev);
+ }
+ return -1;
+}
+
+int
+ub_timer_add(struct ub_event* ev, struct ub_event_base* base,
+ void (*cb)(int, short, void*), void* arg, struct timeval* tv)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->add_timer == my_timer_add);
+ return (*ev->vmt->add_timer)(ev, base, cb, arg, tv);
+ }
+ return -1;
+}
+
+int
+ub_timer_del(struct ub_event* ev)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->del_timer == my_timer_del);
+ return (*ev->vmt->del_timer)(ev);
+ }
+ return -1;
+}
+
+int
+ub_signal_add(struct ub_event* ev, struct timeval* tv)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->add_signal == my_signal_add);
+ return (*ev->vmt->add_signal)(ev, tv);
+ }
+ return -1;
+}
+
+int
+ub_signal_del(struct ub_event* ev)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->del_signal == my_signal_del);
+ return (*ev->vmt->del_signal)(ev);
+ }
+ return -1;
+}
+
+void
+ub_winsock_unregister_wsaevent(struct ub_event* ev)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->winsock_unregister_wsaevent ==
+ my_winsock_unregister_wsaevent);
+ (*ev->vmt->winsock_unregister_wsaevent)(ev);
+ }
+}
+
+void
+ub_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits)
+{
+ if (ev->magic == UB_EVENT_MAGIC) {
+ fptr_ok(ev->vmt != &default_event_vmt ||
+ ev->vmt->winsock_tcp_wouldblock ==
+ my_winsock_tcp_wouldblock);
+ (*ev->vmt->winsock_tcp_wouldblock)(ev, eventbits);
+ }
+}
+
+void ub_comm_base_now(struct comm_base* cb)
+{
+ time_t *tt;
+ struct timeval *tv;
+
+#ifdef USE_MINI_EVENT
+/** minievent updates the time when it blocks. */
+ if (comm_base_internal(cb)->magic == UB_EVENT_MAGIC &&
+ comm_base_internal(cb)->vmt == &default_event_base_vmt)
+ return; /* Actually using mini event, so do not set time */
+#endif /* USE_MINI_EVENT */
+
+/** fillup the time values in the event base */
+ comm_base_timept(cb, &tt, &tv);
+ if(gettimeofday(tv, NULL) < 0) {
+ log_err("gettimeofday: %s", strerror(errno));
+ }
+ *tt = tv->tv_sec;
+}
+