diff --git a/CMakeLists.txt b/CMakeLists.txt index 258e31918c..5c02525efc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1277,8 +1277,10 @@ CHECK_TYPE_SIZE("_Bool" SIZEOF__BOOL) CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T) + CHECK_TYPE_SIZE("ssize_t" HAVE_SSIZE_T) + # __int64 is used on Windows for large file support. CHECK_TYPE_SIZE("__int64" SIZEOF___INT_64) CHECK_TYPE_SIZE("int64_t" SIZEOF_INT64_T) diff --git a/cf b/cf index 976a62a0f8..a1a55b785e 100644 --- a/cf +++ b/cf @@ -1,6 +1,6 @@ #!/bin/bash #NB=1 -DB=1 +#DB=1 #X=-x FAST=1 diff --git a/cf.cmake b/cf.cmake index 04c7c913ce..5681512bb6 100644 --- a/cf.cmake +++ b/cf.cmake @@ -1,9 +1,9 @@ # Visual Studio # Is netcdf-4 and/or DAP enabled? -NC4=1 -#DAP=1 -#CDF5=1 +#NC4=1 +DAP=1 +CDF5=1 #HDF4=1 case "$1" in diff --git a/config.h.cmake.in b/config.h.cmake.in index 19e50ed6ba..35be9ca461 100644 --- a/config.h.cmake.in +++ b/config.h.cmake.in @@ -559,6 +559,9 @@ are set when opening a binary file on Windows. */ /* Define to `unsigned int' if does not define. */ #cmakedefine size_t unsigned int +/* Define to `unsigned long if does not define. */ +#cmakedefine uintptr_t unsigned long + /* Define strcasecmp, snprintf on Win32 systems. */ #ifdef _WIN32 #ifndef HAVE_STRCASECMP diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index 81ab12fc3f..98830f0c39 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -750,6 +750,7 @@ INPUT = \ @abs_top_srcdir@/docs/install-fortran.md \ @abs_top_srcdir@/docs/types.dox \ @abs_top_srcdir@/docs/internal.dox \ + @abs_top_srcdir@/docs/indexing.dox \ @abs_top_srcdir@/docs/windows-binaries.md \ @abs_top_srcdir@/docs/guide.dox \ @abs_top_srcdir@/docs/OPeNDAP.dox \ diff --git a/docs/Makefile.am b/docs/Makefile.am index 45a387ad55..6d76b661dd 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -9,7 +9,7 @@ mainpage.dox tutorial.dox guide.dox types.dox cdl.dox \ architecture.dox internal.dox windows-binaries.md \ building-with-cmake.md CMakeLists.txt groups.dox install.md notes.md \ install-fortran.md all-error-codes.md credits.md auth.md \ -obsolete/fan_utils.html bestpractices.md filters.md +obsolete/fan_utils.html bestpractices.md filters.md indexing.dox # Turn off parallel builds in this directory. .NOTPARALLEL: diff --git a/docs/indexing.dox b/docs/indexing.dox new file mode 100644 index 0000000000..1ff1d8acd5 --- /dev/null +++ b/docs/indexing.dox @@ -0,0 +1,218 @@ +/** \file + +\internal + +\page nchashmap Indexed Access to Metadata Objects + +\tableofcontents + +The original internal representations of metadata in memory +relied on linear searching of lists to locate various objects +by name or by numeric id (e.g. varid or grpid). + +In recent years, the flaws in that approach have become obvious +as users create files with extremely large numbers of objects: +group, variables, attributes, and dimensions. One case +has 14 megabytes of metadata. Creating and (especially) later +opening such files was exceedingly slow. + +This problem was partially alleviated in both netcdfd-3 (libsrc) +and netcdf-4 (libsrc4) by adding name hashing tables. +However, and especially for netcdf-4, linear search still prevailed. + +A pervasive change has been made to try to remove (almost) all +occurrences of linear search and replace it with either hashing +(for name-based lookup) or vectors (for numeric id-based +lookup). The cases left as linear search include these. + +1. Enum constants for an enumeration +2. Dimensions associated with a variable +3. Fields of Compound types + +This document describes the architecture and details of the netCDF +internal object lookup mechanisms now in place. + +\section S1 Indexed Searches + +There are, as a rule, two searches that are used to locate +metadata object: (1) search by name and (2) search by +externally visible id (e.g. dimid or varid). + +Currently, and after all the metadata is read or created, +hashing is used for locating objects by name. In all other +cases -- apparently -- lookup is by linear search of some +kind of linked list or a vector. + +It is relevant that, once created, no metadata object -- except +attributes -- can be deleted. They can be renamed, but that +does not change the associated id. Deletion only occurs when an +error occurs in creating an object or on invoking nc_close. + +The numeric identifiers for dimensions, types, and groups are +all globally unique across a file. But note that variable id's +are not globally unique (IMO a bad design decision) but are only +unique within the containing group. Thus, in order to provide a +unique id for a variable it must be composed of the containing +group id plus the variable id. + +Note also that names are unique only within a group and with respect +to some kind of metadata. That is a group cannot have e.g. two +dimensions with the same name. But it can have a variable and a dimension +with the same name (as with coordinate variables). + +Finally, attribute names are unique only with respect to each other +and with respect to the containing object (a variable or a group). + +\section S2 Basic Data Structures + +The basic data structures used by the new lookup mechanisms +are described in the following sections. + +\subsection SS1_1 NClist + +With rare exceptions, vectors of objects are maintained as +instances of NClist, which provides a dynamically extendible +vector of pointers: pointers to metadata objects in this case. +It is possible to append new objects or insert at a specific +vector offset, or overwrite an existing pointer at a specific +offset. + +The definition is as follows. + +\code +typedef struct NClist { + size_t alloc; + size_t length; + void** content; +} NClist; +\endcode + + +\subsection SS1_2 NC_hashmap + +The NC_hashmap type is a hash table mapping a name to a pointer. +As a rule, the pointer points to a metadata object. The current +implementation supports table expansion when the # of entries in +the table starts to get too large. Basically a simple linear +rehash is used for collisions and no separate hash-chain is +used. This means that when expanded, it must be completely +rebuilt. The performance hit for this has yet to be determined. + +The hashtable definition is as follows. + +\code +typedef struct NC_hashmap { + size_t size; + size_t count; + NC_hentry* table; +} NC_hashmap; +\endcode + +where size is the current allocated size and count is the +number of active entries in the table. The "table" field is +a vector of entries of this form. + +\code +typedef struct NC_hentry { + int flags; + void* data; + size_t hashkey; /* Hash id */ + char* key; /* actual key; do not free */ +} NC_hentry; +\endcode + +The flags indicate the state of the entry and can be one of three states: + +1. ACTIVE - there is an object referenced in this entry +2. DELETED - an entry was deleted, but must be marked so + that linear rehash will work. +3. EMPTY - unused + +There is an important WARNING with respect to the "key" field. +The key is not a copy of the object's name, but in fact is a duplicate +pointer to that same string. This means (1) that it should never be +free()'d and (2) if the name of the metadata object is changed, then +it must be removed and re-inserted into the table to that the key +points to the current name. + +The "data" field is of type void*. Often it is a pointer to an instance +of a variable, or dimension, or other object. When used as part of an +NC_listmap (see below), then the key is an integer index into the +associated vector. In order to do this correctly, we need to rely +on the type "uintptr_t". It is supposed to be the case +that a value of type uintptr_t is an integer of sufficient size to +hold a void* pointer. Usually, but not always, this would be the same +size as an "unsigned long" value. Using this allows the hashtable +to store either pointers or integer indices. + +One further WARNING: any object that will be inserted into an NC_hashmap +must have its name as the first field so it can be cast +to char** for use with the hashtable. + +\subsection SS1_3 NC_listmap + +A listmap is a combination of an NClist and an NC_hashtable. +It is used to provide name-based lookup with respect to a +specific list of metadata objects. For example, the subgroups +of a group are stored using a listmap, where the list is a +vector of pointers to the subgroup objects and the hashmap +maps the subgroup name (unique to that group, remember) to +the corresponding index into the vector. In theory, only +the hashmap is needed because it could be walked to get all +of the metadata objects. However, the creation order is sometimes +important, so that is maintained by the vector. +This is especially important for attribute storage. + +Note that currently, NC_listmap is only used in libsrc4, +but if performance issues warrant, it will also be used in +libsrc. + +\section S3 Global Object Access + +As mentioned, dimension, group, and type external id's (dimid, +grpid, typeid) are unique across the whole file. It is therefore +convenient to store in memory a per-file vector for each object +type such that the external id of the object is the same as the +position of that object in the corresponding per-file +vector. This maked lookup by external id efficient. +Note that this is was already the case for netcdf-3 (libsrc) so +this is a change for libsrc4 only. + +The global set of dimensions, types, and groups is maintained by +three instances of NClist in the NC_HDF5_FILE_INFO structure: +alldims, alltypes, and allgroups. +The position of the object within the corresponding list determines +the object's external id. Thus, a position of a dimension object within the +"alldims" field of the file structure determines its dimid. Similarly +for types and groups. + +\section S4 Per-Group Object Access + +Each group object (NC_GRP_INFO) contains four +instances of NC_listmap. One is for dimensions, one is for +types, one is for subgroups, and one is for variables. A +listmap is used for two reasons. First, allows name-based lookup +for these items. Second, the declaration order is maintained by +the list within the listmap's vector. Note that the position of +an object in a group listmap vector has no necessary +relationship to the position of that object within the global +vectors. Note also that there is no global vector for variables +because variable external ids are unique only within the +group. In this special case, the external id for the variable is +the same as its offset in the listmap's vector for the group. + +A note about typeids. Since user defined types have an external +id starting at NC_FIRSTUSERTYPEID, we leave the global type +vector entries 0..NC_FIRSTUSERTYPEID-1 empty. + +\section S5 Exceptions + +NC_Listmap is currently not used for enum constants and compound fields. +Additionally, it is not used for listing the dimensions associated +with a variable. + +References between meta-data objects (e.g. group parent or +containing group) are stored directly and not using any kind +of vector or hashtable. + +*/ diff --git a/examples/C/filter_example.c b/examples/C/filter_example.c index 639f31608f..02e00569ea 100644 --- a/examples/C/filter_example.c +++ b/examples/C/filter_example.c @@ -214,7 +214,7 @@ test_bzip2(void) /* Show chunking */ printf("show chunks:"); for(i=0;i= nelems */ - /* below gets xdr'd */ + /* begin xdr */ /* NCtype type = NC_ATTRIBUTE */ size_t nelems; /* length of the array */ NC_attr **value; + /* end xdr */ } NC_attrarray; /* Begin defined in attr.c */ @@ -177,8 +179,8 @@ typedef struct NC_var { size_t xsz; /* xszof 1 element */ size_t *shape; /* compiled info: dim->size of each dim */ off_t *dsizes; /* compiled info: the right to left product of shape */ - /* below gets xdr'd */ - NC_string *name; + /* begin xdr */ + NC_string* name; /* next two: formerly NC_iarray *assoc */ /* user definition */ size_t ndims; /* assoc->count */ int *dimids; /* assoc->value */ @@ -186,22 +188,19 @@ typedef struct NC_var { nc_type type; /* the discriminant */ size_t len; /* the total length originally allocated */ off_t begin; + /* end xdr */ int no_fill; /* whether fill mode is ON or OFF */ } NC_var; typedef struct NC_vararray { size_t nalloc; /* number allocated >= nelems */ - /* below gets xdr'd */ + /* begin xdr */ /* NCtype type = NC_VARIABLE */ size_t nelems; /* length of the array */ - NC_hashmap *hashmap; - NC_var **value; + NC_hashmap *hashmap; + NC_var **value; } NC_vararray; -/* Begin defined in lookup3.c */ - -/* End defined in lookup3.c */ - /* Begin defined in var.c */ extern void @@ -267,7 +266,6 @@ extern void NC_hashmapDelete(NC_hashmap*); /* end defined in nc_hashmap.c */ - #define IS_RECVAR(vp) \ ((vp)->shape != NULL ? (*(vp)->shape == NC_UNLIMITED) : 0 ) diff --git a/include/nchashmap.h b/include/nchashmap.h index fa84e4971c..1f65bf0132 100644 --- a/include/nchashmap.h +++ b/include/nchashmap.h @@ -4,58 +4,67 @@ * $Header$ *********************************************************************/ #ifndef NCHASHMAP_H -#define NCHASHMAP_H 1 - -#if defined(_CPLUSPLUS_) || defined(__CPLUSPLUS__) -extern "C" { -#endif - -#include "nclist.h" - -/* Define the type of the elements in the hashmap*/ -typedef unsigned long nchashid; - -typedef struct NChashmap { - size_t alloc; - size_t size; /* # of pairs still in table*/ - NClist** table; -} NChashmap; - -extern int nchashnull(void*); - -extern NChashmap* nchashnew(void); -extern NChashmap* nchashnew0(size_t); -extern int nchashfree(NChashmap*); - -/* Insert a (ncnchashid,void*) pair into the table*/ -/* Fail if already there*/ -extern int nchashinsert(NChashmap*, nchashid nchash, void* value); - -/* Insert a (nchashid,void*) pair into the table*/ -/* Overwrite if already there*/ -extern int nchashreplace(NChashmap*, nchashid nchash, void* value); - -/* lookup a nchashid and return found/notfound*/ -extern int nchashlookup(NChashmap*, nchashid nchash, void** valuep); - -/* lookup a nchashid and return 0 or the value*/ -extern void* nchashget(NChashmap*, nchashid nchash); - -/* remove a nchashid*/ -extern int nchashremove(NChashmap*, nchashid nchash); - -/* Return the ith pair; order is completely arbitrary*/ -/* Can be expensive*/ -extern int nchashith(NChashmap*, int i, nchashid*, void**); - -extern int nchashkeys(NChashmap* hm, nchashid** keylist); - -/* return the # of pairs in table*/ -#define nchashsize(hm) ((hm)?(hm)->size:0) - -#if defined(_CPLUSPLUS_) || defined(__CPLUSPLUS__) -} -#endif +#define NCHASHMAP_H + +/* +Data is presumed to be an index into some other table + Assume it can be compared using simple == +The key is some hash of some null terminated string. +*/ + +/*! Hashmap-related structs. + NOTES: + 1. 'data' is the dimid or varid which is non-negative. + 2. 'key' is a copy of the name (char*) of the corresponding object + (e.g. dim or var) + 3. hashkey is a hash of key. +*/ +typedef struct NC_hentry { + int flags; + void* data; + size_t hashkey; /* Hash id */ + char* key; /* actual key; do not free */ +} NC_hentry; + +/* +The hashmap object must give us the hash table (table), +the |table| size, and the # of defined entries in the table +*/ +typedef struct NC_hashmap { + size_t size; /* allocated */ + size_t count; + NC_hentry* table; +} NC_hashmap; + +/* defined in nc_hashmap.c */ + +/** Creates a new hashmap near the given size. */ +extern NC_hashmap* NC_hashmapnew(size_t startsize); + +/** Inserts a new element into the hashmap. */ +/* Note we pass the NC_hobjecty struct by value */ +extern int NC_hashmapadd(NC_hashmap*, void* data, const char* name); + +/** Removes the storage for the element of the key. + Return 1 if found, 0 otherwise; returns the data in datap if !null +*/ +extern int NC_hashmapremove(NC_hashmap*, const char* name, void** datap); + +/** Returns the data for the key. + Return 1 if found, 0 otherwise; returns the data in datap if !null +*/ +extern int NC_hashmapget(NC_hashmap*, const char*, void** datap); + +/** Change the data for the specified key + Return 1 if found, 0 otherwise +*/ +extern int NC_hashmapsetdata(NC_hashmap*, const char*, void* newdata); + +/** Returns the number of saved elements. */ +extern size_t NC_hashmapcount(NC_hashmap*); + +/** Reclaims the hashmap structure. */ +extern int NC_hashmapfree(NC_hashmap*); #endif /*NCHASHMAP_H*/ diff --git a/include/nclist.h b/include/nclist.h index f1760729ca..768750c7ba 100644 --- a/include/nclist.h +++ b/include/nclist.h @@ -12,25 +12,25 @@ extern "C" { extern int nclistnull(void*); typedef struct NClist { - unsigned long alloc; - unsigned long length; + size_t alloc; + size_t length; void** content; } NClist; extern NClist* nclistnew(void); extern int nclistfree(NClist*); extern int nclistfreeall(NClist*); -extern int nclistsetalloc(NClist*,unsigned long); -extern int nclistsetlength(NClist*,unsigned long); +extern int nclistsetalloc(NClist*,size_t); +extern int nclistsetlength(NClist*,size_t); /* Set the ith element */ -extern int nclistset(NClist*,unsigned long,void*); +extern int nclistset(NClist*,size_t,void*); /* Get value at position i */ -extern void* nclistget(NClist*,unsigned long);/* Return the ith element of l */ +extern void* nclistget(NClist*,size_t);/* Return the ith element of l */ /* Insert at position i; will push up elements i..|seq|. */ -extern int nclistinsert(NClist*,unsigned long,void*); +extern int nclistinsert(NClist*,size_t,void*); /* Remove element at position i; will move higher elements down */ -extern void* nclistremove(NClist* l, unsigned long i); +extern void* nclistremove(NClist* l, size_t i); /* Tail operations */ extern int nclistpush(NClist*,void*); /* Add at Tail */ diff --git a/include/nclistmap.h b/include/nclistmap.h new file mode 100644 index 0000000000..fec16e4827 --- /dev/null +++ b/include/nclistmap.h @@ -0,0 +1,100 @@ +/* +Copyright (c) 1998-2017 University Corporation for Atmospheric Research/Unidata +See LICENSE.txt for license information. +*/ + +#ifndef NCLISTMAP_H +#define NCLISTMAP_H + +#include "nclist.h" +#include "nchashmap.h" + +/* +This listmap datastructure is an ordered list of objects. It is +used pervasively in libsrc to store metadata relationships. The +goal is to provide both by-name (via nc_hashmap) and indexed +access (via NClist) to the objects in the listmap. Using +hashmap might be overkill for some relationships, but we can +sort that out later. +As a rule, we use this to store definitional relationships +such as (in groups) dimension definitions, variable definitions, type defs +and subgroup defs. We do not, as a rule, use this to store reference relationships +such as the list of dimensions for a variable. +*/ + +/* Generic list + matching hashtable */ +typedef struct NC_listmap { + NClist* list; + NC_hashmap* map; +} NC_listmap; + +/* Locate object by name in an NC_listmap */ +extern void* NC_listmap_get(NC_listmap* listmap, const char* name); + +/* Locate object by index in an NC_listmap */ +extern void* NC_listmap_iget(NC_listmap* listmap, size_t index); + +/* Get the index of an object; if not present, return 0 + (=> you have to do your own presence check to avoid ambiguity) +*/ +extern size_t NC_listmap_index(NC_listmap* listmap, void* obj); + +/* Add object to the end of an index; assume cast (char**)obj is defined */ +/* Return 1 if ok, 0 otherwise.*/ +extern int NC_listmap_add(NC_listmap* listmap, void* obj); + +/* Remove object from listmap; assume cast (char**)target is defined */ +/* Return 1 if ok, 0 otherwise.*/ +extern int NC_listmap_del(NC_listmap* listmap, void* target); + +/* Remove object from listmap by index; assume cast (char**)target is defined */ +/* Return 1 if ok, 0 otherwise.*/ +extern int NC_listmap_idel(NC_listmap* listmap, size_t index); + +/* Rehash object after it has been given a new name */ +/* Return 1 if ok, 0 otherwise.*/ +extern int NC_listmap_move(NC_listmap* listmap, void* obj, const char* oldname); + +/* Change data associated with a key */ +/* Return 1 if ok, 0 otherwise.*/ +extern int NC_listmap_setdata(NC_listmap* listmap, void* obj, void* data); + +/* Pseudo iterator; start index at 0, return 1 if more data, 0 if done. + Usage: + size_t iter; + void* data; + for(iter=0;NC_listmap_next(listmap,iter,&data);iter++) {f(data);} +*/ +extern size_t NC_listmap_next(NC_listmap*, size_t iter, void** datap); + +/* Reverse pseudo iterator; start index at 0, return 1 if more data, 0 if done. + Differs from NC_listmap_next in that it iterates from last to first. + This means that the iter value cannot be directly used as an index + for e.g. NC_listmap_iget(). + Usage: + size_t iter; + void* data; + for(iter=0;NC_listmap_prev(listmap,iter,&data);iter++) {f(data);} +*/ +extern size_t NC_listmap_prev(NC_listmap* listmap, size_t iter, void** datap); + +/* Reset a list map without free'ing the map itself */ +/* Return 1 if ok; 0 otherwise */ +extern int NC_listmap_clear(NC_listmap* listmap); + +/* Initialize a list map without malloc'ing the map itself */ +/* Return 1 if ok; 0 otherwise */ +extern int NC_listmap_init(NC_listmap* listmap, size_t initsize); + +extern int NC_listmap_verify(NC_listmap* lm, int dump); + +/* Inline functions */ + +/* Test if map has been initialized */ +#define NC_listmap_initialized(listmap) ((listmap)->list != NULL) + +/* Get number of entries in a listmap */ +/* size_t NC_listmap_size(NC_listmap* listmap) */ +#define NC_listmap_size(listmap) ((listmap)==NULL?0:(nclistlength((listmap)->list))) + +#endif /*NCLISTMAP_H*/ diff --git a/include/netcdf.h b/include/netcdf.h index 3cac52b74c..bae3e40308 100644 --- a/include/netcdf.h +++ b/include/netcdf.h @@ -418,6 +418,7 @@ by the desired type. */ /* Misc. additional errors */ #define NC_ENOTFOUND (-90) /**< No such file */ #define NC_ECANTREMOVE (-91) /**< Can't remove file */ +#define NC_EINTERNAL (-92) /**< NetCDF Library Internal Error */ /* The following was added in support of netcdf-4. Make all netcdf-4 error codes < -100 so that errors can be added to netcdf-3 if diff --git a/libdap2/dapdump.c b/libdap2/dapdump.c index 51e5d9fd8f..e66ea3db9d 100644 --- a/libdap2/dapdump.c +++ b/libdap2/dapdump.c @@ -440,7 +440,7 @@ dumpnode(CDFnode* node) ncbytescat(buf,tmp); snprintf(tmp,sizeof(tmp),"ncfullname=%s\n",node->ncfullname); ncbytescat(buf,tmp); - snprintf(tmp,sizeof(tmp),"|subnodes|=%ld\n",nclistlength(node->subnodes)); + snprintf(tmp,sizeof(tmp),"|subnodes|=%u\n",(unsigned)nclistlength(node->subnodes)); ncbytescat(buf,tmp); snprintf(tmp,sizeof(tmp),"externaltype=%d\n",node->externaltype); ncbytescat(buf,tmp); @@ -459,7 +459,7 @@ dumpnode(CDFnode* node) snprintf(tmp,sizeof(tmp),"attachment=%s\n", (node->attachment?node->attachment->ocname:"null")); ncbytescat(buf,tmp); - snprintf(tmp,sizeof(tmp),"rank=%lu\n",nclistlength(node->array.dimset0)); + snprintf(tmp,sizeof(tmp),"rank=%u\n",(unsigned)nclistlength(node->array.dimset0)); ncbytescat(buf,tmp); for(i=0;iarray.dimset0);i++) { CDFnode* dim = (CDFnode*)nclistget(node->array.dimset0,i); diff --git a/libdap2/dapincludes.h b/libdap2/dapincludes.h index 0b842da802..6fe1d79b54 100644 --- a/libdap2/dapincludes.h +++ b/libdap2/dapincludes.h @@ -17,7 +17,6 @@ #include "ncbytes.h" #include "nclist.h" -#include "nchashmap.h" #include "nclog.h" #include "ncuri.h" diff --git a/libdap4/d4chunk.c b/libdap4/d4chunk.c index 8e159b768c..c85b48b7b2 100644 --- a/libdap4/d4chunk.c +++ b/libdap4/d4chunk.c @@ -91,7 +91,7 @@ NCD4_dechunk(NCD4meta* metadata) metadata->localchecksumming = metadata->serial.remotechecksumming; metadata->serial.remotelittleendian = ((hdr.flags & LITTLE_ENDIAN_CHUNK) ? 1 : 0); - metadata->serial.dmr = p; + metadata->serial.dmr = (char*)p; metadata->serial.dmr[hdr.count-1] = '\0'; metadata->serial.dmr = strdup(metadata->serial.dmr); if(metadata->serial.dmr == NULL) diff --git a/libdap4/d4varx.c b/libdap4/d4varx.c index 2bbd28b6d7..09d71fc3c4 100644 --- a/libdap4/d4varx.c +++ b/libdap4/d4varx.c @@ -21,7 +21,7 @@ NCD4_get_vara(int ncid, int varid, { int ret; /* TODO: optimize since we know stride is 1 */ - ret = NCD4_get_vars(ncid,varid,start,edges,(ptrdiff_t *)nc_sizevector1,value,memtype); + ret = NCD4_get_vars(ncid,varid,start,edges,nc_ptrdiffvector1,value,memtype); return ret; } diff --git a/libdispatch/ddim.c b/libdispatch/ddim.c index 1ead3efefe..93e7364062 100644 --- a/libdispatch/ddim.c +++ b/libdispatch/ddim.c @@ -234,7 +234,7 @@ another dimension. For netCDF classic and 64-bit offset files, if the new name is longer than the old name, the netCDF dataset must be in define mode. -For netCDF-4 files the dataset is switched to define more for the +For netCDF-4 files the dataset is switched to define mode for the rename, regardless of the name length. \param ncid NetCDF or group ID, from a previous call to nc_open(), @@ -253,6 +253,7 @@ with length less than NC_MAX_NAME. \returns ::NC_ENAMEINUSE String match to name in use \returns ::NC_ENOMEM Memory allocation (malloc) failure \returns ::NC_EPERM Write to read only +\returns ::NC_ENOTINDEFINE Not in define mode and new name is longer than old. \section nc_rename_dim_example Example Here is an example using nc_rename_dim to rename the dimension lat to diff --git a/libdispatch/derror.c b/libdispatch/derror.c index 68cede30c6..c3c1bfae99 100644 --- a/libdispatch/derror.c +++ b/libdispatch/derror.c @@ -194,6 +194,8 @@ const char *nc_strerror(int ncerr1) return "NetCDF: file not found"; case NC_ECANTREMOVE: return "NetCDF: cannot delete file"; + case NC_EINTERNAL: + return "NetCDF: internal library error; Please contact Unidata support"; case NC_EHDFERR: return "NetCDF: HDF error"; case NC_ECANTREAD: diff --git a/libdispatch/dfile.c b/libdispatch/dfile.c index 68b090dbc6..cd365f151e 100644 --- a/libdispatch/dfile.c +++ b/libdispatch/dfile.c @@ -116,22 +116,18 @@ NC_interpret_magic_number(char* magic, int* model, int* version) /* Look at the magic number */ *model = 0; *version = 0; -#ifdef USE_NETCDF4 /* Use the complete magic number string for HDF5 */ if(memcmp(magic,HDF5_SIGNATURE,sizeof(HDF5_SIGNATURE))==0) { *model = NC_FORMATX_NC4; *version = 5; /* redundant */ goto done; } -#endif -#if defined(USE_NETCDF4) && defined(USE_HDF4) if(magic[0] == '\016' && magic[1] == '\003' && magic[2] == '\023' && magic[3] == '\001') { *model = NC_FORMATX_NC_HDF4; *version = 4; /* redundant */ goto done; } -#endif if(magic[0] == 'C' && magic[1] == 'D' && magic[2] == 'F') { if(magic[3] == '\001') { *version = 1; /* netcdf classic version 1 */ @@ -143,13 +139,11 @@ NC_interpret_magic_number(char* magic, int* model, int* version) *model = NC_FORMATX_NC3; goto done; } -#ifdef USE_CDF5 if(magic[3] == '\005') { *version = 5; /* cdf5 (including pnetcdf) file */ *model = NC_FORMATX_NC3; goto done; } -#endif } /* No match */ status = NC_ENOTNC; @@ -2023,6 +2017,28 @@ NC_open(const char *path0, int cmode, int basepe, size_t *chunksizehintp, return NC_ENOTNC; } + /* Suppress unsupported formats */ + { + int hdf5built = 0; + int hdf4built = 0; + int cdf5built = 0; +#ifdef USE_NETCDF4 + hdf5built = 1; + #ifdef USEHDF4 + hdf4built = 1; + #endif +#endif +#ifdef USE_CDF5 + cdf5built = 1; +#endif + if(!hdf5built && model == NC_FORMATX_NC4) + return NC_ENOTBUILT; + if(!hdf4built && model == NC_FORMATX_NC4 && version == 4) + return NC_ENOTBUILT; + if(!cdf5built && model == NC_FORMATX_NC3 && version == 5) + return NC_ENOTBUILT; + } + /* Force flag consistentcy */ if(model == NC_FORMATX_NC4 || model == NC_FORMATX_NC_HDF4 || model == NC_FORMATX_DAP4) cmode |= NC_NETCDF4; diff --git a/libdispatch/drc.c b/libdispatch/drc.c index 374ffcd70c..c1b8b0cfe4 100644 --- a/libdispatch/drc.c +++ b/libdispatch/drc.c @@ -33,7 +33,7 @@ See LICENSE.txt for license information. /* Forward */ static char* rcreadline(char** nextlinep); static void rctrim(char* text); -static NClist* rcorder(NClist* rc); +static void rcorder(NClist* rc); static int rccompile(const char* path); static struct NCTriple* rclocate(const char* key, const char* hostport); static int rcsearch(const char* prefix, const char* rcname, char** pathp); @@ -220,29 +220,36 @@ rctrim(char* text) /* Order the triples: those with urls must be first, but otherwise relative order does not matter. */ -static NClist* +static void rcorder(NClist* rc) { int i; int len = nclistlength(rc); - NClist* newrc = nclistnew(); - if(rc == NULL || len == 0) return newrc; - /* Two passes: 1) pull triples with host */ + NClist* tmprc = nclistnew(); + if(rc == NULL || len == 0) return; + /* Copy rc into tmprc and clear rc */ for(i=0;ihost == NULL) continue; - nclistpush(newrc,ti); + nclistpush(rc,ti); } /* pass 2 pull triples without host*/ for(i=0;ihost != NULL) continue; - nclistpush(newrc,ti); + nclistpush(rc,ti); } #ifdef D4DEBUG - storedump("reorder:",newrc); + storedump("reorder:",rc); #endif - return newrc; + nclistfree(tmprc); + } /* Create a triple store from a file */ @@ -250,7 +257,7 @@ static int rccompile(const char* path) { int ret = NC_NOERR; - NClist* rc = ncrc_globalstate.rcinfo.triples; + NClist* rc = NULL; char* contents = NULL; NCbytes* tmp = ncbytesnew(); NCURI* uri = NULL; @@ -262,8 +269,14 @@ rccompile(const char* path) } contents = ncbytesextract(tmp); if(contents == NULL) contents = strdup(""); - rcfreetriples(rc); /* clear out any old data */ - rc = nclistnew(); + /* Either reuse or create new */ + rc = ncrc_globalstate.rcinfo.triples; + if(rc != NULL) + rcfreetriples(rc); /* clear out any old data */ + else { + rc = nclistnew(); + ncrc_globalstate.rcinfo.triples = rc; + } nextline = contents; for(;;) { char* line; @@ -326,6 +339,7 @@ rccompile(const char* path) rcorder(rc); done: + if(contents) free(contents); ncurifree(uri); ncbytesfree(tmp); return (ret); @@ -338,8 +352,7 @@ rccompile(const char* path) static struct NCTriple* rclocate(const char* key, const char* hostport) { - int i, found, t; - size_t hplen; + int i,found; NClist* rc = ncrc_globalstate.rcinfo.triples; NCTriple* triple = NULL; @@ -351,7 +364,8 @@ rclocate(const char* key, const char* hostport) for(found=0,i=0;ihost); + size_t hplen = (triple->host == NULL ? 0 : strlen(triple->host)); + int t; if(strcmp(key,triple->key) != 0) continue; /* keys do not match */ /* If the triple entry has no url, then use it (because we have checked all other cases)*/ diff --git a/libdispatch/ncbytes.c b/libdispatch/ncbytes.c index 6618986bce..7d0aa904c3 100644 --- a/libdispatch/ncbytes.c +++ b/libdispatch/ncbytes.c @@ -46,7 +46,7 @@ ncbytessetalloc(NCbytes* bb, unsigned long sz) { char* newcontent; if(bb == NULL) return ncbytesfail(); - if(sz <= 0) {sz = (bb->alloc?2*bb->alloc:DEFAULTALLOC);} + if(sz == 0) {sz = (bb->alloc?2*bb->alloc:DEFAULTALLOC);} if(bb->alloc >= sz) return TRUE; if(bb->nonextendible) return ncbytesfail(); newcontent=(char*)calloc(sz,sizeof(char)); @@ -110,9 +110,7 @@ ncbytesappend(NCbytes* bb, char elem) { if(bb == NULL) return ncbytesfail(); /* We need space for the char + null */ - while(bb->length+1 >= bb->alloc) { - if(!ncbytessetalloc(bb,0)) return ncbytesfail(); - } + ncbytessetalloc(bb,bb->length+2); bb->content[bb->length] = (char)(elem & 0xFF); bb->length++; bb->content[bb->length] = '\0'; diff --git a/libdispatch/nchashmap.c b/libdispatch/nchashmap.c index cd8b71c505..584c0b1990 100644 --- a/libdispatch/nchashmap.c +++ b/libdispatch/nchashmap.c @@ -1,206 +1,1982 @@ -/********************************************************************* - * Copyright 2010, UCAR/Unidata - * See netcdf/COPYRIGHT file for copying and redistribution conditions. - * $Header$ - *********************************************************************/ +/* +Copyright (c) 1998-2017 University Corporation for Atmospheric Research/Unidata +See LICENSE.txt for license information. +*/ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#define NEWHASHMAP -#include +#include "config.h" #include +#include #include +#include +#ifdef HAVE_STDINT_H +#include +#endif +#include "nc.h" #include "nchashmap.h" +#include "nc3internal.h" + +#define VERIFY -#ifndef TRUE -#define TRUE 1 +#ifdef VERIFY +#define ASSERT(x) assert(x) +#else +#define ASSERT(x) #endif -#ifndef FALSE -#define FALSE 0 + +/* See lookup3.c */ +extern unsigned int hash_fast(const void* key, size_t length); + +/* this should be prime */ +#define TABLE_STARTSIZE 1021 + +/* Flags must be powers of 2 */ +/* Slot has data */ +#define ACTIVE 1 +/* Slot had its value deleted */ +#define DELETED 2 +/* Slot is unused */ +#define EMPTY 0 + +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +/* Forward */ +static unsigned int NC_nprimes; +static unsigned int NC_primes[16386]; +static unsigned int findPrimeGreaterThan(size_t val); + +static void +rehash(NC_hashmap* hm) +{ + size_t size = hm->size; + size_t count = hm->count; + NC_hentry* oldtable = hm->table; + + hm->size = findPrimeGreaterThan(size<<1); + hm->table = (NC_hentry*)calloc(sizeof(NC_hentry), hm->size); + hm->count = 0; + + while(size > 0) { + --size; + if(oldtable[size].flags == ACTIVE) { + void* data = oldtable[size].data; + char* key = oldtable[size].key; + NC_hashmapadd(hm, data, key); +#ifdef VERIFY + { void* data2; + ASSERT(NC_hashmapget(hm, key, &data2) == 1); + ASSERT(data == data2); + } #endif + } + } + free(oldtable); + ASSERT(count == hm->count); +} -#define DEFAULTALLOC 31 +/* Locate where given object is or should be placed in indexp. + if fail to find spot return 0 else 1. + If deletok then a deleted slot is ok to return; + If hashkeyp is non-null, then return hashkey + return invariant: return == 0 || *indexp is defined + */ +static int +locate(NC_hashmap* hash, const char* key, size_t* indexp, size_t* hashkeyp, int deletedok) +{ + size_t i; + size_t keylen = strlen(key); + size_t hashkey = hash_fast(key, keylen); + size_t index = hashkey % hash->size; + size_t step = 1; /* simple linear probe */ + int deletefound = 0; + size_t deletedindex = 0; /* first deleted entry encountered */ -NChashmap* nchashnew(void) {return nchashnew0(DEFAULTALLOC);} + if(hashkeyp) *hashkeyp = hashkey; + /* Search table using linear probing */ + for (i = 0; i < hash->size; i++) { + NC_hentry entry = hash->table[index]; + if(entry.flags & ACTIVE) { + if(entry.hashkey == hashkey + && strncmp(key,entry.key,keylen)==0) { + if(indexp) *indexp = index; + return 1; + } + /* Keep looking */ + } else if(entry.flags & DELETED) { + if(!deletefound) {/* save this position */ + deletefound = 1; + deletedindex = index; + } + /* Keep looking */ + } else { /* Empty slot */ + if(indexp) *indexp = index; + return 1; + } + /* linear probe */ + index = (index + step) % hash->size; + } + if(deletedok && deletefound) { + if(indexp) *indexp = deletedindex; + return 1; + } + return 0; +} -NChashmap* nchashnew0(size_t alloc) +NC_hashmap* +NC_hashmapnew(size_t startsize) { - NChashmap* hm; - if(sizeof(nchashid) != sizeof(void*)){ - fprintf(stderr,"nchashmap: sizeof(nchashid) != sizeof(void*)"); - abort(); - } - hm = (NChashmap*)malloc(sizeof(NChashmap)); - if(!hm) return NULL; - hm->alloc = alloc; - hm->table = (NClist**)malloc(hm->alloc*sizeof(NClist*)); - if(!hm->table) {free(hm); return NULL;} - memset((void*)hm->table,0,hm->alloc*sizeof(NClist*)); - return hm; + NC_hashmap* hm = (NC_hashmap*)malloc(sizeof(NC_hashmap)); + + if(startsize == 0) + startsize = TABLE_STARTSIZE; + else { + startsize *= 4; + startsize /= 3; + startsize = findPrimeGreaterThan(startsize); + } + hm->table = (NC_hentry*)calloc(sizeof(NC_hentry), (size_t)startsize); + hm->size = startsize; + hm->count = 0; + return hm; } int -nchashfree(NChashmap* hm) +NC_hashmapadd(NC_hashmap* hash, void* data, const char* key) { - if(hm) { - int i; - for(i=0;ialloc;i++) { - if(hm->table[i] != NULL) nclistfree(hm->table[i]); - } - free(hm->table); - free(hm); - } - return TRUE; + if(hash->size*3/4 <= hash->count) + rehash(hash); + + for(;;) { + size_t index, hashkey; + if(!locate(hash,key,&index,&hashkey,1)) { + rehash(hash); + continue; /* try on larger table */ + } + NC_hentry* entry = &hash->table[index]; + if(entry->flags & ACTIVE) { + /* key already exists in table => overwrite */ + entry->data = data; + return 1; + } else { /* !ACTIVE || DELETED */ + entry->flags = ACTIVE; + entry->data = data; + entry->hashkey = hashkey; + entry->key = (char*)key; + ++hash->count; + return 1; + } + } + return 0; } -/* Insert a pair into the table*/ -/* Fail if already there*/ int -nchashinsert(NChashmap* hm, nchashid hash, void* value) +NC_hashmapremove(NC_hashmap* hash, const char* key, void** datap) { - int i; - size_t offset,len; - NClist* seq; - void** list; - - offset = (hash % hm->alloc); - seq = hm->table[offset]; - if(seq == NULL) {seq = nclistnew(); hm->table[offset] = seq;} - len = nclistlength(seq); - list = nclistcontents(seq); - for(i=0;isize++; - return TRUE; + size_t index; + NC_hentry entry; + if(!locate(hash,key,&index,NULL,0)) + return 0; /* not present */ + entry = hash->table[index]; + + if(entry.flags & ACTIVE) { /* matching entry found */ + hash->table[index].flags = DELETED; /* also turn off ACTIVE */ + hash->table[index].key = NULL; + --hash->count; + if(datap) *datap = hash->table[index].data; + return 1; + } else /* !ACTIVE && !DELETED => not in table*/ + return 0; } -/* Insert a pair into the table*/ -/* Overwrite if already there*/ int -nchashreplace(NChashmap* hm, nchashid hash, void* value) +NC_hashmapget(NC_hashmap* hash, const char* key, void** datap) { - int i; - size_t offset,len; - NClist* seq; - void** list; - - offset = (hash % hm->alloc); - seq = hm->table[offset]; - if(seq == NULL) {seq = nclistnew(); hm->table[offset] = seq;} - len = nclistlength(seq); - list = nclistcontents(seq); - for(i=0;icount) { + size_t index; + NC_hentry entry; + if(!locate(hash,key,&index,NULL,0)) + return 0; /* not present */ + entry = hash->table[index]; + if(entry.flags & ACTIVE) { + if(datap) *datap = entry.data; + return 1; + } else /* Not found */ + return 0; } - nclistpush(seq,(void*)hash); - nclistpush(seq,value); - hm->size++; - return TRUE; + return 0; } -/* remove a nchashid*/ -/* return TRUE if found, false otherwise*/ +/** Change the data for the specified key + Return 1 if found, 0 otherwise +*/ int -nchashremove(NChashmap* hm, nchashid hash) +NC_hashmapsetdata(NC_hashmap* hash, const char* key, void* newdata) { - size_t i; - size_t offset,len; - NClist* seq; - void** list; - - offset = (hash % hm->alloc); - seq = hm->table[offset]; - if(seq == NULL) return TRUE; - len = nclistlength(seq); - list = nclistcontents(seq); - for(i=0;isize--; - if(nclistlength(seq) == 0) {nclistfree(seq); hm->table[offset] = NULL;} - return TRUE; - } - } - return FALSE; + size_t index; + NC_hentry* entry; + if(hash == NULL || hash->count == 0 || key == NULL) + return 0; /* no such entry */ + if(!locate(hash,key,&index,NULL,0)) + return 0; /* not present */ + entry = &hash->table[index]; + assert((entry->flags & ACTIVE) == ACTIVE); + entry->data = newdata; + return 1; } -/* lookup a nchashid; return DATANULL if not found*/ -/* (use hashlookup if the possible values include 0)*/ -void* -nchashget(NChashmap* hm, nchashid hash) +size_t +NC_hashmapcount(NC_hashmap* hash) { - void* value = NULL; - if(!nchashlookup(hm,hash,&value)) return NULL; - return value; + return hash->count; } int -nchashlookup(NChashmap* hm, nchashid hash, void** valuep) +NC_hashmapfree(NC_hashmap* hash) { - int i; - size_t offset,len; - NClist* seq; - void** list; - - offset = (hash % hm->alloc); - seq = hm->table[offset]; - if(seq == NULL) return TRUE; - len = nclistlength(seq); - list = nclistcontents(seq); - for(i=0;itable); + free(hash); } - return FALSE; + return 1; } -/* Return the ith pair; order is completely arbitrary*/ -/* Can be expensive*/ -int -nchashith(NChashmap* hm, int index, nchashid* hashp, void** elemp) +/**************************************************/ +/* Prime table */ + +/* +Binary search prime table for first prime just greater than or +equal to val +*/ + +static unsigned int +findPrimeGreaterThan(size_t val) { - int i; - if(hm == NULL) return FALSE; - for(i=0;ialloc;i++) { - NClist* seq = hm->table[i]; - int len = nclistlength(seq) / 2; - if(len == 0) continue; - if((index - len) < 0) { - if(hashp) *hashp = (nchashid)nclistget(seq,index*2); - if(elemp) *elemp = nclistget(seq,(index*2)+1); - return TRUE; - } - index -= len; - } - return FALSE; + int n = NC_nprimes; + int L = 1; /* skip leading flag number */ + int R = (n - 2); /* skip trailing flag */ + unsigned int v = 0; + + if(val >= 0xFFFFFFFF) + return 0; /* Too big */ + v = (unsigned int)val; + + for(;;) { + if(L >= R) break; + int m = (L + R) / 2; + /* is this an acceptable prime? */ + if(NC_primes[m-1] < v && NC_primes[m] >= v) + return NC_primes[m]; /* acceptable*/ + else if(NC_primes[m-1] >= v) + R = m; + else if(NC_primes[m] < v) + L = m; + } + return 0; } -/* Return all the keys; order is completely arbitrary*/ -/* Can be expensive*/ -int -nchashkeys(NChashmap* hm, nchashid** keylist) +/* +Table of the the first 2^14 primes. +Add leading and trailing values to simplify +search binary algorithm. +*/ +static unsigned int NC_primes[16386] = { +0U, +2U, 3U, 5U, 7U, 11U, 13U, 17U, 19U, 23U, 29U, +31U, 37U, 41U, 43U, 47U, 53U, 59U, 61U, 67U, 71U, +73U, 79U, 83U, 89U, 97U, 101U, 103U, 107U, 109U, 113U, +127U, 131U, 137U, 139U, 149U, 151U, 157U, 163U, 167U, 173U, +179U, 181U, 191U, 193U, 197U, 199U, 211U, 223U, 227U, 229U, +233U, 239U, 241U, 251U, 257U, 263U, 269U, 271U, 277U, 281U, +283U, 293U, 307U, 311U, 313U, 317U, 331U, 337U, 347U, 349U, +353U, 359U, 367U, 373U, 379U, 383U, 389U, 397U, 401U, 409U, +419U, 421U, 431U, 433U, 439U, 443U, 449U, 457U, 461U, 463U, +467U, 479U, 487U, 491U, 499U, 503U, 509U, 521U, 523U, 541U, +547U, 557U, 563U, 569U, 571U, 577U, 587U, 593U, 599U, 601U, +607U, 613U, 617U, 619U, 631U, 641U, 643U, 647U, 653U, 659U, +661U, 673U, 677U, 683U, 691U, 701U, 709U, 719U, 727U, 733U, +739U, 743U, 751U, 757U, 761U, 769U, 773U, 787U, 797U, 809U, +811U, 821U, 823U, 827U, 829U, 839U, 853U, 857U, 859U, 863U, +877U, 881U, 883U, 887U, 907U, 911U, 919U, 929U, 937U, 941U, +947U, 953U, 967U, 971U, 977U, 983U, 991U, 997U, 1009U, 1013U, +1019U, 1021U, 1031U, 1033U, 1039U, 1049U, 1051U, 1061U, 1063U, 1069U, +1087U, 1091U, 1093U, 1097U, 1103U, 1109U, 1117U, 1123U, 1129U, 1151U, +1153U, 1163U, 1171U, 1181U, 1187U, 1193U, 1201U, 1213U, 1217U, 1223U, +1229U, 1231U, 1237U, 1249U, 1259U, 1277U, 1279U, 1283U, 1289U, 1291U, +1297U, 1301U, 1303U, 1307U, 1319U, 1321U, 1327U, 1361U, 1367U, 1373U, +1381U, 1399U, 1409U, 1423U, 1427U, 1429U, 1433U, 1439U, 1447U, 1451U, +1453U, 1459U, 1471U, 1481U, 1483U, 1487U, 1489U, 1493U, 1499U, 1511U, +1523U, 1531U, 1543U, 1549U, 1553U, 1559U, 1567U, 1571U, 1579U, 1583U, +1597U, 1601U, 1607U, 1609U, 1613U, 1619U, 1621U, 1627U, 1637U, 1657U, +1663U, 1667U, 1669U, 1693U, 1697U, 1699U, 1709U, 1721U, 1723U, 1733U, +1741U, 1747U, 1753U, 1759U, 1777U, 1783U, 1787U, 1789U, 1801U, 1811U, +1823U, 1831U, 1847U, 1861U, 1867U, 1871U, 1873U, 1877U, 1879U, 1889U, +1901U, 1907U, 1913U, 1931U, 1933U, 1949U, 1951U, 1973U, 1979U, 1987U, +1993U, 1997U, 1999U, 2003U, 2011U, 2017U, 2027U, 2029U, 2039U, 2053U, +2063U, 2069U, 2081U, 2083U, 2087U, 2089U, 2099U, 2111U, 2113U, 2129U, +2131U, 2137U, 2141U, 2143U, 2153U, 2161U, 2179U, 2203U, 2207U, 2213U, +2221U, 2237U, 2239U, 2243U, 2251U, 2267U, 2269U, 2273U, 2281U, 2287U, +2293U, 2297U, 2309U, 2311U, 2333U, 2339U, 2341U, 2347U, 2351U, 2357U, +2371U, 2377U, 2381U, 2383U, 2389U, 2393U, 2399U, 2411U, 2417U, 2423U, +2437U, 2441U, 2447U, 2459U, 2467U, 2473U, 2477U, 2503U, 2521U, 2531U, +2539U, 2543U, 2549U, 2551U, 2557U, 2579U, 2591U, 2593U, 2609U, 2617U, +2621U, 2633U, 2647U, 2657U, 2659U, 2663U, 2671U, 2677U, 2683U, 2687U, +2689U, 2693U, 2699U, 2707U, 2711U, 2713U, 2719U, 2729U, 2731U, 2741U, +2749U, 2753U, 2767U, 2777U, 2789U, 2791U, 2797U, 2801U, 2803U, 2819U, +2833U, 2837U, 2843U, 2851U, 2857U, 2861U, 2879U, 2887U, 2897U, 2903U, +2909U, 2917U, 2927U, 2939U, 2953U, 2957U, 2963U, 2969U, 2971U, 2999U, +3001U, 3011U, 3019U, 3023U, 3037U, 3041U, 3049U, 3061U, 3067U, 3079U, +3083U, 3089U, 3109U, 3119U, 3121U, 3137U, 3163U, 3167U, 3169U, 3181U, +3187U, 3191U, 3203U, 3209U, 3217U, 3221U, 3229U, 3251U, 3253U, 3257U, +3259U, 3271U, 3299U, 3301U, 3307U, 3313U, 3319U, 3323U, 3329U, 3331U, +3343U, 3347U, 3359U, 3361U, 3371U, 3373U, 3389U, 3391U, 3407U, 3413U, +3433U, 3449U, 3457U, 3461U, 3463U, 3467U, 3469U, 3491U, 3499U, 3511U, +3517U, 3527U, 3529U, 3533U, 3539U, 3541U, 3547U, 3557U, 3559U, 3571U, +3581U, 3583U, 3593U, 3607U, 3613U, 3617U, 3623U, 3631U, 3637U, 3643U, +3659U, 3671U, 3673U, 3677U, 3691U, 3697U, 3701U, 3709U, 3719U, 3727U, +3733U, 3739U, 3761U, 3767U, 3769U, 3779U, 3793U, 3797U, 3803U, 3821U, +3823U, 3833U, 3847U, 3851U, 3853U, 3863U, 3877U, 3881U, 3889U, 3907U, +3911U, 3917U, 3919U, 3923U, 3929U, 3931U, 3943U, 3947U, 3967U, 3989U, +4001U, 4003U, 4007U, 4013U, 4019U, 4021U, 4027U, 4049U, 4051U, 4057U, +4073U, 4079U, 4091U, 4093U, 4099U, 4111U, 4127U, 4129U, 4133U, 4139U, +4153U, 4157U, 4159U, 4177U, 4201U, 4211U, 4217U, 4219U, 4229U, 4231U, +4241U, 4243U, 4253U, 4259U, 4261U, 4271U, 4273U, 4283U, 4289U, 4297U, +4327U, 4337U, 4339U, 4349U, 4357U, 4363U, 4373U, 4391U, 4397U, 4409U, +4421U, 4423U, 4441U, 4447U, 4451U, 4457U, 4463U, 4481U, 4483U, 4493U, +4507U, 4513U, 4517U, 4519U, 4523U, 4547U, 4549U, 4561U, 4567U, 4583U, +4591U, 4597U, 4603U, 4621U, 4637U, 4639U, 4643U, 4649U, 4651U, 4657U, +4663U, 4673U, 4679U, 4691U, 4703U, 4721U, 4723U, 4729U, 4733U, 4751U, +4759U, 4783U, 4787U, 4789U, 4793U, 4799U, 4801U, 4813U, 4817U, 4831U, +4861U, 4871U, 4877U, 4889U, 4903U, 4909U, 4919U, 4931U, 4933U, 4937U, +4943U, 4951U, 4957U, 4967U, 4969U, 4973U, 4987U, 4993U, 4999U, 5003U, +5009U, 5011U, 5021U, 5023U, 5039U, 5051U, 5059U, 5077U, 5081U, 5087U, +5099U, 5101U, 5107U, 5113U, 5119U, 5147U, 5153U, 5167U, 5171U, 5179U, +5189U, 5197U, 5209U, 5227U, 5231U, 5233U, 5237U, 5261U, 5273U, 5279U, +5281U, 5297U, 5303U, 5309U, 5323U, 5333U, 5347U, 5351U, 5381U, 5387U, +5393U, 5399U, 5407U, 5413U, 5417U, 5419U, 5431U, 5437U, 5441U, 5443U, +5449U, 5471U, 5477U, 5479U, 5483U, 5501U, 5503U, 5507U, 5519U, 5521U, +5527U, 5531U, 5557U, 5563U, 5569U, 5573U, 5581U, 5591U, 5623U, 5639U, +5641U, 5647U, 5651U, 5653U, 5657U, 5659U, 5669U, 5683U, 5689U, 5693U, +5701U, 5711U, 5717U, 5737U, 5741U, 5743U, 5749U, 5779U, 5783U, 5791U, +5801U, 5807U, 5813U, 5821U, 5827U, 5839U, 5843U, 5849U, 5851U, 5857U, +5861U, 5867U, 5869U, 5879U, 5881U, 5897U, 5903U, 5923U, 5927U, 5939U, +5953U, 5981U, 5987U, 6007U, 6011U, 6029U, 6037U, 6043U, 6047U, 6053U, +6067U, 6073U, 6079U, 6089U, 6091U, 6101U, 6113U, 6121U, 6131U, 6133U, +6143U, 6151U, 6163U, 6173U, 6197U, 6199U, 6203U, 6211U, 6217U, 6221U, +6229U, 6247U, 6257U, 6263U, 6269U, 6271U, 6277U, 6287U, 6299U, 6301U, +6311U, 6317U, 6323U, 6329U, 6337U, 6343U, 6353U, 6359U, 6361U, 6367U, +6373U, 6379U, 6389U, 6397U, 6421U, 6427U, 6449U, 6451U, 6469U, 6473U, +6481U, 6491U, 6521U, 6529U, 6547U, 6551U, 6553U, 6563U, 6569U, 6571U, +6577U, 6581U, 6599U, 6607U, 6619U, 6637U, 6653U, 6659U, 6661U, 6673U, +6679U, 6689U, 6691U, 6701U, 6703U, 6709U, 6719U, 6733U, 6737U, 6761U, +6763U, 6779U, 6781U, 6791U, 6793U, 6803U, 6823U, 6827U, 6829U, 6833U, +6841U, 6857U, 6863U, 6869U, 6871U, 6883U, 6899U, 6907U, 6911U, 6917U, +6947U, 6949U, 6959U, 6961U, 6967U, 6971U, 6977U, 6983U, 6991U, 6997U, +7001U, 7013U, 7019U, 7027U, 7039U, 7043U, 7057U, 7069U, 7079U, 7103U, +7109U, 7121U, 7127U, 7129U, 7151U, 7159U, 7177U, 7187U, 7193U, 7207U, +7211U, 7213U, 7219U, 7229U, 7237U, 7243U, 7247U, 7253U, 7283U, 7297U, +7307U, 7309U, 7321U, 7331U, 7333U, 7349U, 7351U, 7369U, 7393U, 7411U, +7417U, 7433U, 7451U, 7457U, 7459U, 7477U, 7481U, 7487U, 7489U, 7499U, +7507U, 7517U, 7523U, 7529U, 7537U, 7541U, 7547U, 7549U, 7559U, 7561U, +7573U, 7577U, 7583U, 7589U, 7591U, 7603U, 7607U, 7621U, 7639U, 7643U, +7649U, 7669U, 7673U, 7681U, 7687U, 7691U, 7699U, 7703U, 7717U, 7723U, +7727U, 7741U, 7753U, 7757U, 7759U, 7789U, 7793U, 7817U, 7823U, 7829U, +7841U, 7853U, 7867U, 7873U, 7877U, 7879U, 7883U, 7901U, 7907U, 7919U, +7927U, 7933U, 7937U, 7949U, 7951U, 7963U, 7993U, 8009U, 8011U, 8017U, +8039U, 8053U, 8059U, 8069U, 8081U, 8087U, 8089U, 8093U, 8101U, 8111U, +8117U, 8123U, 8147U, 8161U, 8167U, 8171U, 8179U, 8191U, 8209U, 8219U, +8221U, 8231U, 8233U, 8237U, 8243U, 8263U, 8269U, 8273U, 8287U, 8291U, +8293U, 8297U, 8311U, 8317U, 8329U, 8353U, 8363U, 8369U, 8377U, 8387U, +8389U, 8419U, 8423U, 8429U, 8431U, 8443U, 8447U, 8461U, 8467U, 8501U, +8513U, 8521U, 8527U, 8537U, 8539U, 8543U, 8563U, 8573U, 8581U, 8597U, +8599U, 8609U, 8623U, 8627U, 8629U, 8641U, 8647U, 8663U, 8669U, 8677U, +8681U, 8689U, 8693U, 8699U, 8707U, 8713U, 8719U, 8731U, 8737U, 8741U, +8747U, 8753U, 8761U, 8779U, 8783U, 8803U, 8807U, 8819U, 8821U, 8831U, +8837U, 8839U, 8849U, 8861U, 8863U, 8867U, 8887U, 8893U, 8923U, 8929U, +8933U, 8941U, 8951U, 8963U, 8969U, 8971U, 8999U, 9001U, 9007U, 9011U, +9013U, 9029U, 9041U, 9043U, 9049U, 9059U, 9067U, 9091U, 9103U, 9109U, +9127U, 9133U, 9137U, 9151U, 9157U, 9161U, 9173U, 9181U, 9187U, 9199U, +9203U, 9209U, 9221U, 9227U, 9239U, 9241U, 9257U, 9277U, 9281U, 9283U, +9293U, 9311U, 9319U, 9323U, 9337U, 9341U, 9343U, 9349U, 9371U, 9377U, +9391U, 9397U, 9403U, 9413U, 9419U, 9421U, 9431U, 9433U, 9437U, 9439U, +9461U, 9463U, 9467U, 9473U, 9479U, 9491U, 9497U, 9511U, 9521U, 9533U, +9539U, 9547U, 9551U, 9587U, 9601U, 9613U, 9619U, 9623U, 9629U, 9631U, +9643U, 9649U, 9661U, 9677U, 9679U, 9689U, 9697U, 9719U, 9721U, 9733U, +9739U, 9743U, 9749U, 9767U, 9769U, 9781U, 9787U, 9791U, 9803U, 9811U, +9817U, 9829U, 9833U, 9839U, 9851U, 9857U, 9859U, 9871U, 9883U, 9887U, +9901U, 9907U, 9923U, 9929U, 9931U, 9941U, 9949U, 9967U, 9973U, 10007U, +10009U, 10037U, 10039U, 10061U, 10067U, 10069U, 10079U, 10091U, 10093U, 10099U, +10103U, 10111U, 10133U, 10139U, 10141U, 10151U, 10159U, 10163U, 10169U, 10177U, +10181U, 10193U, 10211U, 10223U, 10243U, 10247U, 10253U, 10259U, 10267U, 10271U, +10273U, 10289U, 10301U, 10303U, 10313U, 10321U, 10331U, 10333U, 10337U, 10343U, +10357U, 10369U, 10391U, 10399U, 10427U, 10429U, 10433U, 10453U, 10457U, 10459U, +10463U, 10477U, 10487U, 10499U, 10501U, 10513U, 10529U, 10531U, 10559U, 10567U, +10589U, 10597U, 10601U, 10607U, 10613U, 10627U, 10631U, 10639U, 10651U, 10657U, +10663U, 10667U, 10687U, 10691U, 10709U, 10711U, 10723U, 10729U, 10733U, 10739U, +10753U, 10771U, 10781U, 10789U, 10799U, 10831U, 10837U, 10847U, 10853U, 10859U, +10861U, 10867U, 10883U, 10889U, 10891U, 10903U, 10909U, 10937U, 10939U, 10949U, +10957U, 10973U, 10979U, 10987U, 10993U, 11003U, 11027U, 11047U, 11057U, 11059U, +11069U, 11071U, 11083U, 11087U, 11093U, 11113U, 11117U, 11119U, 11131U, 11149U, +11159U, 11161U, 11171U, 11173U, 11177U, 11197U, 11213U, 11239U, 11243U, 11251U, +11257U, 11261U, 11273U, 11279U, 11287U, 11299U, 11311U, 11317U, 11321U, 11329U, +11351U, 11353U, 11369U, 11383U, 11393U, 11399U, 11411U, 11423U, 11437U, 11443U, +11447U, 11467U, 11471U, 11483U, 11489U, 11491U, 11497U, 11503U, 11519U, 11527U, +11549U, 11551U, 11579U, 11587U, 11593U, 11597U, 11617U, 11621U, 11633U, 11657U, +11677U, 11681U, 11689U, 11699U, 11701U, 11717U, 11719U, 11731U, 11743U, 11777U, +11779U, 11783U, 11789U, 11801U, 11807U, 11813U, 11821U, 11827U, 11831U, 11833U, +11839U, 11863U, 11867U, 11887U, 11897U, 11903U, 11909U, 11923U, 11927U, 11933U, +11939U, 11941U, 11953U, 11959U, 11969U, 11971U, 11981U, 11987U, 12007U, 12011U, +12037U, 12041U, 12043U, 12049U, 12071U, 12073U, 12097U, 12101U, 12107U, 12109U, +12113U, 12119U, 12143U, 12149U, 12157U, 12161U, 12163U, 12197U, 12203U, 12211U, +12227U, 12239U, 12241U, 12251U, 12253U, 12263U, 12269U, 12277U, 12281U, 12289U, +12301U, 12323U, 12329U, 12343U, 12347U, 12373U, 12377U, 12379U, 12391U, 12401U, +12409U, 12413U, 12421U, 12433U, 12437U, 12451U, 12457U, 12473U, 12479U, 12487U, +12491U, 12497U, 12503U, 12511U, 12517U, 12527U, 12539U, 12541U, 12547U, 12553U, +12569U, 12577U, 12583U, 12589U, 12601U, 12611U, 12613U, 12619U, 12637U, 12641U, +12647U, 12653U, 12659U, 12671U, 12689U, 12697U, 12703U, 12713U, 12721U, 12739U, +12743U, 12757U, 12763U, 12781U, 12791U, 12799U, 12809U, 12821U, 12823U, 12829U, +12841U, 12853U, 12889U, 12893U, 12899U, 12907U, 12911U, 12917U, 12919U, 12923U, +12941U, 12953U, 12959U, 12967U, 12973U, 12979U, 12983U, 13001U, 13003U, 13007U, +13009U, 13033U, 13037U, 13043U, 13049U, 13063U, 13093U, 13099U, 13103U, 13109U, +13121U, 13127U, 13147U, 13151U, 13159U, 13163U, 13171U, 13177U, 13183U, 13187U, +13217U, 13219U, 13229U, 13241U, 13249U, 13259U, 13267U, 13291U, 13297U, 13309U, +13313U, 13327U, 13331U, 13337U, 13339U, 13367U, 13381U, 13397U, 13399U, 13411U, +13417U, 13421U, 13441U, 13451U, 13457U, 13463U, 13469U, 13477U, 13487U, 13499U, +13513U, 13523U, 13537U, 13553U, 13567U, 13577U, 13591U, 13597U, 13613U, 13619U, +13627U, 13633U, 13649U, 13669U, 13679U, 13681U, 13687U, 13691U, 13693U, 13697U, +13709U, 13711U, 13721U, 13723U, 13729U, 13751U, 13757U, 13759U, 13763U, 13781U, +13789U, 13799U, 13807U, 13829U, 13831U, 13841U, 13859U, 13873U, 13877U, 13879U, +13883U, 13901U, 13903U, 13907U, 13913U, 13921U, 13931U, 13933U, 13963U, 13967U, +13997U, 13999U, 14009U, 14011U, 14029U, 14033U, 14051U, 14057U, 14071U, 14081U, +14083U, 14087U, 14107U, 14143U, 14149U, 14153U, 14159U, 14173U, 14177U, 14197U, +14207U, 14221U, 14243U, 14249U, 14251U, 14281U, 14293U, 14303U, 14321U, 14323U, +14327U, 14341U, 14347U, 14369U, 14387U, 14389U, 14401U, 14407U, 14411U, 14419U, +14423U, 14431U, 14437U, 14447U, 14449U, 14461U, 14479U, 14489U, 14503U, 14519U, +14533U, 14537U, 14543U, 14549U, 14551U, 14557U, 14561U, 14563U, 14591U, 14593U, +14621U, 14627U, 14629U, 14633U, 14639U, 14653U, 14657U, 14669U, 14683U, 14699U, +14713U, 14717U, 14723U, 14731U, 14737U, 14741U, 14747U, 14753U, 14759U, 14767U, +14771U, 14779U, 14783U, 14797U, 14813U, 14821U, 14827U, 14831U, 14843U, 14851U, +14867U, 14869U, 14879U, 14887U, 14891U, 14897U, 14923U, 14929U, 14939U, 14947U, +14951U, 14957U, 14969U, 14983U, 15013U, 15017U, 15031U, 15053U, 15061U, 15073U, +15077U, 15083U, 15091U, 15101U, 15107U, 15121U, 15131U, 15137U, 15139U, 15149U, +15161U, 15173U, 15187U, 15193U, 15199U, 15217U, 15227U, 15233U, 15241U, 15259U, +15263U, 15269U, 15271U, 15277U, 15287U, 15289U, 15299U, 15307U, 15313U, 15319U, +15329U, 15331U, 15349U, 15359U, 15361U, 15373U, 15377U, 15383U, 15391U, 15401U, +15413U, 15427U, 15439U, 15443U, 15451U, 15461U, 15467U, 15473U, 15493U, 15497U, +15511U, 15527U, 15541U, 15551U, 15559U, 15569U, 15581U, 15583U, 15601U, 15607U, +15619U, 15629U, 15641U, 15643U, 15647U, 15649U, 15661U, 15667U, 15671U, 15679U, +15683U, 15727U, 15731U, 15733U, 15737U, 15739U, 15749U, 15761U, 15767U, 15773U, +15787U, 15791U, 15797U, 15803U, 15809U, 15817U, 15823U, 15859U, 15877U, 15881U, +15887U, 15889U, 15901U, 15907U, 15913U, 15919U, 15923U, 15937U, 15959U, 15971U, +15973U, 15991U, 16001U, 16007U, 16033U, 16057U, 16061U, 16063U, 16067U, 16069U, +16073U, 16087U, 16091U, 16097U, 16103U, 16111U, 16127U, 16139U, 16141U, 16183U, +16187U, 16189U, 16193U, 16217U, 16223U, 16229U, 16231U, 16249U, 16253U, 16267U, +16273U, 16301U, 16319U, 16333U, 16339U, 16349U, 16361U, 16363U, 16369U, 16381U, +16411U, 16417U, 16421U, 16427U, 16433U, 16447U, 16451U, 16453U, 16477U, 16481U, +16487U, 16493U, 16519U, 16529U, 16547U, 16553U, 16561U, 16567U, 16573U, 16603U, +16607U, 16619U, 16631U, 16633U, 16649U, 16651U, 16657U, 16661U, 16673U, 16691U, +16693U, 16699U, 16703U, 16729U, 16741U, 16747U, 16759U, 16763U, 16787U, 16811U, +16823U, 16829U, 16831U, 16843U, 16871U, 16879U, 16883U, 16889U, 16901U, 16903U, +16921U, 16927U, 16931U, 16937U, 16943U, 16963U, 16979U, 16981U, 16987U, 16993U, +17011U, 17021U, 17027U, 17029U, 17033U, 17041U, 17047U, 17053U, 17077U, 17093U, +17099U, 17107U, 17117U, 17123U, 17137U, 17159U, 17167U, 17183U, 17189U, 17191U, +17203U, 17207U, 17209U, 17231U, 17239U, 17257U, 17291U, 17293U, 17299U, 17317U, +17321U, 17327U, 17333U, 17341U, 17351U, 17359U, 17377U, 17383U, 17387U, 17389U, +17393U, 17401U, 17417U, 17419U, 17431U, 17443U, 17449U, 17467U, 17471U, 17477U, +17483U, 17489U, 17491U, 17497U, 17509U, 17519U, 17539U, 17551U, 17569U, 17573U, +17579U, 17581U, 17597U, 17599U, 17609U, 17623U, 17627U, 17657U, 17659U, 17669U, +17681U, 17683U, 17707U, 17713U, 17729U, 17737U, 17747U, 17749U, 17761U, 17783U, +17789U, 17791U, 17807U, 17827U, 17837U, 17839U, 17851U, 17863U, 17881U, 17891U, +17903U, 17909U, 17911U, 17921U, 17923U, 17929U, 17939U, 17957U, 17959U, 17971U, +17977U, 17981U, 17987U, 17989U, 18013U, 18041U, 18043U, 18047U, 18049U, 18059U, +18061U, 18077U, 18089U, 18097U, 18119U, 18121U, 18127U, 18131U, 18133U, 18143U, +18149U, 18169U, 18181U, 18191U, 18199U, 18211U, 18217U, 18223U, 18229U, 18233U, +18251U, 18253U, 18257U, 18269U, 18287U, 18289U, 18301U, 18307U, 18311U, 18313U, +18329U, 18341U, 18353U, 18367U, 18371U, 18379U, 18397U, 18401U, 18413U, 18427U, +18433U, 18439U, 18443U, 18451U, 18457U, 18461U, 18481U, 18493U, 18503U, 18517U, +18521U, 18523U, 18539U, 18541U, 18553U, 18583U, 18587U, 18593U, 18617U, 18637U, +18661U, 18671U, 18679U, 18691U, 18701U, 18713U, 18719U, 18731U, 18743U, 18749U, +18757U, 18773U, 18787U, 18793U, 18797U, 18803U, 18839U, 18859U, 18869U, 18899U, +18911U, 18913U, 18917U, 18919U, 18947U, 18959U, 18973U, 18979U, 19001U, 19009U, +19013U, 19031U, 19037U, 19051U, 19069U, 19073U, 19079U, 19081U, 19087U, 19121U, +19139U, 19141U, 19157U, 19163U, 19181U, 19183U, 19207U, 19211U, 19213U, 19219U, +19231U, 19237U, 19249U, 19259U, 19267U, 19273U, 19289U, 19301U, 19309U, 19319U, +19333U, 19373U, 19379U, 19381U, 19387U, 19391U, 19403U, 19417U, 19421U, 19423U, +19427U, 19429U, 19433U, 19441U, 19447U, 19457U, 19463U, 19469U, 19471U, 19477U, +19483U, 19489U, 19501U, 19507U, 19531U, 19541U, 19543U, 19553U, 19559U, 19571U, +19577U, 19583U, 19597U, 19603U, 19609U, 19661U, 19681U, 19687U, 19697U, 19699U, +19709U, 19717U, 19727U, 19739U, 19751U, 19753U, 19759U, 19763U, 19777U, 19793U, +19801U, 19813U, 19819U, 19841U, 19843U, 19853U, 19861U, 19867U, 19889U, 19891U, +19913U, 19919U, 19927U, 19937U, 19949U, 19961U, 19963U, 19973U, 19979U, 19991U, +19993U, 19997U, 20011U, 20021U, 20023U, 20029U, 20047U, 20051U, 20063U, 20071U, +20089U, 20101U, 20107U, 20113U, 20117U, 20123U, 20129U, 20143U, 20147U, 20149U, +20161U, 20173U, 20177U, 20183U, 20201U, 20219U, 20231U, 20233U, 20249U, 20261U, +20269U, 20287U, 20297U, 20323U, 20327U, 20333U, 20341U, 20347U, 20353U, 20357U, +20359U, 20369U, 20389U, 20393U, 20399U, 20407U, 20411U, 20431U, 20441U, 20443U, +20477U, 20479U, 20483U, 20507U, 20509U, 20521U, 20533U, 20543U, 20549U, 20551U, +20563U, 20593U, 20599U, 20611U, 20627U, 20639U, 20641U, 20663U, 20681U, 20693U, +20707U, 20717U, 20719U, 20731U, 20743U, 20747U, 20749U, 20753U, 20759U, 20771U, +20773U, 20789U, 20807U, 20809U, 20849U, 20857U, 20873U, 20879U, 20887U, 20897U, +20899U, 20903U, 20921U, 20929U, 20939U, 20947U, 20959U, 20963U, 20981U, 20983U, +21001U, 21011U, 21013U, 21017U, 21019U, 21023U, 21031U, 21059U, 21061U, 21067U, +21089U, 21101U, 21107U, 21121U, 21139U, 21143U, 21149U, 21157U, 21163U, 21169U, +21179U, 21187U, 21191U, 21193U, 21211U, 21221U, 21227U, 21247U, 21269U, 21277U, +21283U, 21313U, 21317U, 21319U, 21323U, 21341U, 21347U, 21377U, 21379U, 21383U, +21391U, 21397U, 21401U, 21407U, 21419U, 21433U, 21467U, 21481U, 21487U, 21491U, +21493U, 21499U, 21503U, 21517U, 21521U, 21523U, 21529U, 21557U, 21559U, 21563U, +21569U, 21577U, 21587U, 21589U, 21599U, 21601U, 21611U, 21613U, 21617U, 21647U, +21649U, 21661U, 21673U, 21683U, 21701U, 21713U, 21727U, 21737U, 21739U, 21751U, +21757U, 21767U, 21773U, 21787U, 21799U, 21803U, 21817U, 21821U, 21839U, 21841U, +21851U, 21859U, 21863U, 21871U, 21881U, 21893U, 21911U, 21929U, 21937U, 21943U, +21961U, 21977U, 21991U, 21997U, 22003U, 22013U, 22027U, 22031U, 22037U, 22039U, +22051U, 22063U, 22067U, 22073U, 22079U, 22091U, 22093U, 22109U, 22111U, 22123U, +22129U, 22133U, 22147U, 22153U, 22157U, 22159U, 22171U, 22189U, 22193U, 22229U, +22247U, 22259U, 22271U, 22273U, 22277U, 22279U, 22283U, 22291U, 22303U, 22307U, +22343U, 22349U, 22367U, 22369U, 22381U, 22391U, 22397U, 22409U, 22433U, 22441U, +22447U, 22453U, 22469U, 22481U, 22483U, 22501U, 22511U, 22531U, 22541U, 22543U, +22549U, 22567U, 22571U, 22573U, 22613U, 22619U, 22621U, 22637U, 22639U, 22643U, +22651U, 22669U, 22679U, 22691U, 22697U, 22699U, 22709U, 22717U, 22721U, 22727U, +22739U, 22741U, 22751U, 22769U, 22777U, 22783U, 22787U, 22807U, 22811U, 22817U, +22853U, 22859U, 22861U, 22871U, 22877U, 22901U, 22907U, 22921U, 22937U, 22943U, +22961U, 22963U, 22973U, 22993U, 23003U, 23011U, 23017U, 23021U, 23027U, 23029U, +23039U, 23041U, 23053U, 23057U, 23059U, 23063U, 23071U, 23081U, 23087U, 23099U, +23117U, 23131U, 23143U, 23159U, 23167U, 23173U, 23189U, 23197U, 23201U, 23203U, +23209U, 23227U, 23251U, 23269U, 23279U, 23291U, 23293U, 23297U, 23311U, 23321U, +23327U, 23333U, 23339U, 23357U, 23369U, 23371U, 23399U, 23417U, 23431U, 23447U, +23459U, 23473U, 23497U, 23509U, 23531U, 23537U, 23539U, 23549U, 23557U, 23561U, +23563U, 23567U, 23581U, 23593U, 23599U, 23603U, 23609U, 23623U, 23627U, 23629U, +23633U, 23663U, 23669U, 23671U, 23677U, 23687U, 23689U, 23719U, 23741U, 23743U, +23747U, 23753U, 23761U, 23767U, 23773U, 23789U, 23801U, 23813U, 23819U, 23827U, +23831U, 23833U, 23857U, 23869U, 23873U, 23879U, 23887U, 23893U, 23899U, 23909U, +23911U, 23917U, 23929U, 23957U, 23971U, 23977U, 23981U, 23993U, 24001U, 24007U, +24019U, 24023U, 24029U, 24043U, 24049U, 24061U, 24071U, 24077U, 24083U, 24091U, +24097U, 24103U, 24107U, 24109U, 24113U, 24121U, 24133U, 24137U, 24151U, 24169U, +24179U, 24181U, 24197U, 24203U, 24223U, 24229U, 24239U, 24247U, 24251U, 24281U, +24317U, 24329U, 24337U, 24359U, 24371U, 24373U, 24379U, 24391U, 24407U, 24413U, +24419U, 24421U, 24439U, 24443U, 24469U, 24473U, 24481U, 24499U, 24509U, 24517U, +24527U, 24533U, 24547U, 24551U, 24571U, 24593U, 24611U, 24623U, 24631U, 24659U, +24671U, 24677U, 24683U, 24691U, 24697U, 24709U, 24733U, 24749U, 24763U, 24767U, +24781U, 24793U, 24799U, 24809U, 24821U, 24841U, 24847U, 24851U, 24859U, 24877U, +24889U, 24907U, 24917U, 24919U, 24923U, 24943U, 24953U, 24967U, 24971U, 24977U, +24979U, 24989U, 25013U, 25031U, 25033U, 25037U, 25057U, 25073U, 25087U, 25097U, +25111U, 25117U, 25121U, 25127U, 25147U, 25153U, 25163U, 25169U, 25171U, 25183U, +25189U, 25219U, 25229U, 25237U, 25243U, 25247U, 25253U, 25261U, 25301U, 25303U, +25307U, 25309U, 25321U, 25339U, 25343U, 25349U, 25357U, 25367U, 25373U, 25391U, +25409U, 25411U, 25423U, 25439U, 25447U, 25453U, 25457U, 25463U, 25469U, 25471U, +25523U, 25537U, 25541U, 25561U, 25577U, 25579U, 25583U, 25589U, 25601U, 25603U, +25609U, 25621U, 25633U, 25639U, 25643U, 25657U, 25667U, 25673U, 25679U, 25693U, +25703U, 25717U, 25733U, 25741U, 25747U, 25759U, 25763U, 25771U, 25793U, 25799U, +25801U, 25819U, 25841U, 25847U, 25849U, 25867U, 25873U, 25889U, 25903U, 25913U, +25919U, 25931U, 25933U, 25939U, 25943U, 25951U, 25969U, 25981U, 25997U, 25999U, +26003U, 26017U, 26021U, 26029U, 26041U, 26053U, 26083U, 26099U, 26107U, 26111U, +26113U, 26119U, 26141U, 26153U, 26161U, 26171U, 26177U, 26183U, 26189U, 26203U, +26209U, 26227U, 26237U, 26249U, 26251U, 26261U, 26263U, 26267U, 26293U, 26297U, +26309U, 26317U, 26321U, 26339U, 26347U, 26357U, 26371U, 26387U, 26393U, 26399U, +26407U, 26417U, 26423U, 26431U, 26437U, 26449U, 26459U, 26479U, 26489U, 26497U, +26501U, 26513U, 26539U, 26557U, 26561U, 26573U, 26591U, 26597U, 26627U, 26633U, +26641U, 26647U, 26669U, 26681U, 26683U, 26687U, 26693U, 26699U, 26701U, 26711U, +26713U, 26717U, 26723U, 26729U, 26731U, 26737U, 26759U, 26777U, 26783U, 26801U, +26813U, 26821U, 26833U, 26839U, 26849U, 26861U, 26863U, 26879U, 26881U, 26891U, +26893U, 26903U, 26921U, 26927U, 26947U, 26951U, 26953U, 26959U, 26981U, 26987U, +26993U, 27011U, 27017U, 27031U, 27043U, 27059U, 27061U, 27067U, 27073U, 27077U, +27091U, 27103U, 27107U, 27109U, 27127U, 27143U, 27179U, 27191U, 27197U, 27211U, +27239U, 27241U, 27253U, 27259U, 27271U, 27277U, 27281U, 27283U, 27299U, 27329U, +27337U, 27361U, 27367U, 27397U, 27407U, 27409U, 27427U, 27431U, 27437U, 27449U, +27457U, 27479U, 27481U, 27487U, 27509U, 27527U, 27529U, 27539U, 27541U, 27551U, +27581U, 27583U, 27611U, 27617U, 27631U, 27647U, 27653U, 27673U, 27689U, 27691U, +27697U, 27701U, 27733U, 27737U, 27739U, 27743U, 27749U, 27751U, 27763U, 27767U, +27773U, 27779U, 27791U, 27793U, 27799U, 27803U, 27809U, 27817U, 27823U, 27827U, +27847U, 27851U, 27883U, 27893U, 27901U, 27917U, 27919U, 27941U, 27943U, 27947U, +27953U, 27961U, 27967U, 27983U, 27997U, 28001U, 28019U, 28027U, 28031U, 28051U, +28057U, 28069U, 28081U, 28087U, 28097U, 28099U, 28109U, 28111U, 28123U, 28151U, +28163U, 28181U, 28183U, 28201U, 28211U, 28219U, 28229U, 28277U, 28279U, 28283U, +28289U, 28297U, 28307U, 28309U, 28319U, 28349U, 28351U, 28387U, 28393U, 28403U, +28409U, 28411U, 28429U, 28433U, 28439U, 28447U, 28463U, 28477U, 28493U, 28499U, +28513U, 28517U, 28537U, 28541U, 28547U, 28549U, 28559U, 28571U, 28573U, 28579U, +28591U, 28597U, 28603U, 28607U, 28619U, 28621U, 28627U, 28631U, 28643U, 28649U, +28657U, 28661U, 28663U, 28669U, 28687U, 28697U, 28703U, 28711U, 28723U, 28729U, +28751U, 28753U, 28759U, 28771U, 28789U, 28793U, 28807U, 28813U, 28817U, 28837U, +28843U, 28859U, 28867U, 28871U, 28879U, 28901U, 28909U, 28921U, 28927U, 28933U, +28949U, 28961U, 28979U, 29009U, 29017U, 29021U, 29023U, 29027U, 29033U, 29059U, +29063U, 29077U, 29101U, 29123U, 29129U, 29131U, 29137U, 29147U, 29153U, 29167U, +29173U, 29179U, 29191U, 29201U, 29207U, 29209U, 29221U, 29231U, 29243U, 29251U, +29269U, 29287U, 29297U, 29303U, 29311U, 29327U, 29333U, 29339U, 29347U, 29363U, +29383U, 29387U, 29389U, 29399U, 29401U, 29411U, 29423U, 29429U, 29437U, 29443U, +29453U, 29473U, 29483U, 29501U, 29527U, 29531U, 29537U, 29567U, 29569U, 29573U, +29581U, 29587U, 29599U, 29611U, 29629U, 29633U, 29641U, 29663U, 29669U, 29671U, +29683U, 29717U, 29723U, 29741U, 29753U, 29759U, 29761U, 29789U, 29803U, 29819U, +29833U, 29837U, 29851U, 29863U, 29867U, 29873U, 29879U, 29881U, 29917U, 29921U, +29927U, 29947U, 29959U, 29983U, 29989U, 30011U, 30013U, 30029U, 30047U, 30059U, +30071U, 30089U, 30091U, 30097U, 30103U, 30109U, 30113U, 30119U, 30133U, 30137U, +30139U, 30161U, 30169U, 30181U, 30187U, 30197U, 30203U, 30211U, 30223U, 30241U, +30253U, 30259U, 30269U, 30271U, 30293U, 30307U, 30313U, 30319U, 30323U, 30341U, +30347U, 30367U, 30389U, 30391U, 30403U, 30427U, 30431U, 30449U, 30467U, 30469U, +30491U, 30493U, 30497U, 30509U, 30517U, 30529U, 30539U, 30553U, 30557U, 30559U, +30577U, 30593U, 30631U, 30637U, 30643U, 30649U, 30661U, 30671U, 30677U, 30689U, +30697U, 30703U, 30707U, 30713U, 30727U, 30757U, 30763U, 30773U, 30781U, 30803U, +30809U, 30817U, 30829U, 30839U, 30841U, 30851U, 30853U, 30859U, 30869U, 30871U, +30881U, 30893U, 30911U, 30931U, 30937U, 30941U, 30949U, 30971U, 30977U, 30983U, +31013U, 31019U, 31033U, 31039U, 31051U, 31063U, 31069U, 31079U, 31081U, 31091U, +31121U, 31123U, 31139U, 31147U, 31151U, 31153U, 31159U, 31177U, 31181U, 31183U, +31189U, 31193U, 31219U, 31223U, 31231U, 31237U, 31247U, 31249U, 31253U, 31259U, +31267U, 31271U, 31277U, 31307U, 31319U, 31321U, 31327U, 31333U, 31337U, 31357U, +31379U, 31387U, 31391U, 31393U, 31397U, 31469U, 31477U, 31481U, 31489U, 31511U, +31513U, 31517U, 31531U, 31541U, 31543U, 31547U, 31567U, 31573U, 31583U, 31601U, +31607U, 31627U, 31643U, 31649U, 31657U, 31663U, 31667U, 31687U, 31699U, 31721U, +31723U, 31727U, 31729U, 31741U, 31751U, 31769U, 31771U, 31793U, 31799U, 31817U, +31847U, 31849U, 31859U, 31873U, 31883U, 31891U, 31907U, 31957U, 31963U, 31973U, +31981U, 31991U, 32003U, 32009U, 32027U, 32029U, 32051U, 32057U, 32059U, 32063U, +32069U, 32077U, 32083U, 32089U, 32099U, 32117U, 32119U, 32141U, 32143U, 32159U, +32173U, 32183U, 32189U, 32191U, 32203U, 32213U, 32233U, 32237U, 32251U, 32257U, +32261U, 32297U, 32299U, 32303U, 32309U, 32321U, 32323U, 32327U, 32341U, 32353U, +32359U, 32363U, 32369U, 32371U, 32377U, 32381U, 32401U, 32411U, 32413U, 32423U, +32429U, 32441U, 32443U, 32467U, 32479U, 32491U, 32497U, 32503U, 32507U, 32531U, +32533U, 32537U, 32561U, 32563U, 32569U, 32573U, 32579U, 32587U, 32603U, 32609U, +32611U, 32621U, 32633U, 32647U, 32653U, 32687U, 32693U, 32707U, 32713U, 32717U, +32719U, 32749U, 32771U, 32779U, 32783U, 32789U, 32797U, 32801U, 32803U, 32831U, +32833U, 32839U, 32843U, 32869U, 32887U, 32909U, 32911U, 32917U, 32933U, 32939U, +32941U, 32957U, 32969U, 32971U, 32983U, 32987U, 32993U, 32999U, 33013U, 33023U, +33029U, 33037U, 33049U, 33053U, 33071U, 33073U, 33083U, 33091U, 33107U, 33113U, +33119U, 33149U, 33151U, 33161U, 33179U, 33181U, 33191U, 33199U, 33203U, 33211U, +33223U, 33247U, 33287U, 33289U, 33301U, 33311U, 33317U, 33329U, 33331U, 33343U, +33347U, 33349U, 33353U, 33359U, 33377U, 33391U, 33403U, 33409U, 33413U, 33427U, +33457U, 33461U, 33469U, 33479U, 33487U, 33493U, 33503U, 33521U, 33529U, 33533U, +33547U, 33563U, 33569U, 33577U, 33581U, 33587U, 33589U, 33599U, 33601U, 33613U, +33617U, 33619U, 33623U, 33629U, 33637U, 33641U, 33647U, 33679U, 33703U, 33713U, +33721U, 33739U, 33749U, 33751U, 33757U, 33767U, 33769U, 33773U, 33791U, 33797U, +33809U, 33811U, 33827U, 33829U, 33851U, 33857U, 33863U, 33871U, 33889U, 33893U, +33911U, 33923U, 33931U, 33937U, 33941U, 33961U, 33967U, 33997U, 34019U, 34031U, +34033U, 34039U, 34057U, 34061U, 34123U, 34127U, 34129U, 34141U, 34147U, 34157U, +34159U, 34171U, 34183U, 34211U, 34213U, 34217U, 34231U, 34253U, 34259U, 34261U, +34267U, 34273U, 34283U, 34297U, 34301U, 34303U, 34313U, 34319U, 34327U, 34337U, +34351U, 34361U, 34367U, 34369U, 34381U, 34403U, 34421U, 34429U, 34439U, 34457U, +34469U, 34471U, 34483U, 34487U, 34499U, 34501U, 34511U, 34513U, 34519U, 34537U, +34543U, 34549U, 34583U, 34589U, 34591U, 34603U, 34607U, 34613U, 34631U, 34649U, +34651U, 34667U, 34673U, 34679U, 34687U, 34693U, 34703U, 34721U, 34729U, 34739U, +34747U, 34757U, 34759U, 34763U, 34781U, 34807U, 34819U, 34841U, 34843U, 34847U, +34849U, 34871U, 34877U, 34883U, 34897U, 34913U, 34919U, 34939U, 34949U, 34961U, +34963U, 34981U, 35023U, 35027U, 35051U, 35053U, 35059U, 35069U, 35081U, 35083U, +35089U, 35099U, 35107U, 35111U, 35117U, 35129U, 35141U, 35149U, 35153U, 35159U, +35171U, 35201U, 35221U, 35227U, 35251U, 35257U, 35267U, 35279U, 35281U, 35291U, +35311U, 35317U, 35323U, 35327U, 35339U, 35353U, 35363U, 35381U, 35393U, 35401U, +35407U, 35419U, 35423U, 35437U, 35447U, 35449U, 35461U, 35491U, 35507U, 35509U, +35521U, 35527U, 35531U, 35533U, 35537U, 35543U, 35569U, 35573U, 35591U, 35593U, +35597U, 35603U, 35617U, 35671U, 35677U, 35729U, 35731U, 35747U, 35753U, 35759U, +35771U, 35797U, 35801U, 35803U, 35809U, 35831U, 35837U, 35839U, 35851U, 35863U, +35869U, 35879U, 35897U, 35899U, 35911U, 35923U, 35933U, 35951U, 35963U, 35969U, +35977U, 35983U, 35993U, 35999U, 36007U, 36011U, 36013U, 36017U, 36037U, 36061U, +36067U, 36073U, 36083U, 36097U, 36107U, 36109U, 36131U, 36137U, 36151U, 36161U, +36187U, 36191U, 36209U, 36217U, 36229U, 36241U, 36251U, 36263U, 36269U, 36277U, +36293U, 36299U, 36307U, 36313U, 36319U, 36341U, 36343U, 36353U, 36373U, 36383U, +36389U, 36433U, 36451U, 36457U, 36467U, 36469U, 36473U, 36479U, 36493U, 36497U, +36523U, 36527U, 36529U, 36541U, 36551U, 36559U, 36563U, 36571U, 36583U, 36587U, +36599U, 36607U, 36629U, 36637U, 36643U, 36653U, 36671U, 36677U, 36683U, 36691U, +36697U, 36709U, 36713U, 36721U, 36739U, 36749U, 36761U, 36767U, 36779U, 36781U, +36787U, 36791U, 36793U, 36809U, 36821U, 36833U, 36847U, 36857U, 36871U, 36877U, +36887U, 36899U, 36901U, 36913U, 36919U, 36923U, 36929U, 36931U, 36943U, 36947U, +36973U, 36979U, 36997U, 37003U, 37013U, 37019U, 37021U, 37039U, 37049U, 37057U, +37061U, 37087U, 37097U, 37117U, 37123U, 37139U, 37159U, 37171U, 37181U, 37189U, +37199U, 37201U, 37217U, 37223U, 37243U, 37253U, 37273U, 37277U, 37307U, 37309U, +37313U, 37321U, 37337U, 37339U, 37357U, 37361U, 37363U, 37369U, 37379U, 37397U, +37409U, 37423U, 37441U, 37447U, 37463U, 37483U, 37489U, 37493U, 37501U, 37507U, +37511U, 37517U, 37529U, 37537U, 37547U, 37549U, 37561U, 37567U, 37571U, 37573U, +37579U, 37589U, 37591U, 37607U, 37619U, 37633U, 37643U, 37649U, 37657U, 37663U, +37691U, 37693U, 37699U, 37717U, 37747U, 37781U, 37783U, 37799U, 37811U, 37813U, +37831U, 37847U, 37853U, 37861U, 37871U, 37879U, 37889U, 37897U, 37907U, 37951U, +37957U, 37963U, 37967U, 37987U, 37991U, 37993U, 37997U, 38011U, 38039U, 38047U, +38053U, 38069U, 38083U, 38113U, 38119U, 38149U, 38153U, 38167U, 38177U, 38183U, +38189U, 38197U, 38201U, 38219U, 38231U, 38237U, 38239U, 38261U, 38273U, 38281U, +38287U, 38299U, 38303U, 38317U, 38321U, 38327U, 38329U, 38333U, 38351U, 38371U, +38377U, 38393U, 38431U, 38447U, 38449U, 38453U, 38459U, 38461U, 38501U, 38543U, +38557U, 38561U, 38567U, 38569U, 38593U, 38603U, 38609U, 38611U, 38629U, 38639U, +38651U, 38653U, 38669U, 38671U, 38677U, 38693U, 38699U, 38707U, 38711U, 38713U, +38723U, 38729U, 38737U, 38747U, 38749U, 38767U, 38783U, 38791U, 38803U, 38821U, +38833U, 38839U, 38851U, 38861U, 38867U, 38873U, 38891U, 38903U, 38917U, 38921U, +38923U, 38933U, 38953U, 38959U, 38971U, 38977U, 38993U, 39019U, 39023U, 39041U, +39043U, 39047U, 39079U, 39089U, 39097U, 39103U, 39107U, 39113U, 39119U, 39133U, +39139U, 39157U, 39161U, 39163U, 39181U, 39191U, 39199U, 39209U, 39217U, 39227U, +39229U, 39233U, 39239U, 39241U, 39251U, 39293U, 39301U, 39313U, 39317U, 39323U, +39341U, 39343U, 39359U, 39367U, 39371U, 39373U, 39383U, 39397U, 39409U, 39419U, +39439U, 39443U, 39451U, 39461U, 39499U, 39503U, 39509U, 39511U, 39521U, 39541U, +39551U, 39563U, 39569U, 39581U, 39607U, 39619U, 39623U, 39631U, 39659U, 39667U, +39671U, 39679U, 39703U, 39709U, 39719U, 39727U, 39733U, 39749U, 39761U, 39769U, +39779U, 39791U, 39799U, 39821U, 39827U, 39829U, 39839U, 39841U, 39847U, 39857U, +39863U, 39869U, 39877U, 39883U, 39887U, 39901U, 39929U, 39937U, 39953U, 39971U, +39979U, 39983U, 39989U, 40009U, 40013U, 40031U, 40037U, 40039U, 40063U, 40087U, +40093U, 40099U, 40111U, 40123U, 40127U, 40129U, 40151U, 40153U, 40163U, 40169U, +40177U, 40189U, 40193U, 40213U, 40231U, 40237U, 40241U, 40253U, 40277U, 40283U, +40289U, 40343U, 40351U, 40357U, 40361U, 40387U, 40423U, 40427U, 40429U, 40433U, +40459U, 40471U, 40483U, 40487U, 40493U, 40499U, 40507U, 40519U, 40529U, 40531U, +40543U, 40559U, 40577U, 40583U, 40591U, 40597U, 40609U, 40627U, 40637U, 40639U, +40693U, 40697U, 40699U, 40709U, 40739U, 40751U, 40759U, 40763U, 40771U, 40787U, +40801U, 40813U, 40819U, 40823U, 40829U, 40841U, 40847U, 40849U, 40853U, 40867U, +40879U, 40883U, 40897U, 40903U, 40927U, 40933U, 40939U, 40949U, 40961U, 40973U, +40993U, 41011U, 41017U, 41023U, 41039U, 41047U, 41051U, 41057U, 41077U, 41081U, +41113U, 41117U, 41131U, 41141U, 41143U, 41149U, 41161U, 41177U, 41179U, 41183U, +41189U, 41201U, 41203U, 41213U, 41221U, 41227U, 41231U, 41233U, 41243U, 41257U, +41263U, 41269U, 41281U, 41299U, 41333U, 41341U, 41351U, 41357U, 41381U, 41387U, +41389U, 41399U, 41411U, 41413U, 41443U, 41453U, 41467U, 41479U, 41491U, 41507U, +41513U, 41519U, 41521U, 41539U, 41543U, 41549U, 41579U, 41593U, 41597U, 41603U, +41609U, 41611U, 41617U, 41621U, 41627U, 41641U, 41647U, 41651U, 41659U, 41669U, +41681U, 41687U, 41719U, 41729U, 41737U, 41759U, 41761U, 41771U, 41777U, 41801U, +41809U, 41813U, 41843U, 41849U, 41851U, 41863U, 41879U, 41887U, 41893U, 41897U, +41903U, 41911U, 41927U, 41941U, 41947U, 41953U, 41957U, 41959U, 41969U, 41981U, +41983U, 41999U, 42013U, 42017U, 42019U, 42023U, 42043U, 42061U, 42071U, 42073U, +42083U, 42089U, 42101U, 42131U, 42139U, 42157U, 42169U, 42179U, 42181U, 42187U, +42193U, 42197U, 42209U, 42221U, 42223U, 42227U, 42239U, 42257U, 42281U, 42283U, +42293U, 42299U, 42307U, 42323U, 42331U, 42337U, 42349U, 42359U, 42373U, 42379U, +42391U, 42397U, 42403U, 42407U, 42409U, 42433U, 42437U, 42443U, 42451U, 42457U, +42461U, 42463U, 42467U, 42473U, 42487U, 42491U, 42499U, 42509U, 42533U, 42557U, +42569U, 42571U, 42577U, 42589U, 42611U, 42641U, 42643U, 42649U, 42667U, 42677U, +42683U, 42689U, 42697U, 42701U, 42703U, 42709U, 42719U, 42727U, 42737U, 42743U, +42751U, 42767U, 42773U, 42787U, 42793U, 42797U, 42821U, 42829U, 42839U, 42841U, +42853U, 42859U, 42863U, 42899U, 42901U, 42923U, 42929U, 42937U, 42943U, 42953U, +42961U, 42967U, 42979U, 42989U, 43003U, 43013U, 43019U, 43037U, 43049U, 43051U, +43063U, 43067U, 43093U, 43103U, 43117U, 43133U, 43151U, 43159U, 43177U, 43189U, +43201U, 43207U, 43223U, 43237U, 43261U, 43271U, 43283U, 43291U, 43313U, 43319U, +43321U, 43331U, 43391U, 43397U, 43399U, 43403U, 43411U, 43427U, 43441U, 43451U, +43457U, 43481U, 43487U, 43499U, 43517U, 43541U, 43543U, 43573U, 43577U, 43579U, +43591U, 43597U, 43607U, 43609U, 43613U, 43627U, 43633U, 43649U, 43651U, 43661U, +43669U, 43691U, 43711U, 43717U, 43721U, 43753U, 43759U, 43777U, 43781U, 43783U, +43787U, 43789U, 43793U, 43801U, 43853U, 43867U, 43889U, 43891U, 43913U, 43933U, +43943U, 43951U, 43961U, 43963U, 43969U, 43973U, 43987U, 43991U, 43997U, 44017U, +44021U, 44027U, 44029U, 44041U, 44053U, 44059U, 44071U, 44087U, 44089U, 44101U, +44111U, 44119U, 44123U, 44129U, 44131U, 44159U, 44171U, 44179U, 44189U, 44201U, +44203U, 44207U, 44221U, 44249U, 44257U, 44263U, 44267U, 44269U, 44273U, 44279U, +44281U, 44293U, 44351U, 44357U, 44371U, 44381U, 44383U, 44389U, 44417U, 44449U, +44453U, 44483U, 44491U, 44497U, 44501U, 44507U, 44519U, 44531U, 44533U, 44537U, +44543U, 44549U, 44563U, 44579U, 44587U, 44617U, 44621U, 44623U, 44633U, 44641U, +44647U, 44651U, 44657U, 44683U, 44687U, 44699U, 44701U, 44711U, 44729U, 44741U, +44753U, 44771U, 44773U, 44777U, 44789U, 44797U, 44809U, 44819U, 44839U, 44843U, +44851U, 44867U, 44879U, 44887U, 44893U, 44909U, 44917U, 44927U, 44939U, 44953U, +44959U, 44963U, 44971U, 44983U, 44987U, 45007U, 45013U, 45053U, 45061U, 45077U, +45083U, 45119U, 45121U, 45127U, 45131U, 45137U, 45139U, 45161U, 45179U, 45181U, +45191U, 45197U, 45233U, 45247U, 45259U, 45263U, 45281U, 45289U, 45293U, 45307U, +45317U, 45319U, 45329U, 45337U, 45341U, 45343U, 45361U, 45377U, 45389U, 45403U, +45413U, 45427U, 45433U, 45439U, 45481U, 45491U, 45497U, 45503U, 45523U, 45533U, +45541U, 45553U, 45557U, 45569U, 45587U, 45589U, 45599U, 45613U, 45631U, 45641U, +45659U, 45667U, 45673U, 45677U, 45691U, 45697U, 45707U, 45737U, 45751U, 45757U, +45763U, 45767U, 45779U, 45817U, 45821U, 45823U, 45827U, 45833U, 45841U, 45853U, +45863U, 45869U, 45887U, 45893U, 45943U, 45949U, 45953U, 45959U, 45971U, 45979U, +45989U, 46021U, 46027U, 46049U, 46051U, 46061U, 46073U, 46091U, 46093U, 46099U, +46103U, 46133U, 46141U, 46147U, 46153U, 46171U, 46181U, 46183U, 46187U, 46199U, +46219U, 46229U, 46237U, 46261U, 46271U, 46273U, 46279U, 46301U, 46307U, 46309U, +46327U, 46337U, 46349U, 46351U, 46381U, 46399U, 46411U, 46439U, 46441U, 46447U, +46451U, 46457U, 46471U, 46477U, 46489U, 46499U, 46507U, 46511U, 46523U, 46549U, +46559U, 46567U, 46573U, 46589U, 46591U, 46601U, 46619U, 46633U, 46639U, 46643U, +46649U, 46663U, 46679U, 46681U, 46687U, 46691U, 46703U, 46723U, 46727U, 46747U, +46751U, 46757U, 46769U, 46771U, 46807U, 46811U, 46817U, 46819U, 46829U, 46831U, +46853U, 46861U, 46867U, 46877U, 46889U, 46901U, 46919U, 46933U, 46957U, 46993U, +46997U, 47017U, 47041U, 47051U, 47057U, 47059U, 47087U, 47093U, 47111U, 47119U, +47123U, 47129U, 47137U, 47143U, 47147U, 47149U, 47161U, 47189U, 47207U, 47221U, +47237U, 47251U, 47269U, 47279U, 47287U, 47293U, 47297U, 47303U, 47309U, 47317U, +47339U, 47351U, 47353U, 47363U, 47381U, 47387U, 47389U, 47407U, 47417U, 47419U, +47431U, 47441U, 47459U, 47491U, 47497U, 47501U, 47507U, 47513U, 47521U, 47527U, +47533U, 47543U, 47563U, 47569U, 47581U, 47591U, 47599U, 47609U, 47623U, 47629U, +47639U, 47653U, 47657U, 47659U, 47681U, 47699U, 47701U, 47711U, 47713U, 47717U, +47737U, 47741U, 47743U, 47777U, 47779U, 47791U, 47797U, 47807U, 47809U, 47819U, +47837U, 47843U, 47857U, 47869U, 47881U, 47903U, 47911U, 47917U, 47933U, 47939U, +47947U, 47951U, 47963U, 47969U, 47977U, 47981U, 48017U, 48023U, 48029U, 48049U, +48073U, 48079U, 48091U, 48109U, 48119U, 48121U, 48131U, 48157U, 48163U, 48179U, +48187U, 48193U, 48197U, 48221U, 48239U, 48247U, 48259U, 48271U, 48281U, 48299U, +48311U, 48313U, 48337U, 48341U, 48353U, 48371U, 48383U, 48397U, 48407U, 48409U, +48413U, 48437U, 48449U, 48463U, 48473U, 48479U, 48481U, 48487U, 48491U, 48497U, +48523U, 48527U, 48533U, 48539U, 48541U, 48563U, 48571U, 48589U, 48593U, 48611U, +48619U, 48623U, 48647U, 48649U, 48661U, 48673U, 48677U, 48679U, 48731U, 48733U, +48751U, 48757U, 48761U, 48767U, 48779U, 48781U, 48787U, 48799U, 48809U, 48817U, +48821U, 48823U, 48847U, 48857U, 48859U, 48869U, 48871U, 48883U, 48889U, 48907U, +48947U, 48953U, 48973U, 48989U, 48991U, 49003U, 49009U, 49019U, 49031U, 49033U, +49037U, 49043U, 49057U, 49069U, 49081U, 49103U, 49109U, 49117U, 49121U, 49123U, +49139U, 49157U, 49169U, 49171U, 49177U, 49193U, 49199U, 49201U, 49207U, 49211U, +49223U, 49253U, 49261U, 49277U, 49279U, 49297U, 49307U, 49331U, 49333U, 49339U, +49363U, 49367U, 49369U, 49391U, 49393U, 49409U, 49411U, 49417U, 49429U, 49433U, +49451U, 49459U, 49463U, 49477U, 49481U, 49499U, 49523U, 49529U, 49531U, 49537U, +49547U, 49549U, 49559U, 49597U, 49603U, 49613U, 49627U, 49633U, 49639U, 49663U, +49667U, 49669U, 49681U, 49697U, 49711U, 49727U, 49739U, 49741U, 49747U, 49757U, +49783U, 49787U, 49789U, 49801U, 49807U, 49811U, 49823U, 49831U, 49843U, 49853U, +49871U, 49877U, 49891U, 49919U, 49921U, 49927U, 49937U, 49939U, 49943U, 49957U, +49991U, 49993U, 49999U, 50021U, 50023U, 50033U, 50047U, 50051U, 50053U, 50069U, +50077U, 50087U, 50093U, 50101U, 50111U, 50119U, 50123U, 50129U, 50131U, 50147U, +50153U, 50159U, 50177U, 50207U, 50221U, 50227U, 50231U, 50261U, 50263U, 50273U, +50287U, 50291U, 50311U, 50321U, 50329U, 50333U, 50341U, 50359U, 50363U, 50377U, +50383U, 50387U, 50411U, 50417U, 50423U, 50441U, 50459U, 50461U, 50497U, 50503U, +50513U, 50527U, 50539U, 50543U, 50549U, 50551U, 50581U, 50587U, 50591U, 50593U, +50599U, 50627U, 50647U, 50651U, 50671U, 50683U, 50707U, 50723U, 50741U, 50753U, +50767U, 50773U, 50777U, 50789U, 50821U, 50833U, 50839U, 50849U, 50857U, 50867U, +50873U, 50891U, 50893U, 50909U, 50923U, 50929U, 50951U, 50957U, 50969U, 50971U, +50989U, 50993U, 51001U, 51031U, 51043U, 51047U, 51059U, 51061U, 51071U, 51109U, +51131U, 51133U, 51137U, 51151U, 51157U, 51169U, 51193U, 51197U, 51199U, 51203U, +51217U, 51229U, 51239U, 51241U, 51257U, 51263U, 51283U, 51287U, 51307U, 51329U, +51341U, 51343U, 51347U, 51349U, 51361U, 51383U, 51407U, 51413U, 51419U, 51421U, +51427U, 51431U, 51437U, 51439U, 51449U, 51461U, 51473U, 51479U, 51481U, 51487U, +51503U, 51511U, 51517U, 51521U, 51539U, 51551U, 51563U, 51577U, 51581U, 51593U, +51599U, 51607U, 51613U, 51631U, 51637U, 51647U, 51659U, 51673U, 51679U, 51683U, +51691U, 51713U, 51719U, 51721U, 51749U, 51767U, 51769U, 51787U, 51797U, 51803U, +51817U, 51827U, 51829U, 51839U, 51853U, 51859U, 51869U, 51871U, 51893U, 51899U, +51907U, 51913U, 51929U, 51941U, 51949U, 51971U, 51973U, 51977U, 51991U, 52009U, +52021U, 52027U, 52051U, 52057U, 52067U, 52069U, 52081U, 52103U, 52121U, 52127U, +52147U, 52153U, 52163U, 52177U, 52181U, 52183U, 52189U, 52201U, 52223U, 52237U, +52249U, 52253U, 52259U, 52267U, 52289U, 52291U, 52301U, 52313U, 52321U, 52361U, +52363U, 52369U, 52379U, 52387U, 52391U, 52433U, 52453U, 52457U, 52489U, 52501U, +52511U, 52517U, 52529U, 52541U, 52543U, 52553U, 52561U, 52567U, 52571U, 52579U, +52583U, 52609U, 52627U, 52631U, 52639U, 52667U, 52673U, 52691U, 52697U, 52709U, +52711U, 52721U, 52727U, 52733U, 52747U, 52757U, 52769U, 52783U, 52807U, 52813U, +52817U, 52837U, 52859U, 52861U, 52879U, 52883U, 52889U, 52901U, 52903U, 52919U, +52937U, 52951U, 52957U, 52963U, 52967U, 52973U, 52981U, 52999U, 53003U, 53017U, +53047U, 53051U, 53069U, 53077U, 53087U, 53089U, 53093U, 53101U, 53113U, 53117U, +53129U, 53147U, 53149U, 53161U, 53171U, 53173U, 53189U, 53197U, 53201U, 53231U, +53233U, 53239U, 53267U, 53269U, 53279U, 53281U, 53299U, 53309U, 53323U, 53327U, +53353U, 53359U, 53377U, 53381U, 53401U, 53407U, 53411U, 53419U, 53437U, 53441U, +53453U, 53479U, 53503U, 53507U, 53527U, 53549U, 53551U, 53569U, 53591U, 53593U, +53597U, 53609U, 53611U, 53617U, 53623U, 53629U, 53633U, 53639U, 53653U, 53657U, +53681U, 53693U, 53699U, 53717U, 53719U, 53731U, 53759U, 53773U, 53777U, 53783U, +53791U, 53813U, 53819U, 53831U, 53849U, 53857U, 53861U, 53881U, 53887U, 53891U, +53897U, 53899U, 53917U, 53923U, 53927U, 53939U, 53951U, 53959U, 53987U, 53993U, +54001U, 54011U, 54013U, 54037U, 54049U, 54059U, 54083U, 54091U, 54101U, 54121U, +54133U, 54139U, 54151U, 54163U, 54167U, 54181U, 54193U, 54217U, 54251U, 54269U, +54277U, 54287U, 54293U, 54311U, 54319U, 54323U, 54331U, 54347U, 54361U, 54367U, +54371U, 54377U, 54401U, 54403U, 54409U, 54413U, 54419U, 54421U, 54437U, 54443U, +54449U, 54469U, 54493U, 54497U, 54499U, 54503U, 54517U, 54521U, 54539U, 54541U, +54547U, 54559U, 54563U, 54577U, 54581U, 54583U, 54601U, 54617U, 54623U, 54629U, +54631U, 54647U, 54667U, 54673U, 54679U, 54709U, 54713U, 54721U, 54727U, 54751U, +54767U, 54773U, 54779U, 54787U, 54799U, 54829U, 54833U, 54851U, 54869U, 54877U, +54881U, 54907U, 54917U, 54919U, 54941U, 54949U, 54959U, 54973U, 54979U, 54983U, +55001U, 55009U, 55021U, 55049U, 55051U, 55057U, 55061U, 55073U, 55079U, 55103U, +55109U, 55117U, 55127U, 55147U, 55163U, 55171U, 55201U, 55207U, 55213U, 55217U, +55219U, 55229U, 55243U, 55249U, 55259U, 55291U, 55313U, 55331U, 55333U, 55337U, +55339U, 55343U, 55351U, 55373U, 55381U, 55399U, 55411U, 55439U, 55441U, 55457U, +55469U, 55487U, 55501U, 55511U, 55529U, 55541U, 55547U, 55579U, 55589U, 55603U, +55609U, 55619U, 55621U, 55631U, 55633U, 55639U, 55661U, 55663U, 55667U, 55673U, +55681U, 55691U, 55697U, 55711U, 55717U, 55721U, 55733U, 55763U, 55787U, 55793U, +55799U, 55807U, 55813U, 55817U, 55819U, 55823U, 55829U, 55837U, 55843U, 55849U, +55871U, 55889U, 55897U, 55901U, 55903U, 55921U, 55927U, 55931U, 55933U, 55949U, +55967U, 55987U, 55997U, 56003U, 56009U, 56039U, 56041U, 56053U, 56081U, 56087U, +56093U, 56099U, 56101U, 56113U, 56123U, 56131U, 56149U, 56167U, 56171U, 56179U, +56197U, 56207U, 56209U, 56237U, 56239U, 56249U, 56263U, 56267U, 56269U, 56299U, +56311U, 56333U, 56359U, 56369U, 56377U, 56383U, 56393U, 56401U, 56417U, 56431U, +56437U, 56443U, 56453U, 56467U, 56473U, 56477U, 56479U, 56489U, 56501U, 56503U, +56509U, 56519U, 56527U, 56531U, 56533U, 56543U, 56569U, 56591U, 56597U, 56599U, +56611U, 56629U, 56633U, 56659U, 56663U, 56671U, 56681U, 56687U, 56701U, 56711U, +56713U, 56731U, 56737U, 56747U, 56767U, 56773U, 56779U, 56783U, 56807U, 56809U, +56813U, 56821U, 56827U, 56843U, 56857U, 56873U, 56891U, 56893U, 56897U, 56909U, +56911U, 56921U, 56923U, 56929U, 56941U, 56951U, 56957U, 56963U, 56983U, 56989U, +56993U, 56999U, 57037U, 57041U, 57047U, 57059U, 57073U, 57077U, 57089U, 57097U, +57107U, 57119U, 57131U, 57139U, 57143U, 57149U, 57163U, 57173U, 57179U, 57191U, +57193U, 57203U, 57221U, 57223U, 57241U, 57251U, 57259U, 57269U, 57271U, 57283U, +57287U, 57301U, 57329U, 57331U, 57347U, 57349U, 57367U, 57373U, 57383U, 57389U, +57397U, 57413U, 57427U, 57457U, 57467U, 57487U, 57493U, 57503U, 57527U, 57529U, +57557U, 57559U, 57571U, 57587U, 57593U, 57601U, 57637U, 57641U, 57649U, 57653U, +57667U, 57679U, 57689U, 57697U, 57709U, 57713U, 57719U, 57727U, 57731U, 57737U, +57751U, 57773U, 57781U, 57787U, 57791U, 57793U, 57803U, 57809U, 57829U, 57839U, +57847U, 57853U, 57859U, 57881U, 57899U, 57901U, 57917U, 57923U, 57943U, 57947U, +57973U, 57977U, 57991U, 58013U, 58027U, 58031U, 58043U, 58049U, 58057U, 58061U, +58067U, 58073U, 58099U, 58109U, 58111U, 58129U, 58147U, 58151U, 58153U, 58169U, +58171U, 58189U, 58193U, 58199U, 58207U, 58211U, 58217U, 58229U, 58231U, 58237U, +58243U, 58271U, 58309U, 58313U, 58321U, 58337U, 58363U, 58367U, 58369U, 58379U, +58391U, 58393U, 58403U, 58411U, 58417U, 58427U, 58439U, 58441U, 58451U, 58453U, +58477U, 58481U, 58511U, 58537U, 58543U, 58549U, 58567U, 58573U, 58579U, 58601U, +58603U, 58613U, 58631U, 58657U, 58661U, 58679U, 58687U, 58693U, 58699U, 58711U, +58727U, 58733U, 58741U, 58757U, 58763U, 58771U, 58787U, 58789U, 58831U, 58889U, +58897U, 58901U, 58907U, 58909U, 58913U, 58921U, 58937U, 58943U, 58963U, 58967U, +58979U, 58991U, 58997U, 59009U, 59011U, 59021U, 59023U, 59029U, 59051U, 59053U, +59063U, 59069U, 59077U, 59083U, 59093U, 59107U, 59113U, 59119U, 59123U, 59141U, +59149U, 59159U, 59167U, 59183U, 59197U, 59207U, 59209U, 59219U, 59221U, 59233U, +59239U, 59243U, 59263U, 59273U, 59281U, 59333U, 59341U, 59351U, 59357U, 59359U, +59369U, 59377U, 59387U, 59393U, 59399U, 59407U, 59417U, 59419U, 59441U, 59443U, +59447U, 59453U, 59467U, 59471U, 59473U, 59497U, 59509U, 59513U, 59539U, 59557U, +59561U, 59567U, 59581U, 59611U, 59617U, 59621U, 59627U, 59629U, 59651U, 59659U, +59663U, 59669U, 59671U, 59693U, 59699U, 59707U, 59723U, 59729U, 59743U, 59747U, +59753U, 59771U, 59779U, 59791U, 59797U, 59809U, 59833U, 59863U, 59879U, 59887U, +59921U, 59929U, 59951U, 59957U, 59971U, 59981U, 59999U, 60013U, 60017U, 60029U, +60037U, 60041U, 60077U, 60083U, 60089U, 60091U, 60101U, 60103U, 60107U, 60127U, +60133U, 60139U, 60149U, 60161U, 60167U, 60169U, 60209U, 60217U, 60223U, 60251U, +60257U, 60259U, 60271U, 60289U, 60293U, 60317U, 60331U, 60337U, 60343U, 60353U, +60373U, 60383U, 60397U, 60413U, 60427U, 60443U, 60449U, 60457U, 60493U, 60497U, +60509U, 60521U, 60527U, 60539U, 60589U, 60601U, 60607U, 60611U, 60617U, 60623U, +60631U, 60637U, 60647U, 60649U, 60659U, 60661U, 60679U, 60689U, 60703U, 60719U, +60727U, 60733U, 60737U, 60757U, 60761U, 60763U, 60773U, 60779U, 60793U, 60811U, +60821U, 60859U, 60869U, 60887U, 60889U, 60899U, 60901U, 60913U, 60917U, 60919U, +60923U, 60937U, 60943U, 60953U, 60961U, 61001U, 61007U, 61027U, 61031U, 61043U, +61051U, 61057U, 61091U, 61099U, 61121U, 61129U, 61141U, 61151U, 61153U, 61169U, +61211U, 61223U, 61231U, 61253U, 61261U, 61283U, 61291U, 61297U, 61331U, 61333U, +61339U, 61343U, 61357U, 61363U, 61379U, 61381U, 61403U, 61409U, 61417U, 61441U, +61463U, 61469U, 61471U, 61483U, 61487U, 61493U, 61507U, 61511U, 61519U, 61543U, +61547U, 61553U, 61559U, 61561U, 61583U, 61603U, 61609U, 61613U, 61627U, 61631U, +61637U, 61643U, 61651U, 61657U, 61667U, 61673U, 61681U, 61687U, 61703U, 61717U, +61723U, 61729U, 61751U, 61757U, 61781U, 61813U, 61819U, 61837U, 61843U, 61861U, +61871U, 61879U, 61909U, 61927U, 61933U, 61949U, 61961U, 61967U, 61979U, 61981U, +61987U, 61991U, 62003U, 62011U, 62017U, 62039U, 62047U, 62053U, 62057U, 62071U, +62081U, 62099U, 62119U, 62129U, 62131U, 62137U, 62141U, 62143U, 62171U, 62189U, +62191U, 62201U, 62207U, 62213U, 62219U, 62233U, 62273U, 62297U, 62299U, 62303U, +62311U, 62323U, 62327U, 62347U, 62351U, 62383U, 62401U, 62417U, 62423U, 62459U, +62467U, 62473U, 62477U, 62483U, 62497U, 62501U, 62507U, 62533U, 62539U, 62549U, +62563U, 62581U, 62591U, 62597U, 62603U, 62617U, 62627U, 62633U, 62639U, 62653U, +62659U, 62683U, 62687U, 62701U, 62723U, 62731U, 62743U, 62753U, 62761U, 62773U, +62791U, 62801U, 62819U, 62827U, 62851U, 62861U, 62869U, 62873U, 62897U, 62903U, +62921U, 62927U, 62929U, 62939U, 62969U, 62971U, 62981U, 62983U, 62987U, 62989U, +63029U, 63031U, 63059U, 63067U, 63073U, 63079U, 63097U, 63103U, 63113U, 63127U, +63131U, 63149U, 63179U, 63197U, 63199U, 63211U, 63241U, 63247U, 63277U, 63281U, +63299U, 63311U, 63313U, 63317U, 63331U, 63337U, 63347U, 63353U, 63361U, 63367U, +63377U, 63389U, 63391U, 63397U, 63409U, 63419U, 63421U, 63439U, 63443U, 63463U, +63467U, 63473U, 63487U, 63493U, 63499U, 63521U, 63527U, 63533U, 63541U, 63559U, +63577U, 63587U, 63589U, 63599U, 63601U, 63607U, 63611U, 63617U, 63629U, 63647U, +63649U, 63659U, 63667U, 63671U, 63689U, 63691U, 63697U, 63703U, 63709U, 63719U, +63727U, 63737U, 63743U, 63761U, 63773U, 63781U, 63793U, 63799U, 63803U, 63809U, +63823U, 63839U, 63841U, 63853U, 63857U, 63863U, 63901U, 63907U, 63913U, 63929U, +63949U, 63977U, 63997U, 64007U, 64013U, 64019U, 64033U, 64037U, 64063U, 64067U, +64081U, 64091U, 64109U, 64123U, 64151U, 64153U, 64157U, 64171U, 64187U, 64189U, +64217U, 64223U, 64231U, 64237U, 64271U, 64279U, 64283U, 64301U, 64303U, 64319U, +64327U, 64333U, 64373U, 64381U, 64399U, 64403U, 64433U, 64439U, 64451U, 64453U, +64483U, 64489U, 64499U, 64513U, 64553U, 64567U, 64577U, 64579U, 64591U, 64601U, +64609U, 64613U, 64621U, 64627U, 64633U, 64661U, 64663U, 64667U, 64679U, 64693U, +64709U, 64717U, 64747U, 64763U, 64781U, 64783U, 64793U, 64811U, 64817U, 64849U, +64853U, 64871U, 64877U, 64879U, 64891U, 64901U, 64919U, 64921U, 64927U, 64937U, +64951U, 64969U, 64997U, 65003U, 65011U, 65027U, 65029U, 65033U, 65053U, 65063U, +65071U, 65089U, 65099U, 65101U, 65111U, 65119U, 65123U, 65129U, 65141U, 65147U, +65167U, 65171U, 65173U, 65179U, 65183U, 65203U, 65213U, 65239U, 65257U, 65267U, +65269U, 65287U, 65293U, 65309U, 65323U, 65327U, 65353U, 65357U, 65371U, 65381U, +65393U, 65407U, 65413U, 65419U, 65423U, 65437U, 65447U, 65449U, 65479U, 65497U, +65519U, 65521U, 65537U, 65539U, 65543U, 65551U, 65557U, 65563U, 65579U, 65581U, +65587U, 65599U, 65609U, 65617U, 65629U, 65633U, 65647U, 65651U, 65657U, 65677U, +65687U, 65699U, 65701U, 65707U, 65713U, 65717U, 65719U, 65729U, 65731U, 65761U, +65777U, 65789U, 65809U, 65827U, 65831U, 65837U, 65839U, 65843U, 65851U, 65867U, +65881U, 65899U, 65921U, 65927U, 65929U, 65951U, 65957U, 65963U, 65981U, 65983U, +65993U, 66029U, 66037U, 66041U, 66047U, 66067U, 66071U, 66083U, 66089U, 66103U, +66107U, 66109U, 66137U, 66161U, 66169U, 66173U, 66179U, 66191U, 66221U, 66239U, +66271U, 66293U, 66301U, 66337U, 66343U, 66347U, 66359U, 66361U, 66373U, 66377U, +66383U, 66403U, 66413U, 66431U, 66449U, 66457U, 66463U, 66467U, 66491U, 66499U, +66509U, 66523U, 66529U, 66533U, 66541U, 66553U, 66569U, 66571U, 66587U, 66593U, +66601U, 66617U, 66629U, 66643U, 66653U, 66683U, 66697U, 66701U, 66713U, 66721U, +66733U, 66739U, 66749U, 66751U, 66763U, 66791U, 66797U, 66809U, 66821U, 66841U, +66851U, 66853U, 66863U, 66877U, 66883U, 66889U, 66919U, 66923U, 66931U, 66943U, +66947U, 66949U, 66959U, 66973U, 66977U, 67003U, 67021U, 67033U, 67043U, 67049U, +67057U, 67061U, 67073U, 67079U, 67103U, 67121U, 67129U, 67139U, 67141U, 67153U, +67157U, 67169U, 67181U, 67187U, 67189U, 67211U, 67213U, 67217U, 67219U, 67231U, +67247U, 67261U, 67271U, 67273U, 67289U, 67307U, 67339U, 67343U, 67349U, 67369U, +67391U, 67399U, 67409U, 67411U, 67421U, 67427U, 67429U, 67433U, 67447U, 67453U, +67477U, 67481U, 67489U, 67493U, 67499U, 67511U, 67523U, 67531U, 67537U, 67547U, +67559U, 67567U, 67577U, 67579U, 67589U, 67601U, 67607U, 67619U, 67631U, 67651U, +67679U, 67699U, 67709U, 67723U, 67733U, 67741U, 67751U, 67757U, 67759U, 67763U, +67777U, 67783U, 67789U, 67801U, 67807U, 67819U, 67829U, 67843U, 67853U, 67867U, +67883U, 67891U, 67901U, 67927U, 67931U, 67933U, 67939U, 67943U, 67957U, 67961U, +67967U, 67979U, 67987U, 67993U, 68023U, 68041U, 68053U, 68059U, 68071U, 68087U, +68099U, 68111U, 68113U, 68141U, 68147U, 68161U, 68171U, 68207U, 68209U, 68213U, +68219U, 68227U, 68239U, 68261U, 68279U, 68281U, 68311U, 68329U, 68351U, 68371U, +68389U, 68399U, 68437U, 68443U, 68447U, 68449U, 68473U, 68477U, 68483U, 68489U, +68491U, 68501U, 68507U, 68521U, 68531U, 68539U, 68543U, 68567U, 68581U, 68597U, +68611U, 68633U, 68639U, 68659U, 68669U, 68683U, 68687U, 68699U, 68711U, 68713U, +68729U, 68737U, 68743U, 68749U, 68767U, 68771U, 68777U, 68791U, 68813U, 68819U, +68821U, 68863U, 68879U, 68881U, 68891U, 68897U, 68899U, 68903U, 68909U, 68917U, +68927U, 68947U, 68963U, 68993U, 69001U, 69011U, 69019U, 69029U, 69031U, 69061U, +69067U, 69073U, 69109U, 69119U, 69127U, 69143U, 69149U, 69151U, 69163U, 69191U, +69193U, 69197U, 69203U, 69221U, 69233U, 69239U, 69247U, 69257U, 69259U, 69263U, +69313U, 69317U, 69337U, 69341U, 69371U, 69379U, 69383U, 69389U, 69401U, 69403U, +69427U, 69431U, 69439U, 69457U, 69463U, 69467U, 69473U, 69481U, 69491U, 69493U, +69497U, 69499U, 69539U, 69557U, 69593U, 69623U, 69653U, 69661U, 69677U, 69691U, +69697U, 69709U, 69737U, 69739U, 69761U, 69763U, 69767U, 69779U, 69809U, 69821U, +69827U, 69829U, 69833U, 69847U, 69857U, 69859U, 69877U, 69899U, 69911U, 69929U, +69931U, 69941U, 69959U, 69991U, 69997U, 70001U, 70003U, 70009U, 70019U, 70039U, +70051U, 70061U, 70067U, 70079U, 70099U, 70111U, 70117U, 70121U, 70123U, 70139U, +70141U, 70157U, 70163U, 70177U, 70181U, 70183U, 70199U, 70201U, 70207U, 70223U, +70229U, 70237U, 70241U, 70249U, 70271U, 70289U, 70297U, 70309U, 70313U, 70321U, +70327U, 70351U, 70373U, 70379U, 70381U, 70393U, 70423U, 70429U, 70439U, 70451U, +70457U, 70459U, 70481U, 70487U, 70489U, 70501U, 70507U, 70529U, 70537U, 70549U, +70571U, 70573U, 70583U, 70589U, 70607U, 70619U, 70621U, 70627U, 70639U, 70657U, +70663U, 70667U, 70687U, 70709U, 70717U, 70729U, 70753U, 70769U, 70783U, 70793U, +70823U, 70841U, 70843U, 70849U, 70853U, 70867U, 70877U, 70879U, 70891U, 70901U, +70913U, 70919U, 70921U, 70937U, 70949U, 70951U, 70957U, 70969U, 70979U, 70981U, +70991U, 70997U, 70999U, 71011U, 71023U, 71039U, 71059U, 71069U, 71081U, 71089U, +71119U, 71129U, 71143U, 71147U, 71153U, 71161U, 71167U, 71171U, 71191U, 71209U, +71233U, 71237U, 71249U, 71257U, 71261U, 71263U, 71287U, 71293U, 71317U, 71327U, +71329U, 71333U, 71339U, 71341U, 71347U, 71353U, 71359U, 71363U, 71387U, 71389U, +71399U, 71411U, 71413U, 71419U, 71429U, 71437U, 71443U, 71453U, 71471U, 71473U, +71479U, 71483U, 71503U, 71527U, 71537U, 71549U, 71551U, 71563U, 71569U, 71593U, +71597U, 71633U, 71647U, 71663U, 71671U, 71693U, 71699U, 71707U, 71711U, 71713U, +71719U, 71741U, 71761U, 71777U, 71789U, 71807U, 71809U, 71821U, 71837U, 71843U, +71849U, 71861U, 71867U, 71879U, 71881U, 71887U, 71899U, 71909U, 71917U, 71933U, +71941U, 71947U, 71963U, 71971U, 71983U, 71987U, 71993U, 71999U, 72019U, 72031U, +72043U, 72047U, 72053U, 72073U, 72077U, 72089U, 72091U, 72101U, 72103U, 72109U, +72139U, 72161U, 72167U, 72169U, 72173U, 72211U, 72221U, 72223U, 72227U, 72229U, +72251U, 72253U, 72269U, 72271U, 72277U, 72287U, 72307U, 72313U, 72337U, 72341U, +72353U, 72367U, 72379U, 72383U, 72421U, 72431U, 72461U, 72467U, 72469U, 72481U, +72493U, 72497U, 72503U, 72533U, 72547U, 72551U, 72559U, 72577U, 72613U, 72617U, +72623U, 72643U, 72647U, 72649U, 72661U, 72671U, 72673U, 72679U, 72689U, 72701U, +72707U, 72719U, 72727U, 72733U, 72739U, 72763U, 72767U, 72797U, 72817U, 72823U, +72859U, 72869U, 72871U, 72883U, 72889U, 72893U, 72901U, 72907U, 72911U, 72923U, +72931U, 72937U, 72949U, 72953U, 72959U, 72973U, 72977U, 72997U, 73009U, 73013U, +73019U, 73037U, 73039U, 73043U, 73061U, 73063U, 73079U, 73091U, 73121U, 73127U, +73133U, 73141U, 73181U, 73189U, 73237U, 73243U, 73259U, 73277U, 73291U, 73303U, +73309U, 73327U, 73331U, 73351U, 73361U, 73363U, 73369U, 73379U, 73387U, 73417U, +73421U, 73433U, 73453U, 73459U, 73471U, 73477U, 73483U, 73517U, 73523U, 73529U, +73547U, 73553U, 73561U, 73571U, 73583U, 73589U, 73597U, 73607U, 73609U, 73613U, +73637U, 73643U, 73651U, 73673U, 73679U, 73681U, 73693U, 73699U, 73709U, 73721U, +73727U, 73751U, 73757U, 73771U, 73783U, 73819U, 73823U, 73847U, 73849U, 73859U, +73867U, 73877U, 73883U, 73897U, 73907U, 73939U, 73943U, 73951U, 73961U, 73973U, +73999U, 74017U, 74021U, 74027U, 74047U, 74051U, 74071U, 74077U, 74093U, 74099U, +74101U, 74131U, 74143U, 74149U, 74159U, 74161U, 74167U, 74177U, 74189U, 74197U, +74201U, 74203U, 74209U, 74219U, 74231U, 74257U, 74279U, 74287U, 74293U, 74297U, +74311U, 74317U, 74323U, 74353U, 74357U, 74363U, 74377U, 74381U, 74383U, 74411U, +74413U, 74419U, 74441U, 74449U, 74453U, 74471U, 74489U, 74507U, 74509U, 74521U, +74527U, 74531U, 74551U, 74561U, 74567U, 74573U, 74587U, 74597U, 74609U, 74611U, +74623U, 74653U, 74687U, 74699U, 74707U, 74713U, 74717U, 74719U, 74729U, 74731U, +74747U, 74759U, 74761U, 74771U, 74779U, 74797U, 74821U, 74827U, 74831U, 74843U, +74857U, 74861U, 74869U, 74873U, 74887U, 74891U, 74897U, 74903U, 74923U, 74929U, +74933U, 74941U, 74959U, 75011U, 75013U, 75017U, 75029U, 75037U, 75041U, 75079U, +75083U, 75109U, 75133U, 75149U, 75161U, 75167U, 75169U, 75181U, 75193U, 75209U, +75211U, 75217U, 75223U, 75227U, 75239U, 75253U, 75269U, 75277U, 75289U, 75307U, +75323U, 75329U, 75337U, 75347U, 75353U, 75367U, 75377U, 75389U, 75391U, 75401U, +75403U, 75407U, 75431U, 75437U, 75479U, 75503U, 75511U, 75521U, 75527U, 75533U, +75539U, 75541U, 75553U, 75557U, 75571U, 75577U, 75583U, 75611U, 75617U, 75619U, +75629U, 75641U, 75653U, 75659U, 75679U, 75683U, 75689U, 75703U, 75707U, 75709U, +75721U, 75731U, 75743U, 75767U, 75773U, 75781U, 75787U, 75793U, 75797U, 75821U, +75833U, 75853U, 75869U, 75883U, 75913U, 75931U, 75937U, 75941U, 75967U, 75979U, +75983U, 75989U, 75991U, 75997U, 76001U, 76003U, 76031U, 76039U, 76079U, 76081U, +76091U, 76099U, 76103U, 76123U, 76129U, 76147U, 76157U, 76159U, 76163U, 76207U, +76213U, 76231U, 76243U, 76249U, 76253U, 76259U, 76261U, 76283U, 76289U, 76303U, +76333U, 76343U, 76367U, 76369U, 76379U, 76387U, 76403U, 76421U, 76423U, 76441U, +76463U, 76471U, 76481U, 76487U, 76493U, 76507U, 76511U, 76519U, 76537U, 76541U, +76543U, 76561U, 76579U, 76597U, 76603U, 76607U, 76631U, 76649U, 76651U, 76667U, +76673U, 76679U, 76697U, 76717U, 76733U, 76753U, 76757U, 76771U, 76777U, 76781U, +76801U, 76819U, 76829U, 76831U, 76837U, 76847U, 76871U, 76873U, 76883U, 76907U, +76913U, 76919U, 76943U, 76949U, 76961U, 76963U, 76991U, 77003U, 77017U, 77023U, +77029U, 77041U, 77047U, 77069U, 77081U, 77093U, 77101U, 77137U, 77141U, 77153U, +77167U, 77171U, 77191U, 77201U, 77213U, 77237U, 77239U, 77243U, 77249U, 77261U, +77263U, 77267U, 77269U, 77279U, 77291U, 77317U, 77323U, 77339U, 77347U, 77351U, +77359U, 77369U, 77377U, 77383U, 77417U, 77419U, 77431U, 77447U, 77471U, 77477U, +77479U, 77489U, 77491U, 77509U, 77513U, 77521U, 77527U, 77543U, 77549U, 77551U, +77557U, 77563U, 77569U, 77573U, 77587U, 77591U, 77611U, 77617U, 77621U, 77641U, +77647U, 77659U, 77681U, 77687U, 77689U, 77699U, 77711U, 77713U, 77719U, 77723U, +77731U, 77743U, 77747U, 77761U, 77773U, 77783U, 77797U, 77801U, 77813U, 77839U, +77849U, 77863U, 77867U, 77893U, 77899U, 77929U, 77933U, 77951U, 77969U, 77977U, +77983U, 77999U, 78007U, 78017U, 78031U, 78041U, 78049U, 78059U, 78079U, 78101U, +78121U, 78137U, 78139U, 78157U, 78163U, 78167U, 78173U, 78179U, 78191U, 78193U, +78203U, 78229U, 78233U, 78241U, 78259U, 78277U, 78283U, 78301U, 78307U, 78311U, +78317U, 78341U, 78347U, 78367U, 78401U, 78427U, 78437U, 78439U, 78467U, 78479U, +78487U, 78497U, 78509U, 78511U, 78517U, 78539U, 78541U, 78553U, 78569U, 78571U, +78577U, 78583U, 78593U, 78607U, 78623U, 78643U, 78649U, 78653U, 78691U, 78697U, +78707U, 78713U, 78721U, 78737U, 78779U, 78781U, 78787U, 78791U, 78797U, 78803U, +78809U, 78823U, 78839U, 78853U, 78857U, 78877U, 78887U, 78889U, 78893U, 78901U, +78919U, 78929U, 78941U, 78977U, 78979U, 78989U, 79031U, 79039U, 79043U, 79063U, +79087U, 79103U, 79111U, 79133U, 79139U, 79147U, 79151U, 79153U, 79159U, 79181U, +79187U, 79193U, 79201U, 79229U, 79231U, 79241U, 79259U, 79273U, 79279U, 79283U, +79301U, 79309U, 79319U, 79333U, 79337U, 79349U, 79357U, 79367U, 79379U, 79393U, +79397U, 79399U, 79411U, 79423U, 79427U, 79433U, 79451U, 79481U, 79493U, 79531U, +79537U, 79549U, 79559U, 79561U, 79579U, 79589U, 79601U, 79609U, 79613U, 79621U, +79627U, 79631U, 79633U, 79657U, 79669U, 79687U, 79691U, 79693U, 79697U, 79699U, +79757U, 79769U, 79777U, 79801U, 79811U, 79813U, 79817U, 79823U, 79829U, 79841U, +79843U, 79847U, 79861U, 79867U, 79873U, 79889U, 79901U, 79903U, 79907U, 79939U, +79943U, 79967U, 79973U, 79979U, 79987U, 79997U, 79999U, 80021U, 80039U, 80051U, +80071U, 80077U, 80107U, 80111U, 80141U, 80147U, 80149U, 80153U, 80167U, 80173U, +80177U, 80191U, 80207U, 80209U, 80221U, 80231U, 80233U, 80239U, 80251U, 80263U, +80273U, 80279U, 80287U, 80309U, 80317U, 80329U, 80341U, 80347U, 80363U, 80369U, +80387U, 80407U, 80429U, 80447U, 80449U, 80471U, 80473U, 80489U, 80491U, 80513U, +80527U, 80537U, 80557U, 80567U, 80599U, 80603U, 80611U, 80621U, 80627U, 80629U, +80651U, 80657U, 80669U, 80671U, 80677U, 80681U, 80683U, 80687U, 80701U, 80713U, +80737U, 80747U, 80749U, 80761U, 80777U, 80779U, 80783U, 80789U, 80803U, 80809U, +80819U, 80831U, 80833U, 80849U, 80863U, 80897U, 80909U, 80911U, 80917U, 80923U, +80929U, 80933U, 80953U, 80963U, 80989U, 81001U, 81013U, 81017U, 81019U, 81023U, +81031U, 81041U, 81043U, 81047U, 81049U, 81071U, 81077U, 81083U, 81097U, 81101U, +81119U, 81131U, 81157U, 81163U, 81173U, 81181U, 81197U, 81199U, 81203U, 81223U, +81233U, 81239U, 81281U, 81283U, 81293U, 81299U, 81307U, 81331U, 81343U, 81349U, +81353U, 81359U, 81371U, 81373U, 81401U, 81409U, 81421U, 81439U, 81457U, 81463U, +81509U, 81517U, 81527U, 81533U, 81547U, 81551U, 81553U, 81559U, 81563U, 81569U, +81611U, 81619U, 81629U, 81637U, 81647U, 81649U, 81667U, 81671U, 81677U, 81689U, +81701U, 81703U, 81707U, 81727U, 81737U, 81749U, 81761U, 81769U, 81773U, 81799U, +81817U, 81839U, 81847U, 81853U, 81869U, 81883U, 81899U, 81901U, 81919U, 81929U, +81931U, 81937U, 81943U, 81953U, 81967U, 81971U, 81973U, 82003U, 82007U, 82009U, +82013U, 82021U, 82031U, 82037U, 82039U, 82051U, 82067U, 82073U, 82129U, 82139U, +82141U, 82153U, 82163U, 82171U, 82183U, 82189U, 82193U, 82207U, 82217U, 82219U, +82223U, 82231U, 82237U, 82241U, 82261U, 82267U, 82279U, 82301U, 82307U, 82339U, +82349U, 82351U, 82361U, 82373U, 82387U, 82393U, 82421U, 82457U, 82463U, 82469U, +82471U, 82483U, 82487U, 82493U, 82499U, 82507U, 82529U, 82531U, 82549U, 82559U, +82561U, 82567U, 82571U, 82591U, 82601U, 82609U, 82613U, 82619U, 82633U, 82651U, +82657U, 82699U, 82721U, 82723U, 82727U, 82729U, 82757U, 82759U, 82763U, 82781U, +82787U, 82793U, 82799U, 82811U, 82813U, 82837U, 82847U, 82883U, 82889U, 82891U, +82903U, 82913U, 82939U, 82963U, 82981U, 82997U, 83003U, 83009U, 83023U, 83047U, +83059U, 83063U, 83071U, 83077U, 83089U, 83093U, 83101U, 83117U, 83137U, 83177U, +83203U, 83207U, 83219U, 83221U, 83227U, 83231U, 83233U, 83243U, 83257U, 83267U, +83269U, 83273U, 83299U, 83311U, 83339U, 83341U, 83357U, 83383U, 83389U, 83399U, +83401U, 83407U, 83417U, 83423U, 83431U, 83437U, 83443U, 83449U, 83459U, 83471U, +83477U, 83497U, 83537U, 83557U, 83561U, 83563U, 83579U, 83591U, 83597U, 83609U, +83617U, 83621U, 83639U, 83641U, 83653U, 83663U, 83689U, 83701U, 83717U, 83719U, +83737U, 83761U, 83773U, 83777U, 83791U, 83813U, 83833U, 83843U, 83857U, 83869U, +83873U, 83891U, 83903U, 83911U, 83921U, 83933U, 83939U, 83969U, 83983U, 83987U, +84011U, 84017U, 84047U, 84053U, 84059U, 84061U, 84067U, 84089U, 84121U, 84127U, +84131U, 84137U, 84143U, 84163U, 84179U, 84181U, 84191U, 84199U, 84211U, 84221U, +84223U, 84229U, 84239U, 84247U, 84263U, 84299U, 84307U, 84313U, 84317U, 84319U, +84347U, 84349U, 84377U, 84389U, 84391U, 84401U, 84407U, 84421U, 84431U, 84437U, +84443U, 84449U, 84457U, 84463U, 84467U, 84481U, 84499U, 84503U, 84509U, 84521U, +84523U, 84533U, 84551U, 84559U, 84589U, 84629U, 84631U, 84649U, 84653U, 84659U, +84673U, 84691U, 84697U, 84701U, 84713U, 84719U, 84731U, 84737U, 84751U, 84761U, +84787U, 84793U, 84809U, 84811U, 84827U, 84857U, 84859U, 84869U, 84871U, 84913U, +84919U, 84947U, 84961U, 84967U, 84977U, 84979U, 84991U, 85009U, 85021U, 85027U, +85037U, 85049U, 85061U, 85081U, 85087U, 85091U, 85093U, 85103U, 85109U, 85121U, +85133U, 85147U, 85159U, 85193U, 85199U, 85201U, 85213U, 85223U, 85229U, 85237U, +85243U, 85247U, 85259U, 85297U, 85303U, 85313U, 85331U, 85333U, 85361U, 85363U, +85369U, 85381U, 85411U, 85427U, 85429U, 85439U, 85447U, 85451U, 85453U, 85469U, +85487U, 85513U, 85517U, 85523U, 85531U, 85549U, 85571U, 85577U, 85597U, 85601U, +85607U, 85619U, 85621U, 85627U, 85639U, 85643U, 85661U, 85667U, 85669U, 85691U, +85703U, 85711U, 85717U, 85733U, 85751U, 85781U, 85793U, 85817U, 85819U, 85829U, +85831U, 85837U, 85843U, 85847U, 85853U, 85889U, 85903U, 85909U, 85931U, 85933U, +85991U, 85999U, 86011U, 86017U, 86027U, 86029U, 86069U, 86077U, 86083U, 86111U, +86113U, 86117U, 86131U, 86137U, 86143U, 86161U, 86171U, 86179U, 86183U, 86197U, +86201U, 86209U, 86239U, 86243U, 86249U, 86257U, 86263U, 86269U, 86287U, 86291U, +86293U, 86297U, 86311U, 86323U, 86341U, 86351U, 86353U, 86357U, 86369U, 86371U, +86381U, 86389U, 86399U, 86413U, 86423U, 86441U, 86453U, 86461U, 86467U, 86477U, +86491U, 86501U, 86509U, 86531U, 86533U, 86539U, 86561U, 86573U, 86579U, 86587U, +86599U, 86627U, 86629U, 86677U, 86689U, 86693U, 86711U, 86719U, 86729U, 86743U, +86753U, 86767U, 86771U, 86783U, 86813U, 86837U, 86843U, 86851U, 86857U, 86861U, +86869U, 86923U, 86927U, 86929U, 86939U, 86951U, 86959U, 86969U, 86981U, 86993U, +87011U, 87013U, 87037U, 87041U, 87049U, 87071U, 87083U, 87103U, 87107U, 87119U, +87121U, 87133U, 87149U, 87151U, 87179U, 87181U, 87187U, 87211U, 87221U, 87223U, +87251U, 87253U, 87257U, 87277U, 87281U, 87293U, 87299U, 87313U, 87317U, 87323U, +87337U, 87359U, 87383U, 87403U, 87407U, 87421U, 87427U, 87433U, 87443U, 87473U, +87481U, 87491U, 87509U, 87511U, 87517U, 87523U, 87539U, 87541U, 87547U, 87553U, +87557U, 87559U, 87583U, 87587U, 87589U, 87613U, 87623U, 87629U, 87631U, 87641U, +87643U, 87649U, 87671U, 87679U, 87683U, 87691U, 87697U, 87701U, 87719U, 87721U, +87739U, 87743U, 87751U, 87767U, 87793U, 87797U, 87803U, 87811U, 87833U, 87853U, +87869U, 87877U, 87881U, 87887U, 87911U, 87917U, 87931U, 87943U, 87959U, 87961U, +87973U, 87977U, 87991U, 88001U, 88003U, 88007U, 88019U, 88037U, 88069U, 88079U, +88093U, 88117U, 88129U, 88169U, 88177U, 88211U, 88223U, 88237U, 88241U, 88259U, +88261U, 88289U, 88301U, 88321U, 88327U, 88337U, 88339U, 88379U, 88397U, 88411U, +88423U, 88427U, 88463U, 88469U, 88471U, 88493U, 88499U, 88513U, 88523U, 88547U, +88589U, 88591U, 88607U, 88609U, 88643U, 88651U, 88657U, 88661U, 88663U, 88667U, +88681U, 88721U, 88729U, 88741U, 88747U, 88771U, 88789U, 88793U, 88799U, 88801U, +88807U, 88811U, 88813U, 88817U, 88819U, 88843U, 88853U, 88861U, 88867U, 88873U, +88883U, 88897U, 88903U, 88919U, 88937U, 88951U, 88969U, 88993U, 88997U, 89003U, +89009U, 89017U, 89021U, 89041U, 89051U, 89057U, 89069U, 89071U, 89083U, 89087U, +89101U, 89107U, 89113U, 89119U, 89123U, 89137U, 89153U, 89189U, 89203U, 89209U, +89213U, 89227U, 89231U, 89237U, 89261U, 89269U, 89273U, 89293U, 89303U, 89317U, +89329U, 89363U, 89371U, 89381U, 89387U, 89393U, 89399U, 89413U, 89417U, 89431U, +89443U, 89449U, 89459U, 89477U, 89491U, 89501U, 89513U, 89519U, 89521U, 89527U, +89533U, 89561U, 89563U, 89567U, 89591U, 89597U, 89599U, 89603U, 89611U, 89627U, +89633U, 89653U, 89657U, 89659U, 89669U, 89671U, 89681U, 89689U, 89753U, 89759U, +89767U, 89779U, 89783U, 89797U, 89809U, 89819U, 89821U, 89833U, 89839U, 89849U, +89867U, 89891U, 89897U, 89899U, 89909U, 89917U, 89923U, 89939U, 89959U, 89963U, +89977U, 89983U, 89989U, 90001U, 90007U, 90011U, 90017U, 90019U, 90023U, 90031U, +90053U, 90059U, 90067U, 90071U, 90073U, 90089U, 90107U, 90121U, 90127U, 90149U, +90163U, 90173U, 90187U, 90191U, 90197U, 90199U, 90203U, 90217U, 90227U, 90239U, +90247U, 90263U, 90271U, 90281U, 90289U, 90313U, 90353U, 90359U, 90371U, 90373U, +90379U, 90397U, 90401U, 90403U, 90407U, 90437U, 90439U, 90469U, 90473U, 90481U, +90499U, 90511U, 90523U, 90527U, 90529U, 90533U, 90547U, 90583U, 90599U, 90617U, +90619U, 90631U, 90641U, 90647U, 90659U, 90677U, 90679U, 90697U, 90703U, 90709U, +90731U, 90749U, 90787U, 90793U, 90803U, 90821U, 90823U, 90833U, 90841U, 90847U, +90863U, 90887U, 90901U, 90907U, 90911U, 90917U, 90931U, 90947U, 90971U, 90977U, +90989U, 90997U, 91009U, 91019U, 91033U, 91079U, 91081U, 91097U, 91099U, 91121U, +91127U, 91129U, 91139U, 91141U, 91151U, 91153U, 91159U, 91163U, 91183U, 91193U, +91199U, 91229U, 91237U, 91243U, 91249U, 91253U, 91283U, 91291U, 91297U, 91303U, +91309U, 91331U, 91367U, 91369U, 91373U, 91381U, 91387U, 91393U, 91397U, 91411U, +91423U, 91433U, 91453U, 91457U, 91459U, 91463U, 91493U, 91499U, 91513U, 91529U, +91541U, 91571U, 91573U, 91577U, 91583U, 91591U, 91621U, 91631U, 91639U, 91673U, +91691U, 91703U, 91711U, 91733U, 91753U, 91757U, 91771U, 91781U, 91801U, 91807U, +91811U, 91813U, 91823U, 91837U, 91841U, 91867U, 91873U, 91909U, 91921U, 91939U, +91943U, 91951U, 91957U, 91961U, 91967U, 91969U, 91997U, 92003U, 92009U, 92033U, +92041U, 92051U, 92077U, 92083U, 92107U, 92111U, 92119U, 92143U, 92153U, 92173U, +92177U, 92179U, 92189U, 92203U, 92219U, 92221U, 92227U, 92233U, 92237U, 92243U, +92251U, 92269U, 92297U, 92311U, 92317U, 92333U, 92347U, 92353U, 92357U, 92363U, +92369U, 92377U, 92381U, 92383U, 92387U, 92399U, 92401U, 92413U, 92419U, 92431U, +92459U, 92461U, 92467U, 92479U, 92489U, 92503U, 92507U, 92551U, 92557U, 92567U, +92569U, 92581U, 92593U, 92623U, 92627U, 92639U, 92641U, 92647U, 92657U, 92669U, +92671U, 92681U, 92683U, 92693U, 92699U, 92707U, 92717U, 92723U, 92737U, 92753U, +92761U, 92767U, 92779U, 92789U, 92791U, 92801U, 92809U, 92821U, 92831U, 92849U, +92857U, 92861U, 92863U, 92867U, 92893U, 92899U, 92921U, 92927U, 92941U, 92951U, +92957U, 92959U, 92987U, 92993U, 93001U, 93047U, 93053U, 93059U, 93077U, 93083U, +93089U, 93097U, 93103U, 93113U, 93131U, 93133U, 93139U, 93151U, 93169U, 93179U, +93187U, 93199U, 93229U, 93239U, 93241U, 93251U, 93253U, 93257U, 93263U, 93281U, +93283U, 93287U, 93307U, 93319U, 93323U, 93329U, 93337U, 93371U, 93377U, 93383U, +93407U, 93419U, 93427U, 93463U, 93479U, 93481U, 93487U, 93491U, 93493U, 93497U, +93503U, 93523U, 93529U, 93553U, 93557U, 93559U, 93563U, 93581U, 93601U, 93607U, +93629U, 93637U, 93683U, 93701U, 93703U, 93719U, 93739U, 93761U, 93763U, 93787U, +93809U, 93811U, 93827U, 93851U, 93871U, 93887U, 93889U, 93893U, 93901U, 93911U, +93913U, 93923U, 93937U, 93941U, 93949U, 93967U, 93971U, 93979U, 93983U, 93997U, +94007U, 94009U, 94033U, 94049U, 94057U, 94063U, 94079U, 94099U, 94109U, 94111U, +94117U, 94121U, 94151U, 94153U, 94169U, 94201U, 94207U, 94219U, 94229U, 94253U, +94261U, 94273U, 94291U, 94307U, 94309U, 94321U, 94327U, 94331U, 94343U, 94349U, +94351U, 94379U, 94397U, 94399U, 94421U, 94427U, 94433U, 94439U, 94441U, 94447U, +94463U, 94477U, 94483U, 94513U, 94529U, 94531U, 94541U, 94543U, 94547U, 94559U, +94561U, 94573U, 94583U, 94597U, 94603U, 94613U, 94621U, 94649U, 94651U, 94687U, +94693U, 94709U, 94723U, 94727U, 94747U, 94771U, 94777U, 94781U, 94789U, 94793U, +94811U, 94819U, 94823U, 94837U, 94841U, 94847U, 94849U, 94873U, 94889U, 94903U, +94907U, 94933U, 94949U, 94951U, 94961U, 94993U, 94999U, 95003U, 95009U, 95021U, +95027U, 95063U, 95071U, 95083U, 95087U, 95089U, 95093U, 95101U, 95107U, 95111U, +95131U, 95143U, 95153U, 95177U, 95189U, 95191U, 95203U, 95213U, 95219U, 95231U, +95233U, 95239U, 95257U, 95261U, 95267U, 95273U, 95279U, 95287U, 95311U, 95317U, +95327U, 95339U, 95369U, 95383U, 95393U, 95401U, 95413U, 95419U, 95429U, 95441U, +95443U, 95461U, 95467U, 95471U, 95479U, 95483U, 95507U, 95527U, 95531U, 95539U, +95549U, 95561U, 95569U, 95581U, 95597U, 95603U, 95617U, 95621U, 95629U, 95633U, +95651U, 95701U, 95707U, 95713U, 95717U, 95723U, 95731U, 95737U, 95747U, 95773U, +95783U, 95789U, 95791U, 95801U, 95803U, 95813U, 95819U, 95857U, 95869U, 95873U, +95881U, 95891U, 95911U, 95917U, 95923U, 95929U, 95947U, 95957U, 95959U, 95971U, +95987U, 95989U, 96001U, 96013U, 96017U, 96043U, 96053U, 96059U, 96079U, 96097U, +96137U, 96149U, 96157U, 96167U, 96179U, 96181U, 96199U, 96211U, 96221U, 96223U, +96233U, 96259U, 96263U, 96269U, 96281U, 96289U, 96293U, 96323U, 96329U, 96331U, +96337U, 96353U, 96377U, 96401U, 96419U, 96431U, 96443U, 96451U, 96457U, 96461U, +96469U, 96479U, 96487U, 96493U, 96497U, 96517U, 96527U, 96553U, 96557U, 96581U, +96587U, 96589U, 96601U, 96643U, 96661U, 96667U, 96671U, 96697U, 96703U, 96731U, +96737U, 96739U, 96749U, 96757U, 96763U, 96769U, 96779U, 96787U, 96797U, 96799U, +96821U, 96823U, 96827U, 96847U, 96851U, 96857U, 96893U, 96907U, 96911U, 96931U, +96953U, 96959U, 96973U, 96979U, 96989U, 96997U, 97001U, 97003U, 97007U, 97021U, +97039U, 97073U, 97081U, 97103U, 97117U, 97127U, 97151U, 97157U, 97159U, 97169U, +97171U, 97177U, 97187U, 97213U, 97231U, 97241U, 97259U, 97283U, 97301U, 97303U, +97327U, 97367U, 97369U, 97373U, 97379U, 97381U, 97387U, 97397U, 97423U, 97429U, +97441U, 97453U, 97459U, 97463U, 97499U, 97501U, 97511U, 97523U, 97547U, 97549U, +97553U, 97561U, 97571U, 97577U, 97579U, 97583U, 97607U, 97609U, 97613U, 97649U, +97651U, 97673U, 97687U, 97711U, 97729U, 97771U, 97777U, 97787U, 97789U, 97813U, +97829U, 97841U, 97843U, 97847U, 97849U, 97859U, 97861U, 97871U, 97879U, 97883U, +97919U, 97927U, 97931U, 97943U, 97961U, 97967U, 97973U, 97987U, 98009U, 98011U, +98017U, 98041U, 98047U, 98057U, 98081U, 98101U, 98123U, 98129U, 98143U, 98179U, +98207U, 98213U, 98221U, 98227U, 98251U, 98257U, 98269U, 98297U, 98299U, 98317U, +98321U, 98323U, 98327U, 98347U, 98369U, 98377U, 98387U, 98389U, 98407U, 98411U, +98419U, 98429U, 98443U, 98453U, 98459U, 98467U, 98473U, 98479U, 98491U, 98507U, +98519U, 98533U, 98543U, 98561U, 98563U, 98573U, 98597U, 98621U, 98627U, 98639U, +98641U, 98663U, 98669U, 98689U, 98711U, 98713U, 98717U, 98729U, 98731U, 98737U, +98773U, 98779U, 98801U, 98807U, 98809U, 98837U, 98849U, 98867U, 98869U, 98873U, +98887U, 98893U, 98897U, 98899U, 98909U, 98911U, 98927U, 98929U, 98939U, 98947U, +98953U, 98963U, 98981U, 98993U, 98999U, 99013U, 99017U, 99023U, 99041U, 99053U, +99079U, 99083U, 99089U, 99103U, 99109U, 99119U, 99131U, 99133U, 99137U, 99139U, +99149U, 99173U, 99181U, 99191U, 99223U, 99233U, 99241U, 99251U, 99257U, 99259U, +99277U, 99289U, 99317U, 99347U, 99349U, 99367U, 99371U, 99377U, 99391U, 99397U, +99401U, 99409U, 99431U, 99439U, 99469U, 99487U, 99497U, 99523U, 99527U, 99529U, +99551U, 99559U, 99563U, 99571U, 99577U, 99581U, 99607U, 99611U, 99623U, 99643U, +99661U, 99667U, 99679U, 99689U, 99707U, 99709U, 99713U, 99719U, 99721U, 99733U, +99761U, 99767U, 99787U, 99793U, 99809U, 99817U, 99823U, 99829U, 99833U, 99839U, +99859U, 99871U, 99877U, 99881U, 99901U, 99907U, 99923U, 99929U, 99961U, 99971U, +99989U, 99991U, 100003U, 100019U, 100043U, 100049U, 100057U, 100069U, 100103U, 100109U, +100129U, 100151U, 100153U, 100169U, 100183U, 100189U, 100193U, 100207U, 100213U, 100237U, +100267U, 100271U, 100279U, 100291U, 100297U, 100313U, 100333U, 100343U, 100357U, 100361U, +100363U, 100379U, 100391U, 100393U, 100403U, 100411U, 100417U, 100447U, 100459U, 100469U, +100483U, 100493U, 100501U, 100511U, 100517U, 100519U, 100523U, 100537U, 100547U, 100549U, +100559U, 100591U, 100609U, 100613U, 100621U, 100649U, 100669U, 100673U, 100693U, 100699U, +100703U, 100733U, 100741U, 100747U, 100769U, 100787U, 100799U, 100801U, 100811U, 100823U, +100829U, 100847U, 100853U, 100907U, 100913U, 100927U, 100931U, 100937U, 100943U, 100957U, +100981U, 100987U, 100999U, 101009U, 101021U, 101027U, 101051U, 101063U, 101081U, 101089U, +101107U, 101111U, 101113U, 101117U, 101119U, 101141U, 101149U, 101159U, 101161U, 101173U, +101183U, 101197U, 101203U, 101207U, 101209U, 101221U, 101267U, 101273U, 101279U, 101281U, +101287U, 101293U, 101323U, 101333U, 101341U, 101347U, 101359U, 101363U, 101377U, 101383U, +101399U, 101411U, 101419U, 101429U, 101449U, 101467U, 101477U, 101483U, 101489U, 101501U, +101503U, 101513U, 101527U, 101531U, 101533U, 101537U, 101561U, 101573U, 101581U, 101599U, +101603U, 101611U, 101627U, 101641U, 101653U, 101663U, 101681U, 101693U, 101701U, 101719U, +101723U, 101737U, 101741U, 101747U, 101749U, 101771U, 101789U, 101797U, 101807U, 101833U, +101837U, 101839U, 101863U, 101869U, 101873U, 101879U, 101891U, 101917U, 101921U, 101929U, +101939U, 101957U, 101963U, 101977U, 101987U, 101999U, 102001U, 102013U, 102019U, 102023U, +102031U, 102043U, 102059U, 102061U, 102071U, 102077U, 102079U, 102101U, 102103U, 102107U, +102121U, 102139U, 102149U, 102161U, 102181U, 102191U, 102197U, 102199U, 102203U, 102217U, +102229U, 102233U, 102241U, 102251U, 102253U, 102259U, 102293U, 102299U, 102301U, 102317U, +102329U, 102337U, 102359U, 102367U, 102397U, 102407U, 102409U, 102433U, 102437U, 102451U, +102461U, 102481U, 102497U, 102499U, 102503U, 102523U, 102533U, 102539U, 102547U, 102551U, +102559U, 102563U, 102587U, 102593U, 102607U, 102611U, 102643U, 102647U, 102653U, 102667U, +102673U, 102677U, 102679U, 102701U, 102761U, 102763U, 102769U, 102793U, 102797U, 102811U, +102829U, 102841U, 102859U, 102871U, 102877U, 102881U, 102911U, 102913U, 102929U, 102931U, +102953U, 102967U, 102983U, 103001U, 103007U, 103043U, 103049U, 103067U, 103069U, 103079U, +103087U, 103091U, 103093U, 103099U, 103123U, 103141U, 103171U, 103177U, 103183U, 103217U, +103231U, 103237U, 103289U, 103291U, 103307U, 103319U, 103333U, 103349U, 103357U, 103387U, +103391U, 103393U, 103399U, 103409U, 103421U, 103423U, 103451U, 103457U, 103471U, 103483U, +103511U, 103529U, 103549U, 103553U, 103561U, 103567U, 103573U, 103577U, 103583U, 103591U, +103613U, 103619U, 103643U, 103651U, 103657U, 103669U, 103681U, 103687U, 103699U, 103703U, +103723U, 103769U, 103787U, 103801U, 103811U, 103813U, 103837U, 103841U, 103843U, 103867U, +103889U, 103903U, 103913U, 103919U, 103951U, 103963U, 103967U, 103969U, 103979U, 103981U, +103991U, 103993U, 103997U, 104003U, 104009U, 104021U, 104033U, 104047U, 104053U, 104059U, +104087U, 104089U, 104107U, 104113U, 104119U, 104123U, 104147U, 104149U, 104161U, 104173U, +104179U, 104183U, 104207U, 104231U, 104233U, 104239U, 104243U, 104281U, 104287U, 104297U, +104309U, 104311U, 104323U, 104327U, 104347U, 104369U, 104381U, 104383U, 104393U, 104399U, +104417U, 104459U, 104471U, 104473U, 104479U, 104491U, 104513U, 104527U, 104537U, 104543U, +104549U, 104551U, 104561U, 104579U, 104593U, 104597U, 104623U, 104639U, 104651U, 104659U, +104677U, 104681U, 104683U, 104693U, 104701U, 104707U, 104711U, 104717U, 104723U, 104729U, +104743U, 104759U, 104761U, 104773U, 104779U, 104789U, 104801U, 104803U, 104827U, 104831U, +104849U, 104851U, 104869U, 104879U, 104891U, 104911U, 104917U, 104933U, 104947U, 104953U, +104959U, 104971U, 104987U, 104999U, 105019U, 105023U, 105031U, 105037U, 105071U, 105097U, +105107U, 105137U, 105143U, 105167U, 105173U, 105199U, 105211U, 105227U, 105229U, 105239U, +105251U, 105253U, 105263U, 105269U, 105277U, 105319U, 105323U, 105331U, 105337U, 105341U, +105359U, 105361U, 105367U, 105373U, 105379U, 105389U, 105397U, 105401U, 105407U, 105437U, +105449U, 105467U, 105491U, 105499U, 105503U, 105509U, 105517U, 105527U, 105529U, 105533U, +105541U, 105557U, 105563U, 105601U, 105607U, 105613U, 105619U, 105649U, 105653U, 105667U, +105673U, 105683U, 105691U, 105701U, 105727U, 105733U, 105751U, 105761U, 105767U, 105769U, +105817U, 105829U, 105863U, 105871U, 105883U, 105899U, 105907U, 105913U, 105929U, 105943U, +105953U, 105967U, 105971U, 105977U, 105983U, 105997U, 106013U, 106019U, 106031U, 106033U, +106087U, 106103U, 106109U, 106121U, 106123U, 106129U, 106163U, 106181U, 106187U, 106189U, +106207U, 106213U, 106217U, 106219U, 106243U, 106261U, 106273U, 106277U, 106279U, 106291U, +106297U, 106303U, 106307U, 106319U, 106321U, 106331U, 106349U, 106357U, 106363U, 106367U, +106373U, 106391U, 106397U, 106411U, 106417U, 106427U, 106433U, 106441U, 106451U, 106453U, +106487U, 106501U, 106531U, 106537U, 106541U, 106543U, 106591U, 106619U, 106621U, 106627U, +106637U, 106649U, 106657U, 106661U, 106663U, 106669U, 106681U, 106693U, 106699U, 106703U, +106721U, 106727U, 106739U, 106747U, 106751U, 106753U, 106759U, 106781U, 106783U, 106787U, +106801U, 106823U, 106853U, 106859U, 106861U, 106867U, 106871U, 106877U, 106903U, 106907U, +106921U, 106937U, 106949U, 106957U, 106961U, 106963U, 106979U, 106993U, 107021U, 107033U, +107053U, 107057U, 107069U, 107071U, 107077U, 107089U, 107099U, 107101U, 107119U, 107123U, +107137U, 107171U, 107183U, 107197U, 107201U, 107209U, 107227U, 107243U, 107251U, 107269U, +107273U, 107279U, 107309U, 107323U, 107339U, 107347U, 107351U, 107357U, 107377U, 107441U, +107449U, 107453U, 107467U, 107473U, 107507U, 107509U, 107563U, 107581U, 107599U, 107603U, +107609U, 107621U, 107641U, 107647U, 107671U, 107687U, 107693U, 107699U, 107713U, 107717U, +107719U, 107741U, 107747U, 107761U, 107773U, 107777U, 107791U, 107827U, 107837U, 107839U, +107843U, 107857U, 107867U, 107873U, 107881U, 107897U, 107903U, 107923U, 107927U, 107941U, +107951U, 107971U, 107981U, 107999U, 108007U, 108011U, 108013U, 108023U, 108037U, 108041U, +108061U, 108079U, 108089U, 108107U, 108109U, 108127U, 108131U, 108139U, 108161U, 108179U, +108187U, 108191U, 108193U, 108203U, 108211U, 108217U, 108223U, 108233U, 108247U, 108263U, +108271U, 108287U, 108289U, 108293U, 108301U, 108343U, 108347U, 108359U, 108377U, 108379U, +108401U, 108413U, 108421U, 108439U, 108457U, 108461U, 108463U, 108497U, 108499U, 108503U, +108517U, 108529U, 108533U, 108541U, 108553U, 108557U, 108571U, 108587U, 108631U, 108637U, +108643U, 108649U, 108677U, 108707U, 108709U, 108727U, 108739U, 108751U, 108761U, 108769U, +108791U, 108793U, 108799U, 108803U, 108821U, 108827U, 108863U, 108869U, 108877U, 108881U, +108883U, 108887U, 108893U, 108907U, 108917U, 108923U, 108929U, 108943U, 108947U, 108949U, +108959U, 108961U, 108967U, 108971U, 108991U, 109001U, 109013U, 109037U, 109049U, 109063U, +109073U, 109097U, 109103U, 109111U, 109121U, 109133U, 109139U, 109141U, 109147U, 109159U, +109169U, 109171U, 109199U, 109201U, 109211U, 109229U, 109253U, 109267U, 109279U, 109297U, +109303U, 109313U, 109321U, 109331U, 109357U, 109363U, 109367U, 109379U, 109387U, 109391U, +109397U, 109423U, 109433U, 109441U, 109451U, 109453U, 109469U, 109471U, 109481U, 109507U, +109517U, 109519U, 109537U, 109541U, 109547U, 109567U, 109579U, 109583U, 109589U, 109597U, +109609U, 109619U, 109621U, 109639U, 109661U, 109663U, 109673U, 109717U, 109721U, 109741U, +109751U, 109789U, 109793U, 109807U, 109819U, 109829U, 109831U, 109841U, 109843U, 109847U, +109849U, 109859U, 109873U, 109883U, 109891U, 109897U, 109903U, 109913U, 109919U, 109937U, +109943U, 109961U, 109987U, 110017U, 110023U, 110039U, 110051U, 110059U, 110063U, 110069U, +110083U, 110119U, 110129U, 110161U, 110183U, 110221U, 110233U, 110237U, 110251U, 110261U, +110269U, 110273U, 110281U, 110291U, 110311U, 110321U, 110323U, 110339U, 110359U, 110419U, +110431U, 110437U, 110441U, 110459U, 110477U, 110479U, 110491U, 110501U, 110503U, 110527U, +110533U, 110543U, 110557U, 110563U, 110567U, 110569U, 110573U, 110581U, 110587U, 110597U, +110603U, 110609U, 110623U, 110629U, 110641U, 110647U, 110651U, 110681U, 110711U, 110729U, +110731U, 110749U, 110753U, 110771U, 110777U, 110807U, 110813U, 110819U, 110821U, 110849U, +110863U, 110879U, 110881U, 110899U, 110909U, 110917U, 110921U, 110923U, 110927U, 110933U, +110939U, 110947U, 110951U, 110969U, 110977U, 110989U, 111029U, 111031U, 111043U, 111049U, +111053U, 111091U, 111103U, 111109U, 111119U, 111121U, 111127U, 111143U, 111149U, 111187U, +111191U, 111211U, 111217U, 111227U, 111229U, 111253U, 111263U, 111269U, 111271U, 111301U, +111317U, 111323U, 111337U, 111341U, 111347U, 111373U, 111409U, 111427U, 111431U, 111439U, +111443U, 111467U, 111487U, 111491U, 111493U, 111497U, 111509U, 111521U, 111533U, 111539U, +111577U, 111581U, 111593U, 111599U, 111611U, 111623U, 111637U, 111641U, 111653U, 111659U, +111667U, 111697U, 111721U, 111731U, 111733U, 111751U, 111767U, 111773U, 111779U, 111781U, +111791U, 111799U, 111821U, 111827U, 111829U, 111833U, 111847U, 111857U, 111863U, 111869U, +111871U, 111893U, 111913U, 111919U, 111949U, 111953U, 111959U, 111973U, 111977U, 111997U, +112019U, 112031U, 112061U, 112067U, 112069U, 112087U, 112097U, 112103U, 112111U, 112121U, +112129U, 112139U, 112153U, 112163U, 112181U, 112199U, 112207U, 112213U, 112223U, 112237U, +112241U, 112247U, 112249U, 112253U, 112261U, 112279U, 112289U, 112291U, 112297U, 112303U, +112327U, 112331U, 112337U, 112339U, 112349U, 112361U, 112363U, 112397U, 112403U, 112429U, +112459U, 112481U, 112501U, 112507U, 112543U, 112559U, 112571U, 112573U, 112577U, 112583U, +112589U, 112601U, 112603U, 112621U, 112643U, 112657U, 112663U, 112687U, 112691U, 112741U, +112757U, 112759U, 112771U, 112787U, 112799U, 112807U, 112831U, 112843U, 112859U, 112877U, +112901U, 112909U, 112913U, 112919U, 112921U, 112927U, 112939U, 112951U, 112967U, 112979U, +112997U, 113011U, 113017U, 113021U, 113023U, 113027U, 113039U, 113041U, 113051U, 113063U, +113081U, 113083U, 113089U, 113093U, 113111U, 113117U, 113123U, 113131U, 113143U, 113147U, +113149U, 113153U, 113159U, 113161U, 113167U, 113171U, 113173U, 113177U, 113189U, 113209U, +113213U, 113227U, 113233U, 113279U, 113287U, 113327U, 113329U, 113341U, 113357U, 113359U, +113363U, 113371U, 113381U, 113383U, 113417U, 113437U, 113453U, 113467U, 113489U, 113497U, +113501U, 113513U, 113537U, 113539U, 113557U, 113567U, 113591U, 113621U, 113623U, 113647U, +113657U, 113683U, 113717U, 113719U, 113723U, 113731U, 113749U, 113759U, 113761U, 113777U, +113779U, 113783U, 113797U, 113809U, 113819U, 113837U, 113843U, 113891U, 113899U, 113903U, +113909U, 113921U, 113933U, 113947U, 113957U, 113963U, 113969U, 113983U, 113989U, 114001U, +114013U, 114031U, 114041U, 114043U, 114067U, 114073U, 114077U, 114083U, 114089U, 114113U, +114143U, 114157U, 114161U, 114167U, 114193U, 114197U, 114199U, 114203U, 114217U, 114221U, +114229U, 114259U, 114269U, 114277U, 114281U, 114299U, 114311U, 114319U, 114329U, 114343U, +114371U, 114377U, 114407U, 114419U, 114451U, 114467U, 114473U, 114479U, 114487U, 114493U, +114547U, 114553U, 114571U, 114577U, 114593U, 114599U, 114601U, 114613U, 114617U, 114641U, +114643U, 114649U, 114659U, 114661U, 114671U, 114679U, 114689U, 114691U, 114713U, 114743U, +114749U, 114757U, 114761U, 114769U, 114773U, 114781U, 114797U, 114799U, 114809U, 114827U, +114833U, 114847U, 114859U, 114883U, 114889U, 114901U, 114913U, 114941U, 114967U, 114973U, +114997U, 115001U, 115013U, 115019U, 115021U, 115057U, 115061U, 115067U, 115079U, 115099U, +115117U, 115123U, 115127U, 115133U, 115151U, 115153U, 115163U, 115183U, 115201U, 115211U, +115223U, 115237U, 115249U, 115259U, 115279U, 115301U, 115303U, 115309U, 115319U, 115321U, +115327U, 115331U, 115337U, 115343U, 115361U, 115363U, 115399U, 115421U, 115429U, 115459U, +115469U, 115471U, 115499U, 115513U, 115523U, 115547U, 115553U, 115561U, 115571U, 115589U, +115597U, 115601U, 115603U, 115613U, 115631U, 115637U, 115657U, 115663U, 115679U, 115693U, +115727U, 115733U, 115741U, 115751U, 115757U, 115763U, 115769U, 115771U, 115777U, 115781U, +115783U, 115793U, 115807U, 115811U, 115823U, 115831U, 115837U, 115849U, 115853U, 115859U, +115861U, 115873U, 115877U, 115879U, 115883U, 115891U, 115901U, 115903U, 115931U, 115933U, +115963U, 115979U, 115981U, 115987U, 116009U, 116027U, 116041U, 116047U, 116089U, 116099U, +116101U, 116107U, 116113U, 116131U, 116141U, 116159U, 116167U, 116177U, 116189U, 116191U, +116201U, 116239U, 116243U, 116257U, 116269U, 116273U, 116279U, 116293U, 116329U, 116341U, +116351U, 116359U, 116371U, 116381U, 116387U, 116411U, 116423U, 116437U, 116443U, 116447U, +116461U, 116471U, 116483U, 116491U, 116507U, 116531U, 116533U, 116537U, 116539U, 116549U, +116579U, 116593U, 116639U, 116657U, 116663U, 116681U, 116687U, 116689U, 116707U, 116719U, +116731U, 116741U, 116747U, 116789U, 116791U, 116797U, 116803U, 116819U, 116827U, 116833U, +116849U, 116867U, 116881U, 116903U, 116911U, 116923U, 116927U, 116929U, 116933U, 116953U, +116959U, 116969U, 116981U, 116989U, 116993U, 117017U, 117023U, 117037U, 117041U, 117043U, +117053U, 117071U, 117101U, 117109U, 117119U, 117127U, 117133U, 117163U, 117167U, 117191U, +117193U, 117203U, 117209U, 117223U, 117239U, 117241U, 117251U, 117259U, 117269U, 117281U, +117307U, 117319U, 117329U, 117331U, 117353U, 117361U, 117371U, 117373U, 117389U, 117413U, +117427U, 117431U, 117437U, 117443U, 117497U, 117499U, 117503U, 117511U, 117517U, 117529U, +117539U, 117541U, 117563U, 117571U, 117577U, 117617U, 117619U, 117643U, 117659U, 117671U, +117673U, 117679U, 117701U, 117703U, 117709U, 117721U, 117727U, 117731U, 117751U, 117757U, +117763U, 117773U, 117779U, 117787U, 117797U, 117809U, 117811U, 117833U, 117839U, 117841U, +117851U, 117877U, 117881U, 117883U, 117889U, 117899U, 117911U, 117917U, 117937U, 117959U, +117973U, 117977U, 117979U, 117989U, 117991U, 118033U, 118037U, 118043U, 118051U, 118057U, +118061U, 118081U, 118093U, 118127U, 118147U, 118163U, 118169U, 118171U, 118189U, 118211U, +118213U, 118219U, 118247U, 118249U, 118253U, 118259U, 118273U, 118277U, 118297U, 118343U, +118361U, 118369U, 118373U, 118387U, 118399U, 118409U, 118411U, 118423U, 118429U, 118453U, +118457U, 118463U, 118471U, 118493U, 118529U, 118543U, 118549U, 118571U, 118583U, 118589U, +118603U, 118619U, 118621U, 118633U, 118661U, 118669U, 118673U, 118681U, 118687U, 118691U, +118709U, 118717U, 118739U, 118747U, 118751U, 118757U, 118787U, 118799U, 118801U, 118819U, +118831U, 118843U, 118861U, 118873U, 118891U, 118897U, 118901U, 118903U, 118907U, 118913U, +118927U, 118931U, 118967U, 118973U, 119027U, 119033U, 119039U, 119047U, 119057U, 119069U, +119083U, 119087U, 119089U, 119099U, 119101U, 119107U, 119129U, 119131U, 119159U, 119173U, +119179U, 119183U, 119191U, 119227U, 119233U, 119237U, 119243U, 119267U, 119291U, 119293U, +119297U, 119299U, 119311U, 119321U, 119359U, 119363U, 119389U, 119417U, 119419U, 119429U, +119447U, 119489U, 119503U, 119513U, 119533U, 119549U, 119551U, 119557U, 119563U, 119569U, +119591U, 119611U, 119617U, 119627U, 119633U, 119653U, 119657U, 119659U, 119671U, 119677U, +119687U, 119689U, 119699U, 119701U, 119723U, 119737U, 119747U, 119759U, 119771U, 119773U, +119783U, 119797U, 119809U, 119813U, 119827U, 119831U, 119839U, 119849U, 119851U, 119869U, +119881U, 119891U, 119921U, 119923U, 119929U, 119953U, 119963U, 119971U, 119981U, 119983U, +119993U, 120011U, 120017U, 120041U, 120047U, 120049U, 120067U, 120077U, 120079U, 120091U, +120097U, 120103U, 120121U, 120157U, 120163U, 120167U, 120181U, 120193U, 120199U, 120209U, +120223U, 120233U, 120247U, 120277U, 120283U, 120293U, 120299U, 120319U, 120331U, 120349U, +120371U, 120383U, 120391U, 120397U, 120401U, 120413U, 120427U, 120431U, 120473U, 120503U, +120511U, 120539U, 120551U, 120557U, 120563U, 120569U, 120577U, 120587U, 120607U, 120619U, +120623U, 120641U, 120647U, 120661U, 120671U, 120677U, 120689U, 120691U, 120709U, 120713U, +120721U, 120737U, 120739U, 120749U, 120763U, 120767U, 120779U, 120811U, 120817U, 120823U, +120829U, 120833U, 120847U, 120851U, 120863U, 120871U, 120877U, 120889U, 120899U, 120907U, +120917U, 120919U, 120929U, 120937U, 120941U, 120943U, 120947U, 120977U, 120997U, 121001U, +121007U, 121013U, 121019U, 121021U, 121039U, 121061U, 121063U, 121067U, 121081U, 121123U, +121139U, 121151U, 121157U, 121169U, 121171U, 121181U, 121189U, 121229U, 121259U, 121267U, +121271U, 121283U, 121291U, 121309U, 121313U, 121321U, 121327U, 121333U, 121343U, 121349U, +121351U, 121357U, 121367U, 121369U, 121379U, 121403U, 121421U, 121439U, 121441U, 121447U, +121453U, 121469U, 121487U, 121493U, 121501U, 121507U, 121523U, 121531U, 121547U, 121553U, +121559U, 121571U, 121577U, 121579U, 121591U, 121607U, 121609U, 121621U, 121631U, 121633U, +121637U, 121661U, 121687U, 121697U, 121711U, 121721U, 121727U, 121763U, 121787U, 121789U, +121843U, 121853U, 121867U, 121883U, 121889U, 121909U, 121921U, 121931U, 121937U, 121949U, +121951U, 121963U, 121967U, 121993U, 121997U, 122011U, 122021U, 122027U, 122029U, 122033U, +122039U, 122041U, 122051U, 122053U, 122069U, 122081U, 122099U, 122117U, 122131U, 122147U, +122149U, 122167U, 122173U, 122201U, 122203U, 122207U, 122209U, 122219U, 122231U, 122251U, +122263U, 122267U, 122273U, 122279U, 122299U, 122321U, 122323U, 122327U, 122347U, 122363U, +122387U, 122389U, 122393U, 122399U, 122401U, 122443U, 122449U, 122453U, 122471U, 122477U, +122489U, 122497U, 122501U, 122503U, 122509U, 122527U, 122533U, 122557U, 122561U, 122579U, +122597U, 122599U, 122609U, 122611U, 122651U, 122653U, 122663U, 122693U, 122701U, 122719U, +122741U, 122743U, 122753U, 122761U, 122777U, 122789U, 122819U, 122827U, 122833U, 122839U, +122849U, 122861U, 122867U, 122869U, 122887U, 122891U, 122921U, 122929U, 122939U, 122953U, +122957U, 122963U, 122971U, 123001U, 123007U, 123017U, 123031U, 123049U, 123059U, 123077U, +123083U, 123091U, 123113U, 123121U, 123127U, 123143U, 123169U, 123191U, 123203U, 123209U, +123217U, 123229U, 123239U, 123259U, 123269U, 123289U, 123307U, 123311U, 123323U, 123341U, +123373U, 123377U, 123379U, 123397U, 123401U, 123407U, 123419U, 123427U, 123433U, 123439U, +123449U, 123457U, 123479U, 123491U, 123493U, 123499U, 123503U, 123517U, 123527U, 123547U, +123551U, 123553U, 123581U, 123583U, 123593U, 123601U, 123619U, 123631U, 123637U, 123653U, +123661U, 123667U, 123677U, 123701U, 123707U, 123719U, 123727U, 123731U, 123733U, 123737U, +123757U, 123787U, 123791U, 123803U, 123817U, 123821U, 123829U, 123833U, 123853U, 123863U, +123887U, 123911U, 123923U, 123931U, 123941U, 123953U, 123973U, 123979U, 123983U, 123989U, +123997U, 124001U, 124021U, 124067U, 124087U, 124097U, 124121U, 124123U, 124133U, 124139U, +124147U, 124153U, 124171U, 124181U, 124183U, 124193U, 124199U, 124213U, 124231U, 124247U, +124249U, 124277U, 124291U, 124297U, 124301U, 124303U, 124309U, 124337U, 124339U, 124343U, +124349U, 124351U, 124363U, 124367U, 124427U, 124429U, 124433U, 124447U, 124459U, 124471U, +124477U, 124489U, 124493U, 124513U, 124529U, 124541U, 124543U, 124561U, 124567U, 124577U, +124601U, 124633U, 124643U, 124669U, 124673U, 124679U, 124693U, 124699U, 124703U, 124717U, +124721U, 124739U, 124753U, 124759U, 124769U, 124771U, 124777U, 124781U, 124783U, 124793U, +124799U, 124819U, 124823U, 124847U, 124853U, 124897U, 124907U, 124909U, 124919U, 124951U, +124979U, 124981U, 124987U, 124991U, 125003U, 125017U, 125029U, 125053U, 125063U, 125093U, +125101U, 125107U, 125113U, 125117U, 125119U, 125131U, 125141U, 125149U, 125183U, 125197U, +125201U, 125207U, 125219U, 125221U, 125231U, 125243U, 125261U, 125269U, 125287U, 125299U, +125303U, 125311U, 125329U, 125339U, 125353U, 125371U, 125383U, 125387U, 125399U, 125407U, +125423U, 125429U, 125441U, 125453U, 125471U, 125497U, 125507U, 125509U, 125527U, 125539U, +125551U, 125591U, 125597U, 125617U, 125621U, 125627U, 125639U, 125641U, 125651U, 125659U, +125669U, 125683U, 125687U, 125693U, 125707U, 125711U, 125717U, 125731U, 125737U, 125743U, +125753U, 125777U, 125789U, 125791U, 125803U, 125813U, 125821U, 125863U, 125887U, 125897U, +125899U, 125921U, 125927U, 125929U, 125933U, 125941U, 125959U, 125963U, 126001U, 126011U, +126013U, 126019U, 126023U, 126031U, 126037U, 126041U, 126047U, 126067U, 126079U, 126097U, +126107U, 126127U, 126131U, 126143U, 126151U, 126173U, 126199U, 126211U, 126223U, 126227U, +126229U, 126233U, 126241U, 126257U, 126271U, 126307U, 126311U, 126317U, 126323U, 126337U, +126341U, 126349U, 126359U, 126397U, 126421U, 126433U, 126443U, 126457U, 126461U, 126473U, +126481U, 126487U, 126491U, 126493U, 126499U, 126517U, 126541U, 126547U, 126551U, 126583U, +126601U, 126611U, 126613U, 126631U, 126641U, 126653U, 126683U, 126691U, 126703U, 126713U, +126719U, 126733U, 126739U, 126743U, 126751U, 126757U, 126761U, 126781U, 126823U, 126827U, +126839U, 126851U, 126857U, 126859U, 126913U, 126923U, 126943U, 126949U, 126961U, 126967U, +126989U, 127031U, 127033U, 127037U, 127051U, 127079U, 127081U, 127103U, 127123U, 127133U, +127139U, 127157U, 127163U, 127189U, 127207U, 127217U, 127219U, 127241U, 127247U, 127249U, +127261U, 127271U, 127277U, 127289U, 127291U, 127297U, 127301U, 127321U, 127331U, 127343U, +127363U, 127373U, 127399U, 127403U, 127423U, 127447U, 127453U, 127481U, 127487U, 127493U, +127507U, 127529U, 127541U, 127549U, 127579U, 127583U, 127591U, 127597U, 127601U, 127607U, +127609U, 127637U, 127643U, 127649U, 127657U, 127663U, 127669U, 127679U, 127681U, 127691U, +127703U, 127709U, 127711U, 127717U, 127727U, 127733U, 127739U, 127747U, 127763U, 127781U, +127807U, 127817U, 127819U, 127837U, 127843U, 127849U, 127859U, 127867U, 127873U, 127877U, +127913U, 127921U, 127931U, 127951U, 127973U, 127979U, 127997U, 128021U, 128033U, 128047U, +128053U, 128099U, 128111U, 128113U, 128119U, 128147U, 128153U, 128159U, 128173U, 128189U, +128201U, 128203U, 128213U, 128221U, 128237U, 128239U, 128257U, 128273U, 128287U, 128291U, +128311U, 128321U, 128327U, 128339U, 128341U, 128347U, 128351U, 128377U, 128389U, 128393U, +128399U, 128411U, 128413U, 128431U, 128437U, 128449U, 128461U, 128467U, 128473U, 128477U, +128483U, 128489U, 128509U, 128519U, 128521U, 128549U, 128551U, 128563U, 128591U, 128599U, +128603U, 128621U, 128629U, 128657U, 128659U, 128663U, 128669U, 128677U, 128683U, 128693U, +128717U, 128747U, 128749U, 128761U, 128767U, 128813U, 128819U, 128831U, 128833U, 128837U, +128857U, 128861U, 128873U, 128879U, 128903U, 128923U, 128939U, 128941U, 128951U, 128959U, +128969U, 128971U, 128981U, 128983U, 128987U, 128993U, 129001U, 129011U, 129023U, 129037U, +129049U, 129061U, 129083U, 129089U, 129097U, 129113U, 129119U, 129121U, 129127U, 129169U, +129187U, 129193U, 129197U, 129209U, 129221U, 129223U, 129229U, 129263U, 129277U, 129281U, +129287U, 129289U, 129293U, 129313U, 129341U, 129347U, 129361U, 129379U, 129401U, 129403U, +129419U, 129439U, 129443U, 129449U, 129457U, 129461U, 129469U, 129491U, 129497U, 129499U, +129509U, 129517U, 129527U, 129529U, 129533U, 129539U, 129553U, 129581U, 129587U, 129589U, +129593U, 129607U, 129629U, 129631U, 129641U, 129643U, 129671U, 129707U, 129719U, 129733U, +129737U, 129749U, 129757U, 129763U, 129769U, 129793U, 129803U, 129841U, 129853U, 129887U, +129893U, 129901U, 129917U, 129919U, 129937U, 129953U, 129959U, 129967U, 129971U, 130003U, +130021U, 130027U, 130043U, 130051U, 130057U, 130069U, 130073U, 130079U, 130087U, 130099U, +130121U, 130127U, 130147U, 130171U, 130183U, 130199U, 130201U, 130211U, 130223U, 130241U, +130253U, 130259U, 130261U, 130267U, 130279U, 130303U, 130307U, 130337U, 130343U, 130349U, +130363U, 130367U, 130369U, 130379U, 130399U, 130409U, 130411U, 130423U, 130439U, 130447U, +130457U, 130469U, 130477U, 130483U, 130489U, 130513U, 130517U, 130523U, 130531U, 130547U, +130553U, 130579U, 130589U, 130619U, 130621U, 130631U, 130633U, 130639U, 130643U, 130649U, +130651U, 130657U, 130681U, 130687U, 130693U, 130699U, 130729U, 130769U, 130783U, 130787U, +130807U, 130811U, 130817U, 130829U, 130841U, 130843U, 130859U, 130873U, 130927U, 130957U, +130969U, 130973U, 130981U, 130987U, 131009U, 131011U, 131023U, 131041U, 131059U, 131063U, +131071U, 131101U, 131111U, 131113U, 131129U, 131143U, 131149U, 131171U, 131203U, 131213U, +131221U, 131231U, 131249U, 131251U, 131267U, 131293U, 131297U, 131303U, 131311U, 131317U, +131321U, 131357U, 131363U, 131371U, 131381U, 131413U, 131431U, 131437U, 131441U, 131447U, +131449U, 131477U, 131479U, 131489U, 131497U, 131501U, 131507U, 131519U, 131543U, 131561U, +131581U, 131591U, 131611U, 131617U, 131627U, 131639U, 131641U, 131671U, 131687U, 131701U, +131707U, 131711U, 131713U, 131731U, 131743U, 131749U, 131759U, 131771U, 131777U, 131779U, +131783U, 131797U, 131837U, 131839U, 131849U, 131861U, 131891U, 131893U, 131899U, 131909U, +131927U, 131933U, 131939U, 131941U, 131947U, 131959U, 131969U, 132001U, 132019U, 132047U, +132049U, 132059U, 132071U, 132103U, 132109U, 132113U, 132137U, 132151U, 132157U, 132169U, +132173U, 132199U, 132229U, 132233U, 132241U, 132247U, 132257U, 132263U, 132283U, 132287U, +132299U, 132313U, 132329U, 132331U, 132347U, 132361U, 132367U, 132371U, 132383U, 132403U, +132409U, 132421U, 132437U, 132439U, 132469U, 132491U, 132499U, 132511U, 132523U, 132527U, +132529U, 132533U, 132541U, 132547U, 132589U, 132607U, 132611U, 132619U, 132623U, 132631U, +132637U, 132647U, 132661U, 132667U, 132679U, 132689U, 132697U, 132701U, 132707U, 132709U, +132721U, 132739U, 132749U, 132751U, 132757U, 132761U, 132763U, 132817U, 132833U, 132851U, +132857U, 132859U, 132863U, 132887U, 132893U, 132911U, 132929U, 132947U, 132949U, 132953U, +132961U, 132967U, 132971U, 132989U, 133013U, 133033U, 133039U, 133051U, 133069U, 133073U, +133087U, 133097U, 133103U, 133109U, 133117U, 133121U, 133153U, 133157U, 133169U, 133183U, +133187U, 133201U, 133213U, 133241U, 133253U, 133261U, 133271U, 133277U, 133279U, 133283U, +133303U, 133319U, 133321U, 133327U, 133337U, 133349U, 133351U, 133379U, 133387U, 133391U, +133403U, 133417U, 133439U, 133447U, 133451U, 133481U, 133493U, 133499U, 133519U, 133541U, +133543U, 133559U, 133571U, 133583U, 133597U, 133631U, 133633U, 133649U, 133657U, 133669U, +133673U, 133691U, 133697U, 133709U, 133711U, 133717U, 133723U, 133733U, 133769U, 133781U, +133801U, 133811U, 133813U, 133831U, 133843U, 133853U, 133873U, 133877U, 133919U, 133949U, +133963U, 133967U, 133979U, 133981U, 133993U, 133999U, 134033U, 134039U, 134047U, 134053U, +134059U, 134077U, 134081U, 134087U, 134089U, 134093U, 134129U, 134153U, 134161U, 134171U, +134177U, 134191U, 134207U, 134213U, 134219U, 134227U, 134243U, 134257U, 134263U, 134269U, +134287U, 134291U, 134293U, 134327U, 134333U, 134339U, 134341U, 134353U, 134359U, 134363U, +134369U, 134371U, 134399U, 134401U, 134417U, 134437U, 134443U, 134471U, 134489U, 134503U, +134507U, 134513U, 134581U, 134587U, 134591U, 134593U, 134597U, 134609U, 134639U, 134669U, +134677U, 134681U, 134683U, 134699U, 134707U, 134731U, 134741U, 134753U, 134777U, 134789U, +134807U, 134837U, 134839U, 134851U, 134857U, 134867U, 134873U, 134887U, 134909U, 134917U, +134921U, 134923U, 134947U, 134951U, 134989U, 134999U, 135007U, 135017U, 135019U, 135029U, +135043U, 135049U, 135059U, 135077U, 135089U, 135101U, 135119U, 135131U, 135151U, 135173U, +135181U, 135193U, 135197U, 135209U, 135211U, 135221U, 135241U, 135257U, 135271U, 135277U, +135281U, 135283U, 135301U, 135319U, 135329U, 135347U, 135349U, 135353U, 135367U, 135389U, +135391U, 135403U, 135409U, 135427U, 135431U, 135433U, 135449U, 135461U, 135463U, 135467U, +135469U, 135479U, 135497U, 135511U, 135533U, 135559U, 135571U, 135581U, 135589U, 135593U, +135599U, 135601U, 135607U, 135613U, 135617U, 135623U, 135637U, 135647U, 135649U, 135661U, +135671U, 135697U, 135701U, 135719U, 135721U, 135727U, 135731U, 135743U, 135757U, 135781U, +135787U, 135799U, 135829U, 135841U, 135851U, 135859U, 135887U, 135893U, 135899U, 135911U, +135913U, 135929U, 135937U, 135977U, 135979U, 136013U, 136027U, 136033U, 136043U, 136057U, +136067U, 136069U, 136093U, 136099U, 136111U, 136133U, 136139U, 136163U, 136177U, 136189U, +136193U, 136207U, 136217U, 136223U, 136237U, 136247U, 136261U, 136273U, 136277U, 136303U, +136309U, 136319U, 136327U, 136333U, 136337U, 136343U, 136351U, 136361U, 136373U, 136379U, +136393U, 136397U, 136399U, 136403U, 136417U, 136421U, 136429U, 136447U, 136453U, 136463U, +136471U, 136481U, 136483U, 136501U, 136511U, 136519U, 136523U, 136531U, 136537U, 136541U, +136547U, 136559U, 136573U, 136601U, 136603U, 136607U, 136621U, 136649U, 136651U, 136657U, +136691U, 136693U, 136709U, 136711U, 136727U, 136733U, 136739U, 136751U, 136753U, 136769U, +136777U, 136811U, 136813U, 136841U, 136849U, 136859U, 136861U, 136879U, 136883U, 136889U, +136897U, 136943U, 136949U, 136951U, 136963U, 136973U, 136979U, 136987U, 136991U, 136993U, +136999U, 137029U, 137077U, 137087U, 137089U, 137117U, 137119U, 137131U, 137143U, 137147U, +137153U, 137177U, 137183U, 137191U, 137197U, 137201U, 137209U, 137219U, 137239U, 137251U, +137273U, 137279U, 137303U, 137321U, 137339U, 137341U, 137353U, 137359U, 137363U, 137369U, +137383U, 137387U, 137393U, 137399U, 137413U, 137437U, 137443U, 137447U, 137453U, 137477U, +137483U, 137491U, 137507U, 137519U, 137537U, 137567U, 137573U, 137587U, 137593U, 137597U, +137623U, 137633U, 137639U, 137653U, 137659U, 137699U, 137707U, 137713U, 137723U, 137737U, +137743U, 137771U, 137777U, 137791U, 137803U, 137827U, 137831U, 137849U, 137867U, 137869U, +137873U, 137909U, 137911U, 137927U, 137933U, 137941U, 137947U, 137957U, 137983U, 137993U, +137999U, 138007U, 138041U, 138053U, 138059U, 138071U, 138077U, 138079U, 138101U, 138107U, +138113U, 138139U, 138143U, 138157U, 138163U, 138179U, 138181U, 138191U, 138197U, 138209U, +138239U, 138241U, 138247U, 138251U, 138283U, 138289U, 138311U, 138319U, 138323U, 138337U, +138349U, 138371U, 138373U, 138389U, 138401U, 138403U, 138407U, 138427U, 138433U, 138449U, +138451U, 138461U, 138469U, 138493U, 138497U, 138511U, 138517U, 138547U, 138559U, 138563U, +138569U, 138571U, 138577U, 138581U, 138587U, 138599U, 138617U, 138629U, 138637U, 138641U, +138647U, 138661U, 138679U, 138683U, 138727U, 138731U, 138739U, 138763U, 138793U, 138797U, +138799U, 138821U, 138829U, 138841U, 138863U, 138869U, 138883U, 138889U, 138893U, 138899U, +138917U, 138923U, 138937U, 138959U, 138967U, 138977U, 139021U, 139033U, 139067U, 139079U, +139091U, 139109U, 139121U, 139123U, 139133U, 139169U, 139177U, 139187U, 139199U, 139201U, +139241U, 139267U, 139273U, 139291U, 139297U, 139301U, 139303U, 139309U, 139313U, 139333U, +139339U, 139343U, 139361U, 139367U, 139369U, 139387U, 139393U, 139397U, 139409U, 139423U, +139429U, 139439U, 139457U, 139459U, 139483U, 139487U, 139493U, 139501U, 139511U, 139537U, +139547U, 139571U, 139589U, 139591U, 139597U, 139609U, 139619U, 139627U, 139661U, 139663U, +139681U, 139697U, 139703U, 139709U, 139721U, 139729U, 139739U, 139747U, 139753U, 139759U, +139787U, 139801U, 139813U, 139831U, 139837U, 139861U, 139871U, 139883U, 139891U, 139901U, +139907U, 139921U, 139939U, 139943U, 139967U, 139969U, 139981U, 139987U, 139991U, 139999U, +140009U, 140053U, 140057U, 140069U, 140071U, 140111U, 140123U, 140143U, 140159U, 140167U, +140171U, 140177U, 140191U, 140197U, 140207U, 140221U, 140227U, 140237U, 140249U, 140263U, +140269U, 140281U, 140297U, 140317U, 140321U, 140333U, 140339U, 140351U, 140363U, 140381U, +140401U, 140407U, 140411U, 140417U, 140419U, 140423U, 140443U, 140449U, 140453U, 140473U, +140477U, 140521U, 140527U, 140533U, 140549U, 140551U, 140557U, 140587U, 140593U, 140603U, +140611U, 140617U, 140627U, 140629U, 140639U, 140659U, 140663U, 140677U, 140681U, 140683U, +140689U, 140717U, 140729U, 140731U, 140741U, 140759U, 140761U, 140773U, 140779U, 140797U, +140813U, 140827U, 140831U, 140837U, 140839U, 140863U, 140867U, 140869U, 140891U, 140893U, +140897U, 140909U, 140929U, 140939U, 140977U, 140983U, 140989U, 141023U, 141041U, 141061U, +141067U, 141073U, 141079U, 141101U, 141107U, 141121U, 141131U, 141157U, 141161U, 141179U, +141181U, 141199U, 141209U, 141221U, 141223U, 141233U, 141241U, 141257U, 141263U, 141269U, +141277U, 141283U, 141301U, 141307U, 141311U, 141319U, 141353U, 141359U, 141371U, 141397U, +141403U, 141413U, 141439U, 141443U, 141461U, 141481U, 141497U, 141499U, 141509U, 141511U, +141529U, 141539U, 141551U, 141587U, 141601U, 141613U, 141619U, 141623U, 141629U, 141637U, +141649U, 141653U, 141667U, 141671U, 141677U, 141679U, 141689U, 141697U, 141707U, 141709U, +141719U, 141731U, 141761U, 141767U, 141769U, 141773U, 141793U, 141803U, 141811U, 141829U, +141833U, 141851U, 141853U, 141863U, 141871U, 141907U, 141917U, 141931U, 141937U, 141941U, +141959U, 141961U, 141971U, 141991U, 142007U, 142019U, 142031U, 142039U, 142049U, 142057U, +142061U, 142067U, 142097U, 142099U, 142111U, 142123U, 142151U, 142157U, 142159U, 142169U, +142183U, 142189U, 142193U, 142211U, 142217U, 142223U, 142231U, 142237U, 142271U, 142297U, +142319U, 142327U, 142357U, 142369U, 142381U, 142391U, 142403U, 142421U, 142427U, 142433U, +142453U, 142469U, 142501U, 142529U, 142537U, 142543U, 142547U, 142553U, 142559U, 142567U, +142573U, 142589U, 142591U, 142601U, 142607U, 142609U, 142619U, 142657U, 142673U, 142697U, +142699U, 142711U, 142733U, 142757U, 142759U, 142771U, 142787U, 142789U, 142799U, 142811U, +142837U, 142841U, 142867U, 142871U, 142873U, 142897U, 142903U, 142907U, 142939U, 142949U, +142963U, 142969U, 142973U, 142979U, 142981U, 142993U, 143053U, 143063U, 143093U, 143107U, +143111U, 143113U, 143137U, 143141U, 143159U, 143177U, 143197U, 143239U, 143243U, 143249U, +143257U, 143261U, 143263U, 143281U, 143287U, 143291U, 143329U, 143333U, 143357U, 143387U, +143401U, 143413U, 143419U, 143443U, 143461U, 143467U, 143477U, 143483U, 143489U, 143501U, +143503U, 143509U, 143513U, 143519U, 143527U, 143537U, 143551U, 143567U, 143569U, 143573U, +143593U, 143609U, 143617U, 143629U, 143651U, 143653U, 143669U, 143677U, 143687U, 143699U, +143711U, 143719U, 143729U, 143743U, 143779U, 143791U, 143797U, 143807U, 143813U, 143821U, +143827U, 143831U, 143833U, 143873U, 143879U, 143881U, 143909U, 143947U, 143953U, 143971U, +143977U, 143981U, 143999U, 144013U, 144031U, 144037U, 144061U, 144071U, 144073U, 144103U, +144139U, 144161U, 144163U, 144167U, 144169U, 144173U, 144203U, 144223U, 144241U, 144247U, +144253U, 144259U, 144271U, 144289U, 144299U, 144307U, 144311U, 144323U, 144341U, 144349U, +144379U, 144383U, 144407U, 144409U, 144413U, 144427U, 144439U, 144451U, 144461U, 144479U, +144481U, 144497U, 144511U, 144539U, 144541U, 144563U, 144569U, 144577U, 144583U, 144589U, +144593U, 144611U, 144629U, 144659U, 144667U, 144671U, 144701U, 144709U, 144719U, 144731U, +144737U, 144751U, 144757U, 144763U, 144773U, 144779U, 144791U, 144817U, 144829U, 144839U, +144847U, 144883U, 144887U, 144889U, 144899U, 144917U, 144931U, 144941U, 144961U, 144967U, +144973U, 144983U, 145007U, 145009U, 145021U, 145031U, 145037U, 145043U, 145063U, 145069U, +145091U, 145109U, 145121U, 145133U, 145139U, 145177U, 145193U, 145207U, 145213U, 145219U, +145253U, 145259U, 145267U, 145283U, 145289U, 145303U, 145307U, 145349U, 145361U, 145381U, +145391U, 145399U, 145417U, 145423U, 145433U, 145441U, 145451U, 145459U, 145463U, 145471U, +145477U, 145487U, 145501U, 145511U, 145513U, 145517U, 145531U, 145543U, 145547U, 145549U, +145577U, 145589U, 145601U, 145603U, 145633U, 145637U, 145643U, 145661U, 145679U, 145681U, +145687U, 145703U, 145709U, 145721U, 145723U, 145753U, 145757U, 145759U, 145771U, 145777U, +145799U, 145807U, 145819U, 145823U, 145829U, 145861U, 145879U, 145897U, 145903U, 145931U, +145933U, 145949U, 145963U, 145967U, 145969U, 145987U, 145991U, 146009U, 146011U, 146021U, +146023U, 146033U, 146051U, 146057U, 146059U, 146063U, 146077U, 146093U, 146099U, 146117U, +146141U, 146161U, 146173U, 146191U, 146197U, 146203U, 146213U, 146221U, 146239U, 146249U, +146273U, 146291U, 146297U, 146299U, 146309U, 146317U, 146323U, 146347U, 146359U, 146369U, +146381U, 146383U, 146389U, 146407U, 146417U, 146423U, 146437U, 146449U, 146477U, 146513U, +146519U, 146521U, 146527U, 146539U, 146543U, 146563U, 146581U, 146603U, 146609U, 146617U, +146639U, 146647U, 146669U, 146677U, 146681U, 146683U, 146701U, 146719U, 146743U, 146749U, +146767U, 146777U, 146801U, 146807U, 146819U, 146833U, 146837U, 146843U, 146849U, 146857U, +146891U, 146893U, 146917U, 146921U, 146933U, 146941U, 146953U, 146977U, 146983U, 146987U, +146989U, 147011U, 147029U, 147031U, 147047U, 147073U, 147083U, 147089U, 147097U, 147107U, +147137U, 147139U, 147151U, 147163U, 147179U, 147197U, 147209U, 147211U, 147221U, 147227U, +147229U, 147253U, 147263U, 147283U, 147289U, 147293U, 147299U, 147311U, 147319U, 147331U, +147341U, 147347U, 147353U, 147377U, 147391U, 147397U, 147401U, 147409U, 147419U, 147449U, +147451U, 147457U, 147481U, 147487U, 147503U, 147517U, 147541U, 147547U, 147551U, 147557U, +147571U, 147583U, 147607U, 147613U, 147617U, 147629U, 147647U, 147661U, 147671U, 147673U, +147689U, 147703U, 147709U, 147727U, 147739U, 147743U, 147761U, 147769U, 147773U, 147779U, +147787U, 147793U, 147799U, 147811U, 147827U, 147853U, 147859U, 147863U, 147881U, 147919U, +147937U, 147949U, 147977U, 147997U, 148013U, 148021U, 148061U, 148063U, 148073U, 148079U, +148091U, 148123U, 148139U, 148147U, 148151U, 148153U, 148157U, 148171U, 148193U, 148199U, +148201U, 148207U, 148229U, 148243U, 148249U, 148279U, 148301U, 148303U, 148331U, 148339U, +148361U, 148367U, 148381U, 148387U, 148399U, 148403U, 148411U, 148429U, 148439U, 148457U, +148469U, 148471U, 148483U, 148501U, 148513U, 148517U, 148531U, 148537U, 148549U, 148573U, +148579U, 148609U, 148627U, 148633U, 148639U, 148663U, 148667U, 148669U, 148691U, 148693U, +148711U, 148721U, 148723U, 148727U, 148747U, 148763U, 148781U, 148783U, 148793U, 148817U, +148829U, 148853U, 148859U, 148861U, 148867U, 148873U, 148891U, 148913U, 148921U, 148927U, +148931U, 148933U, 148949U, 148957U, 148961U, 148991U, 148997U, 149011U, 149021U, 149027U, +149033U, 149053U, 149057U, 149059U, 149069U, 149077U, 149087U, 149099U, 149101U, 149111U, +149113U, 149119U, 149143U, 149153U, 149159U, 149161U, 149173U, 149183U, 149197U, 149213U, +149239U, 149249U, 149251U, 149257U, 149269U, 149287U, 149297U, 149309U, 149323U, 149333U, +149341U, 149351U, 149371U, 149377U, 149381U, 149393U, 149399U, 149411U, 149417U, 149419U, +149423U, 149441U, 149459U, 149489U, 149491U, 149497U, 149503U, 149519U, 149521U, 149531U, +149533U, 149543U, 149551U, 149561U, 149563U, 149579U, 149603U, 149623U, 149627U, 149629U, +149689U, 149711U, 149713U, 149717U, 149729U, 149731U, 149749U, 149759U, 149767U, 149771U, +149791U, 149803U, 149827U, 149837U, 149839U, 149861U, 149867U, 149873U, 149893U, 149899U, +149909U, 149911U, 149921U, 149939U, 149953U, 149969U, 149971U, 149993U, 150001U, 150011U, +150041U, 150053U, 150061U, 150067U, 150077U, 150083U, 150089U, 150091U, 150097U, 150107U, +150131U, 150151U, 150169U, 150193U, 150197U, 150203U, 150209U, 150211U, 150217U, 150221U, +150223U, 150239U, 150247U, 150287U, 150299U, 150301U, 150323U, 150329U, 150343U, 150373U, +150377U, 150379U, 150383U, 150401U, 150407U, 150413U, 150427U, 150431U, 150439U, 150473U, +150497U, 150503U, 150517U, 150523U, 150533U, 150551U, 150559U, 150571U, 150583U, 150587U, +150589U, 150607U, 150611U, 150617U, 150649U, 150659U, 150697U, 150707U, 150721U, 150743U, +150767U, 150769U, 150779U, 150791U, 150797U, 150827U, 150833U, 150847U, 150869U, 150881U, +150883U, 150889U, 150893U, 150901U, 150907U, 150919U, 150929U, 150959U, 150961U, 150967U, +150979U, 150989U, 150991U, 151007U, 151009U, 151013U, 151027U, 151049U, 151051U, 151057U, +151091U, 151121U, 151141U, 151153U, 151157U, 151163U, 151169U, 151171U, 151189U, 151201U, +151213U, 151237U, 151241U, 151243U, 151247U, 151253U, 151273U, 151279U, 151289U, 151303U, +151337U, 151339U, 151343U, 151357U, 151379U, 151381U, 151391U, 151397U, 151423U, 151429U, +151433U, 151451U, 151471U, 151477U, 151483U, 151499U, 151507U, 151517U, 151523U, 151531U, +151537U, 151549U, 151553U, 151561U, 151573U, 151579U, 151597U, 151603U, 151607U, 151609U, +151631U, 151637U, 151643U, 151651U, 151667U, 151673U, 151681U, 151687U, 151693U, 151703U, +151717U, 151729U, 151733U, 151769U, 151771U, 151783U, 151787U, 151799U, 151813U, 151817U, +151841U, 151847U, 151849U, 151871U, 151883U, 151897U, 151901U, 151903U, 151909U, 151937U, +151939U, 151967U, 151969U, 152003U, 152017U, 152027U, 152029U, 152039U, 152041U, 152063U, +152077U, 152081U, 152083U, 152093U, 152111U, 152123U, 152147U, 152183U, 152189U, 152197U, +152203U, 152213U, 152219U, 152231U, 152239U, 152249U, 152267U, 152287U, 152293U, 152297U, +152311U, 152363U, 152377U, 152381U, 152389U, 152393U, 152407U, 152417U, 152419U, 152423U, +152429U, 152441U, 152443U, 152459U, 152461U, 152501U, 152519U, 152531U, 152533U, 152539U, +152563U, 152567U, 152597U, 152599U, 152617U, 152623U, 152629U, 152639U, 152641U, 152657U, +152671U, 152681U, 152717U, 152723U, 152729U, 152753U, 152767U, 152777U, 152783U, 152791U, +152809U, 152819U, 152821U, 152833U, 152837U, 152839U, 152843U, 152851U, 152857U, 152879U, +152897U, 152899U, 152909U, 152939U, 152941U, 152947U, 152953U, 152959U, 152981U, 152989U, +152993U, 153001U, 153059U, 153067U, 153071U, 153073U, 153077U, 153089U, 153107U, 153113U, +153133U, 153137U, 153151U, 153191U, 153247U, 153259U, 153269U, 153271U, 153277U, 153281U, +153287U, 153313U, 153319U, 153337U, 153343U, 153353U, 153359U, 153371U, 153379U, 153407U, +153409U, 153421U, 153427U, 153437U, 153443U, 153449U, 153457U, 153469U, 153487U, 153499U, +153509U, 153511U, 153521U, 153523U, 153529U, 153533U, 153557U, 153563U, 153589U, 153607U, +153611U, 153623U, 153641U, 153649U, 153689U, 153701U, 153719U, 153733U, 153739U, 153743U, +153749U, 153757U, 153763U, 153817U, 153841U, 153871U, 153877U, 153887U, 153889U, 153911U, +153913U, 153929U, 153941U, 153947U, 153949U, 153953U, 153991U, 153997U, 154001U, 154027U, +154043U, 154057U, 154061U, 154067U, 154073U, 154079U, 154081U, 154087U, 154097U, 154111U, +154127U, 154153U, 154157U, 154159U, 154181U, 154183U, 154211U, 154213U, 154229U, 154243U, +154247U, 154267U, 154277U, 154279U, 154291U, 154303U, 154313U, 154321U, 154333U, 154339U, +154351U, 154369U, 154373U, 154387U, 154409U, 154417U, 154423U, 154439U, 154459U, 154487U, +154493U, 154501U, 154523U, 154543U, 154571U, 154573U, 154579U, 154589U, 154591U, 154613U, +154619U, 154621U, 154643U, 154667U, 154669U, 154681U, 154691U, 154699U, 154723U, 154727U, +154733U, 154747U, 154753U, 154769U, 154787U, 154789U, 154799U, 154807U, 154823U, 154841U, +154849U, 154871U, 154873U, 154877U, 154883U, 154897U, 154927U, 154933U, 154937U, 154943U, +154981U, 154991U, 155003U, 155009U, 155017U, 155027U, 155047U, 155069U, 155081U, 155083U, +155087U, 155119U, 155137U, 155153U, 155161U, 155167U, 155171U, 155191U, 155201U, 155203U, +155209U, 155219U, 155231U, 155251U, 155269U, 155291U, 155299U, 155303U, 155317U, 155327U, +155333U, 155371U, 155377U, 155381U, 155383U, 155387U, 155399U, 155413U, 155423U, 155443U, +155453U, 155461U, 155473U, 155501U, 155509U, 155521U, 155537U, 155539U, 155557U, 155569U, +155579U, 155581U, 155593U, 155599U, 155609U, 155621U, 155627U, 155653U, 155657U, 155663U, +155671U, 155689U, 155693U, 155699U, 155707U, 155717U, 155719U, 155723U, 155731U, 155741U, +155747U, 155773U, 155777U, 155783U, 155797U, 155801U, 155809U, 155821U, 155833U, 155849U, +155851U, 155861U, 155863U, 155887U, 155891U, 155893U, 155921U, 156007U, 156011U, 156019U, +156041U, 156059U, 156061U, 156071U, 156089U, 156109U, 156119U, 156127U, 156131U, 156139U, +156151U, 156157U, 156217U, 156227U, 156229U, 156241U, 156253U, 156257U, 156259U, 156269U, +156307U, 156319U, 156329U, 156347U, 156353U, 156361U, 156371U, 156419U, 156421U, 156437U, +156467U, 156487U, 156491U, 156493U, 156511U, 156521U, 156539U, 156577U, 156589U, 156593U, +156601U, 156619U, 156623U, 156631U, 156641U, 156659U, 156671U, 156677U, 156679U, 156683U, +156691U, 156703U, 156707U, 156719U, 156727U, 156733U, 156749U, 156781U, 156797U, 156799U, +156817U, 156823U, 156833U, 156841U, 156887U, 156899U, 156901U, 156913U, 156941U, 156943U, +156967U, 156971U, 156979U, 157007U, 157013U, 157019U, 157037U, 157049U, 157051U, 157057U, +157061U, 157081U, 157103U, 157109U, 157127U, 157133U, 157141U, 157163U, 157177U, 157181U, +157189U, 157207U, 157211U, 157217U, 157219U, 157229U, 157231U, 157243U, 157247U, 157253U, +157259U, 157271U, 157273U, 157277U, 157279U, 157291U, 157303U, 157307U, 157321U, 157327U, +157349U, 157351U, 157363U, 157393U, 157411U, 157427U, 157429U, 157433U, 157457U, 157477U, +157483U, 157489U, 157513U, 157519U, 157523U, 157543U, 157559U, 157561U, 157571U, 157579U, +157627U, 157637U, 157639U, 157649U, 157667U, 157669U, 157679U, 157721U, 157733U, 157739U, +157747U, 157769U, 157771U, 157793U, 157799U, 157813U, 157823U, 157831U, 157837U, 157841U, +157867U, 157877U, 157889U, 157897U, 157901U, 157907U, 157931U, 157933U, 157951U, 157991U, +157999U, 158003U, 158009U, 158017U, 158029U, 158047U, 158071U, 158077U, 158113U, 158129U, +158141U, 158143U, 158161U, 158189U, 158201U, 158209U, 158227U, 158231U, 158233U, 158243U, +158261U, 158269U, 158293U, 158303U, 158329U, 158341U, 158351U, 158357U, 158359U, 158363U, +158371U, 158393U, 158407U, 158419U, 158429U, 158443U, 158449U, 158489U, 158507U, 158519U, +158527U, 158537U, 158551U, 158563U, 158567U, 158573U, 158581U, 158591U, 158597U, 158611U, +158617U, 158621U, 158633U, 158647U, 158657U, 158663U, 158699U, 158731U, 158747U, 158749U, +158759U, 158761U, 158771U, 158777U, 158791U, 158803U, 158843U, 158849U, 158863U, 158867U, +158881U, 158909U, 158923U, 158927U, 158941U, 158959U, 158981U, 158993U, 159013U, 159017U, +159023U, 159059U, 159073U, 159079U, 159097U, 159113U, 159119U, 159157U, 159161U, 159167U, +159169U, 159179U, 159191U, 159193U, 159199U, 159209U, 159223U, 159227U, 159233U, 159287U, +159293U, 159311U, 159319U, 159337U, 159347U, 159349U, 159361U, 159389U, 159403U, 159407U, +159421U, 159431U, 159437U, 159457U, 159463U, 159469U, 159473U, 159491U, 159499U, 159503U, +159521U, 159539U, 159541U, 159553U, 159563U, 159569U, 159571U, 159589U, 159617U, 159623U, +159629U, 159631U, 159667U, 159671U, 159673U, 159683U, 159697U, 159701U, 159707U, 159721U, +159737U, 159739U, 159763U, 159769U, 159773U, 159779U, 159787U, 159791U, 159793U, 159799U, +159811U, 159833U, 159839U, 159853U, 159857U, 159869U, 159871U, 159899U, 159911U, 159931U, +159937U, 159977U, 159979U, 160001U, 160009U, 160019U, 160031U, 160033U, 160049U, 160073U, +160079U, 160081U, 160087U, 160091U, 160093U, 160117U, 160141U, 160159U, 160163U, 160169U, +160183U, 160201U, 160207U, 160217U, 160231U, 160243U, 160253U, 160309U, 160313U, 160319U, +160343U, 160357U, 160367U, 160373U, 160387U, 160397U, 160403U, 160409U, 160423U, 160441U, +160453U, 160481U, 160483U, 160499U, 160507U, 160541U, 160553U, 160579U, 160583U, 160591U, +160603U, 160619U, 160621U, 160627U, 160637U, 160639U, 160649U, 160651U, 160663U, 160669U, +160681U, 160687U, 160697U, 160709U, 160711U, 160723U, 160739U, 160751U, 160753U, 160757U, +160781U, 160789U, 160807U, 160813U, 160817U, 160829U, 160841U, 160861U, 160877U, 160879U, +160883U, 160903U, 160907U, 160933U, 160967U, 160969U, 160981U, 160997U, 161009U, 161017U, +161033U, 161039U, 161047U, 161053U, 161059U, 161071U, 161087U, 161093U, 161123U, 161137U, +161141U, 161149U, 161159U, 161167U, 161201U, 161221U, 161233U, 161237U, 161263U, 161267U, +161281U, 161303U, 161309U, 161323U, 161333U, 161339U, 161341U, 161363U, 161377U, 161387U, +161407U, 161411U, 161453U, 161459U, 161461U, 161471U, 161503U, 161507U, 161521U, 161527U, +161531U, 161543U, 161561U, 161563U, 161569U, 161573U, 161591U, 161599U, 161611U, 161627U, +161639U, 161641U, 161659U, 161683U, 161717U, 161729U, 161731U, 161741U, 161743U, 161753U, +161761U, 161771U, 161773U, 161779U, 161783U, 161807U, 161831U, 161839U, 161869U, 161873U, +161879U, 161881U, 161911U, 161921U, 161923U, 161947U, 161957U, 161969U, 161971U, 161977U, +161983U, 161999U, 162007U, 162011U, 162017U, 162053U, 162059U, 162079U, 162091U, 162109U, +162119U, 162143U, 162209U, 162221U, 162229U, 162251U, 162257U, 162263U, 162269U, 162277U, +162287U, 162289U, 162293U, 162343U, 162359U, 162389U, 162391U, 162413U, 162419U, 162439U, +162451U, 162457U, 162473U, 162493U, 162499U, 162517U, 162523U, 162527U, 162529U, 162553U, +162557U, 162563U, 162577U, 162593U, 162601U, 162611U, 162623U, 162629U, 162641U, 162649U, +162671U, 162677U, 162683U, 162691U, 162703U, 162709U, 162713U, 162727U, 162731U, 162739U, +162749U, 162751U, 162779U, 162787U, 162791U, 162821U, 162823U, 162829U, 162839U, 162847U, +162853U, 162859U, 162881U, 162889U, 162901U, 162907U, 162917U, 162937U, 162947U, 162971U, +162973U, 162989U, 162997U, 163003U, 163019U, 163021U, 163027U, 163061U, 163063U, 163109U, +163117U, 163127U, 163129U, 163147U, 163151U, 163169U, 163171U, 163181U, 163193U, 163199U, +163211U, 163223U, 163243U, 163249U, 163259U, 163307U, 163309U, 163321U, 163327U, 163337U, +163351U, 163363U, 163367U, 163393U, 163403U, 163409U, 163411U, 163417U, 163433U, 163469U, +163477U, 163481U, 163483U, 163487U, 163517U, 163543U, 163561U, 163567U, 163573U, 163601U, +163613U, 163621U, 163627U, 163633U, 163637U, 163643U, 163661U, 163673U, 163679U, 163697U, +163729U, 163733U, 163741U, 163753U, 163771U, 163781U, 163789U, 163811U, 163819U, 163841U, +163847U, 163853U, 163859U, 163861U, 163871U, 163883U, 163901U, 163909U, 163927U, 163973U, +163979U, 163981U, 163987U, 163991U, 163993U, 163997U, 164011U, 164023U, 164039U, 164051U, +164057U, 164071U, 164089U, 164093U, 164113U, 164117U, 164147U, 164149U, 164173U, 164183U, +164191U, 164201U, 164209U, 164231U, 164233U, 164239U, 164249U, 164251U, 164267U, 164279U, +164291U, 164299U, 164309U, 164321U, 164341U, 164357U, 164363U, 164371U, 164377U, 164387U, +164413U, 164419U, 164429U, 164431U, 164443U, 164447U, 164449U, 164471U, 164477U, 164503U, +164513U, 164531U, 164569U, 164581U, 164587U, 164599U, 164617U, 164621U, 164623U, 164627U, +164653U, 164663U, 164677U, 164683U, 164701U, 164707U, 164729U, 164743U, 164767U, 164771U, +164789U, 164809U, 164821U, 164831U, 164837U, 164839U, 164881U, 164893U, 164911U, 164953U, +164963U, 164987U, 164999U, 165001U, 165037U, 165041U, 165047U, 165049U, 165059U, 165079U, +165083U, 165089U, 165103U, 165133U, 165161U, 165173U, 165181U, 165203U, 165211U, 165229U, +165233U, 165247U, 165287U, 165293U, 165311U, 165313U, 165317U, 165331U, 165343U, 165349U, +165367U, 165379U, 165383U, 165391U, 165397U, 165437U, 165443U, 165449U, 165457U, 165463U, +165469U, 165479U, 165511U, 165523U, 165527U, 165533U, 165541U, 165551U, 165553U, 165559U, +165569U, 165587U, 165589U, 165601U, 165611U, 165617U, 165653U, 165667U, 165673U, 165701U, +165703U, 165707U, 165709U, 165713U, 165719U, 165721U, 165749U, 165779U, 165799U, 165811U, +165817U, 165829U, 165833U, 165857U, 165877U, 165883U, 165887U, 165901U, 165931U, 165941U, +165947U, 165961U, 165983U, 166013U, 166021U, 166027U, 166031U, 166043U, 166063U, 166081U, +166099U, 166147U, 166151U, 166157U, 166169U, 166183U, 166189U, 166207U, 166219U, 166237U, +166247U, 166259U, 166273U, 166289U, 166297U, 166301U, 166303U, 166319U, 166349U, 166351U, +166357U, 166363U, 166393U, 166399U, 166403U, 166409U, 166417U, 166429U, 166457U, 166471U, +166487U, 166541U, 166561U, 166567U, 166571U, 166597U, 166601U, 166603U, 166609U, 166613U, +166619U, 166627U, 166631U, 166643U, 166657U, 166667U, 166669U, 166679U, 166693U, 166703U, +166723U, 166739U, 166741U, 166781U, 166783U, 166799U, 166807U, 166823U, 166841U, 166843U, +166847U, 166849U, 166853U, 166861U, 166867U, 166871U, 166909U, 166919U, 166931U, 166949U, +166967U, 166973U, 166979U, 166987U, 167009U, 167017U, 167021U, 167023U, 167033U, 167039U, +167047U, 167051U, 167071U, 167077U, 167081U, 167087U, 167099U, 167107U, 167113U, 167117U, +167119U, 167149U, 167159U, 167173U, 167177U, 167191U, 167197U, 167213U, 167221U, 167249U, +167261U, 167267U, 167269U, 167309U, 167311U, 167317U, 167329U, 167339U, 167341U, 167381U, +167393U, 167407U, 167413U, 167423U, 167429U, 167437U, 167441U, 167443U, 167449U, 167471U, +167483U, 167491U, 167521U, 167537U, 167543U, 167593U, 167597U, 167611U, 167621U, 167623U, +167627U, 167633U, 167641U, 167663U, 167677U, 167683U, 167711U, 167729U, 167747U, 167759U, +167771U, 167777U, 167779U, 167801U, 167809U, 167861U, 167863U, 167873U, 167879U, 167887U, +167891U, 167899U, 167911U, 167917U, 167953U, 167971U, 167987U, 168013U, 168023U, 168029U, +168037U, 168043U, 168067U, 168071U, 168083U, 168089U, 168109U, 168127U, 168143U, 168151U, +168193U, 168197U, 168211U, 168227U, 168247U, 168253U, 168263U, 168269U, 168277U, 168281U, +168293U, 168323U, 168331U, 168347U, 168353U, 168391U, 168409U, 168433U, 168449U, 168451U, +168457U, 168463U, 168481U, 168491U, 168499U, 168523U, 168527U, 168533U, 168541U, 168559U, +168599U, 168601U, 168617U, 168629U, 168631U, 168643U, 168673U, 168677U, 168697U, 168713U, +168719U, 168731U, 168737U, 168743U, 168761U, 168769U, 168781U, 168803U, 168851U, 168863U, +168869U, 168887U, 168893U, 168899U, 168901U, 168913U, 168937U, 168943U, 168977U, 168991U, +169003U, 169007U, 169009U, 169019U, 169049U, 169063U, 169067U, 169069U, 169079U, 169093U, +169097U, 169111U, 169129U, 169151U, 169159U, 169177U, 169181U, 169199U, 169217U, 169219U, +169241U, 169243U, 169249U, 169259U, 169283U, 169307U, 169313U, 169319U, 169321U, 169327U, +169339U, 169343U, 169361U, 169369U, 169373U, 169399U, 169409U, 169427U, 169457U, 169471U, +169483U, 169489U, 169493U, 169501U, 169523U, 169531U, 169553U, 169567U, 169583U, 169591U, +169607U, 169627U, 169633U, 169639U, 169649U, 169657U, 169661U, 169667U, 169681U, 169691U, +169693U, 169709U, 169733U, 169751U, 169753U, 169769U, 169777U, 169783U, 169789U, 169817U, +169823U, 169831U, 169837U, 169843U, 169859U, 169889U, 169891U, 169909U, 169913U, 169919U, +169933U, 169937U, 169943U, 169951U, 169957U, 169987U, 169991U, 170003U, 170021U, 170029U, +170047U, 170057U, 170063U, 170081U, 170099U, 170101U, 170111U, 170123U, 170141U, 170167U, +170179U, 170189U, 170197U, 170207U, 170213U, 170227U, 170231U, 170239U, 170243U, 170249U, +170263U, 170267U, 170279U, 170293U, 170299U, 170327U, 170341U, 170347U, 170351U, 170353U, +170363U, 170369U, 170371U, 170383U, 170389U, 170393U, 170413U, 170441U, 170447U, 170473U, +170483U, 170497U, 170503U, 170509U, 170537U, 170539U, 170551U, 170557U, 170579U, 170603U, +170609U, 170627U, 170633U, 170641U, 170647U, 170669U, 170689U, 170701U, 170707U, 170711U, +170741U, 170749U, 170759U, 170761U, 170767U, 170773U, 170777U, 170801U, 170809U, 170813U, +170827U, 170837U, 170843U, 170851U, 170857U, 170873U, 170881U, 170887U, 170899U, 170921U, +170927U, 170953U, 170957U, 170971U, 171007U, 171023U, 171029U, 171043U, 171047U, 171049U, +171053U, 171077U, 171079U, 171091U, 171103U, 171131U, 171161U, 171163U, 171167U, 171169U, +171179U, 171203U, 171233U, 171251U, 171253U, 171263U, 171271U, 171293U, 171299U, 171317U, +171329U, 171341U, 171383U, 171401U, 171403U, 171427U, 171439U, 171449U, 171467U, 171469U, +171473U, 171481U, 171491U, 171517U, 171529U, 171539U, 171541U, 171553U, 171559U, 171571U, +171583U, 171617U, 171629U, 171637U, 171641U, 171653U, 171659U, 171671U, 171673U, 171679U, +171697U, 171707U, 171713U, 171719U, 171733U, 171757U, 171761U, 171763U, 171793U, 171799U, +171803U, 171811U, 171823U, 171827U, 171851U, 171863U, 171869U, 171877U, 171881U, 171889U, +171917U, 171923U, 171929U, 171937U, 171947U, 172001U, 172009U, 172021U, 172027U, 172031U, +172049U, 172069U, 172079U, 172093U, 172097U, 172127U, 172147U, 172153U, 172157U, 172169U, +172171U, 172181U, 172199U, 172213U, 172217U, 172219U, 172223U, 172243U, 172259U, 172279U, +172283U, 172297U, 172307U, 172313U, 172321U, 172331U, 172343U, 172351U, 172357U, 172373U, +172399U, 172411U, 172421U, 172423U, 172427U, 172433U, 172439U, 172441U, 172489U, 172507U, +172517U, 172519U, 172541U, 172553U, 172561U, 172573U, 172583U, 172589U, 172597U, 172603U, +172607U, 172619U, 172633U, 172643U, 172649U, 172657U, 172663U, 172673U, 172681U, 172687U, +172709U, 172717U, 172721U, 172741U, 172751U, 172759U, 172787U, 172801U, 172807U, 172829U, +172849U, 172853U, 172859U, 172867U, 172871U, 172877U, 172883U, 172933U, 172969U, 172973U, +172981U, 172987U, 172993U, 172999U, 173021U, 173023U, 173039U, 173053U, 173059U, 173081U, +173087U, 173099U, 173137U, 173141U, 173149U, 173177U, 173183U, 173189U, 173191U, 173207U, +173209U, 173219U, 173249U, 173263U, 173267U, 173273U, 173291U, 173293U, 173297U, 173309U, +173347U, 173357U, 173359U, 173429U, 173431U, 173473U, 173483U, 173491U, 173497U, 173501U, +173531U, 173539U, 173543U, 173549U, 173561U, 173573U, 173599U, 173617U, 173629U, 173647U, +173651U, 173659U, 173669U, 173671U, 173683U, 173687U, 173699U, 173707U, 173713U, 173729U, +173741U, 173743U, 173773U, 173777U, 173779U, 173783U, 173807U, 173819U, 173827U, 173839U, +173851U, 173861U, 173867U, 173891U, 173897U, 173909U, 173917U, 173923U, 173933U, 173969U, +173977U, 173981U, 173993U, 174007U, 174017U, 174019U, 174047U, 174049U, 174061U, 174067U, +174071U, 174077U, 174079U, 174091U, 174101U, 174121U, 174137U, 174143U, 174149U, 174157U, +174169U, 174197U, 174221U, 174241U, 174257U, 174259U, 174263U, 174281U, 174289U, 174299U, +174311U, 174329U, 174331U, 174337U, 174347U, 174367U, 174389U, 174407U, 174413U, 174431U, +174443U, 174457U, 174467U, 174469U, 174481U, 174487U, 174491U, 174527U, 174533U, 174569U, +174571U, 174583U, 174599U, 174613U, 174617U, 174631U, 174637U, 174649U, 174653U, 174659U, +174673U, 174679U, 174703U, 174721U, 174737U, 174749U, 174761U, 174763U, 174767U, 174773U, +174799U, 174821U, 174829U, 174851U, 174859U, 174877U, 174893U, 174901U, 174907U, 174917U, +174929U, 174931U, 174943U, 174959U, 174989U, 174991U, 175003U, 175013U, 175039U, 175061U, +175067U, 175069U, 175079U, 175081U, 175103U, 175129U, 175141U, 175211U, 175229U, 175261U, +175267U, 175277U, 175291U, 175303U, 175309U, 175327U, 175333U, 175349U, 175361U, 175391U, +175393U, 175403U, 175411U, 175433U, 175447U, 175453U, 175463U, 175481U, 175493U, 175499U, +175519U, 175523U, 175543U, 175573U, 175601U, 175621U, 175631U, 175633U, 175649U, 175663U, +175673U, 175687U, 175691U, 175699U, 175709U, 175723U, 175727U, 175753U, 175757U, 175759U, +175781U, 175783U, 175811U, 175829U, 175837U, 175843U, 175853U, 175859U, 175873U, 175891U, +175897U, 175909U, 175919U, 175937U, 175939U, 175949U, 175961U, 175963U, 175979U, 175991U, +175993U, 176017U, 176021U, 176023U, 176041U, 176047U, 176051U, 176053U, 176063U, 176081U, +176087U, 176089U, 176123U, 176129U, 176153U, 176159U, 176161U, 176179U, 176191U, 176201U, +176207U, 176213U, 176221U, 176227U, 176237U, 176243U, 176261U, 176299U, 176303U, 176317U, +176321U, 176327U, 176329U, 176333U, 176347U, 176353U, 176357U, 176369U, 176383U, 176389U, +176401U, 176413U, 176417U, 176419U, 176431U, 176459U, 176461U, 176467U, 176489U, 176497U, +176503U, 176507U, 176509U, 176521U, 176531U, 176537U, 176549U, 176551U, 176557U, 176573U, +176591U, 176597U, 176599U, 176609U, 176611U, 176629U, 176641U, 176651U, 176677U, 176699U, +176711U, 176713U, 176741U, 176747U, 176753U, 176777U, 176779U, 176789U, 176791U, 176797U, +176807U, 176809U, 176819U, 176849U, 176857U, 176887U, 176899U, 176903U, 176921U, 176923U, +176927U, 176933U, 176951U, 176977U, 176983U, 176989U, 177007U, 177011U, 177013U, 177019U, +177043U, 177091U, 177101U, 177109U, 177113U, 177127U, 177131U, 177167U, 177173U, 177209U, +177211U, 177217U, 177223U, 177239U, 177257U, 177269U, 177283U, 177301U, 177319U, 177323U, +177337U, 177347U, 177379U, 177383U, 177409U, 177421U, 177427U, 177431U, 177433U, 177467U, +177473U, 177481U, 177487U, 177493U, 177511U, 177533U, 177539U, 177553U, 177589U, 177601U, +177623U, 177647U, 177677U, 177679U, 177691U, 177739U, 177743U, 177761U, 177763U, 177787U, +177791U, 177797U, 177811U, 177823U, 177839U, 177841U, 177883U, 177887U, 177889U, 177893U, +177907U, 177913U, 177917U, 177929U, 177943U, 177949U, 177953U, 177967U, 177979U, 178001U, +178021U, 178037U, 178039U, 178067U, 178069U, 178091U, 178093U, 178103U, 178117U, 178127U, +178141U, 178151U, 178169U, 178183U, 178187U, 178207U, 178223U, 178231U, 178247U, 178249U, +178259U, 178261U, 178289U, 178301U, 178307U, 178327U, 178333U, 178349U, 178351U, 178361U, +178393U, 178397U, 178403U, 178417U, 178439U, 178441U, 178447U, 178469U, 178481U, 178487U, +178489U, 178501U, 178513U, 178531U, 178537U, 178559U, 178561U, 178567U, 178571U, 178597U, +178601U, 178603U, 178609U, 178613U, 178621U, 178627U, 178639U, 178643U, 178681U, 178691U, +178693U, 178697U, 178753U, 178757U, 178781U, 178793U, 178799U, 178807U, 178813U, 178817U, +178819U, 178831U, 178853U, 178859U, 178873U, 178877U, 178889U, 178897U, 178903U, 178907U, +178909U, 178921U, 178931U, 178933U, 178939U, 178951U, 178973U, 178987U, 179021U, 179029U, +179033U, 179041U, 179051U, 179057U, 179083U, 179089U, 179099U, 179107U, 179111U, 179119U, +179143U, 179161U, 179167U, 179173U, 179203U, 179209U, 179213U, 179233U, 179243U, 179261U, +179269U, 179281U, 179287U, 179317U, 179321U, 179327U, 179351U, 179357U, 179369U, 179381U, +179383U, 179393U, 179407U, 179411U, 179429U, 179437U, 179441U, 179453U, 179461U, 179471U, +179479U, 179483U, 179497U, 179519U, 179527U, 179533U, 179549U, 179563U, 179573U, 179579U, +179581U, 179591U, 179593U, 179603U, 179623U, 179633U, 179651U, 179657U, 179659U, 179671U, +179687U, 179689U, 179693U, 179717U, 179719U, 179737U, 179743U, 179749U, 179779U, 179801U, +179807U, 179813U, 179819U, 179821U, 179827U, 179833U, 179849U, 179897U, 179899U, 179903U, +179909U, 179917U, 179923U, 179939U, 179947U, 179951U, 179953U, 179957U, 179969U, 179981U, +179989U, 179999U, 180001U, 180007U, 180023U, 180043U, 180053U, 180071U, 180073U, 180077U, +180097U, 180137U, 180161U, 180179U, 180181U, 180211U, 180221U, 180233U, 180239U, 180241U, +180247U, 180259U, 180263U, 180281U, 180287U, 180289U, 180307U, 180311U, 180317U, 180331U, +180337U, 180347U, 180361U, 180371U, 180379U, 180391U, 180413U, 180419U, 180437U, 180463U, +180473U, 180491U, 180497U, 180503U, +0xFFFFFFFF +}; + +static unsigned int NC_nprimes = (sizeof(NC_primes) / sizeof(unsigned int)); + +/**************************************************/ +/* Debug support */ +void +printhstring(NC_string* s) { - int i,j,index; - nchashid* keys; - if(hm == NULL) return FALSE; - if(hm->size == 0) { - keys = NULL; - } else { - keys = (nchashid*)malloc(sizeof(nchashid)*hm->size); - for(index=0,i=0;ialloc;i++) { - NClist* seq = hm->table[i]; - for(j=0;jnchars); + strcpy(ss,"NULL"); + if(s != NULL) + strncpy(ss,s->cp,sizeof(ss)-1); + ss[255] = '\0'; + if(n == 0 || n > 256) + strcpy(ss,""); + fprintf(stderr,"%lx %ld |%s|\n",(unsigned long)s,(unsigned long)n,ss); + fflush(stderr); +} + +void +printhashmap(NC_hashmap* hm) +{ + size_t i; + if(hm == NULL) {fprintf(stderr,"NULL"); fflush(stderr); return;} + fprintf(stderr,"{size=%lu count=%lu table=0x%lx}\n", + (unsigned long)hm->size,(unsigned long)hm->count,(unsigned long)((uintptr_t)hm->table)); + if(hm->size > 4000) { + fprintf(stderr,"MALFORMED\n"); + return; + } + for(i=0;isize;i++) { + NC_hentry e = hm->table[i]; + if(e.flags == ACTIVE && e.key == NULL) { + fprintf(stderr,"[%ld] flags=ACTIVE hashkey=%lu data=%p key=NULL\n", + (unsigned long)i,(unsigned long)e.hashkey,e.data); + } else if(e.flags == ACTIVE && e.key != NULL) { + char nm[64]; + int elided = 0; + size_t len = strlen(e.key); + if(len > 63) {elided = 1; len = 63;} + memcpy(nm,e.key,len); + nm[63] = '\0'; + fprintf(stderr,"[%ld] flags=ACTIVE hashkey=%lu data=%p key=0x%lx |%s|%s\n", + (unsigned long)i, (unsigned long)e.hashkey, e.data,(unsigned long)((uintptr_t)nm),e.key,(elided?"...":"")); + } else if(e.flags == DELETED) { + fprintf(stderr,"[%ld] flags=DELETED hashkey=%lu\n", + (unsigned long)i,(unsigned long)e.hashkey); + } else {/*empty*/ + fprintf(stderr,"[%ld] flags=EMPTY\n",(unsigned long)i); } } - if(keylist) {*keylist = keys;} - else {free(keys);} - - return TRUE; + fflush(stderr); } diff --git a/libdispatch/nclist.c b/libdispatch/nclist.c index 15142c446b..4890119d09 100644 --- a/libdispatch/nclist.c +++ b/libdispatch/nclist.c @@ -53,7 +53,7 @@ Free a list and its contents int nclistfreeall(NClist* l) { - unsigned long i; + size_t i; if(l == NULL) return TRUE; for(i=0;ilength;i++) { void* value = l->content[i]; @@ -63,7 +63,7 @@ nclistfreeall(NClist* l) } int -nclistsetalloc(NClist* l, unsigned long sz) +nclistsetalloc(NClist* l, size_t sz) { void** newcontent = NULL; if(l == NULL) return FALSE; @@ -80,35 +80,44 @@ nclistsetalloc(NClist* l, unsigned long sz) } int -nclistsetlength(NClist* l, unsigned long sz) +nclistsetlength(NClist* l, size_t newlen) { if(l == NULL) return FALSE; - if(sz > l->alloc && !nclistsetalloc(l,sz)) return FALSE; - l->length = sz; + if(newlen > l->alloc && !nclistsetalloc(l,newlen)) return FALSE; + if(newlen > l->length) { + /* clear any extension */ + memset(&l->content[l->length],0,(newlen - l->length)*sizeof(void*)); + } + l->length = newlen; return TRUE; } void* -nclistget(NClist* l, unsigned long index) +nclistget(NClist* l, size_t index) { if(l == NULL || l->length == 0) return NULL; if(index >= l->length) return NULL; return l->content[index]; } -/* Insert at position i of l; will overwrite previous value */ +/* Insert at position i of l; will overwrite previous value; + guarantees alloc and length +*/ int -nclistset(NClist* l, unsigned long index, void* elem) +nclistset(NClist* l, size_t index, void* elem) { if(l == NULL) return FALSE; - if(index >= l->length) return FALSE; + if(!nclistsetalloc(l,index+1)) return FALSE; + if(index >= l->length) { + if(!nclistsetlength(l,index+1)) return FALSE; + } l->content[index] = elem; return TRUE; } /* Insert at position i of l; will push up elements i..|seq|. */ int -nclistinsert(NClist* l, unsigned long index, void* elem) +nclistinsert(NClist* l, size_t index, void* elem) { long i; /* do not make unsigned */ if(l == NULL) return FALSE; @@ -146,9 +155,9 @@ nclisttop(NClist* l) } void* -nclistremove(NClist* l, unsigned long i) +nclistremove(NClist* l, size_t i) { - unsigned long len; + size_t len; void* elem; if(l == NULL || (len=l->length) == 0) return NULL; if(i >= len) return NULL; @@ -171,7 +180,7 @@ nclistdup(NClist* l) int nclistcontains(NClist* l, void* elem) { - unsigned long i; + size_t i; for(i=0;ilength) == 0) return 0; for(i=0;ilength == 0) return 1; len = l->length; diff --git a/libsrc/attr.m4 b/libsrc/attr.m4 index 73090f31bb..5f31726ea9 100644 --- a/libsrc/attr.m4 +++ b/libsrc/attr.m4 @@ -553,7 +553,15 @@ NC3_rename_att( int ncid, int varid, const char *name, const char *unewname) free_NC_string(old); return NC_NOERR; } - /* else */ + /* else not in define mode */ + + /* If new name is longer than old, then complain, + but otherwise, no change (test is same as set_NC_string)*/ + if(old->nchars < strlen(newname)) { + free(newname); + return NC_ENOTINDEFINE; + } + status = set_NC_string(old, newname); free(newname); if( status != NC_NOERR) diff --git a/libsrc/v1hpg.c b/libsrc/v1hpg.c index 4f996d63f9..6b3a1da8cf 100644 --- a/libsrc/v1hpg.c +++ b/libsrc/v1hpg.c @@ -7,11 +7,11 @@ #include #endif -#include "nc3internal.h" #include #include #include #include +#include "nc3internal.h" #include "rnd.h" #include "ncx.h" diff --git a/nc_test4/tst_atts.c b/nc_test4/tst_atts.c index e30c01556f..a3490d1b30 100644 --- a/nc_test4/tst_atts.c +++ b/nc_test4/tst_atts.c @@ -26,6 +26,7 @@ #define CONTENTS_3 "Lots 0f pe0ple!" /* same len as CONTENTS */ #define VAR_NAME "Earth" +#ifdef _MSC_VER /* otherwise defined in nc4internal/nc4file */ /** * @internal Define the names of attributes to ignore added by the * HDF5 dimension scale; these attached to variables. They cannot be @@ -66,6 +67,7 @@ const char* NC_RESERVED_SPECIAL_LIST[] = { NULL }; +#endif /*_MSC_VER*/ int main(int argc, char **argv) diff --git a/nc_test4/tst_vars2.c b/nc_test4/tst_vars2.c index b198f58e85..514e78f56f 100644 --- a/nc_test4/tst_vars2.c +++ b/nc_test4/tst_vars2.c @@ -1554,7 +1554,7 @@ main(int argc, char **argv) /* Create a netcdf-4 file. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; if (nc_def_dim(ncid, DIM10_NAME, NC_UNLIMITED, &dimid[0])) ERR; - if (nc_def_dim(ncid, DIM11_NAME, NC_UNLIMITED, &dimid[0])) ERR; + if (nc_def_dim(ncid, DIM11_NAME, NC_UNLIMITED, &dimid[1])) ERR; if (nc_def_var(ncid, VAR_NAME11, NC_BYTE, NDIM2, dimid, &varid)) ERR; if (nc_inq_var_chunking(ncid, varid, &storage_in, chunksize_in)) ERR; if (storage_in != NC_CHUNKED) ERR; diff --git a/ncgen/genlib.c b/ncgen/genlib.c index 98e845bb16..5571249761 100644 --- a/ncgen/genlib.c +++ b/ncgen/genlib.c @@ -94,10 +94,12 @@ Caller must free. void topfqn(Symbol* sym) { +#ifdef USE_NETCDF4 char* fqn; char* fqnname; char* parentfqn; Symbol* parent; +#endif if(sym->fqn != NULL) return; /* already defined */ diff --git a/ncgen/ncgen.y b/ncgen/ncgen.y index 0cfa03b9ae..bfed1192b9 100644 --- a/ncgen/ncgen.y +++ b/ncgen/ncgen.y @@ -16,6 +16,9 @@ static char SccsId[] = "$Id: ncgen.y,v 1.42 2010/05/18 21:32:46 dmh Exp $"; #include "ncoffsets.h" #include "ncgeny.h" #include "ncgen.h" +#ifdef USE_NETCDF4 +#include "ncfilter.h" +#endif /* Following are in ncdump (for now)*/ /* Need some (unused) definitions to get it to compile */ @@ -122,7 +125,9 @@ static int containsfills(Datalist* list); static void datalistextend(Datalist* dl, NCConstant* con); static void vercheck(int ncid); static long long extractint(NCConstant con); +#ifdef USE_NETCDF4 static int parsefilterflag(const char* sdata0, Specialdata* special); +#endif int yylex(void); @@ -1329,6 +1334,7 @@ makespecial(int tag, Symbol* vsym, Symbol* tsym, void* data, int isconst) special->_Storage = NC_CHUNKED; } break; case _FILTER_FLAG: +#ifdef USE_NETCDF4 /* Parse the filter spec */ if(parsefilterflag(sdata,special) == NC_NOERR) special->flags |= _FILTER_FLAG; @@ -1336,6 +1342,9 @@ makespecial(int tag, Symbol* vsym, Symbol* tsym, void* data, int isconst) efree(special->_FilterParams); derror("_Filter: unparseable filter spec: %s",sdata); } +#else + derror("%s: the filter attribute requires netcdf-4 to be enabled",specialname(tag)); +#endif break; default: PANIC1("makespecial: illegal token: %d",tag); } @@ -1446,22 +1455,23 @@ specialname(int tag) return ""; } +#ifdef USE_NETCDF4 /* Parse a filter spec string and store it in special */ static int -parsefilterflag(const char* sdata0, Specialdata* special) +parsefilterflag(const char* sdata, Specialdata* special) { int stat = NC_NOERR; - if(sdata0 == NULL || strlen(sdata0) == 0) goto fail; - sdata = strdup(sdata0); + if(sdata == NULL || strlen(sdata) == 0) return NC_EINVAL; - stat = NC_parsefilterspec(sdata0, &special->_FilterID, &special->nparams, &special->_FilterParams); + stat = NC_parsefilterspec(sdata, &special->_FilterID, &special->nparams, &special->_FilterParams); if(stat) derror("Malformed filter spec: %s",sdata); return stat; } +#endif /* Since the arguments are all simple constants, diff --git a/ncgen/ncgeny.c b/ncgen/ncgeny.c index d39ae3ddd3..1117048043 100644 --- a/ncgen/ncgeny.c +++ b/ncgen/ncgeny.c @@ -79,6 +79,7 @@ static char SccsId[] = "$Id: ncgen.y,v 1.42 2010/05/18 21:32:46 dmh Exp $"; #include "ncoffsets.h" #include "ncgeny.h" #include "ncgen.h" +#include "ncfilter.h" /* Following are in ncdump (for now)*/ /* Need some (unused) definitions to get it to compile */ @@ -185,7 +186,9 @@ static int containsfills(Datalist* list); static void datalistextend(Datalist* dl, NCConstant* con); static void vercheck(int ncid); static long long extractint(NCConstant con); +#ifdef USE_NETCDF4 static int parsefilterflag(const char* sdata0, Specialdata* special); +#endif int yylex(void); @@ -199,7 +202,7 @@ static void yyerror(fmt,va_alist) const char* fmt; va_dcl; extern int lex_init(void); -#line 203 "ncgeny.c" /* yacc.c:339 */ +#line 206 "ncgeny.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -295,7 +298,7 @@ extern int ncgdebug; union YYSTYPE { -#line 142 "ncgen.y" /* yacc.c:355 */ +#line 145 "ncgen.y" /* yacc.c:355 */ Symbol* sym; unsigned long size; /* allow for zero size to indicate e.g. UNLIMITED*/ @@ -304,7 +307,7 @@ int nctype; /* for tracking attribute list type*/ Datalist* datalist; NCConstant constant; -#line 308 "ncgeny.c" /* yacc.c:355 */ +#line 311 "ncgeny.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -321,7 +324,7 @@ int ncgparse (void); /* Copy the second part of user declarations. */ -#line 325 "ncgeny.c" /* yacc.c:358 */ +#line 328 "ncgeny.c" /* yacc.c:358 */ #ifdef short # undef short @@ -624,22 +627,22 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 224, 224, 230, 232, 239, 246, 246, 249, 258, - 248, 263, 264, 265, 269, 269, 271, 281, 281, 284, - 285, 286, 287, 290, 290, 293, 323, 325, 342, 351, - 363, 377, 410, 411, 414, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 442, 443, 444, - 447, 448, 451, 451, 453, 454, 458, 465, 475, 487, - 488, 489, 492, 493, 496, 496, 498, 520, 524, 528, - 555, 556, 559, 560, 564, 578, 582, 587, 616, 617, - 621, 622, 627, 637, 657, 668, 679, 698, 705, 705, - 708, 710, 712, 714, 716, 725, 736, 738, 740, 742, - 744, 746, 748, 750, 752, 754, 756, 761, 768, 777, - 778, 779, 782, 783, 786, 790, 791, 795, 799, 800, - 805, 806, 810, 811, 812, 813, 814, 815, 819, 823, - 827, 829, 834, 835, 836, 837, 838, 839, 840, 841, - 842, 843, 844, 845, 849, 850, 854, 856, 858, 860, - 865, 869, 870, 876 + 0, 227, 227, 233, 235, 242, 249, 249, 252, 261, + 251, 266, 267, 268, 272, 272, 274, 284, 284, 287, + 288, 289, 290, 293, 293, 296, 326, 328, 345, 354, + 366, 380, 413, 414, 417, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 445, 446, 447, + 450, 451, 454, 454, 456, 457, 461, 468, 478, 490, + 491, 492, 495, 496, 499, 499, 501, 523, 527, 531, + 558, 559, 562, 563, 567, 581, 585, 590, 619, 620, + 624, 625, 630, 640, 660, 671, 682, 701, 708, 708, + 711, 713, 715, 717, 719, 728, 739, 741, 743, 745, + 747, 749, 751, 753, 755, 757, 759, 764, 771, 780, + 781, 782, 785, 786, 789, 793, 794, 798, 802, 803, + 808, 809, 813, 814, 815, 816, 817, 818, 822, 826, + 830, 832, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 852, 853, 857, 859, 861, 863, + 868, 872, 873, 879 }; #endif @@ -1631,19 +1634,19 @@ yyparse (void) switch (yyn) { case 2: -#line 227 "ncgen.y" /* yacc.c:1646 */ +#line 230 "ncgen.y" /* yacc.c:1646 */ {if (error_count > 0) YYABORT;} -#line 1637 "ncgeny.c" /* yacc.c:1646 */ +#line 1640 "ncgeny.c" /* yacc.c:1646 */ break; case 3: -#line 230 "ncgen.y" /* yacc.c:1646 */ +#line 233 "ncgen.y" /* yacc.c:1646 */ {createrootgroup(datasetname);} -#line 1643 "ncgeny.c" /* yacc.c:1646 */ +#line 1646 "ncgeny.c" /* yacc.c:1646 */ break; case 8: -#line 249 "ncgen.y" /* yacc.c:1646 */ +#line 252 "ncgen.y" /* yacc.c:1646 */ { Symbol* id = (yyvsp[-1].sym); markcdf4("Group specification"); @@ -1651,29 +1654,29 @@ yyparse (void) yyerror("duplicate group declaration within parent group for %s", id->name); } -#line 1655 "ncgeny.c" /* yacc.c:1646 */ +#line 1658 "ncgeny.c" /* yacc.c:1646 */ break; case 9: -#line 258 "ncgen.y" /* yacc.c:1646 */ +#line 261 "ncgen.y" /* yacc.c:1646 */ {listpop(groupstack);} -#line 1661 "ncgeny.c" /* yacc.c:1646 */ +#line 1664 "ncgeny.c" /* yacc.c:1646 */ break; case 12: -#line 264 "ncgen.y" /* yacc.c:1646 */ +#line 267 "ncgen.y" /* yacc.c:1646 */ {} -#line 1667 "ncgeny.c" /* yacc.c:1646 */ +#line 1670 "ncgeny.c" /* yacc.c:1646 */ break; case 13: -#line 266 "ncgen.y" /* yacc.c:1646 */ +#line 269 "ncgen.y" /* yacc.c:1646 */ {markcdf4("Type specification");} -#line 1673 "ncgeny.c" /* yacc.c:1646 */ +#line 1676 "ncgeny.c" /* yacc.c:1646 */ break; case 16: -#line 272 "ncgen.y" /* yacc.c:1646 */ +#line 275 "ncgen.y" /* yacc.c:1646 */ { /* Use when defining a type */ (yyvsp[0].sym)->objectclass = NC_TYPE; if(dupobjectcheck(NC_TYPE,(yyvsp[0].sym))) @@ -1681,23 +1684,23 @@ yyparse (void) (yyvsp[0].sym)->name); listpush(typdefs,(void*)(yyvsp[0].sym)); } -#line 1685 "ncgeny.c" /* yacc.c:1646 */ +#line 1688 "ncgeny.c" /* yacc.c:1646 */ break; case 17: -#line 281 "ncgen.y" /* yacc.c:1646 */ +#line 284 "ncgen.y" /* yacc.c:1646 */ {} -#line 1691 "ncgeny.c" /* yacc.c:1646 */ +#line 1694 "ncgeny.c" /* yacc.c:1646 */ break; case 18: -#line 281 "ncgen.y" /* yacc.c:1646 */ +#line 284 "ncgen.y" /* yacc.c:1646 */ {} -#line 1697 "ncgeny.c" /* yacc.c:1646 */ +#line 1700 "ncgeny.c" /* yacc.c:1646 */ break; case 25: -#line 295 "ncgen.y" /* yacc.c:1646 */ +#line 298 "ncgen.y" /* yacc.c:1646 */ { int i; addtogroup((yyvsp[-3].sym)); /* sets prefix*/ @@ -1724,17 +1727,17 @@ yyparse (void) } listsetlength(stack,stackbase);/* remove stack nodes*/ } -#line 1728 "ncgeny.c" /* yacc.c:1646 */ +#line 1731 "ncgeny.c" /* yacc.c:1646 */ break; case 26: -#line 324 "ncgen.y" /* yacc.c:1646 */ +#line 327 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=listlength(stack); listpush(stack,(void*)(yyvsp[0].sym));} -#line 1734 "ncgeny.c" /* yacc.c:1646 */ +#line 1737 "ncgeny.c" /* yacc.c:1646 */ break; case 27: -#line 326 "ncgen.y" /* yacc.c:1646 */ +#line 329 "ncgen.y" /* yacc.c:1646 */ { int i; (yyval.mark)=(yyvsp[-2].mark); @@ -1749,22 +1752,22 @@ yyparse (void) } listpush(stack,(void*)(yyvsp[0].sym)); } -#line 1753 "ncgeny.c" /* yacc.c:1646 */ +#line 1756 "ncgeny.c" /* yacc.c:1646 */ break; case 28: -#line 343 "ncgen.y" /* yacc.c:1646 */ +#line 346 "ncgen.y" /* yacc.c:1646 */ { (yyvsp[-2].sym)->objectclass=NC_TYPE; (yyvsp[-2].sym)->subclass=NC_ECONST; (yyvsp[-2].sym)->typ.econst=(yyvsp[0].constant); (yyval.sym)=(yyvsp[-2].sym); } -#line 1764 "ncgeny.c" /* yacc.c:1646 */ +#line 1767 "ncgeny.c" /* yacc.c:1646 */ break; case 29: -#line 352 "ncgen.y" /* yacc.c:1646 */ +#line 355 "ncgen.y" /* yacc.c:1646 */ { vercheck(NC_OPAQUE); addtogroup((yyvsp[0].sym)); /*sets prefix*/ @@ -1774,11 +1777,11 @@ yyparse (void) (yyvsp[0].sym)->typ.size=int32_val; (yyvsp[0].sym)->typ.alignment=nctypealignment(NC_OPAQUE); } -#line 1778 "ncgeny.c" /* yacc.c:1646 */ +#line 1781 "ncgeny.c" /* yacc.c:1646 */ break; case 30: -#line 364 "ncgen.y" /* yacc.c:1646 */ +#line 367 "ncgen.y" /* yacc.c:1646 */ { Symbol* basetype = (yyvsp[-4].sym); vercheck(NC_VLEN); @@ -1790,11 +1793,11 @@ yyparse (void) (yyvsp[0].sym)->typ.size=VLENSIZE; (yyvsp[0].sym)->typ.alignment=nctypealignment(NC_VLEN); } -#line 1794 "ncgeny.c" /* yacc.c:1646 */ +#line 1797 "ncgeny.c" /* yacc.c:1646 */ break; case 31: -#line 378 "ncgen.y" /* yacc.c:1646 */ +#line 381 "ncgen.y" /* yacc.c:1646 */ { int i,j; vercheck(NC_COMPOUND); @@ -1824,23 +1827,23 @@ yyparse (void) } listsetlength(stack,stackbase);/* remove stack nodes*/ } -#line 1828 "ncgeny.c" /* yacc.c:1646 */ +#line 1831 "ncgeny.c" /* yacc.c:1646 */ break; case 32: -#line 410 "ncgen.y" /* yacc.c:1646 */ +#line 413 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=(yyvsp[-1].mark);} -#line 1834 "ncgeny.c" /* yacc.c:1646 */ +#line 1837 "ncgeny.c" /* yacc.c:1646 */ break; case 33: -#line 411 "ncgen.y" /* yacc.c:1646 */ +#line 414 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=(yyvsp[-2].mark);} -#line 1840 "ncgeny.c" /* yacc.c:1646 */ +#line 1843 "ncgeny.c" /* yacc.c:1646 */ break; case 34: -#line 415 "ncgen.y" /* yacc.c:1646 */ +#line 418 "ncgen.y" /* yacc.c:1646 */ { int i; (yyval.mark)=(yyvsp[0].mark); @@ -1852,118 +1855,118 @@ yyparse (void) f->typ.basetype = (yyvsp[-1].sym); } } -#line 1856 "ncgeny.c" /* yacc.c:1646 */ +#line 1859 "ncgeny.c" /* yacc.c:1646 */ break; case 35: -#line 428 "ncgen.y" /* yacc.c:1646 */ +#line 431 "ncgen.y" /* yacc.c:1646 */ { (yyval.sym) = primsymbols[NC_CHAR]; } -#line 1862 "ncgeny.c" /* yacc.c:1646 */ +#line 1865 "ncgeny.c" /* yacc.c:1646 */ break; case 36: -#line 429 "ncgen.y" /* yacc.c:1646 */ +#line 432 "ncgen.y" /* yacc.c:1646 */ { (yyval.sym) = primsymbols[NC_BYTE]; } -#line 1868 "ncgeny.c" /* yacc.c:1646 */ +#line 1871 "ncgeny.c" /* yacc.c:1646 */ break; case 37: -#line 430 "ncgen.y" /* yacc.c:1646 */ +#line 433 "ncgen.y" /* yacc.c:1646 */ { (yyval.sym) = primsymbols[NC_SHORT]; } -#line 1874 "ncgeny.c" /* yacc.c:1646 */ +#line 1877 "ncgeny.c" /* yacc.c:1646 */ break; case 38: -#line 431 "ncgen.y" /* yacc.c:1646 */ +#line 434 "ncgen.y" /* yacc.c:1646 */ { (yyval.sym) = primsymbols[NC_INT]; } -#line 1880 "ncgeny.c" /* yacc.c:1646 */ +#line 1883 "ncgeny.c" /* yacc.c:1646 */ break; case 39: -#line 432 "ncgen.y" /* yacc.c:1646 */ +#line 435 "ncgen.y" /* yacc.c:1646 */ { (yyval.sym) = primsymbols[NC_FLOAT]; } -#line 1886 "ncgeny.c" /* yacc.c:1646 */ +#line 1889 "ncgeny.c" /* yacc.c:1646 */ break; case 40: -#line 433 "ncgen.y" /* yacc.c:1646 */ +#line 436 "ncgen.y" /* yacc.c:1646 */ { (yyval.sym) = primsymbols[NC_DOUBLE]; } -#line 1892 "ncgeny.c" /* yacc.c:1646 */ +#line 1895 "ncgeny.c" /* yacc.c:1646 */ break; case 41: -#line 434 "ncgen.y" /* yacc.c:1646 */ +#line 437 "ncgen.y" /* yacc.c:1646 */ { vercheck(NC_UBYTE); (yyval.sym) = primsymbols[NC_UBYTE]; } -#line 1898 "ncgeny.c" /* yacc.c:1646 */ +#line 1901 "ncgeny.c" /* yacc.c:1646 */ break; case 42: -#line 435 "ncgen.y" /* yacc.c:1646 */ +#line 438 "ncgen.y" /* yacc.c:1646 */ { vercheck(NC_USHORT); (yyval.sym) = primsymbols[NC_USHORT]; } -#line 1904 "ncgeny.c" /* yacc.c:1646 */ +#line 1907 "ncgeny.c" /* yacc.c:1646 */ break; case 43: -#line 436 "ncgen.y" /* yacc.c:1646 */ +#line 439 "ncgen.y" /* yacc.c:1646 */ { vercheck(NC_UINT); (yyval.sym) = primsymbols[NC_UINT]; } -#line 1910 "ncgeny.c" /* yacc.c:1646 */ +#line 1913 "ncgeny.c" /* yacc.c:1646 */ break; case 44: -#line 437 "ncgen.y" /* yacc.c:1646 */ +#line 440 "ncgen.y" /* yacc.c:1646 */ { vercheck(NC_INT64); (yyval.sym) = primsymbols[NC_INT64]; } -#line 1916 "ncgeny.c" /* yacc.c:1646 */ +#line 1919 "ncgeny.c" /* yacc.c:1646 */ break; case 45: -#line 438 "ncgen.y" /* yacc.c:1646 */ +#line 441 "ncgen.y" /* yacc.c:1646 */ { vercheck(NC_UINT64); (yyval.sym) = primsymbols[NC_UINT64]; } -#line 1922 "ncgeny.c" /* yacc.c:1646 */ +#line 1925 "ncgeny.c" /* yacc.c:1646 */ break; case 46: -#line 439 "ncgen.y" /* yacc.c:1646 */ +#line 442 "ncgen.y" /* yacc.c:1646 */ { vercheck(NC_STRING); (yyval.sym) = primsymbols[NC_STRING]; } -#line 1928 "ncgeny.c" /* yacc.c:1646 */ +#line 1931 "ncgeny.c" /* yacc.c:1646 */ break; case 48: -#line 443 "ncgen.y" /* yacc.c:1646 */ +#line 446 "ncgen.y" /* yacc.c:1646 */ {} -#line 1934 "ncgeny.c" /* yacc.c:1646 */ +#line 1937 "ncgeny.c" /* yacc.c:1646 */ break; case 49: -#line 444 "ncgen.y" /* yacc.c:1646 */ +#line 447 "ncgen.y" /* yacc.c:1646 */ {} -#line 1940 "ncgeny.c" /* yacc.c:1646 */ +#line 1943 "ncgeny.c" /* yacc.c:1646 */ break; case 52: -#line 451 "ncgen.y" /* yacc.c:1646 */ +#line 454 "ncgen.y" /* yacc.c:1646 */ {} -#line 1946 "ncgeny.c" /* yacc.c:1646 */ +#line 1949 "ncgeny.c" /* yacc.c:1646 */ break; case 53: -#line 451 "ncgen.y" /* yacc.c:1646 */ +#line 454 "ncgen.y" /* yacc.c:1646 */ {} -#line 1952 "ncgeny.c" /* yacc.c:1646 */ +#line 1955 "ncgeny.c" /* yacc.c:1646 */ break; case 56: -#line 459 "ncgen.y" /* yacc.c:1646 */ +#line 462 "ncgen.y" /* yacc.c:1646 */ { (yyvsp[-2].sym)->dim.declsize = (size_t)extractint((yyvsp[0].constant)); #ifdef GENDEBUG1 fprintf(stderr,"dimension: %s = %llu\n",(yyvsp[-2].sym)->name,(unsigned long long)(yyvsp[-2].sym)->dim.declsize); #endif } -#line 1963 "ncgeny.c" /* yacc.c:1646 */ +#line 1966 "ncgeny.c" /* yacc.c:1646 */ break; case 57: -#line 466 "ncgen.y" /* yacc.c:1646 */ +#line 469 "ncgen.y" /* yacc.c:1646 */ { (yyvsp[-2].sym)->dim.declsize = NC_UNLIMITED; (yyvsp[-2].sym)->dim.isunlimited = 1; @@ -1971,11 +1974,11 @@ fprintf(stderr,"dimension: %s = %llu\n",(yyvsp[-2].sym)->name,(unsigned long lon fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); #endif } -#line 1975 "ncgeny.c" /* yacc.c:1646 */ +#line 1978 "ncgeny.c" /* yacc.c:1646 */ break; case 58: -#line 476 "ncgen.y" /* yacc.c:1646 */ +#line 479 "ncgen.y" /* yacc.c:1646 */ { (yyvsp[0].sym)->objectclass=NC_DIM; if(dupobjectcheck(NC_DIM,(yyvsp[0].sym))) @@ -1985,35 +1988,35 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); (yyval.sym)=(yyvsp[0].sym); listpush(dimdefs,(void*)(yyvsp[0].sym)); } -#line 1989 "ncgeny.c" /* yacc.c:1646 */ +#line 1992 "ncgeny.c" /* yacc.c:1646 */ break; case 60: -#line 488 "ncgen.y" /* yacc.c:1646 */ +#line 491 "ncgen.y" /* yacc.c:1646 */ {} -#line 1995 "ncgeny.c" /* yacc.c:1646 */ +#line 1998 "ncgeny.c" /* yacc.c:1646 */ break; case 61: -#line 489 "ncgen.y" /* yacc.c:1646 */ +#line 492 "ncgen.y" /* yacc.c:1646 */ {} -#line 2001 "ncgeny.c" /* yacc.c:1646 */ +#line 2004 "ncgeny.c" /* yacc.c:1646 */ break; case 64: -#line 496 "ncgen.y" /* yacc.c:1646 */ +#line 499 "ncgen.y" /* yacc.c:1646 */ {} -#line 2007 "ncgeny.c" /* yacc.c:1646 */ +#line 2010 "ncgeny.c" /* yacc.c:1646 */ break; case 65: -#line 496 "ncgen.y" /* yacc.c:1646 */ +#line 499 "ncgen.y" /* yacc.c:1646 */ {} -#line 2013 "ncgeny.c" /* yacc.c:1646 */ +#line 2016 "ncgeny.c" /* yacc.c:1646 */ break; case 66: -#line 499 "ncgen.y" /* yacc.c:1646 */ +#line 502 "ncgen.y" /* yacc.c:1646 */ { int i; stackbase=(yyvsp[0].mark); @@ -2033,25 +2036,25 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); } listsetlength(stack,stackbase);/* remove stack nodes*/ } -#line 2037 "ncgeny.c" /* yacc.c:1646 */ +#line 2040 "ncgeny.c" /* yacc.c:1646 */ break; case 67: -#line 521 "ncgen.y" /* yacc.c:1646 */ +#line 524 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=listlength(stack); listpush(stack,(void*)(yyvsp[0].sym)); } -#line 2045 "ncgeny.c" /* yacc.c:1646 */ +#line 2048 "ncgeny.c" /* yacc.c:1646 */ break; case 68: -#line 525 "ncgen.y" /* yacc.c:1646 */ +#line 528 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=(yyvsp[-2].mark); listpush(stack,(void*)(yyvsp[0].sym));} -#line 2051 "ncgeny.c" /* yacc.c:1646 */ +#line 2054 "ncgeny.c" /* yacc.c:1646 */ break; case 69: -#line 529 "ncgen.y" /* yacc.c:1646 */ +#line 532 "ncgen.y" /* yacc.c:1646 */ { int i; Dimset dimset; @@ -2076,35 +2079,35 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); (yyvsp[-1].sym)->objectclass=NC_VAR; listsetlength(stack,stackbase);/* remove stack nodes*/ } -#line 2080 "ncgeny.c" /* yacc.c:1646 */ +#line 2083 "ncgeny.c" /* yacc.c:1646 */ break; case 70: -#line 555 "ncgen.y" /* yacc.c:1646 */ +#line 558 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=listlength(stack);} -#line 2086 "ncgeny.c" /* yacc.c:1646 */ +#line 2089 "ncgeny.c" /* yacc.c:1646 */ break; case 71: -#line 556 "ncgen.y" /* yacc.c:1646 */ +#line 559 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=(yyvsp[-1].mark);} -#line 2092 "ncgeny.c" /* yacc.c:1646 */ +#line 2095 "ncgeny.c" /* yacc.c:1646 */ break; case 72: -#line 559 "ncgen.y" /* yacc.c:1646 */ +#line 562 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=listlength(stack); listpush(stack,(void*)(yyvsp[0].sym));} -#line 2098 "ncgeny.c" /* yacc.c:1646 */ +#line 2101 "ncgeny.c" /* yacc.c:1646 */ break; case 73: -#line 561 "ncgen.y" /* yacc.c:1646 */ +#line 564 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=(yyvsp[-2].mark); listpush(stack,(void*)(yyvsp[0].sym));} -#line 2104 "ncgeny.c" /* yacc.c:1646 */ +#line 2107 "ncgeny.c" /* yacc.c:1646 */ break; case 74: -#line 565 "ncgen.y" /* yacc.c:1646 */ +#line 568 "ncgen.y" /* yacc.c:1646 */ {Symbol* dimsym = (yyvsp[0].sym); dimsym->objectclass = NC_DIM; /* Find the actual dimension*/ @@ -2115,25 +2118,25 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); } (yyval.sym)=dimsym; } -#line 2119 "ncgeny.c" /* yacc.c:1646 */ +#line 2122 "ncgeny.c" /* yacc.c:1646 */ break; case 75: -#line 579 "ncgen.y" /* yacc.c:1646 */ +#line 582 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=listlength(stack); listpush(stack,(void*)(yyvsp[0].sym)); } -#line 2127 "ncgeny.c" /* yacc.c:1646 */ +#line 2130 "ncgeny.c" /* yacc.c:1646 */ break; case 76: -#line 583 "ncgen.y" /* yacc.c:1646 */ +#line 586 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=(yyvsp[-2].mark); listpush(stack,(void*)(yyvsp[0].sym));} -#line 2133 "ncgeny.c" /* yacc.c:1646 */ +#line 2136 "ncgeny.c" /* yacc.c:1646 */ break; case 77: -#line 588 "ncgen.y" /* yacc.c:1646 */ +#line 591 "ncgen.y" /* yacc.c:1646 */ { int i; Dimset dimset; @@ -2160,35 +2163,35 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); listsetlength(stack,stackbase);/* remove stack nodes*/ (yyval.sym) = (yyvsp[-1].sym); } -#line 2164 "ncgeny.c" /* yacc.c:1646 */ +#line 2167 "ncgeny.c" /* yacc.c:1646 */ break; case 78: -#line 616 "ncgen.y" /* yacc.c:1646 */ +#line 619 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=listlength(stack);} -#line 2170 "ncgeny.c" /* yacc.c:1646 */ +#line 2173 "ncgeny.c" /* yacc.c:1646 */ break; case 79: -#line 617 "ncgen.y" /* yacc.c:1646 */ +#line 620 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=(yyvsp[-1].mark);} -#line 2176 "ncgeny.c" /* yacc.c:1646 */ +#line 2179 "ncgeny.c" /* yacc.c:1646 */ break; case 80: -#line 621 "ncgen.y" /* yacc.c:1646 */ +#line 624 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=listlength(stack); listpush(stack,(void*)(yyvsp[0].sym));} -#line 2182 "ncgeny.c" /* yacc.c:1646 */ +#line 2185 "ncgeny.c" /* yacc.c:1646 */ break; case 81: -#line 623 "ncgen.y" /* yacc.c:1646 */ +#line 626 "ncgen.y" /* yacc.c:1646 */ {(yyval.mark)=(yyvsp[-2].mark); listpush(stack,(void*)(yyvsp[0].sym));} -#line 2188 "ncgeny.c" /* yacc.c:1646 */ +#line 2191 "ncgeny.c" /* yacc.c:1646 */ break; case 82: -#line 628 "ncgen.y" /* yacc.c:1646 */ +#line 631 "ncgen.y" /* yacc.c:1646 */ { /* Anonymous integer dimension. Can only occur in type definitions*/ char anon[32]; @@ -2198,11 +2201,11 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); (yyval.sym)->dim.isconstant = 1; (yyval.sym)->dim.declsize = uint32_val; } -#line 2202 "ncgeny.c" /* yacc.c:1646 */ +#line 2205 "ncgeny.c" /* yacc.c:1646 */ break; case 83: -#line 638 "ncgen.y" /* yacc.c:1646 */ +#line 641 "ncgen.y" /* yacc.c:1646 */ { /* Anonymous integer dimension. Can only occur in type definitions*/ char anon[32]; @@ -2216,11 +2219,11 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); (yyval.sym)->dim.isconstant = 1; (yyval.sym)->dim.declsize = int32_val; } -#line 2220 "ncgeny.c" /* yacc.c:1646 */ +#line 2223 "ncgeny.c" /* yacc.c:1646 */ break; case 84: -#line 658 "ncgen.y" /* yacc.c:1646 */ +#line 661 "ncgen.y" /* yacc.c:1646 */ {Symbol* vsym = (yyvsp[0].sym); if(vsym->objectclass != NC_VAR) { derror("Undefined or forward referenced variable: %s",vsym->name); @@ -2228,11 +2231,11 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); } (yyval.sym)=vsym; } -#line 2232 "ncgeny.c" /* yacc.c:1646 */ +#line 2235 "ncgeny.c" /* yacc.c:1646 */ break; case 85: -#line 669 "ncgen.y" /* yacc.c:1646 */ +#line 672 "ncgen.y" /* yacc.c:1646 */ {Symbol* tsym = (yyvsp[0].sym); if(tsym->objectclass != NC_TYPE) { derror("Undefined or forward referenced type: %s",tsym->name); @@ -2240,11 +2243,11 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); } (yyval.sym)=tsym; } -#line 2244 "ncgeny.c" /* yacc.c:1646 */ +#line 2247 "ncgeny.c" /* yacc.c:1646 */ break; case 86: -#line 680 "ncgen.y" /* yacc.c:1646 */ +#line 683 "ncgen.y" /* yacc.c:1646 */ {Symbol* tvsym = (yyvsp[0].sym); Symbol* sym; /* disambiguate*/ tvsym->objectclass = NC_VAR; @@ -2263,53 +2266,53 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); } (yyval.sym)=tvsym; } -#line 2267 "ncgeny.c" /* yacc.c:1646 */ +#line 2270 "ncgeny.c" /* yacc.c:1646 */ break; case 87: -#line 698 "ncgen.y" /* yacc.c:1646 */ +#line 701 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym)=(yyvsp[0].sym);} -#line 2273 "ncgeny.c" /* yacc.c:1646 */ +#line 2276 "ncgeny.c" /* yacc.c:1646 */ break; case 88: -#line 705 "ncgen.y" /* yacc.c:1646 */ +#line 708 "ncgen.y" /* yacc.c:1646 */ {} -#line 2279 "ncgeny.c" /* yacc.c:1646 */ +#line 2282 "ncgeny.c" /* yacc.c:1646 */ break; case 89: -#line 705 "ncgen.y" /* yacc.c:1646 */ +#line 708 "ncgen.y" /* yacc.c:1646 */ {} -#line 2285 "ncgeny.c" /* yacc.c:1646 */ +#line 2288 "ncgeny.c" /* yacc.c:1646 */ break; case 90: -#line 709 "ncgen.y" /* yacc.c:1646 */ +#line 712 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_NCPROPS_FLAG,NULL,NULL,(void*)&(yyvsp[0].constant),ATTRGLOBAL);} -#line 2291 "ncgeny.c" /* yacc.c:1646 */ +#line 2294 "ncgeny.c" /* yacc.c:1646 */ break; case 91: -#line 711 "ncgen.y" /* yacc.c:1646 */ +#line 714 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_ISNETCDF4_FLAG,NULL,NULL,(void*)&(yyvsp[0].constant),ATTRGLOBAL);} -#line 2297 "ncgeny.c" /* yacc.c:1646 */ +#line 2300 "ncgeny.c" /* yacc.c:1646 */ break; case 92: -#line 713 "ncgen.y" /* yacc.c:1646 */ +#line 716 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_SUPERBLOCK_FLAG,NULL,NULL,(void*)&(yyvsp[0].constant),ATTRGLOBAL);} -#line 2303 "ncgeny.c" /* yacc.c:1646 */ +#line 2306 "ncgeny.c" /* yacc.c:1646 */ break; case 93: -#line 715 "ncgen.y" /* yacc.c:1646 */ +#line 718 "ncgen.y" /* yacc.c:1646 */ { (yyval.sym)=makeattribute((yyvsp[-2].sym),NULL,NULL,(yyvsp[0].datalist),ATTRGLOBAL);} -#line 2309 "ncgeny.c" /* yacc.c:1646 */ +#line 2312 "ncgeny.c" /* yacc.c:1646 */ break; case 94: -#line 717 "ncgen.y" /* yacc.c:1646 */ +#line 720 "ncgen.y" /* yacc.c:1646 */ {Symbol* tsym = (yyvsp[-5].sym); Symbol* vsym = (yyvsp[-4].sym); Symbol* asym = (yyvsp[-2].sym); if(vsym->objectclass == NC_VAR) { (yyval.sym)=makeattribute(asym,vsym,tsym,(yyvsp[0].datalist),ATTRVAR); @@ -2318,11 +2321,11 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); YYABORT; } } -#line 2322 "ncgeny.c" /* yacc.c:1646 */ +#line 2325 "ncgeny.c" /* yacc.c:1646 */ break; case 95: -#line 726 "ncgen.y" /* yacc.c:1646 */ +#line 729 "ncgen.y" /* yacc.c:1646 */ {Symbol* sym = (yyvsp[-4].sym); Symbol* asym = (yyvsp[-2].sym); if(sym->objectclass == NC_VAR) { (yyval.sym)=makeattribute(asym,sym,NULL,(yyvsp[0].datalist),ATTRVAR); @@ -2333,345 +2336,345 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); YYABORT; } } -#line 2337 "ncgeny.c" /* yacc.c:1646 */ +#line 2340 "ncgeny.c" /* yacc.c:1646 */ break; case 96: -#line 737 "ncgen.y" /* yacc.c:1646 */ +#line 740 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_FILLVALUE_FLAG,(yyvsp[-4].sym),NULL,(void*)(yyvsp[0].datalist),0);} -#line 2343 "ncgeny.c" /* yacc.c:1646 */ +#line 2346 "ncgeny.c" /* yacc.c:1646 */ break; case 97: -#line 739 "ncgen.y" /* yacc.c:1646 */ +#line 742 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_FILLVALUE_FLAG,(yyvsp[-4].sym),(yyvsp[-5].sym),(void*)(yyvsp[0].datalist),0);} -#line 2349 "ncgeny.c" /* yacc.c:1646 */ +#line 2352 "ncgeny.c" /* yacc.c:1646 */ break; case 98: -#line 741 "ncgen.y" /* yacc.c:1646 */ +#line 744 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_STORAGE_FLAG,(yyvsp[-4].sym),NULL,(void*)&(yyvsp[0].constant),1);} -#line 2355 "ncgeny.c" /* yacc.c:1646 */ +#line 2358 "ncgeny.c" /* yacc.c:1646 */ break; case 99: -#line 743 "ncgen.y" /* yacc.c:1646 */ +#line 746 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_CHUNKSIZES_FLAG,(yyvsp[-4].sym),NULL,(void*)(yyvsp[0].datalist),0);} -#line 2361 "ncgeny.c" /* yacc.c:1646 */ +#line 2364 "ncgeny.c" /* yacc.c:1646 */ break; case 100: -#line 745 "ncgen.y" /* yacc.c:1646 */ +#line 748 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_FLETCHER32_FLAG,(yyvsp[-4].sym),NULL,(void*)&(yyvsp[0].constant),1);} -#line 2367 "ncgeny.c" /* yacc.c:1646 */ +#line 2370 "ncgeny.c" /* yacc.c:1646 */ break; case 101: -#line 747 "ncgen.y" /* yacc.c:1646 */ +#line 750 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_DEFLATE_FLAG,(yyvsp[-4].sym),NULL,(void*)&(yyvsp[0].constant),1);} -#line 2373 "ncgeny.c" /* yacc.c:1646 */ +#line 2376 "ncgeny.c" /* yacc.c:1646 */ break; case 102: -#line 749 "ncgen.y" /* yacc.c:1646 */ +#line 752 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_SHUFFLE_FLAG,(yyvsp[-4].sym),NULL,(void*)&(yyvsp[0].constant),1);} -#line 2379 "ncgeny.c" /* yacc.c:1646 */ +#line 2382 "ncgeny.c" /* yacc.c:1646 */ break; case 103: -#line 751 "ncgen.y" /* yacc.c:1646 */ +#line 754 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_ENDIAN_FLAG,(yyvsp[-4].sym),NULL,(void*)&(yyvsp[0].constant),1);} -#line 2385 "ncgeny.c" /* yacc.c:1646 */ +#line 2388 "ncgeny.c" /* yacc.c:1646 */ break; case 104: -#line 753 "ncgen.y" /* yacc.c:1646 */ +#line 756 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_FILTER_FLAG,(yyvsp[-4].sym),NULL,(void*)&(yyvsp[0].constant),1);} -#line 2391 "ncgeny.c" /* yacc.c:1646 */ +#line 2394 "ncgeny.c" /* yacc.c:1646 */ break; case 105: -#line 755 "ncgen.y" /* yacc.c:1646 */ +#line 758 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_NOFILL_FLAG,(yyvsp[-4].sym),NULL,(void*)&(yyvsp[0].constant),1);} -#line 2397 "ncgeny.c" /* yacc.c:1646 */ +#line 2400 "ncgeny.c" /* yacc.c:1646 */ break; case 106: -#line 757 "ncgen.y" /* yacc.c:1646 */ +#line 760 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym) = makespecial(_FORMAT_FLAG,NULL,NULL,(void*)&(yyvsp[0].constant),1);} -#line 2403 "ncgeny.c" /* yacc.c:1646 */ +#line 2406 "ncgeny.c" /* yacc.c:1646 */ break; case 107: -#line 762 "ncgen.y" /* yacc.c:1646 */ +#line 765 "ncgen.y" /* yacc.c:1646 */ { (yyval.sym)=(yyvsp[0].sym); (yyvsp[0].sym)->ref.is_ref=1; (yyvsp[0].sym)->is_prefixed=0; setpathcurrent((yyvsp[0].sym)); } -#line 2414 "ncgeny.c" /* yacc.c:1646 */ +#line 2417 "ncgeny.c" /* yacc.c:1646 */ break; case 108: -#line 769 "ncgen.y" /* yacc.c:1646 */ +#line 772 "ncgen.y" /* yacc.c:1646 */ { (yyval.sym)=(yyvsp[0].sym); (yyvsp[0].sym)->ref.is_ref=1; (yyvsp[0].sym)->is_prefixed=1; /* path is set in ncgen.l*/ } -#line 2425 "ncgeny.c" /* yacc.c:1646 */ +#line 2428 "ncgeny.c" /* yacc.c:1646 */ break; case 110: -#line 778 "ncgen.y" /* yacc.c:1646 */ +#line 781 "ncgen.y" /* yacc.c:1646 */ {} -#line 2431 "ncgeny.c" /* yacc.c:1646 */ +#line 2434 "ncgeny.c" /* yacc.c:1646 */ break; case 111: -#line 779 "ncgen.y" /* yacc.c:1646 */ +#line 782 "ncgen.y" /* yacc.c:1646 */ {} -#line 2437 "ncgeny.c" /* yacc.c:1646 */ +#line 2440 "ncgeny.c" /* yacc.c:1646 */ break; case 114: -#line 787 "ncgen.y" /* yacc.c:1646 */ +#line 790 "ncgen.y" /* yacc.c:1646 */ {(yyvsp[-2].sym)->data = (yyvsp[0].datalist);} -#line 2443 "ncgeny.c" /* yacc.c:1646 */ +#line 2446 "ncgeny.c" /* yacc.c:1646 */ break; case 115: -#line 790 "ncgen.y" /* yacc.c:1646 */ +#line 793 "ncgen.y" /* yacc.c:1646 */ {(yyval.datalist) = (yyvsp[0].datalist);} -#line 2449 "ncgeny.c" /* yacc.c:1646 */ +#line 2452 "ncgeny.c" /* yacc.c:1646 */ break; case 116: -#line 791 "ncgen.y" /* yacc.c:1646 */ +#line 794 "ncgen.y" /* yacc.c:1646 */ {(yyval.datalist) = (yyvsp[0].datalist);} -#line 2455 "ncgeny.c" /* yacc.c:1646 */ +#line 2458 "ncgeny.c" /* yacc.c:1646 */ break; case 117: -#line 795 "ncgen.y" /* yacc.c:1646 */ +#line 798 "ncgen.y" /* yacc.c:1646 */ {(yyval.datalist) = builddatalist(0);} -#line 2461 "ncgeny.c" /* yacc.c:1646 */ +#line 2464 "ncgeny.c" /* yacc.c:1646 */ break; case 118: -#line 799 "ncgen.y" /* yacc.c:1646 */ +#line 802 "ncgen.y" /* yacc.c:1646 */ {(yyval.datalist) = builddatalist(0); datalistextend((yyval.datalist),&((yyvsp[0].constant)));} -#line 2467 "ncgeny.c" /* yacc.c:1646 */ +#line 2470 "ncgeny.c" /* yacc.c:1646 */ break; case 119: -#line 801 "ncgen.y" /* yacc.c:1646 */ +#line 804 "ncgen.y" /* yacc.c:1646 */ {datalistextend((yyvsp[-2].datalist),&((yyvsp[0].constant))); (yyval.datalist)=(yyvsp[-2].datalist);} -#line 2473 "ncgeny.c" /* yacc.c:1646 */ +#line 2476 "ncgeny.c" /* yacc.c:1646 */ break; case 120: -#line 805 "ncgen.y" /* yacc.c:1646 */ +#line 808 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=(yyvsp[0].constant);} -#line 2479 "ncgeny.c" /* yacc.c:1646 */ +#line 2482 "ncgeny.c" /* yacc.c:1646 */ break; case 121: -#line 806 "ncgen.y" /* yacc.c:1646 */ +#line 809 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=builddatasublist((yyvsp[-1].datalist));} -#line 2485 "ncgeny.c" /* yacc.c:1646 */ +#line 2488 "ncgeny.c" /* yacc.c:1646 */ break; case 122: -#line 810 "ncgen.y" /* yacc.c:1646 */ +#line 813 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=(yyvsp[0].constant);} -#line 2491 "ncgeny.c" /* yacc.c:1646 */ +#line 2494 "ncgeny.c" /* yacc.c:1646 */ break; case 123: -#line 811 "ncgen.y" /* yacc.c:1646 */ +#line 814 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_OPAQUE);} -#line 2497 "ncgeny.c" /* yacc.c:1646 */ +#line 2500 "ncgeny.c" /* yacc.c:1646 */ break; case 124: -#line 812 "ncgen.y" /* yacc.c:1646 */ +#line 815 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_FILLVALUE);} -#line 2503 "ncgeny.c" /* yacc.c:1646 */ +#line 2506 "ncgeny.c" /* yacc.c:1646 */ break; case 125: -#line 813 "ncgen.y" /* yacc.c:1646 */ +#line 816 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_NIL);} -#line 2509 "ncgeny.c" /* yacc.c:1646 */ +#line 2512 "ncgeny.c" /* yacc.c:1646 */ break; case 126: -#line 814 "ncgen.y" /* yacc.c:1646 */ +#line 817 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=(yyvsp[0].constant);} -#line 2515 "ncgeny.c" /* yacc.c:1646 */ +#line 2518 "ncgeny.c" /* yacc.c:1646 */ break; case 128: -#line 819 "ncgen.y" /* yacc.c:1646 */ +#line 822 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant) = makeenumconstref((yyvsp[0].sym));} -#line 2521 "ncgeny.c" /* yacc.c:1646 */ +#line 2524 "ncgeny.c" /* yacc.c:1646 */ break; case 129: -#line 823 "ncgen.y" /* yacc.c:1646 */ +#line 826 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=evaluate((yyvsp[-3].sym),(yyvsp[-1].datalist));} -#line 2527 "ncgeny.c" /* yacc.c:1646 */ +#line 2530 "ncgeny.c" /* yacc.c:1646 */ break; case 130: -#line 828 "ncgen.y" /* yacc.c:1646 */ +#line 831 "ncgen.y" /* yacc.c:1646 */ {(yyval.datalist) = builddatalist(0); datalistextend((yyval.datalist),&((yyvsp[0].constant)));} -#line 2533 "ncgeny.c" /* yacc.c:1646 */ +#line 2536 "ncgeny.c" /* yacc.c:1646 */ break; case 131: -#line 830 "ncgen.y" /* yacc.c:1646 */ +#line 833 "ncgen.y" /* yacc.c:1646 */ {datalistextend((yyvsp[-2].datalist),&((yyvsp[0].constant))); (yyval.datalist)=(yyvsp[-2].datalist);} -#line 2539 "ncgeny.c" /* yacc.c:1646 */ +#line 2542 "ncgeny.c" /* yacc.c:1646 */ break; case 132: -#line 834 "ncgen.y" /* yacc.c:1646 */ +#line 837 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_CHAR);} -#line 2545 "ncgeny.c" /* yacc.c:1646 */ +#line 2548 "ncgeny.c" /* yacc.c:1646 */ break; case 133: -#line 835 "ncgen.y" /* yacc.c:1646 */ +#line 838 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_BYTE);} -#line 2551 "ncgeny.c" /* yacc.c:1646 */ +#line 2554 "ncgeny.c" /* yacc.c:1646 */ break; case 134: -#line 836 "ncgen.y" /* yacc.c:1646 */ +#line 839 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_SHORT);} -#line 2557 "ncgeny.c" /* yacc.c:1646 */ +#line 2560 "ncgeny.c" /* yacc.c:1646 */ break; case 135: -#line 837 "ncgen.y" /* yacc.c:1646 */ +#line 840 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_INT);} -#line 2563 "ncgeny.c" /* yacc.c:1646 */ +#line 2566 "ncgeny.c" /* yacc.c:1646 */ break; case 136: -#line 838 "ncgen.y" /* yacc.c:1646 */ +#line 841 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_INT64);} -#line 2569 "ncgeny.c" /* yacc.c:1646 */ +#line 2572 "ncgeny.c" /* yacc.c:1646 */ break; case 137: -#line 839 "ncgen.y" /* yacc.c:1646 */ +#line 842 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_UBYTE);} -#line 2575 "ncgeny.c" /* yacc.c:1646 */ +#line 2578 "ncgeny.c" /* yacc.c:1646 */ break; case 138: -#line 840 "ncgen.y" /* yacc.c:1646 */ +#line 843 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_USHORT);} -#line 2581 "ncgeny.c" /* yacc.c:1646 */ +#line 2584 "ncgeny.c" /* yacc.c:1646 */ break; case 139: -#line 841 "ncgen.y" /* yacc.c:1646 */ +#line 844 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_UINT);} -#line 2587 "ncgeny.c" /* yacc.c:1646 */ +#line 2590 "ncgeny.c" /* yacc.c:1646 */ break; case 140: -#line 842 "ncgen.y" /* yacc.c:1646 */ +#line 845 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_UINT64);} -#line 2593 "ncgeny.c" /* yacc.c:1646 */ +#line 2596 "ncgeny.c" /* yacc.c:1646 */ break; case 141: -#line 843 "ncgen.y" /* yacc.c:1646 */ +#line 846 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_FLOAT);} -#line 2599 "ncgeny.c" /* yacc.c:1646 */ +#line 2602 "ncgeny.c" /* yacc.c:1646 */ break; case 142: -#line 844 "ncgen.y" /* yacc.c:1646 */ +#line 847 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_DOUBLE);} -#line 2605 "ncgeny.c" /* yacc.c:1646 */ +#line 2608 "ncgeny.c" /* yacc.c:1646 */ break; case 143: -#line 845 "ncgen.y" /* yacc.c:1646 */ +#line 848 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_STRING);} -#line 2611 "ncgeny.c" /* yacc.c:1646 */ +#line 2614 "ncgeny.c" /* yacc.c:1646 */ break; case 144: -#line 849 "ncgen.y" /* yacc.c:1646 */ +#line 852 "ncgen.y" /* yacc.c:1646 */ {(yyval.datalist) = builddatalist(0); datalistextend((yyval.datalist),&((yyvsp[0].constant)));} -#line 2617 "ncgeny.c" /* yacc.c:1646 */ +#line 2620 "ncgeny.c" /* yacc.c:1646 */ break; case 145: -#line 850 "ncgen.y" /* yacc.c:1646 */ +#line 853 "ncgen.y" /* yacc.c:1646 */ {(yyval.datalist)=(yyvsp[-2].datalist); datalistextend((yyvsp[-2].datalist),&((yyvsp[0].constant)));} -#line 2623 "ncgeny.c" /* yacc.c:1646 */ +#line 2626 "ncgeny.c" /* yacc.c:1646 */ break; case 146: -#line 855 "ncgen.y" /* yacc.c:1646 */ +#line 858 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_INT);} -#line 2629 "ncgeny.c" /* yacc.c:1646 */ +#line 2632 "ncgeny.c" /* yacc.c:1646 */ break; case 147: -#line 857 "ncgen.y" /* yacc.c:1646 */ +#line 860 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_UINT);} -#line 2635 "ncgeny.c" /* yacc.c:1646 */ +#line 2638 "ncgeny.c" /* yacc.c:1646 */ break; case 148: -#line 859 "ncgen.y" /* yacc.c:1646 */ +#line 862 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_INT64);} -#line 2641 "ncgeny.c" /* yacc.c:1646 */ +#line 2644 "ncgeny.c" /* yacc.c:1646 */ break; case 149: -#line 861 "ncgen.y" /* yacc.c:1646 */ +#line 864 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_UINT64);} -#line 2647 "ncgeny.c" /* yacc.c:1646 */ +#line 2650 "ncgeny.c" /* yacc.c:1646 */ break; case 150: -#line 865 "ncgen.y" /* yacc.c:1646 */ +#line 868 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=makeconstdata(NC_STRING);} -#line 2653 "ncgeny.c" /* yacc.c:1646 */ +#line 2656 "ncgeny.c" /* yacc.c:1646 */ break; case 151: -#line 869 "ncgen.y" /* yacc.c:1646 */ +#line 872 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=(yyvsp[0].constant);} -#line 2659 "ncgeny.c" /* yacc.c:1646 */ +#line 2662 "ncgeny.c" /* yacc.c:1646 */ break; case 152: -#line 870 "ncgen.y" /* yacc.c:1646 */ +#line 873 "ncgen.y" /* yacc.c:1646 */ {(yyval.constant)=(yyvsp[0].constant);} -#line 2665 "ncgeny.c" /* yacc.c:1646 */ +#line 2668 "ncgeny.c" /* yacc.c:1646 */ break; case 153: -#line 876 "ncgen.y" /* yacc.c:1646 */ +#line 879 "ncgen.y" /* yacc.c:1646 */ {(yyval.sym)=(yyvsp[0].sym);} -#line 2671 "ncgeny.c" /* yacc.c:1646 */ +#line 2674 "ncgeny.c" /* yacc.c:1646 */ break; -#line 2675 "ncgeny.c" /* yacc.c:1646 */ +#line 2678 "ncgeny.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2899,7 +2902,7 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); #endif return yyresult; } -#line 879 "ncgen.y" /* yacc.c:1906 */ +#line 882 "ncgen.y" /* yacc.c:1906 */ #ifndef NO_STDARG @@ -3353,9 +3356,17 @@ makespecial(int tag, Symbol* vsym, Symbol* tsym, void* data, int isconst) special->_Storage = NC_CHUNKED; } break; case _FILTER_FLAG: +#ifdef USE_NETCDF4 /* Parse the filter spec */ - if(parsefilterflag(sdata,special)) + if(parsefilterflag(sdata,special) == NC_NOERR) special->flags |= _FILTER_FLAG; + else { + efree(special->_FilterParams); + derror("_Filter: unparseable filter spec: %s",sdata); + } +#else + derror("%s: the filter attribute requires netcdf-4 to be enabled",specialname(tag)); +#endif break; default: PANIC1("makespecial: illegal token: %d",tag); } @@ -3466,62 +3477,23 @@ specialname(int tag) return ""; } +#ifdef USE_NETCDF4 /* Parse a filter spec string and store it in special */ static int -parsefilterflag(const char* sdata0, Specialdata* special) +parsefilterflag(const char* sdata, Specialdata* special) { - char* p; - char* sdata = NULL; - int stat; - size_t count; - unsigned int* ulist = NULL; - - if(sdata0 == NULL || strlen(sdata0) == 0) goto fail; - sdata = strdup(sdata0); - - /* Count number of unsigned integers and delimit */ - p=sdata; - for(count=0;;count++) { - char* q = strchr(p,','); - if(q == NULL) break; - *q++ = '\0'; /* delimit */ - p = q; - } - count++; /* for final piece */ - - /* Start by collecting the filter id */ - p = sdata; - stat = sscanf(p,"%u",&special->_FilterID); - if(stat != 1) goto fail; - count--; /* actual param count minus the id */ - - ulist = (unsigned int*)malloc(sizeof(unsigned int)*(count)); - if(ulist == NULL) goto fail; - - special->nparams = count; - for(count=0;count < special->nparams ;) { - unsigned int uval; - p = p + strlen(p) + 1; /* move to next param */ - stat = sscanf(p,"%u",&uval); - if(stat != 1) goto fail; - ulist[count++] = uval; - } - special->_FilterParams = ulist; - ulist = NULL; /* avoid duplicate free */ + int stat = NC_NOERR; - if(sdata) free(sdata); - if(ulist) free(ulist); - return 1; -fail: - if(sdata) free(sdata); - if(ulist) free(ulist); - if(special) special->_FilterID = 0; - derror("Malformed filter spec: %s",sdata); + if(sdata == NULL || strlen(sdata) == 0) return NC_EINVAL; - return 0; + stat = NC_parsefilterspec(sdata, &special->_FilterID, &special->nparams, &special->_FilterParams); + if(stat) + derror("Malformed filter spec: %s",sdata); + return stat; } +#endif /* Since the arguments are all simple constants, diff --git a/ncgen/ncgeny.h b/ncgen/ncgeny.h index 3c59b97951..dab86a4e63 100644 --- a/ncgen/ncgeny.h +++ b/ncgen/ncgeny.h @@ -106,7 +106,7 @@ extern int ncgdebug; union YYSTYPE { -#line 142 "ncgen.y" /* yacc.c:1909 */ +#line 145 "ncgen.y" /* yacc.c:1909 */ Symbol* sym; unsigned long size; /* allow for zero size to indicate e.g. UNLIMITED*/