diff options
author | 2020-12-11 12:21:40 +0000 | |
---|---|---|
committer | 2020-12-11 12:21:40 +0000 | |
commit | 853e076fc65da54682755bceb6978e3c5a7302b2 (patch) | |
tree | 4d39e7f8d078f6119ef080cd192278f191ddc365 | |
parent | Make the timer code independent of struct peer this way it can be used (diff) | |
download | wireguard-openbsd-853e076fc65da54682755bceb6978e3c5a7302b2.tar.xz wireguard-openbsd-853e076fc65da54682755bceb6978e3c5a7302b2.zip |
sync to libunbound 1.13.0
Support for channel reuse of TCP and TLS (DoT) streams should improve
latency when the DoT strategy is used in unwind.
33 files changed, 4712 insertions, 3217 deletions
diff --git a/sbin/unwind/libunbound/config.h b/sbin/unwind/libunbound/config.h index 32998352bf5..5d9a6f43591 100644 --- a/sbin/unwind/libunbound/config.h +++ b/sbin/unwind/libunbound/config.h @@ -730,7 +730,7 @@ #define PACKAGE_NAME "unbound" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "unbound 1.12.0" +#define PACKAGE_STRING "unbound 1.13.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "unbound" @@ -739,7 +739,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.12.0" +#define PACKAGE_VERSION "1.13.0" /* default pidfile location */ #define PIDFILE "" @@ -761,7 +761,7 @@ #define ROOT_CERT_FILE "/var/unbound/etc/icannbundle.pem" /* version number for resource files */ -#define RSRC_PACKAGE_VERSION 1,12,0,0 +#define RSRC_PACKAGE_VERSION 1,13,0,0 /* Directory to chdir to */ #define RUN_DIR "/var/unbound/etc" diff --git a/sbin/unwind/libunbound/libunbound/context.c b/sbin/unwind/libunbound/libunbound/context.c index 713259c718c..cff2831a77c 100644 --- a/sbin/unwind/libunbound/libunbound/context.c +++ b/sbin/unwind/libunbound/libunbound/context.c @@ -80,7 +80,7 @@ context_finalize(struct ub_ctx* ctx) return UB_INITFAIL; if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz)) return UB_INITFAIL; - if(!edns_tags_apply_cfg(ctx->env->edns_tags, cfg)) + if(!edns_strings_apply_cfg(ctx->env->edns_strings, cfg)) return UB_INITFAIL; if(!slabhash_is_size(ctx->env->msg_cache, cfg->msg_cache_size, cfg->msg_cache_slabs)) { diff --git a/sbin/unwind/libunbound/libunbound/libunbound.c b/sbin/unwind/libunbound/libunbound/libunbound.c index 3922eb0417f..c9e24ba8d8f 100644 --- a/sbin/unwind/libunbound/libunbound/libunbound.c +++ b/sbin/unwind/libunbound/libunbound/libunbound.c @@ -154,8 +154,8 @@ static struct ub_ctx* ub_ctx_create_nopipe(void) errno = ENOMEM; return NULL; } - ctx->env->edns_tags = edns_tags_create(); - if(!ctx->env->edns_tags) { + ctx->env->edns_strings = edns_strings_create(); + if(!ctx->env->edns_strings) { auth_zones_delete(ctx->env->auth_zones); edns_known_options_delete(ctx->env); config_delete(ctx->env->cfg); @@ -186,7 +186,7 @@ ub_ctx_create(void) config_delete(ctx->env->cfg); modstack_desetup(&ctx->mods, ctx->env); edns_known_options_delete(ctx->env); - edns_tags_delete(ctx->env->edns_tags); + edns_strings_delete(ctx->env->edns_strings); free(ctx->env); free(ctx); errno = e; @@ -199,7 +199,7 @@ ub_ctx_create(void) config_delete(ctx->env->cfg); modstack_desetup(&ctx->mods, ctx->env); edns_known_options_delete(ctx->env); - edns_tags_delete(ctx->env->edns_tags); + edns_strings_delete(ctx->env->edns_strings); free(ctx->env); free(ctx); errno = e; @@ -338,7 +338,7 @@ ub_ctx_delete(struct ub_ctx* ctx) infra_delete(ctx->env->infra_cache); config_delete(ctx->env->cfg); edns_known_options_delete(ctx->env); - edns_tags_delete(ctx->env->edns_tags); + edns_strings_delete(ctx->env->edns_strings); auth_zones_delete(ctx->env->auth_zones); free(ctx->env); } diff --git a/sbin/unwind/libunbound/libunbound/libworker.c b/sbin/unwind/libunbound/libunbound/libworker.c index bd42462e1be..06cbb8869f6 100644 --- a/sbin/unwind/libunbound/libunbound/libworker.c +++ b/sbin/unwind/libunbound/libunbound/libworker.c @@ -238,7 +238,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) ports, numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, &libworker_alloc_cleanup, w, cfg->do_udp || cfg->udp_upstream_without_downstream, w->sslctx, - cfg->delay_close, cfg->tls_use_sni, NULL); + cfg->delay_close, cfg->tls_use_sni, NULL, cfg->udp_connect); w->env->outnet = w->back; if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); diff --git a/sbin/unwind/libunbound/respip/respip.c b/sbin/unwind/libunbound/respip/respip.c index 6fa4f18851f..9ee098def82 100644 --- a/sbin/unwind/libunbound/respip/respip.c +++ b/sbin/unwind/libunbound/respip/respip.c @@ -914,7 +914,7 @@ respip_rewrite_reply(const struct query_info* qinfo, int ret = 1; struct ub_packed_rrset_key* redirect_rrset = NULL; struct rpz* r; - struct auth_zone* a; + struct auth_zone* a = NULL; struct ub_packed_rrset_key* data = NULL; int rpz_used = 0; int rpz_log = 0; @@ -1109,7 +1109,7 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id, qstate->return_msg && qstate->return_msg->rep) { struct reply_info* new_rep = qstate->return_msg->rep; struct ub_packed_rrset_key* alias_rrset = NULL; - struct respip_action_info actinfo = {0}; + struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL}; actinfo.action = respip_none; if(!respip_rewrite_reply(&qstate->qinfo, @@ -1170,7 +1170,7 @@ respip_merge_cname(struct reply_info* base_rep, struct ub_packed_rrset_key* alias_rrset = NULL; /* ditto */ uint16_t tgt_rcode; size_t i, j; - struct respip_action_info actinfo = {0}; + struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL}; actinfo.action = respip_none; /* If the query for the CNAME target would result in an unusual rcode, diff --git a/sbin/unwind/libunbound/services/authzone.c b/sbin/unwind/libunbound/services/authzone.c index a26d1003abe..15be5d60c65 100644 --- a/sbin/unwind/libunbound/services/authzone.c +++ b/sbin/unwind/libunbound/services/authzone.c @@ -5387,6 +5387,7 @@ void auth_xfer_transfer_lookup_callback(void* arg, int rcode, sldns_buffer* buf, verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup has no answer", zname, xfr->task_transfer->lookup_target->host, (xfr->task_transfer->lookup_aaaa?"AAAA":"A")); } } + regional_free_all(temp); } else { if(verbosity >= VERB_ALGO) { char zname[255+1]; @@ -6444,6 +6445,7 @@ void auth_xfer_probe_lookup_callback(void* arg, int rcode, sldns_buffer* buf, verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup has no address", zname, xfr->task_probe->lookup_target->host, (xfr->task_probe->lookup_aaaa?"AAAA":"A")); } } + regional_free_all(temp); } else { if(verbosity >= VERB_ALGO) { char zname[255+1]; diff --git a/sbin/unwind/libunbound/services/cache/infra.c b/sbin/unwind/libunbound/services/cache/infra.c index c2484a9f1aa..2d16bcd6e40 100644 --- a/sbin/unwind/libunbound/services/cache/infra.c +++ b/sbin/unwind/libunbound/services/cache/infra.c @@ -244,6 +244,7 @@ infra_create(struct config_file* cfg) return NULL; } infra->host_ttl = cfg->host_ttl; + infra->infra_keep_probing = cfg->infra_keep_probing; infra_dp_ratelimit = cfg->ratelimit; infra->domain_rates = slabhash_create(cfg->ratelimit_slabs, INFRA_HOST_STARTSIZE, cfg->ratelimit_size, @@ -297,6 +298,7 @@ infra_adjust(struct infra_cache* infra, struct config_file* cfg) if(!infra) return infra_create(cfg); infra->host_ttl = cfg->host_ttl; + infra->infra_keep_probing = cfg->infra_keep_probing; infra_dp_ratelimit = cfg->ratelimit; infra_ip_ratelimit = cfg->ip_ratelimit; maxmem = cfg->infra_cache_numhosts * (sizeof(struct infra_key)+ @@ -445,6 +447,7 @@ infra_host(struct infra_cache* infra, struct sockaddr_storage* addr, if(e && ((struct infra_data*)e->data)->ttl < timenow) { /* it expired, try to reuse existing entry */ int old = ((struct infra_data*)e->data)->rtt.rto; + time_t tprobe = ((struct infra_data*)e->data)->probedelay; uint8_t tA = ((struct infra_data*)e->data)->timeout_A; uint8_t tAAAA = ((struct infra_data*)e->data)->timeout_AAAA; uint8_t tother = ((struct infra_data*)e->data)->timeout_other; @@ -460,6 +463,7 @@ infra_host(struct infra_cache* infra, struct sockaddr_storage* addr, if(old >= USEFUL_SERVER_TOP_TIMEOUT) { ((struct infra_data*)e->data)->rtt.rto = USEFUL_SERVER_TOP_TIMEOUT; + ((struct infra_data*)e->data)->probedelay = tprobe; ((struct infra_data*)e->data)->timeout_A = tA; ((struct infra_data*)e->data)->timeout_AAAA = tAAAA; ((struct infra_data*)e->data)->timeout_other = tother; @@ -482,7 +486,8 @@ infra_host(struct infra_cache* infra, struct sockaddr_storage* addr, *edns_vs = data->edns_version; *edns_lame_known = data->edns_lame_known; *to = rtt_timeout(&data->rtt); - if(*to >= PROBE_MAXRTO && rtt_notimeout(&data->rtt)*4 <= *to) { + if(*to >= PROBE_MAXRTO && (infra->infra_keep_probing || + rtt_notimeout(&data->rtt)*4 <= *to)) { /* delay other queries, this is the probe query */ if(!wr) { lock_rw_unlock(&e->lock); @@ -566,18 +571,27 @@ infra_rtt_update(struct infra_cache* infra, struct sockaddr_storage* addr, struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1); struct infra_data* data; - int needtoinsert = 0; + int needtoinsert = 0, expired = 0; int rto = 1; + time_t oldprobedelay = 0; if(!e) { if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow))) return 0; needtoinsert = 1; } else if(((struct infra_data*)e->data)->ttl < timenow) { + oldprobedelay = ((struct infra_data*)e->data)->probedelay; data_entry_init(infra, e, timenow); + expired = 1; } /* have an entry, update the rtt */ data = (struct infra_data*)e->data; if(roundtrip == -1) { + if(needtoinsert || expired) { + /* timeout on entry that has expired before the timer + * keep old timeout from the function caller */ + data->rtt.rto = orig_rtt; + data->probedelay = oldprobedelay; + } rtt_lost(&data->rtt, orig_rtt); if(qtype == LDNS_RR_TYPE_A) { if(data->timeout_A < TIMEOUT_COUNT_MAX) @@ -681,7 +695,12 @@ infra_get_lame_rtt(struct infra_cache* infra, return 0; host = (struct infra_data*)e->data; *rtt = rtt_unclamped(&host->rtt); - if(host->rtt.rto >= PROBE_MAXRTO && timenow < host->probedelay + if(host->rtt.rto >= PROBE_MAXRTO && timenow >= host->probedelay + && infra->infra_keep_probing) { + /* single probe, keep probing */ + if(*rtt >= USEFUL_SERVER_TOP_TIMEOUT) + *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000; + } else if(host->rtt.rto >= PROBE_MAXRTO && timenow < host->probedelay && rtt_notimeout(&host->rtt)*4 <= host->rtt.rto) { /* single probe for this domain, and we are not probing */ /* unless the query type allows a probe to happen */ @@ -704,7 +723,8 @@ infra_get_lame_rtt(struct infra_cache* infra, /* see if this can be a re-probe of an unresponsive server */ /* minus 1000 because that is outside of the RTTBAND, so * blacklisted servers stay blacklisted if this is chosen */ - if(host->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT) { + if(host->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT || + infra->infra_keep_probing) { lock_rw_unlock(&e->lock); *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000; *lame = 0; diff --git a/sbin/unwind/libunbound/services/cache/infra.h b/sbin/unwind/libunbound/services/cache/infra.h index e33f2a6c04e..14f97c4c64d 100644 --- a/sbin/unwind/libunbound/services/cache/infra.h +++ b/sbin/unwind/libunbound/services/cache/infra.h @@ -114,6 +114,8 @@ struct infra_cache { struct slabhash* hosts; /** TTL value for host information, in seconds */ int host_ttl; + /** the hosts that are down are kept probed for recovery */ + int infra_keep_probing; /** hash table with query rates per name: rate_key, rate_data */ struct slabhash* domain_rates; /** ratelimit settings for domains, struct domain_limit_data */ diff --git a/sbin/unwind/libunbound/services/listen_dnsport.c b/sbin/unwind/libunbound/services/listen_dnsport.c index 3a98c264297..d63c0e0aab0 100644 --- a/sbin/unwind/libunbound/services/listen_dnsport.c +++ b/sbin/unwind/libunbound/services/listen_dnsport.c @@ -43,6 +43,7 @@ # include <sys/types.h> #endif #include <sys/time.h> +#include <limits.h> #ifdef USE_TCP_FASTOPEN #include <netinet/tcp.h> #endif @@ -81,9 +82,6 @@ /** number of queued TCP connections for listen() */ #define TCP_BACKLOG 256 -/** number of simultaneous requests a client can have */ -#define TCP_MAX_REQ_SIMULTANEOUS 32 - #ifndef THREADS_DISABLED /** lock on the counter of stream buffer memory */ static lock_basic_type stream_wait_count_lock; @@ -533,7 +531,9 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, return -1; } } -# elif defined(IP_DONTFRAG) +# elif defined(IP_DONTFRAG) && !defined(__APPLE__) + /* the IP_DONTFRAG option if defined in the 11.0 OSX headers, + * but does not work on that version, so we exclude it */ int off = 0; if (setsockopt(s, IPPROTO_IP, IP_DONTFRAG, &off, (socklen_t)sizeof(off)) < 0) { @@ -1244,8 +1244,9 @@ struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ports, size_t bufsize, int tcp_accept_count, int tcp_idle_timeout, int harden_large_queries, uint32_t http_max_streams, - char* http_endpoint, struct tcl_list* tcp_conn_limit, void* sslctx, - struct dt_env* dtenv, comm_point_callback_type* cb, void *cb_arg) + char* http_endpoint, int http_notls, struct tcl_list* tcp_conn_limit, + void* sslctx, struct dt_env* dtenv, comm_point_callback_type* cb, + void *cb_arg) { struct listen_dnsport* front = (struct listen_dnsport*) malloc(sizeof(struct listen_dnsport)); @@ -1295,15 +1296,19 @@ listen_create(struct comm_base* base, struct listen_port* ports, http_max_streams, http_endpoint, tcp_conn_limit, bufsize, front->udp_buff, ports->ftype, cb, cb_arg); - cp->ssl = sslctx; + if(http_notls && ports->ftype == listen_type_http) + cp->ssl = NULL; + else + cp->ssl = sslctx; if(ports->ftype == listen_type_http) { - if(!sslctx) { - log_warn("HTTPS port configured, but no TLS " + if(!sslctx && !http_notls) { + log_warn("HTTPS port configured, but no TLS " "tls-service-key or tls-service-pem " "set"); } #ifndef HAVE_SSL_CTX_SET_ALPN_SELECT_CB - log_warn("Unbound is not compiled with an " + if(!http_notls) + log_warn("Unbound is not compiled with an " "OpenSSL version supporting ALPN " " (OpenSSL >= 1.0.2). This is required " "to use DNS-over-HTTPS"); @@ -1402,6 +1407,7 @@ static int resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addresses, int *ip_addresses_size) { struct ifaddrs *ifa; + void *tmpbuf; int last_ip_addresses_size = *ip_addresses_size; for(ifa = ifas; ifa != NULL; ifa = ifa->ifa_next) { @@ -1466,10 +1472,12 @@ resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addres } verbose(4, "interface %s has address %s", search_ifa, addr_buf); - *ip_addresses = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); - if(!*ip_addresses) { + tmpbuf = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); + if(!tmpbuf) { log_err("realloc failed: out of memory"); return 0; + } else { + *ip_addresses = tmpbuf; } (*ip_addresses)[*ip_addresses_size] = strdup(addr_buf); if(!(*ip_addresses)[*ip_addresses_size]) { @@ -1480,10 +1488,12 @@ resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addres } if (*ip_addresses_size == last_ip_addresses_size) { - *ip_addresses = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); - if(!*ip_addresses) { + tmpbuf = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); + if(!tmpbuf) { log_err("realloc failed: out of memory"); return 0; + } else { + *ip_addresses = tmpbuf; } (*ip_addresses)[*ip_addresses_size] = strdup(search_ifa); if(!(*ip_addresses)[*ip_addresses_size]) { @@ -1804,8 +1814,7 @@ tcp_req_info_setup_listen(struct tcp_req_info* req) if(!req->cp->tcp_is_reading) wr = 1; - if(req->num_open_req + req->num_done_req < TCP_MAX_REQ_SIMULTANEOUS && - !req->read_is_closed) + if(!req->read_is_closed) rd = 1; if(wr) { @@ -2177,9 +2186,10 @@ int http2_submit_dns_response(struct http2_session* h2_session) int ret; nghttp2_data_provider data_prd; char status[4]; - nghttp2_nv headers[2]; + nghttp2_nv headers[3]; struct http2_stream* h2_stream = h2_session->c->h2_stream; size_t rlen; + char rlen_str[32]; if(h2_stream->rbuffer) { log_err("http2 submit response error: rbuffer already " @@ -2198,6 +2208,8 @@ int http2_submit_dns_response(struct http2_session* h2_session) } rlen = sldns_buffer_remaining(h2_session->c->buffer); + snprintf(rlen_str, sizeof(rlen_str), "%u", (unsigned)rlen); + lock_basic_lock(&http2_response_buffer_count_lock); if(http2_response_buffer_count + rlen > http2_response_buffer_max) { lock_basic_unlock(&http2_response_buffer_count_lock); @@ -2228,13 +2240,11 @@ int http2_submit_dns_response(struct http2_session* h2_session) headers[1].valuelen = 23; headers[1].flags = NGHTTP2_NV_FLAG_NONE; - /*TODO be nice and add the content-length header headers[2].name = (uint8_t*)"content-length"; headers[2].namelen = 14; - headers[2].value = - headers[2].valuelen = + headers[2].value = (uint8_t*)rlen_str; + headers[2].valuelen = strlen(rlen_str); headers[2].flags = NGHTTP2_NV_FLAG_NONE; - */ sldns_buffer_write(h2_stream->rbuffer, sldns_buffer_current(h2_session->c->buffer), @@ -2244,7 +2254,7 @@ int http2_submit_dns_response(struct http2_session* h2_session) data_prd.source.ptr = h2_session; data_prd.read_callback = http2_submit_response_read_callback; ret = nghttp2_submit_response(h2_session->session, h2_stream->stream_id, - headers, 2, &data_prd); + headers, 3, &data_prd); if(ret) { verbose(VERB_QUERY, "http2: set_stream_user_data failed, " "error: %s", nghttp2_strerror(ret)); diff --git a/sbin/unwind/libunbound/services/listen_dnsport.h b/sbin/unwind/libunbound/services/listen_dnsport.h index 4bbde0691fe..9d6ea2c33ad 100644 --- a/sbin/unwind/libunbound/services/listen_dnsport.h +++ b/sbin/unwind/libunbound/services/listen_dnsport.h @@ -159,6 +159,7 @@ int resolve_interface_names(struct config_file* cfg, char*** resif, * @param harden_large_queries: whether query size should be limited. * @param http_max_streams: maximum number of HTTP/2 streams per connection. * @param http_endpoint: HTTP endpoint to service queries on + * @param http_notls: no TLS for http downstream * @param tcp_conn_limit: TCP connection limit info. * @param sslctx: nonNULL if ssl context. * @param dtenv: nonNULL if dnstap enabled. @@ -171,8 +172,9 @@ struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ports, size_t bufsize, int tcp_accept_count, int tcp_idle_timeout, int harden_large_queries, uint32_t http_max_streams, - char* http_endpoint, struct tcl_list* tcp_conn_limit, void* sslctx, - struct dt_env* dtenv, comm_point_callback_type* cb, void *cb_arg); + char* http_endpoint, int http_notls, struct tcl_list* tcp_conn_limit, + void* sslctx, struct dt_env* dtenv, comm_point_callback_type* cb, + void *cb_arg); /** * delete the listening structure diff --git a/sbin/unwind/libunbound/services/localzone.c b/sbin/unwind/libunbound/services/localzone.c index 6aaf0c05518..cad46066334 100644 --- a/sbin/unwind/libunbound/services/localzone.c +++ b/sbin/unwind/libunbound/services/localzone.c @@ -157,7 +157,7 @@ local_zone_create(uint8_t* nm, size_t len, int labs, z->namelen = len; z->namelabs = labs; lock_rw_init(&z->lock); - z->region = regional_create_custom(sizeof(struct regional)); + z->region = regional_create_nochunk(sizeof(struct regional)); if(!z->region) { free(z); return NULL; diff --git a/sbin/unwind/libunbound/services/mesh.c b/sbin/unwind/libunbound/services/mesh.c index 52ff97e4a2e..cd90509366f 100644 --- a/sbin/unwind/libunbound/services/mesh.c +++ b/sbin/unwind/libunbound/services/mesh.c @@ -1196,6 +1196,12 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, /* Copy the client's EDNS for later restore, to make sure the edns * compare is with the correct edns options. */ struct edns_data edns_bak = r->edns; + /* briefly set the replylist to null in case the + * meshsendreply calls tcpreqinfo sendreply that + * comm_point_drops because of size, and then the + * null stops the mesh state remove and thus + * reply_list modification and accounting */ + struct mesh_reply* rlist = m->reply_list; /* examine security status */ if(m->s.env->need_to_validate && (!(r->qflags&BIT_CD) || m->s.env->cfg->ignore_cd) && rep && @@ -1218,15 +1224,21 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, r->h2_stream->mesh_state = NULL; } /* send the reply */ - /* We don't reuse the encoded answer if either the previous or current - * response has a local alias. We could compare the alias records - * and still reuse the previous answer if they are the same, but that - * would be complicated and error prone for the relatively minor case. - * So we err on the side of safety. */ - if(prev && prev_buffer && prev->qflags == r->qflags && + /* We don't reuse the encoded answer if: + * - either the previous or current response has a local alias. We could + * compare the alias records and still reuse the previous answer if they + * are the same, but that would be complicated and error prone for the + * relatively minor case. So we err on the side of safety. + * - there are registered callback functions for the given rcode, as these + * need to be called for each reply. */ + if(((rcode != LDNS_RCODE_SERVFAIL && + !m->s.env->inplace_cb_lists[inplace_cb_reply]) || + (rcode == LDNS_RCODE_SERVFAIL && + !m->s.env->inplace_cb_lists[inplace_cb_reply_servfail])) && + prev && prev_buffer && prev->qflags == r->qflags && !prev->local_alias && !r->local_alias && - prev->edns.edns_present == r->edns.edns_present && - prev->edns.bits == r->edns.bits && + prev->edns.edns_present == r->edns.edns_present && + prev->edns.bits == r->edns.bits && prev->edns.udp_size == r->edns.udp_size && edns_opt_list_compare(prev->edns.opt_list, r->edns.opt_list) == 0) { @@ -1236,22 +1248,26 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, sldns_buffer_write_at(r_buffer, 0, &r->qid, sizeof(uint16_t)); sldns_buffer_write_at(r_buffer, 12, r->qname, m->s.qinfo.qname_len); + m->reply_list = NULL; comm_point_send_reply(&r->query_reply); + m->reply_list = rlist; } else if(rcode) { m->s.qinfo.qname = r->qname; m->s.qinfo.local_alias = r->local_alias; if(rcode == LDNS_RCODE_SERVFAIL) { if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, - rep, rcode, &r->edns, NULL, m->s.region)) + rep, rcode, &r->edns, &r->query_reply, m->s.region)) r->edns.opt_list = NULL; } else { if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode, - &r->edns, NULL, m->s.region)) + &r->edns, &r->query_reply, m->s.region)) r->edns.opt_list = NULL; } error_encode(r_buffer, rcode, &m->s.qinfo, r->qid, r->qflags, &r->edns); + m->reply_list = NULL; comm_point_send_reply(&r->query_reply); + m->reply_list = rlist; } else { size_t udp_size = r->edns.udp_size; r->edns.edns_version = EDNS_ADVERTISED_VERSION; @@ -1261,7 +1277,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, m->s.qinfo.qname = r->qname; m->s.qinfo.local_alias = r->local_alias; if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, - LDNS_RCODE_NOERROR, &r->edns, NULL, m->s.region) || + LDNS_RCODE_NOERROR, &r->edns, &r->query_reply, m->s.region) || !apply_edns_options(&r->edns, &edns_bak, m->s.env->cfg, r->query_reply.c, m->s.region) || @@ -1271,13 +1287,15 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, secure)) { if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, - rep, LDNS_RCODE_SERVFAIL, &r->edns, NULL, m->s.region)) + rep, LDNS_RCODE_SERVFAIL, &r->edns, &r->query_reply, m->s.region)) r->edns.opt_list = NULL; error_encode(r_buffer, LDNS_RCODE_SERVFAIL, &m->s.qinfo, r->qid, r->qflags, &r->edns); } r->edns = edns_bak; + m->reply_list = NULL; comm_point_send_reply(&r->query_reply); + m->reply_list = rlist; } /* account */ log_assert(m->s.env->mesh->num_reply_addrs > 0); @@ -1365,20 +1383,12 @@ void mesh_query_done(struct mesh_state* mstate) mstate->reply_list = reply_list; } else { struct sldns_buffer* r_buffer = r->query_reply.c->buffer; - struct mesh_reply* rlist = mstate->reply_list; if(r->query_reply.c->tcp_req_info) { r_buffer = r->query_reply.c->tcp_req_info->spool_buffer; prev_buffer = NULL; } - /* briefly set the replylist to null in case the - * meshsendreply calls tcpreqinfo sendreply that - * comm_point_drops because of size, and then the - * null stops the mesh state remove and thus - * reply_list modification and accounting */ - mstate->reply_list = NULL; mesh_send_reply(mstate, mstate->s.return_rcode, rep, r, r_buffer, prev, prev_buffer); - mstate->reply_list = rlist; if(r->query_reply.c->tcp_req_info) { tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate); r_buffer = NULL; @@ -1894,7 +1904,7 @@ mesh_serve_expired_callback(void* arg) { struct mesh_state* mstate = (struct mesh_state*) arg; struct module_qstate* qstate = &mstate->s; - struct mesh_reply* r, *rlist; + struct mesh_reply* r; struct mesh_area* mesh = qstate->env->mesh; struct dns_msg* msg; struct mesh_cb* c; @@ -1999,15 +2009,8 @@ mesh_serve_expired_callback(void* arg) r_buffer = r->query_reply.c->buffer; if(r->query_reply.c->tcp_req_info) r_buffer = r->query_reply.c->tcp_req_info->spool_buffer; - /* briefly set the replylist to null in case the meshsendreply - * calls tcpreqinfo sendreply that comm_point_drops because - * of size, and then the null stops the mesh state remove and - * thus reply_list modification and accounting */ - rlist = mstate->reply_list; - mstate->reply_list = NULL; mesh_send_reply(mstate, LDNS_RCODE_NOERROR, msg->rep, r, r_buffer, prev, prev_buffer); - mstate->reply_list = rlist; if(r->query_reply.c->tcp_req_info) tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate); prev = r; diff --git a/sbin/unwind/libunbound/services/outside_network.c b/sbin/unwind/libunbound/services/outside_network.c index 41a1d83f145..11951adea7b 100644 --- a/sbin/unwind/libunbound/services/outside_network.c +++ b/sbin/unwind/libunbound/services/outside_network.c @@ -132,6 +132,52 @@ serviced_cmp(const void* key1, const void* key2) return sockaddr_cmp(&q1->addr, q1->addrlen, &q2->addr, q2->addrlen); } +/** compare if the reuse element has the same address, port and same ssl-is + * used-for-it characteristic */ +static int +reuse_cmp_addrportssl(const void* key1, const void* key2) +{ + struct reuse_tcp* r1 = (struct reuse_tcp*)key1; + struct reuse_tcp* r2 = (struct reuse_tcp*)key2; + int r; + /* compare address and port */ + r = sockaddr_cmp(&r1->addr, r1->addrlen, &r2->addr, r2->addrlen); + if(r != 0) + return r; + + /* compare if SSL-enabled */ + if(r1->is_ssl && !r2->is_ssl) + return 1; + if(!r1->is_ssl && r2->is_ssl) + return -1; + return 0; +} + +int +reuse_cmp(const void* key1, const void* key2) +{ + int r; + r = reuse_cmp_addrportssl(key1, key2); + if(r != 0) + return r; + + /* compare ptr value */ + if(key1 < key2) return -1; + if(key1 > key2) return 1; + return 0; +} + +int reuse_id_cmp(const void* key1, const void* key2) +{ + struct waiting_tcp* w1 = (struct waiting_tcp*)key1; + struct waiting_tcp* w2 = (struct waiting_tcp*)key2; + if(w1->id < w2->id) + return -1; + if(w1->id > w2->id) + return 1; + return 0; +} + /** delete waiting_tcp entry. Does not unlink from waiting list. * @param w: to delete. */ @@ -280,15 +326,234 @@ outnet_tcp_connect(int s, struct sockaddr_storage* addr, socklen_t addrlen) return 1; } +/** log reuse item addr and ptr with message */ +static void +log_reuse_tcp(enum verbosity_value v, const char* msg, struct reuse_tcp* reuse) +{ + uint16_t port; + char addrbuf[128]; + if(verbosity < v) return; + addr_to_str(&reuse->addr, reuse->addrlen, addrbuf, sizeof(addrbuf)); + port = ntohs(((struct sockaddr_in*)&reuse->addr)->sin_port); + verbose(v, "%s %s#%u fd %d", msg, addrbuf, (unsigned)port, + reuse->pending->c->fd); +} + +/** pop the first element from the writewait list */ +static struct waiting_tcp* reuse_write_wait_pop(struct reuse_tcp* reuse) +{ + struct waiting_tcp* w = reuse->write_wait_first; + if(!w) + return NULL; + log_assert(w->write_wait_queued); + log_assert(!w->write_wait_prev); + reuse->write_wait_first = w->write_wait_next; + if(w->write_wait_next) + w->write_wait_next->write_wait_prev = NULL; + else reuse->write_wait_last = NULL; + w->write_wait_queued = 0; + return w; +} + +/** remove the element from the writewait list */ +static void reuse_write_wait_remove(struct reuse_tcp* reuse, + struct waiting_tcp* w) +{ + if(!w) + return; + if(!w->write_wait_queued) + return; + if(w->write_wait_prev) + w->write_wait_prev->write_wait_next = w->write_wait_next; + else reuse->write_wait_first = w->write_wait_next; + if(w->write_wait_next) + w->write_wait_next->write_wait_prev = w->write_wait_prev; + else reuse->write_wait_last = w->write_wait_prev; + w->write_wait_queued = 0; +} + +/** push the element after the last on the writewait list */ +static void reuse_write_wait_push_back(struct reuse_tcp* reuse, + struct waiting_tcp* w) +{ + if(!w) return; + log_assert(!w->write_wait_queued); + if(reuse->write_wait_last) { + reuse->write_wait_last->write_wait_next = w; + w->write_wait_prev = reuse->write_wait_last; + } else { + reuse->write_wait_first = w; + } + reuse->write_wait_last = w; + w->write_wait_queued = 1; +} + +/** insert element in tree by id */ +void +reuse_tree_by_id_insert(struct reuse_tcp* reuse, struct waiting_tcp* w) +{ + log_assert(w->id_node.key == NULL); + w->id_node.key = w; + rbtree_insert(&reuse->tree_by_id, &w->id_node); +} + +/** find element in tree by id */ +struct waiting_tcp* +reuse_tcp_by_id_find(struct reuse_tcp* reuse, uint16_t id) +{ + struct waiting_tcp key_w; + rbnode_type* n; + memset(&key_w, 0, sizeof(key_w)); + key_w.id_node.key = &key_w; + key_w.id = id; + n = rbtree_search(&reuse->tree_by_id, &key_w); + if(!n) return NULL; + return (struct waiting_tcp*)n->key; +} + +/** return ID value of rbnode in tree_by_id */ +static uint16_t +tree_by_id_get_id(rbnode_type* node) +{ + struct waiting_tcp* w = (struct waiting_tcp*)node->key; + return w->id; +} + +/** insert into reuse tcp tree and LRU, false on failure (duplicate) */ +static int +reuse_tcp_insert(struct outside_network* outnet, struct pending_tcp* pend_tcp) +{ + log_reuse_tcp(VERB_CLIENT, "reuse_tcp_insert", &pend_tcp->reuse); + if(pend_tcp->reuse.item_on_lru_list) + return 1; + pend_tcp->reuse.node.key = &pend_tcp->reuse; + pend_tcp->reuse.pending = pend_tcp; + if(!rbtree_insert(&outnet->tcp_reuse, &pend_tcp->reuse.node)) { + /* this is a duplicate connection, close this one */ + verbose(VERB_CLIENT, "reuse_tcp_insert: duplicate connection"); + pend_tcp->reuse.node.key = NULL; + return 0; + } + /* insert into LRU, first is newest */ + pend_tcp->reuse.lru_prev = NULL; + if(outnet->tcp_reuse_first) { + pend_tcp->reuse.lru_next = outnet->tcp_reuse_first; + outnet->tcp_reuse_first->lru_prev = &pend_tcp->reuse; + } else { + pend_tcp->reuse.lru_next = NULL; + outnet->tcp_reuse_last = &pend_tcp->reuse; + } + outnet->tcp_reuse_first = &pend_tcp->reuse; + pend_tcp->reuse.item_on_lru_list = 1; + return 1; +} + +/** find reuse tcp stream to destination for query, or NULL if none */ +static struct reuse_tcp* +reuse_tcp_find(struct outside_network* outnet, struct sockaddr_storage* addr, + socklen_t addrlen, int use_ssl) +{ + struct waiting_tcp key_w; + struct pending_tcp key_p; + struct comm_point c; + rbnode_type* result = NULL, *prev; + verbose(VERB_CLIENT, "reuse_tcp_find"); + memset(&key_w, 0, sizeof(key_w)); + memset(&key_p, 0, sizeof(key_p)); + memset(&c, 0, sizeof(c)); + key_p.query = &key_w; + key_p.c = &c; + key_p.reuse.pending = &key_p; + key_p.reuse.node.key = &key_p.reuse; + if(use_ssl) + key_p.reuse.is_ssl = 1; + if(addrlen > (socklen_t)sizeof(key_p.reuse.addr)) + return NULL; + memmove(&key_p.reuse.addr, addr, addrlen); + key_p.reuse.addrlen = addrlen; + + verbose(VERB_CLIENT, "reuse_tcp_find: num reuse streams %u", + (unsigned)outnet->tcp_reuse.count); + if(outnet->tcp_reuse.root == NULL || + outnet->tcp_reuse.root == RBTREE_NULL) + return NULL; + if(rbtree_find_less_equal(&outnet->tcp_reuse, &key_p.reuse.node, + &result)) { + /* exact match */ + /* but the key is on stack, and ptr is compared, impossible */ + log_assert(&key_p.reuse != (struct reuse_tcp*)result); + log_assert(&key_p != ((struct reuse_tcp*)result)->pending); + } + /* not found, return null */ + if(!result || result == RBTREE_NULL) + return NULL; + verbose(VERB_CLIENT, "reuse_tcp_find check inexact match"); + /* inexact match, find one of possibly several connections to the + * same destination address, with the correct port, ssl, and + * also less than max number of open queries, or else, fail to open + * a new one */ + /* rewind to start of sequence of same address,port,ssl */ + prev = rbtree_previous(result); + while(prev && prev != RBTREE_NULL && + reuse_cmp_addrportssl(prev->key, &key_p.reuse) == 0) { + result = prev; + prev = rbtree_previous(result); + } + + /* loop to find first one that has correct characteristics */ + while(result && result != RBTREE_NULL && + reuse_cmp_addrportssl(result->key, &key_p.reuse) == 0) { + if(((struct reuse_tcp*)result)->tree_by_id.count < + MAX_REUSE_TCP_QUERIES) { + /* same address, port, ssl-yes-or-no, and has + * space for another query */ + return (struct reuse_tcp*)result; + } + result = rbtree_next(result); + } + return NULL; +} + +/** use the buffer to setup writing the query */ +static void +outnet_tcp_take_query_setup(int s, struct pending_tcp* pend, + struct waiting_tcp* w) +{ + struct timeval tv; + verbose(VERB_CLIENT, "outnet_tcp_take_query_setup: setup packet to write " + "len %d timeout %d msec", + (int)w->pkt_len, w->timeout); + pend->c->tcp_write_pkt = w->pkt; + pend->c->tcp_write_pkt_len = w->pkt_len; + pend->c->tcp_write_and_read = 1; + pend->c->tcp_write_byte_count = 0; + pend->c->tcp_is_reading = 0; + comm_point_start_listening(pend->c, s, -1); + /* set timer on the waiting_tcp entry, this is the write timeout + * for the written packet. The timer on pend->c is the timer + * for when there is no written packet and we have readtimeouts */ +#ifndef S_SPLINT_S + tv.tv_sec = w->timeout/1000; + tv.tv_usec = (w->timeout%1000)*1000; +#endif + /* if the waiting_tcp was previously waiting for a buffer in the + * outside_network.tcpwaitlist, then the timer is reset now that + * we start writing it */ + comm_timer_set(w->timer, &tv); +} + /** use next free buffer to service a tcp query */ static int -outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) +outnet_tcp_take_into_use(struct waiting_tcp* w) { struct pending_tcp* pend = w->outnet->tcp_free; int s; log_assert(pend); - log_assert(pkt); + log_assert(w->pkt); + log_assert(w->pkt_len > 0); log_assert(w->addrlen > 0); + pend->c->tcp_do_toggle_rw = 0; + pend->c->tcp_do_close = 0; /* open socket */ s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss, w->outnet->ip_dscp); @@ -383,24 +648,65 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) return 0; } } - w->pkt = NULL; w->next_waiting = (void*)pend; - pend->id = LDNS_ID_WIRE(pkt); w->outnet->num_tcp_outgoing++; w->outnet->tcp_free = pend->next_free; pend->next_free = NULL; pend->query = w; + pend->reuse.outnet = w->outnet; pend->c->repinfo.addrlen = w->addrlen; + pend->c->tcp_more_read_again = &pend->reuse.cp_more_read_again; + pend->c->tcp_more_write_again = &pend->reuse.cp_more_write_again; + pend->reuse.cp_more_read_again = 0; + pend->reuse.cp_more_write_again = 0; memcpy(&pend->c->repinfo.addr, &w->addr, w->addrlen); - sldns_buffer_clear(pend->c->buffer); - sldns_buffer_write(pend->c->buffer, pkt, pkt_len); - sldns_buffer_flip(pend->c->buffer); - pend->c->tcp_is_reading = 0; - pend->c->tcp_byte_count = 0; - comm_point_start_listening(pend->c, s, -1); + pend->reuse.pending = pend; + if(pend->c->ssl) + pend->reuse.is_ssl = 1; + else pend->reuse.is_ssl = 0; + /* insert in reuse by address tree if not already inserted there */ + (void)reuse_tcp_insert(w->outnet, pend); + reuse_tree_by_id_insert(&pend->reuse, w); + outnet_tcp_take_query_setup(s, pend, w); return 1; } +/** Touch the lru of a reuse_tcp element, it is in use. + * This moves it to the front of the list, where it is not likely to + * be closed. Items at the back of the list are closed to make space. */ +static void +reuse_tcp_lru_touch(struct outside_network* outnet, struct reuse_tcp* reuse) +{ + if(!reuse->item_on_lru_list) + return; /* not on the list, no lru to modify */ + if(!reuse->lru_prev) + return; /* already first in the list */ + /* remove at current position */ + /* since it is not first, there is a previous element */ + reuse->lru_prev->lru_next = reuse->lru_next; + if(reuse->lru_next) + reuse->lru_next->lru_prev = reuse->lru_prev; + else outnet->tcp_reuse_last = reuse->lru_prev; + /* insert at the front */ + reuse->lru_prev = NULL; + reuse->lru_next = outnet->tcp_reuse_first; + /* since it is not first, it is not the only element and + * lru_next is thus not NULL and thus reuse is now not the last in + * the list, so outnet->tcp_reuse_last does not need to be modified */ + outnet->tcp_reuse_first = reuse; +} + +/** call callback on waiting_tcp, if not NULL */ +static void +waiting_tcp_callback(struct waiting_tcp* w, struct comm_point* c, int error, + struct comm_reply* reply_info) +{ + if(w->cb) { + fptr_ok(fptr_whitelist_pending_tcp(w->cb)); + (void)(*w->cb)(c, w->cb_arg, error, reply_info); + } +} + /** see if buffers can be used to service TCP queries */ static void use_free_buffer(struct outside_network* outnet) @@ -408,25 +714,198 @@ use_free_buffer(struct outside_network* outnet) struct waiting_tcp* w; while(outnet->tcp_free && outnet->tcp_wait_first && !outnet->want_to_quit) { + struct reuse_tcp* reuse = NULL; w = outnet->tcp_wait_first; outnet->tcp_wait_first = w->next_waiting; if(outnet->tcp_wait_last == w) outnet->tcp_wait_last = NULL; - if(!outnet_tcp_take_into_use(w, w->pkt, w->pkt_len)) { - comm_point_callback_type* cb = w->cb; - void* cb_arg = w->cb_arg; - waiting_tcp_delete(w); - fptr_ok(fptr_whitelist_pending_tcp(cb)); - (void)(*cb)(NULL, cb_arg, NETEVENT_CLOSED, NULL); + w->on_tcp_waiting_list = 0; + reuse = reuse_tcp_find(outnet, &w->addr, w->addrlen, + w->ssl_upstream); + if(reuse) { + log_reuse_tcp(VERB_CLIENT, "use free buffer for waiting tcp: " + "found reuse", reuse); + reuse_tcp_lru_touch(outnet, reuse); + comm_timer_disable(w->timer); + w->next_waiting = (void*)reuse->pending; + reuse_tree_by_id_insert(reuse, w); + if(reuse->pending->query) { + /* on the write wait list */ + reuse_write_wait_push_back(reuse, w); + } else { + /* write straight away */ + /* stop the timer on read of the fd */ + comm_point_stop_listening(reuse->pending->c); + reuse->pending->query = w; + outnet_tcp_take_query_setup( + reuse->pending->c->fd, reuse->pending, + w); + } + } else { + struct pending_tcp* pend = w->outnet->tcp_free; + rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp); + pend->reuse.pending = pend; + memcpy(&pend->reuse.addr, &w->addr, w->addrlen); + pend->reuse.addrlen = w->addrlen; + if(!outnet_tcp_take_into_use(w)) { + waiting_tcp_callback(w, NULL, NETEVENT_CLOSED, + NULL); + waiting_tcp_delete(w); + } } } } +/** add waiting_tcp element to the outnet tcp waiting list */ +static void +outnet_add_tcp_waiting(struct outside_network* outnet, struct waiting_tcp* w) +{ + struct timeval tv; + if(w->on_tcp_waiting_list) + return; + w->next_waiting = NULL; + if(outnet->tcp_wait_last) + outnet->tcp_wait_last->next_waiting = w; + else outnet->tcp_wait_first = w; + outnet->tcp_wait_last = w; + w->on_tcp_waiting_list = 1; +#ifndef S_SPLINT_S + tv.tv_sec = w->timeout/1000; + tv.tv_usec = (w->timeout%1000)*1000; +#endif + comm_timer_set(w->timer, &tv); +} + +/** delete element from tree by id */ +static void +reuse_tree_by_id_delete(struct reuse_tcp* reuse, struct waiting_tcp* w) +{ + log_assert(w->id_node.key != NULL); + rbtree_delete(&reuse->tree_by_id, w); + w->id_node.key = NULL; +} + +/** move writewait list to go for another connection. */ +static void +reuse_move_writewait_away(struct outside_network* outnet, + struct pending_tcp* pend) +{ + /* the writewait list has not been written yet, so if the + * stream was closed, they have not actually been failed, only + * the queries written. Other queries can get written to another + * stream. For upstreams that do not support multiple queries + * and answers, the stream can get closed, and then the queries + * can get written on a new socket */ + struct waiting_tcp* w; + if(pend->query && pend->query->error_count == 0 && + pend->c->tcp_write_pkt == pend->query->pkt && + pend->c->tcp_write_pkt_len == pend->query->pkt_len) { + /* since the current query is not written, it can also + * move to a free buffer */ + if(verbosity >= VERB_CLIENT && pend->query->pkt_len > 12+2+2 && + LDNS_QDCOUNT(pend->query->pkt) > 0 && + dname_valid(pend->query->pkt+12, pend->query->pkt_len-12)) { + char buf[LDNS_MAX_DOMAINLEN+1]; + dname_str(pend->query->pkt+12, buf); + verbose(VERB_CLIENT, "reuse_move_writewait_away current %s %d bytes were written", + buf, (int)pend->c->tcp_write_byte_count); + } + pend->c->tcp_write_pkt = NULL; + pend->c->tcp_write_pkt_len = 0; + pend->c->tcp_write_and_read = 0; + pend->reuse.cp_more_read_again = 0; + pend->reuse.cp_more_write_again = 0; + pend->c->tcp_is_reading = 1; + w = pend->query; + pend->query = NULL; + /* increase error count, so that if the next socket fails too + * the server selection is run again with this query failed + * and it can select a different server (if possible), or + * fail the query */ + w->error_count ++; + reuse_tree_by_id_delete(&pend->reuse, w); + outnet_add_tcp_waiting(outnet, w); + } + while((w = reuse_write_wait_pop(&pend->reuse)) != NULL) { + if(verbosity >= VERB_CLIENT && w->pkt_len > 12+2+2 && + LDNS_QDCOUNT(w->pkt) > 0 && + dname_valid(w->pkt+12, w->pkt_len-12)) { + char buf[LDNS_MAX_DOMAINLEN+1]; + dname_str(w->pkt+12, buf); + verbose(VERB_CLIENT, "reuse_move_writewait_away item %s", buf); + } + reuse_tree_by_id_delete(&pend->reuse, w); + outnet_add_tcp_waiting(outnet, w); + } +} + +/** remove reused element from tree and lru list */ +static void +reuse_tcp_remove_tree_list(struct outside_network* outnet, + struct reuse_tcp* reuse) +{ + verbose(VERB_CLIENT, "reuse_tcp_remove_tree_list"); + if(reuse->node.key) { + /* delete it from reuse tree */ + (void)rbtree_delete(&outnet->tcp_reuse, &reuse->node); + reuse->node.key = NULL; + } + /* delete from reuse list */ + if(reuse->item_on_lru_list) { + if(reuse->lru_prev) { + /* assert that members of the lru list are waiting + * and thus have a pending pointer to the struct */ + log_assert(reuse->lru_prev->pending); + reuse->lru_prev->lru_next = reuse->lru_next; + } else { + log_assert(!reuse->lru_next || reuse->lru_next->pending); + outnet->tcp_reuse_first = reuse->lru_next; + } + if(reuse->lru_next) { + /* assert that members of the lru list are waiting + * and thus have a pending pointer to the struct */ + log_assert(reuse->lru_next->pending); + reuse->lru_next->lru_prev = reuse->lru_prev; + } else { + log_assert(!reuse->lru_prev || reuse->lru_prev->pending); + outnet->tcp_reuse_last = reuse->lru_prev; + } + reuse->item_on_lru_list = 0; + } +} + +/** helper function that deletes an element from the tree of readwait + * elements in tcp reuse structure */ +static void reuse_del_readwait_elem(rbnode_type* node, void* ATTR_UNUSED(arg)) +{ + struct waiting_tcp* w = (struct waiting_tcp*)node->key; + waiting_tcp_delete(w); +} + +/** delete readwait waiting_tcp elements, deletes the elements in the list */ +void reuse_del_readwait(rbtree_type* tree_by_id) +{ + if(tree_by_id->root == NULL || + tree_by_id->root == RBTREE_NULL) + return; + traverse_postorder(tree_by_id, &reuse_del_readwait_elem, NULL); + rbtree_init(tree_by_id, reuse_id_cmp); +} + /** decommission a tcp buffer, closes commpoint and frees waiting_tcp entry */ static void decommission_pending_tcp(struct outside_network* outnet, struct pending_tcp* pend) { + verbose(VERB_CLIENT, "decommission_pending_tcp"); + pend->next_free = outnet->tcp_free; + outnet->tcp_free = pend; + if(pend->reuse.node.key) { + /* needs unlink from the reuse tree to get deleted */ + reuse_tcp_remove_tree_list(outnet, &pend->reuse); + } + /* free SSL structure after remove from outnet tcp reuse tree, + * because the c->ssl null or not is used for sorting in the tree */ if(pend->c->ssl) { #ifdef HAVE_SSL SSL_shutdown(pend->c->ssl); @@ -435,11 +914,68 @@ decommission_pending_tcp(struct outside_network* outnet, #endif } comm_point_close(pend->c); - pend->next_free = outnet->tcp_free; - outnet->tcp_free = pend; - waiting_tcp_delete(pend->query); + pend->reuse.cp_more_read_again = 0; + pend->reuse.cp_more_write_again = 0; + /* unlink the query and writewait list, it is part of the tree + * nodes and is deleted */ pend->query = NULL; - use_free_buffer(outnet); + pend->reuse.write_wait_first = NULL; + pend->reuse.write_wait_last = NULL; + reuse_del_readwait(&pend->reuse.tree_by_id); +} + +/** perform failure callbacks for waiting queries in reuse read rbtree */ +static void reuse_cb_readwait_for_failure(rbtree_type* tree_by_id, int err) +{ + rbnode_type* node; + if(tree_by_id->root == NULL || + tree_by_id->root == RBTREE_NULL) + return; + node = rbtree_first(tree_by_id); + while(node && node != RBTREE_NULL) { + struct waiting_tcp* w = (struct waiting_tcp*)node->key; + waiting_tcp_callback(w, NULL, err, NULL); + node = rbtree_next(node); + } +} + +/** perform callbacks for failure and also decommission pending tcp. + * the callbacks remove references in sq->pending to the waiting_tcp + * members of the tree_by_id in the pending tcp. The pending_tcp is + * removed before the callbacks, so that the callbacks do not modify + * the pending_tcp due to its reference in the outside_network reuse tree */ +static void reuse_cb_and_decommission(struct outside_network* outnet, + struct pending_tcp* pend, int error) +{ + rbtree_type store; + store = pend->reuse.tree_by_id; + pend->query = NULL; + rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp); + pend->reuse.write_wait_first = NULL; + pend->reuse.write_wait_last = NULL; + decommission_pending_tcp(outnet, pend); + reuse_cb_readwait_for_failure(&store, error); + reuse_del_readwait(&store); +} + +/** set timeout on tcp fd and setup read event to catch incoming dns msgs */ +static void +reuse_tcp_setup_timeout(struct pending_tcp* pend_tcp) +{ + log_reuse_tcp(VERB_CLIENT, "reuse_tcp_setup_timeout", &pend_tcp->reuse); + comm_point_start_listening(pend_tcp->c, -1, REUSE_TIMEOUT); +} + +/** set timeout on tcp fd and setup read event to catch incoming dns msgs */ +static void +reuse_tcp_setup_read_and_timeout(struct pending_tcp* pend_tcp) +{ + log_reuse_tcp(VERB_CLIENT, "reuse_tcp_setup_readtimeout", &pend_tcp->reuse); + sldns_buffer_clear(pend_tcp->c->buffer); + pend_tcp->c->tcp_is_reading = 1; + pend_tcp->c->tcp_byte_count = 0; + comm_point_stop_listening(pend_tcp->c); + comm_point_start_listening(pend_tcp->c, -1, REUSE_TIMEOUT); } int @@ -447,24 +983,116 @@ outnet_tcp_cb(struct comm_point* c, void* arg, int error, struct comm_reply *reply_info) { struct pending_tcp* pend = (struct pending_tcp*)arg; - struct outside_network* outnet = pend->query->outnet; + struct outside_network* outnet = pend->reuse.outnet; + struct waiting_tcp* w = NULL; verbose(VERB_ALGO, "outnettcp cb"); - if(error != NETEVENT_NOERROR) { + if(error == NETEVENT_TIMEOUT) { + if(pend->c->tcp_write_and_read) { + verbose(VERB_QUERY, "outnettcp got tcp timeout " + "for read, ignored because write underway"); + /* if we are writing, ignore readtimer, wait for write timer + * or write is done */ + return 0; + } else { + verbose(VERB_QUERY, "outnettcp got tcp timeout %s", + (pend->reuse.tree_by_id.count?"for reading pkt": + "for keepalive for reuse")); + } + /* must be timeout for reading or keepalive reuse, + * close it. */ + reuse_tcp_remove_tree_list(outnet, &pend->reuse); + } else if(error == NETEVENT_PKT_WRITTEN) { + /* the packet we want to write has been written. */ + verbose(VERB_ALGO, "outnet tcp pkt was written event"); + log_assert(c == pend->c); + log_assert(pend->query->pkt == pend->c->tcp_write_pkt); + log_assert(pend->query->pkt_len == pend->c->tcp_write_pkt_len); + pend->c->tcp_write_pkt = NULL; + pend->c->tcp_write_pkt_len = 0; + /* the pend.query is already in tree_by_id */ + log_assert(pend->query->id_node.key); + pend->query = NULL; + /* setup to write next packet or setup read timeout */ + if(pend->reuse.write_wait_first) { + verbose(VERB_ALGO, "outnet tcp setup next pkt"); + /* we can write it straight away perhaps, set flag + * because this callback called after a tcp write + * succeeded and likely more buffer space is available + * and we can write some more. */ + pend->reuse.cp_more_write_again = 1; + pend->query = reuse_write_wait_pop(&pend->reuse); + comm_point_stop_listening(pend->c); + outnet_tcp_take_query_setup(pend->c->fd, pend, + pend->query); + } else { + verbose(VERB_ALGO, "outnet tcp writes done, wait"); + pend->c->tcp_write_and_read = 0; + pend->reuse.cp_more_read_again = 0; + pend->reuse.cp_more_write_again = 0; + pend->c->tcp_is_reading = 1; + comm_point_stop_listening(pend->c); + reuse_tcp_setup_timeout(pend); + } + return 0; + } else if(error != NETEVENT_NOERROR) { verbose(VERB_QUERY, "outnettcp got tcp error %d", error); + reuse_move_writewait_away(outnet, pend); /* pass error below and exit */ } else { /* check ID */ - if(sldns_buffer_limit(c->buffer) < sizeof(uint16_t) || - LDNS_ID_WIRE(sldns_buffer_begin(c->buffer))!=pend->id) { + if(sldns_buffer_limit(c->buffer) < sizeof(uint16_t)) { log_addr(VERB_QUERY, - "outnettcp: bad ID in reply, from:", - &pend->query->addr, pend->query->addrlen); + "outnettcp: bad ID in reply, too short, from:", + &pend->reuse.addr, pend->reuse.addrlen); error = NETEVENT_CLOSED; - } + } else { + uint16_t id = LDNS_ID_WIRE(sldns_buffer_begin( + c->buffer)); + /* find the query the reply is for */ + w = reuse_tcp_by_id_find(&pend->reuse, id); + } + } + if(error == NETEVENT_NOERROR && !w) { + /* no struct waiting found in tree, no reply to call */ + log_addr(VERB_QUERY, "outnettcp: bad ID in reply, from:", + &pend->reuse.addr, pend->reuse.addrlen); + error = NETEVENT_CLOSED; + } + if(error == NETEVENT_NOERROR) { + /* add to reuse tree so it can be reused, if not a failure. + * This is possible if the state machine wants to make a tcp + * query again to the same destination. */ + if(outnet->tcp_reuse.count < outnet->tcp_reuse_max) { + (void)reuse_tcp_insert(outnet, pend); + } + } + if(w) { + reuse_tree_by_id_delete(&pend->reuse, w); + verbose(VERB_CLIENT, "outnet tcp callback query err %d buflen %d", + error, (int)sldns_buffer_limit(c->buffer)); + waiting_tcp_callback(w, c, error, reply_info); + waiting_tcp_delete(w); + } + verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb"); + if(error == NETEVENT_NOERROR && pend->reuse.node.key) { + verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb: keep it"); + /* it is in the reuse_tcp tree, with other queries, or + * on the empty list. do not decommission it */ + /* if there are more outstanding queries, we could try to + * read again, to see if it is on the input, + * because this callback called after a successful read + * and there could be more bytes to read on the input */ + if(pend->reuse.tree_by_id.count != 0) + pend->reuse.cp_more_read_again = 1; + reuse_tcp_setup_read_and_timeout(pend); + return 0; } - fptr_ok(fptr_whitelist_pending_tcp(pend->query->cb)); - (void)(*pend->query->cb)(c, pend->query->cb_arg, error, reply_info); - decommission_pending_tcp(outnet, pend); + verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb: decommission it"); + /* no queries on it, no space to keep it. or timeout or closed due + * to error. Close it */ + reuse_cb_and_decommission(outnet, pend, (error==NETEVENT_TIMEOUT? + NETEVENT_TIMEOUT:NETEVENT_CLOSED)); + use_free_buffer(outnet); return 0; } @@ -723,7 +1351,8 @@ outside_network_create(struct comm_base *base, size_t bufsize, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, - void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv) + void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv, + int udp_connect) { struct outside_network* outnet = (struct outside_network*) calloc(1, sizeof(struct outside_network)); @@ -761,6 +1390,9 @@ outside_network_create(struct comm_base *base, size_t bufsize, outnet->delay_tv.tv_usec = (delayclose%1000)*1000; } #endif + if(udp_connect) { + outnet->udp_connect = 1; + } if(numavailports == 0 || num_ports == 0) { log_err("no outgoing ports available"); outside_network_delete(outnet); @@ -795,6 +1427,8 @@ outside_network_create(struct comm_base *base, size_t bufsize, outside_network_delete(outnet); return NULL; } + rbtree_init(&outnet->tcp_reuse, reuse_cmp); + outnet->tcp_reuse_max = num_tcp; /* allocate commpoints */ for(k=0; k<num_ports; k++) { @@ -958,6 +1592,17 @@ outside_network_delete(struct outside_network* outnet) size_t i; for(i=0; i<outnet->num_tcp; i++) if(outnet->tcp_conns[i]) { + if(outnet->tcp_conns[i]->query && + !outnet->tcp_conns[i]->query-> + on_tcp_waiting_list) { + /* delete waiting_tcp elements that + * the tcp conn is working on */ + struct pending_tcp* pend = + (struct pending_tcp*)outnet-> + tcp_conns[i]->query-> + next_waiting; + decommission_pending_tcp(outnet, pend); + } comm_point_delete(outnet->tcp_conns[i]->c); waiting_tcp_delete(outnet->tcp_conns[i]->query); free(outnet->tcp_conns[i]); @@ -972,6 +1617,10 @@ outside_network_delete(struct outside_network* outnet) p = np; } } + /* was allocated in struct pending that was deleted above */ + rbtree_init(&outnet->tcp_reuse, reuse_cmp); + outnet->tcp_reuse_first = NULL; + outnet->tcp_reuse_last = NULL; if(outnet->udp_wait_first) { struct pending* p = outnet->udp_wait_first, *np; while(p) { @@ -1115,13 +1764,26 @@ select_ifport(struct outside_network* outnet, struct pending* pend, my_if = ub_random_max(outnet->rnd, num_if); pif = &ifs[my_if]; #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION - my_port = ub_random_max(outnet->rnd, pif->avail_total); - if(my_port < pif->inuse) { - /* port already open */ - pend->pc = pif->out[my_port]; - verbose(VERB_ALGO, "using UDP if=%d port=%d", - my_if, pend->pc->number); - break; + if(outnet->udp_connect) { + /* if we connect() we cannot reuse fds for a port */ + if(pif->inuse >= pif->avail_total) { + tries++; + if(tries < MAX_PORT_RETRY) + continue; + log_err("failed to find an open port, drop msg"); + return 0; + } + my_port = pif->inuse + ub_random_max(outnet->rnd, + pif->avail_total - pif->inuse); + } else { + my_port = ub_random_max(outnet->rnd, pif->avail_total); + if(my_port < pif->inuse) { + /* port already open */ + pend->pc = pif->out[my_port]; + verbose(VERB_ALGO, "using UDP if=%d port=%d", + my_if, pend->pc->number); + break; + } } /* try to open new port, if fails, loop to try again */ log_assert(pif->inuse < pif->maxout); @@ -1138,6 +1800,17 @@ select_ifport(struct outside_network* outnet, struct pending* pend, if(fd != -1) { verbose(VERB_ALGO, "opened UDP if=%d port=%d", my_if, portno); + if(outnet->udp_connect) { + /* connect() to the destination */ + if(connect(fd, (struct sockaddr*)&pend->addr, + pend->addrlen) < 0) { + log_err_addr("udp connect failed", + strerror(errno), &pend->addr, + pend->addrlen); + sock_close(fd); + return 0; + } + } /* grab fd */ pend->pc = outnet->unused_fds; outnet->unused_fds = pend->pc->next; @@ -1197,10 +1870,17 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) log_assert(pend->pc && pend->pc->cp); /* send it over the commlink */ - if(!comm_point_send_udp_msg(pend->pc->cp, packet, - (struct sockaddr*)&pend->addr, pend->addrlen)) { - portcomm_loweruse(outnet, pend->pc); - return 0; + if(outnet->udp_connect) { + if(!comm_point_send_udp_msg(pend->pc->cp, packet, NULL, 0)) { + portcomm_loweruse(outnet, pend->pc); + return 0; + } + } else { + if(!comm_point_send_udp_msg(pend->pc->cp, packet, + (struct sockaddr*)&pend->addr, pend->addrlen)) { + portcomm_loweruse(outnet, pend->pc); + return 0; + } } /* system calls to set timeout after sending UDP to make roundtrip @@ -1273,45 +1953,152 @@ outnet_tcptimer(void* arg) { struct waiting_tcp* w = (struct waiting_tcp*)arg; struct outside_network* outnet = w->outnet; - comm_point_callback_type* cb; - void* cb_arg; - if(w->pkt) { + verbose(VERB_CLIENT, "outnet_tcptimer"); + if(w->on_tcp_waiting_list) { /* it is on the waiting list */ waiting_list_remove(outnet, w); + waiting_tcp_callback(w, NULL, NETEVENT_TIMEOUT, NULL); + waiting_tcp_delete(w); } else { /* it was in use */ struct pending_tcp* pend=(struct pending_tcp*)w->next_waiting; - if(pend->c->ssl) { -#ifdef HAVE_SSL - SSL_shutdown(pend->c->ssl); - SSL_free(pend->c->ssl); - pend->c->ssl = NULL; -#endif - } - comm_point_close(pend->c); - pend->query = NULL; - pend->next_free = outnet->tcp_free; - outnet->tcp_free = pend; + reuse_cb_and_decommission(outnet, pend, NETEVENT_TIMEOUT); } - cb = w->cb; - cb_arg = w->cb_arg; - waiting_tcp_delete(w); - fptr_ok(fptr_whitelist_pending_tcp(cb)); - (void)(*cb)(NULL, cb_arg, NETEVENT_TIMEOUT, NULL); use_free_buffer(outnet); } +/** close the oldest reuse_tcp connection to make a fd and struct pend + * available for a new stream connection */ +static void +reuse_tcp_close_oldest(struct outside_network* outnet) +{ + struct pending_tcp* pend; + verbose(VERB_CLIENT, "reuse_tcp_close_oldest"); + if(!outnet->tcp_reuse_last) return; + pend = outnet->tcp_reuse_last->pending; + + /* snip off of LRU */ + log_assert(pend->reuse.lru_next == NULL); + if(pend->reuse.lru_prev) { + outnet->tcp_reuse_last = pend->reuse.lru_prev; + pend->reuse.lru_prev->lru_next = NULL; + } else { + outnet->tcp_reuse_last = NULL; + outnet->tcp_reuse_first = NULL; + } + pend->reuse.item_on_lru_list = 0; + + /* free up */ + reuse_cb_and_decommission(outnet, pend, NETEVENT_CLOSED); +} + +/** find spare ID value for reuse tcp stream. That is random and also does + * not collide with an existing query ID that is in use or waiting */ +uint16_t +reuse_tcp_select_id(struct reuse_tcp* reuse, struct outside_network* outnet) +{ + uint16_t id = 0, curid, nextid; + const int try_random = 2000; + int i; + unsigned select, count, space; + rbnode_type* node; + + /* make really sure the tree is not empty */ + if(reuse->tree_by_id.count == 0) { + id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff; + return id; + } + + /* try to find random empty spots by picking them */ + for(i = 0; i<try_random; i++) { + id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff; + if(!reuse_tcp_by_id_find(reuse, id)) { + return id; + } + } + + /* equally pick a random unused element from the tree that is + * not in use. Pick a the n-th index of an ununused number, + * then loop over the empty spaces in the tree and find it */ + log_assert(reuse->tree_by_id.count < 0xffff); + select = ub_random_max(outnet->rnd, 0xffff - reuse->tree_by_id.count); + /* select value now in 0 .. num free - 1 */ + + count = 0; /* number of free spaces passed by */ + node = rbtree_first(&reuse->tree_by_id); + log_assert(node && node != RBTREE_NULL); /* tree not empty */ + /* see if select is before first node */ + if(select < tree_by_id_get_id(node)) + return select; + count += tree_by_id_get_id(node); + /* perhaps select is between nodes */ + while(node && node != RBTREE_NULL) { + rbnode_type* next = rbtree_next(node); + if(next && next != RBTREE_NULL) { + curid = tree_by_id_get_id(node); + nextid = tree_by_id_get_id(next); + log_assert(curid < nextid); + if(curid != 0xffff && curid + 1 < nextid) { + /* space between nodes */ + space = nextid - curid - 1; + log_assert(select >= count); + if(select < count + space) { + /* here it is */ + return curid + 1 + (select - count); + } + count += space; + } + } + node = next; + } + + /* select is after the last node */ + /* count is the number of free positions before the nodes in the + * tree */ + node = rbtree_last(&reuse->tree_by_id); + log_assert(node && node != RBTREE_NULL); /* tree not empty */ + curid = tree_by_id_get_id(node); + log_assert(count + (0xffff-curid) + reuse->tree_by_id.count == 0xffff); + return curid + 1 + (select - count); +} + struct waiting_tcp* pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, int timeout, comm_point_callback_type* callback, void* callback_arg) { struct pending_tcp* pend = sq->outnet->tcp_free; + struct reuse_tcp* reuse = NULL; struct waiting_tcp* w; - struct timeval tv; - uint16_t id; - /* if no buffer is free allocate space to store query */ + + verbose(VERB_CLIENT, "pending_tcp_query"); + if(sldns_buffer_limit(packet) < sizeof(uint16_t)) { + verbose(VERB_ALGO, "pending tcp query with too short buffer < 2"); + return NULL; + } + + /* find out if a reused stream to the target exists */ + /* if so, take it into use */ + reuse = reuse_tcp_find(sq->outnet, &sq->addr, sq->addrlen, + sq->ssl_upstream); + if(reuse) { + log_reuse_tcp(VERB_CLIENT, "pending_tcp_query: found reuse", reuse); + log_assert(reuse->pending); + pend = reuse->pending; + reuse_tcp_lru_touch(sq->outnet, reuse); + } + + /* if !pend but we have reuse streams, close a reuse stream + * to be able to open a new one to this target, no use waiting + * to reuse a file descriptor while another query needs to use + * that buffer and file descriptor now. */ + if(!pend) { + reuse_tcp_close_oldest(sq->outnet); + pend = sq->outnet->tcp_free; + } + + /* allocate space to store query */ w = (struct waiting_tcp*)malloc(sizeof(struct waiting_tcp) - + (pend?0:sldns_buffer_limit(packet))); + + sldns_buffer_limit(packet)); if(!w) { return NULL; } @@ -1319,47 +2106,76 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, free(w); return NULL; } - w->pkt = NULL; - w->pkt_len = 0; - id = ((unsigned)ub_random(sq->outnet->rnd)>>8) & 0xffff; - LDNS_ID_SET(sldns_buffer_begin(packet), id); + w->pkt = (uint8_t*)w + sizeof(struct waiting_tcp); + w->pkt_len = sldns_buffer_limit(packet); + memmove(w->pkt, sldns_buffer_begin(packet), w->pkt_len); + if(reuse) + w->id = reuse_tcp_select_id(reuse, sq->outnet); + else w->id = ((unsigned)ub_random(sq->outnet->rnd)>>8) & 0xffff; + LDNS_ID_SET(w->pkt, w->id); memcpy(&w->addr, &sq->addr, sq->addrlen); w->addrlen = sq->addrlen; w->outnet = sq->outnet; + w->on_tcp_waiting_list = 0; + w->next_waiting = NULL; w->cb = callback; w->cb_arg = callback_arg; w->ssl_upstream = sq->ssl_upstream; w->tls_auth_name = sq->tls_auth_name; -#ifndef S_SPLINT_S - tv.tv_sec = timeout/1000; - tv.tv_usec = (timeout%1000)*1000; -#endif - comm_timer_set(w->timer, &tv); + w->timeout = timeout; + w->id_node.key = NULL; + w->write_wait_prev = NULL; + w->write_wait_next = NULL; + w->write_wait_queued = 0; + w->error_count = 0; if(pend) { /* we have a buffer available right now */ - if(!outnet_tcp_take_into_use(w, sldns_buffer_begin(packet), - sldns_buffer_limit(packet))) { - waiting_tcp_delete(w); - return NULL; + if(reuse) { + /* reuse existing fd, write query and continue */ + /* store query in tree by id */ + verbose(VERB_CLIENT, "pending_tcp_query: reuse, store"); + w->next_waiting = (void*)pend; + reuse_tree_by_id_insert(&pend->reuse, w); + /* can we write right now? */ + if(pend->query == NULL) { + /* write straight away */ + /* stop the timer on read of the fd */ + comm_point_stop_listening(pend->c); + pend->query = w; + outnet_tcp_take_query_setup(pend->c->fd, pend, + w); + } else { + /* put it in the waiting list for + * this stream */ + reuse_write_wait_push_back(&pend->reuse, w); + } + } else { + /* create new fd and connect to addr, setup to + * write query */ + verbose(VERB_CLIENT, "pending_tcp_query: new fd, connect"); + rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp); + pend->reuse.pending = pend; + memcpy(&pend->reuse.addr, &sq->addr, sq->addrlen); + pend->reuse.addrlen = sq->addrlen; + if(!outnet_tcp_take_into_use(w)) { + waiting_tcp_delete(w); + return NULL; + } } -#ifdef USE_DNSTAP - if(sq->outnet->dtenv && - (sq->outnet->dtenv->log_resolver_query_messages || - sq->outnet->dtenv->log_forwarder_query_messages)) - dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, - comm_tcp, sq->zone, sq->zonelen, packet); -#endif } else { /* queue up */ - w->pkt = (uint8_t*)w + sizeof(struct waiting_tcp); - w->pkt_len = sldns_buffer_limit(packet); - memmove(w->pkt, sldns_buffer_begin(packet), w->pkt_len); - w->next_waiting = NULL; - if(sq->outnet->tcp_wait_last) - sq->outnet->tcp_wait_last->next_waiting = w; - else sq->outnet->tcp_wait_first = w; - sq->outnet->tcp_wait_last = w; + /* waiting for a buffer on the outside network buffer wait + * list */ + verbose(VERB_CLIENT, "pending_tcp_query: queue to wait"); + outnet_add_tcp_waiting(sq->outnet, w); } +#ifdef USE_DNSTAP + if(sq->outnet->dtenv && + (sq->outnet->dtenv->log_resolver_query_messages || + sq->outnet->dtenv->log_forwarder_query_messages)) + dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, + comm_tcp, sq->zone, sq->zonelen, packet); +#endif return w; } @@ -1477,6 +2293,7 @@ static void waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w) { struct waiting_tcp* p = outnet->tcp_wait_first, *prev = NULL; + w->on_tcp_waiting_list = 0; while(p) { if(p == w) { /* remove w */ @@ -1492,10 +2309,53 @@ waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w) } } +/** reuse tcp stream, remove serviced query from stream, + * return true if the stream is kept, false if it is to be closed */ +static int +reuse_tcp_remove_serviced_keep(struct waiting_tcp* w, + struct serviced_query* sq) +{ + struct pending_tcp* pend_tcp = (struct pending_tcp*)w->next_waiting; + verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep"); + /* remove the callback. let query continue to write to not cancel + * the stream itself. also keep it as an entry in the tree_by_id, + * in case the answer returns (that we no longer want), but we cannot + * pick the same ID number meanwhile */ + w->cb = NULL; + /* see if can be entered in reuse tree + * for that the FD has to be non-1 */ + if(pend_tcp->c->fd == -1) { + verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: -1 fd"); + return 0; + } + /* if in tree and used by other queries */ + if(pend_tcp->reuse.node.key) { + verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: in use by other queries"); + /* do not reset the keepalive timer, for that + * we'd need traffic, and this is where the serviced is + * removed due to state machine internal reasons, + * eg. iterator no longer interested in this query */ + return 1; + } + /* if still open and want to keep it open */ + if(pend_tcp->c->fd != -1 && sq->outnet->tcp_reuse.count < + sq->outnet->tcp_reuse_max) { + verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: keep open"); + /* set a keepalive timer on it */ + if(!reuse_tcp_insert(sq->outnet, pend_tcp)) { + return 0; + } + reuse_tcp_setup_timeout(pend_tcp); + return 1; + } + return 0; +} + /** cleanup serviced query entry */ static void serviced_delete(struct serviced_query* sq) { + verbose(VERB_CLIENT, "serviced_delete"); if(sq->pending) { /* clear up the pending query */ if(sq->status == serviced_query_UDP_EDNS || @@ -1503,6 +2363,7 @@ serviced_delete(struct serviced_query* sq) sq->status == serviced_query_UDP_EDNS_FRAG || sq->status == serviced_query_UDP_EDNS_fallback) { struct pending* p = (struct pending*)sq->pending; + verbose(VERB_CLIENT, "serviced_delete: UDP"); if(p->pc) portcomm_loweruse(sq->outnet, p->pc); pending_delete(sq->outnet, p); @@ -1510,14 +2371,32 @@ serviced_delete(struct serviced_query* sq) * mesh */ outnet_send_wait_udp(sq->outnet); } else { - struct waiting_tcp* p = (struct waiting_tcp*) + struct waiting_tcp* w = (struct waiting_tcp*) sq->pending; - if(p->pkt == NULL) { - decommission_pending_tcp(sq->outnet, - (struct pending_tcp*)p->next_waiting); + verbose(VERB_CLIENT, "serviced_delete: TCP"); + /* if on stream-write-waiting list then + * remove from waiting list and waiting_tcp_delete */ + if(w->write_wait_queued) { + struct pending_tcp* pend = + (struct pending_tcp*)w->next_waiting; + verbose(VERB_CLIENT, "serviced_delete: writewait"); + reuse_tree_by_id_delete(&pend->reuse, w); + reuse_write_wait_remove(&pend->reuse, w); + waiting_tcp_delete(w); + } else if(!w->on_tcp_waiting_list) { + struct pending_tcp* pend = + (struct pending_tcp*)w->next_waiting; + verbose(VERB_CLIENT, "serviced_delete: tcpreusekeep"); + if(!reuse_tcp_remove_serviced_keep(w, sq)) { + reuse_cb_and_decommission(sq->outnet, + pend, NETEVENT_CLOSED); + use_free_buffer(sq->outnet); + } + sq->pending = NULL; } else { - waiting_list_remove(sq->outnet, p); - waiting_tcp_delete(p); + verbose(VERB_CLIENT, "serviced_delete: tcpwait"); + waiting_list_remove(sq->outnet, w); + waiting_tcp_delete(w); } } } @@ -2097,18 +2976,18 @@ outnet_serviced_query(struct outside_network* outnet, { struct serviced_query* sq; struct service_callback* cb; - struct edns_tag_addr* client_tag_addr; + struct edns_string_addr* client_string_addr; if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, zone, zonelen, qstate, qstate->region)) return NULL; - if((client_tag_addr = edns_tag_addr_lookup(&env->edns_tags->client_tags, - addr, addrlen))) { - uint16_t client_tag = htons(client_tag_addr->tag_data); + if((client_string_addr = edns_string_addr_lookup( + &env->edns_strings->client_strings, addr, addrlen))) { edns_opt_list_append(&qstate->edns_opts_back_out, - env->edns_tags->client_tag_opcode, 2, - (uint8_t*)&client_tag, qstate->region); + env->edns_strings->client_string_opcode, + client_string_addr->string_len, + client_string_addr->string, qstate->region); } serviced_gen_query(buff, qinfo->qname, qinfo->qname_len, qinfo->qtype, diff --git a/sbin/unwind/libunbound/services/outside_network.h b/sbin/unwind/libunbound/services/outside_network.h index c8f6d5724a8..2fe97fa6c5c 100644 --- a/sbin/unwind/libunbound/services/outside_network.h +++ b/sbin/unwind/libunbound/services/outside_network.h @@ -52,6 +52,7 @@ struct ub_randstate; struct pending_tcp; struct waiting_tcp; struct waiting_udp; +struct reuse_tcp; struct infra_cache; struct port_comm; struct port_if; @@ -106,6 +107,9 @@ struct outside_network { int delayclose; /** timeout for delayclose */ struct timeval delay_tv; + /** if we perform udp-connect, connect() for UDP socket to mitigate + * ICMP side channel leakage */ + int udp_connect; /** array of outgoing IP4 interfaces */ struct port_if* ip4_ifs; @@ -154,6 +158,21 @@ struct outside_network { size_t num_tcp; /** number of tcp communication points in use. */ size_t num_tcp_outgoing; + /** + * tree of still-open and waiting tcp connections for reuse. + * can be closed and reopened to get a new tcp connection. + * or reused to the same destination again. with timeout to close. + * Entries are of type struct reuse_tcp. + * The entries are both active and empty connections. + */ + rbtree_type tcp_reuse; + /** max number of tcp_reuse entries we want to keep open */ + size_t tcp_reuse_max; + /** first and last(oldest) in lru list of reuse connections. + * the oldest can be closed to get a new free pending_tcp if needed + * The list contains empty connections, that wait for timeout or + * a new query that can use the existing connection. */ + struct reuse_tcp* tcp_reuse_first, *tcp_reuse_last; /** list of tcp comm points that are free for use */ struct pending_tcp* tcp_free; /** list of tcp queries waiting for a buffer */ @@ -212,6 +231,76 @@ struct port_comm { }; /** + * Reuse TCP connection, still open can be used again. + */ +struct reuse_tcp { + /** rbtree node with links in tcp_reuse tree. key is NULL when not + * in tree. Both active and empty connections are in the tree. + * key is a pointer to this structure, the members used to compare + * are the sockaddr and and then is-ssl bool, and then ptr value is + * used in case the same address exists several times in the tree + * when there are multiple connections to the same destination to + * make the rbtree items unique. */ + rbnode_type node; + /** the key for the tcp_reuse tree. address of peer, ip4 or ip6, + * and port number of peer */ + struct sockaddr_storage addr; + /** length of addr */ + socklen_t addrlen; + /** also key for tcp_reuse tree, if ssl is used */ + int is_ssl; + /** lru chain, so that the oldest can be removed to get a new + * connection when all are in (re)use. oldest is last in list. + * The lru only contains empty connections waiting for reuse, + * the ones with active queries are not on the list because they + * do not need to be closed to make space for others. They already + * service a query so the close for another query does not help + * service a larger number of queries. */ + struct reuse_tcp* lru_next, *lru_prev; + /** true if the reuse_tcp item is on the lru list with empty items */ + int item_on_lru_list; + /** the connection to reuse, the fd is non-1 and is open. + * the addr and port determine where the connection is going, + * and is key to the rbtree. The SSL ptr determines if it is + * a TLS connection or a plain TCP connection there. And TLS + * or not is also part of the key to the rbtree. + * There is a timeout and read event on the fd, to close it. */ + struct pending_tcp* pending; + /** + * The more read again value pointed to by the commpoint + * tcp_more_read_again pointer, so that it exists after commpoint + * delete + */ + int cp_more_read_again; + /** + * The more write again value pointed to by the commpoint + * tcp_more_write_again pointer, so that it exists after commpoint + * delete + */ + int cp_more_write_again; + /** rbtree with other queries waiting on the connection, by ID number, + * of type struct waiting_tcp. It is for looking up received + * answers to the structure for callback. And also to see if ID + * numbers are unused and can be used for a new query. + * The write_wait elements are also in the tree, so that ID numbers + * can be looked up also for them. They are bool write_wait_queued. */ + rbtree_type tree_by_id; + /** list of queries waiting to be written on the channel, + * if NULL no queries are waiting to be written and the pending->query + * is the query currently serviced. The first is the next in line. + * They are also in the tree_by_id. Once written, the are removed + * from this list, but stay in the tree. */ + struct waiting_tcp* write_wait_first, *write_wait_last; + /** the outside network it is part of */ + struct outside_network* outnet; +}; + +/** max number of queries on a reuse connection */ +#define MAX_REUSE_TCP_QUERIES 200 +/** timeout for REUSE entries in milliseconds. */ +#define REUSE_TIMEOUT 60000 + +/** * A query that has an answer pending for it. */ struct pending { @@ -255,12 +344,15 @@ struct pending { struct pending_tcp { /** next in list of free tcp comm points, or NULL. */ struct pending_tcp* next_free; - /** the ID for the query; checked in reply */ - uint16_t id; /** tcp comm point it was sent on (and reply must come back on). */ struct comm_point* c; /** the query being serviced, NULL if the pending_tcp is unused. */ struct waiting_tcp* query; + /** the pre-allocated reuse tcp structure. if ->pending is nonNULL + * it is in use and the connection is waiting for reuse. + * It is here for memory pre-allocation, and used to make this + * pending_tcp wait for reuse. */ + struct reuse_tcp reuse; }; /** @@ -269,12 +361,27 @@ struct pending_tcp { struct waiting_tcp { /** * next in waiting list. - * if pkt==0, this points to the pending_tcp structure. + * if on_tcp_waiting_list==0, this points to the pending_tcp structure. */ struct waiting_tcp* next_waiting; + /** if true the item is on the tcp waiting list and next_waiting + * is used for that. If false, the next_waiting points to the + * pending_tcp */ + int on_tcp_waiting_list; + /** next and prev in query waiting list for stream connection */ + struct waiting_tcp* write_wait_prev, *write_wait_next; + /** true if the waiting_tcp structure is on the write_wait queue */ + int write_wait_queued; + /** entry in reuse.tree_by_id, if key is NULL, not in tree, otherwise, + * this struct is key and sorted by ID (from waiting_tcp.id). */ + rbnode_type id_node; + /** the ID for the query; checked in reply */ + uint16_t id; /** timeout event; timer keeps running whether the query is * waiting for a buffer or the tcp reply is pending */ struct comm_timer* timer; + /** timeout in msec */ + int timeout; /** the outside network it is part of */ struct outside_network* outnet; /** remote address. */ @@ -284,13 +391,14 @@ struct waiting_tcp { /** * The query itself, the query packet to send. * allocated after the waiting_tcp structure. - * set to NULL when the query is serviced and it part of pending_tcp. - * if this is NULL, the next_waiting points to the pending_tcp. */ uint8_t* pkt; /** length of query packet. */ size_t pkt_len; - /** callback for the timeout, error or reply to the message */ + /** callback for the timeout, error or reply to the message, + * or NULL if no user is waiting. the entry uses an ID number. + * a query that was written is no longer needed, but the ID number + * and a reply will come back and can be ignored if NULL */ comm_point_callback_type* cb; /** callback user argument */ void* cb_arg; @@ -298,6 +406,8 @@ struct waiting_tcp { int ssl_upstream; /** ref to the tls_auth_name from the serviced_query */ char* tls_auth_name; + /** the packet was involved in an error, to stop looping errors */ + int error_count; }; /** @@ -421,6 +531,7 @@ struct serviced_query { * msec to wait on timeouted udp sockets. * @param tls_use_sni: if SNI is used for TLS connections. * @param dtenv: environment to send dnstap events with (if enabled). + * @param udp_connect: if the udp_connect option is enabled. * @return: the new structure (with no pending answers) or NULL on error. */ struct outside_network* outside_network_create(struct comm_base* base, @@ -429,7 +540,8 @@ struct outside_network* outside_network_create(struct comm_base* base, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, - void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv); + void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv, + int udp_connect); /** * Delete outside_network structure. @@ -546,6 +658,19 @@ size_t outnet_get_mem(struct outside_network* outnet); */ size_t serviced_get_mem(struct serviced_query* sq); +/** Pick random ID value for a tcp stream, avoids existing IDs. */ +uint16_t reuse_tcp_select_id(struct reuse_tcp* reuse, + struct outside_network* outnet); + +/** find element in tree by id */ +struct waiting_tcp* reuse_tcp_by_id_find(struct reuse_tcp* reuse, uint16_t id); + +/** insert element in tree by id */ +void reuse_tree_by_id_insert(struct reuse_tcp* reuse, struct waiting_tcp* w); + +/** delete readwait waiting_tcp elements, deletes the elements in the list */ +void reuse_del_readwait(rbtree_type* tree_by_id); + /** get TCP file descriptor for address, returns -1 on failure, * tcp_mss is 0 or maxseg size to set for TCP packets. */ int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp); @@ -643,4 +768,10 @@ int pending_cmp(const void* key1, const void* key2); /** compare function of serviced query rbtree */ int serviced_cmp(const void* key1, const void* key2); +/** compare function of reuse_tcp rbtree in outside_network struct */ +int reuse_cmp(const void* key1, const void* key2); + +/** compare function of reuse_tcp tree_by_id rbtree */ +int reuse_id_cmp(const void* key1, const void* key2); + #endif /* OUTSIDE_NETWORK_H */ diff --git a/sbin/unwind/libunbound/services/rpz.c b/sbin/unwind/libunbound/services/rpz.c index ba5dd186daa..13304652cc0 100644 --- a/sbin/unwind/libunbound/services/rpz.c +++ b/sbin/unwind/libunbound/services/rpz.c @@ -440,6 +440,8 @@ err: respip_set_delete(r->respip_set); if(r->taglist) free(r->taglist); + if(r->region) + regional_destroy(r->region); free(r); } return NULL; diff --git a/sbin/unwind/libunbound/util/config_file.c b/sbin/unwind/libunbound/util/config_file.c index fb3a8bc5683..bec1e5503f5 100644 --- a/sbin/unwind/libunbound/util/config_file.c +++ b/sbin/unwind/libunbound/util/config_file.c @@ -170,7 +170,9 @@ config_create(void) cfg->infra_cache_slabs = 4; cfg->infra_cache_numhosts = 10000; cfg->infra_cache_min_rtt = 50; + cfg->infra_keep_probing = 0; cfg->delay_close = 0; + cfg->udp_connect = 1; if(!(cfg->outgoing_avail_ports = (int*)calloc(65536, sizeof(int)))) goto error_exit; init_outgoing_availports(cfg->outgoing_avail_ports, 65536); @@ -321,8 +323,8 @@ config_create(void) cfg->qname_minimisation_strict = 0; cfg->shm_enable = 0; cfg->shm_key = 11777; - cfg->edns_client_tags = NULL; - cfg->edns_client_tag_opcode = LDNS_EDNS_CLIENT_TAG; + cfg->edns_client_strings = NULL; + cfg->edns_client_string_opcode = 65001; cfg->dnscrypt = 0; cfg->dnscrypt_port = 0; cfg->dnscrypt_provider = NULL; @@ -522,11 +524,12 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("tls-ciphersuites:", tls_ciphersuites) else S_YNO("tls-use-sni:", tls_use_sni) else S_NUMBER_NONZERO("https-port:", https_port) - else S_STR("http-endpoint", http_endpoint) - else S_NUMBER_NONZERO("http-max-streams", http_max_streams) - else S_MEMSIZE("http-query-buffer-size", http_query_buffer_size) - else S_MEMSIZE("http-response-buffer-size", http_response_buffer_size) - else S_YNO("http-nodelay", http_nodelay) + else S_STR("http-endpoint:", http_endpoint) + else S_NUMBER_NONZERO("http-max-streams:", http_max_streams) + else S_MEMSIZE("http-query-buffer-size:", http_query_buffer_size) + else S_MEMSIZE("http-response-buffer-size:", http_response_buffer_size) + else S_YNO("http-nodelay:", http_nodelay) + else S_YNO("http-notls-downstream:", http_notls_downstream) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) @@ -562,10 +565,12 @@ int config_set_option(struct config_file* cfg, const char* opt, IS_NUMBER_OR_ZERO; cfg->infra_cache_min_rtt = atoi(val); RTT_MIN_TIMEOUT=cfg->infra_cache_min_rtt; } + else S_YNO("infra-keep-probing:", infra_keep_probing) else S_NUMBER_OR_ZERO("infra-host-ttl:", host_ttl) else S_POW2("infra-cache-slabs:", infra_cache_slabs) else S_SIZET_NONZERO("infra-cache-numhosts:", infra_cache_numhosts) else S_NUMBER_OR_ZERO("delay-close:", delay_close) + else S_YNO("udp-connect:", udp_connect) else S_STR("chroot:", chrootdir) else S_STR("username:", username) else S_STR("directory:", directory) @@ -958,8 +963,10 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "infra-host-ttl", host_ttl) else O_DEC(opt, "infra-cache-slabs", infra_cache_slabs) else O_DEC(opt, "infra-cache-min-rtt", infra_cache_min_rtt) + else O_YNO(opt, "infra-keep-probing", infra_keep_probing) else O_MEM(opt, "infra-cache-numhosts", infra_cache_numhosts) else O_UNS(opt, "delay-close", delay_close) + else O_YNO(opt, "udp-connect", udp_connect) else O_YNO(opt, "do-ip4", do_ip4) else O_YNO(opt, "do-ip6", do_ip6) else O_YNO(opt, "do-udp", do_udp) @@ -990,6 +997,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_MEM(opt, "http-query-buffer-size", http_query_buffer_size) else O_MEM(opt, "http-response-buffer-size", http_response_buffer_size) else O_YNO(opt, "http-nodelay", http_nodelay) + else O_YNO(opt, "http-notls-downstream", http_notls_downstream) else O_YNO(opt, "use-systemd", use_systemd) else O_YNO(opt, "do-daemonize", do_daemonize) else O_STR(opt, "chroot", chrootdir) @@ -1150,7 +1158,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_LS3(opt, "access-control-tag-action", acl_tag_actions) else O_LS3(opt, "access-control-tag-data", acl_tag_datas) else O_LS2(opt, "access-control-view", acl_view) - else O_LS2(opt, "edns-client-tags", edns_client_tags) + else O_LS2(opt, "edns-client-strings", edns_client_strings) #ifdef USE_IPSECMOD else O_YNO(opt, "ipsecmod-enabled", ipsecmod_enabled) else O_YNO(opt, "ipsecmod-ignore-bogus", ipsecmod_ignore_bogus) @@ -1519,7 +1527,7 @@ config_delete(struct config_file* cfg) config_deldblstrlist(cfg->ratelimit_below_domain); config_delstrlist(cfg->python_script); config_delstrlist(cfg->dynlib_file); - config_deldblstrlist(cfg->edns_client_tags); + config_deldblstrlist(cfg->edns_client_strings); #ifdef USE_IPSECMOD free(cfg->ipsecmod_hook); config_delstrlist(cfg->ipsecmod_whitelist); diff --git a/sbin/unwind/libunbound/util/config_file.h b/sbin/unwind/libunbound/util/config_file.h index 7750eaa0e6b..55654402153 100644 --- a/sbin/unwind/libunbound/util/config_file.h +++ b/sbin/unwind/libunbound/util/config_file.h @@ -143,6 +143,8 @@ struct config_file { size_t http_response_buffer_size; /** set TCP_NODELAY option for http sockets */ int http_nodelay; + /** Disable TLS for http sockets downstream */ + int http_notls_downstream; /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; @@ -179,8 +181,12 @@ struct config_file { size_t infra_cache_numhosts; /** min value for infra cache rtt */ int infra_cache_min_rtt; + /** keep probing hosts that are down */ + int infra_keep_probing; /** delay close of udp-timeouted ports, if 0 no delayclose. in msec */ int delay_close; + /** udp_connect enable uses UDP connect to mitigate ICMP side channel */ + int udp_connect; /** the target fetch policy for the iterator */ char* target_fetch_policy; @@ -562,10 +568,10 @@ struct config_file { /** SHM data - key for the shm */ int shm_key; - /** list of EDNS client tag entries, linked list */ - struct config_str2list* edns_client_tags; - /** EDNS opcode to use for EDNS client tags */ - uint16_t edns_client_tag_opcode; + /** list of EDNS client string entries, linked list */ + struct config_str2list* edns_client_strings; + /** EDNS opcode to use for EDNS client strings */ + uint16_t edns_client_string_opcode; /** DNSCrypt */ /** true to enable dnscrypt */ diff --git a/sbin/unwind/libunbound/util/configlexer.c b/sbin/unwind/libunbound/util/configlexer.c index 18480f2b46b..d4969aca81d 100644 --- a/sbin/unwind/libunbound/util/configlexer.c +++ b/sbin/unwind/libunbound/util/configlexer.c @@ -5,7 +5,7 @@ #define YY_INT_ALIGNED short int -/* $OpenBSD: configlexer.c,v 1.8 2020/10/28 14:26:59 florian Exp $ */ +/* $OpenBSD: configlexer.c,v 1.9 2020/12/11 12:21:40 florian Exp $ */ /* A lexical scanner generated by flex */ @@ -27,7 +27,7 @@ /* end standard C headers. */ -/* $OpenBSD: configlexer.c,v 1.8 2020/10/28 14:26:59 florian Exp $ */ +/* $OpenBSD: configlexer.c,v 1.9 2020/12/11 12:21:40 florian Exp $ */ /* flex integer type definitions */ @@ -368,8 +368,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 334 -#define YY_END_OF_BUFFER 335 +#define YY_NUM_RULES 337 +#define YY_END_OF_BUFFER 338 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -377,366 +377,371 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[3253] = +static yyconst flex_int16_t yy_accept[3292] = { 0, - 1, 1, 308, 308, 312, 312, 316, 316, 320, 320, - 1, 1, 324, 324, 328, 328, 335, 332, 1, 306, - 306, 333, 2, 333, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 308, 309, 309, 310, - 333, 312, 313, 313, 314, 333, 319, 316, 317, 317, - 318, 333, 320, 321, 321, 322, 333, 331, 307, 2, - 311, 333, 331, 327, 324, 325, 325, 326, 333, 328, - 329, 329, 330, 333, 332, 0, 1, 2, 2, 2, - 2, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 308, 0, 312, - 0, 319, 0, 316, 320, 0, 331, 0, 2, 2, - 331, 327, 0, 324, 328, 0, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 331, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 122, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 131, 332, 332, 332, 332, 332, 332, - 332, 331, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 106, 332, 332, 332, 332, 332, 332, 8, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 123, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 136, 332, 331, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 299, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 331, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 63, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 235, 332, 14, - 15, 332, 19, 18, 332, 332, 219, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 129, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 217, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 3, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 331, 332, 332, 332, 332, 332, 332, 332, - 293, 332, 332, 292, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 315, 332, 332, 332, 332, 332, 332, 332, 62, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 66, 332, 266, 332, 332, - 332, 332, 332, 332, 332, 332, 300, 301, 332, 332, - 332, 332, 332, 67, 332, 332, 130, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 126, 332, 332, 332, 332, 332, 332, 332, 332, - 206, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 21, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 155, 332, 332, 331, 315, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 104, 332, 332, 332, - - 332, 332, 332, 332, 274, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 178, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 154, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 103, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 32, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 33, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 64, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 128, 331, 332, 332, - 332, 332, 332, 121, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 65, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 239, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 179, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 53, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 257, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 57, 332, 58, 332, 332, 332, 332, 332, - 107, 332, 108, 332, 332, 332, 332, 105, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 7, 332, 331, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 228, 332, 332, - 332, 332, 157, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 240, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 45, 332, 332, 332, 332, - 332, 332, 332, 332, 54, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 198, - 332, 197, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 16, 17, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 68, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 205, 332, 332, 332, 332, - 332, 332, 110, 332, 109, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 189, 332, 332, 332, - 332, 332, 332, 332, 332, 137, 331, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 98, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 87, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 218, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 91, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 61, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 192, 193, 332, 332, 332, 268, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 6, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 272, 332, 332, 332, 332, 332, 332, 294, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 42, - 332, 332, 332, 332, 44, 332, 332, 332, 332, 332, - 332, 332, 332, 51, 332, 332, 332, 332, 332, 332, - 332, 331, 332, 185, 332, 332, 332, 132, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 210, 332, - 186, 332, 332, 332, 225, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 52, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 134, 115, 332, 116, - 332, 332, 332, 114, 332, 332, 332, 332, 332, 332, - 332, 332, 152, 332, 332, 50, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 256, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 187, 332, 332, 332, 332, 332, 190, 332, 196, 332, - 332, 332, 332, 332, 224, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 102, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 127, 332, - 332, 332, 332, 332, 332, 59, 332, 332, 332, 26, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 20, - 332, 332, 332, 332, 332, 332, 27, 36, 332, 162, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 331, 332, 332, 332, 332, 332, 332, - 76, 78, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 276, 332, 332, 332, 332, - 236, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 117, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 151, 332, 46, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 287, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 156, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 216, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 297, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 173, 332, 332, 332, 332, 332, 332, 332, 332, 111, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 168, - 332, 180, 332, 332, 332, 332, 331, 332, 140, 332, - 332, 332, 332, 332, 97, 332, 332, 332, 332, 208, - 332, 332, 332, 332, 332, 332, 226, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 248, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 133, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 172, 332, - 332, 332, 332, 332, 332, 79, 80, 332, 332, 332, - - 332, 332, 60, 290, 332, 332, 332, 332, 332, 86, - 181, 332, 199, 332, 229, 332, 332, 191, 269, 332, - 332, 332, 332, 332, 72, 332, 183, 332, 332, 332, - 332, 332, 9, 332, 332, 332, 101, 332, 332, 332, - 332, 261, 332, 332, 332, 332, 207, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 331, 332, 332, 332, 332, 171, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 158, 332, - 275, 332, 332, 332, 332, 332, 247, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 220, 332, - 332, 304, 332, 332, 332, 267, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 291, 332, 182, 332, 332, 332, - 332, 332, 332, 332, 71, 73, 332, 332, 332, 332, - 332, 332, 332, 100, 332, 332, 332, 332, 259, 332, - 332, 332, 332, 271, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 212, 34, 28, 30, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 35, 332, - 29, 31, 332, 332, 332, 332, 332, 332, 332, 332, - 96, 332, 332, 332, 332, 332, 332, 331, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 214, - 211, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 70, - 332, 332, 332, 135, 332, 118, 332, 332, 332, 332, - 332, 332, 332, 332, 153, 47, 332, 332, 323, 13, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 285, - - 332, 288, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 12, 332, 332, 22, 332, 332, 332, 265, - 332, 332, 332, 332, 273, 332, 332, 332, 74, 332, - 222, 332, 332, 332, 332, 213, 332, 332, 69, 332, - 332, 332, 332, 23, 332, 43, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 167, 166, - 323, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 215, 209, 332, 227, 332, 332, 277, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 81, 332, - 332, 332, 260, 332, 332, 332, 332, 195, 332, 332, - 332, 332, 221, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 295, 296, 164, 332, 332, 75, 332, 332, - 332, 332, 174, 332, 332, 112, 113, 332, 332, 332, - 332, 159, 332, 161, 332, 200, 332, 332, 332, 332, - 165, 332, 332, 230, 332, 332, 332, 332, 332, 332, - 332, 142, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 238, 332, 332, 332, 332, 332, - 332, 332, 332, 24, 332, 270, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 332, 201, - 332, 332, 258, 332, 289, 332, 194, 332, 332, 332, - 332, 55, 332, 332, 332, 332, 4, 332, 332, 332, - 332, 125, 141, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 233, 37, 38, 332, 332, 332, 332, 332, 332, - 332, 278, 332, 332, 332, 332, 332, 332, 332, 246, - 332, 332, 332, 332, 332, 332, 332, 332, 204, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 84, 332, 56, 264, 332, 234, 332, 332, 332, 332, - - 11, 332, 332, 332, 332, 332, 332, 124, 332, 332, - 332, 332, 202, 88, 332, 40, 332, 332, 332, 332, - 332, 332, 332, 332, 170, 332, 332, 332, 332, 332, - 144, 332, 332, 332, 332, 237, 332, 332, 332, 332, - 332, 245, 332, 332, 332, 332, 138, 332, 332, 332, - 119, 120, 332, 332, 332, 90, 94, 89, 332, 332, - 332, 82, 332, 332, 332, 332, 332, 10, 332, 332, - 332, 262, 298, 332, 332, 332, 332, 303, 39, 332, - 332, 332, 332, 332, 169, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 332, 332, 332, 332, 332, 332, 95, 93, - 332, 332, 332, 83, 286, 332, 332, 332, 332, 332, - 332, 332, 188, 332, 332, 332, 332, 332, 203, 332, - 332, 332, 332, 332, 332, 332, 332, 160, 77, 332, - 332, 332, 332, 332, 279, 332, 332, 332, 332, 332, - 332, 332, 242, 332, 332, 241, 139, 305, 332, 92, - 48, 332, 145, 146, 149, 150, 147, 148, 85, 332, - 263, 332, 332, 332, 332, 163, 332, 332, 332, 332, - 332, 232, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - - 176, 175, 41, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 99, 332, - 231, 332, 255, 283, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 49, 5, 332, 332, - 223, 332, 332, 284, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 243, 25, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 244, 332, 332, - 332, 143, 332, 332, 332, 332, 332, 332, 332, 332, - 177, 332, 184, 332, 332, 332, 332, 332, 332, 332, - - 332, 332, 280, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 302, 332, 332, 251, 332, 332, 332, 332, 332, 281, - 332, 332, 332, 332, 332, 332, 282, 332, 332, 332, - 249, 332, 252, 253, 332, 332, 332, 332, 332, 250, - 254, 0 + 1, 1, 311, 311, 315, 315, 319, 319, 323, 323, + 1, 1, 327, 327, 331, 331, 338, 335, 1, 309, + 309, 336, 2, 336, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 311, 312, 312, 313, + 336, 315, 316, 316, 317, 336, 322, 319, 320, 320, + 321, 336, 323, 324, 324, 325, 336, 334, 310, 2, + 314, 336, 334, 330, 327, 328, 328, 329, 336, 331, + 332, 332, 333, 336, 335, 0, 1, 2, 2, 2, + 2, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 311, 0, 315, + 0, 322, 0, 319, 323, 0, 334, 0, 2, 2, + 334, 330, 0, 327, 331, 0, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 334, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 125, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 134, 335, 335, 335, 335, 335, 335, + 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 109, 335, 335, 335, 335, 335, 335, 8, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 126, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 139, 335, + 334, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 302, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 64, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 238, + 335, 14, 15, 335, 19, 18, 335, 335, 222, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 132, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 220, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 3, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 334, 335, 335, 335, + 335, 335, 335, 335, 296, 335, 335, 295, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 318, 335, 335, 335, 335, + 335, 335, 335, 335, 63, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 67, 335, 269, 335, 335, 335, 335, 335, 335, + 335, 335, 303, 304, 335, 335, 335, 335, 335, 68, + + 335, 335, 133, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 129, 335, 335, + 335, 335, 335, 335, 335, 335, 209, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 21, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 158, 335, 335, + 334, 318, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 107, 335, 335, 335, 335, 335, 335, + 335, 277, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 181, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 157, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 106, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 32, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 33, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 65, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 131, 334, 335, 335, + 335, 335, 335, 124, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 66, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 242, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 182, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 54, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 260, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 58, 335, 59, 335, 335, 335, + 335, 335, 110, 335, 111, 335, 335, 335, 335, 108, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 7, + 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 231, 335, 335, 335, 335, 160, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 243, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 45, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 55, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 201, 335, 200, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 16, 17, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 69, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 208, 335, 335, 335, 335, 335, 335, 113, 335, 112, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 192, 335, 335, 335, 335, 335, 335, 335, + 335, 140, 334, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 101, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 89, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 221, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 94, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 62, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 195, + 196, 335, 335, 335, 271, 335, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 6, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 275, + 335, 335, 335, 335, 335, 335, 297, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 42, 335, 335, + 335, 335, 44, 335, 335, 335, 90, 335, 335, 335, + 335, 335, 52, 335, 335, 335, 335, 335, 335, 335, + 334, 335, 188, 335, 335, 335, 135, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 213, 335, 189, + + 335, 335, 335, 228, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 53, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 137, 118, 335, 119, 335, + 335, 335, 117, 335, 335, 335, 335, 335, 335, 335, + 335, 155, 335, 335, 50, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 259, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 190, 335, 335, 335, 335, 335, 193, 335, 199, + 335, 335, 335, 335, 335, 227, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 105, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 130, + 335, 335, 335, 335, 335, 335, 60, 335, 335, 335, + 26, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 20, 335, 335, 335, 335, 335, 335, 27, 36, 335, + 165, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 334, 335, 335, 335, 335, 335, + 335, 77, 79, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 279, 335, 335, 335, + + 335, 239, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 120, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 154, 335, 46, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 290, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 159, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 219, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 300, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 176, 335, 335, 335, 335, 335, 335, + 335, 335, 114, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 171, 335, 183, 335, 335, 335, 335, 334, + 335, 143, 335, 335, 335, 335, 335, 100, 335, 335, + 335, 335, 211, 335, 335, 335, 335, 335, 335, 229, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 251, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 136, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 175, 335, 335, 335, 335, 335, 335, 80, + 335, 81, 335, 335, 335, 335, 335, 61, 293, 335, + 335, 335, 335, 335, 88, 184, 335, 202, 335, 232, + 335, 335, 194, 272, 335, 335, 335, 335, 335, 73, + 335, 186, 335, 335, 335, 335, 335, 9, 335, 335, + 335, 104, 335, 335, 335, 335, 264, 335, 335, 335, + 335, 210, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 334, 335, 335, + 335, 335, 174, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 161, 335, 278, 335, 335, 335, 335, + 335, 250, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 223, 335, 335, 335, 335, 335, 270, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 294, 335, 185, 335, 335, 335, 335, 335, 335, 335, + + 72, 74, 335, 335, 335, 335, 335, 335, 335, 103, + 335, 335, 335, 335, 262, 335, 335, 335, 335, 274, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 215, 34, 28, 30, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 35, 335, 29, 31, 335, 335, + 335, 335, 335, 335, 335, 335, 99, 335, 335, 335, + 335, 335, 335, 334, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 217, 214, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 71, 335, 335, 335, 138, + + 335, 121, 335, 335, 335, 335, 335, 335, 335, 335, + 156, 47, 335, 335, 335, 326, 13, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 288, 335, 291, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 12, 335, 335, 22, 335, 335, 335, 268, 335, 335, + 335, 335, 276, 335, 335, 335, 75, 335, 225, 335, + 335, 335, 335, 216, 335, 335, 70, 335, 335, 335, + 335, 23, 335, 43, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 170, 169, 326, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 218, 212, + + 335, 230, 335, 335, 280, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 82, 335, 335, + 335, 335, 263, 335, 335, 335, 335, 198, 335, 335, + 335, 335, 224, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 298, 299, 167, 335, 335, 76, 335, 335, + 335, 335, 177, 335, 335, 115, 116, 335, 335, 335, + 335, 162, 335, 164, 335, 203, 335, 335, 335, 335, + 168, 335, 335, 233, 335, 335, 335, 335, 335, 335, + + 335, 145, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 241, 335, 335, 335, 335, 335, + 335, 335, 307, 335, 24, 335, 273, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 86, 204, 335, 335, 261, 335, 292, 335, 197, + 335, 335, 335, 335, 56, 335, 335, 335, 335, 4, + 335, 335, 335, 335, 128, 144, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 236, 37, 38, 335, 335, 335, + 335, 335, 335, 335, 281, 335, 335, 335, 335, 335, + + 335, 335, 249, 335, 335, 335, 335, 335, 335, 335, + 335, 207, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 85, 335, 57, 267, 335, 237, + 335, 335, 335, 335, 11, 335, 335, 335, 335, 335, + 335, 127, 335, 335, 335, 335, 205, 91, 335, 40, + 335, 335, 335, 335, 335, 335, 335, 335, 173, 335, + 335, 335, 335, 335, 147, 335, 335, 335, 335, 240, + 335, 335, 335, 335, 335, 248, 335, 335, 335, 335, + 141, 335, 335, 335, 122, 123, 335, 335, 335, 93, + 97, 92, 335, 335, 335, 335, 83, 335, 335, 335, + + 335, 335, 10, 335, 335, 335, 265, 301, 335, 335, + 335, 335, 306, 39, 335, 335, 335, 335, 335, 172, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 98, 96, 335, 51, 335, 335, 84, + 289, 335, 335, 335, 335, 335, 335, 335, 191, 335, + 335, 335, 335, 335, 206, 335, 335, 335, 335, 335, + 335, 335, 335, 163, 78, 335, 335, 335, 335, 335, + 282, 335, 335, 335, 335, 335, 335, 335, 245, 335, + 335, 244, 142, 335, 335, 95, 48, 335, 148, 149, + + 152, 153, 150, 151, 87, 335, 266, 335, 335, 335, + 335, 166, 335, 335, 335, 335, 335, 235, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 179, 178, 41, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 102, 335, 234, 335, + 258, 286, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 308, 335, 49, 5, 335, 335, 226, + 335, 335, 287, 335, 335, 335, 335, 335, 335, 335, + + 335, 335, 246, 25, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 247, 335, 335, 335, + 146, 335, 335, 335, 335, 335, 335, 335, 335, 180, + 335, 187, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 283, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 305, + 335, 335, 254, 335, 335, 335, 335, 335, 284, 335, + 335, 335, 335, 335, 335, 285, 335, 335, 335, 252, + 335, 255, 256, 335, 335, 335, 335, 335, 253, 257, + 0 + } ; static yyconst flex_int32_t yy_ec[256] = @@ -779,17 +784,17 @@ static yyconst flex_int32_t yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[3271] = +static yyconst flex_int16_t yy_base[3310] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 3165, 3121, 81, 6365, - 6365, 6365, 129, 52, 130, 63, 131, 152, 70, 140, + 90, 112, 96, 118, 124, 136, 3493, 3402, 81, 6426, + 6426, 6426, 129, 52, 130, 63, 131, 152, 70, 140, 149, 156, 57, 88, 76, 173, 175, 95, 184, 145, - 185, 205, 194, 204, 178, 123, 3093, 6365, 6365, 6365, - 107, 2724, 6365, 6365, 6365, 154, 2535, 2515, 6365, 6365, - 6365, 226, 2454, 6365, 6365, 6365, 163, 2353, 6365, 238, - 6365, 242, 148, 2067, 1986, 6365, 6365, 6365, 246, 1743, - 6365, 6365, 6365, 250, 1651, 254, 219, 0, 258, 0, + 185, 205, 194, 204, 178, 123, 3176, 6426, 6426, 6426, + 107, 2960, 6426, 6426, 6426, 154, 2373, 2342, 6426, 6426, + 6426, 226, 2208, 6426, 6426, 6426, 163, 2071, 6426, 238, + 6426, 242, 148, 1858, 1710, 6426, 6426, 6426, 246, 1553, + 6426, 6426, 6426, 250, 1440, 254, 219, 0, 258, 0, 0, 165, 250, 191, 215, 243, 252, 256, 92, 260, 261, 262, 264, 265, 266, 273, 270, 277, 278, 281, @@ -797,8 +802,8 @@ static yyconst flex_int16_t yy_base[3271] = 313, 314, 307, 323, 317, 312, 328, 326, 330, 334, 337, 340, 342, 343, 344, 346, 349, 354, 348, 356, 364, 357, 361, 359, 372, 376, 365, 360, 377, 380, - 384, 385, 387, 388, 391, 399, 389, 1400, 411, 1203, - 415, 1088, 422, 1027, 689, 426, 406, 430, 434, 0, + 384, 385, 387, 388, 391, 399, 389, 1400, 411, 1086, + 415, 984, 422, 871, 689, 426, 406, 430, 434, 0, 411, 280, 438, 233, 181, 442, 430, 442, 419, 438, 439, 441, 440, 443, 444, 445, 446, 449, 463, 455, 456, 467, 471, 472, 469, 476, 474, 460, 482, 488, @@ -819,693 +824,703 @@ static yyconst flex_int16_t yy_base[3271] = 745, 743, 747, 749, 750, 766, 754, 739, 759, 767, 758, 760, 768, 774, 793, 779, 781, 789, 790, 791, 795, 797, 805, 807, 796, 809, 803, 810, 812, 813, - 822, 818, 6365, 817, 820, 833, 826, 834, 835, 836, - 841, 842, 823, 849, 847, 848, 852, 874, 856, 858, - 854, 863, 866, 6365, 864, 868, 898, 870, 872, 892, - 888, 884, 887, 889, 899, 896, 909, 902, 907, 911, - 922, 918, 919, 920, 921, 924, 930, 937, 932, 934, - - 859, 935, 944, 942, 943, 946, 950, 952, 953, 955, - 956, 769, 958, 962, 964, 973, 957, 965, 963, 975, - 977, 981, 982, 992, 985, 984, 998, 988, 1010, 1005, - 1006, 1007, 1013, 1009, 1008, 1017, 1019, 1021, 1022, 1023, - 1024, 1035, 1030, 1031, 1033, 1037, 1038, 1039, 1041, 1044, - 1045, 1047, 1049, 1051, 1050, 1056, 1060, 1058, 1066, 1061, - 6365, 1068, 1070, 1072, 1073, 1074, 1075, 6365, 1077, 1071, - 1076, 1078, 1090, 1093, 1104, 1081, 1085, 1100, 1103, 1101, - 1105, 1113, 1109, 1114, 1116, 1112, 1118, 1119, 1121, 1124, - 1122, 1125, 1130, 1131, 1132, 1133, 1152, 6365, 1136, 1139, - - 1144, 1138, 1143, 1145, 1164, 1150, 1162, 1161, 1170, 1181, - 1174, 1182, 1176, 1163, 1187, 1184, 1191, 1189, 1193, 1195, - 1194, 1196, 1197, 1198, 1200, 1201, 1206, 6365, 1208, 1211, - 1220, 1221, 1222, 1223, 1224, 1225, 1137, 1226, 1228, 1227, - 1231, 1235, 1245, 1252, 1236, 1253, 1239, 1254, 1249, 1250, - 1256, 1259, 1258, 1260, 1270, 1266, 1272, 1281, 1284, 1283, - 1286, 1293, 1295, 1275, 1288, 1298, 1268, 1290, 1291, 1302, - 1292, 1303, 1304, 1306, 1313, 1308, 1311, 1314, 1316, 1317, - 1320, 1315, 1322, 1321, 1324, 1331, 1328, 1332, 1339, 1334, - 1340, 1338, 1343, 1345, 1348, 1349, 1354, 6365, 1361, 1357, - - 1362, 1360, 1367, 1368, 1370, 1358, 1373, 1376, 1377, 1379, - 1378, 1381, 1385, 1382, 1387, 1388, 1392, 1395, 1393, 1402, - 1409, 1408, 1410, 1396, 1412, 1419, 1416, 1423, 1422, 1418, - 1424, 1433, 1428, 1431, 1430, 1440, 1420, 1436, 1437, 1438, - 1446, 1448, 1451, 1459, 1452, 1456, 1463, 1465, 1460, 1232, - 1467, 1468, 1471, 1472, 1473, 1474, 1475, 1482, 1477, 1478, - 1479, 1483, 1484, 1480, 1488, 1492, 1503, 1496, 1501, 1504, - 1505, 1508, 1509, 1506, 1511, 1514, 1515, 1516, 1517, 1518, - 1526, 1520, 1525, 1528, 1535, 1537, 1538, 1541, 1543, 1544, - 1545, 1546, 1555, 1547, 1556, 1558, 1548, 1559, 1561, 1564, - - 1571, 1566, 1572, 1575, 1576, 1578, 1577, 1580, 1581, 1588, - 1589, 1593, 6365, 1585, 1601, 1583, 1596, 1597, 1599, 1605, - 1612, 1607, 1610, 1608, 1611, 1613, 1637, 6365, 1614, 6365, - 6365, 315, 6365, 6365, 1616, 1621, 6365, 1622, 1631, 1618, - 1641, 1619, 1643, 1647, 1630, 1638, 1635, 1660, 1661, 1664, - 1632, 1666, 1667, 1650, 1672, 1670, 1677, 1678, 1681, 1682, - 1689, 1687, 1690, 1686, 1697, 1695, 1699, 1703, 1705, 1707, - 1710, 1692, 1712, 1713, 1715, 1717, 1718, 1714, 1721, 1723, - 1720, 1727, 1726, 1736, 1732, 1741, 1750, 6365, 1742, 1751, - 1752, 1753, 1760, 1728, 1755, 1756, 1763, 1766, 1759, 1757, - - 1768, 1769, 1770, 1772, 1774, 1777, 1779, 1786, 1781, 6365, - 1782, 1784, 1787, 1790, 1788, 1796, 1798, 1792, 1794, 1801, - 1802, 1813, 1804, 1808, 1809, 1816, 1814, 1818, 6365, 1820, - 1827, 1824, 1830, 1831, 1817, 1833, 1832, 1836, 1834, 1839, - 1840, 1841, 1842, 1855, 1848, 1846, 1847, 1850, 1863, 1851, - 1867, 1871, 1860, 1868, 1873, 1874, 1875, 1876, 1878, 1879, - 1887, 1889, 1886, 1890, 1885, 1894, 1902, 1903, 1891, 1892, - 1901, 1908, 1913, 1915, 1916, 1917, 1911, 1926, 1918, 1922, - 1923, 1925, 1933, 1928, 1936, 1944, 1931, 1934, 1937, 1939, - 6365, 1946, 1947, 6365, 1949, 1948, 1950, 1972, 1951, 1955, - - 1963, 1957, 1960, 1965, 1964, 1966, 1982, 1976, 1992, 1989, - 1994, 1995, 1997, 2000, 1984, 2001, 2002, 2003, 2004, 2010, - 1967, 2009, 2013, 2023, 2021, 2027, 2031, 2026, 2028, 2032, - 2051, 2029, 2030, 2039, 2033, 2036, 2038, 2034, 2040, 2044, - 2049, 2046, 2061, 2064, 2056, 2060, 2066, 2073, 2075, 2058, - 6365, 2086, 2082, 2081, 2083, 2093, 2089, 2088, 6365, 2090, - 2092, 2095, 2097, 2103, 2098, 2104, 2102, 2105, 2106, 2108, - 2114, 2115, 2110, 2113, 2127, 6365, 2118, 6365, 2125, 2128, - 2131, 2129, 2133, 2132, 2135, 2136, 6365, 6365, 2137, 2144, - 2145, 2155, 2152, 6365, 2138, 2162, 6365, 2159, 2164, 2157, - - 2158, 2166, 2168, 2170, 2169, 2179, 2172, 2180, 2175, 2176, - 2177, 6365, 2185, 2187, 2189, 2193, 2195, 2196, 2197, 2200, - 6365, 2199, 2203, 2204, 2213, 2215, 2209, 2206, 2217, 2221, - 2216, 2223, 2225, 2226, 2227, 2236, 2237, 2228, 2238, 2239, - 2241, 6365, 2232, 2246, 2253, 2249, 2252, 2248, 2255, 2256, - 2258, 2259, 2260, 2261, 2265, 2267, 2268, 2275, 2276, 2271, - 2273, 2281, 2282, 2284, 2285, 2292, 2289, 2290, 2291, 2293, - 6365, 2294, 2296, 2300, 171, 2302, 2304, 2303, 2306, 2305, - 2309, 2312, 2323, 2327, 2322, 2324, 2326, 2325, 2331, 2333, - 2334, 2335, 2336, 2337, 2341, 2340, 6365, 2343, 2346, 2348, - - 2349, 2351, 2352, 2362, 6365, 2354, 2368, 2365, 2374, 2375, - 2363, 2380, 2371, 2361, 2384, 2386, 2385, 2387, 2389, 2388, - 2392, 2395, 6365, 2397, 2400, 2401, 2398, 2407, 2409, 2408, - 2410, 2411, 2415, 2416, 2420, 2422, 2419, 2421, 2423, 2424, - 2427, 2430, 2432, 2436, 2437, 2438, 2439, 2443, 2441, 2447, - 2448, 6365, 2457, 2449, 2459, 2461, 2450, 2460, 2463, 2477, - 2467, 2474, 2472, 2478, 2489, 2480, 2482, 2487, 2483, 2495, - 2492, 2505, 2504, 2506, 2513, 2496, 2515, 2518, 2507, 2510, - 2520, 2519, 2525, 2522, 2524, 2532, 2537, 2533, 2540, 2534, - 2545, 2558, 2549, 6365, 2547, 2553, 2541, 2557, 2570, 2562, - - 2561, 2567, 2563, 2565, 2573, 2575, 2576, 2584, 2579, 2581, - 2582, 2586, 2585, 2588, 2587, 2593, 2595, 2602, 2598, 2604, - 2606, 6365, 2607, 2609, 2611, 2612, 2616, 2617, 2620, 2622, - 2624, 2625, 2626, 2628, 2631, 2632, 2633, 2634, 2636, 2638, - 2641, 6365, 2649, 2642, 2643, 2644, 2650, 2654, 2656, 2660, - 2663, 2666, 2667, 2668, 2669, 2670, 6365, 2678, 2679, 2675, - 2687, 2677, 2682, 2684, 2689, 2690, 6365, 2691, 2692, 2693, - 2700, 2702, 2697, 6365, 2704, 2699, 2705, 2707, 2708, 2709, - 2711, 2714, 2717, 2718, 2721, 2726, 2733, 2722, 2730, 6365, - 2728, 2742, 2734, 2740, 2738, 2744, 2748, 2750, 2751, 2753, - - 2755, 2760, 6365, 2767, 2766, 2764, 2777, 2754, 2769, 2772, - 2778, 2779, 2780, 2781, 2782, 2785, 6365, 2786, 2788, 2789, - 2791, 2793, 2794, 2796, 2808, 2799, 2803, 2804, 2809, 2810, - 2813, 2814, 2816, 2821, 2817, 2820, 2827, 2830, 2831, 2833, - 2836, 2844, 2834, 2842, 2843, 2839, 2846, 2847, 2856, 2857, - 2858, 2860, 6365, 2863, 2864, 2865, 2854, 2866, 2869, 2870, - 2873, 2875, 2871, 2879, 2877, 2881, 2884, 2894, 2898, 2886, - 2889, 2896, 2899, 2900, 2902, 2901, 2904, 2905, 2914, 2911, - 2910, 2919, 2912, 2921, 2928, 2925, 2926, 2929, 2930, 2932, - 2917, 2935, 2933, 2937, 2939, 2942, 2953, 2954, 2943, 2955, - - 2956, 2957, 2958, 6365, 2961, 2962, 2963, 2966, 2969, 2972, - 2975, 2982, 2973, 2974, 2984, 2990, 2991, 2981, 2992, 2983, - 2999, 2997, 6365, 2998, 6365, 3000, 3002, 3004, 3012, 3008, - 6365, 3014, 6365, 3015, 3020, 3009, 3011, 6365, 3023, 3017, - 3022, 3029, 3024, 3032, 3033, 3035, 3034, 3041, 3036, 3038, - 3043, 3044, 3046, 3049, 3050, 3054, 3051, 3061, 3067, 3055, - 3064, 3057, 3062, 3070, 3072, 3076, 6365, 3078, 3080, 3082, - 3083, 3084, 3085, 3086, 3087, 3089, 3090, 3092, 3102, 3098, - 3108, 3095, 3114, 3117, 3124, 3105, 3126, 6365, 3109, 3128, - 3119, 3129, 6365, 3131, 3106, 3132, 3139, 3134, 3137, 3141, - - 3142, 3143, 3146, 3147, 3149, 3154, 3158, 3161, 3162, 6365, - 3167, 3163, 3150, 3170, 3178, 3180, 3185, 3182, 3183, 3188, - 3192, 3190, 3191, 3153, 3193, 3194, 3196, 3203, 3206, 3202, - 3211, 3198, 3208, 3210, 3215, 3201, 3216, 3217, 3218, 3224, - 3225, 3222, 3223, 3226, 3227, 6365, 3229, 3230, 3231, 3249, - 3233, 3234, 3245, 3235, 6365, 3251, 3247, 3252, 3258, 3260, - 3262, 3255, 3263, 3264, 3265, 3266, 3268, 3271, 3272, 6365, - 3276, 6365, 3273, 3286, 3279, 3285, 3290, 3292, 3294, 3300, - 3293, 3295, 3303, 3304, 3301, 3305, 3307, 3311, 3313, 3315, - 3318, 3327, 3317, 3319, 3323, 3328, 3329, 3331, 6365, 6365, - - 3333, 3334, 3335, 3338, 3339, 3344, 3346, 3350, 3351, 3353, - 3355, 3357, 3366, 6365, 3363, 3364, 3367, 3368, 3378, 3369, - 3381, 3388, 3385, 3392, 3391, 6365, 3374, 3370, 3399, 3383, - 3395, 3406, 6365, 3401, 6365, 3402, 3403, 3405, 3407, 3410, - 3411, 3412, 3414, 3418, 3425, 3433, 3429, 3431, 3415, 3420, - 3432, 3434, 3443, 3436, 3440, 3441, 6365, 3445, 3446, 3448, - 3449, 3450, 3457, 3460, 3453, 6365, 3461, 3463, 3465, 3467, - 3468, 3470, 3472, 3474, 3475, 3479, 3481, 6365, 3477, 3483, - 3490, 3485, 3487, 3492, 3495, 3499, 3501, 6365, 3504, 3506, - 3513, 3511, 3508, 3512, 3516, 3517, 3518, 3521, 3523, 3522, - - 3524, 3525, 3526, 3528, 3530, 3533, 3531, 3544, 3545, 3532, - 3553, 3554, 3536, 6365, 3546, 3558, 3559, 3560, 3561, 3567, - 3568, 3571, 3573, 3562, 3577, 3584, 3566, 3574, 3589, 3586, - 3597, 3593, 6365, 3598, 3594, 3605, 3579, 3600, 3602, 3606, - 3608, 3610, 3607, 3611, 3614, 3617, 3624, 3619, 3620, 3621, - 3629, 3625, 6365, 3636, 3634, 3627, 3637, 3643, 3644, 3652, - 3647, 3649, 3650, 3658, 3651, 3660, 3653, 3662, 3663, 3666, - 3655, 6365, 6365, 3668, 3670, 3672, 6365, 3674, 3676, 3685, - 3687, 3678, 3688, 3682, 3691, 3680, 3692, 3690, 3694, 6365, - 3696, 3704, 3702, 3705, 3713, 3714, 3718, 3715, 3719, 3709, - - 3711, 3721, 3723, 3724, 3725, 3731, 3740, 3741, 3727, 3737, - 3739, 6365, 3736, 3738, 3744, 3746, 3748, 3750, 6365, 3753, - 3754, 3755, 3757, 3763, 3764, 3769, 3771, 3773, 3774, 3776, - 3777, 3778, 3779, 3781, 3786, 3784, 3791, 3792, 3783, 6365, - 3796, 3797, 3800, 3803, 6365, 3807, 3810, 3817, 3818, 3814, - 3816, 3815, 3825, 6365, 3822, 3824, 3823, 3826, 3836, 3831, - 3838, 3837, 3829, 6365, 3833, 3839, 3843, 6365, 3844, 3849, - 3855, 3857, 3846, 3865, 3861, 3863, 3864, 3860, 6365, 3871, - 6365, 3872, 3862, 3877, 6365, 3873, 3879, 3881, 3883, 3880, - 3887, 3888, 3894, 3896, 3884, 3890, 3898, 3900, 3901, 3902, - - 3909, 3906, 3908, 3910, 3911, 6365, 3914, 3912, 3913, 3920, - 3931, 3918, 3923, 3929, 3933, 3934, 6365, 6365, 3937, 6365, - 3939, 3940, 3941, 6365, 3943, 3945, 3952, 3944, 3948, 3951, - 3955, 3960, 6365, 3963, 3964, 6365, 3966, 3973, 3969, 3970, - 3971, 3974, 3977, 3978, 3981, 3982, 3983, 3979, 3985, 3984, - 6365, 3987, 3988, 3989, 3997, 3980, 4002, 4006, 4008, 4004, - 6365, 4010, 4012, 4016, 4018, 4019, 6365, 4020, 6365, 4017, - 4021, 4025, 4031, 4027, 6365, 4036, 4028, 4040, 4032, 4043, - 4045, 4044, 4050, 4041, 4051, 4060, 4052, 4053, 4056, 6365, - 4061, 4062, 4068, 4069, 4063, 4065, 4079, 4072, 4081, 4074, - - 4082, 4087, 4084, 4088, 4093, 4091, 4097, 4095, 6365, 4099, - 4101, 4104, 4115, 4107, 4105, 6365, 4106, 4119, 4121, 6365, - 4110, 4112, 4120, 4128, 4122, 4130, 4131, 4135, 4136, 6365, - 4133, 4134, 4137, 4138, 4139, 4141, 6365, 6365, 4152, 6365, - 4153, 4142, 4154, 4155, 4156, 4161, 4163, 4166, 4168, 4160, - 4172, 4177, 4174, 4164, 4184, 4191, 4194, 4189, 4190, 4180, - 6365, 6365, 4196, 4201, 4197, 4204, 4207, 4193, 4199, 4215, - 4213, 4210, 4220, 4221, 4228, 6365, 4225, 4212, 4230, 4223, - 6365, 4214, 4231, 4224, 4233, 4235, 4237, 4238, 4241, 4244, - 4242, 4246, 4252, 4250, 4253, 4251, 4259, 4257, 4260, 4262, - - 4263, 4268, 4271, 6365, 4272, 4273, 4274, 4275, 4278, 4281, - 4282, 4283, 4284, 6365, 4289, 6365, 4288, 4285, 4294, 4307, - 4308, 4287, 4297, 4309, 4299, 4314, 4317, 4319, 4311, 4320, - 4321, 4325, 4328, 4330, 4331, 6365, 4335, 4324, 4332, 4338, - 4342, 4346, 4339, 4348, 4343, 4354, 4349, 4351, 4360, 4363, - 4355, 4357, 4365, 4367, 6365, 4368, 4371, 4372, 4375, 4376, - 4377, 4378, 4384, 4388, 4380, 4382, 4389, 4393, 6365, 4390, - 4395, 4396, 4398, 4404, 4401, 4407, 4406, 4409, 6365, 4414, - 4405, 4415, 4416, 4417, 4419, 4423, 4426, 4429, 4431, 4436, - 6365, 4428, 4441, 4442, 4432, 4445, 4434, 4443, 4444, 6365, - - 4459, 4460, 4451, 4467, 4450, 4468, 4469, 4472, 4453, 4463, - 4479, 4475, 4480, 4481, 4483, 4473, 4491, 4494, 4493, 6365, - 4486, 6365, 4495, 4498, 4502, 4500, 4503, 4505, 6365, 4507, - 4510, 4512, 4513, 4515, 6365, 4517, 4514, 4516, 4520, 6365, - 4518, 4533, 4519, 4522, 4536, 4540, 6365, 4543, 4544, 4545, - 4552, 4554, 4549, 4556, 4537, 4559, 4553, 4557, 4561, 4562, - 4570, 4567, 4568, 6365, 4572, 4566, 4575, 4577, 4584, 4579, - 4585, 4586, 4592, 4587, 6365, 4589, 4593, 4595, 4596, 4597, - 4598, 4599, 4608, 4603, 4606, 4607, 4611, 4612, 6365, 4617, - 4614, 4620, 4627, 4623, 4632, 6365, 6365, 4622, 4637, 4639, - - 4619, 4640, 6365, 6365, 4643, 4650, 4646, 4649, 4651, 6365, - 6365, 4653, 6365, 4654, 6365, 4655, 4657, 6365, 6365, 4656, - 4659, 4662, 4663, 4665, 6365, 4671, 6365, 4680, 4675, 4666, - 4677, 4678, 6365, 4679, 4681, 4687, 6365, 4688, 4690, 4689, - 4691, 6365, 4695, 4700, 4692, 4696, 6365, 4701, 4705, 4708, - 4709, 4710, 4712, 4716, 4715, 4720, 4721, 4723, 4722, 4725, - 4732, 4736, 4738, 4740, 4741, 4726, 4743, 4745, 4749, 4747, - 4751, 4752, 4754, 4756, 4757, 4761, 4765, 4758, 4762, 4628, - 4766, 4767, 4768, 4771, 4775, 4780, 4777, 4781, 4782, 4783, - 4784, 4785, 4788, 4789, 4792, 4794, 4797, 6365, 4793, 4798, - - 4803, 4810, 4804, 4814, 4816, 4806, 4823, 4824, 6365, 4827, - 6365, 4829, 4815, 4831, 4817, 4832, 6365, 4834, 4835, 4837, - 4838, 4839, 4840, 4841, 4844, 4845, 4849, 4850, 6365, 4856, - 4846, 6365, 4852, 4857, 4869, 6365, 4862, 4873, 4865, 4870, - 4875, 4876, 4877, 4878, 4881, 4879, 4885, 4887, 4889, 4893, - 4901, 4903, 4910, 4890, 4894, 4892, 4912, 4905, 4906, 4913, - 4914, 4920, 4921, 4928, 6365, 4915, 6365, 4922, 4924, 4929, - 4930, 4932, 4933, 4935, 6365, 6365, 4936, 4939, 4945, 4940, - 4946, 4948, 4957, 6365, 4951, 4958, 4960, 4952, 6365, 4963, - 4949, 4967, 4971, 6365, 4968, 4972, 4973, 4975, 4976, 4983, - - 4979, 4985, 4986, 4988, 4990, 6365, 6365, 6365, 6365, 4991, - 4993, 4997, 4998, 4999, 5001, 5004, 5006, 5003, 6365, 5008, - 6365, 6365, 5009, 5016, 5017, 5019, 5020, 5022, 5023, 5025, - 6365, 5027, 5029, 5030, 5036, 5038, 5040, 5044, 5045, 5048, - 5046, 5047, 5055, 5054, 5056, 5058, 5061, 5063, 5068, 6365, - 6365, 5069, 5071, 5072, 5080, 5076, 5078, 5077, 5090, 5085, - 5087, 5086, 5088, 5093, 5094, 5102, 5104, 5100, 5097, 6365, - 5106, 5107, 5108, 6365, 5113, 6365, 5114, 5116, 5099, 5110, - 5118, 5120, 5130, 5124, 6365, 6365, 5132, 5128, 6365, 6365, - 5135, 5136, 5138, 5140, 5141, 5137, 5143, 5145, 5142, 6365, - - 5147, 6365, 5148, 5149, 5151, 5152, 5165, 5169, 5170, 5167, - 5171, 5173, 6365, 5172, 5174, 6365, 5176, 5175, 5182, 6365, - 5183, 5185, 5191, 5193, 6365, 5195, 5196, 5199, 6365, 5202, - 6365, 5186, 5205, 5207, 5214, 6365, 5198, 5211, 6365, 5216, - 5221, 5222, 5217, 6365, 5209, 6365, 5223, 5229, 5231, 5234, - 5224, 5236, 5237, 5226, 5238, 5246, 5242, 5245, 6365, 6365, - 135, 5254, 5247, 5251, 5255, 5256, 5263, 5258, 5260, 5266, - 6365, 6365, 5267, 6365, 5261, 5273, 6365, 5259, 5274, 5278, - 5268, 5282, 5280, 5281, 5288, 5290, 5291, 5292, 5293, 5294, - 5296, 5297, 5312, 5299, 5309, 5314, 5316, 5319, 5321, 5310, - - 5323, 5324, 5325, 5327, 5329, 5330, 5332, 5333, 6365, 5336, - 5337, 5331, 6365, 5342, 5338, 5348, 5350, 6365, 5357, 5354, - 5358, 5359, 6365, 5343, 5365, 5362, 5360, 5370, 5377, 5373, - 5372, 5374, 6365, 6365, 6365, 5375, 5383, 6365, 5388, 5379, - 5384, 5389, 6365, 5390, 5391, 6365, 6365, 5392, 5395, 5394, - 5402, 6365, 5398, 6365, 5397, 6365, 5400, 5401, 5411, 5413, - 6365, 5415, 5423, 6365, 5426, 5429, 5431, 5432, 5416, 5419, - 5434, 6365, 5443, 5435, 5442, 5445, 5433, 5446, 5448, 5449, - 5450, 5459, 5452, 5456, 6365, 5457, 5460, 5462, 5463, 5466, - 5471, 5472, 5470, 6365, 5474, 6365, 5408, 5475, 5476, 5482, - - 5478, 5479, 5481, 5492, 5484, 5483, 5495, 5500, 5496, 6365, - 5503, 5505, 6365, 5506, 6365, 5508, 6365, 5509, 5510, 5512, - 5511, 6365, 5514, 5517, 5518, 5519, 6365, 5522, 5520, 5524, - 5530, 6365, 6365, 5531, 5539, 5535, 5532, 5545, 5547, 5536, - 5549, 5542, 5550, 5552, 5561, 5557, 5558, 5560, 5563, 5564, - 5565, 6365, 6365, 6365, 5569, 5571, 5579, 5575, 5582, 5583, - 5578, 6365, 5584, 5587, 5588, 5590, 5598, 5594, 5600, 6365, - 5595, 5597, 5601, 5603, 5605, 5602, 5606, 5608, 6365, 5614, - 5619, 5620, 5622, 5623, 5630, 5632, 5634, 5624, 5641, 5637, - 6365, 5639, 6365, 6365, 5627, 6365, 5640, 5643, 5644, 5647, - - 6365, 5652, 5645, 5649, 5654, 5656, 5658, 6365, 5667, 5653, - 5660, 5670, 6365, 6365, 5672, 6365, 5677, 5678, 5668, 5680, - 5681, 5684, 5686, 5689, 6365, 5687, 5688, 5690, 5691, 5696, - 6365, 5697, 5698, 5699, 5700, 6365, 5704, 5709, 5706, 5710, - 5711, 6365, 5713, 5701, 5732, 5728, 6365, 5714, 5730, 5727, - 6365, 6365, 5737, 5739, 5741, 6365, 6365, 6365, 5742, 5729, - 5744, 6365, 5750, 5754, 5758, 5762, 5753, 6365, 5764, 5761, - 5766, 6365, 6365, 5765, 5767, 5768, 5770, 6365, 6365, 5746, - 5774, 5772, 5775, 5777, 6365, 5778, 5782, 5788, 5794, 5798, - 5786, 5790, 5799, 5806, 5809, 5802, 5804, 5807, 5810, 5812, - - 5813, 5821, 5822, 5818, 5826, 5830, 5834, 5831, 6365, 6365, - 5838, 5840, 5814, 6365, 6365, 5842, 5844, 5846, 5848, 5850, - 5852, 5854, 6365, 5855, 5857, 5858, 5859, 5860, 6365, 5862, - 5866, 5861, 5869, 5863, 5872, 5868, 5878, 6365, 6365, 5870, - 5712, 5874, 5884, 5879, 6365, 5886, 5893, 5890, 5891, 5892, - 5894, 5898, 6365, 5895, 5899, 6365, 6365, 6365, 5902, 6365, - 6365, 5903, 6365, 6365, 6365, 6365, 6365, 6365, 6365, 5906, - 6365, 5905, 5916, 5920, 5922, 6365, 5907, 5923, 5924, 5913, - 5925, 6365, 5926, 5927, 5931, 5935, 5940, 5941, 5934, 5943, - 5945, 5944, 5946, 5950, 5948, 5952, 5951, 5953, 5954, 5956, - - 6365, 6365, 6365, 5959, 5966, 5968, 5969, 5976, 5979, 5982, - 5984, 5970, 5977, 5985, 5987, 5990, 5991, 5993, 6000, 5996, - 5999, 5998, 6001, 6005, 6007, 6002, 6009, 6013, 6365, 6014, - 6365, 6015, 6365, 6365, 6019, 6022, 6024, 6020, 6031, 6036, - 6026, 6034, 6027, 6037, 6044, 6049, 6365, 6365, 6035, 6038, - 6365, 6041, 6050, 6365, 6045, 6052, 6051, 6053, 6059, 6060, - 6062, 6063, 6074, 6365, 6365, 6061, 6064, 6069, 6076, 6078, - 6077, 6084, 6086, 6087, 6089, 6080, 6096, 6365, 6098, 6095, - 6102, 6365, 6103, 6093, 6104, 6105, 6106, 6114, 6109, 6110, - 6365, 6115, 6365, 6118, 6120, 6121, 6119, 6122, 6127, 6130, - - 6134, 6133, 6365, 6135, 6136, 6143, 6144, 6147, 6149, 6150, - 6151, 6153, 6155, 6156, 6164, 6159, 6165, 6167, 6168, 6169, - 6365, 6175, 6171, 6365, 6176, 6177, 6178, 6179, 6183, 6365, - 6192, 6180, 6185, 6193, 6196, 6200, 6365, 6202, 6206, 6203, - 6365, 6208, 6365, 6365, 6209, 6211, 6212, 6216, 6218, 6365, - 6365, 6365, 6245, 6252, 6259, 6266, 6273, 6280, 6287, 88, - 6294, 6301, 6308, 6315, 6322, 6329, 6336, 6343, 6350, 6357 + 822, 818, 6426, 817, 820, 833, 826, 834, 835, 836, + 841, 842, 823, 849, 847, 848, 852, 874, 856, 863, + 854, 864, 858, 6426, 867, 868, 898, 881, 871, 889, + 885, 878, 887, 892, 894, 902, 911, 904, 908, 909, + 922, 915, 919, 924, 918, 927, 925, 935, 936, 931, + + 934, 941, 948, 943, 945, 947, 956, 949, 950, 957, + 958, 769, 960, 967, 970, 964, 959, 975, 976, 977, + 979, 982, 983, 987, 985, 998, 1005, 999, 1012, 986, + 1010, 1011, 1014, 1013, 1019, 1020, 1022, 1024, 1025, 1027, + 1028, 1032, 1033, 1031, 1034, 1036, 1038, 1044, 1042, 1047, + 1048, 1049, 1056, 1058, 1051, 1064, 1052, 1050, 1068, 1060, + 6426, 1072, 1070, 1075, 1076, 1074, 1077, 6426, 1078, 1079, + 1080, 1081, 1090, 1092, 1093, 1099, 1088, 1103, 1105, 1106, + 1107, 1115, 1110, 1113, 1118, 1117, 1119, 1121, 1123, 1125, + 1127, 1126, 1128, 1134, 1135, 1138, 1155, 6426, 1137, 1145, + + 1142, 1139, 1148, 1149, 1167, 1147, 1165, 1166, 1159, 1179, + 1177, 1178, 1180, 1186, 1187, 1188, 1190, 1195, 1191, 1140, + 1193, 1197, 1198, 1199, 1201, 1200, 1202, 1205, 6426, 1203, + 1214, 1227, 1213, 1222, 1223, 1224, 1226, 1228, 1229, 1230, + 1232, 1231, 1236, 1240, 1251, 1235, 1254, 1249, 1250, 1252, + 1256, 1257, 1260, 1258, 1259, 1270, 1265, 1273, 1280, 1282, + 1284, 1286, 1287, 1294, 1268, 1290, 1292, 1291, 1297, 1298, + 1300, 1299, 1301, 1307, 1305, 1314, 1311, 1310, 1312, 1313, + 1318, 1320, 1321, 1325, 1322, 1323, 1337, 1329, 1332, 1333, + 1339, 1347, 1340, 1349, 1350, 1351, 1352, 1353, 6426, 1360, + + 1361, 1359, 1363, 1364, 1371, 1372, 1375, 1376, 1373, 1379, + 1378, 1381, 1385, 1386, 1387, 1382, 1388, 1390, 1399, 1403, + 1404, 1413, 1405, 1412, 1396, 1415, 1422, 1418, 1425, 1421, + 1420, 1426, 1433, 1428, 1430, 1434, 1442, 1437, 1435, 1446, + 1438, 1447, 1450, 1449, 1461, 1459, 1460, 1469, 1472, 1462, + 1464, 1470, 1474, 1475, 1477, 1478, 1479, 1480, 1488, 1481, + 1483, 1484, 1486, 1490, 1491, 1494, 1497, 1509, 1502, 1505, + 1504, 1507, 1511, 1513, 1514, 1518, 1519, 1520, 1522, 1521, + 1524, 1528, 1529, 1533, 1534, 1540, 1541, 1542, 1544, 1547, + 1548, 1551, 1550, 1559, 1561, 1549, 1562, 1565, 1568, 1570, + + 1571, 1572, 1573, 1580, 1575, 1578, 1581, 1585, 1586, 1591, + 1592, 1595, 1597, 1600, 6426, 1598, 1610, 1588, 1611, 1606, + 1603, 1605, 1619, 1612, 1614, 1616, 1622, 1624, 1648, 6426, + 1625, 6426, 6426, 315, 6426, 6426, 1626, 1627, 6426, 1630, + 1629, 1639, 1637, 1631, 1642, 1645, 1646, 1649, 1651, 1658, + 1672, 1654, 1661, 1662, 1665, 1675, 1677, 1678, 1666, 1686, + 1687, 1689, 1694, 1695, 1703, 1696, 1700, 1706, 1708, 1714, + 1710, 1719, 1720, 1709, 1716, 1723, 1724, 1726, 1725, 1728, + 1731, 1734, 1736, 1732, 1730, 1738, 1747, 1749, 1740, 1757, + 6426, 1753, 1761, 1765, 1762, 1769, 1768, 1764, 1766, 1773, + + 1776, 1777, 1778, 1779, 1780, 1781, 1783, 1743, 1786, 1789, + 1797, 1790, 6426, 1792, 1793, 1795, 1798, 1799, 1804, 1805, + 1806, 1811, 1812, 1813, 1823, 1814, 1816, 1818, 1824, 1825, + 1827, 6426, 1832, 1829, 1835, 1839, 1840, 1842, 1843, 1845, + 1846, 1841, 1847, 1848, 1851, 1853, 1860, 1855, 1859, 1857, + 1865, 1868, 1873, 1875, 1878, 1881, 1882, 1883, 1884, 1885, + 1886, 1888, 1889, 1896, 1899, 1897, 1900, 1898, 1895, 1910, + 1919, 1902, 1914, 1916, 1917, 1918, 1920, 1929, 1924, 1925, + 1931, 1932, 1930, 1935, 1937, 1940, 1947, 1938, 1948, 1956, + 1942, 1949, 1954, 1951, 6426, 1958, 1960, 6426, 1962, 1961, + + 1963, 1985, 1965, 1967, 1968, 1973, 1977, 1976, 1978, 1986, + 1987, 1989, 2005, 1998, 1995, 2008, 2010, 2011, 1979, 2013, + 2014, 2015, 2017, 2020, 2021, 2030, 2038, 2039, 2023, 2042, + 2040, 1997, 2041, 2043, 2062, 2044, 2045, 2051, 2046, 2047, + 2049, 2059, 2052, 2053, 2055, 2057, 2075, 2078, 2077, 2079, + 2064, 2084, 2086, 2087, 2090, 6426, 2098, 2093, 2094, 2095, + 2099, 2107, 2103, 2104, 6426, 2105, 2106, 2109, 2117, 2118, + 2116, 2119, 2120, 2122, 2121, 2126, 2128, 2130, 2142, 2129, + 2149, 6426, 2131, 6426, 2144, 2132, 2134, 2145, 2133, 2150, + 2155, 2156, 6426, 6426, 2157, 2154, 2166, 2170, 2168, 6426, + + 2169, 2177, 6426, 2174, 2179, 2172, 2173, 2180, 2183, 2184, + 2187, 2194, 2189, 2198, 2190, 2195, 2199, 6426, 2203, 2191, + 2210, 2211, 2204, 2214, 2217, 2218, 6426, 2221, 2207, 2225, + 2232, 2229, 2224, 2234, 2235, 2236, 2239, 2240, 2241, 2242, + 2243, 2250, 2253, 2246, 2249, 2255, 2264, 6426, 2248, 2262, + 2269, 2265, 2268, 2271, 2272, 2273, 2274, 2275, 2276, 2277, + 2284, 2283, 2285, 2286, 2296, 2298, 2287, 2294, 2304, 2295, + 2306, 2300, 2311, 2308, 2309, 2310, 2313, 6426, 2315, 2317, + 2319, 171, 2321, 2322, 2324, 2323, 2331, 2333, 2325, 2347, + 2348, 2327, 2344, 2350, 2346, 2353, 2354, 2355, 2356, 2357, + + 2358, 2359, 2361, 6426, 2363, 2364, 2366, 2370, 2369, 2372, + 2377, 6426, 2379, 2386, 2389, 2398, 2381, 2390, 2399, 2395, + 2400, 2401, 2403, 2405, 2407, 2406, 2409, 2415, 2412, 6426, + 2417, 2420, 2422, 2413, 2429, 2428, 2421, 2435, 2436, 2437, + 2440, 2438, 2439, 2442, 2441, 2443, 2444, 2449, 2448, 2445, + 2447, 2457, 2458, 2459, 2468, 2469, 2461, 2470, 2471, 6426, + 2481, 2472, 2476, 2474, 2477, 2479, 2484, 2492, 2499, 2483, + 2494, 2496, 2500, 2510, 2503, 2505, 2512, 2520, 2517, 2525, + 2513, 2526, 2527, 2535, 2524, 2537, 2539, 2528, 2540, 2541, + 2543, 2546, 2547, 2549, 2559, 2560, 2552, 2562, 2555, 2576, + + 2581, 2572, 6426, 2570, 2565, 2568, 2582, 2590, 2585, 2587, + 2588, 2592, 2595, 2596, 2597, 2598, 2605, 2600, 2602, 2603, + 2608, 2607, 2611, 2614, 2618, 2619, 2623, 2625, 2627, 2628, + 6426, 2631, 2633, 2629, 2635, 2637, 2639, 2642, 2645, 2647, + 2649, 2650, 2654, 2655, 2657, 2656, 2658, 2664, 2665, 2651, + 6426, 2674, 2666, 2678, 2668, 2679, 2672, 2685, 2686, 2687, + 2661, 2688, 2691, 2694, 2695, 2697, 6426, 2704, 2705, 2696, + 2712, 2707, 2703, 2708, 2714, 2711, 6426, 2715, 2717, 2718, + 2726, 2727, 2723, 6426, 2734, 2724, 2725, 2732, 2735, 2736, + 2733, 2739, 2742, 2743, 2746, 2748, 2755, 2749, 2756, 6426, + + 2757, 2766, 2759, 2758, 2763, 2769, 2770, 2773, 2774, 2775, + 2778, 2781, 6426, 2792, 2789, 2787, 2800, 2790, 2530, 2796, + 2797, 2801, 2803, 2804, 2805, 2807, 6426, 2808, 2811, 2812, + 2815, 2813, 2818, 2819, 2826, 2823, 2825, 2828, 2831, 2832, + 2833, 2834, 2841, 2840, 2837, 2849, 2850, 2853, 2854, 2856, + 2859, 2867, 2870, 2843, 2866, 2869, 2862, 2871, 2872, 2879, + 2880, 2887, 2882, 2884, 6426, 2889, 2886, 2891, 2893, 2894, + 2895, 2897, 2896, 2898, 2901, 2902, 2908, 2904, 2905, 2920, + 2923, 2907, 2915, 2925, 2926, 2928, 2929, 2930, 2931, 2932, + 2939, 2935, 2936, 2947, 2938, 2942, 2952, 2953, 2954, 2955, + + 2956, 2963, 2943, 2961, 2958, 2965, 2966, 2970, 2980, 2981, + 2967, 2982, 2983, 2984, 2985, 6426, 2988, 2989, 2990, 2993, + 2996, 2999, 3002, 3009, 3000, 3001, 3011, 3017, 3018, 3008, + 3019, 3010, 3026, 3024, 6426, 3025, 6426, 3027, 3029, 3031, + 3039, 3035, 6426, 3041, 6426, 3042, 3047, 3036, 3038, 6426, + 3050, 3044, 3049, 3056, 3051, 3059, 3060, 3062, 3061, 3068, + 3063, 3065, 3070, 3071, 3073, 3076, 3074, 3081, 3082, 3086, + 3090, 3091, 3078, 3102, 3084, 3094, 3100, 3092, 3107, 6426, + 3109, 3097, 3110, 3115, 3114, 3116, 3117, 3118, 3120, 3121, + 3123, 3127, 3122, 3132, 3124, 3136, 3135, 3145, 3146, 3153, + + 6426, 3148, 3150, 3151, 3152, 6426, 3154, 3155, 3156, 3160, + 3163, 3164, 3165, 3168, 3172, 3167, 3169, 3174, 3183, 3184, + 3187, 3188, 6426, 3190, 3193, 3175, 3202, 3196, 3203, 3210, + 3206, 3208, 3212, 3220, 3216, 3215, 3217, 3218, 3219, 3222, + 3229, 3230, 3226, 3233, 3232, 3236, 3243, 3240, 3234, 3238, + 3244, 3246, 3247, 3248, 3249, 3250, 3253, 3254, 3251, 6426, + 3259, 3265, 3263, 3272, 3268, 3269, 3273, 3278, 3274, 6426, + 3280, 3281, 3282, 3284, 3289, 3283, 3286, 3291, 3294, 3297, + 3299, 3302, 3304, 3303, 6426, 3305, 6426, 3307, 3308, 3318, + 3322, 3323, 3310, 3324, 3330, 3326, 3331, 3333, 3336, 3334, + + 3340, 3337, 3342, 3343, 3345, 3357, 3348, 3344, 3349, 3358, + 3359, 3363, 3360, 6426, 6426, 3365, 3366, 3367, 3369, 3371, + 3370, 3377, 3374, 3382, 3381, 3388, 3389, 3397, 6426, 3394, + 3395, 3393, 3398, 3406, 3401, 3405, 3417, 3413, 3420, 3416, + 6426, 3412, 3421, 3429, 3424, 3425, 3433, 6426, 3430, 6426, + 3426, 3431, 3436, 3439, 3440, 3441, 3442, 3443, 3447, 3455, + 3458, 3451, 3460, 3461, 3462, 3463, 3466, 3470, 3473, 3469, + 3471, 3472, 6426, 3475, 3476, 3484, 3489, 3492, 3493, 3477, + 3478, 6426, 3495, 3485, 3503, 3499, 3504, 3505, 3509, 3506, + 3510, 3511, 3513, 6426, 3512, 3514, 3521, 3526, 3519, 3522, + + 3530, 3532, 3540, 6426, 3536, 3533, 3549, 3545, 3546, 3548, + 3551, 3527, 3552, 3553, 3555, 3556, 3557, 3559, 3560, 3563, + 3564, 3566, 3565, 3577, 3576, 3579, 3584, 3586, 3570, 6426, + 3587, 3590, 3592, 3593, 3595, 3596, 3598, 3601, 3603, 3604, + 3615, 3616, 3605, 3607, 3619, 3621, 3629, 3627, 6426, 3637, + 3620, 3639, 3611, 3632, 3641, 3622, 3643, 3645, 3634, 3646, + 3647, 3650, 3653, 3660, 3656, 3657, 3655, 3659, 3671, 3661, + 6426, 3684, 3662, 3672, 3664, 3663, 3680, 3688, 3685, 3686, + 3689, 3691, 3692, 3696, 3693, 3698, 3699, 3702, 3703, 6426, + 6426, 3705, 3707, 3708, 6426, 3712, 3709, 3722, 3715, 3719, + + 3711, 3724, 3725, 3727, 3728, 3733, 3735, 6426, 3736, 3743, + 3738, 3739, 3748, 3750, 3755, 3747, 3756, 3749, 3745, 3760, + 3763, 3757, 3761, 3767, 3776, 3777, 3762, 3773, 3774, 6426, + 3779, 3780, 3781, 3784, 3785, 3790, 6426, 3789, 3791, 3792, + 3797, 3801, 3803, 3809, 3811, 3793, 3812, 3796, 3813, 3816, + 3817, 3827, 3819, 3823, 3830, 3831, 3835, 6426, 3824, 3838, + 3822, 3841, 6426, 3844, 3851, 3852, 6426, 3853, 3848, 3855, + 3856, 3863, 6426, 3858, 3861, 3859, 3862, 3872, 3864, 3873, + 3875, 3869, 6426, 3876, 3877, 3878, 6426, 3879, 3884, 3890, + 3892, 3893, 3900, 3895, 3897, 3898, 3899, 6426, 3905, 6426, + + 3903, 3907, 3911, 6426, 3909, 3914, 3915, 3917, 3918, 3923, + 3924, 3922, 3931, 3932, 3933, 3935, 3936, 3934, 3939, 3943, + 3940, 3941, 3945, 3946, 6426, 3947, 3949, 3956, 3951, 3961, + 3957, 3964, 3954, 3968, 3969, 6426, 6426, 3978, 6426, 3980, + 3970, 3972, 6426, 3974, 3979, 3987, 3984, 3990, 3992, 3996, + 3997, 6426, 3999, 4002, 6426, 3985, 4000, 4010, 4007, 4009, + 4012, 4015, 4011, 4013, 4017, 4018, 4021, 4023, 4019, 4022, + 4027, 6426, 4024, 4025, 4026, 4040, 4041, 4042, 4047, 4049, + 4043, 6426, 4051, 4053, 4052, 4060, 4057, 6426, 4058, 6426, + 4061, 4066, 4068, 4069, 4072, 6426, 4074, 4073, 4078, 4081, + + 4083, 4082, 4085, 4089, 4086, 4092, 4099, 4095, 4096, 4097, + 6426, 4098, 4101, 4103, 4110, 4106, 4108, 4119, 4118, 4114, + 4120, 4124, 4126, 4122, 4129, 4135, 4133, 4139, 4127, 6426, + 4137, 4141, 4131, 4154, 4147, 4150, 6426, 4151, 4155, 4159, + 6426, 4157, 4158, 4165, 4167, 4161, 4168, 4169, 4173, 4175, + 6426, 4171, 4172, 4176, 4177, 4188, 4180, 6426, 6426, 4191, + 6426, 4192, 4181, 4194, 4195, 4199, 4202, 4201, 4203, 4206, + 4207, 4214, 4215, 4208, 4216, 4223, 4225, 4233, 4228, 4229, + 4230, 6426, 6426, 4235, 4239, 4232, 4243, 4244, 4236, 4246, + 4253, 4251, 4257, 4260, 4261, 4255, 6426, 4263, 4252, 4269, + + 4262, 6426, 4268, 4270, 4271, 4274, 4276, 4277, 4280, 4278, + 4279, 4283, 4286, 4287, 4288, 4292, 4290, 4299, 4300, 4301, + 4302, 4306, 4304, 4309, 6426, 4310, 4311, 4313, 4314, 4315, + 4321, 4323, 4324, 4325, 6426, 4326, 6426, 4329, 4331, 4327, + 4347, 4335, 4338, 4348, 4350, 4352, 4354, 4355, 4358, 4359, + 4365, 4353, 4360, 4369, 4362, 4376, 4378, 4379, 6426, 4380, + 4372, 4381, 4382, 4387, 4389, 4383, 4391, 4393, 4396, 4397, + 4398, 4400, 4405, 4406, 4407, 4408, 4409, 6426, 4410, 4414, + 4417, 4419, 4421, 4423, 4424, 4425, 4431, 4432, 4433, 4434, + 4438, 6426, 4435, 4440, 4442, 4443, 4445, 4446, 4449, 4452, + + 4456, 6426, 4459, 4450, 4461, 4460, 4462, 4464, 4466, 4472, + 4469, 4475, 4476, 6426, 4481, 4483, 4484, 4485, 4486, 4487, + 4490, 4491, 6426, 4497, 4498, 4500, 4507, 4504, 4511, 4509, + 4513, 4506, 4516, 4519, 4512, 4523, 4524, 4526, 4520, 4536, + 4543, 4538, 6426, 4527, 6426, 4539, 4540, 4550, 4545, 4551, + 4549, 6426, 4552, 4557, 4559, 4555, 4553, 6426, 4560, 4561, + 4563, 4564, 6426, 4579, 4575, 4565, 4574, 4567, 4583, 6426, + 4588, 4589, 4590, 4597, 4599, 4594, 4601, 4596, 4604, 4602, + 4598, 4606, 4607, 4615, 4613, 4611, 6426, 4617, 4619, 4624, + 4626, 4620, 4628, 4618, 4630, 4633, 4635, 6426, 4636, 4639, + + 4640, 4642, 4643, 4644, 4645, 4652, 4649, 4651, 4653, 4654, + 4657, 4658, 6426, 4663, 4661, 4665, 4674, 4676, 4678, 6426, + 4681, 6426, 4671, 4666, 4683, 4682, 4687, 6426, 6426, 4689, + 4697, 4692, 4695, 4696, 6426, 6426, 4699, 6426, 4700, 6426, + 4701, 4703, 6426, 6426, 4702, 4706, 4709, 4711, 4713, 6426, + 4721, 6426, 4723, 4724, 4710, 4722, 4728, 6426, 4727, 4729, + 4731, 6426, 4734, 4742, 4735, 4737, 6426, 4739, 4745, 4740, + 4747, 6426, 4749, 4755, 4751, 4757, 4758, 4761, 4760, 4763, + 4764, 4768, 4769, 4770, 4771, 4773, 4782, 4784, 4786, 4779, + 4787, 4788, 4794, 4796, 4789, 4792, 4798, 4799, 4803, 4800, + + 4807, 4809, 4810, 4811, 4813, 4812, 4814, 4817, 4816, 4825, + 4827, 4828, 4829, 4830, 4831, 4832, 4833, 4839, 4840, 4843, + 4838, 4842, 6426, 4846, 4848, 4835, 4859, 4849, 4860, 4861, + 4868, 4872, 4873, 6426, 4875, 6426, 4877, 4869, 4879, 4880, + 4881, 6426, 4882, 4883, 4884, 4885, 4886, 4888, 4889, 4892, + 4893, 4897, 4903, 6426, 4910, 4900, 4894, 4898, 4918, 6426, + 4913, 4920, 4921, 4923, 4924, 4925, 4926, 4927, 4930, 4928, + 4933, 4935, 4929, 4936, 4937, 4951, 4953, 4948, 4938, 4955, + 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4969, 4971, 4975, + 6426, 4966, 6426, 4977, 4978, 4979, 4982, 4983, 4984, 4987, + + 6426, 6426, 4989, 4990, 4995, 4992, 4996, 4999, 5001, 6426, + 5000, 5008, 5011, 5003, 6426, 5013, 5017, 5018, 5020, 6426, + 5021, 5022, 5023, 5025, 5026, 5030, 5034, 5032, 5035, 5036, + 5043, 6426, 6426, 6426, 6426, 5046, 5040, 5050, 5044, 5052, + 5054, 5055, 5059, 5053, 6426, 5061, 6426, 6426, 5066, 5067, + 5056, 5069, 5073, 5075, 5076, 5078, 6426, 5077, 5079, 5082, + 5080, 5089, 5091, 5097, 5093, 5098, 5083, 5099, 5108, 5104, + 5105, 5107, 5110, 5112, 5114, 6426, 6426, 5116, 5119, 5120, + 5127, 5125, 5128, 5124, 5137, 5132, 5134, 5135, 5140, 5141, + 5142, 5151, 5152, 5143, 5147, 6426, 5150, 5153, 5161, 6426, + + 5154, 6426, 5160, 5162, 5156, 5168, 5169, 5170, 5171, 5173, + 6426, 6426, 5175, 5183, 5180, 6426, 6426, 5176, 5184, 5187, + 5189, 5185, 5190, 5191, 5196, 5198, 5194, 6426, 5199, 6426, + 5201, 5203, 5216, 5202, 5218, 5223, 5225, 5229, 5222, 5205, + 6426, 5224, 5226, 6426, 5231, 5220, 5232, 6426, 5236, 5238, + 5241, 5243, 6426, 5245, 5246, 5248, 6426, 5252, 6426, 5249, + 5254, 5255, 5263, 6426, 5258, 5260, 6426, 5265, 5271, 5272, + 5266, 6426, 5268, 6426, 5273, 5277, 5280, 5283, 5274, 5285, + 5287, 5288, 5290, 5297, 5295, 5292, 6426, 6426, 135, 5308, + 5298, 5299, 5303, 5305, 5315, 5301, 5310, 5313, 6426, 6426, + + 5317, 6426, 5316, 5325, 6426, 5318, 5327, 5331, 5320, 5329, + 5333, 5335, 5336, 5340, 5342, 5341, 5345, 5346, 5349, 5354, + 5364, 5347, 5361, 5367, 5369, 5371, 5373, 5362, 5375, 5376, + 5377, 5379, 5381, 5382, 5383, 5385, 5386, 6426, 5389, 5391, + 5394, 5393, 6426, 5399, 5395, 5408, 5404, 6426, 5413, 5401, + 5414, 5415, 6426, 5416, 5418, 5421, 5419, 5420, 5432, 5427, + 5429, 5433, 6426, 6426, 6426, 5436, 5443, 6426, 5445, 5439, + 5422, 5430, 6426, 5446, 5449, 6426, 6426, 5450, 5451, 5452, + 5462, 6426, 5454, 6426, 5457, 6426, 5458, 5459, 5467, 5465, + 6426, 5471, 5469, 6426, 5480, 5482, 5484, 5477, 5485, 5487, + + 5488, 6426, 5495, 5491, 5492, 5499, 5490, 5500, 5494, 5502, + 5501, 5509, 5504, 5511, 6426, 5513, 5516, 5518, 5524, 5514, + 5520, 5522, 6426, 5526, 6426, 5528, 6426, 5530, 5531, 5532, + 5538, 5534, 5539, 5540, 5549, 5541, 5551, 5545, 5552, 5556, + 5553, 6426, 6426, 5562, 5565, 6426, 5559, 6426, 5567, 6426, + 5557, 5568, 5569, 5570, 6426, 5577, 5571, 5574, 5579, 6426, + 5581, 5586, 5583, 5588, 6426, 6426, 5589, 5596, 5594, 5592, + 5604, 5606, 5593, 5608, 5601, 5610, 5595, 5617, 5616, 5618, + 5620, 5622, 5623, 5624, 6426, 6426, 6426, 5629, 5628, 5637, + 5633, 5636, 5644, 5634, 6426, 5642, 5646, 5649, 5643, 5656, + + 5651, 5658, 6426, 5653, 5655, 5659, 5661, 5664, 5660, 5666, + 5667, 6426, 5671, 5678, 5675, 5672, 5683, 5690, 5692, 5694, + 5685, 5681, 5701, 5697, 6426, 5700, 6426, 6426, 5687, 6426, + 5696, 5703, 5704, 5708, 6426, 5711, 5705, 5712, 5713, 5715, + 5717, 6426, 5727, 5720, 5723, 5724, 6426, 6426, 5731, 6426, + 5734, 5736, 5735, 5743, 5738, 5739, 5745, 5746, 6426, 5728, + 5752, 5753, 5754, 5755, 6426, 5756, 5757, 5759, 5760, 6426, + 5763, 5762, 5765, 5767, 5768, 6426, 5769, 5770, 5777, 5784, + 6426, 5775, 5791, 5785, 6426, 6426, 5787, 5793, 5796, 6426, + 6426, 6426, 5802, 5799, 5797, 5806, 6426, 5808, 5812, 5817, + + 5821, 5820, 6426, 5823, 5811, 5813, 6426, 6426, 5825, 5826, + 5828, 5831, 6426, 6426, 5832, 5834, 5835, 5838, 5836, 6426, + 5837, 5840, 5842, 5853, 5859, 5848, 5856, 5860, 5868, 5850, + 5854, 5865, 5864, 5866, 5870, 5873, 5877, 5884, 5881, 5883, + 5889, 5886, 5890, 6426, 6426, 5894, 6426, 5897, 5891, 6426, + 6426, 5899, 5903, 5905, 5907, 5909, 5911, 5913, 6426, 5914, + 5916, 5917, 5918, 5919, 6426, 5921, 5925, 5920, 5928, 5922, + 5931, 5927, 5937, 6426, 6426, 5929, 5943, 5933, 5944, 5938, + 6426, 5948, 5955, 5950, 5952, 5953, 5958, 5954, 6426, 5960, + 5962, 6426, 6426, 5961, 5963, 6426, 6426, 5967, 6426, 6426, + + 6426, 6426, 6426, 6426, 6426, 5974, 6426, 5968, 5980, 5983, + 5985, 6426, 5969, 5986, 5987, 5988, 5975, 6426, 5973, 5990, + 5994, 5998, 5997, 6002, 6004, 6005, 6007, 6006, 6009, 6011, + 6010, 6015, 6013, 6014, 6016, 6020, 6023, 6426, 6426, 6426, + 6029, 6030, 6032, 6033, 6037, 6038, 6045, 6047, 6041, 6048, + 6049, 6051, 6053, 6054, 6055, 6063, 6059, 6062, 6061, 6065, + 6067, 6072, 6076, 6069, 6077, 6081, 6426, 6078, 6426, 6082, + 6426, 6426, 6086, 6088, 6083, 6090, 6098, 6101, 6094, 6097, + 6099, 6102, 6104, 6426, 6106, 6426, 6426, 6111, 6113, 6426, + 6112, 6115, 6426, 6114, 6116, 6117, 6122, 6124, 6120, 6123, + + 6125, 6141, 6426, 6426, 6127, 6131, 6129, 6143, 6145, 6144, + 6151, 6153, 6154, 6155, 6146, 6162, 6426, 6164, 6161, 6168, + 6426, 6169, 6157, 6170, 6171, 6172, 6180, 6175, 6179, 6426, + 6181, 6426, 6184, 6186, 6188, 6178, 6185, 6187, 6201, 6203, + 6196, 6426, 6189, 6205, 6199, 6210, 6212, 6214, 6216, 6207, + 6221, 6217, 6225, 6229, 6224, 6230, 6232, 6233, 6234, 6426, + 6236, 6239, 6426, 6240, 6241, 6242, 6243, 6247, 6426, 6250, + 6244, 6252, 6254, 6257, 6259, 6426, 6265, 6268, 6269, 6426, + 6270, 6426, 6426, 6272, 6260, 6273, 6281, 6283, 6426, 6426, + 6426, 6306, 6313, 6320, 6327, 6334, 6341, 6348, 88, 6355, + + 6362, 6369, 6376, 6383, 6390, 6397, 6404, 6411, 6418 } ; -static yyconst flex_int16_t yy_def[3271] = +static yyconst flex_int16_t yy_def[3310] = { 0, - 3252, 1, 3253, 3253, 3254, 3254, 3255, 3255, 3256, 3256, - 3257, 3257, 3258, 3258, 3259, 3259, 3252, 3260, 3252, 3252, - 3252, 3252, 3261, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3262, 3252, 3252, 3252, - 3262, 3263, 3252, 3252, 3252, 3263, 3264, 3252, 3252, 3252, - 3252, 3264, 3265, 3252, 3252, 3252, 3265, 3266, 3252, 3267, - 3252, 3266, 3266, 3268, 3252, 3252, 3252, 3252, 3268, 3269, - 3252, 3252, 3252, 3269, 3260, 3260, 3252, 3270, 3261, 3270, - 3261, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3262, 3262, 3263, - 3263, 3264, 3264, 3252, 3265, 3265, 3266, 3266, 3267, 3267, - 3266, 3268, 3268, 3252, 3269, 3269, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3266, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3266, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3266, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3266, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3252, - 3252, 3260, 3252, 3252, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3266, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3252, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3266, 3266, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3266, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3266, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3252, 3266, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3252, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3266, 3260, 3252, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3252, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3252, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3266, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3252, 3260, 3260, 3260, 3260, 3266, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3260, - - 3260, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3252, - 3252, 3260, 3252, 3260, 3252, 3260, 3260, 3252, 3252, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3266, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3252, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3252, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3252, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3266, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3252, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3252, 3260, - 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, - 3266, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3252, 3260, 3252, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3252, 3252, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3252, 3252, 3260, 3260, 3260, - 3260, 3252, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3252, 3260, 3252, 3260, 3252, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3252, 3252, 3260, 3252, 3260, 3260, 3260, 3260, - - 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3260, 3252, 3252, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3252, 3252, 3260, 3260, 3260, 3252, 3252, 3252, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3252, 3252, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, - 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, - 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3252, 3260, 3260, 3252, 3252, 3252, 3260, 3252, - 3252, 3260, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3260, - 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3252, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, - 3252, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260, - 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, - 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - - 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, - 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3252, - 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, - 3252, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3252, - 3252, 0, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, - 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252 + 3291, 1, 3292, 3292, 3293, 3293, 3294, 3294, 3295, 3295, + 3296, 3296, 3297, 3297, 3298, 3298, 3291, 3299, 3291, 3291, + 3291, 3291, 3300, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3301, 3291, 3291, 3291, + 3301, 3302, 3291, 3291, 3291, 3302, 3303, 3291, 3291, 3291, + 3291, 3303, 3304, 3291, 3291, 3291, 3304, 3305, 3291, 3306, + 3291, 3305, 3305, 3307, 3291, 3291, 3291, 3291, 3307, 3308, + 3291, 3291, 3291, 3308, 3299, 3299, 3291, 3309, 3300, 3309, + 3300, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3301, 3301, 3302, + 3302, 3303, 3303, 3291, 3304, 3304, 3305, 3305, 3306, 3306, + 3305, 3307, 3307, 3291, 3308, 3308, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3305, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3291, 3291, 3299, 3291, 3291, 3299, 3299, 3291, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3305, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3291, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291, + + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3305, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3305, 3299, 3299, + 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3291, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3305, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, + + 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3291, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3305, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3305, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, + 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3291, 3299, 3291, + 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3305, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3291, 3291, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3291, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3291, + + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3291, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3291, 3299, + 3299, 3299, 3299, 3291, 3299, 3299, 3291, 3299, 3299, 3299, + 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3305, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, + + 3299, 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3291, 3291, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3291, 3299, 3299, 3291, 3291, 3299, 3299, 3299, + 3299, 3291, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3291, 3299, 3291, 3299, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3291, 3299, 3299, 3291, 3299, 3291, 3299, 3291, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3291, 3291, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3291, 3299, 3291, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3291, + 3291, 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + + 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3291, 3299, 3299, + 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3291, 3291, 3299, 3291, 3299, 3299, 3291, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + 3299, 3291, 3291, 3299, 3299, 3291, 3291, 3299, 3291, 3291, + + 3291, 3291, 3291, 3291, 3291, 3299, 3291, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3291, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, + 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3291, 3299, 3291, 3291, 3299, 3299, 3291, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + + 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3291, + 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3291, + 0, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, + + 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291 } ; -static yyconst flex_int16_t yy_nxt[6406] = +static yyconst flex_int16_t yy_nxt[6467] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -1544,7 +1559,7 @@ static yyconst flex_int16_t yy_nxt[6406] = 204, 199, 86, 202, 207, 209, 86, 213, 210, 86, 86, 206, 208, 86, 216, 86, 86, 86, 86, 218, 86, 211, 212, 219, 223, 215, 86, 225, 226, 86, - 224, 86, 214, 86, 217, 918, 221, 86, 227, 220, + 224, 86, 214, 86, 217, 922, 221, 86, 227, 220, 86, 222, 228, 86, 231, 86, 86, 86, 236, 86, 233, 86, 86, 229, 234, 230, 238, 86, 248, 86, 86, 232, 86, 86, 86, 239, 235, 86, 86, 237, @@ -1592,7 +1607,7 @@ static yyconst flex_int16_t yy_nxt[6406] = 435, 86, 86, 426, 440, 431, 86, 427, 86, 424, 86, 437, 86, 86, 433, 441, 434, 86, 439, 436, 450, 86, 86, 86, 455, 442, 449, 451, 438, 86, - 86, 86, 86, 452, 563, 453, 456, 86, 443, 458, + 86, 86, 86, 452, 564, 453, 456, 86, 443, 458, 459, 444, 86, 457, 86, 462, 445, 446, 447, 448, 460, 454, 86, 86, 86, 461, 86, 468, 86, 86, @@ -1602,619 +1617,625 @@ static yyconst flex_int16_t yy_nxt[6406] = 484, 477, 475, 481, 485, 476, 86, 86, 86, 86, 482, 488, 486, 489, 86, 86, 497, 491, 487, 498, 86, 86, 86, 490, 495, 86, 499, 86, 500, 86, - 492, 86, 86, 493, 501, 494, 86, 86, 502, 86, - 515, 86, 512, 86, 551, 86, 503, 86, 504, 510, - 505, 513, 511, 514, 526, 517, 516, 168, 525, 527, - - 86, 86, 86, 506, 528, 86, 507, 529, 508, 86, - 509, 86, 86, 518, 519, 86, 535, 532, 530, 531, - 86, 533, 86, 520, 86, 521, 522, 523, 534, 539, - 524, 86, 86, 86, 86, 86, 541, 86, 538, 540, - 537, 536, 546, 86, 548, 86, 549, 86, 86, 545, - 86, 553, 543, 544, 542, 86, 86, 86, 547, 86, - 557, 558, 552, 86, 556, 86, 86, 550, 86, 86, - 86, 86, 555, 564, 565, 86, 86, 86, 86, 567, - 554, 568, 560, 562, 561, 559, 86, 570, 86, 571, - 86, 566, 573, 572, 86, 86, 569, 86, 86, 584, - - 579, 86, 586, 576, 575, 86, 574, 585, 580, 581, - 588, 86, 582, 583, 577, 587, 578, 589, 86, 86, - 86, 86, 86, 86, 592, 591, 86, 594, 164, 593, - 86, 596, 86, 598, 86, 86, 86, 86, 601, 590, - 599, 595, 602, 86, 86, 597, 86, 603, 86, 600, - 86, 86, 86, 608, 86, 606, 607, 86, 86, 604, - 86, 609, 86, 86, 86, 614, 610, 605, 615, 86, - 617, 86, 613, 86, 86, 616, 612, 611, 618, 86, - 620, 86, 622, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 619, 624, 86, 625, 621, 633, 86, 636, - - 627, 163, 630, 86, 623, 632, 86, 626, 628, 631, - 629, 635, 637, 86, 86, 634, 86, 86, 86, 640, - 643, 638, 86, 646, 639, 86, 86, 86, 641, 86, - 645, 86, 86, 642, 86, 86, 649, 86, 86, 648, - 653, 652, 644, 86, 86, 86, 86, 647, 655, 86, - 86, 86, 86, 654, 650, 651, 86, 86, 86, 658, - 656, 669, 672, 86, 657, 86, 659, 668, 707, 667, - 670, 660, 671, 661, 86, 86, 86, 86, 675, 662, - 676, 663, 673, 86, 664, 665, 674, 86, 680, 86, - 677, 666, 679, 678, 86, 86, 685, 86, 683, 681, - - 86, 686, 86, 682, 86, 688, 86, 86, 86, 86, - 86, 86, 684, 86, 86, 694, 161, 689, 690, 86, - 695, 86, 687, 691, 168, 698, 692, 701, 700, 697, - 699, 693, 696, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 710, 708, 86, 86, 702, 832, 86, 86, - 703, 705, 86, 706, 709, 704, 712, 713, 86, 714, - 716, 715, 86, 86, 717, 86, 86, 86, 711, 86, - 718, 86, 86, 86, 721, 722, 719, 727, 720, 86, - 723, 86, 728, 86, 730, 86, 741, 724, 86, 726, - 725, 732, 729, 731, 86, 733, 86, 86, 734, 86, - - 735, 86, 736, 86, 86, 86, 86, 737, 86, 738, - 745, 86, 743, 739, 740, 86, 86, 86, 744, 86, - 749, 86, 742, 748, 86, 750, 86, 86, 86, 86, - 86, 754, 752, 86, 86, 86, 747, 86, 760, 746, - 757, 86, 751, 753, 86, 86, 761, 86, 755, 756, - 758, 86, 86, 86, 767, 763, 86, 759, 86, 762, - 764, 86, 86, 770, 765, 766, 771, 86, 774, 768, - 86, 86, 769, 86, 86, 86, 772, 777, 776, 775, - 86, 86, 773, 86, 780, 779, 86, 782, 781, 86, - 86, 86, 86, 788, 86, 86, 784, 786, 86, 778, - - 86, 86, 794, 785, 783, 86, 86, 789, 86, 86, - 792, 787, 795, 159, 790, 86, 791, 793, 796, 797, - 798, 86, 86, 86, 799, 86, 803, 801, 800, 86, - 805, 86, 86, 86, 804, 86, 86, 86, 806, 802, - 809, 86, 808, 86, 86, 810, 86, 816, 813, 86, - 86, 86, 817, 86, 811, 819, 807, 812, 818, 86, - 821, 86, 814, 815, 86, 86, 825, 823, 822, 86, - 828, 820, 86, 86, 827, 829, 86, 826, 86, 830, - 86, 86, 824, 834, 86, 86, 86, 86, 86, 840, - 86, 86, 86, 86, 841, 86, 86, 86, 831, 833, - - 842, 86, 835, 836, 837, 86, 838, 843, 839, 86, - 849, 844, 846, 847, 86, 845, 86, 86, 86, 86, - 848, 86, 86, 850, 86, 854, 851, 86, 86, 86, - 86, 86, 863, 86, 861, 856, 852, 853, 86, 86, - 855, 86, 857, 864, 862, 858, 859, 860, 86, 866, - 86, 86, 865, 868, 86, 867, 86, 86, 86, 86, - 86, 86, 873, 872, 875, 874, 869, 871, 86, 86, - 870, 86, 86, 876, 86, 880, 878, 168, 877, 86, - 879, 881, 883, 885, 86, 86, 882, 884, 86, 86, - 86, 86, 891, 86, 86, 892, 86, 887, 86, 886, - - 894, 86, 86, 893, 888, 889, 86, 895, 898, 86, - 86, 890, 86, 900, 86, 896, 899, 897, 86, 904, - 86, 86, 901, 86, 86, 86, 86, 86, 905, 86, - 906, 86, 86, 925, 86, 86, 903, 902, 919, 907, - 920, 921, 917, 86, 86, 86, 909, 923, 86, 908, - 86, 86, 910, 922, 86, 911, 86, 926, 924, 912, - 86, 928, 913, 86, 86, 929, 940, 931, 930, 914, - 915, 927, 916, 86, 86, 932, 933, 86, 934, 86, - 86, 935, 939, 86, 942, 86, 936, 943, 945, 944, - 86, 86, 937, 938, 86, 86, 950, 941, 949, 86, - - 86, 951, 86, 86, 953, 86, 947, 952, 86, 946, - 86, 955, 86, 956, 954, 957, 86, 959, 86, 948, - 86, 958, 960, 86, 962, 86, 86, 86, 86, 963, - 86, 86, 967, 86, 86, 961, 86, 970, 966, 86, - 86, 86, 968, 974, 984, 86, 964, 965, 969, 86, - 975, 971, 972, 976, 86, 86, 176, 977, 980, 981, - 979, 973, 978, 86, 86, 86, 86, 983, 86, 86, - 86, 982, 86, 86, 985, 987, 86, 986, 988, 86, - 989, 86, 86, 86, 994, 86, 991, 86, 990, 992, - 86, 997, 86, 998, 86, 86, 995, 86, 996, 86, - - 86, 86, 993, 86, 1000, 86, 1001, 86, 1003, 86, - 1004, 86, 1005, 999, 86, 86, 1006, 86, 1013, 1007, - 1011, 86, 86, 1009, 1002, 1012, 86, 86, 1010, 86, - 86, 86, 1008, 86, 1018, 1020, 1014, 86, 1016, 1021, - 86, 1015, 1019, 86, 86, 86, 86, 86, 1023, 86, - 1025, 1017, 86, 86, 86, 86, 1029, 1031, 1022, 86, - 86, 86, 1034, 86, 86, 1024, 1026, 1027, 86, 1028, - 1035, 1036, 1032, 86, 1033, 1030, 86, 1038, 1040, 1037, - 86, 86, 1039, 1042, 86, 1041, 86, 86, 86, 86, - 1044, 86, 86, 1043, 1051, 1046, 1052, 1054, 86, 86, - - 86, 1056, 86, 86, 86, 86, 1045, 86, 1047, 1057, - 1049, 1048, 1050, 1053, 86, 86, 86, 1060, 1055, 1062, - 1058, 86, 1065, 1059, 86, 1061, 86, 1064, 86, 86, - 86, 86, 1066, 1069, 1071, 86, 86, 1068, 86, 86, - 1074, 86, 1063, 1073, 86, 1075, 168, 86, 1067, 86, - 86, 1070, 86, 1077, 1072, 1081, 1076, 86, 1078, 86, - 86, 86, 86, 86, 86, 1094, 1079, 1080, 86, 1097, - 86, 1082, 1095, 86, 1084, 1085, 86, 86, 86, 86, - 86, 1086, 1099, 1083, 1087, 86, 1119, 174, 1088, 86, - 1089, 1096, 1100, 1101, 1090, 86, 1091, 86, 1098, 1104, - - 1102, 1092, 86, 1103, 1105, 86, 1093, 86, 86, 1113, - 86, 1106, 1108, 86, 86, 86, 86, 86, 1111, 1114, - 1121, 1107, 86, 86, 1109, 1110, 86, 1120, 1112, 1115, - 1122, 1117, 1118, 1123, 86, 1124, 86, 1116, 1125, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 1137, 86, - 1140, 86, 86, 86, 1136, 1142, 1141, 86, 1139, 86, - 1127, 1126, 86, 1128, 86, 1129, 1138, 1143, 1147, 86, - 1130, 86, 1131, 86, 86, 1146, 1144, 86, 1132, 86, - 173, 1145, 1148, 1133, 1134, 1152, 86, 1149, 86, 1150, - 1135, 1154, 1153, 1155, 86, 86, 86, 1151, 1156, 86, - - 1159, 86, 86, 86, 1165, 86, 86, 1160, 86, 1158, - 86, 86, 1162, 1157, 1163, 86, 86, 86, 86, 86, - 1161, 86, 1168, 86, 1164, 1166, 86, 86, 86, 1175, - 1167, 86, 1170, 1172, 1177, 1169, 1173, 1174, 86, 1171, - 86, 86, 86, 1176, 86, 86, 86, 1178, 86, 86, - 86, 86, 1179, 1185, 1186, 1187, 1182, 86, 86, 1189, - 1184, 1180, 1190, 1181, 1183, 86, 1188, 1192, 86, 1193, - 86, 86, 86, 1195, 1194, 86, 1196, 86, 1191, 86, - 1197, 86, 86, 86, 1198, 86, 1204, 1206, 86, 86, - 86, 1199, 86, 86, 1208, 1200, 1202, 1203, 86, 1201, - - 86, 1210, 86, 1207, 1209, 1205, 86, 1212, 86, 86, - 86, 1213, 86, 86, 1215, 1216, 86, 86, 1218, 86, - 1221, 1211, 86, 1220, 1214, 1217, 86, 1222, 86, 86, - 86, 1223, 1219, 1225, 86, 1226, 86, 1224, 86, 86, - 86, 86, 1230, 1232, 1233, 86, 1234, 1227, 1237, 86, - 86, 86, 86, 1231, 86, 1228, 1235, 1236, 1229, 86, - 1240, 86, 86, 1238, 1242, 86, 86, 1241, 86, 86, - 1243, 86, 86, 86, 86, 1247, 1248, 1244, 86, 1239, - 86, 86, 1253, 1254, 86, 1249, 86, 1245, 86, 86, - 1246, 1256, 1251, 1257, 86, 86, 1250, 86, 86, 1255, - - 1252, 1261, 86, 86, 86, 86, 86, 86, 1267, 86, - 1260, 1259, 1263, 168, 1258, 86, 86, 86, 86, 86, - 1262, 1274, 86, 1264, 1272, 86, 1266, 1273, 1271, 1269, - 1276, 1265, 1270, 1268, 1277, 86, 86, 86, 86, 86, - 86, 1280, 1279, 1281, 86, 1275, 86, 86, 86, 86, - 86, 1278, 1284, 86, 86, 1290, 86, 1287, 1282, 86, - 1283, 86, 86, 1285, 86, 86, 168, 86, 1286, 1288, - 1294, 1300, 1289, 1291, 86, 86, 86, 1293, 86, 1292, - 1296, 86, 1301, 1302, 86, 1295, 1303, 86, 86, 1297, - 1305, 1298, 1308, 86, 1299, 1304, 1306, 86, 86, 86, - - 86, 86, 86, 1307, 1310, 86, 1309, 1313, 86, 1317, - 86, 86, 1312, 86, 86, 1314, 1315, 1311, 1318, 1319, - 86, 86, 86, 86, 86, 1321, 1322, 1316, 86, 86, - 1323, 1320, 86, 86, 86, 86, 86, 86, 1324, 1325, - 86, 1327, 1329, 86, 1330, 86, 1334, 1326, 1328, 86, - 86, 86, 86, 1331, 86, 1333, 86, 1332, 1335, 1338, - 86, 86, 86, 86, 1345, 1336, 1339, 166, 1341, 1337, - 86, 1340, 86, 86, 86, 1343, 86, 1346, 1350, 1342, - 86, 1344, 1348, 1349, 1352, 86, 1347, 86, 1351, 1353, - 86, 86, 1357, 86, 1367, 86, 86, 1368, 1356, 1354, - - 86, 1355, 86, 1358, 1366, 86, 1365, 1359, 86, 86, - 1360, 1361, 1371, 1369, 1370, 1362, 164, 86, 86, 86, - 86, 1363, 1372, 86, 1373, 1364, 86, 1374, 86, 1376, - 1375, 86, 86, 86, 1377, 86, 1378, 86, 86, 1386, - 1379, 1380, 1381, 1383, 1387, 86, 86, 86, 163, 1384, - 86, 1388, 1382, 86, 86, 1385, 1390, 1389, 86, 1395, - 86, 1391, 86, 1392, 1399, 1393, 86, 1394, 1396, 1397, - 86, 86, 1401, 1398, 86, 86, 86, 1403, 86, 1402, - 86, 1400, 1404, 86, 1405, 1407, 86, 1409, 86, 86, - 1408, 1413, 86, 1414, 86, 86, 1406, 86, 86, 86, - - 86, 86, 1415, 1412, 1417, 1410, 86, 1411, 86, 1416, - 1419, 86, 1418, 1422, 1423, 86, 1425, 86, 1420, 86, - 86, 1426, 86, 1427, 86, 86, 1424, 1428, 1431, 86, - 86, 1421, 1433, 86, 1430, 86, 1434, 86, 86, 86, - 1438, 86, 1435, 1429, 86, 86, 86, 86, 1440, 86, - 1432, 86, 1442, 1444, 86, 86, 86, 86, 1443, 1436, - 1437, 1448, 86, 86, 1439, 1446, 1441, 86, 1450, 86, - 1447, 1449, 1445, 86, 1452, 1451, 86, 1454, 1453, 86, - 86, 86, 86, 86, 1455, 1460, 1461, 1457, 86, 1458, - 86, 86, 86, 1462, 1463, 86, 1459, 86, 1456, 1464, - - 86, 1467, 86, 86, 168, 86, 86, 1472, 1466, 1473, - 86, 1475, 86, 86, 1465, 86, 1474, 86, 86, 1469, - 86, 86, 86, 1468, 86, 1470, 1476, 86, 1483, 1471, - 86, 86, 1477, 1480, 86, 86, 1481, 161, 1478, 86, - 1479, 86, 1482, 86, 1487, 1488, 86, 86, 1490, 1492, - 1484, 86, 1486, 86, 1493, 86, 1485, 86, 1489, 1496, - 1491, 86, 1495, 86, 86, 1494, 86, 86, 86, 1501, - 1504, 1497, 1502, 86, 1506, 1503, 1498, 86, 1499, 86, - 86, 1500, 86, 1507, 1509, 86, 1511, 1505, 1508, 1510, - 86, 86, 86, 86, 86, 86, 1514, 1515, 86, 86, - - 1518, 86, 86, 1513, 86, 1523, 86, 86, 1512, 86, - 1524, 1516, 86, 1520, 1517, 1527, 86, 86, 1519, 1521, - 1522, 86, 86, 86, 1528, 1525, 86, 86, 1526, 86, - 86, 1530, 1534, 86, 86, 1529, 1535, 1531, 1532, 1536, - 86, 1539, 1538, 86, 86, 1533, 86, 86, 1537, 86, - 1543, 1544, 86, 1541, 1546, 86, 86, 86, 1540, 86, - 86, 1545, 1547, 1551, 1552, 1550, 1542, 86, 1548, 86, - 86, 86, 1553, 86, 1554, 1555, 86, 86, 86, 86, - 1549, 1556, 86, 86, 86, 1558, 86, 1557, 86, 1563, - 86, 1559, 86, 1562, 86, 1566, 1560, 86, 1561, 86, - - 1565, 1569, 86, 1574, 1564, 1571, 1570, 86, 1567, 86, - 1572, 86, 86, 86, 86, 86, 1568, 86, 86, 1573, - 1578, 1582, 1577, 86, 86, 86, 1585, 86, 1575, 1583, - 86, 1576, 86, 1579, 86, 1588, 1581, 1580, 86, 86, - 1587, 86, 86, 86, 1586, 86, 86, 1596, 86, 1584, - 86, 1594, 86, 1597, 1599, 86, 86, 1589, 1590, 1593, - 1602, 1591, 1592, 1595, 1598, 1600, 86, 86, 86, 86, - 86, 86, 1601, 1606, 86, 86, 86, 1607, 1604, 86, - 1610, 1603, 86, 1605, 1614, 86, 86, 86, 86, 1616, - 1608, 1611, 1609, 1615, 86, 86, 86, 86, 1613, 1612, - - 1618, 1617, 1619, 86, 86, 86, 1625, 1620, 1621, 1626, - 86, 86, 86, 86, 1622, 86, 1624, 86, 1630, 1631, - 1629, 86, 86, 1623, 86, 86, 1633, 86, 86, 1627, - 86, 1634, 1635, 86, 1628, 86, 86, 86, 1636, 1638, - 1637, 1632, 86, 1641, 1640, 86, 86, 86, 86, 86, - 1639, 86, 1642, 1645, 86, 1647, 86, 86, 1648, 86, - 1652, 1646, 86, 86, 86, 1644, 1643, 86, 86, 1649, - 86, 1650, 1655, 1657, 86, 86, 1653, 86, 1660, 1656, - 86, 1654, 1651, 86, 1658, 86, 1662, 1663, 1659, 86, - 1666, 86, 1661, 168, 1665, 86, 86, 86, 86, 86, - - 86, 1674, 86, 86, 1664, 86, 159, 1675, 86, 1667, - 1669, 86, 1672, 1668, 1678, 86, 1670, 1671, 86, 86, - 1679, 86, 86, 1676, 1673, 1677, 1680, 86, 1681, 1682, - 86, 1684, 86, 1686, 86, 1683, 1687, 86, 1685, 86, - 1688, 86, 86, 1692, 86, 86, 1693, 86, 1690, 1691, - 86, 1689, 86, 1694, 86, 86, 86, 1699, 1698, 86, - 86, 1695, 86, 86, 3252, 1706, 86, 86, 1696, 1697, - 1703, 86, 1701, 1704, 86, 86, 86, 1700, 1708, 1707, - 86, 1711, 1702, 86, 1723, 1705, 1713, 1715, 1712, 1710, - 1714, 86, 1716, 86, 1709, 86, 86, 1718, 86, 1720, - - 1717, 86, 1719, 86, 86, 86, 86, 86, 1721, 86, - 1727, 86, 1726, 1728, 86, 86, 86, 1722, 1730, 86, - 1729, 86, 1733, 86, 86, 1724, 1732, 1725, 86, 86, - 86, 86, 1735, 1734, 1731, 86, 86, 86, 86, 86, - 86, 1743, 86, 86, 86, 1738, 86, 86, 86, 1736, - 1737, 1739, 1740, 1741, 1745, 1746, 1748, 1747, 86, 1744, - 86, 1742, 86, 1753, 86, 86, 1749, 1750, 86, 1752, - 1755, 86, 1751, 86, 1757, 86, 86, 86, 86, 86, - 1754, 86, 1759, 1756, 86, 86, 86, 1762, 1764, 86, - 1758, 1772, 86, 1765, 1763, 1761, 1766, 1773, 86, 86, - - 1760, 1767, 1771, 86, 1768, 86, 86, 86, 86, 1769, - 1776, 1770, 1777, 86, 86, 1774, 86, 86, 86, 1778, - 86, 1780, 1781, 1775, 86, 1789, 86, 1779, 86, 1784, - 86, 86, 86, 1782, 1783, 1786, 86, 1788, 1787, 1790, - 86, 86, 86, 1785, 86, 1792, 86, 86, 86, 1799, - 1791, 86, 86, 3252, 1793, 1794, 1796, 86, 1795, 86, - 1803, 1801, 1802, 86, 86, 1798, 86, 1800, 86, 1807, - 86, 1797, 1805, 1811, 1804, 1806, 86, 86, 1812, 86, - 86, 86, 86, 86, 1808, 1817, 1816, 86, 1810, 1809, - 1813, 86, 1814, 1819, 86, 1820, 86, 1825, 86, 1822, - - 1818, 86, 1815, 1821, 86, 86, 1826, 1824, 86, 1827, - 1823, 1828, 86, 1830, 86, 86, 86, 1829, 86, 86, - 86, 3252, 1831, 86, 86, 86, 1834, 86, 86, 1835, - 1840, 86, 1842, 86, 1832, 1833, 1836, 1837, 86, 1838, - 1843, 1839, 86, 1845, 86, 86, 86, 86, 1846, 86, - 1850, 1847, 1841, 86, 86, 1844, 86, 1854, 86, 86, - 1849, 86, 86, 86, 1848, 1856, 86, 1857, 1858, 1852, - 86, 1851, 1853, 86, 168, 1859, 86, 1864, 86, 1855, - 86, 86, 1860, 86, 1868, 86, 1862, 86, 86, 1861, - 86, 1863, 86, 1866, 86, 1870, 86, 1875, 86, 1865, - - 86, 1869, 1867, 86, 1871, 86, 1872, 1879, 86, 1873, - 1876, 1878, 86, 1881, 86, 1880, 1874, 86, 1877, 86, - 1884, 86, 1882, 1885, 86, 86, 86, 1887, 1883, 86, - 86, 86, 1888, 1886, 86, 86, 86, 86, 86, 86, - 1893, 86, 1894, 86, 86, 86, 86, 1895, 1898, 86, - 1889, 1896, 1891, 1890, 1892, 1899, 1897, 86, 86, 86, - 1905, 1907, 1902, 1904, 1901, 1906, 86, 86, 1900, 1903, - 1908, 86, 86, 86, 86, 86, 1913, 3252, 1909, 86, - 86, 86, 1916, 1917, 86, 1918, 86, 86, 1911, 1920, - 86, 1910, 86, 1912, 1914, 1919, 1915, 86, 1921, 86, - - 1922, 1924, 86, 1925, 1926, 1928, 86, 86, 1923, 1927, - 86, 86, 1930, 86, 1933, 86, 1932, 1931, 86, 86, - 86, 86, 1936, 86, 86, 1929, 1935, 86, 1939, 1938, - 86, 1941, 86, 86, 86, 1940, 1948, 86, 86, 1934, - 86, 1937, 86, 1950, 1942, 1943, 1944, 86, 1951, 86, - 86, 1945, 1954, 1946, 1947, 1953, 86, 86, 1949, 1957, - 86, 1952, 86, 86, 86, 86, 86, 1955, 86, 1958, - 1961, 86, 1956, 86, 1963, 86, 86, 1966, 1967, 86, - 1969, 86, 1959, 86, 1960, 86, 1964, 86, 1968, 86, - 1962, 86, 1974, 86, 1971, 86, 1972, 1965, 86, 1975, - - 86, 86, 1978, 86, 86, 86, 1981, 86, 1970, 86, - 1973, 1985, 1976, 1979, 1984, 86, 1977, 86, 86, 1980, - 1988, 1989, 86, 1983, 86, 1987, 86, 86, 86, 1982, - 1990, 86, 86, 1991, 86, 1986, 86, 86, 86, 1996, - 86, 1992, 1993, 1994, 86, 1999, 1995, 2000, 2001, 86, - 86, 86, 86, 86, 86, 1997, 2004, 86, 2009, 86, - 2002, 86, 2008, 86, 1998, 2003, 86, 86, 86, 2006, - 86, 2013, 2005, 2007, 2014, 2016, 86, 86, 2011, 2015, - 2010, 2017, 86, 2020, 86, 2012, 86, 86, 2027, 86, - 86, 86, 86, 2018, 86, 2024, 86, 86, 2019, 86, - - 2032, 2022, 2029, 2030, 86, 86, 2031, 2021, 2023, 86, - 86, 2025, 2026, 86, 2028, 2037, 86, 2039, 2033, 2038, - 86, 2034, 2040, 86, 2041, 2042, 2035, 86, 86, 86, - 86, 86, 2046, 2036, 2044, 86, 86, 86, 86, 86, - 2045, 2048, 86, 2051, 86, 2053, 86, 2047, 2049, 86, - 168, 86, 86, 2043, 2055, 2054, 86, 86, 2056, 86, - 2059, 2058, 86, 2060, 2050, 3252, 2052, 2061, 86, 2062, - 86, 2057, 2064, 86, 86, 86, 86, 86, 86, 2063, - 2065, 2066, 2068, 2067, 86, 86, 86, 2071, 2070, 2069, - 86, 2072, 86, 86, 86, 2076, 86, 86, 2073, 2075, - - 86, 86, 2077, 86, 2074, 2078, 2079, 86, 2081, 86, - 2080, 86, 2083, 86, 86, 86, 2088, 2082, 2086, 86, - 2087, 86, 86, 86, 86, 86, 86, 86, 2093, 2084, - 2090, 86, 2085, 86, 2097, 2096, 86, 2089, 2092, 2094, - 2099, 2091, 86, 2095, 86, 2098, 86, 86, 2100, 2104, - 86, 2102, 86, 86, 86, 2105, 86, 86, 86, 2110, - 2103, 86, 2112, 2101, 86, 86, 2113, 2114, 86, 2106, - 2107, 2108, 2109, 86, 2111, 2116, 86, 86, 2117, 86, - 2119, 2115, 86, 86, 86, 2118, 86, 86, 2123, 2120, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 2124, - - 86, 86, 86, 2131, 2122, 2121, 2126, 2127, 2128, 2136, - 86, 2137, 2125, 2130, 2135, 86, 2132, 86, 2129, 86, - 2133, 86, 2139, 86, 2134, 86, 2140, 2143, 2142, 86, - 86, 86, 86, 86, 86, 2138, 2145, 2141, 86, 2146, - 86, 86, 2147, 2149, 86, 86, 2151, 2144, 2148, 86, - 2150, 2153, 2155, 86, 86, 2154, 86, 86, 86, 2152, - 2158, 2157, 2159, 86, 86, 86, 86, 2163, 2160, 86, - 2164, 2156, 2161, 86, 86, 86, 86, 2166, 86, 2165, - 2169, 86, 86, 2170, 2162, 86, 2173, 86, 3252, 2168, - 2174, 2171, 86, 2167, 86, 86, 2175, 86, 2172, 2179, - - 86, 86, 2181, 2177, 86, 2176, 86, 2182, 86, 2180, - 86, 2178, 86, 2183, 86, 2184, 2188, 86, 86, 86, - 86, 2186, 2190, 86, 2187, 86, 2185, 2191, 86, 2192, - 2193, 2194, 86, 86, 86, 86, 2197, 2195, 2189, 2196, - 2200, 86, 2199, 86, 86, 2198, 86, 86, 86, 86, - 86, 86, 86, 2201, 86, 86, 2209, 2210, 2206, 2207, - 2203, 2202, 2204, 2211, 2205, 86, 86, 86, 86, 86, - 2208, 2212, 2214, 86, 86, 2220, 86, 168, 2215, 86, - 2222, 86, 2216, 2219, 2213, 86, 2217, 86, 2221, 2224, - 86, 2228, 2223, 86, 2218, 2225, 2229, 86, 2230, 2227, - - 2226, 2231, 86, 86, 86, 2232, 86, 86, 2235, 86, - 86, 2233, 86, 2234, 86, 2236, 2240, 86, 2242, 2239, - 86, 2241, 2244, 86, 2246, 86, 86, 86, 86, 2237, - 2243, 2245, 2247, 86, 86, 2249, 86, 86, 86, 2248, - 2238, 86, 2250, 86, 86, 2251, 86, 2252, 86, 2255, - 86, 86, 2254, 2258, 86, 86, 2253, 86, 2264, 86, - 2256, 2257, 2262, 86, 86, 86, 86, 2260, 2259, 2265, - 86, 2267, 86, 86, 2261, 86, 86, 2263, 2266, 2269, - 2272, 86, 2270, 2275, 86, 86, 86, 86, 86, 2273, - 2268, 86, 2271, 2276, 86, 86, 86, 86, 86, 2274, - - 86, 86, 86, 2291, 2287, 2277, 2278, 86, 2283, 2288, - 86, 2279, 86, 2281, 2286, 2280, 2282, 2285, 2284, 2289, - 86, 86, 86, 2292, 86, 2294, 2290, 86, 2295, 2296, - 86, 2297, 86, 86, 86, 2300, 2293, 86, 86, 2298, - 2303, 86, 2304, 86, 86, 86, 2299, 2301, 86, 2305, - 2302, 86, 86, 2306, 2310, 86, 86, 2307, 2311, 86, - 2313, 86, 86, 2309, 86, 2308, 2315, 86, 86, 2317, - 86, 2312, 2318, 86, 2314, 2319, 86, 2316, 86, 2321, - 86, 86, 2320, 2325, 86, 86, 2324, 2327, 86, 86, - 86, 86, 2322, 86, 2330, 86, 2329, 86, 2331, 2323, - - 2333, 86, 86, 86, 2326, 2337, 86, 2328, 86, 86, - 2335, 86, 2334, 2332, 86, 2341, 2342, 86, 86, 86, - 86, 2336, 86, 2338, 2340, 2344, 2347, 86, 86, 86, - 86, 2339, 86, 2343, 2345, 2349, 86, 2346, 2348, 86, - 2354, 86, 86, 2350, 86, 86, 2356, 86, 2351, 86, - 2352, 2355, 2357, 2360, 86, 86, 86, 86, 86, 2361, - 2362, 2366, 2353, 86, 86, 3252, 86, 2358, 2365, 2359, - 2363, 2364, 86, 86, 2371, 2373, 86, 2368, 2369, 2370, - 86, 86, 86, 2367, 2372, 86, 86, 2374, 86, 2377, - 2375, 2376, 86, 86, 86, 2378, 86, 2379, 2384, 86, - - 2383, 2385, 2380, 2381, 86, 2382, 86, 86, 86, 2390, - 2386, 86, 2389, 86, 2391, 86, 168, 2388, 86, 2387, - 86, 2393, 2392, 86, 2398, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 2405, 86, 2396, 2400, 2394, 2397, - 2395, 2399, 2401, 2402, 2403, 2404, 86, 2408, 2409, 86, - 86, 2406, 2407, 86, 2410, 2411, 86, 86, 86, 2414, - 2412, 2415, 86, 2413, 2418, 86, 86, 86, 2417, 86, - 86, 2416, 86, 2419, 86, 86, 2423, 2424, 2420, 86, - 86, 86, 2428, 86, 2421, 86, 2426, 2429, 86, 2427, - 86, 2431, 86, 2422, 2425, 2430, 2432, 86, 86, 86, - - 86, 2433, 86, 2435, 2436, 86, 86, 2438, 86, 86, - 86, 86, 86, 2437, 2442, 2445, 86, 2444, 2434, 86, - 86, 86, 2446, 2441, 86, 86, 2439, 86, 2440, 2449, - 86, 2443, 86, 86, 2454, 86, 86, 2447, 2453, 2448, - 86, 86, 2451, 2452, 2455, 86, 2450, 2456, 2525, 2457, - 86, 2458, 86, 86, 2461, 2459, 86, 2463, 2460, 86, - 2462, 2465, 86, 86, 86, 2467, 86, 86, 86, 86, - 86, 2464, 86, 2466, 2471, 86, 86, 2475, 86, 86, - 2473, 2474, 2469, 2476, 86, 2468, 2470, 2477, 86, 2478, - 86, 86, 86, 86, 86, 2479, 2481, 2486, 2472, 2484, - - 86, 86, 86, 86, 86, 86, 2483, 2489, 86, 86, - 2485, 2482, 2480, 86, 86, 2493, 2490, 2494, 86, 2488, - 2487, 86, 86, 86, 2491, 86, 2495, 2492, 86, 86, - 2498, 2499, 2497, 86, 86, 86, 86, 3252, 86, 86, - 2496, 2503, 2500, 2505, 2506, 86, 2502, 2501, 2507, 86, - 2508, 86, 2509, 86, 86, 2504, 86, 2511, 86, 2513, - 86, 2512, 86, 2514, 86, 86, 2510, 86, 2519, 86, - 86, 86, 2515, 2521, 86, 86, 2516, 2522, 86, 86, - 86, 86, 2523, 2518, 86, 2517, 2528, 2524, 86, 2520, - 86, 2526, 2531, 86, 86, 86, 86, 86, 86, 2532, - - 2527, 168, 86, 2539, 2529, 86, 86, 86, 2530, 2535, - 86, 86, 2537, 2538, 2540, 2534, 86, 86, 2550, 86, - 2533, 2536, 2541, 86, 2543, 2542, 2546, 86, 86, 86, - 86, 2547, 2548, 2544, 2549, 2551, 86, 86, 2552, 2545, - 86, 2553, 86, 2554, 86, 86, 2555, 86, 86, 2557, - 86, 86, 86, 86, 86, 2556, 2565, 86, 86, 86, - 2558, 2563, 86, 86, 2569, 86, 2560, 2559, 2570, 86, - 86, 2562, 2561, 2564, 2571, 86, 2567, 2566, 86, 2573, - 2568, 2574, 86, 86, 2575, 2576, 86, 2572, 86, 86, - 86, 86, 86, 3252, 86, 2579, 2577, 2585, 86, 2586, - - 86, 2578, 86, 86, 2580, 86, 86, 86, 2581, 2582, - 2583, 2584, 2588, 2589, 86, 2590, 86, 2591, 86, 86, - 2587, 2592, 2593, 86, 2594, 86, 86, 86, 86, 2599, - 2595, 2598, 2600, 86, 86, 86, 2601, 86, 2596, 2597, - 2602, 86, 86, 86, 2604, 86, 86, 2603, 86, 86, - 2608, 3252, 86, 86, 2606, 2612, 2605, 2613, 86, 86, - 2616, 86, 86, 2607, 86, 86, 2609, 2610, 2614, 2611, - 86, 86, 2620, 86, 2617, 2619, 86, 2615, 2621, 2618, - 86, 86, 2623, 2625, 86, 86, 86, 2629, 86, 86, - 2628, 2622, 86, 2626, 2627, 2631, 86, 2632, 86, 86, - - 2624, 86, 2636, 86, 86, 2637, 86, 2633, 2630, 2639, - 86, 86, 86, 2635, 86, 2634, 86, 86, 2644, 86, - 2646, 86, 86, 2642, 2640, 2641, 2643, 2647, 2638, 86, - 86, 2645, 86, 86, 2648, 86, 86, 2650, 86, 3252, - 86, 2651, 86, 86, 2649, 2653, 2654, 2656, 2657, 86, - 2659, 86, 2660, 86, 2652, 2655, 2661, 168, 86, 86, - 86, 86, 2666, 3252, 2658, 2662, 2663, 86, 86, 86, - 2668, 86, 2667, 3252, 86, 2671, 86, 2664, 2665, 2670, - 2672, 86, 86, 2674, 86, 86, 2669, 2676, 2675, 86, - 86, 86, 2677, 86, 2678, 2673, 2679, 2681, 86, 86, - - 86, 86, 2682, 86, 2680, 2683, 86, 86, 2684, 2688, - 86, 2689, 86, 86, 2686, 86, 2685, 86, 2690, 86, - 86, 86, 2691, 86, 2694, 2693, 86, 86, 2687, 86, - 2698, 86, 2696, 86, 2697, 2692, 2699, 86, 2695, 2704, - 2700, 86, 2701, 86, 2702, 86, 2703, 2705, 86, 86, - 86, 86, 2709, 86, 86, 86, 86, 2713, 86, 2711, - 86, 86, 86, 2718, 86, 86, 2717, 2706, 3252, 2707, - 2708, 2712, 2720, 2710, 2714, 2715, 2721, 2722, 86, 2723, - 86, 2716, 86, 86, 86, 86, 86, 86, 86, 86, - 2719, 2725, 2724, 2728, 2726, 86, 86, 2731, 86, 86, - - 2727, 3252, 2729, 2733, 86, 2734, 86, 2735, 86, 86, - 2730, 86, 86, 2736, 2738, 86, 2732, 2737, 86, 2739, - 86, 2742, 86, 2740, 86, 2745, 2743, 86, 2746, 86, - 86, 2744, 2741, 2747, 86, 86, 86, 86, 2748, 86, - 2750, 2752, 86, 2749, 86, 2753, 2754, 86, 2756, 86, - 86, 86, 2755, 2760, 2761, 86, 2751, 2758, 86, 86, - 86, 2763, 2762, 2757, 86, 2759, 2764, 86, 86, 86, - 2769, 86, 86, 86, 86, 2768, 86, 2771, 2772, 86, - 86, 86, 2774, 2765, 2766, 2773, 86, 86, 2767, 2775, - 2777, 86, 2778, 86, 86, 86, 2770, 2776, 2779, 2780, - - 2781, 86, 2785, 86, 86, 86, 86, 86, 2787, 86, - 86, 2782, 86, 2792, 2783, 2784, 2788, 2791, 2786, 2793, - 2789, 2796, 86, 86, 2794, 86, 2790, 86, 2797, 86, - 2798, 2795, 86, 2799, 86, 2800, 86, 86, 86, 2801, - 86, 2802, 86, 86, 86, 86, 86, 2806, 2810, 86, - 86, 86, 2807, 2811, 2813, 86, 86, 2803, 2814, 2805, - 2815, 86, 2812, 86, 2804, 2808, 2809, 86, 2816, 2817, - 86, 86, 86, 86, 2821, 86, 2818, 2822, 86, 2823, - 2819, 2820, 2824, 86, 2826, 86, 86, 86, 86, 2827, - 86, 2830, 86, 2831, 2829, 2832, 86, 86, 2825, 2828, - - 2833, 86, 86, 86, 86, 86, 2834, 86, 86, 2842, - 86, 86, 2837, 86, 86, 86, 2838, 2840, 2845, 2846, - 2836, 86, 2835, 2843, 86, 2847, 86, 2841, 86, 86, - 2839, 2844, 86, 2849, 2880, 2848, 86, 2850, 2852, 86, - 2851, 2853, 86, 2854, 86, 86, 86, 86, 86, 2856, - 2859, 2857, 2858, 2860, 2855, 86, 86, 2862, 86, 86, - 2861, 86, 86, 86, 2863, 86, 2868, 2866, 2870, 86, - 86, 2864, 86, 86, 2871, 86, 86, 2874, 2872, 86, - 2873, 2867, 2865, 86, 86, 86, 2879, 86, 86, 86, - 2869, 86, 86, 2882, 86, 86, 86, 86, 2875, 2876, - - 2877, 2881, 2886, 2878, 2883, 86, 2888, 2884, 86, 86, - 2887, 2885, 2891, 86, 2889, 2893, 86, 2894, 86, 86, - 2896, 86, 86, 86, 86, 86, 2901, 86, 2892, 2900, - 86, 86, 86, 86, 2890, 86, 2905, 86, 2897, 2898, - 2895, 2899, 2908, 86, 86, 86, 2910, 2906, 86, 86, - 2902, 2904, 86, 2911, 2903, 86, 2907, 2913, 86, 2914, - 86, 2916, 86, 86, 2909, 86, 2918, 2912, 2921, 2915, - 86, 86, 2919, 86, 86, 2925, 86, 86, 86, 2927, - 2926, 2917, 86, 2923, 86, 2920, 2930, 2931, 86, 2922, - 2933, 86, 86, 2924, 2928, 86, 86, 86, 2932, 2936, - - 86, 86, 2935, 86, 2929, 2939, 2937, 86, 86, 2934, - 86, 86, 2942, 86, 86, 86, 86, 2947, 86, 86, - 2943, 86, 2938, 2949, 2940, 2941, 2951, 86, 2944, 2946, - 2950, 2952, 86, 86, 2948, 86, 86, 86, 2953, 2945, - 86, 2955, 2956, 86, 2957, 86, 2958, 86, 2960, 2954, - 86, 2962, 86, 86, 86, 2961, 86, 86, 86, 2963, - 86, 2967, 86, 2959, 2968, 86, 86, 86, 2972, 86, - 2973, 86, 2969, 86, 2974, 2964, 2971, 3252, 2965, 2966, - 86, 86, 2970, 86, 2978, 86, 2975, 2982, 2977, 2979, - 86, 86, 2976, 86, 86, 2981, 2980, 86, 2985, 86, - - 86, 86, 86, 86, 86, 2984, 2983, 2986, 2989, 86, - 86, 86, 86, 86, 86, 2991, 2990, 86, 2992, 86, - 2987, 2988, 86, 86, 86, 86, 86, 86, 3084, 3001, - 2993, 3002, 2994, 2995, 3003, 2996, 2998, 2999, 2997, 3004, - 86, 86, 86, 86, 3000, 86, 3005, 3006, 3007, 3009, - 86, 3010, 86, 3008, 86, 86, 3014, 86, 3011, 86, - 3012, 3013, 3015, 86, 3016, 3017, 86, 86, 3018, 3019, - 3022, 86, 3020, 3021, 86, 86, 3023, 86, 86, 86, - 86, 86, 3029, 86, 3030, 86, 3028, 86, 86, 3032, - 86, 86, 3024, 3025, 3031, 86, 3252, 3033, 3026, 86, - - 3027, 86, 3037, 86, 3036, 3034, 3038, 86, 3041, 3035, - 3039, 86, 86, 3044, 3040, 86, 3046, 86, 3045, 86, - 86, 3042, 86, 86, 3043, 86, 86, 86, 3050, 3054, - 3051, 86, 3048, 3053, 86, 86, 3062, 3055, 3056, 86, - 3047, 3049, 3057, 86, 86, 3052, 3058, 86, 3252, 3059, - 3060, 86, 3061, 86, 3063, 86, 3064, 86, 3065, 86, - 3066, 86, 3067, 86, 3068, 86, 3069, 86, 86, 3071, - 86, 86, 86, 86, 86, 86, 86, 3070, 3076, 86, - 3072, 86, 86, 86, 3073, 86, 3080, 86, 3079, 3077, - 3082, 86, 86, 3074, 3075, 3078, 3081, 86, 3086, 86, - - 3089, 3083, 3088, 86, 86, 86, 86, 86, 86, 3091, - 3087, 86, 86, 3085, 3095, 86, 86, 3090, 86, 86, - 86, 3096, 3099, 3252, 3092, 3093, 86, 3094, 3101, 86, - 3097, 3100, 3102, 86, 3103, 86, 86, 86, 86, 86, - 86, 3106, 3098, 3104, 86, 3105, 3107, 86, 86, 3111, - 3112, 3110, 3108, 86, 86, 3114, 86, 86, 86, 86, - 3115, 86, 3109, 86, 86, 86, 86, 86, 3113, 86, - 3121, 3124, 86, 3118, 3126, 3116, 3117, 3122, 3120, 86, - 3129, 86, 86, 86, 3119, 3123, 3127, 3125, 3131, 86, - 86, 3130, 86, 3132, 3133, 86, 3134, 86, 86, 3128, - - 86, 3137, 3135, 86, 86, 3138, 86, 3142, 3139, 86, - 3136, 86, 86, 86, 86, 86, 3145, 3147, 86, 3148, - 86, 3141, 86, 3143, 3144, 3151, 86, 86, 86, 3140, - 3149, 3154, 86, 86, 3146, 86, 3155, 86, 3158, 86, - 86, 3150, 3152, 3159, 86, 3156, 3153, 86, 86, 86, - 86, 86, 3157, 3160, 86, 3163, 3164, 86, 86, 3162, - 3161, 3165, 86, 86, 86, 86, 86, 3169, 3168, 3166, - 3171, 3167, 86, 86, 86, 86, 86, 86, 3170, 3173, - 3176, 3177, 86, 3172, 3184, 3174, 3178, 86, 3182, 86, - 86, 86, 3175, 86, 3179, 3180, 3183, 86, 3185, 86, - - 86, 3181, 86, 3190, 3186, 3187, 86, 3188, 86, 86, - 3191, 86, 3189, 3192, 3193, 86, 86, 86, 86, 86, - 3194, 3199, 86, 86, 3196, 3195, 3252, 86, 86, 3202, - 3203, 86, 86, 86, 86, 86, 3201, 3197, 3198, 3206, - 86, 3200, 3204, 86, 3210, 3205, 86, 86, 86, 86, - 3214, 3207, 3211, 3209, 3208, 3252, 86, 86, 3216, 3212, - 86, 3217, 86, 86, 86, 3221, 86, 3218, 86, 86, - 3219, 3223, 86, 3222, 3213, 3215, 3224, 86, 86, 3225, - 86, 86, 86, 3220, 86, 3226, 3228, 3230, 86, 86, - 86, 86, 86, 86, 3232, 3233, 86, 3236, 86, 3227, - - 3252, 3229, 3252, 3231, 3237, 86, 86, 3240, 3241, 86, - 3234, 3235, 3238, 86, 3243, 86, 86, 3239, 3244, 86, - 3242, 86, 86, 3245, 86, 86, 3246, 3247, 3250, 86, - 3251, 86, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, - 3252, 3252, 3252, 3248, 3249, 47, 47, 47, 47, 47, - 47, 47, 52, 52, 52, 52, 52, 52, 52, 57, - 57, 57, 57, 57, 57, 57, 63, 63, 63, 63, - 63, 63, 63, 68, 68, 68, 68, 68, 68, 68, - 74, 74, 74, 74, 74, 74, 74, 80, 80, 80, - 80, 80, 80, 80, 89, 89, 3252, 89, 89, 89, - - 89, 158, 158, 3252, 3252, 3252, 158, 158, 160, 160, - 3252, 3252, 160, 3252, 160, 162, 3252, 3252, 3252, 3252, - 3252, 162, 165, 165, 3252, 3252, 3252, 165, 165, 167, - 3252, 3252, 3252, 3252, 3252, 167, 169, 169, 3252, 169, - 169, 169, 169, 172, 3252, 3252, 3252, 3252, 3252, 172, - 175, 175, 3252, 3252, 3252, 175, 175, 90, 90, 3252, - 90, 90, 90, 90, 17, 3252, 3252, 3252, 3252, 3252, - 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, - 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, - 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, - - 3252, 3252, 3252, 3252, 3252 + 492, 86, 164, 493, 501, 494, 86, 86, 502, 511, + 86, 86, 513, 516, 86, 515, 503, 86, 504, 510, + 505, 168, 514, 527, 86, 518, 528, 512, 86, 517, + + 86, 529, 86, 506, 530, 86, 507, 86, 508, 526, + 509, 86, 531, 519, 520, 86, 534, 86, 536, 532, + 533, 86, 86, 521, 86, 522, 523, 524, 86, 540, + 525, 86, 86, 542, 535, 86, 539, 86, 86, 541, + 86, 538, 549, 537, 86, 547, 546, 86, 86, 86, + 550, 543, 544, 548, 86, 554, 86, 545, 86, 552, + 86, 86, 86, 86, 551, 557, 558, 559, 553, 86, + 86, 86, 86, 86, 556, 565, 566, 86, 571, 561, + 86, 555, 560, 86, 568, 563, 562, 569, 86, 86, + 86, 572, 86, 567, 585, 86, 86, 163, 86, 86, + + 86, 580, 570, 573, 577, 574, 576, 586, 575, 581, + 582, 86, 86, 583, 584, 578, 587, 579, 86, 590, + 591, 589, 588, 86, 86, 86, 86, 86, 593, 592, + 594, 595, 86, 86, 597, 86, 599, 86, 86, 603, + 86, 86, 602, 600, 86, 86, 86, 86, 598, 86, + 604, 86, 596, 601, 607, 86, 608, 86, 609, 605, + 86, 86, 86, 86, 86, 86, 610, 611, 606, 86, + 619, 86, 615, 86, 614, 616, 617, 86, 618, 613, + 612, 86, 621, 86, 620, 86, 623, 86, 86, 86, + 86, 86, 86, 86, 86, 622, 625, 634, 626, 161, + + 636, 86, 628, 86, 624, 86, 86, 627, 633, 629, + 631, 630, 86, 632, 635, 638, 86, 637, 86, 86, + 86, 641, 644, 86, 639, 647, 86, 640, 86, 646, + 86, 86, 86, 642, 86, 643, 86, 650, 86, 86, + 86, 86, 653, 645, 649, 654, 656, 86, 86, 648, + 86, 86, 86, 86, 655, 86, 651, 652, 86, 670, + 86, 86, 86, 657, 659, 692, 673, 658, 86, 660, + 668, 671, 86, 669, 661, 676, 662, 672, 86, 86, + 86, 680, 663, 677, 664, 674, 681, 665, 666, 675, + 86, 86, 86, 86, 667, 678, 685, 682, 679, 86, + + 86, 86, 688, 86, 86, 683, 86, 684, 86, 690, + 86, 86, 86, 86, 86, 86, 86, 696, 86, 691, + 687, 693, 686, 697, 700, 701, 86, 168, 689, 694, + 699, 702, 698, 695, 703, 86, 86, 86, 704, 86, + 86, 86, 86, 86, 86, 86, 710, 712, 86, 86, + 705, 707, 715, 86, 708, 706, 711, 714, 716, 709, + 717, 718, 86, 86, 86, 86, 720, 86, 713, 86, + 86, 86, 86, 86, 719, 723, 724, 729, 86, 721, + 725, 86, 730, 86, 722, 732, 86, 726, 728, 734, + 727, 731, 733, 86, 737, 86, 735, 86, 736, 86, + + 86, 738, 740, 86, 86, 86, 739, 86, 742, 743, + 86, 86, 86, 86, 86, 741, 746, 747, 86, 745, + 86, 751, 750, 86, 86, 86, 86, 86, 752, 744, + 754, 86, 756, 86, 86, 86, 86, 748, 86, 749, + 755, 753, 86, 759, 762, 86, 86, 763, 757, 765, + 86, 760, 86, 86, 766, 758, 761, 767, 768, 764, + 86, 770, 86, 86, 86, 86, 86, 777, 773, 774, + 769, 771, 86, 86, 86, 779, 86, 86, 772, 775, + 780, 776, 782, 778, 86, 86, 86, 783, 86, 86, + 784, 86, 86, 787, 86, 86, 789, 791, 86, 86, + + 86, 86, 781, 86, 785, 788, 797, 786, 792, 86, + 795, 794, 86, 159, 790, 796, 86, 86, 86, 793, + 799, 802, 798, 800, 801, 86, 86, 804, 86, 806, + 803, 86, 808, 86, 86, 86, 807, 809, 86, 86, + 812, 86, 805, 86, 811, 813, 86, 86, 86, 819, + 86, 86, 816, 86, 814, 86, 815, 821, 810, 86, + 86, 824, 86, 86, 822, 826, 817, 818, 828, 820, + 825, 823, 86, 86, 86, 86, 831, 86, 830, 835, + 827, 832, 86, 86, 829, 86, 833, 86, 86, 837, + 86, 86, 86, 86, 86, 843, 86, 86, 844, 86, + + 834, 86, 836, 86, 86, 845, 838, 86, 839, 840, + 86, 841, 846, 842, 847, 86, 852, 86, 86, 850, + 86, 848, 86, 849, 86, 851, 86, 86, 857, 853, + 854, 86, 86, 86, 86, 86, 855, 86, 866, 856, + 864, 86, 86, 859, 858, 867, 86, 86, 865, 860, + 861, 862, 863, 86, 86, 86, 868, 86, 870, 872, + 86, 86, 86, 86, 86, 869, 176, 871, 876, 877, + 878, 873, 86, 875, 86, 86, 874, 879, 86, 880, + 881, 86, 882, 86, 86, 168, 86, 883, 86, 888, + 887, 86, 885, 86, 86, 884, 886, 889, 86, 86, + + 891, 86, 890, 895, 86, 86, 896, 898, 86, 892, + 86, 86, 893, 86, 897, 899, 86, 902, 86, 86, + 894, 903, 900, 86, 86, 86, 908, 86, 904, 86, + 901, 905, 86, 909, 910, 86, 907, 86, 86, 86, + 86, 906, 86, 86, 86, 929, 924, 911, 923, 925, + 86, 926, 86, 921, 928, 86, 930, 913, 86, 86, + 912, 86, 86, 914, 86, 935, 915, 86, 927, 931, + 916, 86, 943, 917, 86, 86, 933, 932, 86, 86, + 918, 919, 946, 920, 934, 86, 936, 937, 86, 938, + 86, 86, 939, 945, 948, 944, 950, 940, 951, 86, + + 86, 955, 86, 941, 942, 954, 956, 86, 86, 86, + 949, 174, 947, 86, 952, 957, 86, 958, 960, 86, + 961, 86, 86, 86, 959, 953, 962, 86, 964, 86, + 963, 965, 86, 86, 967, 966, 86, 86, 86, 86, + 969, 86, 973, 86, 86, 86, 972, 86, 968, 86, + 976, 86, 982, 86, 980, 978, 86, 970, 971, 974, + 86, 975, 86, 977, 983, 1001, 86, 981, 986, 984, + 86, 985, 987, 979, 86, 86, 989, 86, 86, 86, + 988, 86, 86, 991, 990, 993, 86, 992, 994, 86, + 86, 86, 86, 86, 86, 1000, 86, 997, 995, 86, + + 998, 1003, 86, 86, 1004, 86, 86, 1002, 86, 996, + 86, 86, 86, 999, 1006, 1007, 1009, 86, 86, 86, + 1011, 1010, 1005, 1012, 86, 86, 86, 86, 1019, 86, + 1017, 86, 1008, 1013, 1015, 1018, 86, 86, 86, 1016, + 86, 1027, 86, 1024, 1020, 86, 1022, 1026, 86, 1014, + 1021, 1025, 86, 86, 86, 86, 86, 1029, 86, 86, + 86, 86, 1023, 1035, 86, 1037, 86, 1040, 86, 1028, + 86, 173, 86, 86, 1030, 1031, 1032, 1041, 86, 1034, + 1033, 86, 1038, 1036, 1042, 1039, 86, 1045, 86, 1043, + 1048, 86, 1044, 1047, 86, 86, 86, 86, 86, 86, + + 1046, 86, 86, 1057, 1050, 1052, 1058, 1060, 86, 86, + 86, 86, 86, 86, 1049, 86, 1051, 1063, 1053, 1065, + 1055, 1054, 1056, 86, 1059, 1061, 1064, 86, 1062, 86, + 86, 86, 86, 86, 1071, 1069, 1072, 86, 86, 1076, + 1073, 1067, 86, 86, 86, 86, 1066, 1078, 86, 1068, + 86, 86, 1070, 86, 1081, 86, 1074, 1075, 1080, 1082, + 168, 86, 86, 1077, 86, 1084, 1083, 86, 1079, 86, + 1085, 86, 1088, 86, 86, 86, 86, 1086, 86, 1101, + 86, 86, 1087, 1089, 1102, 1104, 86, 1091, 1092, 86, + 86, 86, 86, 1106, 1093, 1090, 1103, 1094, 86, 86, + + 86, 1095, 86, 1096, 1120, 1109, 1107, 1097, 86, 1098, + 86, 86, 1111, 1108, 1099, 1105, 1110, 1112, 86, 1100, + 1113, 86, 1114, 86, 86, 1115, 86, 86, 86, 1118, + 86, 1121, 1133, 86, 86, 1130, 86, 1116, 1117, 1119, + 1126, 1122, 1125, 86, 1124, 1128, 1129, 1132, 1127, 1123, + 1131, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 1147, 86, 1144, 86, 86, 86, 1148, 86, 1143, + 86, 1146, 86, 1134, 1135, 86, 1136, 86, 1145, 1150, + 1149, 1137, 1154, 1138, 168, 1151, 1153, 1152, 86, 1139, + 86, 86, 86, 1158, 1140, 1141, 1155, 86, 1160, 86, + + 86, 1142, 1156, 86, 1161, 1163, 86, 86, 86, 1164, + 1157, 86, 86, 1166, 1168, 1159, 86, 86, 86, 86, + 86, 1169, 86, 1162, 1174, 1167, 1165, 1171, 1172, 86, + 86, 86, 86, 86, 86, 86, 1170, 1177, 1173, 86, + 1175, 86, 86, 86, 86, 86, 86, 86, 1176, 1179, + 1182, 1181, 1183, 1178, 1180, 86, 1186, 86, 86, 1185, + 1187, 1184, 86, 86, 1192, 1189, 1190, 86, 86, 86, + 86, 1188, 1191, 1194, 1195, 1196, 1197, 1199, 1193, 86, + 1198, 86, 86, 86, 1202, 86, 86, 86, 1204, 1203, + 86, 1205, 86, 86, 1200, 1206, 86, 86, 1201, 1207, + + 86, 1213, 86, 86, 86, 1215, 1208, 86, 86, 1209, + 1211, 86, 86, 1217, 1210, 1212, 86, 86, 1216, 1219, + 86, 166, 1214, 86, 86, 1220, 1218, 86, 1221, 1222, + 86, 86, 1224, 1223, 86, 1225, 1228, 86, 86, 1230, + 1227, 1231, 86, 1226, 1229, 86, 1232, 86, 86, 86, + 1235, 1234, 86, 86, 86, 86, 86, 1241, 1239, 86, + 1242, 86, 86, 86, 1243, 1233, 86, 1244, 86, 1240, + 1236, 1246, 1237, 1245, 1238, 86, 1249, 86, 86, 1247, + 1251, 86, 86, 1250, 86, 86, 86, 86, 86, 86, + 86, 1256, 1257, 1252, 1253, 1248, 86, 86, 86, 86, + + 86, 1258, 1259, 1263, 1254, 1264, 1255, 86, 86, 86, + 1261, 86, 1266, 86, 1260, 1265, 1267, 86, 1262, 86, + 1271, 86, 86, 86, 86, 1270, 86, 1268, 86, 1277, + 86, 1273, 168, 1269, 86, 86, 86, 86, 86, 1272, + 86, 1282, 1274, 164, 86, 1284, 86, 1276, 1279, 1281, + 1280, 1275, 1278, 1283, 1286, 1287, 1288, 86, 1285, 86, + 86, 86, 1289, 86, 1291, 1290, 86, 86, 86, 86, + 86, 86, 86, 1294, 86, 1300, 86, 86, 1297, 86, + 1292, 1293, 86, 86, 1295, 86, 163, 1298, 1304, 1296, + 86, 1301, 86, 1299, 86, 1306, 1310, 1302, 1303, 86, + + 1311, 1314, 86, 86, 1307, 1305, 1308, 1312, 86, 1309, + 1313, 86, 86, 86, 86, 1316, 86, 1315, 86, 86, + 86, 1320, 86, 1319, 1323, 86, 86, 1317, 86, 1327, + 86, 1318, 1322, 86, 86, 86, 1324, 1321, 1328, 1325, + 1329, 86, 86, 1333, 1326, 1332, 1330, 1331, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 1339, + 86, 86, 86, 1334, 1335, 1337, 1338, 1340, 1344, 1336, + 86, 86, 86, 1341, 86, 1343, 1345, 1342, 1346, 1348, + 1347, 86, 86, 86, 86, 86, 1349, 86, 1356, 86, + 86, 1350, 86, 1351, 86, 1359, 86, 86, 1354, 1353, + + 1357, 1352, 1362, 1358, 1355, 86, 1364, 86, 1361, 86, + 1360, 1365, 86, 86, 1369, 1366, 86, 1363, 86, 1379, + 1383, 1367, 1368, 86, 1370, 86, 86, 1378, 1371, 1377, + 86, 1372, 1373, 86, 1380, 1381, 1374, 86, 86, 86, + 86, 86, 1375, 86, 1384, 1385, 1376, 1382, 86, 1386, + 86, 1388, 86, 86, 86, 1389, 86, 1390, 1387, 86, + 86, 1391, 86, 1393, 1395, 86, 1398, 1399, 86, 1525, + 1400, 1392, 86, 86, 1396, 86, 1394, 1402, 86, 1401, + 1397, 86, 1403, 86, 1404, 86, 1405, 1411, 1406, 86, + 1407, 1408, 1409, 1412, 86, 86, 1410, 1415, 86, 1413, + + 86, 86, 1416, 86, 1414, 86, 1419, 1417, 86, 86, + 86, 86, 1425, 86, 1426, 86, 86, 1421, 86, 1420, + 86, 86, 1418, 1427, 86, 1424, 1429, 86, 1422, 1423, + 1428, 86, 86, 1431, 1430, 1435, 86, 1434, 86, 1437, + 86, 86, 86, 1438, 86, 1432, 86, 1439, 86, 1443, + 86, 1440, 86, 1436, 1445, 86, 1433, 1442, 86, 1446, + 86, 1441, 86, 86, 86, 1447, 1450, 86, 86, 86, + 86, 86, 1444, 1452, 86, 1467, 1454, 86, 86, 86, + 1456, 86, 1457, 1448, 1449, 86, 1455, 86, 1451, 1453, + 1458, 86, 86, 1463, 1459, 1461, 1460, 1462, 86, 86, + + 86, 86, 1465, 1464, 86, 1466, 1468, 86, 86, 86, + 86, 1473, 1474, 1470, 1475, 1471, 86, 86, 86, 1476, + 86, 86, 1469, 1472, 86, 86, 1480, 86, 168, 1477, + 86, 86, 1479, 1485, 1486, 1478, 86, 86, 86, 86, + 86, 1488, 1487, 1482, 1481, 86, 86, 86, 86, 86, + 1483, 1489, 86, 1496, 1484, 86, 86, 1490, 1491, 86, + 1493, 86, 86, 1494, 1495, 1492, 1500, 1501, 86, 86, + 86, 86, 86, 1505, 1503, 1497, 86, 1499, 1506, 86, + 1508, 1498, 86, 86, 1509, 1502, 86, 86, 86, 1504, + 1507, 86, 1514, 1517, 86, 1515, 1510, 1516, 1511, 1519, + + 86, 1512, 86, 86, 1513, 86, 1520, 1522, 1518, 86, + 86, 1521, 1523, 86, 86, 1527, 86, 86, 86, 1528, + 86, 86, 1524, 1531, 86, 86, 86, 1526, 86, 1536, + 1537, 86, 86, 1540, 1529, 1533, 86, 1530, 86, 86, + 1532, 86, 1534, 1535, 86, 86, 86, 86, 1541, 1538, + 86, 1539, 1547, 86, 86, 1543, 86, 1542, 1549, 1544, + 1545, 1548, 86, 86, 1552, 1546, 86, 86, 1550, 86, + 1559, 1551, 86, 1556, 1557, 86, 1554, 1558, 1560, 86, + 86, 1553, 86, 86, 86, 86, 1565, 1566, 1561, 1555, + 1564, 1562, 86, 86, 1567, 86, 1568, 86, 1569, 86, + + 86, 1570, 86, 1571, 86, 1563, 86, 86, 86, 86, + 86, 86, 1578, 1572, 86, 86, 1577, 86, 86, 1574, + 86, 86, 1575, 1580, 1573, 1576, 1581, 1584, 86, 1589, + 1586, 1582, 1585, 86, 1579, 1587, 86, 1583, 86, 86, + 1588, 86, 86, 86, 86, 86, 1597, 1593, 86, 86, + 1592, 86, 86, 1598, 1600, 86, 86, 1590, 1591, 1603, + 86, 1602, 1594, 1596, 1595, 86, 86, 86, 86, 86, + 1601, 86, 1611, 161, 86, 1599, 86, 1609, 86, 86, + 86, 1612, 1614, 86, 1617, 1604, 1605, 1606, 1607, 1610, + 1608, 1613, 1615, 86, 86, 86, 86, 86, 86, 1616, + + 1621, 86, 86, 86, 1622, 1619, 86, 1625, 1618, 86, + 1620, 1629, 86, 86, 86, 86, 1631, 1623, 1626, 1624, + 1630, 86, 86, 86, 86, 1628, 1627, 1633, 1632, 1634, + 86, 86, 86, 1640, 1635, 1636, 1641, 86, 86, 86, + 86, 1637, 86, 1639, 86, 1645, 1646, 1644, 86, 86, + 1638, 86, 86, 1648, 86, 86, 1642, 86, 1649, 1650, + 86, 1643, 86, 86, 86, 1651, 1653, 1652, 1647, 86, + 1656, 1655, 86, 86, 86, 86, 86, 1654, 86, 1657, + 1660, 86, 1662, 86, 86, 1663, 86, 86, 1661, 86, + 1668, 86, 1659, 1658, 86, 86, 1664, 86, 1665, 86, + + 1671, 1669, 1673, 86, 86, 86, 1667, 86, 1674, 1666, + 168, 1675, 1670, 86, 1672, 86, 1676, 1679, 1678, 1677, + 86, 1682, 86, 86, 1680, 1681, 1683, 86, 86, 86, + 86, 86, 1690, 86, 86, 86, 86, 86, 1691, 1694, + 86, 1684, 1685, 1688, 1695, 86, 1686, 1687, 86, 86, + 1696, 1698, 1700, 1699, 1692, 1689, 1693, 1697, 86, 86, + 1702, 86, 1704, 86, 86, 86, 86, 86, 86, 86, + 1709, 1706, 1707, 86, 1710, 1703, 86, 86, 86, 1701, + 86, 86, 86, 1705, 1714, 86, 1715, 86, 86, 159, + 1711, 1722, 1708, 1713, 1717, 1712, 86, 86, 1716, 1719, + + 86, 86, 1720, 86, 1724, 1723, 86, 1718, 1730, 86, + 1731, 1727, 1726, 1728, 1721, 86, 86, 1732, 1729, 86, + 1725, 86, 1734, 86, 1733, 86, 1735, 1736, 86, 86, + 86, 86, 86, 86, 1737, 86, 1743, 1744, 1742, 86, + 1746, 1738, 86, 86, 1745, 86, 86, 86, 1739, 86, + 1740, 86, 1741, 86, 1748, 1749, 86, 86, 1750, 86, + 86, 86, 86, 86, 86, 1751, 86, 86, 1747, 1760, + 1759, 1752, 86, 1754, 1755, 1756, 86, 1753, 86, 1765, + 1757, 86, 86, 1761, 1762, 86, 86, 86, 1758, 1764, + 1763, 86, 1771, 86, 86, 86, 86, 86, 1767, 86, + + 1773, 1766, 86, 1775, 86, 1769, 1768, 86, 1770, 1774, + 86, 1776, 86, 1777, 1772, 86, 86, 86, 86, 1780, + 86, 86, 1782, 86, 1789, 1779, 1783, 1781, 1778, 1784, + 1790, 86, 1785, 1786, 1791, 86, 86, 86, 1787, 86, + 1794, 1793, 1795, 86, 86, 1788, 86, 86, 1792, 86, + 86, 1798, 1796, 86, 1799, 86, 86, 86, 86, 1802, + 1808, 86, 86, 1797, 1807, 1804, 1800, 1806, 1805, 1801, + 86, 86, 86, 86, 1803, 1810, 86, 1809, 86, 86, + 86, 1817, 86, 86, 86, 1814, 1812, 86, 1820, 1811, + 86, 1821, 1813, 1819, 86, 86, 1823, 1816, 1818, 1824, + + 1825, 86, 86, 1815, 1829, 1822, 86, 86, 86, 1830, + 86, 86, 1826, 1835, 86, 86, 1834, 1837, 86, 86, + 1828, 1831, 1827, 1832, 1838, 86, 86, 1840, 1833, 86, + 86, 1839, 1836, 86, 86, 1841, 1844, 86, 86, 86, + 1848, 1846, 86, 86, 86, 1842, 86, 1847, 1843, 86, + 1845, 1849, 86, 86, 86, 86, 86, 1852, 1850, 1858, + 86, 1853, 1860, 1851, 86, 1861, 1854, 1855, 86, 1856, + 1857, 86, 1863, 86, 86, 86, 86, 1862, 1867, 86, + 1869, 1859, 86, 86, 86, 86, 86, 1873, 86, 86, + 86, 86, 3291, 1865, 1864, 1866, 1868, 86, 86, 1879, + + 1871, 1875, 86, 1872, 1870, 86, 86, 1876, 168, 1874, + 1877, 1878, 86, 1882, 1880, 1883, 86, 86, 86, 86, + 1881, 1887, 86, 86, 86, 86, 86, 86, 1894, 1885, + 1889, 1884, 86, 1888, 86, 86, 1890, 1886, 1891, 86, + 86, 1897, 1898, 86, 1892, 86, 86, 1893, 1899, 86, + 1896, 1895, 1900, 86, 1901, 1902, 1903, 1904, 86, 86, + 1908, 86, 86, 1906, 86, 86, 86, 1907, 86, 86, + 86, 1905, 86, 86, 1912, 1913, 86, 86, 86, 86, + 3291, 1914, 1917, 86, 1910, 1915, 1911, 1909, 1918, 86, + 86, 1916, 86, 1926, 1923, 1921, 1925, 86, 1920, 86, + + 86, 1919, 1922, 86, 1927, 86, 86, 1924, 86, 86, + 1932, 86, 1935, 1936, 86, 1937, 86, 86, 86, 1928, + 86, 1930, 1929, 1933, 86, 1934, 1931, 1939, 86, 86, + 1940, 1943, 86, 86, 86, 86, 1945, 1938, 1944, 1941, + 86, 1942, 86, 1946, 1947, 86, 1949, 86, 1951, 1950, + 86, 1948, 86, 1952, 86, 1953, 86, 1955, 86, 86, + 86, 1954, 1956, 86, 1959, 1958, 86, 1961, 86, 86, + 86, 1960, 86, 86, 86, 86, 86, 86, 1969, 1975, + 1957, 1962, 1963, 1964, 86, 86, 1967, 1976, 1965, 1973, + 1966, 1971, 1968, 86, 1970, 1978, 1972, 86, 86, 86, + + 1974, 86, 86, 1982, 86, 86, 86, 1979, 1977, 86, + 1984, 86, 86, 1987, 1988, 86, 86, 1990, 86, 1980, + 86, 86, 86, 1981, 86, 86, 1985, 1996, 86, 1995, + 1992, 1983, 86, 1986, 1993, 86, 1989, 86, 86, 1998, + 86, 86, 2002, 1994, 1999, 1991, 86, 2000, 86, 86, + 2006, 86, 86, 1997, 2005, 2009, 86, 2010, 86, 2008, + 86, 86, 86, 86, 2004, 2012, 2001, 2011, 86, 86, + 86, 2007, 2003, 86, 86, 86, 86, 2015, 2013, 2017, + 86, 2020, 2014, 2021, 2022, 2016, 86, 86, 2018, 86, + 86, 2025, 86, 86, 86, 2023, 2030, 86, 86, 2029, + + 2019, 2024, 86, 86, 86, 86, 86, 2026, 2034, 86, + 86, 2035, 2027, 2037, 86, 2028, 86, 2031, 2032, 2036, + 2038, 2033, 86, 2041, 86, 86, 86, 2042, 2044, 86, + 86, 2045, 86, 2039, 2048, 86, 86, 86, 2040, 2043, + 86, 2050, 2051, 86, 86, 2052, 2054, 2049, 86, 2046, + 2047, 86, 2053, 2058, 86, 2057, 2059, 86, 2060, 2062, + 2063, 86, 2055, 2061, 86, 86, 86, 2056, 86, 86, + 2067, 86, 86, 2065, 86, 86, 86, 86, 2069, 2072, + 2074, 2066, 86, 2068, 2070, 86, 86, 2064, 168, 86, + 86, 86, 86, 2075, 2076, 2080, 2079, 86, 2081, 2073, + + 2071, 2077, 2082, 86, 2083, 86, 86, 2085, 86, 2078, + 86, 86, 86, 86, 2086, 2087, 86, 2088, 86, 2091, + 86, 2089, 86, 2090, 86, 2093, 2084, 86, 86, 2097, + 86, 86, 2092, 2096, 2094, 86, 86, 86, 2101, 2095, + 2098, 2099, 2100, 2102, 86, 86, 86, 86, 86, 86, + 2109, 2107, 86, 86, 86, 2104, 86, 2108, 86, 86, + 86, 2114, 86, 2111, 86, 2103, 2105, 86, 2106, 86, + 86, 2110, 2115, 2113, 86, 2119, 2112, 86, 2117, 2120, + 2116, 86, 86, 86, 2118, 86, 2123, 86, 2122, 2121, + 2125, 86, 86, 86, 2131, 2124, 2126, 86, 86, 2127, + + 86, 2128, 2129, 86, 2133, 86, 2130, 2134, 2135, 86, + 86, 2137, 86, 86, 2132, 86, 2138, 2141, 2136, 2140, + 86, 2139, 86, 86, 86, 86, 86, 2142, 86, 2145, + 86, 86, 86, 2146, 86, 86, 86, 86, 86, 86, + 86, 3291, 2148, 2149, 2143, 2144, 2154, 2147, 2151, 2150, + 2153, 2158, 2159, 86, 86, 86, 86, 2156, 2152, 2155, + 86, 2157, 86, 2162, 86, 86, 86, 2163, 2166, 2165, + 86, 86, 2160, 86, 86, 2161, 2164, 2169, 2168, 86, + 2170, 86, 86, 2167, 2174, 86, 86, 86, 2172, 2176, + 2178, 86, 2171, 2173, 86, 86, 86, 2181, 86, 86, + + 2177, 2180, 86, 2182, 2175, 86, 2186, 2183, 86, 86, + 86, 86, 86, 2187, 86, 2192, 86, 2184, 2189, 86, + 2179, 86, 2188, 86, 2193, 2185, 2196, 86, 2191, 2198, + 2190, 86, 86, 86, 2194, 86, 2197, 86, 2202, 86, + 86, 2195, 86, 2204, 86, 2200, 86, 2203, 86, 2205, + 86, 2199, 86, 2201, 86, 2206, 2211, 2207, 2208, 2209, + 86, 2213, 2210, 86, 86, 2212, 2214, 86, 86, 2215, + 86, 86, 86, 2218, 86, 2216, 2217, 2219, 86, 2223, + 86, 86, 86, 2220, 86, 86, 86, 2222, 86, 86, + 86, 2221, 2224, 86, 86, 2232, 2229, 2230, 2226, 2225, + + 2227, 86, 2234, 2228, 86, 86, 2233, 86, 86, 2231, + 2235, 2237, 86, 2243, 86, 86, 86, 2238, 2245, 86, + 86, 86, 2239, 2236, 2242, 2244, 2240, 86, 86, 168, + 2251, 2247, 2253, 2248, 2249, 2252, 86, 2241, 86, 2246, + 2254, 86, 86, 86, 2255, 86, 86, 2258, 86, 86, + 2256, 2250, 86, 2259, 2262, 2263, 86, 86, 2264, 86, + 2267, 2265, 2272, 2257, 86, 86, 86, 2260, 86, 2268, + 86, 2269, 2270, 86, 86, 86, 86, 2266, 2261, 2271, + 2273, 86, 86, 86, 86, 2274, 2275, 86, 2278, 86, + 86, 86, 86, 86, 2281, 2276, 86, 2285, 2287, 86, + + 86, 86, 2280, 86, 2288, 86, 2277, 2279, 2282, 2283, + 2290, 2284, 86, 86, 86, 86, 2289, 86, 2286, 86, + 2295, 2298, 86, 86, 86, 2293, 86, 86, 86, 2291, + 2292, 2299, 2296, 2294, 86, 2297, 86, 86, 86, 86, + 86, 3291, 86, 2300, 86, 2301, 2311, 2313, 86, 2306, + 2302, 86, 2303, 2304, 2308, 2309, 2314, 2305, 2310, 2307, + 86, 86, 2312, 86, 2315, 86, 86, 86, 86, 2319, + 2320, 86, 86, 86, 2321, 86, 2316, 2322, 86, 2317, + 2318, 2323, 86, 2325, 2326, 86, 2324, 2327, 2328, 86, + 2329, 86, 86, 86, 86, 86, 86, 2330, 2331, 2335, + + 86, 2336, 86, 2338, 86, 2332, 86, 2334, 2340, 86, + 86, 86, 2343, 86, 2333, 2337, 2342, 2344, 86, 86, + 86, 86, 86, 86, 2339, 2341, 2350, 86, 2349, 2346, + 86, 2352, 86, 2345, 86, 2347, 86, 86, 86, 2356, + 2355, 2348, 2354, 2358, 86, 86, 86, 86, 86, 2351, + 2362, 86, 2353, 86, 2357, 86, 86, 2367, 86, 86, + 2366, 2360, 86, 86, 2359, 86, 2361, 2369, 2363, 86, + 2365, 2372, 86, 86, 86, 86, 2364, 86, 2368, 86, + 2370, 2374, 86, 2373, 2371, 86, 2379, 2375, 86, 86, + 2381, 2380, 2382, 2376, 86, 2377, 86, 86, 86, 86, + + 86, 2386, 2387, 86, 86, 2378, 2385, 2383, 2391, 2384, + 86, 86, 2389, 86, 2396, 2393, 2394, 86, 2398, 86, + 86, 2390, 86, 2388, 86, 86, 86, 2399, 2395, 86, + 2392, 2400, 86, 86, 2404, 2403, 86, 86, 2397, 86, + 86, 3291, 2402, 2409, 2401, 2405, 2406, 2408, 2407, 86, + 2410, 86, 86, 86, 2414, 2411, 86, 2415, 86, 2416, + 2412, 2413, 86, 86, 168, 86, 86, 2417, 86, 2418, + 86, 2423, 86, 86, 86, 2425, 86, 86, 86, 2434, + 86, 2421, 2419, 2424, 2420, 2426, 2422, 86, 86, 2429, + 2427, 2428, 86, 2431, 3291, 2430, 86, 2435, 2432, 2433, + + 2436, 86, 86, 86, 2439, 2437, 2440, 86, 2438, 86, + 86, 86, 86, 2442, 86, 86, 2441, 86, 2444, 86, + 86, 2448, 2449, 2443, 86, 2446, 86, 2445, 86, 2451, + 86, 86, 86, 86, 2452, 2453, 2454, 86, 2447, 86, + 2450, 86, 2456, 86, 2455, 2460, 86, 2459, 86, 86, + 2457, 2458, 86, 86, 2462, 86, 86, 86, 86, 2469, + 2466, 2461, 86, 2468, 86, 86, 86, 86, 2470, 2465, + 86, 86, 2463, 2464, 86, 2474, 86, 2467, 86, 86, + 2484, 2479, 2471, 2478, 86, 2472, 2473, 86, 2476, 86, + 2477, 86, 2475, 2481, 86, 86, 86, 2480, 2483, 2485, + + 86, 2487, 86, 2482, 2489, 86, 2488, 2491, 86, 86, + 86, 2493, 86, 86, 86, 86, 86, 2490, 2492, 86, + 2497, 2486, 86, 86, 86, 2501, 86, 2499, 2495, 2500, + 2503, 2494, 2496, 2502, 86, 86, 86, 86, 2504, 2505, + 86, 86, 86, 2510, 86, 2498, 2507, 86, 86, 2512, + 86, 2515, 86, 86, 2509, 86, 2511, 2506, 86, 2508, + 86, 2516, 86, 2519, 86, 2514, 2513, 2520, 86, 2521, + 86, 86, 2517, 86, 86, 2525, 86, 86, 2518, 2524, + 2523, 86, 86, 86, 86, 2532, 86, 2529, 2522, 2531, + 2526, 2527, 86, 2528, 2533, 86, 2534, 86, 2535, 86, + + 86, 86, 86, 2530, 2536, 86, 2538, 86, 2539, 86, + 2540, 86, 86, 86, 2541, 2545, 86, 2542, 2537, 2547, + 86, 2548, 86, 86, 86, 86, 86, 86, 2544, 86, + 86, 2543, 2546, 2551, 2549, 2554, 2550, 2552, 86, 2557, + 86, 86, 86, 86, 86, 86, 86, 2553, 86, 2555, + 2558, 86, 168, 86, 2565, 86, 86, 2561, 2556, 86, + 2563, 86, 86, 2560, 2564, 2566, 2567, 3291, 2559, 2562, + 2568, 2571, 86, 86, 86, 2572, 2573, 2569, 2574, 2575, + 2576, 86, 86, 2570, 2577, 86, 86, 2578, 86, 2579, + 86, 2580, 86, 86, 86, 86, 86, 86, 86, 86, + + 2581, 86, 86, 2582, 2591, 86, 86, 86, 2589, 2584, + 86, 86, 2583, 86, 2586, 2585, 86, 2595, 2588, 2587, + 2599, 2590, 2596, 86, 2593, 2592, 86, 2597, 2594, 2598, + 2600, 86, 2602, 86, 86, 2601, 86, 86, 86, 86, + 86, 86, 86, 86, 2605, 2611, 86, 2612, 86, 86, + 86, 86, 2603, 2606, 2604, 2618, 2615, 2607, 2608, 2609, + 2610, 86, 2613, 2616, 86, 2617, 86, 2614, 86, 2619, + 86, 86, 86, 86, 86, 86, 86, 2623, 2627, 86, + 2626, 2628, 86, 2620, 86, 2622, 2629, 2630, 86, 2621, + 86, 86, 86, 2624, 2625, 86, 86, 86, 2631, 2632, + + 86, 2636, 86, 86, 2634, 86, 2640, 2641, 86, 86, + 2633, 2644, 86, 86, 86, 2635, 86, 2637, 2645, 2638, + 2642, 86, 2639, 2648, 86, 2647, 86, 2643, 2646, 2649, + 86, 86, 2653, 86, 86, 86, 86, 2657, 86, 86, + 2656, 2650, 2659, 86, 2655, 86, 2654, 86, 86, 86, + 2651, 2652, 2660, 86, 2661, 2664, 86, 86, 2658, 86, + 2665, 2663, 2667, 86, 2662, 86, 86, 86, 86, 86, + 2668, 2672, 86, 2674, 86, 2666, 2670, 2671, 2669, 86, + 86, 2673, 86, 2677, 2675, 2676, 86, 2678, 86, 86, + 86, 86, 86, 86, 2679, 86, 86, 2684, 2681, 2682, + + 2685, 2687, 86, 2688, 86, 2683, 86, 2680, 2686, 2689, + 168, 86, 86, 2690, 2692, 2694, 2691, 86, 86, 2696, + 86, 86, 2695, 86, 2699, 86, 2700, 86, 2698, 86, + 2693, 2702, 86, 86, 2704, 2697, 2703, 86, 86, 2705, + 86, 86, 2701, 2706, 2709, 86, 2707, 86, 86, 2710, + 86, 2708, 2711, 86, 86, 86, 86, 2712, 2716, 2717, + 86, 2718, 2714, 86, 86, 86, 86, 86, 2713, 86, + 2720, 2721, 2719, 86, 86, 86, 2715, 2722, 2724, 2723, + 2725, 86, 86, 86, 86, 2730, 86, 2726, 86, 86, + 2733, 2728, 2729, 86, 2727, 2731, 86, 86, 86, 2734, + + 86, 2738, 86, 86, 86, 2739, 2732, 86, 2735, 86, + 2743, 86, 86, 2741, 86, 86, 86, 2736, 86, 2737, + 2747, 3291, 2740, 2755, 2742, 2750, 2744, 2745, 2748, 86, + 2751, 86, 2752, 86, 2746, 86, 86, 86, 86, 86, + 2749, 2753, 86, 2754, 86, 86, 2756, 2759, 2758, 86, + 2761, 86, 2757, 2763, 86, 2764, 86, 2765, 86, 86, + 2760, 86, 86, 2766, 2768, 86, 2767, 86, 86, 2762, + 2772, 86, 2770, 86, 2775, 2773, 86, 2776, 86, 86, + 2771, 86, 2769, 2777, 86, 86, 86, 86, 2778, 2782, + 86, 2774, 2779, 86, 2783, 2784, 86, 2786, 86, 2780, + + 86, 86, 2785, 86, 2790, 86, 2781, 2791, 86, 2792, + 86, 86, 86, 2787, 86, 2793, 86, 2789, 86, 2788, + 2794, 86, 2799, 86, 2798, 2802, 86, 2801, 86, 86, + 86, 86, 2796, 86, 2795, 2803, 2797, 2804, 86, 2800, + 86, 2805, 86, 2807, 86, 2808, 86, 2811, 86, 86, + 2809, 2810, 2815, 86, 86, 86, 2806, 2817, 86, 86, + 86, 2822, 86, 2814, 2812, 2818, 2823, 86, 2813, 2816, + 2821, 2824, 2819, 2827, 86, 86, 2825, 86, 2820, 2826, + 86, 2828, 86, 2829, 86, 2830, 86, 2831, 86, 86, + 86, 2832, 86, 2833, 86, 86, 86, 2836, 86, 86, + + 2838, 2842, 86, 2843, 86, 2839, 86, 86, 86, 2834, + 2844, 2846, 86, 2837, 86, 2847, 2835, 86, 2840, 2841, + 2848, 86, 2849, 2851, 2845, 2850, 86, 86, 86, 86, + 2855, 86, 86, 86, 86, 86, 2852, 2853, 2856, 2859, + 86, 2857, 86, 86, 2860, 86, 86, 2854, 2858, 86, + 2863, 2862, 86, 2861, 2864, 2865, 86, 2866, 86, 86, + 2868, 2869, 86, 86, 86, 86, 2867, 86, 2870, 2875, + 86, 86, 86, 2873, 2871, 86, 2878, 2879, 86, 2876, + 86, 2880, 86, 2883, 86, 2874, 2884, 2881, 2872, 2882, + 86, 2877, 2885, 86, 2886, 86, 2887, 86, 86, 2888, + + 86, 86, 2892, 86, 86, 86, 2891, 86, 86, 2893, + 2894, 2895, 86, 86, 86, 86, 2901, 86, 2889, 2890, + 2899, 2896, 86, 2903, 86, 2897, 86, 86, 2898, 86, + 2904, 86, 2900, 86, 2905, 86, 2906, 86, 2907, 86, + 2912, 86, 2902, 86, 86, 86, 2908, 86, 2909, 2915, + 2910, 86, 86, 86, 86, 2921, 2913, 2914, 86, 2911, + 2916, 2919, 86, 2917, 86, 86, 86, 2920, 2925, 86, + 86, 2918, 86, 2922, 2927, 86, 2923, 2928, 86, 2930, + 86, 86, 86, 86, 86, 2926, 2931, 86, 2934, 2935, + 86, 2924, 86, 2929, 86, 2939, 86, 2932, 2933, 86, + + 2942, 86, 86, 2944, 2936, 86, 86, 86, 86, 86, + 2937, 2938, 2945, 2940, 86, 2941, 2947, 86, 2948, 86, + 2950, 86, 2943, 86, 2955, 2952, 2949, 2946, 2954, 86, + 86, 86, 2953, 86, 2959, 86, 86, 86, 2961, 2960, + 2951, 86, 86, 2957, 2964, 2965, 86, 86, 2956, 86, + 86, 2967, 2966, 2958, 2962, 86, 86, 86, 2970, 86, + 2969, 2963, 86, 2973, 86, 2968, 86, 2971, 86, 86, + 2976, 86, 86, 86, 86, 2972, 2981, 86, 2977, 86, + 86, 2974, 2975, 2985, 86, 86, 2978, 2980, 86, 2984, + 2986, 86, 2982, 2987, 86, 2983, 86, 2979, 86, 2988, + + 86, 2989, 2990, 86, 2991, 86, 2992, 86, 2995, 86, + 86, 2993, 2997, 86, 86, 2996, 86, 86, 86, 2998, + 2994, 86, 3002, 3003, 86, 86, 86, 3007, 86, 3008, + 86, 2999, 3004, 86, 3009, 3006, 86, 86, 3000, 3001, + 86, 86, 3012, 3013, 86, 3005, 3014, 86, 86, 86, + 3017, 86, 86, 3010, 3015, 3011, 86, 3020, 86, 86, + 3019, 3022, 3016, 3018, 3021, 86, 86, 86, 86, 86, + 86, 3024, 86, 86, 3026, 86, 86, 3027, 86, 3025, + 86, 86, 86, 86, 3039, 3023, 3036, 3037, 86, 3028, + 86, 3032, 3029, 3030, 3031, 3033, 3034, 86, 86, 3044, + + 86, 3035, 3040, 3038, 86, 3045, 86, 3042, 3041, 86, + 86, 3043, 86, 3046, 3047, 86, 3291, 3048, 3050, 86, + 3051, 86, 3052, 3053, 86, 86, 86, 3054, 3055, 3049, + 86, 3056, 3057, 86, 86, 3059, 86, 3058, 86, 86, + 3061, 86, 3060, 3065, 86, 86, 3064, 86, 86, 86, + 86, 86, 3068, 86, 3067, 86, 3073, 3082, 3062, 3063, + 3069, 86, 3072, 86, 3070, 3074, 86, 86, 3071, 86, + 3066, 3075, 86, 86, 3077, 3080, 3076, 86, 86, 86, + 3081, 86, 3078, 86, 3086, 3079, 86, 3291, 3087, 3089, + 86, 3090, 3083, 3084, 86, 3092, 86, 86, 3085, 86, + + 3091, 3093, 86, 86, 86, 3088, 3096, 86, 3095, 3097, + 86, 3099, 86, 3098, 3094, 3100, 86, 3101, 86, 3102, + 86, 3103, 86, 3104, 86, 3105, 86, 86, 3107, 86, + 86, 86, 86, 86, 86, 86, 3106, 3112, 86, 3108, + 86, 86, 86, 3109, 86, 3116, 86, 3115, 3113, 3118, + 86, 86, 3110, 3111, 3114, 3117, 86, 86, 3122, 3120, + 3119, 86, 3125, 86, 3124, 86, 86, 86, 86, 3123, + 3127, 86, 3121, 86, 86, 86, 86, 3126, 3133, 3131, + 86, 86, 86, 3130, 3132, 3128, 86, 86, 86, 3129, + 3136, 3134, 3138, 86, 3137, 3139, 86, 3140, 86, 86, + + 86, 86, 3145, 86, 3143, 3141, 3135, 86, 3142, 3146, + 86, 86, 3148, 3149, 3147, 86, 3151, 86, 86, 86, + 86, 3144, 86, 86, 86, 3150, 86, 86, 86, 86, + 3152, 3160, 3158, 86, 3162, 3155, 86, 3153, 3154, 3157, + 3159, 3164, 86, 86, 3167, 86, 86, 3156, 3161, 3169, + 86, 86, 3170, 3163, 86, 3168, 3165, 3171, 86, 3172, + 86, 86, 86, 3166, 86, 3175, 86, 86, 86, 3176, + 3180, 3177, 86, 3173, 86, 86, 86, 3184, 86, 3183, + 86, 3174, 86, 3179, 3186, 86, 3181, 3182, 3187, 86, + 86, 86, 3178, 3190, 86, 86, 86, 3188, 3193, 86, + + 3185, 86, 3194, 86, 3195, 3197, 3191, 86, 3198, 3189, + 86, 86, 86, 3192, 86, 86, 3203, 86, 3204, 86, + 3202, 3199, 3196, 3200, 86, 86, 86, 86, 86, 86, + 86, 3201, 3208, 86, 3210, 86, 86, 86, 86, 3207, + 86, 3215, 86, 3216, 86, 3205, 3206, 3209, 3212, 3211, + 3213, 3223, 3214, 3217, 86, 3221, 86, 86, 86, 86, + 3218, 3220, 3219, 3222, 86, 3224, 86, 86, 86, 3229, + 86, 3225, 3226, 3227, 86, 86, 3230, 86, 3228, 3231, + 3232, 86, 86, 86, 86, 86, 3233, 3238, 86, 3234, + 3235, 86, 86, 86, 86, 3241, 3242, 86, 86, 86, + + 86, 86, 86, 3236, 3237, 3240, 3245, 3239, 3243, 86, + 3246, 3244, 86, 3248, 86, 3249, 86, 3247, 86, 3253, + 86, 3250, 3251, 86, 3255, 86, 3256, 86, 3252, 86, + 86, 3254, 3257, 3260, 86, 3261, 3258, 86, 86, 3259, + 3262, 3263, 86, 86, 3264, 86, 86, 86, 3269, 86, + 3265, 3267, 86, 86, 86, 86, 86, 86, 3271, 3272, + 86, 3275, 3276, 86, 3266, 86, 3268, 86, 3279, 3280, + 86, 3270, 86, 86, 3273, 3274, 3277, 3282, 86, 3281, + 3283, 86, 86, 86, 3278, 86, 86, 3291, 3285, 3284, + 3286, 3291, 3287, 3289, 86, 3290, 86, 3291, 3291, 3291, + + 3291, 3291, 3291, 3291, 3291, 3288, 47, 47, 47, 47, + 47, 47, 47, 52, 52, 52, 52, 52, 52, 52, + 57, 57, 57, 57, 57, 57, 57, 63, 63, 63, + 63, 63, 63, 63, 68, 68, 68, 68, 68, 68, + 68, 74, 74, 74, 74, 74, 74, 74, 80, 80, + 80, 80, 80, 80, 80, 89, 89, 3291, 89, 89, + 89, 89, 158, 158, 3291, 3291, 3291, 158, 158, 160, + 160, 3291, 3291, 160, 3291, 160, 162, 3291, 3291, 3291, + 3291, 3291, 162, 165, 165, 3291, 3291, 3291, 165, 165, + 167, 3291, 3291, 3291, 3291, 3291, 167, 169, 169, 3291, + + 169, 169, 169, 169, 172, 3291, 3291, 3291, 3291, 3291, + 172, 175, 175, 3291, 3291, 3291, 175, 175, 90, 90, + 3291, 90, 90, 90, 90, 17, 3291, 3291, 3291, 3291, + 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, + 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, + 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, + 3291, 3291, 3291, 3291, 3291, 3291 } ; -static yyconst flex_int16_t yy_chk[6406] = +static yyconst flex_int16_t yy_chk[6467] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2224,18 +2245,18 @@ static yyconst flex_int16_t yy_chk[6406] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3260, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3299, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2661, 16, + 16, 23, 23, 25, 27, 27, 25, 25, 2689, 16, 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, - 28, 92, 31, 32, 1075, 32, 36, 36, 37, 37, + 28, 92, 31, 32, 1082, 32, 36, 36, 37, 37, 28, 45, 45, 37, 175, 36, 45, 39, 41, 41, 45, 36, 39, 41, 94, 36, 39, 43, 43, 37, @@ -2251,9 +2272,9 @@ static yyconst flex_int16_t yy_chk[6406] = 104, 114, 111, 113, 108, 110, 110, 113, 116, 115, 112, 109, 117, 110, 115, 117, 119, 118, 117, 120, - 123, 114, 116, 118, 120, 126, 121, 122, 732, 121, + 123, 114, 116, 118, 120, 126, 121, 122, 734, 121, 125, 117, 117, 121, 123, 119, 124, 125, 126, 128, - 124, 127, 118, 129, 120, 732, 122, 130, 127, 121, + 124, 127, 118, 129, 120, 734, 122, 130, 127, 121, 131, 122, 128, 132, 131, 133, 134, 135, 135, 136, 133, 139, 137, 129, 133, 130, 137, 138, 143, 140, 142, 132, 144, 148, 143, 137, 134, 141, 147, 136, @@ -2311,616 +2332,622 @@ static yyconst flex_int16_t yy_chk[6406] = 356, 350, 348, 352, 357, 349, 356, 358, 359, 360, 354, 359, 358, 359, 361, 362, 364, 361, 358, 365, 365, 366, 364, 360, 362, 367, 366, 371, 367, 369, - 361, 370, 401, 361, 367, 361, 372, 375, 367, 373, - 375, 376, 371, 378, 401, 379, 367, 368, 368, 369, - 368, 372, 370, 373, 379, 376, 375, 382, 378, 380, - - 383, 381, 384, 368, 380, 380, 368, 381, 368, 386, - 368, 377, 385, 377, 377, 388, 387, 384, 382, 383, - 389, 385, 387, 377, 390, 377, 377, 377, 386, 391, - 377, 392, 393, 394, 395, 391, 392, 396, 390, 391, - 389, 388, 396, 397, 398, 399, 399, 400, 402, 395, - 398, 403, 393, 394, 392, 404, 405, 403, 397, 406, - 407, 407, 402, 407, 406, 408, 409, 400, 410, 411, - 417, 413, 405, 413, 413, 414, 419, 415, 418, 414, - 404, 415, 409, 411, 410, 408, 416, 416, 420, 417, - 421, 413, 419, 418, 422, 423, 415, 426, 425, 424, - - 423, 428, 426, 422, 421, 424, 420, 425, 423, 423, - 428, 427, 423, 423, 422, 427, 422, 429, 430, 431, - 432, 435, 434, 429, 432, 431, 433, 434, 164, 433, - 436, 436, 437, 438, 438, 439, 440, 441, 441, 430, - 439, 435, 442, 443, 444, 437, 445, 443, 442, 440, - 446, 447, 448, 448, 449, 446, 447, 450, 451, 444, - 452, 448, 453, 455, 454, 453, 449, 445, 454, 456, - 456, 458, 452, 457, 460, 455, 451, 450, 457, 459, - 459, 462, 462, 463, 470, 464, 465, 466, 467, 471, - 469, 472, 458, 464, 476, 465, 460, 473, 477, 476, - - 467, 162, 470, 473, 463, 472, 474, 466, 469, 471, - 469, 475, 477, 478, 480, 474, 479, 475, 481, 479, - 482, 478, 483, 485, 478, 486, 482, 484, 480, 485, - 484, 487, 488, 481, 489, 491, 487, 490, 492, 486, - 491, 490, 483, 493, 494, 495, 496, 485, 493, 499, - 537, 502, 500, 492, 488, 489, 503, 501, 504, 496, - 494, 501, 504, 506, 495, 497, 497, 500, 537, 499, - 502, 497, 503, 497, 508, 507, 514, 505, 506, 497, - 507, 497, 505, 509, 497, 497, 505, 511, 510, 513, - 508, 497, 509, 508, 510, 512, 514, 516, 512, 510, - - 515, 515, 518, 511, 517, 517, 519, 521, 520, 522, - 523, 524, 513, 525, 526, 523, 160, 518, 519, 527, - 524, 529, 516, 520, 530, 527, 521, 531, 530, 526, - 529, 522, 525, 531, 532, 533, 534, 535, 536, 538, - 540, 539, 540, 538, 541, 650, 532, 650, 542, 545, - 533, 535, 547, 536, 539, 534, 542, 543, 543, 544, - 546, 545, 549, 550, 547, 544, 546, 548, 541, 551, - 548, 553, 552, 554, 551, 552, 549, 555, 550, 556, - 553, 567, 555, 555, 557, 557, 567, 553, 564, 554, - 553, 559, 556, 558, 558, 560, 560, 559, 561, 561, - - 562, 565, 563, 568, 569, 571, 562, 563, 563, 564, - 571, 566, 569, 565, 566, 570, 572, 573, 570, 574, - 575, 576, 568, 574, 577, 576, 575, 578, 582, 579, - 580, 580, 578, 581, 584, 583, 573, 585, 586, 572, - 583, 587, 577, 579, 586, 588, 587, 590, 581, 582, - 584, 592, 589, 591, 591, 589, 593, 585, 594, 588, - 589, 595, 596, 594, 589, 590, 595, 597, 599, 592, - 600, 606, 593, 602, 599, 601, 596, 602, 601, 600, - 603, 604, 597, 605, 604, 603, 607, 606, 605, 608, - 609, 611, 610, 612, 612, 614, 608, 610, 613, 602, - - 615, 616, 618, 609, 607, 617, 619, 613, 618, 624, - 616, 611, 619, 158, 614, 620, 615, 617, 620, 621, - 621, 622, 621, 623, 622, 625, 626, 624, 623, 627, - 628, 630, 626, 637, 627, 629, 628, 631, 629, 625, - 632, 633, 631, 635, 634, 632, 632, 636, 635, 638, - 639, 640, 637, 636, 633, 639, 630, 634, 638, 641, - 641, 642, 635, 635, 643, 645, 644, 643, 642, 646, - 647, 640, 644, 649, 646, 647, 647, 645, 648, 648, - 651, 652, 643, 652, 653, 654, 655, 656, 657, 658, - 659, 660, 661, 664, 659, 658, 662, 663, 649, 651, - - 660, 665, 653, 654, 655, 666, 656, 661, 657, 668, - 667, 662, 664, 665, 669, 663, 667, 670, 671, 674, - 666, 672, 673, 668, 675, 672, 669, 676, 677, 678, - 679, 680, 680, 682, 678, 674, 670, 671, 683, 681, - 673, 684, 675, 681, 679, 676, 676, 677, 685, 683, - 686, 687, 682, 685, 688, 684, 689, 690, 691, 692, - 694, 697, 690, 689, 692, 691, 686, 688, 693, 695, - 687, 696, 698, 693, 699, 697, 695, 700, 694, 702, - 696, 698, 700, 702, 701, 703, 699, 701, 704, 705, - 707, 706, 708, 708, 709, 709, 716, 704, 714, 703, - - 710, 710, 711, 709, 705, 706, 712, 711, 715, 717, - 718, 707, 719, 717, 715, 712, 716, 714, 720, 721, - 722, 724, 718, 723, 725, 721, 726, 729, 722, 735, - 723, 740, 742, 742, 736, 738, 720, 719, 735, 724, - 736, 738, 729, 745, 739, 751, 726, 740, 747, 725, - 727, 746, 727, 739, 741, 727, 743, 743, 741, 727, - 744, 745, 727, 754, 85, 746, 751, 748, 747, 727, - 727, 744, 727, 748, 749, 749, 749, 750, 749, 752, - 753, 749, 750, 756, 753, 755, 749, 754, 756, 755, - 757, 758, 749, 749, 759, 760, 761, 752, 760, 764, - - 762, 761, 761, 763, 763, 772, 758, 762, 766, 757, - 765, 765, 767, 766, 764, 767, 768, 769, 769, 759, - 770, 768, 770, 771, 772, 773, 774, 778, 775, 773, - 776, 777, 777, 781, 779, 771, 780, 780, 776, 783, - 782, 794, 778, 784, 794, 785, 774, 775, 779, 784, - 785, 781, 782, 786, 786, 789, 80, 787, 790, 791, - 789, 783, 787, 787, 790, 791, 792, 793, 795, 796, - 800, 792, 799, 793, 795, 797, 797, 796, 798, 798, - 799, 801, 802, 803, 804, 804, 801, 805, 800, 802, - 806, 807, 807, 808, 809, 811, 805, 812, 806, 808, - - 813, 815, 803, 814, 811, 818, 812, 819, 814, 816, - 815, 817, 816, 809, 820, 821, 817, 823, 823, 818, - 822, 824, 825, 820, 813, 822, 822, 827, 821, 826, - 835, 828, 819, 830, 828, 830, 824, 832, 826, 831, - 831, 825, 828, 833, 834, 837, 836, 839, 833, 838, - 835, 827, 840, 841, 842, 843, 839, 841, 832, 846, - 847, 845, 844, 848, 850, 834, 836, 837, 844, 838, - 845, 846, 842, 853, 843, 840, 849, 848, 850, 847, - 851, 854, 849, 852, 852, 851, 855, 856, 857, 858, - 854, 859, 860, 853, 861, 856, 862, 864, 865, 863, - - 861, 866, 862, 864, 869, 870, 855, 866, 857, 867, - 859, 858, 860, 863, 871, 867, 868, 870, 865, 871, - 868, 872, 874, 869, 877, 870, 873, 873, 874, 875, - 876, 879, 875, 878, 880, 880, 881, 877, 882, 878, - 883, 884, 872, 882, 887, 883, 883, 888, 876, 885, - 889, 879, 890, 885, 881, 889, 884, 886, 886, 892, - 893, 896, 895, 897, 899, 899, 887, 888, 900, 902, - 902, 890, 900, 903, 893, 895, 901, 905, 904, 906, - 921, 896, 904, 892, 897, 898, 921, 75, 898, 908, - 898, 901, 905, 906, 898, 907, 898, 915, 903, 909, - - 907, 898, 910, 908, 909, 909, 898, 911, 912, 915, - 913, 910, 912, 914, 916, 917, 918, 919, 914, 916, - 923, 911, 922, 920, 912, 913, 923, 922, 914, 917, - 924, 919, 920, 925, 925, 926, 924, 918, 927, 928, - 926, 929, 932, 933, 927, 930, 935, 938, 933, 936, - 936, 937, 934, 939, 932, 938, 937, 940, 935, 942, - 929, 928, 941, 930, 931, 931, 934, 939, 943, 945, - 931, 950, 931, 946, 943, 942, 940, 944, 931, 947, - 74, 941, 944, 931, 931, 948, 948, 945, 949, 946, - 931, 950, 949, 952, 954, 953, 955, 947, 953, 952, - - 956, 958, 957, 960, 963, 961, 956, 957, 962, 955, - 963, 965, 960, 954, 961, 967, 964, 966, 968, 969, - 958, 970, 966, 973, 962, 964, 974, 971, 972, 973, - 965, 977, 968, 970, 975, 967, 971, 972, 979, 969, - 975, 980, 982, 974, 981, 984, 983, 977, 985, 986, - 989, 995, 979, 985, 986, 989, 982, 990, 991, 991, - 984, 980, 992, 981, 983, 993, 990, 995, 992, 996, - 1000, 1001, 998, 998, 996, 996, 998, 999, 993, 1002, - 999, 1003, 1005, 1004, 1000, 1007, 1006, 1008, 1009, 1010, - 1011, 1001, 1006, 1008, 1010, 1002, 1004, 1005, 1013, 1003, - - 1014, 1013, 1015, 1009, 1011, 1007, 1016, 1015, 1017, 1018, - 1019, 1016, 1022, 1020, 1018, 1019, 1023, 1024, 1022, 1028, - 1025, 1014, 1027, 1024, 1017, 1020, 1025, 1026, 1026, 1031, - 1029, 1027, 1023, 1029, 1030, 1030, 1032, 1028, 1033, 1034, - 1035, 1038, 1034, 1036, 1037, 1043, 1038, 1031, 1041, 1036, - 1037, 1039, 1040, 1035, 1041, 1032, 1039, 1040, 1033, 1044, - 1045, 1048, 1046, 1043, 1047, 1047, 1045, 1046, 1049, 1050, - 1048, 1051, 1052, 1053, 1054, 1052, 1053, 1049, 1055, 1044, - 1056, 1057, 1058, 1059, 1060, 1054, 1061, 1050, 1058, 1059, - 1051, 1061, 1056, 1062, 1062, 1063, 1055, 1064, 1065, 1060, - - 1057, 1066, 1067, 1068, 1069, 1066, 1070, 1072, 1073, 1073, - 1065, 1064, 1068, 1074, 1063, 1076, 1078, 1077, 1080, 1079, - 1067, 1081, 1081, 1069, 1079, 1082, 1072, 1080, 1078, 1076, - 1083, 1070, 1077, 1074, 1084, 1085, 1083, 1086, 1088, 1087, - 1084, 1087, 1086, 1088, 1089, 1082, 1090, 1091, 1092, 1093, - 1094, 1085, 1091, 1096, 1095, 1098, 1098, 1094, 1089, 1099, - 1090, 1100, 1101, 1092, 1102, 1103, 68, 1106, 1093, 1095, - 1102, 1106, 1096, 1099, 1114, 1104, 1111, 1101, 1108, 1100, - 1104, 1107, 1107, 1108, 1113, 1103, 1109, 1109, 1110, 1104, - 1111, 1104, 1114, 1112, 1104, 1110, 1112, 1115, 1117, 1116, - - 1118, 1120, 1119, 1113, 1116, 1121, 1115, 1119, 1122, 1124, - 1124, 1127, 1118, 1125, 1126, 1120, 1121, 1117, 1125, 1126, - 1128, 1130, 1129, 1131, 1132, 1128, 1129, 1122, 1133, 1134, - 1130, 1127, 1137, 1135, 1138, 1136, 1139, 1140, 1131, 1132, - 1141, 1134, 1136, 1142, 1137, 1143, 1141, 1133, 1135, 1144, - 1145, 1146, 1147, 1138, 1149, 1140, 1148, 1139, 1142, 1145, - 1150, 1151, 1154, 1157, 1153, 1143, 1146, 63, 1148, 1144, - 1153, 1147, 1155, 1158, 1156, 1150, 1159, 1154, 1158, 1149, - 1161, 1151, 1156, 1157, 1160, 1163, 1155, 1162, 1159, 1160, - 1160, 1164, 1164, 1166, 1168, 1167, 1169, 1169, 1163, 1161, - - 1168, 1162, 1165, 1165, 1167, 1171, 1166, 1165, 1170, 1176, - 1165, 1165, 1172, 1170, 1171, 1165, 58, 1173, 1172, 1174, - 1179, 1165, 1173, 1180, 1174, 1165, 1175, 1175, 1177, 1177, - 1176, 1178, 1182, 1181, 1178, 1184, 1178, 1185, 1183, 1186, - 1179, 1180, 1181, 1183, 1187, 1186, 1188, 1190, 57, 1184, - 1187, 1188, 1182, 1189, 1197, 1185, 1190, 1189, 1191, 1191, - 1195, 1190, 1193, 1190, 1195, 1190, 1196, 1190, 1192, 1192, - 1198, 1192, 1197, 1193, 1201, 1200, 1203, 1199, 1204, 1198, - 1202, 1196, 1199, 1199, 1200, 1202, 1205, 1204, 1206, 1207, - 1203, 1208, 1209, 1209, 1210, 1211, 1201, 1208, 1213, 1212, - - 1215, 1214, 1210, 1207, 1212, 1205, 1216, 1206, 1217, 1211, - 1214, 1219, 1213, 1217, 1218, 1218, 1220, 1220, 1215, 1221, - 1223, 1221, 1224, 1223, 1225, 1226, 1219, 1224, 1227, 1227, - 1228, 1216, 1229, 1229, 1226, 1230, 1230, 1231, 1232, 1233, - 1234, 1234, 1231, 1225, 1235, 1236, 1237, 1238, 1236, 1239, - 1228, 1240, 1238, 1240, 1241, 1244, 1245, 1246, 1239, 1232, - 1233, 1245, 1243, 1247, 1235, 1243, 1237, 1248, 1247, 1249, - 1244, 1246, 1241, 1250, 1249, 1248, 1251, 1251, 1250, 1252, - 1253, 1254, 1255, 1256, 1252, 1258, 1259, 1254, 1260, 1255, - 1262, 1258, 1259, 1260, 1261, 1263, 1256, 1264, 1253, 1262, - - 1261, 1265, 1265, 1266, 1268, 1269, 1270, 1271, 1264, 1272, - 1273, 1275, 1276, 1271, 1263, 1272, 1273, 1275, 1277, 1268, - 1278, 1279, 1280, 1266, 1281, 1269, 1276, 1282, 1282, 1270, - 1283, 1284, 1276, 1279, 1285, 1288, 1280, 52, 1277, 1286, - 1278, 1291, 1281, 1289, 1286, 1287, 1287, 1293, 1289, 1292, - 1283, 1295, 1285, 1294, 1292, 1292, 1284, 1296, 1288, 1295, - 1291, 1297, 1294, 1298, 1299, 1293, 1300, 1308, 1301, 1299, - 1301, 1296, 1299, 1302, 1304, 1300, 1297, 1306, 1298, 1305, - 1304, 1298, 1309, 1305, 1307, 1310, 1308, 1302, 1306, 1307, - 1307, 1311, 1312, 1313, 1314, 1315, 1311, 1312, 1316, 1318, - - 1315, 1319, 1320, 1310, 1321, 1321, 1322, 1323, 1309, 1324, - 1322, 1313, 1326, 1318, 1314, 1325, 1327, 1328, 1316, 1319, - 1320, 1325, 1329, 1330, 1326, 1323, 1331, 1332, 1324, 1333, - 1335, 1328, 1332, 1336, 1334, 1327, 1333, 1329, 1330, 1334, - 1337, 1337, 1336, 1338, 1339, 1331, 1340, 1343, 1335, 1341, - 1341, 1342, 1346, 1339, 1344, 1344, 1345, 1342, 1338, 1347, - 1348, 1343, 1345, 1349, 1350, 1348, 1340, 1357, 1346, 1349, - 1350, 1351, 1351, 1352, 1352, 1354, 1354, 1355, 1356, 1358, - 1347, 1355, 1359, 1360, 1363, 1357, 1361, 1356, 1362, 1362, - 1365, 1358, 1364, 1361, 1366, 1365, 1359, 1367, 1360, 1370, - - 1364, 1368, 1371, 1371, 1363, 1369, 1368, 1368, 1366, 1372, - 1369, 1369, 1373, 1374, 1376, 1375, 1367, 1377, 1378, 1370, - 1375, 1379, 1374, 1381, 1380, 1383, 1382, 1379, 1372, 1380, - 1391, 1373, 1382, 1376, 1384, 1385, 1378, 1377, 1386, 1387, - 1384, 1385, 1388, 1389, 1383, 1390, 1393, 1393, 1392, 1381, - 1394, 1391, 1395, 1394, 1396, 1396, 1399, 1386, 1387, 1390, - 1399, 1388, 1389, 1392, 1395, 1397, 1397, 1398, 1400, 1401, - 1402, 1403, 1398, 1403, 1405, 1406, 1407, 1403, 1401, 1408, - 1406, 1400, 1409, 1402, 1410, 1410, 1413, 1414, 1411, 1412, - 1403, 1407, 1405, 1411, 1418, 1412, 1420, 1415, 1409, 1408, - - 1414, 1413, 1415, 1416, 1417, 1419, 1421, 1416, 1417, 1422, - 1422, 1424, 1421, 1426, 1418, 1427, 1420, 1428, 1428, 1429, - 1427, 1430, 1436, 1419, 1437, 1429, 1432, 1432, 1434, 1424, - 1440, 1434, 1435, 1435, 1426, 1441, 1439, 1443, 1436, 1439, - 1437, 1430, 1442, 1442, 1441, 1444, 1445, 1447, 1446, 1449, - 1440, 1450, 1443, 1446, 1448, 1448, 1451, 1452, 1449, 1453, - 1453, 1447, 1454, 1455, 1457, 1445, 1444, 1456, 1460, 1450, - 1462, 1451, 1456, 1458, 1458, 1463, 1454, 1461, 1461, 1457, - 1459, 1455, 1452, 1464, 1459, 1465, 1463, 1464, 1460, 1466, - 1468, 1468, 1462, 1469, 1466, 1470, 1471, 1472, 1473, 1474, - - 1475, 1475, 1476, 1477, 1465, 1478, 47, 1476, 1482, 1469, - 1471, 1480, 1473, 1470, 1479, 1479, 1472, 1472, 1486, 1495, - 1480, 1481, 1489, 1477, 1474, 1478, 1481, 1483, 1482, 1483, - 1484, 1485, 1491, 1487, 18, 1484, 1489, 1485, 1486, 1487, - 1490, 1490, 1492, 1495, 1494, 1496, 1496, 1498, 1492, 1494, - 1499, 1491, 1497, 1497, 1500, 1501, 1502, 1502, 1501, 1503, - 1504, 1498, 1505, 1513, 17, 1507, 1524, 1506, 1499, 1500, - 1506, 1507, 1504, 1506, 1508, 1509, 1512, 1503, 1509, 1508, - 1511, 1512, 1505, 1514, 1524, 1506, 1514, 1516, 1513, 1511, - 1515, 1515, 1517, 1516, 1509, 1518, 1519, 1519, 1517, 1521, - - 1518, 1520, 1520, 1522, 1523, 1521, 1525, 1526, 1522, 1527, - 1528, 1532, 1527, 1529, 1536, 1530, 1528, 1523, 1531, 1529, - 1530, 1533, 1534, 1534, 1531, 1525, 1533, 1526, 1535, 1537, - 1538, 1539, 1536, 1535, 1532, 1542, 1543, 1540, 1541, 1544, - 1545, 1544, 1547, 1548, 1549, 1539, 1551, 1552, 1554, 1537, - 1538, 1540, 1541, 1542, 1547, 1548, 1550, 1549, 1553, 1545, - 1557, 1543, 1550, 1556, 1556, 1558, 1551, 1552, 1562, 1554, - 1558, 1559, 1553, 1560, 1560, 1561, 1563, 1564, 1565, 1566, - 1557, 1567, 1562, 1559, 1568, 1569, 1573, 1565, 1567, 1571, - 1561, 1575, 1575, 1568, 1566, 1564, 1568, 1576, 1576, 1574, - - 1563, 1569, 1574, 1577, 1571, 1578, 1581, 1579, 1582, 1571, - 1579, 1573, 1580, 1580, 1585, 1577, 1583, 1584, 1586, 1581, - 1587, 1583, 1584, 1578, 1588, 1591, 1589, 1582, 1590, 1587, - 1593, 1591, 1594, 1585, 1586, 1589, 1595, 1590, 1589, 1592, - 1592, 1596, 1597, 1588, 1598, 1594, 1601, 1602, 1603, 1603, - 1593, 1604, 1605, 0, 1595, 1596, 1598, 1606, 1597, 1607, - 1607, 1605, 1606, 1608, 1609, 1602, 1610, 1604, 1611, 1609, - 1612, 1601, 1608, 1613, 1607, 1608, 1615, 1616, 1613, 1613, - 1617, 1618, 1620, 1628, 1610, 1619, 1618, 1627, 1612, 1611, - 1615, 1619, 1616, 1621, 1621, 1622, 1630, 1628, 1623, 1624, - - 1620, 1622, 1617, 1623, 1625, 1624, 1629, 1627, 1631, 1630, - 1625, 1631, 1629, 1632, 1634, 1636, 1637, 1631, 1638, 1632, - 1639, 0, 1634, 1640, 1641, 1642, 1638, 1643, 1649, 1639, - 1644, 1644, 1645, 1650, 1636, 1637, 1640, 1641, 1645, 1642, - 1646, 1643, 1647, 1648, 1648, 1651, 1646, 1652, 1649, 1654, - 1653, 1650, 1644, 1655, 1656, 1647, 1653, 1658, 1658, 1659, - 1652, 1660, 1661, 1662, 1651, 1660, 1665, 1661, 1662, 1655, - 1663, 1654, 1656, 1664, 1667, 1663, 1668, 1669, 1669, 1659, - 1670, 1671, 1664, 1672, 1673, 1673, 1667, 1674, 1675, 1665, - 1679, 1668, 1676, 1671, 1677, 1675, 1680, 1681, 1682, 1670, - - 1683, 1674, 1672, 1681, 1676, 1684, 1677, 1685, 1685, 1679, - 1682, 1684, 1686, 1687, 1687, 1686, 1680, 1689, 1683, 1690, - 1691, 1693, 1689, 1692, 1692, 1694, 1691, 1694, 1690, 1695, - 1696, 1697, 1695, 1693, 1698, 1700, 1699, 1701, 1702, 1703, - 1700, 1704, 1701, 1705, 1707, 1710, 1706, 1702, 1705, 1713, - 1696, 1703, 1698, 1697, 1699, 1706, 1704, 1708, 1709, 1715, - 1710, 1712, 1708, 1709, 1707, 1711, 1711, 1712, 1706, 1708, - 1713, 1716, 1717, 1718, 1719, 1724, 1719, 0, 1715, 1727, - 1720, 1721, 1721, 1722, 1722, 1723, 1723, 1728, 1717, 1725, - 1725, 1716, 1737, 1718, 1720, 1724, 1720, 1726, 1726, 1730, - - 1727, 1729, 1729, 1730, 1731, 1734, 1732, 1735, 1728, 1732, - 1731, 1734, 1736, 1738, 1739, 1739, 1738, 1737, 1736, 1740, - 1743, 1741, 1742, 1742, 1744, 1735, 1741, 1745, 1745, 1744, - 1746, 1747, 1748, 1749, 1750, 1746, 1751, 1747, 1752, 1740, - 1756, 1743, 1751, 1754, 1748, 1748, 1748, 1755, 1754, 1754, - 1757, 1748, 1757, 1749, 1750, 1756, 1758, 1759, 1752, 1760, - 1761, 1755, 1762, 1763, 1765, 1760, 1767, 1758, 1771, 1761, - 1764, 1764, 1759, 1766, 1766, 1768, 1769, 1769, 1770, 1770, - 1774, 1774, 1762, 1775, 1763, 1776, 1767, 1778, 1771, 1779, - 1765, 1782, 1780, 1786, 1776, 1784, 1778, 1768, 1780, 1781, - - 1781, 1783, 1784, 1788, 1785, 1787, 1787, 1789, 1775, 1791, - 1779, 1792, 1782, 1785, 1791, 1793, 1783, 1792, 1794, 1786, - 1795, 1796, 1800, 1789, 1801, 1794, 1795, 1796, 1798, 1788, - 1797, 1797, 1799, 1798, 1802, 1793, 1803, 1804, 1805, 1803, - 1809, 1799, 1800, 1801, 1806, 1806, 1802, 1807, 1808, 1813, - 1810, 1814, 1811, 1807, 1808, 1804, 1811, 1815, 1816, 1816, - 1809, 1817, 1815, 1818, 1805, 1810, 1820, 1821, 1822, 1813, - 1823, 1821, 1811, 1814, 1822, 1824, 1824, 1825, 1818, 1823, - 1817, 1825, 1826, 1827, 1827, 1820, 1828, 1829, 1834, 1830, - 1831, 1832, 1833, 1826, 1834, 1831, 1839, 1836, 1826, 1835, - - 1839, 1829, 1836, 1837, 1837, 1838, 1838, 1828, 1830, 1841, - 1842, 1832, 1833, 1843, 1835, 1844, 1844, 1847, 1841, 1846, - 1846, 1842, 1847, 1847, 1848, 1849, 1842, 1850, 1852, 1851, - 1848, 1849, 1853, 1843, 1851, 1855, 1857, 1856, 1853, 1858, - 1852, 1856, 1863, 1859, 1860, 1861, 1865, 1855, 1857, 1859, - 1862, 1861, 1866, 1850, 1863, 1862, 1867, 1869, 1865, 1873, - 1869, 1867, 1870, 1870, 1858, 0, 1860, 1871, 1871, 1872, - 1872, 1866, 1874, 1878, 1875, 1883, 1876, 1877, 1874, 1873, - 1875, 1876, 1878, 1877, 1880, 1882, 1886, 1883, 1882, 1880, - 1884, 1884, 1887, 1890, 1888, 1889, 1889, 1895, 1886, 1888, - - 1891, 1892, 1890, 1896, 1887, 1891, 1892, 1893, 1894, 1894, - 1893, 1897, 1896, 1898, 1899, 1900, 1901, 1895, 1899, 1902, - 1900, 1903, 1901, 1904, 1905, 1908, 1909, 1907, 1907, 1897, - 1903, 1912, 1898, 1910, 1910, 1909, 1913, 1902, 1905, 1907, - 1912, 1904, 1914, 1908, 1911, 1911, 1915, 1916, 1913, 1919, - 1919, 1915, 1921, 1922, 1923, 1921, 1925, 1928, 1926, 1927, - 1916, 1929, 1929, 1914, 1930, 1927, 1930, 1931, 1931, 1922, - 1923, 1925, 1926, 1932, 1928, 1934, 1934, 1935, 1935, 1937, - 1938, 1932, 1939, 1940, 1941, 1937, 1938, 1942, 1942, 1939, - 1943, 1944, 1948, 1956, 1945, 1946, 1947, 1950, 1949, 1943, - - 1952, 1953, 1954, 1950, 1941, 1940, 1945, 1946, 1947, 1955, - 1955, 1956, 1944, 1949, 1954, 1957, 1950, 1960, 1948, 1958, - 1952, 1959, 1958, 1962, 1953, 1963, 1959, 1963, 1962, 1964, - 1970, 1965, 1966, 1968, 1971, 1957, 1965, 1960, 1972, 1966, - 1974, 1977, 1968, 1971, 1973, 1979, 1973, 1964, 1970, 1976, - 1972, 1976, 1978, 1978, 1984, 1977, 1980, 1982, 1981, 1974, - 1981, 1980, 1982, 1983, 1985, 1987, 1988, 1986, 1983, 1989, - 1987, 1979, 1984, 1986, 1991, 1992, 1995, 1989, 1996, 1988, - 1993, 1993, 1994, 1994, 1985, 1998, 1997, 2000, 0, 1992, - 1998, 1995, 1997, 1991, 1999, 2001, 1999, 2003, 1996, 2002, - - 2002, 2004, 2004, 2001, 2006, 2000, 2005, 2005, 2008, 2003, - 2007, 2001, 2010, 2006, 2011, 2007, 2011, 2012, 2015, 2017, - 2014, 2010, 2013, 2021, 2010, 2022, 2008, 2013, 2013, 2014, - 2015, 2017, 2018, 2023, 2019, 2025, 2021, 2018, 2012, 2019, - 2024, 2024, 2023, 2026, 2027, 2022, 2031, 2032, 2028, 2029, - 2033, 2034, 2035, 2025, 2036, 2042, 2034, 2035, 2031, 2032, - 2027, 2026, 2028, 2036, 2029, 2039, 2041, 2043, 2044, 2045, - 2033, 2039, 2041, 2050, 2046, 2047, 2047, 2054, 2042, 2048, - 2049, 2049, 2043, 2046, 2039, 2051, 2044, 2053, 2048, 2051, - 2052, 2055, 2050, 2060, 2045, 2052, 2055, 2055, 2056, 2054, - - 2053, 2057, 2058, 2059, 2056, 2058, 2068, 2057, 2063, 2063, - 2065, 2059, 2069, 2060, 2064, 2064, 2066, 2066, 2068, 2065, - 2067, 2067, 2070, 2072, 2072, 2078, 2071, 2082, 2070, 2064, - 2069, 2071, 2073, 2073, 2074, 2075, 2080, 2084, 2077, 2074, - 2064, 2075, 2077, 2079, 2083, 2078, 2085, 2079, 2086, 2083, - 2087, 2088, 2082, 2086, 2089, 2091, 2080, 2090, 2092, 2092, - 2084, 2085, 2090, 2094, 2096, 2093, 2095, 2088, 2087, 2093, - 2098, 2095, 2097, 2099, 2089, 2100, 2101, 2091, 2094, 2097, - 2100, 2102, 2098, 2103, 2103, 2105, 2106, 2107, 2108, 2101, - 2096, 2109, 2099, 2105, 2110, 2111, 2112, 2113, 2118, 2102, - - 2122, 2117, 2115, 2122, 2118, 2106, 2107, 2119, 2112, 2119, - 2123, 2108, 2125, 2110, 2117, 2109, 2111, 2115, 2113, 2120, - 2120, 2121, 2124, 2123, 2129, 2125, 2121, 2126, 2126, 2127, - 2127, 2128, 2128, 2130, 2131, 2131, 2124, 2138, 2132, 2129, - 2133, 2133, 2134, 2134, 2135, 2139, 2130, 2132, 2137, 2135, - 2132, 2140, 2143, 2137, 2141, 2141, 2145, 2138, 2142, 2142, - 2144, 2144, 2147, 2140, 2148, 2139, 2146, 2146, 2151, 2148, - 2152, 2143, 2149, 2149, 2145, 2150, 2150, 2147, 2153, 2152, - 2154, 2156, 2151, 2157, 2157, 2158, 2156, 2159, 2159, 2160, - 2161, 2162, 2153, 2165, 2162, 2166, 2161, 2163, 2163, 2154, - - 2164, 2164, 2167, 2170, 2158, 2168, 2168, 2160, 2171, 2172, - 2166, 2173, 2165, 2163, 2175, 2173, 2174, 2174, 2181, 2177, - 2176, 2167, 2178, 2170, 2172, 2176, 2180, 2180, 2182, 2183, - 2184, 2171, 2185, 2175, 2177, 2182, 2186, 2178, 2181, 2187, - 2187, 2192, 2188, 2183, 2189, 2195, 2189, 2197, 2184, 2190, - 2185, 2188, 2190, 2192, 2193, 2194, 2198, 2199, 2196, 2193, - 2194, 2198, 2186, 2205, 2203, 0, 2209, 2190, 2197, 2190, - 2195, 2196, 2201, 2202, 2204, 2206, 2210, 2201, 2202, 2203, - 2204, 2206, 2207, 2199, 2205, 2208, 2216, 2207, 2212, 2210, - 2208, 2209, 2211, 2213, 2214, 2211, 2215, 2212, 2217, 2221, - - 2216, 2218, 2213, 2214, 2217, 2215, 2219, 2218, 2223, 2225, - 2219, 2224, 2224, 2226, 2226, 2225, 2227, 2223, 2228, 2221, - 2230, 2227, 2226, 2231, 2232, 2232, 2233, 2237, 2234, 2238, - 2236, 2241, 2243, 2239, 2241, 2244, 2230, 2234, 2228, 2231, - 2228, 2233, 2236, 2237, 2238, 2239, 2242, 2244, 2245, 2245, - 2255, 2242, 2243, 2246, 2246, 2248, 2248, 2249, 2250, 2251, - 2249, 2252, 2253, 2250, 2255, 2251, 2257, 2252, 2254, 2254, - 2258, 2253, 2256, 2256, 2259, 2260, 2260, 2261, 2257, 2266, - 2262, 2263, 2266, 2261, 2258, 2265, 2263, 2267, 2267, 2265, - 2268, 2269, 2270, 2259, 2262, 2268, 2269, 2269, 2271, 2272, - - 2274, 2270, 2276, 2272, 2273, 2273, 2277, 2276, 2278, 2279, - 2280, 2281, 2282, 2274, 2280, 2283, 2284, 2282, 2271, 2285, - 2286, 2283, 2284, 2279, 2287, 2288, 2277, 2291, 2278, 2287, - 2290, 2281, 2301, 2292, 2293, 2298, 2294, 2285, 2292, 2286, - 2293, 2380, 2290, 2291, 2294, 2295, 2288, 2295, 2380, 2298, - 2299, 2299, 2300, 2302, 2302, 2300, 2305, 2306, 2301, 2307, - 2305, 2308, 2308, 2306, 2309, 2312, 2312, 2314, 2316, 2320, - 2317, 2307, 2321, 2309, 2320, 2322, 2323, 2324, 2324, 2330, - 2322, 2323, 2316, 2326, 2326, 2314, 2317, 2328, 2329, 2329, - 2331, 2332, 2334, 2328, 2335, 2330, 2332, 2339, 2321, 2336, - - 2336, 2338, 2340, 2339, 2341, 2345, 2335, 2343, 2343, 2346, - 2338, 2334, 2331, 2344, 2348, 2348, 2344, 2349, 2349, 2341, - 2340, 2350, 2351, 2352, 2345, 2353, 2350, 2346, 2355, 2354, - 2353, 2354, 2352, 2356, 2357, 2359, 2358, 0, 2360, 2366, - 2351, 2358, 2355, 2360, 2361, 2361, 2357, 2356, 2362, 2362, - 2363, 2363, 2364, 2364, 2365, 2359, 2367, 2366, 2368, 2368, - 2370, 2367, 2369, 2369, 2371, 2372, 2365, 2373, 2374, 2374, - 2375, 2378, 2370, 2376, 2376, 2379, 2371, 2377, 2377, 2381, - 2382, 2383, 2378, 2373, 2384, 2372, 2383, 2379, 2385, 2375, - 2387, 2381, 2386, 2386, 2388, 2389, 2390, 2391, 2392, 2387, - - 2382, 2393, 2394, 2394, 2384, 2395, 2399, 2396, 2385, 2390, - 2397, 2400, 2392, 2393, 2395, 2389, 2401, 2403, 2406, 2406, - 2388, 2391, 2396, 2402, 2399, 2397, 2402, 2404, 2413, 2405, - 2415, 2403, 2404, 2400, 2405, 2407, 2407, 2408, 2408, 2401, - 2410, 2410, 2412, 2412, 2414, 2416, 2413, 2418, 2419, 2415, - 2420, 2421, 2422, 2423, 2424, 2414, 2424, 2425, 2426, 2431, - 2416, 2422, 2427, 2428, 2428, 2433, 2419, 2418, 2430, 2430, - 2434, 2421, 2420, 2423, 2431, 2437, 2426, 2425, 2439, 2434, - 2427, 2435, 2435, 2440, 2437, 2438, 2438, 2433, 2441, 2442, - 2443, 2444, 2446, 0, 2445, 2441, 2439, 2447, 2447, 2448, - - 2448, 2440, 2449, 2454, 2442, 2456, 2450, 2455, 2443, 2444, - 2445, 2446, 2450, 2451, 2451, 2452, 2452, 2453, 2458, 2459, - 2449, 2454, 2455, 2453, 2456, 2457, 2460, 2461, 2466, 2461, - 2457, 2460, 2462, 2462, 2463, 2468, 2463, 2469, 2458, 2459, - 2464, 2464, 2470, 2471, 2468, 2472, 2473, 2466, 2474, 2477, - 2472, 0, 2478, 2480, 2470, 2478, 2469, 2479, 2479, 2481, - 2482, 2482, 2491, 2471, 2485, 2488, 2473, 2474, 2480, 2477, - 2483, 2486, 2487, 2487, 2483, 2486, 2490, 2481, 2488, 2485, - 2492, 2495, 2491, 2493, 2493, 2496, 2497, 2498, 2498, 2499, - 2497, 2490, 2501, 2495, 2496, 2500, 2500, 2501, 2502, 2503, - - 2492, 2504, 2505, 2505, 2510, 2510, 2511, 2502, 2499, 2512, - 2512, 2513, 2514, 2504, 2515, 2503, 2518, 2516, 2517, 2517, - 2520, 2520, 2523, 2515, 2513, 2514, 2516, 2523, 2511, 2524, - 2525, 2518, 2526, 2527, 2524, 2528, 2529, 2526, 2530, 0, - 2532, 2527, 2533, 2534, 2525, 2529, 2530, 2533, 2534, 2535, - 2536, 2536, 2537, 2537, 2528, 2532, 2538, 2538, 2539, 2541, - 2542, 2540, 2543, 0, 2535, 2539, 2540, 2544, 2543, 2545, - 2545, 2546, 2544, 0, 2547, 2548, 2548, 2541, 2542, 2547, - 2549, 2549, 2552, 2553, 2553, 2554, 2546, 2555, 2554, 2556, - 2558, 2557, 2555, 2555, 2556, 2552, 2557, 2559, 2560, 2562, - - 2561, 2563, 2560, 2559, 2558, 2561, 2564, 2565, 2562, 2566, - 2569, 2567, 2579, 2568, 2564, 2566, 2563, 2567, 2568, 2571, - 2572, 2573, 2569, 2580, 2573, 2572, 2575, 2577, 2565, 2578, - 2579, 2581, 2577, 2582, 2578, 2571, 2580, 2584, 2575, 2587, - 2581, 2588, 2582, 2583, 2583, 2587, 2584, 2588, 2591, 2592, - 2596, 2593, 2594, 2594, 2595, 2599, 2597, 2598, 2598, 2596, - 2601, 2603, 2604, 2605, 2605, 2606, 2604, 2591, 0, 2592, - 2593, 2597, 2607, 2595, 2599, 2601, 2608, 2609, 2607, 2610, - 2610, 2603, 2608, 2609, 2611, 2614, 2612, 2615, 2618, 2617, - 2606, 2612, 2611, 2617, 2614, 2619, 2621, 2621, 2622, 2632, - - 2615, 0, 2618, 2623, 2623, 2624, 2624, 2626, 2626, 2627, - 2619, 2637, 2628, 2627, 2630, 2630, 2622, 2628, 2633, 2632, - 2634, 2635, 2645, 2633, 2638, 2638, 2635, 2635, 2640, 2640, - 2643, 2637, 2634, 2641, 2641, 2642, 2647, 2651, 2642, 2654, - 2645, 2648, 2648, 2643, 2649, 2649, 2650, 2650, 2652, 2652, - 2653, 2655, 2651, 2656, 2657, 2657, 2647, 2654, 2658, 2656, - 2663, 2662, 2658, 2653, 2664, 2655, 2662, 2662, 2665, 2666, - 2667, 2668, 2678, 2669, 2675, 2666, 2667, 2669, 2670, 2670, - 2673, 2681, 2675, 2663, 2664, 2673, 2676, 2679, 2665, 2676, - 2679, 2680, 2680, 2683, 2684, 2682, 2668, 2678, 2681, 2681, - - 2682, 2685, 2686, 2686, 2687, 2688, 2689, 2690, 2688, 2691, - 2692, 2683, 2694, 2692, 2684, 2685, 2688, 2691, 2687, 2693, - 2689, 2695, 2695, 2700, 2693, 2693, 2690, 2696, 2696, 2697, - 2697, 2694, 2698, 2698, 2699, 2699, 2701, 2702, 2703, 2700, - 2704, 2701, 2705, 2706, 2712, 2707, 2708, 2705, 2710, 2710, - 2711, 2715, 2706, 2711, 2714, 2714, 2724, 2702, 2715, 2704, - 2716, 2716, 2712, 2717, 2703, 2707, 2708, 2720, 2717, 2719, - 2719, 2721, 2722, 2727, 2724, 2726, 2720, 2725, 2725, 2726, - 2721, 2722, 2727, 2728, 2729, 2731, 2730, 2732, 2736, 2729, - 2729, 2732, 2740, 2736, 2731, 2737, 2737, 2741, 2728, 2730, - - 2739, 2739, 2742, 2744, 2745, 2748, 2740, 2750, 2749, 2751, - 2755, 2753, 2744, 2757, 2758, 2751, 2745, 2749, 2757, 2758, - 2742, 2797, 2741, 2753, 2759, 2759, 2760, 2750, 2762, 2769, - 2748, 2755, 2770, 2762, 2797, 2760, 2763, 2763, 2765, 2765, - 2763, 2766, 2766, 2767, 2767, 2768, 2777, 2771, 2774, 2769, - 2773, 2770, 2771, 2774, 2768, 2775, 2773, 2776, 2776, 2778, - 2775, 2779, 2780, 2781, 2777, 2783, 2782, 2780, 2784, 2784, - 2786, 2778, 2782, 2787, 2786, 2788, 2789, 2789, 2787, 2790, - 2788, 2781, 2779, 2793, 2791, 2792, 2795, 2795, 2798, 2799, - 2783, 2801, 2802, 2799, 2803, 2800, 2806, 2805, 2790, 2791, - - 2792, 2798, 2803, 2793, 2800, 2804, 2805, 2801, 2807, 2809, - 2804, 2802, 2808, 2808, 2806, 2811, 2811, 2812, 2812, 2814, - 2816, 2816, 2818, 2819, 2821, 2820, 2823, 2823, 2809, 2821, - 2824, 2825, 2826, 2829, 2807, 2828, 2828, 2830, 2818, 2819, - 2814, 2820, 2831, 2831, 2834, 2837, 2835, 2829, 2836, 2840, - 2824, 2826, 2835, 2836, 2825, 2842, 2830, 2838, 2838, 2839, - 2839, 2841, 2841, 2843, 2834, 2844, 2842, 2837, 2845, 2840, - 2846, 2847, 2843, 2848, 2845, 2849, 2849, 2850, 2851, 2851, - 2850, 2841, 2855, 2847, 2856, 2844, 2857, 2858, 2858, 2846, - 2860, 2861, 2857, 2848, 2855, 2859, 2860, 2863, 2859, 2864, - - 2864, 2865, 2863, 2866, 2856, 2867, 2865, 2868, 2871, 2861, - 2872, 2867, 2869, 2869, 2873, 2876, 2874, 2875, 2875, 2877, - 2871, 2878, 2866, 2877, 2868, 2868, 2880, 2880, 2872, 2874, - 2878, 2881, 2881, 2882, 2876, 2883, 2884, 2888, 2882, 2873, - 2895, 2884, 2885, 2885, 2886, 2886, 2887, 2887, 2889, 2883, - 2890, 2892, 2892, 2897, 2889, 2890, 2898, 2899, 2903, 2895, - 2900, 2900, 2904, 2888, 2902, 2902, 2910, 2905, 2906, 2906, - 2907, 2907, 2903, 2911, 2909, 2897, 2905, 0, 2898, 2899, - 2909, 2919, 2904, 2912, 2915, 2915, 2910, 2920, 2912, 2917, - 2917, 2918, 2911, 2920, 2921, 2919, 2918, 2922, 2923, 2923, - - 2926, 2927, 2924, 2928, 2929, 2922, 2921, 2924, 2928, 2930, - 2932, 2933, 2934, 2935, 2944, 2930, 2929, 2937, 2932, 2939, - 2926, 2927, 2938, 2940, 2941, 3041, 2943, 2948, 3041, 2941, - 2933, 2943, 2934, 2935, 2944, 2937, 2939, 2939, 2938, 2945, - 2950, 2946, 2960, 2949, 2940, 2945, 2946, 2948, 2949, 2953, - 2953, 2954, 2954, 2950, 2955, 2959, 2961, 2961, 2955, 2980, - 2959, 2960, 2963, 2963, 2964, 2964, 2967, 2964, 2965, 2965, - 2967, 2965, 2966, 2966, 2970, 2966, 2969, 2969, 2974, 2971, - 2975, 2976, 2977, 2977, 2980, 2982, 2976, 2981, 2983, 2982, - 2984, 2986, 2970, 2971, 2981, 2987, 0, 2983, 2974, 2991, - - 2975, 2988, 2988, 2992, 2987, 2984, 2989, 2989, 2992, 2986, - 2990, 2990, 2993, 2994, 2991, 2996, 2995, 2997, 2994, 2994, - 2998, 2993, 2995, 2999, 2993, 3000, 3001, 3013, 2999, 3003, - 3000, 3004, 2997, 3002, 3002, 3003, 3013, 3004, 3005, 3005, - 2996, 2998, 3006, 3006, 3008, 3001, 3007, 3007, 0, 3008, - 3011, 3011, 3012, 3012, 3016, 3016, 3017, 3017, 3018, 3018, - 3019, 3019, 3020, 3020, 3021, 3021, 3022, 3022, 3024, 3025, - 3025, 3026, 3027, 3028, 3032, 3030, 3034, 3024, 3031, 3031, - 3026, 3036, 3033, 3040, 3027, 3035, 3035, 3042, 3034, 3032, - 3037, 3037, 3044, 3028, 3030, 3033, 3036, 3043, 3043, 3046, - - 3047, 3040, 3046, 3048, 3049, 3050, 3047, 3051, 3054, 3049, - 3044, 3052, 3055, 3042, 3054, 3059, 3062, 3048, 3072, 3070, - 3077, 3055, 3070, 0, 3050, 3051, 3080, 3052, 3073, 3073, - 3059, 3072, 3074, 3074, 3075, 3075, 3078, 3079, 3081, 3083, - 3084, 3079, 3062, 3077, 3085, 3078, 3080, 3089, 3086, 3085, - 3086, 3084, 3081, 3087, 3088, 3088, 3090, 3092, 3091, 3093, - 3089, 3095, 3083, 3094, 3097, 3096, 3098, 3099, 3087, 3100, - 3095, 3098, 3104, 3092, 3100, 3090, 3091, 3096, 3094, 3105, - 3106, 3106, 3107, 3112, 3093, 3097, 3104, 3099, 3108, 3108, - 3113, 3107, 3109, 3109, 3110, 3110, 3111, 3111, 3114, 3105, - - 3115, 3114, 3112, 3116, 3117, 3115, 3118, 3119, 3116, 3120, - 3113, 3122, 3121, 3119, 3123, 3126, 3122, 3124, 3124, 3125, - 3125, 3118, 3127, 3120, 3121, 3128, 3128, 3130, 3132, 3117, - 3126, 3135, 3135, 3138, 3123, 3136, 3136, 3137, 3139, 3141, - 3143, 3127, 3130, 3140, 3139, 3137, 3132, 3142, 3149, 3140, - 3144, 3150, 3138, 3141, 3152, 3144, 3145, 3145, 3155, 3143, - 3142, 3146, 3146, 3153, 3157, 3156, 3158, 3153, 3152, 3149, - 3156, 3150, 3159, 3160, 3166, 3161, 3162, 3167, 3155, 3158, - 3161, 3162, 3168, 3157, 3171, 3159, 3163, 3163, 3169, 3169, - 3171, 3170, 3160, 3176, 3166, 3167, 3170, 3172, 3172, 3173, - - 3174, 3168, 3175, 3177, 3173, 3174, 3184, 3175, 3180, 3177, - 3179, 3179, 3176, 3180, 3181, 3181, 3183, 3185, 3186, 3187, - 3183, 3188, 3189, 3190, 3185, 3184, 0, 3188, 3192, 3192, - 3194, 3194, 3197, 3195, 3196, 3198, 3190, 3186, 3187, 3196, - 3199, 3189, 3195, 3200, 3200, 3195, 3202, 3201, 3204, 3205, - 3205, 3197, 3201, 3199, 3198, 0, 3206, 3207, 3207, 3202, - 3208, 3208, 3209, 3210, 3211, 3212, 3212, 3209, 3213, 3214, - 3210, 3214, 3216, 3213, 3204, 3206, 3215, 3215, 3217, 3216, - 3218, 3219, 3220, 3211, 3223, 3217, 3219, 3222, 3222, 3225, - 3226, 3227, 3228, 3232, 3225, 3226, 3229, 3229, 3233, 3218, - - 0, 3220, 0, 3223, 3231, 3231, 3234, 3234, 3235, 3235, - 3227, 3228, 3232, 3236, 3238, 3238, 3240, 3233, 3239, 3239, - 3236, 3242, 3245, 3240, 3246, 3247, 3242, 3245, 3248, 3248, - 3249, 3249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3246, 3247, 3253, 3253, 3253, 3253, 3253, - 3253, 3253, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3255, - 3255, 3255, 3255, 3255, 3255, 3255, 3256, 3256, 3256, 3256, - 3256, 3256, 3256, 3257, 3257, 3257, 3257, 3257, 3257, 3257, - 3258, 3258, 3258, 3258, 3258, 3258, 3258, 3259, 3259, 3259, - 3259, 3259, 3259, 3259, 3261, 3261, 0, 3261, 3261, 3261, - - 3261, 3262, 3262, 0, 0, 0, 3262, 3262, 3263, 3263, - 0, 0, 3263, 0, 3263, 3264, 0, 0, 0, 0, - 0, 3264, 3265, 3265, 0, 0, 0, 3265, 3265, 3266, - 0, 0, 0, 0, 0, 3266, 3267, 3267, 0, 3267, - 3267, 3267, 3267, 3268, 0, 0, 0, 0, 0, 3268, - 3269, 3269, 0, 0, 0, 3269, 3269, 3270, 3270, 0, - 3270, 3270, 3270, 3270, 3252, 3252, 3252, 3252, 3252, 3252, - 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, - 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, - 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, - - 3252, 3252, 3252, 3252, 3252 + 361, 373, 164, 361, 367, 361, 370, 372, 367, 370, + 375, 376, 371, 375, 379, 373, 367, 368, 368, 369, + 368, 382, 372, 379, 378, 376, 380, 370, 381, 375, + + 383, 380, 380, 368, 381, 384, 368, 385, 368, 378, + 368, 377, 382, 377, 377, 386, 385, 388, 387, 383, + 384, 389, 390, 377, 387, 377, 377, 377, 392, 391, + 377, 395, 393, 392, 386, 391, 390, 394, 397, 391, + 396, 389, 398, 388, 400, 396, 395, 401, 398, 399, + 399, 392, 393, 397, 402, 403, 404, 394, 405, 401, + 406, 403, 408, 409, 400, 406, 407, 407, 402, 407, + 410, 411, 417, 413, 405, 413, 413, 416, 416, 409, + 414, 404, 408, 415, 414, 411, 410, 415, 418, 419, + 420, 417, 421, 413, 424, 422, 423, 162, 425, 430, + + 424, 423, 415, 418, 422, 419, 421, 425, 420, 423, + 423, 426, 428, 423, 423, 422, 426, 422, 427, 429, + 430, 428, 427, 431, 432, 429, 434, 433, 432, 431, + 433, 434, 435, 436, 436, 437, 438, 438, 439, 442, + 440, 441, 441, 439, 444, 442, 443, 445, 437, 446, + 443, 447, 435, 440, 446, 449, 447, 448, 448, 444, + 450, 451, 452, 458, 455, 457, 448, 449, 445, 453, + 457, 454, 453, 460, 452, 454, 455, 456, 456, 451, + 450, 459, 459, 463, 458, 462, 462, 466, 464, 465, + 467, 469, 470, 471, 472, 460, 464, 473, 465, 160, + + 475, 477, 467, 473, 463, 474, 475, 466, 472, 469, + 470, 469, 476, 471, 474, 477, 478, 476, 479, 480, + 481, 479, 482, 483, 478, 485, 484, 478, 482, 484, + 486, 485, 487, 480, 488, 481, 489, 487, 490, 492, + 491, 493, 490, 483, 486, 491, 493, 494, 495, 485, + 499, 496, 502, 520, 492, 501, 488, 489, 500, 501, + 506, 503, 504, 494, 496, 520, 504, 495, 497, 497, + 499, 502, 509, 500, 497, 506, 497, 503, 507, 508, + 505, 509, 497, 507, 497, 505, 510, 497, 497, 505, + 511, 512, 510, 513, 497, 508, 513, 510, 508, 514, + + 515, 516, 516, 517, 519, 511, 521, 512, 518, 518, + 522, 523, 524, 526, 525, 527, 530, 524, 528, 519, + 515, 521, 514, 525, 528, 530, 533, 531, 517, 522, + 527, 531, 526, 523, 532, 534, 535, 536, 533, 537, + 532, 538, 539, 540, 542, 541, 539, 541, 546, 543, + 534, 536, 544, 544, 537, 535, 540, 543, 545, 538, + 546, 547, 548, 549, 545, 550, 549, 547, 542, 551, + 552, 554, 555, 553, 548, 552, 553, 556, 557, 550, + 554, 565, 556, 556, 551, 558, 558, 554, 555, 560, + 554, 557, 559, 559, 563, 560, 561, 561, 562, 562, + + 563, 564, 565, 566, 568, 567, 564, 564, 567, 568, + 569, 570, 572, 571, 573, 566, 571, 572, 575, 570, + 574, 576, 575, 578, 577, 579, 580, 576, 577, 569, + 579, 581, 581, 582, 583, 585, 586, 573, 584, 574, + 580, 578, 588, 584, 587, 589, 590, 588, 582, 590, + 587, 585, 591, 593, 590, 583, 586, 590, 590, 589, + 592, 592, 594, 595, 596, 597, 598, 600, 595, 596, + 591, 593, 602, 600, 601, 602, 603, 604, 594, 597, + 603, 598, 604, 601, 605, 606, 609, 605, 607, 608, + 606, 611, 610, 609, 612, 616, 611, 613, 613, 614, + + 615, 617, 603, 618, 607, 610, 619, 608, 614, 625, + 617, 616, 619, 158, 612, 618, 620, 621, 623, 615, + 621, 623, 620, 622, 622, 624, 622, 625, 626, 627, + 624, 628, 629, 631, 630, 627, 628, 630, 629, 632, + 633, 634, 626, 635, 632, 633, 633, 636, 639, 637, + 638, 641, 636, 85, 634, 637, 635, 639, 631, 640, + 642, 642, 644, 643, 640, 644, 636, 636, 645, 638, + 643, 641, 646, 647, 645, 650, 648, 651, 647, 651, + 644, 648, 648, 652, 646, 649, 649, 653, 654, 653, + 655, 656, 657, 658, 660, 659, 661, 662, 660, 663, + + 650, 659, 652, 664, 665, 661, 654, 666, 655, 656, + 667, 657, 662, 658, 663, 669, 668, 671, 670, 666, + 672, 664, 668, 665, 673, 667, 674, 675, 673, 669, + 670, 676, 677, 678, 680, 679, 671, 681, 681, 672, + 679, 682, 683, 675, 674, 682, 684, 685, 680, 676, + 677, 677, 678, 686, 687, 688, 683, 689, 685, 687, + 690, 691, 696, 693, 692, 684, 80, 686, 691, 692, + 693, 688, 694, 690, 695, 697, 689, 694, 698, 695, + 696, 699, 697, 700, 701, 702, 703, 698, 705, 703, + 702, 706, 700, 704, 707, 699, 701, 704, 708, 709, + + 706, 718, 705, 710, 710, 711, 711, 712, 712, 707, + 713, 716, 708, 714, 711, 713, 721, 717, 722, 720, + 709, 718, 714, 717, 719, 724, 723, 725, 719, 726, + 716, 720, 723, 724, 725, 727, 722, 728, 731, 737, + 738, 721, 741, 740, 744, 744, 738, 726, 737, 740, + 743, 741, 742, 731, 743, 745, 745, 728, 746, 747, + 727, 729, 748, 729, 749, 750, 729, 752, 742, 746, + 729, 750, 752, 729, 753, 754, 748, 747, 755, 759, + 729, 729, 755, 729, 749, 751, 751, 751, 756, 751, + 757, 758, 751, 754, 757, 753, 758, 751, 759, 760, + + 761, 763, 762, 751, 751, 762, 763, 763, 764, 766, + 757, 75, 756, 767, 760, 764, 765, 765, 767, 768, + 768, 769, 774, 771, 766, 761, 769, 770, 771, 775, + 770, 772, 772, 773, 774, 773, 776, 777, 779, 778, + 776, 780, 780, 785, 781, 784, 779, 782, 775, 783, + 783, 786, 789, 789, 787, 785, 808, 777, 778, 781, + 787, 782, 788, 784, 790, 808, 792, 788, 793, 790, + 790, 792, 794, 786, 793, 795, 796, 798, 794, 799, + 795, 797, 796, 798, 797, 800, 800, 799, 801, 801, + 802, 803, 804, 805, 806, 807, 807, 804, 802, 809, + + 805, 810, 810, 812, 811, 814, 815, 809, 816, 803, + 811, 817, 818, 806, 814, 815, 817, 819, 820, 821, + 819, 818, 812, 820, 822, 823, 824, 826, 826, 827, + 825, 828, 816, 821, 823, 825, 825, 829, 830, 824, + 831, 834, 834, 831, 827, 833, 829, 833, 835, 822, + 828, 831, 836, 837, 842, 838, 839, 836, 840, 841, + 843, 844, 830, 842, 845, 844, 846, 847, 848, 835, + 850, 74, 849, 847, 837, 838, 839, 848, 851, 841, + 840, 852, 845, 843, 849, 846, 853, 852, 854, 850, + 855, 855, 851, 854, 856, 857, 858, 859, 860, 861, + + 853, 862, 863, 864, 857, 859, 865, 867, 869, 864, + 866, 868, 865, 867, 856, 872, 858, 870, 860, 872, + 862, 861, 863, 870, 866, 868, 871, 873, 869, 874, + 875, 876, 871, 877, 877, 875, 878, 879, 880, 882, + 879, 874, 878, 883, 881, 882, 873, 884, 884, 874, + 885, 888, 876, 886, 887, 891, 880, 881, 886, 887, + 887, 889, 892, 883, 894, 889, 888, 893, 885, 890, + 890, 896, 893, 897, 900, 899, 901, 891, 903, 903, + 904, 905, 892, 894, 904, 906, 906, 897, 899, 908, + 907, 909, 919, 908, 900, 896, 905, 901, 902, 910, + + 911, 902, 912, 902, 919, 911, 909, 902, 915, 902, + 932, 914, 913, 910, 902, 907, 912, 913, 913, 902, + 914, 916, 915, 917, 918, 916, 920, 921, 922, 918, + 923, 920, 932, 924, 925, 929, 929, 916, 917, 918, + 925, 921, 924, 926, 923, 927, 928, 931, 926, 922, + 930, 927, 928, 931, 933, 930, 934, 936, 937, 939, + 940, 940, 941, 937, 938, 943, 944, 941, 945, 936, + 946, 939, 942, 933, 934, 935, 935, 951, 938, 943, + 942, 935, 947, 935, 68, 944, 946, 945, 947, 935, + 949, 948, 950, 951, 935, 935, 948, 952, 953, 953, + + 954, 935, 949, 955, 954, 957, 958, 959, 960, 958, + 950, 957, 961, 960, 962, 952, 963, 964, 966, 967, + 962, 963, 968, 955, 969, 961, 959, 966, 967, 971, + 969, 970, 972, 973, 975, 974, 964, 972, 968, 976, + 970, 977, 980, 978, 983, 986, 989, 987, 971, 974, + 977, 976, 978, 973, 975, 979, 981, 985, 988, 980, + 983, 979, 981, 990, 989, 986, 987, 996, 991, 992, + 995, 985, 988, 991, 992, 995, 996, 998, 990, 997, + 997, 999, 1001, 998, 1002, 1006, 1007, 1004, 1004, 1002, + 1002, 1004, 1005, 1008, 999, 1005, 1009, 1010, 1001, 1006, + + 1011, 1012, 1013, 1015, 1020, 1014, 1007, 1012, 1016, 1008, + 1010, 1014, 1017, 1016, 1009, 1011, 1019, 1023, 1015, 1019, + 1029, 63, 1013, 1021, 1022, 1020, 1017, 1024, 1021, 1022, + 1025, 1026, 1024, 1023, 1028, 1025, 1029, 1033, 1030, 1031, + 1028, 1032, 1032, 1026, 1030, 1031, 1033, 1034, 1035, 1036, + 1036, 1035, 1037, 1038, 1039, 1040, 1041, 1042, 1040, 1044, + 1043, 1049, 1045, 1042, 1044, 1034, 1043, 1045, 1046, 1041, + 1037, 1047, 1038, 1046, 1039, 1050, 1051, 1047, 1052, 1049, + 1053, 1053, 1051, 1052, 1054, 1055, 1056, 1057, 1058, 1059, + 1060, 1058, 1059, 1054, 1055, 1050, 1062, 1061, 1063, 1064, + + 1067, 1060, 1061, 1065, 1056, 1066, 1057, 1068, 1070, 1065, + 1063, 1066, 1068, 1072, 1062, 1067, 1069, 1069, 1064, 1071, + 1073, 1074, 1075, 1076, 1073, 1072, 1077, 1070, 1079, 1080, + 1080, 1075, 1081, 1071, 1083, 1084, 1086, 1085, 1089, 1074, + 1092, 1086, 1076, 58, 1087, 1088, 1088, 1079, 1083, 1085, + 1084, 1077, 1081, 1087, 1090, 1091, 1092, 1093, 1089, 1095, + 1090, 1091, 1093, 1094, 1095, 1094, 1096, 1097, 1098, 1099, + 1100, 1101, 1102, 1098, 1103, 1105, 1105, 1106, 1101, 1107, + 1096, 1097, 1109, 1108, 1099, 1110, 57, 1102, 1109, 1100, + 1111, 1106, 1113, 1103, 1117, 1111, 1113, 1107, 1108, 1114, + + 1114, 1117, 1115, 1118, 1111, 1110, 1111, 1115, 1120, 1111, + 1116, 1116, 1119, 1121, 1122, 1119, 1123, 1118, 1124, 1126, + 1125, 1123, 1127, 1122, 1126, 1129, 1134, 1120, 1128, 1131, + 1131, 1121, 1125, 1132, 1137, 1133, 1127, 1124, 1132, 1128, + 1133, 1136, 1135, 1137, 1129, 1136, 1134, 1135, 1138, 1139, + 1140, 1142, 1143, 1141, 1145, 1144, 1146, 1147, 1150, 1143, + 1151, 1149, 1148, 1138, 1139, 1141, 1142, 1144, 1148, 1140, + 1152, 1153, 1154, 1145, 1157, 1147, 1149, 1146, 1150, 1152, + 1151, 1155, 1156, 1158, 1159, 1162, 1153, 1164, 1161, 1163, + 1165, 1154, 1166, 1155, 1161, 1164, 1170, 1167, 1158, 1157, + + 1162, 1156, 1167, 1163, 1159, 1168, 1169, 1171, 1166, 1172, + 1165, 1169, 1169, 1173, 1173, 1170, 1175, 1168, 1176, 1177, + 1181, 1171, 1172, 1174, 1174, 1177, 1181, 1176, 1174, 1175, + 1179, 1174, 1174, 1178, 1178, 1179, 1174, 1185, 1180, 1182, + 1183, 1188, 1174, 1319, 1182, 1183, 1174, 1180, 1184, 1184, + 1186, 1186, 1187, 1189, 1190, 1187, 1191, 1187, 1185, 1192, + 1193, 1188, 1194, 1190, 1192, 1197, 1195, 1196, 1199, 1319, + 1197, 1189, 1195, 1196, 1193, 1198, 1191, 1199, 1205, 1198, + 1194, 1206, 1199, 1204, 1199, 1202, 1199, 1204, 1199, 1200, + 1200, 1201, 1201, 1205, 1201, 1207, 1202, 1208, 1209, 1206, + + 1210, 1211, 1208, 1208, 1207, 1212, 1211, 1209, 1213, 1214, + 1215, 1216, 1217, 1218, 1218, 1219, 1220, 1213, 1217, 1212, + 1222, 1221, 1210, 1219, 1223, 1216, 1221, 1224, 1214, 1215, + 1220, 1225, 1226, 1223, 1222, 1227, 1227, 1226, 1228, 1229, + 1229, 1230, 1234, 1230, 1232, 1224, 1233, 1232, 1235, 1236, + 1236, 1233, 1237, 1228, 1238, 1238, 1225, 1235, 1239, 1239, + 1240, 1234, 1241, 1242, 1250, 1240, 1243, 1243, 1244, 1246, + 1245, 1247, 1237, 1245, 1261, 1261, 1247, 1248, 1249, 1253, + 1249, 1255, 1250, 1241, 1242, 1257, 1248, 1252, 1244, 1246, + 1252, 1254, 1256, 1257, 1253, 1255, 1254, 1256, 1258, 1259, + + 1260, 1262, 1259, 1258, 1263, 1260, 1262, 1264, 1265, 1270, + 1266, 1268, 1269, 1264, 1270, 1265, 1273, 1268, 1269, 1271, + 1272, 1274, 1263, 1266, 1276, 1271, 1275, 1275, 1278, 1272, + 1279, 1280, 1274, 1281, 1282, 1273, 1283, 1286, 1287, 1281, + 1282, 1285, 1283, 1278, 1276, 1288, 1291, 1285, 1289, 1290, + 1279, 1286, 1292, 1292, 1280, 1293, 1294, 1286, 1287, 1295, + 1289, 1296, 1298, 1290, 1291, 1288, 1296, 1297, 1297, 1299, + 1301, 1304, 1303, 1302, 1299, 1293, 1305, 1295, 1302, 1302, + 1304, 1294, 1306, 1307, 1305, 1298, 1308, 1309, 1310, 1301, + 1303, 1311, 1309, 1311, 1312, 1309, 1306, 1310, 1307, 1314, + + 1316, 1308, 1315, 1318, 1308, 1314, 1315, 1317, 1312, 1320, + 1321, 1316, 1317, 1317, 1322, 1321, 1323, 1324, 1325, 1322, + 1326, 1328, 1318, 1325, 1329, 1330, 1332, 1320, 1331, 1331, + 1332, 1333, 1334, 1335, 1323, 1328, 1336, 1324, 1337, 1335, + 1326, 1338, 1329, 1330, 1339, 1340, 1341, 1342, 1336, 1333, + 1345, 1334, 1342, 1344, 1343, 1338, 1354, 1337, 1344, 1339, + 1340, 1343, 1346, 1347, 1347, 1341, 1348, 1349, 1345, 1350, + 1354, 1346, 1351, 1351, 1352, 1357, 1349, 1353, 1355, 1355, + 1352, 1348, 1356, 1353, 1358, 1359, 1360, 1361, 1356, 1350, + 1359, 1357, 1360, 1361, 1362, 1363, 1363, 1364, 1364, 1367, + + 1362, 1366, 1366, 1367, 1368, 1358, 1369, 1370, 1371, 1373, + 1372, 1374, 1374, 1368, 1375, 1376, 1373, 1378, 1379, 1370, + 1382, 1377, 1371, 1376, 1369, 1372, 1377, 1380, 1383, 1383, + 1381, 1378, 1380, 1380, 1375, 1381, 1381, 1379, 1384, 1385, + 1382, 1386, 1387, 1388, 1389, 1390, 1391, 1387, 1392, 1393, + 1386, 1395, 1391, 1392, 1394, 1396, 1403, 1384, 1385, 1397, + 1394, 1396, 1388, 1390, 1389, 1397, 1398, 1399, 1400, 1401, + 1395, 1405, 1405, 52, 1404, 1393, 1402, 1403, 1406, 1407, + 1411, 1406, 1408, 1408, 1411, 1398, 1399, 1400, 1401, 1404, + 1402, 1407, 1409, 1409, 1410, 1412, 1413, 1414, 1415, 1410, + + 1415, 1417, 1418, 1419, 1415, 1413, 1420, 1418, 1412, 1421, + 1414, 1422, 1422, 1425, 1426, 1423, 1424, 1415, 1419, 1417, + 1423, 1430, 1424, 1432, 1427, 1421, 1420, 1426, 1425, 1427, + 1428, 1429, 1431, 1433, 1428, 1429, 1434, 1434, 1436, 1433, + 1438, 1430, 1439, 1432, 1440, 1440, 1441, 1439, 1442, 1448, + 1431, 1449, 1441, 1444, 1444, 1446, 1436, 1452, 1446, 1447, + 1447, 1438, 1453, 1451, 1455, 1448, 1451, 1449, 1442, 1454, + 1454, 1453, 1456, 1457, 1459, 1458, 1461, 1452, 1462, 1455, + 1458, 1460, 1460, 1463, 1464, 1461, 1465, 1467, 1459, 1466, + 1466, 1473, 1457, 1456, 1468, 1469, 1462, 1475, 1463, 1470, + + 1469, 1467, 1471, 1471, 1472, 1478, 1465, 1476, 1472, 1464, + 1482, 1473, 1468, 1477, 1470, 1474, 1474, 1477, 1476, 1475, + 1479, 1481, 1481, 1483, 1478, 1479, 1482, 1485, 1484, 1486, + 1487, 1488, 1488, 1489, 1490, 1493, 1491, 1495, 1489, 1492, + 1492, 1483, 1484, 1486, 1493, 1494, 1485, 1485, 1497, 1496, + 1494, 1496, 1498, 1497, 1490, 1487, 1491, 1495, 1498, 1499, + 1500, 1502, 1503, 1503, 1504, 1505, 1500, 1507, 1508, 1509, + 1509, 1505, 1507, 1510, 1510, 1502, 1511, 1512, 1513, 1499, + 1516, 1514, 1517, 1504, 1514, 1515, 1515, 1518, 1526, 47, + 1511, 1520, 1508, 1513, 1517, 1512, 1519, 1520, 1516, 1519, + + 1521, 1522, 1519, 1524, 1522, 1521, 1525, 1518, 1528, 1528, + 1529, 1525, 1524, 1526, 1519, 1527, 1529, 1530, 1527, 1531, + 1522, 1532, 1532, 1530, 1531, 1533, 1533, 1534, 1536, 1535, + 1537, 1538, 1539, 1534, 1535, 1540, 1541, 1542, 1540, 1543, + 1544, 1536, 1541, 1542, 1543, 1545, 1544, 1549, 1537, 1546, + 1538, 1550, 1539, 1548, 1546, 1547, 1547, 1551, 1548, 1552, + 1553, 1554, 1555, 1556, 1559, 1549, 1557, 1558, 1545, 1558, + 1557, 1550, 1561, 1552, 1553, 1554, 1563, 1551, 1562, 1564, + 1555, 1565, 1566, 1559, 1561, 1564, 1567, 1569, 1556, 1563, + 1562, 1568, 1571, 1571, 1572, 1573, 1576, 1574, 1566, 1577, + + 1573, 1565, 1575, 1575, 1578, 1568, 1567, 1579, 1569, 1574, + 1580, 1576, 1581, 1577, 1572, 1582, 1584, 1583, 1586, 1580, + 1588, 1589, 1582, 1593, 1589, 1579, 1583, 1581, 1578, 1583, + 1590, 1590, 1584, 1586, 1591, 1591, 1592, 1594, 1586, 1596, + 1594, 1593, 1595, 1595, 1597, 1588, 1598, 1600, 1592, 1599, + 1602, 1598, 1596, 1601, 1599, 1603, 1604, 1608, 1605, 1602, + 1607, 1607, 1609, 1597, 1606, 1604, 1600, 1605, 1604, 1601, + 1606, 1610, 1611, 1613, 1603, 1609, 1612, 1608, 1616, 1617, + 1618, 1618, 1619, 1621, 1620, 1613, 1611, 1623, 1621, 1610, + 1622, 1622, 1612, 1620, 1625, 1624, 1623, 1617, 1619, 1623, + + 1624, 1626, 1627, 1616, 1628, 1622, 1632, 1630, 1631, 1628, + 1628, 1633, 1625, 1634, 1635, 18, 1633, 1636, 1636, 1634, + 1627, 1630, 1626, 1631, 1637, 1642, 1638, 1639, 1632, 1640, + 1637, 1638, 1635, 1639, 1643, 1640, 1644, 1645, 1646, 1651, + 1647, 1646, 1644, 1649, 1652, 1642, 1647, 1646, 1643, 1653, + 1645, 1649, 1654, 1655, 1656, 1657, 1658, 1653, 1651, 1659, + 1659, 1654, 1660, 1652, 1662, 1661, 1655, 1656, 1660, 1657, + 1658, 1661, 1663, 1663, 1664, 1665, 1666, 1662, 1667, 1667, + 1669, 1659, 1670, 1668, 1671, 1672, 1669, 1674, 1674, 1675, + 1680, 1681, 17, 1665, 1664, 1666, 1668, 1676, 1684, 1680, + + 1671, 1676, 1677, 1672, 1670, 1678, 1679, 1677, 1683, 1675, + 1678, 1679, 1686, 1684, 1681, 1685, 1685, 1687, 1688, 1690, + 1683, 1689, 1689, 1691, 1692, 1695, 1693, 1696, 1697, 1687, + 1691, 1686, 1699, 1690, 1697, 1700, 1692, 1688, 1693, 1698, + 1712, 1700, 1701, 1701, 1695, 1702, 1706, 1696, 1702, 1705, + 1699, 1698, 1703, 1703, 1705, 1706, 1707, 1708, 1708, 1709, + 1712, 1710, 1707, 1710, 1711, 1713, 1714, 1711, 1715, 1716, + 1717, 1709, 1718, 1719, 1716, 1717, 1720, 1721, 1723, 1722, + 0, 1718, 1721, 1729, 1714, 1719, 1715, 1713, 1722, 1725, + 1724, 1720, 1726, 1728, 1725, 1724, 1727, 1727, 1723, 1728, + + 1731, 1722, 1724, 1732, 1729, 1733, 1734, 1726, 1735, 1736, + 1735, 1737, 1737, 1738, 1738, 1739, 1739, 1740, 1743, 1731, + 1744, 1733, 1732, 1736, 1753, 1736, 1734, 1741, 1741, 1742, + 1742, 1745, 1745, 1751, 1746, 1756, 1747, 1740, 1746, 1743, + 1748, 1744, 1747, 1748, 1750, 1754, 1752, 1759, 1754, 1753, + 1750, 1751, 1752, 1755, 1755, 1756, 1757, 1758, 1758, 1760, + 1761, 1757, 1759, 1762, 1762, 1761, 1763, 1764, 1767, 1765, + 1766, 1763, 1768, 1764, 1770, 1773, 1776, 1775, 1769, 1775, + 1760, 1765, 1765, 1765, 1769, 1774, 1767, 1776, 1765, 1773, + 1766, 1772, 1768, 1777, 1770, 1778, 1772, 1772, 1779, 1780, + + 1774, 1778, 1781, 1782, 1782, 1783, 1785, 1779, 1777, 1784, + 1784, 1786, 1787, 1787, 1788, 1788, 1789, 1792, 1792, 1780, + 1793, 1794, 1797, 1781, 1801, 1796, 1785, 1799, 1799, 1798, + 1794, 1783, 1800, 1786, 1796, 1798, 1789, 1802, 1803, 1801, + 1804, 1805, 1805, 1797, 1802, 1793, 1806, 1803, 1807, 1809, + 1810, 1811, 1812, 1800, 1809, 1813, 1810, 1814, 1819, 1812, + 1816, 1813, 1818, 1814, 1807, 1816, 1804, 1815, 1815, 1817, + 1822, 1811, 1806, 1820, 1823, 1827, 1821, 1819, 1817, 1821, + 1824, 1824, 1818, 1825, 1826, 1820, 1828, 1829, 1822, 1825, + 1826, 1829, 1831, 1832, 1833, 1827, 1834, 1834, 1835, 1833, + + 1823, 1828, 1838, 1836, 1839, 1840, 1846, 1829, 1839, 1848, + 1841, 1840, 1831, 1842, 1842, 1832, 1843, 1835, 1836, 1841, + 1843, 1838, 1844, 1845, 1845, 1847, 1849, 1846, 1848, 1850, + 1851, 1849, 1853, 1844, 1852, 1861, 1854, 1859, 1844, 1847, + 1852, 1854, 1855, 1855, 1856, 1856, 1859, 1853, 1857, 1850, + 1851, 1860, 1857, 1862, 1862, 1861, 1864, 1864, 1865, 1866, + 1868, 1869, 1860, 1865, 1865, 1866, 1868, 1860, 1870, 1871, + 1872, 1874, 1876, 1870, 1875, 1877, 1872, 1879, 1875, 1878, + 1880, 1871, 1882, 1874, 1876, 1878, 1880, 1869, 1881, 1884, + 1885, 1886, 1888, 1881, 1882, 1888, 1886, 1889, 1889, 1879, + + 1877, 1884, 1890, 1890, 1891, 1891, 1892, 1893, 1894, 1885, + 1895, 1896, 1897, 1893, 1894, 1895, 1901, 1896, 1899, 1901, + 1902, 1897, 1905, 1899, 1903, 1903, 1892, 1906, 1907, 1908, + 1908, 1909, 1902, 1907, 1905, 1912, 1910, 1911, 1912, 1906, + 1909, 1910, 1911, 1913, 1913, 1914, 1915, 1918, 1916, 1917, + 1920, 1918, 1919, 1921, 1922, 1915, 1920, 1919, 1923, 1924, + 1926, 1926, 1927, 1922, 1929, 1914, 1916, 1933, 1917, 1928, + 1931, 1921, 1926, 1924, 1930, 1930, 1923, 1932, 1928, 1931, + 1927, 1934, 1935, 1941, 1929, 1942, 1934, 1944, 1933, 1932, + 1938, 1938, 1945, 1940, 1946, 1935, 1940, 1947, 1956, 1941, + + 1946, 1942, 1944, 1948, 1948, 1949, 1945, 1949, 1950, 1950, + 1951, 1953, 1953, 1957, 1947, 1954, 1954, 1958, 1951, 1957, + 1959, 1956, 1960, 1958, 1963, 1961, 1964, 1959, 1962, 1962, + 1965, 1966, 1969, 1963, 1967, 1970, 1968, 1973, 1974, 1975, + 1971, 0, 1965, 1966, 1960, 1961, 1971, 1964, 1968, 1967, + 1970, 1975, 1976, 1976, 1977, 1978, 1981, 1973, 1969, 1971, + 1979, 1974, 1980, 1979, 1983, 1985, 1984, 1980, 1984, 1983, + 1987, 1989, 1977, 1986, 1991, 1978, 1981, 1987, 1986, 1992, + 1989, 1993, 1994, 1985, 1994, 1995, 1998, 1997, 1992, 1997, + 1999, 1999, 1991, 1993, 2000, 2002, 2001, 2002, 2003, 2005, + + 1998, 2001, 2004, 2003, 1995, 2006, 2007, 2004, 2008, 2009, + 2010, 2012, 2007, 2008, 2013, 2014, 2014, 2005, 2010, 2016, + 2000, 2017, 2009, 2015, 2015, 2006, 2018, 2020, 2013, 2020, + 2012, 2019, 2018, 2021, 2016, 2024, 2019, 2022, 2023, 2023, + 2029, 2017, 2025, 2025, 2033, 2022, 2027, 2024, 2026, 2026, + 2031, 2021, 2028, 2022, 2032, 2027, 2032, 2028, 2029, 2031, + 2035, 2034, 2031, 2036, 2038, 2033, 2034, 2034, 2039, 2035, + 2042, 2043, 2040, 2039, 2046, 2036, 2038, 2040, 2044, 2045, + 2045, 2047, 2048, 2042, 2052, 2053, 2049, 2044, 2050, 2054, + 2055, 2043, 2046, 2057, 2063, 2055, 2052, 2053, 2048, 2047, + + 2049, 2056, 2057, 2050, 2060, 2062, 2056, 2064, 2065, 2054, + 2060, 2062, 2066, 2068, 2068, 2067, 2069, 2063, 2070, 2070, + 2071, 2074, 2064, 2060, 2067, 2069, 2065, 2072, 2073, 2075, + 2076, 2072, 2077, 2073, 2074, 2076, 2076, 2066, 2077, 2071, + 2078, 2079, 2080, 2081, 2079, 2086, 2078, 2084, 2084, 2089, + 2080, 2075, 2085, 2085, 2086, 2087, 2087, 2088, 2088, 2090, + 2091, 2089, 2096, 2081, 2092, 2099, 2091, 2085, 2096, 2092, + 2093, 2093, 2094, 2094, 2095, 2101, 2098, 2090, 2085, 2095, + 2098, 2103, 2100, 2104, 2105, 2099, 2100, 2106, 2104, 2107, + 2108, 2110, 2111, 2109, 2107, 2101, 2112, 2111, 2113, 2113, + + 2114, 2115, 2106, 2117, 2114, 2116, 2103, 2105, 2108, 2109, + 2116, 2110, 2118, 2119, 2120, 2121, 2115, 2123, 2112, 2122, + 2121, 2124, 2124, 2126, 2127, 2119, 2128, 2129, 2130, 2117, + 2118, 2126, 2122, 2120, 2131, 2123, 2132, 2133, 2134, 2136, + 2140, 0, 2138, 2127, 2139, 2128, 2140, 2142, 2142, 2133, + 2129, 2143, 2130, 2131, 2136, 2138, 2143, 2132, 2139, 2134, + 2141, 2144, 2141, 2145, 2144, 2146, 2152, 2147, 2148, 2148, + 2149, 2149, 2150, 2153, 2150, 2155, 2145, 2151, 2151, 2146, + 2147, 2152, 2154, 2154, 2155, 2161, 2153, 2155, 2156, 2156, + 2157, 2157, 2158, 2160, 2162, 2163, 2166, 2158, 2160, 2164, + + 2164, 2165, 2165, 2167, 2167, 2161, 2168, 2163, 2169, 2169, + 2170, 2171, 2172, 2172, 2162, 2166, 2171, 2173, 2173, 2174, + 2175, 2176, 2177, 2179, 2168, 2170, 2180, 2180, 2179, 2175, + 2181, 2182, 2182, 2174, 2183, 2176, 2184, 2185, 2186, 2186, + 2185, 2177, 2184, 2187, 2187, 2188, 2189, 2190, 2193, 2181, + 2191, 2191, 2183, 2194, 2186, 2195, 2196, 2197, 2197, 2198, + 2196, 2189, 2199, 2204, 2188, 2200, 2190, 2199, 2193, 2201, + 2195, 2203, 2203, 2206, 2205, 2207, 2194, 2208, 2198, 2209, + 2200, 2205, 2211, 2204, 2201, 2210, 2210, 2206, 2212, 2213, + 2212, 2211, 2213, 2207, 2215, 2208, 2216, 2217, 2218, 2219, + + 2220, 2216, 2217, 2221, 2222, 2209, 2215, 2213, 2221, 2213, + 2224, 2225, 2219, 2226, 2227, 2224, 2225, 2228, 2229, 2232, + 2227, 2220, 2230, 2218, 2229, 2235, 2231, 2230, 2226, 2233, + 2222, 2231, 2234, 2239, 2235, 2234, 2236, 2237, 2228, 2238, + 2244, 0, 2233, 2240, 2232, 2236, 2237, 2239, 2238, 2240, + 2241, 2242, 2246, 2247, 2247, 2242, 2241, 2248, 2249, 2249, + 2244, 2246, 2251, 2248, 2250, 2253, 2257, 2249, 2256, 2250, + 2254, 2255, 2255, 2259, 2260, 2257, 2261, 2262, 2266, 2268, + 2268, 2253, 2251, 2256, 2251, 2259, 2254, 2267, 2265, 2262, + 2260, 2261, 2264, 2265, 0, 2264, 2269, 2269, 2266, 2267, + + 2271, 2271, 2272, 2273, 2274, 2272, 2275, 2276, 2273, 2278, + 2274, 2281, 2275, 2277, 2277, 2280, 2276, 2279, 2279, 2282, + 2283, 2283, 2284, 2278, 2286, 2281, 2285, 2280, 2284, 2286, + 2288, 2294, 2289, 2292, 2288, 2289, 2290, 2290, 2282, 2291, + 2285, 2293, 2292, 2295, 2291, 2296, 2296, 2295, 2297, 2299, + 2293, 2294, 2300, 2301, 2299, 2302, 2303, 2304, 2305, 2306, + 2303, 2297, 2307, 2305, 2308, 2306, 2309, 2310, 2307, 2302, + 2311, 2312, 2300, 2301, 2315, 2311, 2314, 2304, 2316, 2324, + 2324, 2317, 2308, 2316, 2323, 2309, 2310, 2317, 2314, 2318, + 2315, 2319, 2312, 2319, 2321, 2326, 2325, 2318, 2323, 2325, + + 2327, 2327, 2330, 2321, 2331, 2332, 2330, 2333, 2333, 2334, + 2331, 2337, 2337, 2339, 2341, 2345, 2342, 2332, 2334, 2346, + 2345, 2326, 2347, 2355, 2348, 2349, 2349, 2347, 2341, 2348, + 2353, 2339, 2342, 2351, 2351, 2356, 2353, 2354, 2354, 2355, + 2359, 2357, 2360, 2361, 2361, 2346, 2357, 2363, 2365, 2364, + 2366, 2368, 2368, 2370, 2360, 2364, 2363, 2356, 2369, 2359, + 2371, 2369, 2373, 2373, 2375, 2366, 2365, 2374, 2374, 2375, + 2376, 2377, 2370, 2379, 2378, 2379, 2380, 2381, 2371, 2378, + 2377, 2382, 2383, 2384, 2385, 2386, 2386, 2383, 2376, 2385, + 2380, 2381, 2390, 2382, 2387, 2387, 2388, 2388, 2389, 2389, + + 2391, 2392, 2395, 2384, 2390, 2396, 2392, 2393, 2393, 2394, + 2394, 2397, 2398, 2400, 2395, 2399, 2399, 2396, 2391, 2401, + 2401, 2402, 2402, 2403, 2404, 2406, 2405, 2407, 2398, 2409, + 2408, 2397, 2400, 2405, 2403, 2408, 2404, 2406, 2410, 2411, + 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2407, 2426, 2409, + 2412, 2421, 2418, 2419, 2419, 2422, 2420, 2415, 2410, 2424, + 2417, 2425, 2428, 2414, 2418, 2420, 2421, 0, 2413, 2416, + 2422, 2426, 2427, 2429, 2430, 2427, 2428, 2424, 2429, 2430, + 2431, 2431, 2438, 2425, 2432, 2432, 2433, 2433, 2435, 2435, + 2437, 2437, 2439, 2440, 2441, 2443, 2444, 2445, 2446, 2447, + + 2438, 2448, 2449, 2439, 2449, 2450, 2451, 2457, 2447, 2441, + 2452, 2458, 2440, 2456, 2444, 2443, 2453, 2453, 2446, 2445, + 2458, 2448, 2455, 2455, 2451, 2450, 2461, 2456, 2452, 2457, + 2459, 2459, 2462, 2462, 2463, 2461, 2464, 2465, 2466, 2467, + 2468, 2470, 2473, 2469, 2465, 2471, 2471, 2472, 2472, 2474, + 2475, 2479, 2463, 2466, 2464, 2478, 2475, 2467, 2468, 2469, + 2470, 2478, 2473, 2476, 2476, 2477, 2477, 2474, 2480, 2479, + 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2483, 2487, 2492, + 2486, 2488, 2488, 2480, 2489, 2482, 2489, 2490, 2490, 2481, + 2494, 2495, 2496, 2484, 2485, 2497, 2498, 2499, 2492, 2494, + + 2500, 2498, 2503, 2504, 2496, 2506, 2504, 2505, 2505, 2507, + 2495, 2508, 2508, 2511, 2509, 2497, 2514, 2499, 2509, 2500, + 2506, 2512, 2503, 2513, 2513, 2512, 2516, 2507, 2511, 2514, + 2517, 2518, 2519, 2519, 2521, 2522, 2523, 2524, 2524, 2525, + 2523, 2516, 2526, 2526, 2522, 2528, 2521, 2527, 2529, 2530, + 2517, 2518, 2527, 2537, 2528, 2531, 2531, 2539, 2525, 2536, + 2536, 2530, 2538, 2538, 2529, 2540, 2544, 2541, 2542, 2551, + 2539, 2543, 2543, 2546, 2546, 2537, 2541, 2542, 2540, 2549, + 2550, 2544, 2552, 2551, 2549, 2550, 2553, 2552, 2554, 2555, + 2558, 2556, 2559, 2561, 2553, 2560, 2567, 2559, 2555, 2556, + + 2560, 2562, 2562, 2563, 2563, 2558, 2565, 2554, 2561, 2564, + 2564, 2566, 2568, 2565, 2567, 2569, 2566, 2570, 2571, 2571, + 2572, 2569, 2570, 2573, 2574, 2574, 2575, 2575, 2573, 2578, + 2568, 2579, 2579, 2580, 2581, 2572, 2580, 2584, 2582, 2581, + 2581, 2583, 2578, 2582, 2585, 2586, 2583, 2587, 2588, 2586, + 2585, 2584, 2587, 2589, 2590, 2591, 2594, 2588, 2592, 2593, + 2595, 2594, 2590, 2597, 2592, 2593, 2598, 2601, 2589, 2605, + 2597, 2598, 2595, 2603, 2599, 2604, 2591, 2599, 2603, 2601, + 2604, 2606, 2607, 2608, 2609, 2609, 2610, 2605, 2613, 2618, + 2614, 2607, 2608, 2615, 2606, 2610, 2614, 2619, 2622, 2615, + + 2620, 2621, 2621, 2623, 2624, 2622, 2613, 2627, 2618, 2625, + 2626, 2626, 2629, 2624, 2631, 2634, 2632, 2619, 2640, 2620, + 2632, 0, 2623, 2640, 2625, 2635, 2627, 2629, 2633, 2633, + 2636, 2635, 2637, 2646, 2631, 2639, 2636, 2642, 2637, 2643, + 2634, 2638, 2638, 2639, 2645, 2647, 2642, 2646, 2645, 2649, + 2649, 2650, 2643, 2651, 2651, 2652, 2652, 2654, 2654, 2655, + 2647, 2656, 2660, 2655, 2658, 2658, 2656, 2661, 2662, 2650, + 2663, 2665, 2661, 2666, 2666, 2663, 2663, 2668, 2668, 2671, + 2662, 2673, 2660, 2669, 2669, 2670, 2675, 2679, 2670, 2676, + 2676, 2665, 2671, 2677, 2677, 2678, 2678, 2680, 2680, 2673, + + 2681, 2682, 2679, 2683, 2684, 2686, 2675, 2685, 2685, 2686, + 2684, 2691, 2692, 2681, 2696, 2690, 2693, 2683, 2694, 2682, + 2690, 2690, 2695, 2697, 2694, 2698, 2698, 2697, 2695, 2703, + 2701, 2706, 2692, 2709, 2691, 2701, 2693, 2703, 2704, 2696, + 2707, 2704, 2710, 2707, 2708, 2708, 2711, 2710, 2712, 2713, + 2709, 2709, 2714, 2714, 2716, 2715, 2706, 2716, 2717, 2718, + 2722, 2720, 2719, 2713, 2711, 2716, 2720, 2720, 2712, 2715, + 2719, 2721, 2717, 2723, 2723, 2728, 2721, 2721, 2718, 2722, + 2724, 2724, 2725, 2725, 2726, 2726, 2727, 2727, 2729, 2730, + 2731, 2728, 2732, 2729, 2733, 2734, 2735, 2732, 2736, 2737, + + 2734, 2739, 2739, 2740, 2740, 2735, 2742, 2741, 2745, 2730, + 2741, 2744, 2744, 2733, 2750, 2745, 2731, 2747, 2736, 2737, + 2746, 2746, 2747, 2750, 2742, 2749, 2749, 2751, 2752, 2754, + 2755, 2755, 2757, 2758, 2756, 2771, 2751, 2752, 2756, 2759, + 2760, 2757, 2761, 2772, 2759, 2759, 2762, 2754, 2758, 2766, + 2762, 2761, 2770, 2760, 2766, 2767, 2767, 2769, 2769, 2774, + 2771, 2772, 2775, 2778, 2779, 2780, 2770, 2783, 2774, 2781, + 2785, 2787, 2788, 2779, 2775, 2781, 2787, 2788, 2790, 2783, + 2789, 2789, 2793, 2793, 2792, 2780, 2793, 2790, 2778, 2792, + 2798, 2785, 2795, 2795, 2796, 2796, 2797, 2797, 2799, 2798, + + 2800, 2801, 2803, 2807, 2804, 2805, 2801, 2809, 2803, 2804, + 2805, 2806, 2806, 2808, 2811, 2810, 2812, 2813, 2799, 2800, + 2810, 2807, 2812, 2814, 2814, 2808, 2816, 2820, 2809, 2817, + 2816, 2818, 2811, 2821, 2817, 2822, 2818, 2819, 2819, 2824, + 2826, 2826, 2813, 2828, 2829, 2830, 2820, 2832, 2821, 2830, + 2822, 2831, 2833, 2834, 2836, 2836, 2828, 2829, 2838, 2824, + 2831, 2834, 2835, 2832, 2837, 2839, 2841, 2835, 2840, 2840, + 2851, 2833, 2847, 2837, 2844, 2844, 2838, 2845, 2845, 2849, + 2849, 2852, 2853, 2854, 2857, 2841, 2851, 2858, 2854, 2856, + 2856, 2839, 2859, 2847, 2861, 2861, 2863, 2852, 2853, 2862, + + 2864, 2864, 2867, 2868, 2857, 2870, 2873, 2869, 2877, 2868, + 2858, 2859, 2869, 2862, 2875, 2863, 2871, 2871, 2872, 2872, + 2874, 2874, 2867, 2876, 2878, 2875, 2873, 2870, 2877, 2879, + 2878, 2880, 2876, 2881, 2882, 2882, 2883, 2884, 2884, 2883, + 2874, 2889, 2888, 2880, 2890, 2891, 2891, 2894, 2879, 2892, + 2890, 2893, 2892, 2881, 2888, 2896, 2899, 2893, 2897, 2897, + 2896, 2889, 2898, 2900, 2901, 2894, 2904, 2898, 2905, 2900, + 2902, 2902, 2906, 2909, 2907, 2899, 2908, 2908, 2904, 2910, + 2911, 2901, 2901, 2913, 2913, 2916, 2905, 2907, 2915, 2911, + 2914, 2914, 2909, 2915, 2922, 2910, 2917, 2906, 2921, 2916, + + 2929, 2917, 2918, 2918, 2919, 2919, 2920, 2920, 2923, 2931, + 2924, 2921, 2926, 2926, 2923, 2924, 2932, 2933, 2937, 2929, + 2922, 2934, 2934, 2936, 2936, 2938, 2939, 2940, 2940, 2941, + 2941, 2931, 2937, 2944, 2943, 2939, 2945, 2946, 2932, 2933, + 2943, 2960, 2946, 2949, 2949, 2938, 2951, 2951, 2953, 2952, + 2954, 2955, 2956, 2944, 2952, 2945, 2954, 2957, 2957, 2958, + 2956, 2960, 2953, 2955, 2958, 2961, 2962, 2963, 2964, 2966, + 2967, 2962, 2968, 2969, 2964, 2972, 2971, 2966, 2973, 2963, + 2974, 2975, 2977, 2978, 2979, 2961, 2975, 2977, 2982, 2967, + 2979, 2972, 2968, 2969, 2971, 2973, 2973, 2980, 2984, 2987, + + 2987, 2974, 2980, 2978, 2983, 2988, 2988, 2983, 2982, 2989, + 2995, 2984, 2994, 2989, 2993, 2993, 0, 2994, 2996, 2996, + 2998, 2998, 2999, 2999, 3005, 2999, 3006, 3000, 3000, 2995, + 3000, 3001, 3001, 3002, 3001, 3004, 3004, 3002, 3009, 3010, + 3006, 3011, 3005, 3012, 3012, 3015, 3011, 3016, 3017, 3019, + 3021, 3018, 3017, 3022, 3016, 3023, 3023, 3030, 3009, 3010, + 3018, 3026, 3022, 3030, 3019, 3024, 3024, 3031, 3021, 3027, + 3015, 3025, 3025, 3028, 3027, 3029, 3026, 3033, 3032, 3034, + 3029, 3029, 3028, 3035, 3034, 3028, 3036, 0, 3035, 3037, + 3037, 3038, 3031, 3032, 3039, 3040, 3040, 3038, 3033, 3042, + + 3039, 3041, 3041, 3043, 3049, 3036, 3046, 3046, 3043, 3048, + 3048, 3052, 3052, 3049, 3042, 3053, 3053, 3054, 3054, 3055, + 3055, 3056, 3056, 3057, 3057, 3058, 3058, 3060, 3061, 3061, + 3062, 3063, 3064, 3068, 3066, 3070, 3060, 3067, 3067, 3062, + 3072, 3069, 3076, 3063, 3071, 3071, 3078, 3070, 3068, 3073, + 3073, 3080, 3064, 3066, 3069, 3072, 3077, 3079, 3079, 3077, + 3076, 3082, 3083, 3084, 3082, 3085, 3086, 3088, 3083, 3080, + 3085, 3087, 3078, 3090, 3094, 3091, 3095, 3084, 3094, 3090, + 3098, 3108, 3113, 3088, 3091, 3086, 3119, 3106, 3117, 3087, + 3106, 3095, 3109, 3109, 3108, 3110, 3110, 3111, 3111, 3114, + + 3115, 3116, 3117, 3120, 3115, 3113, 3098, 3121, 3114, 3119, + 3123, 3122, 3121, 3122, 3120, 3124, 3124, 3125, 3126, 3128, + 3127, 3116, 3129, 3131, 3130, 3123, 3133, 3134, 3132, 3135, + 3125, 3133, 3131, 3136, 3135, 3128, 3137, 3126, 3127, 3130, + 3132, 3137, 3141, 3142, 3143, 3143, 3144, 3129, 3134, 3145, + 3145, 3146, 3146, 3136, 3149, 3144, 3141, 3147, 3147, 3148, + 3148, 3150, 3151, 3142, 3152, 3151, 3153, 3154, 3155, 3152, + 3156, 3153, 3157, 3149, 3159, 3158, 3156, 3160, 3160, 3159, + 3161, 3150, 3164, 3155, 3162, 3162, 3157, 3158, 3163, 3163, + 3165, 3168, 3154, 3166, 3166, 3170, 3175, 3164, 3173, 3173, + + 3161, 3174, 3174, 3176, 3175, 3177, 3168, 3179, 3178, 3165, + 3180, 3177, 3181, 3170, 3178, 3182, 3183, 3183, 3185, 3185, + 3182, 3179, 3176, 3180, 3188, 3191, 3189, 3194, 3192, 3195, + 3196, 3181, 3192, 3199, 3195, 3197, 3200, 3198, 3201, 3191, + 3205, 3200, 3207, 3201, 3206, 3188, 3189, 3194, 3197, 3196, + 3198, 3210, 3199, 3202, 3202, 3208, 3208, 3210, 3209, 3215, + 3205, 3207, 3206, 3209, 3211, 3211, 3212, 3213, 3214, 3216, + 3223, 3212, 3213, 3214, 3219, 3216, 3218, 3218, 3215, 3219, + 3220, 3220, 3222, 3224, 3225, 3226, 3222, 3227, 3228, 3223, + 3224, 3236, 3229, 3227, 3231, 3231, 3233, 3233, 3237, 3234, + + 3238, 3235, 3243, 3225, 3226, 3229, 3235, 3228, 3234, 3241, + 3236, 3234, 3245, 3238, 3239, 3239, 3240, 3237, 3244, 3244, + 3250, 3240, 3241, 3246, 3246, 3247, 3247, 3248, 3243, 3249, + 3252, 3245, 3248, 3251, 3251, 3252, 3249, 3255, 3253, 3250, + 3253, 3254, 3254, 3256, 3255, 3257, 3258, 3259, 3261, 3261, + 3256, 3258, 3262, 3264, 3265, 3266, 3267, 3271, 3264, 3265, + 3268, 3268, 3270, 3270, 3257, 3272, 3259, 3273, 3273, 3274, + 3274, 3262, 3275, 3285, 3266, 3267, 3271, 3277, 3277, 3275, + 3278, 3278, 3279, 3281, 3272, 3284, 3286, 0, 3281, 3279, + 3284, 0, 3285, 3287, 3287, 3288, 3288, 0, 0, 0, + + 0, 0, 0, 0, 0, 3286, 3292, 3292, 3292, 3292, + 3292, 3292, 3292, 3293, 3293, 3293, 3293, 3293, 3293, 3293, + 3294, 3294, 3294, 3294, 3294, 3294, 3294, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3296, 3296, 3296, 3296, 3296, 3296, + 3296, 3297, 3297, 3297, 3297, 3297, 3297, 3297, 3298, 3298, + 3298, 3298, 3298, 3298, 3298, 3300, 3300, 0, 3300, 3300, + 3300, 3300, 3301, 3301, 0, 0, 0, 3301, 3301, 3302, + 3302, 0, 0, 3302, 0, 3302, 3303, 0, 0, 0, + 0, 0, 3303, 3304, 3304, 0, 0, 0, 3304, 3304, + 3305, 0, 0, 0, 0, 0, 3305, 3306, 3306, 0, + + 3306, 3306, 3306, 3306, 3307, 0, 0, 0, 0, 0, + 3307, 3308, 3308, 0, 0, 0, 3308, 3308, 3309, 3309, + 0, 3309, 3309, 3309, 3309, 3291, 3291, 3291, 3291, 3291, + 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, + 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, + 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, + 3291, 3291, 3291, 3291, 3291, 3291 } ; static yy_state_type yy_last_accepting_state; @@ -3135,7 +3162,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 3137 "<stdout>" +#line 3164 "<stdout>" #define INITIAL 0 #define quotedstring 1 @@ -3353,7 +3380,7 @@ YY_DECL { #line 211 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -#line 3355 "<stdout>" +#line 3382 "<stdout>" while ( 1 ) /* loops until end-of-file is reached */ { @@ -3386,13 +3413,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 >= 3253 ) + if ( yy_current_state >= 3292 ) 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] != 6365 ); + while ( yy_base[yy_current_state] != 6426 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3672,17 +3699,17 @@ YY_RULE_SETUP case 51: YY_RULE_SETUP #line 265 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSTEMD) } +{ YDVAR(1, VAR_HTTP_NOTLS_DOWNSTREAM) } YY_BREAK case 52: YY_RULE_SETUP #line 266 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK case 53: YY_RULE_SETUP #line 267 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 54: YY_RULE_SETUP @@ -3692,1304 +3719,1319 @@ YY_RULE_SETUP case 55: YY_RULE_SETUP #line 269 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 56: YY_RULE_SETUP #line 270 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 57: YY_RULE_SETUP #line 271 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 58: YY_RULE_SETUP #line 272 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 59: YY_RULE_SETUP #line 273 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SO_REUSEPORT) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 60: YY_RULE_SETUP #line 274 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_TRANSPARENT) } +{ YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK case 61: YY_RULE_SETUP #line 275 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_FREEBIND) } +{ YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK case 62: YY_RULE_SETUP #line 276 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_DSCP) } +{ YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK case 63: YY_RULE_SETUP #line 277 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_IP_DSCP) } YY_BREAK case 64: YY_RULE_SETUP #line 278 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 65: YY_RULE_SETUP #line 279 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 66: YY_RULE_SETUP #line 280 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 67: YY_RULE_SETUP #line 281 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 68: YY_RULE_SETUP #line 282 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 69: YY_RULE_SETUP #line 283 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 70: YY_RULE_SETUP #line 284 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 71: YY_RULE_SETUP #line 285 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 72: YY_RULE_SETUP #line 286 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 73: YY_RULE_SETUP #line 287 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 74: YY_RULE_SETUP #line 288 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 75: YY_RULE_SETUP #line 289 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 76: YY_RULE_SETUP #line 290 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 77: YY_RULE_SETUP #line 291 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 78: YY_RULE_SETUP #line 292 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 79: YY_RULE_SETUP #line 293 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 80: YY_RULE_SETUP #line 294 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 81: YY_RULE_SETUP #line 295 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 82: YY_RULE_SETUP #line 296 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 83: YY_RULE_SETUP #line 297 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 84: YY_RULE_SETUP #line 298 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 85: YY_RULE_SETUP #line 299 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 86: YY_RULE_SETUP #line 300 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_INFRA_KEEP_PROBING) } YY_BREAK case 87: YY_RULE_SETUP #line 301 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 88: YY_RULE_SETUP #line 302 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 89: YY_RULE_SETUP #line 303 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 90: YY_RULE_SETUP #line 304 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_UDP_CONNECT) } YY_BREAK case 91: YY_RULE_SETUP #line 305 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 92: YY_RULE_SETUP #line 306 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 93: YY_RULE_SETUP #line 307 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 94: YY_RULE_SETUP #line 308 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 95: YY_RULE_SETUP #line 309 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 96: YY_RULE_SETUP #line 310 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 97: YY_RULE_SETUP #line 311 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 98: YY_RULE_SETUP #line 312 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 99: YY_RULE_SETUP #line 313 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 100: YY_RULE_SETUP #line 314 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 101: YY_RULE_SETUP #line 315 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 102: YY_RULE_SETUP #line 316 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 103: YY_RULE_SETUP #line 317 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 104: YY_RULE_SETUP #line 318 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 105: YY_RULE_SETUP #line 319 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 106: YY_RULE_SETUP #line 320 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 107: YY_RULE_SETUP #line 321 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 108: YY_RULE_SETUP #line 322 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 109: YY_RULE_SETUP #line 323 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 110: YY_RULE_SETUP #line 324 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 111: YY_RULE_SETUP #line 325 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 112: YY_RULE_SETUP #line 326 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 113: YY_RULE_SETUP #line 327 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 114: YY_RULE_SETUP #line 328 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 115: YY_RULE_SETUP #line 329 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 116: YY_RULE_SETUP #line 330 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 117: YY_RULE_SETUP #line 331 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 118: YY_RULE_SETUP #line 332 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 119: YY_RULE_SETUP #line 333 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 120: YY_RULE_SETUP #line 334 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 121: YY_RULE_SETUP #line 335 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 122: YY_RULE_SETUP #line 336 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_RPZ) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 123: YY_RULE_SETUP #line 337 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TAGS) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 124: YY_RULE_SETUP #line 338 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 125: YY_RULE_SETUP #line 339 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 126: YY_RULE_SETUP #line 340 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 127: YY_RULE_SETUP #line 341 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG_NAME) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 128: YY_RULE_SETUP #line 342 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 129: YY_RULE_SETUP #line 343 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 130: YY_RULE_SETUP #line 344 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 131: YY_RULE_SETUP #line 345 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 132: YY_RULE_SETUP #line 346 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 133: YY_RULE_SETUP #line 347 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 134: YY_RULE_SETUP #line 348 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 135: YY_RULE_SETUP #line 349 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 136: YY_RULE_SETUP #line 350 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 137: YY_RULE_SETUP #line 351 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 138: YY_RULE_SETUP #line 352 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 139: YY_RULE_SETUP #line 353 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 140: YY_RULE_SETUP #line 354 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 141: YY_RULE_SETUP #line 355 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 142: YY_RULE_SETUP #line 356 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 143: YY_RULE_SETUP #line 357 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 144: YY_RULE_SETUP #line 358 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 145: YY_RULE_SETUP #line 359 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 146: YY_RULE_SETUP #line 360 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 147: YY_RULE_SETUP #line 361 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 148: YY_RULE_SETUP #line 362 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 149: YY_RULE_SETUP #line 363 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 150: YY_RULE_SETUP #line 364 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 151: YY_RULE_SETUP #line 365 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 152: YY_RULE_SETUP #line 366 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 153: YY_RULE_SETUP #line 367 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 154: YY_RULE_SETUP #line 368 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 155: YY_RULE_SETUP #line 369 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 156: YY_RULE_SETUP #line 370 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 157: YY_RULE_SETUP #line 371 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 158: YY_RULE_SETUP #line 372 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 159: YY_RULE_SETUP #line 373 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 160: YY_RULE_SETUP #line 374 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 161: YY_RULE_SETUP #line 375 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 162: YY_RULE_SETUP #line 376 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 163: YY_RULE_SETUP #line 377 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 164: YY_RULE_SETUP #line 378 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 165: YY_RULE_SETUP #line 379 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 166: YY_RULE_SETUP #line 380 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 167: YY_RULE_SETUP #line 381 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 168: YY_RULE_SETUP #line 382 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 169: YY_RULE_SETUP #line 383 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 170: YY_RULE_SETUP #line 384 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 171: YY_RULE_SETUP #line 385 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 172: YY_RULE_SETUP #line 386 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 173: YY_RULE_SETUP #line 387 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 174: YY_RULE_SETUP #line 388 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 175: YY_RULE_SETUP #line 389 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 176: YY_RULE_SETUP #line 390 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 177: YY_RULE_SETUP #line 391 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 178: YY_RULE_SETUP #line 392 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 179: YY_RULE_SETUP #line 393 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 180: YY_RULE_SETUP #line 394 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 181: YY_RULE_SETUP #line 395 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 182: YY_RULE_SETUP #line 396 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 183: YY_RULE_SETUP #line 397 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 184: YY_RULE_SETUP #line 398 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 185: YY_RULE_SETUP -#line 400 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 399 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 186: YY_RULE_SETUP -#line 401 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 400 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 187: YY_RULE_SETUP -#line 402 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +#line 401 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 188: YY_RULE_SETUP #line 403 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 189: YY_RULE_SETUP #line 404 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 190: YY_RULE_SETUP #line 405 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 191: YY_RULE_SETUP #line 406 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 192: YY_RULE_SETUP #line 407 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 193: YY_RULE_SETUP #line 408 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 194: YY_RULE_SETUP #line 409 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 195: YY_RULE_SETUP #line 410 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 196: YY_RULE_SETUP #line 411 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 197: YY_RULE_SETUP #line 412 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 198: YY_RULE_SETUP #line 413 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 199: YY_RULE_SETUP #line 414 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 200: YY_RULE_SETUP #line 415 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 201: YY_RULE_SETUP #line 416 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 202: YY_RULE_SETUP #line 417 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 203: YY_RULE_SETUP #line 418 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 204: YY_RULE_SETUP #line 419 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 205: YY_RULE_SETUP #line 420 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 206: YY_RULE_SETUP #line 421 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 244: YY_RULE_SETUP -#line 460 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } +#line 459 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 245: YY_RULE_SETUP -#line 462 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 460 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 246: YY_RULE_SETUP -#line 463 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +#line 461 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 247: YY_RULE_SETUP -#line 464 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +#line 463 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 248: YY_RULE_SETUP #line 465 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 249: YY_RULE_SETUP #line 466 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 250: YY_RULE_SETUP -#line 468 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 467 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 251: YY_RULE_SETUP -#line 470 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } +#line 468 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 252: YY_RULE_SETUP -#line 472 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 469 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 253: YY_RULE_SETUP -#line 474 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 471 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 254: YY_RULE_SETUP -#line 476 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 473 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 255: YY_RULE_SETUP -#line 478 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 475 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 256: YY_RULE_SETUP -#line 479 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 477 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 257: YY_RULE_SETUP -#line 480 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +#line 479 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 258: YY_RULE_SETUP #line 481 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 259: YY_RULE_SETUP #line 482 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 260: YY_RULE_SETUP #line 483 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 261: YY_RULE_SETUP #line 484 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 262: YY_RULE_SETUP #line 485 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 263: YY_RULE_SETUP #line 486 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 264: YY_RULE_SETUP #line 487 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 265: YY_RULE_SETUP #line 488 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 266: YY_RULE_SETUP #line 489 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 267: YY_RULE_SETUP #line 490 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 268: YY_RULE_SETUP #line 491 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 269: YY_RULE_SETUP #line 492 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 270: YY_RULE_SETUP #line 493 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 271: YY_RULE_SETUP #line 494 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 272: YY_RULE_SETUP #line 495 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 273: YY_RULE_SETUP #line 496 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 274: YY_RULE_SETUP #line 497 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 275: YY_RULE_SETUP #line 498 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 276: YY_RULE_SETUP #line 499 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 277: YY_RULE_SETUP #line 500 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 278: YY_RULE_SETUP #line 501 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 279: YY_RULE_SETUP #line 502 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 280: YY_RULE_SETUP #line 503 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 281: YY_RULE_SETUP #line 504 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 282: YY_RULE_SETUP -#line 506 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 505 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 283: YY_RULE_SETUP -#line 508 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 506 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 284: YY_RULE_SETUP -#line 509 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 507 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 285: YY_RULE_SETUP -#line 510 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +#line 509 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 286: YY_RULE_SETUP #line 511 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 287: YY_RULE_SETUP #line 512 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 288: YY_RULE_SETUP #line 513 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 289: YY_RULE_SETUP #line 514 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 290: YY_RULE_SETUP #line 515 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 291: YY_RULE_SETUP #line 516 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 292: YY_RULE_SETUP #line 517 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 293: YY_RULE_SETUP #line 518 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 294: YY_RULE_SETUP #line 519 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 295: YY_RULE_SETUP #line 520 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 296: YY_RULE_SETUP #line 521 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 297: YY_RULE_SETUP #line 522 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 298: YY_RULE_SETUP #line 523 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 299: YY_RULE_SETUP #line 524 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 300: YY_RULE_SETUP #line 525 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 301: YY_RULE_SETUP #line 526 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 302: YY_RULE_SETUP #line 527 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 303: YY_RULE_SETUP #line 528 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 304: YY_RULE_SETUP #line 529 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_TAG) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 305: YY_RULE_SETUP #line 530 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 306: -/* rule 306 can match eol */ YY_RULE_SETUP #line 531 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } YY_BREAK -/* Quoted strings. Strip leading and ending quotes */ case 307: YY_RULE_SETUP +#line 532 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } + YY_BREAK +case 308: +YY_RULE_SETUP +#line 533 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } + YY_BREAK +case 309: +/* rule 309 can match eol */ +YY_RULE_SETUP #line 534 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +/* Quoted strings. Strip leading and ending quotes */ +case 310: +YY_RULE_SETUP +#line 537 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 535 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 538 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 308: +case 311: YY_RULE_SETUP -#line 540 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 543 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 309: -/* rule 309 can match eol */ +case 312: +/* rule 312 can match eol */ YY_RULE_SETUP -#line 541 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 544 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 310: +case 313: YY_RULE_SETUP -#line 543 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 546 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5002,34 +5044,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 311: +case 314: YY_RULE_SETUP -#line 555 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 558 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 556 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 559 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 312: +case 315: YY_RULE_SETUP -#line 561 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 564 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 313: -/* rule 313 can match eol */ +case 316: +/* rule 316 can match eol */ YY_RULE_SETUP -#line 562 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 565 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 314: +case 317: YY_RULE_SETUP -#line 564 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 567 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5042,38 +5084,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 315: +case 318: YY_RULE_SETUP -#line 576 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 579 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 578 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 581 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 316: +case 319: YY_RULE_SETUP -#line 582 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 585 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 317: -/* rule 317 can match eol */ +case 320: +/* rule 320 can match eol */ YY_RULE_SETUP -#line 583 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 586 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 318: +case 321: YY_RULE_SETUP -#line 584 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 587 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 319: +case 322: YY_RULE_SETUP -#line 585 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 588 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5081,27 +5123,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 590 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 593 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 320: +case 323: YY_RULE_SETUP -#line 594 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 597 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 321: -/* rule 321 can match eol */ +case 324: +/* rule 324 can match eol */ YY_RULE_SETUP -#line 595 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 598 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 322: +case 325: YY_RULE_SETUP -#line 597 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 600 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5111,7 +5153,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 603 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 606 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5126,39 +5168,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 323: +case 326: YY_RULE_SETUP -#line 617 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 620 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 620 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 623 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 324: +case 327: YY_RULE_SETUP -#line 624 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 627 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK -case 325: -/* rule 325 can match eol */ +case 328: +/* rule 328 can match eol */ YY_RULE_SETUP -#line 625 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 628 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK -case 326: +case 329: YY_RULE_SETUP -#line 626 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 629 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } YY_BREAK -case 327: +case 330: YY_RULE_SETUP -#line 627 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 630 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5167,29 +5209,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 633 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 636 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 328: +case 331: YY_RULE_SETUP -#line 637 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 640 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } YY_BREAK -case 329: -/* rule 329 can match eol */ +case 332: +/* rule 332 can match eol */ YY_RULE_SETUP -#line 638 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 641 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 330: +case 333: YY_RULE_SETUP -#line 642 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 645 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5198,33 +5240,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 331: +case 334: YY_RULE_SETUP -#line 650 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 653 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 332: +case 335: YY_RULE_SETUP -#line 654 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 657 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 333: +case 336: YY_RULE_SETUP -#line 658 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 661 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 334: +case 337: YY_RULE_SETUP -#line 662 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 665 "/usr/src/usr.sbin/unbound/util/configlexer.lex" ECHO; YY_BREAK -#line 5226 "<stdout>" +#line 5268 "<stdout>" case YY_END_OF_BUFFER: { @@ -5517,7 +5559,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 >= 3253 ) + if ( yy_current_state >= 3292 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -5545,11 +5587,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3253 ) + if ( yy_current_state >= 3292 ) 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 == 3252); + yy_is_jam = (yy_current_state == 3291); return yy_is_jam ? 0 : yy_current_state; } @@ -6182,7 +6224,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 662 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 665 "/usr/src/usr.sbin/unbound/util/configlexer.lex" diff --git a/sbin/unwind/libunbound/util/configlexer.lex b/sbin/unwind/libunbound/util/configlexer.lex index ea7c1cf7273..55c584a76c1 100644 --- a/sbin/unwind/libunbound/util/configlexer.lex +++ b/sbin/unwind/libunbound/util/configlexer.lex @@ -262,6 +262,7 @@ http-max-streams{COLON} { YDVAR(1, VAR_HTTP_MAX_STREAMS) } http-query-buffer-size{COLON} { YDVAR(1, VAR_HTTP_QUERY_BUFFER_SIZE) } http-response-buffer-size{COLON} { YDVAR(1, VAR_HTTP_RESPONSE_BUFFER_SIZE) } http-nodelay{COLON} { YDVAR(1, VAR_HTTP_NODELAY) } +http-notls-downstream{COLON} { YDVAR(1, VAR_HTTP_NOTLS_DOWNSTREAM) } use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) } do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) } interface{COLON} { YDVAR(1, VAR_INTERFACE) } @@ -296,9 +297,11 @@ infra-cache-slabs{COLON} { YDVAR(1, VAR_INFRA_CACHE_SLABS) } infra-cache-numhosts{COLON} { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } infra-cache-lame-size{COLON} { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } infra-cache-min-rtt{COLON} { YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +infra-keep-probing{COLON} { YDVAR(1, VAR_INFRA_KEEP_PROBING) } num-queries-per-thread{COLON} { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } jostle-timeout{COLON} { YDVAR(1, VAR_JOSTLE_TIMEOUT) } delay-close{COLON} { YDVAR(1, VAR_DELAY_CLOSE) } +udp-connect{COLON} { YDVAR(1, VAR_UDP_CONNECT) } target-fetch-policy{COLON} { YDVAR(1, VAR_TARGET_FETCH_POLICY) } harden-short-bufsize{COLON} { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } harden-large-queries{COLON} { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } @@ -526,8 +529,8 @@ name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) } name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) } udp-upstream-without-downstream{COLON} { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } tcp-connection-limit{COLON} { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } -edns-client-tag{COLON} { YDVAR(2, VAR_EDNS_CLIENT_TAG) } -edns-client-tag-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) } +edns-client-string{COLON} { YDVAR(2, VAR_EDNS_CLIENT_STRING) } +edns-client-string-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } <INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/sbin/unwind/libunbound/util/configparser.h b/sbin/unwind/libunbound/util/configparser.h index dc497eb2ae0..848b093ae39 100644 --- a/sbin/unwind/libunbound/util/configparser.h +++ b/sbin/unwind/libunbound/util/configparser.h @@ -143,158 +143,161 @@ #define VAR_HTTP_QUERY_BUFFER_SIZE 399 #define VAR_HTTP_RESPONSE_BUFFER_SIZE 400 #define VAR_HTTP_NODELAY 401 -#define VAR_STUB_FIRST 402 -#define VAR_MINIMAL_RESPONSES 403 -#define VAR_RRSET_ROUNDROBIN 404 -#define VAR_MAX_UDP_SIZE 405 -#define VAR_DELAY_CLOSE 406 -#define VAR_UNBLOCK_LAN_ZONES 407 -#define VAR_INSECURE_LAN_ZONES 408 -#define VAR_INFRA_CACHE_MIN_RTT 409 -#define VAR_DNS64_PREFIX 410 -#define VAR_DNS64_SYNTHALL 411 -#define VAR_DNS64_IGNORE_AAAA 412 -#define VAR_DNSTAP 413 -#define VAR_DNSTAP_ENABLE 414 -#define VAR_DNSTAP_SOCKET_PATH 415 -#define VAR_DNSTAP_IP 416 -#define VAR_DNSTAP_TLS 417 -#define VAR_DNSTAP_TLS_SERVER_NAME 418 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 419 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 420 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 421 -#define VAR_DNSTAP_SEND_IDENTITY 422 -#define VAR_DNSTAP_SEND_VERSION 423 -#define VAR_DNSTAP_BIDIRECTIONAL 424 -#define VAR_DNSTAP_IDENTITY 425 -#define VAR_DNSTAP_VERSION 426 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 427 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 428 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 429 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 430 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 431 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 432 -#define VAR_RESPONSE_IP_TAG 433 -#define VAR_RESPONSE_IP 434 -#define VAR_RESPONSE_IP_DATA 435 -#define VAR_HARDEN_ALGO_DOWNGRADE 436 -#define VAR_IP_TRANSPARENT 437 -#define VAR_IP_DSCP 438 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 439 -#define VAR_IP_RATELIMIT 440 -#define VAR_IP_RATELIMIT_SLABS 441 -#define VAR_IP_RATELIMIT_SIZE 442 -#define VAR_RATELIMIT 443 -#define VAR_RATELIMIT_SLABS 444 -#define VAR_RATELIMIT_SIZE 445 -#define VAR_RATELIMIT_FOR_DOMAIN 446 -#define VAR_RATELIMIT_BELOW_DOMAIN 447 -#define VAR_IP_RATELIMIT_FACTOR 448 -#define VAR_RATELIMIT_FACTOR 449 -#define VAR_SEND_CLIENT_SUBNET 450 -#define VAR_CLIENT_SUBNET_ZONE 451 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 452 -#define VAR_CLIENT_SUBNET_OPCODE 453 -#define VAR_MAX_CLIENT_SUBNET_IPV4 454 -#define VAR_MAX_CLIENT_SUBNET_IPV6 455 -#define VAR_MIN_CLIENT_SUBNET_IPV4 456 -#define VAR_MIN_CLIENT_SUBNET_IPV6 457 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 458 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 459 -#define VAR_CAPS_WHITELIST 460 -#define VAR_CACHE_MAX_NEGATIVE_TTL 461 -#define VAR_PERMIT_SMALL_HOLDDOWN 462 -#define VAR_QNAME_MINIMISATION 463 -#define VAR_QNAME_MINIMISATION_STRICT 464 -#define VAR_IP_FREEBIND 465 -#define VAR_DEFINE_TAG 466 -#define VAR_LOCAL_ZONE_TAG 467 -#define VAR_ACCESS_CONTROL_TAG 468 -#define VAR_LOCAL_ZONE_OVERRIDE 469 -#define VAR_ACCESS_CONTROL_TAG_ACTION 470 -#define VAR_ACCESS_CONTROL_TAG_DATA 471 -#define VAR_VIEW 472 -#define VAR_ACCESS_CONTROL_VIEW 473 -#define VAR_VIEW_FIRST 474 -#define VAR_SERVE_EXPIRED 475 -#define VAR_SERVE_EXPIRED_TTL 476 -#define VAR_SERVE_EXPIRED_TTL_RESET 477 -#define VAR_SERVE_EXPIRED_REPLY_TTL 478 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 479 -#define VAR_FAKE_DSA 480 -#define VAR_FAKE_SHA1 481 -#define VAR_LOG_IDENTITY 482 -#define VAR_HIDE_TRUSTANCHOR 483 -#define VAR_TRUST_ANCHOR_SIGNALING 484 -#define VAR_AGGRESSIVE_NSEC 485 -#define VAR_USE_SYSTEMD 486 -#define VAR_SHM_ENABLE 487 -#define VAR_SHM_KEY 488 -#define VAR_ROOT_KEY_SENTINEL 489 -#define VAR_DNSCRYPT 490 -#define VAR_DNSCRYPT_ENABLE 491 -#define VAR_DNSCRYPT_PORT 492 -#define VAR_DNSCRYPT_PROVIDER 493 -#define VAR_DNSCRYPT_SECRET_KEY 494 -#define VAR_DNSCRYPT_PROVIDER_CERT 495 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 496 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 497 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 498 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 499 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 500 -#define VAR_IPSECMOD_ENABLED 501 -#define VAR_IPSECMOD_HOOK 502 -#define VAR_IPSECMOD_IGNORE_BOGUS 503 -#define VAR_IPSECMOD_MAX_TTL 504 -#define VAR_IPSECMOD_WHITELIST 505 -#define VAR_IPSECMOD_STRICT 506 -#define VAR_CACHEDB 507 -#define VAR_CACHEDB_BACKEND 508 -#define VAR_CACHEDB_SECRETSEED 509 -#define VAR_CACHEDB_REDISHOST 510 -#define VAR_CACHEDB_REDISPORT 511 -#define VAR_CACHEDB_REDISTIMEOUT 512 -#define VAR_CACHEDB_REDISEXPIRERECORDS 513 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 514 -#define VAR_FOR_UPSTREAM 515 -#define VAR_AUTH_ZONE 516 -#define VAR_ZONEFILE 517 -#define VAR_MASTER 518 -#define VAR_URL 519 -#define VAR_FOR_DOWNSTREAM 520 -#define VAR_FALLBACK_ENABLED 521 -#define VAR_TLS_ADDITIONAL_PORT 522 -#define VAR_LOW_RTT 523 -#define VAR_LOW_RTT_PERMIL 524 -#define VAR_FAST_SERVER_PERMIL 525 -#define VAR_FAST_SERVER_NUM 526 -#define VAR_ALLOW_NOTIFY 527 -#define VAR_TLS_WIN_CERT 528 -#define VAR_TCP_CONNECTION_LIMIT 529 -#define VAR_FORWARD_NO_CACHE 530 -#define VAR_STUB_NO_CACHE 531 -#define VAR_LOG_SERVFAIL 532 -#define VAR_DENY_ANY 533 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 534 -#define VAR_LOG_TAG_QUERYREPLY 535 -#define VAR_STREAM_WAIT_SIZE 536 -#define VAR_TLS_CIPHERS 537 -#define VAR_TLS_CIPHERSUITES 538 -#define VAR_TLS_USE_SNI 539 -#define VAR_IPSET 540 -#define VAR_IPSET_NAME_V4 541 -#define VAR_IPSET_NAME_V6 542 -#define VAR_TLS_SESSION_TICKET_KEYS 543 -#define VAR_RPZ 544 -#define VAR_TAGS 545 -#define VAR_RPZ_ACTION_OVERRIDE 546 -#define VAR_RPZ_CNAME_OVERRIDE 547 -#define VAR_RPZ_LOG 548 -#define VAR_RPZ_LOG_NAME 549 -#define VAR_DYNLIB 550 -#define VAR_DYNLIB_FILE 551 -#define VAR_EDNS_CLIENT_TAG 552 -#define VAR_EDNS_CLIENT_TAG_OPCODE 553 +#define VAR_HTTP_NOTLS_DOWNSTREAM 402 +#define VAR_STUB_FIRST 403 +#define VAR_MINIMAL_RESPONSES 404 +#define VAR_RRSET_ROUNDROBIN 405 +#define VAR_MAX_UDP_SIZE 406 +#define VAR_DELAY_CLOSE 407 +#define VAR_UDP_CONNECT 408 +#define VAR_UNBLOCK_LAN_ZONES 409 +#define VAR_INSECURE_LAN_ZONES 410 +#define VAR_INFRA_CACHE_MIN_RTT 411 +#define VAR_INFRA_KEEP_PROBING 412 +#define VAR_DNS64_PREFIX 413 +#define VAR_DNS64_SYNTHALL 414 +#define VAR_DNS64_IGNORE_AAAA 415 +#define VAR_DNSTAP 416 +#define VAR_DNSTAP_ENABLE 417 +#define VAR_DNSTAP_SOCKET_PATH 418 +#define VAR_DNSTAP_IP 419 +#define VAR_DNSTAP_TLS 420 +#define VAR_DNSTAP_TLS_SERVER_NAME 421 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 422 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 423 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 424 +#define VAR_DNSTAP_SEND_IDENTITY 425 +#define VAR_DNSTAP_SEND_VERSION 426 +#define VAR_DNSTAP_BIDIRECTIONAL 427 +#define VAR_DNSTAP_IDENTITY 428 +#define VAR_DNSTAP_VERSION 429 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 430 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 431 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 432 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 433 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 434 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 435 +#define VAR_RESPONSE_IP_TAG 436 +#define VAR_RESPONSE_IP 437 +#define VAR_RESPONSE_IP_DATA 438 +#define VAR_HARDEN_ALGO_DOWNGRADE 439 +#define VAR_IP_TRANSPARENT 440 +#define VAR_IP_DSCP 441 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 442 +#define VAR_IP_RATELIMIT 443 +#define VAR_IP_RATELIMIT_SLABS 444 +#define VAR_IP_RATELIMIT_SIZE 445 +#define VAR_RATELIMIT 446 +#define VAR_RATELIMIT_SLABS 447 +#define VAR_RATELIMIT_SIZE 448 +#define VAR_RATELIMIT_FOR_DOMAIN 449 +#define VAR_RATELIMIT_BELOW_DOMAIN 450 +#define VAR_IP_RATELIMIT_FACTOR 451 +#define VAR_RATELIMIT_FACTOR 452 +#define VAR_SEND_CLIENT_SUBNET 453 +#define VAR_CLIENT_SUBNET_ZONE 454 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 455 +#define VAR_CLIENT_SUBNET_OPCODE 456 +#define VAR_MAX_CLIENT_SUBNET_IPV4 457 +#define VAR_MAX_CLIENT_SUBNET_IPV6 458 +#define VAR_MIN_CLIENT_SUBNET_IPV4 459 +#define VAR_MIN_CLIENT_SUBNET_IPV6 460 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 461 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 462 +#define VAR_CAPS_WHITELIST 463 +#define VAR_CACHE_MAX_NEGATIVE_TTL 464 +#define VAR_PERMIT_SMALL_HOLDDOWN 465 +#define VAR_QNAME_MINIMISATION 466 +#define VAR_QNAME_MINIMISATION_STRICT 467 +#define VAR_IP_FREEBIND 468 +#define VAR_DEFINE_TAG 469 +#define VAR_LOCAL_ZONE_TAG 470 +#define VAR_ACCESS_CONTROL_TAG 471 +#define VAR_LOCAL_ZONE_OVERRIDE 472 +#define VAR_ACCESS_CONTROL_TAG_ACTION 473 +#define VAR_ACCESS_CONTROL_TAG_DATA 474 +#define VAR_VIEW 475 +#define VAR_ACCESS_CONTROL_VIEW 476 +#define VAR_VIEW_FIRST 477 +#define VAR_SERVE_EXPIRED 478 +#define VAR_SERVE_EXPIRED_TTL 479 +#define VAR_SERVE_EXPIRED_TTL_RESET 480 +#define VAR_SERVE_EXPIRED_REPLY_TTL 481 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 482 +#define VAR_FAKE_DSA 483 +#define VAR_FAKE_SHA1 484 +#define VAR_LOG_IDENTITY 485 +#define VAR_HIDE_TRUSTANCHOR 486 +#define VAR_TRUST_ANCHOR_SIGNALING 487 +#define VAR_AGGRESSIVE_NSEC 488 +#define VAR_USE_SYSTEMD 489 +#define VAR_SHM_ENABLE 490 +#define VAR_SHM_KEY 491 +#define VAR_ROOT_KEY_SENTINEL 492 +#define VAR_DNSCRYPT 493 +#define VAR_DNSCRYPT_ENABLE 494 +#define VAR_DNSCRYPT_PORT 495 +#define VAR_DNSCRYPT_PROVIDER 496 +#define VAR_DNSCRYPT_SECRET_KEY 497 +#define VAR_DNSCRYPT_PROVIDER_CERT 498 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 499 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 500 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 501 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 502 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 503 +#define VAR_IPSECMOD_ENABLED 504 +#define VAR_IPSECMOD_HOOK 505 +#define VAR_IPSECMOD_IGNORE_BOGUS 506 +#define VAR_IPSECMOD_MAX_TTL 507 +#define VAR_IPSECMOD_WHITELIST 508 +#define VAR_IPSECMOD_STRICT 509 +#define VAR_CACHEDB 510 +#define VAR_CACHEDB_BACKEND 511 +#define VAR_CACHEDB_SECRETSEED 512 +#define VAR_CACHEDB_REDISHOST 513 +#define VAR_CACHEDB_REDISPORT 514 +#define VAR_CACHEDB_REDISTIMEOUT 515 +#define VAR_CACHEDB_REDISEXPIRERECORDS 516 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 517 +#define VAR_FOR_UPSTREAM 518 +#define VAR_AUTH_ZONE 519 +#define VAR_ZONEFILE 520 +#define VAR_MASTER 521 +#define VAR_URL 522 +#define VAR_FOR_DOWNSTREAM 523 +#define VAR_FALLBACK_ENABLED 524 +#define VAR_TLS_ADDITIONAL_PORT 525 +#define VAR_LOW_RTT 526 +#define VAR_LOW_RTT_PERMIL 527 +#define VAR_FAST_SERVER_PERMIL 528 +#define VAR_FAST_SERVER_NUM 529 +#define VAR_ALLOW_NOTIFY 530 +#define VAR_TLS_WIN_CERT 531 +#define VAR_TCP_CONNECTION_LIMIT 532 +#define VAR_FORWARD_NO_CACHE 533 +#define VAR_STUB_NO_CACHE 534 +#define VAR_LOG_SERVFAIL 535 +#define VAR_DENY_ANY 536 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 537 +#define VAR_LOG_TAG_QUERYREPLY 538 +#define VAR_STREAM_WAIT_SIZE 539 +#define VAR_TLS_CIPHERS 540 +#define VAR_TLS_CIPHERSUITES 541 +#define VAR_TLS_USE_SNI 542 +#define VAR_IPSET 543 +#define VAR_IPSET_NAME_V4 544 +#define VAR_IPSET_NAME_V6 545 +#define VAR_TLS_SESSION_TICKET_KEYS 546 +#define VAR_RPZ 547 +#define VAR_TAGS 548 +#define VAR_RPZ_ACTION_OVERRIDE 549 +#define VAR_RPZ_CNAME_OVERRIDE 550 +#define VAR_RPZ_LOG 551 +#define VAR_RPZ_LOG_NAME 552 +#define VAR_DYNLIB 553 +#define VAR_DYNLIB_FILE 554 +#define VAR_EDNS_CLIENT_STRING 555 +#define VAR_EDNS_CLIENT_STRING_OPCODE 556 #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { diff --git a/sbin/unwind/libunbound/util/configparser.y b/sbin/unwind/libunbound/util/configparser.y index 43a886f2403..4d6b5e3fba3 100644 --- a/sbin/unwind/libunbound/util/configparser.y +++ b/sbin/unwind/libunbound/util/configparser.y @@ -114,11 +114,11 @@ extern struct config_parser_state* cfg_parser; %token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM VAR_TLS_CERT_BUNDLE %token VAR_HTTPS_PORT VAR_HTTP_ENDPOINT VAR_HTTP_MAX_STREAMS %token VAR_HTTP_QUERY_BUFFER_SIZE VAR_HTTP_RESPONSE_BUFFER_SIZE -%token VAR_HTTP_NODELAY +%token VAR_HTTP_NODELAY VAR_HTTP_NOTLS_DOWNSTREAM %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN -%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE +%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UDP_CONNECT %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES -%token VAR_INFRA_CACHE_MIN_RTT +%token VAR_INFRA_CACHE_MIN_RTT VAR_INFRA_KEEP_PROBING %token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL VAR_DNS64_IGNORE_AAAA %token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH VAR_DNSTAP_IP %token VAR_DNSTAP_TLS VAR_DNSTAP_TLS_SERVER_NAME VAR_DNSTAP_TLS_CERT_BUNDLE @@ -178,7 +178,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME -%token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_TAG VAR_EDNS_CLIENT_TAG_OPCODE +%token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING +%token VAR_EDNS_CLIENT_STRING_OPCODE %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -249,14 +250,14 @@ content_server: server_num_threads | server_verbosity | server_port | server_ssl_service_key | server_ssl_service_pem | server_ssl_port | server_https_port | server_http_endpoint | server_http_max_streams | server_http_query_buffer_size | server_http_response_buffer_size | - server_http_nodelay | + server_http_nodelay | server_http_notls_downstream | server_minimal_responses | server_rrset_roundrobin | server_max_udp_size | - server_so_reuseport | server_delay_close | + server_so_reuseport | server_delay_close | server_udp_connect | server_unblock_lan_zones | server_insecure_lan_zones | server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa | server_infra_cache_min_rtt | server_harden_algo_downgrade | server_ip_transparent | server_ip_ratelimit | server_ratelimit | - server_ip_dscp | + server_ip_dscp | server_infra_keep_probing | server_ip_ratelimit_slabs | server_ratelimit_slabs | server_ip_ratelimit_size | server_ratelimit_size | server_ratelimit_for_domain | @@ -291,8 +292,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_unknown_server_time_limit | server_log_tag_queryreply | server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites | server_tls_session_ticket_keys | - server_tls_use_sni | server_edns_client_tag | - server_edns_client_tag_opcode + server_tls_use_sni | server_edns_client_string | + server_edns_client_string_opcode ; stubstart: VAR_STUB_ZONE { @@ -982,6 +983,7 @@ server_https_port: VAR_HTTPS_PORT STRING_ARG if(atoi($2) == 0) yyerror("port number expected"); else cfg_parser->cfg->https_port = atoi($2); + free($2); }; server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG { @@ -1030,6 +1032,14 @@ server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG yyerror("expected yes or no."); else cfg_parser->cfg->http_nodelay = (strcmp($2, "yes")==0); free($2); + } +server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG + { + OUTYY(("P(server_http_notls_downstream:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->http_notls_downstream = (strcmp($2, "yes")==0); + free($2); }; server_use_systemd: VAR_USE_SYSTEMD STRING_ARG { @@ -1434,6 +1444,15 @@ server_delay_close: VAR_DELAY_CLOSE STRING_ARG free($2); } ; +server_udp_connect: VAR_UDP_CONNECT STRING_ARG + { + OUTYY(("P(server_udp_connect:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->udp_connect = (strcmp($2, "yes")==0); + free($2); + } + ; server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG { OUTYY(("P(server_unblock_lan_zones:%s)\n", $2)); @@ -1531,6 +1550,16 @@ server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG free($2); } ; +server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG + { + OUTYY(("P(server_infra_keep_probing:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->infra_keep_probing = + (strcmp($2, "yes")==0); + free($2); + } + ; server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG { OUTYY(("P(server_target_fetch_policy:%s)\n", $2)); @@ -2465,29 +2494,24 @@ server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG #endif } ; -server_edns_client_tag: VAR_EDNS_CLIENT_TAG STRING_ARG STRING_ARG +server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG { - int tag_data; - OUTYY(("P(server_edns_client_tag:%s %s)\n", $2, $3)); - tag_data = atoi($3); - if(tag_data > 65535 || tag_data < 0 || - (tag_data == 0 && (strlen($3) != 1 || $3[0] != '0'))) - yyerror("edns-client-tag data invalid, needs to be a " - "number from 0 to 65535"); + OUTYY(("P(server_edns_client_string:%s %s)\n", $2, $3)); if(!cfg_str2list_insert( - &cfg_parser->cfg->edns_client_tags, $2, $3)) + &cfg_parser->cfg->edns_client_strings, $2, $3)) fatal_exit("out of memory adding " - "edns-client-tag"); + "edns-client-string"); } ; -server_edns_client_tag_opcode: VAR_EDNS_CLIENT_TAG_OPCODE STRING_ARG +server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG { - OUTYY(("P(edns_client_tag_opcode:%s)\n", $2)); + OUTYY(("P(edns_client_string_opcode:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("option code expected"); else if(atoi($2) > 65535 || atoi($2) < 0) yyerror("option code must be in interval [0, 65535]"); - else cfg_parser->cfg->edns_client_tag_opcode = atoi($2); + else cfg_parser->cfg->edns_client_string_opcode = atoi($2); + free($2); } ; diff --git a/sbin/unwind/libunbound/util/data/msgencode.c b/sbin/unwind/libunbound/util/data/msgencode.c index be69f628a50..1746cfbb8fa 100644 --- a/sbin/unwind/libunbound/util/data/msgencode.c +++ b/sbin/unwind/libunbound/util/data/msgencode.c @@ -624,6 +624,9 @@ positive_answer(struct reply_info* rep, uint16_t qtype) { for(i=0;i<rep->an_numrrsets; i++) { if(ntohs(rep->rrsets[i]->rk.type) == qtype) { + /* for priming queries, type NS, include addresses */ + if(qtype == LDNS_RR_TYPE_NS) + return 0; /* in case it is a wildcard with DNSSEC, there will * be NSEC/NSEC3 records in the authority section * that we cannot remove */ diff --git a/sbin/unwind/libunbound/util/data/msgreply.h b/sbin/unwind/libunbound/util/data/msgreply.h index 8d75f9b12f3..385780268a3 100644 --- a/sbin/unwind/libunbound/util/data/msgreply.h +++ b/sbin/unwind/libunbound/util/data/msgreply.h @@ -552,7 +552,7 @@ struct edns_option* edns_opt_list_find(struct edns_option* list, uint16_t code); * @param rep: Reply info. Could be NULL. * @param rcode: return code. * @param edns: edns data of the reply. - * @param repinfo: comm_reply. NULL. + * @param repinfo: comm_reply. Reply information for a communication point. * @param region: region to store data. * @return false on failure (a callback function returned an error). */ diff --git a/sbin/unwind/libunbound/util/edns.c b/sbin/unwind/libunbound/util/edns.c index c83a4a545fe..ddbb46e892c 100644 --- a/sbin/unwind/libunbound/util/edns.c +++ b/sbin/unwind/libunbound/util/edns.c @@ -48,81 +48,84 @@ #include "util/data/msgparse.h" #include "util/data/msgreply.h" -struct edns_tags* edns_tags_create(void) +struct edns_strings* edns_strings_create(void) { - struct edns_tags* edns_tags = calloc(1, sizeof(struct edns_tags)); - if(!edns_tags) + struct edns_strings* edns_strings = calloc(1, + sizeof(struct edns_strings)); + if(!edns_strings) return NULL; - if(!(edns_tags->region = regional_create())) { - edns_tags_delete(edns_tags); + if(!(edns_strings->region = regional_create())) { + edns_strings_delete(edns_strings); return NULL; } - return edns_tags; + return edns_strings; } -void edns_tags_delete(struct edns_tags* edns_tags) +void edns_strings_delete(struct edns_strings* edns_strings) { - if(!edns_tags) + if(!edns_strings) return; - regional_destroy(edns_tags->region); - free(edns_tags); + regional_destroy(edns_strings->region); + free(edns_strings); } static int -edns_tags_client_insert(struct edns_tags* edns_tags, +edns_strings_client_insert(struct edns_strings* edns_strings, struct sockaddr_storage* addr, socklen_t addrlen, int net, - uint16_t tag_data) + const char* string) { - struct edns_tag_addr* eta = regional_alloc_zero(edns_tags->region, - sizeof(struct edns_tag_addr)); - if(!eta) + struct edns_string_addr* esa = regional_alloc_zero(edns_strings->region, + sizeof(struct edns_string_addr)); + if(!esa) return 0; - eta->tag_data = tag_data; - if(!addr_tree_insert(&edns_tags->client_tags, &eta->node, addr, addrlen, - net)) { - verbose(VERB_QUERY, "duplicate EDNS client tag ignored."); + esa->string_len = strlen(string); + esa->string = regional_alloc_init(edns_strings->region, string, + esa->string_len); + if(!esa->string) + return 0; + if(!addr_tree_insert(&edns_strings->client_strings, &esa->node, addr, + addrlen, net)) { + verbose(VERB_QUERY, "duplicate EDNS client string ignored."); } return 1; } -int edns_tags_apply_cfg(struct edns_tags* edns_tags, +int edns_strings_apply_cfg(struct edns_strings* edns_strings, struct config_file* config) { struct config_str2list* c; - regional_free_all(edns_tags->region); - addr_tree_init(&edns_tags->client_tags); + regional_free_all(edns_strings->region); + addr_tree_init(&edns_strings->client_strings); - for(c=config->edns_client_tags; c; c=c->next) { + for(c=config->edns_client_strings; c; c=c->next) { struct sockaddr_storage addr; socklen_t addrlen; int net; - uint16_t tag_data; log_assert(c->str && c->str2); if(!netblockstrtoaddr(c->str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { - log_err("cannot parse EDNS client tag IP netblock: %s", - c->str); + log_err("cannot parse EDNS client string IP netblock: " + "%s", c->str); return 0; } - tag_data = atoi(c->str2); /* validated in config parser */ - if(!edns_tags_client_insert(edns_tags, &addr, addrlen, net, - tag_data)) { - log_err("out of memory while adding EDNS tags"); + if(!edns_strings_client_insert(edns_strings, &addr, addrlen, + net, c->str2)) { + log_err("out of memory while adding EDNS strings"); return 0; } } - edns_tags->client_tag_opcode = config->edns_client_tag_opcode; + edns_strings->client_string_opcode = config->edns_client_string_opcode; - addr_tree_init_parents(&edns_tags->client_tags); + addr_tree_init_parents(&edns_strings->client_strings); return 1; } -struct edns_tag_addr* -edns_tag_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, +struct edns_string_addr* +edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen) { - return (struct edns_tag_addr*)addr_tree_lookup(tree, addr, addrlen); + return (struct edns_string_addr*)addr_tree_lookup(tree, addr, addrlen); } static int edns_keepalive(struct edns_data* edns_out, struct edns_data* edns_in, diff --git a/sbin/unwind/libunbound/util/edns.h b/sbin/unwind/libunbound/util/edns.h index cf9f8707e80..11742eb5b72 100644 --- a/sbin/unwind/libunbound/util/edns.h +++ b/sbin/unwind/libunbound/util/edns.h @@ -50,58 +50,60 @@ struct comm_point; struct regional; /** - * Structure containing all EDNS tags. + * Structure containing all EDNS strings. */ -struct edns_tags { - /** Tree of EDNS client tags to use in upstream queries, per address - * prefix. Contains nodes of type edns_tag_addr. */ - rbtree_type client_tags; - /** EDNS opcode to use for client tags */ - uint16_t client_tag_opcode; +struct edns_strings { + /** Tree of EDNS client strings to use in upstream queries, per address + * prefix. Contains nodes of type edns_string_addr. */ + rbtree_type client_strings; + /** EDNS opcode to use for client strings */ + uint16_t client_string_opcode; /** region to allocate tree nodes in */ struct regional* region; }; /** - * EDNS tag. Node of rbtree, containing tag and prefix. + * EDNS string. Node of rbtree, containing string and prefix. */ -struct edns_tag_addr { +struct edns_string_addr { /** node in address tree, used for tree lookups. Need to be the first * member of this struct. */ struct addr_tree_node node; - /** tag data, in host byte ordering */ - uint16_t tag_data; + /** string, ascii format */ + uint8_t* string; + /** length of string */ + size_t string_len; }; /** - * Create structure to hold EDNS tags - * @return: newly created edns_tags, NULL on alloc failure. + * Create structure to hold EDNS strings + * @return: newly created edns_strings, NULL on alloc failure. */ -struct edns_tags* edns_tags_create(void); +struct edns_strings* edns_strings_create(void); -/** Delete EDNS tags structure - * @param edns_tags: struct to delete +/** Delete EDNS strings structure + * @param edns_strings: struct to delete */ -void edns_tags_delete(struct edns_tags* edns_tags); +void edns_strings_delete(struct edns_strings* edns_strings); /** - * Add configured EDNS tags - * @param edns_tags: edns tags to apply config to - * @param config: struct containing EDNS tags configuration + * Add configured EDNS strings + * @param edns_strings: edns strings to apply config to + * @param config: struct containing EDNS strings configuration * @return 0 on error */ -int edns_tags_apply_cfg(struct edns_tags* edns_tags, +int edns_strings_apply_cfg(struct edns_strings* edns_strings, struct config_file* config); /** - * Find tag for address. - * @param tree: tree containing EDNS tags per address prefix. + * Find string for address. + * @param tree: tree containing EDNS strings per address prefix. * @param addr: address to use for tree lookup * @param addrlen: length of address * @return: matching tree node, NULL otherwise */ -struct edns_tag_addr* -edns_tag_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, +struct edns_string_addr* +edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen); /** diff --git a/sbin/unwind/libunbound/util/fptr_wlist.c b/sbin/unwind/libunbound/util/fptr_wlist.c index 7d15d107561..a9e9d3a0323 100644 --- a/sbin/unwind/libunbound/util/fptr_wlist.c +++ b/sbin/unwind/libunbound/util/fptr_wlist.c @@ -229,6 +229,8 @@ fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *)) else if(fptr == &fwd_cmp) return 1; else if(fptr == &pending_cmp) return 1; else if(fptr == &serviced_cmp) return 1; + else if(fptr == &reuse_cmp) return 1; + else if(fptr == &reuse_id_cmp) return 1; else if(fptr == &name_tree_compare) return 1; else if(fptr == &order_lock_cmp) return 1; else if(fptr == &codeline_cmp) return 1; diff --git a/sbin/unwind/libunbound/util/iana_ports.inc b/sbin/unwind/libunbound/util/iana_ports.inc index fa25869d3b5..d9978f92eda 100644 --- a/sbin/unwind/libunbound/util/iana_ports.inc +++ b/sbin/unwind/libunbound/util/iana_ports.inc @@ -5290,6 +5290,7 @@ 22005, 22273, 22305, +22333, 22335, 22343, 22347, diff --git a/sbin/unwind/libunbound/util/module.h b/sbin/unwind/libunbound/util/module.h index 1eed213008c..7b833f8ade1 100644 --- a/sbin/unwind/libunbound/util/module.h +++ b/sbin/unwind/libunbound/util/module.h @@ -520,8 +520,8 @@ struct module_env { struct edns_known_option* edns_known_options; /* Number of known edns options */ size_t edns_known_options_num; - /** EDNS client tag information */ - struct edns_tags* edns_tags; + /** EDNS client string information */ + struct edns_strings* edns_strings; /* Make every mesh state unique, do not aggregate mesh states. */ int unique_mesh; diff --git a/sbin/unwind/libunbound/util/netevent.c b/sbin/unwind/libunbound/util/netevent.c index 1a190b37e71..8bbad15920a 100644 --- a/sbin/unwind/libunbound/util/netevent.c +++ b/sbin/unwind/libunbound/util/netevent.c @@ -341,10 +341,15 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, if(sldns_buffer_remaining(packet) == 0) log_err("error: send empty UDP packet"); #endif - log_assert(addr && addrlen > 0); - sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), - sldns_buffer_remaining(packet), 0, - addr, addrlen); + if(addr) { + log_assert(addr && addrlen > 0); + sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), + sldns_buffer_remaining(packet), 0, + addr, addrlen); + } else { + sent = send(c->fd, (void*)sldns_buffer_begin(packet), + sldns_buffer_remaining(packet), 0); + } if(sent == -1) { /* try again and block, waiting for IO to complete, * we want to send the answer, and we will wait for @@ -574,6 +579,32 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, #endif /* AF_INET6 && IPV6_PKTINFO && HAVE_SENDMSG */ } +/** return true is UDP receive error needs to be logged */ +static int udp_recv_needs_log(int err) +{ + switch(err) { + case ECONNREFUSED: +# ifdef ENETUNREACH + case ENETUNREACH: +# endif +# ifdef EHOSTDOWN + case EHOSTDOWN: +# endif +# ifdef EHOSTUNREACH + case EHOSTUNREACH: +# endif +# ifdef ENETDOWN + case ENETDOWN: +# endif + if(verbosity >= VERB_ALGO) + return 1; + return 0; + default: + break; + } + return 1; +} + void comm_point_udp_ancil_callback(int fd, short event, void* arg) { @@ -616,7 +647,8 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) msg.msg_flags = 0; rcv = recvmsg(fd, &msg, 0); if(rcv == -1) { - if(errno != EAGAIN && errno != EINTR) { + if(errno != EAGAIN && errno != EINTR + && udp_recv_needs_log(errno)) { log_err("recvmsg failed: %s", strerror(errno)); } return; @@ -697,7 +729,8 @@ comm_point_udp_callback(int fd, short event, void* arg) (struct sockaddr*)&rep.addr, &rep.addrlen); if(rcv == -1) { #ifndef USE_WINSOCK - if(errno != EAGAIN && errno != EINTR) + if(errno != EAGAIN && errno != EINTR + && udp_recv_needs_log(errno)) log_err("recvfrom %d failed: %s", fd, strerror(errno)); #else @@ -965,6 +998,10 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg) /* clear leftover flags from previous use, and then set the * correct event base for the event structure for libevent */ ub_event_free(c_hdl->ev->ev); + if((c_hdl->type == comm_tcp && c_hdl->tcp_req_info) || + c_hdl->type == comm_local || c_hdl->type == comm_raw) + c_hdl->tcp_do_toggle_rw = 0; + else c_hdl->tcp_do_toggle_rw = 1; if(c_hdl->type == comm_http) { #ifdef HAVE_NGHTTP2 @@ -978,6 +1015,10 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg) log_warn("failed to submit http2 settings"); return; } + if(!c->ssl) { + c_hdl->tcp_do_toggle_rw = 0; + c_hdl->use_h2 = 1; + } #endif c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1, UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT, @@ -1042,6 +1083,8 @@ reclaim_tcp_handler(struct comm_point* c) comm_point_start_listening(c->tcp_parent, -1, -1); } } + c->tcp_more_read_again = NULL; + c->tcp_more_write_again = NULL; } /** do the callback when writing is done */ @@ -1049,16 +1092,27 @@ static void tcp_callback_writer(struct comm_point* c) { log_assert(c->type == comm_tcp); - sldns_buffer_clear(c->buffer); + if(!c->tcp_write_and_read) { + sldns_buffer_clear(c->buffer); + c->tcp_byte_count = 0; + } if(c->tcp_do_toggle_rw) c->tcp_is_reading = 1; - c->tcp_byte_count = 0; /* switch from listening(write) to listening(read) */ if(c->tcp_req_info) { tcp_req_info_handle_writedone(c->tcp_req_info); } else { comm_point_stop_listening(c); - comm_point_start_listening(c, -1, c->tcp_timeout_msec); + if(c->tcp_write_and_read) { + fptr_ok(fptr_whitelist_comm_point(c->callback)); + if( (*c->callback)(c, c->cb_arg, NETEVENT_PKT_WRITTEN, + &c->repinfo) ) { + comm_point_start_listening(c, -1, + c->tcp_timeout_msec); + } + } else { + comm_point_start_listening(c, -1, c->tcp_timeout_msec); + } } } @@ -1361,10 +1415,28 @@ ssl_handle_write(struct comm_point* c) } /* ignore return, if fails we may simply block */ (void)SSL_set_mode(c->ssl, (long)SSL_MODE_ENABLE_PARTIAL_WRITE); - if(c->tcp_byte_count < sizeof(uint16_t)) { - uint16_t len = htons(sldns_buffer_limit(c->buffer)); + if((c->tcp_write_and_read?c->tcp_write_byte_count:c->tcp_byte_count) < sizeof(uint16_t)) { + uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(c->buffer)); ERR_clear_error(); - if(sizeof(uint16_t)+sldns_buffer_remaining(c->buffer) < + if(c->tcp_write_and_read) { + if(c->tcp_write_pkt_len + 2 < LDNS_RR_BUF_SIZE) { + /* combine the tcp length and the query for + * write, this emulates writev */ + uint8_t buf[LDNS_RR_BUF_SIZE]; + memmove(buf, &len, sizeof(uint16_t)); + memmove(buf+sizeof(uint16_t), + c->tcp_write_pkt, + c->tcp_write_pkt_len); + r = SSL_write(c->ssl, + (void*)(buf+c->tcp_write_byte_count), + c->tcp_write_pkt_len + 2 - + c->tcp_write_byte_count); + } else { + r = SSL_write(c->ssl, + (void*)(((uint8_t*)&len)+c->tcp_write_byte_count), + (int)(sizeof(uint16_t)-c->tcp_write_byte_count)); + } + } else if(sizeof(uint16_t)+sldns_buffer_remaining(c->buffer) < LDNS_RR_BUF_SIZE) { /* combine the tcp length and the query for write, * this emulates writev */ @@ -1406,20 +1478,32 @@ ssl_handle_write(struct comm_point* c) log_crypto_err("could not SSL_write"); return 0; } - c->tcp_byte_count += r; - if(c->tcp_byte_count < sizeof(uint16_t)) - return 1; - sldns_buffer_set_position(c->buffer, c->tcp_byte_count - - sizeof(uint16_t)); - if(sldns_buffer_remaining(c->buffer) == 0) { + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + if(c->tcp_write_byte_count < sizeof(uint16_t)) + return 1; + } else { + c->tcp_byte_count += r; + if(c->tcp_byte_count < sizeof(uint16_t)) + return 1; + sldns_buffer_set_position(c->buffer, c->tcp_byte_count - + sizeof(uint16_t)); + } + if((!c->tcp_write_and_read && sldns_buffer_remaining(c->buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); return 1; } } - log_assert(sldns_buffer_remaining(c->buffer) > 0); + log_assert(c->tcp_write_and_read || sldns_buffer_remaining(c->buffer) > 0); + log_assert(!c->tcp_write_and_read || c->tcp_write_byte_count < c->tcp_write_pkt_len + 2); ERR_clear_error(); - r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer), - (int)sldns_buffer_remaining(c->buffer)); + if(c->tcp_write_and_read) { + r = SSL_write(c->ssl, (void*)(c->tcp_write_pkt + c->tcp_write_byte_count - 2), + (int)(c->tcp_write_pkt_len + 2 - c->tcp_write_byte_count)); + } else { + r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer), + (int)sldns_buffer_remaining(c->buffer)); + } if(r <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { @@ -1444,9 +1528,13 @@ ssl_handle_write(struct comm_point* c) log_crypto_err("could not SSL_write"); return 0; } - sldns_buffer_skip(c->buffer, (ssize_t)r); + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + } else { + sldns_buffer_skip(c->buffer, (ssize_t)r); + } - if(sldns_buffer_remaining(c->buffer) == 0) { + if((!c->tcp_write_and_read && sldns_buffer_remaining(c->buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); } return 1; @@ -1458,9 +1546,17 @@ ssl_handle_write(struct comm_point* c) /** handle ssl tcp connection with dns contents */ static int -ssl_handle_it(struct comm_point* c) +ssl_handle_it(struct comm_point* c, int is_write) { - if(c->tcp_is_reading) + /* handle case where renegotiation wants read during write call + * or write during read calls */ + if(is_write && c->ssl_shake_state == comm_ssl_shake_hs_write) + return ssl_handle_read(c); + else if(!is_write && c->ssl_shake_state == comm_ssl_shake_hs_read) + return ssl_handle_write(c); + /* handle read events for read operation and write events for a + * write operation */ + else if(!is_write) return ssl_handle_read(c); return ssl_handle_write(c); } @@ -1477,8 +1573,8 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) ssize_t r; log_assert(c->type == comm_tcp || c->type == comm_local); if(c->ssl) - return ssl_handle_it(c); - if(!c->tcp_is_reading) + return ssl_handle_it(c, 0); + if(!c->tcp_is_reading && !c->tcp_write_and_read) return 0; log_assert(fd != -1); @@ -1581,10 +1677,10 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) #else buffer = c->buffer; #endif - if(c->tcp_is_reading && !c->ssl) + if(c->tcp_is_reading && !c->ssl && !c->tcp_write_and_read) return 0; log_assert(fd != -1); - if(c->tcp_byte_count == 0 && c->tcp_check_nb_connect) { + if(((!c->tcp_write_and_read && c->tcp_byte_count == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == 0)) && c->tcp_check_nb_connect) { /* check for pending error from nonblocking connect */ /* from Stevens, unix network programming, vol1, 3rd ed, p450*/ int error = 0; @@ -1625,7 +1721,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) } } if(c->ssl) - return ssl_handle_it(c); + return ssl_handle_it(c, 1); #ifdef USE_MSG_FASTOPEN /* Only try this on first use of a connection that uses tfo, @@ -1634,15 +1730,22 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) if(c->tcp_do_fastopen == 1) { /* this form of sendmsg() does both a connect() and send() so need to look for various flavours of error*/ - uint16_t len = htons(sldns_buffer_limit(buffer)); + uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(buffer)); struct msghdr msg; struct iovec iov[2]; c->tcp_do_fastopen = 0; memset(&msg, 0, sizeof(msg)); - iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; - iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; - iov[1].iov_base = sldns_buffer_begin(buffer); - iov[1].iov_len = sldns_buffer_limit(buffer); + if(c->tcp_write_and_read) { + iov[0].iov_base = (uint8_t*)&len + c->tcp_write_byte_count; + iov[0].iov_len = sizeof(uint16_t) - c->tcp_write_byte_count; + iov[1].iov_base = c->tcp_write_pkt; + iov[1].iov_len = c->tcp_write_pkt_len; + } else { + iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; + iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; + iov[1].iov_base = sldns_buffer_begin(buffer); + iov[1].iov_len = sldns_buffer_limit(buffer); + } log_assert(iov[0].iov_len > 0); msg.msg_name = &c->repinfo.addr; msg.msg_namelen = c->repinfo.addrlen; @@ -1688,12 +1791,18 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) } } else { - c->tcp_byte_count += r; - if(c->tcp_byte_count < sizeof(uint16_t)) - return 1; - sldns_buffer_set_position(buffer, c->tcp_byte_count - - sizeof(uint16_t)); - if(sldns_buffer_remaining(buffer) == 0) { + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + if(c->tcp_write_byte_count < sizeof(uint16_t)) + return 1; + } else { + c->tcp_byte_count += r; + if(c->tcp_byte_count < sizeof(uint16_t)) + return 1; + sldns_buffer_set_position(buffer, c->tcp_byte_count - + sizeof(uint16_t)); + } + if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); return 1; } @@ -1701,19 +1810,31 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) } #endif /* USE_MSG_FASTOPEN */ - if(c->tcp_byte_count < sizeof(uint16_t)) { - uint16_t len = htons(sldns_buffer_limit(buffer)); + if((c->tcp_write_and_read?c->tcp_write_byte_count:c->tcp_byte_count) < sizeof(uint16_t)) { + uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(buffer)); #ifdef HAVE_WRITEV struct iovec iov[2]; - iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; - iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; - iov[1].iov_base = sldns_buffer_begin(buffer); - iov[1].iov_len = sldns_buffer_limit(buffer); + if(c->tcp_write_and_read) { + iov[0].iov_base = (uint8_t*)&len + c->tcp_write_byte_count; + iov[0].iov_len = sizeof(uint16_t) - c->tcp_write_byte_count; + iov[1].iov_base = c->tcp_write_pkt; + iov[1].iov_len = c->tcp_write_pkt_len; + } else { + iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; + iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; + iov[1].iov_base = sldns_buffer_begin(buffer); + iov[1].iov_len = sldns_buffer_limit(buffer); + } log_assert(iov[0].iov_len > 0); r = writev(fd, iov, 2); #else /* HAVE_WRITEV */ - r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_byte_count), - sizeof(uint16_t)-c->tcp_byte_count, 0); + if(c->tcp_write_and_read) { + r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_write_byte_count), + sizeof(uint16_t)-c->tcp_write_byte_count, 0); + } else { + r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_byte_count), + sizeof(uint16_t)-c->tcp_byte_count, 0); + } #endif /* HAVE_WRITEV */ if(r == -1) { #ifndef USE_WINSOCK @@ -1752,19 +1873,31 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) #endif return 0; } - c->tcp_byte_count += r; - if(c->tcp_byte_count < sizeof(uint16_t)) - return 1; - sldns_buffer_set_position(buffer, c->tcp_byte_count - - sizeof(uint16_t)); - if(sldns_buffer_remaining(buffer) == 0) { + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + if(c->tcp_write_byte_count < sizeof(uint16_t)) + return 1; + } else { + c->tcp_byte_count += r; + if(c->tcp_byte_count < sizeof(uint16_t)) + return 1; + sldns_buffer_set_position(buffer, c->tcp_byte_count - + sizeof(uint16_t)); + } + if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); return 1; } } - log_assert(sldns_buffer_remaining(buffer) > 0); - r = send(fd, (void*)sldns_buffer_current(buffer), - sldns_buffer_remaining(buffer), 0); + log_assert(c->tcp_write_and_read || sldns_buffer_remaining(buffer) > 0); + log_assert(!c->tcp_write_and_read || c->tcp_write_byte_count < c->tcp_write_pkt_len + 2); + if(c->tcp_write_and_read) { + r = send(fd, (void*)c->tcp_write_pkt + c->tcp_write_byte_count - 2, + c->tcp_write_pkt_len + 2 - c->tcp_write_byte_count, 0); + } else { + r = send(fd, (void*)sldns_buffer_current(buffer), + sldns_buffer_remaining(buffer), 0); + } if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) @@ -1787,9 +1920,13 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) &c->repinfo.addr, c->repinfo.addrlen); return 0; } - sldns_buffer_skip(buffer, r); + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + } else { + sldns_buffer_skip(buffer, r); + } - if(sldns_buffer_remaining(buffer) == 0) { + if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); } @@ -1819,6 +1956,54 @@ tcp_req_info_read_again(int fd, struct comm_point* c) } } +/** read again to drain buffers when there could be more to read */ +static void +tcp_more_read_again(int fd, struct comm_point* c) +{ + /* if the packet is done, but another one could be waiting on + * the connection, the callback signals this, and we try again */ + /* this continues until the read routines get EAGAIN or so, + * and thus does not call the callback, and the bool is 0 */ + int* moreread = c->tcp_more_read_again; + while(moreread && *moreread) { + *moreread = 0; + if(!comm_point_tcp_handle_read(fd, c, 0)) { + reclaim_tcp_handler(c); + if(!c->tcp_do_close) { + fptr_ok(fptr_whitelist_comm_point( + c->callback)); + (void)(*c->callback)(c, c->cb_arg, + NETEVENT_CLOSED, NULL); + } + return; + } + } +} + +/** write again to fill up when there could be more to write */ +static void +tcp_more_write_again(int fd, struct comm_point* c) +{ + /* if the packet is done, but another is waiting to be written, + * the callback signals it and we try again. */ + /* this continues until the write routines get EAGAIN or so, + * and thus does not call the callback, and the bool is 0 */ + int* morewrite = c->tcp_more_write_again; + while(morewrite && *morewrite) { + *morewrite = 0; + if(!comm_point_tcp_handle_write(fd, c)) { + reclaim_tcp_handler(c); + if(!c->tcp_do_close) { + fptr_ok(fptr_whitelist_comm_point( + c->callback)); + (void)(*c->callback)(c, c->cb_arg, + NETEVENT_CLOSED, NULL); + } + return; + } + } +} + void comm_point_tcp_handle_callback(int fd, short event, void* arg) { @@ -1839,7 +2024,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } return; @@ -1857,34 +2042,46 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) } return; } - if(event&UB_EV_READ) { + if(event&UB_EV_READ +#ifdef USE_MSG_FASTOPEN + && !(c->tcp_do_fastopen && (event&UB_EV_WRITE)) +#endif + ) { int has_tcpq = (c->tcp_req_info != NULL); + int* moreread = c->tcp_more_read_again; if(!comm_point_tcp_handle_read(fd, c, 0)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } + return; } if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again) tcp_req_info_read_again(fd, c); + if(moreread && *moreread) + tcp_more_read_again(fd, c); return; } if(event&UB_EV_WRITE) { int has_tcpq = (c->tcp_req_info != NULL); + int* morewrite = c->tcp_more_write_again; if(!comm_point_tcp_handle_write(fd, c)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } + return; } if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again) tcp_req_info_read_again(fd, c); + if(morewrite && *morewrite) + tcp_more_write_again(fd, c); return; } log_err("Ignored event %d for tcphdl.", event); @@ -2240,7 +2437,7 @@ http_chunked_segment(struct comm_point* c) #ifdef HAVE_NGHTTP2 /** Create new http2 session. Called when creating handling comm point. */ -static struct http2_session* http2_session_create(struct comm_point* c) +struct http2_session* http2_session_create(struct comm_point* c) { struct http2_session* session = calloc(1, sizeof(*session)); if(!session) { @@ -2254,7 +2451,7 @@ static struct http2_session* http2_session_create(struct comm_point* c) #endif /** Delete http2 session. After closing connection or on error */ -static void http2_session_delete(struct http2_session* h2_session) +void http2_session_delete(struct http2_session* h2_session) { #ifdef HAVE_NGHTTP2 if(h2_session->callbacks) @@ -2330,7 +2527,7 @@ void http2_session_add_stream(struct http2_session* h2_session, /** remove stream from session linked list. After stream close callback or * closing connection */ -static void http2_session_remove_stream(struct http2_session* h2_session, +void http2_session_remove_stream(struct http2_session* h2_session, struct http2_stream* h2_stream) { if(h2_stream->prev) @@ -2359,48 +2556,76 @@ int http2_stream_close_cb(nghttp2_session* ATTR_UNUSED(session), ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf, size_t len, int ATTR_UNUSED(flags), void* cb_arg) { -#ifdef HAVE_SSL struct http2_session* h2_session = (struct http2_session*)cb_arg; - int r; + ssize_t ret; log_assert(h2_session->c->type == comm_http); log_assert(h2_session->c->h2_session); - if(!h2_session->c->ssl) - return 0; +#ifdef HAVE_SSL + if(h2_session->c->ssl) { + int r; + ERR_clear_error(); + r = SSL_read(h2_session->c->ssl, buf, len); + if(r <= 0) { + int want = SSL_get_error(h2_session->c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return NGHTTP2_ERR_EOF; + } else if(want == SSL_ERROR_WANT_READ) { + return NGHTTP2_ERR_WOULDBLOCK; + } else if(want == SSL_ERROR_WANT_WRITE) { + h2_session->c->ssl_shake_state = comm_ssl_shake_hs_write; + comm_point_listen_for_rw(h2_session->c, 0, 1); + return NGHTTP2_ERR_WOULDBLOCK; + } else if(want == SSL_ERROR_SYSCALL) { +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) + return NGHTTP2_ERR_CALLBACK_FAILURE; +#endif + if(errno != 0) + log_err("SSL_read syscall: %s", + strerror(errno)); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + log_crypto_err("could not SSL_read"); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return r; + } +#endif /* HAVE_SSL */ - ERR_clear_error(); - r = SSL_read(h2_session->c->ssl, buf, len); - if(r <= 0) { - int want = SSL_get_error(h2_session->c->ssl, r); - if(want == SSL_ERROR_ZERO_RETURN) { - return NGHTTP2_ERR_EOF; - } else if(want == SSL_ERROR_WANT_READ) { - return NGHTTP2_ERR_WOULDBLOCK; - } else if(want == SSL_ERROR_WANT_WRITE) { - h2_session->c->ssl_shake_state = comm_ssl_shake_hs_write; - comm_point_listen_for_rw(h2_session->c, 0, 1); + ret = recv(h2_session->c->fd, buf, len, 0); + if(ret == 0) { + return NGHTTP2_ERR_EOF; + } else if(ret < 0) { +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) return NGHTTP2_ERR_WOULDBLOCK; - } else if(want == SSL_ERROR_SYSCALL) { #ifdef ECONNRESET - if(errno == ECONNRESET && verbosity < 2) - return NGHTTP2_ERR_CALLBACK_FAILURE; + if(errno == ECONNRESET && verbosity < 2) + return NGHTTP2_ERR_CALLBACK_FAILURE; #endif - if(errno != 0) - log_err("SSL_read syscall: %s", - strerror(errno)); + log_err_addr("could not http2 recv: %s", strerror(errno), + &h2_session->c->repinfo.addr, + h2_session->c->repinfo.addrlen); +#else /* USE_WINSOCK */ + if(WSAGetLastError() == WSAECONNRESET) return NGHTTP2_ERR_CALLBACK_FAILURE; + if(WSAGetLastError() == WSAEINPROGRESS) + return NGHTTP2_ERR_WOULDBLOCK; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(h2_session->c->ev->ev, + UB_EV_READ); + return NGHTTP2_ERR_WOULDBLOCK; } - log_crypto_err("could not SSL_read"); + log_err_addr("could not http2 recv: %s", + wsa_strerror(WSAGetLastError()), + &h2_session->c->repinfo.addr, + h2_session->c->repinfo.addrlen); +#endif return NGHTTP2_ERR_CALLBACK_FAILURE; } - return r; -#else - (void)buf; - (void)len; - (void)cb_arg; - return -1; -#endif + return ret; } #endif /* HAVE_NGHTTP2 */ @@ -2411,15 +2636,17 @@ comm_point_http2_handle_read(int ATTR_UNUSED(fd), struct comm_point* c) #ifdef HAVE_NGHTTP2 int ret; log_assert(c->h2_session); - log_assert(c->ssl); /* reading until recv cb returns NGHTTP2_ERR_WOULDBLOCK */ ret = nghttp2_session_recv(c->h2_session->session); if(ret) { if(ret != NGHTTP2_ERR_EOF && ret != NGHTTP2_ERR_CALLBACK_FAILURE) { - verbose(VERB_QUERY, "http2: session_recv failed, " - "error: %s", nghttp2_strerror(ret)); + char a[256]; + addr_to_str(&c->repinfo.addr, c->repinfo.addrlen, + a, sizeof(a)); + verbose(VERB_QUERY, "http2: session_recv from %s failed, " + "error: %s", a, nghttp2_strerror(ret)); } return 0; } @@ -2648,47 +2875,81 @@ http_write_more(int fd, struct comm_point* c) ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), const uint8_t* buf, size_t len, int ATTR_UNUSED(flags), void* cb_arg) { -#ifdef HAVE_SSL - int r; + ssize_t ret; struct http2_session* h2_session = (struct http2_session*)cb_arg; log_assert(h2_session->c->type == comm_http); log_assert(h2_session->c->h2_session); - if(!h2_session->c->ssl) - return 0; - - ERR_clear_error(); - r = SSL_write(h2_session->c->ssl, buf, len); - if(r <= 0) { - int want = SSL_get_error(h2_session->c->ssl, r); - if(want == SSL_ERROR_ZERO_RETURN) { +#ifdef HAVE_SSL + if(h2_session->c->ssl) { + int r; + ERR_clear_error(); + r = SSL_write(h2_session->c->ssl, buf, len); + if(r <= 0) { + int want = SSL_get_error(h2_session->c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } else if(want == SSL_ERROR_WANT_READ) { + h2_session->c->ssl_shake_state = comm_ssl_shake_hs_read; + comm_point_listen_for_rw(h2_session->c, 1, 0); + return NGHTTP2_ERR_WOULDBLOCK; + } else if(want == SSL_ERROR_WANT_WRITE) { + return NGHTTP2_ERR_WOULDBLOCK; + } else if(want == SSL_ERROR_SYSCALL) { +#ifdef EPIPE + if(errno == EPIPE && verbosity < 2) + return NGHTTP2_ERR_CALLBACK_FAILURE; +#endif + if(errno != 0) + log_err("SSL_write syscall: %s", + strerror(errno)); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + log_crypto_err("could not SSL_write"); return NGHTTP2_ERR_CALLBACK_FAILURE; - } else if(want == SSL_ERROR_WANT_READ) { - h2_session->c->ssl_shake_state = comm_ssl_shake_hs_read; - comm_point_listen_for_rw(h2_session->c, 1, 0); - return NGHTTP2_ERR_WOULDBLOCK; - } else if(want == SSL_ERROR_WANT_WRITE) { + } + return r; + } +#endif /* HAVE_SSL */ + + ret = send(h2_session->c->fd, buf, len, 0); + if(ret == 0) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } else if(ret < 0) { +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) return NGHTTP2_ERR_WOULDBLOCK; - } else if(want == SSL_ERROR_SYSCALL) { #ifdef EPIPE - if(errno == EPIPE && verbosity < 2) - return NGHTTP2_ERR_CALLBACK_FAILURE; + if(errno == EPIPE && verbosity < 2) + return NGHTTP2_ERR_CALLBACK_FAILURE; #endif - if(errno != 0) - log_err("SSL_write syscall: %s", - strerror(errno)); +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) return NGHTTP2_ERR_CALLBACK_FAILURE; +#endif + log_err_addr("could not http2 write: %s", strerror(errno), + &h2_session->c->repinfo.addr, + h2_session->c->repinfo.addrlen); +#else /* USE_WINSOCK */ + if(WSAGetLastError() == WSAENOTCONN) + return NGHTTP2_ERR_WOULDBLOCK; + if(WSAGetLastError() == WSAEINPROGRESS) + return NGHTTP2_ERR_WOULDBLOCK; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(h2_session->c->ev->ev, + UB_EV_WRITE); + return NGHTTP2_ERR_WOULDBLOCK; } - log_crypto_err("could not SSL_write"); + if(WSAGetLastError() == WSAECONNRESET && verbosity < 2) + return NGHTTP2_ERR_CALLBACK_FAILURE; + log_err_addr("could not http2 write: %s", + wsa_strerror(WSAGetLastError()), + &h2_session->c->repinfo.addr, + h2_session->c->repinfo.addrlen); +#endif return NGHTTP2_ERR_CALLBACK_FAILURE; } - return r; -#else - (void)buf; - (void)len; - (void)cb_arg; - return -1; -#endif + return ret; } #endif /* HAVE_NGHTTP2 */ @@ -2699,7 +2960,6 @@ comm_point_http2_handle_write(int ATTR_UNUSED(fd), struct comm_point* c) #ifdef HAVE_NGHTTP2 int ret; log_assert(c->h2_session); - log_assert(c->ssl); ret = nghttp2_session_send(c->h2_session->session); if(ret) { @@ -2811,7 +3071,7 @@ comm_point_http_handle_callback(int fd, short event, void* arg) if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } } @@ -2823,7 +3083,7 @@ comm_point_http_handle_callback(int fd, short event, void* arg) if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } } @@ -3555,6 +3815,7 @@ comm_point_close(struct comm_point* c) if(!c) return; if(c->fd != -1) { + verbose(5, "comm_point_close of %d: event_del", c->fd); if(ub_event_del(c->ev->ev) != 0) { log_err("could not event_del on close"); } @@ -3736,12 +3997,20 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec) } if(c->type == comm_tcp || c->type == comm_http) { ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); - if(c->tcp_is_reading) + if(c->tcp_write_and_read) { + verbose(5, "startlistening %d mode rw", (newfd==-1?c->fd:newfd)); + ub_event_add_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); + } else if(c->tcp_is_reading) { + verbose(5, "startlistening %d mode r", (newfd==-1?c->fd:newfd)); ub_event_add_bits(c->ev->ev, UB_EV_READ); - else ub_event_add_bits(c->ev->ev, UB_EV_WRITE); + } else { + verbose(5, "startlistening %d mode w", (newfd==-1?c->fd:newfd)); + ub_event_add_bits(c->ev->ev, UB_EV_WRITE); + } } if(newfd != -1) { - if(c->fd != -1) { + if(c->fd != -1 && c->fd != newfd) { + verbose(5, "cpsl close of fd %d for %d", c->fd, newfd); sock_close(c->fd); } c->fd = newfd; diff --git a/sbin/unwind/libunbound/util/netevent.h b/sbin/unwind/libunbound/util/netevent.h index 6986f881b38..daa954b6492 100644 --- a/sbin/unwind/libunbound/util/netevent.h +++ b/sbin/unwind/libunbound/util/netevent.h @@ -95,6 +95,9 @@ typedef int comm_point_callback_type(struct comm_point*, void*, int, #define NETEVENT_CAPSFAIL -3 /** to pass done transfer to callback function; http file is complete */ #define NETEVENT_DONE -4 +/** to pass write of the write packet is done to callback function + * used when tcp_write_and_read is enabled */ +#define NETEVENT_PKT_WRITTEN -5 /** timeout to slow accept calls when not possible, in msec. */ #define NETEVENT_SLOW_ACCEPT_TIME 2000 @@ -276,6 +279,44 @@ struct comm_point { and after read/write completes. No callback is done. */ int tcp_do_close; + /** flag that indicates the stream is both written and read from. */ + int tcp_write_and_read; + + /** byte count for written length over write channel, for when + * tcp_write_and_read is enabled. When tcp_write_and_read is enabled, + * this is the counter for writing, the one for reading is in the + * commpoint.buffer sldns buffer. The counter counts from 0 to + * 2+tcp_write_pkt_len, and includes the tcp length bytes. */ + size_t tcp_write_byte_count; + + /** packet to write currently over the write channel. for when + * tcp_write_and_read is enabled. When tcp_write_and_read is enabled, + * this is the buffer for the written packet, the commpoint.buffer + * sldns buffer is the buffer for the received packet. */ + uint8_t* tcp_write_pkt; + /** length of tcp_write_pkt in bytes */ + size_t tcp_write_pkt_len; + + /** if set try to read another packet again (over connection with + * multiple packets), once set, tries once, then zero again, + * so set it in the packet complete section. + * The pointer itself has to be set before the callback is invoked, + * when you set things up, and continue to exist also after the + * commpoint is closed and deleted in your callback. So that after + * the callback cleans up netevent can see what it has to do. + * Or leave NULL if it is not used at all. */ + int* tcp_more_read_again; + + /** if set try to write another packet (over connection with + * multiple packets), once set, tries once, then zero again, + * so set it in the packet complete section. + * The pointer itself has to be set before the callback is invoked, + * when you set things up, and continue to exist also after the + * commpoint is closed and deleted in your callback. So that after + * the callback cleans up netevent can see what it has to do. + * Or leave NULL if it is not used at all. */ + int* tcp_more_write_again; + /** if set, read/write completes: read/write state of tcp is toggled. buffer reset/bytecount reset. @@ -589,7 +630,8 @@ void comm_point_drop_reply(struct comm_reply* repinfo); * Send an udp message over a commpoint. * @param c: commpoint to send it from. * @param packet: what to send. - * @param addr: where to send it to. + * @param addr: where to send it to. If NULL, send is performed, + * for connected sockets, to the connected address. * @param addrlen: length of addr. * @return: false on a failure. */ diff --git a/sbin/unwind/libunbound/util/regional.c b/sbin/unwind/libunbound/util/regional.c index ff36d0e2124..bd67ecf50af 100644 --- a/sbin/unwind/libunbound/util/regional.c +++ b/sbin/unwind/libunbound/util/regional.c @@ -80,18 +80,39 @@ regional_init(struct regional* r) r->total_large = 0; } -struct regional* -regional_create_custom(size_t size) +/** + * Create a new region, with custom first block and large-object sizes. + * @param size: length of first block. + * @param large_object_size: outside of chunk allocation threshold. + * @return: newly allocated regional. + */ +static struct regional* +regional_create_custom_large_object(size_t size, size_t large_object_size) { - struct regional* r = (struct regional*)malloc(size); + struct regional* r; size = ALIGN_UP(size, ALIGNMENT); + r = (struct regional*)malloc(size); log_assert(sizeof(struct regional) <= size); if(!r) return NULL; r->first_size = size; + r->large_object_size = large_object_size; regional_init(r); return r; } +struct regional* +regional_create_custom(size_t size) +{ + return regional_create_custom_large_object(size, + REGIONAL_LARGE_OBJECT_SIZE); +} + +struct regional* +regional_create_nochunk(size_t size) +{ + return regional_create_custom_large_object(size, 0); +} + void regional_free_all(struct regional *r) { @@ -134,7 +155,7 @@ regional_alloc(struct regional *r, size_t size) malloc and ALIGN_UP */ a = ALIGN_UP(size, ALIGNMENT); /* large objects */ - if(a > REGIONAL_LARGE_OBJECT_SIZE) { + if(a > r->large_object_size) { s = malloc(ALIGNMENT + size); if(!s) return NULL; r->total_large += ALIGNMENT+size; @@ -219,7 +240,7 @@ regional_log_stats(struct regional *r) /* some basic assertions put here (non time critical code) */ log_assert(ALIGNMENT >= sizeof(char*)); log_assert(REGIONAL_CHUNK_SIZE > ALIGNMENT); - log_assert(REGIONAL_CHUNK_SIZE-ALIGNMENT > REGIONAL_LARGE_OBJECT_SIZE); + log_assert(REGIONAL_CHUNK_SIZE-ALIGNMENT > r->large_object_size); log_assert(REGIONAL_CHUNK_SIZE >= sizeof(struct regional)); /* debug print */ log_info("regional %u chunks, %u large", diff --git a/sbin/unwind/libunbound/util/regional.h b/sbin/unwind/libunbound/util/regional.h index e8b2cb8d00c..b439897d52e 100644 --- a/sbin/unwind/libunbound/util/regional.h +++ b/sbin/unwind/libunbound/util/regional.h @@ -74,6 +74,11 @@ struct regional size_t available; /** current chunk data position. */ char* data; + /** threshold for outside of chunk allocations */ + size_t large_object_size; + /** padding for sizeof8 alignment of sizeof(struct regional) + * for 32bit systems */ + size_t padding; }; /** @@ -88,6 +93,14 @@ struct regional* regional_create(void); * @return: newly allocated regional. */ struct regional* regional_create_custom(size_t size); + +/** + * Create a new region, with custom settings, that will allocate everything + * outside the region chunk. + * @param size: length of first block. + * @return: newly allocated regional. + */ +struct regional* regional_create_nochunk(size_t size); /** * Free all memory associated with regional. Only keeps the first block with diff --git a/sbin/unwind/libunbound/validator/val_secalgo.c b/sbin/unwind/libunbound/validator/val_secalgo.c index 65bca8b69d6..15cccf017b4 100644 --- a/sbin/unwind/libunbound/validator/val_secalgo.c +++ b/sbin/unwind/libunbound/validator/val_secalgo.c @@ -990,6 +990,7 @@ static SECKEYPublicKey* nss_buf2ecdsa(unsigned char* key, size_t len, int algo) return pk; } +#if defined(USE_DSA) && defined(USE_SHA1) static SECKEYPublicKey* nss_buf2dsa(unsigned char* key, size_t len) { SECKEYPublicKey* pk; @@ -1050,6 +1051,7 @@ static SECKEYPublicKey* nss_buf2dsa(unsigned char* key, size_t len) } return pk; } +#endif /* USE_DSA && USE_SHA1 */ static SECKEYPublicKey* nss_buf2rsa(unsigned char* key, size_t len) { |