From aea8340b6b34c7eb78440aa9c785cebe6f1bc25c Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Mon, 15 Jan 2024 17:32:50 -0600 Subject: [PATCH 01/40] Property storage re-work in progress --- README.md | 9 +- das2/array.c | 47 +++- das2/array.h | 20 +- das2/defs.h | 3 +- das2/descriptor.c | 534 +++++++++++++++++++++------------------------- das2/descriptor.h | 123 +++++++---- das2/property.c | 193 +++++++++++++++++ das2/property.h | 125 +++++++++++ das2/util.h | 1 + 9 files changed, 715 insertions(+), 340 deletions(-) create mode 100644 das2/property.c create mode 100644 das2/property.h diff --git a/README.md b/README.md index 3ddd1d2..1911fe8 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,16 @@ -# das2C - version 2.3 +# das2C - version 3.0 (in work) +*This version will support parsing das3 streams without namespaces, das3 docs will + come latter on a subsequent release* + Das2 servers typically provide data relavent to space plasma and magnetospheric physics research. To retrieve data, an HTTP GET request is posted to a das2 server by a client program and a self-describing stream of data values covering the requested time range, at the requested time resolution, is provided in the response body. -This package, *das2C*, provides a portable C library, libdas2.3, which contains +This package, *das2C*, provides a portable C library, libdasC, which contains functions for: * Stream reading and writing @@ -16,7 +19,7 @@ functions for: * Dataset accumulation * Federated catalog navigation -as well as a set of command line das2 stream processing programs used by [das2-pyserver](https://github.com/das-developers/das2-pyserver). +as well as a set of command line das2 stream processing programs used by [dasflex](https://github.com/das-developers/das2-pyserver). Doxygen library documentation is available in the [github pages](https://das-developers.github.io/das2C/) for this repository. To find out more about das2 visit https://das2.org. diff --git a/das2/array.c b/das2/array.c index 152c8cc..c106737 100644 --- a/das2/array.c +++ b/das2/array.c @@ -987,26 +987,42 @@ DasAry* new_DasAry( const char* id, das_val_type et, size_t sz_each, const byte* fill, int rank, size_t* shape, das_units units ){ - DasAry* pThis = NULL; + pThis = (DasAry*) calloc(1, sizeof(DasAry)); + if( ! DasAry_init(pThis, id, et, sz_each, fill, rank, shape, units) ) { + if(pThis) free(pThis); + return NULL; + } + return pThis; +} + +bool DasAry_init( + DasAry* pThis, const char* id, das_val_type et, size_t sz_each, const byte* fill, + int rank, size_t* shape, das_units units +){ + int i = 0; /* validation */ + if(pThis == NULL){ + das_error(DASERR_ARRAY, "null array pointer to initializer"); return false; + } if((id == NULL)||(id[0] == '\0')){ - das_error(DASERR_ARRAY, "id parameter empty"); return NULL; + das_error(DASERR_ARRAY, "id parameter empty"); return false; } if(!das_assert_valid_id(id)) return false; if(rank < 1){ das_error(DASERR_ARRAY, "In array '%s', rank 0 (or less) arrays are" - " not supported.", id); return NULL; + " not supported.", id); return false; } if(shape == NULL){ das_error(DASERR_ARRAY, "In array '%s', shape argument is NULL ", id); - return NULL; + return false; } if(rank > DASIDX_MAX){ das_error(DASERR_ARRAY, "In array '%s', rank %d (or more) arrays are" " not supported", id, rank /* serial number ? */); + return false; } /* since shape is unsigned we can't directly check for negative shape @@ -1019,11 +1035,10 @@ DasAry* new_DasAry( if(nTest < 0){ das_error(DASERR_ARRAY, "In array %s, invalid shape value, %zu for" " index %d", id, shape[i], i); - return NULL; + return false; } } - pThis = (DasAry*) calloc(1, sizeof(DasAry)); strncpy(pThis->sId, id, 63); pThis->nRank = rank; pThis->units = units; @@ -1093,7 +1108,7 @@ DasAry* new_DasAry( } pThis->refcount = 1; - return pThis; + return true; } /* syntax sugar */ @@ -1169,6 +1184,24 @@ void dec_DasAry(DasAry* pThis) } } +/* Used with init, frees allocated memory, but not the pointer itself */ +void DasAry_deInit(DasAry* pThis) +{ + pThis->refcount -= 1; + if(pThis->refcount < 1){ + if(pThis->pMemOwner != NULL){ + DasAry_deInit(pThis->pMemOwner); + } + else{ + for(int d = 0; d < pThis->nRank; ++d){ + if(pThis->pBufs[d] == &(pThis->bufs[d])) + DynaBuf_release(pThis->pBufs[d]); + } + } + memset(&pThis, 0, sizeof(DasAry)); // Null the memory + } +} + /* Not sure about this. Maybe using etText would just automatically have * an extra ragged dimension in the array */ diff --git a/das2/array.h b/das2/array.h index a9ffbbe..f198972 100644 --- a/das2/array.h +++ b/das2/array.h @@ -378,6 +378,17 @@ DAS_API DasAry* new_DasAry( int rank, size_t* shape, das_units units ); + +/** Same as new_DasAry, but for initializing stack objects instead of making + * new heap objects + * + * @returns True if the object could be successfully initialized + */ +DAS_API bool DasAry_init( + DasAry* pThis, const char* id, das_val_type et, size_t sz_each, + const byte* fill, int rank, size_t* shape, das_units units +); + /** A convenience wrapper for storing arrays of pointers * * This function is the equivalent of the code: @@ -406,7 +417,7 @@ DAS_API DasAry* new_DasPtrAry(const char* sType, int rank, size_t* shape); * an individual entity. */ #define D2ARY_AS_SUBSEQ 0x00000001 -/** A stronger condition that D2ARY_AS_SUBSEQ. +/** A stronger condition then D2ARY_AS_SUBSEQ. * Not only should the last index be ignored when using this array, in addition * for each run of the fastest moving index a FILL value is always inserted as * the last element. */ @@ -461,6 +472,10 @@ DAS_API int ref_DasAry(const DasAry* pThis); */ DAS_API void dec_DasAry(DasAry* pThis); +/** Similar to dec_dasAry, but for stack objects */ + +DAS_API void DasAry_deInit(DasAry* pThis); + /** Take ownership of array element memory * @@ -981,7 +996,8 @@ DAS_API size_t DasAry_qubeIn(DasAry* pThis, int iRecDim); * append operation, DasAry_markEnd sets the needed flags. * * @param pThis The array which should copy in the new values. - * @param pVals A constant pointer to values to add + * @param pVals A constant pointer to values to add MAY BE NULL! If NULL + * uCount fill values are appended * @param uCount The number of values to add * @returns true if uCount items were appended to the array, false otherwise * diff --git a/das2/defs.h b/das2/defs.h index e8e7b24..247ab85 100644 --- a/das2/defs.h +++ b/das2/defs.h @@ -169,7 +169,8 @@ typedef int DasErrCode; #define DASERR_CRED 35 #define DASERR_NODE 36 #define DASERR_TIME 37 -#define DASERR_MAX 37 +#define DASERR_PROP 38 +#define DASERR_MAX 38 #ifdef __cplusplus } diff --git a/das2/descriptor.c b/das2/descriptor.c index 07e36cb..b6f7dfc 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -1,19 +1,18 @@ -/* Copyright (C) 2004-2006 Jeremy Faden - * 2015-2019 Chris Piker +/* Copyright (C) 2024 Chris Piker (re-written, new storage) * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * Das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ #define _POSIX_C_SOURCE 200112L @@ -37,28 +36,54 @@ #include "value.h" #include "descriptor.h" +const char* das_desc_type_str(desc_type_t dt){ + switch(dt){ + case STREAM: return "stream"; + case PLANE: return "plane"; + case PACKET: return "packet"; + case PHYSDIM: return "physdim"; + case DATASET: return "dataset"; + default: return "unknown"; + } +} + /* ************************************************************************* */ /* Construction/Destruction */ void DasDesc_init(DasDesc* pThis, desc_type_t type){ pThis->type = type; /* Intentionally invalid */ - memset(pThis->properties, 0, sizeof(char*)*DAS_XML_MAXPROPS); + + const char* sId; + switch(dt){ + case STREAM: sId = "stream_properties"; break; + case PLANE: sId = "plane_properties"; break; + case PACKET: sId = "packet_properties"; break; + case PHYSDIM: sId = "physdim_properties"; break; + case DATASET: sId = "dataset_properties"; break; + default: sId = "desciptor_properties"; break; + } + + DasAry_init(&(pThis->properties), sId, vtByte, 0, NULL, RANK_2(0,0), UNIT_DIMENSIONLESS); + DasAry_setUsage(&properties, D2ARY_AS_SUBSEQ); + pThis->parent = NULL; pThis->bLooseParsing = false; + pThis->uInvalid = 0; } DasDesc* new_Descriptor(){ DasDesc* pThis = (DasDesc*)calloc(1, sizeof(DasDesc)); pThis->type = UNK_DESC; + DasAry_init( + &(pThis->properties), "descriptor_properties", vtByte, 0, NULL, RANK_2(0,0), + UNIT_DIMENSIONLESS + ); + DasAry_setUsage(&properties, D2ARY_AS_SUBSEQ); return pThis; } void DasDesc_freeProps(DasDesc* pThis){ - for(int i = 0; pThis->properties[i] != NULL; i++){ - free(pThis->properties[i]); - } - /* Just get the property strings, don't get the item itself, will mess with - sub-classing */ + DasAry_deInit(&(pThis->properties)); } /* ************************************************************************* */ @@ -67,58 +92,74 @@ void DasDesc_freeProps(DasDesc* pThis){ const DasDesc* DasDesc_parent(DasDesc* pThis) { return pThis->parent; /* only useful for hiding the structure, not sure - * if it's worth it */ + if it's worth it */ } /* ************************************************************************* */ /* Getting Properties */ +const DasProp* DasDesc_getLocal(const DasDesc* pThis, const char* sName) +{ + const DasAry* pProps = &(pThis->properties); + size_t nProps = DasAry_lengthIn(pProps, DIM0); + das_prop_t* pProp; + + for(size_t i = 0; i < nProps; ++i){ + size_t uPropLen = 0; + pProp = DasAry_getBytesIn(pProps, DIM1_AT(i), &uPropLen); + if((pProp->flags & DASPROP_VALID_MASK) && + (strcmp(DasProp_name(pProp), sName) == 0) + ) + return pProp; + } + return NULL; +} + +const DasProp* DasDesc_getProp(const DasDesc* pThis, const char* sName) +{ + // Still a linear search, with two loops, but over a continuous block + // of memory at least + const DasProp* pProp = DasDesc_getLocal(pThis, sName); + if(pProp != NULL) + return pProp; + + if (pThis->parent != NULL) + return DasDesc_getProp(pThis->parent, sName); + + return NULL; +} + + /* returns NULL if property does not exist, pointer to string value */ /* otherwise. Recursively searches up the parent hierarchy if the given */ /* property isn't present in this descriptor */ -const char* DasDesc_get(const DasDesc* pThis, const char* sKey) +const char* DasDesc_get(const DasDesc* pThis, const char* sName) { - int i; - char *tt; - - for (i = 0; i < DAS_XML_MAXPROPS; i += 2) { - if (pThis->properties[i] == NULL) continue; - - tt = strchr(pThis->properties[i], ':'); - if (tt != NULL) { - if (strcmp((char *) (tt + 1), sKey) == 0) { - return pThis->properties[i + 1]; - } - } else { - if (strcmp(pThis->properties[i], sKey) == 0) { - return pThis->properties[i + 1]; - } - } - } + const DasProp* pProp = DasDesc_getProp(pThis, sName); + if(pProp != NULL) + return DasProp_value(pProp); - if (pThis->parent != NULL) { - return DasDesc_get(pThis->parent, sKey); - } else { - return NULL; - } + return NULL; } size_t DasDesc_getArray( - DasDesc* pThis, const char* sKey, char cSep, + DasDesc* pThis, const char* sName, char cSep, char* pBuf, size_t uBufSz, char** psVals, size_t uMaxVals ){ if((uBufSz < 2)||(uMaxVals < 1)) return 0; if(isspace(cSep)){ das_error(DASERR_DESC, - "Space seperators not support, since functions trims each output" + "Space seperators not supported, since functions trims each output" ); return 0; } - const char* sVal = DasDesc_get(pThis, sKey); - if(sVal == NULL) return 0; + const char* sVal = DasDesc_get(pThis, sName); + if(sVal == NULL) + return 0; + size_t uLen = strlen(sVal); if(uLen > uBufSz - 2) uLen = uBufSz - 2; @@ -133,7 +174,7 @@ size_t DasDesc_getArray( if(*p == cSep){ psVals[u] = p; ++u; } ++p; } - uMaxVals = u; /* Reduce value cout to what we measured */ + uMaxVals = u; /* Reduce value count to what we measured */ /* point value begin after the seperator, if there is nothing after the * seperator but an ending, mark the value as null */ @@ -174,103 +215,67 @@ size_t DasDesc_getArray( return uMaxVals; } -const char* DasDesc_getType(const DasDesc* pThis, const char* sKey) +const char* DasDesc_getType(const DasDesc* pThis, const char* sName) { - int i; - char *tt; - - for (i = 0; i < DAS_XML_MAXPROPS; i += 2) { - if (pThis->properties[i] == NULL) continue; - - tt = strchr(pThis->properties[i], ':'); - if(tt != NULL){ - if(strcmp(tt + 1, sKey) == 0){ - tt = pThis->properties[i]; /* note var reuse */ - if(strncmp(tt, "double", 6) == 0) return "double"; - if(strncmp(tt, "boolean", 7) == 0) return "boolean"; - if(strncmp(tt, "String", 6) == 0) return "String"; - if(strncmp(tt, "DatumRange", 10) == 0) return "DatumRange"; - if(strncmp(tt, "Datum", 5) == 0) return "Datum"; - if(strncmp(tt, "int", 3) == 0) return "int"; - if(strncmp(tt, "doubleArray", 11) == 0) return "doubleArray"; - return "Unknown"; - } - } - else{ - if(strcmp(pThis->properties[i], sKey) == 0) - return "String"; - } - } + const DasProp* pProp = _DasDesc_getProp(pThis, sName); + if(pProp != NULL) + return DasProp_type2(pProp); - if (pThis->parent != NULL) { - return DasDesc_get(pThis->parent, sKey); - } else { - return NULL; - } + return NULL; } -bool DasDesc_has(const DasDesc* pThis, const char * propertyName ) { - const char* result = DasDesc_get( pThis, propertyName ); - return result!=NULL; +bool DasDesc_has(const DasDesc* pThis, const char* sName) +{ + return (DasDesc_getProp(pThis, sName) != NULL); } size_t DasDesc_length(const DasDesc* pThis) { - size_t uProps = 0; - for(size_t u = 0; u < DAS_XML_MAXPROPS; u += 2){ - if(pThis->properties[u] != NULL) uProps += 1; - } - return uProps; + size_t uTotal = DasAry_lengthIn(&(pThis->properties), DIM0); + if(pThis->uInvalid > uTotal) return 0; + else return (uTotal - pThis->uInvalid) } const char* DasDesc_getNameByIdx(const DasDesc* pThis, size_t uIdx) { - if(uIdx*2 >= DAS_XML_MAXPROPS) return NULL; - size_t u, uPropNum = 0; - for(u = 0; u < DAS_XML_MAXPROPS; u += 2){ - if(uPropNum == uIdx) break; - if(pThis->properties[u] != NULL) ++uPropNum; - } - - const char* sName = pThis->properties[u]; - if(sName == NULL) return NULL; - const char* pColon = strchr(sName, ':'); - if(pColon != NULL) return pColon+1; - else return sName; + size_t uProps = DasAry_lengthIn(pProps, DIM0); + if(uIdx >= uProps) + return NULL; + + size_t uPropLen; + const DasProp* pProp = DasAry_getBytesIn(pProps, DIM1_AT(i), &uPropLen); + + return DasProp_name(pProp); } const char* DasDesc_getValByIdx(const DasDesc* pThis, size_t uIdx) { - if(uIdx*2 + 1 >= DAS_XML_MAXPROPS) return NULL; - return pThis->properties[uIdx*2 + 1]; + size_t uProps = DasAry_lengthIn(pProps, DIM0); + if(uIdx >= uProps) + return NULL; + + size_t uPropLen; + const DasProp* pProp = DasAry_getBytesIn(pProps, DIM1_AT(i), &uPropLen); + + return DasProp_value(pProp); } const char* DasDesc_getTypeByIdx(const DasDesc* pThis, size_t uIdx) { - if(uIdx*2 >= DAS_XML_MAXPROPS) return NULL; - size_t u, uPropNum = 0; - for(u = 0; u < DAS_XML_MAXPROPS; u += 2){ - if(uPropNum == uIdx) break; - if(pThis->properties[u] != NULL) ++uPropNum; - } - - /* This is silly, properties should be a small structure of type, name - * and value */ - const char* sName = pThis->properties[u]; - if(strncmp(sName, "double", 6) == 0) return "double"; - if(strncmp(sName, "boolean", 7) == 0) return "boolean"; - if(strncmp(sName, "String", 6) == 0) return "String"; - if(strncmp(sName, "DatumRange", 10) == 0) return "DatumRange"; - if(strncmp(sName, "Datum", 5) == 0) return "Datum"; - if(strncmp(sName, "int", 3) == 0) return "int"; - if(strncmp(sName, "doubleArray", 11) == 0) return "doubleArray"; - return "String"; -} - -const char* DasDesc_getStr(const DasDesc* pThis, const char* sKey) + size_t uProps = DasAry_lengthIn(pProps, DIM0); + if(uIdx >= uProps) + return NULL; + + size_t uPropLen; + const DasProp* pProp = DasAry_getBytesIn(pProps, DIM1_AT(i), &uPropLen); + + return DasProp_type2(pProp); +} + +const char* DasDesc_getStr(const DasDesc* pThis, const char* sName) { - return DasDesc_get(pThis, sKey); + return DasDesc_get(pThis, sName); } size_t DasDesc_getStrAry( @@ -280,9 +285,9 @@ size_t DasDesc_getStrAry( return DasDesc_getArray(pThis, sName, '|', pBuf, uBufSz, psVals, uMaxVals); } -bool DasDesc_getBool(DasDesc* pThis, const char* sPropName) +bool DasDesc_getBool(DasDesc* pThis, const char* sName) { - const char* sVal = DasDesc_get(pThis, sPropName); + const char* sVal = DasDesc_get(pThis, sName); if(sVal == NULL) return false; if(strlen(sVal) == 0) return false; if(isdigit(sVal[0]) && sVal[0] != '0') return true; @@ -290,32 +295,33 @@ bool DasDesc_getBool(DasDesc* pThis, const char* sPropName) return false; } -double DasDesc_getDouble(const DasDesc* pThis, const char * propertyName ) { - double result; - const char* value; - value = DasDesc_get( pThis, propertyName ); - if ( value==NULL ) { - result= DAS_FILL_VALUE; - } else { - sscanf( value, "%lf", &result ); - } - return result; -} +double DasDesc_getDouble(const DasDesc* pThis, const char* sName) +{ + double rVal; + const char* sVal = DasDesc_get( pThis, sName ); + if(sVal == NULL) + return DAS_FILL_VALUE; + + if(sscanf(sVal, "%lf", &rVal ) != 1){ + das_error(DASERR_DESC, "Can't convert %s to an double", sVal); + return DAS_FILL_VALUE; + }; + return rVal; +} + +int DasDesc_getInt(const DasDesc* pThis, const char* sName ) +{ + int nVal; + const char* sVal = DasDesc_get( pThis, sName ); + if(sVal == NULL) + return INT_MIN; -int DasDesc_getInt(const DasDesc* pThis, const char * propertyName ) { - int result; - const char * value; - value = DasDesc_get( pThis, propertyName ); - if ( value==NULL ) { - /* result= FILL; */ - result = INT_MIN; - } else { - if( sscanf( value, "%d", &result ) != 1){ - das_error(16, "Can't convert %s to an integer", value); - return 0; - } - } - return result; + if( sscanf(value, "%d", &nVal) != 1){ + das_error(DASERR_DESC, "Can't convert %s to an integer", sVal); + return INT_MIN; + } + + return nVal; } bool _Desc_looksLikeTime(const char* sVal) @@ -325,8 +331,7 @@ bool _Desc_looksLikeTime(const char* sVal) return false; } -double DasDesc_getDatum(DasDesc* pThis, const char * propertyName, - das_units units ) +double DasDesc_getDatum(DasDesc* pThis, const char* sName, das_units units) { const char* sVal; const char* idx; @@ -336,7 +341,7 @@ double DasDesc_getDatum(DasDesc* pThis, const char * propertyName, bool bIsTimeStr = false; das_time dt = {0}; - if( (sVal = DasDesc_get(pThis, propertyName )) == NULL) return DAS_FILL_VALUE; + if( (sVal = DasDesc_get(pThis, sName )) == NULL) return DAS_FILL_VALUE; idx= strchr( sVal, ' ' ); if(idx == NULL){ @@ -355,7 +360,7 @@ double DasDesc_getDatum(DasDesc* pThis, const char * propertyName, if(!bIsTimeStr){ if( sscanf(sVal, "%lf", &rValue) != 1){ - das_error(16, "Couldn't parse %s as a real value", sVal); + das_error(DASERR_DESC, "Couldn't parse %s as a real value", sVal); return DAS_FILL_VALUE; } if(strcmp(unitsVal, units) == 0){ @@ -370,7 +375,7 @@ double DasDesc_getDatum(DasDesc* pThis, const char * propertyName, } else{ if(! dt_parsetime(sVal, &dt) ){ - das_error(16, "Couldn't parse %s as a date time", sVal); + das_error(DASERR_DESC, "Couldn't parse %s as a date time", sVal); return DAS_FILL_VALUE; } rResult = Units_convertFromDt(unitsVal, &dt); @@ -379,110 +384,89 @@ double DasDesc_getDatum(DasDesc* pThis, const char * propertyName, return rResult; } -double* DasDesc_getDoubleAry( - DasDesc* pThis, const char * propertyName, int *p_nitems -){ - const char* arrayString = DasDesc_get( pThis, propertyName ); - return das_csv2doubles( arrayString, p_nitems ); +double* DasDesc_getDoubleAry(DasDesc* pThis, const char* sName, int* pNumItems) +{ + const char* sAry = DasDesc_get( pThis, sName); + return das_csv2doubles(sAry, pNumItems); } /* ************************************************************************* */ -/* Checking equality of content */ +/* Checking equality of content in this descriptor */ -bool DasDesc_equals(const DasDesc* pOne, const DasDesc* pTwo) +bool DasDesc_equals(const DasDesc* pThis, const DasDesc* pOther) { - size_t uProps = DasDesc_length(pOne); - if(uProps != DasDesc_length(pTwo)) return false; - - const char* sVal = NULL; - size_t u = 0, v = 0; + const DasAry* pMyAry = &(pThis->properties); + const DasAry* pYourAry = &(pOther->properties); + + size_t uProps = DasAry_lengthIn(pMyAry, DIM0); + if(uProps != DasAry_lengthIn(pYourAry, DIM0)) + return false; - for(u = 0; u < uProps; u++){ - - sVal = NULL; - for(v = 0; v < uProps; v++){ - if(pOne->properties[u*2] && pTwo->properties[v*2]){ - if(strcmp(pOne->properties[u*2], pTwo->properties[v*2]) == 0){ - sVal = pTwo->properties[v*2 + 1]; - break; - } - } - } + for(size_t u = 0; u < uProps; u++){ - if(sVal == NULL) return false; - if(strcmp(pOne->properties[u*2 + 1], sVal) != 0) return false; + const DasProp* pMyProp = DasAry_getBytesIn(pMyAry, DIM1_AT(i), &uPropLen); + const DasProp* pYourProp = DasDesc_getLocal(pOther, DasProp_name(pMyProp), &uPropLen); + if(pYourProp == NULL) + return false; + + if(!DasProp_equal(pMyProp, pYourProp)) + return false; } return true; } - /* ************************************************************************* */ /* Setting Properties */ -/* copies the property into the property list. */ +/* Get pointer to property memory by name, even if it's invalid */ +static byte* _DasDesc_getPropBuf(DasDesc* pThis, const char* sName, size_t* pPropSz) +{ + DasAry* pProps = &(pThis->properties); + size_t nProps = DasAry_lengthIn(pProps, DIM0); + DasProp* pProp; + + for(size_t i = 0; i < nProps; ++i){ + pProp = (DasProp*) DasAry_getBuf(pProps, DIM1_AT(i), pPropSz); + if(strcmp(DasProp_name(pProp), sName) == 0) + return (byte*)pProp; + } + return NULL; +} + +/* copies the property into the property array */ DasErrCode DasDesc_set( DasDesc* pThis, const char* sType, const char* sName, const char* sVal ){ - if(sType == NULL) sType = "String"; - if(sName == NULL) return das_error(16, "Null value for sName"); - - int i = 0; - /* handle odd stuff from Das1 DSDFs only if an internal switch is thrown */ - if(!pThis->bLooseParsing){ - for(i = 0; i < strlen(sName); i++) - if(!isalnum(sName[i]) && (sName[i] != '_')) - return das_error(16, "Invalid property name '%s'", sName); - } - else{ - i = strlen(sName); - } - - if(i < 1) - return das_error(16, "Property can not be empty"); - - if(strlen(sType) < 2 ) - return das_error(16, "Property type '%s' is too short.", sType); - - char** pProps = pThis->properties; - char sBuf[128] = {'\0'}; - int iProp=-1; - - /* Look for the prop string skipping over holes */ - for(i=0; i < DAS_XML_MAXPROPS; i+=2 ){ - if( pProps[i] == NULL ) continue; - snprintf(sBuf, 128, "%s:%s", sType, sName); - if (strcmp( pProps[i], sBuf )==0 ) iProp= i; - } + + int nRet = dasprop_check2(sType, sName, sVal); + if(nRet != 0) + return nRet; + + size_t uNewSz = dasprop_memsz(sName, sVal); - size_t uLen; - if(iProp == -1){ - /* Look for the lowest index slot for the property */ - for(i=0; i< DAS_XML_MAXPROPS; i+= 2){ - if( pProps[i] == NULL){ iProp = i; break;} - } - if(iProp == -1){ - return das_error(16, "Descriptor exceeds the max number of " - "properties %d", DAS_XML_MAXPROPS/2); - } - if(sType != NULL){ - uLen = strlen(sType) + strlen(sName) + 2; - pProps[iProp] = (char*)calloc(uLen, sizeof(char)); - snprintf(pProps[iProp], uLen, "%s:%s", sType, sName); - } - /* pProps[iProp+2]= NULL; */ - } else { - free( pProps[iProp+1] ); + size_t uOldSz = 0; + byte* pBuf = _DasDesc_getPropBuf(pThis, sName, &uOldSz); + if(pBuf != NULL){ + if(uNewSz <= uOldSz) + return DasProp_init2(pBuf, uBufSz, sType, sName, sValue, !pThis->bLooseParsing); + + // Nope, mark it as invalid and do a normal insert + DasDesc_invalid((DasProp*)pBuf); + ++(pThis->uInvalid); } - /* own it */ - if((sVal != NULL) && (strlen(sVal) > 0)){ - pProps[iProp+1]= (char*)calloc(strlen(sVal)+1, sizeof(char)); - strcpy( pProps[iProp+1], sVal ); - } - else{ - pProps[iProp+1] = NULL; - } - return 0; + // Make a new one + DasAry* pProps = &(pThis->properties); + + if(!DasAry_append(pProps, NULL, uNewSz)) + return das_error("Couldn't create space for new property"); + DasAry_markEnd(pProps, DIM1); + + size_t uTmp = 0; + pBuf = DasAry_getBuff(pProps, DIM1_AT(-1), &uTmp); + assert(uTmp == uNewSz); + + return DasProp_init2(pBuf, uNewSz, sType, sName, sValue, !pThis->bLooseParsing); } DasErrCode DasDesc_setStr( @@ -501,7 +485,7 @@ DasErrCode DasDesc_vSetStr( va_list ap; if( (sVal = (char*)malloc(nLen)) == NULL) - return das_error(16, "Unable to malloc %d bytes", nLen); + return das_error(DASERR_DESC, "Unable to malloc %d bytes", nLen); while (1) { /* Try to print in the allocated space. */ @@ -520,7 +504,7 @@ DasErrCode DasDesc_vSetStr( nLen *= 2; /* twice the old nLen */ if( (sVal = (char*)realloc(sVal, nLen)) == NULL) - return das_error(16, "Unable to malloc %d bytes", nLen); + return das_error(DASERR_DESC, "Unable to malloc %d bytes", nLen); } DasErrCode nRet = DasDesc_set(pThis, "String", sName, sVal); @@ -528,11 +512,11 @@ DasErrCode DasDesc_vSetStr( return nRet; } -DasErrCode DasDesc_setBool(DasDesc* pThis, const char* sPropName, bool bVal) +DasErrCode DasDesc_setBool(DasDesc* pThis, const char* sName, bool bVal) { const char* value = "false"; if(bVal) value = "true"; - return DasDesc_set(pThis, "boolean", sPropName, value); + return DasDesc_set(pThis, "boolean", sName, value); } DasErrCode DasDesc_setDatum( @@ -565,7 +549,7 @@ DasErrCode DasDesc_getStrRng( DasDesc* pThis, const char* sName, char* sMin, char* sMax, das_units* pUnits, size_t uLen ){ - if(uLen < 2) das_error(16, "uLen too small (%zu bytes)", uLen); + if(uLen < 2) das_error(DASERR_DESC, "uLen too small (%zu bytes)", uLen); const char* sVal = NULL; char buf[128] = {'\0'}; @@ -575,7 +559,7 @@ DasErrCode DasDesc_getStrRng( /* Copy everything up to the first | character */ if( (sVal = DasDesc_getStr(pThis, sName)) == NULL){ - return das_error(16, "Property %s not present in descriptor", sName); + return das_error(DASERR_DESC, "Property %s not present in descriptor", sName); } pEnd = (char*)strchr(sVal, '|'); if(pEnd != NULL) @@ -631,7 +615,7 @@ DasErrCode DasDesc_getStrRng( return DAS_OKAY; ERROR: - return das_error(16, "Malformed range string %s", buf); + return das_error(DASERR_DESC, "Malformed range string %s", buf); } @@ -654,33 +638,33 @@ DasErrCode DasDesc_setInt(DasDesc* pThis, const char * sName, int nVal ) } DasErrCode DasDesc_setDoubleArray( - DasDesc* pThis, const char * propertyName, int nitems, double *value + DasDesc* pThis, const char* sName, int nitems, double *value ){ char* buf; if ( nitems> 1000000 / 50 ) { - das_error(16, "too many elements for setPropertyDoubleArray to handle" ); + das_error(DASERR_DESC, "too many elements for DasDesc_setDoubleArray to handle" ); } buf= ( char * ) malloc( nitems * 50 ); - int nRet = DasDesc_set( pThis, "doubleArray", propertyName, + int nRet = DasDesc_set( pThis, "doubleArray", sName, das_doubles2csv( buf, value, nitems ) ); free( buf ); return nRet; } -DasErrCode DasDesc_setFloatAry( DasDesc* pThis, const char * propertyName, - int nitems, float *value ) -{ +DasErrCode DasDesc_setFloatAry( + DasDesc* pThis, const char* sName, int nitems, float* value +){ char* buf; double dvalue[ 1000000 / 50 ]; int i; if ( nitems> 1000000 / 50 ) { - das_error(16, "too many elements for setPropertyDoubleArray to handle" ); + das_error(DASERR_DESC, "too many elements for DasDesc_setFloatArray to handle" ); } for ( i=0; iproperties; - int i, iRm=-1; - char* pColon = NULL; - int nCmpLen = 0, nOffset = 0; - int nPropSets = 0; - - for(i=0; iproperties; if(*pProps == NULL) return 0; /* Successfully did nothing! */ DasErrCode nRet = 0; - if((nRet = DasBuf_printf(pBuf, "%s - * 2015-2021 Chris Piker + * 2015-2024 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * Das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. @@ -25,6 +25,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -39,11 +40,14 @@ extern "C" { * -# FUNC_SET */ typedef enum DescriptorType { - UNK_DESC=0, PLANE=14001, PACKET=14002, STREAM=14003, VARIABLE=1500, - DATASET=1501 + UNK_DESC=0, STREAM=14000, + PLANE=14001, PACKET=14002, + PHYSDIM=15001, DATASET=15002 } desc_type_t; +const char* das_desc_type_str(desc_type_t dt); + /** Base structure for Stream Header Items. * * Descriptors have properties associated with them. Stream Descriptors, @@ -79,7 +83,28 @@ typedef enum DescriptorType { */ typedef struct das_descriptor { desc_type_t type; - char* properties[DAS_XML_MAXPROPS]; + + /* Properties will now be held in a das array so that they are in a continuous + block of memory. Properties are laid out in memory as so: + + valid_code\0name\0type_code\0value\0 + + this means that the array is RANK_2(0,4,*) and it will need 2 ancillary + arrays of pointers to keep track of the boundaries. Thus the number of + independent allocations drops from: + + properties * N so O(N) + to: + 3 so O(1) + + and there is no upper limit to the number of properties (yay!) + */ + //char* properties[DAS_XML_MAXPROPS]; + DasAry properties; + + //Number of invalid properites (saved to make length cals faster) + size_t uInvalid; + const struct das_descriptor* parent; bool bLooseParsing; } DasDesc; @@ -118,11 +143,11 @@ DAS_API void DasDesc_freeProps(DasDesc* pThis); * comparison. * @todo maybe check parents too. * - * @param pOne The first descriptor - * @param pTwo The second descriptor + * @param pThis The first descriptor + * @param pOther The second descriptor * @memberof DasDesc */ -DAS_API bool DasDesc_equals(const DasDesc* pOne, const DasDesc* pTwo); +DAS_API bool DasDesc_equals(const DasDesc* pThis, const DasDesc* pOther); /** The the parent of a Descriptor * @@ -197,12 +222,12 @@ DAS_API const char* DasDesc_getTypeByIdx(const DasDesc* pThis, size_t uIdx); /** Determine if a property is present in a Descriptor or it's ancestors. * * @param pThis the descriptor object to query - * @param propertyName the name of the property to retrieve. + * @param sName the name of the property to retrieve. * @returns true if the descriptor or one of it's ancestors has a property * with the given name, false otherwise. * @memberof DasDesc */ -DAS_API bool DasDesc_has(const DasDesc* pThis, const char* propertyName ); +DAS_API bool DasDesc_has(const DasDesc* pThis, const char* sName ); /** Generic property setter * @@ -234,8 +259,33 @@ DAS_API DasErrCode DasDesc_set( DasDesc* pThis, const char* sType, const char* sName, const char* sVal ); -DAS_API const char* DasDesc_getType(const DasDesc* pThis, const char* sKey); -DAS_API const char* DasDesc_get(const DasDesc* pThis, const char* sKey); +DAS_API const char* DasDesc_getType(const DasDesc* pThis, const char* sName); + +DAS_API const char* DasDesc_get(const DasDesc* pThis, const char* sName); + +/** Get a property if present in descriptor or it's parent (das3) + * + * @param pThis the descriptor object to query + * @param sName the name of the property to retrieve. + * @returns a the property, if present here or in a parent descriptor, + * NULL otherwise + */ +const DasProp* DasDesc_getProp(const DasDesc* pThis, const char* sName); + + +/** Get a property if present in this descriptor only (das3) + * + * In das3 property cascades don't make as much sense. The label for a + * particular physical dim axis is not the stream label. Clients may + * want a property for just this object. + * + * @param pThis the descriptor object to query + * @param sName the name of the property to retrieve. + * @returns a the property, if present here NULL otherwise + */ +const DasProp* DasDesc_getLocal(const DasDesc* pThis, const char* sName); + + /** Remove a property from a descriptor, if preset @@ -247,12 +297,12 @@ DAS_API const char* DasDesc_get(const DasDesc* pThis, const char* sKey); * otherwise * @memberof DasDesc * */ -DAS_API bool DasDesc_remove(DasDesc* pThis, const char* sKey); +DAS_API bool DasDesc_remove(DasDesc* pThis, const char* sName); -/** read the property of type String named propertyName. +/** read the property of type String named sName. * @memberof DasDesc */ -DAS_API const char* DasDesc_getStr(const DasDesc* pThis, const char* sKey); +DAS_API const char* DasDesc_getStr(const DasDesc* pThis, const char* sName); /** Get a multi-valued string property @@ -303,7 +353,7 @@ DAS_API const char* DasDesc_getStr(const DasDesc* pThis, const char* sKey); * a single buffer unaltered. */ DAS_API size_t DasDesc_getStrAry( - DasDesc* pThis, const char* sKey, char* pBuf, size_t uBufSz, + DasDesc* pThis, const char* sName, char* pBuf, size_t uBufSz, char** psVals, size_t uMaxVals ); @@ -317,7 +367,7 @@ DAS_API size_t DasDesc_getStrAry( * @see DasDesc_getStrAry */ DAS_API size_t DasDesc_getArray( - DasDesc* pThis, const char* sKey, char cSep, + DasDesc* pThis, const char* sName, char cSep, char* pBuf, size_t uBufSz, char** psVals, size_t uMaxVals ); @@ -339,17 +389,17 @@ DAS_API DasErrCode DasDesc_vSetStr( ); -/** Read the property of type double named propertyName. +/** Read the property of type double named sName. * The property value is parsed using sscanf. * @memberof DasDesc */ -DAS_API double DasDesc_getDouble(const DasDesc* pThis, const char * propertyName); +DAS_API double DasDesc_getDouble(const DasDesc* pThis, const char* sName); /** Set property of type double. * @memberof DasDesc */ DAS_API DasErrCode DasDesc_setDouble( - DasDesc* pThis, const char * propertyName, double value + DasDesc* pThis, const char* sName, double value ); /** Get the a numeric property in the specified units. @@ -357,7 +407,7 @@ DAS_API DasErrCode DasDesc_setDouble( * Descriptor properties my be provided as Datums. Datums are a double value * along with a specified measurement unit. * @param pThis The Descriptor containing the property in question. - * @param sPropName The name of the property to retrieve. + * @param sName The name of the property to retrieve. * @param units The units of measure in which the return value will be * represented. If the property value is stored in a different set of * units than those indicated by this parameter than the output will be @@ -367,7 +417,7 @@ DAS_API DasErrCode DasDesc_setDouble( * @memberof DasDesc */ DAS_API double DasDesc_getDatum( - DasDesc* pThis, const char * sPropName, das_units units + DasDesc* pThis, const char* sName, das_units units ); /** Set property of type Datum (double, UnitType pair) @@ -392,7 +442,7 @@ DAS_API DasErrCode DasDesc_setDatum( * and nitems is set to indicate the size of the array. * * @param[in] pThis the descriptor object to query - * @param[in] propertyName the name of the proprety to retrieve + * @param[in] sName the name of the proprety to retrieve * @param[out] nitems a pointer to a an integer containing the number of * values in the returned array. * @@ -406,58 +456,57 @@ DAS_API DasErrCode DasDesc_setDatum( * @memberof DasDesc */ DAS_API double* DasDesc_getDoubleAry( - DasDesc* pThis, const char * propertyName, int *nitems + DasDesc* pThis, const char* sName, int* pNumItems ); /** Set the property of type double array. * @memberof DasDesc */ DAS_API DasErrCode DasDesc_setDoubleArray( - DasDesc* pThis, const char * propertyName, int nitems, double *value + DasDesc* pThis, const char* sName, int nitems, double* value ); /** Get a property integer value * * @param pThis the descriptor object to query - * @param propertyName the name of the proprety to retrieve + * @param sName the name of the proprety to retrieve * @returns The value of the named property or exits the program if the * named proprety doesn't exist in this descriptor. * * @see hasProperty() * @memberof DasDesc */ -DAS_API int DasDesc_getInt(const DasDesc* pThis, const char* propertyName); +DAS_API int DasDesc_getInt(const DasDesc* pThis, const char* sName); /** Set the property of type int. * @memberof DasDesc */ -DAS_API DasErrCode DasDesc_setInt(DasDesc* pThis, const char * sName, int nVal); +DAS_API DasErrCode DasDesc_setInt(DasDesc* pThis, const char* sName, int nVal); /** Get a property boolean value * * @param pThis the descriptor object to query - * @param sPropName the name of the proprety to retrieve + * @param sName the name of the proprety to retrieve * @returns True if the value is "true", or any positive integer, false otherwise. * @memberof DasDesc */ -DAS_API bool DasDesc_getBool(DasDesc* pThis, const char* sPropName); +DAS_API bool DasDesc_getBool(DasDesc* pThis, const char* sName); /** Set a boolean property * Encodes the value as either the string "true" or the string "false" * @param pThis The descriptor to receive the property - * @param sPropName the name of the property + * @param sName the name of the property * @param bVal either true or false. */ DAS_API DasErrCode DasDesc_setBool( - DasDesc* pThis, const char* sPropName, bool bVal + DasDesc* pThis, const char* sName, bool bVal ); /** Set property of type DatumRange (double, double, UnitType triple) * @memberof DasDesc */ DAS_API DasErrCode DasDesc_setDatumRng( - DasDesc* pThis, const char * sName, double beg, double end, - das_units units + DasDesc* pThis, const char* sName, double beg, double end, das_units units ); /** Get a property of type DatumRange with unconverted strings. @@ -477,7 +526,7 @@ DAS_API DasErrCode DasDesc_getStrRng( * @memberof DasDesc */ DAS_API DasErrCode DasDesc_setFloatAry( - DasDesc* pThis, const char * propertyName, int nitems, float *value + DasDesc* pThis, const char* sName, int nitems, float *value ); /** Deepcopy properties into a descriptor diff --git a/das2/property.c b/das2/property.c new file mode 100644 index 0000000..7bbcfc3 --- /dev/null +++ b/das2/property.c @@ -0,0 +1,193 @@ +/* Copyright (C) 2024 Chris Piker (re-written, new storage) + * + * This file is part of das2C, the Core Das2 C Library. + * + * Das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with das2C; if not, see . + */ + +#define _POSIX_C_SOURCE 200112L + +#include "property.h" + +/* The property flags (32 bits total), most not used, listed high byte + (Actual memory is backwards to chart below for an x86_64 machine) + +3 2 1 0 + 76543210 76543210 76543210 76543210 76543210 76543210 76543210 76543210 ++--------+--------+--------+--------+--------+--------+--------+--------+ +| |sep_char| total length |valoff |TTTT MM| ++--------+--------+--------+--------+--------+--------+--------+--------+ +*/ + +#define DASPROP_MULTI_MASK 0x00000003 /* MM */ +#define DASPROP_INVALID 0x00000000 +/* #define DASPROP_SINGLE 0x00000001 */ +/* #define DASPROP_RANGE 0x00000002 */ +/* #define DASPROP_SET 0x00000003 */ + +#define DASPROP_TYPE_MASK 0x000000F0 /* TTTT */ +/* #define DASPROP_STRING 0x00000010 */ +/* #define DASPROP_BOOL 0x00000020 */ +/* #define DASPROP_INT 0x00000030 */ +/* #define DASPROP_REAL 0x00000040 */ +/* #define DASPROP_DATETIME 0x00000050 */ + +#define DASPROP_NLEN_MASK 0x00007F00 /* value offset (max 128 bytes) */ +#define DASPROP_NLEN_SHIFT 8 +#define DASPROP_TLEN_MASK 0xFFFF8000 /* Total length (max 131,072 bytes) */ +#define DASPROP_TLEN_SHIFT 15 + +#define DASPROP_NMAX_SZ 127 +#define DASPROP_VMAX_SZ 130943 /* leaves room for end null and val name */ + +#define DASPROP_MIN_MALLOC 8 + 8 + 4 /* Smallest possible property size */ + + +const char* DasProp_name(const DasProp* pProp) +{ + if(! (pProp->flags & DASPROP_MULTI_MASK)) + return NULL; + return pProp->buffer; +} + +const char* DasProp_value(const DasProp* pProp) +{ + if(! (pProp->flags & DASPROP_MULTI_MASK)) + return NULL; + + const char* sBuf = pProp->buffer; + size_t uOffset = ((pProp->flags & DASPROP_NLEN_MASK) >> DASPROP_NLEN_SHIFT); + return sBuf + uOffset; +} + +/* Return das2 types, there are more types then this */ +const char* DasProp_type2(const DasProp* pProp) +{ + uint32_t uMulti = pProp->flags & DASPROP_MULTI_MASK; + if(!uMulti) + return NULL; + + switch(pProp->flags & DASPROP_TYPE_MASK){ + case DASPROP_BOOL: return "boolean"; + case DASPROP_REAL: + if(pProp->units == UNIT_DIMENSIONLESS){ + if(uMulti == DASPROP_RANGE) + return "doubleArray" + else + return "double"; + } + else{ + if(uMulti == DASPROP_RANGE) + return "DatumRange"; + else + return "Datum"; + } + case DASPROP_INT: return "int"; + default: return "String"; + } +} + +byte DasProp_typeCode(const DasProp* pProp){ + if(! (pProp->flags & DASPROP_MULTI_MASK)) + return 0; + else + return (pProp->flags & 0xFF); +} + +DasProp* DasProp_append( + DasAry* pSink, byte type, byte multi, char cSep, const char* sName, + const char* sValue, das_units units, bool bStrict +){ + // check arguments, empty value is okay, null value is not + if( + (type == 0)||(multi == 0)||(sName == NULL)||(sValue == NULL)|| + (sName[0] == '\0')||((type >> 4)<1)||((type >> 4)>5)|| + (multi < 1)||(multi > 3)|| + ((multi == DASPROP_SET)&&(cSep < 0x21)||(cSep > 0x7F)) + ){ + das_error(DASERR_PROP, "Invalid argument to property creator"); + return NULL; + } + + size_t uLen = 8 + sizeof(das_units); // first two fields + + size_t uNameLen = strlen(sName); + + /* handle odd stuff from Das1 DSDFs only if an internal switch is thrown */ + if(!bStrict){ + for(size_t u = 0; u < uNameLen; ++u) + if(!isalnum(sName[i]) && (sName[i] != '_')) + return das_error(DASERR_PROP, "Invalid property name '%s'", sName); + } + sizeof(DasProp); // This is the minimal size + + + + +} + + +DasProp* DasProp_append2( + DasAry* pSink, const char* sType, const char* sName, const char* sValue, bool bStrict +){ + +if(sType == NULL) sType = "String"; + if(sName == NULL) return das_error(DASERR_DESC, "Null value for sName"); + + if(strlen(sType) < 2 ) + return das_error(DASERR_DESC, "Property type '%s' is too short.", sType); + + char** pProps = pThis->properties; + char sBuf[128] = {'\0'}; + int iProp=-1; + + /* Look for the prop string skipping over holes */ + for(i=0; i < DAS_XML_MAXPROPS; i+=2 ){ + if( pProps[i] == NULL ) continue; + snprintf(sBuf, 128, "%s:%s", sType, sName); + if (strcmp( pProps[i], sBuf )==0 ) iProp= i; + } + + size_t uLen; + if(iProp == -1){ + /* Look for the lowest index slot for the property */ + for(i=0; i< DAS_XML_MAXPROPS; i+= 2){ + if( pProps[i] == NULL){ iProp = i; break;} + } + if(iProp == -1){ + return das_error(DASERR_DESC, "Descriptor exceeds the max number of " + "properties %d", DAS_XML_MAXPROPS/2); + } + if(sType != NULL){ + uLen = strlen(sType) + strlen(sName) + 2; + pProps[iProp] = (char*)calloc(uLen, sizeof(char)); + snprintf(pProps[iProp], uLen, "%s:%s", sType, sName); + } + /* pProps[iProp+2]= NULL; */ + } else { + free( pProps[iProp+1] ); + } + + /* own it */ + if((sVal != NULL) && (strlen(sVal) > 0)){ + pProps[iProp+1]= (char*)calloc(strlen(sVal)+1, sizeof(char)); + strcpy( pProps[iProp+1], sVal ); + } + else{ + pProps[iProp+1] = NULL; + } + + + + +} \ No newline at end of file diff --git a/das2/property.h b/das2/property.h new file mode 100644 index 0000000..5f8c49f --- /dev/null +++ b/das2/property.h @@ -0,0 +1,125 @@ +/* Copyright (C) 2024 Chris Piker + * + * This file is part of das2C, the Core Das2 C Library. + * + * Das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with das2C; if not, see . + */ + +/** @file property.h */ + +#ifndef _property_h_ +#define _property_h_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** Object properties. + * + * These are designed to fit into continuous DasAry structures. Each property + * has: + * A name, a datatype code, a multiplicity flag, a validity state, units + * and the property buffer. + * + * These are put into continuous arrays by over stating the bytes on purpose + */ +typedef struct das_prop { + uint64_t flags; // property type, validity, value offset + das_units units; // Units, if any + char[16] buffer; // A buffer for the property name and value, + // typically over-malloc'ed. +} DasProp; + +/** Utility: Given a name and value, calculate the required storage size for + * a property. Returns 0 for an invalid property */ +size_t dasprop_memsz(const char* sName, const char* sValue); + +#define DAS_PROP_EMPTY {0x0ULL, UNIT_DIMENSIONLESS, {'\0'}} + +const char* DasProp_name(const DasProp* pProp); + +const char* DasProp_value(const DasProp* pProp); + +/** Get a das2 compatable property type */ +const char* DasProp_type2(const DasProp* pProp); + +/** Get a property type code. + * @returns The type code, which is a two part value. The low nibble + * contains the multiplicity, the high nibble contains the type. */ +byte DasProp_typeCode(const DasProp* pProp); + +/** Mark this property as invalid, a non-reversable operation */ +void DasProp_invalid(DasProp* pProp); + +#define DASPROP_VALID_MASK 0x00000003 // If these bits are 0, the property +#define DASPROP_SINGLE 0x00000001 // is invalid, ignore it. +#define DASPROP_RANGE 0x00000002 +#define DASPROP_SET 0x00000003 + +#define DASPROP_STRING 0x00000010 +#define DASPROP_BOOL 0x00000020 +#define DASPROP_INT 0x00000030 +#define DASPROP_REAL 0x00000040 +#define DASPROP_DATETIME 0x00000050 + +/** Make a new property directly in a das array without extra mallocs + * + * @param pSink A DasAry of type vtByte that is ragged in the last index + * The last index must be ragged because properties are of + * variable length + * + * @param type All values are stored as UTF-8 strings, but this field + * provides the semantic type of the property. Use one of + * the values: + * DASPROP_STRING, DASPROP_BOOL, DASPROP_INT, DASPROP_REAL, + * DASPROP_DATETIME + * + * @param multi The multiplicity of the values, use one of the settings: + * DASPROP_SINGLE, DASPROP_RANGE, DASPROP_SET + * + * @param cSep A separator character if multi=DASPROP_SET, otherwise + * ignored. If this is a set then cCep must be a 7-bit + * ascii character in the range 0x21 through 0x7E (aka a + * printable). + * + * @param sName The name of the property, can be no longer then 127 + * bytes. This is a looser restriction then associated XSDs. + * + * @param sValue The data value, can be no longer then 130,943 bytes. + * + * @param units The units for this value. If units are UNIT_DIMENSIONLESS + * then this value is not considered a Datum for das v2.2 + * compatability purposes + * + * @param bStrict If true, names must not contain any characters other + * then [a-z][A-Z][0-9] and '_'. + * + */ +DasProp* DasProp_append( + DasAry* pSink, byte type, byte multi, char cSep, const char* sName, + const char* sValue, das_units units, bool bStrict +); + +/** A das2 compatable version of DasProp_append() above. + * + * This version parses the sType string to set the type and multiplicity + * codes and potentially the units. + */ +DasProp* DasProp_append2( + DasAry* pSink, const char* sType, const char* sName, const char* sValue, bool bStrict +); + +// 1100 = 8 + 4 = 12 = C \ No newline at end of file diff --git a/das2/util.h b/das2/util.h index dbca298..8078db7 100644 --- a/das2/util.h +++ b/das2/util.h @@ -172,6 +172,7 @@ DasErrCode das_error_func_fixed( * - @b 34 : operater.c - DASERR_OP * - @b 35 : credentials.c - DASERR_CRED * - @b 36 : catalog.c - DASERR_CAT + * - @b 37 : property.c - DASERR_PROP * * Application programs are recommended to use values 64 and above to avoid * colliding with future das2 error codes. From 78ad919c56b9b6ef09101eefc261da829903ac5d Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Wed, 17 Jan 2024 23:20:57 -0600 Subject: [PATCH 02/40] Draft reworked properties descriptor --- buildfiles/Android.mak | 10 +- buildfiles/CMakeLists.txt | 2 +- buildfiles/Darwin.arm64.mak | 11 +- buildfiles/Darwin.mak | 11 +- buildfiles/Linux.mak | 11 +- buildfiles/SunOS.mak | 2 +- buildfiles/Windows.mak | 24 +-- buildfiles/conda/README.md | 2 +- buildfiles/conda/meta.yaml | 4 +- buildfiles/meson.build | 4 +- buildfiles/rpm/das2C.spec | 4 +- das2/descriptor.c | 374 ++++++++++++++++++++++-------------- das2/descriptor.h | 13 +- das2/property.c | 242 ++++++++++++++--------- das2/property.h | 60 ++---- test/TestEls.c | 74 +++++++ xmake.lua | 2 +- 17 files changed, 531 insertions(+), 319 deletions(-) create mode 100644 test/TestEls.c diff --git a/buildfiles/Android.mak b/buildfiles/Android.mak index 04e97e5..e5dd5c9 100644 --- a/buildfiles/Android.mak +++ b/buildfiles/Android.mak @@ -1,19 +1,19 @@ ############################################################################## # Project definitions -TARG=libdas2.3.a +TARG=libdas3.0.a # In rough dependency order SRCS=time.c das1.c util.c log.c buffer.c utf8.c value.c time.c tt2000.c units.c \ operator.c datum.c array.c encoding.c variable.c descriptor.c dimension.c \ - dataset.c plane.c packet.c stream.c processor.c oob.c io.c builder.c dsdf.c \ - credentials.c http.c dft.c json.c node.c + dataset.c plane.c packet.c stream.c processor.c property.c oob.c io.c builder.c \ + dsdf.c credentials.c http.c dft.c json.c node.c HDRS=defs.h time.h das1.h util.h log.h buffer.h utf8.h value.h units.h \ tt2000.h operator.h datum.h array.h encoding.h variable.h descriptor.h \ - dimension.h dataset.h plane.h packet.h stream.h processor.h oob.h io.h \ - builder.h dsdf.h credentials.h http.h dft.h json.h node.h core.h + dimension.h dataset.h plane.h packet.h stream.h processor.h property.h oob.h \ + io.h builder.h dsdf.h credentials.h http.h dft.h json.h node.h core.h UTIL_PROGS=das1_inctime das2_prtime das1_fxtime das2_ascii das2_bin_avg \ das2_bin_avgsec das2_bin_peakavgsec das2_from_das1 das2_from_tagged_das1 \ diff --git a/buildfiles/CMakeLists.txt b/buildfiles/CMakeLists.txt index ca04c2b..d3ae2ed 100644 --- a/buildfiles/CMakeLists.txt +++ b/buildfiles/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.16.3) # Default on ubuntu20. -project(das2C VERSION 2.3.0 LANGUAGES C ) +project(das2C VERSION 3.0.0 LANGUAGES C ) set(CMAKE_C_STANDARD 99) diff --git a/buildfiles/Darwin.arm64.mak b/buildfiles/Darwin.arm64.mak index fefb47e..4210a30 100644 --- a/buildfiles/Darwin.arm64.mak +++ b/buildfiles/Darwin.arm64.mak @@ -9,17 +9,18 @@ export DIFFCMD := diff ############################################################################## # Project definitions -TARG=libdas2.3.a +TARG=libdas3.0.a SRCS:=das1.c array.c buffer.c builder.c cli.c credentials.c dataset.c datum.c \ descriptor.c dft.c dimension.c dsdf.c encoding.c http.c io.c json.c log.c \ -node.c oob.c operator.c packet.c plane.c processor.c send.c stream.c time.c \ -tt2000.c units.c utf8.c util.c value.c variable.c +node.c oob.c operator.c packet.c plane.c processor.c property.c send.c stream.c \ +time.c tt2000.c units.c utf8.c util.c value.c variable.c HDRS:=defs.h time.h das1.h util.h log.h buffer.h utf8.h value.h units.h \ tt2000.h operator.h datum.h array.h encoding.h variable.h descriptor.h \ - dimension.h dataset.h plane.h packet.h stream.h processor.h oob.h io.h \ - builder.h dsdf.h credentials.h http.h dft.h json.h node.h cli.h send.h core.h + dimension.h dataset.h plane.h packet.h stream.h processor.h property.h oob.h \ + io.h builder.h dsdf.h credentials.h http.h dft.h json.h node.h cli.h send.h \ + core.h ifeq ($(SPICE),yes) SRCS:=$(SRCS) spice.c diff --git a/buildfiles/Darwin.mak b/buildfiles/Darwin.mak index f67f872..9f3db45 100644 --- a/buildfiles/Darwin.mak +++ b/buildfiles/Darwin.mak @@ -6,17 +6,18 @@ export DIFFCMD := diff ############################################################################## # Project definitions -TARG=libdas2.3.a +TARG=libdas3.0.a SRCS:=das1.c array.c buffer.c builder.c cli.c credentials.c dataset.c datum.c \ descriptor.c dft.c dimension.c dsdf.c encoding.c http.c io.c json.c log.c \ -node.c oob.c operator.c packet.c plane.c processor.c send.c stream.c time.c \ -tt2000.c units.c utf8.c util.c value.c variable.c +node.c oob.c operator.c packet.c plane.c processor.c property.c send.c stream.c \ +time.c tt2000.c units.c utf8.c util.c value.c variable.c HDRS:=defs.h time.h das1.h util.h log.h buffer.h utf8.h value.h units.h \ tt2000.h operator.h datum.h array.h encoding.h variable.h descriptor.h \ - dimension.h dataset.h plane.h packet.h stream.h processor.h oob.h io.h \ - builder.h dsdf.h credentials.h http.h dft.h json.h node.h cli.h send.h core.h + dimension.h dataset.h plane.h packet.h stream.h processor.h property.h oob.h \ + io.h builder.h dsdf.h credentials.h http.h dft.h json.h node.h cli.h send.h \ + core.h ifeq ($(SPICE),yes) SRCS:=$(SRCS) spice.c diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index 40e7c9e..ed84cae 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -7,17 +7,18 @@ export MD5SUM ############################################################################## # Project definitions -TARG=libdas2.3 +TARG=libdas3.0 SRCS:=das1.c array.c buffer.c builder.c cli.c credentials.c dataset.c datum.c \ descriptor.c dft.c dimension.c dsdf.c encoding.c http.c io.c json.c log.c \ -node.c oob.c operator.c packet.c plane.c processor.c send.c stream.c time.c \ -tt2000.c units.c utf8.c util.c value.c variable.c +node.c oob.c operator.c packet.c plane.c processor.c property.c send.c \ +stream.c time.c tt2000.c units.c utf8.c util.c value.c variable.c HDRS:=defs.h time.h das1.h util.h log.h buffer.h utf8.h value.h units.h \ tt2000.h operator.h datum.h array.h encoding.h variable.h descriptor.h \ - dimension.h dataset.h plane.h packet.h stream.h processor.h oob.h io.h \ - builder.h dsdf.h credentials.h http.h dft.h json.h node.h cli.h send.h core.h + dimension.h dataset.h plane.h packet.h stream.h processor.h property.h oob.h \ + io.h builder.h dsdf.h credentials.h http.h dft.h json.h node.h cli.h send.h \ + core.h ifeq ($(SPICE),yes) SRCS:=$(SRCS) spice.c diff --git a/buildfiles/SunOS.mak b/buildfiles/SunOS.mak index e45018b..3ae1a6d 100644 --- a/buildfiles/SunOS.mak +++ b/buildfiles/SunOS.mak @@ -13,7 +13,7 @@ export MD5SUM ############################################################################## # Project definitions -TARG=libdas2.3 +TARG=libdas3.0 SRCS=time.c das1.c util.c log.c buffer.c utf8.c value.c tt2000.c units.c \ operator.c datum.c array.c encoding.c variable.c descriptor.c dimension.c \ diff --git a/buildfiles/Windows.mak b/buildfiles/Windows.mak index 9395e53..29c2181 100644 --- a/buildfiles/Windows.mak +++ b/buildfiles/Windows.mak @@ -3,7 +3,7 @@ MAKE=nmake /nologo CC=cl.exe /nologo -TARG=das2.3 +TARG=das3.0 # Special environment variables on Windows that should not be overwritten # INCLUDE @@ -31,9 +31,9 @@ SRCS=$(SD)\das1.c $(SD)\array.c $(SD)\buffer.c $(SD)\builder.c $(SD)\cli.c \ $(SD)\credentials.c $(SD)\dataset.c $(SD)\datum.c $(SD)\descriptor.c \ $(SD)\dft.c $(SD)\dimension.c $(SD)\dsdf.c $(SD)\encoding.c $(SD)\http.c \ $(SD)\io.c $(SD)\json.c $(SD)\log.c $(SD)\node.c $(SD)\oob.c $(SD)\operator.c \ - $(SD)\packet.c $(SD)\plane.c $(SD)\processor.c $(SD)\send.c $(SD)\stream.c \ - $(SD)\time.c $(SD)\tt2000.c $(SD)\units.c $(SD)\utf8.c $(SD)\util.c \ - $(SD)\value.c $(SD)\variable.c + $(SD)\packet.c $(SD)\plane.c $(SD)\processor.c $(SD)\property.c $(SD)\send.c \ + $(SD)\stream.c $(SD)\time.c $(SD)\tt2000.c $(SD)\units.c $(SD)\utf8.c \ + $(SD)\util.c $(SD)\value.c $(SD)\variable.c LD=$(BD)\static @@ -42,9 +42,9 @@ STATIC_OBJS=$(LD)\das1.obj $(LD)\array.obj $(LD)\buffer.obj $(LD)\builder.obj \ $(LD)\descriptor.obj $(LD)\dft.obj $(LD)\dimension.obj $(LD)\dsdf.obj \ $(LD)\encoding.obj $(LD)\http.obj $(LD)\io.obj $(LD)\json.obj $(LD)\log.obj \ $(LD)\node.obj $(LD)\oob.obj $(LD)\operator.obj $(LD)\packet.obj \ - $(LD)\plane.obj $(LD)\processor.obj $(LD)\send.obj $(LD)\stream.obj \ - $(LD)\time.obj $(LD)\tt2000.obj $(LD)\units.obj $(LD)\utf8.obj $(LD)\util.obj \ - $(LD)\value.obj $(LD)\variable.obj + $(LD)\plane.obj $(LD)\processor.obj $(LD)\property.obj $(LD)\send.obj \ + $(LD)\stream.obj $(LD)\time.obj $(LD)\tt2000.obj $(LD)\units.obj \ + $(LD)\utf8.obj $(LD)\util.obj $(LD)\value.obj $(LD)\variable.obj DD=$(BD)\shared DLL_OBJS=$(DD)\das1.obj $(DD)\array.obj $(DD)\buffer.obj $(DD)\builder.obj \ @@ -52,16 +52,16 @@ DLL_OBJS=$(DD)\das1.obj $(DD)\array.obj $(DD)\buffer.obj $(DD)\builder.obj \ $(DD)\descriptor.obj $(DD)\dft.obj $(DD)\dimension.obj $(DD)\dsdf.obj \ $(DD)\encoding.obj $(DD)\http.obj $(DD)\io.obj $(DD)\json.obj $(DD)\log.obj \ $(DD)\node.obj $(DD)\oob.obj $(DD)\operator.obj $(DD)\packet.obj \ - $(DD)\plane.obj $(DD)\processor.obj $(DD)\send.obj $(DD)\stream.obj \ - $(DD)\time.obj $(DD)\tt2000.obj $(DD)\units.obj $(DD)\utf8.obj $(DD)\util.obj \ - $(DD)\value.obj $(DD)\variable.obj + $(DD)\plane.obj $(DD)\processor.obj $(DD)\property.obj $(DD)\send.obj \ + $(DD)\stream.obj $(DD)\time.obj $(DD)\tt2000.obj $(DD)\units.obj \ + $(DD)\utf8.obj $(DD)\util.obj $(DD)\value.obj $(DD)\variable.obj HDRS=$(SD)\das1.h $(SD)\array.h $(SD)\buffer.h $(SD)\builder.h $(SD)\core.h \ $(SD)\cli.h $(SD)\credentials.h $(SD)\dataset.h $(SD)\datum.h $(SD)\descriptor.h \ $(SD)\defs.h $(SD)\dft.h $(SD)\dimension.h $(SD)\dsdf.h $(SD)\encoding.h $(SD)\http.h \ $(SD)\io.h $(SD)\json.h $(SD)\log.h $(SD)\node.h $(SD)\oob.h $(SD)\operator.h \ - $(SD)\packet.h $(SD)\plane.h $(SD)\processor.h $(SD)\send.h $(SD)\stream.h \ - $(SD)\time.h $(SD)\tt2000.h $(SD)\units.h $(SD)\utf8.h $(SD)\util.h \ + $(SD)\packet.h $(SD)\plane.h $(SD)\processor.h $(SD)\property.h $(SD)\send.h \ + $(SD)\stream.h $(SD)\time.h $(SD)\tt2000.h $(SD)\units.h $(SD)\utf8.h $(SD)\util.h \ $(SD)\value.h $(SD)\variable.h UTIL_PROGS=$(BD)\das1_inctime.exe $(BD)\das2_prtime.exe $(BD)\das1_fxtime.exe \ diff --git a/buildfiles/conda/README.md b/buildfiles/conda/README.md index d71ae59..8184314 100644 --- a/buildfiles/conda/README.md +++ b/buildfiles/conda/README.md @@ -79,7 +79,7 @@ conda install -c dasdevelopers pthreads4w 4. Upload to anaconda.org ```bash - (base) $ anaconda upload -u dasdevelopers /Users/cwp/conda-bld/osx-64/das2C-2.3-pre3-py38h1de35cc_0.tar.bz2 + (base) $ anaconda upload -u dasdevelopers /Users/cwp/conda-bld/osx-64/das2C-3.0-pre3-py38h1de35cc_0.tar.bz2 # for example, your exact name will be different ``` diff --git a/buildfiles/conda/meta.yaml b/buildfiles/conda/meta.yaml index 7c3f6f1..3df5da3 100644 --- a/buildfiles/conda/meta.yaml +++ b/buildfiles/conda/meta.yaml @@ -6,8 +6,8 @@ # openssl sha256 das2C-tmp.tar.gz | awk '{print $2}' {% set name = "das2c" %} -{% set conda_version = "2.3.0" %} -{% set git_version = "2.3.0" %} +{% set conda_version = "3.0.0" %} +{% set git_version = "3.0.0" %} {% set sha256 = "c20ce7623d6761c3de29934d0578084f442c00392fa4e82ee1bf1a3a2c29e5c5" %} package: diff --git a/buildfiles/meson.build b/buildfiles/meson.build index ef57449..9f27ebd 100644 --- a/buildfiles/meson.build +++ b/buildfiles/meson.build @@ -1,5 +1,5 @@ project('das2C', 'c', - version : '2.3.p3', + version : '3.0.0', license : 'LGPL-2.1-only', default_options : ['warning_level=2', 'c_std=c99'] ) @@ -147,6 +147,6 @@ test('Index Mapping Variables', exe_test_vars) pkg_mod = import('pkgconfig') pkg_mod.generate( - libraries : lib_das2, version : '2.3', name : 'libdas2', filebase : 'das2', + libraries : lib_das2, version : '3.0', name : 'libdas2', filebase : 'das2', description : 'Space physics data stream utilities' ) diff --git a/buildfiles/rpm/das2C.spec b/buildfiles/rpm/das2C.spec index af2bc66..1d0778e 100644 --- a/buildfiles/rpm/das2C.spec +++ b/buildfiles/rpm/das2C.spec @@ -1,6 +1,6 @@ Name: das2C -Version: 2.3.0 -%global tagver 2.3.0 +Version: 3.0.0 +%global tagver 3.0.0 Release: 1%{?dist} Summary: das2 stream utilities and catalog client in C diff --git a/das2/descriptor.c b/das2/descriptor.c index b6f7dfc..983bb99 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -219,11 +219,19 @@ const char* DasDesc_getType(const DasDesc* pThis, const char* sName) { const DasProp* pProp = _DasDesc_getProp(pThis, sName); if(pProp != NULL) - return DasProp_type2(pProp); + return DasProp_typeStr2(pProp); return NULL; } +das_units DasDesc_getUnits(const DasDesc* pThis, const char* sName) +{ + const DasProp* pProp = _DasDesc_getProp(pThis, sName); + if(pProp != NULL) + return pProp->uints; + return UNIT_DIMENSIONLESS; +} + bool DasDesc_has(const DasDesc* pThis, const char* sName) { @@ -333,55 +341,39 @@ bool _Desc_looksLikeTime(const char* sVal) double DasDesc_getDatum(DasDesc* pThis, const char* sName, das_units units) { - const char* sVal; - const char* idx; - double rValue; - double rResult; - das_units unitsVal; - bool bIsTimeStr = false; - das_time dt = {0}; - - if( (sVal = DasDesc_get(pThis, sName )) == NULL) return DAS_FILL_VALUE; - - idx= strchr( sVal, ' ' ); - if(idx == NULL){ + const DasProp* pProp = _DasDesc_getProp(pThis, sName); + if(pProp == NULL) return DAS_FILL_VALUE; + + const char* sValue = DasProp_value(pProp); + + // Can't convert calendar units to non calendar units + if(!Units_canConvert(pProp->units, units)){ + das_error("Can't convert property units of type %s to %s", pProp->units, units); + return DAS_FILL_VALUE; + } + + /* If these are calendar units and I look like time, use parse time */ + if(Units_haveCalRep(pProp->units) || (pProp->units == UNIT_DIMENSIONLESS)) + { /* If the units string is null, assume dimensionless unless the value looks like a Time string */ - bIsTimeStr = _Desc_looksLikeTime(sVal); - - if(bIsTimeStr) - unitsVal = UNIT_US2000; - else - unitsVal = UNIT_DIMENSIONLESS; - } - else { - unitsVal= Units_fromStr( idx+1 ); - } - - if(!bIsTimeStr){ - if( sscanf(sVal, "%lf", &rValue) != 1){ - das_error(DASERR_DESC, "Couldn't parse %s as a real value", sVal); - return DAS_FILL_VALUE; - } - if(strcmp(unitsVal, units) == 0){ - rResult = rValue; - } - else{ - if(Units_canConvert(unitsVal, units)) - rResult = Units_convertTo(units, rValue, unitsVal); - else - rResult = DAS_FILL_VALUE; + if(_Desc_looksLikeTime(sValue)){ + das_time dt; + if(!dt_parsetime(sValue, &dt)){ + das_error(DASERR_DESC, "Couldn't parse %s as a date time", sVal); + return DAS_FILL_VALUE; + } + return Units_convertFromDt(pProp->units, &dt); } } - else{ - if(! dt_parsetime(sVal, &dt) ){ - das_error(DASERR_DESC, "Couldn't parse %s as a date time", sVal); - return DAS_FILL_VALUE; - } - rResult = Units_convertFromDt(unitsVal, &dt); + + double rValue; + if( sscanf(sValue, "%lf", &rValue) != 1){ + das_error(DASERR_DESC, "Couldn't parse %s as a real value", sVal); + return DAS_FILL_VALUE; } - - return rResult; + + return Units_convertTo(units, rValue, pProp->units); } double* DasDesc_getDoubleAry(DasDesc* pThis, const char* sName, int* pNumItems) @@ -435,23 +427,22 @@ static byte* _DasDesc_getPropBuf(DasDesc* pThis, const char* sName, size_t* pPro /* copies the property into the property array */ DasErrCode DasDesc_set( - DasDesc* pThis, const char* sType, const char* sName, const char* sVal + DasDesc* pThis, const char* sType, const char* sName, const char* sVal, + das_units units ){ - int nRet = dasprop_check2(sType, sName, sVal); - if(nRet != 0) - return nRet; - size_t uNewSz = dasprop_memsz(sName, sVal); size_t uOldSz = 0; byte* pBuf = _DasDesc_getPropBuf(pThis, sName, &uOldSz); if(pBuf != NULL){ if(uNewSz <= uOldSz) - return DasProp_init2(pBuf, uBufSz, sType, sName, sValue, !pThis->bLooseParsing); + return DasProp_init2( + pBuf, uBufSz, sType, sName, sValue, units, !pThis->bLooseParsing + ); // Nope, mark it as invalid and do a normal insert - DasDesc_invalid((DasProp*)pBuf); + DasProp_invalid((DasProp*)pBuf); ++(pThis->uInvalid); } @@ -466,13 +457,13 @@ DasErrCode DasDesc_set( pBuf = DasAry_getBuff(pProps, DIM1_AT(-1), &uTmp); assert(uTmp == uNewSz); - return DasProp_init2(pBuf, uNewSz, sType, sName, sValue, !pThis->bLooseParsing); + return DasProp_init2(pBuf, uNewSz, sType, sName, sValue, units, !pThis->bLooseParsing); } DasErrCode DasDesc_setStr( DasDesc* pThis, const char* sName, const char * sVal ) { - return DasDesc_set( pThis, "String", sName, sVal); + return DasDesc_set( pThis, "String", sName, sVal, UNIT_DIMENSIONLESS); } DasErrCode DasDesc_vSetStr( @@ -507,7 +498,7 @@ DasErrCode DasDesc_vSetStr( return das_error(DASERR_DESC, "Unable to malloc %d bytes", nLen); } - DasErrCode nRet = DasDesc_set(pThis, "String", sName, sVal); + DasErrCode nRet = DasDesc_set(pThis, "String", sName, sVal, UNIT_DIMENSIONLESS); free(sVal); return nRet; } @@ -516,7 +507,7 @@ DasErrCode DasDesc_setBool(DasDesc* pThis, const char* sName, bool bVal) { const char* value = "false"; if(bVal) value = "true"; - return DasDesc_set(pThis, "boolean", sName, value); + return DasDesc_set(pThis, "boolean", sName, value, UNIT_DIMENSIONLESS); } DasErrCode DasDesc_setDatum( @@ -524,12 +515,12 @@ DasErrCode DasDesc_setDatum( ) { char buf[50] = {'\0'}; - if ( fabs(rVal)>1e10 ) { - sprintf(buf, "%e %s", rVal, Units_toStr( units ) ); - } else { - sprintf( buf, "%f %s", rVal, Units_toStr( units ) ); - } - return DasDesc_set( pThis, "Datum", sName, buf ); + if ( fabs(rVal)>1e10 ) + sprintf(buf, "%e", rVal); + else + sprintf( buf, "%f", rVal); + + return DasDesc_set( pThis, "Datum", sName, buf, units); } DasErrCode DasDesc_setDatumRng( @@ -538,11 +529,11 @@ DasErrCode DasDesc_setDatumRng( char buf[50] = {'\0'}; if ( fabs(beg)>1e10 || fabs(end)>1e10 ) { - snprintf( buf, 49, "%e to %e %s", beg, end, Units_toStr( units ) ); + snprintf( buf, 49, "%e to %e", beg, end ); } else { - snprintf( buf, 49, "%f to %f %s", beg, end, Units_toStr( units ) ); + snprintf( buf, 49, "%f to %f", beg, end ); } - return DasDesc_set( pThis, "DatumRange", sName, buf ); + return DasDesc_set( pThis, "DatumRange", sName, buf, units); } DasErrCode DasDesc_getStrRng( @@ -550,23 +541,25 @@ DasErrCode DasDesc_getStrRng( das_units* pUnits, size_t uLen ){ if(uLen < 2) das_error(DASERR_DESC, "uLen too small (%zu bytes)", uLen); + + const DasProp* pProp = DasDesc_getProp(pThis, sName); + + if(pProp == NULL) + return das_error(DASERR_DESC, "Property %s not present in descriptor", sName); - const char* sVal = NULL; char buf[128] = {'\0'}; char* pBeg = buf; char* pEnd = NULL; das_time dt = {0}; /* Copy everything up to the first | character */ - if( (sVal = DasDesc_getStr(pThis, sName)) == NULL){ - return das_error(DASERR_DESC, "Property %s not present in descriptor", sName); - } - pEnd = (char*)strchr(sVal, '|'); + const char* sValue = DasProp_value(pProp); + + pEnd = (char*)strchr(sValue, '|'); if(pEnd != NULL) - strncpy(buf, sVal, pEnd - sVal); + strncpy(buf, sValue, pEnd - sValue); else - strncpy(buf, sVal, 127); - + strncpy(buf, sValue, 127); if( (pEnd = strchr(pBeg, ' ')) == NULL) goto ERROR; if(pEnd == pBeg) goto ERROR; @@ -599,19 +592,8 @@ DasErrCode DasDesc_getStrRng( dt_now(&dt); dt_isoc(sMax, 63, &dt, 0); } - - /* Now for the units, if we are at the end of the string check to see - * if the first item is convertable to a dastime, if so call the units - * UTC, if not call it dimensionless */ - if(pBeg == NULL){ - if(dt_parsetime(sMin, &dt)) - *pUnits = UNIT_UTC; - else - *pUnits = UNIT_DIMENSIONLESS; - } - else{ - *pUnits = Units_fromStr(pBeg); - } + + *pUnits = pProp->units; return DAS_OKAY; ERROR: @@ -627,56 +609,87 @@ DasErrCode DasDesc_setDouble(DasDesc* pThis, const char* sName, double rVal) } else { sprintf( buf, "%f", rVal ); } - return DasDesc_set( pThis, "double", sName, buf ); + return DasDesc_set( pThis, "double", sName, buf, UNIT_DIMENSIONLESS); } DasErrCode DasDesc_setInt(DasDesc* pThis, const char * sName, int nVal ) { char buf[50] = {'\0'}; sprintf( buf, "%d", nVal ); - return DasDesc_set( pThis, "int", sName, buf ); + return DasDesc_set( pThis, "int", sName, buf, UNIT_DIMENSIONLESS); } DasErrCode DasDesc_setDoubleArray( DasDesc* pThis, const char* sName, int nitems, double *value ){ - char* buf; - if ( nitems> 1000000 / 50 ) { - das_error(DASERR_DESC, "too many elements for DasDesc_setDoubleArray to handle" ); - } - buf= ( char * ) malloc( nitems * 50 ); - int nRet = DasDesc_set( pThis, "doubleArray", sName, - das_doubles2csv( buf, value, nitems ) ); - free( buf ); - return nRet; + char* buf; + if ( nitems> 1000000 / 50 ) { + das_error(DASERR_DESC, "too many elements for DasDesc_setDoubleArray to handle" ); + } + buf= ( char * ) malloc( nitems * 50 ); + int nRet = DasDesc_set( + pThis, "doubleArray", sName, das_doubles2csv( buf, value, nitems ), + UNIT_DIMENSIONLESS + ); + free( buf ); + return nRet; } DasErrCode DasDesc_setFloatAry( DasDesc* pThis, const char* sName, int nitems, float* value ){ - char* buf; - double dvalue[ 1000000 / 50 ]; - int i; - if ( nitems> 1000000 / 50 ) { - das_error(DASERR_DESC, "too many elements for DasDesc_setFloatArray to handle" ); - } - for ( i=0; iproperties[i]!=NULL ) && ( iproperties[i]= (char *)calloc( strlen( source->properties[i] )+1, sizeof(char) ); - strcpy( pThis->properties[i], source->properties[i] ); - } - if ( iproperties[i]=NULL; + char* buf; + double dvalue[ 1000000 / 50 ]; + int i; + if( nitems> 1000000 / 50 ) + das_error(DASERR_DESC, "too many elements for DasDesc_setFloatArray to handle" ); + + for( i=0; iproperties); + + size_t uProps = DasAry_lengthIn(pSrc, DIM0); + + for(size_t u = 0; u < uProps; ++u){ + size_t uNewLen = 0; + pProp = DasAry_getBytesIn(pProps, DIM1_AT(u), &uNewLen); + if(!DasProp_isValid(pProp)) + continue; + + size_t uOldLen = 0; + byte* pBuf = _DasDesc_getPropBuf(pThis, DasProp_name(pProp), &uOldLen); + if(pBuf != NULL){ + if(uNewLen <= uOldLen){ + // Since properties self-null, it's okay to have extra cruft after one of them + memcpy(pBuf, pProp, &uOldLen); + } + else{ + DasProp_invalid((DasProp*)pBuf); + } + } + else{ + if(!DasAry_append(pProps, NULL, uNewLen)) + return das_error("Couldn't create space for new property"); + DasAry_markEnd(pProps, DIM1); + + size_t uTmp; + pBuf = DasAry_getBytesIn(pProps, DIM1_AT(u), &uTmp); + assert(uTmp >= uNewLen) + memcpy(pBuf, pProp, uNewLen); + } + } } /* ************************************************************************* */ @@ -695,44 +708,111 @@ bool DasDesc_remove(DasDesc* pThis, const char* sName) } /* ************************************************************************* */ -/* Output */ +/* Output, das2 or das3 style */ -DasErrCode DasDesc_encode(DasDesc* pThis, DasBuf* pBuf, const char* sIndent) -{ - char** pProps = pThis->properties; - - if(*pProps == NULL) return 0; /* Successfully did nothing! */ - - DasErrCode nRet = 0; - if((nRet = DasBuf_printf(pBuf, "%sproperties); + + size_t u, uProps = DasAry_lengthIn(pProps, DIM0); + bool bAnyValid = false; + for(u = 0; u < uProps; ++u){ + size_t uPropLen = 0; + pProp = DasAry_getBytesIn(pProps, DIM1_AT(u), &uPropLen); + if(DasProp_isValid(pProp)){ + bAnyValid = true; + break; + } + } + if(!bAnyValid) + return DAS_OKAY; + + DasBuf_puts(pBuf, sIndent); + DasBuf_puts(pBuf, " 2) + DasBuf_puts(pBuf, ">\n"); - int i, j; - for(i = 0; pProps[i] != NULL; i += 2){ - + for(u = 0; u < uProps; ++u){ + size_t uPropLen = 0; + pProp = DasAry_getBytesIn(pProps, DIM1_AT(u), &uPropLen); + if(!DasProp_isValid(pProp)) + continue; + + const char* sName = DasProp_name(pProp); + /* In order to handle some Das1 stuff allow reading odd-ball property names such as label(1), but don't write things like this to disk*/ - for(j = 0; j < strlen(pProps[i]); j++) - if(!isalnum(pProps[i][j]) && (pProps[i][j] != '_') && (pProps[i][j] != ':')) - return das_error(DASERR_DESC, "Invalid property name '%s'", pProps[i]); + for(int j = 0; j < strlen(sName); j++) + if(!isalnum(sName[j]) && (sName[j] != '_') && (sName[j] != ':')) + return das_error(DASERR_DESC, "Invalid property name '%s'", sName); - if(i == 0){ - if(pProps[i+1] == NULL) - nRet = DasBuf_printf(pBuf, " %s=\"\"", pProps[i]); - else - nRet = DasBuf_printf(pBuf, " %s=\"%s\"", pProps[i], pProps[i+1]); + byte uType = DasProp_type(pProp); + + //const char* sType = DasProp_type2(pProp); + + DasBuf_puts(sIndent) + + // Type + if(nVer > 2){ + DasBuf_puts(pBuf, " 2){ + DasBuf_puts(pBuf, " name=\""); + DasBuf_puts(pBuf, sName); + DasBuf_puts(pBuf, "\""); + if(pProp->units != UNIT_DIMENSIONLESS){ + DasBuf_printf(pBuf, " units=\"%s\"", Units_fromStr(pProp-units)); + } + DasBuf_puts(pBuf, ">"); + } + else{ + DasBuf_puts(pBuf, sName); + DasBuf_puts(pBuf, "=\""); + } + + // Value + DasBuf_puts(pBuf, DasProp_value(pProp)); + + if(nVer > 3){ + nRet = DasBuf_puts(pBuf, "

\n"); + } + else{ + if(pProp->units != UNIT_DIMENSIONLESS) + nRet = DasBuf_printf(pBuf, " %s\"\n", Units_fromStr(pProp->units)); else - nRet = DasBuf_printf(pBuf, "\n%s %s=\"%s\"", sIndent, - pProps[i], pProps[i+1]); + nRet = DasBuf_puts(pBuf, "\"\n"); } + if(nRet != 0) return nRet; } - return DasBuf_printf(pBuf, "/>\n"); -} - + if(nVer > 2) + return DasBuf_printf(pBuf, "%s/>\n", sIndent); + else + return DasBuf_printf(pBuf, "%s/>\n", sIndent); +} +DasErrCode DasDesc_encode(DasDesc* pThis, DasBuf* pBuf, const char* sIndent) +{ + return _DasDesc_encode(DasDesc* pThis, DasBuf* pBuf, const char* sIndent, 2); +} +DasErrCode DasDesc_encode3(DasDesc* pThis, DasBuf* pBuf, const char* sIndent) +{ + return _DasDesc_encode(DasDesc* pThis, DasBuf* pBuf, const char* sIndent, 3); +} diff --git a/das2/descriptor.h b/das2/descriptor.h index d99965e..b3744ea 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -531,10 +531,10 @@ DAS_API DasErrCode DasDesc_setFloatAry( /** Deepcopy properties into a descriptor * @param pThis the descriptor to receive a copy of the properties - * @param source the descriptor with the properties to be copied. + * @param pOther the descriptor with the properties to be copied. * @memberof DasDesc */ -DAS_API void DasDesc_copyIn(DasDesc* pThis, const DasDesc* source ); +DAS_API void DasDesc_copyIn(DasDesc* pThis, const DasDesc* pOther); /** Encode a generic set of properties to a buffer * @@ -548,6 +548,15 @@ DAS_API DasErrCode DasDesc_encode( DasDesc* pThis, DasBuf* pBuf, const char* sIndent ); + +/** Encode a generic set of properties to a buffer, in das3 format */ + +DAS_API DasErrCode DasDesc_encode3( + DasDesc* pThis, DasBuf* pBuf, const char* sIndent +); + + + /** @} */ #ifdef __cplusplus diff --git a/das2/property.c b/das2/property.c index 7bbcfc3..b6ee914 100644 --- a/das2/property.c +++ b/das2/property.c @@ -25,17 +25,16 @@ 3 2 1 0 76543210 76543210 76543210 76543210 76543210 76543210 76543210 76543210 +--------+--------+--------+--------+--------+--------+--------+--------+ -| |sep_char| total length |valoff |TTTT MM| +| |sep_char| name+val length |valoff |TTTT MM| +--------+--------+--------+--------+--------+--------+--------+--------+ */ -#define DASPROP_MULTI_MASK 0x00000003 /* MM */ -#define DASPROP_INVALID 0x00000000 +/* #define DASPROP_INVALID 0x00000000 */ /* #define DASPROP_SINGLE 0x00000001 */ /* #define DASPROP_RANGE 0x00000002 */ /* #define DASPROP_SET 0x00000003 */ -#define DASPROP_TYPE_MASK 0x000000F0 /* TTTT */ +/* #define DASPROP_TYPE_MASK 0x000000F0 */ /* #define DASPROP_STRING 0x00000010 */ /* #define DASPROP_BOOL 0x00000020 */ /* #define DASPROP_INT 0x00000030 */ @@ -45,13 +44,33 @@ #define DASPROP_NLEN_MASK 0x00007F00 /* value offset (max 128 bytes) */ #define DASPROP_NLEN_SHIFT 8 #define DASPROP_TLEN_MASK 0xFFFF8000 /* Total length (max 131,072 bytes) */ -#define DASPROP_TLEN_SHIFT 15 +#define DASPROP_TLEN_SHIFT 15 + +#define DASPROP_SEP_SHIFT 32 #define DASPROP_NMAX_SZ 127 #define DASPROP_VMAX_SZ 130943 /* leaves room for end null and val name */ -#define DASPROP_MIN_MALLOC 8 + 8 + 4 /* Smallest possible property size */ +#define DASPROP_MIN_MALLOC 8 + 8 + 4 /* Smallest possible property size */ +#define DASPROP_MAX_MALLOC 8 + 8 + 131072; /* largest possible malloc 2^17 + 16 */ + + +size_t dasprop_memsz(const char* sName, const char* sValue) +{ + size_t sz = sizeof(uint64_t) + sizeof(das_units); + if(sName) sz += strlen(sName) + 1; + if(sValue) sz += strlen(sValue) + 1; + if(sz < DASPROP_MIN_MALLOC) + return DASPROP_MIN_MALLOC; + if(sz > DASPROP_MAX_MALLOC) + return DASPROP_MAX_MALLOC; + return sz; +} +void DasProp_invalid(DasProp* pProp) +{ + pProp->flags &= 0xFFFFFFFFFFFFFFFC; +} const char* DasProp_name(const DasProp* pProp) { @@ -70,8 +89,21 @@ const char* DasProp_value(const DasProp* pProp) return sBuf + uOffset; } -/* Return das2 types, there are more types then this */ -const char* DasProp_type2(const DasProp* pProp) +size_t DasProp_size(const DasProp* pProp) +{ + // Mask off total length and shift down. + uint64_t sz = (pProp->flags & DASPROP_TLEN_MASK) >> DASPROP_TLEN_SHIFT; + assert(sz <= DASPROP_VMAX_SZ); + sz += sizeof(uint64_t); + sz += sizeof(das_units); + return sz; +} + +/* Return das2 types, this includes all the documented ones from the + * das 2.2.2 ICD, as well as the undocumented ones that were previously + * allowed by the library. + */ +const char* DasProp_typeStr2(const DasProp* pProp) { uint32_t uMulti = pProp->flags & DASPROP_MULTI_MASK; if(!uMulti) @@ -92,102 +124,134 @@ const char* DasProp_type2(const DasProp* pProp) else return "Datum"; } - case DASPROP_INT: return "int"; + case DASPROP_INT: return "int"; + case DASPROP_DATETIME: + if(uMulti == DASPROP_RANGE) + return "TimeRange"; + else + return "Time"; default: return "String"; } } -byte DasProp_typeCode(const DasProp* pProp){ - if(! (pProp->flags & DASPROP_MULTI_MASK)) - return 0; - else - return (pProp->flags & 0xFF); -} - -DasProp* DasProp_append( - DasAry* pSink, byte type, byte multi, char cSep, const char* sName, - const char* sValue, das_units units, bool bStrict -){ - // check arguments, empty value is okay, null value is not - if( - (type == 0)||(multi == 0)||(sName == NULL)||(sValue == NULL)|| - (sName[0] == '\0')||((type >> 4)<1)||((type >> 4)>5)|| - (multi < 1)||(multi > 3)|| - ((multi == DASPROP_SET)&&(cSep < 0x21)||(cSep > 0x7F)) - ){ - das_error(DASERR_PROP, "Invalid argument to property creator"); - return NULL; - } - - size_t uLen = 8 + sizeof(das_units); // first two fields - - size_t uNameLen = strlen(sName); - - /* handle odd stuff from Das1 DSDFs only if an internal switch is thrown */ - if(!bStrict){ - for(size_t u = 0; u < uNameLen; ++u) - if(!isalnum(sName[i]) && (sName[i] != '_')) - return das_error(DASERR_PROP, "Invalid property name '%s'", sName); - } - sizeof(DasProp); // This is the minimal size - - - - +const char* DasProp_typeStr3(const DasProp* pProp) +{ + switch(pProp->flags & DASPROP_MULTI_MASK){ + case DASPROP_STRING |DASPROP_SINGLE: return "string"; + case DASPROP_STRING |DASPROP_SET: return "stringArray"; + case DASPROP_BOOL |DASPROP_SINGLE: return "bool"; + case DASPROP_BOOL |DASPROP_SET: return "boolArray"; + case DASPROP_INT |DASPROP_SINGLE: return "int"; + case DASPROP_INT |DASPROP_RANGE: return "intRange"; + case DASPROP_INT |DASPROP_SET: return "intArray"; + case DASPROP_REAL |DASPROP_SINGLE: return "real"; + case DASPROP_REAL |DASPROP_RANGE: return "realRange"; + case DASPROP_REAL |DASPROP_SET: return "realArray"; + case DASPROP_DATETIME|DASPROP_SINGLE: return "datetime"; + case DASPROP_DATETIME|DASPROP_RANGE: return "datetimeRange"; + case DASPROP_DATETIME|DASPROP_SET: return "datetimeArray"; + default: return NULL; +} + +byte DasProp_type(const DasProp* pProp){ + return (byte)(pProp->flags & DASPROP_TYPE_MASK); } - -DasProp* DasProp_append2( - DasAry* pSink, const char* sType, const char* sName, const char* sValue, bool bStrict +DasErrCode DasProp_init2( + byte* pBuf, size_t uBufSz, const char* sType, const char* sName, + const char* sValue, das_units units, bool bStrict ){ + byte flag = '\0'; -if(sType == NULL) sType = "String"; - if(sName == NULL) return das_error(DASERR_DESC, "Null value for sName"); + if((pBuf == NULL)||(uBufSz < dasprop_memsz(sName, sValue)) + return das_error(DASERR_PROP, "Property buffer is too small, %zu bytes", uBufSz); - if(strlen(sType) < 2 ) - return das_error(DASERR_DESC, "Property type '%s' is too short.", sType); - - char** pProps = pThis->properties; - char sBuf[128] = {'\0'}; - int iProp=-1; - - /* Look for the prop string skipping over holes */ - for(i=0; i < DAS_XML_MAXPROPS; i+=2 ){ - if( pProps[i] == NULL ) continue; - snprintf(sBuf, 128, "%s:%s", sType, sName); - if (strcmp( pProps[i], sBuf )==0 ) iProp= i; - } + if(sName == NULL) return das_error(DASERR_PROP, "Null value for property name"); + + size_t uNameSz = strlen(sName); + if(uNameSz > DASPROP_NMAX_SZ) return das_error(DASERR_PROP); + if(sType == NULL) return das_error(DASERR_PROP, "Null value for property type"); + + if(sValue == NULL ) + sValue = ""; + + if(units == NULL) + units = UNIT_DIMENSIONLESS; + + size_t uValSz = strlen(sValue); + if(uValSz > DASPROP_VMAX_SZ) return das_error(DASERR_PROP) + + // Look for the range separator first + const char* s2ndVal = NULL; + s2ndVal = strstr(value " to "); + if(s2ndVal) s2ndVal += 4; + if(!isdigit(s2ndVal[0])&&(s2ndVal!='-')&&(s2ndVal!='+')) s2ndVal = NULL; + + if((sType == NULL)||(strcasecmp(sType,"string") == 0)) + flag |= DASPROP_STRING | DASPROP_SINGLE; + else if(strcasecmp(sType, "boolean") == 0) + flag != DASPROP_BOOL | DASPROP_SINGLE; + else if(strcasecmp(sType, "int") == 0) + flag != DASPROP_INT | DASPROP_SINGLE; + else if(strcasecmp(sType, "double") == 0) + flag != DASPROP_REAL | DASPROP_SINGLE; + else if(strcasecmp(sType, "doublearray") == 0) + flag != DASPROP_REAL | DASPROP_SET; + else if(strcasecmp(sType, "time") == 0) + flag != DASPROP_DATETIME | DASPROP_SINGLE; + else if(strcasecmp(sType, "timerange") == 0) + flag != DASPROP_DATETIME | DASPROP_RANGE; + else if( (strcasecmp(sType, "datum") == 0) && (sValue[0] != '\0')) + flag != DASPROP_REAL | DASPROP_SINGLE; + else if( + (strcasecmp(sType, "datumrange") == 0) && (sValue[0] != '\0') && + (s2ndVal != NULL) + ) + flag != DASPROP_REAL | DASPROP_RANGE; + else + return das_error(DASERR_PROP, + "Invalid property type '%s' for value '%s'", sName, sValue + ) - size_t uLen; - if(iProp == -1){ - /* Look for the lowest index slot for the property */ - for(i=0; i< DAS_XML_MAXPROPS; i+= 2){ - if( pProps[i] == NULL){ iProp = i; break;} - } - if(iProp == -1){ - return das_error(DASERR_DESC, "Descriptor exceeds the max number of " - "properties %d", DAS_XML_MAXPROPS/2); + char cSep = '\0'; + + // If a set, try to guess the separator character + if(flag & DASPROP_SET){ + const char* sSeps = "|\t;, " + for(int i = 0; i < strlen(sSeps); ++i){ + if(strchr(sValue, sSeps[i]) != 0){ + cSep = sSeps[i]; + break; + } } - if(sType != NULL){ - uLen = strlen(sType) + strlen(sName) + 2; - pProps[iProp] = (char*)calloc(uLen, sizeof(char)); - snprintf(pProps[iProp], uLen, "%s:%s", sType, sName); - } - /* pProps[iProp+2]= NULL; */ - } else { - free( pProps[iProp+1] ); + // Since a set with only 1 value is legal, fall back to the default das2 separator + if(cSep == '\0') cSep = ';'; } - /* own it */ - if((sVal != NULL) && (strlen(sVal) > 0)){ - pProps[iProp+1]= (char*)calloc(strlen(sVal)+1, sizeof(char)); - strcpy( pProps[iProp+1], sVal ); - } - else{ - pProps[iProp+1] = NULL; - } + // Copy on the flags + uint64_t uFlags = 0; + uFlags |= flags; + uFlags |= (uNameSz + 1) << DASPROP_NLEN_SHIFT); // Name size + uint64_t uNamValSz = uValSz + uNameSz + 2; + if(uNamValSz < 16) uNamValSz = 16; + uFlags |= (uNamValSz << DASPROP_TLEN_SHIFT); // name & value size + if(cSep != '\0') + uFlags != ((uint64_t)cSep) << DASPROP_SEP_SHIFT; // separator if any + + byte* pWrite = pBuf; + memcpy(pWrite, &uFlags, sizeof(uint64_t)); + pWrite += sizeof(uint64_t); + // Copy in the units + memcpy(pWrite, &units, sizeof(das_units)); + pWrite += sizeof(das_units); + // Copy in the name + memcpy(pWrite, sName, uNameSz+1); + pWrite += uNameSz+1; + // And finally the value + memcpy(pWrite, sValue, uValSz+1) + return DAS_OKAY; } \ No newline at end of file diff --git a/das2/property.h b/das2/property.h index 5f8c49f..40d128a 100644 --- a/das2/property.h +++ b/das2/property.h @@ -54,47 +54,41 @@ const char* DasProp_name(const DasProp* pProp); const char* DasProp_value(const DasProp* pProp); /** Get a das2 compatable property type */ -const char* DasProp_type2(const DasProp* pProp); +const char* DasProp_typeStr2(const DasProp* pProp); -/** Get a property type code. - * @returns The type code, which is a two part value. The low nibble - * contains the multiplicity, the high nibble contains the type. */ -byte DasProp_typeCode(const DasProp* pProp); +const char* DasProp_typeStr(const DasProp* pProp) + +/** Get a 2-part roperty type code. + * Uses the values: DASPROP_MULTI_MASK & DASPROP_TYPE_MASK to extract sections + */ +byte DasProp_type(const DasProp* pProp); /** Mark this property as invalid, a non-reversable operation */ void DasProp_invalid(DasProp* pProp); +bool DasProp_isValid(DasProp* pProp); + #define DASPROP_VALID_MASK 0x00000003 // If these bits are 0, the property -#define DASPROP_SINGLE 0x00000001 // is invalid, ignore it. + +#define DASPROP_MULTI_MASK 0x00000003 +#define DASPROP_INVALID 0x00000000 // is invalid, ignore it. +#define DASPROP_SINGLE 0x00000001 #define DASPROP_RANGE 0x00000002 #define DASPROP_SET 0x00000003 +#define DASPROP_TYPE_MASK 0x000000F0 #define DASPROP_STRING 0x00000010 #define DASPROP_BOOL 0x00000020 #define DASPROP_INT 0x00000030 #define DASPROP_REAL 0x00000040 #define DASPROP_DATETIME 0x00000050 -/** Make a new property directly in a das array without extra mallocs - * - * @param pSink A DasAry of type vtByte that is ragged in the last index - * The last index must be ragged because properties are of - * variable length - * - * @param type All values are stored as UTF-8 strings, but this field - * provides the semantic type of the property. Use one of - * the values: - * DASPROP_STRING, DASPROP_BOOL, DASPROP_INT, DASPROP_REAL, - * DASPROP_DATETIME - * - * @param multi The multiplicity of the values, use one of the settings: - * DASPROP_SINGLE, DASPROP_RANGE, DASPROP_SET +/** Initialize a buffer as a das property * - * @param cSep A separator character if multi=DASPROP_SET, otherwise - * ignored. If this is a set then cCep must be a 7-bit - * ascii character in the range 0x21 through 0x7E (aka a - * printable). + * @param pBuf A byte buffer that is at least dasprop_memsz() bytes long * + * @param sType The data type of the property + * * @param sName The name of the property, can be no longer then 127 * bytes. This is a looser restriction then associated XSDs. * @@ -106,20 +100,8 @@ void DasProp_invalid(DasProp* pProp); * * @param bStrict If true, names must not contain any characters other * then [a-z][A-Z][0-9] and '_'. - * - */ -DasProp* DasProp_append( - DasAry* pSink, byte type, byte multi, char cSep, const char* sName, - const char* sValue, das_units units, bool bStrict -); - -/** A das2 compatable version of DasProp_append() above. - * - * This version parses the sType string to set the type and multiplicity - * codes and potentially the units. */ -DasProp* DasProp_append2( - DasAry* pSink, const char* sType, const char* sName, const char* sValue, bool bStrict +DasErrCode DasProp_init2( + byte* pBuf, size_t uBufSz, const char* sType, const char* sName, + const char* sValue, das_units units, bool bStrict ); - -// 1100 = 8 + 4 = 12 = C \ No newline at end of file diff --git a/test/TestEls.c b/test/TestEls.c new file mode 100644 index 0000000..e95a928 --- /dev/null +++ b/test/TestEls.c @@ -0,0 +1,74 @@ +#define _POSIX_C_SOURCE 200112L + +#include +#include + +/* Test ASPERA ELS at varying resolutions + * + * Build from the project root directory using: + * + * gcc -Wall -fpic -std=c99 -ggdb -I. test/TestEls.c \ + * ./build.Linux.x86_64/libdas2.3.a \ + * -lfftw3 -lexpat -lssl -lcrypto -lz -lm -lpthread \ + * -o TestEls + */ + + +void print_info(DasDs** lDs, size_t uDs){ + + if(lDs == NULL) return; + if(uDs < 1) return; + + DasDs* pDs; + char sBuf[2048] = {'\0'}; + size_t u; + for(u = 0; u Date: Thu, 18 Jan 2024 23:35:04 -0600 Subject: [PATCH 03/40] das2/3 descriptors compile --- das2/array.c | 2 +- das2/dataset.c | 74 +++++++-------------- das2/descriptor.c | 161 ++++++++++++++++++++++++++++++---------------- das2/descriptor.h | 14 ++-- das2/property.c | 26 ++++++++ das2/property.h | 28 ++++++-- 6 files changed, 190 insertions(+), 115 deletions(-) diff --git a/das2/array.c b/das2/array.c index c106737..c41151f 100644 --- a/das2/array.c +++ b/das2/array.c @@ -987,7 +987,7 @@ DasAry* new_DasAry( const char* id, das_val_type et, size_t sz_each, const byte* fill, int rank, size_t* shape, das_units units ){ - pThis = (DasAry*) calloc(1, sizeof(DasAry)); + DasAry* pThis = (DasAry*) calloc(1, sizeof(DasAry)); if( ! DasAry_init(pThis, id, et, sz_each, fill, rank, shape, units) ) { if(pThis) free(pThis); return NULL; diff --git a/das2/dataset.c b/das2/dataset.c index f36dbc5..d19bca8 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -329,61 +329,35 @@ DasDim* DasDs_makeDim(DasDs* pThis, enum dim_type dType, const char* sId) /* Great, an order(N^2) function. Properties code needs work */ int DasDs_copyInProps(DasDs* pThis, const DasDesc* pOther) { - DasDesc* pDest = (DasDesc*)pThis; - int i = 0, j = 0; - bool bHaveIt = false; - int nLen = 0; - char sType[32] = {'\0'}; - char sName[32] = {'\0'}; + const DasAry* pSource = &(pOther->properties); + size_t uProps = DasAry_lengthIn(pSource, DIM0); + int iCopied = 0; - - const char* pAxis = NULL; - while((pOther->properties[i] != NULL)&&(i < DAS_XML_MAXPROPS)) { - /* Property iteration is weird every *other* index is a value and - * types are crammed in with keys, the storage interface doesn't - * match the function call interface, and property removal can leave - * holes in the array. An overall bad design */ - - /* Do I care about this property? ... */ - if((pAxis = strchr(pOther->properties[i], ':')) != NULL) - ++pAxis; - else - pAxis = pOther->properties[i]; - - /* include '\0' after ':' to handle broken props */ - if((*pAxis == 'x')||(*pAxis == 'y')||(*pAxis == 'z')||(*pAxis == '\0')){ - i += 2; continue; /* ... nope */ - } + for(size_t u = 0; u < uProps; ++u){ + size_t uPropLen = 0; + const DasProp* pIn = (const DasProp*) DasAry_getBytesIn( + pSource, DIM1_AT(u), &uPropLen + ); + if(!DasProp_isValid(pIn)) + continue; + + const char* sName = DasProp_name(pIn); + + /* Do I want this prop? */ + if((*sName == 'x')||(*sName == 'y')||(*sName == 'z')||(*sName == '\0')) + continue; /* ... nope */ /* Do I have this property? ... */ - j = 0; - bHaveIt = false; - while((pDest->properties[j] != NULL)&&(j < DAS_XML_MAXPROPS)){ - if(strcmp(pDest->properties[j], pOther->properties[i]) == 0){ - bHaveIt = true; - break; - } - j += 2; - } - if(bHaveIt){ i += 2; continue; } /* ... yep */ - - /* Copy it in, use base class set function so that the prop is placed in - * the lowest empty slot so that */ - if(pAxis == pOther->properties[i]){ - strncpy(sType, "String", 7); - strncpy(sName, pAxis, 31); - } - else{ - memset(sType, 0, 32); - nLen = (pAxis - 1) - pOther->properties[i]; - nLen = nLen > 31 ? 32 : nLen; - strncpy(sType, pOther->properties[i], nLen); - strncpy(sName, pAxis, 31); - } + const DasProp* pOut = DasDesc_getLocal((DasDesc*)pThis, sName); + if(DasProp_isValid(pOut)) + continue; /* ... yep */ - DasDesc_set(pDest, sType, sName, pOther->properties[i+1]); + /* Set the property */ + DasDesc_set3( + (DasDesc*)pThis, DasProp_typeStr2(pIn), sName, DasProp_value(pIn), + pIn->units + ); ++iCopied; - i += 2; } return iCopied; } diff --git a/das2/descriptor.c b/das2/descriptor.c index 983bb99..07bfbbf 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -17,6 +17,7 @@ #define _POSIX_C_SOURCE 200112L +#include #include #include #include @@ -50,8 +51,8 @@ const char* das_desc_type_str(desc_type_t dt){ /* ************************************************************************* */ /* Construction/Destruction */ -void DasDesc_init(DasDesc* pThis, desc_type_t type){ - pThis->type = type; /* Intentionally invalid */ +void DasDesc_init(DasDesc* pThis, desc_type_t dt){ + pThis->type = dt; /* Intentionally invalid */ const char* sId; switch(dt){ @@ -64,7 +65,7 @@ void DasDesc_init(DasDesc* pThis, desc_type_t type){ } DasAry_init(&(pThis->properties), sId, vtByte, 0, NULL, RANK_2(0,0), UNIT_DIMENSIONLESS); - DasAry_setUsage(&properties, D2ARY_AS_SUBSEQ); + DasAry_setUsage(&(pThis->properties), D2ARY_AS_SUBSEQ); pThis->parent = NULL; pThis->bLooseParsing = false; @@ -78,7 +79,7 @@ DasDesc* new_Descriptor(){ &(pThis->properties), "descriptor_properties", vtByte, 0, NULL, RANK_2(0,0), UNIT_DIMENSIONLESS ); - DasAry_setUsage(&properties, D2ARY_AS_SUBSEQ); + DasAry_setUsage(&(pThis->properties), D2ARY_AS_SUBSEQ); return pThis; } @@ -102,11 +103,11 @@ const DasProp* DasDesc_getLocal(const DasDesc* pThis, const char* sName) { const DasAry* pProps = &(pThis->properties); size_t nProps = DasAry_lengthIn(pProps, DIM0); - das_prop_t* pProp; + const DasProp* pProp; for(size_t i = 0; i < nProps; ++i){ size_t uPropLen = 0; - pProp = DasAry_getBytesIn(pProps, DIM1_AT(i), &uPropLen); + pProp = (const DasProp*) DasAry_getBytesIn(pProps, DIM1_AT(i), &uPropLen); if((pProp->flags & DASPROP_VALID_MASK) && (strcmp(DasProp_name(pProp), sName) == 0) ) @@ -217,7 +218,7 @@ size_t DasDesc_getArray( const char* DasDesc_getType(const DasDesc* pThis, const char* sName) { - const DasProp* pProp = _DasDesc_getProp(pThis, sName); + const DasProp* pProp = DasDesc_getProp(pThis, sName); if(pProp != NULL) return DasProp_typeStr2(pProp); @@ -226,9 +227,9 @@ const char* DasDesc_getType(const DasDesc* pThis, const char* sName) das_units DasDesc_getUnits(const DasDesc* pThis, const char* sName) { - const DasProp* pProp = _DasDesc_getProp(pThis, sName); + const DasProp* pProp = DasDesc_getProp(pThis, sName); if(pProp != NULL) - return pProp->uints; + return pProp->units; return UNIT_DIMENSIONLESS; } @@ -241,44 +242,52 @@ bool DasDesc_has(const DasDesc* pThis, const char* sName) size_t DasDesc_length(const DasDesc* pThis) { size_t uTotal = DasAry_lengthIn(&(pThis->properties), DIM0); - if(pThis->uInvalid > uTotal) return 0; - else return (uTotal - pThis->uInvalid) + return uTotal; } const char* DasDesc_getNameByIdx(const DasDesc* pThis, size_t uIdx) { + const DasAry* pProps = &(pThis->properties); size_t uProps = DasAry_lengthIn(pProps, DIM0); if(uIdx >= uProps) return NULL; size_t uPropLen; - const DasProp* pProp = DasAry_getBytesIn(pProps, DIM1_AT(i), &uPropLen); + const DasProp* pProp = (const DasProp*) DasAry_getBytesIn( + pProps, DIM1_AT(uIdx), &uPropLen + ); return DasProp_name(pProp); } const char* DasDesc_getValByIdx(const DasDesc* pThis, size_t uIdx) { + const DasAry* pProps = &(pThis->properties); size_t uProps = DasAry_lengthIn(pProps, DIM0); if(uIdx >= uProps) return NULL; size_t uPropLen; - const DasProp* pProp = DasAry_getBytesIn(pProps, DIM1_AT(i), &uPropLen); + const DasProp* pProp = (const DasProp*) DasAry_getBytesIn( + pProps, DIM1_AT(uIdx), &uPropLen + ); return DasProp_value(pProp); } const char* DasDesc_getTypeByIdx(const DasDesc* pThis, size_t uIdx) { + const DasAry* pProps = &(pThis->properties); size_t uProps = DasAry_lengthIn(pProps, DIM0); if(uIdx >= uProps) return NULL; size_t uPropLen; - const DasProp* pProp = DasAry_getBytesIn(pProps, DIM1_AT(i), &uPropLen); + const DasProp* pProp = (const DasProp*) DasAry_getBytesIn( + pProps, DIM1_AT(uIdx), &uPropLen + ); - return DasProp_type2(pProp); + return DasProp_typeStr2(pProp); } const char* DasDesc_getStr(const DasDesc* pThis, const char* sName) @@ -324,7 +333,7 @@ int DasDesc_getInt(const DasDesc* pThis, const char* sName ) if(sVal == NULL) return INT_MIN; - if( sscanf(value, "%d", &nVal) != 1){ + if( sscanf(sVal, "%d", &nVal) != 1){ das_error(DASERR_DESC, "Can't convert %s to an integer", sVal); return INT_MIN; } @@ -341,14 +350,16 @@ bool _Desc_looksLikeTime(const char* sVal) double DasDesc_getDatum(DasDesc* pThis, const char* sName, das_units units) { - const DasProp* pProp = _DasDesc_getProp(pThis, sName); + const DasProp* pProp = DasDesc_getProp(pThis, sName); if(pProp == NULL) return DAS_FILL_VALUE; const char* sValue = DasProp_value(pProp); // Can't convert calendar units to non calendar units if(!Units_canConvert(pProp->units, units)){ - das_error("Can't convert property units of type %s to %s", pProp->units, units); + das_error(DASERR_DESC, + "Can't convert property units of type %s to %s", pProp->units, units + ); return DAS_FILL_VALUE; } @@ -360,7 +371,7 @@ double DasDesc_getDatum(DasDesc* pThis, const char* sName, das_units units) if(_Desc_looksLikeTime(sValue)){ das_time dt; if(!dt_parsetime(sValue, &dt)){ - das_error(DASERR_DESC, "Couldn't parse %s as a date time", sVal); + das_error(DASERR_DESC, "Couldn't parse %s as a date time", sValue); return DAS_FILL_VALUE; } return Units_convertFromDt(pProp->units, &dt); @@ -369,7 +380,7 @@ double DasDesc_getDatum(DasDesc* pThis, const char* sName, das_units units) double rValue; if( sscanf(sValue, "%lf", &rValue) != 1){ - das_error(DASERR_DESC, "Couldn't parse %s as a real value", sVal); + das_error(DASERR_DESC, "Couldn't parse %s as a real value", sValue); return DAS_FILL_VALUE; } @@ -395,12 +406,10 @@ bool DasDesc_equals(const DasDesc* pThis, const DasDesc* pOther) return false; for(size_t u = 0; u < uProps; u++){ + size_t uPropLen; + const DasProp* pMyProp = (const DasProp*)DasAry_getBytesIn(pMyAry, DIM1_AT(u), &uPropLen); + const DasProp* pYourProp = DasDesc_getLocal(pOther, DasProp_name(pMyProp)); - const DasProp* pMyProp = DasAry_getBytesIn(pMyAry, DIM1_AT(i), &uPropLen); - const DasProp* pYourProp = DasDesc_getLocal(pOther, DasProp_name(pMyProp), &uPropLen); - if(pYourProp == NULL) - return false; - if(!DasProp_equal(pMyProp, pYourProp)) return false; } @@ -418,15 +427,50 @@ static byte* _DasDesc_getPropBuf(DasDesc* pThis, const char* sName, size_t* pPro DasProp* pProp; for(size_t i = 0; i < nProps; ++i){ - pProp = (DasProp*) DasAry_getBuf(pProps, DIM1_AT(i), pPropSz); + pProp = (DasProp*) DasAry_getBuf(pProps, vtByte, DIM1_AT(i), pPropSz); if(strcmp(DasProp_name(pProp), sName) == 0) return (byte*)pProp; } return NULL; } -/* copies the property into the property array */ DasErrCode DasDesc_set( + DasDesc* pThis, const char* sType, const char* sName, const char* sVal +){ + /* See if there are units in this value, if so dig them out. Detect + * units by seeing if the old type "Datum" or "DatumRange" is in use + * if so, pull out everything 2nd and later or 4th and later words and + * treat that as the units. */ + + das_units units = UNIT_DIMENSIONLESS; + int nUnitWord = 0; + if(strcmp(sType, "Datum") == 0) + nUnitWord = 1; + else + if (strcmp(sType, "DatumRange") == 0) + nUnitWord = 4; + + const char* pRead = sVal; + for(int i = 0; i < nUnitWord; ++i){ + if( (pRead = strchr(sVal, ' ')) != NULL){ + ++pRead; + + while(*pRead == ' ') ++pRead; /* Eat extra spaces if needed */ + } + else{ + pRead = NULL; + break; + } + } + + if((pRead != NULL)&&(*pRead != '\0')) + units = Units_fromStr(pRead); + + return DasDesc_set3(pThis, sType, sName, sVal, units); +} + +/* copies the property into the property array */ +DasErrCode DasDesc_set3( DasDesc* pThis, const char* sType, const char* sName, const char* sVal, das_units units ){ @@ -438,7 +482,7 @@ DasErrCode DasDesc_set( if(pBuf != NULL){ if(uNewSz <= uOldSz) return DasProp_init2( - pBuf, uBufSz, sType, sName, sValue, units, !pThis->bLooseParsing + pBuf, uOldSz, sType, sName, sVal, units, !pThis->bLooseParsing ); // Nope, mark it as invalid and do a normal insert @@ -450,20 +494,20 @@ DasErrCode DasDesc_set( DasAry* pProps = &(pThis->properties); if(!DasAry_append(pProps, NULL, uNewSz)) - return das_error("Couldn't create space for new property"); + return das_error(DASERR_DESC, "Couldn't create space for new property"); DasAry_markEnd(pProps, DIM1); size_t uTmp = 0; - pBuf = DasAry_getBuff(pProps, DIM1_AT(-1), &uTmp); + pBuf = DasAry_getBuf(pProps, vtByte, DIM1_AT(-1), &uTmp); assert(uTmp == uNewSz); - return DasProp_init2(pBuf, uNewSz, sType, sName, sValue, units, !pThis->bLooseParsing); + return DasProp_init2(pBuf, uNewSz, sType, sName, sVal, units, !pThis->bLooseParsing); } DasErrCode DasDesc_setStr( DasDesc* pThis, const char* sName, const char * sVal ) { - return DasDesc_set( pThis, "String", sName, sVal, UNIT_DIMENSIONLESS); + return DasDesc_set3( pThis, "String", sName, sVal, UNIT_DIMENSIONLESS); } DasErrCode DasDesc_vSetStr( @@ -498,7 +542,7 @@ DasErrCode DasDesc_vSetStr( return das_error(DASERR_DESC, "Unable to malloc %d bytes", nLen); } - DasErrCode nRet = DasDesc_set(pThis, "String", sName, sVal, UNIT_DIMENSIONLESS); + DasErrCode nRet = DasDesc_set3(pThis, "String", sName, sVal, UNIT_DIMENSIONLESS); free(sVal); return nRet; } @@ -507,7 +551,7 @@ DasErrCode DasDesc_setBool(DasDesc* pThis, const char* sName, bool bVal) { const char* value = "false"; if(bVal) value = "true"; - return DasDesc_set(pThis, "boolean", sName, value, UNIT_DIMENSIONLESS); + return DasDesc_set3(pThis, "boolean", sName, value, UNIT_DIMENSIONLESS); } DasErrCode DasDesc_setDatum( @@ -520,7 +564,7 @@ DasErrCode DasDesc_setDatum( else sprintf( buf, "%f", rVal); - return DasDesc_set( pThis, "Datum", sName, buf, units); + return DasDesc_set3( pThis, "Datum", sName, buf, units); } DasErrCode DasDesc_setDatumRng( @@ -533,7 +577,7 @@ DasErrCode DasDesc_setDatumRng( } else { snprintf( buf, 49, "%f to %f", beg, end ); } - return DasDesc_set( pThis, "DatumRange", sName, buf, units); + return DasDesc_set3( pThis, "DatumRange", sName, buf, units); } DasErrCode DasDesc_getStrRng( @@ -609,14 +653,14 @@ DasErrCode DasDesc_setDouble(DasDesc* pThis, const char* sName, double rVal) } else { sprintf( buf, "%f", rVal ); } - return DasDesc_set( pThis, "double", sName, buf, UNIT_DIMENSIONLESS); + return DasDesc_set3( pThis, "double", sName, buf, UNIT_DIMENSIONLESS); } DasErrCode DasDesc_setInt(DasDesc* pThis, const char * sName, int nVal ) { char buf[50] = {'\0'}; sprintf( buf, "%d", nVal ); - return DasDesc_set( pThis, "int", sName, buf, UNIT_DIMENSIONLESS); + return DasDesc_set3( pThis, "int", sName, buf, UNIT_DIMENSIONLESS); } DasErrCode DasDesc_setDoubleArray( @@ -627,7 +671,7 @@ DasErrCode DasDesc_setDoubleArray( das_error(DASERR_DESC, "too many elements for DasDesc_setDoubleArray to handle" ); } buf= ( char * ) malloc( nitems * 50 ); - int nRet = DasDesc_set( + int nRet = DasDesc_set3( pThis, "doubleArray", sName, das_doubles2csv( buf, value, nitems ), UNIT_DIMENSIONLESS ); @@ -648,7 +692,7 @@ DasErrCode DasDesc_setFloatAry( dvalue[i]= (double)value[i]; buf= ( char * ) malloc( nitems * 50 ); - int nRet = DasDesc_set( + int nRet = DasDesc_set3( pThis, "doubleArray", sName, das_doubles2csv( buf, dvalue, nitems), UNIT_DIMENSIONLESS ); @@ -661,10 +705,11 @@ void DasDesc_copyIn(DasDesc* pThis, const DasDesc* pOther) const DasAry* pSrc = &(pOther->properties); size_t uProps = DasAry_lengthIn(pSrc, DIM0); + const DasProp* pProp = NULL; for(size_t u = 0; u < uProps; ++u){ size_t uNewLen = 0; - pProp = DasAry_getBytesIn(pProps, DIM1_AT(u), &uNewLen); + pProp = (const DasProp*) DasAry_getBytesIn(pSrc, DIM1_AT(u), &uNewLen); if(!DasProp_isValid(pProp)) continue; @@ -673,20 +718,22 @@ void DasDesc_copyIn(DasDesc* pThis, const DasDesc* pOther) if(pBuf != NULL){ if(uNewLen <= uOldLen){ // Since properties self-null, it's okay to have extra cruft after one of them - memcpy(pBuf, pProp, &uOldLen); + memcpy(pBuf, pProp, uOldLen); } else{ DasProp_invalid((DasProp*)pBuf); } } else{ - if(!DasAry_append(pProps, NULL, uNewLen)) - return das_error("Couldn't create space for new property"); - DasAry_markEnd(pProps, DIM1); + if(!DasAry_append(&(pThis->properties), NULL, uNewLen)){ + das_error(DASERR_DESC, "Couldn't create space for new property"); + return; + } + DasAry_markEnd(&(pThis->properties), DIM1); size_t uTmp; - pBuf = DasAry_getBytesIn(pProps, DIM1_AT(u), &uTmp); - assert(uTmp >= uNewLen) + pBuf = DasAry_getBuf(&(pThis->properties), vtByte, DIM1_AT(-1), &uTmp); + assert(uTmp >= uNewLen); memcpy(pBuf, pProp, uNewLen); } } @@ -699,7 +746,7 @@ bool DasDesc_remove(DasDesc* pThis, const char* sName) { /* properties aren't removed, just marked invalid */ size_t uPropSz; - byte* pBuf = _DasDesc_getPropBuf(pThis, const char* sName, &uPropSz); + byte* pBuf = _DasDesc_getPropBuf(pThis, sName, &uPropSz); if(pBuf == NULL) return false; @@ -714,12 +761,13 @@ DasErrCode _DasDesc_encode( DasDesc* pThis, DasBuf* pBuf, const char* sIndent, int nVer ){ const DasAry* pProps = &(pThis->properties); + const DasProp* pProp = NULL; size_t u, uProps = DasAry_lengthIn(pProps, DIM0); bool bAnyValid = false; for(u = 0; u < uProps; ++u){ size_t uPropLen = 0; - pProp = DasAry_getBytesIn(pProps, DIM1_AT(u), &uPropLen); + pProp = (const DasProp*) DasAry_getBytesIn(pProps, DIM1_AT(u), &uPropLen); if(DasProp_isValid(pProp)){ bAnyValid = true; break; @@ -733,9 +781,10 @@ DasErrCode _DasDesc_encode( if(nVer > 2) DasBuf_puts(pBuf, ">\n"); + DasErrCode nRet = DAS_OKAY; for(u = 0; u < uProps; ++u){ size_t uPropLen = 0; - pProp = DasAry_getBytesIn(pProps, DIM1_AT(u), &uPropLen); + pProp = (const DasProp*) DasAry_getBytesIn(pProps, DIM1_AT(u), &uPropLen); if(!DasProp_isValid(pProp)) continue; @@ -751,7 +800,7 @@ DasErrCode _DasDesc_encode( //const char* sType = DasProp_type2(pProp); - DasBuf_puts(sIndent) + DasBuf_puts(pBuf, sIndent); // Type if(nVer > 2){ @@ -763,7 +812,7 @@ DasErrCode _DasDesc_encode( } } else{ - DasBuf_puts(" "); + DasBuf_puts(pBuf, " "); if(!(uType & DASPROP_STRING)){ DasBuf_puts(pBuf, DasProp_typeStr2(pProp)); DasBuf_puts(pBuf, ":"); @@ -776,7 +825,7 @@ DasErrCode _DasDesc_encode( DasBuf_puts(pBuf, sName); DasBuf_puts(pBuf, "\""); if(pProp->units != UNIT_DIMENSIONLESS){ - DasBuf_printf(pBuf, " units=\"%s\"", Units_fromStr(pProp-units)); + DasBuf_printf(pBuf, " units=\"%s\"", Units_fromStr(pProp->units)); } DasBuf_puts(pBuf, ">"); } @@ -798,7 +847,7 @@ DasErrCode _DasDesc_encode( nRet = DasBuf_puts(pBuf, "\"\n"); } - if(nRet != 0) return nRet; + if(nRet != DAS_OKAY) return nRet; } if(nVer > 2) @@ -809,10 +858,10 @@ DasErrCode _DasDesc_encode( DasErrCode DasDesc_encode(DasDesc* pThis, DasBuf* pBuf, const char* sIndent) { - return _DasDesc_encode(DasDesc* pThis, DasBuf* pBuf, const char* sIndent, 2); + return _DasDesc_encode(pThis, pBuf, sIndent, 2); } DasErrCode DasDesc_encode3(DasDesc* pThis, DasBuf* pBuf, const char* sIndent) { - return _DasDesc_encode(DasDesc* pThis, DasBuf* pBuf, const char* sIndent, 3); + return _DasDesc_encode(pThis, pBuf, sIndent, 3); } diff --git a/das2/descriptor.h b/das2/descriptor.h index b3744ea..1d98c00 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -26,6 +26,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -36,8 +37,8 @@ extern "C" { * -# PLANE * -# PACKET * -# STREAM - * -# FUNCTION - * -# FUNC_SET + * -# PHYSDIM + * -# DATASET */ typedef enum DescriptorType { UNK_DESC=0, STREAM=14000, @@ -110,7 +111,7 @@ typedef struct das_descriptor { } DasDesc; -/** @name Descriptor Functions +/** @name DasDesc Functions * These work for any type of Descriptor, including ::PlaneDesc , * ::PktDesc, ::StreamDesc, ::DasDs and ::DasVar. * To make your compiler happy you will need to cast Plane, Packet and @@ -259,6 +260,12 @@ DAS_API DasErrCode DasDesc_set( DasDesc* pThis, const char* sType, const char* sName, const char* sVal ); +/** Just like the das2 property set function, but includes units for das3 */ +DAS_API DasErrCode DasDesc_set3( + DasDesc* pThis, const char* sType, const char* sName, const char* sVal, + das_units units +); + DAS_API const char* DasDesc_getType(const DasDesc* pThis, const char* sName); DAS_API const char* DasDesc_get(const DasDesc* pThis, const char* sName); @@ -548,7 +555,6 @@ DAS_API DasErrCode DasDesc_encode( DasDesc* pThis, DasBuf* pBuf, const char* sIndent ); - /** Encode a generic set of properties to a buffer, in das3 format */ DAS_API DasErrCode DasDesc_encode3( diff --git a/das2/property.c b/das2/property.c index b6ee914..3bc3652 100644 --- a/das2/property.c +++ b/das2/property.c @@ -72,6 +72,11 @@ void DasProp_invalid(DasProp* pProp) pProp->flags &= 0xFFFFFFFFFFFFFFFC; } +bool DasProp_isValid(const DasProp* pProp) +{ + return (pProp->flags & DASPROP_VALID_MASK); +} + const char* DasProp_name(const DasProp* pProp) { if(! (pProp->flags & DASPROP_MULTI_MASK)) @@ -254,4 +259,25 @@ DasErrCode DasProp_init2( memcpy(pWrite, sValue, uValSz+1) return DAS_OKAY; +} + + +bool DasProp_equal(const DasProp* pOne, const DasProp* pTwo) +{ + if((pOne == NULL)||(pTwo == NULL)) + return false; + + if( DasProp_isValid(pOne) != DasProp_isValid(pTwo)) + return false; + + if( pOne->flags != pTwo->flags) + return false; + + if( pOne->units != pTwo->units) + return false; + + if(strcmp(DasProp_name(pOne), DasProp_name(pTwo)) != 0) + return false; + + return (strcmp(DasProp_value(pOne), DasProp_value(pTwo)) == 0); } \ No newline at end of file diff --git a/das2/property.h b/das2/property.h index 40d128a..97a1ddc 100644 --- a/das2/property.h +++ b/das2/property.h @@ -27,7 +27,7 @@ extern "C" { #endif -/** Object properties. +/** Individual properties of a desciptor. * * These are designed to fit into continuous DasAry structures. Each property * has: @@ -39,10 +39,20 @@ extern "C" { typedef struct das_prop { uint64_t flags; // property type, validity, value offset das_units units; // Units, if any - char[16] buffer; // A buffer for the property name and value, + char buffer[16]; // A buffer for the property name and value, // typically over-malloc'ed. } DasProp; + +/** @name DasProp Functions + * + * DasProp objects assume that some other object, such as a DasAry handle + * the storage buffer and that these functions configure and read that + * storage. Thus there are no "new_" or "del_" function for properties. + */ + +/** @{ */ + /** Utility: Given a name and value, calculate the required storage size for * a property. Returns 0 for an invalid property */ size_t dasprop_memsz(const char* sName, const char* sValue); @@ -53,10 +63,12 @@ const char* DasProp_name(const DasProp* pProp); const char* DasProp_value(const DasProp* pProp); +bool DasProp_equal(const DasProp* pOne, const DasProp* pTwo); + /** Get a das2 compatable property type */ const char* DasProp_typeStr2(const DasProp* pProp); -const char* DasProp_typeStr(const DasProp* pProp) +const char* DasProp_typeStr3(const DasProp* pProp); /** Get a 2-part roperty type code. * Uses the values: DASPROP_MULTI_MASK & DASPROP_TYPE_MASK to extract sections @@ -66,7 +78,7 @@ byte DasProp_type(const DasProp* pProp); /** Mark this property as invalid, a non-reversable operation */ void DasProp_invalid(DasProp* pProp); -bool DasProp_isValid(DasProp* pProp); +bool DasProp_isValid(const DasProp* pProp); #define DASPROP_VALID_MASK 0x00000003 // If these bits are 0, the property @@ -105,3 +117,11 @@ DasErrCode DasProp_init2( byte* pBuf, size_t uBufSz, const char* sType, const char* sName, const char* sValue, das_units units, bool bStrict ); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif // _property_h_ \ No newline at end of file From 2272032151671222b4001d0d4ccdeb00980cb1f9 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sun, 21 Jan 2024 00:37:11 -0600 Subject: [PATCH 04/40] Using memory pool for property storage --- das2/builder.c | 105 +++++++++++ das2/dataset.c | 36 ---- das2/dataset.h | 15 -- das2/descriptor.c | 251 +++++++++++++------------ das2/descriptor.h | 46 +++-- das2/dimension.c | 64 ------- das2/dimension.h | 18 -- das2/packet.c | 36 ++-- das2/property.c | 462 ++++++++++++++++++++++++++++------------------ das2/property.h | 115 ++++++++---- das2/stream.c | 19 +- das2/value.c | 62 ++++++- das2/value.h | 13 +- 13 files changed, 722 insertions(+), 520 deletions(-) diff --git a/das2/builder.c b/das2/builder.c index d267d5c..e4d35fa 100644 --- a/das2/builder.c +++ b/das2/builder.c @@ -18,6 +18,7 @@ #define _POSIX_C_SOURCE 200112L #include #include +#include #include "log.h" #include "io.h" @@ -29,6 +30,110 @@ #define DASBLDR_MAX_DIMS 64 #define DASBLDR_SRC_ARY_SZ 64 +/* ************************************************************************** */ +/* Specialized property copies only used by the das2 builder */ + + +/** Copy in dataset properties from some other descriptor + * + * This is a helper for das 2.2 streams. + * + * Any properties that don't start with a specific dimension identifier i.e. + * 'x','y','z','w' are copied into this dataset's properties dictionary. Only + * properties not present in the internal dictionary are copied in. + * + * @param pThis this dataset object + * @param pOther The descriptor containing properites to copy in + * @return The number of properties copied in + */ +int DasDs_copyInProps(DasDs* pThis, const DasDesc* pOther) +{ + const DasAry* pSource = &(pOther->properties); + size_t uProps = DasAry_lengthIn(pSource, DIM0); + + int nCopied = 0; + for(size_t u = 0; u < uProps; ++u){ + size_t uPropLen = 0; + const DasProp* pIn = (const DasProp*) DasAry_getBytesIn( + pSource, DIM1_AT(u), &uPropLen + ); + if(!DasProp_isValid(pIn)) + continue; + + const char* sName = DasProp_name(pIn); + + /* Do I want this prop? */ + if((*sName == 'x')||(*sName == 'y')||(*sName == 'z')||(*sName == '\0')) + continue; /* ... nope */ + + /* Do I have this property? ... */ + const DasProp* pOut = DasDesc_getLocal((DasDesc*)pThis, sName); + if(DasProp_isValid(pOut)) + continue; /* ... yep */ + + /* Set the property */ + if(DasDesc_setProp((DasDesc*)pThis, pIn) != DAS_OKAY){ + return nCopied; + } + ++nCopied; + } + return nCopied; +} + +/** Copy in dataset properties from some other descriptor + * + * This is a helper for das 2.2 streams as these use certian name patterns to + * indicate which dimension a property is for + * + * Any properties that start with a specific dimension identifier i.e. + * 'x','y','z','w' are copied into this dataset's properties dictionary. Only + * properties not present in the internal dictionary are copied in. + * + * @param pThis this dimension object + * @param cAxis the connonical axis to copy in. + * @param pOther The descriptor containing properites to copy in + * @return The number of properties copied in + * @memberof DasDim + */ + +int DasDim_copyInProps(DasDim* pThis, char cAxis, const DasDesc* pOther) +{ + char sNewName[32] = {'\0'}; + + const DasAry* pSrcAry = &(pOther->properties); + size_t uProps = DasAry_lengthIn(pSrcAry, DIM0); + + int nCopied = 0; + for(size_t u = 0; u < uProps; ++u){ + size_t uPropLen = 0; + const DasProp* pIn = (const DasProp*) DasAry_getBytesIn(pSrcAry, DIM1_AT(u), &uPropLen); + if(!DasProp_isValid(pIn)) + continue; + + const char* sName = DasProp_name(pIn); + + /* We only want stuff for the given axis, but we don't want to copy in + * the axis name, so make sure there's something after it. */ + if((*sName != cAxis)||( *(sName +1) == '\0')) + continue; /* ... nope */ + + /* Since we strip the x,y,z, make next char lower to preserve the look + * of the prop naming scheme */ + memset(sNewName, 0, 32); + int nLen = (int)(strlen(sName)) - 1; + nLen = nLen > 31 ? 31 : nLen; + strncpy(sNewName, sName + 1, 31); + sNewName[0] = tolower(sNewName[0]); + + DasDesc_flexSet((DasDesc*)pThis, NULL, DasProp_type(pIn), sNewName, + DasProp_value(pIn), DasProp_sep(pIn), pIn->units, DASPROP_DAS3 + ); + ++nCopied; + } + return nCopied; +} + + /* ************************************************************************** */ /* Helpers */ diff --git a/das2/dataset.c b/das2/dataset.c index d19bca8..9ee649e 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -326,42 +326,6 @@ DasDim* DasDs_makeDim(DasDs* pThis, enum dim_type dType, const char* sId) return pDim; } -/* Great, an order(N^2) function. Properties code needs work */ -int DasDs_copyInProps(DasDs* pThis, const DasDesc* pOther) -{ - const DasAry* pSource = &(pOther->properties); - size_t uProps = DasAry_lengthIn(pSource, DIM0); - - int iCopied = 0; - for(size_t u = 0; u < uProps; ++u){ - size_t uPropLen = 0; - const DasProp* pIn = (const DasProp*) DasAry_getBytesIn( - pSource, DIM1_AT(u), &uPropLen - ); - if(!DasProp_isValid(pIn)) - continue; - - const char* sName = DasProp_name(pIn); - - /* Do I want this prop? */ - if((*sName == 'x')||(*sName == 'y')||(*sName == 'z')||(*sName == '\0')) - continue; /* ... nope */ - - /* Do I have this property? ... */ - const DasProp* pOut = DasDesc_getLocal((DasDesc*)pThis, sName); - if(DasProp_isValid(pOut)) - continue; /* ... yep */ - - /* Set the property */ - DasDesc_set3( - (DasDesc*)pThis, DasProp_typeStr2(pIn), sName, DasProp_value(pIn), - pIn->units - ); - ++iCopied; - } - return iCopied; -} - char* DasDs_toStr(const DasDs* pThis, char* sBuf, int nLen) { char sDimBuf[1024] = {'\0'}; diff --git a/das2/dataset.h b/das2/dataset.h index e7cadc6..d3f5e75 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -453,21 +453,6 @@ DAS_API bool DasDs_addAry(DasDs* pThis, DasAry* pAry); DAS_API DasDim* DasDs_makeDim(DasDs* pThis, enum dim_type dType, const char* sId); -/** Copy in dataset properties from some other descriptor - * - * This is a helper for das 2.2 streams. - * - * Any properties that don't start with a specific dimension identifier i.e. - * 'x','y','z','w' are copied into this dataset's properties dictionary. Only - * properties not present in the internal dictionary are copied in. - * - * @param pThis this dataset object - * @param pOther The descriptor containing properites to copy in - * @return The number of properties copied in - */ -DAS_API int DasDs_copyInProps(DasDs* pThis, const DasDesc* pOther); - - /** Get the data set group id * * Datasets with the same group ID are representable in the same coordinate diff --git a/das2/descriptor.c b/das2/descriptor.c index 07bfbbf..55ff9b0 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -434,80 +434,86 @@ static byte* _DasDesc_getPropBuf(DasDesc* pThis, const char* sName, size_t* pPro return NULL; } -DasErrCode DasDesc_set( - DasDesc* pThis, const char* sType, const char* sName, const char* sVal -){ - /* See if there are units in this value, if so dig them out. Detect - * units by seeing if the old type "Datum" or "DatumRange" is in use - * if so, pull out everything 2nd and later or 4th and later words and - * treat that as the units. */ - - das_units units = UNIT_DIMENSIONLESS; - int nUnitWord = 0; - if(strcmp(sType, "Datum") == 0) - nUnitWord = 1; - else - if (strcmp(sType, "DatumRange") == 0) - nUnitWord = 4; - - const char* pRead = sVal; - for(int i = 0; i < nUnitWord; ++i){ - if( (pRead = strchr(sVal, ' ')) != NULL){ - ++pRead; - - while(*pRead == ' ') ++pRead; /* Eat extra spaces if needed */ - } - else{ - pRead = NULL; - break; - } - } - - if((pRead != NULL)&&(*pRead != '\0')) - units = Units_fromStr(pRead); - - return DasDesc_set3(pThis, sType, sName, sVal, units); -} - -/* copies the property into the property array */ -DasErrCode DasDesc_set3( - DasDesc* pThis, const char* sType, const char* sName, const char* sVal, - das_units units -){ - - size_t uNewSz = dasprop_memsz(sName, sVal); - +static byte* _DasDesc_getWriteBuf(DasDesc* pThis, const char* sName, size_t uNeedSz) +{ size_t uOldSz = 0; byte* pBuf = _DasDesc_getPropBuf(pThis, sName, &uOldSz); if(pBuf != NULL){ - if(uNewSz <= uOldSz) - return DasProp_init2( - pBuf, uOldSz, sType, sName, sVal, units, !pThis->bLooseParsing - ); + if(uNeedSz <= uOldSz) + return pBuf; // Nope, mark it as invalid and do a normal insert - DasProp_invalid((DasProp*)pBuf); + DasProp_invalidate((DasProp*)pBuf); ++(pThis->uInvalid); } // Make a new one DasAry* pProps = &(pThis->properties); - if(!DasAry_append(pProps, NULL, uNewSz)) - return das_error(DASERR_DESC, "Couldn't create space for new property"); + if(!DasAry_append(pProps, NULL, uNeedSz)){ + das_error(DASERR_DESC, "Couldn't create space for new property"); + return NULL; + } DasAry_markEnd(pProps, DIM1); size_t uTmp = 0; pBuf = DasAry_getBuf(pProps, vtByte, DIM1_AT(-1), &uTmp); - assert(uTmp == uNewSz); + assert(uTmp == uNeedSz); + return pBuf; +} + +/* copies the property into the property array */ +DasErrCode DasDesc_flexSet( + DasDesc* pThis, const char* sType, byte uType, const char* sName, + const char* sVal, char cSep, das_units units, int nStandard +){ + size_t uPropSz = dasprop_memsz(sName, sVal); + + byte* pBuf = _DasDesc_getWriteBuf(pThis, sName, uPropSz); + if(pBuf == NULL){ + return das_error(DASERR_DESC, + "Couldn't get write buffer for property %s of size %zu", sName, + uPropSz + ); + } + + return DasProp_init( + pBuf, uPropSz, sType, uType, sName, sVal, cSep, units, nStandard + ); +} + +DAS_API DasErrCode DasDesc_setProp(DasDesc* pThis, const DasProp* pProp) +{ + size_t uPropSz = DasProp_size(pProp); + const char* sName = DasProp_name(pProp); + + byte* pBuf = _DasDesc_getWriteBuf(pThis, sName, uPropSz); + if(pBuf == NULL){ + return das_error(DASERR_DESC, + "Couldn't get write buffer for property %s of size %zu", + sName, uPropSz + ); + } - return DasProp_init2(pBuf, uNewSz, sType, sName, sVal, units, !pThis->bLooseParsing); + memcpy(pBuf, pProp, uPropSz); + return DAS_OKAY; } +DasErrCode DasDesc_set( + DasDesc* pThis, const char* sType, const char* sName, const char* sVal +){ + int nStandard = pThis->bLooseParsing ? DASPROP_DAS1 : DASPROP_DAS2; + return DasDesc_flexSet(pThis, sType, '\0', sName, sVal, ',', NULL, nStandard); +} + + DasErrCode DasDesc_setStr( DasDesc* pThis, const char* sName, const char * sVal ) { - return DasDesc_set3( pThis, "String", sName, sVal, UNIT_DIMENSIONLESS); + return DasDesc_flexSet( + pThis, NULL, DASPROP_STRING|DASPROP_SINGLE, sName, sVal, 0, NULL, + DASPROP_DAS3 + ); } DasErrCode DasDesc_vSetStr( @@ -542,42 +548,51 @@ DasErrCode DasDesc_vSetStr( return das_error(DASERR_DESC, "Unable to malloc %d bytes", nLen); } - DasErrCode nRet = DasDesc_set3(pThis, "String", sName, sVal, UNIT_DIMENSIONLESS); + DasErrCode nRet = DasDesc_flexSet( + pThis, NULL, DASPROP_STRING|DASPROP_SINGLE, sName, sVal, 0, NULL, + DASPROP_DAS3 + ); + free(sVal); return nRet; } DasErrCode DasDesc_setBool(DasDesc* pThis, const char* sName, bool bVal) { - const char* value = "false"; - if(bVal) value = "true"; - return DasDesc_set3(pThis, "boolean", sName, value, UNIT_DIMENSIONLESS); + return DasDesc_flexSet( + pThis, NULL, DASPROP_BOOL|DASPROP_SINGLE, sName, + bVal ? "true" : "false", 0, NULL, DASPROP_DAS3 + ); } DasErrCode DasDesc_setDatum( DasDesc* pThis, const char* sName, double rVal, das_units units ) { - char buf[50] = {'\0'}; + char sVal[50] = {'\0'}; + + if(fabs(rVal) > 1e10) + sprintf(sVal, "%e", rVal); + else + sprintf(sVal, "%f", rVal); - if ( fabs(rVal)>1e10 ) - sprintf(buf, "%e", rVal); - else - sprintf( buf, "%f", rVal); - - return DasDesc_set3( pThis, "Datum", sName, buf, units); + return DasDesc_flexSet( + pThis, NULL, DASPROP_REAL|DASPROP_SINGLE, sName, sVal, 0, units, DASPROP_DAS3 + ); } DasErrCode DasDesc_setDatumRng( DasDesc* pThis, const char * sName, double beg, double end, das_units units ){ - char buf[50] = {'\0'}; + char sVal[50] = {'\0'}; + + if(fabs(beg) > 1e10 || fabs(end) > 1e10) + snprintf(sVal, 49, "%e to %e", beg, end ); + else + snprintf(sVal, 49, "%f to %f", beg, end ); - if ( fabs(beg)>1e10 || fabs(end)>1e10 ) { - snprintf( buf, 49, "%e to %e", beg, end ); - } else { - snprintf( buf, 49, "%f to %f", beg, end ); - } - return DasDesc_set3( pThis, "DatumRange", sName, buf, units); + return DasDesc_flexSet( + pThis, NULL, DASPROP_REAL|DASPROP_RANGE, sName, sVal, 0, units, DASPROP_DAS3 + ); } DasErrCode DasDesc_getStrRng( @@ -590,15 +605,18 @@ DasErrCode DasDesc_getStrRng( if(pProp == NULL) return das_error(DASERR_DESC, "Property %s not present in descriptor", sName); + + if(!DasProp_isRange(pProp)) + return das_error(DASERR_DESC, "Property %s is not a Range", sName); char buf[128] = {'\0'}; char* pBeg = buf; char* pEnd = NULL; das_time dt = {0}; - /* Copy everything up to the first | character */ + /* Copy everything up to the old das2 comment section */ const char* sValue = DasProp_value(pProp); - + pEnd = (char*)strchr(sValue, '|'); if(pEnd != NULL) strncpy(buf, sValue, pEnd - sValue); @@ -644,59 +662,66 @@ DasErrCode DasDesc_getStrRng( return das_error(DASERR_DESC, "Malformed range string %s", buf); } - DasErrCode DasDesc_setDouble(DasDesc* pThis, const char* sName, double rVal) { - char buf[50] = {'\0'}; - if ( fabs(rVal)>1e10 ) { - sprintf( buf, "%e", rVal ); - } else { - sprintf( buf, "%f", rVal ); - } - return DasDesc_set3( pThis, "double", sName, buf, UNIT_DIMENSIONLESS); + char sVal[50] = {'\0'}; + if(fabs(rVal)>1e10) + snprintf(sVal, 49, "%e", rVal); + else + snprintf(sVal, 49, "%f", rVal); + + return DasDesc_flexSet( + pThis, NULL, DASPROP_REAL|DASPROP_SINGLE, sName, sVal, 0, NULL, DASPROP_DAS3 + ); } -DasErrCode DasDesc_setInt(DasDesc* pThis, const char * sName, int nVal ) +DasErrCode DasDesc_setInt(DasDesc* pThis, const char* sName, int nVal) { - char buf[50] = {'\0'}; - sprintf( buf, "%d", nVal ); - return DasDesc_set3( pThis, "int", sName, buf, UNIT_DIMENSIONLESS); + char sVal[50] = {'\0'}; + snprintf(sVal, 49, "%d", nVal); + return DasDesc_flexSet( + pThis, NULL, DASPROP_INT|DASPROP_SINGLE, sName, sVal, 0, NULL, DASPROP_DAS3 + ); } DasErrCode DasDesc_setDoubleArray( - DasDesc* pThis, const char* sName, int nitems, double *value + DasDesc* pThis, const char* sName, int nItems, double* pValues ){ - char* buf; - if ( nitems> 1000000 / 50 ) { - das_error(DASERR_DESC, "too many elements for DasDesc_setDoubleArray to handle" ); + + char* sVal = (char *)calloc(nItems, 50); + if(sVal == NULL){ + return das_error(DASERR_DESC, "Failed to allocate %d bytes for %d items", + nItems*50, nItems + ); } - buf= ( char * ) malloc( nitems * 50 ); - int nRet = DasDesc_set3( - pThis, "doubleArray", sName, das_doubles2csv( buf, value, nitems ), - UNIT_DIMENSIONLESS + + das_doubles2csv(sVal, nItems*50, pValues, nItems); + + DasErrCode nRet = DasDesc_flexSet( + pThis, NULL, DASPROP_REAL|DASPROP_SET, sName, sVal, ',', NULL, DASPROP_DAS3 ); - free( buf ); + + free(sVal); return nRet; } DasErrCode DasDesc_setFloatAry( - DasDesc* pThis, const char* sName, int nitems, float* value -){ - char* buf; - double dvalue[ 1000000 / 50 ]; - int i; - if( nitems> 1000000 / 50 ) - das_error(DASERR_DESC, "too many elements for DasDesc_setFloatArray to handle" ); - - for( i=0; i\n", sIndent); } -DasErrCode DasDesc_encode(DasDesc* pThis, DasBuf* pBuf, const char* sIndent) +DasErrCode DasDesc_encode2(DasDesc* pThis, DasBuf* pBuf, const char* sIndent) { return _DasDesc_encode(pThis, pBuf, sIndent, 2); } diff --git a/das2/descriptor.h b/das2/descriptor.h index 1d98c00..72b2de5 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2004-2006 Jeremy Faden - * 2015-2024 Chris Piker +/* Copyright (C) 2015-2024 Chris Piker + * 2004-2006 Jeremy Faden * * This file is part of das2C, the Core Das2 C Library. * @@ -241,18 +241,14 @@ DAS_API bool DasDesc_has(const DasDesc* pThis, const char* sName ); * generic version unless you have no choice. * * @param pThis The Descriptor to receive the property - * @param sType The Type of property should be one of the strings: - * - @b boolean - * - @b double - * - @b doubleArray - * - @b Datum - * - @b DatumRange - * - @b int - * - @b String - * - @b Time - * - @b TimeRange - * @param sName The property name, which cannot contain spaces + * + * @param sType The Type of property. This value is passed down to + * DasProp_init2(), see that function for a list of known values. + * + * @param sName The property name. For das2 & das3 this can't contain spaces. + * * @param sVal The value, which may be anything including NULL + * * @return 0 on success or a positive error code if there is a problem. * @memberof DasDesc */ @@ -260,12 +256,19 @@ DAS_API DasErrCode DasDesc_set( DasDesc* pThis, const char* sType, const char* sName, const char* sVal ); -/** Just like the das2 property set function, but includes units for das3 */ -DAS_API DasErrCode DasDesc_set3( - DasDesc* pThis, const char* sType, const char* sName, const char* sVal, - das_units units +/** Create or set a existing property + * + * Other then memory handling, this is just a wrapper on DasProp_init. + * See @DasProp_init for the argument description + */ +DAS_API DasErrCode DasDesc_flexSet( + DasDesc* pThis, const char* sType, byte uType, const char* sName, + const char* sVal, char cSep, das_units units, int nStandard ); +/** Overwrite, or copy-in a fully formatted property */ +DAS_API DasErrCode DasDesc_setProp(DasDesc* pThis, const DasProp* pProp); + DAS_API const char* DasDesc_getType(const DasDesc* pThis, const char* sName); DAS_API const char* DasDesc_get(const DasDesc* pThis, const char* sName); @@ -470,7 +473,7 @@ DAS_API double* DasDesc_getDoubleAry( * @memberof DasDesc */ DAS_API DasErrCode DasDesc_setDoubleArray( - DasDesc* pThis, const char* sName, int nitems, double* value + DasDesc* pThis, const char* sName, int nItems, double* pValues ); /** Get a property integer value @@ -533,7 +536,7 @@ DAS_API DasErrCode DasDesc_getStrRng( * @memberof DasDesc */ DAS_API DasErrCode DasDesc_setFloatAry( - DasDesc* pThis, const char* sName, int nitems, float *value + DasDesc* pThis, const char* sName, int nItems, float* pValues ); /** Deepcopy properties into a descriptor @@ -543,6 +546,9 @@ DAS_API DasErrCode DasDesc_setFloatAry( */ DAS_API void DasDesc_copyIn(DasDesc* pThis, const DasDesc* pOther); +/* New lib is source compatable, not binary compatable */ +#define DasDesc_encode DasDesc_encode2 + /** Encode a generic set of properties to a buffer * * @param pThis The descriptors who's properties should be encoded @@ -551,7 +557,7 @@ DAS_API void DasDesc_copyIn(DasDesc* pThis, const DasDesc* pOther); * @return 0 if the operation succeeded, a non-zero return code otherwise. * @memberof DasDesc */ -DAS_API DasErrCode DasDesc_encode( +DAS_API DasErrCode DasDesc_encode2( DasDesc* pThis, DasBuf* pBuf, const char* sIndent ); diff --git a/das2/dimension.c b/das2/dimension.c index b580314..3e1c7b5 100644 --- a/das2/dimension.c +++ b/das2/dimension.c @@ -185,70 +185,6 @@ char* DasDim_toStr(const DasDim* pThis, char* sBuf, int nLen) return sBuf; } -/* Adding properties ******************************************************* */ -/* This is unnecessarily difficult, see notes in DasDs_copyInProps */ -int DasDim_copyInProps(DasDim* pThis, char cAxis, const DasDesc* pOther) -{ - DasDesc* pDest = (DasDesc*)pThis; - int i = 0, j = 0; - bool bHaveIt = false; - int nLen = 0; - char sType[32] = {'\0'}; - char sName[32] = {'\0'}; - int iCopied = 0; - - const char* pAxis = NULL; - while((pOther->properties[i] != NULL)&&(i < DAS_XML_MAXPROPS)) { - /* Property iteration is weird.. */ - - /* Do I care about this property? ... */ - if((pAxis = strchr(pOther->properties[i], ':')) != NULL) - ++pAxis; - else - pAxis = pOther->properties[i]; - - /* also check to see if anything after the axis type */ - if((*pAxis != cAxis)||( *(pAxis +1) == '\0')){ - i += 2; continue; /* ... nope */ - } - - /* Do I have the non-axis specific version of this property? ... */ - j = 0; - bHaveIt = false; - while((pDest->properties[j] != NULL)&&(j < DAS_XML_MAXPROPS)){ - if(strcmp(pDest->properties[j], pOther->properties[i] + 1) == 0){ - bHaveIt = true; - break; - } - j += 2; - } - if(bHaveIt){ i += 2; continue; } /* ... yeap */ - - /* Copy it in, use base class set function so that the prop is placed in - * the lowest empty slot so that */ - if(pAxis == pOther->properties[i]){ - strncpy(sType, "String", 7); - strncpy(sName, pAxis + 1, 31); - } - else{ - memset(sType, 0, 32); - nLen = (pAxis - 1) - (pOther->properties[i]); - nLen = nLen > 31 ? 32 : nLen; - strncpy(sType, pOther->properties[i], nLen); - - strncpy(sName, pAxis + 1, 31); - sName[0] = tolower(sName[0]); /* Since we strip the x,y,z, make next - * char lower to preserve the look of - * the prop naming scheme */ - } - - DasDesc_set(pDest, sType, sName, pOther->properties[i+1]); - ++iCopied; - i += 2; - } - return iCopied; -} - /* Adding variables ******************************************************* */ bool DasDim_addVar(DasDim* pThis, const char* role, DasVar* pVar) diff --git a/das2/dimension.h b/das2/dimension.h index fc36094..b255ae0 100644 --- a/das2/dimension.h +++ b/das2/dimension.h @@ -182,24 +182,6 @@ DAS_API const char* DasDim_id(const DasDim* pThis); */ DAS_API char* DasDim_toStr(const DasDim* pThis, char* sBuf, int nLen); -/** Copy in dataset properties from some other descriptor - * - * This is a helper for das 2.2 streams as these use certian name patterns to - * indicate which dimension a property is for - * - * Any properties that start with a specific dimension identifier i.e. - * 'x','y','z','w' are copied into this dataset's properties dictionary. Only - * properties not present in the internal dictionary are copied in. - * - * @param pThis this dimension object - * @param cAxis the connonical axis to copy in. - * @param pOther The descriptor containing properites to copy in - * @return The number of properties copied in - * @memberof DasDim - */ -DAS_API int DasDim_copyInProps(DasDim* pThis, char cAxis, const DasDesc* pOther); - - /** Add a variable to a dimension * * @param pThis the dimesion in question diff --git a/das2/packet.c b/das2/packet.c index 2d55207..d0ab3b8 100644 --- a/das2/packet.c +++ b/das2/packet.c @@ -1,19 +1,19 @@ -/* Copyright (C) 2004-2017 Jeremy Faden - * Chris Piker +/* Copyright (C) 2015-2024 Chris Piker + * 2004 Jeremy Faden * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ #define _POSIX_C_SOURCE 200112L @@ -31,18 +31,18 @@ /* ************************************************************************* */ /* Construction/Destruction */ -PktDesc* new_PktDesc() { - PktDesc* pd; - int iplane; - pd= (PktDesc*)calloc(1, sizeof(PktDesc)); - pd->base.type= PACKET; - - /* Redundant */ - for ( iplane=0; iplaneplanes[iplane]= NULL; - } +PktDesc* new_PktDesc(){ + int iplane; + PktDesc* pThis = (PktDesc*)calloc(1, sizeof(PktDesc)); - return pd; + DasDesc_init((DasDesc*)pThis, PACKET); + + /* Redundant */ + for(iplane=0; iplaneplanes[iplane]= NULL; + } + + return pThis; } struct parse_pktdesc_stack{ @@ -148,8 +148,6 @@ PktDesc* new_PktDesc_xml(DasBuf* pBuf, DasDesc* pParent, int nPktId) XML_SetUserData(p, (void*)&stack); XML_SetElementHandler(p, PktDesc_parseStart, PktDesc_parseEnd); - pThis->base.properties[0]= NULL; - int nParRet = XML_Parse( p, pBuf->pReadBeg, DasBuf_unread(pBuf), true ); if ( !nParRet) { das_error(DASERR_PKT, "Parse error at offset %ld:\n%s\n", diff --git a/das2/property.c b/das2/property.c index 3bc3652..fc8d235 100644 --- a/das2/property.c +++ b/das2/property.c @@ -17,10 +17,20 @@ #define _POSIX_C_SOURCE 200112L +#include +#include +#ifdef _WIN32 +#define strcasecmp _stricmp +#else +#include +#endif +#include + +#include "util.h" #include "property.h" /* The property flags (32 bits total), most not used, listed high byte - (Actual memory is backwards to chart below for an x86_64 machine) + (Actual memory is backwards to chart below for an x86_64 machine) 3 2 1 0 76543210 76543210 76543210 76543210 76543210 76543210 76543210 76543210 @@ -52,56 +62,235 @@ #define DASPROP_VMAX_SZ 130943 /* leaves room for end null and val name */ #define DASPROP_MIN_MALLOC 8 + 8 + 4 /* Smallest possible property size */ -#define DASPROP_MAX_MALLOC 8 + 8 + 131072; /* largest possible malloc 2^17 + 16 */ +#define DASPROP_MAX_MALLOC 8 + 8 + 131072 /* largest possible malloc 2^17 + 16 */ +/** An initializer for DasProp stack variables. */ +#define DAS_PROP_EMPTY {0x0ULL, UNIT_DIMENSIONLESS, {'\0'}} + +/* Memory requirments ***************************************************** */ size_t dasprop_memsz(const char* sName, const char* sValue) { - size_t sz = sizeof(uint64_t) + sizeof(das_units); - if(sName) sz += strlen(sName) + 1; - if(sValue) sz += strlen(sValue) + 1; - if(sz < DASPROP_MIN_MALLOC) - return DASPROP_MIN_MALLOC; - if(sz > DASPROP_MAX_MALLOC) - return DASPROP_MAX_MALLOC; - return sz; + size_t sz = sizeof(uint64_t) + sizeof(das_units); + if(sName) sz += strlen(sName) + 1; + if(sValue) sz += strlen(sValue) + 1; + if(sz < DASPROP_MIN_MALLOC) + return DASPROP_MIN_MALLOC; + if(sz > DASPROP_MAX_MALLOC) + return DASPROP_MAX_MALLOC; + return sz; +} + +/* Initalization, alteration *********************************************** */ + +DasErrCode DasProp_init( + byte* pBuf, size_t uBufSz, const char* sType, byte uType, const char* sName, + const char* sValue, char cSep, das_units units, int nStandard +){ + /* Check args */ + if((pBuf == NULL)||(uBufSz < dasprop_memsz(sName, sValue))) + return das_error(DASERR_PROP, "Property buffer is too small, %zu bytes", uBufSz); + + if(sName == NULL) return das_error(DASERR_PROP, "Null value for property name"); + + if(nStandard > 1){ + // Some stuff from das1 doesn't fly later on + for(int j = 0; j < strlen(sName); j++) + if(!isalnum(sName[j]) && (sName[j] != '_') && (sName[j] != ':')) + return das_error(DASERR_DESC, "Invalid das2/3 property name '%s'", sName); + } + + size_t uNameSz = strlen(sName); + if(uNameSz > DASPROP_NMAX_SZ) + return das_error(DASERR_PROP, "Name too large (%d bytes) for property", DASPROP_NMAX_SZ); + if(sType == NULL) + return das_error(DASERR_PROP, "Null value for property type"); + + if(sValue == NULL ) + sValue = ""; + + /* Save off the value size */ + size_t uValSz = strlen(sValue); + if(uValSz > DASPROP_VMAX_SZ) + return das_error(DASERR_PROP, "Value too large (%d bytes) for property %s", + DASPROP_VMAX_SZ, sName + ); + + /* Get the units, either explicity or by parsing (if das2 type = Datum) */ + if(nStandard == DASPROP_DAS2){ + units = UNIT_DIMENSIONLESS; + + int nUnitWord = 0; + if(strcmp(sType, "Datum") == 0) + nUnitWord = 1; + else + if (strcmp(sType, "DatumRange") == 0) + nUnitWord = 4; + + const char* pRead = sValue; + for(int i = 0; i < nUnitWord; ++i){ + if( (pRead = strchr(sValue, ' ')) != NULL){ + ++pRead; + + while(*pRead == ' ') ++pRead; /* Eat extra spaces if needed */ + } + else{ + pRead = NULL; + break; + } + } + + if((pRead != NULL)&&(*pRead != '\0')) + units = Units_fromStr(pRead); + } + else{ + if(units == NULL) + units = UNIT_DIMENSIONLESS; + } + + uint64_t uFlags = 0ull; + + /* Get the data type and multiplicity */ + + if(sType == NULL){ + /* Explicit type and mulitplicity supplied (hurray!) */ + if((uType & DASPROP_MULTI_MASK) == 0) + return das_error(DASERR_PROP, "Invalid muliplicity flag"); + byte uTmp = (uType & DASPROP_TYPE_MASK) >> 4; + if((uTmp < 1)||(uTmp > 5)) + return das_error(DASERR_PROP, "Invalid type setting"); + + uFlags = uType & (DASPROP_TYPE_MASK | DASPROP_MULTI_MASK); + } + else{ + /* Have to get it from type strings */ + + if((sType == NULL)||(strcasecmp(sType,"string") == 0)) + uFlags |= DASPROP_STRING | DASPROP_SINGLE; + else if(strcasecmp(sType, "boolean") == 0) + uFlags |= DASPROP_BOOL | DASPROP_SINGLE; + else if((strcasecmp(sType, "int") == 0)||(strcasecmp(sType, "integer") == 0)) + uFlags |= DASPROP_INT | DASPROP_SINGLE; + else if((strcasecmp(sType, "double") == 0)||(strcasecmp(sType, "real") == 0)|| + (strcasecmp(sType, "datum") == 0)) + uFlags |= DASPROP_REAL | DASPROP_SINGLE; + else if(strcasecmp(sType, "realrange") == 0) + uFlags |= DASPROP_REAL | DASPROP_RANGE; + else if(strcasecmp(sType, "doublearray") == 0) + uFlags |= DASPROP_REAL | DASPROP_SET; + else if((strcasecmp(sType, "time") == 0)||(strcasecmp(sType, "datetime") == 0)) + uFlags |= DASPROP_DATETIME | DASPROP_SINGLE; + else if((strcasecmp(sType, "timerange") == 0)||(strcasecmp(sType, "datetimerange") == 0)) + uFlags |= DASPROP_DATETIME | DASPROP_RANGE; + else if( (strcasecmp(sType, "datum") == 0) && (sValue[0] != '\0')) + uFlags |= DASPROP_REAL | DASPROP_SINGLE; + else if((strcasecmp(sType, "datumrange") == 0) && (sValue[0] != '\0')) + uFlags |= DASPROP_REAL | DASPROP_RANGE; + else + return das_error(DASERR_PROP, + "Invalid property type '%s' for value '%s'", sName, sValue + ); + + /* If a range property was indicated, make sure there is a second value */ + if(uFlags & DASPROP_RANGE){ + const char* s2ndVal = NULL; + s2ndVal = strstr(sValue, " to "); + if(s2ndVal) s2ndVal += 4; + if(s2ndVal && (!isdigit(s2ndVal[0])&&(s2ndVal[0]!='-')&&(s2ndVal[0]!='+'))) + s2ndVal = NULL; + + if(!s2ndVal) + return das_error(DASERR_PROP, "Range types require two values separated by ' to '. "); + } + } + + /* If a set, try to guess the separator character*/ + if(uFlags & DASPROP_SET){ + if(cSep == '\0'){ + const char* sSeps = "|\t;, "; + for(int i = 0; i < strlen(sSeps); ++i){ + if(strchr(sValue, sSeps[i]) != 0){ + cSep = sSeps[i]; + break; + } + } + // If separator is still null, fallback to the default + if(cSep == '\0') cSep = ';'; + } + } + else{ + cSep = '\0'; + } + + // Set the sizes in the flags + uFlags |= (uNameSz + 1) << DASPROP_NLEN_SHIFT; + uint64_t uNamValSz = uValSz + uNameSz + 2; + if(uNamValSz < 16) uNamValSz = 16; + uFlags |= (uNamValSz << DASPROP_TLEN_SHIFT); + + // and the stash away the separator + if(cSep != '\0') + uFlags |= ((uint64_t)cSep) << DASPROP_SEP_SHIFT; + + byte* pWrite = pBuf; + memcpy(pWrite, &uFlags, sizeof(uint64_t)); + pWrite += sizeof(uint64_t); + + // Copy in the units + memcpy(pWrite, &units, sizeof(das_units)); + pWrite += sizeof(das_units); + + // Copy in the name + memcpy(pWrite, sName, uNameSz+1); + pWrite += uNameSz+1; + + // And finally the value + memcpy(pWrite, sValue, uValSz+1); + + return DAS_OKAY; } -void DasProp_invalid(DasProp* pProp) +void DasProp_invalidate(DasProp* pProp) { - pProp->flags &= 0xFFFFFFFFFFFFFFFC; + pProp->flags &= 0xFFFFFFFFFFFFFFFC; } +/* Information strings **************************************************** */ + bool DasProp_isValid(const DasProp* pProp) { - return (pProp->flags & DASPROP_VALID_MASK); + return (pProp->flags & DASPROP_VALID_MASK); +} + +bool DasProp_isSet(const DasProp* pProp){ + return ((uint32_t)pProp->flags & DASPROP_SET); } const char* DasProp_name(const DasProp* pProp) { - if(! (pProp->flags & DASPROP_MULTI_MASK)) - return NULL; - return pProp->buffer; + if(! (pProp->flags & DASPROP_MULTI_MASK)) + return NULL; + return pProp->buffer; } const char* DasProp_value(const DasProp* pProp) { - if(! (pProp->flags & DASPROP_MULTI_MASK)) - return NULL; + if(! (pProp->flags & DASPROP_MULTI_MASK)) + return NULL; - const char* sBuf = pProp->buffer; - size_t uOffset = ((pProp->flags & DASPROP_NLEN_MASK) >> DASPROP_NLEN_SHIFT); - return sBuf + uOffset; + const char* sBuf = pProp->buffer; + size_t uOffset = ((pProp->flags & DASPROP_NLEN_MASK) >> DASPROP_NLEN_SHIFT); + return sBuf + uOffset; } size_t DasProp_size(const DasProp* pProp) { - // Mask off total length and shift down. - uint64_t sz = (pProp->flags & DASPROP_TLEN_MASK) >> DASPROP_TLEN_SHIFT; - assert(sz <= DASPROP_VMAX_SZ); - sz += sizeof(uint64_t); - sz += sizeof(das_units); - return sz; + // Mask off total length and shift down. + uint64_t sz = (pProp->flags & DASPROP_TLEN_MASK) >> DASPROP_TLEN_SHIFT; + assert(sz <= DASPROP_VMAX_SZ); + sz += sizeof(uint64_t); + sz += sizeof(das_units); + return sz; } /* Return das2 types, this includes all the documented ones from the @@ -110,174 +299,81 @@ size_t DasProp_size(const DasProp* pProp) */ const char* DasProp_typeStr2(const DasProp* pProp) { - uint32_t uMulti = pProp->flags & DASPROP_MULTI_MASK; - if(!uMulti) - return NULL; - - switch(pProp->flags & DASPROP_TYPE_MASK){ - case DASPROP_BOOL: return "boolean"; - case DASPROP_REAL: - if(pProp->units == UNIT_DIMENSIONLESS){ - if(uMulti == DASPROP_RANGE) - return "doubleArray" - else - return "double"; - } - else{ - if(uMulti == DASPROP_RANGE) - return "DatumRange"; - else - return "Datum"; - } - case DASPROP_INT: return "int"; - case DASPROP_DATETIME: - if(uMulti == DASPROP_RANGE) - return "TimeRange"; - else - return "Time"; - default: return "String"; - } + uint32_t uMulti = pProp->flags & DASPROP_MULTI_MASK; + if(!uMulti) + return NULL; + + switch(pProp->flags & DASPROP_TYPE_MASK){ + case DASPROP_BOOL: return "boolean"; + case DASPROP_REAL: + if(pProp->units == UNIT_DIMENSIONLESS){ + if(uMulti == DASPROP_RANGE) + return "doubleArray"; + else + return "double"; + } + else{ + if(uMulti == DASPROP_RANGE) + return "DatumRange"; + else + return "Datum"; + } + case DASPROP_INT: return "int"; + case DASPROP_DATETIME: + if(uMulti == DASPROP_RANGE) + return "TimeRange"; + else + return "Time"; + default: return "String"; + } } const char* DasProp_typeStr3(const DasProp* pProp) { - switch(pProp->flags & DASPROP_MULTI_MASK){ - case DASPROP_STRING |DASPROP_SINGLE: return "string"; - case DASPROP_STRING |DASPROP_SET: return "stringArray"; - case DASPROP_BOOL |DASPROP_SINGLE: return "bool"; - case DASPROP_BOOL |DASPROP_SET: return "boolArray"; - case DASPROP_INT |DASPROP_SINGLE: return "int"; - case DASPROP_INT |DASPROP_RANGE: return "intRange"; - case DASPROP_INT |DASPROP_SET: return "intArray"; - case DASPROP_REAL |DASPROP_SINGLE: return "real"; - case DASPROP_REAL |DASPROP_RANGE: return "realRange"; - case DASPROP_REAL |DASPROP_SET: return "realArray"; - case DASPROP_DATETIME|DASPROP_SINGLE: return "datetime"; - case DASPROP_DATETIME|DASPROP_RANGE: return "datetimeRange"; - case DASPROP_DATETIME|DASPROP_SET: return "datetimeArray"; - default: return NULL; + switch(pProp->flags & DASPROP_MULTI_MASK){ + case DASPROP_STRING |DASPROP_SINGLE: return "string"; + case DASPROP_STRING |DASPROP_SET: return "stringArray"; + case DASPROP_BOOL |DASPROP_SINGLE: return "bool"; + case DASPROP_BOOL |DASPROP_SET: return "boolArray"; + case DASPROP_INT |DASPROP_SINGLE: return "int"; + case DASPROP_INT |DASPROP_RANGE: return "intRange"; + case DASPROP_INT |DASPROP_SET: return "intArray"; + case DASPROP_REAL |DASPROP_SINGLE: return "real"; + case DASPROP_REAL |DASPROP_RANGE: return "realRange"; + case DASPROP_REAL |DASPROP_SET: return "realArray"; + case DASPROP_DATETIME|DASPROP_SINGLE: return "datetime"; + case DASPROP_DATETIME|DASPROP_RANGE: return "datetimeRange"; + case DASPROP_DATETIME|DASPROP_SET: return "datetimeArray"; + default: return NULL; + } } -byte DasProp_type(const DasProp* pProp){ - return (byte)(pProp->flags & DASPROP_TYPE_MASK); -} - -DasErrCode DasProp_init2( - byte* pBuf, size_t uBufSz, const char* sType, const char* sName, - const char* sValue, das_units units, bool bStrict -){ - byte flag = '\0'; - - if((pBuf == NULL)||(uBufSz < dasprop_memsz(sName, sValue)) - return das_error(DASERR_PROP, "Property buffer is too small, %zu bytes", uBufSz); - - if(sName == NULL) return das_error(DASERR_PROP, "Null value for property name"); - - size_t uNameSz = strlen(sName); - if(uNameSz > DASPROP_NMAX_SZ) return das_error(DASERR_PROP); - if(sType == NULL) return das_error(DASERR_PROP, "Null value for property type"); - - if(sValue == NULL ) - sValue = ""; - - if(units == NULL) - units = UNIT_DIMENSIONLESS; - - size_t uValSz = strlen(sValue); - if(uValSz > DASPROP_VMAX_SZ) return das_error(DASERR_PROP) - - // Look for the range separator first - const char* s2ndVal = NULL; - s2ndVal = strstr(value " to "); - if(s2ndVal) s2ndVal += 4; - if(!isdigit(s2ndVal[0])&&(s2ndVal!='-')&&(s2ndVal!='+')) s2ndVal = NULL; - - if((sType == NULL)||(strcasecmp(sType,"string") == 0)) - flag |= DASPROP_STRING | DASPROP_SINGLE; - else if(strcasecmp(sType, "boolean") == 0) - flag != DASPROP_BOOL | DASPROP_SINGLE; - else if(strcasecmp(sType, "int") == 0) - flag != DASPROP_INT | DASPROP_SINGLE; - else if(strcasecmp(sType, "double") == 0) - flag != DASPROP_REAL | DASPROP_SINGLE; - else if(strcasecmp(sType, "doublearray") == 0) - flag != DASPROP_REAL | DASPROP_SET; - else if(strcasecmp(sType, "time") == 0) - flag != DASPROP_DATETIME | DASPROP_SINGLE; - else if(strcasecmp(sType, "timerange") == 0) - flag != DASPROP_DATETIME | DASPROP_RANGE; - else if( (strcasecmp(sType, "datum") == 0) && (sValue[0] != '\0')) - flag != DASPROP_REAL | DASPROP_SINGLE; - else if( - (strcasecmp(sType, "datumrange") == 0) && (sValue[0] != '\0') && - (s2ndVal != NULL) - ) - flag != DASPROP_REAL | DASPROP_RANGE; - else - return das_error(DASERR_PROP, - "Invalid property type '%s' for value '%s'", sName, sValue - ) - - char cSep = '\0'; - - // If a set, try to guess the separator character - if(flag & DASPROP_SET){ - const char* sSeps = "|\t;, " - for(int i = 0; i < strlen(sSeps); ++i){ - if(strchr(sValue, sSeps[i]) != 0){ - cSep = sSeps[i]; - break; - } - } - // Since a set with only 1 value is legal, fall back to the default das2 separator - if(cSep == '\0') cSep = ';'; - } - - // Copy on the flags - uint64_t uFlags = 0; - uFlags |= flags; - uFlags |= (uNameSz + 1) << DASPROP_NLEN_SHIFT); // Name size - uint64_t uNamValSz = uValSz + uNameSz + 2; - if(uNamValSz < 16) uNamValSz = 16; - uFlags |= (uNamValSz << DASPROP_TLEN_SHIFT); // name & value size - if(cSep != '\0') - uFlags != ((uint64_t)cSep) << DASPROP_SEP_SHIFT; // separator if any - - byte* pWrite = pBuf; - memcpy(pWrite, &uFlags, sizeof(uint64_t)); - pWrite += sizeof(uint64_t); - - // Copy in the units - memcpy(pWrite, &units, sizeof(das_units)); - pWrite += sizeof(das_units); - - // Copy in the name - memcpy(pWrite, sName, uNameSz+1); - pWrite += uNameSz+1; - - // And finally the value - memcpy(pWrite, sValue, uValSz+1) - - return DAS_OKAY; +byte DasProp_type(const DasProp* pProp) +{ + return (byte)(pProp->flags & DASPROP_TYPE_MASK); } - bool DasProp_equal(const DasProp* pOne, const DasProp* pTwo) { - if((pOne == NULL)||(pTwo == NULL)) - return false; + if((pOne == NULL)||(pTwo == NULL)) + return false; - if( DasProp_isValid(pOne) != DasProp_isValid(pTwo)) - return false; + if( DasProp_isValid(pOne) != DasProp_isValid(pTwo)) + return false; - if( pOne->flags != pTwo->flags) - return false; + if( pOne->flags != pTwo->flags) + return false; - if( pOne->units != pTwo->units) - return false; + if( pOne->units != pTwo->units) + return false; - if(strcmp(DasProp_name(pOne), DasProp_name(pTwo)) != 0) - return false; + if(strcmp(DasProp_name(pOne), DasProp_name(pTwo)) != 0) + return false; - return (strcmp(DasProp_value(pOne), DasProp_value(pTwo)) == 0); -} \ No newline at end of file + return (strcmp(DasProp_value(pOne), DasProp_value(pTwo)) == 0); +} + +char DasProp_sep(const DasProp* pProp) +{ + return (char)(pProp->flags >> DASPROP_SEP_SHIFT & 0xFF); +} diff --git a/das2/property.h b/das2/property.h index 97a1ddc..f8558d8 100644 --- a/das2/property.h +++ b/das2/property.h @@ -53,70 +53,123 @@ typedef struct das_prop { /** @{ */ -/** Utility: Given a name and value, calculate the required storage size for - * a property. Returns 0 for an invalid property */ +/** Get required storage space for a property given a name and value. + * Note the space is requirements are not sum of the string lengths. + */ size_t dasprop_memsz(const char* sName, const char* sValue); -#define DAS_PROP_EMPTY {0x0ULL, UNIT_DIMENSIONLESS, {'\0'}} +/** Flexible das1, das2 and das3 compatable property memory initializer + * + * @param pBuf A byte buffer that is at least dasprop_memsz() bytes long + * + * @param sType The data type of the property, can be one of: + * - @b boolean (das2 & 3) + * - @b double, real (das2, das3) + * - @b realRange (das3) + * - @b doubleArray (das2) + * - @b Datum (das2, anything can have units in das3) + * - @b DatumRange (das2) + * - @b int,integer (das2, das3) + * - @b integerRange (das3) + * - @b String,string (das2, das3) + * - @b Time,datetime (das2, das3) + * - @b TimeRange,datetimeRange (das2,das3) + * + * @param uType An alternate and more efficent method of specifying + * the property type. If sType is NULL, this is read instead. + * To set uType or together one constant from each set below. + * + * Item type: DASPROP_STRING, DASPROP_BOOL, DASPROP_INT, DASPROP_REAL, + * DASPROP_DATETIME + * + * Multiplicity: DASPROP_SINGLE, DASPROP_RANGE, DASPROP_SET + * + * @param sName The name of the property, can be no longer then 127 + * bytes. This is a looser restriction then associated XSDs. + * + * @param sValue The data value, can be no longer then 130,943 bytes. + * + * @param cSep For array values, this (in addition to possible whitespace) + * is the separator between values. Ignored if Mulitplicity + * is not DASPROP_SET. + * + * @param units The units for this value. If the type is Datum or DatumRange + * this value will be ignored, otherwise if this value is NULL + * then UNIT_DIMENSIONLESS will be assigned. + * + * @param nStandard. One of 1, 2 or 3 for das1, das2, or das3. For + * das2 & 3, property names may only consist of the characters + * [a-z][A-Z][0-9] and '_'. + */ +DasErrCode DasProp_init( + byte* pBuf, size_t uBufSz, const char* sType, byte uType, const char* sName, + const char* sValue, char cSep, das_units units, int nStandard +); + +/** Return the memory footprint of a property */ +size_t DasProp_size(const DasProp* pProp); +/** Get name of a property */ const char* DasProp_name(const DasProp* pProp); +/** Get the string value for a property */ const char* DasProp_value(const DasProp* pProp); +/** Get the value separator character for array-style properties */ +char DasProp_sep(const DasProp* pProp); + +/** Determine if two properties contain equal content */ bool DasProp_equal(const DasProp* pOne, const DasProp* pTwo); -/** Get a das2 compatable property type */ +/** Get a das2 type string for this property */ const char* DasProp_typeStr2(const DasProp* pProp); +/** Get a das3 type string for this property */ const char* DasProp_typeStr3(const DasProp* pProp); -/** Get a 2-part roperty type code. - * Uses the values: DASPROP_MULTI_MASK & DASPROP_TYPE_MASK to extract sections +/** Get a property type code. + * + * Use the values: DASPROP_MULTI_MASK & DASPROP_TYPE_MASK to extract sections */ byte DasProp_type(const DasProp* pProp); -/** Mark this property as invalid, a non-reversable operation */ -void DasProp_invalid(DasProp* pProp); +/** Mark this property as invalid, this erases the type information and + * is thus a non-reversable operation */ +void DasProp_invalidate(DasProp* pProp); +/** Determine if this property has a valid type definition */ bool DasProp_isValid(const DasProp* pProp); +/** A mask to select a property's multiplicity setting. + * This is useful when interpreting the results of DasProp_type() + */ +#define DASPROP_MULTI_MASK 0x00000003 + #define DASPROP_VALID_MASK 0x00000003 // If these bits are 0, the property -#define DASPROP_MULTI_MASK 0x00000003 #define DASPROP_INVALID 0x00000000 // is invalid, ignore it. #define DASPROP_SINGLE 0x00000001 #define DASPROP_RANGE 0x00000002 #define DASPROP_SET 0x00000003 +/** A mask to select a properties's item type + * This is useful when interpreting the results of DasProp_type() + */ #define DASPROP_TYPE_MASK 0x000000F0 + #define DASPROP_STRING 0x00000010 #define DASPROP_BOOL 0x00000020 #define DASPROP_INT 0x00000030 #define DASPROP_REAL 0x00000040 #define DASPROP_DATETIME 0x00000050 -/** Initialize a buffer as a das property - * - * @param pBuf A byte buffer that is at least dasprop_memsz() bytes long - * - * @param sType The data type of the property - * - * @param sName The name of the property, can be no longer then 127 - * bytes. This is a looser restriction then associated XSDs. - * - * @param sValue The data value, can be no longer then 130,943 bytes. - * - * @param units The units for this value. If units are UNIT_DIMENSIONLESS - * then this value is not considered a Datum for das v2.2 - * compatability purposes - * - * @param bStrict If true, names must not contain any characters other - * then [a-z][A-Z][0-9] and '_'. - */ -DasErrCode DasProp_init2( - byte* pBuf, size_t uBufSz, const char* sType, const char* sName, - const char* sValue, das_units units, bool bStrict -); +#define DASPROP_DAS1 1 +#define DASPROP_DAS2 2 +#define DASPROP_DAS3 3 + +/** Returns true if this property has range multiplicity (aka 2 items) */ +#define DasProp_isRange(P) (P->flags & DASPROP_RANGE) + /** @} */ diff --git a/das2/stream.c b/das2/stream.c index 72fca34..ce3c299 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -39,15 +39,15 @@ StreamDesc* new_StreamDesc() { - StreamDesc* pThis; + StreamDesc* pThis; - pThis = ( StreamDesc* ) calloc(1, sizeof( StreamDesc ) ); - DasDesc_init((DasDesc*)pThis, STREAM); + pThis = ( StreamDesc* ) calloc(1, sizeof( StreamDesc ) ); + DasDesc_init((DasDesc*)pThis, STREAM); - pThis->bDescriptorSent = false; + pThis->bDescriptorSent = false; - strncpy(pThis->compression, "none", STREAMDESC_CMP_SZ - 1); - strncpy(pThis->version, DAS_22_STREAM_VER, STREAMDESC_VER_SZ - 1); + strncpy(pThis->compression, "none", STREAMDESC_CMP_SZ - 1); + strncpy(pThis->version, DAS_22_STREAM_VER, STREAMDESC_VER_SZ - 1); return pThis; } @@ -132,11 +132,10 @@ PktDesc* StreamDesc_createPktDesc(StreamDesc* pThis, DasEncoding* pXEncoder, pPkt= new_PktDesc(); pPkt->id= StreamDesc_nextPktId(pThis); - pPkt->base.parent=(DasDesc*)pThis; - pPkt->base.properties[0]= NULL; + pPkt->base.parent=(DasDesc*)pThis; - PlaneDesc* pX = new_PlaneDesc(X, "", pXEncoder, xUnits); - PktDesc_addPlane(pPkt, pX); + PlaneDesc* pX = new_PlaneDesc(X, "", pXEncoder, xUnits); + PktDesc_addPlane(pPkt, pX); pThis->pktDesc[pPkt->id]= pPkt; return pPkt; diff --git a/das2/value.c b/das2/value.c index 4a297eb..e7f949c 100644 --- a/das2/value.c +++ b/das2/value.c @@ -511,12 +511,60 @@ double* das_csv2doubles(const char* arrayString, int* p_nitems ) return result; } -char * das_doubles2csv( char * buf, const double * value, int nitems ) { - int i; - sprintf( buf, "%f", value[0] ); - for ( i=1; i 100000)) + uWrote = snprintf(pBuf, uSz, "%e", pValues[i]); + else + uWrote = snprintf(pBuf, uSz, "%f", pValues[i]); + + if(uWrote > uSz){ + das_error(DASERR_ARRAY, "Insufficient space provided for all %d converted doubles", nValues); + return NULL; + } + uSz -= uWrote; + } + + return pBuf; } +char* das_floats2csv(char* pBuf, size_t uSz, const float* pValues, int nValues) +{ + if((pBuf == NULL)||(uSz < 12)){ + das_error(DASERR_ARRAY, "Invalid arguments, buffer too small or non-existant"); + return NULL; + } + + /* Insure null termination */ + pBuf[uSz - 1] = '\0'; + --uSz; + + // Decrement uSz after each write + size_t uWrote; + for(int i = 0; i < nValues; ++i){ + if((fabs(pValues[i]) < 0.00001)||(fabs(pValues[i]) > 100000)) + uWrote = snprintf(pBuf, uSz, "%e", (double)(pValues[i])); + else + uWrote = snprintf(pBuf, uSz, "%f", (double)(pValues[i])); + + if(uWrote > uSz){ + das_error(DASERR_ARRAY, "Insufficient space provided for all %d converted floats", nValues); + return NULL; + } + uSz -= uWrote; + } + + return pBuf; +} diff --git a/das2/value.h b/das2/value.h index 8787407..b3aadf3 100644 --- a/das2/value.h +++ b/das2/value.h @@ -297,13 +297,18 @@ DAS_API double* das_csv2doubles(const char * s, int* nitems); * * @todo this function is a potential source of buffer overruns, fix it. * - * @param[out] buf a pointer to the buffer to receive the printed values - * @param[in] value an array of doubles - * @param[in] nitems the number of items to print to the array + * @param[out] pBuf a pointer to the buffer to receive the printed values + * @param[in] uBufSz The length of the buffer to received the converted values + * @param[in] pValues an array of doubles + * @param[in] nValues the number of items to print to the array * * @returns A pointer to the supplied buffer. */ -DAS_API char* das_doubles2csv( char * buf, const double * value, int nitems ); +DAS_API char* das_doubles2csv(char* pBuf, size_t uBufSz, const double* pValues, int nValues); + + +/** Similar to das_doubles2csv, but for 32-bit floats */ +DAS_API char* das_floats2csv(char* pBuf, size_t uBufSz, const float* pValues, int nValues); /** @} */ From 784e88082a884412b0e5c70a8987646b298f61e5 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sun, 21 Jan 2024 15:23:44 -0600 Subject: [PATCH 05/40] Validating v2 test output with new properties --- buildfiles/Linux.mak | 1 + das2/array.c | 2 +- das2/descriptor.c | 8 +--- das2/plane.c | 1 + das2/processor.c | 4 ++ das2/processor.h | 3 ++ das2/property.c | 55 +++++++++++++++------------ das2/units.c | 1 + test/das2_ascii_input1.d2s | Bin 107932 -> 107844 bytes test/das2_ascii_input2.d2s | Bin 280977 -> 281001 bytes test/das2_ascii_output1.d2t | 40 ++++++++++--------- test/das2_ascii_output2.d2t | 74 ++++++++++++++++++++++-------------- utilities/das2_ascii.c | 23 +++++++++++ 13 files changed, 133 insertions(+), 79 deletions(-) diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index ed84cae..81812d9 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -57,6 +57,7 @@ ifeq ($(CONDA_BUILD_STATE),) CC=gcc CFLAGS= $(WARNINGS) -fPIC -std=c99 -I. -ggdb $(DEFINES) #CFLAGS=-Wall -DNDEBUG -O2 -fPIC -std=c99 -Wno-format-security -I. $(DEFINES) +#-fstack-protector-strong #CTESTFLAGS=-Wall -fPIC -std=c99 -ggdb -I. $(CFLAGS) CTESTFLAGS=$(CFLAGS) diff --git a/das2/array.c b/das2/array.c index c41151f..e8f2e79 100644 --- a/das2/array.c +++ b/das2/array.c @@ -1198,7 +1198,7 @@ void DasAry_deInit(DasAry* pThis) DynaBuf_release(pThis->pBufs[d]); } } - memset(&pThis, 0, sizeof(DasAry)); // Null the memory + memset(pThis, 0, sizeof(DasAry)); // Null the memory } } diff --git a/das2/descriptor.c b/das2/descriptor.c index 55ff9b0..b15615f 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -694,13 +694,11 @@ DasErrCode DasDesc_setDoubleArray( nItems*50, nItems ); } - das_doubles2csv(sVal, nItems*50, pValues, nItems); DasErrCode nRet = DasDesc_flexSet( pThis, NULL, DASPROP_REAL|DASPROP_SET, sName, sVal, ',', NULL, DASPROP_DAS3 ); - free(sVal); return nRet; } @@ -714,13 +712,11 @@ DasErrCode DasDesc_setFloatAry( nItems*50, nItems ); } - das_floats2csv(sVal, nItems*50, pValues, nItems); DasErrCode nRet = DasDesc_flexSet( pThis, NULL, DASPROP_REAL|DASPROP_SET, sName, sVal, ',', NULL, DASPROP_DAS3 ); - free(sVal); return nRet; } @@ -830,7 +826,7 @@ DasErrCode _DasDesc_encode( // Type if(nVer > 2){ DasBuf_puts(pBuf, " sName != NULL) free(pThis->sName); if(pThis->pEncoding != NULL) free(pThis->pEncoding); + if(pThis->pYEncoding != NULL) free(pThis->pYEncoding); if(pThis->pYTags != NULL) free(pThis->pYTags); if(pThis->bAlloccedBuf && pThis->pData != NULL) free(pThis->pData); diff --git a/das2/processor.c b/das2/processor.c index 1d834ce..2c84d6a 100644 --- a/das2/processor.c +++ b/das2/processor.c @@ -64,3 +64,7 @@ StreamHandler* new_StreamHandler(void* pUserData) pThis->commentHandler = defaultStreamCommentHandler; return pThis; } + +void del_StreamHandler(StreamHandler* pThis){ + if(pThis) free(pThis); +} diff --git a/das2/processor.h b/das2/processor.h index 9957d73..ef4a75e 100644 --- a/das2/processor.h +++ b/das2/processor.h @@ -171,6 +171,9 @@ DAS_API void StreamHandler_init(StreamHandler* pThis, void* pUserData); */ DAS_API StreamHandler* new_StreamHandler(void* pUserData); +/** Type safe wrapper around free() */ +DAS_API void del_StreamHandler(StreamHandler* pThis); + #ifdef __cplusplus } #endif diff --git a/das2/property.c b/das2/property.c index fc8d235..1d994a7 100644 --- a/das2/property.c +++ b/das2/property.c @@ -117,36 +117,39 @@ DasErrCode DasProp_init( ); /* Get the units, either explicity or by parsing (if das2 type = Datum) */ - if(nStandard == DASPROP_DAS2){ - units = UNIT_DIMENSIONLESS; + if((units == NULL) && (nStandard == DASPROP_DAS2)){ int nUnitWord = 0; - if(strcmp(sType, "Datum") == 0) + if(strcasecmp(sType, "datum") == 0) nUnitWord = 1; else - if (strcmp(sType, "DatumRange") == 0) + if (strcasecmp(sType, "datumrange") == 0) nUnitWord = 4; - const char* pRead = sValue; - for(int i = 0; i < nUnitWord; ++i){ - if( (pRead = strchr(sValue, ' ')) != NULL){ - ++pRead; - + if(nUnitWord > 0){ + char* pRead = sValue; + for(int i = 0; i < nUnitWord; ++i){ + if( (pRead = strchr(sValue, ' ')) != NULL){ + ++pRead; while(*pRead == ' ') ++pRead; /* Eat extra spaces if needed */ + } + else{ + pRead = NULL; + break; + } } - else{ - pRead = NULL; - break; + + if((pRead != NULL)&&(*pRead != '\0')){ + units = Units_fromStr(pRead); + // TRUNCATE the value so that units and the proceeding space are + // not included. + uValSz = (pRead - sValue) - 1; } } - - if((pRead != NULL)&&(*pRead != '\0')) - units = Units_fromStr(pRead); - } - else{ - if(units == NULL) - units = UNIT_DIMENSIONLESS; } + + if(units == NULL) + units = UNIT_DIMENSIONLESS; uint64_t uFlags = 0ull; @@ -192,7 +195,7 @@ DasErrCode DasProp_init( ); /* If a range property was indicated, make sure there is a second value */ - if(uFlags & DASPROP_RANGE){ + if((uFlags & DASPROP_MULTI_MASK) == DASPROP_RANGE){ const char* s2ndVal = NULL; s2ndVal = strstr(sValue, " to "); if(s2ndVal) s2ndVal += 4; @@ -205,7 +208,7 @@ DasErrCode DasProp_init( } /* If a set, try to guess the separator character*/ - if(uFlags & DASPROP_SET){ + if((uFlags & DASPROP_MULTI_MASK) == DASPROP_SET){ if(cSep == '\0'){ const char* sSeps = "|\t;, "; for(int i = 0; i < strlen(sSeps); ++i){ @@ -240,12 +243,14 @@ DasErrCode DasProp_init( memcpy(pWrite, &units, sizeof(das_units)); pWrite += sizeof(das_units); - // Copy in the name + // Copy in the name, depend in null termination memcpy(pWrite, sName, uNameSz+1); pWrite += uNameSz+1; - // And finally the value - memcpy(pWrite, sValue, uValSz+1); + // And finally the value, do NOT depend on null term, since we may have + // shaved off the UNITS from a datum value. + memcpy(pWrite, sValue, uValSz); + pWrite[uValSz] = 0; return DAS_OKAY; } @@ -307,7 +312,7 @@ const char* DasProp_typeStr2(const DasProp* pProp) case DASPROP_BOOL: return "boolean"; case DASPROP_REAL: if(pProp->units == UNIT_DIMENSIONLESS){ - if(uMulti == DASPROP_RANGE) + if(uMulti == DASPROP_SET) return "doubleArray"; else return "double"; diff --git a/das2/units.c b/das2/units.c index 0b382a4..8cd1750 100644 --- a/das2/units.c +++ b/das2/units.c @@ -213,6 +213,7 @@ das_units _Units_getUnique(const char* string) } if(i < NUM_UNITS - 1){ + /* Not free'ed for life of program and we don't care */ char* sHeap = (char*)calloc(strlen(string) + 1, sizeof(char)); strncpy(sHeap, string, strlen(string)); g_lUnits[i] = sHeap; diff --git a/test/das2_ascii_input1.d2s b/test/das2_ascii_input1.d2s index 1e1c55f0e7c2d79663cb56a64a133a19ad98fe52..2d2254154bd7693088f4462b999d6243759730f7 100644 GIT binary patch delta 261 zcmXAiF;0X)6hMP+C^*H0&H`ot(S)$Z-qy|-@_{c*1ZFaS*v(cJCMH`NS_|)BVPmKSBz7x%%*cYVOFtG- z5{Q|||M#yK>?wvQNiH9Nwbp9NI5$WLrfP#m+HjO=4I$PeCk+(_y4{ehh_BQJ8Z>;> zm_o0qn2$9Nc-g6v_aFz}C9~#aD*l(dgrG3B2`itqitGSAF8$h!auUwg^I54>hcIN* nmvc59Pqx#KbM(&RG@q}JXg^*~ZyXm3(pWto7N3WOvw!~uKWAJW delta 333 zcmZ9|F-yZh6bEo(N(aAz+aqMqp}9+9()MV@RVoOg2#S>R?r0Bfa@<`SGIelsE147r zzk`Ecz{w7NA16;Yg||H3AKvf1_mA%Lrkh`3e2p>Q9}GvvYC#tO2ipK6rAsBWmBN6r zRNHZo;5hAJS8)LALs*4JoWOFX>Zzeq&2_{eNeAF!Ne}mXY3y1OrzDLpfz=8^2+vQC z3Cyikh9G39t#lEod1E9qQ6wom1Th(d73&*VakgA2jogjolHctEm*WWT;N09ja~BzITkL!7TaAAJa*)!v>5ZMgNd hll8NaqU=`Kf8S`Iyayiuz3%!G@4o50H63sB@(pV_X=DHZ diff --git a/test/das2_ascii_input2.d2s b/test/das2_ascii_input2.d2s index 247b9c6a8a33ecaef78b31c696174f9ad302e3b4..61e14c4d3e24e4e1793519d28d8cd2c6c8a8c987 100644 GIT binary patch delta 176 zcmbO@S#afK!3jqhO{ZTt&*aaXkybQ0@TAdZcg9`E8O`8gn*&cyTFzu<02cr%GTfe8 z$T-`D#n`~W2qK;f)@-=FWgFxFmvGfN5F@v3c5#~F>01UgP8E@v_|M~H0CD`cGQ!eV4; zX^A8_VH@NBm#FGQ7BZdEV>ARS+72{)<~1k>Y}0nX<;?LROok9cwln@=Uf~M>hP^o2 diff --git a/test/das2_ascii_output1.d2t b/test/das2_ascii_output1.d2t index b6d896c..a6f577b 100644 --- a/test/das2_ascii_output1.d2t +++ b/test/das2_ascii_output1.d2t @@ -1,30 +1,32 @@ -[00]000701 - +[00]000638 + [xx]000072 [xx]000141 -[01]000576 - +[01]000355 - - + :01:2013-03-01T07:44:32.330 3.296e-06 7.539e-07 8.303e-07 5.424e-07 6.549e-07 9.477e-07 7.868e-07 9.197e-07 1.284e-06 1.391e-06 1.310e-06 1.471e-06 1.235e-06 1.274e-06 1.352e-06 1.315e-06 diff --git a/test/das2_ascii_output2.d2t b/test/das2_ascii_output2.d2t index 6d57276..27ddaf8 100644 --- a/test/das2_ascii_output2.d2t +++ b/test/das2_ascii_output2.d2t @@ -1,14 +1,18 @@ -[00]000191 - +[00]000171 + -[01]003209 +[01]003223 - - + :01:2013-05-21T02:02:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 @@ -93,12 +97,14 @@ :01:2013-05-21T08:37:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T08:42:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T08:47:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -[01]002705 +[01]002719 - - + :01:2013-05-21T02:02:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 @@ -183,12 +189,14 @@ :01:2013-05-21T08:37:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T08:42:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T08:47:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -[01]001486 +[01]001500 - - + :01:2013-05-21T08:47:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 @@ -254,12 +262,14 @@ :01:2013-05-21T13:47:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:52:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:57:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -[01]002221 +[01]002235 - - + :01:2013-05-21T02:02:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 @@ -406,12 +416,14 @@ :01:2013-05-21T13:47:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:52:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:57:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -[01]000562 +[01]000576 - - + :01:2013-05-21T02:02:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 @@ -557,12 +569,14 @@ :01:2013-05-21T13:47:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:52:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:57:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -[01]002053 +[01]002067 - - + :01:2013-05-21T02:02:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 @@ -709,12 +723,14 @@ :01:2013-05-21T13:47:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:52:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:57:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -[01]001725 +[01]001739 - - + :01:2013-05-21T08:47:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 @@ -780,12 +796,14 @@ :01:2013-05-21T13:47:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:52:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 :01:2013-05-21T13:57:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -[01]000909 +[01]000923 - - + :01:2013-05-21T02:02:43.288 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 -1.000e+31 diff --git a/utilities/das2_ascii.c b/utilities/das2_ascii.c index 4c39e30..18a1c04 100644 --- a/utilities/das2_ascii.c +++ b/utilities/das2_ascii.c @@ -310,6 +310,29 @@ int main( int argc, char *argv[]) { DasIO_addProcessor(pIn, pSh); status = DasIO_readAll(pIn); + + /* Enable de-allocation for valgrind checks, otherwise let the OS + clean up the memory faster then calling destructors */ +#ifndef NDEBUG + del_DasIO(pIn); + del_StreamHandler(pSh); + del_DasIO(pOut); + del_StreamDesc(g_pSdOut); +#endif + + /* At this point only the run-time heap allocs are still in in memory. + The following will show up as leaks under valgrind --leak-check=full + + 1. The global leapsecond table from tt2000.c + 2. The global host address cache from http.c + 3. The global parsed units cache from units.c + + Altogether these are less then 8K unless a huge number of hosts have + been contacted in a single program. This is a know loss with few + (if any) observable consequences for modern multi-user operationg + systems (including Android) + */ + return status; } From 70ed802d34b0fa24e42e374594b294728b1c9da4 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sun, 21 Jan 2024 20:57:02 -0600 Subject: [PATCH 06/40] New-style properties pass all unit tests --- das2/dataset.c | 2 + das2/dimension.c | 2 + das2/property.c | 77 ++++++++++++++++++--------- das2/util.c | 42 +++++++++++++-- das2/util.h | 25 +++++++++ das2/value.c | 1 + test/das2_bin_avgsec_input1.d2s | Bin 3736777 -> 3736798 bytes test/das2_bin_avgsec_output1.d2t | 76 ++++++++++++++++---------- test/das2_bin_avgsec_output2.d2t | 44 +++++++++------ test/das2_bin_peakavgsec_input1.d2s | Bin 1368732 -> 1368742 bytes test/das2_bin_peakavgsec_output1.d2t | 60 ++++++++++++--------- test/das2_from_das1_output1.d2t | 28 +++++----- test/das2_from_das1_output2.d2t | 42 +++++++++------ test/das2_histo_output1.d2t | 24 +++++---- 14 files changed, 282 insertions(+), 141 deletions(-) diff --git a/das2/dataset.c b/das2/dataset.c index 9ee649e..9536c6a 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -482,6 +482,8 @@ DasDs* new_DasDs( } DasDs* pThis = (DasDs*)calloc(1, sizeof(DasDs)); + + DasDesc_init((DasDesc*)pThis, DATASET); /* Make sure not to break in middle of utf-8 sequence, start to replace * all the strncpy's in das2 libs with this for safety */ diff --git a/das2/dimension.c b/das2/dimension.c index 3e1c7b5..7bc26a8 100644 --- a/das2/dimension.c +++ b/das2/dimension.c @@ -298,6 +298,8 @@ DasDim* new_DasDim(const char* sId, enum dim_type dtype, int nDsRank) if(pThis == NULL){ das_error(DASERR_DIM, "Out of memory"); return NULL; } + + DasDesc_init((DasDesc*)pThis, PHYSDIM); pThis->dtype = dtype; das_assert_valid_id(sId); diff --git a/das2/property.c b/das2/property.c index 1d994a7..c132fa2 100644 --- a/das2/property.c +++ b/das2/property.c @@ -103,7 +103,7 @@ DasErrCode DasProp_init( size_t uNameSz = strlen(sName); if(uNameSz > DASPROP_NMAX_SZ) return das_error(DASERR_PROP, "Name too large (%d bytes) for property", DASPROP_NMAX_SZ); - if(sType == NULL) + if((uType == 0)&&(sType == NULL)) return das_error(DASERR_PROP, "Null value for property type"); if(sValue == NULL ) @@ -117,7 +117,7 @@ DasErrCode DasProp_init( ); /* Get the units, either explicity or by parsing (if das2 type = Datum) */ - if((units == NULL) && (nStandard == DASPROP_DAS2)){ + if((units == NULL) && (nStandard == DASPROP_DAS2) && (sType != NULL)){ int nUnitWord = 0; if(strcasecmp(sType, "datum") == 0) @@ -127,23 +127,48 @@ DasErrCode DasProp_init( nUnitWord = 4; if(nUnitWord > 0){ - char* pRead = sValue; - for(int i = 0; i < nUnitWord; ++i){ - if( (pRead = strchr(sValue, ' ')) != NULL){ + const char* pRead = sValue; + + while(*pRead == ' ') ++pRead; /* Eat spaces before the first word */ + + /* find the start of the next word */ + int nAtWord = 0; + for(int i = 0; (i < nUnitWord)&&(pRead != NULL); ++i){ + if( (pRead = strchr(pRead, ' ')) != NULL){ ++pRead; - while(*pRead == ' ') ++pRead; /* Eat extra spaces if needed */ - } - else{ - pRead = NULL; - break; + while(*pRead == ' ') ++pRead; /* Eat extra spaces if needed */ } + nAtWord += 1; } - if((pRead != NULL)&&(*pRead != '\0')){ + if((nAtWord == nUnitWord)&&(pRead != NULL)&&(*pRead != '\0')){ + + /* das2 had some things as units that were actually data display + preferences. (I'm looking at you log10Ration) If some of these + poor choices show up, let them pass through as just string + types */ + int nErrDisp = -1; + if(nStandard == 2){ + das_errdisp_get_lock(); + nErrDisp = das_error_disposition(); /* MUST RELEASE LOCK IN THIS FUNCTION */ + das_return_on_error(); + } + units = Units_fromStr(pRead); - // TRUNCATE the value so that units and the proceeding space are - // not included. - uValSz = (pRead - sValue) - 1; + + if(units == NULL){ + sType = "string"; + } + else{ + /* TRUNCATE the value so that units and the proceeding space are + not included.*/ + uValSz = (pRead - sValue) - 1; + } + + if(nStandard == 2){ + das_error_setdisp(nErrDisp); + void das_errdisp_release_lock(); /* LOCK RELEASED */ + } } } } @@ -169,26 +194,26 @@ DasErrCode DasProp_init( /* Have to get it from type strings */ if((sType == NULL)||(strcasecmp(sType,"string") == 0)) - uFlags |= DASPROP_STRING | DASPROP_SINGLE; + uFlags |= (DASPROP_STRING | DASPROP_SINGLE); else if(strcasecmp(sType, "boolean") == 0) - uFlags |= DASPROP_BOOL | DASPROP_SINGLE; + uFlags |= (DASPROP_BOOL | DASPROP_SINGLE); else if((strcasecmp(sType, "int") == 0)||(strcasecmp(sType, "integer") == 0)) - uFlags |= DASPROP_INT | DASPROP_SINGLE; + uFlags |= (DASPROP_INT | DASPROP_SINGLE); else if((strcasecmp(sType, "double") == 0)||(strcasecmp(sType, "real") == 0)|| (strcasecmp(sType, "datum") == 0)) - uFlags |= DASPROP_REAL | DASPROP_SINGLE; + uFlags |= (DASPROP_REAL | DASPROP_SINGLE); else if(strcasecmp(sType, "realrange") == 0) - uFlags |= DASPROP_REAL | DASPROP_RANGE; + uFlags |= (DASPROP_REAL | DASPROP_RANGE); else if(strcasecmp(sType, "doublearray") == 0) - uFlags |= DASPROP_REAL | DASPROP_SET; + uFlags |= (DASPROP_REAL | DASPROP_SET); else if((strcasecmp(sType, "time") == 0)||(strcasecmp(sType, "datetime") == 0)) - uFlags |= DASPROP_DATETIME | DASPROP_SINGLE; + uFlags |= (DASPROP_DATETIME | DASPROP_SINGLE); else if((strcasecmp(sType, "timerange") == 0)||(strcasecmp(sType, "datetimerange") == 0)) - uFlags |= DASPROP_DATETIME | DASPROP_RANGE; + uFlags |= (DASPROP_DATETIME | DASPROP_RANGE); else if( (strcasecmp(sType, "datum") == 0) && (sValue[0] != '\0')) - uFlags |= DASPROP_REAL | DASPROP_SINGLE; + uFlags |= (DASPROP_REAL | DASPROP_SINGLE); else if((strcasecmp(sType, "datumrange") == 0) && (sValue[0] != '\0')) - uFlags |= DASPROP_REAL | DASPROP_RANGE; + uFlags |= (DASPROP_REAL | DASPROP_RANGE); else return das_error(DASERR_PROP, "Invalid property type '%s' for value '%s'", sName, sValue @@ -264,7 +289,7 @@ void DasProp_invalidate(DasProp* pProp) bool DasProp_isValid(const DasProp* pProp) { - return (pProp->flags & DASPROP_VALID_MASK); + return ((pProp != NULL) && (pProp->flags & DASPROP_VALID_MASK)); } bool DasProp_isSet(const DasProp* pProp){ @@ -355,7 +380,7 @@ const char* DasProp_typeStr3(const DasProp* pProp) byte DasProp_type(const DasProp* pProp) { - return (byte)(pProp->flags & DASPROP_TYPE_MASK); + return (byte)(pProp->flags & (DASPROP_TYPE_MASK|DASPROP_MULTI_MASK)); } bool DasProp_equal(const DasProp* pOne, const DasProp* pTwo) diff --git a/das2/util.c b/das2/util.c index 5e7460b..dc12560 100644 --- a/das2/util.c +++ b/das2/util.c @@ -1,5 +1,5 @@ -/* Copyright (C) 2004-2017 Chris Piker - * Jeremy Faden +/* Copyright (C) 2015-2024 Chris Piker + * 2004 Jeremy Faden * * This file is part of libdas2, the Core Das2 C Library. * @@ -54,6 +54,8 @@ #define DAS2_MSGDIS_SAVE 1 int g_nErrDisposition = DASERR_DIS_EXIT; +pthread_mutex_t g_mtxDisp = PTHREAD_MUTEX_INITIALIZER; + int g_nMsgDisposition = DAS2_MSGDIS_STDERR; pthread_mutex_t g_mtxErrBuf = PTHREAD_MUTEX_INITIALIZER; @@ -87,14 +89,24 @@ void das_init( sProgName, nErrDis); exit(DASERR_INIT); } - g_nErrDisposition = nErrDis; - - /* Setup the mutex for buffer locking, even if it's not used */ + pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); #ifndef NDEBUG pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); #endif + + /* Setup the mutex for error disposition locking, even if it's not used */ + if( pthread_mutex_init(&g_mtxDisp, &attr) != 0){ + fprintf(stderr, "(%s) das_init: Could not initialize error disposition " + "mutex\n", sProgName); + exit(DASERR_INIT); + } + + g_nErrDisposition = nErrDis; + + + /* Setup the mutex for buffer locking, even if it's not used */ if( pthread_mutex_init(&g_mtxErrBuf, &attr) != 0){ fprintf(stderr, "(%s) das_init: Could not initialize error buffer " "mutex\n", sProgName); @@ -220,8 +232,28 @@ void das_exit_on_error() { g_nErrDisposition = DASERR_DIS_EXIT; } void das_return_on_error(){ g_nErrDisposition = DASERR_DIS_RET; } +void das_errdisp_get_lock(){ + pthread_mutex_lock(&g_mtxDisp); +} + int das_error_disposition(){ return g_nErrDisposition; } +void das_error_setdisp(int nDisp){ + switch(nDisp){ + case DASERR_DIS_ABORT: g_nErrDisposition = DASERR_DIS_ABORT; break; + case DASERR_DIS_EXIT: g_nErrDisposition = DASERR_DIS_EXIT; break; + case DASERR_DIS_RET: g_nErrDisposition = DASERR_DIS_RET; break; + default: + fprintf(stderr, "Hard Stop: Invalid Error disposition %d.", nDisp); + exit(4); + } +} + +void das_errdisp_release_lock(){ + pthread_mutex_unlock(&g_mtxDisp); +} + + void das_free_msgbuf(void) { das_error_msg* tmp = NULL; if (g_msgBuf) { diff --git a/das2/util.h b/das2/util.h index 8078db7..652891a 100644 --- a/das2/util.h +++ b/das2/util.h @@ -217,6 +217,31 @@ DAS_API void das_return_on_error(void); */ DAS_API int das_error_disposition(void); +/** Used for co-operative locking of time-limited error disposition changse. + * + * Aquire this lock before your critical section, then release it. + * All code that want's to toggle the error disposition should use this, + * but it's not enforcable, except by code review. + * + * YOU MUST BE SURE YOUR FUNCTION CAN'T EXIT BEFORE THE LOCK IS RELEASED! + */ +DAS_API void das_errdisp_get_lock(); + +/** Used for co-operative locking of time-limited error disposition changse. + * + * Release this lock before your critical section, then release it. + * All code that want's to toggle the error disposition should use this, + * but it's not enforcable, except by code review. + */ +DAS_API void das_errdisp_release_lock(); + + + +/** The inverse of das_error_disposition. + * @param nDisp One of DAS2_ERRDIS_EXIT, DAS2_ERRDIS_ABORT, DAS2_ERRDIS_RET + */ +DAS_API void das_error_setdisp(int nDisp); + /** Error handling: Print formatted error to standard error stream * Set the library to ouput formatted error messages to the processes * standard error stream. This is the default. diff --git a/das2/value.c b/das2/value.c index e7f949c..47aeecf 100644 --- a/das2/value.c +++ b/das2/value.c @@ -27,6 +27,7 @@ #include #endif #include +#include #include "util.h" #include "units.h" diff --git a/test/das2_bin_avgsec_input1.d2s b/test/das2_bin_avgsec_input1.d2s index 4f08ff6efc0d82e1b25d7156b2a9df708f3ab265..48f162b9d3691eae37975f4e698a991123030bf6 100644 GIT binary patch delta 402 zcmX}oy-UMD7zS`Imsnd(Z2e3$^`rH(nrJ^Xb+TI>oLowWu7aR~g5cM$pZ{$)O;vPYiYVEqC|4yw5#fevnrTQn=`evBUOo$yXo1q}uu2`LzaAsB`c7=sp?w^QjSLOT|F&_BXF$x zlCQPQ3~$tRFkl=eM5As>&2HlQ%RE-PiEql0fHX|P6imYmWFQN(FbDIn0E@5$Ian52 zYsHHb=WiYVU9x`Y0SX1w5&^XzRk9f^`kAtiLq2qjn-Zm^NNA&$UT-jnX+QxXQUT=5*Cc;%a*5TwfIC^sl1#Bqb8l)m{Ai)6HOc)ZgPWRGogF|2NxVP z-pRql#ZTa15C=zzlLLu^r=Y`cJNNw0eXD(tXE>*X3RI*LmFWqi35~g69w|#wICi&n-b9eZ~o}QG@5eNY~ zY*wx4Fark6@@mBt8vo(emw7BB{4Ivz6;|q*kOT|nU>+90h7>Hq5-dZQUxhVD!#XeZ zHV&dB*IyER3eL}^rF6pT6zfV3?@I1toD?{Q-iI5nM5Y=pY(j>shL?CCnZZ8}U%dA) qFd99JXR~75Ii^~gM&uB$c_5;)7dXAVV4j9 diff --git a/test/das2_bin_avgsec_output1.d2t b/test/das2_bin_avgsec_output1.d2t index 51fe7c0..afe23fb 100644 --- a/test/das2_bin_avgsec_output1.d2t +++ b/test/das2_bin_avgsec_output1.d2t @@ -1,16 +1,20 @@ -[00]000303 - +[00]000256 + -[01]002926 +[01]002937 - + :01:2013-05-21T02:02:43.288 8.992e-01 9.444e-01 9.303e-01 9.353e-01 9.345e-01 9.685e-01 9.670e-01 9.646e-01 1.010e+00 9.723e-01 9.610e-01 9.843e-01 9.806e-01 1.043e+00 1.021e+00 1.008e+00 1.035e+00 9.627e-01 1.021e+00 9.828e-01 9.710e-01 1.047e+00 9.780e-01 1.017e+00 1.033e+00 9.930e-01 1.008e+00 1.037e+00 1.041e+00 1.003e+00 9.960e-01 1.169e+00 1.033e+00 1.073e+00 1.085e+00 1.060e+00 1.021e+00 1.020e+00 1.046e+00 1.044e+00 1.059e+00 1.090e+00 1.020e+00 1.077e+00 1.025e+00 1.038e+00 1.105e+00 1.040e+00 1.088e+00 1.099e+00 1.114e+00 1.113e+00 1.021e+00 1.054e+00 1.073e+00 1.061e+00 1.113e+00 1.081e+00 1.086e+00 1.084e+00 1.090e+00 1.113e+00 1.084e+00 1.067e+00 1.087e+00 1.074e+00 1.095e+00 1.143e+00 1.061e+00 1.109e+00 1.109e+00 1.079e+00 1.086e+00 1.134e+00 1.170e+00 1.127e+00 1.149e+00 1.142e+00 1.063e+00 1.100e+00 1.092e+00 1.071e+00 1.135e+00 1.098e+00 1.091e+00 1.076e+00 1.137e+00 1.111e+00 1.099e+00 1.143e+00 1.116e+00 1.128e+00 1.109e+00 1.135e+00 1.130e+00 1.171e+00 1.146e+00 1.171e+00 1.096e+00 1.152e+00 1.134e+00 1.083e+00 1.149e+00 1.139e+00 1.124e+00 1.139e+00 1.145e+00 1.028e+00 1.111e+00 1.187e+00 1.123e+00 1.112e+00 1.151e+00 1.145e+00 1.109e+00 1.165e+00 1.077e+00 1.020e+00 1.132e+00 1.107e+00 1.107e+00 1.077e+00 1.134e+00 1.098e+00 1.123e+00 1.119e+00 1.061e+00 1.117e+00 1.168e+00 1.157e+00 1.150e+00 1.130e+00 1.121e+00 1.147e+00 1.092e+00 1.153e+00 1.093e+00 1.137e+00 1.084e+00 1.138e+00 1.137e+00 1.075e+00 1.073e+00 @@ -95,12 +99,14 @@ :01:2013-05-21T08:37:43.288 9.775e-01 1.004e+00 9.731e-01 9.917e-01 9.706e-01 1.006e+00 9.833e-01 9.845e-01 1.025e+00 1.034e+00 9.951e-01 1.003e+00 9.881e-01 1.032e+00 9.835e-01 9.909e-01 1.016e+00 9.679e-01 9.957e-01 9.576e-01 9.783e-01 1.048e+00 9.756e-01 9.927e-01 9.857e-01 9.815e-01 9.851e-01 1.042e+00 1.022e+00 9.709e-01 9.801e-01 1.008e+00 1.012e+00 1.033e+00 1.052e+00 1.033e+00 9.890e-01 9.904e-01 1.011e+00 9.932e-01 9.964e-01 1.048e+00 9.828e-01 1.047e+00 9.838e-01 1.012e+00 1.043e+00 9.917e-01 1.032e+00 1.017e+00 1.058e+00 1.045e+00 9.741e-01 1.004e+00 1.037e+00 9.809e-01 1.070e+00 1.006e+00 1.000e+00 1.015e+00 1.011e+00 1.018e+00 1.005e+00 1.017e+00 1.055e+00 9.960e-01 1.004e+00 1.041e+00 1.001e+00 1.024e+00 1.020e+00 9.945e-01 9.967e-01 1.057e+00 1.070e+00 1.033e+00 1.052e+00 1.051e+00 9.822e-01 1.014e+00 1.017e+00 9.778e-01 1.039e+00 1.015e+00 9.930e-01 1.002e+00 1.046e+00 1.045e+00 1.018e+00 1.037e+00 1.038e+00 1.053e+00 1.020e+00 1.034e+00 1.056e+00 1.053e+00 1.057e+00 1.077e+00 9.753e-01 1.051e+00 1.008e+00 1.005e+00 1.054e+00 1.018e+00 1.035e+00 1.035e+00 1.038e+00 9.874e-01 1.013e+00 1.032e+00 1.048e+00 1.012e+00 1.024e+00 1.046e+00 1.011e+00 1.072e+00 9.847e-01 2.018e+00 1.038e+00 1.030e+00 9.926e-01 9.908e-01 1.052e+00 1.025e+00 1.048e+00 1.037e+00 9.805e-01 1.028e+00 1.066e+00 1.055e+00 1.042e+00 1.039e+00 1.042e+00 1.066e+00 9.996e-01 1.041e+00 1.007e+00 1.048e+00 9.961e-01 1.035e+00 1.050e+00 1.002e+00 9.830e-01 :01:2013-05-21T08:42:43.288 9.638e-01 1.007e+00 9.641e-01 9.830e-01 9.513e-01 1.007e+00 9.860e-01 9.815e-01 1.030e+00 1.019e+00 9.914e-01 1.006e+00 9.937e-01 1.063e+00 9.756e-01 9.840e-01 1.027e+00 9.781e-01 9.658e-01 9.644e-01 9.813e-01 1.030e+00 9.591e-01 9.855e-01 9.608e-01 9.845e-01 9.961e-01 1.018e+00 1.040e+00 9.605e-01 9.968e-01 1.039e+00 1.000e+00 1.052e+00 1.041e+00 1.036e+00 9.975e-01 9.780e-01 1.034e+00 9.864e-01 1.009e+00 1.048e+00 9.698e-01 1.042e+00 9.907e-01 1.004e+00 1.042e+00 9.935e-01 1.031e+00 1.046e+00 1.056e+00 1.070e+00 9.773e-01 9.924e-01 1.038e+00 9.942e-01 1.046e+00 9.972e-01 1.002e+00 1.026e+00 1.011e+00 1.007e+00 1.014e+00 1.001e+00 1.021e+00 1.010e+00 9.896e-01 1.039e+00 9.941e-01 1.029e+00 1.009e+00 9.796e-01 1.012e+00 1.050e+00 1.064e+00 1.023e+00 1.064e+00 1.060e+00 9.832e-01 1.044e+00 1.021e+00 9.918e-01 1.050e+00 1.042e+00 9.972e-01 9.795e-01 1.040e+00 1.043e+00 1.018e+00 1.047e+00 1.025e+00 1.028e+00 1.020e+00 1.063e+00 1.058e+00 1.056e+00 1.060e+00 1.054e+00 9.871e-01 1.027e+00 1.034e+00 1.007e+00 1.037e+00 1.021e+00 1.040e+00 1.028e+00 1.017e+00 1.013e+00 1.012e+00 1.050e+00 1.042e+00 1.011e+00 1.036e+00 1.054e+00 1.026e+00 1.057e+00 1.008e+00 2.033e+00 1.032e+00 1.036e+00 1.017e+00 9.766e-01 1.044e+00 1.025e+00 1.038e+00 1.011e+00 1.004e+00 1.015e+00 1.063e+00 1.054e+00 1.033e+00 1.053e+00 1.012e+00 1.060e+00 1.007e+00 1.029e+00 1.002e+00 1.048e+00 9.925e-01 1.037e+00 1.046e+00 9.812e-01 1.001e+00 :01:2013-05-21T08:47:43.288 1.021e+00 1.061e+00 9.466e-01 1.001e+00 9.966e-01 1.015e+00 9.765e-01 9.983e-01 1.030e+00 9.908e-01 9.904e-01 1.020e+00 9.449e-01 1.067e+00 1.054e+00 9.656e-01 1.018e+00 9.475e-01 1.010e+00 9.384e-01 9.509e-01 1.016e+00 9.855e-01 9.989e-01 9.824e-01 9.580e-01 9.610e-01 1.021e+00 1.016e+00 9.788e-01 1.005e+00 1.034e+00 1.054e+00 1.041e+00 1.040e+00 1.045e+00 9.921e-01 1.019e+00 9.912e-01 1.004e+00 9.995e-01 1.044e+00 1.003e+00 1.037e+00 9.963e-01 9.808e-01 1.038e+00 9.427e-01 1.021e+00 1.037e+00 1.114e+00 1.091e+00 9.447e-01 1.027e+00 1.060e+00 9.690e-01 1.085e+00 1.017e+00 1.033e+00 1.021e+00 1.022e+00 1.012e+00 9.869e-01 1.028e+00 1.043e+00 1.004e+00 1.011e+00 1.083e+00 1.002e+00 1.049e+00 9.779e-01 9.736e-01 9.974e-01 1.065e+00 1.063e+00 1.052e+00 1.053e+00 1.064e+00 1.020e+00 1.065e+00 1.024e+00 1.003e+00 1.044e+00 1.030e+00 9.533e-01 1.013e+00 9.978e-01 1.046e+00 1.020e+00 1.058e+00 1.011e+00 1.001e+00 1.037e+00 1.032e+00 1.059e+00 1.076e+00 1.069e+00 1.073e+00 1.003e+00 1.100e+00 1.056e+00 1.037e+00 1.016e+00 1.027e+00 1.063e+00 1.021e+00 1.050e+00 1.019e+00 9.900e-01 1.060e+00 1.064e+00 1.021e+00 1.017e+00 1.014e+00 9.905e-01 1.035e+00 9.729e-01 2.052e+00 1.049e+00 1.010e+00 1.031e+00 9.835e-01 1.038e+00 1.007e+00 1.025e+00 1.028e+00 9.739e-01 1.013e+00 1.109e+00 1.057e+00 1.024e+00 1.027e+00 1.029e+00 1.033e+00 1.015e+00 1.028e+00 1.003e+00 1.061e+00 1.012e+00 1.019e+00 1.057e+00 1.020e+00 9.740e-01 -[01]002348 +[01]002362 - - + :01:2013-05-21T02:02:43.288 1.575e+01 2.077e+01 4.371e+01 3.668e+01 3.174e+01 2.694e+01 2.143e+01 3.668e+01 2.232e+01 2.042e+01 2.200e+01 1.988e+01 1.805e+01 1.317e+01 1.114e+01 7.617e+00 7.234e+00 7.128e+00 1.019e+01 1.391e+01 1.049e+01 7.561e+00 9.916e+00 1.489e+01 1.130e+01 6.229e+00 4.672e+00 1.524e+01 1.644e+01 3.390e+01 2.632e+01 3.929e+01 3.188e+01 5.509e+01 6.263e+01 8.734e+01 1.626e+02 3.115e+01 1.961e+01 3.035e+02 2.809e+02 2.580e+02 2.307e+02 1.410e+02 7.266e+01 1.417e+01 2.764e+00 8.333e+00 3.901e+00 1.951e+00 1.946e+00 1.551e+00 1.145e+00 1.063e+00 1.056e+00 9.442e-01 9.281e-01 9.832e-01 9.597e-01 9.020e-01 9.441e-01 1.042e+00 1.074e+00 9.305e-01 8.956e-01 8.743e-01 9.261e-01 9.096e-01 9.305e-01 1.052e+00 1.074e+00 9.340e-01 9.701e-01 9.221e-01 9.278e-01 9.457e-01 9.271e-01 9.558e-01 1.047e+00 8.726e-01 9.299e-01 9.248e-01 9.488e-01 9.559e-01 9.273e-01 9.781e-01 1.027e+00 9.711e-01 9.747e-01 9.343e-01 9.119e-01 8.921e-01 9.039e-01 1.021e+00 1.055e+00 8.964e-01 9.569e-01 9.230e-01 9.445e-01 9.312e-01 9.056e-01 1.019e+00 1.021e+00 9.139e-01 9.601e-01 9.510e-01 9.438e-01 9.580e-01 9.316e-01 9.565e-01 1.006e+00 9.700e-01 9.168e-01 1.024e+00 9.988e-01 9.110e-01 9.371e-01 9.595e-01 9.068e-01 @@ -185,12 +191,14 @@ :01:2013-05-21T08:37:43.288 1.005e-01 1.156e-01 1.220e-01 8.941e-02 1.042e-01 1.028e-01 1.239e-01 7.427e-02 9.373e-02 1.125e-01 8.591e-02 8.406e-02 8.231e-02 1.386e-01 1.943e-01 1.023e-01 2.500e-01 1.780e-01 1.911e-01 3.008e-01 2.337e-01 3.662e-01 2.297e-01 1.567e-01 1.766e-01 6.603e-01 7.302e-01 2.126e-01 2.193e-01 4.402e-01 5.340e-01 3.088e-01 4.467e-01 4.699e-01 5.802e-01 6.793e-01 6.471e-01 9.171e-01 9.453e-01 8.463e-01 8.642e-01 8.834e-01 9.585e-01 9.211e-01 1.009e+00 1.007e+00 1.084e+00 1.023e+00 9.533e-01 9.681e-01 9.522e-01 9.991e-01 9.980e-01 1.020e+00 1.034e+00 9.895e-01 1.003e+00 1.122e+00 1.106e+00 9.968e-01 1.033e+00 1.060e+00 1.072e+00 1.021e+00 9.736e-01 1.023e+00 1.014e+00 1.004e+00 9.766e-01 9.936e-01 1.006e+00 1.051e+00 1.152e+00 9.628e-01 1.016e+00 9.741e-01 9.916e-01 1.084e+00 1.107e+00 9.895e-01 1.002e+00 1.094e+00 1.006e+00 1.027e+00 9.859e-01 1.056e+00 1.089e+00 1.080e+00 9.991e-01 1.006e+00 1.011e+00 9.685e-01 9.846e-01 1.037e+00 1.036e+00 1.009e+00 1.006e+00 1.023e+00 1.048e+00 1.012e+00 9.750e-01 1.034e+00 1.014e+00 1.010e+00 1.008e+00 1.053e+00 1.031e+00 1.070e+00 1.042e+00 1.088e+00 1.091e+00 1.054e+00 1.039e+00 1.070e+00 1.042e+00 1.012e+00 1.037e+00 1.091e+00 1.053e+00 :01:2013-05-21T08:42:43.288 1.617e-01 1.269e-01 1.264e-01 7.342e-02 8.950e-02 1.206e-01 1.428e-01 7.116e-02 9.435e-02 1.262e-01 8.513e-02 9.700e-02 9.014e-02 1.338e-01 1.914e-01 1.148e-01 1.936e-01 1.356e-01 1.505e-01 1.579e-01 1.144e-01 1.275e-01 1.218e-01 1.733e-01 1.840e-01 6.229e-01 6.563e-01 1.888e-01 3.200e-01 4.594e-01 5.462e-01 4.604e-01 4.544e-01 4.628e-01 6.283e-01 7.323e-01 7.034e-01 9.247e-01 9.909e-01 8.227e-01 8.876e-01 8.893e-01 1.182e+00 9.832e-01 1.007e+00 8.816e-01 9.865e-01 9.871e-01 9.203e-01 9.749e-01 9.353e-01 9.607e-01 9.976e-01 9.960e-01 1.003e+00 9.880e-01 1.014e+00 1.027e+00 1.064e+00 1.029e+00 1.026e+00 1.067e+00 1.054e+00 9.803e-01 9.697e-01 9.797e-01 1.022e+00 9.928e-01 1.013e+00 1.027e+00 1.027e+00 1.029e+00 1.176e+00 1.001e+00 9.754e-01 1.035e+00 9.997e-01 1.030e+00 1.018e+00 9.692e-01 1.029e+00 1.204e+00 1.026e+00 1.018e+00 9.994e-01 1.005e+00 1.009e+00 1.078e+00 1.012e+00 1.030e+00 1.047e+00 9.619e-01 9.778e-01 1.046e+00 1.110e+00 9.803e-01 1.064e+00 9.859e-01 1.004e+00 1.031e+00 1.013e+00 1.060e+00 1.035e+00 1.008e+00 1.028e+00 1.040e+00 9.710e-01 1.001e+00 1.018e+00 9.965e-01 1.021e+00 1.050e+00 9.916e-01 1.051e+00 1.031e+00 1.001e+00 1.014e+00 1.012e+00 9.988e-01 :01:2013-05-21T08:47:43.288 1.412e-01 2.300e-01 2.680e-01 1.184e-01 1.053e-01 1.269e-01 1.197e-01 5.903e-02 9.002e-02 7.825e-02 8.149e-02 9.168e-02 1.039e-01 1.525e-01 2.020e-01 1.151e-01 1.029e-01 1.033e-01 1.202e-01 1.327e-01 9.988e-02 1.328e-01 1.549e-01 1.858e-01 1.754e-01 6.335e-01 6.745e-01 2.012e-01 2.220e-01 3.249e-01 3.445e-01 4.253e-01 4.311e-01 4.780e-01 5.533e-01 5.948e-01 6.652e-01 9.494e-01 7.732e-01 7.871e-01 8.708e-01 9.687e-01 9.887e-01 9.383e-01 8.865e-01 9.831e-01 1.047e+00 9.740e-01 9.488e-01 9.728e-01 9.644e-01 9.544e-01 9.082e-01 1.027e+00 9.378e-01 9.787e-01 1.022e+00 1.002e+00 9.045e-01 9.799e-01 1.017e+00 1.030e+00 1.008e+00 9.923e-01 9.384e-01 1.032e+00 9.527e-01 1.071e+00 1.057e+00 1.021e+00 9.891e-01 1.091e+00 1.151e+00 1.034e+00 1.048e+00 9.913e-01 9.586e-01 1.130e+00 1.024e+00 1.009e+00 1.038e+00 1.443e+00 1.045e+00 9.817e-01 9.671e-01 1.057e+00 1.117e+00 1.040e+00 1.077e+00 1.042e+00 9.623e-01 1.007e+00 1.013e+00 9.792e-01 9.904e-01 9.909e-01 1.103e+00 1.045e+00 1.059e+00 9.734e-01 9.794e-01 9.744e-01 9.726e-01 1.046e+00 1.068e+00 1.058e+00 1.048e+00 9.908e-01 1.041e+00 9.608e-01 1.063e+00 1.094e+00 9.850e-01 1.037e+00 1.159e+00 1.013e+00 1.066e+00 1.078e+00 1.034e+00 -[01]001364 +[01]001378 - - + :01:2013-05-21T08:47:43.288 9.940e-01 1.056e+00 1.056e+00 1.017e+00 9.988e-01 1.019e+00 1.010e+00 1.047e+00 1.053e+00 1.064e+00 9.939e-01 1.054e+00 1.014e+00 1.000e+00 1.003e+00 1.025e+00 1.035e+00 9.941e-01 9.905e-01 9.956e-01 1.007e+00 1.045e+00 1.016e+00 1.048e+00 1.031e+00 1.032e+00 1.029e+00 1.144e+00 1.161e+00 1.010e+00 1.049e+00 1.025e+00 1.076e+00 1.082e+00 1.022e+00 1.065e+00 1.056e+00 1.038e+00 1.037e+00 1.030e+00 1.011e+00 1.062e+00 1.039e+00 1.019e+00 9.978e-01 1.045e+00 1.014e+00 1.032e+00 1.027e+00 1.020e+00 1.019e+00 9.921e-01 9.931e-01 1.030e+00 1.000e+00 1.018e+00 1.035e+00 1.020e+00 1.044e+00 1.040e+00 1.040e+00 @@ -256,12 +264,14 @@ :01:2013-05-21T13:47:43.288 1.039e+00 1.028e+00 1.018e+00 1.047e+00 9.929e-01 1.041e+00 1.010e+00 1.020e+00 1.042e+00 1.085e+00 9.898e-01 1.066e+00 1.004e+00 1.019e+00 9.806e-01 1.061e+00 1.037e+00 1.032e+00 1.017e+00 1.011e+00 1.006e+00 1.050e+00 1.011e+00 1.030e+00 1.034e+00 1.049e+00 1.039e+00 1.086e+00 1.083e+00 1.067e+00 1.050e+00 1.028e+00 1.021e+00 1.046e+00 1.029e+00 1.045e+00 1.001e+00 1.011e+00 1.066e+00 1.057e+00 1.009e+00 1.058e+00 1.025e+00 9.976e-01 1.040e+00 1.003e+00 1.029e+00 1.006e+00 1.038e+00 1.002e+00 1.063e+00 1.019e+00 9.979e-01 1.019e+00 1.002e+00 1.042e+00 1.031e+00 1.008e+00 1.021e+00 1.015e+00 1.031e+00 :01:2013-05-21T13:52:43.288 1.027e+00 1.063e+00 1.059e+00 1.014e+00 9.980e-01 1.032e+00 1.028e+00 1.036e+00 1.043e+00 1.071e+00 9.903e-01 1.053e+00 1.026e+00 1.036e+00 9.959e-01 1.000e+00 1.025e+00 1.006e+00 9.959e-01 1.026e+00 1.012e+00 1.036e+00 9.976e-01 1.044e+00 1.062e+00 1.020e+00 9.829e-01 1.108e+00 1.117e+00 1.025e+00 1.079e+00 1.046e+00 1.081e+00 1.079e+00 1.054e+00 1.054e+00 1.032e+00 1.054e+00 1.033e+00 1.083e+00 9.916e-01 1.030e+00 9.937e-01 1.018e+00 1.026e+00 9.930e-01 1.018e+00 1.015e+00 1.052e+00 1.019e+00 1.048e+00 9.985e-01 1.008e+00 1.028e+00 1.009e+00 1.036e+00 1.037e+00 1.043e+00 1.013e+00 1.018e+00 1.030e+00 :01:2013-05-21T13:57:43.288 1.053e+00 1.039e+00 1.034e+00 1.014e+00 9.946e-01 1.094e+00 9.960e-01 1.035e+00 1.030e+00 1.042e+00 9.896e-01 1.059e+00 1.038e+00 1.006e+00 1.047e+00 1.001e+00 1.044e+00 1.025e+00 1.039e+00 9.931e-01 1.033e+00 9.824e-01 1.019e+00 1.036e+00 1.076e+00 1.023e+00 1.039e+00 1.093e+00 1.080e+00 1.029e+00 1.091e+00 1.014e+00 1.071e+00 9.964e-01 1.061e+00 1.010e+00 1.024e+00 1.008e+00 1.043e+00 1.024e+00 1.013e+00 1.061e+00 9.894e-01 1.021e+00 1.052e+00 9.923e-01 1.018e+00 1.007e+00 1.028e+00 1.007e+00 1.036e+00 9.981e-01 9.990e-01 1.043e+00 9.984e-01 1.027e+00 1.043e+00 1.025e+00 1.054e+00 1.021e+00 1.031e+00 -[01]002221 +[01]002235 - - + :01:2013-05-21T02:02:43.288 1.258e+00 1.397e+00 1.250e+00 1.037e+00 1.005e+00 9.443e-01 1.212e+00 1.278e+00 1.213e+00 1.258e+00 1.255e+00 1.246e+00 1.121e+00 1.096e+00 1.919e+00 2.233e+00 6.367e+00 2.257e+00 4.921e+00 2.033e+00 6.094e-01 3.962e-01 3.468e-01 1.643e-01 1.811e-01 4.782e-01 2.459e-01 2.947e-01 3.329e-01 3.175e-01 2.804e-01 4.994e-01 1.865e+00 3.254e+00 7.047e+00 9.635e+00 6.377e+00 3.164e+00 2.299e+00 2.022e+00 2.013e+00 2.054e+00 3.061e+00 6.129e+00 1.153e+01 2.505e+01 5.292e+01 5.888e+01 4.394e+01 2.439e+01 1.617e+01 1.008e+01 7.071e+00 5.166e+00 3.837e+00 4.099e+00 4.983e+00 6.045e+00 9.171e+00 4.874e+01 1.193e+03 1.184e+04 1.617e+04 2.195e+04 2.340e+04 2.249e+04 1.383e+04 3.964e+03 1.046e+03 5.749e+02 1.992e+02 2.222e+02 3.426e+02 8.463e+02 1.235e+03 1.412e+02 5.879e+01 5.027e+01 5.367e+01 3.231e+01 5.211e+01 4.933e+01 4.126e+01 4.832e+01 3.037e+01 2.289e+01 1.328e+01 5.696e+01 3.936e+02 5.659e+02 3.697e+02 2.942e+02 2.575e+02 1.067e+02 6.656e+01 4.810e+01 @@ -408,12 +418,14 @@ :01:2013-05-21T13:47:43.288 2.334e+00 1.891e+00 1.243e+00 1.302e+00 1.433e+00 2.013e+00 1.829e+00 1.627e+00 1.869e+00 1.740e+00 1.842e+00 1.300e+00 1.689e+00 2.224e+00 1.689e+00 2.169e+00 1.497e+00 1.701e+00 1.052e+00 1.132e+00 2.035e+00 2.036e+00 1.132e+00 5.987e-01 9.859e-01 1.499e+00 1.510e+00 2.304e+00 3.441e+00 4.380e+00 1.628e+00 9.835e-01 1.523e+00 1.856e+00 1.885e+00 2.883e+00 3.364e+00 2.153e+00 1.201e+00 1.060e+00 1.118e+00 1.021e+00 1.204e+00 1.196e+00 1.118e+00 1.170e+00 1.190e+00 1.131e+00 1.079e+00 1.147e+00 2.230e+00 3.903e+00 2.338e+00 1.451e+00 1.136e+00 1.054e+00 1.194e+00 1.239e+00 1.124e+00 1.124e+00 1.002e+00 1.049e+00 1.144e+00 1.121e+00 1.370e+00 1.325e+00 1.302e+00 1.328e+00 1.269e+00 1.216e+00 1.317e+00 1.149e+00 1.081e+00 1.427e+00 2.143e+00 1.311e+00 1.115e+00 2.367e+00 5.692e+01 2.250e+02 2.052e+02 1.161e+02 1.338e+02 6.996e+01 2.037e+01 3.894e+00 2.436e+00 4.370e+00 1.115e+01 1.581e+01 2.265e+01 4.725e+01 5.689e+01 9.471e+01 5.632e+01 5.583e+01 :01:2013-05-21T13:52:43.288 2.454e+00 1.934e+00 1.343e+00 1.203e+00 1.427e+00 1.888e+00 1.713e+00 1.727e+00 2.029e+00 1.678e+00 1.675e+00 1.331e+00 1.843e+00 2.137e+00 1.690e+00 2.353e+00 1.387e+00 1.591e+00 1.111e+00 1.048e+00 1.951e+00 2.233e+00 2.003e+00 7.539e-01 9.568e-01 8.960e-01 1.142e+00 2.497e+00 3.756e+00 6.458e+00 2.479e+00 8.613e-01 1.238e+00 1.394e+00 1.317e+00 2.595e+00 4.833e+00 4.666e+00 1.838e+00 1.197e+00 1.159e+00 9.910e-01 1.111e+00 1.222e+00 1.117e+00 1.204e+00 1.153e+00 1.074e+00 1.112e+00 1.142e+00 1.929e+00 3.368e+00 2.319e+00 1.389e+00 1.120e+00 1.155e+00 1.162e+00 1.169e+00 1.134e+00 1.162e+00 1.130e+00 1.097e+00 1.055e+00 1.044e+00 1.341e+00 1.371e+00 1.325e+00 1.244e+00 1.306e+00 1.349e+00 1.731e+00 1.811e+00 1.333e+00 2.180e+00 4.234e+00 4.078e+00 2.014e+01 5.627e+01 5.022e+01 3.939e+02 9.240e+02 1.786e+02 7.386e+01 2.885e+01 9.973e+00 5.658e+01 6.814e+01 7.508e+00 1.170e+01 1.405e+01 1.780e+01 2.372e+01 4.654e+01 5.468e+01 4.172e+01 5.663e+01 :01:2013-05-21T13:57:43.288 2.588e+00 2.066e+00 1.256e+00 1.158e+00 1.302e+00 1.734e+00 1.788e+00 1.492e+00 1.776e+00 1.693e+00 1.726e+00 1.155e+00 1.749e+00 2.131e+00 1.623e+00 2.007e+00 1.443e+00 1.485e+00 1.473e+00 1.043e+00 2.146e+00 2.309e+00 2.341e+00 1.241e+00 9.825e-01 1.075e+00 9.754e-01 2.898e+00 4.095e+00 7.140e+00 3.881e+00 1.106e+00 1.446e+00 1.349e+00 1.290e+00 3.088e+00 3.295e+00 3.677e+00 1.816e+00 1.180e+00 1.183e+00 1.081e+00 1.142e+00 1.185e+00 1.255e+00 1.348e+00 1.070e+00 9.984e-01 1.077e+00 1.089e+00 1.648e+00 3.242e+00 2.199e+00 1.358e+00 1.146e+00 1.042e+00 1.132e+00 1.138e+00 1.131e+00 1.036e+00 1.122e+00 1.184e+00 1.139e+00 1.026e+00 1.253e+00 1.179e+00 1.223e+00 1.193e+00 1.126e+00 1.059e+00 1.131e+00 1.116e+00 1.534e+00 1.070e+00 1.631e+00 4.330e+00 1.465e+01 2.695e+01 3.170e+01 9.724e+01 2.828e+01 2.007e+01 1.772e+01 1.209e+01 3.047e+00 1.759e+00 4.143e+00 9.379e+00 3.395e+01 2.624e+01 1.862e+01 1.579e+01 3.133e+01 4.168e+01 2.499e+01 1.753e+01 -[01]000562 +[01]000576 - - + :01:2013-05-21T02:02:43.288 4.882e+00 4.961e+00 1.156e+01 1.753e+01 7.812e+00 2.002e+00 1.338e+00 3.432e+00 2.989e+00 4.260e+00 1.411e+00 1.837e+00 2.203e+00 8.284e+00 1.455e+00 9.018e+00 3.644e+00 @@ -559,12 +571,14 @@ :01:2013-05-21T13:47:43.288 1.677e+01 1.361e+01 6.633e+00 3.254e+00 4.821e+00 5.534e+00 3.201e+00 7.068e+00 6.315e-01 1.620e+00 1.493e+00 1.298e+00 4.957e-01 1.441e+00 2.744e-01 6.887e-01 4.969e-01 :01:2013-05-21T13:52:43.288 2.893e+01 2.086e+01 1.452e+00 1.512e+00 4.597e+00 9.461e+00 3.410e+00 7.983e+00 2.088e+00 2.114e+00 2.536e+00 3.690e+00 2.850e+00 1.740e+00 2.495e-01 7.993e-01 8.200e-01 :01:2013-05-21T13:57:43.288 8.530e+00 6.535e+00 5.690e+00 3.973e+00 1.235e+00 1.631e+00 1.746e+00 7.325e+00 9.715e-01 1.448e+00 2.364e+00 7.178e-01 8.824e-01 4.274e-01 1.697e-01 6.690e-01 1.042e+00 -[01]002053 +[01]002067 - - + :01:2013-05-21T02:02:43.288 8.360e+03 7.007e+03 1.105e+04 7.816e+03 9.111e+03 9.008e+03 6.975e+03 7.752e+03 6.728e+03 7.377e+03 2.891e+03 3.935e+03 2.007e+03 1.644e+03 8.157e+02 1.184e+03 7.466e+02 9.112e+02 9.360e+01 2.567e+02 4.990e+01 9.661e+01 2.213e+01 3.150e+01 9.336e+00 7.253e+00 7.550e+00 1.704e+01 1.165e+02 7.152e+01 2.268e+01 2.630e+01 1.263e+00 1.477e+00 1.547e+00 1.353e+00 1.506e+00 9.964e-01 8.593e-01 1.400e+00 1.175e+00 1.330e+00 1.579e+00 1.490e+00 1.940e+00 1.428e+00 1.738e+00 1.632e+00 1.263e+00 1.271e+00 1.749e+00 1.022e+00 1.143e+00 1.159e+00 1.287e+00 1.049e+00 1.118e+00 1.852e+00 1.720e+00 1.558e+00 1.310e+00 1.350e+00 1.488e+00 1.421e+00 1.428e+00 1.354e+00 1.156e+00 9.535e-01 1.696e+00 1.388e+00 1.053e+00 1.055e+00 1.593e+00 1.491e+00 1.585e+00 1.386e+00 1.865e+00 2.342e+00 1.808e+00 1.105e+00 1.204e+00 1.490e+00 1.208e+00 9.755e-01 8.345e+00 1.274e+00 1.526e+00 8.255e-01 @@ -711,12 +725,14 @@ :01:2013-05-21T13:47:43.288 8.523e+00 1.090e+01 1.435e+01 1.388e+01 2.484e+01 2.666e+01 2.526e+01 2.018e+01 1.907e+01 3.552e+01 1.205e+01 1.324e+01 1.187e+01 2.209e+01 7.792e+00 8.320e+00 6.656e+00 9.000e+00 6.825e+00 8.705e+00 7.566e+00 6.124e+00 1.053e+01 1.321e+01 8.869e+00 4.945e+00 4.387e+00 5.118e+00 7.002e+00 3.641e+00 2.016e+00 2.149e+00 1.082e+00 1.089e+00 1.029e+00 1.042e+00 1.546e+00 1.522e+00 1.823e+00 1.884e+00 2.229e+00 1.935e+00 2.540e+00 2.384e+00 2.545e+00 2.216e+00 2.013e+00 1.881e+00 1.482e+00 9.918e-01 1.709e+00 1.195e+00 1.188e+00 8.979e-01 1.127e+00 1.054e+00 1.044e+00 1.028e+00 1.102e+00 1.019e+00 1.179e+00 1.295e+00 1.155e+00 1.076e+00 1.210e+00 1.123e+00 1.145e+00 1.308e+00 1.247e+00 1.006e+00 1.180e+00 1.019e+00 1.029e+00 1.091e+00 1.079e+00 1.222e+00 1.470e+00 1.214e+00 7.219e-01 1.105e+00 1.382e+00 1.290e+00 1.348e+00 1.444e+00 1.441e+00 1.580e+00 1.438e+00 1.281e+00 :01:2013-05-21T13:52:43.288 5.537e+00 1.176e+01 1.366e+01 1.200e+01 1.193e+01 9.501e+00 9.502e+00 1.778e+01 1.444e+01 7.478e+00 5.663e+00 1.134e+01 6.804e+00 9.986e+00 5.669e+00 7.202e+00 5.632e+00 9.394e+00 8.209e+00 5.588e+00 5.451e+00 9.958e+00 7.038e+00 8.080e+00 4.056e+00 6.775e+00 3.874e+00 5.751e+00 5.725e+00 3.310e+00 2.297e+00 2.145e+00 9.935e-01 1.040e+00 1.059e+00 1.000e+00 1.642e+00 1.604e+00 1.993e+00 1.746e+00 2.597e+00 1.679e+00 2.052e+00 2.467e+00 1.984e+00 2.236e+00 2.167e+00 1.933e+00 1.977e+00 9.689e-01 1.166e+00 1.176e+00 1.366e+00 1.212e+00 9.671e-01 1.346e+00 1.077e+00 1.217e+00 1.106e+00 1.129e+00 1.278e+00 1.193e+00 1.236e+00 9.637e-01 1.006e+00 1.139e+00 1.054e+00 1.058e+00 1.200e+00 1.031e+00 1.246e+00 1.116e+00 1.182e+00 1.072e+00 1.289e+00 1.175e+00 1.235e+00 1.142e+00 1.062e+00 1.139e+00 1.243e+00 1.432e+00 1.295e+00 1.081e+00 1.355e+00 1.148e+00 1.436e+00 1.382e+00 :01:2013-05-21T13:57:43.288 9.755e+00 3.603e+00 9.680e+00 1.066e+01 2.023e+01 1.186e+01 3.246e+01 1.769e+01 4.237e+01 1.522e+01 2.033e+01 6.889e+00 2.161e+01 6.732e+00 1.287e+01 7.465e+00 5.479e+00 1.067e+01 4.354e+00 7.813e+00 4.732e+00 5.107e+00 4.677e+00 3.507e+00 3.033e+00 2.318e+00 1.364e+00 2.558e+00 1.153e+00 1.561e+00 1.350e+00 1.694e+00 1.100e+00 1.085e+00 1.027e+00 1.070e+00 1.579e+00 1.804e+00 1.853e+00 1.721e+00 2.412e+00 2.059e+00 1.905e+00 1.841e+00 2.163e+00 2.046e+00 1.847e+00 1.913e+00 1.881e+00 1.669e+00 1.212e+00 1.504e+00 1.229e+00 1.221e+00 1.067e+00 1.275e+00 1.249e+00 1.072e+00 1.108e+00 1.086e+00 9.828e-01 1.023e+00 1.192e+00 1.203e+00 1.088e+00 1.341e+00 1.070e+00 8.984e-01 1.140e+00 1.341e+00 1.331e+00 1.301e+00 1.199e+00 1.000e+00 1.022e+00 1.115e+00 1.212e+00 1.091e+00 9.673e-01 9.647e-01 1.337e+00 1.468e+00 1.202e+00 1.142e+00 1.151e+00 1.185e+00 1.434e+00 1.472e+00 -[01]001573 +[01]001587 - - + :01:2013-05-21T08:47:43.288 2.852e-01 3.540e-01 3.837e-01 1.023e+00 8.490e-01 1.026e+00 1.234e+00 7.631e-01 6.595e-01 8.873e-01 9.194e-01 9.601e-01 1.001e+00 1.081e+00 1.016e+00 1.080e+00 1.029e+00 9.744e-01 1.034e+00 9.946e-01 1.029e+00 1.013e+00 1.063e+00 1.015e+00 1.036e+00 1.034e+00 1.025e+00 1.025e+00 1.029e+00 1.037e+00 1.032e+00 1.006e+00 9.976e-01 1.051e+00 1.020e+00 1.036e+00 1.001e+00 1.021e+00 9.963e-01 1.034e+00 1.029e+00 9.462e-01 1.008e+00 9.926e-01 1.064e+00 9.962e-01 1.031e+00 1.014e+00 1.012e+00 1.051e+00 1.024e+00 9.911e-01 1.016e+00 9.961e-01 1.004e+00 9.994e-01 9.978e-01 9.650e-01 1.007e+00 1.047e+00 9.912e-01 9.978e-01 1.020e+00 1.023e+00 1.033e+00 9.901e-01 1.014e+00 9.861e-01 1.072e+00 9.599e-01 1.035e+00 1.037e+00 9.966e-01 9.967e-01 1.012e+00 9.960e-01 @@ -782,12 +798,14 @@ :01:2013-05-21T13:47:43.288 5.737e+01 8.168e+00 1.104e+01 7.287e+01 2.497e+01 7.112e+00 4.551e+00 1.091e+01 1.913e+00 2.835e+00 1.827e+00 1.060e+00 9.762e-01 1.075e+00 1.028e+00 1.046e+00 9.929e-01 1.002e+00 1.041e+00 1.044e+00 1.027e+00 1.015e+00 1.022e+00 1.001e+00 1.001e+00 1.043e+00 1.031e+00 1.007e+00 1.054e+00 1.038e+00 1.047e+00 1.025e+00 9.903e-01 9.978e-01 1.004e+00 1.025e+00 1.019e+00 1.018e+00 1.009e+00 1.028e+00 9.981e-01 9.907e-01 9.957e-01 1.009e+00 1.053e+00 9.960e-01 1.032e+00 9.970e-01 9.695e-01 1.023e+00 1.025e+00 1.011e+00 1.020e+00 1.008e+00 1.008e+00 9.964e-01 1.018e+00 1.003e+00 1.021e+00 1.041e+00 1.004e+00 1.018e+00 1.035e+00 1.021e+00 1.053e+00 9.621e-01 1.029e+00 1.018e+00 1.031e+00 9.824e-01 1.011e+00 1.035e+00 1.032e+00 1.018e+00 9.995e-01 1.035e+00 :01:2013-05-21T13:52:43.288 5.333e+01 2.221e+01 1.357e+01 2.901e+01 3.840e+01 9.319e+00 4.155e+00 3.383e+00 3.847e+00 3.646e+00 3.369e+00 9.816e-01 1.004e+00 1.089e+00 1.057e+00 1.056e+00 9.883e-01 1.047e+00 1.045e+00 1.040e+00 1.020e+00 1.021e+00 1.030e+00 9.927e-01 1.007e+00 1.022e+00 1.038e+00 1.026e+00 1.022e+00 1.034e+00 1.064e+00 1.021e+00 1.020e+00 1.011e+00 1.016e+00 1.007e+00 1.009e+00 1.058e+00 9.883e-01 1.001e+00 1.023e+00 9.971e-01 1.006e+00 1.008e+00 1.025e+00 1.020e+00 1.034e+00 1.031e+00 1.012e+00 1.037e+00 1.048e+00 1.030e+00 1.022e+00 9.849e-01 1.000e+00 9.924e-01 1.019e+00 9.814e-01 1.004e+00 1.033e+00 1.015e+00 1.037e+00 1.031e+00 1.027e+00 1.051e+00 9.932e-01 1.063e+00 1.007e+00 1.018e+00 9.699e-01 1.026e+00 1.068e+00 1.024e+00 1.002e+00 1.018e+00 1.036e+00 :01:2013-05-21T13:57:43.288 2.550e+01 1.168e+01 3.301e+00 5.979e+00 3.383e+00 4.327e+00 3.736e+00 1.864e+00 2.144e+00 2.001e+00 2.072e+00 9.626e-01 1.003e+00 1.045e+00 1.030e+00 1.046e+00 9.985e-01 1.030e+00 1.050e+00 9.815e-01 1.004e+00 1.025e+00 1.025e+00 1.002e+00 1.016e+00 1.030e+00 1.019e+00 1.034e+00 1.049e+00 9.890e-01 1.023e+00 1.006e+00 1.009e+00 1.004e+00 1.004e+00 1.009e+00 9.971e-01 9.928e-01 1.000e+00 9.977e-01 9.906e-01 1.010e+00 9.818e-01 1.004e+00 1.046e+00 1.002e+00 9.899e-01 1.013e+00 1.021e+00 1.046e+00 9.862e-01 1.020e+00 1.024e+00 9.834e-01 1.037e+00 9.848e-01 1.040e+00 1.012e+00 1.042e+00 1.052e+00 1.003e+00 1.050e+00 9.896e-01 1.026e+00 1.030e+00 9.511e-01 1.018e+00 9.928e-01 1.027e+00 1.008e+00 1.014e+00 1.029e+00 9.960e-01 1.018e+00 9.850e-01 1.004e+00 -[01]000845 +[01]000859 - - + :01:2013-05-21T02:02:43.288 1.267e+00 1.116e+00 2.371e+00 1.817e+00 2.497e-01 3.647e-01 1.285e+00 6.715e+00 1.211e+00 3.992e+00 2.073e+00 6.512e-01 2.372e+00 1.910e-01 1.522e+00 4.856e+00 1.404e+00 4.179e+00 1.269e+01 2.116e+01 1.390e+02 3.203e+02 9.828e+02 2.120e+03 6.003e+02 3.243e+03 2.416e+03 5.893e+03 2.150e+03 8.913e+03 7.459e+03 1.870e+04 diff --git a/test/das2_bin_avgsec_output2.d2t b/test/das2_bin_avgsec_output2.d2t index 9e80da4..cfaaed1 100644 --- a/test/das2_bin_avgsec_output2.d2t +++ b/test/das2_bin_avgsec_output2.d2t @@ -1,30 +1,40 @@ -[00]000415 - +[00]000327 + -[01]000800 +[01]000748 - + - + - + - + :01:2014-04-08T00:15:05.046 6.662e-01 -1.372e+00 -3.632e-01 1.569e+00 diff --git a/test/das2_bin_peakavgsec_input1.d2s b/test/das2_bin_peakavgsec_input1.d2s index d6dc37cb700246db73247eda7b6f929ec2d3b488..247bca1d6b2334db276b5535ccf8943521452412 100644 GIT binary patch delta 135 zcmbPpGgB_jhv6I}x!GE#zwH=4DYF}9j9wVE-vnz6K+v9_AAwVJWFnsKz6akiRqwVH9a hn(?%n@wS@rwVLs_nhCU;3AUOEwVDZUH4{mD1OO-^C>8(! delta 125 zcmWN1Le-gVVq9xj*Bf6p|`eGo4 YVk9Cl785ZQGcgwnu@oz@{;;`ze}3{MO8@`> diff --git a/test/das2_bin_peakavgsec_output1.d2t b/test/das2_bin_peakavgsec_output1.d2t index ea3e3d5..8dbc006 100644 --- a/test/das2_bin_peakavgsec_output1.d2t +++ b/test/das2_bin_peakavgsec_output1.d2t @@ -1,41 +1,49 @@ -[00]000852 - +[00]000686 + [xx]000072 [xx]000127 -[01]001036 - +[01]000929 + - + - + [xx]000071 diff --git a/test/das2_from_das1_output1.d2t b/test/das2_from_das1_output1.d2t index 3098af3..138f9c6 100644 --- a/test/das2_from_das1_output1.d2t +++ b/test/das2_from_das1_output1.d2t @@ -1,16 +1,18 @@ -[00]000608 - +[00]000449 + [01]000228 diff --git a/test/das2_from_das1_output2.d2t b/test/das2_from_das1_output2.d2t index 8017f1a..dc9fe5c 100644 --- a/test/das2_from_das1_output2.d2t +++ b/test/das2_from_das1_output2.d2t @@ -1,29 +1,39 @@ -[00]000508 - +[00]000369 + -[01]000422 +[01]000438 - + - + - + - + :01:1996-09-01T00:00:00.000 5.997e+01 2.318e+02 4.167e+00 5.774e+00 diff --git a/test/das2_histo_output1.d2t b/test/das2_histo_output1.d2t index 15da705..e1f3dcd 100644 --- a/test/das2_histo_output1.d2t +++ b/test/das2_histo_output1.d2t @@ -1,17 +1,23 @@ -[00]000243 - +[00]000206 + -[01]000653 +[01]000644 - + - + :01: 1.1000e+01 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 1.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 From f550cfe356c932f616fc6415b2b62ac25c174b23 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Tue, 23 Jan 2024 18:48:38 -0600 Subject: [PATCH 07/40] Draft das3 tag parsing --- buildfiles/Linux.mak | 11 +- das2/buffer.c | 19 + das2/buffer.h | 15 + das2/dataset.h | 2 +- das2/defs.h | 1 + das2/io.c | 645 +++++-- das2/io.h | 24 +- das2/processor.c | 2 + das2/processor.h | 39 +- das2/stream.c | 131 +- das2/stream.h | 54 +- das2/util.c | 2 + test/TestV3Read.c | 45 + test/ex06_waveform_binary.d3b | 3187 +++++++++++++++++++++++++++++++ test/ex12_sounder_xyz.d3t | 72 + test/tag_test.dNt | 71 + utilities/das2_ascii.c | 2 +- utilities/das2_bin_avg.c | 7 +- utilities/das2_bin_avgsec.c | 2 +- utilities/das2_bin_peakavgsec.c | 2 +- utilities/das2_binary.c | 2 +- utilities/das2_cache_rdr.c | 2 +- utilities/das2_deflate.c | 2 +- utilities/das2_inflate.c | 2 +- utilities/das2_psd.c | 2 +- 25 files changed, 4052 insertions(+), 291 deletions(-) create mode 100644 test/TestV3Read.c create mode 100644 test/ex06_waveform_binary.d3b create mode 100644 test/ex12_sounder_xyz.d3t create mode 100644 test/tag_test.dNt diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index 81812d9..3724c9b 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -31,7 +31,8 @@ UTIL_PROGS=das1_inctime das2_prtime das1_fxtime das2_ascii das2_bin_avg \ das2_cache_rdr das_node TEST_PROGS:=TestUnits TestArray TestVariable LoadStream TestBuilder \ - TestAuth TestCatalog TestTT2000 ex_das_cli ex_das_ephem TestCredMngr + TestAuth TestCatalog TestTT2000 ex_das_cli ex_das_ephem TestCredMngr \ + TestV3Read ifeq ($(SPICE),yes) TEST_PROGS:=$(TEST_PROGS) TestSpice @@ -46,7 +47,8 @@ LEX=flex YACC=bison DEFINES:=-DWISDOM_FILE=/etc/fftw/wisdom -D_XOPEN_SOURCE=600 -WARNINGS:=-Wall -Wno-format-security -Wno-format-truncation +WARNINGS:=-Wall -Werror -Wno-format-truncation -Wno-deprecated-declarations +#-Wno-format-security # Conda build does NOT set the include and lib directories within the # compiler script itself, it merely exports ENV vars. This is unfortunate @@ -192,6 +194,11 @@ test: $(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) @$(BD)/TestCredMngr $(BD) @echo "INFO: All test programs completed without errors" + +test3:$(BD) $(BD)/$(TARG).a + @echo "INFO: Running unit test for basic das v3.0 stream parsing, $(BD)/TestV3Read..." + @$(BD)/TestV3Read + test_spice:$(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) @echo "INFO: Running unit test for spice error redirect, $(BD)/TestSpice..." @$(BD)/TestSpice diff --git a/das2/buffer.c b/das2/buffer.c index 92e7b27..62571d0 100644 --- a/das2/buffer.c +++ b/das2/buffer.c @@ -331,6 +331,25 @@ size_t DasBuf_read(DasBuf* pThis, char* pOut, size_t uOut) return uRead; } +size_t DasBuf_peek(const DasBuf* pThis, char* pOut, size_t uOut) +{ + size_t uRead = 0; + while((pThis->pReadBeg + uRead) < pThis->pReadEnd && uRead < uOut){ + *pOut = *(pThis->pReadBeg + uRead); + ++pOut; + ++uRead; + } + return uRead; +} + +// Output the last character in the buffer, or +int DasBuf_last(const DasBuf* pThis){ + if(pThis->pReadEnd > pThis->pReadBeg) + return *(pThis->pReadEnd - 1); + else + return -1; +} + const char* DasBuf_readRec( DasBuf* pThis, const char* sDelim, size_t uDelimLen, size_t* pLen ){ diff --git a/das2/buffer.h b/das2/buffer.h index c8ee9cd..f388d23 100644 --- a/das2/buffer.h +++ b/das2/buffer.h @@ -227,6 +227,21 @@ DAS_API size_t DasBuf_strip(DasBuf* pThis); */ DAS_API size_t DasBuf_read(DasBuf* pThis, char* pOut, size_t uOut); +/** Peak at bytes from a buffer + * Copies bytes out of a buffer but does *not* increment the read point. + * + * @returns The number of bytes copied out of the buffer. + * @memberof DasBuf + */ +DAS_API size_t DasBuf_peek(const DasBuf* pThis, char* pOut, size_t uOut); + +/** Peak the last byte in the buffer + * @returns the last byte in the buffer as an int, or -1 if there are + * no bytes in the buffer. + * @memberof DasBuf + */ +DAS_API int DasBuf_last(const DasBuf* pThis); + /** Return a pointer to the start of the current line and advance the read * point to the start of the next line. * diff --git a/das2/dataset.h b/das2/dataset.h index d3f5e75..6530fea 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -156,7 +156,7 @@ typedef struct dataset { char sGroupId[DAS_MAX_ID_BUFSZ]; size_t uDims; /* Number of dimensions, das2 datasets are - * implicitly bundles in qdataset terms. */ + * implicitly bundles in qdataset terms. */ DasDim** lDims; /* The data variable object arrays */ size_t uSzDims; /* Current size of variable array */ diff --git a/das2/defs.h b/das2/defs.h index 247ab85..1404f95 100644 --- a/das2/defs.h +++ b/das2/defs.h @@ -117,6 +117,7 @@ extern "C" { #define DAS_22_STREAM_VER "2.2" +#define DAS_30_STREAM_VER "3.0" /* On Solaris systems NAME_MAX is not defined because pathconf() is supposed diff --git a/das2/io.c b/das2/io.c index 1f964e3..12f3b11 100644 --- a/das2/io.c +++ b/das2/io.c @@ -25,6 +25,7 @@ #include #include #include +#include #ifndef _WIN32 #include @@ -73,6 +74,35 @@ typedef ptrdiff_t ssize_t; /* ************************************************************************** */ /* Constructors/Destructors */ +static DasErrCode _DasIO_setMode(DasIO* pThis, const char* mode) +{ + pThis->dasver = 0; // Any version by default + + if(strchr(mode, '2') != NULL) + pThis->dasver = 2; + else if (strchr(mode, '3') != NULL) + pThis->dasver = 3; + + if(strchr(mode, 'r') != NULL){ + pThis->rw = 'r'; + } + else{ + if(strchr(mode, 'w') != NULL){ + pThis->rw = 'w'; + + if(strchr(mode, 'c') != NULL) + pThis->compressed = true; + + // When writing we have to have a version, default to das2 + if(pThis->dasver == 0) + pThis->dasver = 2; + } + else + return das_error(DASERR_IO, "Illegal argument for mode in new_DasIO_cfile"); + } + return DAS_OKAY; +} + DasIO* new_DasIO_cfile(const char* sProg, FILE * file, const char* mode ) { if(file == NULL){ @@ -80,37 +110,27 @@ DasIO* new_DasIO_cfile(const char* sProg, FILE * file, const char* mode ) return NULL; } - DasIO* pThis = (DasIO*)calloc(1, sizeof( DasIO ) ); - pThis->mode= STREAM_MODE_FILE; - pThis->file = file; + DasIO* pThis = (DasIO*)calloc(1, sizeof( DasIO ) ); + pThis->mode = STREAM_MODE_FILE; + pThis->file = file; pThis->nSockFd = -1; - pThis->taskSize= -1; /* for progress indication */ + pThis->taskSize = -1; /* for progress indication */ pThis->logLevel=LOGLVL_WARNING; strncpy(pThis->sName, sProg, DASIO_NAME_SZ - 1); OobComment_init(&pThis->cmt); das_store_str(&(pThis->cmt.sSrc), &(pThis->cmt.uSrcLen), pThis->sName); + + if(_DasIO_setMode(pThis, mode) != DAS_OKAY){ + free(pThis); + return NULL; + } + + /* Init an I/O buffer that we can re-use during the life of the object, + * This buffer is 1 byte more than the maximum Das Packet size, we may + * want to have a buffer that just grows on demand instead. */ + pThis->pDb = new_DasBuf(CMPR_OUT_BUF_SZ); - if(strchr(mode, 'r') != NULL){ - pThis->rw = 'r'; - } - else{ - if(strchr(mode, 'w') != NULL){ - pThis->rw = 'w'; - if(strchr(mode, 'c') != NULL) pThis->compressed = true; - } - else{ - das_error(DASERR_IO, "Illegal argument for mode in new_DasIO_cfile"); - free(pThis); - return NULL; - } - } - - /* Init an I/O buffer that we can re-use during the life of the object, - * This buffer is 1 byte more than the maximum Das Packet size, we may - * want to have a buffer that just grows on demand instead. */ - pThis->pDb = new_DasBuf(CMPR_OUT_BUF_SZ); - - return pThis; + return pThis; } DasIO* new_DasIO_cmd(const char* sProg, const char* sCmd) @@ -152,23 +172,12 @@ DasIO* new_DasIO_file(const char* sProg, const char* sFile, const char* mode) OobComment_init(&(pThis->cmt)); das_store_str(&(pThis->cmt.sSrc), &(pThis->cmt.uSrcLen), pThis->sName); - if(strchr(mode, 'r') != NULL){ - pThis->rw = 'r'; - pThis->file = fopen(sFile, "rb"); - } - else{ - if(strchr(mode, 'w') != NULL){ - pThis->rw = 'w'; - pThis->file = fopen(sFile, "wb"); - if(strchr(mode, 'c') != NULL) pThis->compressed = true; - } - else{ - das_error(22, "Illegal argument for mode in new_DasIO_cfile"); - free(pThis); - return NULL; - } - } - + if(_DasIO_setMode(pThis, mode) != DAS_OKAY){ + free(pThis); + return NULL; + } + + pThis->file = fopen(sFile, (pThis->rw == 'r') ? "rb" : "wb"); if(pThis->file == NULL){ free(pThis); das_error(DASERR_IO, "Error opening %s", sFile); @@ -194,18 +203,9 @@ DasIO* new_DasIO_socket(const char* sProg, int nSockFd, const char* mode) OobComment_init(&(pThis->cmt)); das_store_str(&(pThis->cmt.sSrc), &(pThis->cmt.uSrcLen), pThis->sName); - if(strchr(mode, 'r') != NULL){ - pThis->rw = 'r'; - } - else{ - if(strchr(mode, 'w') != NULL){ - pThis->rw = 'w'; - if(strchr(mode, 'c') != NULL) pThis->compressed = true; - } - else{ - das_error(22, "Illegal argument for mode in new_DasIO_cfile"); - return NULL; - } + if(_DasIO_setMode(pThis, mode) != DAS_OKAY){ + free(pThis); + return NULL; } /* Init an I/O buffer that we can re-use during the life of the object, @@ -228,18 +228,9 @@ DasIO* new_DasIO_ssl(const char* sProg, void* pSsl, const char* mode) OobComment_init(&(pThis->cmt)); das_store_str(&(pThis->cmt.sSrc), &(pThis->cmt.uSrcLen), pThis->sName); - if(strchr(mode, 'r') != NULL){ - pThis->rw = 'r'; - } - else{ - if(strchr(mode, 'w') != NULL){ - pThis->rw = 'w'; - if(strchr(mode, 'c') != NULL) pThis->compressed = true; - } - else{ - das_error(22, "Illegal argument for mode in new_DasIO_cfile"); - return NULL; - } + if(_DasIO_setMode(pThis, mode) != DAS_OKAY){ + free(pThis); + return NULL; } /* Init an I/O buffer that we can re-use during the life of the object, @@ -263,19 +254,11 @@ DasIO* new_DasIO_str( OobComment_init(&(pThis->cmt)); das_store_str(&(pThis->cmt.sSrc), &(pThis->cmt.uSrcLen), pThis->sName); - if(strchr(mode, 'r') != NULL){ - pThis->rw = 'r'; - } - else{ - if(strchr(mode, 'w') != NULL){ - pThis->rw = 'w'; - if(strchr(mode, 'c') != NULL) pThis->compressed = true; - } - else{ - das_error(22, "Illegal argument for mode in new_DasIO_cfile"); - return NULL; - } - } + if(_DasIO_setMode(pThis, mode) != DAS_OKAY){ + free(pThis); + return NULL; + } + return pThis; } @@ -596,7 +579,7 @@ int DasIO_getc(DasIO* pThis) break; default: - das_error(22, "not implemented\n" ); abort(); + das_error(DASERR_IO, "not implemented\n" ); abort(); break; } @@ -649,10 +632,38 @@ int DasIO_read(DasIO* pThis, DasBuf* pBuf, size_t uLen) } } - pThis->offset+= nRead; + if(nRead > 0) + pThis->offset+= nRead; return nRead; } + +// TODO: Support this with specialized version of the DasBuf_write* +// functions for faster results +int DasIO_readUntil(DasIO* pThis, DasBuf* pBuf, size_t uMax, char cStop) +{ + int c; + int nTotalRead = 0; + int nRead = 0; + for(size_t u = 0; u < uMax; ++u){ + nRead = DasIO_read(pThis, pBuf, 1); + if(nRead < 1) + return nRead; + else + nTotalRead += nRead; + + if( (c = DasBuf_last(pBuf)) < 0) + return -1 * das_error(DASERR_IO, + "Empty buffer while searching for %c in the input stream", cStop + ); + + if(c == (int)cStop) + return nTotalRead; + } + + return -1 * das_error(DASERR_IO, "Couldn't find %c within %zu bytes", cStop, uMax); +} + /* Should not be using int here, should ssize_t or ptrdiff_t */ size_t DasIO_write(DasIO* pThis, const char *data, int length) { @@ -800,7 +811,7 @@ int DasIO_addProcessor(DasIO* pThis, StreamHandler* pProc) return i+1; } else { - return -1 * das_error(20, "Max number of processors exceeded"); + return -1 * das_error(DASERR_OOB, "Max number of processors exceeded"); } } @@ -818,93 +829,289 @@ int DasIO_addProcessor(DasIO* pThis, StreamHandler* pProc) * 3: Packet is out-of-band info. */ -#define PKTTYPE_DESC 1 -#define PKTTYPE_DATA 2 -#define PKTTYPE_OOB 3 +/* For das IO, there's 2 chunking states + * + * - Packets (simple tag based chucks) + * - Documents (have to parse, may be chunkable (XML is)) + * + * Four packet taging schemes + * - das1-untagged + * - das1-tagged + * - das2 + * - das3 + * + * There's 4 encodings + * - Header, XML + * - Header, JSON + * - Data (determined by headers) + * - Extension (unknown) + * + * There two packet dispositions: + * - In band data (descriptors, data, documents) + * - Out of band data + */ +#define IO_CHUNK_PKT 0x0001 +#define IO_CHUNK_DOC 0x0002 +#define IO_CHUNK_MASK 0x000F + +#define IO_TAG_D1U 0x0000 +#define IO_TAG_D1T 0x0010 +#define IO_TAG_D2 0x0020 +#define IO_TAG_D3 0x0030 +#define IO_TAG_MASK 0x00F0 + +#define IO_ENC_XML 0x0100 +#define IO_ENC_JSON 0x0200 +#define IO_ENC_DATA 0x0300 +#define IO_ENC_EXT 0x0400 +#define IO_ENC_MASK 0x0F00 + +#define IO_USAGE_CNT 0x1000 // content, pass down to parsers +#define IO_USAGE_OOB 0x2000 // out-of-band, parse in I/O layer +#define IO_USAGE_PASS 0x3000 // Just pass it to the output +#define IO_USAGE_MASK 0xF000 int _DasIO_dataTypeOrErr(DasIO* pThis, DasBuf* pBuf, bool bFirstRead, int* pPktId) { - int nRet; + int nContent = 0; + uint32_t uPack = 0; char sTag[5] = {'\0'}; + char sPktId[12] = {'\0'}; - int i = DasIO_read(pThis, pBuf, 4); - if((bFirstRead)&&(i < 3)) - return das_error(22, "Input stream %s contains no packets.", pThis->sName); + int nRead = DasIO_read(pThis, pBuf, 4); + if((bFirstRead)&&(nRead < 3)) + return -1 * das_error(DASERR_IO, "Input stream %s contains no packets.", pThis->sName); - if(i == 0) return 0; /* Normal end, except on first read */ + if(nRead == 0) return 0; /* Normal end, except on first read */ - if(i < 3){ - /* Abnormal end */ + if(nRead < 3){ + /* Abnormal stream end, but just log it, don't trigger the error response */ fprintf(stderr, "Partial packet in stream %s.", pThis->sName); - return -22; + return -1 * DASERR_IO; } DasBuf_read(pBuf, sTag, 4); - - int nTagType = 0; - if( sTag[0]=='[' && sTag[3]==']' ){ - if(tolower(sTag[1]) == 'x' && tolower(sTag[2]) == 'x') - nTagType = PKTTYPE_OOB; - else{ - if(isdigit(sTag[1]) && isdigit(sTag[2])) - nTagType = PKTTYPE_DESC; - } - } - else{ - if(sTag[0]==':' && sTag[3]==':'){ - nTagType = PKTTYPE_DATA; - } - } + + // If a document type (not packets) just return now + switch(sTag[0]){ + case '<': + // Save the first 4 bytes in pPktId so that they don't evaporate + uPack = ( (byte)sTag[0] )|( ((byte)sTag[1]) >> 8 )|( ((byte)sTag[2]) >> 16 )| + ( ((byte)sTag[3]) >> 24 ); + *pPktId = *((int*)(&uPack)); + if(bFirstRead) + return (IO_CHUNK_DOC | IO_ENC_XML); - if(bFirstRead && nTagType != 1){ - nRet = das_error(22, - "Input is not a valid Das2 stream. Valid streams start with [00], the " - "input started with: %02X %02X %02X %02X (%c%c%c%c)\n", - (unsigned int)sTag[0], (unsigned int)sTag[1], (unsigned int)sTag[2], - (unsigned int)sTag[3], sTag[0], sTag[1], sTag[2], sTag[3] + return -1 * das_error(DASERR_IO, + "Unpacketized XML document discovered in packetize stream at offset %ld", + pThis->offset ); - return -1 * nRet; - } + + case '{': + // Save the first 4 bytes in pPktId so that they don't evaporate + uPack = ( (byte)sTag[0] )|( ((byte)sTag[1]) >> 8 )|( ((byte)sTag[2]) >> 16 )| + ( ((byte)sTag[3]) >> 24 ); + *pPktId = *((int*)(&uPack)); + + if(bFirstRead) + return (IO_CHUNK_DOC | IO_ENC_JSON); - if(nTagType == 0) - return -1 * das_error(22, "Garbled Packet Tag \"%s\" at input offset " - "0x%08X", sTag, pThis->offset); + return -1 * das_error(DASERR_IO, + "Unpacketized JSON document discovered in packetize stream at offset %ld", + pThis->offset + ); + + case '[': + if(sTag[3] != ']') + break; + + if(tolower(sTag[1]) == 'x' && tolower(sTag[2]) == 'x'){ + nContent = (IO_CHUNK_PKT | IO_TAG_D2 | IO_ENC_XML | IO_USAGE_OOB); + } + else{ + if(!isdigit(sTag[1]) || !isdigit(sTag[2]) ) + break; + + nContent = (IO_CHUNK_PKT | IO_TAG_D2 | IO_ENC_XML | IO_USAGE_CNT); + + if(bFirstRead){ + if( (sTag[1] != '0')||(sTag[2] != '0') ) + return -1 * das_error(DASERR_IO, + "Input is not a valid das-basic-stream-v2.2. Valid streams start " + "with [00], the input started with: %02X %02X %02X %02X (%c%c%c%c)\n", + (unsigned int)sTag[0], (unsigned int)sTag[1], (unsigned int)sTag[2], + (unsigned int)sTag[3], sTag[0], sTag[1], sTag[2], sTag[3] + ); + } + else{ + if((sTag[1] == '0')&&(sTag[2] == '0')){ + return -1 * das_error(DASERR_IO, + "Packet ID 0 is only valid for the initial stream header and may not " + "repeat in the packet (repeat sighted at offset %ld", pThis->offset + ); + } + } + } + sTag[3] = '\0'; + sscanf(sTag+1, "%d", pPktId); + + return nContent; + + case ':': + if((!isdigit(sTag[1]))||(!isdigit(sTag[2]))||(sTag[3] != ':')) + break; - if(nTagType == 1||nTagType == 2){ sTag[3] = '\0'; - sscanf( sTag+1, "%d", pPktId ); - } + sscanf(sTag+1, "%d", pPktId); + return (IO_CHUNK_PKT | IO_TAG_D2 | IO_ENC_DATA | IO_USAGE_CNT); - return nTagType; + case '|': + if(sTag[3] != '|') + break; + + if((nRead = DasIO_readUntil(pThis, pBuf, 11, '|')) < 0) + return nRead; + assert(nRead > 0); + + nRead = DasBuf_read(pBuf, sPktId, nRead); + sPktId[nRead - 1] = '\0'; + + if(sPktId[0] == '\0') + *pPktId = 0; + else + if(sscanf(sPktId, "%d", pPktId) != 1) + return -1 * das_error(DASERR_IO, "Invalid packet ID character at offset %ld", pThis->offset); + + + // the known packet types designators for das3 are (from das2py reader.py) + // "Sx" - XML stream definition (parse for content) + // "Hx" - XML packet definition (parse for content) + // "Pd" - Packetize data, content defined by a header + // "Cx" - XML Comment packet (XML content) + // "Ex" - XML Exception packet (XML content) + // "XX" - Extra packet, content completely unknown + nContent = (IO_CHUNK_PKT | IO_TAG_D3); + + // If this is the first read, this must be a stream header + if(bFirstRead){ + if(sTag[1] != 'S') + return -1 * das_error(DASERR_IO, "Input is not a valid das-basic-stream-v3.0, " + "Valid streams start |Sx| or |Sj|, this one started with " + "%02X %02X %02X %02X (%c%c%c%c)\n", + (unsigned int)sTag[0], (unsigned int)sTag[1], (unsigned int)sTag[2], + (unsigned int)sTag[3], sTag[0], sTag[1], sTag[2], sTag[3] + ); + } + else{ + if(sTag[1] == 'S') + return -1 * das_error(DASERR_IO, "Stream header detected after the first " + "packet at offset %ld", pThis->offset); + } + + switch(sTag[1]){ + case 'S': + if(bFirstRead){ + if(*pPktId != 0) + return -1 * das_error(DASERR_IO, + "Input is not a valid das-basic-stream-v3.0, Valid streams start " + "with packet ID 0 (or not packet ID at all), this one started with " + "id %d", *pPktId + ); + } + else{ + if(*pPktId == 0) + return -1 * das_error(DASERR_IO, "Packet ID 0 is only valid for the " + "initial stream header. ID 0 found at offset %ld", pThis->offset + ); + } + nContent |= IO_USAGE_CNT; + break; + + case 'H': + case 'X': nContent |= IO_USAGE_CNT; break; + case 'C': + case 'E': nContent |= IO_USAGE_OOB; break; + default: + return -1 * das_error(DASERR_IO, ""); + } + + if(sTag[2] == 'x') nContent |= IO_ENC_XML; + else if(sTag[2] == 'j') nContent |= IO_ENC_JSON; + else if(sTag[2] == 'd') nContent |= IO_ENC_DATA; + else nContent |= IO_ENC_EXT; + + return nContent; + + default: // Unknown first character... + break; + } + + return -1 * das_error(DASERR_IO, + "Unknown bytes %02X %02X %02X %02X (%c%c%c%c) at input offset %ld\n", + (unsigned int)sTag[0], (unsigned int)sTag[1], (unsigned int)sTag[2], + (unsigned int)sTag[3], sTag[0], sTag[1], sTag[2], sTag[3], + pThis->offset + ); } int _DasIO_sizeOrErr( - DasIO* pThis, DasBuf* pBuf, int nPktType, StreamDesc* pSd, int nPktId + DasIO* pThis, DasBuf* pBuf, int nContent, StreamDesc* pSd, int nPktId ){ int nPktSz; - char sLen[7] = {'\0'}; + char sLen[12] = {'\0'}; + int nRead = 0; + + bool bNoLen = (nContent & (IO_TAG_MASK | IO_ENC_MASK)) == (IO_TAG_D2|IO_ENC_DATA); - /* These packets have lengths... */ - if(nPktType == PKTTYPE_DESC || nPktType == PKTTYPE_OOB){ - if(DasIO_read(pThis, pBuf, 6) != 6){ - return -1 * das_error(22, "Input stream ends in a partial packet"); - } + /* All other packets have lengths... */ + if(!bNoLen){ + + // For das2 tags we just read the next 6 bytes + if((nContent & IO_TAG_MASK) == (IO_TAG_D2)){ + if(DasIO_read(pThis, pBuf, 6) != 6){ + return -1 * das_error(DASERR_IO, "Input stream ends in a partial packet"); + } - DasBuf_read(pBuf, sLen, 6); /* Advances the read point */ + DasBuf_read(pBuf, sLen, 6); /* Advances the read point */ - if(sscanf(sLen, "%d", &nPktSz) != 1){ - return -1 * das_error(22, "Can't get packet size from bytes %s", sLen); + if(sscanf(sLen, "%d", &nPktSz) != 1){ + return -1 * das_error(DASERR_IO, "Can't get packet size from bytes %s", sLen); + } + } + else{ + if((nContent & IO_TAG_MASK) != (IO_TAG_D3)) + return -1 * das_error(DASERR_IO, "Unknown packet tag type"); + + if( (nRead = DasIO_readUntil(pThis, pBuf, 10, '|')) < 0) + return nRead; + + if(nRead < 2) + return -1 * das_error(DASERR_IO, + "No packet size provided for packet ID %d at offset %ld", + nPktId, pThis->offset + ); + + nRead = DasBuf_read(pBuf, sLen, nRead); + sLen[nRead - 1] = '\0'; + if(sscanf(sLen, "%d", &nPktSz) != 1) + return -1 * das_error(DASERR_IO, "Can't get packet syze from bytes %s", sLen); } - return nPktSz; } + else{ + /* ...Old das2 data packets don't */ + if(pSd == NULL) + return -1 * das_error(DASERR_IO, "Data packets received before stream header"); - /* ...Data packets don't */ - if(pSd == NULL) - return -1 * das_error(22, "Data packets received before stream header"); - - if(pSd->pktDesc[nPktId] == NULL) - return -1 * das_error(22, "Packet type %02d data received before packet " - "type %02d header", nPktId, nPktId); - return PktDesc_recBytes( pSd->pktDesc[nPktId] ); + DasDesc* pDesc = pSd->descriptors[nPktId]; + if(pDesc == NULL) + return -1 * das_error(DASERR_IO, "Packet type %02d data received before packet " + "type %02d header", nPktId, nPktId); + + if(pDesc->type != PACKET) + return -1 * das_error(DASERR_IO, "Logic error in id.c"); + + nPktSz = PktDesc_recBytes((PktDesc*)pDesc); + } + return nPktSz; } DasErrCode _DasIO_handleDesc( @@ -919,7 +1126,7 @@ DasErrCode _DasIO_handleDesc( if(pDesc->type == STREAM){ if(*ppSd != NULL) - return das_error(22, "Multiple Stream descriptors in input"); + return das_error(DASERR_IO, "Multiple Stream descriptors in input"); *ppSd = (StreamDesc*)pDesc; pSd = *ppSd; @@ -929,44 +1136,54 @@ DasErrCode _DasIO_handleDesc( else{ if(pDesc->type == PACKET){ if(pSd == NULL) - return das_error(22, "Streams must be defined before packets can be " + return das_error(DASERR_IO, "Streams must be defined before packets can be " "defined"); /* Handle packet redefinitions. */ - if(pSd->pktDesc[nPktId] != NULL){ + if(pSd->descriptors[nPktId] != NULL){ /* Let any stream processors know that this packet desc is about * to be deleted so that they can do stuff with the old one 1st */ for(size_t u = 0; pThis->pProcs[u] != NULL; u++){ pHndlr = pThis->pProcs[u]; if(pHndlr->pktRedefHandler != NULL) - nRet = pHndlr->pktRedefHandler(pSd, pSd->pktDesc[nPktId], - pHndlr->userData); + nRet = pHndlr->pktRedefHandler( + pSd, (PktDesc*)(pSd->descriptors[nPktId]), pHndlr->userData + ); if(nRet != 0) break; } - StreamDesc_freePktDesc(pSd, nPktId); + StreamDesc_freeDesc(pSd, nPktId); } if((nRet = StreamDesc_addPktDesc(pSd, (PktDesc*)pDesc, nPktId)) != 0) return nRet; } else{ - return das_error(22, "Only Stream and Packet descriptors expected"); + return das_error(DASERR_IO, "Only Stream and Packet descriptors expected"); } } /* Call the stream handlers */ for(size_t u = 0; pThis->pProcs[u] != NULL; u++){ pHndlr = pThis->pProcs[u]; - if(pDesc->type == STREAM){ + switch(pDesc->type){ + case STREAM: if(pHndlr->streamDescHandler != NULL) nRet = pHndlr->streamDescHandler(pSd, pHndlr->userData); - } - else{ + break; + case PACKET: if(pHndlr->pktDescHandler != NULL) - nRet = pHndlr->pktDescHandler(pSd, pSd->pktDesc[nPktId], pHndlr->userData); + nRet = pHndlr->pktDescHandler(pSd, (PktDesc*)pSd->descriptors[nPktId], pHndlr->userData); + break; + case DATASET: + if(pHndlr->dsDescHandler != NULL) + nRet = pHndlr->dsDescHandler(pSd, (DasDs*)pSd->descriptors[nPktId], pHndlr->userData); + break; + default: + nRet = das_error(DASERR_IO, "Unexpected descriptor type %d", pDesc->type); + break; } if(nRet != 0) break; } @@ -980,13 +1197,17 @@ DasErrCode _DasIO_handleData( int nRet = 0; StreamHandler* pHndlr = NULL; - nRet = PktDesc_decodeData(pSd->pktDesc[nPktId], pBuf); + DasDesc* pDesc = pSd->descriptors[nPktId]; + + assert(pDesc->type == PACKET); + + nRet = PktDesc_decodeData((PktDesc*)pDesc, pBuf); if(nRet != 0) return nRet; for(size_t u = 0; pThis->pProcs[u] != NULL; u++){ pHndlr = pThis->pProcs[u]; if(pHndlr->pktDataHandler != NULL) - nRet = pHndlr->pktDataHandler(pSd->pktDesc[nPktId], pHndlr->userData); + nRet = pHndlr->pktDataHandler((PktDesc*)pDesc, pHndlr->userData); if(nRet != 0) break; } return nRet; @@ -1033,13 +1254,14 @@ DasErrCode DasIO_readAll(DasIO* pThis) OobExcept_init(&ex); OutOfBand* oobs[3] = {(OutOfBand*)&sc, (OutOfBand*)&ex, NULL}; - int nPktType, nPktId, nBytes; + int nPktId, nBytes; + int nContent; DasBuf* pBuf = pThis->pDb; bool bFirstRead = true; if(pThis->rw == 'w'){ - return das_error(22, "Can't read input, this is an output stream"); + return das_error(DASERR_IO, "Can't read input, this is an output stream"); } /* Loop over all the input packets, make sure to break out of the loop @@ -1050,44 +1272,65 @@ DasErrCode DasIO_readAll(DasIO* pThis) /* What Kind of Packet do we have? */ nPktId = -1; - if((nPktType = _DasIO_dataTypeOrErr(pThis, pBuf, bFirstRead, &nPktId)) < 1){ - nRet = -1 * nPktType; + if((nContent = _DasIO_dataTypeOrErr(pThis, pBuf, bFirstRead, &nPktId)) < 1){ + nRet = -1 * nContent; break; } bFirstRead = false; /* Get the number of bytes to read next */ - nBytes = _DasIO_sizeOrErr(pThis, pBuf, nPktType, pSd, nPktId); - if(nBytes < 0){ - nRet = -1 * nBytes; - break; + if((nContent & IO_CHUNK_MASK) == IO_CHUNK_PKT){ + + nBytes = _DasIO_sizeOrErr(pThis, pBuf, nContent, pSd, nPktId); + if(nBytes < 0){ + nRet = -1 * nBytes; + break; + } + if(nBytes == 0){ + /* Wow, a null packet, let's call those illegal */ + nRet = das_error(DASERR_IO, "0-length input packet."); + break; + } + + /* Read the bytes */ + if(nBytes > pBuf->uLen){ + nRet = das_error(DASERR_IO, "Packet's length is %d, library buffer is only" + "%zu bytes long", nBytes, pThis->pDb->uLen); + break; + } + + if( DasIO_read(pThis, pBuf, nBytes) != nBytes){ + nRet = das_error(DASERR_IO, "Partial packet on input at offset %ld", pThis->offset); + break; + } } - if(nBytes == 0){ - /* Wow, a null packet, let's call those illegal */ - nRet = das_error(22, "0-length input packet."); + else{ + nRet = das_error(DASERR_IO, "Un-packetized documents are not yet supported"); break; } - - /* Read the bytes */ - if(nBytes > pBuf->uLen){ - nRet = das_error(22, "Packet's length is %d, library buffer is only" - "%zu bytes long", nBytes, pThis->pDb->uLen); + + switch(nContent & IO_ENC_MASK){ + case IO_ENC_JSON: + nRet = das_error(DASERR_IO, "JSON stream parsing is not yet supported"); break; - } - - if( DasIO_read(pThis, pBuf, nBytes) != nBytes){ - nRet = das_error(22, "Partial packet on input at offset %ld", pThis->offset); + case IO_ENC_EXT: + nRet = das_error(DASERR_IO, "Extension formats are not yet supported"); + break; + case IO_ENC_XML: + if((nContent & IO_USAGE_MASK) == IO_USAGE_CNT) + nRet = _DasIO_handleDesc(pThis, pBuf, &pSd, nPktId); + else if((nContent & IO_USAGE_MASK) == IO_USAGE_OOB) + nRet = _DasIO_handleOOB(pThis, pBuf, oobs); + else + nRet = das_error(DASERR_IO, "XML pass through is not yet supported"); + + break; + case IO_ENC_DATA: + nRet = _DasIO_handleData(pThis, pBuf, pSd, nPktId); + break; + default: + nRet = das_error(DASERR_IO, "Logic error in stream parser"); break; - } - - /* Decode the packets, calling handlers as we go */ - switch(nPktType){ - case PKTTYPE_DESC: - nRet = _DasIO_handleDesc(pThis, pBuf, &pSd, nPktId); break; - case PKTTYPE_DATA: - nRet = _DasIO_handleData(pThis, pBuf, pSd, nPktId); break; - case PKTTYPE_OOB: - nRet = _DasIO_handleOOB(pThis, pBuf, oobs); break; } if(nRet != 0) break; @@ -1157,7 +1400,7 @@ DasErrCode DasIO_sendLog( DasErrCode DasIO_setTaskSize(DasIO* pThis, int size) { if ( pThis->bSentHeader ) { - return das_error(20, "setTaskSize must be called before the stream " + return das_error(DASERR_OOB, "setTaskSize must be called before the stream " "descriptor is sent.\n" ); } struct timeval tv; @@ -1233,9 +1476,9 @@ DasErrCode DasIO_setTaskProgress( DasIO* pThis, int progress ) { DasErrCode DasIO_writeStreamDesc(DasIO* pThis, StreamDesc* pSd) { if(pThis->rw == 'r') - return das_error(22, "Can't write, this is an input stream."); + return das_error(DASERR_IO, "Can't write, this is an input stream."); if(pThis->bSentHeader) - return das_error(22, "Can't double send a Das2 Stream Header"); + return das_error(DASERR_IO, "Can't double send a Das2 Stream Header"); if(!DasDesc_has(&(pSd->base), "sourceId")) DasDesc_setStr(&(pSd->base), "sourceId", pThis->sName); @@ -1262,9 +1505,9 @@ DasErrCode DasIO_writeStreamDesc(DasIO* pThis, StreamDesc* pSd) DasErrCode DasIO_writePktDesc(DasIO* pThis, PktDesc* pPd ) { if(pThis->rw == 'r') - return das_error(22, "Can't write, this is an input stream."); + return das_error(DASERR_IO, "Can't write, this is an input stream."); if(! pThis->bSentHeader) - return das_error(22, "Send the stream descriptor first"); + return das_error(DASERR_IO, "Send the stream descriptor first"); int nRet = 0; DasBuf* pBuf = pThis->pDb; @@ -1274,7 +1517,7 @@ DasErrCode DasIO_writePktDesc(DasIO* pThis, PktDesc* pPd ) size_t uToWrite = DasBuf_unread(pBuf) + 10; if( DasIO_printf(pThis, "[%02d]%06d%s", pPd->id, DasBuf_unread(pBuf), pBuf->pReadBeg) != uToWrite) - return das_error(22, "Partial packet descriptor written"); + return das_error(DASERR_IO, "Partial packet descriptor written"); pPd->bSentHdr = true; return DAS_OKAY; @@ -1283,11 +1526,11 @@ DasErrCode DasIO_writePktDesc(DasIO* pThis, PktDesc* pPd ) int DasIO_writePktData(DasIO* pThis, PktDesc* pPdOut ) { if(pThis->rw == 'r') - return das_error(22, "Can't write, this is an input stream."); + return das_error(DASERR_IO, "Can't write, this is an input stream."); if(! pThis->bSentHeader) - return das_error(22, "Send the stream descriptor first"); + return das_error(DASERR_IO, "Send the stream descriptor first"); if(! pPdOut->bSentHdr) - return das_error(22, "Send packet header ID %02d first", pPdOut->id); + return das_error(DASERR_IO, "Send packet header ID %02d first", pPdOut->id); int nRet = 0; DasBuf* pBuf = pThis->pDb; @@ -1303,10 +1546,10 @@ int DasIO_writePktData(DasIO* pThis, PktDesc* pPdOut ) { DasErrCode DasIO_writeException(DasIO* pThis, OobExcept* pSe) { if(pThis->rw == 'r') - return das_error(22, "Can't write, this is an input stream."); + return das_error(DASERR_IO, "Can't write, this is an input stream."); if( !pThis->bSentHeader ) { - return das_error(20, "streamDescriptor not sent before steamComment!\n"); + return das_error(DASERR_OOB, "streamDescriptor not sent before steamComment!\n"); } DasErrCode nRet = 0; DasBuf_reinit(pThis->pDb); /* Write zeros up to the previous data point */ @@ -1316,16 +1559,16 @@ DasErrCode DasIO_writeException(DasIO* pThis, OobExcept* pSe) nWrote += DasIO_write(pThis, pThis->pDb->pReadBeg, DasBuf_written(pThis->pDb)); if(nWrote > 10) return 0; - return das_error(22, "Error writing stream comment"); + return das_error(DASERR_IO, "Error writing stream comment"); } DasErrCode DasIO_writeComment(DasIO* pThis, OobComment* pSc) { if(pThis->rw == 'r') - return das_error(22, "Can't write, this is an input stream."); + return das_error(DASERR_IO, "Can't write, this is an input stream."); if( !pThis->bSentHeader ) { - return das_error(20, "streamDescriptor not sent before steamComment!\n"); + return das_error(DASERR_OOB, "streamDescriptor not sent before steamComment!\n"); } DasErrCode nRet = 0; DasBuf_reinit(pThis->pDb); /* Write zeros up to the previous data point */ @@ -1335,7 +1578,7 @@ DasErrCode DasIO_writeComment(DasIO* pThis, OobComment* pSc) nWrote += DasIO_write(pThis, pThis->pDb->pReadBeg, DasBuf_written(pThis->pDb)); if(nWrote > 10) return 0; - return das_error(22, "Error writing stream comment"); + return das_error(DASERR_IO, "Error writing stream comment"); } /* ************************************************************************* */ @@ -1345,7 +1588,7 @@ void DasIO_throwException( DasIO* pThis, StreamDesc* pSd, const char* type, char* message ){ if(pThis->rw == 'r'){ - int nErr = das_error(22, "DasIO_throwException: Can't write, this is an " + int nErr = das_error(DASERR_IO, "DasIO_throwException: Can't write, this is an " "input stream."); exit(nErr); /* One of the few times exit should be explicitly called */ } diff --git a/das2/io.h b/das2/io.h index f6f04f4..459ffe8 100644 --- a/das2/io.h +++ b/das2/io.h @@ -53,7 +53,9 @@ typedef struct das_io_struct { * STREAM_MODE_SOCKET, STREAM_MODE_SSL */ char sName[DASIO_NAME_SZ]; /* A human readable name for data source or sink */ - long int offset; /* current offset for file reads */ + long int offset; /* current offset for file reads */ + + int dasver; /* Stream major version number, must be set explicity for output */ /* Socket I/O */ int nSockFd; /* Socket file descriptor */ @@ -107,9 +109,13 @@ typedef struct das_io_struct { * @param file a C standard IO file object. * * @param mode A string containing the mode, one of: - * - 'r' read - * - 'w' write uncompressed - * - 'wc' write compressed + * - 'r' read (any) + * - 'r2' read only das v2 streams (error on anything else) + * - 'r3' read only das v3 streams (error on anything else) + * - 'w','w2' write das v2 stream uncompressed + * - 'w3' write das v3 stream uncompressed + * - 'wc','wc2' write das v2 stream compressed + * - 'wc3' write das v3 stream compressed * * @memberof DasIO */ @@ -485,6 +491,16 @@ DAS_API size_t DasIO_write(DasIO* pThis, const char* data, int length); */ DAS_API int DasIO_read(DasIO* pThis, DasBuf* pBuf, size_t nBytes); +/** Read until encountering a given byte (Low-level API) + * + * Read until hitting the stop byte. The stop byte is copied to the + * buffer. + * @memberof DasIO + */ +DAS_API int DasIO_readUntil( + DasIO* pThis, DasBuf* pBuf, size_t nBytes, char cStop +); + /** Analog of getc (Low-level API) * * @memberof DasIO diff --git a/das2/processor.c b/das2/processor.c index 2c84d6a..5c347cf 100644 --- a/das2/processor.c +++ b/das2/processor.c @@ -50,6 +50,8 @@ void StreamHandler_init(StreamHandler* pThis, void* pUserData) pThis->pktDescHandler = NULL; pThis->pktDataHandler = NULL; pThis->closeHandler = NULL; + pThis->dsDescHandler = NULL; + pThis->dsDataHandler = NULL; pThis->exceptionHandler = defaultStreamExceptionHandler; pThis->commentHandler = defaultStreamCommentHandler; } diff --git a/das2/processor.h b/das2/processor.h index ef4a75e..bd36c70 100644 --- a/das2/processor.h +++ b/das2/processor.h @@ -66,7 +66,30 @@ typedef DasErrCode (*PktRedefHandler)(StreamDesc* sd, PktDesc* pd, void* ud); */ typedef DasErrCode (*PktDataHandler)(PktDesc* pd, void* ud); -/** Callback functions that invoked on Stream Close + +/** Callback function invoked when a dataset header is encountered + * on the input stream. + * + * @param sd A pointer to the parsed Stream Descriptor + * @param dd A poirter to a parsed DasDs (dataset) definition + * @param ud A pointer to a user data structure, may be NULL + * + * @param + */ +typedef DasErrCode (*DsDescHandler)(StreamDesc* sd, DasDs* dd, void* ud); + +/** Callback function invoked when a new data packets for a dataset are + * encountered on the stream. + * + * @param sd A pointer to the parsed Stream Descriptor + * @param dd A poirter to a parsed DasDs (dataset) definition + * @param pi A pointer to the max index of the dataset before the + * new data were added + * @param ud A pointer to a user data structure, may be NULL + */ +typedef DasErrCode (*DsDataHandler)(StreamDesc* sd, DasDs* dd, ptrdiff_t* pi, void* ud); + +/** Callback functions that are invoked on Stream Close * callback function that is called at the end of the stream * @param sd A pointer to the parsed Stream Descriptor * @param ud A pointer to a user data structure, may be NULL. @@ -100,7 +123,7 @@ typedef struct _streamHandler { */ StreamDescHandler streamDescHandler; - /** Sets the function to be called when each \\ element + /** Sets the function to be called when each \ element * is read in. */ PktDescHandler pktDescHandler; @@ -109,9 +132,17 @@ typedef struct _streamHandler { * re-defined before the old pkt descriptor object is deleted */ PktRedefHandler pktRedefHandler; - /** Sets the function to be called when each data packet is read in. - */ + /** Sets the function to be called when each data packet is read in. */ PktDataHandler pktDataHandler; + + /** Sets the function to be called when each dataset definition is read + * in (das3) */ + DsDescHandler dsDescHandler; + + /** Sets the function to be called when each dataset receives new data + * (das3) */ + DsDataHandler dsDataHandler; + /** Sets the function to be called when a stream exception is read in. * The default handler prints the exception and exits with a non-zero diff --git a/das2/stream.c b/das2/stream.c index ce3c299..8547777 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -1,24 +1,25 @@ -/* Copyright (C) 2004-2017 Jeremy Faden - * Chris Piker +/* Copyright (C) 2015-2024 Chris Piker + * 2004-2006 Jeremy Faden * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ #define _POSIX_C_SOURCE 200112L +#include #include #include #include @@ -68,8 +69,17 @@ StreamDesc* StreamDesc_copy(const StreamDesc* pThis) void del_StreamDesc(StreamDesc* pThis){ DasDesc_freeProps(&(pThis->base)); - for(size_t u = 1; pThis->pktDesc[u] != NULL; u++){ - del_PktDesc(pThis->pktDesc[u]); + for(size_t u = 1; u < MAX_PKTIDS; u++){ + DasDesc* pDesc = pThis->descriptors[u]; + if(pDesc == NULL) + continue; + if(pDesc->type == PACKET){ + del_PktDesc((PktDesc*)pDesc); + } + else{ + assert(pDesc->type == DATASET); + del_DasDs((DasDs*)pDesc); + } } free(pThis); } @@ -112,51 +122,60 @@ void StreamDesc_setMonotonic(StreamDesc* pThis, bool isMonotonic ) size_t StreamDesc_getNPktDesc(const StreamDesc* pThis) { size_t nRet = 0; - for(size_t u = 1; u < MAX_PKTIDS; u++) if(pThis->pktDesc[u]) nRet++; + for(size_t u = 1; u < MAX_PKTIDS; u++) if(pThis->descriptors[u]) nRet++; return nRet; } int StreamDesc_nextPktId(StreamDesc* pThis) { - int i; - for ( i=1; ipktDesc[i]==NULL ) return i; - } - return -1 * das_error(19, "Ran out of Packet IDs only 99 allowed!" ); + for (int i = 1; i < MAX_PKTIDS; ++i){ /* 00 is reserved for stream descriptor */ + if(pThis->descriptors[i] == NULL) + return i; + } + return -1 * das_error(DASERR_STREAM, "Ran out of Packet IDs only 99 allowed!" ); } -PktDesc* StreamDesc_createPktDesc(StreamDesc* pThis, DasEncoding* pXEncoder, - das_units xUnits ) -{ - PktDesc* pPkt; +PktDesc* StreamDesc_createPktDesc( + StreamDesc* pThis, DasEncoding* pXEncoder, das_units xUnits +){ + PktDesc* pPkt; - pPkt= new_PktDesc(); - pPkt->id= StreamDesc_nextPktId(pThis); + pPkt= new_PktDesc(); + pPkt->id= StreamDesc_nextPktId(pThis); pPkt->base.parent=(DasDesc*)pThis; PlaneDesc* pX = new_PlaneDesc(X, "", pXEncoder, xUnits); PktDesc_addPlane(pPkt, pX); - pThis->pktDesc[pPkt->id]= pPkt; + pThis->descriptors[pPkt->id] = (DasDesc*) pPkt; - return pPkt; + return pPkt; } -DasErrCode StreamDesc_freePktDesc(StreamDesc* pThis, int nPktId) +DasErrCode StreamDesc_freeDesc(StreamDesc* pThis, int nPktId) { if(!StreamDesc_isValidId(pThis, nPktId)) - return das_error(19, "%s: stream contains no descriptor for packets " + return das_error(DASERR_STREAM, "%s: stream contains no descriptor for packets " "with id %d", __func__, nPktId); - del_PktDesc(pThis->pktDesc[nPktId]); - pThis->pktDesc[nPktId]= NULL; + + DasDesc* pDesc = pThis->descriptors[nPktId]; + if(pDesc->type == PACKET) + del_PktDesc((PktDesc*)pDesc); + else + del_DasDs((DasDs*)pDesc); + pThis->descriptors[nPktId]= NULL; return 0; } PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int nPacketId) { - if(nPacketId < 1 || nPacketId > 99) - das_error(19, "ERROR: Illegal Packet ID %d in getPacketDescriptor", - nPacketId); - return pThis->pktDesc[nPacketId]; + if(nPacketId < 1 || nPacketId > 99){ + das_error(DASERR_STREAM, + "Illegal Packet ID %d in getPacketDescriptor", nPacketId + ); + return NULL; + } + DasDesc* pDesc = pThis->descriptors[nPacketId]; + return (pDesc == NULL)||(pDesc->type != PACKET) ? NULL : (PktDesc*)pDesc; } @@ -190,26 +209,26 @@ void StreamDesc_addCmdLineProp(StreamDesc* pThis, int argc, char * argv[] ) PktDesc* StreamDesc_clonePktDesc(StreamDesc* pThis, const PktDesc* pPdIn) { - PktDesc* pPdOut; - pPdOut= (PktDesc*)calloc(1, sizeof(PktDesc)); - pPdOut->base.type = pPdIn->base.type; + PktDesc* pPdOut; + pPdOut= (PktDesc*)calloc(1, sizeof(PktDesc)); + pPdOut->base.type = pPdIn->base.type; - DasDesc_copyIn((DasDesc*)pPdOut, (DasDesc*)pPdIn); + DasDesc_copyIn((DasDesc*)pPdOut, (DasDesc*)pPdIn); - int id = StreamDesc_nextPktId( pThis ); - pThis->pktDesc[id]= pPdOut; + int id = StreamDesc_nextPktId( pThis ); + pThis->descriptors[id] = (DasDesc*)pPdOut; - pPdOut->id= id; + pPdOut->id = id; - PktDesc_copyPlanes(pPdOut, pPdIn); /* Realloc's the data buffer */ + PktDesc_copyPlanes(pPdOut, pPdIn); /* Realloc's the data buffer */ - return pPdOut; + return pPdOut; } bool StreamDesc_isValidId(const StreamDesc* pThis, int nPktId) { if(nPktId > 0 && nPktId < MAX_PKTIDS){ - if(pThis->pktDesc[nPktId] != NULL) return true; + if(pThis->descriptors[nPktId] != NULL) return true; } return false; } @@ -221,8 +240,8 @@ PktDesc* StreamDesc_clonePktDescById( pIn = StreamDesc_getPktDesc(pOther, nPacketId); - if(pThis->pktDesc[pIn->id] != NULL){ - das_error(19, "ERROR: Stream descriptor already has a packet " + if(pThis->descriptors[pIn->id] != NULL){ + das_error(DASERR_STREAM, "ERROR: Stream descriptor already has a packet " "descriptor with id %d", nPacketId); return NULL; } @@ -233,7 +252,7 @@ PktDesc* StreamDesc_clonePktDescById( DasDesc_copyIn((DasDesc*)pOut, (DasDesc*)pIn); pOut->id = pIn->id; - pThis->pktDesc[pIn->id] = pOut; + pThis->descriptors[pIn->id] = (DasDesc*)pOut; PktDesc_copyPlanes(pOut, pIn); /* Realloc's the data buffer */ @@ -248,20 +267,20 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) /* Hint to random developer: If you are here because you wanted to copy * another stream's packet descriptor onto this stream use one of * StreamDesc_clonePktDesc() or StreamDesc_clonePktDescById() instead. */ - return das_error(19, "Packet Descriptor already belongs to different " + return das_error(DASERR_STREAM, "Packet Descriptor already belongs to different " "stream"); if(pPd->base.parent == (DasDesc*)pThis) - return das_error(19, "Packet Descriptor is already part of the stream"); + return das_error(DASERR_STREAM, "Packet Descriptor is already part of the stream"); if(nPktId < 1 || nPktId > 99) - return das_error(19, "Illegal packet id in addPktDesc: %02d", nPktId); + return das_error(DASERR_STREAM, "Illegal packet id in addPktDesc: %02d", nPktId); - if(pThis->pktDesc[nPktId] != NULL) - return das_error(19, "StreamDesc already has a packet descriptor with ID" + if(pThis->descriptors[nPktId] != NULL) + return das_error(DASERR_STREAM, "StreamDesc already has a packet descriptor with ID" " %02d", nPktId); - pThis->pktDesc[nPktId] = pPd; + pThis->descriptors[nPktId] = (DasDesc*)pPd; pPd->id = nPktId; pPd->base.parent = (DasDesc*)pThis; return 0; @@ -320,7 +339,7 @@ void parseStreamDesc_start( void *data, const char *el, const char **attr) continue; } - pPsd->nRet = das_error(19, "Invalid element <%s> in section", el); + pPsd->nRet = das_error(DASERR_STREAM, "Invalid element <%s> in section", el); break; } } @@ -336,7 +355,7 @@ StreamDesc* new_StreamDesc_str(DasBuf* pBuf) XML_Parser p = XML_ParserCreate("UTF-8"); if(!p){ - das_error(19, "couldn't create xml parser\n"); + das_error(DASERR_STREAM, "couldn't create xml parser\n"); return NULL; } XML_SetUserData(p, (void*) &psd); @@ -346,7 +365,7 @@ StreamDesc* new_StreamDesc_str(DasBuf* pBuf) XML_ParserFree(p); if(!nParRet){ - das_error(19, "Parse error at line %d:\n%s\n", + das_error(DASERR_STREAM, "Parse error at line %d:\n%s\n", XML_GetCurrentLineNumber(p), XML_ErrorString(XML_GetErrorCode(p)) ); return NULL; @@ -387,7 +406,7 @@ DasDesc* Das2Desc_decode(DasBuf* pBuf) DasBuf_strip(pBuf); if(DasBuf_unread(pBuf) == 0){ - das_error(19, "Empty Descriptor Header in Stream"); + das_error(DASERR_STREAM, "Empty Descriptor Header in Stream"); return NULL; } @@ -396,7 +415,7 @@ DasDesc* Das2Desc_decode(DasBuf* pBuf) DasBuf_read(pBuf, &b, 1); if(b != '<'){ - das_error(19, "found \"%c\", expected \"<\"", b); + das_error(DASERR_STREAM, "found \"%c\", expected \"<\"", b); return NULL; } @@ -410,7 +429,7 @@ DasDesc* Das2Desc_decode(DasBuf* pBuf) i++; } if(b == '\0' || i == 256){ - das_error(19, "Error finding the end of the XML prolog, was the" + das_error(DASERR_STREAM, "Error finding the end of the XML prolog, was the" "entire prolog more that 255 characters long?"); return NULL; } @@ -446,7 +465,7 @@ DasDesc* Das2Desc_decode(DasBuf* pBuf) if(strcmp(sName, "packet") == 0) return (DasDesc*) new_PktDesc_xml(pBuf, NULL, 0); - das_error(19, "Unknown top-level descriptor object: %s", sName); + das_error(DASERR_STREAM, "Unknown top-level descriptor object: %s", sName); return NULL; } diff --git a/das2/stream.h b/das2/stream.h index 5fe5e87..1badb2c 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -23,6 +23,7 @@ #include #include +#include #ifdef __cplusplus extern "C" { @@ -39,6 +40,37 @@ extern "C" { /** Describes the stream itself, in particular the compression used, * current packetDescriptors, etc. + * + * This is a container for top-level stream descriptor objects. The + * data owner ship model for das2C is: + * + * StreamDesc -> PktDesc -> PlaneDesc -> 1-row of data + * -> DasDs -> DasAry -> arbitrary rows of data + * -> DasDim -> DasVar (Structure access to DasDs Arrays) + * + * Anything not owned by StreamDesc is considered OOB (Out Of Band) data. + * + * All top level descriptors my be accessed by an integer ID. There is one + * ID space for all desciptors, not a separate one for datasets (das3) + * versus packets (das2) + * + * ID 0 is reserved for the stream descriptor itself. + * + * Desciptor IDs: + * The lookup ID is the same value used as the header & data IDs in the + * stream. The legal packet ID range depends on the stream serilazation + * method. For the das2 format, the valid range is 0 to 99. + * + * For the das3 format, packet ID's must be positive and fit in an integer + * so the maximum is about 2.1 billion. + * + * Note that das v2 Streams can re-use packet ID's. So the PacketDescriptor + * at, for example, ID 2 may be completely different from one invocation + * of a stream handler callback to another. + * + * Since das v3 streams have no packet length limitations, ID reuse is + * not permitted on a single stream. + * * @extends DasDesc * @nosubgrouping * @ingroup streams @@ -47,16 +79,16 @@ typedef struct stream_descriptor{ /** The base structure */ DasDesc base; - /** An array of packet descriptors. - * The lookup ID is the same value used as the PacketID in the stream. - * Legal packet ID's are 1 to 99. 0 is reserved for the stream header - * packet and thus item 0 in this array should always be NULL. - * - * Note that Das2 Streams can re-use packet ID's. So the PacketDescriptor - * at, for example, ID 2 may be completely different from one invocation - * of a stream handler callback to another. - */ - PktDesc* pktDesc[MAX_PKTIDS]; + /* TODO: Replace this with a sorted array of structures of the type + + {int id, DasDesc* pDesc} + + and use sorted insert and binary search to retrieve packet IDs + if greater then say 10. For 10 or less the "small vector" + assumption applies and we just an embedded 10-element array + and loops. + */ + DasDesc* descriptors[MAX_PKTIDS]; /* Common properties */ char compression[STREAMDESC_CMP_SZ]; @@ -234,7 +266,7 @@ DAS_API PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int id); * and release it's id number for use with a new PacketDescriptor. * @memberof StreamDesc */ -DAS_API DasErrCode StreamDesc_freePktDesc(StreamDesc* pThis, int nPktId); +DAS_API DasErrCode StreamDesc_freeDesc(StreamDesc* pThis, int nPktId); /** An I/O function that makes sense to use for either operation * @memberof StreamDesc diff --git a/das2/util.c b/das2/util.c index dc12560..130bb6d 100644 --- a/das2/util.c +++ b/das2/util.c @@ -62,7 +62,9 @@ pthread_mutex_t g_mtxErrBuf = PTHREAD_MUTEX_INITIALIZER; das_error_msg* g_msgBuf = NULL; /* Locale handling */ +#ifdef _WIN32 static bool g_bCLocalInit = false; /* set by windows das_strtod_c, if needed */ +#endif /* ************************************************************************** */ /* Unavoidable global library structure initialization */ diff --git a/test/TestV3Read.c b/test/TestV3Read.c new file mode 100644 index 0000000..1d5290d --- /dev/null +++ b/test/TestV3Read.c @@ -0,0 +1,45 @@ +/** @file TestV3Read.c Testing basic das stream v3.0 packet parsing */ + +/* Author: Chris Piker + * + * This file contains test and example code that intends to explain an + * interface. + * + * As United States courts have ruled that interfaces cannot be copyrighted, + * the code in this individual source file, TestBuilder.c, is placed into the + * public domain and may be displayed, incorporated or otherwise re-used without + * restriction. It is offered to the public without any without any warranty + * including even the implied warranty of merchantability or fitness for a + * particular purpose. + */ + +#define _POSIX_C_SOURCE 200112L + +#include +#include + +const char* g_sTestFile1 = "./test/ex12_sounder_xyz.d3t"; +const char* g_sTestFile1 = "./test/tag_test.dNt"; + +int main(int argc, char** argv) +{ + /* Exit on errors, log info messages and above */ + das_init(argv[0], DASERR_DIS_EXIT, 0, DASLOG_INFO, NULL); + + printf("INFO: Reading %s\n", g_sTestFile1); + FILE* pFile = fopen(g_sTestFile1, "r"); + + DasIO* pIn = new_DasIO_cfile("TestV3Read", pFile, "r"); + + /* Just read it parsing packets. Don't invoke any stream handlers to + do stuff with the packets */ + int nTest = 1; + if(DasIO_readAll(pIn) != 0){ + printf("ERROR: Test %d failed, couldn't parse %s\n", nTest, g_sTestFile1); + return 64; + } + + printf("INFO: %s parsed without errors\n", g_sTestFile1); + + return 0; +} diff --git a/test/ex06_waveform_binary.d3b b/test/ex06_waveform_binary.d3b new file mode 100644 index 0000000..2ec2d54 --- /dev/null +++ b/test/ex06_waveform_binary.d3b @@ -0,0 +1,3187 @@ +|Sx||537| + + +

Waves: 50 kHz Electric Waveforms%{xCacheResInfo}

+

2.0

+

SCET %{RANGE}

+

E!dy!n Component (V/m)

+

linear

+

-1e31

+

+ 2013-10-09T15:30:59.875 to 2013-10-09T15:33:00.124

+

+
+
+|Hx|1|46920| + + + + + + + + + + 0; 20; 40; 60; 80; 100; 120; 140; 160; 180; + 200; 220; 240; 260; 280; 300; 320; 340; 360; 380; + 400; 420; 440; 460; 480; 500; 520; 540; 560; 580; + 600; 620; 640; 660; 680; 700; 720; 740; 760; 780; + 800; 820; 840; 860; 880; 900; 920; 940; 960; 980; + 1000; 1020; 1040; 1060; 1080; 1100; 1120; 1140; 1160; 1180; + 1200; 1220; 1240; 1260; 1280; 1300; 1320; 1340; 1360; 1380; + 1400; 1420; 1440; 1460; 1480; 1500; 1520; 1540; 1560; 1580; + 1600; 1620; 1640; 1660; 1680; 1700; 1720; 1740; 1760; 1780; + 1800; 1820; 1840; 1860; 1880; 1900; 1920; 1940; 1960; 1980; + 2000; 2020; 2040; 2060; 2080; 2100; 2120; 2140; 2160; 2180; + 2200; 2220; 2240; 2260; 2280; 2300; 2320; 2340; 2360; 2380; + 2400; 2420; 2440; 2460; 2480; 2500; 2520; 2540; 2560; 2580; + 2600; 2620; 2640; 2660; 2680; 2700; 2720; 2740; 2760; 2780; + 2800; 2820; 2840; 2860; 2880; 2900; 2920; 2940; 2960; 2980; + 3000; 3020; 3040; 3060; 3080; 3100; 3120; 3140; 3160; 3180; + 3200; 3220; 3240; 3260; 3280; 3300; 3320; 3340; 3360; 3380; + 3400; 3420; 3440; 3460; 3480; 3500; 3520; 3540; 3560; 3580; + 3600; 3620; 3640; 3660; 3680; 3700; 3720; 3740; 3760; 3780; + 3800; 3820; 3840; 3860; 3880; 3900; 3920; 3940; 3960; 3980; + 4000; 4020; 4040; 4060; 4080; 4100; 4120; 4140; 4160; 4180; + 4200; 4220; 4240; 4260; 4280; 4300; 4320; 4340; 4360; 4380; + 4400; 4420; 4440; 4460; 4480; 4500; 4520; 4540; 4560; 4580; + 4600; 4620; 4640; 4660; 4680; 4700; 4720; 4740; 4760; 4780; + 4800; 4820; 4840; 4860; 4880; 4900; 4920; 4940; 4960; 4980; + 5000; 5020; 5040; 5060; 5080; 5100; 5120; 5140; 5160; 5180; + 5200; 5220; 5240; 5260; 5280; 5300; 5320; 5340; 5360; 5380; + 5400; 5420; 5440; 5460; 5480; 5500; 5520; 5540; 5560; 5580; + 5600; 5620; 5640; 5660; 5680; 5700; 5720; 5740; 5760; 5780; + 5800; 5820; 5840; 5860; 5880; 5900; 5920; 5940; 5960; 5980; + 6000; 6020; 6040; 6060; 6080; 6100; 6120; 6140; 6160; 6180; + 6200; 6220; 6240; 6260; 6280; 6300; 6320; 6340; 6360; 6380; + 6400; 6420; 6440; 6460; 6480; 6500; 6520; 6540; 6560; 6580; + 6600; 6620; 6640; 6660; 6680; 6700; 6720; 6740; 6760; 6780; + 6800; 6820; 6840; 6860; 6880; 6900; 6920; 6940; 6960; 6980; + 7000; 7020; 7040; 7060; 7080; 7100; 7120; 7140; 7160; 7180; + 7200; 7220; 7240; 7260; 7280; 7300; 7320; 7340; 7360; 7380; + 7400; 7420; 7440; 7460; 7480; 7500; 7520; 7540; 7560; 7580; + 7600; 7620; 7640; 7660; 7680; 7700; 7720; 7740; 7760; 7780; + 7800; 7820; 7840; 7860; 7880; 7900; 7920; 7940; 7960; 7980; + 8000; 8020; 8040; 8060; 8080; 8100; 8120; 8140; 8160; 8180; + 8200; 8220; 8240; 8260; 8280; 8300; 8320; 8340; 8360; 8380; + 8400; 8420; 8440; 8460; 8480; 8500; 8520; 8540; 8560; 8580; + 8600; 8620; 8640; 8660; 8680; 8700; 8720; 8740; 8760; 8780; + 8800; 8820; 8840; 8860; 8880; 8900; 8920; 8940; 8960; 8980; + 9000; 9020; 9040; 9060; 9080; 9100; 9120; 9140; 9160; 9180; + 9200; 9220; 9240; 9260; 9280; 9300; 9320; 9340; 9360; 9380; + 9400; 9420; 9440; 9460; 9480; 9500; 9520; 9540; 9560; 9580; + 9600; 9620; 9640; 9660; 9680; 9700; 9720; 9740; 9760; 9780; + 9800; 9820; 9840; 9860; 9880; 9900; 9920; 9940; 9960; 9980; + 10000; 10020; 10040; 10060; 10080; 10100; 10120; 10140; 10160; 10180; + 10200; 10220; 10240; 10260; 10280; 10300; 10320; 10340; 10360; 10380; + 10400; 10420; 10440; 10460; 10480; 10500; 10520; 10540; 10560; 10580; + 10600; 10620; 10640; 10660; 10680; 10700; 10720; 10740; 10760; 10780; + 10800; 10820; 10840; 10860; 10880; 10900; 10920; 10940; 10960; 10980; + 11000; 11020; 11040; 11060; 11080; 11100; 11120; 11140; 11160; 11180; + 11200; 11220; 11240; 11260; 11280; 11300; 11320; 11340; 11360; 11380; + 11400; 11420; 11440; 11460; 11480; 11500; 11520; 11540; 11560; 11580; + 11600; 11620; 11640; 11660; 11680; 11700; 11720; 11740; 11760; 11780; + 11800; 11820; 11840; 11860; 11880; 11900; 11920; 11940; 11960; 11980; + 12000; 12020; 12040; 12060; 12080; 12100; 12120; 12140; 12160; 12180; + 12200; 12220; 12240; 12260; 12280; 12300; 12320; 12340; 12360; 12380; + 12400; 12420; 12440; 12460; 12480; 12500; 12520; 12540; 12560; 12580; + 12600; 12620; 12640; 12660; 12680; 12700; 12720; 12740; 12760; 12780; + 12800; 12820; 12840; 12860; 12880; 12900; 12920; 12940; 12960; 12980; + 13000; 13020; 13040; 13060; 13080; 13100; 13120; 13140; 13160; 13180; + 13200; 13220; 13240; 13260; 13280; 13300; 13320; 13340; 13360; 13380; + 13400; 13420; 13440; 13460; 13480; 13500; 13520; 13540; 13560; 13580; + 13600; 13620; 13640; 13660; 13680; 13700; 13720; 13740; 13760; 13780; + 13800; 13820; 13840; 13860; 13880; 13900; 13920; 13940; 13960; 13980; + 14000; 14020; 14040; 14060; 14080; 14100; 14120; 14140; 14160; 14180; + 14200; 14220; 14240; 14260; 14280; 14300; 14320; 14340; 14360; 14380; + 14400; 14420; 14440; 14460; 14480; 14500; 14520; 14540; 14560; 14580; + 14600; 14620; 14640; 14660; 14680; 14700; 14720; 14740; 14760; 14780; + 14800; 14820; 14840; 14860; 14880; 14900; 14920; 14940; 14960; 14980; + 15000; 15020; 15040; 15060; 15080; 15100; 15120; 15140; 15160; 15180; + 15200; 15220; 15240; 15260; 15280; 15300; 15320; 15340; 15360; 15380; + 15400; 15420; 15440; 15460; 15480; 15500; 15520; 15540; 15560; 15580; + 15600; 15620; 15640; 15660; 15680; 15700; 15720; 15740; 15760; 15780; + 15800; 15820; 15840; 15860; 15880; 15900; 15920; 15940; 15960; 15980; + 16000; 16020; 16040; 16060; 16080; 16100; 16120; 16140; 16160; 16180; + 16200; 16220; 16240; 16260; 16280; 16300; 16320; 16340; 16360; 16380; + 16400; 16420; 16440; 16460; 16480; 16500; 16520; 16540; 16560; 16580; + 16600; 16620; 16640; 16660; 16680; 16700; 16720; 16740; 16760; 16780; + 16800; 16820; 16840; 16860; 16880; 16900; 16920; 16940; 16960; 16980; + 17000; 17020; 17040; 17060; 17080; 17100; 17120; 17140; 17160; 17180; + 17200; 17220; 17240; 17260; 17280; 17300; 17320; 17340; 17360; 17380; + 17400; 17420; 17440; 17460; 17480; 17500; 17520; 17540; 17560; 17580; + 17600; 17620; 17640; 17660; 17680; 17700; 17720; 17740; 17760; 17780; + 17800; 17820; 17840; 17860; 17880; 17900; 17920; 17940; 17960; 17980; + 18000; 18020; 18040; 18060; 18080; 18100; 18120; 18140; 18160; 18180; + 18200; 18220; 18240; 18260; 18280; 18300; 18320; 18340; 18360; 18380; + 18400; 18420; 18440; 18460; 18480; 18500; 18520; 18540; 18560; 18580; + 18600; 18620; 18640; 18660; 18680; 18700; 18720; 18740; 18760; 18780; + 18800; 18820; 18840; 18860; 18880; 18900; 18920; 18940; 18960; 18980; + 19000; 19020; 19040; 19060; 19080; 19100; 19120; 19140; 19160; 19180; + 19200; 19220; 19240; 19260; 19280; 19300; 19320; 19340; 19360; 19380; + 19400; 19420; 19440; 19460; 19480; 19500; 19520; 19540; 19560; 19580; + 19600; 19620; 19640; 19660; 19680; 19700; 19720; 19740; 19760; 19780; + 19800; 19820; 19840; 19860; 19880; 19900; 19920; 19940; 19960; 19980; + 20000; 20020; 20040; 20060; 20080; 20100; 20120; 20140; 20160; 20180; + 20200; 20220; 20240; 20260; 20280; 20300; 20320; 20340; 20360; 20380; + 20400; 20420; 20440; 20460; 20480; 20500; 20520; 20540; 20560; 20580; + 20600; 20620; 20640; 20660; 20680; 20700; 20720; 20740; 20760; 20780; + 20800; 20820; 20840; 20860; 20880; 20900; 20920; 20940; 20960; 20980; + 21000; 21020; 21040; 21060; 21080; 21100; 21120; 21140; 21160; 21180; + 21200; 21220; 21240; 21260; 21280; 21300; 21320; 21340; 21360; 21380; + 21400; 21420; 21440; 21460; 21480; 21500; 21520; 21540; 21560; 21580; + 21600; 21620; 21640; 21660; 21680; 21700; 21720; 21740; 21760; 21780; + 21800; 21820; 21840; 21860; 21880; 21900; 21920; 21940; 21960; 21980; + 22000; 22020; 22040; 22060; 22080; 22100; 22120; 22140; 22160; 22180; + 22200; 22220; 22240; 22260; 22280; 22300; 22320; 22340; 22360; 22380; + 22400; 22420; 22440; 22460; 22480; 22500; 22520; 22540; 22560; 22580; + 22600; 22620; 22640; 22660; 22680; 22700; 22720; 22740; 22760; 22780; + 22800; 22820; 22840; 22860; 22880; 22900; 22920; 22940; 22960; 22980; + 23000; 23020; 23040; 23060; 23080; 23100; 23120; 23140; 23160; 23180; + 23200; 23220; 23240; 23260; 23280; 23300; 23320; 23340; 23360; 23380; + 23400; 23420; 23440; 23460; 23480; 23500; 23520; 23540; 23560; 23580; + 23600; 23620; 23640; 23660; 23680; 23700; 23720; 23740; 23760; 23780; + 23800; 23820; 23840; 23860; 23880; 23900; 23920; 23940; 23960; 23980; + 24000; 24020; 24040; 24060; 24080; 24100; 24120; 24140; 24160; 24180; + 24200; 24220; 24240; 24260; 24280; 24300; 24320; 24340; 24360; 24380; + 24400; 24420; 24440; 24460; 24480; 24500; 24520; 24540; 24560; 24580; + 24600; 24620; 24640; 24660; 24680; 24700; 24720; 24740; 24760; 24780; + 24800; 24820; 24840; 24860; 24880; 24900; 24920; 24940; 24960; 24980; + 25000; 25020; 25040; 25060; 25080; 25100; 25120; 25140; 25160; 25180; + 25200; 25220; 25240; 25260; 25280; 25300; 25320; 25340; 25360; 25380; + 25400; 25420; 25440; 25460; 25480; 25500; 25520; 25540; 25560; 25580; + 25600; 25620; 25640; 25660; 25680; 25700; 25720; 25740; 25760; 25780; + 25800; 25820; 25840; 25860; 25880; 25900; 25920; 25940; 25960; 25980; + 26000; 26020; 26040; 26060; 26080; 26100; 26120; 26140; 26160; 26180; + 26200; 26220; 26240; 26260; 26280; 26300; 26320; 26340; 26360; 26380; + 26400; 26420; 26440; 26460; 26480; 26500; 26520; 26540; 26560; 26580; + 26600; 26620; 26640; 26660; 26680; 26700; 26720; 26740; 26760; 26780; + 26800; 26820; 26840; 26860; 26880; 26900; 26920; 26940; 26960; 26980; + 27000; 27020; 27040; 27060; 27080; 27100; 27120; 27140; 27160; 27180; + 27200; 27220; 27240; 27260; 27280; 27300; 27320; 27340; 27360; 27380; + 27400; 27420; 27440; 27460; 27480; 27500; 27520; 27540; 27560; 27580; + 27600; 27620; 27640; 27660; 27680; 27700; 27720; 27740; 27760; 27780; + 27800; 27820; 27840; 27860; 27880; 27900; 27920; 27940; 27960; 27980; + 28000; 28020; 28040; 28060; 28080; 28100; 28120; 28140; 28160; 28180; + 28200; 28220; 28240; 28260; 28280; 28300; 28320; 28340; 28360; 28380; + 28400; 28420; 28440; 28460; 28480; 28500; 28520; 28540; 28560; 28580; + 28600; 28620; 28640; 28660; 28680; 28700; 28720; 28740; 28760; 28780; + 28800; 28820; 28840; 28860; 28880; 28900; 28920; 28940; 28960; 28980; + 29000; 29020; 29040; 29060; 29080; 29100; 29120; 29140; 29160; 29180; + 29200; 29220; 29240; 29260; 29280; 29300; 29320; 29340; 29360; 29380; + 29400; 29420; 29440; 29460; 29480; 29500; 29520; 29540; 29560; 29580; + 29600; 29620; 29640; 29660; 29680; 29700; 29720; 29740; 29760; 29780; + 29800; 29820; 29840; 29860; 29880; 29900; 29920; 29940; 29960; 29980; + 30000; 30020; 30040; 30060; 30080; 30100; 30120; 30140; 30160; 30180; + 30200; 30220; 30240; 30260; 30280; 30300; 30320; 30340; 30360; 30380; + 30400; 30420; 30440; 30460; 30480; 30500; 30520; 30540; 30560; 30580; + 30600; 30620; 30640; 30660; 30680; 30700; 30720; 30740; 30760; 30780; + 30800; 30820; 30840; 30860; 30880; 30900; 30920; 30940; 30960; 30980; + 31000; 31020; 31040; 31060; 31080; 31100; 31120; 31140; 31160; 31180; + 31200; 31220; 31240; 31260; 31280; 31300; 31320; 31340; 31360; 31380; + 31400; 31420; 31440; 31460; 31480; 31500; 31520; 31540; 31560; 31580; + 31600; 31620; 31640; 31660; 31680; 31700; 31720; 31740; 31760; 31780; + 31800; 31820; 31840; 31860; 31880; 31900; 31920; 31940; 31960; 31980; + 32000; 32020; 32040; 32060; 32080; 32100; 32120; 32140; 32160; 32180; + 32200; 32220; 32240; 32260; 32280; 32300; 32320; 32340; 32360; 32380; + 32400; 32420; 32440; 32460; 32480; 32500; 32520; 32540; 32560; 32580; + 32600; 32620; 32640; 32660; 32680; 32700; 32720; 32740; 32760; 32780; + 32800; 32820; 32840; 32860; 32880; 32900; 32920; 32940; 32960; 32980; + 33000; 33020; 33040; 33060; 33080; 33100; 33120; 33140; 33160; 33180; + 33200; 33220; 33240; 33260; 33280; 33300; 33320; 33340; 33360; 33380; + 33400; 33420; 33440; 33460; 33480; 33500; 33520; 33540; 33560; 33580; + 33600; 33620; 33640; 33660; 33680; 33700; 33720; 33740; 33760; 33780; + 33800; 33820; 33840; 33860; 33880; 33900; 33920; 33940; 33960; 33980; + 34000; 34020; 34040; 34060; 34080; 34100; 34120; 34140; 34160; 34180; + 34200; 34220; 34240; 34260; 34280; 34300; 34320; 34340; 34360; 34380; + 34400; 34420; 34440; 34460; 34480; 34500; 34520; 34540; 34560; 34580; + 34600; 34620; 34640; 34660; 34680; 34700; 34720; 34740; 34760; 34780; + 34800; 34820; 34840; 34860; 34880; 34900; 34920; 34940; 34960; 34980; + 35000; 35020; 35040; 35060; 35080; 35100; 35120; 35140; 35160; 35180; + 35200; 35220; 35240; 35260; 35280; 35300; 35320; 35340; 35360; 35380; + 35400; 35420; 35440; 35460; 35480; 35500; 35520; 35540; 35560; 35580; + 35600; 35620; 35640; 35660; 35680; 35700; 35720; 35740; 35760; 35780; + 35800; 35820; 35840; 35860; 35880; 35900; 35920; 35940; 35960; 35980; + 36000; 36020; 36040; 36060; 36080; 36100; 36120; 36140; 36160; 36180; + 36200; 36220; 36240; 36260; 36280; 36300; 36320; 36340; 36360; 36380; + 36400; 36420; 36440; 36460; 36480; 36500; 36520; 36540; 36560; 36580; + 36600; 36620; 36640; 36660; 36680; 36700; 36720; 36740; 36760; 36780; + 36800; 36820; 36840; 36860; 36880; 36900; 36920; 36940; 36960; 36980; + 37000; 37020; 37040; 37060; 37080; 37100; 37120; 37140; 37160; 37180; + 37200; 37220; 37240; 37260; 37280; 37300; 37320; 37340; 37360; 37380; + 37400; 37420; 37440; 37460; 37480; 37500; 37520; 37540; 37560; 37580; + 37600; 37620; 37640; 37660; 37680; 37700; 37720; 37740; 37760; 37780; + 37800; 37820; 37840; 37860; 37880; 37900; 37920; 37940; 37960; 37980; + 38000; 38020; 38040; 38060; 38080; 38100; 38120; 38140; 38160; 38180; + 38200; 38220; 38240; 38260; 38280; 38300; 38320; 38340; 38360; 38380; + 38400; 38420; 38440; 38460; 38480; 38500; 38520; 38540; 38560; 38580; + 38600; 38620; 38640; 38660; 38680; 38700; 38720; 38740; 38760; 38780; + 38800; 38820; 38840; 38860; 38880; 38900; 38920; 38940; 38960; 38980; + 39000; 39020; 39040; 39060; 39080; 39100; 39120; 39140; 39160; 39180; + 39200; 39220; 39240; 39260; 39280; 39300; 39320; 39340; 39360; 39380; + 39400; 39420; 39440; 39460; 39480; 39500; 39520; 39540; 39560; 39580; + 39600; 39620; 39640; 39660; 39680; 39700; 39720; 39740; 39760; 39780; + 39800; 39820; 39840; 39860; 39880; 39900; 39920; 39940; 39960; 39980; + 40000; 40020; 40040; 40060; 40080; 40100; 40120; 40140; 40160; 40180; + 40200; 40220; 40240; 40260; 40280; 40300; 40320; 40340; 40360; 40380; + 40400; 40420; 40440; 40460; 40480; 40500; 40520; 40540; 40560; 40580; + 40600; 40620; 40640; 40660; 40680; 40700; 40720; 40740; 40760; 40780; + 40800; 40820; 40840; 40860; 40880; 40900; 40920; 40940; 40960; 40980; + 41000; 41020; 41040; 41060; 41080; 41100; 41120; 41140; 41160; 41180; + 41200; 41220; 41240; 41260; 41280; 41300; 41320; 41340; 41360; 41380; + 41400; 41420; 41440; 41460; 41480; 41500; 41520; 41540; 41560; 41580; + 41600; 41620; 41640; 41660; 41680; 41700; 41720; 41740; 41760; 41780; + 41800; 41820; 41840; 41860; 41880; 41900; 41920; 41940; 41960; 41980; + 42000; 42020; 42040; 42060; 42080; 42100; 42120; 42140; 42160; 42180; + 42200; 42220; 42240; 42260; 42280; 42300; 42320; 42340; 42360; 42380; + 42400; 42420; 42440; 42460; 42480; 42500; 42520; 42540; 42560; 42580; + 42600; 42620; 42640; 42660; 42680; 42700; 42720; 42740; 42760; 42780; + 42800; 42820; 42840; 42860; 42880; 42900; 42920; 42940; 42960; 42980; + 43000; 43020; 43040; 43060; 43080; 43100; 43120; 43140; 43160; 43180; + 43200; 43220; 43240; 43260; 43280; 43300; 43320; 43340; 43360; 43380; + 43400; 43420; 43440; 43460; 43480; 43500; 43520; 43540; 43560; 43580; + 43600; 43620; 43640; 43660; 43680; 43700; 43720; 43740; 43760; 43780; + 43800; 43820; 43840; 43860; 43880; 43900; 43920; 43940; 43960; 43980; + 44000; 44020; 44040; 44060; 44080; 44100; 44120; 44140; 44160; 44180; + 44200; 44220; 44240; 44260; 44280; 44300; 44320; 44340; 44360; 44380; + 44400; 44420; 44440; 44460; 44480; 44500; 44520; 44540; 44560; 44580; + 44600; 44620; 44640; 44660; 44680; 44700; 44720; 44740; 44760; 44780; + 44800; 44820; 44840; 44860; 44880; 44900; 44920; 44940; 44960; 44980; + 45000; 45020; 45040; 45060; 45080; 45100; 45120; 45140; 45160; 45180; + 45200; 45220; 45240; 45260; 45280; 45300; 45320; 45340; 45360; 45380; + 45400; 45420; 45440; 45460; 45480; 45500; 45520; 45540; 45560; 45580; + 45600; 45620; 45640; 45660; 45680; 45700; 45720; 45740; 45760; 45780; + 45800; 45820; 45840; 45860; 45880; 45900; 45920; 45940; 45960; 45980; + 46000; 46020; 46040; 46060; 46080; 46100; 46120; 46140; 46160; 46180; + 46200; 46220; 46240; 46260; 46280; 46300; 46320; 46340; 46360; 46380; + 46400; 46420; 46440; 46460; 46480; 46500; 46520; 46540; 46560; 46580; + 46600; 46620; 46640; 46660; 46680; 46700; 46720; 46740; 46760; 46780; + 46800; 46820; 46840; 46860; 46880; 46900; 46920; 46940; 46960; 46980; + 47000; 47020; 47040; 47060; 47080; 47100; 47120; 47140; 47160; 47180; + 47200; 47220; 47240; 47260; 47280; 47300; 47320; 47340; 47360; 47380; + 47400; 47420; 47440; 47460; 47480; 47500; 47520; 47540; 47560; 47580; + 47600; 47620; 47640; 47660; 47680; 47700; 47720; 47740; 47760; 47780; + 47800; 47820; 47840; 47860; 47880; 47900; 47920; 47940; 47960; 47980; + 48000; 48020; 48040; 48060; 48080; 48100; 48120; 48140; 48160; 48180; + 48200; 48220; 48240; 48260; 48280; 48300; 48320; 48340; 48360; 48380; + 48400; 48420; 48440; 48460; 48480; 48500; 48520; 48540; 48560; 48580; + 48600; 48620; 48640; 48660; 48680; 48700; 48720; 48740; 48760; 48780; + 48800; 48820; 48840; 48860; 48880; 48900; 48920; 48940; 48960; 48980; + 49000; 49020; 49040; 49060; 49080; 49100; 49120; 49140; 49160; 49180; + 49200; 49220; 49240; 49260; 49280; 49300; 49320; 49340; 49360; 49380; + 49400; 49420; 49440; 49460; 49480; 49500; 49520; 49540; 49560; 49580; + 49600; 49620; 49640; 49660; 49680; 49700; 49720; 49740; 49760; 49780; + 49800; 49820; 49840; 49860; 49880; 49900; 49920; 49940; 49960; 49980; + 50000; 50020; 50040; 50060; 50080; 50100; 50120; 50140; 50160; 50180; + 50200; 50220; 50240; 50260; 50280; 50300; 50320; 50340; 50360; 50380; + 50400; 50420; 50440; 50460; 50480; 50500; 50520; 50540; 50560; 50580; + 50600; 50620; 50640; 50660; 50680; 50700; 50720; 50740; 50760; 50780; + 50800; 50820; 50840; 50860; 50880; 50900; 50920; 50940; 50960; 50980; + 51000; 51020; 51040; 51060; 51080; 51100; 51120; 51140; 51160; 51180; + 51200; 51220; 51240; 51260; 51280; 51300; 51320; 51340; 51360; 51380; + 51400; 51420; 51440; 51460; 51480; 51500; 51520; 51540; 51560; 51580; + 51600; 51620; 51640; 51660; 51680; 51700; 51720; 51740; 51760; 51780; + 51800; 51820; 51840; 51860; 51880; 51900; 51920; 51940; 51960; 51980; + 52000; 52020; 52040; 52060; 52080; 52100; 52120; 52140; 52160; 52180; + 52200; 52220; 52240; 52260; 52280; 52300; 52320; 52340; 52360; 52380; + 52400; 52420; 52440; 52460; 52480; 52500; 52520; 52540; 52560; 52580; + 52600; 52620; 52640; 52660; 52680; 52700; 52720; 52740; 52760; 52780; + 52800; 52820; 52840; 52860; 52880; 52900; 52920; 52940; 52960; 52980; + 53000; 53020; 53040; 53060; 53080; 53100; 53120; 53140; 53160; 53180; + 53200; 53220; 53240; 53260; 53280; 53300; 53320; 53340; 53360; 53380; + 53400; 53420; 53440; 53460; 53480; 53500; 53520; 53540; 53560; 53580; + 53600; 53620; 53640; 53660; 53680; 53700; 53720; 53740; 53760; 53780; + 53800; 53820; 53840; 53860; 53880; 53900; 53920; 53940; 53960; 53980; + 54000; 54020; 54040; 54060; 54080; 54100; 54120; 54140; 54160; 54180; + 54200; 54220; 54240; 54260; 54280; 54300; 54320; 54340; 54360; 54380; + 54400; 54420; 54440; 54460; 54480; 54500; 54520; 54540; 54560; 54580; + 54600; 54620; 54640; 54660; 54680; 54700; 54720; 54740; 54760; 54780; + 54800; 54820; 54840; 54860; 54880; 54900; 54920; 54940; 54960; 54980; + 55000; 55020; 55040; 55060; 55080; 55100; 55120; 55140; 55160; 55180; + 55200; 55220; 55240; 55260; 55280; 55300; 55320; 55340; 55360; 55380; + 55400; 55420; 55440; 55460; 55480; 55500; 55520; 55540; 55560; 55580; + 55600; 55620; 55640; 55660; 55680; 55700; 55720; 55740; 55760; 55780; + 55800; 55820; 55840; 55860; 55880; 55900; 55920; 55940; 55960; 55980; + 56000; 56020; 56040; 56060; 56080; 56100; 56120; 56140; 56160; 56180; + 56200; 56220; 56240; 56260; 56280; 56300; 56320; 56340; 56360; 56380; + 56400; 56420; 56440; 56460; 56480; 56500; 56520; 56540; 56560; 56580; + 56600; 56620; 56640; 56660; 56680; 56700; 56720; 56740; 56760; 56780; + 56800; 56820; 56840; 56860; 56880; 56900; 56920; 56940; 56960; 56980; + 57000; 57020; 57040; 57060; 57080; 57100; 57120; 57140; 57160; 57180; + 57200; 57220; 57240; 57260; 57280; 57300; 57320; 57340; 57360; 57380; + 57400; 57420; 57440; 57460; 57480; 57500; 57520; 57540; 57560; 57580; + 57600; 57620; 57640; 57660; 57680; 57700; 57720; 57740; 57760; 57780; + 57800; 57820; 57840; 57860; 57880; 57900; 57920; 57940; 57960; 57980; + 58000; 58020; 58040; 58060; 58080; 58100; 58120; 58140; 58160; 58180; + 58200; 58220; 58240; 58260; 58280; 58300; 58320; 58340; 58360; 58380; + 58400; 58420; 58440; 58460; 58480; 58500; 58520; 58540; 58560; 58580; + 58600; 58620; 58640; 58660; 58680; 58700; 58720; 58740; 58760; 58780; + 58800; 58820; 58840; 58860; 58880; 58900; 58920; 58940; 58960; 58980; + 59000; 59020; 59040; 59060; 59080; 59100; 59120; 59140; 59160; 59180; + 59200; 59220; 59240; 59260; 59280; 59300; 59320; 59340; 59360; 59380; + 59400; 59420; 59440; 59460; 59480; 59500; 59520; 59540; 59560; 59580; + 59600; 59620; 59640; 59660; 59680; 59700; 59720; 59740; 59760; 59780; + 59800; 59820; 59840; 59860; 59880; 59900; 59920; 59940; 59960; 59980; + 60000; 60020; 60040; 60060; 60080; 60100; 60120; 60140; 60160; 60180; + 60200; 60220; 60240; 60260; 60280; 60300; 60320; 60340; 60360; 60380; + 60400; 60420; 60440; 60460; 60480; 60500; 60520; 60540; 60560; 60580; + 60600; 60620; 60640; 60660; 60680; 60700; 60720; 60740; 60760; 60780; + 60800; 60820; 60840; 60860; 60880; 60900; 60920; 60940; 60960; 60980; + 61000; 61020; 61040; 61060; 61080; 61100; 61120; 61140; 61160; 61180; + 61200; 61220; 61240; 61260; 61280; 61300; 61320; 61340; 61360; 61380; + 61400; 61420; 61440; 61460; 61480; 61500; 61520; 61540; 61560; 61580; + 61600; 61620; 61640; 61660; 61680; 61700; 61720; 61740; 61760; 61780; + 61800; 61820; 61840; 61860; 61880; 61900; 61920; 61940; 61960; 61980; + 62000; 62020; 62040; 62060; 62080; 62100; 62120; 62140; 62160; 62180; + 62200; 62220; 62240; 62260; 62280; 62300; 62320; 62340; 62360; 62380; + 62400; 62420; 62440; 62460; 62480; 62500; 62520; 62540; 62560; 62580; + 62600; 62620; 62640; 62660; 62680; 62700; 62720; 62740; 62760; 62780; + 62800; 62820; 62840; 62860; 62880; 62900; 62920; 62940; 62960; 62980; + 63000; 63020; 63040; 63060; 63080; 63100; 63120; 63140; 63160; 63180; + 63200; 63220; 63240; 63260; 63280; 63300; 63320; 63340; 63360; 63380; + 63400; 63420; 63440; 63460; 63480; 63500; 63520; 63540; 63560; 63580; + 63600; 63620; 63640; 63660; 63680; 63700; 63720; 63740; 63760; 63780; + 63800; 63820; 63840; 63860; 63880; 63900; 63920; 63940; 63960; 63980; + 64000; 64020; 64040; 64060; 64080; 64100; 64120; 64140; 64160; 64180; + 64200; 64220; 64240; 64260; 64280; 64300; 64320; 64340; 64360; 64380; + 64400; 64420; 64440; 64460; 64480; 64500; 64520; 64540; 64560; 64580; + 64600; 64620; 64640; 64660; 64680; 64700; 64720; 64740; 64760; 64780; + 64800; 64820; 64840; 64860; 64880; 64900; 64920; 64940; 64960; 64980; + 65000; 65020; 65040; 65060; 65080; 65100; 65120; 65140; 65160; 65180; + 65200; 65220; 65240; 65260; 65280; 65300; 65320; 65340; 65360; 65380; + 65400; 65420; 65440; 65460; 65480; 65500; 65520; 65540; 65560; 65580; + 65600; 65620; 65640; 65660; 65680; 65700; 65720; 65740; 65760; 65780; + 65800; 65820; 65840; 65860; 65880; 65900; 65920; 65940; 65960; 65980; + 66000; 66020; 66040; 66060; 66080; 66100; 66120; 66140; 66160; 66180; + 66200; 66220; 66240; 66260; 66280; 66300; 66320; 66340; 66360; 66380; + 66400; 66420; 66440; 66460; 66480; 66500; 66520; 66540; 66560; 66580; + 66600; 66620; 66640; 66660; 66680; 66700; 66720; 66740; 66760; 66780; + 66800; 66820; 66840; 66860; 66880; 66900; 66920; 66940; 66960; 66980; + 67000; 67020; 67040; 67060; 67080; 67100; 67120; 67140; 67160; 67180; + 67200; 67220; 67240; 67260; 67280; 67300; 67320; 67340; 67360; 67380; + 67400; 67420; 67440; 67460; 67480; 67500; 67520; 67540; 67560; 67580; + 67600; 67620; 67640; 67660; 67680; 67700; 67720; 67740; 67760; 67780; + 67800; 67820; 67840; 67860; 67880; 67900; 67920; 67940; 67960; 67980; + 68000; 68020; 68040; 68060; 68080; 68100; 68120; 68140; 68160; 68180; + 68200; 68220; 68240; 68260; 68280; 68300; 68320; 68340; 68360; 68380; + 68400; 68420; 68440; 68460; 68480; 68500; 68520; 68540; 68560; 68580; + 68600; 68620; 68640; 68660; 68680; 68700; 68720; 68740; 68760; 68780; + 68800; 68820; 68840; 68860; 68880; 68900; 68920; 68940; 68960; 68980; + 69000; 69020; 69040; 69060; 69080; 69100; 69120; 69140; 69160; 69180; + 69200; 69220; 69240; 69260; 69280; 69300; 69320; 69340; 69360; 69380; + 69400; 69420; 69440; 69460; 69480; 69500; 69520; 69540; 69560; 69580; + 69600; 69620; 69640; 69660; 69680; 69700; 69720; 69740; 69760; 69780; + 69800; 69820; 69840; 69860; 69880; 69900; 69920; 69940; 69960; 69980; + 70000; 70020; 70040; 70060; 70080; 70100; 70120; 70140; 70160; 70180; + 70200; 70220; 70240; 70260; 70280; 70300; 70320; 70340; 70360; 70380; + 70400; 70420; 70440; 70460; 70480; 70500; 70520; 70540; 70560; 70580; + 70600; 70620; 70640; 70660; 70680; 70700; 70720; 70740; 70760; 70780; + 70800; 70820; 70840; 70860; 70880; 70900; 70920; 70940; 70960; 70980; + 71000; 71020; 71040; 71060; 71080; 71100; 71120; 71140; 71160; 71180; + 71200; 71220; 71240; 71260; 71280; 71300; 71320; 71340; 71360; 71380; + 71400; 71420; 71440; 71460; 71480; 71500; 71520; 71540; 71560; 71580; + 71600; 71620; 71640; 71660; 71680; 71700; 71720; 71740; 71760; 71780; + 71800; 71820; 71840; 71860; 71880; 71900; 71920; 71940; 71960; 71980; + 72000; 72020; 72040; 72060; 72080; 72100; 72120; 72140; 72160; 72180; + 72200; 72220; 72240; 72260; 72280; 72300; 72320; 72340; 72360; 72380; + 72400; 72420; 72440; 72460; 72480; 72500; 72520; 72540; 72560; 72580; + 72600; 72620; 72640; 72660; 72680; 72700; 72720; 72740; 72760; 72780; + 72800; 72820; 72840; 72860; 72880; 72900; 72920; 72940; 72960; 72980; + 73000; 73020; 73040; 73060; 73080; 73100; 73120; 73140; 73160; 73180; + 73200; 73220; 73240; 73260; 73280; 73300; 73320; 73340; 73360; 73380; + 73400; 73420; 73440; 73460; 73480; 73500; 73520; 73540; 73560; 73580; + 73600; 73620; 73640; 73660; 73680; 73700; 73720; 73740; 73760; 73780; + 73800; 73820; 73840; 73860; 73880; 73900; 73920; 73940; 73960; 73980; + 74000; 74020; 74040; 74060; 74080; 74100; 74120; 74140; 74160; 74180; + 74200; 74220; 74240; 74260; 74280; 74300; 74320; 74340; 74360; 74380; + 74400; 74420; 74440; 74460; 74480; 74500; 74520; 74540; 74560; 74580; + 74600; 74620; 74640; 74660; 74680; 74700; 74720; 74740; 74760; 74780; + 74800; 74820; 74840; 74860; 74880; 74900; 74920; 74940; 74960; 74980; + 75000; 75020; 75040; 75060; 75080; 75100; 75120; 75140; 75160; 75180; + 75200; 75220; 75240; 75260; 75280; 75300; 75320; 75340; 75360; 75380; + 75400; 75420; 75440; 75460; 75480; 75500; 75520; 75540; 75560; 75580; + 75600; 75620; 75640; 75660; 75680; 75700; 75720; 75740; 75760; 75780; + 75800; 75820; 75840; 75860; 75880; 75900; 75920; 75940; 75960; 75980; + 76000; 76020; 76040; 76060; 76080; 76100; 76120; 76140; 76160; 76180; + 76200; 76220; 76240; 76260; 76280; 76300; 76320; 76340; 76360; 76380; + 76400; 76420; 76440; 76460; 76480; 76500; 76520; 76540; 76560; 76580; + 76600; 76620; 76640; 76660; 76680; 76700; 76720; 76740; 76760; 76780; + 76800; 76820; 76840; 76860; 76880; 76900; 76920; 76940; 76960; 76980; + 77000; 77020; 77040; 77060; 77080; 77100; 77120; 77140; 77160; 77180; + 77200; 77220; 77240; 77260; 77280; 77300; 77320; 77340; 77360; 77380; + 77400; 77420; 77440; 77460; 77480; 77500; 77520; 77540; 77560; 77580; + 77600; 77620; 77640; 77660; 77680; 77700; 77720; 77740; 77760; 77780; + 77800; 77820; 77840; 77860; 77880; 77900; 77920; 77940; 77960; 77980; + 78000; 78020; 78040; 78060; 78080; 78100; 78120; 78140; 78160; 78180; + 78200; 78220; 78240; 78260; 78280; 78300; 78320; 78340; 78360; 78380; + 78400; 78420; 78440; 78460; 78480; 78500; 78520; 78540; 78560; 78580; + 78600; 78620; 78640; 78660; 78680; 78700; 78720; 78740; 78760; 78780; + 78800; 78820; 78840; 78860; 78880; 78900; 78920; 78940; 78960; 78980; + 79000; 79020; 79040; 79060; 79080; 79100; 79120; 79140; 79160; 79180; + 79200; 79220; 79240; 79260; 79280; 79300; 79320; 79340; 79360; 79380; + 79400; 79420; 79440; 79460; 79480; 79500; 79520; 79540; 79560; 79580; + 79600; 79620; 79640; 79660; 79680; 79700; 79720; 79740; 79760; 79780; + 79800; 79820; 79840; 79860; 79880; 79900; 79920; 79940; 79960; 79980; + 80000; 80020; 80040; 80060; 80080; 80100; 80120; 80140; 80160; 80180; + 80200; 80220; 80240; 80260; 80280; 80300; 80320; 80340; 80360; 80380; + 80400; 80420; 80440; 80460; 80480; 80500; 80520; 80540; 80560; 80580; + 80600; 80620; 80640; 80660; 80680; 80700; 80720; 80740; 80760; 80780; + 80800; 80820; 80840; 80860; 80880; 80900; 80920; 80940; 80960; 80980; + 81000; 81020; 81040; 81060; 81080; 81100; 81120; 81140; 81160; 81180; + 81200; 81220; 81240; 81260; 81280; 81300; 81320; 81340; 81360; 81380; + 81400; 81420; 81440; 81460; 81480; 81500; 81520; 81540; 81560; 81580; + 81600; 81620; 81640; 81660; 81680; 81700; 81720; 81740; 81760; 81780; + 81800; 81820; 81840; 81860; 81880; 81900; 81920; 81940; 81960; 81980; + 82000; 82020; 82040; 82060; 82080; 82100; 82120; 82140; 82160; 82180; + 82200; 82220; 82240; 82260; 82280; 82300; 82320; 82340; 82360; 82380; + 82400; 82420; 82440; 82460; 82480; 82500; 82520; 82540; 82560; 82580; + 82600; 82620; 82640; 82660; 82680; 82700; 82720; 82740; 82760; 82780; + 82800; 82820; 82840; 82860; 82880; 82900; 82920; 82940; 82960; 82980; + 83000; 83020; 83040; 83060; 83080; 83100; 83120; 83140; 83160; 83180; + 83200; 83220; 83240; 83260; 83280; 83300; 83320; 83340; 83360; 83380; + 83400; 83420; 83440; 83460; 83480; 83500; 83520; 83540; 83560; 83580; + 83600; 83620; 83640; 83660; 83680; 83700; 83720; 83740; 83760; 83780; + 83800; 83820; 83840; 83860; 83880; 83900; 83920; 83940; 83960; 83980; + 84000; 84020; 84040; 84060; 84080; 84100; 84120; 84140; 84160; 84180; + 84200; 84220; 84240; 84260; 84280; 84300; 84320; 84340; 84360; 84380; + 84400; 84420; 84440; 84460; 84480; 84500; 84520; 84540; 84560; 84580; + 84600; 84620; 84640; 84660; 84680; 84700; 84720; 84740; 84760; 84780; + 84800; 84820; 84840; 84860; 84880; 84900; 84920; 84940; 84960; 84980; + 85000; 85020; 85040; 85060; 85080; 85100; 85120; 85140; 85160; 85180; + 85200; 85220; 85240; 85260; 85280; 85300; 85320; 85340; 85360; 85380; + 85400; 85420; 85440; 85460; 85480; 85500; 85520; 85540; 85560; 85580; + 85600; 85620; 85640; 85660; 85680; 85700; 85720; 85740; 85760; 85780; + 85800; 85820; 85840; 85860; 85880; 85900; 85920; 85940; 85960; 85980; + 86000; 86020; 86040; 86060; 86080; 86100; 86120; 86140; 86160; 86180; + 86200; 86220; 86240; 86260; 86280; 86300; 86320; 86340; 86360; 86380; + 86400; 86420; 86440; 86460; 86480; 86500; 86520; 86540; 86560; 86580; + 86600; 86620; 86640; 86660; 86680; 86700; 86720; 86740; 86760; 86780; + 86800; 86820; 86840; 86860; 86880; 86900; 86920; 86940; 86960; 86980; + 87000; 87020; 87040; 87060; 87080; 87100; 87120; 87140; 87160; 87180; + 87200; 87220; 87240; 87260; 87280; 87300; 87320; 87340; 87360; 87380; + 87400; 87420; 87440; 87460; 87480; 87500; 87520; 87540; 87560; 87580; + 87600; 87620; 87640; 87660; 87680; 87700; 87720; 87740; 87760; 87780; + 87800; 87820; 87840; 87860; 87880; 87900; 87920; 87940; 87960; 87980; + 88000; 88020; 88040; 88060; 88080; 88100; 88120; 88140; 88160; 88180; + 88200; 88220; 88240; 88260; 88280; 88300; 88320; 88340; 88360; 88380; + 88400; 88420; 88440; 88460; 88480; 88500; 88520; 88540; 88560; 88580; + 88600; 88620; 88640; 88660; 88680; 88700; 88720; 88740; 88760; 88780; + 88800; 88820; 88840; 88860; 88880; 88900; 88920; 88940; 88960; 88980; + 89000; 89020; 89040; 89060; 89080; 89100; 89120; 89140; 89160; 89180; + 89200; 89220; 89240; 89260; 89280; 89300; 89320; 89340; 89360; 89380; + 89400; 89420; 89440; 89460; 89480; 89500; 89520; 89540; 89560; 89580; + 89600; 89620; 89640; 89660; 89680; 89700; 89720; 89740; 89760; 89780; + 89800; 89820; 89840; 89860; 89880; 89900; 89920; 89940; 89960; 89980; + 90000; 90020; 90040; 90060; 90080; 90100; 90120; 90140; 90160; 90180; + 90200; 90220; 90240; 90260; 90280; 90300; 90320; 90340; 90360; 90380; + 90400; 90420; 90440; 90460; 90480; 90500; 90520; 90540; 90560; 90580; + 90600; 90620; 90640; 90660; 90680; 90700; 90720; 90740; 90760; 90780; + 90800; 90820; 90840; 90860; 90880; 90900; 90920; 90940; 90960; 90980; + 91000; 91020; 91040; 91060; 91080; 91100; 91120; 91140; 91160; 91180; + 91200; 91220; 91240; 91260; 91280; 91300; 91320; 91340; 91360; 91380; + 91400; 91420; 91440; 91460; 91480; 91500; 91520; 91540; 91560; 91580; + 91600; 91620; 91640; 91660; 91680; 91700; 91720; 91740; 91760; 91780; + 91800; 91820; 91840; 91860; 91880; 91900; 91920; 91940; 91960; 91980; + 92000; 92020; 92040; 92060; 92080; 92100; 92120; 92140; 92160; 92180; + 92200; 92220; 92240; 92260; 92280; 92300; 92320; 92340; 92360; 92380; + 92400; 92420; 92440; 92460; 92480; 92500; 92520; 92540; 92560; 92580; + 92600; 92620; 92640; 92660; 92680; 92700; 92720; 92740; 92760; 92780; + 92800; 92820; 92840; 92860; 92880; 92900; 92920; 92940; 92960; 92980; + 93000; 93020; 93040; 93060; 93080; 93100; 93120; 93140; 93160; 93180; + 93200; 93220; 93240; 93260; 93280; 93300; 93320; 93340; 93360; 93380; + 93400; 93420; 93440; 93460; 93480; 93500; 93520; 93540; 93560; 93580; + 93600; 93620; 93640; 93660; 93680; 93700; 93720; 93740; 93760; 93780; + 93800; 93820; 93840; 93860; 93880; 93900; 93920; 93940; 93960; 93980; + 94000; 94020; 94040; 94060; 94080; 94100; 94120; 94140; 94160; 94180; + 94200; 94220; 94240; 94260; 94280; 94300; 94320; 94340; 94360; 94380; + 94400; 94420; 94440; 94460; 94480; 94500; 94520; 94540; 94560; 94580; + 94600; 94620; 94640; 94660; 94680; 94700; 94720; 94740; 94760; 94780; + 94800; 94820; 94840; 94860; 94880; 94900; 94920; 94940; 94960; 94980; + 95000; 95020; 95040; 95060; 95080; 95100; 95120; 95140; 95160; 95180; + 95200; 95220; 95240; 95260; 95280; 95300; 95320; 95340; 95360; 95380; + 95400; 95420; 95440; 95460; 95480; 95500; 95520; 95540; 95560; 95580; + 95600; 95620; 95640; 95660; 95680; 95700; 95720; 95740; 95760; 95780; + 95800; 95820; 95840; 95860; 95880; 95900; 95920; 95940; 95960; 95980; + 96000; 96020; 96040; 96060; 96080; 96100; 96120; 96140; 96160; 96180; + 96200; 96220; 96240; 96260; 96280; 96300; 96320; 96340; 96360; 96380; + 96400; 96420; 96440; 96460; 96480; 96500; 96520; 96540; 96560; 96580; + 96600; 96620; 96640; 96660; 96680; 96700; 96720; 96740; 96760; 96780; + 96800; 96820; 96840; 96860; 96880; 96900; 96920; 96940; 96960; 96980; + 97000; 97020; 97040; 97060; 97080; 97100; 97120; 97140; 97160; 97180; + 97200; 97220; 97240; 97260; 97280; 97300; 97320; 97340; 97360; 97380; + 97400; 97420; 97440; 97460; 97480; 97500; 97520; 97540; 97560; 97580; + 97600; 97620; 97640; 97660; 97680; 97700; 97720; 97740; 97760; 97780; + 97800; 97820; 97840; 97860; 97880; 97900; 97920; 97940; 97960; 97980; + 98000; 98020; 98040; 98060; 98080; 98100; 98120; 98140; 98160; 98180; + 98200; 98220; 98240; 98260; 98280; 98300; 98320; 98340; 98360; 98380; + 98400; 98420; 98440; 98460; 98480; 98500; 98520; 98540; 98560; 98580; + 98600; 98620; 98640; 98660; 98680; 98700; 98720; 98740; 98760; 98780; + 98800; 98820; 98840; 98860; 98880; 98900; 98920; 98940; 98960; 98980; + 99000; 99020; 99040; 99060; 99080; 99100; 99120; 99140; 99160; 99180; + 99200; 99220; 99240; 99260; 99280; 99300; 99320; 99340; 99360; 99380; + 99400; 99420; 99440; 99460; 99480; 99500; 99520; 99540; 99560; 99580; + 99600; 99620; 99640; 99660; 99680; 99700; 99720; 99740; 99760; 99780; + 99800; 99820; 99840; 99860; 99880; 99900; 99920; 99940; 99960; 99980; + 100000;100020;100040;100060;100080;100100;100120;100140;100160;100180; + 100200;100220;100240;100260;100280;100300;100320;100340;100360;100380; + 100400;100420;100440;100460;100480;100500;100520;100540;100560;100580; + 100600;100620;100640;100660;100680;100700;100720;100740;100760;100780; + 100800;100820;100840;100860;100880;100900;100920;100940;100960;100980; + 101000;101020;101040;101060;101080;101100;101120;101140;101160;101180; + 101200;101220;101240;101260;101280;101300;101320;101340;101360;101380; + 101400;101420;101440;101460;101480;101500;101520;101540;101560;101580; + 101600;101620;101640;101660;101680;101700;101720;101740;101760;101780; + 101800;101820;101840;101860;101880;101900;101920;101940;101960;101980; + 102000;102020;102040;102060;102080;102100;102120;102140;102160;102180; + 102200;102220;102240;102260;102280;102300;102320;102340;102360;102380; + 102400;102420;102440;102460;102480;102500;102520;102540;102560;102580; + 102600;102620;102640;102660;102680;102700;102720;102740;102760;102780; + 102800;102820;102840;102860;102880;102900;102920;102940;102960;102980; + 103000;103020;103040;103060;103080;103100;103120;103140;103160;103180; + 103200;103220;103240;103260;103280;103300;103320;103340;103360;103380; + 103400;103420;103440;103460;103480;103500;103520;103540;103560;103580; + 103600;103620;103640;103660;103680;103700;103720;103740;103760;103780; + 103800;103820;103840;103860;103880;103900;103920;103940;103960;103980; + 104000;104020;104040;104060;104080;104100;104120;104140;104160;104180; + 104200;104220;104240;104260;104280;104300;104320;104340;104360;104380; + 104400;104420;104440;104460;104480;104500;104520;104540;104560;104580; + 104600;104620;104640;104660;104680;104700;104720;104740;104760;104780; + 104800;104820;104840;104860;104880;104900;104920;104940;104960;104980; + 105000;105020;105040;105060;105080;105100;105120;105140;105160;105180; + 105200;105220;105240;105260;105280;105300;105320;105340;105360;105380; + 105400;105420;105440;105460;105480;105500;105520;105540;105560;105580; + 105600;105620;105640;105660;105680;105700;105720;105740;105760;105780; + 105800;105820;105840;105860;105880;105900;105920;105940;105960;105980; + 106000;106020;106040;106060;106080;106100;106120;106140;106160;106180; + 106200;106220;106240;106260;106280;106300;106320;106340;106360;106380; + 106400;106420;106440;106460;106480;106500;106520;106540;106560;106580; + 106600;106620;106640;106660;106680;106700;106720;106740;106760;106780; + 106800;106820;106840;106860;106880;106900;106920;106940;106960;106980; + 107000;107020;107040;107060;107080;107100;107120;107140;107160;107180; + 107200;107220;107240;107260;107280;107300;107320;107340;107360;107380; + 107400;107420;107440;107460;107480;107500;107520;107540;107560;107580; + 107600;107620;107640;107660;107680;107700;107720;107740;107760;107780; + 107800;107820;107840;107860;107880;107900;107920;107940;107960;107980; + 108000;108020;108040;108060;108080;108100;108120;108140;108160;108180; + 108200;108220;108240;108260;108280;108300;108320;108340;108360;108380; + 108400;108420;108440;108460;108480;108500;108520;108540;108560;108580; + 108600;108620;108640;108660;108680;108700;108720;108740;108760;108780; + 108800;108820;108840;108860;108880;108900;108920;108940;108960;108980; + 109000;109020;109040;109060;109080;109100;109120;109140;109160;109180; + 109200;109220;109240;109260;109280;109300;109320;109340;109360;109380; + 109400;109420;109440;109460;109480;109500;109520;109540;109560;109580; + 109600;109620;109640;109660;109680;109700;109720;109740;109760;109780; + 109800;109820;109840;109860;109880;109900;109920;109940;109960;109980; + 110000;110020;110040;110060;110080;110100;110120;110140;110160;110180; + 110200;110220;110240;110260;110280;110300;110320;110340;110360;110380; + 110400;110420;110440;110460;110480;110500;110520;110540;110560;110580; + 110600;110620;110640;110660;110680;110700;110720;110740;110760;110780; + 110800;110820;110840;110860;110880;110900;110920;110940;110960;110980; + 111000;111020;111040;111060;111080;111100;111120;111140;111160;111180; + 111200;111220;111240;111260;111280;111300;111320;111340;111360;111380; + 111400;111420;111440;111460;111480;111500;111520;111540;111560;111580; + 111600;111620;111640;111660;111680;111700;111720;111740;111760;111780; + 111800;111820;111840;111860;111880;111900;111920;111940;111960;111980; + 112000;112020;112040;112060;112080;112100;112120;112140;112160;112180; + 112200;112220;112240;112260;112280;112300;112320;112340;112360;112380; + 112400;112420;112440;112460;112480;112500;112520;112540;112560;112580; + 112600;112620;112640;112660;112680;112700;112720;112740;112760;112780; + 112800;112820;112840;112860;112880;112900;112920;112940;112960;112980; + 113000;113020;113040;113060;113080;113100;113120;113140;113160;113180; + 113200;113220;113240;113260;113280;113300;113320;113340;113360;113380; + 113400;113420;113440;113460;113480;113500;113520;113540;113560;113580; + 113600;113620;113640;113660;113680;113700;113720;113740;113760;113780; + 113800;113820;113840;113860;113880;113900;113920;113940;113960;113980; + 114000;114020;114040;114060;114080;114100;114120;114140;114160;114180; + 114200;114220;114240;114260;114280;114300;114320;114340;114360;114380; + 114400;114420;114440;114460;114480;114500;114520;114540;114560;114580; + 114600;114620;114640;114660;114680;114700;114720;114740;114760;114780; + 114800;114820;114840;114860;114880;114900;114920;114940;114960;114980; + 115000;115020;115040;115060;115080;115100;115120;115140;115160;115180; + 115200;115220;115240;115260;115280;115300;115320;115340;115360;115380; + 115400;115420;115440;115460;115480;115500;115520;115540;115560;115580; + 115600;115620;115640;115660;115680;115700;115720;115740;115760;115780; + 115800;115820;115840;115860;115880;115900;115920;115940;115960;115980; + 116000;116020;116040;116060;116080;116100;116120;116140;116160;116180; + 116200;116220;116240;116260;116280;116300;116320;116340;116360;116380; + 116400;116420;116440;116460;116480;116500;116520;116540;116560;116580; + 116600;116620;116640;116660;116680;116700;116720;116740;116760;116780; + 116800;116820;116840;116860;116880;116900;116920;116940;116960;116980; + 117000;117020;117040;117060;117080;117100;117120;117140;117160;117180; + 117200;117220;117240;117260;117280;117300;117320;117340;117360;117380; + 117400;117420;117440;117460;117480;117500;117520;117540;117560;117580; + 117600;117620;117640;117660;117680;117700;117720;117740;117760;117780; + 117800;117820;117840;117860;117880;117900;117920;117940;117960;117980; + 118000;118020;118040;118060;118080;118100;118120;118140;118160;118180; + 118200;118220;118240;118260;118280;118300;118320;118340;118360;118380; + 118400;118420;118440;118460;118480;118500;118520;118540;118560;118580; + 118600;118620;118640;118660;118680;118700;118720;118740;118760;118780; + 118800;118820;118840;118860;118880;118900;118920;118940;118960;118980; + 119000;119020;119040;119060;119080;119100;119120;119140;119160;119180; + 119200;119220;119240;119260;119280;119300;119320;119340;119360;119380; + 119400;119420;119440;119460;119480;119500;119520;119540;119560;119580; + 119600;119620;119640;119660;119680;119700;119720;119740;119760;119780; + 119800;119820;119840;119860;119880;119900;119920;119940;119960;119980; + 120000;120020;120040;120060;120080;120100;120120;120140;120160;120180; + 120200;120220;120240;120260;120280;120300;120320;120340;120360;120380; + 120400;120420;120440;120460;120480;120500;120520;120540;120560;120580; + 120600;120620;120640;120660;120680;120700;120720;120740;120760;120780; + 120800;120820;120840;120860;120880;120900;120920;120940;120960;120980; + 121000;121020;121040;121060;121080;121100;121120;121140;121160;121180; + 121200;121220;121240;121260;121280;121300;121320;121340;121360;121380; + 121400;121420;121440;121460;121480;121500;121520;121540;121560;121580; + 121600;121620;121640;121660;121680;121700;121720;121740;121760;121780; + 121800;121820;121840;121860;121880;121900;121920;121940;121960;121980; + 122000;122020;122040;122060;122080;122100;122120;122140;122160;122180; + 122200;122220;122240;122260;122280;122300;122320;122340;122360;122380; + 122400;122420;122440;122460;122480;122500;122520;122540;122560;122580; + 122600;122620;122640;122660;122680;122700;122720;122740;122760;122780; + 122800;122820;122840;122860 + + + + + + + + + + + +|Pd|1|24600|2013-282T15:31:53.397 Ú ¬·y:·H^û·ÿŽ„·Gˆ%¸Gˆ%¸Û¿16Û¿16ÿŽ„·ÿŽ„·Z¦Ó··‚9¸…M¸·‚9¸Z¦Ó·H^û··‚9¸±–¸Ú ¬·»Ø¶H^û·›Ža¸®žu¸…M¸·‚9¸·‚9¸Gˆ%¸…M¸Z¦Ó·Gˆ%¸Gˆ%¸®žu¸›Ža¸®žu¸Œ £¸·‚9¸±–¸H^û·Z¦Ó·±–¸y:·nÍó6 8ý‹Ú7 8”ü<8ñ +e8̤8è§8Kù¸8̤8á®8y8ȸš8Ã8 Òÿ8ü9Gká8 Òÿ8 +9¤#9 Òÿ8ž®õ8Ã8Gká8¤#9p89ž®õ8&Œë8p89ž®õ8 Òÿ8š™†8Kù¸8&Œë8Ã8 .Í8ž®õ8&Œë8&Œë8ž®õ8&Œë8&Œë8 +9ž®õ8¤#9p89ž®õ8 .Í8Kù¸8Ã8ȸš8L×8ž®õ8Ã8á®8 8ñ +e8L×8ž®õ8L×8ž®õ8 .Í8¤#9&Œë8 +9&Œë8&Œë8p89•z#9¤#9•z#9 +9&Œë8ü9Kù¸8¤#9•z#9 +9Ò‘(9Ÿ©-9¤#9Ÿ©-9ÛÚ79•z#9)B9‡³`9(G9Ÿ©-9(G9pCL9‡³`9É^Q9¥Ðe9t*u91Iz9‡³`9 p9‡³`9¥Ðe9É^Q91Iz9 p9¥Ðe9(G9(G9‡³`9(G9pCL9É^Q9É^Q9-îj9¥Ðe91Iz9-îj9Ø–[9 p9É^Q9Ø–[9 p9 p9t*u9Bô<9)B9¥Ðe9)B9ùÁ29pCL9ùÁ29pCL9‡³`9É^Q9(G9—zV9 p9¥Ðe9 p9-îj9•z#9ÛÚ79Bô<9ùÁ29•z#9Ÿ©-9p89îc9 Òÿ8&Œë8 +9îc9Ÿ©-9p89&Œë8îc9¤#9Ÿ©-9ÛÚ79¤#9ßM9Ò‘(9¤#9 .Í8 Òÿ8Gká8Gká8&Œë8ž®õ8L×8 Òÿ8ü9ž®õ8îc9 +9ž®õ8Ã8p89 .Í8Gká8Gká8Ã8è§8á®8&Œë8¤#9 +9 +9p89ÛÚ79•z#9ßM9ÛÚ79ÛÚ79ùÁ29Ò‘(9Ò‘(9•z#9ÛÚ79ùÁ29îc9Ò‘(9Ÿ©-9ßM9 .Í8 +9Ÿ©-9ùÁ29Ò‘(9p89ü9Gká8L×8ž®õ8Ã8L×8Ã8Kù¸8Kù¸8Ã8á®8š™†8 .Í8Ã8Kù¸8 +9&Œë8Ã8Ã8á®8è§8š™†8 .Í8 .Í8Kù¸8Gká8Kù¸8á®8Gká8Ã8ȸš8Gká8è§8š™†8”ü<8ȸš8ȸš8á®8y8 8 8iïøµ"H7i‹7ÿŽ„·nÍó6´)8Û¿16iïøµ»Ø¶"H7nÍó6Yê²7Û¿16ý‹Ú7ñ +e8ñ +e8è§8ñ +e8ȸš8Kù¸8”ü<8è§8”ü<8̤8̤8š™†8&Œë8Kù¸8̤8̤8̤8̤8 .Í8Kù¸8Ã8L×8&Œë8&Œë8 +9¤#9 +9ßM9ùÁ29•z#9)B9Ÿ©-9)B9pCL9pCL9—zV9(G9(G9pCL9ùÁ29)B9Bô<9(G9pCL9Bô<9ÛÚ79Ò‘(9Ò‘(9•z#9Ÿ©-9îc9îc9¤#9îc9ü9Gká8y8Gká8š™†8&Œë8&Œë8ȸš8Kù¸8 .Í8ž®õ8 .Í8ȸš8y8Kù¸8̤8á®8ü9ž®õ8 Òÿ8îc9¤#9îc9ßM9p89ü9ßM9ž®õ8á®8L×8îc9¤#9ž®õ8ü9ž®õ8Gká8 +9 +9p89¤#9 Òÿ8L×8ü9•z#9•z#9•z#9p89•z#9¤#9 +9Gká8̤8ȸš8Gká8ȸš8̤8L×8&Œë8L×8 Òÿ8&Œë8ü9p89 +9Ò‘(9p89Ÿ©-9Ÿ©-9îc9ßM9 +9p89Ÿ©-9p89p89ü9Ò‘(9¤#9&Œë8ž®õ8¤#9p89 +9ü9 Òÿ8Gká8Ÿ©-9îc9•z#9Bô<9Ÿ©-9Ò‘(9ùÁ29îc9ßM9ü9 +9&Œë8Ã8L×8̤8è§8 .Í8Gká8Ã8 .Í8š™†8ȸš8á®8á®8´)8ý‹Ú7iïøµYê²7H^û·ÿŽ„··‚9¸H^û·Ú ¬·Ú ¬·ÿŽ„·»Ø¶iïøµÿŽ„·Ú ¬·y:·´)8nÍó6Û¿16iïøµ"H7Û¿16ý‹Ú7$8Yê²7$8ý‹Ú7i‹7 8$8”ü<8Yê²7 8ñ +e8á®8è§8L×8è§8Kù¸8Ã8ȸš8 .Í8̤8ȸš8Gká8ž®õ8á®8&Œë8ü9&Œë8L×8ž®õ8ü9 Òÿ8ü9ž®õ8ž®õ8&Œë8p89ßM9îc9 Òÿ8îc9ßM9p89Gká8ž®õ8 +9p89ßM9p89ž®õ8 +9ž®õ8 Òÿ8Gká8 .Í8 .Í8̤8Kù¸8ȸš8š™†8è§8´)8iïøµiïøµ"H7iïøµÿŽ„··‚9¸Ú ¬·Gˆ%¸·‚9¸y:·…M¸®žu¸y:·Z¦Ó··‚9¸H^û·…M¸Gˆ%¸·‚9¸Õ‰Õ¸dQÁ¸Œ £¸dÚ„¸¬ø˜¸®žu¸®žu¸;莸Œ £¸Œ £¸¬ø˜¸Œ £¸Œ £¸dÚ„¸Œ £¸›Ža¸°l˸¶ ­¸Œ £¸Œ £¸¶ ­¸dÚ„¸Õ‰Õ¸¬ø˜¸;莸Œ £¸;莸;莸¬ø˜¸®žu¸·‚9¸Z¦Ó·Gˆ%¸H^û·±–¸…M¸±–¸dÚ„¸…M¸·‚9¸±–¸H^û·±–¸›Ža¸·‚9¸H^û··‚9¸Z¦Ó·H^û·iïøµÛ¿16»Ø¶»Ø¶ÿŽ„·y:·Z¦Ó·iïøµiïøµÚ ¬·»Ø¶y:·iïøµÛ¿16y:·iïøµÛ¿16ÿŽ„·Û¿16Ú ¬·H^û·ÿŽ„·»Ø¶ÿŽ„·ÿŽ„·ÿŽ„·H^û·›Ža¸›Ža¸·‚9¸dÚ„¸Œ £¸±–¸¬ø˜¸›Ža¸Œ £¸®žu¸;莸¶ ­¸Œ £¸¶ ­¸Œ £¸8·¸;莸®žu¸Gˆ%¸Œ £¸dÚ„¸®žu¸;莸®žu¸·‚9¸›Ža¸›Ža¸·‚9¸Œ £¸8·¸8·¸¶ ­¸¶ ­¸Œ £¸„ëó¸°l˸°l˸>¹QÉé¸Bþ¸Bþ¸Bþ¸>¹Bþ¸¶ ­¸dQÁ¸QÉ鸰l˸½¨ß¸Bþ¸Œ £¸Œ £¸…M¸®žu¸·‚9¸Œ £¸®žu¸y:·±–¸Z¦Ó·y:·ÿŽ„·i‹7iïøµy:·nÍó6iïøµ"H7"H7Û¿16iïøµiïøµnÍó6Z¦Ó·y:·Ú ¬·±–¸›Ža¸…M¸±–¸H^û·iïøµ±–¸dÚ„¸Gˆ%¸Œ £¸›Ža¸·‚9¸¶ ­¸Œ £¸Œ £¸°l˸QÉ鸰l˸QÉé¸8·¸’- ¹—A¹—A¹°l˸’- ¹Bþ¸šk¹—A¹FV¹—A¹FV¹šk¹FV¹¹Bþ¸FV¹¹¹òÆ,¹FV¹šk¹˜"¹3ß1¹=¯'¹šk¹FV¹¹„ëó¸Bþ¸„ë󸽨߸QÉé¸Bþ¸Bþ¸Bþ¸FV¹’- ¹FV¹Bþ¸šk¹„ëó¸QÉ鸒- ¹QÉ鸰l˸8·¸8·¸dQÁ¸dQÁ¸Œ £¸¶ ­¸¶ ­¸;莸QÉ鸌 £¸Œ £¸Œ £¸±–¸…M¸;莸Œ £¸Œ £¸Õ‰Õ¸8·¸dÚ„¸dÚ„¸Gˆ%¸›Ža¸®žu¸dÚ„¸›Ža¸…M¸›Ža¸dÚ„¸Œ £¸…M¸Gˆ%¸·‚9¸Gˆ%¸·‚9¸ÿŽ„·Z¦Ó·Gˆ%¸®žu¸·‚9¸dÚ„¸Œ £¸QÉé¸Õ‰Õ¸dQÁ¸°l˸Œ £¸¶ ­¸’- ¹šk¹„ëó¸Bþ¸šk¹šk¹=¯'¹šk¹—A¹˜"¹˜"¹ +A¹¹¹þ÷6¹˜"¹=¯'¹FV¹>¹>¹>¹Bþ¸„ëó¸>¹˜"¹˜"¹Bþ¸QÉ鸄ë󸽨߸QÉé¸Bþ¸Bþ¸Œ £¸›Ža¸;莸8·¸®žu¸Œ £¸dÚ„¸®žu¸…M¸Ú ¬·Z¦Ó·±–¸H^û·dÚ„¸…M¸…M¸Z¦Ó·±–¸Gˆ%¸¬ø˜¸;莸…M¸±–¸…M¸dÚ„¸Gˆ%¸…M¸H^û·Gˆ%¸;莸Gˆ%¸±–¸±–¸Gˆ%¸®žu¸±–¸·‚9¸Ú ¬··‚9¸Œ £¸H^û·dÚ„¸¶ ­¸Œ £¸Œ £¸Œ £¸;莸®žu¸¬ø˜¸®žu¸¬ø˜¸Gˆ%¸dÚ„¸¶ ­¸¶ ­¸Œ £¸8·¸¶ ­¸dÚ„¸Œ £¸°l˸8·¸dÚ„¸Œ £¸Œ £¸Õ‰Õ¸dQÁ¸Õ‰Õ¸Õ‰Õ¸QÉ鸰l˸dQÁ¸®žu¸dQÁ¸½¨ß¸„ëó¸—A¹’- ¹šk¹—A¹—A¹„ëó¸Õ‰Õ¸8·¸dQÁ¸QÉé¸Õ‰Õ¸Õ‰Õ¸QÉé¸FV¹’- ¹QÉé¸QÉé¸QÉé¸FV¹¹¹—A¹Bþ¸’- ¹„ë󸹒- ¹Õ‰Õ¸Bþ¸½¨ß¸„ëó¸šk¹Õ‰Õ¸’- ¹—A¹„ëó¸Bþ¸„ëó¸Bþ¸Bþ¸°l˸½¨ß¸¶ ­¸8·¸8·¸dQÁ¸Œ £¸Õ‰Õ¸Õ‰Õ¸QÉé¸8·¸®žu¸8·¸Œ £¸8·¸¶ ­¸…M¸›Ža¸¶ ­¸;莸¬ø˜¸¬ø˜¸;莸Œ £¸8·¸¶ ­¸Œ £¸Œ £¸®žu¸H^û·…M¸dÚ„¸dÚ„¸®žu¸·‚9¸Ú ¬·Z¦Ó·Gˆ%¸·‚9¸dÚ„¸dÚ„¸®žu¸®žu¸dÚ„¸dÚ„¸dQÁ¸QÉ鸒- ¹„ëó¸QÉ鸰l˸dQÁ¸dQÁ¸Õ‰Õ¸dQÁ¸dQÁ¸>¹Bþ¸—A¹½¨ß¸¶ ­¸®žu¸¬ø˜¸’- ¹8·¸½¨ß¸Õ‰Õ¸QÉ鸄ë󸽨߸dQÁ¸¶ ­¸;莸…M¸H^û·H^û·±–¸Gˆ%¸ÿŽ„·Gˆ%¸H^û·Gˆ%¸Ú ¬·Gˆ%¸y:·H^û·Û¿16iïøµÚ ¬·"H7iïøµÛ¿16»Ø¶»Ø¶ý‹Ú7$8ÿŽ„·$8Yê²7nÍó6"H7"H7i‹7 8Û¿16»Ø¶»Ø¶ÿŽ„·Û¿16ÿŽ„·Û¿16i‹7Û¿16ý‹Ú7iïøµy:·Yê²7ÿŽ„·iïøµ 8´)8”ü<8´)8i‹7"H7nÍó6"H7iïøµiïøµ"H7"H7Û¿16»Ø¶Z¦Ó·Ú ¬·Z¦Ó·±–¸H^û·dÚ„¸…M¸;莸°l˸¶ ­¸Õ‰Õ¸;莸Œ £¸°l˸dQÁ¸dQÁ¸Õ‰Õ¸½¨ß¸>¹½¨ß¸dQÁ¸„ëó¸Õ‰Õ¸½¨ß¸dQÁ¸Õ‰Õ¸°l˸°l˸QÉé¸Õ‰Õ¸„ëó¸Õ‰Õ¸>¹QÉé¸8·¸dQÁ¸Õ‰Õ¸8·¸®žu¸Z¦Ó·…M¸·‚9¸Gˆ%¸ÿŽ„·Z¦Ó·nÍó6iïøµnÍó6iïøµý‹Ú7ý‹Ú7ý‹Ú7”ü<8´)8ñ +e8<Q8y8ñ +e8y8á®8ȸš8Ã8̤8á®8á®8̤8&Œë8Ã8&Œë8Gká8&Œë8 +9 Òÿ8 +9p89 Òÿ8 +9L×8̤8y8”ü<8y8è§8ȸš8á®8š™†8y8<Q8ñ +e8y8y8$8ý‹Ú7"H7i‹7ý‹Ú7$8Û¿16y:·»Ø¶»Ø¶Ú ¬·Gˆ%¸H^û·Gˆ%¸"H7ý‹Ú7Yê²7"H7 8´)8nÍó6”ü<8´)8"H7”ü<8"H7<Q8´)8š™†8´)8ñ +e8<Q8 8è§8y8ñ +e8$8š™†8<Q8Kù¸8á®8̤8è§8ȸš8y8y8è§8̤8L×8¤#9L×8 +9&Œë8Ã8L×8&Œë8Gká8Ã8 .Í8ü9&Œë8 Òÿ8 +9ßM9 Òÿ8p89L×8á®8á®8á®8ȸš8Ã8š™†8ȸš8<Q8”ü<8<Q8ñ +e8i‹7ý‹Ú7ý‹Ú7´)8Yê²7”ü<8i‹7ý‹Ú7ý‹Ú7"H7iïøµ"H7Û¿16Ú ¬·nÍó6y:·H^û·Z¦Ó·Gˆ%¸®žu¸H^û·±–¸…M¸·‚9¸Gˆ%¸›Ža¸…M¸±–¸…M¸y:·H^û·±–¸…M¸;莸·‚9¸dÚ„¸dÚ„¸dQÁ¸dQÁ¸¶ ­¸±–¸·‚9¸Œ £¸®žu¸±–¸·‚9¸iïøµZ¦Ó·Z¦Ó·Z¦Ó·»Ø¶"H7ÿŽ„·ÿŽ„·nÍó6i‹7Û¿16i‹7 8´)8 8´)8$8 8<Q8è§8´)8è§8$8š™†8á®8y8è§8 .Í8ȸš8ȸš8Kù¸8Ã8&Œë8&Œë8 .Í8 +9 +9 +9 Òÿ8&Œë8p89¤#9¤#9L×8Gká8ü9 Òÿ8¤#9Ò‘(9îc9îc9p89 +9ßM9 Òÿ8Kù¸8ž®õ8ž®õ8Gká8Kù¸8Kù¸8ȸš8Kù¸8š™†8ñ +e8 8ý‹Ú7$8ý‹Ú7$8”ü<8 8´)8i‹7ÿŽ„·iïøµÛ¿16Yê²7Gˆ%¸Û¿16H^û·±–¸dÚ„¸dÚ„¸›Ža¸;莸¶ ­¸;莸8·¸Õ‰Õ¸;莸®žu¸›Ža¸°l˸¬ø˜¸Œ £¸Bþ¸Œ £¸Õ‰Õ¸dÚ„¸·‚9¸Gˆ%¸H^û·Z¦Ó·iïøµ 8nÍó6iïøµ 8$8 8 8ý‹Ú7nÍó6"H7$8"H7i‹7Û¿16i‹7$8i‹7´)8Û¿16$8<Q8”ü<8ý‹Ú7ñ +e8 8”ü<8ñ +e8š™†8ȸš8"H7"H7 8´)8ý‹Ú7ý‹Ú7ý‹Ú7"H7Yê²7 8 8ý‹Ú7ý‹Ú7"H7´)8y8š™†8̤8ñ +e8á®8ñ +e8y8y8 8i‹7´)8i‹7Yê²7”ü<8<Q8ñ +e8´)8ý‹Ú7"H7 8ý‹Ú7i‹7Û¿16nÍó6Yê²7ý‹Ú7 8´)8$8”ü<8Yê²7Z¦Ó·»Ø¶»Ø¶iïøµy:·y:·$8»Ø¶y:·y:·Ú ¬·ý‹Ú7Û¿16·‚9¸Ú ¬·ÿŽ„·ÿŽ„·Gˆ%¸›Ža¸H^û·y:·y:·»Ø¶ÿŽ„·iïøµi‹7nÍó6$8”ü<8”ü<8ñ +e8ñ +e8L×8 .Í8ž®õ8ž®õ8ž®õ8 Òÿ8Gká8ž®õ8&Œë8Gká8L×8̤8á®8̤8á®8á®8ȸš8 .Í8Ã8̤8y8Ã8Kù¸8Kù¸8á®8Ã8ñ +e8<Q8”ü<8”ü<8 .Í8̤8š™†8Kù¸8ȸš8è§8è§8ý‹Ú7š™†8$8nÍó6”ü<8ñ +e8ñ +e8y8´)8”ü<8´)8ñ +e8<Q8$8ý‹Ú7iïøµý‹Ú7”ü<8Û¿16i‹7ÿŽ„·Ú ¬·ÿŽ„·±–¸±–¸›Ža¸±–¸Ú ¬·nÍó6»Ø¶y:· 8Yê²7Û¿16nÍó6nÍó6iïøµ»Ø¶Û¿16Ú ¬·Z¦Ó·Û¿16Z¦Ó·…M¸Z¦Ó·Ú ¬·Ú ¬·H^û··‚9¸®žu¸…M¸®žu¸®žu¸H^û·±–¸Ú ¬·ÿŽ„·ÿŽ„·y:·i‹7i‹7i‹7"H7$8$8ñ +e8š™†8 8$8´)8$8ý‹Ú7´)8ý‹Ú7iïøµi‹7Û¿16±–¸»Ø¶Z¦Ó·Z¦Ó·y:·"H7»Ø¶Ú ¬·±–¸»Ø¶Ú ¬·nÍó6»Ø¶y:·…M¸Gˆ%¸Œ £¸Gˆ%¸dÚ„¸dÚ„¸Œ £¸°l˸QÉé¸dQÁ¸°l˸dÚ„¸8·¸¬ø˜¸dQÁ¸Õ‰Õ¸8·¸QÉ鸶 ­¸Õ‰Õ¸°l˸8·¸Õ‰Õ¸QÉé¸QÉ鸚k¹N<¹òÆ,¹€{P¹òÆ,¹šk¹’- ¹„ëó¸’- ¹½¨ß¸’- ¹FV¹FV¹’- ¹>¹„ëó¸Bþ¸—A¹Bþ¸Õ‰Õ¸>¹Õ‰Õ¸¶ ­¸Œ £¸Œ £¸;莸Œ £¸dÚ„¸›Ža¸Œ £¸®žu¸¶ ­¸Œ £¸dÚ„¸¶ ­¸°l˸;莸Œ £¸Œ £¸Œ £¸Gˆ%¸±–¸Ú ¬·±–¸Ú ¬·Z¦Ó·Œ £¸›Ža¸;莸¶ ­¸…M¸Gˆ%¸±–¸Û¿16i‹7i‹7"H7y:·"H7"H7"H7ÿŽ„·H^û·Ú ¬·ÿŽ„·›Ža¸·‚9¸›Ža¸®žu¸Œ £¸¶ ­¸dQÁ¸’- ¹’- ¹FV¹šk¹Bþ¸QÉé¸QÉé¸Bþ¸Õ‰Õ¸dQÁ¸½¨ß¸’- ¹Õ‰Õ¸dQÁ¸8·¸Õ‰Õ¸°l˸¶ ­¸Õ‰Õ¸„ëó¸Õ‰Õ¸8·¸°l˸°l˸°l˸°l˸dQÁ¸„ëó¸>¹½¨ß¸¶ ­¸¶ ­¸8·¸¶ ­¸H^û·…M¸dÚ„¸Œ £¸H^û·y:·»Ø¶Û¿16y:·y:·iïøµ·‚9¸±–¸±–¸±–¸Gˆ%¸®žu¸y:·nÍó6»Ø¶y:·ÿŽ„·»Ø¶y:·"H7ý‹Ú7ý‹Ú7ý‹Ú7´)8i‹7´)8$8´)8”ü<8´)8ñ +e8ñ +e8$8”ü<8y8á®8è§8”ü<8ñ +e8ý‹Ú7i‹7ÿŽ„·®žu¸Ú ¬·Û¿16ÿŽ„·y:·ÿŽ„·nÍó6y:·Gˆ%¸Gˆ%¸®žu¸H^û·…M¸H^û··‚9¸y:·±–¸±–¸·‚9¸…M¸Gˆ%¸±–¸Ú ¬·y:·y:·…M¸dÚ„¸H^û·Z¦Ó·Z¦Ó··‚9¸›Ža¸·‚9¸®žu¸…M¸iïøµy:·Gˆ%¸·‚9¸±–¸H^û·H^û·Z¦Ó··‚9¸Û¿16Ú ¬··‚9¸ÿŽ„·®žu¸±–¸Gˆ%¸Gˆ%¸Û¿16nÍó6Z¦Ó·y:·Ú ¬·y:·H^û·Ú ¬·»Ø¶"H7i‹7"H7"H7"H7ý‹Ú7$8$8Yê²7´)8<Q8š™†8´)8ñ +e8š™†8̤8̤8̤8Ã8ȸš8Kù¸8ž®õ8¤#9ž®õ8ßM9ü9 Òÿ8 +9¤#9ü9•z#9Ò‘(9•z#9Ò‘(9¤#9¤#9p89•z#9ü9ü9 +9&Œë8ž®õ8 Òÿ8&Œë8L×8Gká8&Œë8á®8Kù¸8̤8è§8y8ñ +e8´)8Yê²7i‹7´)8$8ý‹Ú7i‹7Yê²7"H7ý‹Ú7»Ø¶»Ø¶Û¿16Z¦Ó·±–¸®žu¸…M¸;莸;莸…M¸Œ £¸®žu¸Z¦Ó·Gˆ%¸Gˆ%¸y:·H^û·ÿŽ„·Gˆ%¸ÿŽ„·iïøµiïøµ"H7i‹7nÍó6"H7ÿŽ„·y:·"H7i‹7ý‹Ú7"H7i‹7"H7iïøµý‹Ú7y:·ÿŽ„·Ú ¬·Yê²7"H7nÍó6 8ý‹Ú7Yê²7$8 8Yê²7´)8<Q8ý‹Ú7i‹7ñ +e8<Q8ȸš8y8š™†8è§8š™†8̤8”ü<8š™†8š™†8 8š™†8Gká8á®8ñ +e8̤8è§8ȸš8 .Í8̤8š™†8 .Í8 .Í8Ã8è§8š™†8è§8š™†8´)8´)8 8$8$8ý‹Ú7š™†8ñ +e8$8Yê²7<Q8”ü<8y8´)8Yê²7Û¿16Û¿16"H7iïøµZ¦Ó·ÿŽ„·H^û·Gˆ%¸±–¸®žu¸Gˆ%¸Ú ¬·›Ža¸±–¸·‚9¸®žu¸…M¸®žu¸Gˆ%¸Gˆ%¸Z¦Ó·ÿŽ„·Ú ¬·›Ža¸Ú ¬··‚9¸H^û·Gˆ%¸y:·iïøµi‹7i‹7i‹7iïøµ 8»Ø¶ÿŽ„·”ü<8”ü<8ȸš8š™†8y8š™†8´)8<Q8y8š™†8$8´)8<Q8<Q8ȸš8è§8è§8̤8̤8L×8 Òÿ8Kù¸8L×8 Òÿ8Gká8&Œë8 Òÿ8 +9 Òÿ8L×8á®8L×8á®8è§8L×8̤8 .Í8̤8è§8á®8L×8ñ +e8ȸš8š™†8´)8nÍó6ý‹Ú7"H7Z¦Ó·Yê²7Û¿16±–¸ÿŽ„·Ú ¬·H^û·H^û·…M¸…M¸®žu¸›Ža¸Ú ¬·dÚ„¸Œ £¸dÚ„¸·‚9¸±–¸±–¸ÿŽ„·±–¸ÿŽ„·Û¿16»Ø¶ÿŽ„·±–¸ÿŽ„·»Ø¶"H7i‹7iïøµ»Ø¶"H7Yê²7$8Ú ¬·Û¿16 8 8$8Yê²7y8i‹7Yê²7 8$8”ü<8á®8Kù¸8L×8ž®õ8á®8ȸš8Gká8ž®õ8Gká8L×8L×8è§8Kù¸8L×8Gká8á®8ȸš8 .Í8ž®õ8&Œë8L×8ž®õ8 .Í8á®8á®8y8”ü<8ñ +e8ý‹Ú7š™†8 8 8´)8Yê²7$8”ü<8»Ø¶ý‹Ú7"H7ÿŽ„·Z¦Ó·y:·Z¦Ó·±–¸ÿŽ„·±–¸·‚9¸»Ø¶Z¦Ó·H^û·y:··‚9¸±–¸»Ø¶H^û··‚9¸Gˆ%¸·‚9¸®žu¸±–¸Œ £¸Œ £¸·‚9¸®žu¸¬ø˜¸®žu¸Œ £¸…M¸·‚9¸Œ £¸dÚ„¸·‚9¸8·¸Œ £¸dQÁ¸Œ £¸Œ £¸dÚ„¸¶ ­¸¶ ­¸dQÁ¸dQÁ¸;莸¶ ­¸8·¸Œ £¸dÚ„¸dÚ„¸·‚9¸Gˆ%¸±–¸Gˆ%¸±–¸Gˆ%¸±–¸Ú ¬·Gˆ%¸Gˆ%¸Z¦Ó·Z¦Ó·±–¸iïøµÚ ¬·iïøµiïøµnÍó6Z¦Ó·Û¿16$8y:·Yê²7iïøµy:·»Ø¶y:·Gˆ%¸H^û·Û¿16y:·Ú ¬·±–¸Gˆ%¸®žu¸Z¦Ó·Z¦Ó·;莸dÚ„¸…M¸®žu¸›Ža¸®žu¸dQÁ¸¶ ­¸¶ ­¸Œ £¸dÚ„¸½¨ß¸Bþ¸„ëó¸QÉ鸘"¹¹šk¹šk¹pEF¹N<¹ +A¹:—U¹<`K¹g³Z¹pEF¹ +A¹€{P¹€{P¹N<¹¹€{P¹<`K¹pEF¹3ß1¹òÆ,¹=¯'¹3ß1¹N<¹—A¹—A¹>¹šk¹—A¹=¯'¹>¹N<¹Bþ¸Bþ¸=¯'¹òÆ,¹þ÷6¹=¯'¹FV¹šk¹šk¹¹3ß1¹—A¹˜"¹QÉé¸>¹šk¹Bþ¸>¹Õ‰Õ¸„ëó¸3ß1¹—A¹—A¹„ëó¸>¹Bþ¸°l˸½¨ß¸FV¹Õ‰Õ¸½¨ß¸>¹¶ ­¸Œ £¸Õ‰Õ¸’- ¹„ëó¸„ëó¸dQÁ¸FV¹Bþ¸Bþ¸—A¹FV¹òÆ,¹šk¹=¯'¹¹¹šk¹šk¹¹’- ¹=¯'¹šk¹šk¹>¹Bþ¸„ëó¸FV¹òÆ,¹pEF¹N<¹pEF¹€{P¹N<¹òÆ,¹=¯'¹3ß1¹:—U¹=¯'¹—A¹˜"¹Bþ¸’- ¹òÆ,¹=¯'¹šk¹„ëó¸>¹šk¹’- ¹½¨ß¸¹3ß1¹šk¹˜"¹˜"¹¹pEF¹þ÷6¹pEF¹òÆ,¹þ÷6¹3ß1¹þ÷6¹pEF¹þ÷6¹:—U¹N<¹òÆ,¹òÆ,¹˜"¹˜"¹:—U¹3ß1¹=¯'¹3ß1¹òÆ,¹ +A¹òÆ,¹òÆ,¹˜"¹˜"¹FV¹˜"¹šk¹’- ¹Bþ¸FV¹>¹’- ¹’- ¹šk¹—A¹>¹„ëó¸’- ¹dQÁ¸Bþ¸„ëó¸dQÁ¸8·¸½¨ß¸°l˸8·¸¶ ­¸½¨ß¸Œ £¸Õ‰Õ¸°l˸…M¸;莸ՉոdQÁ¸°l˸„ëó¸8·¸„ëó¸dQÁ¸;莸dQÁ¸dQÁ¸°l˸°l˸Չո„ëó¸QÉé¸Õ‰Õ¸dQÁ¸Œ £¸¶ ­¸8·¸Œ £¸dQÁ¸°l˸Œ £¸¶ ­¸;莸·‚9¸±–¸·‚9¸;莸®žu¸·‚9¸›Ža¸®žu¸›Ža¸®žu¸H^û·…M¸ÿŽ„·Ú ¬·H^û·Z¦Ó··‚9¸…M¸dÚ„¸…M¸Gˆ%¸Gˆ%¸®žu¸±–¸Gˆ%¸·‚9¸Z¦Ó·ÿŽ„·Z¦Ó·Z¦Ó·;莸;莸H^û·Ú ¬·Ú ¬·Gˆ%¸Ú ¬·»Ø¶»Ø¶±–¸Ú ¬·Z¦Ó·Û¿16"H7"H7iïøµÿŽ„·y:·Û¿16iïøµ»Ø¶nÍó6ÿŽ„·i‹7i‹7Û¿16Yê²7ý‹Ú7iïøµ$8”ü<8”ü<8<Q8ȸš8 8´)8ñ +e8ñ +e8´)8 8"H7nÍó6i‹7<Q8Yê²7"H7"H7y:·iïøµy:·Z¦Ó·H^û··‚9¸ÿŽ„·Û¿16Ú ¬·iïøµÛ¿16ÿŽ„·iïøµÚ ¬·H^û·Ú ¬·±–¸Gˆ%¸®žu¸Œ £¸®žu¸H^û·±–¸dÚ„¸H^û·Z¦Ó··‚9¸¬ø˜¸¬ø˜¸Gˆ%¸…M¸ÿŽ„·Gˆ%¸·‚9¸y:·y:·H^û·±–¸»Ø¶y:·Ú ¬·y:·ÿŽ„·y:·y:·"H7Yê²7Û¿16$8Û¿16”ü<8ý‹Ú7y8”ü<8ñ +e8´)8<Q8è§8ñ +e8è§8è§8Ã8Ã8Gká8 +9 +9¤#9ü9¤#9îc9ü9ßM9ßM9îc9p89•z#9Ÿ©-9•z#9 +9•z#9 Òÿ8 +9Ÿ©-9Ò‘(9ÛÚ79•z#9îc9Ò‘(9•z#9ü9¤#9ü9 Òÿ8Gká8L×8á®8L×8Kù¸8ý‹Ú7š™†8š™†8$8y8ñ +e8ý‹Ú7<Q8$8ñ +e8"H7 8 8Û¿16i‹7»Ø¶iïøµnÍó6y:·nÍó6"H7iïøµÚ ¬·Gˆ%¸·‚9¸H^û··‚9¸·‚9¸Gˆ%¸H^û·H^û·°l˸®žu¸±–¸›Ža¸H^û··‚9¸Z¦Ó·H^û·±–¸±–¸H^û·…M¸±–¸Gˆ%¸Gˆ%¸H^û·Z¦Ó·Û¿16Ú ¬·H^û·iïøµ 8Û¿16i‹7ý‹Ú7nÍó6"H7Û¿16nÍó6nÍó6H^û·ÿŽ„·Z¦Ó·nÍó6Ú ¬·"H7Ú ¬·H^û··‚9¸dÚ„¸…M¸dÚ„¸H^û·Gˆ%¸®žu¸·‚9¸®žu¸Gˆ%¸ÿŽ„·dÚ„¸Gˆ%¸®žu¸·‚9¸®žu¸¶ ­¸¶ ­¸°l˸dQÁ¸›Ža¸8·¸¬ø˜¸¶ ­¸Bþ¸Õ‰Õ¸QÉ鸚k¹Õ‰Õ¸>¹˜"¹„ëó¸Bþ¸FV¹—A¹FV¹FV¹’- ¹Bþ¸°l˸„ëó¸°l˸„ëó¸Bþ¸½¨ß¸Bþ¸Bþ¸„ëó¸’- ¹8·¸Õ‰Õ¸—A¹’- ¹>¹Bþ¸QÉé¸Õ‰Õ¸>¹°l˸„ëó¸dQÁ¸¬ø˜¸Œ £¸Œ £¸H^û·±–¸H^û·y:·y:·»Ø¶±–¸ÿŽ„·Ú ¬·i‹7"H7Û¿16Yê²7ý‹Ú7i‹7´)8$8ñ +e8$8”ü<8y8ñ +e8š™†8ñ +e8”ü<8̤8´)8ñ +e8 Òÿ8Gká8̤8è§8̤8è§8Kù¸8 .Í8Kù¸8L×8Kù¸8Kù¸8Kù¸8š™†8è§8y8”ü<8<Q8”ü<8”ü<8y8š™†8á®8<Q8š™†8š™†8”ü<8i‹7"H7i‹7iïøµi‹7 8i‹7Û¿16 8iïøµYê²7Yê²7"H7nÍó6ÿŽ„·y:·Yê²7Û¿16i‹7nÍó6»Ø¶»Ø¶Û¿16ÿŽ„·"H7$8"H7Û¿16ý‹Ú7´)8´)8$8$8"H7i‹7 8y:·$8<Q8y8<Q8̤8á®8Ã8ž®õ8&Œë8 Òÿ8Gká8Gká8ž®õ8Ò‘(9ü9L×8ž®õ8 +9ßM9îc9•z#9•z#9•z#9•z#9•z#9p89îc9 +9îc9Ÿ©-9Ÿ©-9ÛÚ79ßM9îc9Ÿ©-9ž®õ8̤8&Œë8Ã8&Œë8Gká8á®8Gká8è§8Kù¸8š™†8”ü<8è§8L×8á®8á®8Kù¸8”ü<8ȸš8è§8ȸš8´)8”ü<8ý‹Ú7ý‹Ú7nÍó6i‹7iïøµ´)8i‹7"H7 8ý‹Ú7Yê²7nÍó6iïøµÚ ¬··‚9¸y:·iïøµÛ¿16»Ø¶iïøµH^û·»Ø¶ÿŽ„·Z¦Ó·»Ø¶…M¸Gˆ%¸y:·±–¸Z¦Ó·iïøµ"H7$8Yê²7Yê²7 8”ü<8”ü<8´)8´)8”ü<8š™†8L×8Kù¸8á®8ü9L×8ü9¤#9p89ÛÚ79•z#9Bô<9Ò‘(9Ò‘(9Bô<9ùÁ29Ÿ©-9ùÁ29Bô<9ÛÚ79pCL9‡³`9(G9Ø–[9)B9Bô<9(G9ùÁ29Ø–[9pCL9—zV9É^Q9•z#9•z#9•z#9ü9p89 +9¤#9L×8 .Í8 Òÿ8L×8Ã8Kù¸8y8´)8”ü<8ñ +e8y8è§8´)8š™†8 8 8´)8 8Yê²7»Ø¶i‹7 8Yê²7ÿŽ„·»Ø¶Û¿16»Ø¶Yê²7"H7Û¿16»Ø¶"H7nÍó6nÍó6Z¦Ó·Z¦Ó·±–¸Gˆ%¸·‚9¸»Ø¶ÿŽ„·Ú ¬·»Ø¶Û¿16ÿŽ„·ÿŽ„·nÍó6nÍó6nÍó6y8ñ +e8y8<Q8ý‹Ú7”ü<8<Q8y8ñ +e8ñ +e8Kù¸8ñ +e8è§8Ã8y8ñ +e8y8è§8š™†8y8š™†8Yê²7<Q8<Q8<Q8š™†8̤8Kù¸8 .Í8á®8Gká8̤8Ã8̤8á®8 .Í8Ã8á®8Kù¸8á®8̤8y8š™†8<Q8ñ +e8ñ +e8ñ +e8̤8š™†8´)8”ü<8nÍó6»Ø¶y:·Z¦Ó·»Ø¶Ú ¬·ÿŽ„·Z¦Ó·Ú ¬·Û¿16Û¿16iïøµy:·Ú ¬·H^û·Ú ¬·®žu¸…M¸…M¸±–¸·‚9¸Gˆ%¸®žu¸›Ža¸…M¸·‚9¸›Ža¸±–¸Z¦Ó·±–¸;莸Z¦Ó·¬ø˜¸8·¸®žu¸dQÁ¸½¨ß¸dÚ„¸Gˆ%¸Gˆ%¸›Ža¸®žu¸›Ža¸®žu¸Gˆ%¸dÚ„¸®žu¸Ú ¬·Œ £¸Œ £¸Œ £¸Œ £¸…M¸dÚ„¸QÉé¸dÚ„¸·‚9¸…M¸Gˆ%¸·‚9¸H^û·iïøµÿŽ„·i‹7nÍó6y:·iïøµÚ ¬·ÿŽ„·iïøµYê²7"H7 8è§8i‹7 8i‹7´)8Yê²7"H7Ú ¬·ý‹Ú7i‹7”ü<8´)8ý‹Ú7i‹7»Ø¶ý‹Ú7"H7»Ø¶Û¿16i‹7nÍó6i‹7H^û·Ú ¬·y:·Ú ¬·Gˆ%¸±–¸Ú ¬·Ú ¬·Gˆ%¸·‚9¸Œ £¸Œ £¸®žu¸Œ £¸›Ža¸Œ £¸Œ £¸®žu¸®žu¸Œ £¸;莸dÚ„¸·‚9¸Gˆ%¸·‚9¸dÚ„¸·‚9¸±–¸Gˆ%¸Ú ¬·H^û·Z¦Ó·ÿŽ„·±–¸»Ø¶Gˆ%¸Gˆ%¸Gˆ%¸y:·H^û·Ú ¬·i‹7Yê²7$8$8ý‹Ú7´)8<Q8$8$8”ü<8y8´)8<Q8è§8á®8Ã8á®8̤8 .Í8 .Í8ž®õ8L×8Gká8 .Í8Gká8&Œë8 Òÿ8 .Í8îc9ž®õ8ž®õ8ž®õ8ž®õ8L×8&Œë8&Œë8ž®õ8Ã8̤8Ã8̤8̤8̤8y8<Q8ý‹Ú7”ü<8”ü<8y8´)8Yê²7nÍó6nÍó6nÍó6"H7i‹7Yê²7»Ø¶nÍó6Û¿16Û¿16Z¦Ó·…M¸·‚9¸H^û·Ú ¬·Ú ¬·Gˆ%¸·‚9¸·‚9¸›Ža¸Œ £¸¶ ­¸Œ £¸dÚ„¸®žu¸…M¸Z¦Ó·›Ža¸dÚ„¸Ú ¬··‚9¸…M¸dÚ„¸Gˆ%¸Ú ¬·H^û·Gˆ%¸Û¿16i‹7$8ȸš8š™†8<Q8”ü<8ñ +e8”ü<8 8y8Yê²7<Q8 8è§8è§8ñ +e8y8<Q8ý‹Ú7”ü<8<Q8á®8è§8ȸš8ȸš8á®8&Œë8è§8L×8š™†8è§8ȸš8 .Í8Kù¸8̤8š™†8ȸš8Kù¸8&Œë8̤8ñ +e8Kù¸8á®8̤8á®8Kù¸8̤8ñ +e8”ü<8ñ +e8š™†8ñ +e8ȸš8ȸš8á®8ñ +e8̤8&Œë8 .Í8̤8š™†8”ü<8”ü<8ñ +e8ñ +e8$8´)8i‹7nÍó6"H7y:·ÿŽ„·y:·Z¦Ó·Ú ¬·Z¦Ó·H^û·±–¸Z¦Ó·iïøµH^û·…M¸Gˆ%¸Œ £¸¶ ­¸dÚ„¸dÚ„¸Bþ¸dQÁ¸½¨ß¸Œ £¸¶ ­¸Œ £¸°l˸dQÁ¸dÚ„¸…M¸·‚9¸…M¸y:·Ú ¬·ÿŽ„·y:·»Ø¶y:·H^û·Ú ¬·Û¿16Yê²7»Ø¶Yê²7$8´)8i‹7Û¿16nÍó6ñ +e8Yê²7”ü<8"H7Yê²7nÍó6"H7Û¿16nÍó6»Ø¶iïøµy:·iïøµÛ¿16"H7y:·H^û·"H7"H7Û¿16Z¦Ó·Gˆ%¸ÿŽ„·H^û·Z¦Ó·®žu¸Z¦Ó··‚9¸›Ža¸Gˆ%¸…M¸®žu¸›Ža¸®žu¸…M¸…M¸…M¸›Ža¸®žu¸›Ža¸Œ £¸›Ža¸…M¸dÚ„¸…M¸H^û·®žu¸;莸®žu¸Gˆ%¸·‚9¸Œ £¸Œ £¸Œ £¸Œ £¸Õ‰Õ¸8·¸dQÁ¸Œ £¸°l˸Œ £¸Bþ¸Œ £¸®žu¸Œ £¸dQÁ¸8·¸dQÁ¸Œ £¸®žu¸Œ £¸Gˆ%¸Z¦Ó·±–¸Gˆ%¸y:·Z¦Ó·Û¿16<Q8Yê²7»Ø¶$8i‹7"H7<Q8Yê²7ý‹Ú7»Ø¶iïøµ"H7$8i‹7i‹7´)8Û¿16"H7»Ø¶ÿŽ„·Z¦Ó·Ú ¬·±–¸iïøµÚ ¬·Ú ¬·Gˆ%¸Z¦Ó·H^û·Gˆ%¸›Ža¸dÚ„¸®žu¸·‚9¸dÚ„¸Õ‰Õ¸Œ £¸Œ £¸Œ £¸…M¸;莸Gˆ%¸Œ £¸Œ £¸Œ £¸8·¸Œ £¸dQÁ¸Œ £¸°l˸…M¸°l˸¬ø˜¸¬ø˜¸¶ ­¸Bþ¸„ëó¸QÉé¸Õ‰Õ¸Õ‰Õ¸QÉ鸘"¹òÆ,¹=¯'¹=¯'¹šk¹¹FV¹Bþ¸òÆ,¹òÆ,¹ +A¹€{P¹òÆ,¹3ß1¹òÆ,¹3ß1¹FV¹¹òÆ,¹˜"¹=¯'¹3ß1¹šk¹—A¹¹FV¹„ëó¸Õ‰Õ¸>¹„ëó¸>¹8·¸¶ ­¸Œ £¸8·¸Õ‰Õ¸8·¸Œ £¸Œ £¸Gˆ%¸…M¸»Ø¶Z¦Ó·y:·Yê²7nÍó6i‹7"H7ÿŽ„·±–¸±–¸H^û·Z¦Ó·Ú ¬·Ú ¬·»Ø¶y:·Gˆ%¸Gˆ%¸Ú ¬·Z¦Ó·H^û·±–¸Z¦Ó·±–¸…M¸Gˆ%¸Ú ¬·H^û·"H7iïøµ±–¸Ú ¬·…M¸H^û·y:·Z¦Ó·Ú ¬·iïøµ»Ø¶nÍó6»Ø¶nÍó6"H7´)8nÍó6ÿŽ„·»Ø¶ÿŽ„·iïøµi‹7iïøµÿŽ„·H^û·H^û·Ú ¬·Û¿16Û¿16H^û·Gˆ%¸±–¸…M¸Ú ¬·Gˆ%¸;莸;莸±–¸ÿŽ„·»Ø¶Z¦Ó·Û¿16Yê²7Û¿16»Ø¶ý‹Ú7»Ø¶iïøµ"H7i‹7ý‹Ú7i‹7"H7ý‹Ú7"H7"H7iïøµÿŽ„·ý‹Ú7Û¿16Yê²7$8$8š™†8ȸš8Ã8&Œë8Ã8á®8Kù¸8è§8̤8š™†8è§8ȸš8̤8è§8š™†8è§8ȸš8è§8Kù¸8ȸš8ȸš8y8̤8Kù¸8Gká8y8š™†8̤8 .Í8̤8ȸš8á®8è§8Kù¸8Kù¸8á®8Kù¸8ȸš8Kù¸8̤8̤8š™†8š™†8´)8´)8ñ +e8y8´)8´)8$8ñ +e8ñ +e8<Q8´)8i‹7Û¿16Yê²7nÍó6ý‹Ú7”ü<8Û¿16"H7nÍó6nÍó6Yê²7´)8 8$8"H7ÿŽ„·ÿŽ„·ý‹Ú7Gˆ%¸iïøµ 8nÍó6Yê²7$8i‹7ñ +e8ý‹Ú7i‹7è§8<Q8i‹7”ü<8 8Yê²7$8y8”ü<8ý‹Ú7Yê²7Û¿16Yê²7ý‹Ú7”ü<8$8<Q8$8Yê²7i‹7<Q8$8$8š™†8 8Kù¸8Kù¸8á®8ž®õ8Kù¸8 .Í8š™†8”ü<8á®8̤8̤8L×8Ã8á®8è§8̤8š™†8´)8$8ñ +e8è§8̤8š™†8š™†8ý‹Ú7$8$8”ü<8iïøµy:·»Ø¶iïøµZ¦Ó·Ú ¬·$8ý‹Ú7Yê²7y:·Z¦Ó·Ú ¬·y:·®žu¸·‚9¸ÿŽ„·Gˆ%¸®žu¸dÚ„¸ÿŽ„·Gˆ%¸ÿŽ„·®žu¸Ú ¬·Gˆ%¸H^û·y:·Z¦Ó·Ú ¬·Ú ¬·H^û·ÿŽ„·ÿŽ„·…M¸›Ža¸iïøµÿŽ„·Ú ¬·y:·"H7Ú ¬·ÿŽ„·iïøµiïøµÚ ¬·"H7Yê²7"H7Yê²7 8Yê²7´)8´)8 8y8ȸš8”ü<8”ü<8š™†8̤8&Œë8 .Í8Gká8&Œë8Gká8Gká8 +9•z#9Ò‘(9¤#9•z#9•z#9ü9îc9p89ü9•z#9p89îc9ßM9îc9¤#9Gká8Gká8 .Í8 .Í8è§8 8y8ȸš8”ü<8Û¿16<Q8y8y8š™†8<Q8$8"H7nÍó6ÿŽ„·y:·H^û·Gˆ%¸ÿŽ„·y:·›Ža¸®žu¸Œ £¸;莸½¨ß¸QÉé¸FV¹FV¹°l˸Bþ¸½¨ß¸Õ‰Õ¸’- ¹QÉé¸Õ‰Õ¸QÉé¸dQÁ¸QÉé¸Õ‰Õ¸Œ £¸¶ ­¸Œ £¸¶ ­¸Œ £¸¬ø˜¸Œ £¸Œ £¸¬ø˜¸¶ ­¸8·¸dÚ„¸¶ ­¸…M¸dÚ„¸›Ža¸Gˆ%¸ÿŽ„·Gˆ%¸Ú ¬··‚9¸Z¦Ó·Ú ¬·Ú ¬·±–¸Z¦Ó·Gˆ%¸®žu¸±–¸Ú ¬·Û¿16ÿŽ„·"H7»Ø¶Û¿16»Ø¶nÍó6iïøµnÍó6i‹7´)8”ü<8i‹7nÍó6iïøµnÍó6ÿŽ„·ÿŽ„·i‹7 8´)8´)8ý‹Ú7ý‹Ú7"H7»Ø¶Z¦Ó·iïøµ»Ø¶"H7ÿŽ„·nÍó6»Ø¶nÍó6Ú ¬·Z¦Ó·±–¸Œ £¸Õ‰Õ¸;莸·‚9¸Õ‰Õ¸„ëó¸„ëó¸’- ¹¹>¹FV¹N<¹òÆ,¹¹3ß1¹3ß1¹=¯'¹ +A¹þ÷6¹N<¹3ß1¹˜"¹FV¹’- ¹—A¹FV¹¹„ëó¸FV¹>¹>¹—A¹˜"¹Bþ¸½¨ß¸Bþ¸Õ‰Õ¸Œ £¸Bþ¸Œ £¸›Ža¸;莸Œ £¸Gˆ%¸dÚ„¸Gˆ%¸±–¸Z¦Ó·ÿŽ„·Gˆ%¸nÍó6Ú ¬·Z¦Ó·ÿŽ„·Û¿16i‹7ý‹Ú7 8y8 8iïøµnÍó6i‹7Yê²7ý‹Ú7Yê²7Yê²7$8i‹7nÍó6"H7Û¿16"H7´)8Yê²7$8i‹7 8nÍó6Yê²7 8ý‹Ú7i‹7"H7ý‹Ú7Yê²7$8"H7H^û·Ú ¬·»Ø¶ÿŽ„·nÍó6Z¦Ó··‚9¸H^û·Gˆ%¸…M¸±–¸Gˆ%¸;莸¬ø˜¸›Ža¸dÚ„¸®žu¸Œ £¸Œ £¸°l˸„ëó¸°l˸8·¸½¨ß¸’- ¹dQÁ¸dQÁ¸¶ ­¸°l˸Չո8·¸½¨ß¸Õ‰Õ¸8·¸QÉ鸽¨ß¸¶ ­¸dQÁ¸QÉé¸Bþ¸Bþ¸>¹„ëó¸dÚ„¸®žu¸®žu¸;莸·‚9¸·‚9¸dÚ„¸·‚9¸·‚9¸›Ža¸Z¦Ó·H^û·±–¸iïøµÚ ¬·ÿŽ„·y:·y:·i‹7´)8”ü<8”ü<8<Q8ñ +e8´)8y8$8y8š™†8<Q8<Q8ñ +e8è§8ý‹Ú7á®8ȸš8<Q8Kù¸8ȸš8<Q8y8i‹7$8y8 8”ü<8”ü<8$8ñ +e8ý‹Ú7”ü<8y8ȸš8š™†8´)8ý‹Ú7<Q8<Q8$8Yê²7y:·"H7i‹7"H7"H7Yê²7nÍó6Û¿16y:·Û¿16Û¿16»Ø¶"H7±–¸Z¦Ó·±–¸H^û·±–¸y:·»Ø¶y:·Gˆ%¸H^û·H^û·±–¸Z¦Ó·iïøµZ¦Ó·H^û·Ú ¬··‚9¸H^û·"H7Ú ¬·Û¿16 8nÍó6»Ø¶Yê²7$8$8 8$8nÍó6Yê²7ñ +e8Yê²7ñ +e8è§8è§8y8̤8Kù¸8Ã8á®8̤8Ã8š™†8á®8L×8Gká8á®8ž®õ8L×8&Œë8p89ßM9¤#9¤#9ž®õ8îc9¤#9 Òÿ8 .Í8Gká8ž®õ8Gká8Kù¸8̤8̤8̤8è§8ȸš8y8ñ +e8á®8<Q8ñ +e8š™†8ȸš8Kù¸8á®8è§8 8y8 8ý‹Ú7Yê²7š™†8y8ý‹Ú7nÍó6Û¿16nÍó6nÍó6…M¸y:·Ú ¬··‚9¸±–¸Z¦Ó·»Ø¶H^û·Ú ¬·Z¦Ó·±–¸y:·ÿŽ„·Û¿16y:·y:·y:·y:·y:·»Ø¶»Ø¶Yê²7ý‹Ú7Yê²7Yê²7»Ø¶i‹7”ü<8”ü<8$8Yê²7<Q8<Q8è§8Kù¸8ȸš8ñ +e8̤8ȸš8á®8Kù¸8 .Í8Ã8á®8L×8 +9Gká8 Òÿ8Kù¸8ü9¤#9ž®õ8Gká8Gká8 +9 .Í8á®8Kù¸8Ã8y8è§8ñ +e8”ü<8ý‹Ú7ý‹Ú7$8i‹7ý‹Ú7$8ý‹Ú7$8nÍó6iïøµiïøµÛ¿16»Ø¶"H7±–¸Gˆ%¸H^û·Gˆ%¸…M¸›Ža¸H^û··‚9¸¶ ­¸8·¸Œ £¸dÚ„¸½¨ß¸Õ‰Õ¸Õ‰Õ¸Õ‰Õ¸QÉé¸8·¸¶ ­¸dQÁ¸Œ £¸¶ ­¸8·¸…M¸Œ £¸Õ‰Õ¸¶ ­¸dÚ„¸°l˸Œ £¸Œ £¸dQÁ¸¶ ­¸®žu¸°l˸dQÁ¸°l˸dQÁ¸Œ £¸·‚9¸®žu¸dÚ„¸±–¸Ú ¬·H^û·H^û·dÚ„¸…M¸ÿŽ„·±–¸ÿŽ„·H^û·nÍó6i‹7y:·»Ø¶Ú ¬·±–¸y:·Yê²7Yê²7»Ø¶»Ø¶iïøµi‹7nÍó6ÿŽ„·»Ø¶Û¿16Û¿16Û¿16iïøµiïøµGˆ%¸H^û·y:·®žu¸›Ža¸Œ £¸®žu¸dÚ„¸dQÁ¸8·¸8·¸Œ £¸dÚ„¸Gˆ%¸H^û·¬ø˜¸±–¸·‚9¸dQÁ¸dÚ„¸¶ ­¸„ëó¸Õ‰Õ¸>¹—A¹=¯'¹3ß1¹˜"¹òÆ,¹pEF¹˜"¹þ÷6¹<`K¹:—U¹3ß1¹<`K¹pEF¹òÆ,¹=¯'¹òÆ,¹ +A¹òÆ,¹˜"¹òÆ,¹—A¹3ß1¹˜"¹šk¹¹FV¹¹’- ¹QÉé¸Bþ¸—A¹„ëó¸òÆ,¹šk¹Bþ¸„ëó¸°l˸dQÁ¸Õ‰Õ¸dQÁ¸½¨ß¸QÉé¸Õ‰Õ¸¶ ­¸QÉé¸Bþ¸°l˸Œ £¸½¨ß¸½¨ß¸>¹QÉ鸒- ¹dQÁ¸¶ ­¸dQÁ¸Œ £¸QÉ鸽¨ß¸QÉ鸽¨ß¸Õ‰Õ¸¶ ­¸dQÁ¸®žu¸…M¸Œ £¸®žu¸;莸…M¸®žu¸½¨ß¸®žu¸Œ £¸dÚ„¸dÚ„¸dÚ„¸Œ £¸®žu¸;莸;莸Œ £¸Œ £¸dQÁ¸®žu¸Gˆ%¸®žu¸¶ ­¸¶ ­¸°l˸Bþ¸—A¹—A¹>¹¹FV¹=¯'¹’- ¹šk¹þ÷6¹þ÷6¹:—U¹€{P¹:—U¹ íd¹€{P¹b(o¹ íd¹Ð_¹ íd¹ íd¹Rey¹g³Z¹ íd¹:—U¹ íd¹g³Z¹g³Z¹¨Ft¹¨Ft¹Ð_¹ƒ +j¹Ð_¹ƒ +j¹€{P¹=¯'¹N<¹pEF¹N<¹˜"¹QÉé¸3ß1¹òÆ,¹>¹FV¹>¹dQÁ¸Œ £¸QÉ鸄ëó¸°l˸°l˸¶ ­¸®žu¸Œ £¸dÚ„¸›Ža¸Œ £¸Œ £¸·‚9¸Gˆ%¸·‚9¸·‚9¸Gˆ%¸y:·ÿŽ„·ÿŽ„·iïøµÿŽ„·nÍó6±–¸Z¦Ó·Z¦Ó·H^û·Gˆ%¸H^û·H^û·"H7Û¿16nÍó6Yê²7»Ø¶Û¿16Z¦Ó·y:·ÿŽ„·Gˆ%¸Ú ¬·dÚ„¸dÚ„¸›Ža¸·‚9¸›Ža¸Ú ¬·iïøµÚ ¬·y:·Gˆ%¸Œ £¸®žu¸·‚9¸;莸…M¸±–¸®žu¸¬ø˜¸dÚ„¸;莸dQÁ¸Õ‰Õ¸;莸dQÁ¸dÚ„¸…M¸°l˸dQÁ¸Œ £¸Œ £¸…M¸›Ža¸›Ža¸Gˆ%¸›Ža¸±–¸·‚9¸ÿŽ„·›Ža¸·‚9¸…M¸ÿŽ„·±–¸Ú ¬·H^û·H^û·»Ø¶H^û·Z¦Ó·dÚ„¸®žu¸Gˆ%¸®žu¸±–¸±–¸Œ £¸®žu¸Z¦Ó·Gˆ%¸±–¸Gˆ%¸Z¦Ó·±–¸ÿŽ„·y:·H^û·»Ø¶H^û·›Ža¸Ú ¬·y:·Gˆ%¸±–¸Z¦Ó·›Ža¸H^û··‚9¸®žu¸Œ £¸®žu¸›Ža¸±–¸Gˆ%¸·‚9¸›Ža¸dÚ„¸H^û·Gˆ%¸…M¸®žu¸…M¸…M¸›Ža¸›Ža¸›Ža¸°l˸Œ £¸›Ža¸¶ ­¸½¨ß¸Õ‰Õ¸°l˸—A¹¹šk¹=¯'¹FV¹˜"¹3ß1¹˜"¹þ÷6¹=¯'¹šk¹=¯'¹=¯'¹„ëó¸’- ¹QÉé¸>¹dQÁ¸8·¸„ëó¸Õ‰Õ¸dQÁ¸dQÁ¸dQÁ¸QÉé¸QÉ鸰l˸dQÁ¸dQÁ¸½¨ß¸½¨ß¸8·¸¶ ­¸¶ ­¸…M¸±–¸;莸8·¸;莸¬ø˜¸±–¸±–¸Ú ¬·y:·Û¿16i‹7 8ñ +e8ñ +e8y8è§8è§8Ã8Kù¸8̤8á®8á®8è§8Ã8è§8ȸš8ñ +e8̤8 .Í8ȸš8š™†8á®8á®8Kù¸8&Œë8 Òÿ8 +9Kù¸8Kù¸8&Œë8&Œë8á®8ž®õ8ü9Kù¸8&Œë8 .Í8y8 .Í8<Q8y8š™†8<Q8y8 8i‹7ñ +e8<Q8ý‹Ú7"H7»Ø¶"H7iïøµy:·Z¦Ó·Z¦Ó·y:·y:·Ú ¬·"H7H^û·Z¦Ó·»Ø¶Ú ¬·Z¦Ó·H^û·»Ø¶Û¿16i‹7»Ø¶i‹7$8i‹7Yê²7"H7´)8»Ø¶y:·Û¿16nÍó6Û¿16 8nÍó6Û¿16»Ø¶´)8´)8š™†8<Q8<Q8y8i‹7ý‹Ú7ñ +e8š™†8´)8´)8y8̤8 .Í8á®8ž®õ8&Œë8ž®õ8ž®õ8&Œë8L×8á®8 Òÿ8Kù¸8Gká8Gká8ü9ž®õ8 +9ßM9Ÿ©-9 +9ü9 Òÿ8 Òÿ8ßM9Gká8 Òÿ8 +9ü9¤#9ü9Kù¸8Kù¸8ñ +e8̤8è§8ȸš8ñ +e8ñ +e8š™†8ñ +e8ñ +e8<Q8ý‹Ú7nÍó6»Ø¶´)8ý‹Ú7Û¿16Û¿16y:·ÿŽ„··‚9¸·‚9¸…M¸dÚ„¸;莸Œ £¸¬ø˜¸8·¸dQÁ¸;莸ՉոdQÁ¸Õ‰Õ¸8·¸¬ø˜¸;莸…M¸±–¸Œ £¸·‚9¸®žu¸ÿŽ„·®žu¸…M¸Ú ¬·›Ža¸Ú ¬·Gˆ%¸±–¸Gˆ%¸…M¸y:·H^û·iïøµÚ ¬·Ú ¬·iïøµi‹7´)8$8nÍó6Yê²7Yê²7<Q8ñ +e8ý‹Ú7è§8ñ +e8 8ñ +e8š™†8̤8š™†8Ã8Gká8Gká8 Òÿ8Gká8ž®õ8ü9Gká8L×8Ã8ȸš8̤8”ü<8š™†8š™†8̤8Kù¸8ȸš8è§8L×8´)8<Q8$8nÍó6Yê²7"H7nÍó6»Ø¶Û¿16Û¿16»Ø¶ÿŽ„·y:·y:·i‹7Ú ¬·ÿŽ„·y:·±–¸Ú ¬·H^û·Yê²7Z¦Ó·H^û·Ú ¬·Z¦Ó·H^û·dÚ„¸dÚ„¸®žu¸¶ ­¸;莸¶ ­¸½¨ß¸dÚ„¸dÚ„¸;莸dQÁ¸Œ £¸·‚9¸®žu¸¬ø˜¸®žu¸dÚ„¸Œ £¸›Ža¸®žu¸±–¸›Ža¸±–¸®žu¸…M¸ÿŽ„··‚9¸·‚9¸Gˆ%¸Z¦Ó·Z¦Ó·Gˆ%¸ÿŽ„·iïøµYê²7Û¿16Z¦Ó·Yê²7<Q8ý‹Ú7 8Yê²7ý‹Ú7´)8ý‹Ú7nÍó6y:·Û¿16iïøµý‹Ú7$8 8<Q8̤8y8è§8̤8y8<Q8ñ +e8´)8<Q8"H7$8»Ø¶i‹7»Ø¶”ü<8Kù¸8<Q8<Q8<Q8´)8´)8”ü<8 8´)8iïøµý‹Ú7»Ø¶Z¦Ó·nÍó6Ú ¬·y:·iïøµÛ¿16i‹7”ü<8ý‹Ú7$8i‹7ý‹Ú7ñ +e8Yê²7i‹7Û¿16y:·±–¸Ú ¬·ÿŽ„·iïøµ"H7»Ø¶y:·"H7nÍó6nÍó6$8i‹7 8"H7Û¿16´)8´)8ý‹Ú7”ü<8i‹7"H7y:·y:·Z¦Ó·H^û·y:·Û¿16"H7»Ø¶Yê²7´)8<Q8ý‹Ú7Yê²7ÿŽ„·Û¿16ý‹Ú7$8$8<Q8è§8y8Ã8ž®õ8Kù¸8 Òÿ8Ã8L×8̤8 .Í8̤8Ã8 .Í8á®8̤8L×8L×8Gká8š™†8è§8Kù¸8š™†8y8̤8̤8è§8è§8ȸš8̤8ȸš8Kù¸8<Q8š™†8”ü<8ñ +e8ȸš8š™†8ñ +e8̤8”ü<8<Q8 8nÍó6"H7"H7»Ø¶H^û·Ú ¬·…M¸Gˆ%¸›Ža¸›Ža¸Œ £¸Œ £¸;莸°l˸°l˸¬ø˜¸Œ £¸Õ‰Õ¸Õ‰Õ¸dÚ„¸Œ £¸¶ ­¸®žu¸·‚9¸›Ža¸Gˆ%¸±–¸±–¸»Ø¶i‹7Û¿16ý‹Ú7$8"H7”ü<8i‹7ñ +e8è§8è§8á®8ñ +e8Kù¸8ž®õ8Kù¸8Ã8̤8<Q8š™†8y8<Q8š™†8̤8á®8Gká8 Òÿ8á®8Ã8Ã8Gká8L×8 Òÿ8ü9ü9p89ü9 +9ž®õ8ü9L×8Gká8ž®õ8L×8ȸš8y8ñ +e8´)8i‹7<Q8ñ +e8´)8"H7”ü<8<Q8´)8 8$8<Q8ý‹Ú7"H7nÍó6”ü<8iïøµÿŽ„·±–¸Gˆ%¸®žu¸·‚9¸ÿŽ„·±–¸H^û·±–¸Gˆ%¸›Ža¸dÚ„¸®žu¸¶ ­¸¬ø˜¸›Ža¸Ú ¬··‚9¸H^û·±–¸Gˆ%¸Gˆ%¸…M¸…M¸H^û·±–¸…M¸…M¸›Ža¸Œ £¸»Ø¶ÿŽ„·ÿŽ„·Û¿16Û¿16i‹7i‹7nÍó6"H7ý‹Ú7Yê²7”ü<8”ü<8<Q8Kù¸8Kù¸8è§8ñ +e8ȸš8y8è§8á®8y8 8̤8Ã8Ã8Ã8 .Í8Gká8 +9ü9ž®õ8ü9p89•z#9ßM9Ò‘(9 +9Gká8p89ž®õ8Ã8L×8L×8̤8è§8 8”ü<8i‹7Yê²7Û¿16Z¦Ó·ÿŽ„·ÿŽ„·Z¦Ó··‚9¸dÚ„¸H^û·Gˆ%¸H^û·Gˆ%¸iïøµ®žu¸·‚9¸±–¸®žu¸Gˆ%¸Œ £¸8·¸›Ža¸Œ £¸¶ ­¸®žu¸8·¸QÉ鸽¨ß¸½¨ß¸„ëó¸„ëó¸Bþ¸½¨ß¸°l˸dQÁ¸Õ‰Õ¸›Ža¸Gˆ%¸·‚9¸®žu¸›Ža¸y:·"H7H^û·y:·nÍó6Ú ¬·”ü<8Yê²7 8$8y8”ü<8̤8è§8š™†8ñ +e8š™†8y8Kù¸8̤8Kù¸8Kù¸8y8Ã8Ã8L×8 Òÿ8p89ü9ü9̤8Gká8ž®õ8ü9ßM9ü9p89 Òÿ8ü9 Òÿ8L×8Gká8ž®õ8 +9ž®õ8ü9ßM9ü9 Òÿ8Gká8 .Í8&Œë8Ã8á®8̤8̤8á®8Kù¸8ñ +e8š™†8”ü<8$8i‹7nÍó6Ú ¬·Ú ¬·Ú ¬·"H7nÍó6H^û·ÿŽ„·H^û·Z¦Ó·Gˆ%¸…M¸·‚9¸±–¸y:·Z¦Ó··‚9¸®žu¸…M¸®žu¸®žu¸Gˆ%¸Gˆ%¸Œ £¸›Ža¸·‚9¸·‚9¸±–¸Z¦Ó·±–¸Gˆ%¸Ú ¬·Ú ¬·±–¸Gˆ%¸Ú ¬·Gˆ%¸Ú ¬·y:·iïøµnÍó6nÍó6"H7iïøµ<Q8´)8”ü<8ý‹Ú7š™†8´)8ý‹Ú7Yê²7ý‹Ú7ȸš8$8$8 8"H7´)8Yê²7ý‹Ú7è§8á®8ñ +e8̤8̤8 .Í8Kù¸8á®8Kù¸8Ã8è§8Gká8Gká8Gká8 .Í8Kù¸8Ã8̤8ȸš8š™†8ñ +e8ý‹Ú7$8Û¿16Û¿16nÍó6nÍó6y:·Z¦Ó·®žu¸Gˆ%¸…M¸dQÁ¸¬ø˜¸dÚ„¸·‚9¸dÚ„¸›Ža¸®žu¸Gˆ%¸8·¸Õ‰Õ¸°l˸dQÁ¸dQÁ¸¬ø˜¸Œ £¸¶ ­¸®žu¸°l˸°l˸dQÁ¸¶ ­¸8·¸°l˸›Ža¸Œ £¸dÚ„¸Gˆ%¸Gˆ%¸H^û·Ú ¬·ÿŽ„·H^û·Û¿16Û¿16Û¿16y:·iïøµiïøµ"H7y:·iïøµnÍó6Z¦Ó·H^û·Z¦Ó·iïøµnÍó6iïøµ»Ø¶iïøµnÍó6y8Yê²7i‹7nÍó6i‹7ý‹Ú7Û¿16Yê²7i‹7Û¿16ý‹Ú7"H7$8nÍó6i‹7Yê²7Yê²7ý‹Ú7Yê²7Û¿16»Ø¶i‹7ý‹Ú7<Q8$8iïøµnÍó6Yê²7´)8ý‹Ú7<Q8$8Yê²7$8´)8Yê²7Yê²7$8 8nÍó6»Ø¶Ú ¬·y:·»Ø¶H^û·±–¸Z¦Ó·ÿŽ„·y:·±–¸…M¸…M¸±–¸®žu¸·‚9¸Gˆ%¸Gˆ%¸®žu¸Gˆ%¸®žu¸®žu¸·‚9¸…M¸®žu¸ÿŽ„·Gˆ%¸dÚ„¸›Ža¸Gˆ%¸;莸Œ £¸Œ £¸dÚ„¸¶ ­¸Œ £¸dÚ„¸›Ža¸®žu¸Œ £¸±–¸H^û··‚9¸Gˆ%¸Ú ¬··‚9¸Z¦Ó·iïøµnÍó6iïøµYê²7$8 8´)8´)8”ü<8ñ +e8 8Yê²7è§8̤8š™†8 .Í8á®8̤8y8y8á®8̤8á®8Ã8á®8á®8L×8á®8 .Í8Ã8Ã8Gká8̤8Gká8á®8Ã8Ã8&Œë8Ã8<Q8è§8´)8´)8y8"H7š™†8nÍó6"H7 8nÍó6i‹7´)8Û¿16"H7»Ø¶ÿŽ„·H^û·›Ža¸…M¸Œ £¸dÚ„¸…M¸…M¸dÚ„¸;莸Gˆ%¸›Ža¸Œ £¸›Ža¸±–¸®žu¸›Ža¸¶ ­¸°l˸Œ £¸Œ £¸½¨ß¸QÉ鸗A¹„ëó¸Œ £¸¶ ­¸dQÁ¸½¨ß¸¶ ­¸°l˸dQÁ¸®žu¸8·¸…M¸±–¸H^û·H^û·H^û·y:·ÿŽ„·Gˆ%¸H^û·±–¸®žu¸±–¸Gˆ%¸H^û·»Ø¶Ú ¬·Ú ¬·Ú ¬·y:·H^û·y:·ý‹Ú7nÍó6H^û·ÿŽ„·Û¿16ý‹Ú7Û¿16Yê²7ñ +e8y8ȸš8 .Í8á®8L×8Ã8L×8 +9ž®õ8p89ü9 Òÿ8L×8Ã8Ã8ž®õ8&Œë8 .Í8Kù¸8Ã8è§8̤8i‹7"H7´)8i‹7”ü<8Û¿16nÍó6iïøµi‹7"H7iïøµGˆ%¸H^û·Ú ¬·Ú ¬·®žu¸·‚9¸®žu¸;莸Œ £¸…M¸¶ ­¸·‚9¸Gˆ%¸dÚ„¸Gˆ%¸±–¸;莸Gˆ%¸Œ £¸¶ ­¸®žu¸Gˆ%¸…M¸›Ža¸·‚9¸Œ £¸dÚ„¸®žu¸±–¸±–¸®žu¸ÿŽ„·y:·H^û·H^û·›Ža¸»Ø¶»Ø¶nÍó6i‹7Yê²7´)8´)8”ü<8<Q8ý‹Ú7<Q8´)8̤8 .Í8š™†8á®8Kù¸8 .Í8 .Í8&Œë8ž®õ8Ã8L×8̤8ȸš8Ã8ȸš8̤8ȸš8 8ñ +e8”ü<8”ü<8 .Í8Ã8 Òÿ8Gká8Ã8Kù¸8è§8 8è§8”ü<8´)8 8´)8Yê²7Yê²7i‹7´)8$8<Q8$8Û¿16i‹7i‹7Yê²7Û¿16H^û·y:·iïøµ±–¸y:·y:·ÿŽ„·±–¸Gˆ%¸Ú ¬·Gˆ%¸±–¸·‚9¸H^û·Ú ¬·dÚ„¸·‚9¸Ú ¬·±–¸Z¦Ó·Ú ¬·y:·y:·H^û·H^û·±–¸Ú ¬·±–¸Û¿16Û¿16»Ø¶Z¦Ó·"H7"H7”ü<8´)8<Q8Û¿16nÍó6y:·i‹7”ü<8ñ +e8$8´)8$8"H7ý‹Ú7nÍó6|Pd|1|24600|2013-282T15:31:55.397 Kìà8Kìà8îã9h¼99¼i-9hs`9ºQ9¼i-9öQ(9 $9J´<9‚29J´<9êš79ŒèF9êš79¼i-9¾V[9²³„9gL9‚29J´<9 $9 $9ÓÏ 9h¼9Kìà8Kìà8G”Â8¬z¸8h¼9Kìà8hSÿ8²ø9Kìà8 ë8{/õ8.ÍÖ8ЯÌ8ЯÌ8{/õ8ЯÌ8Kìà8c®8ЯÌ8c®8 ë8¬z¸8Ž†8|:š8c®8»)8¦M¤8»)8P8nd8G”Â8|:š8Ž†8Ž†8|:š8»)8Kìà8ЯÌ8 ë8G”Â8G”Â8h¼9ÓÏ 9.ÍÖ8.ÍÖ8ÓÏ 9îã9 $9À:#9öQ(9öQ(9J´<9 $9öQ(9J´<99öQ(9êš79îã9 $9¼i-99J´<9,ÎA9öQ(9À:#9‚29¼i-9‚29¼i-9öQ(9,ÎA9‚29À:#9J´<9¼i-9²ø9 $9‚29J´<9ŒèF9À:#9²ø9îã9 $9ÓÏ 9h¼9{/õ8¦M¤8{/õ8 ë8|:š8I x8ЯÌ8¦M¤8G”Â8G”Â8I x8¦M¤8ЯÌ8.ÍÖ8|:š8¦M¤8|:š8|:š8P8‰8P8Ž†8Ž†8¨*8P8nd8¦M¤8Ž†8Ž†8P8»)8Ã<8Ž†8I x8¬z¸8¦M¤8¬z¸8.ÍÖ8c®8 ë8Kìà8ЯÌ8ÓÏ 9 ë8.ÍÖ8G”Â8¦M¤8{/õ8c®8hSÿ8hSÿ8Kìà8 ë8h¼9Kìà8G”Â8{/õ8îã9 ë8À:#99îã9À:#9²ø9êš79êš79êš79ŒèF9êš79ƒ:V9gL9ƒ:V9gL9¼i-9ŒèF9J´<9ºQ9e9À:#9J´<9ŒèF9¾V[9öQ(9‚29ŒèF9hs`9e9¾V[9ƒ:V9e9÷z9ŒèF9ƒ:V9ºQ9ƒ:V9¼i-9À:#9 $9¼i-9 $9J´<9²ø9îã99²ø9îã9{/õ8h¼9ÓÏ 9ÓÏ 9öQ(9öQ(9 $9²ø99ÓÏ 9Kìà8Kìà8h¼9 ë8Ž†8ЯÌ8ЯÌ8ÓÏ 9Kìà8.ÍÖ8²ø9c®8h¼9h¼9 ë8À:#9¼i-9ÓÏ 9À:#99²ø9{/õ8ÓÏ 9ÓÏ 99îã9 ë8¼i-9hSÿ8hSÿ8hSÿ8êš79 $9 $9À:#9ŒèF9êš79ŒèF9ŒèF9hs`9e9,ÎA9(9÷z9¾V[9e9¾V[9hs`9÷z9®j9îËo9ƒ:V9hs`9ƒ:V9¾V[9ºQ9J´<9÷z9ƒ:V9,ÎA9ºQ9,ÎA9J´<9êš79 $9À:#9öQ(9²ø9¼i-99.ÍÖ8hSÿ8{/õ8{/õ8 ë8 ë8ÓÏ 9ЯÌ8G”Â8G”Â8¬z¸8G”Â8Ã<8ú°7|:š8nd8Ã<8Ã<8IšØ7W>·[à¶ú°7ìù­·Èt ¶ìù­·[à¶ä—Õ·ìù­·½´"6 +ì6[à¶ìù­·:}†·ìù­·ä—Õ·ä—Õ·}}:¸}}:¸¤‚&¸öv™¸˜¸ìù­·}}:¸¤‚&¸:}†·˜¸[à¶ä—Õ·ä—Õ· +ì6[à¶}}:¸[à¶Èt ¶•z‰7:}†·•z‰7IšØ7•z‰7Ã<8J(8Ž†8I x8I x8Ž†8Ž†8I x8J(8c®8G”Â8{/õ8ÓÏ 9h¼9ÓÏ 99hSÿ8²ø9ÓÏ 9hSÿ8îã9Kìà8ÓÏ 9h¼9 $9‚29öQ(99îã9À:#999îã9îã9ÓÏ 9ÓÏ 99.ÍÖ8¬z¸8c®8¦M¤8c®8¦M¤8ЯÌ8.ÍÖ8|:š8¬z¸8c®8ЯÌ8»)8ú°7•z‰7ú°7ú°7 +ì6W>·Èt ¶ú°7½´"6•z‰7?JD7?JD7IšØ7IšØ7½´"6ú°7 +ì6ú°7•z‰7W>·ä—Õ·½´"6½´"6 +ì6•z‰7Èt ¶ +ì6¨*8ú°7:}†·ä—Õ·Èt ¶•z‰7ú°7¨*8Ã<8»)8c®8Ž†8c®8I x8P8|:š8Ž†8»)8P8P8Ã<8»)8»)8|:š8|:š8|:š8c®8G”Â8»)8ЯÌ8Kìà8Kìà8hSÿ8ÓÏ 9 $9{/õ8Kìà8G”Â8¬z¸8|:š8¬z¸8¦M¤8¬z¸8¦M¤8P8P8‰8IšØ7•z‰7ú°7¨*8Ã<8Ã<8Ã<8IšØ7nd8Èt ¶:}†·ìù­· Qý·6€N¸öv™¸kX…¸ušv¸ó‰£¸ÐÁ¸8Ÿ­¸¤¶·¸wŽþ¸`H긤¶·¸ÐÁ¸>m ¹>m ¹ï×"¹^«¹ï×"¹^«¹–¹Ô-¹2¹ï×"¹kA¹s…F¹YÁ¹î77¹Ô-¹Ô-¹î77¹ï'¹ï'¹ï'¹ï'¹L¹L¹wŽþ¸¥jô¸¹Ö¸¹Ö¸¤¶·¸8Ÿ­¸ó‰£¸ó‰£¸Šb¸öv™¸kX…¸kX…¸}}:¸ušv¸Šb¸öv™¸8Ÿ­¸ef¸ef¸ó‰£¸ó‰£¸˜¸Šb¸}}:¸¤‚&¸W>·W>·˜¸W>·ä—Õ·:}†·?JD7Èt ¶ä—Õ·IšØ7P8J(8‰8IšØ7?JD7?JD7 +ì6‰8ìù­·:}†· +ì6W>· +ì6[඘¸½´"6 Qý·ušv¸Šb¸˜¸ušv¸ó‰£¸6€N¸ušv¸ó‰£¸~ë˸`Hê¸8Ÿ­¸âY¹–¹>m ¹Ô-¹^«¹2¹L¹YÁ¹^«¹DQ<¹DQ<¹YÁ¹L¹ï'¹î77¹î77¹Ô-¹ï×"¹kA¹s…F¹î77¹>m ¹¥jô¸ï×"¹`Hê¸wŽþ¸¥jô¸¹Ö¸ï×"¹âY¹`Hê¸`Hê¸>m ¹¥jô¸ÐÁ¸~ë˸¤¶·¸wŽþ¸ÐÁ¸ÐÁ¸¶'à¸~ë˸8Ÿ­¸¶'ึ'ฤ¶·¸~ë˸8Ÿ­¸8Ÿ­¸ÐÁ¸öv™¸öv™¸öv™¸}}:¸8Ÿ­¸ó‰£¸6€N¸6€N¸kX…¸¤‚&¸ušv¸ušv¸Šb¸ìù­· +ì6:}†· +ì6[à¶Èt ¶}}:¸:}†·[à¶6€N¸:}†·6€N¸ušv¸öv™¸ó‰£¸8Ÿ­¸öv™¸ÐÁ¸~ë˸8Ÿ­¸¶'à¸`Hê¸`Hê¸L¹^«¹âY¹`H긶'à¸`Hê¸wŽþ¸¥jô¸~ë˸`Hê¸âY¹ï×"¹^«¹ï'¹ï'¹âY¹âY¹¥jô¸>m ¹–¹2¹kA¹L¹2¹E K¹ï×"¹^«¹î77¹2¹s…F¹ï'¹2¹2¹^«¹Ô-¹ï×"¹DQ<¹kA¹î77¹–¹¬Jj¹E K¹1-e¹Ä~¹ò¹‹¥y¹‹¥y¹kA¹E K¹Ô-¹DQ<¹2¹L¹^«¹2¹Ô-¹2¹YÁ¹DQ<¹>m ¹–¹2¹YÁ¹–¹DQ<¹2¹^«¹YÁ¹^«¹^«¹wŽþ¸>m ¹L¹L¹¥jô¸–¹ï×"¹YÁ¹Ô-¹ï'¹Ô-¹ï×"¹Ô-¹2¹ï×"¹î77¹2¹ï×"¹DQ<¹Ô-¹î77¹DQ<¹kA¹Ž»P¹ï'¹kA¹Ô-¹s…F¹kA¹!`¹M×U¹E K¹DQ<¹¬Jj¹1-e¹1-e¹¬Jj¹Ž»P¹‡¹Û†t¹!`¹Ä~¹Û†t¹!`¹¬Jj¹Ä~¹M¢‰¹&T‘¹]ÃŽ¹‡¹7v–¹7v–¹&T‘¹ò¹ñ„¹¿2Œ¹Û†t¹!`¹M×U¹1-e¹!`¹‘ho¹‘ho¹!`¹óZ¹DQ<¹Ž»P¹î77¹Ž»P¹DQ<¹Ô-¹s…F¹Ô-¹2¹2¹DQ<¹ï'¹–¹~ë˸¹Ö¸¶'ูÖ¸öv™¸öv™¸ef¸ÐÁ¸ó‰£¸8Ÿ­¸öv™¸Šb¸˜¸Šb¸ä—Õ·}}:¸:}†·:}†·:}†·ä—Õ·:}†·W>· Qý·ä—Õ·ìù­·:}†·:}†· +ì6[à¶W>· Qý·W>·ìù­·öv™¸ Qý·:}†·ìù­·¤‚&¸}}:¸¤‚&¸˜¸6€N¸˜¸˜¸¤‚&¸˜¸˜¸ Qý·ó‰£¸Šb¸ä—Õ·kX…¸}}:¸6€N¸kX…¸öv™¸ÐÁ¸8Ÿ­¸¤‚&¸8Ÿ­¸8Ÿ­¸ef¸ef¸¤‚&¸˜¸¤‚&¸}}:¸˜¸kX…¸¤‚&¸¤‚&¸:}†·Èt ¶:}†·W>·Èt ¶W>·?JD7 +ì6 Qý·ìù­·˜¸ Qý·½´"6[඘¸Èt ¶½´"6W>·[à¶Èt ¶Èt ¶IšØ7P8J(8nd8Ž†8nd8Ž†8nd8Ã<8I x8P8¨*8Ž†8I x8IšØ7Ã<8I x8c®8»)8¦M¤8ЯÌ8hSÿ8 ë8ЯÌ8 ë8Kìà8|:š8¬z¸8Ž†8P8Ž†8¦M¤8c®8¦M¤8nd8J(8P8•z‰7 +ì6•z‰7ìù­· Qý·ä—Õ· Qý· Qý·}}:¸¤‚&¸}}:¸ Qý·}}:¸6€N¸}}:¸öv™¸kX…¸6€N¸öv™¸kX…¸öv™¸ef¸¤¶·¸kX…¸8Ÿ­¸öv™¸ušv¸öv™¸8Ÿ­¸¤¶·¸öv™¸¹Ö¸ÐÁ¸8Ÿ­¸ef¸ó‰£¸öv™¸öv™¸öv™¸öv™¸¶'ฤ¶·¸Šb¸öv™¸öv™¸öv™¸ó‰£¸Šb¸ušv¸öv™¸6€N¸kX…¸ Qý·¤‚&¸ušv¸6€N¸ Qý·˜¸}}:¸ Qý·8Ÿ­¸öv™¸˜¸ Qý·ä—Õ· Qý·Èt ¶ìù­·:}†·ìù­·W>·˜¸W>· +ì6Èt ¶ú°7¨*8Ã<8nd8¨*8¨*8IšØ7ú°7‰8¨*8IšØ7Ã<8ú°7•z‰7•z‰7‰8ú°7W>·½´"6 +ì6 Qý·?JD7:}†·[à¶ä—Õ·ìù­·˜¸˜¸˜¸˜¸Šb¸}}:¸Šb¸˜¸ó‰£¸Šb¸¤‚&¸öv™¸kX…¸¤¶·¸ÐÁ¸¹Ö¸¹Ö¸ÐÁ¸¹Ö¸8Ÿ­¸öv™¸¥jô¸8Ÿ­¸¶'à¸ÐÁ¸~ë˸öv™¸ÐÁ¸ó‰£¸ó‰£¸¥jô¸öv™¸ó‰£¸ó‰£¸ó‰£¸ó‰£¸¤¶·¸ušv¸}}:¸öv™¸Šb¸kX…¸Šb¸¤¶·¸ušv¸}}:¸˜¸ä—Õ·[à¶Èt ¶½´"6[à¶?JD7 +ì6?JD7‰8ú°7J(8Ã<8¨*8IšØ7•z‰7‰8¨*8•z‰7[à¶ä—Õ·Ã<8I x8Ã<8‰8I x8P8nd8»)8¨*8nd8Ã<8Èt ¶W>·Ã<8J(8Ã<8¨*8?JD7Èt ¶ìù­·:}†·ä—Õ·:}†·}}:¸W>·¤‚&¸[à¶:}†·Šb¸6€N¸kX…¸˜¸¤‚&¸ušv¸ó‰£¸¹Ö¸ÐÁ¸–¹^«¹`Hê¸âY¹–¹–¹ï×"¹âY¹ï×"¹ï×"¹wŽþ¸¶'à¸wŽþ¸L¹âY¹YÁ¹ï'¹âY¹âY¹>m ¹¶'à¸âY¹¹Ö¸>m ¹¹Ö¸ÐÁ¸öv™¸öv™¸Šb¸Šb¸¤‚&¸ Qý·ìù­·W>·ú°7W>·½´"6•z‰7 +ì6½´"6¨*8IšØ7Ž†8•z‰7Èt ¶‰8•z‰7ú°7Ã<8ú°7•z‰7 +ì6ú°7?JD7ú°7¨*8Ã<8¨*8‰8I x8‰8½´"6Èt ¶Èt ¶½´"6½´"6•z‰7IšØ7½´"6½´"6½´"6IšØ7ú°7¨*8 +ì6?JD7W>·[à¶W>·ìù­·˜¸¤‚&¸6€N¸¤‚&¸˜¸}}:¸}}:¸¤‚&¸ Qý· Qý· Qý·¤‚&¸6€N¸6€N¸˜¸}}:¸}}:¸˜¸kX…¸ef¸ušv¸}}:¸öv™¸~ë˸ÐÁ¸~ë˸8Ÿ­¸öv™¸Šb¸ušv¸ó‰£¸Šb¸}}:¸ušv¸ Qý·?JD7[à¶W>· +ì6Èt ¶ Qý·W>·W>·½´"6½´"6ú°7 +ì6P8Ã<8P8nd8‰8P8¨*8IšØ7Ã<8Ž†8|:š8¬z¸8nd8¦M¤8ÓÏ 9{/õ8»)8G”Â8G”Â8h¼9ЯÌ8G”Â8ЯÌ8 ë8{/õ8 $9îã9ÓÏ 9ЯÌ8ÓÏ 9.ÍÖ8{/õ8G”Â8¦M¤8 ë8Kìà8{/õ8¬z¸8{/õ8Kìà8¬z¸8»)8¦M¤8c®8»)8Ã<8I x8»)8ú°7J(8•z‰7•z‰7Èt ¶ú°7¨*8‰8Ã<8¨*8ú°7IšØ7?JD7Èt ¶ìù­·¤‚&¸˜¸ Qý·}}:¸¤‚&¸:}†·:}†· Qý·Èt ¶W>·W>· +ì6IšØ7•z‰7?JD7ú°7J(8Ã<8Ž†8¦M¤8I x8I x8ЯÌ8I x8¦M¤8 ë8¬z¸8¬z¸8{/õ8ÓÏ 9 ë8ÓÏ 9îã9²ø99ÓÏ 9îã9 $9J´<9öQ(9öQ(9¼i-9J´<9,ÎA9êš79¼i-9ƒ:V9hs`9ºQ9‚29‚29,ÎA9ŒèF9‚29À:#9ºQ9gL9hs`9ŒèF9J´<9gL9êš79‚29öQ(9öQ(9²ø9hSÿ8{/õ8ÓÏ 9²ø99h¼9h¼9îã9 ë8Kìà8¬z¸8¬z¸8Ž†8¦M¤8|:š8»)8P8Ž†8nd8‰8ú°7Ž†8Ž†8•z‰7¨*8¨*8½´"6 +ì6¨*8 +ì6•z‰7ú°7IšØ7•z‰7?JD7½´"6P8J(8IšØ7IšØ7•z‰7•z‰7ú°7Ã<8¨*8IšØ7‰8‰8‰8|:š8nd8Ã<8I x8|:š8»)8I x8¦M¤8c®8ЯÌ8{/õ8c®8.ÍÖ8¦M¤8c®8 ë8h¼9 ë8hSÿ8²ø999îã9{/õ8h¼9²ø9h¼9hSÿ8Kìà8 ë8hSÿ8 ë89 ë8¬z¸8.ÍÖ8Kìà8hSÿ8G”Â8 ë8G”Â8c®8G”Â8ЯÌ8c®8c®8.ÍÖ8.ÍÖ8I x8¦M¤8I x8P8J(8¨*8¨*8?JD7‰8¨*8Ã<8IšØ7½´"6?JD7?JD7 Qý·:}†· +ì6:}†·½´"6 +ì6IšØ7¨*8¨*8Ž†8I x8Ž†8P8|:š8nd8¨*8ú°7‰8¦M¤8P8Ã<8P8‰8¦M¤8nd8nd8P8Ã<8IšØ7‰8‰8¨*8P8¨*8Ž†8.ÍÖ8¦M¤8¬z¸8G”Â8Kìà8|:š8|:š8Kìà8.ÍÖ8²ø9.ÍÖ8{/õ8ЯÌ8hSÿ8hSÿ89²ø9îã9²ø99,ÎA9,ÎA9e9®j9‚29J´<9gL9ºQ9J´<9ŒèF9ºQ9,ÎA9gL9gL9ƒ:V9êš79¾V[9,ÎA9¼i-9J´<9ºQ9êš79¼i-9êš79 $9À:#9‚29öQ(9²ø9ÓÏ 9îã9îã9h¼9²ø99¼i-9îã9öQ(9ÓÏ 9h¼9öQ(9{/õ8ÓÏ 9 $9Kìà8ÓÏ 9Kìà8¦M¤8.ÍÖ8Kìà8G”Â8 ë8¬z¸8c®8»)8c®8G”Â8¦M¤8¬z¸8Ž†8»)8»)8I x8¦M¤8»)8»)8¦M¤8nd8»)8|:š8¦M¤8¬z¸8G”Â8Kìà8ЯÌ8 ë8hSÿ8hSÿ8hSÿ8²ø9îã9À:#9¼i-9ŒèF9¼i-9¼i-9À:#9‚29¼i-9¼i-9öQ(99À:#9‚29ÓÏ 9öQ(9ŒèF9öQ(99²ø9îã9 ë89ÓÏ 9{/õ8.ÍÖ8 ë8.ÍÖ8hSÿ8{/õ8hSÿ8Kìà8h¼9 ë8.ÍÖ8{/õ8¦M¤8G”Â8ЯÌ8G”Â8¬z¸8G”Â8¦M¤8»)8G”Â8Ž†8¬z¸8c®8¦M¤8G”Â8I x8»)8»)8J(8J(8P8‰8 +ì6¨*8 +ì6?JD7 +ì6[à¶?JD7J(8Èt ¶[à¶Èt ¶Èt ¶Èt ¶W>·Èt ¶½´"6 +ì6W>·[ච+ì6 Qý· Qý·W>·W>·ìù­·¤‚&¸Šb¸[චQý·¤‚&¸˜¸:}†·½´"6IšØ7½´"6ìù­· +ì6¨*8‰8Ž†8nd8»)8Kìà8¬z¸8G”Â8{/õ8ЯÌ8c®8ЯÌ8|:š8G”Â8ЯÌ8¦M¤8.ÍÖ8P8.ÍÖ8¬z¸8ЯÌ8hSÿ8îã9îã9ÓÏ 9ÓÏ 9h¼9h¼9h¼9 $9.ÍÖ8Ž†8I x8¬z¸8¦M¤8|:š8Ž†8Ž†8P8I x8nd8‰8Ã<8‰8Ã<8Ã<8nd8¨*8¨*8¨*8•z‰7 +ì6½´"6Èt ¶‰8¨*8W>·‰8IšØ7 +ì6½´"6 Qý·˜¸öv™¸öv™¸¤‚&¸~ë˸󉣸~ë˸¹Ö¸~ë˸öv™¸~ë˸󉣸¤¶·¸ÐÁ¸¤¶·¸wŽþ¸~ë˸¶'ฤ¶·¸¶'à¸`H긶'ลjô¸L¹âY¹¥jô¸~ë˸¹Ö¸âY¹wŽþ¸âY¹–¹wŽþ¸¥jô¸>m ¹ÐÁ¸ÐÁ¸6€N¸kX…¸öv™¸öv™¸¤‚&¸W>· Qý·Šb¸ Qý·ä—Õ·˜¸6€N¸W>·ú°7ú°7W>· +ì6 +ì6•z‰7•z‰7 +ì6•z‰7 +ì6•z‰7•z‰7½´"6[à¶?JD7¤‚&¸Šb¸}}:¸}}:¸ä—Õ·}}:¸˜¸}}:¸öv™¸kX…¸öv™¸ef¸ó‰£¸~ë˸`Hê¸`Hê¸8Ÿ­¸ó‰£¸ÐÁ¸ÐÁ¸~ë˸`H긤¶·¸¶'à¸8Ÿ­¸¤¶·¸¥jô¸¶'ูÖ¸¹Ö¸ÐÁ¸`Hê¸`H긥jô¸¶'à¸`H긥jô¸>m ¹wŽþ¸–¹L¹2¹âY¹>m ¹>m ¹`Hê¸ÐÁ¸¥jô¸~ë˸¤¶·¸¶'à¸wŽþ¸>m ¹~ë˸󉣸}}:¸}}:¸[à¶:}†·˜¸:}†·½´"6 +ì6Èt ¶:}†·ìù­·[à¶[à¶[à¶ìù­· Qý·½´"6 +ì6W>·Èt ¶IšØ7•z‰7ú°7¨*8IšØ7ú°7IšØ7Èt ¶½´"6IšØ7Ã<8nd8nd8nd8J(8‰8J(8?JD7‰8•z‰7ú°7‰8:}†·½´"6?JD7 +ì6½´"6ìù­·˜¸ušv¸ušv¸Šb¸}}:¸¤‚&¸ó‰£¸ó‰£¸ó‰£¸¹Ö¸~ë˸`Hê¸`Hê¸>m ¹^«¹`Hê¸L¹~ë˸ÐÁ¸~ë˸~ë˸¥jô¸¶'à¸ÐÁ¸wŽþ¸wŽþ¸ÐÁ¸¹Ö¸ÐÁ¸¹Ö¸8Ÿ­¸ÐÁ¸`Hê¸~ë˸âY¹`Hê¸wŽþ¸>m ¹L¹`H긹Ö¸¥jô¸öv™¸ó‰£¸`Hê¸>m ¹ušv¸öv™¸¹Ö¸ÐÁ¸öv™¸¤¶·¸ÐÁ¸6€N¸öv™¸˜¸:}†·¤‚&¸ìù­·ìù­·ìù­·[ඕz‰7[à¶W>·˜¸[à¶}}:¸Šb¸˜¸ Qý· Qý·˜¸Šb¸¤‚&¸öv™¸ÐÁ¸8Ÿ­¸kX…¸ef¸öv™¸ó‰£¸8Ÿ­¸ó‰£¸~ë˸ÐÁ¸ÐÁ¸6€N¸öv™¸ušv¸Šb¸öv™¸ÐÁ¸ó‰£¸öv™¸kX…¸ušv¸ó‰£¸öv™¸¹Ö¸~ë˸¹Ö¸âY¹`Hê¸^«¹YÁ¹>m ¹wŽþ¸`Hê¸L¹–¹ï'¹^«¹^«¹2¹ï×"¹kA¹s…F¹kA¹2¹s…F¹2¹óZ¹kA¹Ž»P¹DQ<¹E K¹M×U¹s…F¹Ä~¹‹¥y¹!`¹Ž»P¹M×U¹¬Jj¹E K¹E K¹M×U¹M×U¹s…F¹kA¹^«¹^«¹>m ¹âY¹`H긥jô¸–¹>m ¹¹Ö¸`H긥jô¸L¹ÐÁ¸ó‰£¸ef¸8Ÿ­¸8Ÿ­¸ÐÁ¸öv™¸8Ÿ­¸öv™¸Šb¸8Ÿ­¸kX…¸öv™¸Šb¸öv™¸¹Ö¸8Ÿ­¸kX…¸~ë˸¤¶·¸kX…¸ó‰£¸ušv¸~ë˸~ë˸¹Ö¸¹Ö¸8Ÿ­¸¥jô¸ušv¸8Ÿ­¸¹ָ󉣸8Ÿ­¸¶'ลjô¸âY¹`Hê¸^«¹ï×"¹î77¹ï'¹>m ¹^«¹>m ¹^«¹Ô-¹L¹ï×"¹Ô-¹DQ<¹ï'¹s…F¹kA¹M×U¹DQ<¹2¹kA¹ï×"¹î77¹YÁ¹–¹^«¹s…F¹ï'¹ï'¹^«¹ï'¹ï'¹^«¹wŽþ¸âY¹>m ¹wŽþ¸¤¶·¸¶'à¸wŽþ¸¶'ฤ¶·¸¥jô¸¶'à¸`H긥jô¸–¹¥jô¸¥jô¸¹Ö¸¹Ö¸~ë˸󉣸~ë˸󉣸ušv¸ušv¸ Qý·ìù­·Šb¸ìù­·˜¸ Qý·W>·W>·½´"6½´"6½´"6•z‰7[à¶ú°7ìù­·Èt ¶ú°7ìù­·Èt ¶½´"6½´"6Èt ¶ +ì6‰8Èt ¶Èt ¶:}†·IšØ7˜¸6€N¸ Qý·6€N¸ušv¸6€N¸ä—Õ·:}†·˜¸ Qý·˜¸}}:¸6€N¸¤‚&¸}}:¸Šb¸ušv¸8Ÿ­¸öv™¸Šb¸wŽþ¸8Ÿ­¸~ë˸`Hê¸~ë˸¹Ö¸L¹âY¹^«¹L¹wŽþ¸wŽþ¸>m ¹ï×"¹Ô-¹kA¹Ô-¹–¹âY¹¶'ฤ¶·¸>m ¹~ë˸¹Ö¸`H긥jô¸âY¹`Hê¸ó‰£¸ušv¸Šb¸}}:¸ušv¸}}:¸:}†· Qý·W>· Qý·:}†·˜¸ Qý·:}†·½´"6˜¸ +ì6 +ì6‰8IšØ7‰8‰8ú°7?JD7J(8IšØ7»)8‰8Ã<8¨*8nd8nd8Ž†8‰8»)8ЯÌ8¬z¸8.ÍÖ8G”Â8¦M¤8¬z¸8ЯÌ8¬z¸8»)8|:š8|:š8Ž†8P8P8I x8IšØ7ú°7¨*8ú°7 +ì6ä—Õ·˜¸}}:¸Šb¸Šb¸¹Ö¸8Ÿ­¸~ë˸󉣸¶'ฤ¶·¸`Hê¸8Ÿ­¸`Hê¸~ë˸wŽþ¸L¹>m ¹`Hê¸L¹–¹L¹âY¹ÐÁ¸¹Ö¸ÐÁ¸ÐÁ¸¶'à¸âY¹`Hê¸öv™¸öv™¸8Ÿ­¸8Ÿ­¸6€N¸öv™¸¹Ö¸ÐÁ¸¶'à¸ušv¸ó‰£¸kX…¸öv™¸Šb¸öv™¸Šb¸6€N¸ä—Õ· Qý·ä—Õ· Qý·:}†·[à¶?JD7½´"6Èt ¶IšØ7¨*8ú°7?JD7½´"6Ã<8nd8•z‰7Ž†8Ã<8IšØ7P8P8ú°7¨*8P8?JD7ú°7‰8I x8[ඕz‰7IšØ7•z‰7?JD7?JD7ìù­·˜¸[à¶:}†·½´"6 +ì6Èt ¶[඘¸}}:¸ä—Õ·ìù­·:}†·•z‰7ä—Õ·6€N¸¤‚&¸ušv¸Šb¸ Qý·}}:¸¤‚&¸Šb¸kX…¸¤‚&¸Šb¸ Qý· Qý·¤‚&¸¤‚&¸¤‚&¸kX…¸öv™¸ä—Õ·ä—Õ·¤‚&¸Šb¸kX…¸ušv¸Šb¸ Qý·˜¸Šb¸ó‰£¸ó‰£¸ÐÁ¸ÐÁ¸¤¶·¸8Ÿ­¸ef¸öv™¸ó‰£¸kX…¸¹Ö¸¶'ูÖ¸kX…¸¤‚&¸}}:¸}}:¸ìù­·}}:¸ìù­·[à¶Èt ¶ +ì6¨*8I x8Ã<8J(8J(8P8I x8¬z¸8G”Â8|:š8|:š8I x8c®8J(8IšØ7I x8J(8J(8nd8P8‰8nd8‰8ú°7I x8»)8‰8J(8‰8P8J(8•z‰7‰8P8J(8IšØ7nd8¨*8¨*8W>·[ච+ì6[ඕz‰7 +ì6•z‰7W>· Qý·¤‚&¸¤‚&¸¤‚&¸ušv¸öv™¸Šb¸ef¸6€N¸6€N¸ušv¸öv™¸ó‰£¸öv™¸öv™¸ÐÁ¸öv™¸kX…¸kX…¸öv™¸ó‰£¸¤¶·¸kX…¸öv™¸ó‰£¸öv™¸ä—Õ· Qý·¤‚&¸}}:¸}}:¸¤‚&¸ Qý· Qý·ìù­·ä—Õ·ìù­· Qý·ìù­·ä—Õ·?JD7 +ì6•z‰7IšØ7¨*8¨*8IšØ7?JD7J(8IšØ7¨*8J(8Ã<8P8Ã<8‰8P8I x8‰8P8|:š8|:š8¬z¸8G”Â8.ÍÖ8 ë8h¼9hSÿ8hSÿ8ÓÏ 9 ë8Kìà8 ë8{/õ8²ø9{/õ8ÓÏ 9.ÍÖ8.ÍÖ8îã99h¼9{/õ8Kìà8ЯÌ8ЯÌ8G”Â8G”Â8I x8I x8I x8|:š8|:š8¦M¤8¬z¸8 +ì6IšØ7•z‰7½´"6 Qý·W>·¤‚&¸ä—Õ·}}:¸kX…¸ Qý·Šb¸öv™¸Šb¸¤‚&¸kX…¸}}:¸¤‚&¸ä—Õ·ìù­·ìù­·ìù­·:}†·ìù­·ìù­·[à¶ú°7½´"6 +ì6½´"6 Qý· +ì6I x8J(8Ã<8P8¦M¤8Ž†8G”Â8ЯÌ8ЯÌ8¬z¸8ÓÏ 9hSÿ8ÓÏ 9öQ(9 $9îã9îã9{/õ8öQ(9hSÿ8îã9À:#9‚29ŒèF9¼i-9gL9ºQ9¾V[9ŒèF9e9îËo9®j9®j9Aêt9ºQ9ŒèF9gL9gL9Aêt9÷z9(9(9÷z9®j9ƒ:V9e9hs`9gL9¾V[9ºQ9ŒèF9ºQ9gL9,ÎA9ºQ9ŒèF9gL9ŒèF9,ÎA9À:#9öQ(9J´<9ŒèF9J´<9ƒ:V9hs`9Aêt9÷z9îËo9îËo9hs`9,ÎA9¼i-9,ÎA9J´<9²ø9êš79ŒèF9J´<9öQ(9hSÿ89 $9À:#9öQ(9ÓÏ 9hSÿ8Kìà8²ø9²ø9öQ(9öQ(9h¼9J´<9‚29¼i-99gL9gL9ŒèF9êš79J´<9J´<9ºQ9ƒ:V9¾V[9gL9¾V[9hs`9‚29¼i-9ŒèF9ŒèF9hs`9ƒ:V9ƒ:V9ƒ:V9ƒ:V9÷z9îËo9Aêt9Aêt9÷z9e9¾V[9e9ƒ:V9(9¾V[9îËo9gL9ƒ:V9hs`9hs`9gL9J´<9¾V[9ŒèF9ºQ9‚29öQ(9ŒèF9¼i-9¼i-9öQ(9ŒèF9¼i-9À:#9 $9hSÿ8îã9 $9{/õ8 ë8.ÍÖ8h¼9.ÍÖ8ÓÏ 9 ë8hSÿ8hSÿ8.ÍÖ8ЯÌ8¦M¤8c®8nd8¦M¤8Ã<8‰8‰8Ã<8•z‰7‰8 +ì6Èt ¶[ල´"6ä—Õ·[à¶ú°7‰8Ã<8Ã<8P8nd8¦M¤8»)8|:š8Ž†8c®8.ÍÖ8G”Â8{/õ8.ÍÖ8G”Â8 ë8²ø99ÓÏ 9²ø9²ø9 $9À:#99öQ(9¼i-9îã9h¼9‚29J´<9¼i-9J´<99ŒèF9J´<9J´<9gL9²ø9öQ(9²ø99²ø9îã99²ø9ÓÏ 9ЯÌ8 ë8ЯÌ8Kìà8¦M¤8Ž†8P8nd8c®8I x8P8IšØ7Ã<8IšØ7‰8IšØ7½´"6IšØ7?JD7[ච+ì6½´"6[à¶ìù­·:}†·:}†·W>·ä—Õ·Šb¸¤‚&¸¤‚&¸˜¸6€N¸Šb¸öv™¸öv™¸~ë˸öv™¸¤¶·¸¤¶·¸8Ÿ­¸~ë˸8Ÿ­¸¶'à¸öv™¸}}:¸öv™¸ušv¸}}:¸}}:¸ä—Õ·W>·[ල´"6 Qý·½´"6:}†·ìù­·W>·[à¶:}†·W>·:}†· Qý·Èt ¶•z‰7[à¶ä—Õ·½´"6?JD7[à¶Ã<8c®8»)8nd8Ã<8P8I x8»)8Ž†8»)8¬z¸8Kìà8hSÿ8{/õ8{/õ8hSÿ8 $99À:#9‚29¼i-9,ÎA9¼i-9 $9öQ(9êš79hSÿ8{/õ8{/õ8ЯÌ8îã9 ë8ЯÌ8|:š8.ÍÖ8|:š8¦M¤8Ž†8|:š8¬z¸8»)8P8Ž†8¬z¸8nd8‰8‰8IšØ7[ච+ì6ìù­·ä—Õ·}}:¸ Qý·Šb¸8Ÿ­¸ušv¸8Ÿ­¸~ë˸󉣸`Hê¸8Ÿ­¸~ë˸ÐÁ¸~ë˸öv™¸8Ÿ­¸ÐÁ¸`Hê¸8Ÿ­¸öv™¸kX…¸ef¸ef¸kX…¸ušv¸ÐÁ¸Šb¸ušv¸6€N¸}}:¸ä—Õ·˜¸}}:¸˜¸:}†·[à¶W>·W>·W>·½´"6Èt ¶ +ì6‰8½´"6IšØ7•z‰7IšØ7ú°7ú°7¨*8‰8 +ì6?JD7ú°7IšØ7IšØ7 +ì6ä—Õ·[ල´"6?JD7½´"6ú°7ú°7Èt ¶ +ì6ú°7P8IšØ7ú°7IšØ7J(8J(8J(8IšØ7ú°7[à¶Èt ¶•z‰7?JD7‰8nd8?JD7[à¶Èt ¶ Qý·ä—Õ·˜¸Šb¸6€N¸öv™¸6€N¸6€N¸kX…¸Šb¸8Ÿ­¸8Ÿ­¸ó‰£¸ó‰£¸öv™¸ef¸8Ÿ­¸ÐÁ¸ó‰£¸ó‰£¸~ë˸¤¶·¸8Ÿ­¸ó‰£¸ušv¸öv™¸Šb¸}}:¸¤‚&¸ó‰£¸ef¸ó‰£¸}}:¸˜¸Šb¸6€N¸ó‰£¸¤¶·¸öv™¸Šb¸öv™¸ušv¸ Qý·½´"6W>·?JD7 +ì6½´"6?JD7IšØ7Ã<8?JD7¨*8J(8Ã<8P8I x8|:š8¦M¤8¦M¤8»)8.ÍÖ8I x8»)8I x8‰8Ž†8Ã<8I x8P8»)8|:š8nd8IšØ7‰8Ã<8‰8Ã<8¨*8•z‰7ú°7IšØ7ú°7[à¶[ල´"6:}†·ìù­·W>·:}†·ìù­·?JD7½´"6[à¶ìù­·:}†· Qý·¤‚&¸ušv¸ušv¸¤¶·¸ó‰£¸öv™¸ÐÁ¸¹Ö¸¶'à¸`H긶'à¸8Ÿ­¸wŽþ¸¥jô¸ÐÁ¸¥jô¸âY¹`H긹Ö¸âY¹ÐÁ¸¤¶·¸ÐÁ¸¤¶·¸ÐÁ¸ušv¸8Ÿ­¸ó‰£¸~ë˸ÐÁ¸ÐÁ¸¤¶·¸kX…¸ušv¸ušv¸ó‰£¸kX…¸öv™¸ef¸ef¸¤‚&¸Šb¸öv™¸Šb¸Šb¸}}:¸kX…¸Šb¸öv™¸öv™¸ušv¸6€N¸}}:¸kX…¸6€N¸[චQý·ìù­·W>· Qý·[ච+ì6[ල´"6½´"6Èt ¶˜¸W>· Qý·:}†·:}†·Èt ¶?JD7ìù­·[චQý·ìù­·ìù­· Qý·˜¸ušv¸Šb¸ušv¸6€N¸ušv¸ušv¸¤‚&¸[ඤ‚&¸6€N¸ušv¸kX…¸kX…¸8Ÿ­¸¹Ö¸¶'à¸wŽþ¸âY¹–¹`Hê¸L¹^«¹–¹^«¹ï'¹î77¹2¹M×U¹kA¹Ž»P¹¬Jj¹Ä~¹‹¥y¹M×U¹M×U¹s…F¹kA¹î77¹M×U¹s…F¹‘ho¹1-e¹DQ<¹óZ¹óZ¹óZ¹s…F¹s…F¹s…F¹E K¹E K¹DQ<¹î77¹Ž»P¹2¹ï'¹^«¹`Hê¸`H긖¹âY¹âY¹`Hê¸`H긹Ö¸~ë˸¹Ö¸wŽþ¸¥jô¸>m ¹>m ¹¤¶·¸âY¹âY¹>m ¹`H긹Ö¸¹Ö¸¶'à¸~ë˸¤¶·¸ÐÁ¸~ë˸¹Ö¸ÐÁ¸¹Ö¸ef¸Šb¸Šb¸}}:¸Šb¸ÐÁ¸ÐÁ¸¤¶·¸öv™¸ÐÁ¸`H긥jô¸¤¶·¸¶'à¸ÐÁ¸¹Ö¸ÐÁ¸ÐÁ¸wŽþ¸`Hê¸wŽþ¸ÐÁ¸~ë˸¥jô¸wŽþ¸wŽþ¸ï×"¹âY¹L¹Ô-¹ï'¹Ô-¹kA¹î77¹Ž»P¹E K¹2¹DQ<¹Ž»P¹kA¹ï×"¹î77¹DQ<¹kA¹kA¹E K¹î77¹YÁ¹ï×"¹L¹ï×"¹DQ<¹YÁ¹–¹wŽþ¸L¹^«¹âY¹~ë˸ÐÁ¸¶'ูÖ¸¤¶·¸¶'à¸ó‰£¸ušv¸˜¸6€N¸¤‚&¸:}†·˜¸ä—Õ·W>·W>·•z‰7?JD7?JD7?JD7IšØ7ú°7Èt ¶ +ì6W>·[à¶ú°7•z‰7•z‰7IšØ7Ã<8IšØ7‰8IšØ7½´"6J(8•z‰7ú°7‰8ú°7[ච+ì6½´"6?JD7ú°7IšØ7 +ì6 +ì6Èt ¶:}†·Èt ¶ +ì6 Qý·:}†·ä—Õ·6€N¸ušv¸¤¶·¸ÐÁ¸8Ÿ­¸¹ָ󉣸8Ÿ­¸¹Ö¸¶'à¸~ë˸wŽþ¸>m ¹¹Ö¸¶'à¸âY¹–¹âY¹–¹ï'¹YÁ¹ï×"¹î77¹2¹kA¹Ž»P¹î77¹kA¹Ž»P¹2¹ï×"¹2¹E K¹2¹s…F¹!`¹E K¹î77¹YÁ¹L¹–¹¥jô¸¤¶·¸¥jô¸¶'à¸öv™¸öv™¸öv™¸Šb¸˜¸Šb¸ Qý·öv™¸8Ÿ­¸6€N¸öv™¸˜¸ušv¸öv™¸Šb¸öv™¸öv™¸¶'ูÖ¸¹Ö¸wŽþ¸âY¹`Hê¸`H긖¹¥jô¸L¹–¹âY¹`Hê¸L¹^«¹2¹2¹ï'¹ï×"¹^«¹>m ¹>m ¹ï×"¹YÁ¹^«¹E K¹ï×"¹ï'¹M×U¹M×U¹Ž»P¹Ä~¹1-e¹óZ¹‘ho¹!`¹¬Jj¹!`¹¬Jj¹óZ¹Ž»P¹1-e¹óZ¹!`¹‡¹‘ho¹ñ„¹‡¹‹¥y¹Û†t¹óZ¹1-e¹‘ho¹ò¹‘ho¹‘ho¹Ä~¹1-e¹‹¥y¹óZ¹¬Jj¹Û†t¹Ž»P¹óZ¹s…F¹2¹YÁ¹Ô-¹âY¹ï×"¹–¹ï'¹^«¹`H긖¹wŽþ¸¤¶·¸~ë˸öv™¸Šb¸kX…¸öv™¸Šb¸˜¸¤‚&¸˜¸[à¶Èt ¶W>·½´"6?JD7•z‰7¨*8IšØ7P8J(8Ã<8I x8.ÍÖ8|:š8¬z¸8¬z¸8¬z¸8ЯÌ8I x8¦M¤8¬z¸8.ÍÖ8»)8|:š8I x8¦M¤8G”Â8I x8Ž†8»)8Ž†8Ã<8P8 +ì6ú°7IšØ7½´"6W>·¤‚&¸:}†·ä—Õ·˜¸¤‚&¸ Qý·ä—Õ·6€N¸ušv¸Šb¸~ë˸¤‚&¸öv™¸ÐÁ¸ó‰£¸ó‰£¸öv™¸Šb¸ušv¸kX…¸¤¶·¸¹Ö¸ÐÁ¸ó‰£¸¤¶·¸ef¸6€N¸öv™¸ó‰£¸6€N¸¤‚&¸6€N¸˜¸˜¸Šb¸ušv¸6€N¸¤‚&¸˜¸}}:¸Šb¸kX…¸ Qý·˜¸:}†·[ච+ì6½´"6¨*8P8‰8•z‰7ú°7•z‰7nd8J(8‰8‰8•z‰7 +ì6 +ì6 +ì6IšØ7IšØ7?JD7¨*8 +ì6J(8IšØ7ú°7¨*8‰8ú°7ú°7ú°7•z‰7J(8¦M¤8Ã<8¨*8•z‰7ìù­·ú°7Èt ¶W>·Èt ¶?JD7?JD7 +ì6 +ì6ìù­·[ල´"6:}†·W>·ìù­· +ì6:}†·}}:¸ä—Õ·ìù­·ä—Õ·ìù­·¤‚&¸?JD7 Qý·:}†·?JD7ú°7ú°7W>· +ì6IšØ7Ã<8ú°7Èt ¶?JD7ìù­·Èt ¶Èt ¶½´"6Èt ¶½´"6½´"6¨*8nd8‰8½´"6?JD7W>·:}†·Èt ¶[à¶[à¶?JD7‰8 +ì6J(8»)8nd8|:š8J(8»)8ЯÌ8Ž†8Ž†8|:š8ЯÌ8c®8c®8¬z¸8.ÍÖ8Kìà8ЯÌ8ЯÌ8 ë8À:#9Kìà8.ÍÖ8ÓÏ 9{/õ8h¼9ÓÏ 9h¼9{/õ8hSÿ8ÓÏ 99îã9Kìà8.ÍÖ8.ÍÖ8Kìà8Kìà8nd8c®8G”Â8ЯÌ8ЯÌ8I x8nd8Ž†8Ã<8¬z¸8|:š8Ã<8P8»)8IšØ7I x8I x8P8Ã<8¨*8I x8J(8J(8‰8J(8IšØ7¨*8IšØ7ú°7[à¶W>·ìù­·W>·˜¸:}†·Èt ¶˜¸Èt ¶IšØ7¨*8 +ì6½´"6 +ì6˜¸}}:¸6€N¸˜¸W>·•z‰7ìù­·½´"6˜¸¨*8Èt ¶ìù­·•z‰7?JD7:}†·½´"6:}†· Qý·:}†·[à¶W>·IšØ7Èt ¶?JD7ìù­·W>·Èt ¶ìù­· Qý·:}†·[à¶[ච+ì6W>·˜¸Èt ¶W>·ä—Õ·ìù­·˜¸}}:¸}}:¸W>·ä—Õ·öv™¸¤‚&¸˜¸˜¸ Qý·˜¸W>·•z‰7ìù­·:}†·Èt ¶ä—Õ· Qý·:}†·¤‚&¸[à¶W>·•z‰7[඘¸:}†· Qý·Šb¸öv™¸Šb¸ušv¸öv™¸6€N¸öv™¸öv™¸ó‰£¸¤¶·¸Šb¸8Ÿ­¸~ë˸`Hê¸ÐÁ¸¹Ö¸ÐÁ¸¶'à¸âY¹`Hê¸`Hê¸~ë˸~ë˸ÐÁ¸ÐÁ¸¹Ö¸8Ÿ­¸`H긤¶·¸~ë˸~ë˸¹ָ󉣸8Ÿ­¸~ë˸¤¶·¸¤¶·¸~ë˸¶'à¸`Hê¸ef¸¤¶·¸`H긹Ö¸¤¶·¸ušv¸ušv¸ef¸öv™¸ó‰£¸ušv¸ó‰£¸6€N¸öv™¸¤¶·¸öv™¸ušv¸ó‰£¸6€N¸ó‰£¸ó‰£¸˜¸˜¸¤‚&¸:}†·W>·ä—Õ·W>·Èt ¶ä—Õ·˜¸W>·¤‚&¸˜¸6€N¸˜¸˜¸ef¸ÐÁ¸öv™¸öv™¸kX…¸¤¶·¸öv™¸ó‰£¸¥jô¸¹Ö¸`Hê¸öv™¸¤¶·¸ó‰£¸8Ÿ­¸ÐÁ¸¶'à¸~ë˸¶'à¸wŽþ¸–¹>m ¹–¹^«¹–¹>m ¹`Hê¸>m ¹2¹L¹¥jô¸–¹Ô-¹¥jô¸âY¹`Hê¸L¹¥jô¸âY¹L¹>m ¹¶'à¸ÐÁ¸ÐÁ¸ÐÁ¸ÐÁ¸~ë˸~ë˸~ë˸¤¶·¸ÐÁ¸ó‰£¸8Ÿ­¸Šb¸kX…¸ó‰£¸Šb¸öv™¸Šb¸6€N¸Šb¸Šb¸ef¸ušv¸Šb¸Šb¸¤‚&¸˜¸}}:¸}}:¸6€N¸˜¸ Qý·¤‚&¸}}:¸}}:¸¤‚&¸}}:¸Šb¸kX…¸Šb¸8Ÿ­¸~ë˸kX…¸ó‰£¸öv™¸ó‰£¸ó‰£¸}}:¸ó‰£¸¹Ö¸`Hê¸>m ¹–¹YÁ¹L¹>m ¹>m ¹î77¹¹Ö¸¶'ึ'ลjô¸âY¹YÁ¹YÁ¹ï×"¹–¹L¹ï'¹î77¹DQ<¹kA¹M×U¹óZ¹¬Jj¹!`¹E K¹kA¹1-e¹s…F¹î77¹Ô-¹2¹ï×"¹Ž»P¹2¹Ž»P¹E K¹E K¹M×U¹M×U¹M×U¹E K¹kA¹î77¹Ô-¹ï×"¹^«¹–¹wŽþ¸¶'ึ'à¸âY¹âY¹wŽþ¸¥jô¸8Ÿ­¸`Hê¸ušv¸öv™¸ó‰£¸kX…¸öv™¸ušv¸6€N¸Šb¸ä—Õ·ä—Õ·ìù­·W>·Èt ¶¨*8W>·¨*8‰8P8Ã<8 +ì6•z‰7¨*8[à¶Èt ¶ +ì6:}†·½´"6½´"6•z‰7ú°7P8J(8‰8‰8?JD7•z‰7•z‰7ú°7•z‰7?JD7IšØ7•z‰7IšØ7•z‰7Èt ¶ìù­·Èt ¶½´"6:}†·Èt ¶W>·˜¸ Qý·W>·?JD7 +ì6[à¶ìù­·½´"6[à¶[à¶[à¶ìù­·½´"6[à¶[à¶[à¶:}†·[ල´"6ä—Õ·ä—Õ·¤‚&¸ìù­·Èt ¶½´"6 +ì6Èt ¶˜¸}}:¸¤‚&¸Šb¸öv™¸¤‚&¸:}†·kX…¸ušv¸öv™¸Šb¸Èt ¶ìù­·ìù­·Èt ¶ä—Õ·W>·[à¶[ච+ì6Èt ¶J(8•z‰7‰8Ã<8‰8nd8IšØ7ú°7Ã<8nd8¨*8?JD7Ã<8nd8»)8G”Â8ЯÌ8{/õ8 ë8ЯÌ8h¼9²ø9 $99 $9öQ(9öQ(9êš79 $9¼i-9J´<9ŒèF9¼i-9¼i-9êš79J´<9gL9ŒèF9hs`9gL9êš79êš79ŒèF9,ÎA9êš79êš79¾V[9gL9ŒèF9‚29hSÿ8²ø9îã9îã9öQ(9îã9ÓÏ 9{/õ8h¼9²ø9.ÍÖ8ÓÏ 9G”Â8Kìà8.ÍÖ8G”Â8 ë8îã9îã9²ø9 $9À:#9‚29J´<9¼i-9ŒèF9À:#9îã9{/õ8À:#9 $9‚29 $9 $9 $9²ø9 $9À:#9À:#9 $9‚29,ÎA9êš79J´<9,ÎA9À:#9J´<9ºQ9ƒ:V9Aêt9¾V[9gL9¾V[9hs`9hs`9ƒ:V9ºQ9÷z9²³„9Æ#‚9Æ#‚9²³„9îËo9®j9÷z9îËo9÷z9(9(9e9ŠdŒ9îËo9²³„9Aêt9Æ#‚9®j9÷z9÷z9e9Æ#‚9îËo9e9gL9¾V[9ºQ9Aêt9ƒ:V9îËo9ÍC‡9Aêt9¾V[9îËo9¾V[9ºQ9gL9gL9ºQ9hs`9îËo9÷z9e9e9¾V[9gL9e9÷z9(9ÍC‡9(9hs`9Aêt9Æ#‚9îËo9¾V[9e9÷z9Aêt9Æ#‚9e9îËo9®j9hs`9e9²³„9(9hs`9®j9Aêt9îËo9e9²³„9Ô‰9Æ#‚9ÍC‡9(9ŠdŒ9Z9™9Z9™9f\ž9ÌÊ›9¨6«9€£9‡î²9äaÂ9v¸9äaÂ9^‰Ç9^‰Ç9‘õÄ9JÊ9‘õÄ9äaÂ9Wο9äaÂ9‘õÄ9‘õÄ9ë:½9äaÂ9 §º9äaÂ9‘õÄ9^‰Ç9U±Ì9äaÂ9ë:½9JÊ9^‰Ç9ë:½9‘õÄ9M—Ù9~EÏ9JÊ9JÊ9ÅÙÑ9 ,Ü9ÅÙÑ9^‰Ç9äaÂ9‡î²9Ä[°9P¤¨9¨6«9v¸9(î 9Ä[°9P¤¨9$É­9mµ9$É­9¦9$É­9ÌÊ›9P¤¨9$É­9€£9v¸9P¤¨9ÌÊ›9Z9™9f\ž9f\ž9Z9™9ï”9Aêt9²³„9ŠdŒ9Aêt9ø…‘9f\ž9ÍC‡9Ô‰9,õŽ9¨–9$É­9Ä[°9¨6«9Ä[°9Ä[°9Wο9$É­9ë:½9ë:½9äaÂ9Wο9^‰Ç9~EÏ9ÅÙÑ9~EÏ9JÊ9Wο9~EÏ9~EÏ9‘õÄ9^‰Ç9‘õÄ9­×9*nÔ9U±Ì9­×9*nÔ9ÅÙÑ9ÅÙÑ9M—Ù9 ,Ü9Pö9âÀÞ9èêã9<@î93—ø9„kó9]é9M—Ù9<@î9¼,:ÒÕð9„kó9„kó9]é9¾ªë9ÒÕð9 ,Ü9<@î9Pö9ÒÕð9<@î9¾ªë9„kó9HÃý9]é9Pö9„kó9èêã9€æ9­×9âÀÞ9èêã9M—Ù9¾ªë9]é9×Uá9]é9*nÔ9­×9ÅÙÑ9ë:½9 §º9Ä[°9 §º9‡î²9Ä[°9€£9‡î²9¦9¦9¨6«9¦9¦9$É­9Ä[°9f\ž9¨–9Z9™9,õŽ9¨–9ï”9ø…‘9ÌÊ›9¦9€£9¦9ï”9¨–9Z9™9¨–9ø…‘9ÍC‡9f\ž9ï”9f\ž9¨–9f\ž9ï”9ï”9ï”9ÌÊ›9(î 9€£9¦9 §º9€£9f\ž9€£9,õŽ9ÌÊ›9f\ž9f\ž9¦9Z9™9¨–9f\ž9¨–9¨–9Ô‰9ø…‘9ø…‘9ŠdŒ9Æ#‚9Æ#‚9®j9Æ#‚9hs`9gL9hs`9gL9(9ºQ9ºQ9¾V[9¾V[9hs`9îËo9gL9gL9ºQ9¾V[9gL9Aêt9e9ŒèF9ºQ9,ÎA9¼i-9 $9À:#9öQ(9¼i-9êš79 $9öQ(9 $9 $9 $9 $9hSÿ8ÓÏ 9Kìà8ÓÏ 9h¼9ЯÌ8G”Â8G”Â8ЯÌ8h¼9h¼9.ÍÖ8c®8¬z¸8Ž†8»)8c®8nd8¨*8IšØ7ú°7P8‰8‰8Ã<8IšØ7Ã<8J(8‰8Ã<8¨*8IšØ7?JD7•z‰7IšØ7Èt ¶[à¶Èt ¶˜¸ Qý·[à¶Èt ¶W>·ìù­·½´"6½´"6Èt ¶¤‚&¸[à¶Èt ¶[à¶ìù­·Šb¸ìù­·˜¸˜¸˜¸ó‰£¸¤¶·¸8Ÿ­¸`Hê¸8Ÿ­¸¥jô¸¤¶·¸ÐÁ¸L¹YÁ¹L¹ï×"¹^«¹L¹–¹DQ<¹Ô-¹Ô-¹î77¹s…F¹Û†t¹Ä~¹Ž»P¹!`¹M×U¹Ž»P¹!`¹¬Jj¹ò¹ñ„¹Ä~¹Û†t¹ò¹‡¹7v–¹&T‘¹C¼ ¹(N£¹7v–¹í˜›¹(N£¹¼²¹C¼ ¹rOµ¹Î)°¹¼²¹¼²¹xâ·¹xâ·¹Ý/¹<Ô¹RWǹè½¹ˆÃĹˆÃĹjϹ;ëɹ¼²¹Rœ¿¹C̹C̹jϹRWǹRWǹRWǹÝ/¹Rœ¿¹xâ·¹ uº¹Î)°¹Î)°¹¼²¹¼²¹è½¹Rœ¿¹¼²¹è½¹ˆÃĹÎ)°¹xâ·¹rOµ¹RWǹC̹¼²¹è½¹Ý/¹ uº¹1—­¹1—­¹ uº¹rOµ¹¼²¹C¼ ¹哹cr¨¹2ॹ2ॹ혛¹·«¹~™¹&T‘¹í˜›¹C¼ ¹7v–¹&T‘¹~™¹í˜›¹·«¹·«¹Î)°¹è½¹Î)°¹ uº¹Ý/¹ˆÃĹC̹1eÙ¹jϹ°§Ñ¹1eÙ¹°§Ñ¹°§Ñ¹ÂŽÞ¹Ä¸ã¹“x빓xë¹î¹´#á¹î¹Ä¸ã¹Ä¸ã¹î¹3ãè¹S9󹤣𹟺t@ºŸºŸºò©ºÂ^ºò©ºÿdø¹Ÿº‘ý¹t@º-õºÂ^ºŸº-õº“xë¹îMæ¹üúú¹ÂŽÞ¹”ÐÖ¹3ã蹤£ð¹“xë¹ÂŽÞ¹ëùÛ¹“x빓xë¹ëùÛ¹”ÐÖ¹<Ô¹C̹°§Ñ¹xâ·¹¼²¹¼²¹Î)°¹C¼ ¹cr¨¹í˜›¹(N£¹·«¹í˜›¹í˜›¹&T‘¹&T‘¹哹7v–¹]ÃŽ¹ñ„¹Û†t¹‘ho¹1-e¹Ä~¹ñ„¹‘ho¹哹哹¿2Œ¹7v–¹C¼ ¹„*ž¹cr¨¹C¼ ¹]ÃŽ¹哹7v–¹(N£¹~™¹(N£¹í˜›¹哹„*ž¹哹혛¹2ॹ¼²¹¼²¹è½¹xâ·¹Ý/¹jϹˆÃĹ;ëɹ<Ô¹°§Ñ¹C̹<Ô¹;ëɹÝ/¹C̹<Ô¹ëù۹轹RWǹjϹÝ/¹RWǹëù۹Ž޹ëù۹ĸã¹<Ô¹RWǹC̹<Ô¹jϹ°§Ñ¹”ÐÖ¹<Ô¹1eÙ¹°§Ñ¹1eÙ¹ëùÛ¹;ëɹRœ¿¹RWǹ uº¹1—­¹Î)°¹xâ·¹cr¨¹1—­¹(N£¹~™¹&T‘¹(N£¹7v–¹C¼ ¹~™¹~™¹]ÃŽ¹M¢‰¹¬Jj¹Ä~¹ò¹¬Jj¹ñ„¹‹¥y¹!`¹¬Jj¹‹¥y¹1-e¹1-e¹M×U¹1-e¹1-e¹s…F¹!`¹‘ho¹kA¹1-e¹óZ¹kA¹kA¹!`¹E K¹óZ¹kA¹Ž»P¹óZ¹Ž»P¹Û†t¹E K¹1-e¹‘ho¹óZ¹Ž»P¹M×U¹!`¹!`¹kA¹DQ<¹ï'¹î77¹2¹s…F¹‘ho¹M×U¹2¹DQ<¹Û†t¹î77¹DQ<¹Ô-¹YÁ¹ï×"¹YÁ¹ï×"¹YÁ¹ï'¹YÁ¹ï'¹î77¹kA¹î77¹Ô-¹kA¹2¹2¹DQ<¹2¹Ô-¹kA¹ï×"¹L¹Ô-¹wŽþ¸¥jô¸^«¹2¹ï×"¹–¹wŽþ¸î77¹–¹YÁ¹YÁ¹ï'¹wŽþ¸L¹¶'à¸âY¹¶'à¸^«¹>m ¹¶'à¸~ë˸¤¶·¸¹Ö¸8Ÿ­¸8Ÿ­¸ušv¸ušv¸ Qý·:}†·˜¸ä—Õ·:}†·[ච+ì6Èt ¶•z‰7:}†·Èt ¶½´"6Ã<8•z‰7Èt ¶ú°7‰8P8I x8‰8¨*8J(8IšØ7¨*8Ã<8¨*8IšØ7ú°7?JD7•z‰7ú°7•z‰7[à¶IšØ7Èt ¶P8I x8|:š8Ž†8Ã<8Ã<8¨*8‰8P8nd8‰8‰8 +ì6W>·•z‰7IšØ7Èt ¶P8¨*8nd8I x8¨*8Ã<8‰8?JD7»)8P8c®8|:š8G”Â8G”Â8¦M¤8G”Â8.ÍÖ8G”Â8¬z¸8hSÿ8 ë8îã9{/õ8ЯÌ8ЯÌ8Kìà8hSÿ8h¼9îã9 $9²ø9hSÿ8îã9h¼9 $999îã9îã99îã9À:#99êš79,ÎA9,ÎA9,ÎA9,ÎA9îËo9hs`9,ÎA9hs`9¾V[9¾V[9ŒèF9ºQ9gL9¾V[9‚29 $9,ÎA9¼i-9 $99 ë8²ø9À:#9²ø9ÓÏ 9ÓÏ 9G”Â8{/õ8.ÍÖ8G”Â8{/õ8¬z¸8»)8ЯÌ8¦M¤8¬z¸8nd8I x8|:š8‰8Ã<8P8¨*8nd8P8P8¨*8I x8P8»)8¦M¤8¦M¤8G”Â8|:š8¬z¸8.ÍÖ8G”Â8nd8»)8¬z¸8Kìà8hSÿ8À:#9hSÿ8G”Â8hSÿ8Kìà8ÓÏ 9îã9îã9²ø9ÓÏ 9²ø9 ë8 ë8.ÍÖ8 ë8h¼9ÓÏ 9Kìà8h¼9²ø9,ÎA9¼i-9J´<9J´<9êš79ŒèF9hs`9¼i-9‚29öQ(9êš79gL9J´<9J´<9gL9gL9êš79êš79,ÎA9,ÎA9¼i-9êš79gL9¾V[9J´<9‚29êš79²ø99ÓÏ 9öQ(9²ø9h¼9{/õ8 ë8 ë8h¼9²ø9Kìà8G”Â8c®8¬z¸8G”Â8nd8¦M¤8I x8nd8Ã<8nd8Ã<8IšØ7 +ì6IšØ7W>·ìù­·[඘¸:}†·¤‚&¸Šb¸Šb¸6€N¸Šb¸˜¸¤‚&¸}}:¸}}:¸öv™¸öv™¸8Ÿ­¸öv™¸8Ÿ­¸¤¶·¸öv™¸¤‚&¸öv™¸Šb¸¤‚&¸6€N¸ Qý· Qý·öv™¸}}:¸ä—Õ· Qý·}}:¸ä—Õ·Šb¸ef¸öv™¸¤‚&¸W>·ä—Õ·¤‚&¸ä—Õ·½´"6Èt ¶½´"6ú°7J(8¨*8¨*8IšØ7•z‰7¨*8I x8‰8nd8J(8I x8nd8nd8J(8Ã<8P8 +ì6‰8¨*8IšØ7•z‰7¨*8ú°7ú°7:}†·:}†·:}†·ìù­·¤‚&¸}}:¸˜¸öv™¸ó‰£¸}}:¸}}:¸Šb¸6€N¸:}†·:}†·ä—Õ·W>·ìù­·ó‰£¸Šb¸}}:¸6€N¸Šb¸Šb¸`Hê¸ÐÁ¸öv™¸ÐÁ¸`H긥jô¸`Hê¸wŽþ¸ó‰£¸ÐÁ¸ó‰£¸~ë˸¥jô¸8Ÿ­¸öv™¸öv™¸öv™¸¹Ö¸8Ÿ­¸öv™¸}}:¸6€N¸öv™¸6€N¸kX…¸öv™¸6€N¸ìù­·¤‚&¸ Qý·:}†·½´"6[à¶[à¶ú°7IšØ7•z‰7IšØ7?JD7½´"6½´"6ú°7•z‰7P8P8nd8Ã<8Ã<8J(8I x8c®8nd8G”Â8¦M¤8¬z¸8c®8»)8Ž†8 ë8Ã<8nd8nd8J(8Ã<8Ž†8Ž†8I x8J(8¨*8Ã<8Ã<8P8Ž†8»)8nd8|:š8P8nd8Ã<8¨*8•z‰7Èt ¶[ච+ì6 +ì6¨*8•z‰7•z‰7 +ì6 +ì6ìù­·[඘¸ Qý·:}†·W>·ìù­· Qý·kX…¸ušv¸kX…¸Šb¸ä—Õ·Šb¸ušv¸ušv¸kX…¸¤‚&¸6€N¸ef¸ó‰£¸¤¶·¸Šb¸öv™¸8Ÿ­¸Šb¸öv™¸Šb¸¤‚&¸Šb¸öv™¸˜¸6€N¸6€N¸ìù­·W>·W>·W>·•z‰7Èt ¶ìù­·:}†·ìù­· +ì6 +ì6 +ì6IšØ7‰8•z‰7•z‰7¨*8Ã<8‰8Ã<8½´"6‰8•z‰7ú°7J(8‰8J(8¨*8J(8J(8‰8J(8•z‰7?JD7ú°7Ã<8ú°7 +ì6ú°7•z‰7IšØ7•z‰7J(8IšØ7ú°7•z‰7 +ì6W>·:}†·˜¸?JD7?JD7:}†·Èt ¶Èt ¶ä—Õ·¤‚&¸˜¸6€N¸ušv¸Šb¸öv™¸}}:¸˜¸ušv¸˜¸˜¸ìù­·W>·[ඤ‚&¸Šb¸ Qý·ušv¸¤¶·¸öv™¸Šb¸ó‰£¸6€N¸6€N¸kX…¸}}:¸˜¸ä—Õ·ìù­·W>·?JD7:}†·[à¶ìù­·:}†·?JD7Èt ¶W>·¨*8¨*8‰8P8‰8nd8I x8ЯÌ8ЯÌ8¦M¤8¬z¸8¦M¤8{/õ8ЯÌ8G”Â8¦M¤8c®8IšØ7|:š8¦M¤8J(8Ž†8‰8nd8P8P8¨*8P8Ã<8IšØ7Ã<8IšØ7Ã<8Ã<8Ã<8‰8?JD7 +ì6[à¶[ඉ8:}†·:}†·Èt ¶ìù­·}}:¸ìù­·Èt ¶ìù­· Qý·¤‚&¸6€N¸Šb¸ Qý· Qý·6€N¸¤‚&¸:}†·˜¸ušv¸}}:¸Šb¸Šb¸}}:¸¤‚&¸˜¸ušv¸ó‰£¸Šb¸Šb¸¤¶·¸öv™¸¹Ö¸¤¶·¸¤¶·¸¥jô¸¶'à¸~ë˸ÐÁ¸ÐÁ¸ó‰£¸ef¸öv™¸8Ÿ­¸6€N¸`Hê¸}}:¸˜¸ä—շ󉣸6€N¸ Qý· +ì6 +ì6ìù­·:}†·[à¶:}†·:}†· +ì6[ඨ*8P8¨*8nd8J(8J(8‰8I x8Ž†8I x8IšØ7nd8»)8Ž†8I x8Ã<8¨*8Ž†8Ã<8Ã<8»)8J(8IšØ7IšØ7I x8J(8J(8IšØ7‰8ú°7 +ì6Ã<8‰8•z‰7Èt ¶ +ì6•z‰7[à¶Èt ¶[à¶?JD7Èt ¶?JD7•z‰7‰8Ã<8ú°7¨*8:}†·Èt ¶}}:¸˜¸ Qý·}}:¸kX…¸ÐÁ¸¤¶·¸ÐÁ¸8Ÿ­¸ó‰£¸¶'ฤ¶·¸6€N¸kX…¸ó‰£¸~ë˸öv™¸8Ÿ­¸`Hê¸8Ÿ­¸~ë˸Šb¸öv™¸~ë˸¤¶·¸}}:¸8Ÿ­¸ušv¸ó‰£¸8Ÿ­¸8Ÿ­¸öv™¸~ë˸8Ÿ­¸ó‰£¸öv™¸}}:¸6€N¸ Qý·}}:¸W>·ìù­·½´"6Èt ¶½´"6•z‰7:}†·ìù­·ä—Õ·:}†·:}†·:}†·½´"6W>·˜¸ Qý·ä—Õ·˜¸W>·[à¶:}†·½´"6?JD7[à¶ìù­·?JD7?JD7½´"6 +ì6Èt ¶[඘¸˜¸}}:¸ Qý·:}†·:}†·ìù­·W>·ä—Õ· Qý·ä—Õ·:}†·¤‚&¸}}:¸Šb¸ó‰£¸¹Ö¸ÐÁ¸¹Ö¸¹Ö¸`Hê¸`H긖¹–¹YÁ¹–¹Ô-¹YÁ¹^«¹2¹>m ¹–¹âY¹¶'à¸`Hê¸>m ¹¶'à¸ÐÁ¸YÁ¹^«¹^«¹wŽþ¸–¹>m ¹âY¹¹Ö¸8Ÿ­¸ó‰£¸öv™¸Šb¸¹Ö¸ef¸kX…¸8Ÿ­¸ó‰£¸öv™¸}}:¸8Ÿ­¸¶'à¸ó‰£¸ó‰£¸}}:¸¤‚&¸˜¸ìù­· Qý·ušv¸}}:¸}}:¸ Qý·ìù­·W>·:}†·[à¶:}†·W>·:}†·ä—Õ·[à¶ìù­·ä—Õ·ä—Õ·:}†· +ì6IšØ7Ã<8IšØ7½´"6•z‰7[à¶W>·Èt ¶•z‰7½´"6ú°7 +ì6Èt ¶•z‰7?JD7W>·˜¸:}†·W>·½´"6W>·?JD7½´"6 Qý·[ච+ì6¨*8 +ì6ä—Õ·W>·J(8:}†·Èt ¶Èt ¶ +ì6 +ì6Èt ¶?JD7[à¶?JD7•z‰7IšØ7ú°7½´"6‰8P8‰8‰8J(8Ã<8¨*8P8ú°7‰8?JD7ú°7J(8ú°7¨*8»)8nd8J(8I x8‰8I x8I x8|:š8c®8Kìà8Ž†8G”Â8G”Â8|:š8.ÍÖ8 ë8Kìà8Kìà8h¼9²ø9{/õ8{/õ8ÓÏ 99²ø9hSÿ8{/õ8ÓÏ 9¼i-9À:#9 $999öQ(9‚29êš79¼i-9êš79‚29,ÎA9¼i-9êš79gL9êš79J´<9,ÎA9Æ#‚9Aêt9®j9¾V[9e9hs`9êš79¾V[9ŒèF9,ÎA9‚29ÓÏ 9 $9²ø99ÓÏ 9{/õ8h¼9ЯÌ8G”Â8Kìà8ÓÏ 9G”Â8G”Â8¬z¸8Kìà8c®8¦M¤8ЯÌ8¦M¤8¦M¤8c®8Ž†8|:š8Ž†8Ž†8|:š8nd8Ž†8¦M¤8|Pd|1|24600|2013-282T15:31:57.397 ꫸âÞŒ¸4¡¸4¡¸u]¸Ïî–¸­`ɸ4¡¸TwI¸È}!¸TwI¸+y·ÈžË·~]{µÈ¡*·p6~]{µpB¹¶Þ± 7›•â7›•â7p6 X7pB¹¶ÈžË·p6p6 X7 X7W+8b A8û,}8¬»8ÔÂœ8u±’8•Ö¦8¢ˆ8ÔÂœ8ÔÂœ8”i8’ì°8ÆÅ8•Ö¦8¬»89ö*9¼÷8ä?9#xã8Ç:Ï8¬»8u±’8”i8¢ˆ8¢ˆ8¬»8u±’8Þ -8Ô8Ô8Þ -8û,}8¢ˆ8b A8Þ± 7Ô8”i8û,}8†U8Þ -8’ì°8/îº7b A8b A8Âe“7 X7È¡*·~]{µ~]{µÈ¡*·p6Ž ¸pB¹¶+y·~]{µ‚¤·È¡*·Ž ¸TwI¸ÈžË·–Ñ‚¸âÞŒ¸Ž ¸Ž ¸ÈžË·4¡¸âÞŒ¸âÞŒ¸ê«¸âÞŒ¸ê«¸TwI¸–Ñ‚¸âÞŒ¸‚v5¸âÞŒ¸AŽq¸È}!¸Q󷂤·Þ± 7W+8Þ± 7 X7W+8W+8Þ -8b A8û,}8ÔÂœ8†U8¢ˆ8û,}8†U8•Ö¦8Ô8Þ -8›•â7Þ -8”i8b A8~]{µ›•â7W+8+y·Âe“7W+8›•â7/îº7/îº7Þ -8/îº7Âe“7/îº7Þ -8Þ -8W+8b A8/îº7Âe“7Âe“7/îº7 X7/îº7/îº7Ô8W+8û,}8p6›•â7W+8pB¹¶~]{µÈ¡*·ÈžË·Âe“7È¡*·Þ± 7W+8p6È}!¸pB¹¶È}!¸Ïî–¸4¡¸AŽq¸u]¸TwI¸u]¸u]¸Ïî–¸u]¸u]¸‚v5¸âÞŒ¸âÞŒ¸ÃE¿¸–Ñ‚¸AŽq¸­`ɸâÞŒ¸4¡¸Ïî–¸u]¸4¡¸Ï,µ¸u]¸âÞŒ¸u]¸u]¸TwI¸Ž ¸‚v5¸‚v5¸ÈžË·‚v5¸+y·p6~]{µ+y·Qó·pB¹¶~]{µ X7 X7›•â7/îº7Þ± 7pB¹¶/îº7/îº7Âe“7b A8/îº7Âe“7Þ -8†U8W+8†U8ÔÂœ8¢ˆ8ÔÂœ8û,}8û,}8b A8/îº7Þ -8Þ -8›•â7+y·Þ± 7 X7/îº7b A8/îº7~]{µÈ¡*·+y·~]{µp6È¡*·p6Þ± 7È¡*·Qó·~]{µ+y·AŽq¸4¡¸Ïî–¸TwI¸‚v5¸‚v5¸âÞŒ¸­`ɸœÝ¸ê«¸Ï,µ¸ê«¸âÞŒ¸u]¸u]¸4¡¸ÃE¿¸œÝ¸œÝ¸­`ɸ"Þñ¸Q: ¹B¼ç¸‘ü¸d¹äy¹Q: ¹äy¹?¹?¹ÃE¿¸‘ü¸ê«¸œÝ¸‘ü¸­`ɸÏ,µ¸Ï,µ¸t}Ӹ꫸âÞŒ¸Ïî–¸Ï,µ¸âÞŒ¸Ïî–¸Ž ¸‚¤·+y·È¡*·W+8p6p6+y·p6pB¹¶+y·È¡*·Þ± 7b A8/îº7È¡*· X7~]{µp6›•â7pB¹¶~]{µÂe“7W+8/îº7/îº7 X7Âe“7 X7W+8Þ -8”i8†U8p6›•â7 X7+y·Âe“7/îº7È¡*·›•â7Þ -8/îº7È¡*·Qó·pB¹¶ÈžË·Ž ¸Qó·u]¸Ž ¸‚¤·TwI¸‚v5¸Ïî–¸–Ñ‚¸âÞŒ¸âÞŒ¸u]¸ÈžË·Ž ¸TwI¸È}!¸‚v5¸Qó·ÈžË·Ž ¸pB¹¶ÈžË·p6+y·pB¹¶+y·pB¹¶È¡*·È¡*·ÈžË·Ž ¸Ž ¸Qó·+y·pB¹¶‚¤·+y·pB¹¶+y·TwI¸‚¤·pB¹¶p6 X7Âe“7Âe“7p6/îº7Âe“7W+8†U8†U8Þ± 7/îº7pB¹¶p6/îº7/îº7W+8pB¹¶b A8p6/îº7/îº7 X7Ô8û,}8/îº7Ô8W+8†U8¢ˆ8’ì°8”i8†U8b A8†U8’ì°8ÔÂœ8b A8•Ö¦8†U8W+8 X7+y·p6p6Âe“7pB¹¶ X7Q󷂤·‚¤·Qó·Qó·TwI¸ÈžË·‚¤·u]¸TwI¸È}!¸âÞŒ¸Qó·‚v5¸‚v5¸Qó·4¡¸u]¸u]¸ê«¸­`ɸÏî–¸Ï,µ¸âÞŒ¸4¡¸4¡¸­`ɸ–Ñ‚¸4¡¸4¡¸u]¸AŽq¸u]¸âÞŒ¸È}!¸u]¸ê«¸È}!¸u]¸ê«¸ê«¸âÞŒ¸Ï,µ¸âÞŒ¸TwI¸âÞŒ¸âÞŒ¸u]¸Qó·ÈžË·‚¤·ÈžË·ÈžË·~]{µpB¹¶Qó· X7Þ± 7 X7Ô8”i8b A8¢ˆ8¢ˆ8†U8›•â7›•â7/îº7/îº7W+8b A8”i8b A8û,}8u±’8¢ˆ8û,}8W+8”i8¢ˆ8†U8†U8W+8~]{µ X7W+8‚¤·+y·pB¹¶TwI¸TwI¸âÞŒ¸4¡¸ê«¸ê«¸ê«¸t}Ó¸AŽq¸TwI¸âÞŒ¸Ž ¸–Ñ‚¸âÞŒ¸Ïî–¸Ïî–¸4¡¸4¡¸Ï,µ¸–Ñ‚¸4¡¸âÞŒ¸Ï,µ¸ê«¸AŽq¸œÝ¸œÝ¸t}Ó¸­`ɸÏ,µ¸t}Ó¸œÝ¸"Þñ¸œÝ¸œÝ¸ÞN¹B¼ç¸o&¹ÞN¹?¹ÞN¹"Þñ¸4¡¸t}Ó¸B¼ç¸4¡¸âÞŒ¸4¡¸âÞŒ¸u]¸4¡¸4¡¸4¡¸4¡¸u]¸‚¤·ÈžË·È}!¸‚v5¸Q󷂤·È¡*·p6Ȟ˷p6›•â7p6Âe“7Þ -8Þ -8”i8¢ˆ8W+8Ô8/îº7Ô8 X7/îº7 X7È¡*·Þ -8W+8È¡*·Þ± 7 X7+y·È¡*·Qó·p6+y·AŽq¸È¡*·u]¸âÞŒ¸–Ñ‚¸âÞŒ¸âÞŒ¸4¡¸4¡¸âÞŒ¸TwI¸u]¸âÞŒ¸TwI¸Ï,µ¸ê«¸ÃE¿¸ê«¸‘ü¸4¡¸AŽq¸B¼ç¸ÃE¿¸B¼ç¸Q: ¹‘ü¸‘ü¸B¼ç¸o&¹"Þñ¸­`ɸÞN¹œÝ¸œÝ¸‘ü¸B¼ç¸t}Ó¸B¼ç¸œÝ¸ê«¸4¡¸"Þñ¸B¼ç¸t}Ó¸Ï,µ¸ÃE¿¸B¼ç¸­`ɸÏ,µ¸âÞŒ¸t}Ó¸ÃE¿¸ê«¸ÃE¿¸Ï,µ¸ê«¸ÃE¿¸4¡¸TwI¸‚¤·ÈžË·Qó·~]{µ/îº7b A8û,}8û,}8û,}8†U8ÔÂœ8Ç:Ï8¼÷8¬»8û,}8Ç:Ï8’ì°8ÆÅ8¬»8’ì°8u±’8”i8û,}8’ì°8Ç:Ï8Ç:Ï8u±’8Ç:Ï8˜XÙ8W™í8ÆÅ8ÆÅ8’ì°8†U8/îº7p6W+8/îº7Þ± 7/îº7Þ± 7~]{µp6/îº7~]{µpB¹¶‚¤·‚v5¸Qó·TwI¸âÞŒ¸AŽq¸4¡¸AŽq¸ÃE¿¸t}Ó¸Ï,µ¸œÝ¸ê«¸­`ɸÏ,µ¸–Ñ‚¸âÞŒ¸–Ñ‚¸Ïî–¸4¡¸Ïî–¸4¡¸âÞŒ¸TwI¸AŽq¸Ž ¸È}!¸âÞŒ¸È}!¸âÞŒ¸âÞŒ¸AŽq¸ÈžË·È}!¸âÞŒ¸ê«¸u]¸âÞŒ¸u]¸ÈžË·Þ± 7p6pB¹¶+y·Âe“7b A8›•â7Âe“7b A8Ç:Ï8•Ö¦8b A8¬»8u±’8¬»8¬»8¼÷8u±’8u±’8˜XÙ8± 99ÆÅ8Ç:Ï8˜XÙ8#xã86ð9ÆÅ8’ì°8¬»8•Ö¦86ð9’ì°8ÔÂœ8’ì°8û,}8”i8b A8¢ˆ8¬»8û,}8u±’8u±’8Þ -8Þ -8û,}8b A8û,}8”i8†U8†U8¢ˆ8”i8b A8Âe“7Âe“7Âe“7Ô8û,}8†U8 X7Þ± 7›•â7pB¹¶Þ -8W+8”i8W+8W+8/îº7p6 X7 X7Þ± 7/îº7pB¹¶~]{µ~]{µÞ± 7Âe“7/îº7‚¤·~]{µpB¹¶ÈžË·+y·pB¹¶p6È¡*·pB¹¶È}!¸‚¤·‚¤·È¡*·È¡*·pB¹¶ X7Âe“7+y·Þ± 7+y·+y·ÈžË·pB¹¶ X7Ô8Ô8û,}8†U8¬»8Ç:Ï8Ç:Ï8’ì°8•Ö¦8ÆÅ8û,}8ÆÅ8˜XÙ8Ç:Ï86ð9#xã899h‚$9uU9ÆÅ86ð9¼÷8#xã89ö*9W™í8W™í8ÆÅ8¢ˆ8u±’8¢ˆ8¢ˆ8u±’8¢ˆ8’ì°8”i8/îº7Ô8›•â7Þ -8ÔÂœ8W+8W+8›•â7Âe“7p6/îº7W+8Þ± 7~]{µÈ¡*·Þ± 7‚¤·‚¤·TwI¸‚v5¸AŽq¸TwI¸ÃE¿¸AŽq¸âÞŒ¸âÞŒ¸Ï,µ¸ÃE¿¸âÞŒ¸u]¸ê«¸­`ɸ­`ɸÏ,µ¸Ïî–¸‚v5¸TwI¸Ïî–¸u]¸–Ñ‚¸‚¤·p6~]{µÞ± 7pB¹¶+y·~]{µÈ}!¸pB¹¶~]{µp6È¡*· X7/îº7›•â7W+8”i8ÔÂœ8•Ö¦8û,}8†U8’ì°8ÔÂœ8¢ˆ8Ç:Ï8˜XÙ8¬»8¼÷8#xã8’ì°8Ç:Ï8’ì°8•Ö¦8¼÷8ä?9¼÷8#xã8¼÷8Ç:Ï8¼÷8˜XÙ8•Ö¦8ÆÅ8#xã8’ì°8’ì°8¬»8Ç:Ï8•Ö¦8•Ö¦8’ì°8’ì°8¢ˆ8’ì°8’ì°8•Ö¦8#xã8ÔÂœ8ÔÂœ8u±’8ÔÂœ8¢ˆ8”i8¢ˆ8†U8b A8†U8W+8Þ -8b A8Ô8 X7pB¹¶p6 X7~]{µ~]{µÈžË·pB¹¶È}!¸Þ± 7Þ± 7Âe“7Âe“7+y·p6W+8Âe“7pB¹¶ÈžË·È¡*·‚¤·+y·p6Þ± 7/îº7/îº7W+8†U8Âe“7Þ± 7Þ -8Þ± 7/îº7†U8û,}8•Ö¦8¢ˆ8Ç:Ï8u±’8•Ö¦8#xã8ÔÂœ8¬»8W™í8•Ö¦8¼÷8uU9uU999ö*9h‚$9­±.9± 9ö*9ä?9ö*9¼÷8uU9Ù)9ä?9ö*9uU9­±.9 ã89¢k9ö*9ä?9± 9¼÷8˜XÙ8W™í86ð9˜XÙ8ÆÅ8Ç:Ï86ð9#xã8#xã8’ì°8u±’8ÔÂœ8”i8ÔÂœ8û,}8›•â7û,}8W+8Þ -8›•â7Âe“7~]{µb A8/îº7Âe“7+y·ÈžË·+y·È}!¸Qó·Ž ¸Ž ¸+y·ÈžË·Þ± 7È¡*·pB¹¶p6+y·È}!¸+y·Qó·Qó·ÈžË·Qó·+y·‚¤·Qó·Ž ¸È¡*·Þ± 7/îº7Qó·p6/îº7†U8b A8†U8/îº7Þ -8”i8†U8ÆÅ8û,}8¢ˆ8Ç:Ï8’ì°8¬»8ÆÅ8u±’8•Ö¦8Ç:Ï8#xã8¼÷8¼÷8Ç:Ï8˜XÙ8’ì°8û,}8•Ö¦8•Ö¦8˜XÙ8•Ö¦8û,}8¢ˆ8û,}8¬»8˜XÙ8¬»8¼÷8¼÷8ÆÅ8’ì°8’ì°8’ì°8¬»8•Ö¦8•Ö¦8¢ˆ8u±’8ÔÂœ8¢ˆ8Ô8†U8Þ± 7 X7~]{µÞ± 7›•â7›•â7Ô8û,}8†U8›•â7È¡*·Þ± 7È¡*·È¡*·‚¤· X7Þ± 7È¡*·È¡*·p6Þ± 7/îº7p6p6È¡*·~]{µ‚¤·~]{µ~]{µQó·Ž ¸È¡*·Ž ¸Qó·ê«¸ê«¸È}!¸Qó·Ž ¸Qó· X7Þ± 7 X7 X7W+8›•â7Âe“7W+8›•â7Âe“7†U8Ô8W+8”i8†U8†U8u±’8b A8†U8•Ö¦8”i8u±’8†U8¢ˆ8b A8”i8’ì°8˜XÙ8¬»8ÆÅ8Ç:Ï8Ç:Ï8ÆÅ8Ç:Ï86ð96ð9#xã8W™í8¼÷8’ì°8#xã8#xã8•Ö¦8¬»8ÆÅ8u±’8¬»8¢ˆ8”i8b A8†U8›•â7b A8b A8Þ± 7pB¹¶ X7Âe“7Âe“7Þ± 7Qó·È}!¸Ž ¸TwI¸‚¤·TwI¸Ž ¸AŽq¸4¡¸u]¸TwI¸u]¸TwI¸–Ñ‚¸âÞŒ¸ê«¸4¡¸4¡¸Ïî–¸Ïî–¸Ï,µ¸AŽq¸‚v5¸–Ñ‚¸âÞŒ¸âÞŒ¸AŽq¸Ïî–¸4¡¸­`ɸÏ,µ¸Ï,µ¸4¡¸TwI¸‚v5¸Ïî–¸u]¸u]¸‚v5¸‚v5¸Ž ¸Ž ¸TwI¸pB¹¶Qó·ÈžË·+y·Þ± 7Âe“7Ô8 X7Ô8b A8u±’8›•â7û,}8†U8W+8”i8”i8”i8ÆÅ8ÔÂœ8¬»8˜XÙ8¬»8¼÷86ð9¼÷8± 9˜XÙ8¬»8ÆÅ8’ì°8b A8u±’8’ì°8û,}8†U8b A8û,}8Þ -8/îº7/îº7›•â7Âe“7~]{µpB¹¶Âe“7Þ± 7pB¹¶p6Ž ¸ÈžË·Qó·TwI¸–Ñ‚¸âÞŒ¸Qó·ÈžË·u]¸Ïî–¸‚¤·Ž ¸Qó·TwI¸Ž ¸ÈžË·u]¸Ïî–¸–Ñ‚¸AŽq¸4¡¸4¡¸–Ñ‚¸ê«¸4¡¸TwI¸Ïî–¸4¡¸4¡¸ÃE¿¸AŽq¸âÞŒ¸Ïî–¸4¡¸ê«¸âÞŒ¸u]¸È}!¸u]¸TwI¸Qó·âÞŒ¸‚v5¸Ž ¸ÈžË·‚v5¸‚¤·ÈžË·ÈžË·p6Ô8›•â7Ô8 X7Þ -8¢ˆ8Þ -8Ô8W+8Âe“7Ô8Âe“7/îº7b A8†U8û,}8†U8Ô8†U8Þ -8W+8›•â7pB¹¶Þ± 7 X7›•â7/îº7p6p6p6~]{µÈžË·ÈžË·È}!¸Ž ¸TwI¸Ž ¸Qó·Ž ¸Qó·È¡*·ÈžË·Qó·Ž ¸È}!¸È}!¸u]¸âÞŒ¸ÃE¿¸AŽq¸u]¸ÃE¿¸œÝ¸"Þñ¸œÝ¸­`ɸ?¹‘ü¸­`ɸo&¹äy¹‘ü¸ÞN¹?¹B¼ç¸­`ɸÏ,µ¸œÝ¸?¹t}Ó¸o&¹?¹"Þñ¸"Þñ¸‘ü¸R!¹äy¹o&¹?¹‘ü¸B¼ç¸R!¹œÝ¸B¼ç¸Q: ¹Q: ¹R!¹äy¹äy¹œÝ¸œÝ¸œÝ¸4¡¸?¹­`ɸ"Þñ¸œÝ¸Ïî–¸ÃE¿¸âÞŒ¸‚v5¸âÞŒ¸TwI¸Ž ¸ X7È¡*·‚¤·Ô8›•â7Âe“7p6pB¹¶Þ± 7Âe“7›•â7Þ± 7~]{µpB¹¶+y·Âe“7Âe“7Þ± 7Âe“7b A8Ô8/îº7Ô8Âe“7W+8~]{µpB¹¶‚¤·Q󷂤·‚¤·pB¹¶ÈžË·‚¤·È}!¸ÈžË·u]¸u]¸âÞŒ¸âÞŒ¸‚v5¸AŽq¸Ï,µ¸­`ɸ"Þñ¸œÝ¸Ï,µ¸TwI¸ê«¸Ï,µ¸Ï,µ¸ÃE¿¸ê«¸‘ü¸4¡¸Ïî–¸­`ɸŽ ¸âÞŒ¸Ïî–¸È}!¸ÃE¿¸Ž ¸u]¸âÞŒ¸ê«¸­`ɸAŽq¸Ž ¸u]¸Ïî–¸4¡¸AŽq¸Ïî–¸Ï,µ¸Ïî–¸œÝ¸AŽq¸È}!¸u]¸‚¤·‚¤·Qó·~]{µ~]{µ~]{µp6Ô8Ô8/îº7 X7Âe“7/îº7Ô8/îº7†U8b A8•Ö¦8û,}8û,}8’ì°8u±’8”i8†U8ÔÂœ8¬»8•Ö¦8”i8’ì°8u±’8¢ˆ8u±’8û,}8†U8 X7p6Ȟ˷‚¤·‚v5¸‚¤·ÈžË·Q󷂤·È}!¸Qó·È}!¸TwI¸u]¸Qó·È¡*·Ž ¸Qó·È}!¸TwI¸ÈžË·È}!¸âÞŒ¸Qó·Ž ¸4¡¸‚v5¸AŽq¸ê«¸âÞŒ¸Ïî–¸TwI¸AŽq¸âÞŒ¸Ïî–¸u]¸Ž ¸Qó·Qó·TwI¸Qó·AŽq¸AŽq¸âÞŒ¸È}!¸Qó·TwI¸‚¤·È}!¸È}!¸ÈžË·‚¤·‚v5¸Qó·pB¹¶+y·pB¹¶Ž ¸~]{µÞ± 7Þ± 7Âe“7”i8¬»8¢ˆ8ÆÅ8Ç:Ï8û,}8•Ö¦8W™í8¼÷86ð9˜XÙ8ö*99Ç:Ï8’ì°8•Ö¦8¢ˆ8W+8u±’8’ì°8ÔÂœ8u±’8Ç:Ï8¢ˆ8b A8û,}8›•â7Ô8†U8Âe“7›•â7Âe“7›•â7Âe“7p6Þ± 7pB¹¶+y·p6È¡*·Qó·+y·‚¤·AŽq¸‚v5¸–Ñ‚¸ÃE¿¸âÞŒ¸4¡¸B¼ç¸B¼ç¸o&¹d¹d¹"Þñ¸ÃE¿¸‘ü¸äy¹‘ü¸d¹?¹X§&¹d¹d¹äy¹R!¹ÞN¹X§&¹d¹o&¹ÞN¹?¹‘ü¸"Þñ¸ê«¸Ïî–¸Ï,µ¸âÞŒ¸âÞŒ¸Ï,µ¸âÞŒ¸Ž ¸+y·+y·p6 X7Ž ¸ÈžË·pB¹¶pB¹¶p6~]{µ X7/îº7Þ -8Ô8W+8›•â7”i8W+8Ô8~]{µp6p6+y·È¡*·pB¹¶ÈžË·+y·Qó·È}!¸Q󷂤·ÈžË·pB¹¶~]{µ+y·‚¤·ÈžË·ÈžË·Qó·Qó·Ž ¸TwI¸âÞŒ¸âÞŒ¸‚v5¸AŽq¸AŽq¸‚v5¸ê«¸4¡¸âÞŒ¸âÞŒ¸ê«¸AŽq¸âÞŒ¸4¡¸ÃE¿¸4¡¸âÞŒ¸Ï,µ¸TwI¸4¡¸ê«¸ê«¸ê«¸Ï,µ¸–Ñ‚¸u]¸ê«¸âÞŒ¸u]¸ÃE¿¸Ïî–¸Ïî–¸–Ñ‚¸TwI¸TwI¸AŽq¸–Ñ‚¸TwI¸Ïî–¸âÞŒ¸âÞŒ¸ÃE¿¸Ïî–¸4¡¸âÞŒ¸4¡¸âÞŒ¸ÃE¿¸4¡¸TwI¸u]¸+y·Qó·‚v5¸È¡*·Ž ¸+y·~]{µÈžË·+y·+y·+y·p6p6‚¤·Þ± 7Þ -8›•â7pB¹¶Þ± 7 X7pB¹¶/îº7~]{µ/îº7/îº7Þ± 7Ô8W+8Ô8W+8Þ -8Þ± 7Ô8Ô8Þ -8ÔÂœ8Ç:Ï8’ì°8ÆÅ8Ç:Ï8¬»8’ì°8ÔÂœ8ÆÅ8Ç:Ï8Ç:Ï8˜XÙ8•Ö¦8’ì°8Ô8”i8¢ˆ8W+8Ô8†U8†U8b A8p6Âe“7p6pB¹¶È¡*·ÈžË·+y·Qó·AŽq¸Ž ¸TwI¸TwI¸È}!¸TwI¸È}!¸È}!¸ê«¸4¡¸–Ñ‚¸Ïî–¸Ï,µ¸ê«¸œÝ¸ÃE¿¸Q: ¹Ï,µ¸ÃE¿¸œÝ¸âÞŒ¸Ïî–¸Ï꫸AŽq¸âÞŒ¸È}!¸u]¸‚v5¸È}!¸Qó·+y·È¡*·Þ± 7~]{µÞ± 7p6+y·~]{µpB¹¶W+8W+8›•â7/îº7Ô8û,}8†U8b A8u±’8•Ö¦8¢ˆ8¢ˆ8’ì°8•Ö¦8¢ˆ8’ì°8û,}8•Ö¦8û,}8Ô8¢ˆ8¬»8ÆÅ8’ì°8’ì°8’ì°8u±’8Âe“7W+8›•â7/îº7/îº7pB¹¶Þ± 7p6Ž ¸‚¤·TwI¸Ž ¸ÈžË·ÈžË·Ž ¸Ž ¸u]¸‚v5¸TwI¸AŽq¸TwI¸È}!¸Qó·Qó·u]¸Ïî–¸u]¸AŽq¸Ž ¸‚v5¸‚v5¸Qó·u]¸TwI¸ê«¸4¡¸u]¸Ï,µ¸ÃE¿¸­`ɸt}Ó¸4¡¸âÞŒ¸TwI¸+y·pB¹¶pB¹¶‚¤·~]{µ+y·+y·~]{µpB¹¶Þ± 7›•â7›•â7Þ -8Þ± 7Þ± 7Þ -8†U8¢ˆ8•Ö¦8•Ö¦8˜XÙ8ÔÂœ8•Ö¦8¼÷8ÆÅ86ð9ö*9h‚$99uU9uU9¢k9uU9­±.9"Ê39Ù)9ä?9¢C9"Ê39h‚$9¢C9"Ê39"Ê39"1H9ö*9± 9ä?9¼÷8¼÷89ö*9¼÷89˜XÙ8ÆÅ8Ç:Ï8¼÷8ÔÂœ8’ì°8Ç:Ï8u±’8ÆÅ8¬»8¬»8Þ -8›•â7Ô8 X7 X7~]{µ+y·‚¤·+y·Q󷂤·Qó·Qó·u]¸AŽq¸‚v5¸Ž ¸‚¤·âÞŒ¸TwI¸‚v5¸u]¸È}!¸‚¤·+y·~]{µ+y·p6pB¹¶pB¹¶ X7 X7pB¹¶Þ± 7Þ -8/îº7›•â7Þ -8Þ± 7Ô8/îº7Âe“7Âe“7Ô8Ô8W+8/îº7Þ± 7 X7W+8”i8Ô8Þ -8ÔÂœ8¢ˆ8¢ˆ8ÔÂœ8”i8W+8û,}8b A8û,}8u±’8ÔÂœ8Ç:Ï8˜XÙ8¼÷8#xã8’ì°8#xã8W™í8W™í8¼÷89ä?9uU9˜XÙ8± 9± 99± 9± 9± 9W™í8#xã86ð9W™í8¼÷8˜XÙ8Ç:Ï8¢ˆ8’ì°8ÔÂœ8b A8Âe“7b A8W+8Þ -8Þ -8/îº7†U8Âe“7 X7pB¹¶–Ñ‚¸–Ñ‚¸‚v5¸Ïî–¸âÞŒ¸ê«¸âÞŒ¸âÞŒ¸‚v5¸TwI¸âÞŒ¸âÞŒ¸âÞŒ¸âÞŒ¸âÞŒ¸4¡¸Ïî–¸TwI¸–Ñ‚¸4¡¸Ïî–¸Ïî–¸Ï,µ¸ÃE¿¸œÝ¸?¹–Ñ‚¸AŽq¸ê«¸4¡¸u]¸âÞŒ¸‚v5¸TwI¸u]¸u]¸TwI¸+y·ÈžË·ÈžË· X7pB¹¶Âe“7Âe“7Ô8b A8/îº7Þ -8Þ± 7 X7W+8Þ± 7/îº7Âe“7/îº7Âe“7pB¹¶ X7p6~]{µpB¹¶ X7È¡*·p6 X7Âe“7W+8Âe“7p6›•â7~]{µ‚¤·‚¤·È}!¸Ž ¸–Ñ‚¸4¡¸Ïî–¸Ïî–¸œÝ¸4¡¸Ï,µ¸4¡¸ê«¸TwI¸4¡¸âÞŒ¸u]¸4¡¸TwI¸TwI¸u]¸u]¸AŽq¸âÞŒ¸–Ñ‚¸‚¤·u]¸‚v5¸‚¤·pB¹¶pB¹¶Qó·Ž ¸Qó·‚v5¸È}!¸‚¤·Ž ¸TwI¸Ž ¸âÞŒ¸u]¸‚v5¸ê«¸4¡¸AŽq¸AŽq¸‚v5¸+y·‚¤·‚¤·ÈžË·pB¹¶Þ± 7~]{µÞ± 7pB¹¶p6‚¤·pB¹¶Qó·Qó·pB¹¶ÈžË·+y·p6p6Þ -8›•â7W+8pB¹¶Ô8b A8†U8Âe“7Âe“7û,}8†U8ÆÅ8˜XÙ8ÆÅ8¼÷8˜XÙ86ð9ÔÂœ8¬»8”i8/îº7†U8/îº7È¡*·pB¹¶È¡*·pB¹¶~]{µÈžË·ÈžË·TwI¸Ž ¸Ž ¸Ž ¸È¡*·È}!¸‚v5¸‚v5¸È}!¸u]¸TwI¸TwI¸‚v5¸‚v5¸Ž ¸TwI¸È}!¸AŽq¸‚v5¸–Ñ‚¸4¡¸4¡¸Ï,µ¸AŽq¸âÞŒ¸‚v5¸u]¸TwI¸Ž ¸u]¸AŽq¸Qó·‚v5¸‚¤·~]{µÈžË·~]{µ‚¤·ÈžË·È}!¸Qó·âÞŒ¸Ž ¸È¡*·TwI¸ÈžË·~]{µQó·È¡*·~]{µp6 X7È¡*·+y·p6Âe“7 X7pB¹¶È¡*·+y·p6+y·/îº7Âe“7›•â7/îº7•Ö¦8’ì°8’ì°8ÆÅ8#xã8Ç:Ï8Ç:Ï86ð99•Ö¦8u±’8Ç:Ï8¬»8¬»8u±’8•Ö¦8u±’8†U8”i8†U8¢ˆ8ÆÅ8˜XÙ8”i8†U8û,}8†U8W+8+y·Ô8pB¹¶Âe“7 X7Þ± 7p6~]{µ X7Qó·Qó·âÞŒ¸­`ɸâÞŒ¸–Ñ‚¸AŽq¸Ï,µ¸âÞŒ¸È}!¸AŽq¸ê«¸4¡¸AŽq¸u]¸Ž ¸âÞŒ¸È}!¸pB¹¶Ž ¸‚¤·È}!¸‚¤·Qó·TwI¸È}!¸‚¤·+y·Ž ¸È}!¸p6‚¤·pB¹¶+y·Qó· X7/îº7Qó·+y·pB¹¶‚¤·Qó· X7Þ± 7Âe“7 X7p6Þ± 7Þ± 7/îº7Þ -8b A8u±’8u±’8Ô8¢ˆ8u±’8¬»8¼÷8¼÷8¬»8’ì°8˜XÙ8’ì°8u±’8Ç:Ï8#xã8W™í8•Ö¦8˜XÙ8W™í8ÆÅ8ÆÅ8#xã8¼÷8¼÷8˜XÙ8#xã8•Ö¦8u±’8u±’8u±’8û,}8û,}8†U8¢ˆ8Þ -8ÔÂœ8”i8•Ö¦8•Ö¦8’ì°8W™í8•Ö¦8¬»8’ì°8•Ö¦8ÔÂœ8u±’8û,}8Ô8b A8Ô8/îº7p6Ô8†U8Ô8›•â7 X7Âe“7›•â7›•â7 X7 X7Âe“7p6Âe“7Þ± 7 X7 X7pB¹¶Ô8Ô8Þ -8Ô8û,}8Ô8b A8/îº7Ô8›•â7/îº7Âe“7Þ -8›•â7”i8Þ -8Þ -8†U8û,}8u±’8ÔÂœ8•Ö¦8ÆÅ8’ì°8•Ö¦8Ç:Ï8¬»8Ç:Ï8’ì°8”i8u±’8u±’8u±’8ÔÂœ8¬»8’ì°8u±’8•Ö¦8u±’8ÔÂœ8¢ˆ8”i8¬»8W+8Ô8Þ -8/îº7/îº7b A8û,}8/îº7/îº7Þ± 7Qó·ÈžË·+y·+y· X7È}!¸pB¹¶+y·‚¤·Qó·ÈžË·TwI¸âÞŒ¸âÞŒ¸Ï,µ¸–Ñ‚¸‚v5¸Ïî–¸TwI¸âÞŒ¸4¡¸È}!¸­`ɸÏî–¸‚v5¸4¡¸‘ü¸?¹ÃE¿¸ÞN¹Q: ¹B¼ç¸B¼ç¸‘ü¸"Þñ¸‘ü¸Ï,µ¸"Þñ¸‘ü¸ê«¸t}Ó¸t}Ӹ꫸꫸œÝ¸ÃE¿¸‚v5¸TwI¸ÈžË·AŽq¸TwI¸TwI¸‚¤·Ž ¸ÈžË·p6È¡*·+y·pB¹¶Âe“7+y·pB¹¶Âe“7›•â7W+8W+8/îº7 X7†U8†U8†U8Ô8W+8/îº7Þ -8b A8Þ -8W+8Âe“7p6Âe“7W+8›•â7 X7W+8Ô8Þ -8Âe“7Þ± 7Þ± 7Âe“7W+8W+8W+8Þ -8”i8†U8†U8ÔÂœ8u±’8¢ˆ8Ô8W+8›•â7 X7Þ± 7+y·p6p6/îº7pB¹¶È¡*·Þ± 7Þ± 7pB¹¶Ô8È¡*·pB¹¶pB¹¶È¡*·Þ± 7pB¹¶pB¹¶Q󷂤·ÈžË·pB¹¶pB¹¶ÈžË·Qó·Þ± 7Qó·+y·pB¹¶+y·‚v5¸‚v5¸‚¤·‚v5¸È}!¸È}!¸Q󷂤·ÈžË·pB¹¶È¡*·‚¤·‚¤· X7‚¤·p6Âe“7Þ -8Âe“7b A8”i8’ì°8W™í8ÆÅ8ÔÂœ86ð9¬»8ÆÅ8ÆÅ8ÆÅ8W™í8Ç:Ï8’ì°8˜XÙ8Ç:Ï8ö*9#xã8˜XÙ8ö*9#xã8#xã8’ì°8•Ö¦8Ç:Ï8ÔÂœ8ÆÅ8¬»8†U8u±’8¢ˆ8/îº7•Ö¦8†U8Þ -8b A8W+8Þ -8Þ -8Þ± 7/îº7/îº7W+8›•â7W+8/îº7p6~]{µ+y·Qó·âÞŒ¸È}!¸Ž ¸È}!¸‚¤·Qó·TwI¸Ïî–¸u]¸u]¸âÞŒ¸u]¸4¡¸Ï,µ¸Ï,µ¸œÝ¸?¹ÃE¿¸œÝ¸B¼ç¸ÃE¿¸Ï,µ¸Ï꫸4¡¸Ïî–¸Ïî–¸t}Ó¸Ï,µ¸Ï,µ¸­`ɸÏî–¸4¡¸Ï,µ¸TwI¸È}!¸Ž ¸+y·pB¹¶Âe“7Þ± 7p6 X7 X7p6/îº7Þ -8Ô8Þ -8b A8b A8/îº7b A8b A8¢ˆ8u±’8u±’8•Ö¦8˜XÙ8¬»8ÆÅ8¬»8•Ö¦8û,}8û,}8¢ˆ8û,}8†U8b A8Þ -8’ì°8ÔÂœ8•Ö¦8ÔÂœ8Ç:Ï8˜XÙ8¬»8¬»8u±’8u±’8•Ö¦8’ì°8•Ö¦8Þ -8†U8•Ö¦8b A8”i8•Ö¦8›•â7pB¹¶Âe“7›•â7~]{µÈžË·Ž ¸Ž ¸ÈžË·‚¤·Þ± 7 X7+y·È}!¸‚¤·Ž ¸u]¸TwI¸ÈžË·È}!¸È}!¸Ž ¸ÈžË·âÞŒ¸ÃE¿¸‚v5¸âÞŒ¸Ïî–¸AŽq¸Ž ¸AŽq¸AŽq¸Ž ¸Ïî–¸+y·+y·ÈžË·ÈžË·ÈžË·Qó·+y·Ž ¸‚¤·pB¹¶ÈžË·Ž ¸Þ± 7p6~]{µ X7Ô8 X7û,}8”i8Þ± 7pB¹¶Þ -8/îº7Âe“7Âe“7†U8¢ˆ8ÔÂœ8u±’8¬»8u±’8W+8b A8Þ -8Ô8W+8b A8†U8Þ -8”i8b A8u±’8”i8›•â7Ô8 X7Ô8u±’8›•â7Þ -8/îº7Âe“7b A8Âe“7Qó·ÈžË·pB¹¶Qó·Ž ¸È}!¸‚v5¸âÞŒ¸Ž ¸TwI¸âÞŒ¸È}!¸–Ñ‚¸È}!¸‚v5¸­`ɸ꫸Ï,µ¸ÃE¿¸­`ɸ­`ɸœÝ¸AŽq¸u]¸ê«¸œÝ¸4¡¸4¡¸ÃE¿¸âÞŒ¸4¡¸Ï,µ¸Ïî–¸AŽq¸È}!¸âÞŒ¸âÞŒ¸‚v5¸u]¸Ž ¸Ž ¸âÞŒ¸âÞŒ¸ÃE¿¸âÞŒ¸TwI¸Qó·Ž ¸+y·È¡*·Âe“7~]{µ X7W+8Þ -8/îº7Þ± 7 X7W+8 X7u±’8†U8†U8†U8û,}8ÔÂœ8’ì°8’ì°8¬»8Ç:Ï8¬»8•Ö¦8¬»8ÆÅ8•Ö¦8¬»8¬»8•Ö¦8u±’8û,}8”i8Þ -8†U8›•â7/îº7Þ -8/îº7Þ -8”i8b A8W+8Âe“7/îº7 X7 X7pB¹¶ X7~]{µÂe“7W+8Þ± 7pB¹¶+y·pB¹¶pB¹¶W+8+y·TwI¸Ž ¸Ž ¸âÞŒ¸Ž ¸âÞŒ¸AŽq¸AŽq¸âÞŒ¸4¡¸4¡¸4¡¸‚v5¸‚¤·Qó·‚v5¸È}!¸âÞŒ¸TwI¸TwI¸TwI¸u]¸Ž ¸Qó·u]¸u]¸‚v5¸u]¸Ž ¸p6TwI¸Qó·Þ± 7È¡*·Þ± 7Ô8›•â7”i8”i8•Ö¦8¢ˆ8ÔÂœ8u±’8•Ö¦8u±’8u±’8W+8W+8û,}8û,}8”i8ÔÂœ8’ì°8ÔÂœ8”i8û,}8†U8Ô8†U8’ì°8¬»8u±’8†U8W+8Ô8Ô8/îº7›•â7/îº7W+8Âe“7p6+y·›•â7/îº7Þ± 7W+8È¡*·È¡*·‚¤·pB¹¶/îº7Âe“7›•â7/îº7È¡*·pB¹¶~]{µpB¹¶È}!¸‚v5¸È}!¸TwI¸Ž ¸Qó·Qó·âÞŒ¸u]¸âÞŒ¸Ž ¸ê«¸–Ñ‚¸Ïî–¸È}!¸AŽq¸4¡¸âÞŒ¸Ïî–¸u]¸u]¸AŽq¸È}!¸u]¸Ï,µ¸u]¸Ïî–¸TwI¸AŽq¸âÞŒ¸Ïî–¸Qó·u]¸TwI¸TwI¸AŽq¸AŽq¸‚v5¸ÈžË·p6W+8p6 X7 X7+y·/îº7~]{µ~]{µÂe“7 X7/îº7 X7›•â7b A8”i8Ô8 X7¢ˆ8†U8›•â7†U8û,}8†U8Þ -8Ô8”i8W+8†U8b A8W+8 X7Âe“7›•â7Ô8›•â7 X7Þ± 7Þ± 7Âe“7Þ± 7~]{µp6+y·+y·pB¹¶pB¹¶~]{µ›•â7Âe“7~]{µ‚¤·›•â7Þ± 7pB¹¶ X7›•â7Þ± 7~]{µ+y·TwI¸È}!¸+y·Ž ¸È}!¸AŽq¸u]¸TwI¸TwI¸4¡¸âÞŒ¸Ïî–¸ÃE¿¸ê«¸AŽq¸âÞŒ¸‚v5¸TwI¸âÞŒ¸4¡¸âÞŒ¸âÞŒ¸âÞŒ¸AŽq¸–Ñ‚¸TwI¸TwI¸Qó·Ž ¸pB¹¶ X7Ȟ˷ޱ 7pB¹¶È¡*·p6Ȟ˷pB¹¶Þ± 7~]{µ X7/îº7 X7Âe“7W+8Ô8Âe“7†U8†U8/îº7Þ -8ÔÂœ8•Ö¦8û,}8u±’8•Ö¦8b A8¢ˆ8’ì°8¢ˆ8’ì°8u±’8W+8û,}8È¡*·W+8 X7›•â7W+8Þ± 7›•â7 X7Þ± 7b A8Þ± 7~]{µÂe“7pB¹¶ÈžË·Ž ¸‚¤·Qó·È}!¸Qó·Qó·È}!¸ÈžË·Ž ¸âÞŒ¸ê«¸Ïî–¸âÞŒ¸Ï,µ¸Ï,µ¸ÃE¿¸âÞŒ¸TwI¸Ïî–¸t}Ó¸Ïî–¸âÞŒ¸âÞŒ¸AŽq¸TwI¸TwI¸âÞŒ¸u]¸4¡¸Ï,µ¸­`ɸ­`ɸ­`ɸB¼ç¸B¼ç¸œÝ¸t}Ó¸Ï,µ¸o&¹t}Ó¸t}Ó¸Ï,µ¸Ï,µ¸âÞŒ¸TwI¸‚v5¸4¡¸TwI¸Ž ¸ÃE¿¸âÞŒ¸Qó·È}!¸Qó·âÞŒ¸AŽq¸AŽq¸Ž ¸Qó·AŽq¸‚¤·~]{µÈ¡*·~]{µ‚¤·pB¹¶‚¤·+y·›•â7pB¹¶‚¤·pB¹¶/îº7p6Þ± 7~]{µb A8 X7W+8¢ˆ8”i8†U8”i8u±’8 X7Âe“7 X7~]{µÞ± 7‚¤·Qó·Qó·ÈžË·+y·ÈžË·‚v5¸È}!¸âÞŒ¸âÞŒ¸âÞŒ¸ê«¸âÞŒ¸ÃE¿¸4¡¸ê«¸âÞŒ¸4¡¸ÃE¿¸âÞŒ¸ê«¸AŽq¸âÞŒ¸Ï,µ¸t}Ó¸­`ɸ4¡¸âÞŒ¸TwI¸âÞŒ¸ê«¸4¡¸Ï,µ¸t}Ó¸­`ɸÏî–¸ÃE¿¸‘ü¸­`ɸÏ,µ¸Ï,µ¸ê«¸ÃE¿¸"Þñ¸âÞŒ¸­`ɸÏî–¸AŽq¸Ïî–¸4¡¸Qó·Ž ¸TwI¸TwI¸âÞŒ¸Ž ¸Q󷂤·ÈžË·Þ± 7p6Qó·p6/îº7~]{µÞ± 7 X7Âe“7/îº7p6Þ± 7Þ -8•Ö¦8•Ö¦8ÔÂœ8Ç:Ï8˜XÙ8¬»8ÔÂœ8¢ˆ8u±’8ÔÂœ8¬»8ÔÂœ8b A8ÔÂœ8”i8Þ -8u±’8u±’8”i8u±’8†U8Þ -8W+8Âe“7Þ± 7Âe“7p6pB¹¶p6‚¤·ÈžË·~]{µ‚¤·È}!¸Ž ¸‚¤·p6+y·pB¹¶TwI¸u]¸È}!¸‚¤·ÈžË·‚¤·+y·AŽq¸‚¤·È¡*·Ž ¸+y·u]¸TwI¸u]¸âÞŒ¸È}!¸âÞŒ¸AŽq¸ê«¸–Ñ‚¸È}!¸ÈžË·Qó·Ž ¸ÈžË·‚v5¸‚¤·pB¹¶Qó·pB¹¶Þ± 7/îº7Ô8†U8”i8b A8†U8Þ -8¢ˆ8ÔÂœ8u±’8¬»8u±’8W™í8•Ö¦8’ì°8¬»8Ç:Ï8•Ö¦8ÔÂœ8#xã8˜XÙ89¢k9¢k99­±.9Ù)99ä?996ð9ö*9Ç:Ï8h‚$9± 9± 9ä?99˜XÙ8± 9˜XÙ86ð9˜XÙ8u±’8Ç:Ï8’ì°8b A8’ì°8b A8†U8†U8Þ -8”i8/îº7›•â7†U8û,}8/îº7W+8/îº7È¡*·~]{µp6‚¤·Ž ¸~]{µ X7Qó·ÈžË·Ž ¸+y·È¡*·pB¹¶Þ± 7È¡*·p6~]{µÈ¡*·‚¤·ÈžË·pB¹¶‚¤·AŽq¸TwI¸È}!¸âÞŒ¸âÞŒ¸AŽq¸‚v5¸È}!¸Ž ¸‚¤·‚¤·‚¤·p6+y·p6~]{µp6pB¹¶W+8û,}8Þ -8†U8u±’8¬»8’ì°8’ì°8ÆÅ8Ç:Ï8¬»8ÔÂœ8W™í8W™í8˜XÙ8Ç:Ï8W™í8Ç:Ï8± 9˜XÙ89¬»8± 9W™í89± 9W™í8#xã86ð9Ç:Ï8#xã8Ç:Ï8#xã8¬»8#xã8’ì°8¢k9¼÷8± 9± 99ö*9¼÷8˜XÙ8#xã8˜XÙ8ÔÂœ8ÆÅ8Þ -8”i8û,}8W+8u±’8Ô8›•â7p6~]{µ X7 X7›•â7Ô8/îº7Þ -8†U8›•â7/îº7p6p6Âe“7/îº7 X7/îº7~]{µÞ± 7p6/îº7Þ -8Ô8/îº7Ȟ˷ޱ 7›•â7›•â7/îº7/îº7W+8/îº7b A8Ô8”i8¢ˆ8•Ö¦8Þ -8Þ -8ÔÂœ8ÔÂœ8b A8W+8›•â7W+8Þ± 7~]{µW+8”i8•Ö¦8u±’8ÆÅ8ÆÅ8Ç:Ï8b A8†U8ÔÂœ8u±’8”i8¢ˆ8Ô8Ô8u±’8û,}8†U8W+8Þ -8Þ -8 X7›•â7p6/îº7‚¤·+y·È¡*·+y·~]{µÈ¡*·p6p6È¡*·‚¤·‚¤·È}!¸u]¸È}!¸È}!¸Qó·Ïî–¸Qó·Ï,µ¸u]¸u]¸ê«¸t}Ó¸Ïî–¸âÞŒ¸Ïî–¸t}Ó¸AŽq¸âÞŒ¸4¡¸–Ñ‚¸ê«¸t}Ó¸Ï,µ¸âÞŒ¸Ïî–¸Ï,µ¸ê«¸È}!¸âÞŒ¸­`ɸ꫸u]¸Ž ¸u]¸­`ɸâÞŒ¸Ïî–¸ÃE¿¸AŽq¸TwI¸‚v5¸u]¸TwI¸Qó·Qó·Ž ¸‚¤·Qó·pB¹¶ X7pB¹¶p6Âe“7Âe“7Ȟ˷ޱ 7Þ -8W+8Þ -8’ì°8Ô8†U8†U8›•â7W+8b A8†U8Þ -8†U8Ô8Âe“7Ô8û,}8û,}8u±’8¬»8¢ˆ8u±’8û,}8û,}8”i8W+8›•â7›•â7›•â7”i8W+8W+8Þ -8Ô8Þ -8/îº7p6Âe“7Âe“7Þ± 7Ô8p6‚¤· X7Qó·ÈžË·Ïî–¸âÞŒ¸u]¸ê«¸Ïî–¸ÃE¿¸ê«¸Ïî–¸‘ü¸ê«¸–Ñ‚¸Ïî–¸­`ɸAŽq¸–Ñ‚¸ÃE¿¸Ï,µ¸œÝ¸­`ɸâÞŒ¸Ïî–¸­`ɸ꫸Ž ¸AŽq¸AŽq¸TwI¸âÞŒ¸âÞŒ¸Qó·TwI¸È}!¸Ž ¸u]¸u]¸TwI¸âÞŒ¸È}!¸u]¸TwI¸âÞŒ¸+y·È¡*·Âe“7Âe“7Ô8È¡*· X7 X7›•â7/îº7 X7W+8Ô8›•â7Ô8†U8p6Âe“7”i8’ì°8•Ö¦8¬»8˜XÙ8ÔÂœ8W™í8W™í8¬»8u±’8•Ö¦8u±’8•Ö¦8û,}8†U8Âe“7Þ -8b A8W+8†U8W+8pB¹¶Þ± 7Âe“7Âe“7pB¹¶+y·pB¹¶pB¹¶Qó·+y·‚¤·pB¹¶Ž ¸Qó·pB¹¶Ž ¸È}!¸+y·Qó·È}!¸Qó·u]¸ê«¸Ïî–¸TwI¸u]¸Ïî–¸AŽq¸4¡¸ê«¸AŽq¸âÞŒ¸‚v5¸‚v5¸‚v5¸Ž ¸‚v5¸Ž ¸ÈžË·TwI¸‚v5¸–Ñ‚¸âÞŒ¸ê«¸4¡¸­`ɸœÝ¸t}Ó¸Ï,µ¸t}Ó¸­`ɸÏî–¸­`ɸâÞŒ¸Ž ¸È}!¸u]¸Qó·È¡*·Qó·È¡*· X7p6 X7W+8W+8†U8û,}8”i8Ô8û,}8’ì°8ÆÅ8¼÷8Ç:Ï8#xã8ÔÂœ8¬»8Ç:Ï8¬»8û,}8’ì°8¬»8”i8u±’8ÔÂœ8¢ˆ8u±’8”i8Ç:Ï8u±’8#xã8¬»8Ç:Ï8˜XÙ8#xã8•Ö¦8Ç:Ï8Ç:Ï8¼÷8’ì°8¬»8Ç:Ï8û,}8†U8~]{µ X7Ô8 X7Âe“7”i8/îº7W+8Þ± 7 X7Ȟ˷ȡ*·+y·Qó·Qó·+y·È}!¸‚v5¸+y·Ž ¸Qó·Ž ¸ê«¸–Ñ‚¸AŽq¸4¡¸âÞŒ¸u]¸Qó·Qó·âÞŒ¸AŽq¸ÈžË·+y·Qó·TwI¸âÞŒ¸Ïî–¸âÞŒ¸Qó·u]¸TwI¸âÞŒ¸‚v5¸ÃE¿¸âÞŒ¸‚v5¸È}!¸‚¤·~]{µÞ± 7Þ± 7 X7†U8†U8†U8b A8Ô8Ô8Ô8 X7Þ± 7pB¹¶~]{µ~]{µ~]{µ+y·+y·+y·~]{µ X7+y·Þ -8Þ -8 X7”i8†U8W+8›•â7Ô8ÔÂœ8†U8Âe“7›•â7W+8b A8”i8/îº7Þ± 7p6~]{µpB¹¶~]{µpB¹¶pB¹¶Q󷂤·Ž ¸È¡*·u]¸u]¸Ž ¸âÞŒ¸âÞŒ¸u]¸TwI¸AŽq¸u]¸âÞŒ¸­`ɸ–Ñ‚¸âÞŒ¸­`ɸ꫸­`ɸœÝ¸ê«¸­`ɸ­`ɸÏ,µ¸u]¸­`ɸ‚v5¸4¡¸œÝ¸o&¹­`ɸÏ,µ¸–Ñ‚¸TwI¸ÈžË·ÈžË·‚v5¸Ïî–¸AŽq¸Ïî–¸–Ñ‚¸È}!¸TwI¸Ž ¸pB¹¶~]{µ+y·‚¤· X7 X7p6Þ± 7 X7›•â7û,}8Ô8û,}8¢ˆ8û,}8¢ˆ8†U8”i8Þ -8û,}8Þ -8†U8W+8†U8Âe“7/îº7Ô8Ô8”i8›•â7/îº7Ô8Âe“7Þ± 7+y·p6p6p6+y·pB¹¶Þ± 7È¡*·/îº7~]{µÈ¡*·Qó·‚v5¸u]¸âÞŒ¸âÞŒ¸4¡¸ÃE¿¸ÃE¿¸ÃE¿¸‘ü¸t}Ó¸äy¹o&¹o&¹"Þñ¸‘ü¸"Þñ¸"Þñ¸t}Ó¸ÃE¿¸ê«¸?¹ÃE¿¸?¹äy¹×0¹ç9Û¡H9R‡C9Ñò$9ÃÅ9¯:49¯:49¯:49þÛ98 +*9¯:49¯:498 +*9þÛ9Ñò$9%°9ÃÅ9ÃÅ9)›9.s9Õ† 9Ð8yî8ÅWä8yî88Ú8ÅWä8;`9;`9Ð8®ã»8®ã»8yî8yî8.s9)›9ÅWä8œø8®ã»8G¡8Å.8øÈV8Å.8æ7aÍ–75ÃB80Ï80Ï8ƒè~8:µ§8±“8Å.8øÈV8Å.8¿X¾7øÈV8G¡8—Õj8 €‰8Ôâ8æ70Ï8æ7Ôâ8Å.8Ôâ8—Õj8 €‰8—Õj8G¡8 €‰8ƒè~8øÈV8g˱8øÈV8—Õj8 €‰8 €‰8:µ§8;`9yî8®ã»8g˱8g˱8ƒè~88Ú8ÅWä8g˱8:µ§8—Õj8 €‰8:µ§8:µ§8Ð8Ð88Ú8óýÅ8®ã»8g˱8:µ§8g˱88Ú8.s9yî8®ã»88Ú8:µ§8;`9yî8óýÅ8ÅWä8ÅWä8 €‰8óýÅ8óýÅ8®ã»8øÈV8—Õj85ÃB8Ôâ8¿X¾7€n7€n7ö^…6·ß«¶·ß«¶TÖ ¸âãï·˜`r·TÖ ¸#½3¸½ó¸±" ¸½ó¸”Üæ¸Qþ𸀖¸½ó¸x¼Ü¸žÒ¸³f¾¸6£¹(Ê ¹6£¹ž!û¸”Üæ¸6£¹žÒ¸€–¸47ª¸±" ¸47ª¸€–¸€–¸47ª¸±" ¸K½G¸½ó¸€–¸47ª¸#½3¸âãï·TÖ ¸&Ÿâãï·#½3¸€n7âãï·aÍ–7Gµ²Ð^7Ôâ8æ7€n7¿X¾7aÍ–7Ôâ8¿X¾7²Ð^7ö^…6¿X¾7¿X¾7·ß«¶GµÔâ80Ï8æ70Ï8øÈV8Å.8—Õj8G¡8¿X¾7Å.8Å.8ƒè~8æ7øÈV8øÈV8øÈV8ƒè~8Ôâ8ö^…6¿X¾7aÍ–7˜`r·ÔŸ ·ÔŸ ·˜`r·ïà#·aÍ–7€n7˜`r·ö^…6&ŸÒÄ[¸âãï·K½G¸ÒÄ[¸½ó¸€–¸ÒÄ[¸K½G¸€–¸€–¸ÒÄ[¸K½G¸ÒÄ[¸Óo¸½ó¸€–¸ÒÄ[¸#½3¸ÒÄ[¸ÒÄ[¸ÒÄ[¸€–¸³f¾¸±" ¸47ª¸47ª¸³f¾¸47ª¸47ª¸47ª¸³f¾¸x¼Ü¸x¼Ü¸47ª¸6£¹”Ü渞ҸêM´¸ËŒ¸Qþð¸³f¾¸rȸ47ª¸ËŒ¸47ª¸êM´¸€–¸&ŸK½G¸Óo¸˜`r·ö^…6GµÔâ8¿X¾7²Ð^7aÍ–7æ7€n7·ß«¶Ôâ8æ7€n7æ7¿X¾7¿X¾7¿X¾7—Õj8€n7ö^…6aÍ–7aÍ–7Gµ²Ð^7aÍ–7²Ð^7€n7²Ð^70Ï85ÃB8—Õj8Ôâ8¿X¾7¿X¾75ÃB8¿X¾7ö^…6ÔŸ ·ö^…6·ß«¶˜`r·ÔŸ ·K½G¸ÒÄ[¸½ó¸€–¸±" ¸½ó¸#½3¸x¼Ü¸47ª¸Óo¸rȸx¼Ü¸rȸV¶¹¦Þ¹¦Þ¹ž!û¸rȸV¶¹ž!û¸x¼Ü¸(Ê ¹¦Þ¹(Ê ¹‘ ¹ë6&¹²?¹f0¹f0¹vN+¹\˜:¹vN+¹f0¹‘ ¹Ìó¹‘ ¹‘ ¹ž!û¸(Ê ¹‘ ¹(Ê ¹f0¹6£¹6£¹Qþð¸³f¾¸”Ü渳f¾¸47ª¸€–¸Óo¸TÖ ¸ÔŸ ·Óo¸^3È·âãï·€–¸€–¸K½G¸TÖ ¸TÖ ¸ïà#·^3È·^3È·Gµ^3È·ö^…6€n7·ß«¶ö^…60Ï8øÈV85ÃB8€n7aÍ–7ö^…6ïà#·Ôâ80Ï8Ôâ8—Õj8¿X¾70Ï8øÈV85ÃB8G¡8øÈV8Ôâ85ÃB85ÃB8±“8ƒè~85ÃB8æ75ÃB8Ôâ85ÃB8¿X¾7²Ð^7¿X¾7^3È·#½3¸TÖ ¸#½3¸˜`r·K½G¸&ŸK½G¸âãï·^3È·ÒÄ[¸ÒÄ[¸êM´¸³f¾¸Óo¸±" ¸ËŒ¸Óo¸47ª¸”Üæ¸x¼Ü¸”Ü渞Ҹ€–¸x¼Ü¸”Ü渑 ¹žÒ¸47ª¸rȸêM´¸žÒ¸x¼Ü¸žÒ¸³f¾¸êM´¸x¼Ü¸žÒ¸47ª¸47ª¸€–¸êM´¸êM´¸êM´¸€–¸ËŒ¸âãï·TÖ ¸^3È·#½3¸âãï·Gµ·ß«¶ö^…6ïà#·²Ð^7˜`r·Gµæ7¿X¾7æ7—Õj8øÈV85ÃB80Ï8ïà#·ö^…6€n7ïà#·¿X¾7²Ð^7¿X¾7Gµ^3È·ö^…6ïà#·ö^…6GµTÖ ¸ÔŸ ·âãï·âãï·€n7€n7€n7·ß«¶ïà#·ÔŸ ·ÔŸ ··ß«¶TÖ ¸âãï·^3È·âãï·#½3¸&Ÿâãï·âãï·#½3¸^3È·ÔŸ ·ÔŸ ·#½3¸TÖ ¸TÖ ¸Óo¸âãï·K½G¸x¼Ü¸ÒÄ[¸Óo¸±" ¸±" ¸47ª¸±" ¸±" ¸ÒÄ[¸€–¸€–¸±" ¸½ó¸êM´¸êM´¸³f¾¸x¼Ü¸47ª¸ËŒ¸ÒÄ[¸#½3¸ÒÄ[¸K½G¸^3È·TÖ ¸âãï·&Ÿ€n7€n7€n7·ß«¶0Ï8øÈV8Å.8—Õj8Ôâ85ÃB8ƒè~8—Õj88Ú8ƒè~8—Õj8G¡8Ð8ÅWä8.s9œø8œø8œø8g˱8g˱8±“8±“8G¡8:µ§8±“8®ã»8óýÅ8óýÅ8±“85ÃB80Ï85ÃB8—Õj8Å.8øÈV8±“8æ7Å.8Å.80Ï8 €‰8±“8aÍ–7ö^…6²Ð^7€n7˜`r·²Ð^7¿X¾7aÍ–70Ï8æ7TÖ ¸^3È··ß«¶ö^…6ïà#·ïà#·ÔŸ ·^3È·TÖ ¸âãï·ÔŸ ·Gµïà#·˜`r··ß«¶ÔŸ ·€n7€n7·ß«¶ïà#·Gµïà#·ÔŸ ·Gµïà#·Gµ˜`r··ß«¶²Ð^7æ7aÍ–7²Ð^7aÍ–75ÃB80Ï85ÃB8±“8 €‰8±“8±“8:µ§8—Õj8ƒè~8g˱8œø8óýÅ8)›98 +*9yî8Õ† 9ÃÅ9ÃÅ9œø8)›9Ñò$9)›9þÛ9ÃÅ9ÃÅ9."/9ÃÅ9ÃÅ9ÃÅ9Õ† 9¯:49."/9ÃÅ9¯:49Õ† 9þÛ9)›9þÛ9Õ† 9)›9;`9Õ† 9;`9œø8Õ† 9;`9%°9ÃÅ9%°9ÃÅ9;`9ÃÅ9Ð8®ã»8yî88Ú8ÅWä8Ð8ƒè~8 €‰8 €‰8—Õj8G¡8G¡8 €‰8ƒè~8 €‰8—Õj8 €‰8g˱8 €‰80Ï85ÃB85ÃB8 €‰8g˱8g˱8:µ§8Å.80Ï80Ï8æ7¿X¾70Ï8æ7Ôâ8æ7Ôâ80Ï8æ7²Ð^7²Ð^7aÍ–7æ75ÃB8Å.8Å.85ÃB8G¡8±“8 €‰88Ú8óýÅ88Ú8Õ† 9)›98 +*98 +*9%°9%°9Ñò$9R‡C9ÃÅ9¯:49¶Jg9¯:49¸S998 +*9IôW9ZØR9¸Ã{9zq€9¶Jg9űŠ9]hl9k†q9Fƒ9űŠ9¶Jg9¸S99Dm>9¯:49¯:49R‡C9ÃÅ9."/9þÛ9Ñò$9þÛ9yî8)›9)›9)›9ÅWä8Õ† 9)›9)›98Ú8—Õj8ƒè~8G¡80Ï85ÃB8Å.8²Ð^7æ7æ7Ôâ8øÈV8øÈV8øÈV8øÈV8¿X¾7æ75ÃB8Å.8¿X¾7æ7Å.80Ï8€n7æ7Gµ˜`r·Gµö^…6²Ð^7øÈV8Ôâ8Å.8²Ð^7€n7aÍ–7¿X¾7Ôâ8GµÅ.8¿X¾70Ï8aÍ–7€n7€n7ö^…6æ7æ7²Ð^70Ï8ƒè~85ÃB8—Õj8±“8G¡88Ú8®ã»8œø8®ã»8®ã»8Ð8ÅWä8)›9;`9%°9;`9œø8.s9Õ† 9.s9¯:498 +*9)›9yî8%°9.s9þÛ9ÃÅ98 +*98 +*9)›9%°9ÃÅ9yî8)›9œø8œø8®ã»8œø8œø8®ã»8 €‰8 €‰8±“8G¡8ƒè~85ÃB8øÈV8øÈV8øÈV8¿X¾7aÍ–70Ï8ö^…6·ß«¶Gµö^…6€n7^3È·Gµæ7aÍ–7aÍ–7Å.8¿X¾7²Ð^7Ôâ80Ï8Ôâ8²Ð^7ö^…6ö^…6²Ð^7GµaÍ–7€n7Gµ€n7Å.8Ôâ8¿X¾7—Õj8æ75ÃB8 €‰8:µ§8ƒè~8ƒè~8®ã»8:µ§8øÈV8ƒè~85ÃB8Ð8yî8;`9;`9œø8)›9óýÅ88Ú8;`98Ú8)›9œø8g˱8yî8 €‰8G¡8®ã»8óýÅ8Ð8óýÅ8g˱8:µ§8 €‰8 €‰8øÈV8Å.80Ï8æ7¿X¾7aÍ–7·ß«¶€n7Gµ€n7ö^…6ö^…6˜`r·Gµ˜`r··ß«¶âãï·âãï··ß«¶ïà#·ïà#·˜`r·˜`r·ÔŸ ·˜`r·ÔŸ ·K½G¸TÖ ¸&Ÿ^3È·TÖ ¸TÖ ¸ËŒ¸€–¸rȸ47ª¸±" ¸€–¸x¼Ü¸47ª¸#½3¸€–¸^3È··ß«¶TÖ ¸½ó¸ÔŸ ·Gµ˜`r·ïà#·^3È·ïà#·Gµö^…6€n7TÖ ¸^3È·^3È·ïà#·^3È·ÔŸ ·Gµïà#·²Ð^7aÍ–7aÍ–7¿X¾7aÍ–7·ß«¶€n7€n7GµÔŸ ·^3È·^3È·˜`r·ö^…6·ß«¶·ß«¶¿X¾7²Ð^7²Ð^7¿X¾7ö^…6ïà#·aÍ–7æ7·ß«¶ö^…6øÈV8€n7Å.80Ï8Ôâ8øÈV8ƒè~8—Õj8 €‰85ÃB85ÃB80Ï85ÃB8øÈV8²Ð^7æ7Ôâ8aÍ–7ö^…6€n7Gµ·ß«¶˜`r··ß«¶€n7·ß«¶ïà#·˜`r·²Ð^7Gµ·ß«¶TÖ ¸&ŸTÖ ¸âãï·&ŸÒÄ[¸ÒÄ[¸rȸêM´¸±" ¸žÒ¸êM´¸€–¸Óo¸êM´¸rȸx¼Ü¸€–¸±" ¸Qþð¸Ìó¹ž!û¸žÒ¸ËŒ¸±" ¸Óo¸ÒÄ[¸TÖ ¸âãï·TÖ ¸TÖ ¸Óo¸ÒÄ[¸K½G¸K½G¸ÔŸ ·âãï·^3È·âãï·˜`r·˜`r·ö^…6¿X¾70Ï8²Ð^7øÈV8—Õj8Ôâ8 €‰8:µ§8ÅWä8®ã»8±“8Ð8®ã»8;`9þÛ9yî8œø8Õ† 9ÃÅ9%°9;`9ÃÅ9œø8yî8óýÅ8Ð8œø8®ã»8yî8;`9;`9yî8Ð8g˱8g˱88Ú8ÅWä8g˱8:µ§8óýÅ8 €‰8øÈV85ÃB85ÃB80Ï80Ï8aÍ–7²Ð^7ö^…6˜`r·€n7€n7²Ð^7Gµö^…6Gµ˜`r·âãï·ÔŸ ·ÔŸ ·ïà#·Gµïà#·&ŸTÖ ¸ÒÄ[¸ÒÄ[¸€–¸ÒÄ[¸€–¸½ó¸rȸ±" ¸±" ¸³f¾¸êM´¸±" ¸rȸžÒ¸‘ ¹rȸrȸQþð¸”Üæ¸Qþð¸x¼Ü¸”Ü渞!û¸ž!û¸V¶¹¦Þ¹ž!û¸6£¹ž!û¸x¼Ü¸rȸ€–¸±" ¸€–¸³f¾¸½ó¸€–¸êM´¸€–¸Óo¸TÖ ¸TÖ ¸TÖ ¸²Ð^7€n7˜`r·€n7²Ð^7aÍ–70Ï85ÃB8€n7aÍ–7Ôâ8aÍ–7æ7æ7aÍ–7Gµïà#·ïà#·€n7^3È·^3È·TÖ ¸âãï·TÖ ¸&Ÿïà#·âãï·TÖ ¸ÔŸ ·˜`r·#½3¸ÔŸ ·âãï·ÒÄ[¸&ŸTÖ ¸ÒÄ[¸€–¸#½3¸^3È·˜`r·âãï·#½3¸Óo¸ÒÄ[¸ÒÄ[¸&Ÿ½ó¸&Ÿ˜`r·TÖ ¸€–¸K½G¸½ó¸ÒÄ[¸Óo¸€–¸K½G¸€–¸€–¸€–¸êM´¸ÒÄ[¸€–¸x¼Ü¸êM´¸47ª¸½ó¸Qþð¸žÒ¸³f¾¸rȸžÒ¸€–¸êM´¸47ª¸±" ¸±" ¸½ó¸€–¸½ó¸êM´¸½ó¸Óo¸ÒÄ[¸€–¸€–¸€–¸x¼Ü¸êM´¸47ª¸Óo¸€–¸ÒÄ[¸ÒÄ[¸€–¸êM´¸€–¸47ª¸€–¸x¼Ü¸47ª¸³f¾¸”Üæ¸Óo¸rȸK½G¸Qþð¸³f¾¸Qþð¸(Ê ¹6£¹(Ê ¹Qþð¸ž!û¸¦Þ¹‘ ¹ë6&¹ë6&¹4ÌD¹ë6&¹ò!¹¦Þ¹Ìó¹ò!¹f0¹vN+¹ V^¹\˜:¹V¶¹25¹²?¹\˜:¹\˜:¹˜T¹f0¹ÿO¹ÞæI¹ÿO¹²?¹4ÌD¹ V^¹"®m¹"®m¹ah¹f¤ƒ¹JÌr¹É }¹ +sc¹ V^¹ V^¹ÞæI¹£9Y¹Øêw¹£9Y¹ah¹£9Y¹25¹vN+¹ÞæI¹\˜:¹²?¹4ÌD¹4ÌD¹ë6&¹\˜:¹vN+¹¦Þ¹‘ ¹¦Þ¹V¶¹ò!¹(Ê ¹‘ ¹vN+¹ò!¹vN+¹vN+¹Ìó¹ë6&¹¦Þ¹Qþð¸ë6&¹Ìó¹vN+¹25¹ò!¹25¹ò!¹25¹f0¹f0¹vN+¹ò!¹¦Þ¹ë6&¹ÞæI¹f0¹Ìó¹(Ê ¹Ìó¹”Üæ¸Ìó¹Qþð¸6£¹rȸrȸQþð¸ž!û¸”Üæ¸Óo¸47ª¸³f¾¸47ª¸êM´¸³f¾¸rȸžÒ¸êM´¸Qþð¸6£¹ž!û¸6£¹Ìó¹V¶¹V¶¹Ìó¹6£¹‘ ¹‘ ¹f0¹ò!¹(Ê ¹vN+¹¦Þ¹‘ ¹\˜:¹²?¹f0¹25¹4ÌD¹Ìó¹‘ ¹vN+¹Ìó¹ò!¹ë6&¹‘ ¹ë6&¹vN+¹‘ ¹Ìó¹(Ê ¹Qþð¸žÒ¸žÒ¸ò!¹ž!û¸V¶¹Ìó¹¦Þ¹(Ê ¹ë6&¹‘ ¹ž!û¸rȸQþð¸”Üæ¸x¼Ü¸Qþð¸rȸ6£¹¦Þ¹Ìó¹ò!¹(Ê ¹(Ê ¹ò!¹‘ ¹V¶¹Ìó¹x¼Ü¸rȸ‘ ¹”Üæ¸rȸ6£¹žÒ¸6£¹Ìó¹Qþð¸Qþð¸žÒ¸±" ¸žÒ¸”Ü渞!û¸V¶¹³f¾¸žÒ¸rȸž!û¸ž!û¸(Ê ¹Qþð¸6£¹x¼Ü¸¦Þ¹V¶¹x¼Ü¸Qþð¸”Üæ¸V¶¹6£¹¦Þ¹V¶¹ò!¹‘ ¹Ìó¹ò!¹Ìó¹vN+¹f0¹Ìó¹Ìó¹ÞæI¹25¹ë6&¹ò!¹ë6&¹f0¹\˜:¹²?¹ò!¹²?¹ÞæI¹ÿO¹ah¹"®m¹f¤ƒ¹ +sc¹U‹¹ +sc¹ +sc¹Ž¹ah¹ +sc¹£9Y¹˜T¹£9Y¹ÞæI¹\˜:¹f0¹‘ ¹ÿO¹£9Y¹˜T¹É }¹ÿO¹£9Y¹˜T¹ÞæI¹ÿO¹ÿO¹ÞæI¹£9Y¹4ÌD¹f0¹ë6&¹25¹‘ ¹Ìó¹(Ê ¹žÒ¸¦Þ¹Qþð¸³f¾¸x¼Ü¸47ª¸6£¹êM´¸47ª¸47ª¸±" ¸47ª¸rȸQþð¸rȸ³f¾¸½ó¸³f¾¸rȸ”Üæ¸6£¹êM´¸x¼Ü¸³f¾¸ž!û¸ž!û¸ž!û¸Ìó¹¦Þ¹(Ê ¹6£¹(Ê ¹Ìó¹‘ ¹Ìó¹Ìó¹‘ ¹f0¹vN+¹¦Þ¹f0¹²?¹ÞæI¹4ÌD¹\˜:¹ÞæI¹f0¹ë6&¹25¹²?¹ë6&¹²?¹25¹f0¹ÿO¹ÿO¹ÿO¹˜T¹ +sc¹f¤ƒ¹£9Y¹"®m¹"®m¹4ÌD¹Øêw¹Ž¹ÿO¹4ÌD¹4ÌD¹4ÌD¹f0¹f0¹25¹\˜:¹ò!¹vN+¹25¹f0¹4ÌD¹vN+¹vN+¹ò!¹ž!û¸V¶¹6£¹€–¸½ó¸47ª¸³f¾¸±" ¸ÒÄ[¸#½3¸K½G¸^3È·TÖ ¸ïà#·ïà#·ïà#·€n7ÔŸ ·ö^…6ÔŸ ·ö^…6æ7ö^…6²Ð^7ö^…6ÔŸ ·ö^…6·ß«¶€n7ö^…6^3È·ÔŸ ·âãï·#½3¸âãï·ÒÄ[¸½ó¸˜`r·#½3¸K½G¸&Ÿ#½3¸€–¸ÒÄ[¸&ŸTÖ ¸&Ÿ€–¸Óo¸Óo¸€–¸ÒÄ[¸±" ¸€–¸€–¸žÒ¸47ª¸Óo¸€–¸47ª¸€–¸€–¸&Ÿԟ ·#½3¸½ó¸€–¸ÒÄ[¸TÖ ¸âãï·TÖ ¸âãï··ß«¶TÖ ¸ÔŸ ·K½G¸TÖ ¸Óo¸ÒÄ[¸±" ¸€–¸±" ¸47ª¸ÔŸ ·ïà#·^3È·âãï·âãï··ß«¶&Ÿâãï·aÍ–7aÍ–7·ß«¶˜`r·¿X¾7€n7¿X¾75ÃB8Å.8—Õj8:µ§8Ð88Ú8G¡8 €‰8±“8G¡8øÈV8—Õj8ƒè~8g˱8G¡8G¡8Ð8—Õj8ƒè~8±“8±“8—Õj8óýÅ8g˱80Ï8:µ§8øÈV8ƒè~8 €‰8 €‰8G¡8g˱8®ã»8:µ§80Ï8¿X¾7²Ð^7·ß«¶€n7aÍ–7GµGµÔŸ ·ÔŸ ·&Ÿ˜`r·âãï·#½3¸&ŸêM´¸”Ü渳f¾¸Óo¸TÖ ¸ËŒ¸³f¾¸47ª¸€–¸Óo¸€–¸#½3¸K½G¸TÖ ¸K½G¸ÒÄ[¸Óo¸ÒÄ[¸½ó¸ÒÄ[¸½ó¸€–¸€–¸±" ¸€–¸47ª¸³f¾¸€–¸47ª¸Óo¸ËŒ¸TÖ ¸TÖ ¸ÔŸ ·Gµâãï·^3È·aÍ–7Gµ€n7æ70Ï8æ7 €‰8øÈV85ÃB8±“8øÈV8óýÅ8ÅWä8;`9œø8óýÅ88Ú8;`9)›9Õ† 9Ñò$9þÛ9.s98 +*9Ñò$98 +*9Û¡H9¯:49."/9ª]9Dm>9ÃÅ9¯:49)›9)›9yî8ÅWä8.s9)›9g˱8G¡8ƒè~8G¡8ƒè~8—Õj8±“8±“8:µ§8ƒè~8:µ§8±“8ƒè~8øÈV8:µ§8®ã»8øÈV8—Õj85ÃB8øÈV8G¡8ƒè~80Ï8—Õj80Ï8€n70Ï80Ï8Ôâ8aÍ–7aÍ–7€n7·ß«¶·ß«¶·ß«¶ïà#·aÍ–7€n7ïà#··ß«¶ö^…6GµaÍ–7€n7æ70Ï8Ôâ8 €‰85ÃB8—Õj8 €‰8G¡8:µ§8:µ§8 €‰8 €‰8øÈV8:µ§8G¡8:µ§8óýÅ88Ú8óýÅ8;`9œø8;`9yî8Õ† 9ÃÅ9Ñò$9ß¼M9Û¡H98 +*9ÃÅ9ÃÅ98 +*9)›9Ñò$9."/98 +*9Dm>9ZØR9Dm>98 +*9%°9Ñò$9Û¡H9."/9þÛ9."/9%°9."/98 +*9¸S998 +*9ÃÅ9R‡C9¯:49Dm>98 +*9Ñò$9ÃÅ98Ú8œø8Ð88Ú8óýÅ8;`9g˱8—Õj8®ã»8óýÅ88Ú8Ð8Ð8óýÅ8G¡8G¡8®ã»8óýÅ8óýÅ88Ú8yî8ÅWä8g˱8®ã»8ÅWä8±“8®ã»8Ð8G¡8ƒè~88Ú88Ú8ÅWä8þÛ9Ð8óýÅ8óýÅ8ƒè~8Ð88Ú8g˱8Ð8yî8%°9þÛ98 +*9ß¼M9Û¡H9R‡C9R‡C9R‡C9ZØR9ß¼M9IôW9ZØR9."/9ß¼M9R‡C9%°9¸S99IôW9ZØR9Û¡H9ª]9ZØR9k†q9IôW9¶Jg9¶Jg9]hl9]hl9z-b9k†q9űŠ9]hl9Fƒ9]hl9z-b9l!ˆ9űŠ9]hl9]hl9ª]9¶Jg9IôW9¯:49Û¡H9Dm>9Ñò$98 +*9¯:49."/9Õ† 9Õ† 9ÅWä88Ú8Õ† 9.s9)›9Ñò$9)›9þÛ9œø8."/9ÃÅ9;`9;`98Ú88Ú88Ú8óýÅ8œø8%°9.s9.s9þÛ9œø88Ú8%°9¯:49ÃÅ9Ñò$9þÛ9¯:49¸S99ÃÅ9ÃÅ98 +*98 +*9¯:49¯:49Ñò$98 +*9¯:49ZØR9."/9R‡C9Dm>9ª]9¸S99Û¡H9¯:49Dm>9."/9Ñò$9þÛ9Ñò$9.s9Ñò$9¸S998 +*9ª]9Dm>9Û¡H9ZØR9¸S99¸S99ª]9¸Ã{9ª]9zq€9k†q9IB9ߨœ9ߤv9B‘…9B‘…9zq€9ß¼M9k†q9ß¼M9ZØR9z-b9z-b9IôW9ZØR9¸S99¯:49Û¡H9ß¼M9ZØR9¶Jg9R‡C9z-b9¸Ã{9¸Ã{9¸Ã{9¶Jg9¶Jg9k†q9¶Jg9]hl9IôW9]hl9ª]9ß¼M9Dm>9¯:49R‡C9Dm>98 +*9ÃÅ9;`9ÃÅ9Õ† 9Õ† 9ÃÅ9;`9;`9þÛ9%°9)›98 +*9þÛ9¸S99ÃÅ9%°9."/98 +*9þÛ9þÛ9ZØR9¶Jg9ß¼M9Û¡H9."/9Dm>98 +*9."/9."/98 +*9Û¡H9ß¼M9Dm>98 +*9Û¡H9R‡C9Û¡H9Û¡H9ZØR9ª]9Dm>9¸Ã{9ª]9z-b9k†q9zq€9¸Ã{9ߤv9Fƒ9űŠ9zq€9l!ˆ9k†q9l!ˆ9Ôc’9IB9űŠ9B‘…9]hl9k†q9¶Jg9k†q9ߤv9zq€9B‘…9l!ˆ9l!ˆ9ߤv9ùÒ9ùÒ9l!ˆ9IB9Fƒ9Fƒ9¶Jg9ª]9R‡C9ª]9."/9%°9%°9yî8)›9.s9Õ† 9%°9.s9;`9)›9;`9Ð8ÅWä8;`98Ú8:µ§85ÃB80Ï8æ7€n7€n7GµÔŸ ·ÔŸ ·ÔŸ ·ïà#·ö^…6Gµ€n7ÔŸ ·æ7æ7ö^…6€n7ïà#·ÔŸ ·ÔŸ ·&Ÿԟ ·ïà#·ÔŸ ·^3È·#½3¸˜`r·^3È·Gµö^…6€n7·ß«¶ïà#·˜`r·Gµæ7GµaÍ–7ö^…6ö^…6aÍ–7ƒè~8—Õj8²Ð^7¿X¾70Ï8æ7aÍ–7Ôâ85ÃB8aÍ–7²Ð^7Gµ0Ï8Ôâ8€n7ö^…6Gµ·ß«¶€n7ïà#·&ŸTÖ ¸TÖ ¸#½3¸âãï·^3È·TÖ ¸&Ÿâãï·K½G¸47ª¸€–¸€–¸x¼Ü¸Qþð¸ž!û¸x¼Ü¸V¶¹V¶¹Qþð¸¦Þ¹ë6&¹25¹4ÌD¹vN+¹ÿO¹£9Y¹˜T¹4ÌD¹ÞæI¹ah¹Øêw¹n4†¹"®m¹Ž¹É }¹JÌr¹ah¹ +sc¹ +sc¹Øêw¹JÌr¹ah¹ V^¹ V^¹JÌr¹˜T¹Øêw¹Øêw¹ÿO¹JÌr¹ V^¹ V^¹"®m¹˜T¹Øêw¹Ž¹É }¹JÌr¹Ž¹¤Äˆ¹Øêw¹ +sc¹É }¹f¤ƒ¹JÌr¹n4†¹¤Äˆ¹JÌr¹Ž¹ÞæI¹ÿO¹˜T¹ÿO¹£9Y¹ V^¹4ÌD¹£9Y¹f0¹²?¹˜T¹Ìó¹4ÌD¹\˜:¹ÞæI¹25¹V¶¹”Üæ¸V¶¹Qþ𸑠¹(Ê ¹”Üæ¸(Ê ¹ë6&¹ò!¹vN+¹ò!¹25¹JÌr¹JÌr¹£9Y¹4ÌD¹ +sc¹ V^¹£9Y¹"®m¹ÿO¹Øêw¹ V^¹Ž¹f¤ƒ¹Øêw¹ +sc¹ah¹ V^¹²?¹JÌr¹JÌr¹£9Y¹˜T¹JÌr¹Ž¹¤Äˆ¹Øêw¹É }¹ah¹f¤ƒ¹U‹¹6“¹n4†¹É }¹U‹¹–幤Ĉ¹n4†¹f¤ƒ¹6“¹6“¹¤Äˆ¹Ž¹"®m¹Pv¹àºš¹É }¹Pv¹6“¹¤Äˆ¹àºš¹–å¹n4†¹Ž¹Ž¹Øêw¹U‹¹n4†¹f¤ƒ¹ÞŸ¹n4†¹n4†¹"®m¹ah¹˜T¹˜T¹£9Y¹ +sc¹JÌr¹£9Y¹²?¹ÿO¹4ÌD¹\˜:¹f0¹25¹f0¹ë6&¹Ìó¹ë6&¹vN+¹vN+¹25¹25¹vN+¹Ìó¹6£¹(Ê ¹6£¹³f¾¸47ª¸ž!û¸Qþð¸47ª¸rȸrȸ€–¸êM´¸³f¾¸Qþð¸êM´¸±" ¸€–¸”Üæ¸x¼Ü¸³f¾¸žÒ¸³f¾¸žÒ¸³f¾¸”Üæ¸rȸ±" ¸”Üæ¸(Ê ¹Ìó¹ò!¹f0¹‘ ¹4ÌD¹25¹25¹ÿO¹²?¹4ÌD¹²?¹ÞæI¹4ÌD¹ÿO¹˜T¹ +sc¹"®m¹£9Y¹JÌr¹ +sc¹ +sc¹ÿO¹"®m¹4ÌD¹£9Y¹²?¹ò!¹‘ ¹ò!¹¦Þ¹¦Þ¹Ìó¹ë6&¹(Ê ¹6£¹žÒ¸V¶¹Ìó¹êM´¸€–¸ËŒ¸€–¸ÒÄ[¸±" ¸ËŒ¸^3È·Óo¸½ó¸TÖ ¸K½G¸K½G¸^3È·K½G¸€–¸ÒÄ[¸K½G¸€–¸€–¸±" ¸±" ¸ÒÄ[¸Óo¸K½G¸±" ¸47ª¸K½G¸½ó¸TÖ ¸ÒÄ[¸Óo¸êM´¸Óo¸ÒÄ[¸½ó¸#½3¸TÖ ¸&ŸTÖ ¸ÒÄ[¸#½3¸ÒÄ[¸€–¸€–¸47ª¸€–¸(Ê ¹”Ü渳f¾¸(Ê ¹ž!û¸f0¹ò!¹ò!¹¦Þ¹V¶¹Qþð¸žÒ¸êM´¸žÒ¸ž!û¸ž!û¸V¶¹ž!û¸ž!û¸³f¾¸žÒ¸Qþð¸rȸ±" ¸rȸ³f¾¸êM´¸K½G¸³f¾¸ÒÄ[¸K½G¸ÒÄ[¸âãï··ß«¶€n7Gµ²Ð^7Ôâ8Ôâ8Ôâ8Å.8ƒè~8Å.80Ï8—Õj8 €‰8ÅWä8 €‰8 €‰8G¡8øÈV8ƒè~8¿X¾7æ7øÈV85ÃB8ƒè~8øÈV8óýÅ8:µ§8ÅWä8G¡8®ã»88Ú8g˱8±“8®ã»8g˱8.s9)›9Õ† 9;`9;`9;`9yî8Ð8œø8ÅWä8œø8Ð8±“8œø8ÅWä8óýÅ8óýÅ8óýÅ8óýÅ8±“8±“8Ð8 €‰8 €‰8±“8±“8Ôâ8Å.8Å.8æ7¿X¾7Gµïà#·aÍ–7Ôâ8¿X¾70Ï8Ôâ8²Ð^7ö^…60Ï8Ôâ8ö^…6€n7˜`r·ïà#··ß«¶æ7¿X¾7¿X¾7ö^…6¿X¾7Gµ²Ð^7€n7€n7GµTÖ ¸ö^…6ÔŸ ·æ7Gµ¿X¾70Ï8ö^…6aÍ–7²Ð^7€n7Å.8g˱8óýÅ8ÅWä8®ã»8:µ§8®ã»8óýÅ8g˱8:µ§8ÅWä8g˱8)›9yî88Ú8;`9þÛ9Ñò$9Ñò$9Ñò$9Û¡H9Õ† 9%°9R‡C9%°9þÛ9Ñò$9."/9Ñò$9Dm>9ª]9¯:49Û¡H9¯:49¯:49þÛ9Dm>98 +*9R‡C9¯:49Õ† 9þÛ9Ñò$9)›9;`9Õ† 9;`98Ú8yî88Ú8Ð8Ð8;`9Õ† 9%°9;`9ÃÅ9;`9yî88Ú8±“8g˱8®ã»8±“8:µ§8óýÅ8®ã»88Ú8®ã»8:µ§8:µ§8 €‰8Å.80Ï85ÃB8—Õj8Å.85ÃB8æ7¿X¾7¿X¾7æ75ÃB8€n7øÈV8Ôâ8—Õj85ÃB8Ôâ8—Õj8æ7æ7ƒè~8óýÅ8g˱8®ã»8g˱8:µ§8óýÅ8Ð8Õ† 9;`98Ú8Õ† 9.s9¯:49."/98 +*9ZØR98 +*9Ñò$9."/9¯:49Ñò$9."/9Û¡H9ª]9]hl9Û¡H9k†q9z-b9z-b9¸Ã{9Dm>9IôW9ª]9ª]9ZØR9ZØR9k†q9ߤv9IôW9z-b9z-b9R‡C9ZØR9ZØR9ZØR9ß¼M9Dm>9Ñò$98 +*9)›9Dm>9þÛ9Ñò$9yî8Õ† 9;`9œø8;`9yî8;`9;`9yî8 €‰8øÈV8±“85ÃB8æ7±“8 €‰8øÈV8±“8æ7æ7æ7ö^…6€n7€n7aÍ–7æ7aÍ–7Å.8Å.8øÈV8—Õj8øÈV8œø8ÅWä8óýÅ8Ð8óýÅ8g˱8:µ§8g˱8G¡8:µ§8óýÅ8g˱88Ú8Ð8yî88Ú8óýÅ8óýÅ8®ã»8±“8®ã»8ÅWä8óýÅ8ÅWä8Õ† 9Ð8.s9ÅWä88Ú8Õ† 9)›9;`9þÛ9ÃÅ9ÃÅ9Õ† 9;`9.s9)›9)›9%°9;`9Ð8œø8œø8.s9)›9œø8;`9yî8ÃÅ9)›9Ð8®ã»8yî8œø8g˱8g˱8œø8®ã»8:µ§8®ã»8 €‰8øÈV8:µ§8óýÅ8øÈV80Ï8 €‰8¿X¾7ïà#·ö^…6·ß«¶·ß«¶€n7€n7˜`r··ß«¶âãï·&ŸTÖ ¸€–¸ÔŸ ·ïà#·&Ÿâãï··ß«¶·ß«¶TÖ ¸ïà#·ïà#·ÔŸ ·TÖ ¸#½3¸^3È·˜`r·˜`r·ÔŸ ·˜`r·#½3¸ÔŸ ·ÔŸ ·&Ÿ#½3¸âãï·K½G¸&Ÿ½ó¸ÒÄ[¸#½3¸^3È··ß«¶ïà#·aÍ–7¿X¾7ïà#·ïà#·Å.8Ôâ85ÃB80Ï8Ôâ8Å.8Ôâ8²Ð^7Ôâ85ÃB8æ7Å.8æ7øÈV8Å.85ÃB8æ7¿X¾7Å.85ÃB80Ï8ƒè~8 €‰85ÃB8Ôâ8ƒè~8Å.80Ï8²Ð^7GµGµGµ˜`r·^3È·^3È·€–¸K½G¸^3È·Óo¸€–¸K½G¸#½3¸Óo¸ËŒ¸±" ¸x¼Ü¸žÒ¸47ª¸ž!û¸ž!û¸6£¹Ìó¹¦Þ¹ž!û¸V¶¹ž!û¸6£¹6£¹(Ê ¹25¹\˜:¹\˜:¹25¹25¹ë6&¹25¹f0¹ë6&¹(Ê ¹ž!û¸”Üæ¸Qþð¸Qþð¸x¼Ü¸žÒ¸‘ ¹ò!¹¦Þ¹”Ü渔Üæ¸êM´¸6£¹žÒ¸47ª¸Qþð¸±" ¸€–¸±" ¸ÒÄ[¸ïà#·#½3¸ÒÄ[¸ÒÄ[¸K½G¸TÖ ¸TÖ ¸TÖ ¸&ŸK½G¸Óo¸âãï·#½3¸˜`r·ÔŸ ·âãï·ïà#·aÍ–7˜`r·˜`r·Gµ€n7€n7€n7æ7æ70Ï8Å.8aÍ–7²Ð^7Gµïà#·GµTÖ ¸GµÔŸ ·âãï·âãï·&Ÿ^3È·TÖ ¸·ß«¶ïà#·ïà#·ö^…6Gµö^…6aÍ–7²Ð^7²Ð^7·ß«¶Gµ¿X¾7aÍ–7Gµ²Ð^7€n7·ß«¶·ß«¶âãï·ÒÄ[¸^3È·âãï·˜`r·âãï·ïà#·ïà#·&ŸÒÄ[¸ÒÄ[¸Óo¸&ŸK½G¸&Ÿ½ó¸Óo¸TÖ ¸K½G¸ÔŸ ·K½G¸€–¸Óo¸#½3¸^3È·Óo¸47ª¸Óo¸ÒÄ[¸Óo¸±" ¸±" ¸Óo¸#½3¸K½G¸K½G¸K½G¸K½G¸âãï·ïà#·âãï·€n7aÍ–7aÍ–75ÃB85ÃB8aÍ–7²Ð^7aÍ–75ÃB8—Õj85ÃB8Å.8Ôâ8 €‰8øÈV8Å.85ÃB8¿X¾7aÍ–70Ï8¿X¾70Ï8Ôâ8€n7€n7€n75ÃB8²Ð^7Ôâ80Ï85ÃB8æ7˜`r·Gµ·ß«¶ö^…6ö^…6€n7¿X¾70Ï8aÍ–7ö^…6²Ð^7&ŸTÖ ¸ïà#·âãï·ÔŸ ·˜`r··ß«¶˜`r·#½3¸K½G¸K½G¸€–¸#½3¸TÖ ¸^3È·ÔŸ ·#½3¸âãï·^3È·ÔŸ ·ïà#·ÔŸ ·aÍ–7ö^…6^3È·€n7Gµö^…6^3È·€n7·ß«¶TÖ ¸âãï·˜`r·€n7·ß«¶aÍ–7Gµ²Ð^7ïà#·TÖ ¸æ7€n7¿X¾7æ75ÃB8—Õj8æ7¿X¾7Å.8¿X¾7æ7aÍ–7Ôâ8Ôâ8Å.8ƒè~8—Õj8óýÅ8ƒè~8ƒè~8øÈV8—Õj8ƒè~8±“8øÈV8øÈV8±“8±“8g˱8ƒè~8 €‰8ƒè~8Ôâ85ÃB8 €‰85ÃB8øÈV85ÃB8 €‰8—Õj8—Õj8æ75ÃB8æ70Ï85ÃB8Å.8Å.8aÍ–7Å.8 €‰8—Õj85ÃB8ƒè~8 €‰8øÈV8ƒè~8¿X¾75ÃB8øÈV8ƒè~8øÈV85ÃB8—Õj85ÃB85ÃB80Ï8¿X¾7aÍ–7ö^…6ïà#·Gµæ7€n7æ7æ7±“8G¡85ÃB80Ï8±“85ÃB8Å.8²Ð^7GµøÈV8—Õj8øÈV8±“8Ôâ80Ï8±“8:µ§8Å.8€n7G¡8øÈV8ƒè~8g˱8±“8Ð8g˱8g˱8Ð88Ú8óýÅ8yî8;`9œø8;`9œø8óýÅ88Ú8;`9yî8óýÅ8 €‰8®ã»8®ã»8Ð8®ã»8±“8ƒè~8øÈV8g˱88Ú88Ú8 €‰8øÈV8æ7æ7²Ð^7Ôâ8€n7Gµ·ß«¶ö^…6²Ð^7€n7#½3¸âãï·K½G¸#½3¸TÖ ¸&Ÿ#½3¸ÒÄ[¸½ó¸Óo¸êM´¸±" ¸ÒÄ[¸K½G¸ÒÄ[¸#½3¸ÒÄ[¸&Ÿ#½3¸&ŸTÖ ¸&ŸTÖ ¸€–¸K½G¸&ŸÒÄ[¸½ó¸€–¸K½G¸âãï·ÔŸ ·&ŸTÖ ¸&ŸTÖ ¸TÖ ¸ÒÄ[¸^3È·#½3¸âãï·Gµ˜`r·ïà#·TÖ ¸Gµïà#·âãï·˜`r·&ŸGµGµ€n7æ7Å.8Å.8¿X¾7ƒè~8ƒè~85ÃB8ÅWä8—Õj8Å.8g˱8 €‰8®ã»88Ú88Ú8Ð8yî8;`9óýÅ8%°9þÛ9."/9¸S99)›9)›9%°9Õ† 9þÛ9œø8.s9yî8œø8Õ† 9Ð8Õ† 9yî8Ð88Ú8ÅWä8ÅWä8.s9œø8;`9ÅWä8±“8G¡8®ã»8G¡8g˱88Ú8óýÅ8±“8®ã»8 €‰8 €‰8ƒè~8øÈV85ÃB85ÃB80Ï8aÍ–7ö^…6ïà#·€n70Ï8€n7²Ð^7¿X¾7¿X¾7—Õj8²Ð^7·ß«¶^3È·ïà#·^3È·ïà#·ïà#·ïà#·ÔŸ ·^3È·K½G¸#½3¸#½3¸âãï·&ŸTÖ ¸^3È·K½G¸TÖ ¸&Ÿö^…6^3È·ö^…6ïà#·˜`r·ö^…6˜`r·K½G¸K½G¸^3È·^3È·ö^…6Gµ·ß«¶·ß«¶aÍ–7¿X¾7—Õj8Ôâ8aÍ–7²Ð^7¿X¾7ïà#·^3È·ö^…6Ôâ8æ7€n7€n7ïà#·Gµâãï·TÖ ¸·ß«¶·ß«¶ÔŸ ·ïà#·K½G¸^3È·&Ÿ€–¸TÖ ¸&ŸÒÄ[¸âãï·âãï·#½3¸TÖ ¸47ª¸€–¸±" ¸žÒ¸x¼Ü¸êM´¸rȸ(Ê ¹(Ê ¹¦Þ¹ë6&¹¦Þ¹¦Þ¹ž!û¸ž!û¸6£¹6£¹”Ü渑 ¹ò!¹ë6&¹‘ ¹ë6&¹f0¹f0¹ò!¹‘ ¹ë6&¹ë6&¹f0¹ò!¹V¶¹Ìó¹ž!û¸ë6&¹Ìó¹Ìó¹¦Þ¹¦Þ¹Ìó¹”Ü渔Üæ¸ò!¹x¼Ü¸€–¸”Ü渳f¾¸Óo¸K½G¸K½G¸ÒÄ[¸&ŸGµ˜`r·ïà#·âãï··ß«¶^3È·aÍ–7ïà#·ïà#·¿X¾7Å.8aÍ–7aÍ–7Ôâ85ÃB8—Õj8øÈV85ÃB8g˱8G¡8øÈV8ƒè~85ÃB85ÃB8—Õj8óýÅ8G¡8—Õj8®ã»8—Õj8øÈV8øÈV8aÍ–7€n7¿X¾7·ß«¶€n7ÔŸ ·&Ÿ^3È·ÔŸ ·€n7˜`r·TÖ ¸^3È·TÖ ¸&Ÿ&ŸTÖ ¸TÖ ¸#½3¸±" ¸€–¸€–¸47ª¸47ª¸žÒ¸€–¸±" ¸#½3¸TÖ ¸^3È·ÔŸ ·ÒÄ[¸&ŸÒÄ[¸Óo¸Óo¸&Ÿ€–¸Óo¸ÒÄ[¸€–¸ÒÄ[¸ÒÄ[¸ÒÄ[¸K½G¸âãï·ïà#·âãï·K½G¸ÔŸ ·aÍ–7€n7æ7Gµ€n7øÈV8Ôâ8Å.8aÍ–70Ï8²Ð^7ö^…65ÃB8¿X¾70Ï8¿X¾7Å.8±“8G¡8øÈV8G¡8g˱8óýÅ8;`9;`9œø8óýÅ8;`9Õ† 9)›9þÛ9%°9)›9Ñò$9¯:49Ñò$9."/9ÃÅ9ÃÅ9Ñò$9)›9.s9ÅWä8ÅWä8yî8)›9¯:49.s9.s9ÃÅ9Ð8Ð8%°9;`9yî8G¡8yî8yî8 €‰8:µ§8 €‰85ÃB8ƒè~85ÃB8¿X¾7¿X¾7²Ð^7Å.8Ôâ8^3È·˜`r·^3È·TÖ ¸^3È·^3È·âãï·&Ÿ½ó¸€–¸47ª¸rȸK½G¸Óo¸&Ÿ&ŸÒÄ[¸TÖ ¸€n7âãï·ÔŸ ·âãï··ß«¶TÖ ¸âãï·ïà#·#½3¸ËŒ¸âãï·âãï·#½3¸âãï·K½G¸âãï·TÖ ¸âãï·Gµ^3È·TÖ ¸ïà#·^3È·˜`r·TÖ ¸˜`r·˜`r·˜`r·âãï·ÔŸ ·âãï·K½G¸€–¸#½3¸€–¸K½G¸TÖ ¸TÖ ¸#½3¸&Ÿԟ ·˜`r·âãï·&Ÿö^…6˜`r·ö^…6ÔŸ ··ß«¶·ß«¶€n7˜`r·^3È·Gµâãï·€–¸K½G¸±" ¸ËŒ¸€–¸&Ÿ&Ÿ€–¸&Ÿ½ó¸K½G¸€–¸€–¸ÒÄ[¸47ª¸½ó¸ÒÄ[¸rȸ³f¾¸x¼Ü¸êM´¸êM´¸(Ê ¹6£¹V¶¹6£¹(Ê ¹6£¹(Ê ¹(Ê ¹žÒ¸V¶¹ž!û¸x¼Ü¸rȸ³f¾¸47ª¸K½G¸K½G¸ÒÄ[¸&ŸK½G¸Óo¸ÒÄ[¸47ª¸47ª¸½ó¸#½3¸€–¸âãï·âãï·ÒÄ[¸&ŸTÖ ¸^3È·#½3¸TÖ ¸K½G¸#½3¸ÔŸ ·ÔŸ ·^3È·ö^…6Gµæ7€n7²Ð^7²Ð^7€n7aÍ–7€n7²Ð^7ö^…6aÍ–7GµGµaÍ–7˜`r·˜`r·ö^…6¿X¾7ö^…6ïà#·ÔŸ ·TÖ ¸ïà#·ÔŸ ·ïà#·ïà#·˜`r·ïà#·âãï··ß«¶TÖ ¸âãï·Óo¸ÒÄ[¸½ó¸êM´¸³f¾¸êM´¸ÒÄ[¸K½G¸±" ¸#½3¸TÖ ¸K½G¸€–¸Óo¸47ª¸rȸrȸrȸQþð¸47ª¸”Ü渔Üæ¸V¶¹ë6&¹¦Þ¹rȸQþð¸47ª¸Qþð¸rȸžÒ¸êM´¸Óo¸êM´¸€–¸±" ¸³f¾¸x¼Ü¸±" ¸Óo¸€–¸K½G¸^3È·˜`r·½ó¸&Ÿâãï·ïà#·ÔŸ ·&Ÿâãï·ÔŸ ·K½G¸âãï·˜`r·ÔŸ ·TÖ ¸&ŸÓo¸&Ÿ#½3¸Óo¸½ó¸&Ÿâãï·TÖ ¸âãï·ïà#·ÔŸ ··ß«¶GµaÍ–7Gµïà#·ïà#·ö^…6Gµö^…6¿X¾7aÍ–7¿X¾7ö^…6æ7·ß«¶ÔŸ ·˜`r·^3È·TÖ ¸#½3¸ÒÄ[¸#½3¸ÒÄ[¸½ó¸€–¸€–¸½ó¸47ª¸€–¸½ó¸€–¸47ª¸€–¸&Ÿ±" ¸rȸrȸ6£¹x¼Ü¸V¶¹ž!û¸x¼Ü¸ž!û¸x¼Ü¸x¼Ü¸rȸx¼Ü¸êM´¸Óo¸€–¸±" ¸½ó¸47ª¸€–¸ÒÄ[¸ÒÄ[¸±" ¸±" ¸½ó¸#½3¸ÒÄ[¸TÖ ¸ÒÄ[¸&Ÿâãï·&Ÿ#½3¸&ŸTÖ ¸ö^…6€n7ïà#·&Ÿ€n7âãï·âãï·aÍ–7˜`r·ÔŸ ·ïà#·âãï·#½3¸€–¸&Ÿ±" ¸Óo¸˜`r·ÔŸ ·TÖ ¸ÔŸ ·ÔŸ ·Gµ^3È·ÔŸ ·€n7âãï·ïà#·€n7€n7˜`r··ß«¶^3È·Gµö^…6Gµ€n7€n7²Ð^7˜`r·Gµ€n7Gµ²Ð^70Ï8Ôâ8—Õj8¿X¾70Ï8¿X¾7ö^…6GµÔâ8ö^…6ïà#·˜`r·âãï·#½3¸âãï·47ª¸47ª¸47ª¸€–¸47ª¸rȸˌ¸”Üæ¸rȸ€–¸êM´¸47ª¸€–¸rȸ³f¾¸±" ¸žÒ¸rȸžÒ¸x¼Ü¸žÒ¸(Ê ¹V¶¹x¼Ü¸x¼Ü¸žÒ¸êM´¸6£¹(Ê ¹¦Þ¹V¶¹”Üæ¸V¶¹(Ê ¹(Ê ¹x¼Ü¸47ª¸#½3¸ÒÄ[¸Óo¸±" ¸47ª¸±" ¸Óo¸€–¸€–¸€–¸±" ¸€–¸47ª¸€–¸Óo¸TÖ ¸ÒÄ[¸½ó¸€–¸ÒÄ[¸#½3¸ÒÄ[¸€–¸#½3¸K½G¸TÖ ¸Óo¸#½3¸ËŒ¸#½3¸½ó¸½ó¸47ª¸47ª¸TÖ ¸#½3¸€–¸Óo¸Óo¸^3È·Óo¸&Ÿ#½3¸€–¸êM´¸ËŒ¸ËŒ¸ÒÄ[¸€–¸êM´¸6£¹ž!û¸Ìó¹6£¹ž!û¸Ìó¹(Ê ¹x¼Ü¸ž!û¸¦Þ¹Ìó¹ë6&¹\˜:¹‘ ¹¦Þ¹ò!¹ÿO¹vN+¹\˜:¹vN+¹25¹4ÌD¹vN+¹\˜:¹vN+¹vN+¹£9Y¹ÞæI¹ÞæI¹ V^¹vN+¹ë6&¹vN+¹\˜:¹25¹ë6&¹ë6&¹vN+¹25¹Ìó¹ë6&¹‘ ¹vN+¹¦Þ¹(Ê ¹Ìó¹¦Þ¹¦Þ¹ò!¹¦Þ¹f0¹‘ ¹‘ ¹(Ê ¹‘ ¹‘ ¹Ìó¹¦Þ¹6£¹ž!û¸V¶¹6£¹6£¹6£¹Ìó¹rȸQþð¸Qþð¸Ìó¹ë6&¹žÒ¸Qþð¸V¶¹ž!û¸êM´¸êM´¸”Ü渞Ҹrȸ(Ê ¹6£¹x¼Ü¸x¼Ü¸ž!û¸rȸ47ª¸½ó¸½ó¸žÒ¸rȸˌ¸€–¸ËŒ¸êM´¸ÒÄ[¸Óo¸Óo¸47ª¸47ª¸47ª¸±" ¸½ó¸êM´¸€–¸žÒ¸€–¸47ª¸47ª¸êM´¸€–¸#½3¸êM´¸žÒ¸€–¸47ª¸47ª¸”Ü渔Ü渔Üæ¸Qþð¸”Üæ¸47ª¸ž!û¸ž!û¸”Üæ¸6£¹ž!û¸6£¹Qþð¸”Ü渔Üæ¸V¶¹6£¹rȸrȸ³f¾¸x¼Ü¸êM´¸±" ¸&Ÿ#½3¸€–¸ÔŸ ·#½3¸ÔŸ ·K½G¸ÒÄ[¸ÔŸ ·˜`r·˜`r·²Ð^7ö^…6Gµ¿X¾7²Ð^7Å.8€n70Ï8¿X¾7²Ð^7ö^…6¿X¾7ïà#·ïà#·TÖ ¸#½3¸·ß«¶¿X¾7€n7ö^…6˜`r·âãï·Gµ·ß«¶ö^…6aÍ–7·ß«¶ïà#·^3È·Gµ˜`r··ß«¶ÒÄ[¸TÖ ¸âãï·˜`r·TÖ ¸&Ÿ#½3¸^3È·ïà#·TÖ ¸âãï·ÔŸ ·Óo¸âãï·&ŸÒÄ[¸ËŒ¸K½G¸&Ÿ±" ¸âãï·âãï·âãï·ïà#·&Ÿ^3È·^3È·ÔŸ ·ïà#·ÔŸ ·€n70Ï8ö^…60Ï8æ7ö^…60Ï8ƒè~8Å.80Ï85ÃB8Å.85ÃB8 €‰8—Õj8 €‰85ÃB8±“8ƒè~8±“8®ã»8Õ† 98Ú8®ã»8óýÅ8®ã»88Ú88Ú8yî88Ú8¯:49Ñò$9þÛ98 +*9þÛ9¯:49ZØR9."/9ß¼M9ZØR9R‡C9Û¡H9Dm>9¸S99¸S99ZØR9¯:49ZØR9]hl9R‡C9IôW9ZØR9ZØR9ª]9ª]9IôW9ZØR9IôW9Û¡H98 +*9ß¼M9þÛ9ÃÅ9Õ† 9)›9)›9Õ† 9ÅWä8óýÅ8®ã»8Ð8:µ§8:µ§8ƒè~8øÈV8 €‰8ƒè~85ÃB8€n7ö^…6aÍ–7²Ð^70Ï8¿X¾7²Ð^7ö^…6aÍ–7æ7aÍ–7¿X¾7·ß«¶aÍ–7ö^…6€n7aÍ–7Ôâ8ö^…6æ7€n7æ7¿X¾7æ7Å.8aÍ–7¿X¾7€n7·ß«¶·ß«¶²Ð^7€n7€n7€n7²Ð^7Ôâ8æ7Ôâ8Ôâ8Å.8 €‰8Å.85ÃB8±“8¿X¾7—Õj8—Õj8ƒè~8g˱88Ú8;`98Ú8yî8;`9Õ† 9Ñò$9ß¼M9þÛ9¯:49Ñò$9."/9."/98 +*9Ñò$9%°9þÛ9¯:49."/9þÛ9Õ† 9þÛ9ÃÅ9%°9.s98Ú88Ú8ÅWä8ÃÅ9Õ† 9yî8Õ† 9yî8;`9óýÅ8G¡8 €‰8±“8ƒè~8G¡8G¡8ÅWä8ÅWä8:µ§8:µ§8øÈV8:µ§8ÅWä88Ú8:µ§8®ã»8G¡8Å.80Ï80Ï85ÃB85ÃB8æ7æ7²Ð^7Ôâ8Å.8ƒè~8¿X¾7ƒè~8Å.8—Õj8 €‰8øÈV8æ7¿X¾70Ï8øÈV8øÈV8:µ§85ÃB8Ôâ8±“8 €‰8 €‰8 €‰8±“8g˱8®ã»8Ð8®ã»85ÃB8:µ§8óýÅ8g˱8g˱8.s9œø88Ú88Ú8œø8Ð8g˱8Ð8®ã»8Ð8Ð8óýÅ8óýÅ8±“8óýÅ8g˱8:µ§8yî8ÅWä8Ð8g˱8ƒè~8g˱8g˱8Ð8yî8:µ§8G¡8±“8—Õj8 €‰85ÃB8øÈV8±“8¿X¾7aÍ–7æ7·ß«¶¿X¾7€n7aÍ–7Ôâ8ÔŸ ··ß«¶Gµïà#·²Ð^7·ß«¶˜`r··ß«¶˜`r·&ŸÓo¸âãï·#½3¸#½3¸âãï·ÔŸ ·K½G¸#½3¸^3È·ÒÄ[¸âãï·TÖ ¸&ŸK½G¸âãï·#½3¸ÒÄ[¸K½G¸ÒÄ[¸€–¸&Ÿ#½3¸ÔŸ ·TÖ ¸^3È·âãï·^3È·^3È·Gµ·ß«¶ïà#·0Ï8Å.8¿X¾7ö^…6ö^…6¿X¾7Ôâ8Å.8øÈV8—Õj8—Õj85ÃB8®ã»8ƒè~8 €‰8g˱8®ã»8øÈV8g˱8:µ§8G¡8±“8:µ§8ƒè~8óýÅ8:µ§8±“8 €‰8®ã»8±“8±“8—Õj8 €‰8øÈV8ƒè~8 €‰8øÈV8 €‰8¿X¾70Ï8Ôâ8Gµæ7¿X¾7Å.8Ôâ8¿X¾7ö^…6Gµ˜`r·ïà#·Gµïà#·˜`r·^3È·&Ÿ&Ÿ€–¸âãï·TÖ ¸&ŸÒÄ[¸TÖ ¸½ó¸€–¸TÖ ¸½ó¸K½G¸#½3¸€–¸±" ¸x¼Ü¸³f¾¸½ó¸TÖ ¸K½G¸€–¸ÒÄ[¸#½3¸€–¸ÒÄ[¸#½3¸TÖ ¸ö^…6Gµïà#·€n7—Õj8aÍ–7Å.85ÃB8Ôâ8øÈV8Å.80Ï8G¡8 €‰8—Õj85ÃB8Å.8Ôâ8±“8 €‰8ƒè~8ƒè~8G¡8Å.8æ7G¡8:µ§8ƒè~8 €‰8±“8®ã»8Ð8óýÅ8®ã»8:µ§8g˱8®ã»8®ã»8ÅWä88Ú8;`98Ú8Ð8g˱8g˱8:µ§8 €‰88Ú8±“8ƒè~8Ð8®ã»8®ã»8ƒè~8G¡8±“8ƒè~8±“88Ú8G¡8ƒè~8—Õj85ÃB8øÈV8Å.8æ7G¡8—Õj8—Õj8—Õj8æ7—Õj8—Õj8øÈV85ÃB8—Õj8G¡80Ï8ƒè~80Ï8Ôâ8Ôâ80Ï8€n7Ôâ8²Ð^7Ôâ85ÃB8¿X¾70Ï80Ï85ÃB80Ï8aÍ–7¿X¾7Ôâ8—Õj8—Õj8ƒè~8øÈV8—Õj8±“8:µ§8±“8®ã»8:µ§8—Õj8óýÅ8—Õj8®ã»8ÅWä8œø8Õ† 9œø8;`9ÃÅ9Õ† 9yî8Õ† 9yî8yî8Ð8yî8ÅWä8;`9%°9.s9þÛ9%°9%°9%°9Õ† 9.s98 +*9."/9;`9¯:49)›9.s9þÛ9.s9%°9Õ† 9)›9Õ† 9;`9Õ† 9yî8œø8ÅWä88Ú8óýÅ8—Õj8Ð8óýÅ85ÃB8:µ§8±“8—Õj8øÈV8¿X¾7æ7€n7˜`r·ïà#·âãï·ö^…6^3È·K½G¸TÖ ¸TÖ ¸ÒÄ[¸#½3¸&Ÿ&Ÿ€–¸TÖ ¸Óo¸K½G¸#½3¸·ß«¶&Ÿ&Ÿ&Ÿԟ ·^3È·âãï·aÍ–7^3È··ß«¶ö^…6aÍ–7Gµ·ß«¶aÍ–7€n75ÃB8Gµæ70Ï8ƒè~85ÃB8 €‰8G¡8 €‰8:µ§8:µ§8g˱8yî8Ð88Ú88Ú8®ã»8;`9Õ† 9:µ§8.s9)›9.s98 +*9Õ† 9ÅWä8Õ† 9ÃÅ9œø8óýÅ8ÃÅ9;`9|Pd|1|24600|2013-282T15:32:01.397 h'‚·–:Ñ·–:Ñ·Œ<϶¼Tµ7†Qý6¶8*829R8?¯8‘i¥8E‘8ŸÌÍ8$V›8—¹80ê×8$V›8u*ì8u*ì80ê×8ÙUz8—¹8ÙUz8$V›8?¯829R8ÙUz8‘i¥8E‘8ODf85>8ÙUz8ôD8ôD8#øÜ7ôD8ODf8E‘8ôD8¶8*8íL7h'‚·Œ<϶¼Tµ7DÑ7h'‚·F„D6†Qý6O©ÓµO©Óµúðø·b_¸b_¸KŽ¸KŽ¸b=„¸8LL¸–:Ñ·b=„¸Y[˜¸ƒ¬¸KŽ¸KŽ¸n¢¸KŽ¸Œ +߸KŽ¸TU`¸‰³À¸‰³À¸ƒ¬¸et¸Y[˜¸Lš¶¸TU`¸RJ8¸dP$¸TU`¸RJ8¸h'‚·ðŸ©·8LL¸KŽ¸KŽ¸8LL¸KŽ¸dP$¸b_¸8LL¸dP$¸dP$¸b_¸–:Ñ·úðø·F„D6Œ¶5·O©ÓµŒ¶5·DÑ7íL7ôD8F„D6¼Tµ7#øÜ729R8ôD8ôD85>8ÙUz8ÙUz8ôD8¶8*8¶8*8ôD8ôD8¼Tµ7ôD8¼Tµ7¶8*8ÙUz8O©ÓµF„D6íL7†Qý6ODf8ôD8ôD8íL7O©ÓµìZ85>8#øÜ7–:Ñ·O©ÓµŒ¶5·h'‚·Œ<϶b_¸b_¸úðø·8LL¸ðŸ©·úðø·ðŸ©·–:Ñ·KŽ¸dP$¸dP$¸et¸ƒ¬¸‰³À¸¸Îʸ +鸉³À¸Lš¶¸ +é¸!Mó¸Œ +߸ +é¸öʹ?Þ¹Èpý¸öʹÁëÔ¸ +鸉³À¸Èpý¸öʹ9ò ¹ƒ¬¸Y[˜¸Lš¶¸KŽ¸dP$¸RJ8¸8LL¸b_¸úðø·n¢¸ƒ¬¸ÁëÔ¸ÁëÔ¸ +é¸Èpý¸ƒ¬¸Œ +߸KŽ¸RJ8¸8LL¸TU`¸8LL¸dP$¸úðø·TU`¸b_¸úðø·–:Ñ·Œ¶5·–:ѷ🩷DÑ7O©ÓµŒ<϶🩷Œ¶5·#øÜ7†Qý6🩷🩷b_¸b_¸RJ8¸dP$¸dP$¸O©Óµb_¸úðø·úðø·RJ8¸b=„¸úðø·KŽ¸TU`¸Y[˜¸n¢¸‰³À¸!Mó¸Lš¶¸n¢¸KŽ¸ +é¸n¢¸ƒ¬¸ÁëÔ¸ƒ¬¸‰³À¸ +鸸ÎʸÁëÔ¸ +é¸úðø·8LL¸b_¸Lš¶¸KŽ¸¸ÎʸLš¶¸b=„¸ƒ¬¸Y[˜¸KŽ¸ƒ¬¸ƒ¬¸‰³À¸Œ +߸Œ +߸?Þ¹(¹\w,¹öʹ(¹2¹(¹”1¹²+P¹W¨6¹iÛ@¹vK¹žÁ;¹•H"¹±õE¹W¨6¹±õE¹iÛ@¹2¹W¨6¹”1¹(¹9ò ¹•H"¹Èpý¸ +é¸9ò ¹Œ +߸¸Îʸn¢¸öʹ +é¸n¢¸Lš¶¸Œ +߸Lš¶¸¸Îʸƒ¬¸ƒ¬¸ÁëÔ¸Y[˜¸TU`¸b=„¸KŽ¸úðø·¼Tµ7†Qý6h'‚·F„D6#øÜ7F„D6íL7Œ¶5·–:Ñ·h'‚·Œ<϶8LL¸8LL¸8LL¸dP$¸dP$¸RJ8¸–:Ñ·n¢¸n¢¸8LL¸úðø·úðø·8LL¸úðø·KŽ¸–:Ñ·TU`¸ƒ¬¸ÁëÔ¸Œ +߸2¹9ò ¹•H"¹(¹Þ¹W¨6¹vK¹Þ¹•H"¹•H"¹\w,¹²+P¹±õE¹eGU¹eGU¹vK¹W¨6¹°_'¹°_'¹W¨6¹°_'¹W¨6¹žÁ;¹žÁ;¹±õE¹±õE¹°_'¹”1¹\w,¹±õE¹²+P¹\w,¹²+P¹±õE¹Þ¹?Þ¹(¹Èpý¸Œ +߸!Mó¸ÁëÔ¸ +鸃¬¸n¢¸‰³À¸KŽ¸8LL¸n¢¸KŽ¸Y[˜¸Y[˜¸TU`¸KŽ¸dP$¸8LL¸–:Ñ·O©Óµb_¸b_¸Œ¶5·–:Ñ·Œ<϶🩷🩷F„D6†Qý6Œ<϶h'‚·Œ¶5·†Qý6Œ<϶Œ¶5·Œ¶5·úðø·Œ¶5·Œ<϶🩷Œ¶5·úðø·h'‚·Œ¶5·úðø·dP$¸ðŸ©·Œ¶5·ðŸ©·RJ8¸Œ¶5·†Qý6🩷–:Ñ·Œ<϶Œ¶5·Œ¶5·Œ¶5·O©Óµ–:Ñ·h'‚·†Qý6h'‚·ðŸ©·ðŸ©·úðø·úðø·TU`¸úðø·ðŸ©·ðŸ©·dP$¸dP$¸–:Ñ·–:Ñ·–:Ñ·8LL¸RJ8¸Y[˜¸Y[˜¸KŽ¸KŽ¸ƒ¬¸ÁëÔ¸¸Îʸ‰³À¸Y[˜¸ÁëÔ¸n¢¸KŽ¸n¢¸b_¸úðø·dP$¸b_¸úðø·F„D6Œ<϶Œ¶5·Œ¶5·ðŸ©·F„D6Œ¶5·†Qý6¼Tµ7†Qý6¼Tµ7íL7DÑ7†Qý6ôD8¦6‡8ODf829R8—¹8E‘8¦6‡8?¯8â°Ã8$V›8ÙUz85>85>8ìZ8ODf8¶8*8DÑ7¶8*8¶8*85>85>829R85>829R8F„D6¼Tµ7ìZ8ìZ8ôD8†Qý6ìZ8ODf8F„D6O©Óµ†Qý6O©ÓµO©ÓµF„D6Œ¶5·Œ¶5·Œ¶5·O©Óµúðø·úðø·b_¸dP$¸dP$¸dP$¸úðø·KŽ¸RJ8¸h'‚·b_¸Lš¶¸et¸RJ8¸TU`¸KŽ¸8LL¸b_¸KŽ¸b_¸RJ8¸b_¸úðø·–:Ñ·úðø·RJ8¸b_¸8LL¸úðø·dP$¸h'‚·Œ¶5·h'‚·F„D6Œ¶5·Œ¶5·DÑ7#øÜ7ODf8DÑ729R8ìZ829R8ÙUz829R85>8#øÜ7ìZ85>829R8¦6‡8$V›8¦6‡8ôD8¦6‡829R8ôD8¶8*85>829R8¦6‡8E‘8$V›8$V›8E‘8$V›8—¹8ÙUz8E‘8ÙUz8ODf8ODf8ODf8#øÜ7ìZ8ôD8ìZ8F„D6DÑ7¼Tµ7F„D6#øÜ7DÑ7†Qý6íL7†Qý6Œ<϶–:Ñ·O©Óµ†Qý6O©ÓµðŸ©·–:Ñ·Œ<϶–:Ñ·–:Ñ·b_¸ðŸ©·úðø·O©Óµb_¸8LL¸RJ8¸b=„¸b=„¸8LL¸TU`¸et¸dP$¸KŽ¸TU`¸et¸TU`¸h'‚·8LL¸b_¸úðø·†Qý6íL7h'‚·Œ¶5·ðŸ©·Œ¶5·Œ¶5·úðø·ðŸ©·O©ÓµF„D6ôD8F„D6O©ÓµDÑ7ODf8ìZ8¼Tµ7¶8*8¦6‡8‘i¥8$V›8â°Ã8$V›80ê×80ê×8Ö^ +9} â8ŸÌÍ8u*ì8} â8ŸÌÍ8u*ì8} â8—¹8?¯829R8?¯8E‘8¦6‡8E‘8ÙUz8¶8*8ÙUz8E‘85>829R8¼Tµ7ôD8‘i¥8ÙUz829R8¦6‡8‘i¥8¦6‡8¦6‡8ÙUz8ÙUz85>85>829R85>8E‘8ÙUz829R8#øÜ7ìZ8ODf8ìZ8DÑ7F„D6¼Tµ7Œ¶5·DÑ7¼Tµ7Œ<϶†Qý6Œ¶5·–:ѷ🩷úðø·TU`¸b_¸RJ8¸dP$¸TU`¸et¸n¢¸KŽ¸8LL¸TU`¸TU`¸dP$¸Y[˜¸–:Ñ·–:Ñ·–:Ñ·dP$¸dP$¸h'‚·TU`¸RJ8¸b_¸b_¸–:Ñ·Œ<϶úðø·ðŸ©·–:Ñ·íL7Œ<϶DÑ7O©ÓµìZ8¶8*829R85>8ÙUz8?¯8$V›829R80ê×8â°Ã8—¹8$V›8?¯8Mö8Ú‡9u*ì8XK989Mö8s9Ê#9s9Ê#9S9Mö8Ö^ +9S9XK9k³90ê×889u*ì8u*ì8ŸÌÍ8â°Ã80ê×8ŸÌÍ80ê×8?¯8$V›8¶8*85>8ìZ8F„D6ôD8ìZ8#øÜ7Œ¶5·úðø·úðø·h'‚·ðŸ©·b_¸úðø·b_¸RJ8¸KŽ¸8LL¸RJ8¸dP$¸b_¸dP$¸úðø·úðø·h'‚·dP$¸TU`¸dP$¸úðø·b_¸RJ8¸n¢¸8LL¸b_¸ðŸ©·RJ8¸–:ѷ🩷Œ<϶úðø·Œ<϶Œ¶5·Œ<϶–:Ñ·h'‚·Œ¶5·Œ<϶O©ÓµO©ÓµìZ8ìZ8ìZ8ôD8DÑ75>8ôD8#øÜ7¶8*8ìZ8íL7DÑ7¶8*85>8ìZ85>85>8E‘8?¯8E‘8ODf829R8ÙUz85>8$V›8¦6‡8E‘8ôD85>8$V›8ìZ8ODf8?¯8ÙUz8ìZ829R829R8ÙUz8â°Ã8ÙUz8ODf8ÙUz8ODf8ìZ8ôD8h'‚·¼Tµ7íL7Œ¶5·O©ÓµF„D6#øÜ7¶8*8ìZ8†Qý6¼Tµ7íL7Œ<϶h'‚·DÑ7Œ<϶🩷Œ<϶b_¸b_¸úðø·O©ÓµO©Óµúðø·úðø·ðŸ©·–:Ñ·8LL¸–:Ñ·íL7úðø·úðø·F„D6Œ¶5·Œ<϶–:Ñ·O©ÓµðŸ©·ðŸ©·O©Óµh'‚·h'‚·h'‚·KŽ¸úðø·–:Ñ·b_¸RJ8¸RJ8¸Œ¶5·F„D6Œ¶5·h'‚·íL7h'‚·ðŸ©·íL75>8¶8*829R8ìZ829R829R8ÙUz829R8‘i¥8?¯8â°Ã8â°Ã8¦6‡8?¯8—¹8$V›85>8$V›829R8$V›8ŸÌÍ8â°Ã8‘i¥8‘i¥8ODf8ÙUz85>8ÙUz85>8ÙUz829R85>8E‘8‘i¥8ìZ8ôD8ôD85>8¼Tµ7DÑ7ìZ8Œ<϶–:Ñ·h'‚·8LL¸b_¸KŽ¸KŽ¸úðø·8LL¸úðø·–:Ñ·n¢¸Y[˜¸h'‚·TU`¸TU`¸et¸ƒ¬¸KŽ¸dP$¸ƒ¬¸Y[˜¸RJ8¸dP$¸KŽ¸TU`¸TU`¸8LL¸ðŸ©·ðŸ©·Œ<϶F„D6–:Ñ·F„D6Œ<϶–:Ñ·Œ<϶🩷Œ<϶O©ÓµŒ<϶O©ÓµO©Óµh'‚·#øÜ7#øÜ7†Qý629R8ODf8ôD8¶8*829R8ÙUz829R8ôD8ôD8E‘8ÙUz8ôD85>8¶8*8E‘8E‘8—¹8ŸÌÍ8} â8XK9} â889s9XK9k³9} â8Mö8â°Ã8u*ì889Ê#9Ê#9Ê#9XK989XK98989Mö80ê×8u*ì8Mö8‘i¥8?¯8E‘8ÙUz8ôD8ôD8†Qý6ôD8¼Tµ7ìZ8O©ÓµF„D6Œ¶5·Œ¶5·O©Óµb_¸O©Óµúðø·h'‚·h'‚·O©Óµ–:ѷ🩷O©Óµ†Qý6F„D6h'‚·Œ<϶íL7h'‚·ðŸ©·†Qý6Œ<϶O©ÓµíL75>8¶8*8ÙUz8ODf829R8¶8*8ODf8ODf8¦6‡8¶8*85>8E‘8—¹8â°Ã8u*ì8Ö^ +9Mö8â°Ã8u*ì8—¹889XK9} â8} â88989XK9u*ì889XK9XK9s9Ú‡9Ö^ +9š39š39™®Q9Ê#9Ú‡9bá(9S9S9„*89k³9òC=9š39bá(9S9Ú‡9Ú‡9k³98ù-9k³9XK9s9} â8XK9} â8E‘8‘i¥80ê×8$V›8—¹8?¯8$V›8E‘8$V›8ÙUz8¶8*8ôD8#øÜ7O©Óµ¼Tµ7ìZ8DÑ7Œ<϶Œ¶5·íL7†Qý6†Qý6íL7F„D6O©Óµ¼Tµ7Œ¶5·F„D6O©Óµ†Qý6O©Óµ†Qý65>85>829R85>8#øÜ7ìZ8#øÜ7¶8*8ôD8‘i¥8¦6‡85>8ODf8ôD8?¯829R8‘i¥8$V›8¶8*8¦6‡8—¹8ÙUz8¦6‡8$V›8ODf8?¯8—¹8$V›8E‘8E‘8¦6‡8?¯8u*ì8Ö^ +9Mö8ŸÌÍ80ê×80ê×80ê×8} â8u*ì8u*ì8Ú‡9â]B90ê×8â°Ã8Mö8u*ì8Ú‡90ê×8ŸÌÍ8?¯8?¯8‘i¥8?¯8—¹8—¹8‘i¥8â°Ã8$V›8#øÜ7ìZ85>8#øÜ7DÑ7Œ<϶íL7h'‚·–:ѷ🩷8LL¸Œ<϶O©ÓµF„D6O©Óµ¼Tµ7#øÜ7ìZ8¼Tµ7ôD8†Qý6O©ÓµDÑ7DÑ7h'‚·DÑ75>8íL7DÑ7íL7†Qý6h'‚·úðø·b_¸8LL¸ðŸ©·dP$¸RJ8¸RJ8¸úðø·b_¸úðø·et¸TU`¸dP$¸KŽ¸úðø·h'‚·úðø·úðø·úðø·et¸–:Ñ·íL7O©ÓµŒ<϶ìZ8¶8*8íL7†Qý6E‘829R8¶8*8ODf8¶8*8ODf80ê×8—¹8ODf8¦6‡8‘i¥8u*ì8s9s90ê×8ŸÌÍ8Mö8â°Ã8ŸÌÍ8?¯8u*ì8‘i¥8ŸÌÍ8s9u*ì8Ö^ +9Ö^ +9u*ì8Mö8Mö8} â8XK9Ö^ +9} â889?¯8$V›8?¯8â°Ã8¦6‡8$V›8E‘829R8ODf8#øÜ7íL7íL7DÑ7DÑ7†Qý6†Qý6DÑ7íL7h'‚·úðø·h'‚·Œ<϶h'‚·b_¸F„D6TU`¸b_¸úðø·b_¸ðŸ©·ðŸ©·Œ<϶Œ<϶DÑ7O©ÓµO©Óµh'‚·Œ<϶O©Óµúðø·TU`¸ðŸ©·dP$¸–:Ñ·Œ<϶Œ<϶†Qý6íL7Œ<϶¼Tµ7Œ¶5·Œ¶5·Œ¶5·†Qý6íL7#øÜ75>8ÙUz829R85>8¦6‡85>8¦6‡85>8ìZ8#øÜ75>8$V›8E‘8$V›80ê×8XK9u*ì8—¹8â°Ã8â°Ã829R8¦6‡8ÙUz8ÙUz8ÙUz8#øÜ75>8ôD8ODf8DÑ7DÑ7ôD8ôD8íL7Œ<϶¼Tµ7O©ÓµDÑ7F„D6b_¸b_¸et¸b=„¸Y[˜¸ƒ¬¸ +é¸Èpý¸!M󸉳À¸Y[˜¸KŽ¸‰³À¸¸Îʸn¢¸ƒ¬¸8LL¸n¢¸ÁëÔ¸ƒ¬¸Œ +߸!Mó¸!Mó¸¸Îʸn¢¸¸Îʸ‰³À¸ +鸉³À¸KŽ¸RJ8¸8LL¸ÁëÔ¸ƒ¬¸Lš¶¸TU`¸Y[˜¸dP$¸dP$¸TU`¸RJ8¸dP$¸8LL¸úðø·Y[˜¸úðø·ðŸ©·úðø·úðø·h'‚·úðø·Œ<϶DÑ7DÑ7#øÜ7Œ<϶F„D6¶8*8ôD8#øÜ7#øÜ7ôD8¶8*8E‘8$V›8?¯8E‘829R8ôD8¦6‡8ÙUz829R8ôD8ODf8ìZ8¼Tµ7íL75>829R8ôD829R8#øÜ7#øÜ7íL7#øÜ7F„D6ìZ8¼Tµ7Œ<϶DÑ7F„D6úðø·Œ¶5·h'‚·–:ѷ🩷F„D6🩷Œ¶5·Œ¶5·O©Óµúðø·Œ<϶🩷úðø·Œ<϶🩷O©ÓµF„D6🩷F„D68LL¸b=„¸8LL¸KŽ¸KŽ¸dP$¸KŽ¸KŽ¸KŽ¸n¢¸Lš¶¸¸Îʸ‰³À¸Lš¶¸‰³À¸¸Îʸ¸Îʸ?Þ¹9ò ¹Èpý¸‰³À¸!Mó¸Œ +߸Œ +߸öʹY[˜¸Y[˜¸Lš¶¸Y[˜¸TU`¸8LL¸ðŸ©·O©ÓµŒ<϶Œ¶5·Œ¶5·¼Tµ7íL7†Qý6†Qý6–:Ñ·b_¸b_¸8LL¸b_¸O©ÓµO©Óµ¼Tµ7Œ¶5·F„D6Œ¶5·†Qý6O©Óµh'‚·íL7Œ<϶O©ÓµDÑ7†Qý6O©ÓµðŸ©·Œ<϶#øÜ7DÑ7†Qý6F„D6F„D6úðø·b_¸úðø·Œ<϶–:Ñ·úðø·8LL¸úðø·KŽ¸b_¸TU`¸n¢¸Èpý¸Œ +߸!Mó¸?Þ¹öʹ޹9ò ¹öʹÈpý¸9ò ¹2¹\w,¹•H"¹(¹2¹Þ¹2¹Èpý¸•H"¹2¹¸ÎʸÁëÔ¸Èpý¸öʹ9ò ¹9ò ¹öʹ9ò ¹2¹9ò ¹?Þ¹Èpý¸(¹(¹°_'¹•H"¹?Þ¹•H"¹Þ¹2¹iÛ@¹±õE¹ €_¹ŠcZ¹²+P¹”1¹•H"¹”1¹iÛ@¹ŠcZ¹vK¹žÁ;¹iÛ@¹iÛ@¹žÁ;¹W¨6¹”1¹±õE¹\w,¹W¨6¹Þ¹?Þ¹2¹Þ¹öʹ޹?Þ¹!Mó¸¸Îʸƒ¬¸KŽ¸Y[˜¸n¢¸n¢¸n¢¸Y[˜¸Y[˜¸ƒ¬¸ƒ¬¸KŽ¸n¢¸KŽ¸¸Îʸ¸Îʸ¸ÎʸY[˜¸Lš¶¸Œ +߸ +鸌 +߸‰³À¸Œ +߸Èpý¸Þ¹(¹9ò ¹W¨6¹(¹\w,¹Þ¹”1¹W¨6¹\w,¹9ò ¹°_'¹2¹\w,¹2¹Þ¹9ò ¹•H"¹9ò ¹•H"¹\w,¹W¨6¹\w,¹2¹±õE¹²+P¹vK¹iÛ@¹vK¹iÛ@¹eGU¹eGU¹eGU¹lØn¹Py¹vK¹²+P¹W¨6¹vK¹eGU¹iÛ@¹°_'¹(¹•H"¹?Þ¹öʹ(¹‰³À¸ƒ¬¸ +é¸Lš¶¸ÁëÔ¸¸Îʸn¢¸ÁëÔ¸¸Îʸ‰³À¸Lš¶¸‰³À¸¸Îʸn¢¸TU`¸KŽ¸Lš¶¸‰³À¸8LL¸TU`¸ðŸ©·TU`¸TU`¸b_¸KŽ¸Y[˜¸8LL¸et¸úðø·KŽ¸KŽ¸RJ8¸n¢¸ƒ¬¸n¢¸¸ÎʸLš¶¸Lš¶¸Lš¶¸‰³À¸¸Îʸ‰³À¸Èpý¸Èpý¸(¹Þ¹öʹW¨6¹Þ¹9ò ¹Þ¹öʹ°_'¹”1¹\w,¹2¹öʹ2¹Þ¹2¹2¹!Mó¸Èpý¸\w,¹2¹•H"¹9ò ¹(¹žÁ;¹W¨6¹°_'¹•H"¹2¹Þ¹(¹?Þ¹Þ¹(¹\w,¹öʹ9ò ¹2¹Œ +߸ +é¸ÁëÔ¸Lš¶¸n¢¸Y[˜¸TU`¸Y[˜¸KŽ¸TU`¸TU`¸8LL¸úðø·F„D6h'‚·ðŸ©·íL7Œ¶5·†Qý6F„D6íL7O©ÓµìZ8ìZ8¼Tµ7#øÜ7íL7íL7íL7†Qý6Œ¶5·O©ÓµôD829R829R8ODf85>829R8ÙUz8$V›8$V›8ODf8¦6‡8$V›85>8ODf829R8#øÜ7#øÜ7DÑ7¶8*8#øÜ7F„D6íL7íL7†Qý6O©ÓµF„D6h'‚·DÑ7Œ<϶F„D6†Qý6h'‚·b_¸n¢¸n¢¸b_¸8LL¸TU`¸KŽ¸ƒ¬¸‰³À¸n¢¸KŽ¸ÁëÔ¸n¢¸ƒ¬¸¸ÎʸŒ +߸öʹ‰³À¸Œ +߸Œ +߸‰³À¸ +é¸Èpý¸Œ +߸!Mó¸!Mó¸ +é¸ +é¸(¹Èpý¸9ò ¹ +鸌 +߸öʹ¸Îʸƒ¬¸ÁëÔ¸‰³À¸¸ÎʸKŽ¸Lš¶¸ÁëÔ¸n¢¸Y[˜¸KŽ¸8LL¸–:Ñ·F„D6Œ¶5·#øÜ7úðø·¼Tµ7#øÜ7#øÜ7Œ¶5·ìZ85>8#øÜ7¼Tµ75>8íL7¼Tµ729R8ìZ8#øÜ7ODf8ôD8DÑ7DÑ7íL7#øÜ7†Qý6Œ<϶†Qý6#øÜ7ìZ8¼Tµ7ìZ8Œ<϶F„D6†Qý6†Qý6–:Ñ·8LL¸dP$¸8LL¸RJ8¸RJ8¸b_¸ðŸ©·b_¸b_¸ðŸ©·úðø·8LL¸úðø·TU`¸ƒ¬¸KŽ¸Y[˜¸Lš¶¸!Mó¸öʹƒ¬¸¸Îʸ!Mó¸ +鸉³À¸Œ +߸!Mó¸Œ +߸¸Îʸ!Mó¸Y[˜¸Lš¶¸!Mó¸Lš¶¸Lš¶¸et¸–:Ñ·úðø·–:Ñ·–:Ñ·Œ¶5·Œ¶5·Œ¶5·O©ÓµðŸ©·Œ<϶h'‚·O©Óµ¶8*8¶8*85>8ôD8‘i¥8$V›85>8ÙUz85>85>8†Qý6#øÜ7¶8*8íL729R8¦6‡8?¯8u*ì8â°Ã8ÙUz8ŸÌÍ8$V›8ŸÌÍ85>8‘i¥8â°Ã8‘i¥8$V›8$V›8¦6‡8ODf8ODf829R8ÙUz8E‘8¦6‡8$V›85>8#øÜ7íL7ôD8†Qý6DÑ729R8ÙUz8ÙUz829R8E‘8â°Ã8ODf8ìZ8ìZ8ìZ85>8ÙUz85>8ÙUz8¶8*8E‘8ODf8DÑ7¶8*8†Qý6🩷h'‚·b_¸–:Ñ·úðø·dP$¸8LL¸–:Ñ·úðø·–:Ñ·KŽ¸KŽ¸8LL¸úðø·dP$¸–:Ñ·h'‚·F„D6–:Ñ·Œ<϶Œ<϶O©ÓµDÑ7úðø·h'‚·RJ8¸h'‚·F„D6F„D6†Qý6F„D6#øÜ729R8†Qý6ìZ8ôD8O©Óµ†Qý6ôD829R8ìZ8ôD8¼Tµ729R8‘i¥8?¯8ŸÌÍ8} â8?¯8—¹8—¹8?¯80ê×8Mö889s9} â889s9Ö^ +9â°Ã8s9Mö8Ê#98ù-9k³9„*89™®Q9Ú‡98ù-9k³9k³9bá(9Ú‡9Ö^ +9S9Ö^ +9Ê#9S9} â8u*ì8Ú‡9bá(989Ö^ +9s9Ú‡9Mö80ê×8—¹8?¯8$V›80ê×8â°Ã8ŸÌÍ8â°Ã8E‘8—¹8‘i¥8?¯8ÙUz8} â8?¯8‘i¥8ÙUz8¶8*8¦6‡8¦6‡829R85>8¶8*8‘i¥8ÙUz8¶8*8ôD8¶8*829R8¦6‡8#øÜ7ìZ8ôD8#øÜ75>8ODf8ODf8¶8*829R8¶8*829R8#øÜ7ôD8ODf829R8DÑ7ìZ8ôD8¶8*8â°Ã8$V›8¦6‡8$V›8ODf8ODf8?¯8—¹8?¯8u*ì8} â8â°Ã8u*ì8$V›8u*ì8â°Ã8u*ì8Ö^ +9—¹8u*ì8Ú‡9S9s9ŸÌÍ8XK9XK9} â8$V›80ê×8—¹8ODf8ÙUz8—¹829R829R8E‘8ÙUz85>8ìZ8ôD8ôD8#øÜ7DÑ7DÑ7ôD8ìZ85>8ôD8ÙUz8¶8*8DÑ7¶8*8¶8*8ìZ8¶8*8ODf8¶8*8¼Tµ75>8ìZ85>8ÙUz8ODf8E‘8ÙUz8$V›8$V›8ÙUz829R8E‘8¦6‡8ÙUz8¦6‡8ÙUz85>8¶8*8ôD8ìZ8E‘8¦6‡8ODf8‘i¥8‘i¥8—¹8‘i¥8‘i¥8â°Ã8ŸÌÍ8â°Ã8Mö80ê×8â°Ã8â°Ã80ê×8u*ì8} â8XK9} â8} â8} â8XK90ê×8Mö8—¹8ŸÌÍ8?¯8E‘8¦6‡8$V›8E‘8¦6‡8ÙUz8â°Ã8XK9} â8—¹8â°Ã80ê×8E‘8ÙUz8E‘8¦6‡8‘i¥8$V›8ÙUz8E‘8ÙUz829R8ÙUz8ôD8ôD8¶8*8ôD8E‘8$V›8¶8*8ODf8¦6‡8ÙUz8E‘8$V›8DÑ7¼Tµ7#øÜ7#øÜ7íL7†Qý6F„D6†Qý6Œ<϶Œ<϶Œ¶5·Œ¶5·Œ¶5·F„D6F„D6Œ<϶¼Tµ7íL7†Qý6ìZ8F„D6Œ<϶íL7O©ÓµF„D6Œ<϶#øÜ7DÑ7DÑ7F„D6¼Tµ729R8ìZ8¼Tµ7¼Tµ7ôD829R8#øÜ7ÙUz829R8ODf8ÙUz8¦6‡8?¯8?¯80ê×8—¹8E‘8—¹8$V›8u*ì8Mö889} â8XK9—¹8Ö^ +9k³9bá(9k³9S9š39š39S98ù-9š39S9u*ì8k³9„*89k³9XK9Ú‡9Mö8â°Ã8} â8} â8â°Ã8ŸÌÍ8} â8Ö^ +9ŸÌÍ8u*ì80ê×8u*ì8?¯8?¯8E‘8—¹8‘i¥8‘i¥8ÙUz8¦6‡8¼Tµ7ôD8ôD85>8O©ÓµíL7#øÜ7ìZ8¼Tµ7O©Óµ¼Tµ7¼Tµ7O©Óµ#øÜ7F„D6Œ<϶íL7O©ÓµôD8#øÜ75>8¶8*85>85>829R8ìZ8#øÜ7ìZ85>8ôD8ÙUz8#øÜ7E‘8?¯8ODf8—¹8E‘8ôD8—¹8?¯8ŸÌÍ8u*ì8—¹8u*ì889XK9Ú‡9Ö^ +9s9k³9s9S9Ú‡9š39š39š39k³9â]B9â]B9PxG98ù-9„*89„*89„*898ù-98ù-9PxG9™®Q9â]B9mÊV98“L9bá(9òC=9š39S9k³98ù-9òC=9Ú‡9Ú‡9s9Mö8Ú‡9k³9S9890ê×8} â8} â8Mö8} â8ODf829R8ODf8¶8*8ôD829R8¦6‡8$V›8ôD8F„D6O©Óµ†Qý6F„D6Œ<϶DÑ7O©ÓµŒ<϶†Qý6h'‚·Œ¶5·Œ¶5·Œ¶5·Œ<϶DÑ7h'‚·O©Óµ†Qý6🩷h'‚·F„D6íL7DÑ7DÑ7#øÜ7ìZ8¼Tµ7¼Tµ7#øÜ7ìZ8ôD829R8$V›829R8$V›8â°Ã8‘i¥8} â8E‘8$V›8—¹8} â8u*ì8u*ì889k³9k³9k³9Ö^ +989XK9u*ì80ê×8} â8890ê×8u*ì8Mö8S9ŸÌÍ8Mö8Ú‡9ŸÌÍ8ŸÌÍ8u*ì80ê×8ŸÌÍ8Ö^ +9Mö8ŸÌÍ8ŸÌÍ80ê×8Mö8} â8S9k³9Mö8} â80ê×8XK9Ú‡9Ö^ +9Mö8Mö8} â889—¹8—¹8¦6‡8ODf8‘i¥8E‘829R8¶8*8†Qý6O©ÓµO©ÓµF„D6F„D6🩷íL7¼Tµ7Œ¶5·O©ÓµŒ¶5·O©Óµh'‚·F„D6†Qý6íL7ôD8¼Tµ7†Qý6DÑ7¼Tµ7ÙUz85>8#øÜ7ODf85>8—¹8â°Ã8‘i¥8¦6‡8} â8—¹8â°Ã8E‘829R8‘i¥8¦6‡8¦6‡8¦6‡8u*ì8—¹8ŸÌÍ8XK9ŸÌÍ8ŸÌÍ8Mö88989Ú‡9} â8u*ì8s9XK9XK9s9S9XK90ê×8$V›8Mö8E‘8E‘8¶8*8ôD829R8ìZ8ôD8¦6‡8â°Ã8‘i¥8¦6‡8ODf8ODf8ODf8¦6‡8â°Ã8E‘8‘i¥8¦6‡8ÙUz829R8#øÜ7ODf85>8#øÜ75>8O©ÓµO©ÓµðŸ©·b_¸RJ8¸b_¸KŽ¸et¸Y[˜¸n¢¸b=„¸Y[˜¸b_¸b=„¸KŽ¸RJ8¸et¸b_¸8LL¸Y[˜¸‰³À¸ƒ¬¸n¢¸8LL¸et¸b_¸TU`¸KŽ¸et¸TU`¸dP$¸KŽ¸Y[˜¸ÁëÔ¸ƒ¬¸ƒ¬¸‰³À¸n¢¸TU`¸TU`¸b_¸ðŸ©·†Qý6úðø·h'‚·ðŸ©·b_¸úðø·ðŸ©·Œ¶5·Œ<϶úðø·Œ¶5·O©Óµ–:Ñ·O©ÓµŒ¶5·úðø·dP$¸RJ8¸h'‚·b_¸Œ<϶Œ<϶b_¸O©ÓµðŸ©·íL7DÑ729R8¶8*8¶8*8ìZ8ìZ8F„D6DÑ7F„D6Œ¶5·F„D6Œ<϶dP$¸–:ѷ🩷úðø·ðŸ©·8LL¸KŽ¸et¸Lš¶¸¸Îʸ¸Îʸb=„¸KŽ¸KŽ¸TU`¸ƒ¬¸et¸KŽ¸n¢¸KŽ¸b=„¸Lš¶¸¸Îʸ¸Îʸƒ¬¸‰³À¸KŽ¸n¢¸Œ +߸b=„¸ƒ¬¸KŽ¸KŽ¸et¸KŽ¸KŽ¸n¢¸8LL¸RJ8¸b_¸b_¸dP$¸TU`¸KŽ¸et¸RJ8¸úðø·dP$¸úðø·ðŸ©·F„D6†Qý6Œ<϶F„D6ìZ8¼Tµ7¼Tµ7F„D6O©Óµ¼Tµ7¼Tµ7DÑ7ìZ8íL7#øÜ7DÑ7íL7DÑ7ìZ8¼Tµ7ìZ8F„D6h'‚·DÑ7†Qý6Œ¶5·O©ÓµŒ¶5·h'‚·Œ<϶Œ<϶ODf829R829R8E‘8¶8*85>8DÑ7¼Tµ7#øÜ7DÑ7Œ¶5·íL7Œ¶5·–:Ñ·Œ¶5·b_¸8LL¸TU`¸TU`¸KŽ¸n¢¸ƒ¬¸8LL¸Lš¶¸‰³À¸‰³À¸ÁëÔ¸ÁëÔ¸Œ +߸¸Îʸ +鸌 +߸‰³À¸Œ +߸ÁëÔ¸öʹƒ¬¸ +é¸Èpý¸Œ +߸ÁëÔ¸ +鸌 +߸Èpý¸?Þ¹•H"¹W¨6¹?Þ¹°_'¹W¨6¹9ò ¹\w,¹?Þ¹ +鸰_'¹(¹iÛ@¹”1¹Èpý¸2¹öʹ!Mó¸Œ +߸ +鸌 +߸‰³À¸‰³À¸Y[˜¸n¢¸n¢¸Œ +߸Lš¶¸n¢¸¸ÎʸLš¶¸KŽ¸8LL¸Y[˜¸et¸8LL¸–:ѷ🩷Œ¶5·DÑ7O©ÓµðŸ©·íL7Œ<϶†Qý6†Qý6F„D6íL7Œ<϶†Qý6O©Óµ†Qý6O©ÓµíL7h'‚·†Qý6†Qý6Œ¶5·Œ¶5·ðŸ©·TU`¸Œ¶5·ðŸ©·dP$¸b_¸F„D6–:ѷ🩷–:Ñ·h'‚·h'‚·–:Ñ·RJ8¸b_¸dP$¸–:ѷ🩷TU`¸dP$¸8LL¸dP$¸dP$¸8LL¸Lš¶¸KŽ¸‰³À¸n¢¸ƒ¬¸Lš¶¸TU`¸KŽ¸8LL¸et¸et¸b_¸RJ8¸RJ8¸KŽ¸et¸b_¸RJ8¸KŽ¸ÁëÔ¸Y[˜¸KŽ¸ƒ¬¸Lš¶¸n¢¸Œ +߸KŽ¸dP$¸–:Ñ·–:Ñ·h'‚·F„D6h'‚·†Qý6ìZ8¼Tµ7Œ<϶íL7F„D6¶8*8ìZ829R829R829R8ODf8ÙUz8‘i¥8ÙUz8‘i¥8$V›8u*ì8$V›8E‘8â°Ã80ê×8?¯8?¯8¦6‡8—¹8â°Ã8¦6‡8¦6‡8ODf8ODf8‘i¥8E‘8$V›8ODf8ÙUz8†Qý6¼Tµ7‘i¥8ÙUz829R8$V›8¦6‡8ôD8ODf8DÑ7†Qý6†Qý6íL7Œ¶5·h'‚·F„D6Œ¶5·dP$¸úðø·RJ8¸Y[˜¸KŽ¸et¸KŽ¸¸ÎʸŒ +߸!Mó¸!Mó¸!Mó¸9ò ¹•H"¹\w,¹iÛ@¹•H"¹\w,¹\w,¹Èpý¸2¹”1¹(¹\w,¹•H"¹W¨6¹9ò ¹Þ¹\w,¹2¹(¹°_'¹Þ¹(¹•H"¹Èpý¸Èpý¸°_'¹(¹°_'¹9ò ¹Œ +߸Èpý¸Þ¹‰³À¸Lš¶¸‰³À¸Œ +߸ +鸌 +߸Lš¶¸n¢¸Èpý¸‰³À¸ +鸸Îʸ?Þ¹öʹƒ¬¸n¢¸‰³À¸ƒ¬¸KŽ¸¸ÎʸKŽ¸KŽ¸b=„¸Lš¶¸8LL¸n¢¸et¸b=„¸n¢¸Y[˜¸ÁëÔ¸Lš¶¸‰³À¸ +é¸KŽ¸¸Îʸ‰³À¸Lš¶¸Y[˜¸ÁëÔ¸Œ +߸‰³À¸Lš¶¸ +é¸!Mó¸Œ +߸ +é¸?Þ¹!Mó¸Èpý¸Èpý¸•H"¹(¹2¹°_'¹\w,¹2¹\w,¹Þ¹Œ +߸Èpý¸öʹöʹ޹(¹Þ¹•H"¹(¹•H"¹(¹\w,¹(¹2¹Èpý¸•H"¹öʹ޹(¹?Þ¹2¹Þ¹ +é¸2¹2¹öʹ +鸉³À¸¸Îʸ8LL¸Y[˜¸ƒ¬¸Y[˜¸et¸b_¸úðø·ðŸ©·RJ8¸dP$¸Œ<϶🩷úðø·úðø·ðŸ©·O©ÓµŒ¶5·úðø·ðŸ©·ðŸ©·Œ¶5·Œ¶5·¼Tµ7Œ<϶O©Óµ¼Tµ7¼Tµ7¼Tµ7¼Tµ7†Qý6#øÜ7¼Tµ7F„D6ÙUz8†Qý6ìZ85>8ÙUz8ôD8#øÜ7¦6‡829R8ODf8ODf85>829R8¶8*829R8#øÜ7¶8*85>8DÑ7íL7íL7#øÜ7¼Tµ7b_¸O©ÓµŒ<϶h'‚·Œ<϶–:Ñ·F„D6F„D6íL7O©ÓµíL7DÑ7h'‚·TU`¸úðø·–:Ñ·KŽ¸n¢¸KŽ¸TU`¸TU`¸dP$¸b_¸et¸8LL¸úðø·ðŸ©·KŽ¸8LL¸8LL¸–:Ñ·b_¸dP$¸TU`¸8LL¸O©Óµh'‚·úðø·–:Ñ·#øÜ7¼Tµ7¼Tµ7O©ÓµôD85>8¶8*829R85>8$V›829R8¶8*8íL729R8¼Tµ7DÑ75>8ìZ8†Qý6DÑ7†Qý6$V›8¶8*8¦6‡8¼Tµ7ìZ8†Qý6†Qý6†Qý6DÑ7¼Tµ7DÑ7¼Tµ7ìZ8¼Tµ7†Qý629R8$V›8?¯8¦6‡8$V›829R8¶8*8E‘8E‘8ôD8ODf85>8#øÜ75>8ìZ8ODf8‘i¥8ÙUz8ôD8F„D6†Qý6Œ¶5·F„D6O©ÓµðŸ©·úðø·8LL¸et¸RJ8¸RJ8¸et¸RJ8¸dP$¸8LL¸Lš¶¸Lš¶¸dP$¸b_¸ðŸ©·–:Ñ·KŽ¸RJ8¸b_¸TU`¸TU`¸úðø·8LL¸–:Ñ·KŽ¸KŽ¸dP$¸Y[˜¸KŽ¸n¢¸KŽ¸KŽ¸8LL¸dP$¸ðŸ©·dP$¸RJ8¸RJ8¸n¢¸TU`¸dP$¸Œ¶5·dP$¸–:Ñ·–:Ñ·b_¸dP$¸ðŸ©·O©Óµ†Qý6O©ÓµíL7F„D6†Qý6ìZ8ìZ8ôD8ODf8#øÜ7¶8*8ôD85>8ìZ8DÑ7DÑ7ìZ8O©Óµ#øÜ7íL7DÑ7DÑ7#øÜ7ìZ8¼Tµ7¶8*8DÑ7¶8*8¼Tµ75>8DÑ7DÑ7F„D6🩷O©Óµh'‚·Œ<϶úðø·8LL¸úðø·KŽ¸n¢¸KŽ¸KŽ¸et¸b=„¸8LL¸8LL¸KŽ¸Y[˜¸n¢¸Y[˜¸!Mó¸ +é¸Y[˜¸!Mó¸Èpý¸ÁëÔ¸ƒ¬¸8LL¸¸ÎʸÁëÔ¸ƒ¬¸n¢¸Lš¶¸TU`¸KŽ¸Y[˜¸8LL¸RJ8¸Y[˜¸et¸dP$¸8LL¸8LL¸RJ8¸KŽ¸ðŸ©·RJ8¸RJ8¸F„D6O©ÓµO©ÓµŒ<϶íL7O©ÓµŒ<϶Œ<϶DÑ7DÑ7íL7Œ¶5·#øÜ7#øÜ729R8DÑ7ODf8$V›8—¹85>85>8¦6‡8ODf829R8ODf85>8ÙUz8ODf8ôD8#øÜ7O©Óµ¶8*8ôD85>8¶8*8ôD8ôD829R85>8ôD8ìZ8ÙUz8#øÜ7#øÜ7ôD8†Qý6¼Tµ7F„D6íL7h'‚·DÑ7Œ<϶RJ8¸Œ<϶ìZ8O©Óµúðø·O©ÓµDÑ7F„D6F„D6F„D6Œ<϶DÑ7†Qý6¼Tµ7DÑ7Œ¶5·Œ<϶Œ<϶Œ<϶8LL¸8LL¸b_¸RJ8¸TU`¸8LL¸TU`¸RJ8¸TU`¸–:Ñ·íL7🩷b_¸–:Ñ·F„D6Œ¶5·úðø·F„D6Œ¶5·F„D6h'‚·–:Ñ·O©Óµ†Qý6Œ¶5·O©ÓµO©Óµ–:ѷ🩷íL7Œ<϶¶8*8¦6‡8ôD8ôD8íL7DÑ75>829R8ODf8ODf8ìZ829R8#øÜ7ìZ829R8ôD829R8ODf8ôD8#øÜ7ÙUz8ODf8E‘8?¯8ÙUz8ODf829R8DÑ7¼Tµ7¶8*8ôD8O©ÓµO©Óµh'‚·ðŸ©·–:ѷ🩷dP$¸–:Ñ·úðø·Œ<϶O©Óµb_¸b_¸b_¸KŽ¸TU`¸Y[˜¸KŽ¸!Mó¸Lš¶¸!Mó¸¸Îʸet¸ÁëÔ¸ÁëÔ¸Y[˜¸ÁëÔ¸!Mó¸ +鸉³À¸Œ +߸öʹY[˜¸‰³À¸ƒ¬¸n¢¸ÁëÔ¸KŽ¸ƒ¬¸n¢¸ƒ¬¸KŽ¸KŽ¸et¸dP$¸dP$¸b_¸ðŸ©·O©ÓµðŸ©·F„D6†Qý6DÑ7Œ<϶29R8F„D6DÑ729R8ìZ85>85>8E‘829R829R8E‘8‘i¥8ŸÌÍ8ŸÌÍ8¦6‡8â°Ã8ŸÌÍ8} â8ODf80ê×8} â8Ú‡9XK9XK9XK9—¹80ê×8‘i¥8?¯8—¹8‘i¥8‘i¥8‘i¥8$V›8ÙUz8‘i¥8—¹8‘i¥8‘i¥8¦6‡8ÙUz8$V›829R85>8ODf8ÙUz8ÙUz8¶8*8DÑ7ìZ8ODf85>8F„D6ìZ8ODf8ODf829R8¶8*85>8¼Tµ7DÑ7#øÜ7DÑ7F„D6🩷–:Ñ·b_¸úðø·úðø·ðŸ©·úðø·Œ¶5·RJ8¸KŽ¸ðŸ©·ðŸ©·b_¸úðø·ðŸ©·Œ¶5·Œ¶5·ðŸ©·ðŸ©·–:Ñ·RJ8¸TU`¸Œ¶5·TU`¸b_¸dP$¸TU`¸dP$¸dP$¸8LL¸RJ8¸Œ<϶F„D6Œ<϶Œ¶5·DÑ7íL7íL7O©ÓµRJ8¸†Qý6Œ<϶h'‚·DÑ7O©ÓµO©ÓµF„D6íL7†Qý6ìZ8¶8*8¦6‡8ÙUz8E‘8E‘8‘i¥8â°Ã8‘i¥8‘i¥8ŸÌÍ8?¯8‘i¥8$V›8} â80ê×8$V›8â°Ã8?¯8¦6‡8ôD8¼Tµ7íL7ôD8¼Tµ7#øÜ7¼Tµ729R85>85>8#øÜ7DÑ7¼Tµ7¼Tµ7–:Ñ·úðø·–:Ñ·RJ8¸TU`¸dP$¸b_¸8LL¸dP$¸KŽ¸Lš¶¸ÁëÔ¸KŽ¸KŽ¸ƒ¬¸Lš¶¸KŽ¸RJ8¸b_¸RJ8¸b_¸Œ¶5·Œ<϶h'‚·Œ¶5·ðŸ©·DÑ7#øÜ7F„D6DÑ7F„D6#øÜ7ODf8?¯8ODf8¶8*829R85>8ÙUz8E‘8?¯8—¹80ê×8u*ì80ê×80ê×8} â80ê×8Mö8u*ì8?¯8ŸÌÍ8Ú‡989k³989s9XK9Ö^ +9XK9XK9XK9Mö8Ú‡9Mö8Ê#9Ê#9Ö^ +9„*89Ê#9š39PxG9µæ[9PxG98“L98ù-9òC=9™®Q9Ê#9š39š39s9k³9s9Ú‡9Ú‡989} â8â°Ã8ŸÌÍ8ODf8$V›8¶8*8¶8*8ODf8¼Tµ7O©ÓµDÑ7Œ<϶🩷🩷TU`¸RJ8¸KŽ¸dP$¸–:Ñ·úðø·RJ8¸8LL¸TU`¸h'‚·O©ÓµðŸ©·Œ¶5·dP$¸ðŸ©·F„D6–:Ñ·F„D6O©ÓµðŸ©·†Qý6íL7h'‚·Œ¶5·íL7íL7DÑ7†Qý6¼Tµ7Œ<϶Œ¶5·íL7#øÜ7íL7O©ÓµF„D6†Qý6†Qý6Œ¶5·ìZ8ODf8¦6‡8—¹8‘i¥8ODf8ÙUz8ŸÌÍ8Mö8u*ì8Ö^ +90ê×80ê×80ê×8ŸÌÍ8E‘8‘i¥8E‘8¦6‡8ÙUz8‘i¥8$V›8¦6‡8‘i¥8$V›8—¹8Mö8â°Ã80ê×8E‘829R8‘i¥8¦6‡8¦6‡8¦6‡8¦6‡80ê×8ŸÌÍ8E‘8‘i¥8E‘8$V›829R8$V›8E‘8ôD8ôD85>8†Qý6F„D6íL7F„D68LL¸–:Ñ·F„D6h'‚·–:Ñ·dP$¸TU`¸–:Ñ·–:Ñ·TU`¸et¸8LL¸Œ¶5·b_¸KŽ¸ðŸ©·RJ8¸RJ8¸h'‚·TU`¸b_¸dP$¸8LL¸8LL¸Y[˜¸úðø·TU`¸et¸Œ<϶b_¸Œ¶5·íL7¼Tµ7DÑ7¦6‡829R8ODf8¶8*8ÙUz8â°Ã8â°Ã8â°Ã8—¹8} â8â°Ã8XK9XK9s9Ú‡9s9Mö8s90ê×889Ú‡9k³90ê×8Ú‡9Mö80ê×8Mö80ê×8S9Ö^ +90ê×8Mö8Ú‡9XK9XK9u*ì8Ö^ +9} â8u*ì8Ê#989} â8XK9Ö^ +9s9} â8ŸÌÍ80ê×889XK9?¯8ŸÌÍ8ŸÌÍ8¦6‡8¦6‡8E‘8$V›8E‘8E‘8$V›829R8ODf829R8ôD8¼Tµ7íL7DÑ7¼Tµ7¼Tµ7íL7–:Ñ·O©ÓµDÑ7†Qý6†Qý6O©ÓµŒ¶5·h'‚·íL7DÑ7F„D6†Qý65>85>829R8¶8*8¶8*8¦6‡8E‘8¦6‡8ÙUz8ÙUz8ŸÌÍ8E‘8ÙUz8—¹8?¯80ê×8?¯8‘i¥8} â8u*ì8XK9Ú‡9Ú‡9š39u*ì8s9XK9XK98ù-9Ú‡989k³9S9Ê#9š39s9Ú‡9S9Ö^ +9u*ì8u*ì8s9s9Ú‡9Ö^ +9Ú‡9S9s9Ú‡98ù-9Ö^ +9s98989u*ì80ê×8ŸÌÍ8} â8?¯80ê×8ŸÌÍ80ê×8‘i¥8?¯8ÙUz8ODf8‘i¥829R8¶8*8#øÜ7h'‚·†Qý6Œ¶5·h'‚·íL7F„D6b_¸dP$¸dP$¸úðø·b_¸úðø·†Qý6úðø·h'‚·íL7F„D6#øÜ7Œ<϶DÑ7íL7†Qý6Œ<϶†Qý6🩷🩷úðø·h'‚·Œ¶5·–:Ñ·†Qý6#øÜ7ôD8ìZ8ìZ8†Qý65>829R829R8ìZ8ÙUz8ôD8E‘8E‘8$V›8ODf8ôD8¼Tµ7¶8*8ODf8ÙUz829R8E‘8ODf8¦6‡829R8?¯8E‘8$V›80ê×8—¹8ŸÌÍ80ê×8E‘8$V›8?¯8?¯8E‘8E‘8ìZ8DÑ7ìZ829R8#øÜ7DÑ7ìZ8ôD829R8ODf8ODf8¶8*8#øÜ7†Qý6O©Óµh'‚·dP$¸h'‚·h'‚·úðø·Œ¶5·dP$¸KŽ¸RJ8¸KŽ¸TU`¸KŽ¸KŽ¸8LL¸RJ8¸Lš¶¸KŽ¸n¢¸KŽ¸ƒ¬¸úðø·RJ8¸KŽ¸KŽ¸Y[˜¸Y[˜¸TU`¸Y[˜¸ƒ¬¸‰³À¸Lš¶¸ƒ¬¸RJ8¸‰³À¸KŽ¸8LL¸KŽ¸8LL¸¸Îʸ +鸌 +߸Y[˜¸RJ8¸8LL¸8LL¸KŽ¸TU`¸8LL¸TU`¸Lš¶¸b_¸8LL¸dP$¸úðø·ðŸ©·úðø·úðø·ðŸ©·h'‚·dP$¸†Qý6–:Ñ·úðø·h'‚·úðø·–:Ñ·h'‚·h'‚·ðŸ©·–:Ñ·8LL¸úðø·¼Tµ7DÑ7F„D6#øÜ7F„D6🩷Œ<϶h'‚·Œ¶5·O©Óµb_¸b_¸b_¸O©Óµúðø·RJ8¸úðø·RJ8¸ðŸ©·KŽ¸Œ +߸Y[˜¸¸Îʸöʹ?Þ¹Èpý¸Èpý¸Œ +߸Þ¹(¹(¹(¹?Þ¹\w,¹\w,¹vK¹”1¹\w,¹W¨6¹²+P¹iÛ@¹²+P¹ €_¹ŠcZ¹ŠcZ¹ €_¹iÛ@¹”ºi¹eGU¹ €_¹vK¹²+P¹iÛ@¹%d¹”ºi¹ €_¹iÛ@¹vK¹vK¹vK¹eGU¹”1¹”1¹”1¹žÁ;¹±õE¹9ò ¹(¹•H"¹2¹°_'¹•H"¹?Þ¹öʹ޹9ò ¹?Þ¹öʹ(¹•H"¹?Þ¹ +鸌 +߸Œ +߸?Þ¹!Mó¸?Þ¹!Mó¸ +é¸ÁëÔ¸!Mó¸Œ +߸Lš¶¸ƒ¬¸ÁëÔ¸KŽ¸n¢¸‰³À¸KŽ¸KŽ¸ƒ¬¸Y[˜¸n¢¸ƒ¬¸b_¸Y[˜¸ƒ¬¸n¢¸¸ÎʸŒ +߸Lš¶¸Œ +߸?Þ¹‰³À¸‰³À¸Œ +߸ÁëÔ¸¸ÎʸÁëÔ¸Œ +߸ +é¸9ò ¹Þ¹2¹öʹÁëÔ¸Þ¹?Þ¹öʹ(¹2¹W¨6¹±õE¹žÁ;¹iÛ@¹eGU¹vK¹eGU¹”ºi¹²+P¹±õE¹vK¹²+P¹”1¹”1¹\w,¹2¹(¹°_'¹Þ¹9ò ¹žÁ;¹žÁ;¹iÛ@¹vK¹vK¹”1¹Þ¹2¹2¹öʹ•H"¹öʹÈpý¸2¹9ò ¹?Þ¹(¹?Þ¹(¹9ò ¹”1¹2¹°_'¹\w,¹žÁ;¹”1¹•H"¹(¹?Þ¹•H"¹?Þ¹ +é¸2¹\w,¹°_'¹\w,¹?Þ¹9ò ¹•H"¹9ò ¹•H"¹(¹Þ¹(¹(¹•H"¹?Þ¹9ò ¹ +é¸!Mó¸(¹Èpý¸!Mó¸?Þ¹Èpý¸Èpý¸!M󸉳À¸Œ +߸¸ÎʸÈpý¸Œ +߸Lš¶¸¸Îʸ¸Îʸöʹn¢¸¸ÎʸÞ¹Èpý¸ÁëÔ¸!Mó¸ +é¸Èpý¸Èpý¸ÁëÔ¸¸Îʸ9ò ¹Èpý¸?Þ¹2¹9ò ¹°_'¹Þ¹•H"¹2¹°_'¹2¹W¨6¹2¹\w,¹\w,¹2¹?Þ¹\w,¹\w,¹”1¹\w,¹Þ¹9ò ¹”1¹•H"¹žÁ;¹°_'¹?Þ¹?Þ¹ +é¸Lš¶¸Èpý¸ƒ¬¸ +é¸Lš¶¸Lš¶¸ÁëÔ¸RJ8¸et¸dP$¸8LL¸RJ8¸–:Ñ·–:Ñ·TU`¸TU`¸8LL¸dP$¸RJ8¸O©Óµh'‚·Œ¶5·Œ¶5·F„D6O©Óµúðø·DÑ7†Qý6F„D6ìZ8DÑ7íL7†Qý6¼Tµ7†Qý6#øÜ7#øÜ7†Qý6#øÜ7ìZ8†Qý6O©ÓµíL7F„D6–:ѷ🩷úðø·úðø·KŽ¸KŽ¸et¸Y[˜¸Lš¶¸‰³À¸Lš¶¸ÁëÔ¸Lš¶¸Lš¶¸¸Îʸƒ¬¸ƒ¬¸ƒ¬¸Y[˜¸ƒ¬¸Lš¶¸ƒ¬¸öʹ!M󸃬¸Œ +߸‰³À¸KŽ¸Lš¶¸Lš¶¸9ò ¹ÁëÔ¸!Mó¸Œ +߸Œ +߸ÁëÔ¸¸ÎʸLš¶¸¸ÎʸÁëÔ¸ƒ¬¸n¢¸n¢¸8LL¸dP$¸b=„¸ƒ¬¸‰³À¸Y[˜¸Y[˜¸Y[˜¸KŽ¸ÁëÔ¸ƒ¬¸ÁëÔ¸KŽ¸et¸TU`¸b_¸b_¸Œ<϶Œ<϶O©ÓµdP$¸úðø·–:Ñ·h'‚·h'‚·dP$¸TU`¸úðø·O©Óµ†Qý6íL7ôD8†Qý6#øÜ7†Qý6ôD8ìZ8O©Óµ†Qý6ìZ8ìZ8#øÜ7ìZ8F„D6O©Óµ¶8*8F„D6O©Óµ¼Tµ7Œ<϶Œ<϶íL7Œ<϶🩷–:Ñ·Œ¶5·O©Óµ–:Ñ·h'‚·RJ8¸úðø·et¸Y[˜¸úðø·ðŸ©·b=„¸úðø·úðø·b=„¸ðŸ©·–:Ñ·dP$¸h'‚·F„D6F„D6–:Ñ·úðø·ðŸ©·RJ8¸RJ8¸TU`¸et¸8LL¸et¸8LL¸Y[˜¸KŽ¸KŽ¸ðŸ©·úðø·DÑ7b_¸O©Óµúðø·Œ¶5·h'‚·íL7F„D6¼Tµ7ôD8¶8*8ìZ8¶8*8DÑ7#øÜ7†Qý6¼Tµ7h'‚·¼Tµ7¶8*8#øÜ7#øÜ7ôD8¦6‡829R8¦6‡8$V›8‘i¥8¦6‡8â°Ã8‘i¥8ODf8E‘8‘i¥8E‘8?¯8$V›80ê×8?¯8} â80ê×8ŸÌÍ8E‘8—¹8?¯8ŸÌÍ8$V›8?¯8¦6‡8‘i¥8ODf8ODf8ODf8ODf85>8#øÜ7#øÜ7¼Tµ7F„D6#øÜ7O©Óµ–:Ñ·úðø·–:Ñ·íL7Œ<϶TU`¸RJ8¸–:Ñ·úðø·úðø·et¸RJ8¸ƒ¬¸Y[˜¸TU`¸b_¸TU`¸–:Ñ·8LL¸RJ8¸8LL¸KŽ¸dP$¸b_¸dP$¸Œ¶5·F„D6F„D6¼Tµ7F„D6🩷F„D6DÑ7ôD8#øÜ7DÑ7#øÜ7ôD8¶8*8$V›8¦6‡829R8‘i¥8?¯8ŸÌÍ8XK9} â8u*ì88989Ö^ +989u*ì8Ö^ +9Ö^ +9s9„*89k³9Ö^ +9š39Ê#9k³9PxG98“L98“L9PxG9™®Q9ka94™z9 f9™®Q98“L9òC=9PxG9„*898ù-9â]B9òC=9„*89Ú‡9S9s9Ö^ +9Ö^ +90ê×8s9Mö8$V›8E‘8‘i¥8—¹8—¹8} â8â°Ã8â°Ã8E‘8ÙUz8‘i¥8E‘8ÙUz8ôD8ÙUz8ìZ8íL7#øÜ7†Qý6O©Óµ†Qý6DÑ75>8†Qý6†Qý6ODf8¦6‡85>8ÙUz8¶8*8¦6‡8ÙUz8ODf8ODf8‘i¥8E‘80ê×8$V›8ÙUz8ODf8$V›8¦6‡8â°Ã8$V›80ê×8—¹8‘i¥8?¯8Mö8—¹8} â8Ö^ +989XK9Ú‡9Ú‡9Mö8XK98ù-9Ú‡9Ú‡9k³9Ê#9Mö8Ö^ +9XK9XK989u*ì889s9XK9Ö^ +9Ú‡9òC=9òC=9bá(9k³9š39„*898“L9Ú‡9òC=9Ê#9Ú‡9k³9Ê#9Ú‡9s9u*ì8â°Ã8Mö8‘i¥80ê×8—¹8‘i¥8$V›8¦6‡8ôD8¶8*829R8ÙUz8E‘8¦6‡8¦6‡8¦6‡8‘i¥8E‘8—¹8—¹80ê×8‘i¥85>8$V›8¶8*8ÙUz8ìZ85>8ODf8#øÜ7DÑ7ìZ8¶8*829R8E‘8E‘829R8ÙUz8ìZ8E‘8â°Ã8—¹8u*ì8ŸÌÍ80ê×80ê×8â°Ã8—¹8ODf8E‘8ŸÌÍ8E‘8â°Ã8¦6‡8¦6‡8¦6‡8ODf8$V›8‘i¥8$V›889Ö^ +9Mö8k³9Ê#9bá(9XK9Mö889ŸÌÍ8Mö889bá(9S9â]B9š39PxG9mÊV9™®Q9\p9szu9>k9™®Q9PxG9â]B9mÊV98“L9 f9 f9>k9 f9szu9 f9\p9\p9PxG9µæ[98“L98“L9ïk‚9\p9ka9â]B9š398ù-9š39„*89„*89š39„*89â]B9Ê#9â]B9bá(9„*8989Ú‡9Ú‡98ù-9Ê#9Ê#9š39òC=9â]B9s9s9Ö^ +989k³9k³9Ú‡9ŸÌÍ889} â80ê×8—¹8} â8} â8$V›8¦6‡8ÙUz8¦6‡8ÙUz8$V›8ÙUz8#øÜ7¶8*8ODf8¦6‡85>8¦6‡8—¹8ODf8ìZ85>85>829R8ODf8?¯8ŸÌÍ8} â8Mö8ŸÌÍ8Ö^ +9} â8S989Ö^ +9s9Ê#989s9Mö80ê×8â°Ã8$V›8â°Ã8?¯8} â8u*ì8u*ì8u*ì8XK9} â8—¹80ê×8} â8‘i¥8u*ì8Ö^ +9u*ì8Mö8ŸÌÍ8¦6‡80ê×8u*ì80ê×8ŸÌÍ8â°Ã8ŸÌÍ8Mö8} â8‘i¥8ÙUz8¦6‡8¦6‡8ôD8¶8*829R8¼Tµ7#øÜ729R8¼Tµ7DÑ7†Qý6ôD85>8#øÜ7DÑ7íL7íL7¼Tµ7¼Tµ7¼Tµ75>8ìZ829R8‘i¥8E‘8ODf8ODf8ODf8E‘8ÙUz8â°Ã8¦6‡8ôD829R8¦6‡8¦6‡8¦6‡85>8ÙUz8¦6‡8ÙUz8¦6‡8ôD8ODf8E‘8ÙUz8¦6‡8ŸÌÍ8—¹8ÙUz8—¹8$V›8‘i¥889¦6‡8ÙUz8?¯8—¹8?¯8$V›80ê×8ŸÌÍ80ê×80ê×8ŸÌÍ8?¯8Mö8‘i¥8â°Ã8ÙUz8¦6‡8ODf8¦6‡8$V›8—¹8ODf8‘i¥8ŸÌÍ8¦6‡8E‘8—¹8ÙUz8$V›8ODf8ìZ85>8¼Tµ7#øÜ75>8ìZ8#øÜ7†Qý65>8DÑ7F„D6h'‚·¼Tµ7F„D6–:Ñ·h'‚·Œ<϶Œ¶5·†Qý6h'‚·–:Ñ·b_¸–:Ñ·b_¸úðø·úðø·Œ¶5·O©Óµh'‚·–:Ñ·–:Ñ·úðø·–:Ñ·b_¸–:Ñ·Œ<϶F„D6–:ѷ🩷Œ¶5·†Qý6RJ8¸b_¸Œ¶5·b_¸†Qý6†Qý6F„D6íL7Œ<϶F„D6DÑ7ìZ8DÑ75>8ìZ8¦6‡8ODf8E‘8ìZ8ôD8ÙUz8?¯8E‘8$V›8E‘8ŸÌÍ8ŸÌÍ8â°Ã8$V›8u*ì8—¹8¦6‡8ŸÌÍ80ê×8?¯8ÙUz8—¹8ÙUz8¦6‡8ÙUz8†Qý6ôD829R8ODf8ODf829R829R8ODf829R8¶8*8ôD8Œ¶5·†Qý6F„D6O©ÓµO©Óµh'‚·ðŸ©·úðø·O©ÓµO©Óµ–:Ñ·–:Ñ·dP$¸KŽ¸‰³À¸KŽ¸KŽ¸Y[˜¸Œ +߸n¢¸¸ÎʸÁëÔ¸ƒ¬¸‰³À¸‰³À¸Lš¶¸Lš¶¸‰³À¸n¢¸Y[˜¸Lš¶¸KŽ¸¸Îʸb=„¸n¢¸KŽ¸b=„¸8LL¸TU`¸KŽ¸8LL¸dP$¸–:Ñ·–:Ñ·b_¸úðø·ðŸ©·dP$¸–:Ñ·RJ8¸b_¸íL7Œ¶5·8LL¸–:Ñ·8LL¸et¸–:Ñ·h'‚·¼Tµ7DÑ7¼Tµ729R8—¹8XK9ŸÌÍ8?¯889ŸÌÍ8ŸÌÍ8$V›8u*ì8} â8} â8Mö8â°Ã8u*ì8Mö8—¹889—¹80ê×8u*ì8Mö8ŸÌÍ8?¯80ê×85>829R8¶8*8ìZ8ìZ8ôD8DÑ7¶8*8h'‚·–:Ñ·–:Ñ·Œ<϶h'‚·–:Ñ·b=„¸KŽ¸dP$¸Y[˜¸Œ +߸?Þ¹!Mó¸(¹Œ +߸!Mó¸öʹ•H"¹\w,¹9ò ¹9ò ¹2¹W¨6¹W¨6¹W¨6¹2¹iÛ@¹°_'¹”1¹žÁ;¹Þ¹°_'¹(¹Þ¹•H"¹?Þ¹öʹ(¹(¹Þ¹°_'¹Èpý¸Þ¹!Mó¸Œ +߸!M󸉳À¸Œ +߸Œ +߸n¢¸n¢¸RJ8¸RJ8¸b_¸b_¸b_¸Œ¶5·F„D6O©Óµ#øÜ7DÑ7DÑ7¼Tµ7¶8*8DÑ7¼Tµ7F„D6Œ<϶b_¸RJ8¸úðø·úðø·F„D6KŽ¸KŽ¸dP$¸úðø·dP$¸–:Ñ·TU`¸úðø·8LL¸dP$¸b_¸et¸ðŸ©·–:Ñ·úðø·–:Ñ·úðø·ðŸ©·h'‚·b_¸O©ÓµO©ÓµŒ¶5·ðŸ©·†Qý6h'‚·–:Ñ·O©Óµ–:Ñ·dP$¸8LL¸8LL¸TU`¸KŽ¸n¢¸b=„¸Y[˜¸ÁëÔ¸Y[˜¸et¸‰³À¸n¢¸‰³À¸Lš¶¸TU`¸Lš¶¸TU`¸KŽ¸Lš¶¸‰³À¸TU`¸b=„¸et¸ðŸ©·Œ¶5·úðø·8LL¸b_¸b_¸–:Ñ·8LL¸dP$¸KŽ¸¸ÎʸKŽ¸dP$¸TU`¸TU`¸RJ8¸–:Ñ·et¸et¸b=„¸úðø·dP$¸h'‚·dP$¸–:Ñ·Œ<϶b_¸O©ÓµíL7DÑ7¼Tµ7†Qý6ìZ8ìZ8¶8*8E‘829R8ìZ85>8E‘829R8¦6‡8ÙUz8ÙUz8DÑ7ÙUz8E‘829R8E‘8ôD8ÙUz8ÙUz85>8E‘8¦6‡8DÑ7ôD8#øÜ7¼Tµ7ôD8F„D6DÑ7DÑ7¼Tµ7¼Tµ7F„D6Œ¶5·ðŸ©·RJ8¸et¸úðø·–:Ñ·dP$¸KŽ¸b_¸RJ8¸TU`¸KŽ¸ƒ¬¸8LL¸TU`¸b=„¸Y[˜¸dP$¸et¸KŽ¸Lš¶¸TU`¸úðø·b_¸dP$¸dP$¸TU`¸RJ8¸dP$¸úðø·RJ8¸et¸dP$¸b_¸KŽ¸dP$¸n¢¸KŽ¸–:Ñ·Y[˜¸RJ8¸ðŸ©·–:ѷ🩷🩷–:Ñ·RJ8¸KŽ¸KŽ¸KŽ¸RJ8¸8LL¸b_¸et¸RJ8¸RJ8¸n¢¸TU`¸RJ8¸ðŸ©·úðø·ðŸ©·Œ<϶Œ<϶Œ¶5·Œ¶5·ìZ8íL7ôD8O©Óµ†Qý6DÑ7¼Tµ7¼Tµ7ôD85>8ôD8†Qý6Œ<϶Œ<϶–:Ñ·8LL¸RJ8¸¸Îʸ‰³À¸¸Îʸ¸Îʸ!Mó¸Œ +߸öʹ +é¸ÁëÔ¸!Mó¸ +é¸!Mó¸!Mó¸!Mó¸2¹ +é¸ÁëÔ¸öʹŒ +߸!Mó¸ +鸸ÎʸŒ +߸öʹ +é¸öʹ9ò ¹ÁëÔ¸Œ +߸Œ +߸!Mó¸ÁëÔ¸n¢¸¸Îʸn¢¸RJ8¸KŽ¸Y[˜¸8LL¸b_¸–:Ñ·dP$¸h'‚·úðø·8LL¸dP$¸b_¸b_¸dP$¸ðŸ©·dP$¸TU`¸RJ8¸b_¸†Qý6b_¸RJ8¸KŽ¸b_¸ðŸ©·úðø·ðŸ©·F„D6¼Tµ7#øÜ7ìZ8ODf8¶8*8¶8*8DÑ7ìZ8¶8*8ôD8DÑ7ôD8¶8*8#øÜ7DÑ7ìZ8¼Tµ7¶8*8¶8*8#øÜ75>8ÙUz8ìZ8¦6‡8ÙUz8ÙUz85>85>8ìZ8¼Tµ7íL7ôD8ôD8ÙUz8¶8*8ôD8ôD8íL7Œ<϶Œ<϶Œ¶5·Œ<϶O©Óµ–:ѷ🩷h'‚·–:Ñ·RJ8¸KŽ¸n¢¸n¢¸KŽ¸Œ +߸Œ +߸n¢¸ÁëÔ¸ÁëÔ¸Œ +߸ +é¸Èpý¸9ò ¹•H"¹?Þ¹ +é¸ +é¸Èpý¸öʹ9ò ¹öʹ¸ÎʸY[˜¸n¢¸ƒ¬¸dP$¸h'‚·RJ8¸ƒ¬¸b_¸b=„¸Y[˜¸ƒ¬¸KŽ¸KŽ¸RJ8¸dP$¸–:Ñ·b_¸RJ8¸Œ¶5·Œ¶5·úðø·h'‚·ðŸ©·b_¸úðø·F„D6🩷†Qý6F„D6íL7¼Tµ7†Qý6†Qý6#øÜ7O©ÓµôD8ÙUz8#øÜ7¶8*8#øÜ7#øÜ7ìZ8íL7O©ÓµDÑ7#øÜ7íL7ôD8DÑ7#øÜ7#øÜ7#øÜ7DÑ7#øÜ7F„D6–:Ñ·h'‚·F„D68LL¸b_¸RJ8¸b=„¸dP$¸RJ8¸KŽ¸TU`¸8LL¸KŽ¸TU`¸TU`¸8LL¸TU`¸Lš¶¸Y[˜¸¸Îʸn¢¸Lš¶¸Lš¶¸ +é¸Lš¶¸ +é¸öʹöʹ!Mó¸¸Îʸƒ¬¸ƒ¬¸et¸Y[˜¸n¢¸RJ8¸–:Ñ·RJ8¸ðŸ©·úðø·h'‚·úðø·8LL¸dP$¸8LL¸b_¸Œ<϶DÑ7DÑ7O©ÓµðŸ©·†Qý6F„D6DÑ7#øÜ7ôD8ôD8ìZ8ôD8ôD8¼Tµ7íL7¼Tµ7íL7íL7#øÜ7ôD8¶8*8¶8*8¼Tµ7¶8*8ìZ8#øÜ75>829R829R8ÙUz829R829R8ODf8ODf8ôD85>829R8DÑ7#øÜ7#øÜ7íL7Œ¶5·h'‚·ðŸ©·–:Ñ·dP$¸DÑ7F„D6Œ¶5·h'‚·Œ¶5·Œ<϶DÑ7DÑ7h'‚·–:Ñ·h'‚·O©ÓµíL7O©Óµh'‚·|Pd|1|24600|2013-282T15:32:03.397 F<Æ8„9ŽÚø8˜·î8ad8 ¾‰8ad8†DW8ad8OQk8fß8fß8 ¾‰8ÀÍ“8{XÐ8~vÚ8OQk8ÀÍ“8ÀÍ“8gó§8gó§8˜·î8~Ï99–ä8&¦ 9~º9~º9~º9ŽÚø8z’9ŽÚø8„9~vÚ8^û9^û9^û9Z495%9&¦ 9ɦC9*s99™A/9™A/9UÁH9ÍX9ÍX9Ú÷R9ɦC9Mb9Mb900]9ɦC9Ú÷R9ɦC9Mb9Ú÷R9Mã{9ƒ9E€9¡…9Ajg900]900]9™A/9UÁH9¹Œ>9™A/9™A/9¹Œ>9Z49 )*9å9ɦC9UÁH9UÁH9*s99*s99å9¹Œ>9¹Œ>9™A/9~Ï9„9z’9ŽÚø8„99–ä8{XÐ89–ä8z’9&¦ 9˜·î8õ!¼8z’9õ!¼8F<Æ8OQk8ad8{XÐ8ÀÍ“8ÀÍ“8ÀÍ“8¡ ²8¡ ²8 ¾‰8 ¾‰8 ¾‰8†DW8†DW8—>C8 ¾‰81@/8,J8—>C8OQk8fß8õ!¼8F<Æ8õ!¼8{XÐ8ŽÚø8„9z’9&¦ 9˜·î8~º9~º9&¦ 99–ä8å9Z49å9^û95%9™A/9*s99Ú÷R9*s99å9Z49 )*9*s99™A/9å9™A/9å9&¦ 9^û9~Ï9z’9^û9&¦ 9~Ï9„9{XÐ8z’9~vÚ8{XÐ89–ä8z’9˜·î89–ä8õ!¼8˜·î8{XÐ8õ!¼8{XÐ8ŽÚø8ŽÚø8˜·î8{XÐ8~vÚ8 ¾‰8gó§8ÀÍ“81@/8MP7,J8M¿7}µ`7¤Àì´¤Àì´F{p·J¸J¸Ôîî·J¸È‹¸Êµ¸:I[¸æA3¸äŸ¸ù©¸­´¸Êµ¸Cȸѿ𸭴¸i(¾¸mÒ•¸È‹¸È‹¸mÒ•¸È‹¸ù©¸ÞAG¸OWo¸Êµ¸mÒ•¸È‹¸æA3¸æA3¸Ôîî·ó>Ç·ÞAG¸ó>Ç·F{p·}µ`7¤Àì´}µ`7†DW8M¿7MP71@/81@/8†DW8OQk8M¿7—>C8,J8‘]8{÷æ7‘]8ad8ad8—>C8 ¾‰8ad8 ¾‰8OQk8OQk8õ!¼8†DW81@/8{÷æ7,J8,J81@/8{÷æ7{÷æ7‘]8¤Àì´Xþ!·Xþ!·ÞAG¸È‹¸ÞAG¸OWo¸Êµ¸È‹¸­´¸i(¾¸±_Ò¸i(¾¸mÒ•¸mÒ•¸È‹¸­´¸ù©¸±_Ò¸±_Ҹѿð¸Cȸãú¸ãú¸±_Ò¸ ~ܸѿð¸†&¹—¹Q¿¹ìƒ¹žæ¸Ñ¿ð¸ãú¸—¹—¹Öª ¹’!¹$G0¹Ã_5¹4ê¹4ê¹’!¹4ê¹/+¹½¬D¹bÇI¹½¬D¹êx:¹þS¹Ã_5¹Öª ¹—¹ãú¸Öª ¹ìƒ¹­´¸Cȸ ~ܸ­´¸ù©¸mÒ•¸È‹¸ ~ܸi(¾¸­´¸ ~ܸCȸi(¾¸Ñ¿ð¸±_Ò¸ù©¸i(¾¸±_Ҹ䟸䟸È‹¸Êµ¸mÒ•¸äŸ¸:I[¸OWo¸mÒ•¸:I[¸OWo¸È‹¸mÒ•¸:I[¸È‹¸È‹¸/¬Ÿ·:I[¸È‹¸äŸ¸äŸ¸È‹¸ù©¸ù©¸È‹¸È‹¸mÒ•¸­´¸È‹¸Cȸù©¸­´¸ãú¸ ~ܸi(¾¸ìƒ¹žæ¸Öª ¹Q¿¹’!¹êx:¹’!¹Ã_5¹âN¹“’?¹½¬D¹½¬D¹þS¹êx:¹bÇI¹ Y¹/+¹½¬D¹“’?¹$G0¹êx:¹4ê¹4ê¹ãú¸—¹ìƒ¹Q¿¹rÔ¹’!¹Öª ¹†&¹ãú¸Ñ¿ð¸Ñ¿ð¸±_Ҹȋ¸mÒ•¸Cȸ䟸È‹¸­´¸­´¸È‹¸:I[¸ù©¸æA3¸Ôîî·J¸/¬Ÿ·‰6MP7{÷æ7—>C8OQk81@/8ad8ad8fß8gó§8 ¾‰8OQk8 ¾‰8fß8ÀÍ“8ÀÍ“8‘]8ad8~vÚ8õ!¼8 ¾‰8ad8ad8ad8†DW81@/8‘]8,J8—>C8}µ`7ÓÀ—7{÷æ7‰6ˆ[ ¸ó>Ç·ˆ[ ¸ó>Ç·/¬Ÿ·F{p·Ôîî·J¸ó>Ç·È‹¸OWo¸ÞAG¸ù©¸ÞAG¸È‹¸OWo¸æA3¸ˆ[ ¸mÒ•¸äŸ¸äŸ¸­´¸äŸ¸mÒ•¸­´¸i(¾¸±_Ò¸i(¾¸i(¾¸±_Ò¸i(¾¸±_Ò¸4ê¹Ñ¿ð¸Q¿¹Q¿¹rÔ¹4ê¹4ê¹—¹ ~ܸžæ¸±_Ò¸±_Ò¸­´¸ù©¸­´¸­´¸È‹¸:I[¸ˆ[ ¸ˆ[ ¸F{p·ó>Ç·J¸F{p·MP7{÷æ7}µ`7{÷æ7MP7}µ`7OQk8—>C8—>C8OQk8 ¾‰8 ¾‰8ad8¡ ²8†DW8fß8—>C8OQk8†DW8OQk8 ¾‰8ÀÍ“8—>C8{÷æ7{÷æ7ad8—>C8—>C8†DW8‘]8‘]8{÷æ7M¿7,J8ÓÀ—7ÓÀ—7F{p·F{p·|#¨¶|#¨¶¤Àì´‰6}µ`7‰6F{p·F{p·ˆ[ ¸Ôîî·J¸J¸/¬Ÿ·ó>Ç·ˆ[ ¸Xþ!·æA3¸Ôîî·:I[¸mÒ•¸Ôîî·ˆ[ ¸ÞAG¸CȸmÒ•¸mÒ•¸­´¸i(¾¸±_Ò¸Cȸi(¾¸i(¾¸Cȸѿð¸ãú¸Cȸ—¹—¹žæ¸Q¿¹ìƒ¹ ~ܸi(¾¸ ~ܸ䟸ù©¸ ~ܸ䟸i(¾¸mÒ•¸CȸCȸ±_Ҹ䟸mÒ•¸CȸOWo¸æA3¸æA3¸Êµ¸J¸ÞAG¸/¬Ÿ·ˆ[ ¸/¬Ÿ·ÓÀ—7‘]81@/8ÓÀ—7‘]8OQk8†DW8—>C8fß8˜·î8„99–ä8ŽÚø8F<Æ8{XÐ8„9~vÚ8~vÚ8ŽÚø85%9&¦ 99–ä8õ!¼8F<Æ8gó§8õ!¼8gó§8ÀÍ“8gó§8 ¾‰8F<Æ8gó§8~vÚ8ÀÍ“8OQk8õ!¼8 ¾‰8ad8†DW8fß8 ¾‰8gó§8OQk8†DW8 ¾‰8—>C81@/8†DW8ÓÀ—7‘]8ad8—>C8M¿7{÷æ7}µ`7ÓÀ—7M¿7‰6ó>Ç·ó>Ç·/¬Ÿ·F{p·ÓÀ—7}µ`7Xþ!·F{p·MP7ÓÀ—7ÓÀ—7‰6ÓÀ—7ÓÀ—7‘]8{÷æ7,J8M¿7fß8fß8 ¾‰8{XÐ8ad8 ¾‰81@/8ÓÀ—71@/8,J8‘]8—>C8M¿7,J8OQk8,J8gó§8õ!¼8{XÐ8fß8ad8†DW8ad8†DW8†DW8fß8F<Æ8ÀÍ“8gó§8˜·î8gó§8 ¾‰8F<Æ8õ!¼8~vÚ8õ!¼8F<Æ8¡ ²8gó§8gó§8õ!¼8õ!¼8 ¾‰8—>C8†DW8fß8 ¾‰8‘]8OQk8gó§8ad8¡ ²8ÀÍ“8OQk8ÀÍ“81@/8—>C8—>C8OQk8ÀÍ“8{XÐ8õ!¼8ÀÍ“8ad8OQk8OQk8MP7}µ`7ˆ[ ¸ÞAG¸/¬Ÿ·|#¨¶Ôîî·Ôîî·MP7F{p·{÷æ7{÷æ7¤Àì´1@/8OQk8‘]8,J8‘]81@/8—>C8†DW8OQk8—>C8—>C8ÀÍ“8ad8OQk8 ¾‰8ad8fß8¡ ²8‘]81@/8OQk8ad8ad8¡ ²8ÀÍ“8 ¾‰8õ!¼8õ!¼8F<Æ8ÀÍ“8~vÚ8~vÚ8~vÚ8~º9å9&¦ 9z’9 )*9å9ÍX9\ÜM9UÁH9 )*9 )*9Z495%9*s99¹Œ>9*s99™A/9™A/9™A/9¹Œ>9¹Œ>9Z495%9~Ï9 )*9~Ï9~Ï9~º9å9z’9&¦ 9„99–ä8~vÚ8ŽÚø8gó§8~vÚ8~vÚ8ÀÍ“8ad8‘]8{÷æ7—>C8ÓÀ—7¤Àì´M¿7F{p·‰6¤Àì´ó>Ç·F{p·ˆ[ ¸ˆ[ ¸Ôîî·Xþ!·J¸}µ`7ÓÀ—7}µ`7}µ`7|#¨¶‰6|#¨¶F{p·/¬Ÿ·ó>Ç·:I[¸F{p·‰6F{p·ˆ[ ¸J¸:I[¸Xþ!·/¬Ÿ·Xþ!·F{p·F{p·/¬Ÿ·|#¨¶ˆ[ ¸/¬Ÿ·|#¨¶ÓÀ—7‰6¤Àì´}µ`7,J81@/8{÷æ7{÷æ7 ¾‰8OQk8ad8—>C8ÓÀ—7†DW8 ¾‰8†DW8ad8—>C8ad8ad8M¿7ÓÀ—7MP7†DW8{÷æ7‰6¤Àì´|#¨¶/¬Ÿ·ó>Ç·|#¨¶F{p·MP7MP7Ôîî·F{p·F{p·ó>Ç·ó>Ç·F{p·¤Àì´|#¨¶‰6ó>Ç·æA3¸ˆ[ ¸J¸ÞAG¸ÞAG¸:I[¸ÞAG¸ˆ[ ¸:I[¸:I[¸È‹¸È‹¸J¸È‹¸ù©¸È‹¸äŸ¸ÞAG¸È‹¸mÒ•¸ù©¸­´¸Cȸi(¾¸ãú¸Ñ¿ð¸ãú¸žæ¸ù©¸mÒ•¸ ~ܸ±_Ҹʵ¸ù©¸ÞAG¸äŸ¸äŸ¸:I[¸mÒ•¸ÞAG¸Êµ¸æA3¸/¬Ÿ·Ôîî·äŸ¸OWo¸/¬Ÿ·F{p·ó>Ç·ó>Ç·¤Àì´Ôîî·/¬Ÿ·¤Àì´M¿7{÷æ7}µ`7{÷æ7M¿71@/81@/8MP7{÷æ7M¿7{÷æ7ÓÀ—7M¿7{÷æ7MP7}µ`7,J8OQk8‘]8M¿7—>C8‘]8OQk8ad8fß8ÀÍ“8 ¾‰8—>C8OQk8fß8fß8{XÐ89–ä8¡ ²8õ!¼8,J8{÷æ7OQk8{÷æ7‘]8‰6‰6/¬Ÿ·Xþ!·|#¨¶F{p·Xþ!·¤Àì´ÓÀ—7ó>Ç·¤Àì´‰6ó>Ç·¤Àì´Ôîî·OWo¸È‹¸i(¾¸ù©¸žæ¸äŸ¸­´¸ãú¸—¹ ~ܸѿð¸Ñ¿ð¸Ñ¿ð¸Ñ¿ð¸±_Ò¸ ~ܸ샹֪ ¹Öª ¹ ~ܸ֪ ¹/+¹Q¿¹’!¹êx:¹Q¿¹ãú¸—¹4ê¹—¹žæ¸žæ¸ÞAG¸È‹¸äŸ¸J¸ÞAG¸ÞAG¸ÞAG¸Ôîî·ó>Ç·F{p·ˆ[ ¸ˆ[ ¸‰6}µ`7}µ`71@/8—>C8‘]8†DW8MP7ÓÀ—7M¿7MP7‘]81@/8MP7Xþ!·,J8‰6ÓÀ—7¤Àì´Xþ!·MP7¤Àì´/¬Ÿ·¤Àì´/¬Ÿ·Ôîî·Ôîî·ó>Ç·æA3¸J¸ˆ[ ¸Ôîî·È‹¸æA3¸æA3¸æA3¸:I[¸Cȸù©¸äŸ¸­´¸Êµ¸ù©¸ù©¸äŸ¸­´¸mÒ•¸È‹¸È‹¸ù©¸mÒ•¸±_Ò¸ãú¸Ñ¿ð¸ìƒ¹ãú¸rԹ샹 ~ܸ ~ܸãú¸Öª ¹ìƒ¹±_Ҹ샹žæ¸±_Ò¸±_Ò¸ ~ܸãú¸±_Ҹ䟸ù©¸È‹¸­´¸­´¸È‹¸mÒ•¸mÒ•¸Ôîî·ó>Ç·:I[¸ˆ[ ¸ˆ[ ¸}µ`7‘]8M¿7|#¨¶Xþ!·Ôîî·Xþ!·/¬Ÿ·ˆ[ ¸F{p·|#¨¶}µ`7MP7‘]8‰6{÷æ7}µ`7M¿7MP7F{p·MP7F{p·Xþ!·M¿7‰6}µ`7‰6‘]8‰6MP7}µ`7Xþ!·MP7M¿7F{p·ˆ[ ¸Ôîî·Ôîî·Ôîî·Ôîî·:I[¸ÞAG¸È‹¸È‹¸È‹¸mÒ•¸­´¸±_Ҹ샹ѿð¸ãú¸Öª ¹±_Ҹѿ𸭴¸ãú¸ ~ܸžæ¸†&¹Ñ¿ð¸±_Ò¸ ~ܸù©¸ù©¸—¹4ê¹’!¹rÔ¹’!¹rԹ샹—¹Q¿¹/+¹/+¹$G0¹Ã_5¹’!¹4ê¹Öª ¹Öª ¹Q¿¹’!¹±_Ò¸ãú¸Q¿¹±_Ò¸Öª ¹žæ¸Ñ¿ð¸’!¹$G0¹$G0¹Öª ¹ ~ܸžæ¸±_Ò¸±_Ò¸­´¸äŸ¸±_Ò¸ÞAG¸OWo¸:I[¸mÒ•¸:I[¸ÞAG¸Ôîî·È‹¸È‹¸äŸ¸ù©¸:I[¸J¸OWo¸OWo¸Ôîî·/¬Ÿ·F{p·/¬Ÿ·|#¨¶æA3¸ÞAG¸Xþ!·Ôîî·Êµ¸È‹¸J¸J¸:I[¸mÒ•¸­´¸È‹¸äŸ¸ù©¸Êµ¸È‹¸È‹¸æA3¸È‹¸ù©¸±_Ò¸žæ¸i(¾¸žæ¸äŸ¸ù©¸±_Ò¸­´¸Ñ¿ð¸—¹ãú¸ãú¸i(¾¸ ~ܸ­´¸Cȸžæ¸Q¿¹žæ¸Q¿¹’!¹žæ¸ìƒ¹Ñ¿ð¸ìƒ¹Cȸù©¸ù©¸­´¸­´¸ù©¸äŸ¸È‹¸ù©¸­´¸mÒ•¸ÞAG¸ ~ܸù©¸ãú¸ù©¸mÒ•¸:I[¸æA3¸Ôîî·‰6ó>Ç·¤Àì´|#¨¶}µ`7}µ`7‰6MP7|#¨¶Ôîî·F{p·¤Àì´¤Àì´MP7{÷æ7}µ`7}µ`7¤Àì´{÷æ7—>C8~vÚ8F<Æ8 ¾‰89–ä8{XÐ8gó§8fß8gó§8OQk81@/8 ¾‰8ad81@/8,J8¤Àì´‰6}µ`7†DW8OQk8fß8‘]8}µ`7ÓÀ—7‘]8F{p·{÷æ7MP7ÓÀ—7}µ`7‘]8ÓÀ—7MP7ÓÀ—7‰6Ôîî·|#¨¶/¬Ÿ·/¬Ÿ·J¸æA3¸OWo¸È‹¸mÒ•¸J¸mÒ•¸æA3¸ÞAG¸æA3¸:I[¸:I[¸J¸æA3¸J¸ÞAG¸ˆ[ ¸ó>Ç·OWo¸È‹¸mÒ•¸žæ¸äŸ¸mÒ•¸ù©¸ÞAG¸È‹¸ˆ[ ¸J¸Ôîî·J¸:I[¸/¬Ÿ·/¬Ÿ·ˆ[ ¸|#¨¶Xþ!·F{p·‰6ÓÀ—7}µ`7Xþ!·M¿7{÷æ7‰6ÓÀ—7ÓÀ—7{÷æ7‘]8†DW8†DW8gó§8OQk8†DW8 ¾‰8†DW8ad8F<Æ8gó§8~vÚ8„9¡ ²8ÀÍ“8ad8fß8 ¾‰8—>C8‘]8ÀÍ“8†DW8 ¾‰8‘]81@/81@/8ad8ad8ad8 ¾‰8†DW8OQk8—>C8OQk8—>C8{÷æ7ad8†DW8‘]8†DW8OQk8—>C8MP7ÓÀ—7ad8‘]8†DW8‘]8ÓÀ—7‘]8}µ`7‘]8‘]8Xþ!·}µ`7ÓÀ—7|#¨¶¤Àì´‰6}µ`7|#¨¶‰6}µ`7,J8{÷æ7†DW8M¿7ÓÀ—7‘]8†DW8†DW8OQk8fß8†DW81@/8ÀÍ“8†DW8õ!¼8¡ ²8¡ ²8ŽÚø8¡ ²8~vÚ89–ä8OQk8 ¾‰8~vÚ89–ä8˜·î8F<Æ8¡ ²8~º99–ä89–ä8z’9˜·î8ŽÚø8~Ï9~Ï9 )*9*s99^û9˜·î8~º9 )*9z’9^û9Z49å9~Ï9Z49*s99^û9„9ŽÚø8~º9ŽÚø89–ä89–ä8{XÐ8õ!¼8gó§8M¿7†DW8ÀÍ“8†DW8 ¾‰8 ¾‰81@/8,J8ÓÀ—7M¿7†DW8}µ`7ÓÀ—7¤Àì´/¬Ÿ·‰6}µ`7|#¨¶Xþ!·MP7|#¨¶Xþ!·Ôîî·J¸F{p·J¸ˆ[ ¸æA3¸È‹¸J¸F{p·ˆ[ ¸ÓÀ—7M¿7}µ`7MP7ÓÀ—7‰6ÓÀ—7ad8{÷æ7‘]8ÀÍ“8—>C81@/8,J81@/8{÷æ7ad8¡ ²8ad8ÀÍ“8ÀÍ“8†DW8—>C81@/8MP7¤Àì´{÷æ7,J8}µ`7,J8ad8,J81@/8ad8gó§8{÷æ7†DW8ÀÍ“8OQk8 ¾‰8ÀÍ“89–ä8ÀÍ“8F<Æ8{XÐ8˜·î89–ä8z’9å99–ä8~Ï9˜·î8~Ï9~º9~Ï9˜·î8^û9&¦ 9õ!¼89–ä8z’99–ä8F<Æ8˜·î8fß8fß8ÀÍ“8 ¾‰8õ!¼8fß8{XÐ8fß8õ!¼8˜·î8F<Æ8¡ ²8gó§8,J8,J8MP7‰6F{p·‰6F{p·Ôîî·F{p·/¬Ÿ·/¬Ÿ·¤Àì´Xþ!·ó>Ç·¤Àì´Ôîî·ˆ[ ¸¤Àì´}µ`7¤Àì´‰6M¿7MP7MP7}µ`7¤Àì´¤Àì´¤Àì´J¸Ôîî·‰6F{p·‰6{÷æ7‘]8¤Àì´¤Àì´{÷æ7¤Àì´|#¨¶}µ`7M¿7{÷æ7†DW81@/8OQk8ad8‘]8ÀÍ“8OQk8õ!¼8¡ ²8gó§8gó§8gó§8ŽÚø8˜·î89–ä8„9{XÐ8{XÐ8ŽÚø8fß8¡ ²8 ¾‰8OQk8OQk8,J81@/8,J8,J81@/8ad8}µ`71@/8†DW8,J8,J8—>C8‰6}µ`7‘]8}µ`7{÷æ7Xþ!·F{p·|#¨¶ó>Ç·/¬Ÿ·Xþ!·Ôîî·J¸Xþ!·Ôîî·:I[¸ÞAG¸J¸Xþ!·J¸Ôîî·:I[¸Ôîî·æA3¸J¸:I[¸:I[¸ó>Ç·ù©¸æA3¸:I[¸È‹¸:I[¸J¸mÒ•¸:I[¸¤Àì´|#¨¶F{p·ó>Ç·}µ`7,J8M¿7ad8,J8fß8fß8OQk8fß8 ¾‰8 ¾‰8ÀÍ“8fß8,J8†DW8ÀÍ“8—>C8¡ ²8¡ ²8,J81@/8¡ ²8ÀÍ“8ÀÍ“8fß8F<Æ8F<Æ8ŽÚø8&¦ 9~º9~º9z’9&¦ 9~º9^û9^û9~º9 )*9Z49¹Œ>95%9*s995%9„99–ä8~Ï9{XÐ8z’9z’9„9~vÚ8{XÐ8{XÐ8&¦ 9õ!¼8gó§8—>C81@/8gó§8OQk8 ¾‰8OQk8 ¾‰8ad8ÀÍ“8,J8,J8‘]8‘]8ÓÀ—7{÷æ7¤Àì´¤Àì´¤Àì´‰6Ôîî·|#¨¶Ôîî·¤Àì´¤Àì´|#¨¶Xþ!·/¬Ÿ·ó>Ç·J¸mÒ•¸ÞAG¸:I[¸mÒ•¸ù©¸Cȸѿð¸CȸmÒ•¸±_Ò¸±_Ò¸CȸOWo¸È‹¸ù©¸äŸ¸OWo¸ÞAG¸æA3¸ˆ[ ¸ÞAG¸Ôîî·F{p·Ôîî·ó>Ç·ó>Ç·æA3¸J¸OWo¸:I[¸ÞAG¸|#¨¶Ôîî·Êµ¸æA3¸Ôîî·Êµ¸ÞAG¸æA3¸Ôîî·Xþ!·¤Àì´ÓÀ—7‘]8MP7¤Àì´F{p·}µ`7{÷æ7M¿7‘]8†DW8—>C8ÓÀ—7—>C8ÀÍ“8{÷æ7ÓÀ—71@/8—>C8—>C8M¿7¤Àì´F{p·Ôîî·ó>Ç·ÞAG¸ÞAG¸æA3¸ˆ[ ¸J¸ó>Ç·æA3¸OWo¸±_Ò¸ ~ܸÈ‹¸È‹¸È‹¸Cȸ­´¸È‹¸i(¾¸ù©¸äŸ¸Êµ¸È‹¸mÒ•¸ÞAG¸ù©¸:I[¸æA3¸È‹¸ÞAG¸È‹¸È‹¸È‹¸­´¸:I[¸mÒ•¸È‹¸CȸÈ‹¸:I[¸ÞAG¸ù©¸ÞAG¸J¸È‹¸:I[¸ÞAG¸ÞAG¸ù©¸ù©¸È‹¸äŸ¸äŸ¸È‹¸Ôîî·ˆ[ ¸ó>Ç·Ôîî·OWo¸OWo¸Êµ¸ÞAG¸È‹¸ó>Ç·ó>Ç·ó>Ç·¤Àì´‰6ó>Ç·ÓÀ—7M¿71@/8‘]8‘]8MP7M¿7MP7ÓÀ—7¤Àì´|#¨¶‰6MP7|#¨¶‰6‰6‰6Xþ!·MP7Xþ!·}µ`7|#¨¶ó>Ƿʵ¸æA3¸J¸:I[¸ÞAG¸OWo¸È‹¸äŸ¸i(¾¸i(¾¸È‹¸ÞAG¸È‹¸mÒ•¸­´¸žæ¸i(¾¸Cȸi(¾¸È‹¸ ~ܸ­´¸È‹¸äŸ¸žæ¸ãú¸žæ¸ãú¸Ñ¿ð¸ ~ܸ±_Ò¸ ~ܸi(¾¸äŸ¸­´¸­´¸ìƒ¹i(¾¸äŸ¸­´¸i(¾¸È‹¸mÒ•¸ˆ[ ¸ÞAG¸æA3¸J¸/¬Ÿ·Ôîî·ÓÀ—7MP7‰6MP7MP7{÷æ7‰6/¬Ÿ·|#¨¶¤Àì´/¬Ÿ·|#¨¶|#¨¶ó>Ç·¤Àì´¤Àì´Ôîî·Ôîî·/¬Ÿ·/¬Ÿ·ó>Ç·ó>Ç·MP7F{p·ˆ[ ¸J¸Xþ!·Xþ!·|#¨¶ó>Ç·Xþ!·ó>Ç·F{p·†DW8ad8‘]8‘]8M¿7ÓÀ—7¤Àì´/¬Ÿ·Xþ!·‘]8¤Àì´}µ`7|#¨¶Xþ!·M¿7‘]8}µ`7‰6Xþ!·‰6}µ`7‰6|#¨¶Ôîî·‰6/¬Ÿ·|#¨¶ÓÀ—7¤Àì´Ôîî·ó>Ç·ˆ[ ¸ˆ[ ¸/¬Ÿ·Xþ!·:I[¸ÞAG¸È‹¸È‹¸äŸ¸mÒ•¸mÒ•¸È‹¸È‹¸äŸ¸È‹¸i(¾¸äŸ¸äŸ¸mÒ•¸äŸ¸­´¸CȸmÒ•¸OWo¸mÒ•¸ˆ[ ¸È‹¸/¬Ÿ·Ôîî·Xþ!·Xþ!·ÓÀ—7,J8,J8OQk8,J8,J8†DW81@/8 ¾‰8fß8 ¾‰8fß8ÀÍ“8~vÚ8&¦ 9z’9˜·î8z’9z’9~Ï9„9^û9 )*9*s99 )*9Z49\ÜM9Z49 )*9 )*9UÁH9™A/9ÍX9*s99¹Œ>9å9Ú÷R9ɦC9å9¹Œ>9 )*9^û9^û9&¦ 9&¦ 9&¦ 99–ä8&¦ 99–ä8˜·î8~vÚ89–ä8õ!¼8¡ ²8õ!¼8õ!¼8{XÐ8OQk8ÀÍ“8ÀÍ“8 ¾‰8ad8¡ ²8F<Æ8fß8fß8F<Æ8 ¾‰8ÀÍ“8OQk8 ¾‰8 ¾‰8—>C8OQk8OQk8‘]8OQk8{÷æ7‘]8{÷æ7{÷æ7,J81@/81@/8}µ`7 ¾‰8fß8OQk8,J8—>C8M¿7†DW8ad8ÀÍ“8†DW8 ¾‰8ad8OQk8ad8OQk8fß8F<Æ89–ä8 ¾‰8gó§8„9fß8F<Æ8F<Æ8„9F<Æ8˜·î8~vÚ8{XÐ8˜·î8„9&¦ 9˜·î8^û9~Ï9F<Æ8˜·î8z’9ŽÚø8&¦ 99–ä8&¦ 9„9ŽÚø8ŽÚø8{XÐ8F<Æ8ad89–ä8{XÐ8F<Æ8¡ ²8gó§8ad8 ¾‰8M¿7,J8—>C8,J8‘]8¤Àì´M¿7}µ`7|#¨¶‰6ÓÀ—7Xþ!·ˆ[ ¸/¬Ÿ·ˆ[ ¸ó>Ç·Xþ!·MP7Xþ!·Xþ!·Ôîî·Xþ!·‰6ˆ[ ¸ó>Ç·æA3¸¤Àì´ˆ[ ¸/¬Ÿ·|#¨¶ÞAG¸ÞAG¸OWo¸È‹¸äŸ¸i(¾¸:I[¸i(¾¸i(¾¸Êµ¸ˆ[ ¸ˆ[ ¸È‹¸ˆ[ ¸/¬Ÿ·/¬Ÿ·F{p·¤Àì´{÷æ7}µ`7—>C8‘]8OQk81@/8 ¾‰8fß8,J8OQk8{XÐ8 ¾‰8—>C8,J8†DW81@/8OQk8M¿7†DW8{÷æ7fß8õ!¼8õ!¼8¡ ²8{XÐ8ad8¡ ²8gó§8~vÚ8gó§8 ¾‰8gó§8õ!¼8õ!¼8õ!¼8õ!¼8„9{XÐ89–ä8~vÚ8~vÚ8˜·î8F<Æ8ÀÍ“8F<Æ8ÀÍ“8fß8fß8F<Æ8ÀÍ“8ÀÍ“8OQk8OQk8OQk81@/81@/8†DW8—>C8—>C8,J8{÷æ71@/8—>C8}µ`7¤Àì´/¬Ÿ·ó>Ç·/¬Ÿ·ó>Ç·Ôîî·J¸Xþ!·ó>Ç·OWo¸ˆ[ ¸J¸J¸Ôîî·ˆ[ ¸Ôîî·Xþ!·|#¨¶¤Àì´}µ`7MP71@/8{÷æ7†DW81@/8OQk8ÓÀ—7†DW8,J8ad8ad8—>C8ad8fß81@/8OQk8ÀÍ“8 ¾‰8OQk8ÀÍ“8OQk8¡ ²8fß8 ¾‰8fß8¡ ²8˜·î8{XÐ8&¦ 99–ä89–ä89–ä8ŽÚø8z’9~vÚ8~vÚ8{XÐ8õ!¼8ŽÚø8^û9õ!¼8~º9~Ï9~Ï9~Ï9&¦ 9F<Æ8gó§8~vÚ8 ¾‰8 ¾‰8gó§8OQk8ÀÍ“8ÀÍ“8—>C8‘]8¤Àì´|#¨¶}µ`7|#¨¶F{p·ó>Ç·/¬Ÿ·ó>Ç·F{p·ˆ[ ¸ÞAG¸OWo¸ˆ[ ¸|#¨¶æA3¸:I[¸mÒ•¸æA3¸:I[¸È‹¸ù©¸mÒ•¸È‹¸ù©¸äŸ¸±_Ò¸Q¿¹4ê¹4ê¹ìƒ¹ìƒ¹ãú¸ãú¸žæ¸i(¾¸ ~ܸmÒ•¸OWo¸ÞAG¸J¸Ôîî·Ôîî·¤Àì´Xþ!·F{p·ˆ[ ¸Ôîî·Xþ!·¤Àì´Xþ!·|#¨¶,J8ÓÀ—71@/8ÀÍ“8—>C8M¿7†DW8F<Æ8ad8—>C8F<Æ8gó§8gó§8õ!¼8¡ ²8{XÐ8¡ ²8¡ ²8ŽÚø8„99–ä8~º9z’9~º9~º9z’9„9~vÚ8{XÐ8z’9˜·î8~º9ŽÚø8~vÚ8˜·î8˜·î8˜·î89–ä8F<Æ8F<Æ8õ!¼8—>C8M¿7OQk8†DW8†DW8{÷æ7‘]8—>C8{÷æ7{÷æ7{÷æ7‘]81@/8OQk8OQk8ÓÀ—7‰6¤Àì´MP7F{p·|#¨¶}µ`7F{p·/¬Ÿ·|#¨¶F{p·/¬Ÿ·ó>Ç·ó>Ç·ó>Ç·Ôîî·/¬Ÿ·/¬Ÿ·J¸:I[¸È‹¸F{p·¤Àì´‰6/¬Ÿ·‰6}µ`7‰6M¿7¤Àì´MP7}µ`7‘]8MP7,J8}µ`7|#¨¶Xþ!·|#¨¶|#¨¶}µ`7MP7M¿7‰6|#¨¶/¬Ÿ·:I[¸ó>Ç·ó>Ç·Xþ!·|#¨¶M¿7,J8†DW8M¿7,J8†DW8‘]8ÓÀ—7ad8fß8OQk8,J8,J8,J8,J8 ¾‰8OQk8†DW8õ!¼8ÀÍ“8gó§8ÀÍ“8õ!¼8ad8ad8—>C8 ¾‰8ad8—>C8—>C8¡ ²8†DW8ÓÀ—7OQk8,J8M¿71@/8OQk8MP7‰6}µ`7{÷æ7}µ`7Ôîî·Ôîî·ó>Ç·ˆ[ ¸ÞAG¸OWo¸äŸ¸ÞAG¸æA3¸ˆ[ ¸ÞAG¸È‹¸ÞAG¸­´¸Êµ¸ù©¸Cȸù©¸Êµ¸Cȸù©¸ù©¸J¸È‹¸È‹¸æA3¸È‹¸ù©¸:I[¸F{p·Xþ!·MP7‰6‰6ˆ[ ¸J¸Xþ!·Ôîî·æA3¸F{p·F{p·F{p·MP7†DW8‘]8†DW8ad8†DW8ÀÍ“8F<Æ8{XÐ8õ!¼8õ!¼8„9{XÐ8¡ ²8{XÐ8F<Æ8~vÚ8{XÐ8z’9¡ ²8ÀÍ“8OQk8ÀÍ“8õ!¼8¡ ²8fß8ÀÍ“8 ¾‰8ad8F<Æ8OQk8,J8ÓÀ—7ad8,J8‘]8 ¾‰8‘]8‰6}µ`7{÷æ7†DW8MP7Ôîî·/¬Ÿ·ó>Ç·J¸:I[¸È‹¸mÒ•¸È‹¸±_Ҹ䟸䟸䟸ʵ¸È‹¸ˆ[ ¸äŸ¸Cȸ䟸žæ¸ù©¸ù©¸­´¸ ~ܸ±_Ò¸Cȸ䟸䟸䟸±_Ò¸±_Ò¸ù©¸ù©¸i(¾¸­´¸i(¾¸­´¸:I[¸ˆ[ ¸È‹¸ˆ[ ¸J¸æA3¸ˆ[ ¸ˆ[ ¸Ôîî·Xþ!·ˆ[ ¸ó>Ç·M¿7¤Àì´}µ`7}µ`7M¿7,J8{÷æ71@/8OQk8—>C8†DW8—>C8ÀÍ“8ÀÍ“8 ¾‰8OQk8†DW8,J8—>C8—>C81@/8†DW8M¿7{÷æ7‘]8}µ`7{÷æ7‰6{÷æ7‰6ÓÀ—7MP7¤Àì´}µ`7¤Àì´}µ`7|#¨¶/¬Ÿ·|#¨¶‰6ˆ[ ¸M¿7MP7ó>Ç·ˆ[ ¸J¸ó>Ç·ÞAG¸È‹¸Cȸ ~ܸi(¾¸i(¾¸ ~ܸžæ¸i(¾¸­´¸ìƒ¹Cȸ ~ܸCȸi(¾¸žæ¸mÒ•¸Cȸѿð¸ìƒ¹ ~ܸi(¾¸ ~ܸi(¾¸ù©¸ù©¸È‹¸ù©¸i(¾¸ù©¸mÒ•¸:I[¸ÞAG¸/¬Ÿ·æA3¸J¸:I[¸:I[¸Ôîî·È‹¸/¬Ÿ·J¸|#¨¶ó>Ç·ÞAG¸:I[¸Ôîî·/¬Ÿ·J¸Xþ!·¤Àì´MP7ÓÀ—7MP71@/81@/8{÷æ7‘]81@/8,J81@/8OQk8,J8}µ`7M¿7M¿71@/8—>C8†DW8ad8†DW8ÀÍ“8ÀÍ“8OQk8,J8‘]8,J8—>C8{÷æ7OQk8M¿7MP7M¿7M¿7M¿7ÓÀ—7‘]8MP7ÓÀ—7‰6ÓÀ—7MP7MP7M¿7‰6‰6‰6Xþ!·Xþ!·ó>Ç·ˆ[ ¸È‹¸äŸ¸äŸ¸mÒ•¸­´¸mÒ•¸ù©¸äŸ¸æA3¸È‹¸OWo¸­´¸mÒ•¸OWo¸CȸmÒ•¸OWo¸È‹¸ù©¸­´¸Cȸ䟸䟸OWo¸È‹¸äŸ¸­´¸È‹¸æA3¸ÞAG¸mÒ•¸æA3¸Ôîî·Ôîî·F{p·Ôîî·/¬Ÿ·ó>Ç·Xþ!·ó>Ç·ÞAG¸¤Àì´¤Àì´‰6/¬Ÿ·‰6{÷æ7MP7‰6M¿7‘]8ÓÀ—7ÓÀ—7‰6{÷æ7|#¨¶‘]8{÷æ7{÷æ7†DW81@/8‘]8‘]8{÷æ7|#¨¶¤Àì´{÷æ7MP7‰6Xþ!·MP7Xþ!·Ôîî·/¬Ÿ·|#¨¶Xþ!·Xþ!·Xþ!·|#¨¶|#¨¶‰6MP7|#¨¶F{p·Ôîî·J¸ˆ[ ¸Ôîî·Ôîî·æA3¸OWo¸Ôîî·È‹¸È‹¸ù©¸±_Ò¸i(¾¸Cȸi(¾¸äŸ¸Cȸ ~ܸ±_Ò¸—¹—¹Q¿¹ãú¸rÔ¹4ê¹$G0¹4ê¹—¹Q¿¹$G0¹4깞æ¸Ñ¿ð¸Q¿¹CȸCȸi(¾¸ù©¸ù©¸äŸ¸È‹¸ˆ[ ¸æA3¸/¬Ÿ·|#¨¶Ôîî·|#¨¶ÓÀ—7¤Àì´—>C8{÷æ71@/8—>C8†DW8—>C8 ¾‰8OQk8 ¾‰8õ!¼8 ¾‰8OQk8{XÐ8F<Æ8ŽÚø8{XÐ8ŽÚø8&¦ 9~º9~vÚ89–ä8¡ ²8¡ ²8{XÐ8{XÐ8ŽÚø8gó§8F<Æ8¡ ²8¡ ²8fß8 ¾‰89–ä8¡ ²8ÀÍ“8ad8{÷æ7}µ`7‰6MP7‰6¤Àì´}µ`7/¬Ÿ·Ôîî·ó>Ç·/¬Ÿ·Xþ!·}µ`7ÓÀ—7Ôîî·/¬Ÿ·M¿7ó>Ç·Xþ!·Ôîî·Ôîî·ó>Ç·È‹¸æA3¸ó>Ç·È‹¸È‹¸È‹¸äŸ¸­´¸i(¾¸È‹¸­´¸CȸCȸÈ‹¸È‹¸mÒ•¸ÞAG¸mÒ•¸ˆ[ ¸È‹¸ÞAG¸J¸J¸:I[¸:I[¸È‹¸J¸ˆ[ ¸F{p·/¬Ÿ·ˆ[ ¸Ôîî·mÒ•¸Êµ¸J¸OWo¸È‹¸ÞAG¸J¸J¸J¸Ôîî·OWo¸F{p·ÓÀ—7¤Àì´|#¨¶¤Àì´MP7{÷æ7¤Àì´{÷æ7|#¨¶}µ`7ÓÀ—7MP7ÓÀ—7{÷æ7,J81@/8‰6Xþ!·F{p·/¬Ÿ·Xþ!·/¬Ÿ·OWo¸ˆ[ ¸/¬Ÿ·ó>Ç·F{p·/¬Ÿ·ó>Ç·F{p·ˆ[ ¸:I[¸Ôîî·ó>Ç·Ôîî·/¬Ÿ·F{p·ˆ[ ¸È‹¸mÒ•¸È‹¸È‹¸ù©¸È‹¸­´¸È‹¸mÒ•¸­´¸È‹¸­´¸i(¾¸mÒ•¸äŸ¸­´¸CȸmÒ•¸ ~ܸi(¾¸±_Ҹȋ¸È‹¸­´¸­´¸È‹¸È‹¸mÒ•¸OWo¸OWo¸OWo¸:I[¸J¸/¬Ÿ·ó>Ç·J¸ó>Ç·J¸Xþ!·|#¨¶}µ`7M¿7}µ`7M¿71@/8,J8gó§8ad8ÀÍ“8ÀÍ“8ÀÍ“8fß8{XÐ8õ!¼8gó§8F<Æ8gó§8gó§8F<Æ8F<Æ8¡ ²8OQk8õ!¼8{XÐ8gó§8{XÐ89–ä8˜·î8z’9z’9&¦ 9~Ï9~º9õ!¼89–ä8^û9{XÐ8F<Æ8ad8,J8fß8ÀÍ“8 ¾‰8ÀÍ“8fß8ad8,J8MP7{÷æ7OQk8{÷æ7¤Àì´MP7F{p·}µ`7ÓÀ—7,J8‘]8ÓÀ—7ÓÀ—7 ¾‰8M¿7ÀÍ“8M¿7MP7‰6J¸æA3¸Ôîî·È‹¸:I[¸ÞAG¸Ôîî·Xþ!·OWo¸È‹¸È‹¸OWo¸ˆ[ ¸ó>Ç·Ôîî·/¬Ÿ·J¸äŸ¸OWo¸J¸ÞAG¸mÒ•¸È‹¸­´¸ù©¸ÞAG¸ÞAG¸ÞAG¸æA3¸¤Àì´Xþ!·|#¨¶‰6—>C8MP7‰6M¿7MP7{÷æ71@/8,J8—>C8¡ ²8ÀÍ“8OQk8ad8†DW8OQk8†DW8ad8gó§81@/8†DW8gó§8{XÐ8ŽÚø89–ä8~vÚ8~º9~º9F<Æ8˜·î8~vÚ8˜·î8¡ ²8ÀÍ“8†DW81@/81@/8fß8ÀÍ“8—>C81@/8ÓÀ—7M¿7M¿7Xþ!·Xþ!·Ôîî·ó>Ç·/¬Ÿ·Xþ!·F{p·F{p·Ôîî·¤Àì´¤Àì´¤Àì´¤Àì´MP7ÓÀ—7/¬Ÿ·}µ`7{÷æ7{÷æ7}µ`7Xþ!·¤Àì´MP7,J8‘]81@/8,J8—>C8{÷æ7‰6MP7M¿7OQk8M¿7‘]81@/8{÷æ7MP7M¿7ÀÍ“8,J8OQk8†DW8ÀÍ“8gó§8†DW8ÀÍ“8~vÚ8F<Æ8{XÐ8F<Æ8õ!¼8gó§8¡ ²8ÀÍ“8gó§8F<Æ8õ!¼8gó§8˜·î8{XÐ8¡ ²8„9z’9&¦ 9~º9~Ï9^û9~º95%9å9å9~Ï9~º9ŽÚø8z’9z’9ŽÚø8ŽÚø8 )*9„9å9^û9å9~º9z’9˜·î8˜·î8ŽÚø8„9~vÚ8˜·î8¡ ²8gó§8ŽÚø8õ!¼8˜·î8F<Æ8OQk8fß8†DW8‘]8‘]81@/8—>C8OQk8{÷æ7‰6{÷æ7M¿7,J8‰6{÷æ71@/8,J8}µ`7|#¨¶ÓÀ—7MP7F{p·Ôîî·Xþ!·MP7|#¨¶MP7ÓÀ—7‰6}µ`7|#¨¶|#¨¶‰6‰6‘]8,J8M¿7†DW8‘]8ad8OQk81@/8gó§8ad8fß8gó§81@/8†DW8‘]8ÓÀ—7M¿7M¿7ÓÀ—71@/8—>C8†DW8OQk8ÀÍ“8,J8OQk8ÀÍ“8M¿7}µ`7MP7}µ`7}µ`7|#¨¶MP7‰6MP7|#¨¶MP7M¿7ÓÀ—7{÷æ7MP7‘]8ad8—>C8M¿71@/8ÓÀ—7‰6ÓÀ—7M¿7¤Àì´ˆ[ ¸M¿7}µ`7|#¨¶‰6ó>Ç·MP7‘]8Ôîî·ó>Ç·MP7Ôîî·È‹¸äŸ¸žæ¸ù©¸mÒ•¸äŸ¸È‹¸È‹¸ù©¸ù©¸­´¸ù©¸ù©¸i(¾¸Cȸãú¸žæ¸Ñ¿ð¸ìƒ¹Q¿¹Öª ¹ãú¸Cȸžæ¸äŸ¸:I[¸:I[¸i(¾¸È‹¸i(¾¸i(¾¸­´¸ù©¸Êµ¸ˆ[ ¸æA3¸ˆ[ ¸ÞAG¸ˆ[ ¸ó>Ç·æA3¸F{p·J¸ˆ[ ¸J¸ˆ[ ¸F{p·|#¨¶Xþ!·¤Àì´OWo¸J¸/¬Ÿ·ó>Ç·Xþ!·‰6|#¨¶,J8‘]8M¿7{÷æ7/¬Ÿ·ˆ[ ¸ó>Ç·ÓÀ—7MP7M¿7¤Àì´Ôîî·}µ`7{÷æ7|#¨¶ÓÀ—7{÷æ7ÓÀ—7}µ`7Ôîî·J¸ó>Ç·F{p·È‹¸:I[¸ó>Ç·ˆ[ ¸Ôîî·ó>Ç·Ôîî·ÞAG¸ˆ[ ¸OWo¸Êµ¸OWo¸È‹¸OWo¸J¸È‹¸äŸ¸Êµ¸:I[¸ù©¸ÞAG¸Ôîî·J¸OWo¸äŸ¸ˆ[ ¸ˆ[ ¸OWo¸/¬Ÿ·Ôîî·ˆ[ ¸J¸ÞAG¸Ôîî·ˆ[ ¸ÞAG¸ˆ[ ¸Ôîî·Ôîî·Ôîî·/¬Ÿ·ˆ[ ¸ÞAG¸J¸ÞAG¸ÞAG¸ÞAG¸ÞAG¸ˆ[ ¸æA3¸æA3¸:I[¸Ôîî·J¸J¸/¬Ÿ·ó>Ç·ˆ[ ¸Ôîî·/¬Ÿ·F{p·|#¨¶Xþ!·Xþ!·Xþ!·M¿7ÓÀ—7{÷æ7‰6,J8—>C8{÷æ7‰6{÷æ71@/81@/8,J8{÷æ7,J81@/8‘]8|#¨¶Xþ!·¤Àì´|#¨¶J¸/¬Ÿ·/¬Ÿ·ó>Ç·¤Àì´æA3¸ˆ[ ¸F{p·OWo¸OWo¸ù©¸i(¾¸ ~ܸ֪ ¹/+¹4ê¹ìƒ¹ìƒ¹rÔ¹ãú¸rÔ¹Q¿¹4ê¹Q¿¹$G0¹4ê¹êx:¹Ã_5¹“’?¹½¬D¹âN¹½¬D¹êx:¹½¬D¹½¬D¹½¬D¹ Y¹þS¹þS¹º¬r¹ Y¹Â¹º¬r¹º¬r¹º¬r¹ $†¹Â¹š”ƒ¹˜6^¹Â¹3ê|¹˜6^¹š”ƒ¹qˆ•¹Ô´ˆ¹3ê|¹º¬r¹‚Sc¹âN¹˜6^¹3ê|¹º¬r¹”Žm¹þS¹êx:¹˜6^¹âN¹ Y¹ Y¹ Y¹ Y¹/+¹’!¹—¹—¹ãú¸rÔ¹Öª ¹Q¿¹ìƒ¹ìƒ¹4ê¹Ñ¿ð¸žæ¸­´¸Êµ¸­´¸Cȸ±_Ò¸±_Ò¸i(¾¸±_Ҹ샹ãú¸i(¾¸ ~ܸ—¹Öª ¹Q¿¹Ñ¿ð¸Öª ¹—¹Q¿¹Ã_5¹/+¹’!¹Ã_5¹Ã_5¹/+¹êx:¹†&¹$G0¹“’?¹þS¹½¬D¹þS¹âN¹Öph¹DËw¹Öph¹Öph¹˜6^¹”Žm¹º¬r¹ Y¹þS¹âN¹˜6^¹âN¹êx:¹$G0¹rÔ¹Q¿¹ìƒ¹ ~ܸQ¿¹i(¾¸žæ¸±_Ò¸žæ¸ìƒ¹±_Ò¸i(¾¸­´¸±_Ò¸ ~ܸ±_Ò¸žæ¸ìƒ¹ãú¸—¹Öª ¹ ~ܸCȸ䟸±_Ò¸mÒ•¸i(¾¸­´¸äŸ¸mÒ•¸ù©¸äŸ¸È‹¸äŸ¸ù©¸ÞAG¸ÞAG¸äŸ¸È‹¸È‹¸:I[¸ù©¸È‹¸F{p·Xþ!·F{p·MP7,J8{÷æ7,J8,J8‘]8{÷æ71@/81@/8—>C8{÷æ7‰6|#¨¶/¬Ÿ·/¬Ÿ·M¿7‰6F{p·/¬Ÿ·ˆ[ ¸F{p·‰6F{p·/¬Ÿ·J¸ÞAG¸Êµ¸:I[¸æA3¸È‹¸J¸Ôîî·æA3¸ÞAG¸æA3¸ÞAG¸äŸ¸äŸ¸mÒ•¸Êµ¸OWo¸ÞAG¸È‹¸ˆ[ ¸:I[¸È‹¸J¸æA3¸È‹¸ù©¸­´¸­´¸mÒ•¸ù©¸È‹¸äŸ¸mÒ•¸È‹¸È‹¸ó>Ç·ó>Ç·J¸È‹¸Êµ¸Ôîî·ó>Ç·|#¨¶ˆ[ ¸ˆ[ ¸M¿7¤Àì´{÷æ7,J8‘]8OQk8 ¾‰8ÓÀ—7{÷æ7‘]8†DW8{÷æ7ÓÀ—7{÷æ7MP7‘]8,J8M¿7ÓÀ—7MP7}µ`7{÷æ71@/8gó§8fß8 ¾‰8—>C8 ¾‰8ÀÍ“81@/8—>C8¡ ²8 ¾‰8gó§8fß8OQk8gó§8ad8fß8ad8,J8OQk8†DW8OQk8 ¾‰8OQk8ad8‘]8—>C8‘]8—>C8†DW8 ¾‰8†DW8†DW8†DW8Xþ!·{÷æ7MP7ÓÀ—7/¬Ÿ·F{p·/¬Ÿ·F{p·/¬Ÿ·/¬Ÿ·ÞAG¸ó>Ç·æA3¸Ôîî·F{p·ÞAG¸:I[¸ˆ[ ¸ó>Ç·Ôîî·/¬Ÿ·:I[¸È‹¸ÞAG¸æA3¸/¬Ÿ·‘]8MP7}µ`7{÷æ7‘]8MP7}µ`7,J8ÓÀ—7‘]81@/8{÷æ7¤Àì´{÷æ7}µ`7}µ`7|#¨¶}µ`7ÓÀ—7Xþ!·ÓÀ—7,J8—>C8M¿7M¿7{÷æ7M¿7 ¾‰8‘]8ad89–ä8~º9gó§8gó§8ÀÍ“8{XÐ8†DW8 ¾‰8gó§8 ¾‰8ÀÍ“8{÷æ7M¿71@/8¤Àì´{÷æ7,J8—>C8†DW8ÀÍ“8 ¾‰8fß8gó§8gó§8—>C8gó§8 ¾‰8ad8†DW8¡ ²8,J8}µ`7,J8‘]8|#¨¶‰6}µ`7/¬Ÿ·¤Àì´ˆ[ ¸Ôîî·ÞAG¸mÒ•¸æA3¸È‹¸È‹¸mÒ•¸±_Ò¸ ~ܸѿð¸i(¾¸­´¸Q¿¹4ê¹ìƒ¹4ê¹’!¹Öª ¹Q¿¹—¹žæ¸­´¸­´¸±_Ò¸i(¾¸ ~ܸCȸ—¹±_Ò¸Cȸi(¾¸ù©¸È‹¸È‹¸:I[¸mÒ•¸ÞAG¸­´¸mÒ•¸:I[¸:I[¸J¸ˆ[ ¸ˆ[ ¸äŸ¸­´¸OWo¸i(¾¸:I[¸ÞAG¸Ôîî·Êµ¸æA3¸/¬Ÿ·ó>Ç·OWo¸J¸ó>Ç·|#¨¶‰6ó>Ç·MP7{÷æ7‰6{÷æ7MP7|#¨¶‰6Xþ!·¤Àì´MP7{÷æ7‘]8MP7M¿7M¿7ÓÀ—7M¿7†DW8M¿7—>C8OQk8M¿7,J8M¿7MP7MP7M¿7MP7MP7|#¨¶MP7/¬Ÿ·F{p·Xþ!·mÒ•¸ˆ[ ¸æA3¸ˆ[ ¸Xþ!·Ôîî·J¸OWo¸È‹¸mÒ•¸­´¸ù©¸OWo¸:I[¸i(¾¸ù©¸È‹¸mÒ•¸ù©¸ù©¸Cȸ ~ܸ ~ܸ ~ܸmÒ•¸mÒ•¸:I[¸Êµ¸Êµ¸:I[¸ˆ[ ¸È‹¸:I[¸æA3¸OWo¸OWo¸ÞAG¸:I[¸æA3¸ÞAG¸¤Àì´/¬Ÿ·M¿7‰6Xþ!·F{p·|#¨¶MP7‰6ÓÀ—7}µ`7M¿7†DW8‘]8ÓÀ—7 ¾‰8ÀÍ“8†DW8fß8ÀÍ“8gó§8OQk8¡ ²8ad8õ!¼8¡ ²8~vÚ8z’9~vÚ8z’9~º9{XÐ8gó§8¡ ²8fß8F<Æ8¡ ²8F<Æ8 ¾‰8gó§8,J8gó§8fß8fß8ad8õ!¼8OQk8¡ ²8ÀÍ“8ÀÍ“8~vÚ8ÀÍ“8 ¾‰8†DW8—>C8—>C8M¿7‘]8}µ`71@/8M¿7{÷æ7M¿7MP7MP7‰6/¬Ÿ·ˆ[ ¸/¬Ÿ·|#¨¶Xþ!·MP7‘]8ÓÀ—7‰6‰6}µ`7MP7Xþ!·Xþ!·F{p·¤Àì´MP7F{p·/¬Ÿ·Xþ!·}µ`7,J8M¿7{÷æ7MP7,J8{÷æ7ad81@/81@/81@/8OQk8†DW8,J81@/8†DW8 ¾‰8—>C8ÀÍ“8F<Æ8fß8gó§8¡ ²8¡ ²8gó§8fß8F<Æ8¡ ²8~vÚ8~vÚ8~vÚ8„9{XÐ8&¦ 9~º9~Ï9^û9~Ï9&¦ 99–ä8z’9„9å9~vÚ8˜·î89–ä8„9õ!¼8{XÐ8 ¾‰8†DW8gó§8ÀÍ“8gó§8ad8ÀÍ“8 ¾‰8gó§8fß8 ¾‰8 ¾‰8 ¾‰8ÀÍ“8OQk81@/8 ¾‰8 ¾‰81@/8†DW8,J8†DW8 ¾‰8 ¾‰8gó§8—>C8†DW8 ¾‰8†DW8OQk8¡ ²8F<Æ8„9~vÚ89–ä89–ä8F<Æ8gó§89–ä8ÀÍ“8¡ ²8˜·î8õ!¼8¡ ²8F<Æ8gó§8F<Æ8&¦ 9„9˜·î8z’9z’9z’9~vÚ8å9å9^û9&¦ 9 )*9z’9~º9ŽÚø8 )*9&¦ 9UÁH9^û9 )*9^û9~Ï9*s99 )*9Z49™A/9 )*9^û9~Ï9™A/9ɦC9Ajg9Mb9ÍX9ɦC9^û9^û9å9~º9&¦ 9ŽÚø8&¦ 9&¦ 9gó§8˜·î8{XÐ8F<Æ8{XÐ8F<Æ8gó§8F<Æ8õ!¼8~vÚ8ad8—>C8 ¾‰8ad8,J8,J8{÷æ7{÷æ7,J8F{p·ó>Ç·}µ`7MP7Xþ!·Xþ!·MP7|#¨¶J¸/¬Ÿ·ˆ[ ¸J¸Ôîî·:I[¸|#¨¶/¬Ÿ·OWo¸ÞAG¸ÞAG¸Ôîî·Ôîî·ó>Ç·F{p·/¬Ÿ·}µ`7¤Àì´|#¨¶¤Àì´/¬Ÿ·|#¨¶|#¨¶MP7M¿7‘]8MP7,J8M¿7{÷æ7—>C8,J81@/8 ¾‰8—>C8gó§8gó§8F<Æ8˜·î8{XÐ8{XÐ8{XÐ8{XÐ89–ä8 )*9ŽÚø8~Ï9 )*9å9&¦ 9™A/9*s99™A/9*s99UÁH9ɦC9UÁH9*s99\ÜM9ɦC9\ÜM9UÁH9ɦC9Ú÷R9¹Œ>9Ú÷R9™A/9å9\ÜM9™A/9~Ï9&¦ 9&¦ 9&¦ 9ŽÚø8„9ŽÚø8¡ ²8¡ ²8F<Æ8fß8fß8ÀÍ“8†DW8ÀÍ“81@/81@/81@/8M¿7Xþ!·1@/8M¿7‰6{÷æ7,J8}µ`7ÓÀ—7ÓÀ—7,J8,J8¤Àì´‰6M¿7‘]8,J8,J8M¿7,J8,J8{÷æ7ÓÀ—71@/8†DW8,J8OQk8OQk8†DW8 ¾‰8gó§8˜·î8õ!¼8~vÚ8ŽÚø8z’9~Ï9~º9™A/9Z49ɦC9ÍX9Ú÷R9UÁH9\ÜM9Ú÷R9\ÜM9ɦC95%9*s99UÁH9ÍX9ÍX9UÁH9ÍX9ê‡l9UÁH9Mb900]9Z49ɦC9™A/9~Ï9^û9å9 )*9™A/9~º9„99–ä8z’9˜·î8F<Æ8õ!¼8¡ ²8gó§8ÀÍ“8OQk8†DW8F<Æ8gó§8¡ ²8{XÐ8{XÐ8~vÚ8fß8†DW8—>C8OQk8ÀÍ“8OQk8OQk8ad8—>C8M¿7,J8M¿7M¿7—>C8ÓÀ—7,J8†DW8{÷æ7†DW81@/8†DW8 ¾‰8 ¾‰8F<Æ8ad8 ¾‰8gó§8ad8 ¾‰8gó§8fß8gó§8 ¾‰8õ!¼8fß8fß8¡ ²8{XÐ8fß8¡ ²8{XÐ8{XÐ8{XÐ8F<Æ8F<Æ89–ä89–ä8˜·î89–ä8~vÚ8õ!¼8~º99–ä8ŽÚø8ŽÚø89–ä8ŽÚø8~Ï9z’9&¦ 9^û9å9„9å9˜·î8~vÚ8å9ŽÚø8ŽÚø8˜·î8˜·î8&¦ 9~º9~º9z’9˜·î8˜·î8{XÐ8˜·î8F<Æ8{XÐ8¡ ²8õ!¼8{XÐ8 ¾‰8õ!¼8F<Æ81@/8‘]8{÷æ7}µ`7{÷æ7MP7¤Àì´MP7}µ`7ÓÀ—7MP7MP7|#¨¶/¬Ÿ·ó>Ç·ó>Ç·ˆ[ ¸ÞAG¸ˆ[ ¸Ôîî·ÞAG¸ˆ[ ¸/¬Ÿ·ÞAG¸Ôîî·|#¨¶Xþ!·/¬Ÿ·Ôîî·Ôîî·}µ`7ó>Ç·Xþ!·¤Àì´æA3¸:I[¸/¬Ÿ·ÞAG¸È‹¸ÞAG¸F{p·}µ`7|#¨¶‰6}µ`7}µ`7}µ`71@/8M¿7,J8,J8†DW8—>C8OQk8 ¾‰8gó§8ÀÍ“8,J8OQk8gó§8fß8gó§8gó§8 ¾‰8¡ ²8gó§8ÀÍ“8,J8‰6{÷æ7—>C8‘]8fß8ÀÍ“8~vÚ8F<Æ8gó§8gó§8—>C8ÀÍ“8õ!¼8 ¾‰8ad8õ!¼8 ¾‰8ad8,J8{÷æ71@/8fß8ÀÍ“8†DW8—>C81@/8—>C81@/81@/8†DW81@/8ÓÀ—7{÷æ7,J8‘]8ÓÀ—7—>C8F{p·ó>Ç·ó>Ç·Xþ!·Xþ!·‰6Ôîî·Xþ!·¤Àì´æA3¸Xþ!·F{p·ó>Ç·ó>Ç·ó>Ç·ó>Ç·¤Àì´ÓÀ—7F{p·}µ`7MP7F{p·¤Àì´ó>Ç·|#¨¶J¸æA3¸:I[¸J¸:I[¸È‹¸ÞAG¸ˆ[ ¸æA3¸J¸ó>Ç·ó>Ç·ó>Ç·ó>Ç·F{p·‰6}µ`7/¬Ÿ·|#¨¶}µ`7{÷æ71@/8‰6ÓÀ—7{÷æ71@/8—>C8fß8gó§8ÀÍ“8OQk8ÀÍ“8 ¾‰81@/8,J81@/8M¿7†DW8{÷æ7,J8ÓÀ—7†DW8,J8—>C8{÷æ7‘]8{÷æ7Xþ!·Ôîî·F{p·/¬Ÿ·ˆ[ ¸Ôîî·|#¨¶ó>Ç·J¸äŸ¸È‹¸ÞAG¸È‹¸æA3¸äŸ¸i(¾¸­´¸ù©¸i(¾¸Cȸѿð¸ìƒ¹ìƒ¹žæ¸—¹/+¹†&¹þS¹bÇI¹$G0¹êx:¹½¬D¹†&¹Q¿¹Ñ¿ð¸4깆&¹4깞æ¸Ñ¿ð¸—¹rÔ¹/+¹ãú¸žæ¸ãú¸Öª ¹4ê¹—¹ìƒ¹žæ¸ ~ܸ ~ܸÈ‹¸OWo¸:I[¸È‹¸ù©¸­´¸­´¸:I[¸äŸ¸ÞAG¸ˆ[ ¸­´¸È‹¸Êµ¸:I[¸Ôîî·F{p·ó>Ç·ÞAG¸:I[¸J¸Ôîî·F{p·F{p·MP7F{p·MP7Xþ!·F{p·|#¨¶¤Àì´}µ`7}µ`7|#¨¶ó>Ç·ó>Ç·/¬Ÿ·‰6æA3¸Ôîî·/¬Ÿ·ó>Ç·‰6F{p·F{p·ÞAG¸æA3¸Ôîî·J¸ˆ[ ¸:I[¸/¬Ÿ·J¸OWo¸J¸È‹¸ˆ[ ¸Ôîî·J¸ÞAG¸ˆ[ ¸ÞAG¸OWo¸­´¸OWo¸mÒ•¸OWo¸ù©¸±_Ҹȋ¸±_Ò¸žæ¸ãú¸ ~ܸãú¸žæ¸mÒ•¸Q¿¹žæ¸Ñ¿ð¸ãú¸žæ¸ãú¸ãú¸ìƒ¹ìƒ¹Ñ¿ð¸ ~ܸ ~ܸ ~ܸCȸmÒ•¸±_Ò¸OWo¸Êµ¸ÞAG¸ÞAG¸È‹¸äŸ¸ÞAG¸Ôîî·J¸mÒ•¸­´¸J¸È‹¸mÒ•¸äŸ¸J¸/¬Ÿ·‰6|#¨¶Ôîî·‰6F{p·|#¨¶¤Àì´F{p·ˆ[ ¸:I[¸OWo¸F{p·Xþ!·¤Àì´F{p·ÓÀ—7,J8M¿7}µ`7—>C8MP7,J8M¿7}µ`7,J8|#¨¶}µ`7}µ`7}µ`7{÷æ7M¿71@/8F{p·ÓÀ—7ÓÀ—7Ôîî·F{p·/¬Ÿ·¤Àì´Ôîî·OWo¸Ôîî·æA3¸/¬Ÿ·Xþ!·F{p·ó>Ç·ÞAG¸Êµ¸:I[¸È‹¸J¸È‹¸OWo¸:I[¸J¸J¸æA3¸ˆ[ ¸È‹¸ó>Ç·ÞAG¸È‹¸OWo¸ˆ[ ¸æA3¸mÒ•¸äŸ¸ÞAG¸ˆ[ ¸ÞAG¸ˆ[ ¸È‹¸OWo¸:I[¸È‹¸:I[¸J¸F{p·|#¨¶ó>Ç·F{p·{÷æ71@/8/¬Ÿ·M¿7‘]8MP7‘]81@/8—>C8‘]8M¿7‘]8M¿7ÓÀ—7,J8ÀÍ“8ad8 ¾‰8¡ ²8gó§8 ¾‰8F<Æ8gó§8gó§8¡ ²8F<Æ8¡ ²8{XÐ8{XÐ8ŽÚø8F<Æ8ŽÚø8fß8†DW89–ä8õ!¼8ÀÍ“8F<Æ8ÀÍ“8¡ ²8fß8OQk8†DW8†DW8 ¾‰8†DW81@/8ad8OQk8fß8ad8ad8—>C8OQk8ad8OQk8†DW8fß8ÀÍ“8ÀÍ“8ad8ÀÍ“8‘]8ÀÍ“8,J8†DW8OQk8gó§8—>C8{÷æ7,J8—>C8ÓÀ—7MP7‘]8¤Àì´ÓÀ—7{÷æ7¤Àì´/¬Ÿ·ÓÀ—7M¿7}µ`7‘]8,J8†DW8—>C8‘]8¤Àì´{÷æ71@/8,J8†DW8 ¾‰8fß8 ¾‰8†DW8gó§8¡ ²8õ!¼8õ!¼8~vÚ8ÀÍ“8~vÚ8˜·î8&¦ 9&¦ 9~º9å9ɦC9^û9™A/9~º9å9~Ï9~Ï9å9 )*9&¦ 9~Ï9^û9&¦ 9~Ï9~Ï9z’9˜·î8~vÚ8¡ ²8¡ ²8ÀÍ“8õ!¼8gó§8ad8õ!¼8õ!¼8†DW8M¿71@/8,J8M¿7‘]81@/81@/8¤Àì´‘]8}µ`7}µ`7‰6¤Àì´{÷æ7Xþ!·Xþ!·‰6F{p·MP7F{p·|#¨¶‰6‰6MP7ÓÀ—7ÓÀ—7†DW8OQk81@/8OQk8M¿7—>C8 ¾‰8 ¾‰8 ¾‰8gó§8ÀÍ“8F<Æ8¡ ²8{XÐ8~vÚ89–ä8„9˜·î8~vÚ8z’9ÀÍ“8õ!¼8z’99–ä8F<Æ8¡ ²8~vÚ8{XÐ8{XÐ8~vÚ8˜·î8„9F<Æ8fß8fß8¡ ²89–ä8õ!¼89–ä8{XÐ8&¦ 9ŽÚø8„9å9*s995%9ɦC95%9å9å95%9^û95%9å9*s99 )*9^û9ɦC9ɦC9Z49™A/9å9å9å9å9&¦ 9˜·î8˜·î8{XÐ8¡ ²8¡ ²8,J81@/8M¿7|#¨¶F{p·MP7—>C8ÓÀ—7{÷æ7ÓÀ—7MP7F{p·Êµ¸:I[¸OWo¸mÒ•¸ù©¸È‹¸J¸È‹¸äŸ¸i(¾¸mÒ•¸ÞAG¸­´¸OWo¸È‹¸Êµ¸OWo¸J¸J¸È‹¸:I[¸i(¾¸OWo¸J¸æA3¸ÞAG¸Ôîî·:I[¸æA3¸È‹¸­´¸È‹¸OWo¸ˆ[ ¸:I[¸žæ¸:I[¸:I[¸äŸ¸OWo¸Ôîî·Ôîî·Ôîî·Ôîî·ó>Ç·ÞAG¸ÞAG¸{÷æ7|#¨¶}µ`7Xþ!·}µ`7‘]8{÷æ7—>C8}µ`7‘]8—>C8†DW8 ¾‰8ÀÍ“8ÀÍ“8õ!¼8{XÐ8õ!¼8ÀÍ“8OQk8ad8F<Æ89–ä8F<Æ8F<Æ8F<Æ8õ!¼8¡ ²8¡ ²81@/8fß8 ¾‰8†DW8M¿71@/8‰6¤Àì´¤Àì´ˆ[ ¸Xþ!·¤Àì´F{p·Ôîî·Ôîî·æA3¸Êµ¸­´¸È‹¸äŸ¸­´¸—¹rÔ¹rÔ¹’!¹Öª ¹Q¿¹—¹†&¹ãú¸Öª ¹êx:¹—¹rÔ¹4깞渗¹Cȸi(¾¸Ñ¿ð¸ ~ܸ샹샹 ~ܸ ~ܸi(¾¸ù©¸­´¸mÒ•¸È‹¸È‹¸È‹¸­´¸æA3¸J¸È‹¸OWo¸ó>Ç·È‹¸È‹¸:I[¸F{p·Ôîî·Xþ!·Xþ!·/¬Ÿ·/¬Ÿ·Ôîî·|#¨¶ÓÀ—7¤Àì´¤Àì´/¬Ÿ·F{p·ÓÀ—7¤Àì´ó>Ç·‰6MP7MP7ÓÀ—7M¿7ÓÀ—7}µ`7¤Àì´/¬Ÿ·|#¨¶‰6ó>Ç·æA3¸¤Àì´Xþ!·Ôîî·Xþ!·Ôîî·Ôîî·æA3¸Ôîî·:I[¸:I[¸OWo¸ÞAG¸äŸ¸i(¾¸OWo¸ù©¸äŸ¸äŸ¸CȸCȸ—¹—¹—¹žæ¸žæ¸i(¾¸žæ¸ãú¸ù©¸Cȸ ~ܸѿð¸ãú¸—¹†&¹/+¹4ê¹—¹rÔ¹’!¹Öª ¹†&¹Ñ¿ð¸Ñ¿ð¸ìƒ¹žæ¸ìƒ¹Ñ¿ð¸CȸCȸ֪ ¹ìƒ¹—¹Öª ¹ ~ܸѿð¸Ñ¿ð¸žæ¸ ~ܸžæ¸Öª ¹ ~ܸ±_Ò¸ãú¸Ñ¿ð¸Ñ¿ð¸rÔ¹’!¹’!¹ ~ܸCȸ䟸È‹¸æA3¸mÒ•¸OWo¸ÞAG¸æA3¸:I[¸|#¨¶F{p·ÞAG¸È‹¸È‹¸:I[¸ù©¸ˆ[ ¸:I[¸OWo¸J¸OWo¸:I[¸æA3¸:I[¸ˆ[ ¸æA3¸äŸ¸J¸ÞAG¸mÒ•¸ÞAG¸­´¸i(¾¸Cȸ ~ܸ샹샹rÔ¹rԹѿð¸Öª ¹/+¹’!¹/+¹$G0¹êx:¹$G0¹‚Sc¹bÇI¹½¬D¹þS¹½¬D¹˜6^¹Öph¹þS¹‚Sc¹½¬D¹Öph¹DËw¹þS¹š”ƒ¹Â¹”Žm¹DËw¹º¬r¹º¬r¹3ê|¹ $†¹3ê|¹‚Sc¹˜6^¹Öph¹‚Sc¹‚Sc¹bÇI¹bÇI¹½¬D¹êx:¹†&¹†&¹rԹѿð¸Ñ¿ð¸i(¾¸­´¸ÞAG¸È‹¸OWo¸:I[¸È‹¸äŸ¸OWo¸ÞAG¸i(¾¸OWo¸ÞAG¸ÞAG¸/¬Ÿ·J¸ˆ[ ¸F{p·MP7{÷æ7ó>Ç·ó>Ç·MP7MP7{÷æ7}µ`7‘]8†DW8—>C8M¿7}µ`7¤Àì´¤Àì´F{p·‰6Xþ!·Ôîî·F{p·Xþ!·ó>Ç·|#¨¶Ôîî·Ôîî·OWo¸æA3¸ÞAG¸Ôîî·:I[¸:I[¸Êµ¸Cȸù©¸Cȸi(¾¸­´¸žæ¸Ñ¿ð¸Cȸ֪ ¹Ñ¿ð¸†&¹†&¹Q¿¹4ê¹$G0¹$G0¹rÔ¹Ã_5¹ Y¹˜6^¹bÇI¹½¬D¹êx:¹êx:¹/+¹Öª ¹Q¿¹$G0¹4ê¹$G0¹˜6^¹/+¹rÔ¹ãú¸ìƒ¹’!¹rÔ¹ãú¸Ñ¿ð¸Cȸ±_Ҹ䟸:I[¸È‹¸ÞAG¸:I[¸Ôîî·ÞAG¸ÞAG¸Ôîî·‰6MP7‰6M¿7{÷æ7M¿7†DW8gó§8ad8 ¾‰8õ!¼8¡ ²8gó§8ÀÍ“8gó§8OQk8OQk8,J8{÷æ7OQk8,J8OQk8ÀÍ“8—>C8—>C8 ¾‰8ad8—>C8†DW8MP7}µ`7}µ`7}µ`7‰6‰6‰6}µ`7MP7}µ`7¤Àì´F{p·MP7J¸Ôîî·ó>Ç·|#¨¶Ôîî·/¬Ÿ·Ôîî·mÒ•¸ù©¸È‹¸äŸ¸OWo¸È‹¸:I[¸i(¾¸mÒ•¸mÒ•¸:I[¸:I[¸äŸ¸i(¾¸äŸ¸Cȸ샹샹’!¹ìƒ¹žæ¸—¹Q¿¹rÔ¹rÔ¹4ê¹bÇI¹Ã_5¹—¹ãú¸4ê¹’!¹—¹$G0¹Öª ¹Ñ¿ð¸Ñ¿ð¸Cȸ­´¸Öª ¹rÔ¹Öª ¹ãú¸’!¹ãú¸4ê¹ìƒ¹ìƒ¹±_Ò¸ãú¸$G0¹’!¹Ñ¿ð¸—¹žæ¸žæ¸ìƒ¹—¹†&¹Ñ¿ð¸CȸÈ‹¸±_Ò¸ ~ܸžæ¸Ñ¿ð¸Cȸ ~ܸi(¾¸äŸ¸æA3¸È‹¸mÒ•¸ÞAG¸ó>Ç·æA3¸OWo¸äŸ¸æA3¸äŸ¸±_Ò¸i(¾¸ù©¸ìƒ¹ãú¸ ~ܸQ¿¹—¹žæ¸Q¿¹Q¿¹—¹Q¿¹Q¿¹Q¿¹’!¹/+¹$G0¹þS¹rÔ¹Ã_5¹4ê¹êx:¹Ã_5¹4ê¹rÔ¹êx:¹êx:¹bÇI¹/+¹bÇI¹$G0¹½¬D¹$G0¹/+¹$G0¹/+¹rÔ¹rÔ¹—¹rÔ¹’!¹/+¹4ê¹Öª ¹—¹ìƒ¹Öª ¹ìƒ¹Öª ¹žæ¸ ~ܸ ~ܸãú¸­´¸È‹¸È‹¸ˆ[ ¸ÞAG¸J¸¤Àì´F{p·¤Àì´J¸Xþ!·‰6‰6Xþ!·‰61@/8‰6|#¨¶}µ`7MP7|#¨¶|#¨¶M¿7|Pd|1|24600|2013-282T15:32:05.397 Öå9û95Ñ 9Öå99û9Û.ý8Û.ý8Ê80éè8¿ÈÞ8þ©Ô8® Ž8“,¢8ÞqÀ8ÞqÀ8þ©Ô8üƒ8ÞqÀ8ÞqÀ8“,¢8üƒ8® Ž8üƒ8ç˜8“,¢8ÊK8ÞqÀ8®X¶8ÞqÀ8Ê8üƒ8üƒ8üƒ80éè8? ó8¿ÈÞ8¿ÈÞ8?½9?½9? ó89˜>'95Ñ 9Öå9‚'"94‡69@V,9?º@9FïJ9?º@94‡69æ^_9?º@9SBZ9/&U9@V,9ç{d9/&U9ç{d9T™i9 ~99™9 ~9ôx9ØÙ‹99™9ç{d9,¹†99™9)„9!Œ“99–9ojŽ9ØÙ‹9ØÙ‹93û9lI‰9!Œ“9lI‰9 ~9ôx9 ~9,¹†9ç{d9/&U9æ^_9 ~9ôx9æ^_9æ^_9æ^_9?º@9?º@9?º@9@V,9x ;9SBZ9SBZ9/&U9€ +P9€ +P9?º@9@V,9@V,94‡69un19û9x ;9‚'"9û9‚'"9Öå9û©9û©9Öå9x ;9@V,9@V,94‡69un19un19û94‡69˜>'9@V,9x ;9˜>'9Öå9‚'"9û9?½9?½9@V,9x ;94‡69un19un19?º@9˜>'99?º@9FïJ9…ÔE9FïJ9un19æ^_9…ÔE9x ;9/&U9/&U9fÕs9)·n9 ~9fÕs9lI‰9ojŽ9)„93û9ØÙ‹9,¹†9lI‰9,¹†9)·n9ojŽ99™9ôx9ØÙ‹93û9lI‰99–9ojŽ9ôx9lI‰9ôx9SBZ9 ~9æ^_9T™i9æ^_9)·n9SBZ9)·n9/&U9)·n9fÕs9/&U9T™i9€ +P9æ^_9æ^_99™9ôx9)„9T™i9ç{d9ç{d9FïJ9æ^_9…ÔE9ç{d9æ^_9 ~99™9ç{d9…ÔE9?º@9€ +P9)„9 ~9æ^_9 ~9)·n9SBZ9ç{d9æ^_9€ +P9FïJ9€ +P9?º@9?º@9…ÔE9€ +P9/&U9/&U9€ +P9?º@9x ;9/&U9€ +P9€ +P94‡69@V,9˜>'9€ +P9ôx9 ~9ôx9ôx9)·n9ç{d9fÕs9)„9 ~9ôx9)·n9T™i9fÕs9)·n9ôx9fÕs9€ +P9fÕs9)„99™99™9 ~9lI‰93û9ØÙ‹99™9ØÙ‹9ØÙ‹93û9z®˜9lI‰9lI‰93û9!Œ“99–9ojŽ99–9lI‰9 ~9ôx9 ~9ç{d9)„9T™i9)·n9)·n9)„9lI‰9SBZ9)·n9fÕs9æ^_9ôx9)·n99™9SBZ9…ÔE9T™i9fÕs9FïJ9æ^_9?º@9?º@9@V,95Ñ 9? ó80éè8þ©Ô89Û.ý8‹A¬8¿ÈÞ8û©9û©9®X¶8¿ÈÞ8®X¶8ÞqÀ8®X¶8Öå9Û.ý8Ê8¿ÈÞ8þ©Ô8‹A¬8? ó8û©9? ó85Ñ 95Ñ 9@V,94‡69x ;994‡69€ +P9?º@9@V,9û9un199x ;9FïJ9˜>'9Öå9un19x ;9‚'"9FïJ9…ÔE9…ÔE9…ÔE9T™i9…ÔE9‚'"94‡69un19@V,9?º@9x ;9un19?º@9˜>'9˜>'9˜>'9˜>'9x ;9un19‚'"95Ñ 95Ñ 999û©9¿ÈÞ8þ©Ô8Û.ý8ÞqÀ8üƒ8ç˜8‹âs8äÝ8Ó_8‹âs8äÝ8äÝ8잨7üƒ8^'7V¶·ìž¨7éIË6'úÝ·V¶·V¶·…º*¸^Øz¸ª.Ä5ª.Ä5|ëN·¥ÑŽ··>¸·>¸·>¸d»R¸ª£··>¸;ܸ‡Æ¸ÓÀ¯¸œ—›¸°Ø¹¸…†‘¸«¥¸ ”¹ö+ظ× +¹Yθ«¥¸œ—›¸«¥¸«¥¸^Øz¸…º*¸‡Æ¸;ܸâTL¶âTL¶âTL¶ª.Ä5éIË6‹âs8ÊK8Šî÷7‹âs8“,¢8üƒ8üƒ8®X¶8üƒ8_È78Šî÷7¨Î#8ÊK8¨Î#8_È78üƒ8üƒ8“,¢8®X¶8?½9¿ÈÞ8‹A¬8ÞqÀ8‹A¬8ÞqÀ8üƒ8ç˜8üƒ8®X¶8¿ÈÞ8®X¶8‹A¬8üƒ8‹âs8äÝ8‹âs8‹âs8¨Î#8Šî÷7äÝ8^'7äÝ8잨7^'7¹37;ܸ|ëN·âTL¶ª.Ä5잨7éIË6^'7¹37;ܸª£·ª£·|ëN·V¶·…º*¸…º*¸‡Æ¸V¶·|ëN·…º*¸ª£·¹37‡Æ¸¥ÑŽ·|ëN·âTL¶âTL¶d»R¸‡Æ¸…º*¸ûw‡¸¥ÑŽ·¥ÑŽ·‡Æ¸‡Æ¸V¶·¥ÑŽ·…º*¸…º*¸¥ÑŽ·…º*¸âTL¶ª.Ä5¥ÑŽ·ª.Ä5éIË6¥ÑŽ·ª£·^'7Šî÷7잨7éIË6Ì8Ð7¹37^'7잨7ÊK8‹âs8Ó_8ç˜8‹A¬8®X¶8‹A¬8® Ž8_È78üƒ8ÞqÀ8ÞqÀ8Û.ý80éè8Ê8Û.ý8Ê8®X¶8þ©Ô80éè8ÞqÀ8Ê80éè8Ê8® Ž8‹A¬8ÞqÀ8Ê8¿ÈÞ8‹A¬8Ó_8üƒ8® Ž8‹âs8üƒ8¨Î#8® Ž8“,¢8üƒ8üƒ8‹âs8‹A¬8üƒ8¨Î#8_È78‹âs8ÊK8Ì8Ð7ç˜8^'7Ì8Ð7äÝ8^'7âTL¶ª.Ä5잨7âTL¶¹37éIË6|ëN·ª.Ä5¥ÑŽ·;ܸ;ܸ·>¸^Øz¸d»R¸^Øz¸…†‘¸ÓÀ¯¸ûw‡¸Yθ«¥¸«¥¸·>¸…º*¸'úÝ·…º*¸'úÝ·‡Æ¸®Æf¸·>¸…º*¸;ܸ;ܸ‡Æ¸‡Æ¸V¶·…º*¸;ܸª£·ª.Ä5^'7ÊK8잨7äÝ8Šî÷7Ó_8äÝ8Šî÷7잨7äÝ8^'7Šî÷7éIË6|ëN·ìž¨7éIË6âTL¶¹37^'7잨7^'7잨7ª.Ä5ª.Ä5'úÝ·;ܸV¶·¥ÑŽ·ª£·‡Æ¸‡Æ¸V¶·'úÝ·‡Æ¸‡Æ¸…º*¸^Øz¸·>¸«¥¸OKâ¸òøòøÓÀ¯¸«¥¸ö+ظëŽö¸a¾¹}Ô¹ëŽö¸ ”¹ ”¹}Ô¹T.¹¨K8¹ B¹ B¹ã¨¹º23¹2ë#¹e=¹ã¨¹a¾¹{)¹a¾¹× +¹}Ô¹2ë#¹× +¹ëŽö¸Qlì¸ö+ظòø ”¹Yθ«¥¸…†‘¸«¥¸òøö+ظœ—›¸…†‘¸°Ø¹¸°Ø¹¸OKâ¸ÓÀ¯¸^Øz¸®Æf¸…†‘¸…†‘¸ÓÀ¯¸òø^Øz¸œ—›¸°Ø¹¸«¥¸^Øz¸^Øz¸^Øz¸'úÝ·V¶·'úÝ·âTL¶ª.Ä5âTL¶;ܸ|ëN·âTL¶'úÝ·;ܸª£·V¶·¥ÑŽ·'úÝ·|ëN·ª£·V¶··>¸‡Æ¸…º*¸d»R¸…†‘¸d»R¸ûw‡¸°Ø¹¸…†‘¸«¥¸«¥¸«¥¸«¥¸YθQlì¸Qlì¸ëŽö¸‡Y¹ö+ظYθ× +¹Ul¹OKâ¸Ul¹× +¹‡Y¹ö+ظö+ظYθ‡Y¹ ”¹‡Y¹ã¨¹ã¨¹òø‡Y¹T.¹ ”¹a¾¹T.¹}Ô¹º23¹2ë#¹¨K8¹~™G¹º23¹T.¹î\¹§$a¹î\¹~™G¹¤ëV¹ÏAf¹ÌÏQ¹¨K8¹¤ëV¹¨K8¹ B¹{)¹e=¹2ë#¹}Թ㨹}Ô¹T.¹‡Y¹Qlì¸Qlì¸ö+ظö+ظ°Ø¹¸°Ø¹¸Yθòø°Ø¹¸«¥¸òøö+ظYθd»R¸ÓÀ¯¸YθëŽö¸Yθ°Ø¹¸òøòø^Øz¸«¥¸«¥¸ûw‡¸…º*¸…º*¸·>¸…º*¸…º*¸'úÝ·ª£·;ܸ‡Æ¸'úÝ·ª£··>¸;ܸV¶·‡Æ¸;ܸ'úÝ·'úÝ·…º*¸ûw‡¸·>¸«¥¸ûw‡¸…†‘¸ÓÀ¯¸«¥¸œ—›¸OKâ¸ëŽö¸òø°Ø¹¸òøÓÀ¯¸YθëŽö¸OK⸫¥¸°Ø¹¸«¥¸ëŽö¸ö+ظëŽö¸ëŽö¸ëŽö¸Ul¹2ë#¹OK⸇Y¹‡Y¹ëŽö¸OKâ¸òøUl¹Qlì¸Ul¹a¾¹º23¹a¾¹ ”¹º23¹T.¹}Ô¹T.¹T.¹2ë#¹ ”¹}Ô¹a¾¹‡Y¹ëŽö¸OKâ¸a¾¹ã¨¹ö+ظQlì¸ö+ظÓÀ¯¸Ql츅†‘¸ëŽö¸‡Y¹ÓÀ¯¸OKâ¸ûw‡¸ÓÀ¯¸ûw‡¸«¥¸^Øz¸·>¸ª£·|ëN·…º*¸|ëN·V¶·V¶·¥ÑŽ·ª.Ä5ª£·Ì8Ð7|ëN·;ܸV¶·'úÝ·âTL¶‡Æ¸'úÝ·ª£·‡Æ¸‡Æ¸…º*¸·>¸…º*¸d»R¸®Æf¸ûw‡¸…†‘¸ÓÀ¯¸ö+ظOKâ¸^Øz¸°Ø¹¸«¥¸^Øz¸«¥¸®Æf¸°Ø¹¸ÓÀ¯¸ëŽö¸OK⸠”¹Yθ‡Y¹‡Y¹ëŽö¸OKâ¸ëŽö¸òøYθYθÓÀ¯¸òø«¥¸°Ø¹¸òøQl츫¥¸«¥¸ö+ظÓÀ¯¸d»R¸òø«¥¸Yθö+ظ× +¹ ”¹ÓÀ¯¸òøòø‡Æ¸·>¸…º*¸|ëN·ìž¨7¥ÑŽ·V¶·ìž¨7ª.Ä5|ëN·ª£·^'7éIË6¹37Ì8Ð7ª.Ä5âTL¶¥ÑŽ·¹37Šî÷7_È78¨Î#8Šî÷7Ì8Ð7éIË6잨7¹37잨7잨7Šî÷7äÝ8¨Î#8¨Î#8_È78ÊK8ÊK8‹âs8üƒ8¨Î#8_È78ª.Ä5잨7Ì8Ð7Šî÷7Šî÷7^'7¹37|ëN·ª.Ä5Šî÷7äÝ8Ì8Ð7éIË6Ì8Ð7äÝ8ª£·V¶·ª.Ä5'úÝ·…º*¸^Øz¸V¶·;ܸ®Æf¸®Æf¸œ—›¸œ—›¸òøYθö+ظö+ظYθQlì¸× +¹°Ø¹¸YθòøQlì¸òøÓÀ¯¸ëŽö¸OK⸰ع¸OKâ¸ëŽö¸YθQlì¸òøö+ظòøYθö+ظ°Ø¹¸ëŽö¸‡Y¹òø®Æf¸^Øz¸®Æf¸«¥¸œ—›¸œ—›¸d»R¸^Øz¸‡Æ¸®Æf¸·>¸V¶·…º*¸‡Æ¸^Øz¸®Æf¸®Æf¸…º*¸V¶·|ëN·ª£·âTL¶¥ÑŽ·¥ÑŽ·|ëN·|ëN·éIË6âTL¶¥ÑŽ·V¶·ª£·âTL¶ª.Ä5;ܸª£·'úÝ·¥ÑŽ·âTL¶Ì8Ð7ª£·|ëN·¥ÑŽ··>¸…º*¸‡Æ¸®Æf¸·>¸…†‘¸«¥¸‡Æ¸…†‘¸·>¸·>¸^Øz¸·>¸d»R¸«¥¸YθòøòøOK⸰ع¸Ul¹YθQlì¸}Ô¹}Թ㨹㨹T.¹OKâ¸ã¨¹a¾¹a¾¹}Ô¹}Ô¹}Ô¹2ë#¹a¾¹2ë#¹{)¹a¾¹ ”¹ã¨¹2ë#¹× +¹a¾¹Ul¹ëŽö¸2ë#¹ ”¹a¾¹YθOKâ¸Qlì¸Ul¹°Ø¹¸òød»R¸d»R¸…º*¸'úÝ·…º*¸…º*¸…º*¸òød»R¸V¶·'úÝ·V¶·;ܸ|ëN·Ì8Ð7잨7Šî÷7¨Î#8Ì8Ð7äÝ8잨7¹37^'7Šî÷7ª£·¥ÑŽ·ª£·V¶·…†‘¸®Æf¸'úÝ·¥ÑŽ·¹37Šî÷7ÊK8¨Î#8Ó_8잨7ª£··>¸…º*¸d»R¸°Ø¹¸«¥¸òøQlì¸OKâ¸OKâ¸Qlì¸Ul¹‡Y¹«¥¸× +¹ëŽö¸ã¨¹ã¨¹a¾¹ã¨¹Ul¹× +¹ö+ظö+ظYθUl¹ã¨¹OK⸠”¹Ul¹}Ô¹}Թ㨹Ul¹a¾¹}Թ㨹ö+ظ ”¹Ul¹ëŽö¸‡Y¹ ”¹a¾¹Qlì¸ÓÀ¯¸ÓÀ¯¸òøQlì¸OK⸫¥¸d»R¸…†‘¸^Øz¸…º*¸d»R¸…†‘¸ûw‡¸'úÝ·ª£·;ܸ…º*¸…º*¸;ܸª£·ª£·;ܸâTL¶éIË6âTL¶ª£·¹37Ì8Ð7éIË6Šî÷7_È78äÝ8¹37ª.Ä5잨7¨Î#8âTL¶ª£·âTL¶¥ÑŽ·d»R¸‡Æ¸d»R¸|ëN·V¶·‡Æ¸‡Æ¸‡Æ¸'úÝ·d»R¸®Æf¸^Øz¸…º*¸…º*¸…º*¸…†‘¸òø«¥¸«¥¸°Ø¹¸ÓÀ¯¸°Ø¹¸°Ø¹¸…†‘¸^Øz¸;ܸ…º*¸ûw‡¸®Æf¸·>¸^Øz¸…º*¸;ܸ^Øz¸®Æf¸'úÝ·'úÝ·…º*¸d»R¸…º*¸V¶·|ëN·âTL¶…º*¸…º*¸'úÝ·…º*¸…º*¸'úÝ·V¶·ìž¨7Ì8Ð7Ì8Ð7잨7ÊK8_È78‹âs8“,¢8® Ž8ÞqÀ8® Ž8® Ž8þ©Ô8® Ž8®X¶8‹A¬8? ó8? ó8þ©Ô8?½999un19‚'"9?½94‡694‡69?º@9FïJ9/&U9€ +P9€ +P9˜>'9x ;9…ÔE9Öå9Öå9˜>'9Öå99?º@94‡69‚'"95Ñ 9un19?º@9un19û9û9û©95Ñ 9û9@V,99Öå9? ó8Öå9? ó8Ê8? ó8¿ÈÞ8ÞqÀ8‹A¬8ÊK8잨7_È78Ì8Ð7잨7_È78^'7¹37éIË6^'7âTL¶|ëN·éIË6|ëN·ª.Ä5¹37ª.Ä5éIË6ª£·âTL¶;ܸ…º*¸¥ÑŽ·éIË6éIË6|ëN·‡Æ¸'úÝ·ª£·|ëN·^'7ª£·äÝ8éIË6¥ÑŽ·|ëN·éIË6|ëN·^'7¹37ª£·äÝ8Ó_8_È78‹âs8ç˜8üƒ8“,¢8®X¶8Ê8®X¶8üƒ8ç˜8‹A¬8‹âs8ç˜8‹A¬8® Ž8Ê8‹âs8ç˜8‹âs8Ì8Ð7‹âs8Ì8Ð7Ì8Ð7^'7äÝ8Ì8Ð7_È78® Ž8®X¶8üƒ8Ó_8äÝ8‹âs8üƒ8Ó_8ç˜8¨Î#8잨7âTL¶|ëN·^'7'úÝ·…º*¸;ܸ…º*¸|ëN·‡Æ¸^Øz¸®Æf¸d»R¸ÓÀ¯¸ûw‡¸…†‘¸°Ø¹¸ÓÀ¯¸ÓÀ¯¸Qlì¸ ”¹Qlì¸ö+ظ‡Y¹ã¨¹{)¹}Ô¹º23¹T.¹e=¹{)¹i´L¹e=¹{)¹ÌÏQ¹e=¹¨K8¹¤ëV¹~™G¹e=¹ B¹º23¹T.¹¨K8¹~™G¹i´L¹¨K8¹ã¨¹× +¹ã¨¹× +¹ ”¹Qlì¸YθÓÀ¯¸YθUl¹òøòøÓÀ¯¸Yθòøö+ظòø«¥¸œ—›¸«¥¸«¥¸ûw‡¸…º*¸ûw‡¸ûw‡¸'úÝ·V¶·|ëN·^'7ª£·'úÝ·¥ÑŽ·ª.Ä5éIË6éIË6V¶·âTL¶ª.Ä5âTL¶¹37'úÝ·…º*¸;ܸª.Ä5'úÝ·‡Æ¸…º*¸'úÝ·d»R¸…†‘¸YθYθQlì¸ûw‡¸YθYθÓÀ¯¸«¥¸ëŽö¸ëŽö¸YθQlì¸Yθòøö+ظ‡Y¹ã¨¹a¾¹}Ô¹a¾¹ ”¹{)¹T.¹T.¹e=¹2ë#¹× +¹a¾¹× +¹a¾¹º23¹e=¹2ë#¹¨K8¹ã¨¹ ”¹× +¹OKâ¸e=¹2ë#¹‡Y¹ ”¹e=¹º23¹T.¹× +¹ ”¹Ul¹Qlì¸ëŽö¸òøÓÀ¯¸«¥¸òøYθ…†‘¸®Æf¸®Æf¸'úÝ·®Æf¸‡Æ¸;ܸ'úÝ·‡Æ¸…º*¸ûw‡¸ûw‡¸^Øz¸d»R¸d»R¸^Øz¸d»R¸^Øz¸ûw‡¸^Øz¸·>¸d»R¸;ܸ'úÝ·…º*¸‡Æ¸'úÝ·'úÝ·‡Æ¸‡Æ¸;ܸ'úÝ·V¶·ª£·ª.Ä5âTL¶ª£·¥ÑŽ·V¶·V¶··>¸V¶·|ëN··>¸‡Æ¸;ܸV¶·®Æf¸·>¸®Æf¸d»R¸…º*¸^Øz¸°Ø¹¸«¥¸«¥¸ëŽö¸°Ø¹¸°Ø¹¸ö+ظö+ظ‡Y¹YθQlì¸OK⸰ع¸Yθö+ظö+ظYθOKâ¸ûw‡¸ûw‡¸ûw‡¸d»R¸®Æf¸‡Æ¸‡Æ¸…†‘¸…º*¸·>¸‡Æ¸‡Æ¸ª.Ä5ª£·¥ÑŽ·¥ÑŽ·éIË6Ó_8äÝ8Ì8Ð7ÊK8“,¢8® Ž8üƒ8®X¶8®X¶8‹A¬8‹A¬8‹A¬80éè8ÞqÀ8ÞqÀ8Öå95Ñ 9? ó899? ó8Öå9Öå9Û.ý8?½9@V,9?½9?½999û©9?½9û9?½9Û.ý8Û.ý8Öå9?½9û©9û©9þ©Ô8þ©Ô80éè85Ñ 9? ó85Ñ 9Ê8®X¶8“,¢8üƒ8Šî÷7‹âs8Ì8Ð7잨7¹37ª.Ä5V¶·ª£·éIË6¥ÑŽ·¥ÑŽ·‡Æ¸d»R¸…º*¸·>¸«¥¸®Æf¸…º*¸·>¸…º*¸'úÝ·;ܸ‡Æ¸«¥¸…º*¸^Øz¸ûw‡¸œ—›¸œ—›¸ÓÀ¯¸·>¸^Øz¸ûw‡¸d»R¸^Øz¸‡Æ¸®Æf¸‡Æ¸…º*¸ª£·|ëN·|ëN·âTL¶ìž¨7éIË6ª.Ä5|ëN·V¶·ª.Ä5âTL¶éIË6éIË6ª.Ä5|ëN·;ܸ‡Æ¸'úÝ·¹37éIË6Ì8Ð7Ì8Ð7ª£·âTL¶éIË6âTL¶Ì8Ð7âTL¶éIË6¹37^'7âTL¶äÝ8Ì8Ð7Ì8Ð7잨7Šî÷7üƒ8ç˜8‹âs8‹âs8‹âs8_È78Ó_8Šî÷7¨Î#8잨7_È78âTL¶ª£·ª£·éIË6|ëN·|ëN·;ܸ…º*¸d»R¸;ܸ;ܸ…º*¸®Æf¸^Øz¸«¥¸·>¸œ—›¸…†‘¸°Ø¹¸^Øz¸°Ø¹¸ûw‡¸…º*¸·>¸°Ø¹¸…†‘¸^Øz¸«¥¸Qlì¸Ql츫¥¸òøYθòøœ—›¸òøûw‡¸ëŽö¸«¥¸ûw‡¸^Øz¸ÓÀ¯¸òøûw‡¸…†‘¸ûw‡¸;ܸ;ܸd»R¸;ܸûw‡¸ûw‡¸òø…†‘¸·>¸«¥¸V¶·éIË6‡Æ¸'úÝ·|ëN·V¶·¥ÑŽ·ª£·¥ÑŽ·ª.Ä5^'7잨7Šî÷7äÝ8잨7Ì8Ð7Šî÷7_È78Šî÷7‹âs8¨Î#8Ó_8ÊK8äÝ8Ó_8ÊK8üƒ8Ó_8_È78_È78ÊK8잨7éIË6잨7Šî÷7Ì8Ð7^'7_È78Šî÷7잨7éIË6¥ÑŽ·‡Æ¸;ܸ;ܸ;ܸ‡Æ¸V¶·…º*¸ûw‡¸°Ø¹¸®Æf¸òø^Øz¸ÓÀ¯¸°Ø¹¸°Ø¹¸òø^Øz¸œ—›¸Qlì¸ÓÀ¯¸«¥¸ÓÀ¯¸Yθ^Øz¸^Øz¸…†‘¸ûw‡¸d»R¸…†‘¸…†‘¸ÓÀ¯¸^Øz¸d»R¸¥ÑŽ·;ܸ·>¸V¶·ª.Ä5‡Æ¸ûw‡¸'úÝ·®Æf¸;ܸV¶·¥ÑŽ·¥ÑŽ·éIË6ª£·ìž¨7¹37_È78äÝ8_È78éIË6_È78‹âs8ÊK8Šî÷7‹âs8äÝ8ÊK8äÝ8¨Î#8‹âs8ç˜8ç˜8“,¢8‹A¬8‹A¬8‹A¬8®X¶8ÞqÀ8‹A¬8Ê8Ê8Ê8ÞqÀ8þ©Ô8Öå9û9û©9û95Ñ 95Ñ 9û9?½95Ñ 99‚'"9‚'"9@V,95Ñ 90éè8Ê8‹A¬8Ê8þ©Ô8ÊK8üƒ8‹âs8_È78¨Î#8Ó_8¨Î#8¨Î#8_È78üƒ8Šî÷7_È78äÝ8잨7äÝ8¹37잨7¨Î#8Ì8Ð7¨Î#8ÊK8Ì8Ð7^'7Šî÷7¨Î#8ÊK8Šî÷7¨Î#8ÊK8®X¶8®X¶8Ê8þ©Ô8Û.ý89Öå95Ñ 9þ©Ô8? ó80éè85Ñ 95Ñ 9Öå9‚'"9‚'"9x ;9@V,9€ +P9x ;9æ^_9/&U9æ^_9€ +P9€ +P9€ +P9/&U9T™i9æ^_9/&U9)„9ôx9)„9ØÙ‹99™9ojŽ9ojŽ9œÐ¯9ä?›99–93û9 ~9,¹†9lI‰9ôx9fÕs9,¹†9ØÙ‹99™9)„9)„9lI‰9)„9ä?›9ojŽ9)„9lI‰9!Œ“9,¹†9ojŽ9ojŽ9fÕs99™9ç{d9 ~9ç{d9ç{d9)·n9ôx9T™i9ôx9/&U9æ^_9FïJ9…ÔE9?º@94‡69un19x ;9x ;9un19…ÔE9?º@94‡694‡69˜>'9˜>'94‡694‡69x ;94‡69Öå99˜>'9‚'"9˜>'94‡69Öå995Ñ 9‚'"90éè89‚'"9˜>'9@V,9Öå95Ñ 95Ñ 9˜>'995Ñ 9@V,9Öå9û9˜>'9?½9‚'"9@V,9û9Öå9˜>'9x ;9x ;9˜>'9@V,9@V,9?º@94‡69…ÔE9?º@9/&U9?º@9?º@9FïJ9…ÔE9û9‚'"9x ;9@V,9x ;9FïJ995Ñ 9þ©Ô8þ©Ô8®X¶8“,¢8“,¢8Ê8þ©Ô8Ê8þ©Ô8Ê8üƒ8ÞqÀ8® Ž8Ê8ç˜8‹A¬8®X¶8‹âs8ÊK8Ì8Ð7éIË6âTL¶¥ÑŽ·âTL¶;ܸV¶·;ܸ¥ÑŽ·…º*¸·>¸‡Æ¸®Æf¸«¥¸d»R¸‡Æ¸·>¸œ—›¸òød»R¸ûw‡¸…º*¸‡Æ¸ûw‡¸…º*¸Yθûw‡¸Yθ…†‘¸«¥¸ö+ظòøö+ظòø…†‘¸«¥¸ÓÀ¯¸«¥¸°Ø¹¸ûw‡¸d»R¸;ܸ·>¸…º*¸;ܸ…º*¸·>¸®Æf¸d»R¸…º*¸d»R¸‡Æ¸V¶·‡Æ¸¥ÑŽ·ª£·âTL¶…º*¸‡Æ¸âTL¶ª.Ä5V¶·¥ÑŽ·¥ÑŽ·;ܸ…º*¸V¶·…º*¸;ܸ…º*¸‡Æ¸¥ÑŽ·|ëN·'úÝ·…º*¸‡Æ¸|ëN·d»R¸;ܸ'úÝ··>¸ûw‡¸‡Æ¸¥ÑŽ·âTL¶d»R¸;ܸ·>¸;ܸ¥ÑŽ·^Øz¸·>¸…º*¸^Øz¸;ܸ^Øz¸d»R¸d»R¸«¥¸òøûw‡¸®Æf¸…º*¸«¥¸°Ø¹¸^Øz¸«¥¸®Æf¸œ—›¸®Æf¸®Æf¸«¥¸^Øz¸°Ø¹¸…º*¸…º*¸'úÝ·…º*¸d»R¸;ܸéIË6V¶·V¶·Ì8Ð7잨7äÝ8^'7^'7¹37Ì8Ð7Šî÷7Ì8Ð7âTL¶éIË6^'7^'7Šî÷7¨Î#8äÝ8Šî÷7^'7äÝ8Šî÷7Ó_8® Ž8“,¢8® Ž8‹âs8¨Î#8“,¢8® Ž8® Ž8äÝ8üƒ8ç˜8¨Î#8Ó_8ç˜8ÊK8‹A¬8®X¶8®X¶8ç˜8‹A¬8Ê8Ê8üƒ8®X¶8üƒ8“,¢8® Ž8üƒ8‹A¬8ç˜8üƒ8¨Î#8Ì8Ð7Šî÷7‹âs8Ì8Ð7잨7_È78Šî÷7âTL¶ª£·âTL¶|ëN·¥ÑŽ·éIË6;ܸ¥ÑŽ·‡Æ¸…º*¸d»R¸^Øz¸^Øz¸·>¸^Øz¸'úÝ·…º*¸‡Æ¸;ܸ…º*¸‡Æ¸d»R¸…†‘¸…º*¸…º*¸‡Æ¸·>¸·>¸®Æf¸·>¸®Æf¸d»R¸·>¸^Øz¸…º*¸…º*¸V¶·âTL¶ìž¨7ª.Ä5_È78_È78잨7_È78¨Î#8Ó_8Ó_8Ì8Ð7ÊK8ÊK8_È78äÝ8äÝ8Ì8Ð7잨7_È78¨Î#8‹A¬8¨Î#8Ì8Ð7äÝ8éIË6ª.Ä5Ó_8_È78^'7잨7Ì8Ð7Šî÷7¨Î#8üƒ8ç˜8ÊK8‹âs8Ì8Ð7Ó_8‹âs8Šî÷7Šî÷7^'7ª.Ä5éIË6äÝ8잨7¹37|ëN·¥ÑŽ·|ëN·|ëN·ª.Ä5'úÝ··>¸…º*¸‡Æ¸…º*¸œ—›¸«¥¸…†‘¸^Øz¸«¥¸«¥¸«¥¸ÓÀ¯¸®Æf¸OKâ¸ã¨¹‡Y¹Ul¹ ”¹‡Y¹ã¨¹Qlì¸ ”¹ ”¹Qlì¸a¾¹T.¹{)¹2ë#¹}Ô¹a¾¹{)¹T.¹¨K8¹e=¹i´L¹ÌÏQ¹~™G¹î\¹__k¹__k¹ÌÏQ¹¨K8¹¤ëV¹ B¹ÌÏQ¹î\¹__k¹¤ëV¹§$a¹¤ëV¹§$a¹§$a¹__k¹ÏAf¹__k¹ÏAf¹__k¹X}p¹§$a¹ÌÏQ¹¨K8¹º23¹º23¹ã¨¹}Ô¹{)¹}Ô¹}Ô¹}Ô¹}Ô¹a¾¹º23¹2ë#¹2ë#¹¨K8¹º23¹~™G¹º23¹{)¹2ë#¹ã¨¹ã¨¹T.¹e=¹2ë#¹º23¹¤ëV¹__k¹__k¹__k¹~ºz¹X}p¹ÏAf¹¹›u¹¹›u¹•|‚¹ˆ …¹__k¹~ºz¹s½Œ¹êo”¹ø,Š¹__k¹~ºz¹ˆ …¹êo”¹•|‚¹©œ‡¹ìÞ‘¹¸·>¸…†‘¸®Æf¸®Æf¸®Æf¸ûw‡¸…º*¸‡Æ¸;ܸ…º*¸d»R¸·>¸‡Æ¸d»R¸®Æf¸®Æf¸…º*¸V¶·V¶·'úÝ·ûw‡¸‡Æ¸;ܸ'úÝ·;ܸ‡Æ¸…º*¸…º*¸‡Æ¸…º*¸ª£·‡Æ¸;ܸ¥ÑŽ·¥ÑŽ·âTL¶¥ÑŽ·¥ÑŽ·'úÝ·|ëN·|ëN·;ܸ|ëN·¥ÑŽ·;ܸV¶·d»R¸V¶·ª£·'úÝ·éIË6äÝ8äÝ8éIË6¨Î#8잨7Ó_8“,¢8Ó_8ç˜8‹A¬8û©99û©9?½9Öå9˜>'9@V,94‡694‡69un19‚'"9?º@9)·n9SBZ9SBZ99™9SBZ9SBZ9,¹†9)·n9)·n99™9,¹†9 ~9)„9,¹†9,¹†9ojŽ9z®˜9õ¢97ö´9÷ýÆ9 ¯¼98‰·9C¿97ö´91jÄ9á%Ì91jÄ9C¿9÷ýÆ9÷ýÆ9‹ÖÁ98‰·9 ¯¼9õ¢9C¿9÷ýÆ9[º9 ¯¼9C¿9C¿98‰·9>­9‡¥9 ¯¼9C¿9«ª9 ¯¼9 ¯¼9«ª9uÑ9?¨9?¨9ä?›93û99–9?¨9‡¥9!Œ“9/c 9uÑ99–9lI‰9!Œ“9lI‰9ojŽ9ØÙ‹9fÕs9!Œ“9ä?›9/c 9z®˜9z®˜9!Œ“9!Œ“9z®˜9uÑ9>­9«ª9ä?›9«ª9 ¯¼9á%Ì9ENÑ9÷ýÆ9ENÑ9C5Þ9C5Þ9¤âÓ9 wÖ9dôå9C5Þ9¦‰è9y´í9ë9¦‰è9y´í9T¡ú9ê1:RÈ:é^:T¡ú9T¡ú9¦‰è9 Jð9‘Íÿ9}uõ9] ø9f7ý9}uõ9}uõ9=_ã9 Jð9] ø9¦‰è9¦‰è9dôå9q Û9á%Ì9 wÖ9C5Þ9¤âÓ9ENÑ9‹ÖÁ9C¿98‰·9[º9«ª9Xc²97ö´9?¨9Xc²9«ª9õ¢9/c 93û9!Œ“93û99™9lI‰9)·n9)„99™9/&U9 ~9)·n9SBZ9€ +P9FïJ9æ^_9…ÔE9‚'"9…ÔE9@V,9?º@9ç{d9fÕs9/&U9 ~99™99™9)·n9ôx9)·n9T™i9)·n9 ~9€ +P9fÕs9ç{d9fÕs9ç{d9ç{d9)„9)·n9ç{d9)·n9€ +P9€ +P9FïJ9FïJ9SBZ9 ~9ôx9SBZ9FïJ9T™i9 ~9ç{d9€ +P94‡69x ;9€ +P9€ +P9€ +P9SBZ9)·n9…ÔE9)·n9ç{d9æ^_9SBZ9fÕs9SBZ9€ +P9€ +P9…ÔE9€ +P9æ^_9)·n9ôx9T™i9/&U9)·n9ç{d9T™i9?º@9€ +P9…ÔE9€ +P9€ +P94‡6999‚'"9‚'"9@V,99Öå99@V,9Öå9? ó85Ñ 90éè8þ©Ô8? ó8®X¶8‹âs8ÞqÀ8_È78Šî÷7ÊK8잨7ÊK8® Ž8¨Î#8_È78ÊK8ÊK8‹âs8Ó_8üƒ8ÊK8_È78Ì8Ð7ÊK8‹âs8Šî÷7Ì8Ð7ª.Ä5éIË6âTL¶âTL¶ìž¨7ÊK8üƒ8Šî÷7Ó_8‹âs8¨Î#8‹A¬8“,¢8‹A¬8Ê80éè80éè85Ñ 9? ó8û©9?½90éè8“,¢8þ©Ô8þ©Ô8? ó8? ó8?½9¿ÈÞ8?½9?½9þ©Ô80éè8Öå90éè8Û.ý8þ©Ô8“,¢8þ©Ô8û9Ê8®X¶8þ©Ô8þ©Ô8? ó80éè8? ó8Öå9¿ÈÞ8ÞqÀ8®X¶8®X¶8üƒ8üƒ8ÞqÀ8Ó_8üƒ8ÊK8Šî÷7ÊK8üƒ8äÝ8Šî÷7잨7ª.Ä5잨7ª.Ä5ª.Ä5|ëN·ª.Ä5|ëN·;ܸûw‡¸V¶·^Øz¸d»R¸«¥¸òøQlì¸Ul¹× +¹Qlì¸ö+ظö+ظö+ظOK⸠”¹Qlì¸a¾¹2ë#¹}Ô¹2ë#¹ B¹ÌÏQ¹ÌÏQ¹__k¹e=¹}Ô¹T.¹ B¹ÌÏQ¹î\¹ˆ …¹__k¹ÏAf¹ø,Š¹~ºz¹©œ‡¹©œ‡¹~ºz¹X}p¹ÏAf¹ˆ …¹__k¹i´L¹î\¹§$a¹¤ëV¹i´L¹º23¹e=¹º23¹ã¨¹}Ô¹¨K8¹º23¹ ”¹e=¹¨K8¹a¾¹ ”¹{)¹{)¹× +¹Qlì¸× +¹ ”¹× +¹{)¹ã¨¹}Թ㨹T.¹T.¹a¾¹ã¨¹T.¹¨K8¹e=¹e=¹¤ëV¹•|‚¹__k¹•|‚¹ˆ …¹©œ‡¹¥Ù¹¥Ù¹©œ‡¹s½Œ¹N¹N¹êo”¹_’™¹vµž¹*Ù£¹R"®¹å»¹å»¹Ñ«¹å»¹¸ +͹¹âǹ©vʹ©vʹ©vʹ©vʹ¹âǹ›ÇÔ¹©vʹ7»Â¹7»Â¹¦'À¹¹âǹ13Ò¹·m¸¹èNŹèNŹ·m¸¹5”½¹èNŹ5”½¹èNŹ7»Â¹å»¹©Úµ¹5”½¹5”½¹å»¹R"®¹tý¨¹å»¹5”½¹R"®¹vµž¹R"®¹÷´°¹©Úµ¹÷´°¹÷´°¹R"®¹¸‡Æ¸d»R¸®Æf¸;ܸ'úÝ·V¶··>¸«¥¸;ܸ‡Æ¸‡Æ¸âTL¶âTL¶¥ÑŽ·^'7ª.Ä5éIË6ª.Ä5ª.Ä5¹37^'7|ëN·ª£·'úÝ·ª£·Ì8Ð7éIË6V¶·âTL¶ª.Ä5ª.Ä5éIË6잨7ÊK8^'7잨7¹37Ì8Ð7éIË6éIË6ª.Ä5éIË6âTL¶Šî÷7Ì8Ð7¥ÑŽ·ª.Ä5âTL¶ìž¨7Ì8Ð7^'7Šî÷7äÝ8^'7éIË6^'7Ó_8Šî÷7‹âs8¨Î#8Ó_8Ó_8üƒ8Ó_8¨Î#8‹âs8üƒ8ÊK8Ó_8_È78Ì8Ð7äÝ8äÝ8äÝ8Ó_8¨Î#8Ó_8äÝ8Šî÷7éIË6¨Î#8Ì8Ð7^'7äÝ8_È78üƒ8Ó_8® Ž8ÞqÀ8“,¢8Ê8®X¶8“,¢8? ó8û©90éè8?½9?½9‚'"95Ñ 994‡69?º@9un194‡69?º@9FïJ9x ;9€ +P9?º@9x ;9…ÔE94‡69…ÔE9fÕs9FïJ9/&U9FïJ9FïJ94‡69æ^_9T™i9SBZ9x ;9?º@9ôx9fÕs9T™i99™9T™i9 ~9fÕs9SBZ9fÕs9T™i9…ÔE9SBZ9/&U9…ÔE9?º@9@V,9€ +P9FïJ9/&U9x ;9x ;9?º@9x ;9?º@9@V,9un19x ;9x ;9un19FïJ9FïJ9un194‡69‚'"9˜>'9un19un19un195Ñ 9û9?½90éè8û©9˜>'94‡699˜>'9@V,9@V,9˜>'9…ÔE9FïJ9æ^_9ôx9)·n9,¹†99™9T™i9lI‰9ØÙ‹99™99™9)„9ôx9)„9,¹†9lI‰9!Œ“9 ~9õ¢9‡¥9/c 9?¨9>­9«ª9?¨9uÑ9?¨9ä?›9!Œ“9ojŽ9ØÙ‹9ojŽ9‡¥9ä?›9?¨9?¨9/c 9/c 9uÑ9õ¢9ä?›9uÑ9ojŽ9ojŽ99–9ä?›9«ª9>­9uÑ9?¨9!Œ“9/c 9ojŽ9ä?›9z®˜9ojŽ99–9ojŽ9ØÙ‹9)„9ojŽ9ôx9ç{d9fÕs9lI‰9fÕs9)„9ôx9SBZ9fÕs9SBZ9 ~9T™i9 ~9 ~9T™i9ç{d9)·n9ç{d9T™i9T™i9fÕs9ç{d9æ^_9T™i9ç{d9FïJ9ç{d9/&U9T™i9T™i9æ^_9æ^_9@V,9€ +P9…ÔE94‡69€ +P9)·n9æ^_9SBZ9æ^_9æ^_9x ;9SBZ9…ÔE9FïJ94‡69…ÔE9/&U9€ +P9fÕs9ôx99™9)·n9T™i9T™i94‡69T™i9T™i9SBZ9æ^_9…ÔE9/&U9æ^_9?º@9…ÔE9‚'"9un19Öå9Öå9Öå9û9û9Û.ý8Û.ý8Öå9û9? ó8Û.ý8¿ÈÞ8? ó8Öå9û9Öå95Ñ 9Û.ý8¿ÈÞ8“,¢8Ê8‹A¬8® Ž8® Ž8‹A¬8ç˜8Ó_8‹A¬8Ê8þ©Ô8Ó_8Ó_8‹âs8üƒ8Ê8ÞqÀ8“,¢8üƒ8“,¢8“,¢8ÞqÀ8® Ž8® Ž8ÊK8¨Î#8¨Î#8äÝ8ÊK8® Ž8_È78ÊK8_È78_È78Ì8Ð7ª.Ä5'úÝ·âTL¶éIË6V¶·|ëN·^'7Šî÷7Šî÷7¨Î#8^'7éIË6_È78Šî÷7ÊK8¹37äÝ8¨Î#8¨Î#8_È78Ó_8ç˜8® Ž8üƒ8Ó_8® Ž8‹âs8“,¢8ç˜8Ê8?½9þ©Ô8Ê8¿ÈÞ8Ê8¿ÈÞ8®X¶8ÞqÀ8®X¶8¿ÈÞ8ç˜8Ê8‹A¬8ÞqÀ8‹A¬8‹A¬8® Ž8Ó_8ç˜8Ó_8® Ž8ÊK8ÊK8Šî÷7_È78_È78¨Î#8^'7Ì8Ð7Šî÷7¹37éIË6ÊK8Šî÷7Ó_8Ì8Ð7^'7ª.Ä5^'7^'7ÊK8Šî÷7Ì8Ð7Šî÷7^'7¹37¹37^'7éIË6;ܸâTL¶ª.Ä5|ëN·âTL¶¥ÑŽ·ª.Ä5ª£·V¶·;ܸV¶·ª£·|ëN·;ܸ…†‘¸d»R¸«¥¸^Øz¸d»R¸®Æf¸«¥¸…º*¸V¶··>¸‡Æ¸«¥¸d»R¸…º*¸;ܸ‡Æ¸V¶·¥ÑŽ·éIË6^'7잨7¹37éIË6éIË6ª.Ä5Ì8Ð7¹37^'7äÝ8ª.Ä5äÝ8® Ž8_È78ç˜8ÞqÀ8ç˜8üƒ8‹âs8üƒ8Ó_8‹A¬8®X¶8®X¶8û©9? ó8þ©Ô8þ©Ô8‹A¬8‹A¬8“,¢80éè8û©9¿ÈÞ8¿ÈÞ8þ©Ô8ç˜8® Ž8Ê8ç˜8ç˜8“,¢8‹âs8Ó_8_È78‹âs8ÊK8^'7Šî÷7¨Î#8¨Î#8Šî÷7âTL¶V¶·¥ÑŽ·âTL¶âTL¶^'7잨7^'7Ì8Ð7잨7^'7éIË6Ì8Ð7잨7ÊK8잨7_È78Šî÷7_È78¨Î#8_È78® Ž8Ó_8üƒ8‹âs8‹âs8Ó_8‹A¬8ç˜8“,¢8ç˜8ÞqÀ8Ê8“,¢8? ó8þ©Ô8ÞqÀ8®X¶8üƒ8ÞqÀ8þ©Ô8?½9¿ÈÞ8þ©Ô8¿ÈÞ8Û.ý8Û.ý84‡69‚'"99û©9un194‡69˜>'9û9‚'"99un19˜>'9x ;9FïJ9un19…ÔE9€ +P9?º@9…ÔE9un19un19?º@9€ +P9un19x ;9‚'"9‚'"9@V,9un19?º@9un19€ +P95Ñ 99˜>'9?½9û©95Ñ 9Û.ý8ÞqÀ8‹A¬8®X¶8“,¢8ç˜8üƒ8¨Î#8Ó_8Šî÷7잨7^'7Ì8Ð7¨Î#8잨7V¶·ª.Ä5|ëN·ìž¨7¥ÑŽ·âTL¶Ì8Ð7잨7Ì8Ð7ÊK8^'7Šî÷7Ì8Ð7¨Î#8Šî÷7¨Î#8®X¶8® Ž8üƒ8ÊK8ç˜8_È78¨Î#8_È78_È78Ó_8ÊK8¨Î#8þ©Ô8üƒ8_È78ç˜8‹A¬8®X¶8ÞqÀ8ÞqÀ8þ©Ô8‹A¬8û©9Û.ý8ÞqÀ8Ê8¿ÈÞ8û©95Ñ 9û©90éè8Û.ý8û©9Û.ý8þ©Ô8¿ÈÞ8®X¶8‹A¬8? ó8? ó8û©9û9Û.ý85Ñ 9?½9¿ÈÞ8? ó80éè80éè8Û.ý8þ©Ô80éè8? ó8þ©Ô8ç˜8ÞqÀ8®X¶8‹A¬8ÞqÀ8ÊK8Ó_8üƒ8_È78‹âs8äÝ8‹âs8_È78Šî÷7Ì8Ð7Ì8Ð7äÝ8äÝ8üƒ8ª£·âTL¶Ì8Ð7Ì8Ð7¹37Šî÷7_È78Ì8Ð7잨7ÊK8¨Î#8Ì8Ð7äÝ8äÝ8ÊK8ÊK8^'7äÝ8Ì8Ð7_È78üƒ8¹37|ëN·ª£·ª.Ä5잨7âTL¶V¶·ª.Ä5éIË6éIË6ª£·^'7Ì8Ð7äÝ8¨Î#8¨Î#8‹âs8‹âs8Šî÷7Ó_8“,¢8ÞqÀ8üƒ8® Ž8‹A¬8Û.ý80éè8® Ž8þ©Ô8û©9Û.ý8? ó80éè8þ©Ô8® Ž8Ó_8®X¶8“,¢8¨Î#8_È78_È78ç˜8Ó_8® Ž8“,¢8Ó_8¹37äÝ8^'7|ëN·âTL¶ª£·‡Æ¸…º*¸®Æf¸…†‘¸…†‘¸ûw‡¸…†‘¸«¥¸ö+ظUl¹OKâ¸OKâ¸Ul¹Qlì¸òø× +¹}Ô¹}Ô¹2ë#¹a¾¹‡Y¹Ul¹}Ô¹e=¹i´L¹î\¹¤ëV¹~™G¹ÌÏQ¹X}p¹¹›u¹•|‚¹¹›u¹X}p¹~ºz¹ÌÏQ¹î\¹~™G¹i´L¹¥Ù¹¥Ù¹•|‚¹§$a¹ÏAf¹¤ëV¹~™G¹ÏAf¹~™G¹¤ëV¹ÌÏQ¹ B¹i´L¹î\¹§$a¹ÌÏQ¹î\¹~™G¹ÏAf¹i´L¹e=¹¨K8¹2ë#¹{)¹T.¹{)¹a¾¹T.¹¨K8¹{)¹}Ô¹ ”¹ã¨¹ã¨¹}Ô¹{)¹× +¹}Ô¹a¾¹ëŽö¸ã¨¹Ul¹‡Y¹× +¹‡Y¹Ul¹Ul¹ã¨¹ã¨¹}Ô¹a¾¹{)¹ ”¹e=¹¤ëV¹e=¹e=¹º23¹{)¹i´L¹¤ëV¹ÌÏQ¹î\¹î\¹__k¹¤ëV¹¤ëV¹X}p¹__k¹¥Ù¹©œ‡¹~ºz¹•|‚¹¥Ù¹•|‚¹N¹êo”¹ø,Š¹N¹—¹×#œ¹¸ûw‡¸^Øz¸…º*¸®Æf¸«¥¸«¥¸ÓÀ¯¸«¥¸«¥¸^Øz¸d»R¸«¥¸«¥¸^Øz¸®Æf¸‡Æ¸'úÝ·'úÝ·…º*¸'úÝ·'úÝ·¥ÑŽ·V¶·V¶·V¶·V¶·‡Æ¸…º*¸ª£·¥ÑŽ·^Øz¸®Æf¸·>¸ûw‡¸«¥¸ÓÀ¯¸°Ø¹¸òøëŽö¸ ”¹× +¹ ”¹Qlì¸}Ô¹a¾¹e=¹¨K8¹T.¹Ul¹ã¨¹Ul¹Ul¹}Ô¹2ë#¹{)¹ã¨¹2ë#¹ B¹a¾¹{)¹2ë#¹2ë#¹T.¹{)¹º23¹e=¹2ë#¹e=¹ B¹ëŽö¸ëŽö¸a¾¹‡Y¹Qlì¸× +¹}Ô¹OK⸠”¹2ë#¹OKâ¸Ul¹ëŽö¸ö+ظö+ظQl츇Y¹Qlì¸ÓÀ¯¸d»R¸ûw‡¸…º*¸…º*¸ª£·^'7^'7ª.Ä5¹37Ì8Ð7^'7_È78ÊK8^'7Ì8Ð7잨7Šî÷7^'7잨7ª.Ä5잨7éIË6Ì8Ð7ª.Ä5잨7^'7Šî÷7잨7âTL¶^'7éIË6äÝ8Šî÷7^'7âTL¶äÝ8Ì8Ð7¹37|ëN·ª£·V¶·éIË6ª.Ä5¹37ª.Ä5^'7âTL¶;ܸéIË6¥ÑŽ·‡Æ¸âTL¶ª£·¥ÑŽ·V¶·'úÝ·;ܸ‡Æ¸¥ÑŽ·ª£·|ëN·ª£·;ܸ‡Æ¸d»R¸‡Æ¸V¶·ûw‡¸…†‘¸·>¸«¥¸®Æf¸d»R¸…†‘¸ûw‡¸‡Æ¸'úÝ·ª£·âTL¶ª.Ä5éIË6¥ÑŽ·âTL¶ª.Ä5ª.Ä5äÝ8¨Î#8ÊK8¨Î#8¹37잨7Ì8Ð7^'7ª.Ä5잨7üƒ8Ó_8“,¢8® Ž8“,¢8¿ÈÞ8üƒ8‹âs8üƒ8üƒ8‹A¬8ç˜8ÞqÀ8üƒ8‹A¬8®X¶8‹A¬8ç˜8‹A¬80éè8¿ÈÞ8“,¢8®X¶8ç˜8® Ž8ÊK8ç˜8ÊK8_È78® Ž8®X¶8“,¢8®X¶8ÞqÀ8Û.ý8Ê8® Ž8¨Î#8äÝ8äÝ8Ó_8® Ž8“,¢8ÊK8ÊK8_È78Ó_8‹âs8äÝ8ÊK8_È78^'7¥ÑŽ·ª.Ä5Ì8Ð7¹37^'7^'7¥ÑŽ·ìž¨7V¶·_È78Šî÷7잨7Šî÷7¹37^'7âTL¶^'7잨7V¶·‡Æ¸;ܸ'úÝ·V¶·|ëN··>¸…º*¸V¶·|ëN·|ëN·ª.Ä5Ì8Ð7¨Î#8^'7_È78ÊK8잨7_È78äÝ8‹âs8‹âs8® Ž8‹A¬8¿ÈÞ8‹A¬8ÞqÀ8ç˜8üƒ8“,¢8¿ÈÞ8¿ÈÞ8® Ž8ÞqÀ8‹âs8þ©Ô85Ñ 9û©9@V,90éè8Ê8ç˜8Ê8®X¶8Ó_8‹âs8üƒ8¨Î#8Ó_8Šî÷7Ì8Ð7¨Î#8Šî÷7¹37¥ÑŽ·'úÝ·V¶·¥ÑŽ·¥ÑŽ·ª.Ä5|ëN·‡Æ¸'úÝ·'úÝ··>¸^Øz¸ûw‡¸^Øz¸…º*¸^Øz¸«¥¸òøYθòøòø‡Y¹× +¹Ul¹ ”¹Ul¹‡Y¹‡Y¹ ”¹× +¹YθòøQlì¸Yθ°Ø¹¸YθQlì¸ûw‡¸®Æf¸^Øz¸ûw‡¸«¥¸ûw‡¸ÓÀ¯¸ÓÀ¯¸°Ø¹¸°Ø¹¸…†‘¸ûw‡¸·>¸…º*¸^Øz¸d»R¸·>¸ÓÀ¯¸…†‘¸®Æf¸d»R¸;ܸ·>¸;ܸª.Ä5;ܸ|ëN·ª£·¹37Ì8Ð7ª£·ª.Ä5잨7¨Î#8Šî÷7Šî÷7éIË6Ì8Ð7_È78¨Î#8üƒ8“,¢8ÊK8_È78잨7ÊK8Ì8Ð7¹37ª£·'úÝ·éIË6¥ÑŽ·'úÝ·|ëN·âTL¶^'7¹37ª£·ª£·|ëN·ìž¨7¨Î#8¹37¹37ª£·^'7¹37Ì8Ð7ª.Ä5|ëN·ìž¨7ª.Ä5잨7^'7'úÝ·d»R¸‡Æ¸;ܸ‡Æ¸®Æf¸ûw‡¸âTL¶V¶··>¸'úÝ·V¶·;ܸª.Ä5ª.Ä5¹37ª£·ª£·ìž¨7ª£·Ì8Ð7âTL¶ìž¨7Ì8Ð7¨Î#8Šî÷7Ì8Ð7ª.Ä5¹37|ëN·^'7^'7_È78¨Î#8Ì8Ð7ÊK8‹âs8üƒ8® Ž8® Ž8®X¶8® Ž8üƒ8ÊK8üƒ8ÊK8Ó_8äÝ8ÊK8_È78¨Î#8“,¢8ç˜8ç˜80éè8? ó8û©990éè8? ó80éè8¿ÈÞ80éè8? ó8? ó80éè8? ó80éè80éè80éè8‹A¬8“,¢8ÞqÀ8ÞqÀ8Ê8þ©Ô8ÞqÀ8Ó_8“,¢8® Ž8® Ž8_È78ÊK8잨7잨7ÊK8Šî÷7잨7^'7Ó_8¨Î#8ÊK8‹âs8‹A¬8“,¢8ç˜8_È78üƒ8¨Î#8¨Î#8éIË6éIË6¹37ª.Ä5¹37Ì8Ð7Ì8Ð7Šî÷7äÝ8¨Î#8ÊK8Šî÷7Šî÷7Ì8Ð7ª.Ä5ª.Ä5잨7¹37¥ÑŽ·¹37ª£·¥ÑŽ·ª.Ä5âTL¶;ܸª£·…º*¸âTL¶V¶·éIË6ª.Ä5éIË6¨Î#8Šî÷7ÊK8‹âs8¨Î#8“,¢8®X¶8® Ž8ÞqÀ8‹A¬8®X¶80éè8¿ÈÞ8Û.ý8®X¶8‹A¬8þ©Ô8‹A¬8‹A¬8Ê8Ê8Ê8¿ÈÞ8‹A¬8“,¢8‹A¬8üƒ8üƒ8Ê8ç˜8®X¶8‹âs8‹âs8Ó_8‹âs8_È78Ó_8äÝ8Šî÷7äÝ8âTL¶äÝ8잨7¹37¹37|ëN·'úÝ·ª.Ä5^'7V¶·V¶·¥ÑŽ·¥ÑŽ·|ëN··>¸‡Æ¸V¶·;ܸª£·‡Æ¸·>¸;ܸ…º*¸^Øz¸®Æf¸…º*¸…º*¸…º*¸…º*¸…º*¸V¶·‡Æ¸«¥¸OKâ¸ÓÀ¯¸^Øz¸«¥¸·>¸ûw‡¸ö+ظ^Øz¸®Æf¸…º*¸…º*¸°Ø¹¸°Ø¹¸«¥¸ûw‡¸¥ÑŽ··>¸d»R¸;ܸª.Ä5|ëN·ª£·ìž¨7¹37éIË6ª.Ä5ª.Ä5äÝ8ª.Ä5V¶·ìž¨7¹37âTL¶|ëN·V¶·|ëN·éIË6¹37잨7Ì8Ð7Šî÷7äÝ8잨7äÝ8‹âs8‹âs8ÊK8‹A¬8ç˜8äÝ8üƒ8¨Î#8잨7Ó_8äÝ8äÝ8Ó_8Ó_8Šî÷7Ì8Ð7ÊK8_È78^'7^'7ª.Ä5¹37잨7äÝ8Ó_8_È78¨Î#8Šî÷7¨Î#8잨7¹37잨7¹37âTL¶ª£·¹37ª.Ä5ª£·;ܸ…º*¸¥ÑŽ·‡Æ¸V¶·ª£·…º*¸…º*¸;ܸd»R¸‡Æ¸…º*¸'úÝ·V¶·|ëN·;ܸ¥ÑŽ·‡Æ¸;ܸ¥ÑŽ·ª£·Šî÷7|ëN·…º*¸¥ÑŽ·âTL¶|ëN·éIË6^'7Ì8Ð7잨7Ó_8‹âs8ÊK8¿ÈÞ8® Ž8Ê8‹âs8þ©Ô899˜>'9Öå9Û.ý8@V,94‡69û99˜>'9…ÔE9@V,9…ÔE9…ÔE9SBZ9x ;9€ +P9/&U9æ^_9fÕs9 ~9)·n9 ~9ç{d9T™i9)„9fÕs9ôx9T™i9€ +P9æ^_9…ÔE9T™i9SBZ94‡69@V,9@V,9‚'"9‚'"9û©95Ñ 9û9?½9Ê8þ©Ô8þ©Ô8ç˜8® Ž8‹âs8‹A¬8‹A¬8“,¢8ÊK8“,¢8® Ž8Ó_8ÊK8Ó_8“,¢8ç˜80éè8? ó85Ñ 9? ó8¿ÈÞ8? ó8?½90éè8?½9û©9þ©Ô8û©9?½9¿ÈÞ8Ê8ÞqÀ8? ó8þ©Ô8Ê8?½9Û.ý8Û.ý8¿ÈÞ8¿ÈÞ8?½9? ó8û©95Ñ 95Ñ 9þ©Ô85Ñ 9Û.ý8? ó8û9û9Öå9Öå9?½9Öå9û©95Ñ 95Ñ 99Öå9˜>'9˜>'9˜>'9SBZ9x ;9@V,9un19…ÔE9@V,9˜>'9FïJ9˜>'9@V,9?½9û95Ñ 95Ñ 9?½9û©9û©9?½9Û.ý8‹A¬8“,¢8‹âs8ç˜8Ó_8ÊK8¨Î#8Ì8Ð7Šî÷7¨Î#8잨7V¶·¥ÑŽ·‡Æ¸®Æf¸·>¸^Øz¸;ܸ;ܸ;ܸ·>¸‡Æ¸V¶·;ܸ¥ÑŽ·âTL¶Šî÷7¥ÑŽ·|ëN·'úÝ·¥ÑŽ·¥ÑŽ·éIË6;ܸ‡Æ¸^Øz¸^Øz¸‡Æ¸…º*¸ûw‡¸®Æf¸^Øz¸·>¸d»R¸‡Æ¸‡Æ¸‡Æ¸®Æf¸'úÝ·V¶·âTL¶‡Æ¸¥ÑŽ·¥ÑŽ··>¸‡Æ¸ª£·ª£·;ܸ‡Æ¸^Øz¸«¥¸^Øz¸®Æf¸®Æf¸«¥¸œ—›¸ÓÀ¯¸^Øz¸ûw‡¸«¥¸°Ø¹¸ÓÀ¯¸OKâ¸Yθòø°Ø¹¸OK⸅†‘¸«¥¸ÓÀ¯¸·>¸ÓÀ¯¸òøûw‡¸^Øz¸«¥¸Ql츇Y¹ã¨¹a¾¹Qlì¸Yθ ”¹2ë#¹ ”¹}Ô¹{)¹ ”¹º23¹ã¨¹e=¹__k¹i´L¹§$a¹¤ëV¹¤ëV¹i´L¹¤ëV¹N¹©œ‡¹N¹s½Œ¹ø,Š¹×#œ¹•|‚¹ø,Š¹ˆ …¹§$a¹¹›u¹¥Ù¹¥Ù¹X}p¹__k¹¹›u¹¹›u¹î\¹§$a¹i´L¹î\¹~™G¹º23¹e=¹e=¹¤ëV¹¤ëV¹¨K8¹T.¹T.¹ ”¹T.¹¨K8¹e=¹ÏAf¹ÌÏQ¹~™G¹¨K8¹T.¹{)¹{)¹Qlì¸ëŽö¸}Ô¹ ”¹× +¹{)¹2ë#¹2ë#¹2ë#¹2ë#¹T.¹ ”¹‡Y¹ ”¹a¾¹ã¨¹º23¹ ”¹}Ô¹ëŽö¸ã¨¹ëŽö¸× +¹Ul¹‡Y¹ëŽö¸YθOKâ¸ö+ظa¾¹Qlì¸× +¹ã¨¹Ul¹a¾¹{)¹ã¨¹a¾¹e=¹i´L¹~™G¹ÌÏQ¹§$a¹ÏAf¹X}p¹ÏAf¹~ºz¹¹›u¹ÌÏQ¹¹›u¹~ºz¹__k¹__k¹X}p¹X}p¹s½Œ¹©œ‡¹ˆ …¹X}p¹¥Ù¹¹›u¹ø,Š¹•|‚¹ø,Š¹©œ‡¹'94‡694‡69x ;9x ;94‡69@V,9˜>'9x ;9˜>'9˜>'9‚'"95Ñ 9˜>'99û©9@V,9?½95Ñ 9@V,9@V,95Ñ 9Û.ý8?º@94‡69x ;9/&U9FïJ94‡69/&U9T™i9€ +P9SBZ9SBZ9T™i9ç{d9?º@9SBZ9€ +P9SBZ9T™i9,¹†9 ~9ôx9,¹†9ØÙ‹9ØÙ‹9ôx9)·n9ç{d9ôx9)„9,¹†9fÕs9 ~9)„9ØÙ‹9!Œ“9z®˜9/c 93û9ØÙ‹9!Œ“9ä?›9!Œ“93û9ØÙ‹9!Œ“9)„99™9)„99™9ojŽ9uÑ9!Œ“99–9uÑ9lI‰93û9ojŽ9lI‰99™9ôx9)·n9T™i9fÕs9FïJ999˜>'9…ÔE9x ;9x ;9un195Ñ 9‚'"9‚'"9?½9ÞqÀ8Öå9û©9û©9û©99Û.ý8þ©Ô8ÞqÀ8þ©Ô8Ê8Ê8‹A¬8þ©Ô8Û.ý8¿ÈÞ8Ê80éè8þ©Ô80éè8? ó8Ê8®X¶8Ê8üƒ8Ó_8®X¶8ç˜8“,¢8“,¢8‹A¬8‹A¬8‹A¬8þ©Ô8Ê85Ñ 9‚'"9û9|Pd|1|24600|2013-282T15:32:07.397 /|6/|6n» 7/|6eÝ8Yâi8º‰8«“8iƒÅ8«“8iƒÅ8}ŸÏ8ûÜã8}ŸÏ8>þí8!ø8iƒÅ8>þí8Mž9º"9ûÜã8`½Ù8BI 9‚r9BI 9!ø8}ŸÏ8>þí8>þí8º‰8«“8þí8Mž9>þí8º"9þí8ûÜã8iƒÅ8$'8iƒÅ8þí8}ŸÏ8}ŸÏ8}ŸÏ8}ŸÏ8Yâi8«“8û:§8ûô}8º‰8Yâi8ÉÒ-8Yâi8ÖU8„ñ8eÝ8±TLµÖU8„ñ8„ñ8/|6ª[7þÊ· –'·· ¸ò~¢·±TLµ¹8³¶¹8³¶· ¸x¯4¸ò~¢·ÊÇ ¸ÀÅñ·ò~¢·ÀÅñ·ÿv·· ¸ÿv·þÊ·ò~¢·ý¯H¸ý¯H¸þÊ·· ¸ÀÅñ· –'·ÿv·þÊ·¹8³¶¹8³¶ÊÇ ¸ –'·ª[7þÊ·¹8³¶ª[7‰x¼7 –'·±TLµ¹8³¶¹8³¶„ñ8eÝ8Çî”7eÝ8 !ä7ÉÒ-8û:§8û:§8þí8$'8þí8>þí8!ø8Q±8`½Ù8º"9}ŸÏ8þí8û:§8û:§8!ø8ûÜã8¤59`½Ù8}ŸÏ8>þí8ûÜã8iƒÅ8Q±8«“8«“8ûô}8iƒÅ8$'8Yâi8ÉÒ-8eÝ8eÝ8/|6‰x¼7n» 7ò~¢·ò~¢·þÊ·±TLµ¹8³¶ –'·¹8³¶ÀÅñ·ÀÅñ·ÊÇ ¸Š–¸Š–¸KÈ´¸Ýœ ¸dÆp¸· ¸dÆp¸Ýœ ¸x¯4¸dÆp¸Šm‚¸· ¸x¯4¸þÊ·þÊ·ò~¢· –'·ÀÅñ·· ¸x¯4¸ÿv·þÊ·x¯4¸ÊÇ ¸±TLµÊÇ ¸ò~¢·ÿv·±TLµ±TLµò~¢·ÊÇ ¸ÀÅñ·ÀÅñ·· ¸þÊ·ÿv·±TLµÿv·±TLµ –'·· ¸‰x¼7ÐA8Yâi8ÐA8ÐA8ÉÒ-8ÖU8eÝ8„ñ8ÐA8Yâi8$'8«“8«“8Q±8«“8û:§8ÉÒ-8Q±8û:§8þí8º"9`½Ù8º"9Ž]9Ž]9¤59BI 9BI 9BI 9¤59BI 9BI 9ûÜã8Q±8}ŸÏ8iƒÅ8$'8iƒÅ8Yâi8„ñ8ÐA8ÖU8ÖU8º‰8ÐA8ûô}8eÝ8„ñ8ª[7eÝ8 –'·ò~¢· –'·þÊ·ÀÅñ·ÊÇ ¸x¯4¸x¯4¸x¯4¸x¯4¸Š–¸ºzŒ¸KÈ´¸KÈ´¸·Ó¸|±ª¸+Ᾰ·Ó¸·Ó¸¹à¹üȸüȸ·Ó¸·Ó¸+Ᾰâó¹KÈ´¸cW縒œû¸3yñ¸p1¹âó¹D¹’œû¸3yñ¸p1¹p1¹·Ó¸·Ó¸47ݸ3yñ¸47ݸ¹à¹3yñ¸p1¹p1¹½ ¹üȸݜ ¸x¯4¸Š–¸Ýœ ¸Š–¸+ᾸdÆp¸dÆp¸Šm‚¸ÀÅñ·ÊÇ ¸ÀÅñ·ÀÅñ·ºzŒ¸ò~¢·ÀÅñ·/|6ò~¢·ÿv·±TLµò~¢·ò~¢·±TLµ –'·‰x¼7ÀÅñ·· ¸ÿv·ÀÅñ·ÀÅñ·ÊÇ ¸Ù·\¸ÀÅñ·ÀÅñ·ÀÅñ·ÀÅñ·ÊÇ ¸x¯4¸ÊÇ ¸ÊÇ ¸Ù·\¸Š–¸ÿv·x¯4¸Š–¸ºzŒ¸|±ª¸47ݸüȸKÈ´¸cWç¸3yñ¸47ݸcW縷Ó¸cW縦]!¹=G¹¹à¹âó¹¹à¹½ ¹W¤0¹W¤0¹W¤0¹¦]!¹ +E¹0Ö:¹7Œ+¹¥t&¹=G¹âó¹·Ó¸Š–¸¹à¹·Ó¸47ݸ3yñ¸+Ᾰ+Ᾰ+Ᾰ|±ª¸Ù·\¸ÊÇ ¸ÊÇ ¸þÊ·ÊÇ ¸ý¯H¸dÆp¸ÀÅñ·ÿv·¹8³¶Çî”7¹8³¶/|6ÐA8Yâi8ÖU8ÖU8ûô}8º‰8û:§8ÖU8º‰8Q±8º‰8ûô}8ÖU8ÐA8Yâi8ÖU8$'8º‰8Yâi8ÖU8 !ä7‰x¼7 !ä7ª[7±TLµÇî”7/|6 –'·ÿv·ÊÇ ¸ !ä7 !ä7Çî”7Çî”7ÉÒ-8º‰8eÝ8±TLµÿv·±TLµÇî”7eÝ8±TLµÇî”7ª[7ª[7ò~¢·ý¯H¸· ¸· ¸x¯4¸x¯4¸dÆp¸ÀÅñ·ò~¢·ÀÅñ·· ¸Ù·\¸· ¸Ýœ ¸dÆp¸· ¸Š–¸ý¯H¸+Ᾰüȸ|±ª¸Š–¸+Ᾰ·Ó¸+Ᾰ+ᾸŠ–¸½ ¹cW縷Ó¸3yñ¸3yñ¸’œû¸cWç¸D¹D¹’œû¸D¹’œû¸Š–¸¹à¹KÈ´¸+Ᾰ·Ó¸47ݸ|±ª¸Ýœ ¸Š–¸dÆp¸¹8³¶ò~¢·ÊÇ ¸¹8³¶ –'·ÿv· –'·n» 7 –'·þÊ·‰x¼7 –'·/|6n» 7n» 7n» 7 !ä7Çî”7‰x¼7¹8³¶ÿv·¹8³¶ÀÅñ· –'·ò~¢·ò~¢·ÀÅñ·ò~¢·ò~¢· –'·¹8³¶ÀÅñ·ò~¢·ÊÇ ¸ý¯H¸· ¸x¯4¸ÊÇ ¸ò~¢·ÊÇ ¸ò~¢·ò~¢·/|6¹8³¶Çî”7 –'· !ä7ÿv· –'·ÊÇ ¸ –'·ÊÇ ¸Ù·\¸Ù·\¸x¯4¸ÊÇ ¸ÊÇ ¸ÿv·/|6ý¯H¸ý¯H¸Ù·\¸ÊÇ ¸ÊÇ ¸ý¯H¸x¯4¸ÊÇ ¸x¯4¸dÆp¸dÆp¸þÊ·· ¸ÿv·/|6ÀÅñ·ÀÅñ·ò~¢·ÀÅñ·±TLµª[7±TLµ –'·ÿv·ÿv·þÊ·ª[7ª[7/|6n» 7‰x¼7„ñ8eÝ8eÝ8 !ä7 !ä7ÖU8º‰8«“8$'8$'8º‰8$'8þí8`½Ù8Ž]9ûÜã8ûÜã8}ŸÏ8`½Ù8`½Ù8}ŸÏ8ûô}8}ŸÏ8¤59`½Ù8`½Ù8ûÜã8$'8û:§8iƒÅ8iƒÅ8û:§8ûô}8 !ä7 !ä7ÉÒ-8ÉÒ-8±TLµ !ä7 !ä7ÿv·Çî”7ª[7/|6þÊ· –'·· ¸x¯4¸· ¸ –'·ÀÅñ·Ù·\¸þÊ·ò~¢·ÀÅñ·· ¸· ¸ÿv·ò~¢·· ¸Š–¸Ù·\¸ÀÅñ·Š–¸· ¸ý¯H¸x¯4¸ÊÇ ¸Ù·\¸Ù·\¸Ù·\¸þÊ·ý¯H¸ÊÇ ¸ò~¢·ý¯H¸Šm‚¸ý¯H¸· ¸ÿv·ÀÅñ·ª[7/|6/|6‰x¼7/|6¹8³¶ !ä7ò~¢·n» 7ÐA8ÖU8eÝ8„ñ8Yâi8ÐA8Yâi8}ŸÏ8$'8º‰8û:§8Yâi8iƒÅ8û:§8û:§8Yâi8ûô}8Q±8«“8þí8¤59Q±8Q±8Q±8«“8ÖU8º‰8}ŸÏ8Yâi8ÖU8ÖU8«“8þí8ÖU8ûô}8eÝ8‰x¼7Yâi8û:§8Yâi8Çî”7/|6„ñ8±TLµÇî”7±TLµ‰x¼7 !ä7„ñ8 !ä7/|6ÖU8 !ä7±TLµ¹8³¶ÿv·ò~¢·ÿv·ý¯H¸x¯4¸ÀÅñ·ÊÇ ¸ÊÇ ¸þÊ·Šm‚¸ºzŒ¸þÊ·ý¯H¸· ¸Ù·\¸· ¸dÆp¸Ýœ ¸Š–¸Ýœ ¸+ᾸüȸKÈ´¸Ýœ ¸üȸ3yñ¸cW縊m‚¸üȸ·Ó¸Ù·\¸|±ª¸ý¯H¸dÆp¸Ù·\¸ÀÅñ·ÀÅñ·x¯4¸þÊ·ò~¢· –'·ÀÅñ·ÀÅñ·±TLµ¹8³¶ÉÒ-8ÖU8Yâi8$'8ÉÒ-8º‰8Q±8ÖU8ÐA8‰x¼7º‰8þí8$'8«“8iƒÅ8}ŸÏ8`½Ù8!ø8iƒÅ8û:§8$'8ûÜã8ûÜã8ÖU8Yâi8ÖU8ÉÒ-8ûô}8ÖU8ûô}8Yâi8ÉÒ-8/|6 !ä7‰x¼7n» 7‰x¼7ª[7ª[7/|6±TLµª[7„ñ8ª[7þÊ·ª[7n» 7±TLµª[7¹8³¶þÊ·þÊ·¹8³¶ò~¢·þÊ·±TLµÇî”7‰x¼7ª[7„ñ8ª[7Çî”7ÉÒ-8‰x¼7ÿv·ÀÅñ· –'·ÊÇ ¸¹8³¶¹8³¶ÀÅñ·/|6þÊ·Çî”7ª[7/|6Çî”7 !ä7eÝ8ÖU8ÐA8‰x¼7º‰8ûô}8ÖU8eÝ8„ñ8ÉÒ-8„ñ8ÉÒ-8„ñ8Çî”7ÐA8Yâi8º‰8þí8iƒÅ8ûÜã8>þí8º"9ûÜã8º"9ûÜã8‚r9BI 9‚r9>þí8Q±8Q±8ûÜã8iƒÅ8ûô}8iƒÅ8iƒÅ8Yâi8ÖU8$'8ÖU8«“8Q±8û:§8«“8û:§8Yâi8 !ä7 !ä7‰x¼7„ñ8¹8³¶/|6ò~¢·ÿv·n» 7eÝ8 –'·n» 7 –'·þÊ·±TLµ –'·ý¯H¸ý¯H¸ý¯H¸üȸ· ¸ÊÇ ¸+ᾸŠ–¸Š–¸KÈ´¸Š–¸ºzŒ¸Ù·\¸x¯4¸Ù·\¸Ù·\¸ºzŒ¸Ýœ ¸Š–¸dÆp¸dÆp¸x¯4¸Ù·\¸ý¯H¸Ù·\¸ÊÇ ¸ÀÅñ·ý¯H¸Ù·\¸· ¸x¯4¸x¯4¸þÊ·ÀÅñ·Çî”7 !ä7Çî”7Çî”7/|6eÝ8Çî”7Çî”7/|6n» 7Çî”7ÉÒ-8‰x¼7ÖU8„ñ8ª[7eÝ8ÐA8„ñ8ÐA8Çî”7‰x¼7ÐA8º‰8Q±8º‰8ûô}8Yâi8eÝ8eÝ8 !ä7‰x¼7 !ä7ûô}8eÝ8‰x¼7Çî”7Çî”7n» 7/|6Çî”7„ñ8„ñ8ÉÒ-8ÉÒ-8ÐA8ÖU8Çî”7‰x¼7ª[7n» 7 !ä7eÝ8 !ä7±TLµ !ä7„ñ8„ñ8 !ä7„ñ8/|6 –'·ò~¢·¹8³¶ÿv·ý¯H¸ÊÇ ¸Š–¸Š–¸|±ª¸dÆp¸ý¯H¸x¯4¸ý¯H¸ý¯H¸KÈ´¸Ýœ ¸Š–¸Š–¸Š–¸Ù·\¸Š–¸+ᾸŠm‚¸Š–¸Ù·\¸Š–¸KÈ´¸Š–¸ò~¢·x¯4¸þÊ·x¯4¸ÀÅñ·Çî”7±TLµª[7eÝ8„ñ8eÝ8‰x¼7‰x¼7eÝ8ÐA8ª[7eÝ8Yâi8º‰8Yâi8û:§8iƒÅ8«“8û:§8eÝ8Yâi8þí8}ŸÏ8`½Ù8$'8}ŸÏ8BI 9¤59‚r9‚r9}ŸÏ8BI 9Ž]9ˆ9}ŸÏ8‚r9¤59`½Ù8û:§8`½Ù8iƒÅ8ÖU8$'8û:§8iƒÅ8ûô}8þí8ûÜã8>þí8ûÜã8!ø8!ø8Ž]9>þí8º"9û:§8Q±8Q±8ÖU8$'8$'8º‰8«“8Q±8Q±8}ŸÏ8º‰8iƒÅ8$'8Q±8Q±8Yâi8û:§8eÝ8ÐA8eÝ8ÉÒ-8‰x¼7Çî”7¹8³¶Çî”7 !ä7 –'·ÀÅñ·ò~¢·ÿv·ÊÇ ¸Š–¸Ù·\¸Š–¸Š–¸dÆp¸üȸüȸâó¹’œû¸·Ó¸3yñ¸¹à¹¦]!¹’œû¸cW總 ¹KÈ´¸+Ᾰ’œû¸·Ó¸KÈ´¸|±ª¸üȸüȸ|±ª¸üȸ·Ó¸KÈ´¸üȸ3yñ¸KÈ´¸47ݸ+Ᾰݜ ¸|±ª¸KÈ´¸Šm‚¸±TLµò~¢·ÊÇ ¸ –'·¹8³¶¹8³¶ –'·ò~¢·ª[7ª[7 –'·þÊ·ÿv·¹8³¶ –'·n» 7‰x¼7eÝ8ÖU8 !ä7 !ä7ÖU8ÐA8‰x¼7ÐA8º‰8ÖU8ÐA8 !ä7‰x¼7Çî”7ÉÒ-8 !ä7eÝ8$'8û:§8Yâi8ÐA8ÖU8eÝ8‰x¼7º‰8Yâi8eÝ8eÝ8ÐA8ÖU8ÐA8ÖU8ª[7ÐA8ÖU8¹8³¶/|6/|6ÿv·±TLµò~¢·n» 7¹8³¶ò~¢·ÊÇ ¸ò~¢·±TLµÙ·\¸Ù·\¸ÿv·Ýœ ¸x¯4¸· ¸ò~¢·x¯4¸ý¯H¸x¯4¸ý¯H¸Ù·\¸Ù·\¸Šm‚¸Ù·\¸x¯4¸ÊÇ ¸x¯4¸· ¸x¯4¸Ù·\¸Ù·\¸x¯4¸· ¸þÊ·/|6 !ä7n» 7Çî”7ÉÒ-8Çî”7 –'·¹8³¶ª[7„ñ8„ñ8ÉÒ-8ÉÒ-8Yâi8º‰8«“8$'8$'8ÖU8Q±8`½Ù8iƒÅ8«“8`½Ù8}ŸÏ8Q±8ûÜã8!ø8Q±8iƒÅ8þí8>þí8$'8Q±8!ø8}ŸÏ8>þí8ˆ9`½Ù8Q±8iƒÅ8û:§8$'8$'8>þí8}ŸÏ8û:§8$'8iƒÅ8$'8Yâi8eÝ8º‰8$'8ÐA8ÐA8ûô}8Yâi8º‰8ûô}8ûô}8„ñ8‰x¼7‰x¼7ª[7±TLµ±TLµª[7n» 7Çî”7‰x¼7/|6ÀÅñ· –'·þÊ·ý¯H¸Ù·\¸dÆp¸Ýœ ¸ò~¢·· ¸Š–¸Ýœ ¸Š–¸KÈ´¸Ýœ ¸x¯4¸x¯4¸· ¸Šm‚¸Šm‚¸|±ª¸+Ᾰx¯4¸Š–¸ºzŒ¸KÈ´¸dÆp¸Š–¸· ¸ÊÇ ¸· ¸ÿv·n» 7 –'·±TLµ«“8±TLµª[7 !ä7 !ä7ÉÒ-8‰x¼7Çî”7±TLµÇî”7ª[7 !ä7/|6„ñ8ª[7/|6/|6±TLµ –'·¹8³¶/|6/|6ª[7n» 7 !ä7¹8³¶ !ä7„ñ8n» 7ÿv·±TLµx¯4¸Š–¸ºzŒ¸ý¯H¸Ù·\¸· ¸· ¸ý¯H¸ÊÇ ¸¹8³¶Ù·\¸Ù·\¸x¯4¸Š–¸Ù·\¸Š–¸Šm‚¸Šm‚¸Ù·\¸ºzŒ¸|±ª¸Ù·\¸x¯4¸· ¸Šm‚¸Š–¸Šm‚¸|±ª¸+Ᾰ+Ᾰ+ᾸcW縊–¸üȸüȸ¹à¹üȸüȸ47ݸ+Ᾰüȸݜ ¸üȸٷ\¸üȸ47ݸŠ–¸Šm‚¸|±ª¸ºzŒ¸+Ᾰݜ ¸ºzŒ¸dÆp¸Šm‚¸ÀÅñ·¹8³¶/|6ò~¢·þÊ· –'·n» 7ÐA8ÐA8Çî”7‰x¼7Çî”7ÖU8ûô}8Yâi8Yâi8«“8$'8ÐA8eÝ8„ñ8º‰8ûÜã8}ŸÏ8}ŸÏ8ûÜã8º"9`½Ù8>þí8!ø8BI 9µ$9Ž]9º"9Ž]9º"9iƒÅ8!ø8ûÜã8º‰8$'8`½Ù8þí8BI 9iä.9BI 9º"9ûÜã8}ŸÏ8iƒÅ8û:§8º"9º"9>þí8>þí8>þí8`½Ù8Q±8Yâi8û:§8«“8ûô}8Yâi8$'8Yâi8 !ä7‰x¼7/|6ò~¢·ÿv·ÊÇ ¸Ù·\¸KÈ´¸·Ó¸|±ª¸Šm‚¸üȸŠ–¸Šm‚¸Ýœ ¸x¯4¸ÊÇ ¸Ù·\¸dÆp¸ºzŒ¸x¯4¸ý¯H¸· ¸ÊÇ ¸/|6ò~¢·þÊ·ÊÇ ¸x¯4¸· ¸±TLµò~¢·ÊÇ ¸x¯4¸x¯4¸ý¯H¸Š–¸Š–¸dÆp¸Ù·\¸KÈ´¸KÈ´¸Ýœ ¸ÀÅñ·Ù·\¸¹8³¶/|6ò~¢·n» 7 –'·ª[7eÝ8Çî”7 –'·¹8³¶/|6/|6n» 7n» 7ª[7ÉÒ-8 !ä7ª[7Çî”7„ñ8‰x¼7 !ä7¹8³¶ÐA8„ñ8ûô}8ÉÒ-8„ñ8eÝ8ûô}8n» 7„ñ8ÉÒ-8n» 7ÐA8±TLµÇî”7ª[7Çî”7Çî”7/|6ò~¢·/|6¹8³¶ò~¢·ÊÇ ¸ò~¢·ò~¢· –'·ÿv·ÊÇ ¸x¯4¸ÿv·· ¸ÀÅñ·ÊÇ ¸ÀÅñ·Ù·\¸Š–¸x¯4¸·Ó¸’œû¸x¯4¸+ᾸdÆp¸dÆp¸Šm‚¸dÆp¸x¯4¸ý¯H¸ÊÇ ¸Ù·\¸ÊÇ ¸Šm‚¸Ù·\¸x¯4¸ÊÇ ¸Šm‚¸x¯4¸x¯4¸ý¯H¸ÀÅñ·ÊÇ ¸ÿv·ÊÇ ¸¹8³¶ÿv·¹8³¶ÊÇ ¸þÊ·/|6ò~¢·±TLµ‰x¼7/|6ª[7ª[7Çî”7„ñ8 !ä7ÖU8ÖU8ÉÒ-8$'8ÖU8‰x¼7Çî”7ª[7ÐA8ûô}8º‰8$'8$'8ÖU8Q±8$'8`½Ù8Q±8û:§8>þí8û:§8!ø8!ø8Q±8iƒÅ8$'8º‰8/|6ª[7 !ä7¹8³¶ª[7‰x¼7þÊ·ÿv·¹8³¶ÀÅñ·Šm‚¸dÆp¸x¯4¸ÊÇ ¸ÊÇ ¸dÆp¸Š–¸Š–¸Š–¸Ù·\¸Šm‚¸ý¯H¸ý¯H¸KÈ´¸Ýœ ¸dÆp¸Ù·\¸Ýœ ¸· ¸ý¯H¸ò~¢·ÊÇ ¸Š–¸dÆp¸x¯4¸Ù·\¸Šm‚¸|±ª¸Š–¸Ù·\¸Ù·\¸Šm‚¸· ¸Š–¸ºzŒ¸· ¸ÊÇ ¸· ¸· ¸ –'·x¯4¸ÊÇ ¸ò~¢· –'·ÊÇ ¸þÊ·¹8³¶ò~¢·±TLµþÊ·ÀÅñ·±TLµª[7ò~¢· –'·ª[7Çî”7n» 7‰x¼7‰x¼7¹8³¶ !ä7‰x¼7eÝ8ÉÒ-8ÖU8ûô}8$'8ÐA8ûô}8ûô}8Q±8}ŸÏ8$'8}ŸÏ8iƒÅ8iƒÅ8þí8û:§8û:§8$'8$'8ÉÒ-8ÖU8eÝ8ÉÒ-8ÐA8‰x¼7eÝ8º‰8ÉÒ-8eÝ8ÖU8$'8ÐA8Çî”7n» 7„ñ8ª[7‰x¼7±TLµn» 7‰x¼7Çî”7¹8³¶ –'·ª[7 –'·ÿv·n» 7/|6¹8³¶/|6þÊ·· ¸x¯4¸þÊ·ò~¢·þÊ· –'·n» 7/|6 !ä7 !ä7Yâi8 !ä7Çî”7‰x¼7ÐA8$'8º‰8«“8iƒÅ88Ê!08f?”8Ç&X8Ae¨8§~™7Ê!08T>8Ê!08U-d7§~™7ü·è7⊷Ü{ƒ´ZM¡¶4ê6ÁÂ7î·'.í·@`2¸ëfZ¸¸tn¸¸tn¸@`2¸ëfZ¸ëfZ¸Å`•¸]D¸·³¸Å`•¸¸tn¸úÐǸúÐǸ¸tn¸Å`•¸Å`•¸'‡©¸ëfZ¸]D¸ËrŸ¸\¶½¸·³¸`Mð¸\¶½¸¤J¹úÐǸÀ+æ¸\¶½¸ËrŸ¸Å`•¸Å`•¸·³¸Å`•¸Å`•¸]D¸'‡©¸²z +¸î·¸tn¸@`2¸²z +¸²z +¸'.í·²z +¸ëfZ¸ëfZ¸²z +¸ZM¡¶4ê6²z +¸î·U-d74ê6§~™7N Á7ÁÂ7'0Š8Ú3l8'0Š8'0Š8˜#€8ˆ D8Ú3l8Ú3l8f?”8“{²8e®Æ8'0Š8˜#€8ˆ D8Ç&X8ˆ D8Ú3l8Ê!08U-d7Ê!08_+8N Á7ü·è7ü·è7_+8§~™7ÁÂ74ê6¸tn¸@`2¸8N Á7Ú3l8Ú3l8Ae¨8&Qž8&Qž8ˆ D8'0Š8Ê!08f?”8þ“¼8“{²8þ“¼8Ú3l8Ú3l8þ“¼8f?”8_+8Ú3l8Ê!08U-d7ÁÂ7ÁÂ7U-d7ÁÂ7N Á74ê6ZM¡¶§~™74ê6ÁÂ7§~™7ZM¡¶Âm·ZM¡¶ZM¡¶î·²z +¸]D¸]D¸·³¸'‡©¸\¶½¸'‡©¸Â ܸ~q ¹Â ܸÀ+游]¹¤J¹~q ¹`Mð¸~q ¹”pú¸·³¸'‡©¸·³¸Å`•¸\¶½¸zíѸà_F¸]D¸Å`•¸Å`•¸'‡©¸\¶½¸ËrŸ¸·³¸'‡©¸'‡©¸¸tn¸]D¸¸tn¸à_F¸à_F¸ëfZ¸'‡©¸·³¸·³¸\¶½¸¸tn¸Å`•¸Å`•¸²z +¸rÅ·'.í·Úh¸à_F¸Úh¸Úh¸ëfZ¸î·rÅ·²z +¸âŠ·Ü{ƒ´Âm·Ü{ƒ´'.í·ÁÂ7§~™7²z +¸Ü{ƒ´î·ÁÂ7î·Âm·'.í·î·²z +¸]D¸à_F¸]D¸ëfZ¸à_F¸¸tn¸à_F¸Úh¸Å`•¸ëfZ¸À+æ¸zíѸúÐǸ·³¸·³¸zíѸ`Mð¸À+æ¸`Mð¸”pú¸”pú¸¤J¹`Mð¸Â ܸ·³¸”pú¸ ›¹¸]¹¤J¹ ›¹Å°¹¸]¹ ›¹‹õ*¹› 0¹Ç ¹Ç ¹ +Þ%¹› 0¹› 0¹ñ…¹‹õ*¹¸]¹¤J¹~q ¹ ›¹ ›¹ ›¹¸]¹¤J¹`Mð¸À+游]¹`Mð¸À+渤J¹úÐǸ·³¸'‡©¸úÐǸúÐǸ·³¸¸]¹'‡©¸ËrŸ¸ëfZ¸ëfZ¸Å`•¸ëfZ¸@`2¸Å`•¸'.í·rÅ·Ü{ƒ´'.í·î·4ê6⊷Ü{ƒ´§~™7ü·è7N Á7ZM¡¶Ç&X8_+8_+8Ú3l8U-d7T>8Ç&X8ZM¡¶ü·è74ê6ü·è7Ü{ƒ´U-d7Ü{ƒ´§~™7N Á7ü·è7U-d7T>8N Á7Ü{ƒ´ÁÂ7î·'.í·Âm·]D¸'‡©¸Å`•¸Å`•¸¸tn¸¸tn¸Å`•¸]D¸¸tn¸ËrŸ¸·³¸”pú¸zíѸ`Mð¸úÐǸ·³¸Å`•¸·³¸¸tn¸Å`•¸¸tn¸ËrŸ¸úÐǸÅ`•¸”pú¸ñ…¹”pú¸ñ…¹~q ¹Â ܸñ…¹À+æ¸\¶½¸\¶½¸·³¸zíѸÅ`•¸Å`•¸84ê6ÁÂ7§~™7ˆ D8Ç&X8Ú3l8'0Š8“{²8þ“¼8˜#€8Ú3l8*ï8 Mù8Ae¨8&Qž8þ“¼8“{²8þ“¼8ÅèÚ8˸9Üó9 Mù8Üó9˸9”å8e®Æ8ÅèÚ8”å8*ï8˸9”å8¯ÊÐ8ÊË9e®Æ8“{²8Ç&X8'0Š8&Qž8¯ÊÐ8Ae¨8Ae¨8'0Š8þ“¼8&Qž8&Qž8þ“¼8Ae¨8&Qž8Ú3l8¯ÊÐ8'0Š8Ê!08U-d7T>8Ê!084ê6ÁÂ7ÁÂ7⊷§~™7Ü{ƒ´ZM¡¶Ü{ƒ´'.í·Úh¸î·Âm·ZM¡¶ÁÂ7ZM¡¶î·âŠ·î·rÅ·ZM¡¶Ü{ƒ´ZM¡¶ZM¡¶Ü{ƒ´T>8ˆ D8Ê!08Ç&X8Ae¨8˜#€8Ae¨8þ“¼8 Mù8e®Æ8ÅèÚ8”å8f?”8e®Æ8ÅèÚ8þ“¼8¯ÊÐ8Ae¨8þ“¼8ÅèÚ8}ß 9Ò4 9Üó9!c*9Üó9°K%9°K%9}ß 99ÊË9°K%9hàC9RÆ>9‰1S9èi]9úúH9MX9MX9²Ál9MX9N9ª“49 {/9‰1S9N9èi]9MX9 {/9 {/9!c*9 {/9}ß 9 Mù8}ß 9˸9¯ÊÐ8þ“¼8Ae¨8Ú3l8ˆ D8ˆ D8ü·è7Ê!08T>8Ê!08_+8Ê!08Ç&X8Ú3l8_+8_+8N Á7N Á7U-d7ˆ D8_+8T>8_+8f?”8T>8N Á7Ç&X8T>8T>8˜#€8'0Š8N Á7T>8T>8U-d7ü·è7ÁÂ7⊷ü·è7Ç&X8Ú3l8˜#€8þ“¼8“{²8ÅèÚ8”å8*ï8þ“¼8“{²8 Mù8”å8*ï8*ï8Üó9ÊË9Üó9}ß 9˸9*ï8ÊË9˸9*ï8˸9Üó9Üó9”å89”å8Ae¨8Ae¨8Ae¨8&Qž8e®Æ8&Qž8Ae¨8Ú3l8þ“¼8ÅèÚ8e®Æ8þ“¼8˜#€8Ú3l8f?”8Ú3l8Ç&X8Ú3l8ˆ D8ˆ D8T>8Ê!08T>8N Á7N Á7ˆ D8Ú3l8Ê!08T>8_+8T>8˜#€8Ê!08Ç&X8Ê!08Âm·ÁÂ7U-d74ê6⊷4ê6ZM¡¶²z +¸Å`•¸@`2¸¸tn¸]D¸rÅ·Úh¸²z +¸rÅ·U-d74ê6ZM¡¶ZM¡¶4ê6rÅ·Ü{ƒ´4ê6§~™7ü·è7N Á7T>8_+8§~™7ˆ D8&Qž8Ê!08ü·è7ü·è7Ê!08Ç&X8Ú3l8Ê!08Ú3l8Ú3l8ˆ D8f?”8e®Æ8Ae¨8Ae¨8f?”8'0Š8˜#€8˜#€8&Qž8f?”8þ“¼8“{²8¯ÊÐ8“{²8Ae¨8Ae¨8˜#€8ˆ D8&Qž8'0Š8ˆ D8Ú3l8“{²8ˆ D8Ú3l8Ç&X8˜#€8'0Š8Ê!08f?”8'0Š8ü·è7ü·è7ÁÂ7Ü{ƒ´ZM¡¶âŠ·î·Ü{ƒ´Ü{ƒ´Ü{ƒ´N Á7⊷Âm·4ê64ê64ê6ÁÂ7ÁÂ7§~™74ê64ê6⊷rÅ·ZM¡¶âŠ·4ê6î·Ü{ƒ´'.í·ZM¡¶²z +¸î·ZM¡¶î·@`2¸Úh¸rÅ·²z +¸à_F¸Âm·Âm·âŠ·4ê64ê6rÅ·U-d7ü·è7Ü{ƒ´§~™74ê6⊷î·âŠ·4ê6Âm·N Á7Ê!08Ú3l8N Á7ˆ D8Ç&X8f?”8'0Š8ˆ D8ˆ D8Ç&X8&Qž8˜#€8˜#€8&Qž8“{²8f?”8'0Š8f?”8”å8Ae¨8”å8*ï8*ï8e®Æ8”å89 Mù8}ß 99Üó9°K%9*ï89ä9ä99ÊË9˸9*ï8ÅèÚ8ÅèÚ8˸9}ß 9}ß 9”å8”å8 Mù8ÅèÚ8“{²8'0Š8þ“¼8f?”8˜#€8&Qž8˜#€8T>8'0Š8'0Š8'0Š8Ç&X8Ú3l8Ú3l8Ç&X8Ç&X8_+8T>8ˆ D8f?”8þ“¼8þ“¼8e®Æ8&Qž8¯ÊÐ8þ“¼8f?”8f?”8þ“¼8Ae¨8'0Š8“{²8ÅèÚ8Ae¨8'0Š8˜#€8Ç&X8'0Š8Ú3l8&Qž8f?”8Ú3l8“{²8¯ÊÐ8'0Š8ÅèÚ8”å8“{²8ÅèÚ8}ß 9*ï8˸9Üó9ä9}ß 9Üó9Ò4 9Ò4 9!c*9½¬99°K%9°K%9!c*9ª“49N9hàC9MX9èi]9úúH9‰1S9‰1S9hàC9N9RÆ>9N9MX9RÆ>9¤g9²Ál9RÆ>9èi]9Çßq9MX9hàC9Ò4 9}ß 9!c*9ª“49°K%9}ß 9ÊË9ÊË9 Mù8˸9e®Æ8e®Æ8ÅèÚ8˸9e®Æ8&Qž8&Qž8e®Æ8f?”8˜#€8f?”8e®Æ8Ae¨8Ae¨8&Qž8'0Š8Ç&X8_+8ü·è7§~™7N Á7Ú3l8˜#€8ü·è7T>8_+8Ü{ƒ´_+8N Á7U-d7ÁÂ7§~™7U-d7U-d7ü·è7U-d74ê6ü·è7§~™7Ç&X8N Á7_+8_+8T>8U-d7_+8N Á7N Á74ê64ê64ê6Âm·U-d7ü·è7ÁÂ7U-d7U-d7ü·è7'0Š8Ê!08f?”8Ú3l8Ú3l8Ê!08f?”8Ae¨8Ae¨8Ae¨8&Qž8Ç&X8˜#€8Ae¨8þ“¼8¯ÊÐ8&Qž8˜#€8e®Æ8e®Æ8þ“¼8˜#€8˜#€8˜#€8'0Š8Ç&X8ˆ D8ˆ D8Ç&X8§~™7N Á7§~™7U-d74ê6Ü{ƒ´U-d7§~™7ZM¡¶U-d7ZM¡¶U-d7N Á7ZM¡¶'.í·'.í·8§~™74ê6§~™7§~™7rÅ·ÁÂ7ZM¡¶rÅ·'.í·Úh¸@`2¸¸tn¸]D¸Å`•¸84ê6ü·è7ü·è7§~™7_+8N Á7T>8U-d7N Á7U-d7§~™7ü·è7N Á7Ü{ƒ´§~™7Ê!08ˆ D8N Á7ü·è7N Á7T>8ü·è7U-d7T>84ê6ÁÂ7ÁÂ7N Á7ÁÂ7'.í·rÅ·ëfZ¸·³¸·³¸Å`•¸úÐǸ¸tn¸·³¸úÐǸúÐǸ¤J¹`Mð¸ñ…¹Ç ¹ +Þ%¹ùX?¹Å°¹ +Þ%¹gÄS¹×¨N¹àü]¹7h¹7h¹ÌTm¹Ãc¹írr¹_°|¹Ãc¹7h¹àü]¹7h¹àü]¹7h¹t‘w¹àü]¹_°|¹â—ˆ¹_°|¹7h¹7h¹àü]¹gÄS¹Ãc¹ùX?¹› 0¹V?:¹¾I¹‹õ*¹¾I¹V?:¹5&5¹×¨N¹¾I¹V?:¹5&5¹ ›¹`Mð¸ñ…¹Ç ¹”pú¸úÐǸ\¶½¸úÐǸÅ`•¸@`2¸¸tn¸Å`•¸úÐǸËrŸ¸]D¸úÐǸ”pú¸`Mð¸zíѸ ›¹`Mð¸¸]¹”pú¸'‡©¸zíѸ\¶½¸úÐǸzíѸ”pú¸ ›¹› 0¹ñ…¹ñ…¹‹õ*¹‹õ*¹¾I¹‹õ*¹V?:¹àü]¹kàX¹×¨N¹Ãc¹7h¹Ö瀹7h¹Ãc¹t‘w¹_°|¹â—ˆ¹Î¸¹hÚ’¹«wƒ¹B(‹¹ +Žš¹1g§¹C¢¹â‹¬¹Õ¤¹ +Žš¹‘¹†I¹â—ˆ¹írr¹írr¹írr¹Ãc¹ÌTm¹àü]¹Ãc¹kàX¹×¨N¹5&5¹¾I¹ÌTm¹gÄS¹V?:¹sD¹5&5¹Ãc¹kàX¹Ç ¹V?:¹gÄS¹‹õ*¹~q ¹Å°¹Å°¹¤J¹¸]¹ ›¹úÐǸ¸]¹¸]¹·³¸zíѸ\¶½¸úÐǸzíѸ·³¸8ü·è74ê6N Á7ZM¡¶'.í·ZM¡¶@`2¸à_F¸²z +¸Âm·'.í·Ü{ƒ´ZM¡¶î·rŷ⊷⊷²z +¸ëfZ¸8'0Š8f?”8T>8'0Š8f?”8˜#€8&Qž8˜#€8'0Š8'0Š8Ç&X8Ú3l8Ae¨8“{²8þ“¼8&Qž8f?”8Ç&X8Ê!08˜#€8Ú3l8Ç&X8ˆ D8Ê!08ÁÂ7U-d7ÁÂ7ZM¡¶ZM¡¶î·Úh¸à_F¸à_F¸Úh¸î·]D¸Úh¸âŠ·î·Âm·âŠ·4ê6N Á7î·²z +¸U-d7§~™74ê6ZM¡¶Úh¸@`2¸@`2¸âŠ·²z +¸Úh¸Âm·@`2¸@`2¸@`2¸@`2¸8N Á7Ç&X8Ê!08T>8ÁÂ7Ê!08_+8ü·è7§~™7˜#€8N Á7_+8_+8ü·è7N Á7Ú3l8Ç&X8&Qž8f?”8_+8N Á7U-d7U-d7T>8ü·è7N Á7ˆ D8N Á7Ü{ƒ´T>8U-d7§~™7⊷ÁÂ7'.í·âŠ·Âm·î·ZM¡¶î·]D¸²z +¸âŠ·Úh¸rÅ·4ê6ÁÂ7⊷⊷§~™7Ü{ƒ´U-d7U-d7⊷Úh¸Úh¸rÅ·î·ÁÂ7⊷Ü{ƒ´âŠ·ü·è7N Á74ê6ÁÂ7ü·è7T>8ü·è7ü·è7_+8§~™7ÁÂ7Ê!08Ú3l8Ú3l8˜#€8þ“¼8'0Š8˜#€8Ç&X8ˆ D8'0Š8Ae¨8þ“¼8“{²8“{²8”å8¯ÊÐ8ÊË9°K%9!c*9˸9ä9Ò4 9˸9 Mù8ä9Üó9ä9ÊË9ä9}ß 9ÊË9”å8 Mù8¯ÊÐ8þ“¼8 Mù8ÊË9”å8Üó9 Mù8}ß 9}ß 9“{²8&Qž8þ“¼8Ú3l8“{²8“{²8ÅèÚ8'0Š8ü·è7T>8ü·è7T>8N Á7§~™74ê6ÁÂ74ê6U-d7ZM¡¶4ê6'.í·à_F¸î·'.í·@`2¸²z +¸²z +¸²z +¸²z +¸âŠ·ëfZ¸à_F¸¸tn¸à_F¸ëfZ¸ëfZ¸ëfZ¸ëfZ¸²z +¸²z +¸²z +¸'.í·âŠ·ZM¡¶N Á7N Á7ÁÂ7§~™7U-d7Ê!08_+8_+8Ê!08Ç&X8Ê!08˜#€8Ú3l8“{²8ÅèÚ8”å8*ï8*ï89}ß 9RÆ>9Üó9}ß 9 {/9!c*9°K%9ä9}ß 9ä9ÊË99ä9½¬99RÆ>99 {/99˸9ä9ÊË9Üó9 Mù8”å8”å8“{²8ÅèÚ8*ï8e®Æ8ÅèÚ8“{²8f?”8þ“¼8¯ÊÐ8˜#€8'0Š8_+8˜#€8f?”8ˆ D8N Á74ê64ê64ê6§~™7ÁÂ7_+8T>8§~™7⊷ÁÂ7⊷@`2¸Ü{ƒ´ZM¡¶rÅ·ZM¡¶rÅ·²z +¸Âm·à_F¸'.í·rÅ·²z +¸à_F¸à_F¸î·Å`•¸ËrŸ¸Å`•¸]D¸Å`•¸@`2¸'.í·î·'.í·Úh¸'‡©¸·³¸'‡©¸·³¸¸tn¸¸tn¸¸tn¸Úh¸¸tn¸²z +¸@`2¸¸tn¸ëfZ¸î·Âm·²z +¸rŷ⊷rÅ·rÅ·î·²z +¸4ê6î·ÁÂ7ÁÂ7²z +¸Âm·î·ZM¡¶4ê6N Á7N Á7N Á7§~™7N Á7ÁÂ7N Á7ü·è7Ê!08§~™7_+8ZM¡¶§~™7_+8ü·è7T>8ü·è7§~™7T>8T>8U-d7Ç&X8ü·è7N Á7ü·è7U-d7U-d7U-d74ê6Âm·4ê6ZM¡¶'.í·rÅ·rÅ·Âm·î·'.í·'.í·Úh¸'.í·'.í·U-d7rŷ⊷ZM¡¶âŠ·Âm·rÅ·4ê6Úh¸à_F¸@`2¸'.í·'.í·ZM¡¶²z +¸8_+8U-d7ZM¡¶N Á7⊷ZM¡¶§~™7T>8_+8Ç&X8Ç&X8Ae¨8f?”8'0Š8˜#€8˜#€8'0Š8ˆ D8N Á7ˆ D8Ê!08U-d7§~™7§~™7ÁÂ7U-d7N Á7U-d7ÁÂ74ê6Ü{ƒ´rÅ·Âm·Ü{ƒ´²z +¸ëfZ¸²z +¸@`2¸Å`•¸Úh¸Å`•¸'‡©¸Â ܸ¤J¹~q ¹\¶½¸zíѸ ܸÀ+æ¸ ›¹·³¸8ZM¡¶4ê6ÁÂ7ü·è7ÁÂ7T>8U-d7Ü{ƒ´U-d7Ü{ƒ´_+8N Á7U-d7ˆ D8î·N Á7Ú3l8ü·è7Ê!08Ae¨8'0Š8'0Š8Ç&X8þ“¼8e®Æ8f?”8Ú3l8'0Š8&Qž8ˆ D8U-d7U-d7ZM¡¶âŠ·²z +¸Ü{ƒ´Ü{ƒ´rÅ·ZM¡¶ZM¡¶@`2¸²z +¸4ê64ê6ZM¡¶Ü{ƒ´rÅ·Úh¸î·âŠ·Úh¸Úh¸²z +¸Úh¸'.í·rÅ·î·@`2¸rÅ·²z +¸î·Úh¸²z +¸'.í·à_F¸'.í·Úh¸@`2¸@`2¸²z +¸8Ê!08Ê!08Ú3l8˜#€8_+8ZM¡¶T>8T>8§~™7N Á7N Á7Ç&X8U-d7ÁÂ7ZM¡¶âŠ·rŷ⊷'.í·Úh¸à_F¸úÐǸ]D¸@`2¸'‡©¸Å`•¸8Ú3l8Ê!08Ê!08Ú3l8Ü{ƒ´Ê!08Ê!08T>8ˆ D8ü·è7_+8_+8§~™7ˆ D8T>8Ú3l8_+8ü·è7Ü{ƒ´'.í·î·Âm·@`2¸Å`•¸·³¸²z +¸à_F¸¸tn¸Å`•¸ËrŸ¸úÐǸËrŸ¸à_F¸Å`•¸ËrŸ¸¸tn¸·³¸]D¸¸tn¸¸tn¸·³¸ëfZ¸8Ü{ƒ´U-d7_+8T>8T>8T>8'0Š8&Qž8ˆ D8ˆ D8Ae¨8˜#€8f?”8˜#€8Ç&X8Ae¨8f?”8'0Š8Ú3l8f?”8Ae¨8”å8Ae¨8ˆ D8˜#€8¯ÊÐ8˜#€8Ç&X8Ú3l8˜#€8'0Š8Ç&X8ˆ D8˜#€8˜#€8Ê!08_+8“{²8ˆ D8N Á7U-d7Ê!08ZM¡¶ZM¡¶N Á7T>8U-d7ˆ D8U-d7Âm·²z +¸ZM¡¶Âm·²z +¸î·'.í·ëfZ¸à_F¸]D¸8ÁÂ7ÁÂ7U-d7U-d7U-d74ê6Úh¸Âm·'.í·²z +¸ëfZ¸à_F¸ëfZ¸À+æ¸À+æ¸zíѸÀ+æ¸Å`•¸úÐǸúÐǸ'‡©¸zíѸÅ`•¸Å`•¸ëfZ¸¸tn¸'‡©¸¸tn¸¸tn¸ËrŸ¸à_F¸Å`•¸Å`•¸¸tn¸Å`•¸à_F¸²z +¸ëfZ¸ëfZ¸@`2¸à_F¸²z +¸ëfZ¸@`2¸ëfZ¸à_F¸²z +¸'.í·î·²z +¸Úh¸²z +¸@`2¸î·î·ÁÂ7Ê!08Ê!08ˆ D8'0Š8f?”8&Qž8Ae¨8“{²8þ“¼8&Qž8“{²8Ç&X8˜#€8'0Š8&Qž8'0Š8¯ÊÐ8Ç&X8¯ÊÐ8þ“¼8e®Æ8&Qž8*ï8ÅèÚ8ÅèÚ8*ï8ÊË9Ae¨8Ú3l8&Qž8&Qž8˸9¯ÊÐ8e®Æ8e®Æ8˜#€8&Qž8f?”8&Qž8&Qž8Ç&X8ˆ D8_+8Ú3l8T>8T>8ü·è7ü·è7ÁÂ7U-d7T>8U-d7§~™74ê64ê6_+8Ê!08˜#€8_+8Ç&X8˜#€8Ú3l8'0Š8Ê!08˜#€8“{²8Ê!08˜#€8&Qž8ˆ D8ˆ D8ˆ D8T>8Ê!08T>8§~™7U-d7ü·è7U-d7U-d7U-d7N Á7T>8Ú3l8Ê!08_+8ˆ D8_+8Ç&X8ˆ D8Ê!08U-d7T>8T>8T>8Ç&X8ˆ D8Ú3l8_+8'0Š8ˆ D8Ê!08Ç&X8˜#€8Ú3l8'0Š8þ“¼8ÅèÚ8˜#€8'0Š8Ae¨8Ç&X8Ae¨8“{²8˸9˸99Üó9 Mù8Ae¨8“{²8”å8¯ÊÐ8}ß 9°K%9˸9}ß 9Ò4 9°K%9ÊË9Ò4 9Üó9Üó9”å8¯ÊÐ8ÅèÚ8 Mù8ÊË9ÅèÚ8Ae¨8Ê!08Ç&X8Ê!08Ç&X8ü·è7ü·è7Ç&X8N Á7Âm·Âm·Âm·²z +¸²z +¸Úh¸Ü{ƒ´Âm·rÅ·'.í·ZM¡¶âŠ·âŠ·²z +¸Úh¸'.í·rÅ·Úh¸Úh¸ëfZ¸Úh¸8Ú3l8˜#€8ü·è7_+8§~™7Ú3l8T>8ZM¡¶4ê64ê6ÁÂ7ü·è7T>8N Á7'.í·Âm·4ê6U-d7§~™7'.í·âŠ·âŠ·Úh¸'.í·'.í·@`2¸ëfZ¸²z +¸Âm·ëfZ¸\¶½¸à_F¸Å`•¸8Ê!08ˆ D8T>8T>8Ú3l8T>8Ê!08Ç&X8Ç&X84ê6ÁÂ7N Á7U-d7§~™7Ü{ƒ´ÁÂ7U-d7ZM¡¶âŠ·î·rÅ·Ü{ƒ´ZM¡¶î·'.í·rÅ·²z +¸ZM¡¶4ê6Ü{ƒ´ZM¡¶à_F¸4ê6⊷²z +¸à_F¸'.í·rÅ·à_F¸ëfZ¸Úh¸Úh¸ëfZ¸²z +¸rŷ⊷U-d7Ü{ƒ´'.í·î·ÁÂ7ÁÂ74ê6N Á7rÅ·î·§~™7N Á7§~™7_+8T>8_+8_+8Ê!08_+8ü·è7N Á7N Á7˜#€8ü·è7Ê!08T>8N Á7Ê!08ˆ D8Ç&X8ˆ D8T>8T>8_+8˜#€8Ç&X8˜#€8f?”8&Qž8˜#€8˜#€8Ê!08'0Š8˜#€8f?”8“{²8&Qž8“{²8&Qž8˜#€8_+8Ê!08_+8&Qž8Ú3l8ˆ D8f?”8Ê!08Ê!08Ç&X8ˆ D8Ú3l8Ú3l8ˆ D8N Á7Ê!08Ç&X8T>8ü·è7N Á7N Á7U-d7ZM¡¶Âm·Úh¸'.í·²z +¸Úh¸@`2¸ëfZ¸î·²z +¸Úh¸rŷ⊷⊷@`2¸]D¸Úh¸²z +¸rÅ·²z +¸à_F¸ëfZ¸Úh¸Úh¸'.í·rÅ·¸tn¸'.í·@`2¸rÅ·Úh¸8ˆ D8˜#€8ÅèÚ8 Mù8˸9 Mù89Ò4 99°K%9°K%9°K%9ä9úúH9Üó99Ò4 9Ò4 9 {/9°K%9˸999ª“49hàC9Üó9!c*9!c*9ä9}ß 9}ß 9 Mù8ÊË9°K%9˸9”å8Üó9Ae¨8¯ÊÐ8ÅèÚ8“{²8ˆ D8_+8_+8Ê!08N Á7'0Š8ü·è7_+8§~™7_+8_+8N Á7U-d7T>8N Á7_+8_+8Ê!08ü·è7ˆ D8N Á7⊷rÅ·§~™7N Á7ÁÂ7Ü{ƒ´²z +¸ZM¡¶Âm·@`2¸âŠ·¸tn¸²z +¸Å`•¸rÅ·î·rÅ·ZM¡¶î·î·âŠ·'.í·²z +¸ZM¡¶'.í·î·rÅ·'.í·²z +¸rÅ·'.í·î·Úh¸rÅ·à_F¸rÅ·²z +¸'.í·ZM¡¶âŠ·U-d7U-d7ZM¡¶ZM¡¶4ê6_+8ÁÂ7Ü{ƒ´ÁÂ7rŷ⊷4ê6Âm·âŠ·²z +¸î·ZM¡¶ÁÂ7î·âŠ·âŠ·Âm·'.í·N Á7ü·è7Ü{ƒ´4ê6⊷'.í·rŷ⊷ÁÂ7'.í·'.í·8ˆ D8Ç&X8˜#€8e®Æ8f?”8˜#€8˜#€8&Qž8'0Š8'0Š8”å8e®Æ8þ“¼8ÅèÚ8“{²8e®Æ8f?”8˜#€8&Qž8˜#€8f?”8f?”8f?”8Ú3l8“{²8þ“¼8Ae¨8f?”8ˆ D8U-d74ê6U-d7ÁÂ7rÅ·ZM¡¶ëfZ¸à_F¸ëfZ¸ëfZ¸Å`•¸ËrŸ¸]D¸@`2¸¸tn¸Úh¸'‡©¸]D¸Å`•¸\¶½¸Å`•¸ëfZ¸Å`•¸Å`•¸]D¸@`2¸`Mð¸Â ܸúÐǸzíѸ\¶½¸·³¸Å`•¸zíѸà_F¸ëfZ¸¸tn¸Å`•¸'.í·]D¸î·Úh¸²z +¸'.í·rÅ·U-d7ÁÂ74ê6ÁÂ7Âm·4ê6Âm·N Á7ü·è7_+84ê6ZM¡¶ü·è7N Á7ÁÂ7ü·è7&Qž8ˆ D8þ“¼8”å8 Mù8˸9ÅèÚ8ÊË9ÊË9ª“49}ß 9ÊË9Ò4 99*ï8”å8*ï8*ï8e®Æ8e®Æ8ÅèÚ8*ï8 Mù8}ß 9”å8Üó9ä9”å8þ“¼8e®Æ8þ“¼8“{²8Ê!08ü·è7N Á7U-d7U-d7U-d7Âm·Ü{ƒ´N Á7ZM¡¶'.í·Ü{ƒ´Ü{ƒ´rŷ⊷à_F¸rÅ·à_F¸âŠ·î·@`2¸rÅ·rÅ·ZM¡¶î·Ü{ƒ´î·ZM¡¶§~™7⊷Âm·ZM¡¶Úh¸²z +¸ëfZ¸²z +¸Úh¸@`2¸@`2¸ëfZ¸à_F¸'.í·²z +¸ÁÂ7'.í·Âm·âŠ·âŠ·4ê6ÁÂ7U-d7ü·è7U-d7N Á7Ê!08ü·è7Ê!08ˆ D8f?”8e®Æ8&Qž8¯ÊÐ8”å8“{²8ÊË9ÅèÚ8&Qž8¯ÊÐ8Üó9ÅèÚ8&Qž8&Qž8e®Æ8&Qž8ÅèÚ8þ“¼8þ“¼8Ú3l8˜#€8˜#€8˜#€8“{²8T>8˜#€8Ú3l8T>8Ç&X8Ç&X8U-d7ÁÂ7⊷⊷'.í·rÅ·'.í·²z +¸@`2¸²z +¸rÅ·Úh¸ëfZ¸84ê6ZM¡¶ÁÂ7î·4ê6Ü{ƒ´4ê6rÅ·î·î·rÅ·@`2¸ëfZ¸²z +¸ËrŸ¸Å`•¸Úh¸à_F¸¸tn¸Å`•¸Å`•¸Å`•¸Úh¸î·à_F¸Úh¸ëfZ¸²z +¸ëfZ¸¸tn¸ËrŸ¸à_F¸Å`•¸'‡©¸zíѸ'‡©¸ËrŸ¸Å`•¸ËrŸ¸ËrŸ¸Å`•¸Å`•¸à_F¸à_F¸²z +¸ëfZ¸à_F¸Å`•¸¸tn¸Å`•¸8Ê!08f?”8þ“¼8“{²8”å8*ï8˸9˸9Ò4 9”å8¯ÊÐ8°K%9}ß 9°K%9ª“49ÊË9Ò4 99°K%9°K%9Ò4 9Ò4 9˸9}ß 9ä9°K%9ª“49ä9Üó9 Mù8°K%9ä9¯ÊÐ8ÊË9¯ÊÐ8 Mù8ÊË9 Mù8þ“¼8'0Š8e®Æ8“{²8˜#€8Ú3l8Ú3l8ˆ D8ˆ D8þ“¼8f?”8ˆ D8_+8'0Š8Ú3l8˜#€8ˆ D8Ú3l8Ê!08Ú3l8§~™7T>8˜#€8Ú3l8T>8N Á7Ê!08ˆ D8ˆ D8N Á7˜#€8f?”8˜#€8ˆ D8T>8ˆ D8Ê!08ÁÂ74ê6N Á7Ü{ƒ´ZM¡¶Âm·'.í·î·Âm·ÁÂ7_+8ˆ D8N Á7U-d7ü·è7Ê!08N Á7ÁÂ7⊷4ê6Ü{ƒ´Ê!08N Á7rÅ·ÁÂ7N Á7N Á7Ç&X8ü·è7U-d7§~™7U-d7ÁÂ7T>8_+8Ê!08Ê!08˜#€8f?”8Ê!08Ú3l8&Qž8˜#€8N Á7Ê!08Ê!08Ê!08Ê!08U-d7ü·è7ÁÂ7Ü{ƒ´Âm·N Á7N Á7U-d74ê6rÅ·ëfZ¸@`2¸Úh¸'.í·'.í·Úh¸@`2¸]D¸¸tn¸Å`•¸Å`•¸·³¸ëfZ¸¸tn¸8Ü{ƒ´§~™74ê6ZM¡¶T>8Ú3l8T>8Ê!08N Á7ÁÂ7ZM¡¶ZM¡¶à_F¸Âm·²z +¸ëfZ¸'.í·'.í·@`2¸Úh¸ëfZ¸Å`•¸'.í·ëfZ¸'‡©¸ËrŸ¸Â ܸúÐǸ ܸ`Mð¸úÐǸ\¶½¸”pú¸8ˆ D8˜#€8ˆ D8Ê!08Ê!08Ê!08ˆ D8§~™7Ç&X8T>8Ê!08_+8_+8Ê!084ê6§~™7Ü{ƒ´4ê6ZM¡¶4ê6Ü{ƒ´ZM¡¶Ü{ƒ´rÅ·ëfZ¸à_F¸Úh¸¸tn¸²z +¸ëfZ¸²z +¸à_F¸@`2¸@`2¸Å`•¸ëfZ¸]D¸ËrŸ¸'‡©¸'‡©¸·³¸À+æ¸\¶½¸zíѸ”pú¸¤J¹·³¸”pú¸À+æ¸úÐǸúÐǸzíѸ\¶½¸À+æ¸\¶½¸”pú¸·³¸¤J¹À+渷³¸·³¸Å`•¸\¶½¸úÐǸ¸tn¸·³¸ËrŸ¸\¶½¸·³¸·³¸Å`•¸Å`•¸'‡©¸ëfZ¸¸tn¸rÅ·î·î·rÅ·T>8ZM¡¶U-d7ü·è7˜#€8Ê!08T>8˜#€8'0Š8Ç&X8˜#€8Ú3l8Ç&X8˜#€8“{²8“{²8Ae¨8”å8*ï8¯ÊÐ8þ“¼8”å8ÊË9”å8*ï8”å8'0Š8˜#€8e®Æ8˸9þ“¼8˜#€8¯ÊÐ8þ“¼8Ae¨8'0Š8f?”8Ç&X84ê6U-d7ÁÂ7ÁÂ7ZM¡¶'.í·âŠ·rÅ·4ê6⊷4ê6ÁÂ7T>8U-d7ÁÂ7U-d7Úh¸Úh¸à_F¸ëfZ¸Å`•¸¸tn¸à_F¸8'0Š8_+8ˆ D8Ú3l8_+8T>8T>8N Á7ZM¡¶4ê6§~™7_+8§~™7ü·è7T>8ˆ D8T>8§~™7§~™7T>8T>8ÁÂ7ÁÂ7ü·è7Ç&X8_+84ê6ZM¡¶§~™7ÁÂ7N Á7ZM¡¶ÁÂ7î·âŠ·'.í·Úh¸¸tn¸ëfZ¸à_F¸Úh¸]D¸²z +¸à_F¸Úh¸'.í·à_F¸Úh¸Âm·î·@`2¸·³¸zíѸÅ`•¸·³¸À+æ¸zíѸ·³¸ëfZ¸¸tn¸¸tn¸Å`•¸ËrŸ¸Å`•¸]D¸Å`•¸zíѸ\¶½¸·³¸úÐǸÀ+æ¸úÐǸ·³¸zíѸ\¶½¸Å`•¸\¶½¸Å`•¸ËrŸ¸ËrŸ¸¸tn¸Úh¸Úh¸rŷ⊷'.í·Úh¸î·î·@`2¸âŠ·âŠ·î·Âm·rÅ·²z +¸î·²z +¸ëfZ¸Úh¸²z +¸²z +¸î·Âm·²z +¸rŷ⊷⊷Âm·ZM¡¶Ü{ƒ´Ü{ƒ´Âm·ÁÂ7ZM¡¶Âm·rÅ·î·î·4ê64ê6rÅ·Âm·âŠ·U-d7U-d7Âm·rÅ·Âm·Âm·î·rÅ·4ê6ZM¡¶ZM¡¶âŠ·ëfZ¸²z +¸Å`•¸¸tn¸@`2¸Å`•¸Å`•¸rÅ·Ü{ƒ´4ê6T>8ˆ D8ÁÂ7Âm·î·rÅ·î·à_F¸¸tn¸²z +¸'.í·@`2¸¸tn¸'.í·î·@`2¸rÅ·@`2¸ZM¡¶ˆ D8ü·è7Ê!08§~™7N Á7ZM¡¶U-d74ê6ÁÂ7N Á7ˆ D8Ç&X8'0Š8˜#€8˜#€8_+8T>8f?”8&Qž8¯ÊÐ8e®Æ8“{²8*ï8}ß 9Üó9ÊË9Ò4 9½¬99hàC9ª“49ä9Ò4 9RÆ>9MX9MX9Çßq9 |9À†b9À†b9èi]9°K%9RÆ>9À†b9èi]9MX9èi]9hàC9úúH9hàC9RÆ>9N9N9½¬99½¬99N9RÆ>9RÆ>9MX9hàC9ª“49‰1S9N9hàC9 {/9!c*9ä9Üó9Üó9*ï8*ï8}ß 9e®Æ8}ß 9”å8'0Š8Ae¨8˜#€8Ae¨8f?”8Ç&X8'0Š8Ê!08Ú3l8Ç&X8T>8Ç&X8N Á7U-d7T>8_+8Ê!08§~™7U-d7§~™7ÁÂ7ÁÂ7Ú3l8Ç&X8Ú3l8Ú3l8ÅèÚ8¯ÊÐ8&Qž8e®Æ8ÊË9¯ÊÐ8*ï8¯ÊÐ8*ï8“{²8ÅèÚ8”å8”å8”å8ÊË9*ï8ÊË9 Mù8Üó9ÅèÚ8”å8°K%9°K%9ÊË9ÊË9 Mù8}ß 9}ß 9°K%9”å8*ï8e®Æ8˸9¯ÊÐ8¯ÊÐ8”å8¯ÊÐ8ÅèÚ8”å8e®Æ8ÅèÚ8*ï8¯ÊÐ8”å8ÅèÚ8˸9*ï8*ï8”å8þ“¼8”å8“{²8þ“¼8 Mù8Ae¨8þ“¼8 Mù8þ“¼8Ae¨8ÅèÚ8þ“¼8ˆ D8Ae¨8e®Æ8e®Æ8þ“¼8Ú3l8'0Š8þ“¼8“{²8§~™7Ê!08_+8Ê!08Ê!08e®Æ8“{²8Ú3l8þ“¼8Ae¨8Ae¨8Ae¨8”å8Ae¨8Ú3l8f?”8'0Š8'0Š8&Qž8'0Š8“{²8Ae¨8&Qž8þ“¼8e®Æ8”å8˸9”å8”å8e®Æ8¯ÊÐ8 Mù8ÅèÚ8*ï8¯ÊÐ8”å8˸9*ï8*ï8*ï8Üó9Üó9˸9 Mù8ÅèÚ8*ï89°K%9ä99ä9}ß 9˸9*ï8*ï8*ï8*ï8˸9þ“¼8*ï8ÊË9Üó9˸9}ß 9Üó9Üó9ÅèÚ8*ï8 Mù8}ß 9}ß 9˸9”å8˸9ÊË9 Mù8¯ÊÐ8*ï8ÅèÚ8'0Š8þ“¼8ÅèÚ8Ae¨8f?”8¯ÊÐ8þ“¼8&Qž8f?”8e®Æ8Ç&X8_+8˜#€8_+8&Qž8'0Š8f?”8'0Š8Ç&X8Ê!08Ú3l8T>8f?”8˜#€8Ú3l8'0Š8“{²8þ“¼8'0Š8'0Š8ˆ D8˜#€8ÅèÚ8'0Š8&Qž8&Qž8˜#€8f?”8“{²8ÅèÚ8ÊË9e®Æ8¯ÊÐ8ÅèÚ8'0Š8”å8˸9}ß 9*ï8*ï8ä9Üó9ä99ä9Ò4 9!c*9ä99°K%9½¬99½¬99!c*9 {/9°K%9ÊË99˸9”å8 Mù8Ae¨8'0Š8Ç&X8Ú3l8Ç&X8Ç&X8Ú3l8'0Š8ü·è7ˆ D8Ç&X8˜#€8'0Š8f?”8f?”8ˆ D8Ú3l8Ç&X8U-d7ü·è7T>8T>8Ê!08_+8ˆ D8ÁÂ7ÁÂ7N Á7U-d7Ü{ƒ´U-d7î·âŠ·Âm·Ü{ƒ´U-d7²z +¸@`2¸¸tn¸Å`•¸@`2¸@`2¸ëfZ¸]D¸'‡©¸ëfZ¸Úh¸à_F¸ëfZ¸ËrŸ¸\¶½¸ËrŸ¸zíѸÀ+渤J¹úÐǸ'‡©¸·³¸zíѸ'‡©¸zíѸ·³¸à_F¸'‡©¸\¶½¸'‡©¸Å`•¸ëfZ¸'.í·Úh¸âŠ·'.í·âŠ·à_F¸@`2¸²z +¸²z +¸Ü{ƒ´U-d74ê6⊷U-d7_+8'0Š8˜#€8f?”8T>8_+8'0Š8U-d7Ç&X8Ú3l8ˆ D8Ç&X8Ú3l8_+8Ê!08N Á74ê6§~™7§~™7ˆ D8_+8§~™7ZM¡¶âŠ·î·'.í·Úh¸Úh¸Úh¸@`2¸à_F¸Úh¸²z +¸Âm·î·'.í·@`2¸î·¸tn¸ëfZ¸'‡©¸\¶½¸À+渔pú¸~q ¹`Mð¸¸]¹”pú¸ ›¹ ›¹¤J¹¤J¹”pú¸ ›¹~q ¹ñ…¹Å°¹5&5¹ ›¹ +Þ%¹5&5¹Å°¹~q ¹ùX?¹Ç ¹ñ…¹ +Þ%¹~q ¹ ›¹~q ¹ñ…¹ñ…¹Å°¹”pú¸`Mð¸À+æ¸\¶½¸úÐǸ”pú¸À+æ¸\¶½¸\¶½¸ËrŸ¸\¶½¸Å`•¸ËrŸ¸Å`•¸8N Á7T>8⊷Ü{ƒ´§~™7ü·è7ü·è7N Á7ˆ D8ü·è7ü·è74ê6ü·è7ü·è7_+8⊷T>8§~™7N Á7ZM¡¶²z +¸@`2¸ZM¡¶Úh¸]D¸·³¸ëfZ¸¸tn¸Úh¸¸tn¸ËrŸ¸@`2¸À+æ¸\¶½¸À+æ¸À+æ¸zíѸúÐǸúÐǸ ܸËrŸ¸¸tn¸¸tn¸Å`•¸8§~™7Ê!08Ç&X8˜#€8Ç&X8Ê!08ü·è7§~™74ê6§~™7⊷²z +¸'.í·²z +¸@`2¸¸tn¸'.í·@`2¸à_F¸@`2¸@`2¸Å`•¸¸tn¸ËrŸ¸²z +¸8ü·è7§~™7§~™74ê6ÁÂ7Ü{ƒ´ˆ D8T>8Ê!08Ç&X8'0Š8“{²8Ç&X8f?”8“{²8*ï8¯ÊÐ8*ï8ÊË9ä9¯ÊÐ8˸9!c*9˸9*ï8 Mù8*ï8}ß 9}ß 9“{²8˸9ÊË9ä9”å8°K%9Üó9}ß 9¯ÊÐ8“{²8“{²8”å8”å8ÅèÚ8Ae¨8“{²8*ï8“{²8ÅèÚ8ÅèÚ8e®Æ8þ“¼8*ï8*ï8ÅèÚ8'0Š8_+8T>8ZM¡¶U-d7N Á7ü·è7§~™7ÁÂ7ÁÂ7ÁÂ7ZM¡¶'.í·§~™74ê6ÁÂ7ÁÂ7_+8N Á7ü·è7§~™7U-d7§~™7§~™7ü·è7§~™7_+8ˆ D8_+8N Á7Ç&X8Ü{ƒ´T>8ÁÂ7N Á7ü·è7N Á7ˆ D8Ç&X8Ç&X8f?”8f?”8f?”8˜#€8Ç&X8Ú3l8þ“¼8e®Æ8ÅèÚ8˸9˸9ÅèÚ8˸9ÊË9˸9 Mù8Üó9ÊË9°K%9Ò4 9}ß 9ä9ä9ª“49úúH9MX9úúH9MX9èi]9‰1S9ª“49MX9!c*9Üó9ÅèÚ8”å8ÅèÚ8ÊË9”å8”å8”å8ÊË9*ï8 Mù8˸9}ß 9}ß 9}ß 9}ß 9 Mù8˸9'0Š8&Qž8“{²8Ae¨8&Qž8e®Æ8 Mù8¯ÊÐ8¯ÊÐ8˸9ÅèÚ8ˆ D8¯ÊÐ8f?”8f?”8Ae¨8þ“¼8Ae¨8Ae¨8e®Æ8¯ÊÐ8e®Æ8e®Æ8þ“¼8f?”8&Qž8“{²8þ“¼8f?”8f?”8Ú3l8f?”8'0Š8'0Š8'0Š8¯ÊÐ8Ae¨8Ae¨8e®Æ8'0Š8f?”8&Qž8&Qž8e®Æ8*ï8'0Š8'0Š8“{²8¯ÊÐ8e®Æ8”å8¯ÊÐ8þ“¼8ÅèÚ8¯ÊÐ8”å8 Mù8”å8þ“¼8ÊË9 Mù8*ï8}ß 9°K%9½¬99 {/9°K%99°K%9N9hàC9RÆ>9ª“49RÆ>9úúH9RÆ>9½¬99ª“49ª“49Ò4 9ª“49 {/9ä99}ß 9ä9ä9!c*9ÊË9˸9 Mù8“{²8e®Æ8”å8Ae¨8Ae¨8Ae¨8þ“¼8f?”8&Qž8Ê!08'0Š8f?”8U-d7ZM¡¶Ê!08⊷ü·è7§~™7N Á7ÁÂ7rÅ·î·âŠ·'.í·Å`•¸Å`•¸ëfZ¸Úh¸à_F¸î·'.í·'.í·âŠ·4ê6⊷ZM¡¶ZM¡¶'.í·'.í·²z +¸âŠ·'.í·Úh¸à_F¸î·'.í·4ê6ëfZ¸à_F¸ëfZ¸Úh¸'.í·Ü{ƒ´Úh¸à_F¸Úh¸Âm·âŠ·Ü{ƒ´Âm·Ü{ƒ´4ê6Ü{ƒ´ÁÂ7ü·è7ü·è7Ú3l8_+8_+8ü·è7Ê!08'0Š8'0Š8ÅèÚ8“{²8Ae¨8¯ÊÐ8e®Æ8”å8“{²8e®Æ8ÅèÚ8þ“¼8|Pd|1|24600|2013-282T15:32:11.397 ¹0Ÿ7[…o7[…o7D·3<˜·ôˆÏ4ÊÈ¿·šsç·k¸ Þ‰¸ÊÈ¿·Å›¸%£¸$ƒW¸áþ¸ Þ‰¸ Þ‰¸ Þ‰¸$ƒW¸k¸ Þ‰¸$ƒW¸ßµä¸]¹]¹ Þ‰¸*)²¸–Ú¸Û[Ƹ]¹V¢¹^ʹ¶ ¹]¹>úø¸ßµä¸]¹ßµä¸–Ú¸C×ڸ`ß¹„Q/¹¶ ¹>úø¸õ¹–Ú¸4퓸騸–ڸ騸>úø¸xи¶ ¹]¹C×î¸*)²¸ Þ‰¸4퓸4퓸k¸ Þ‰¸xи„A¼¸]¹áþ¸k¸„A¼¸xи Þ‰¸4퓸áþ¸%£¸4퓸áþ¸ Þ‰¸$ƒW¸ Þ‰¸}C¸Û[Ƹ*)²¸k¸áþ¸„A¼¸áþ¸áþ¸>úø¸xиxи*)²¸é¨¸4퓸 Þ‰¸ Þ‰¸ ~/¸Å›¸Å›¸xи Þ‰¸é¨¸4퓸~ˆ¸ ~/¸ Þ‰¸ Þ‰¸xи„A¼¸Û[Ƹ*)²¸é¨¸ßµä¸*)²¸*)²¸ßµä¸xи騸騸*)²¸$ƒW¸}C¸ Þ‰¸é¨¸é¨¸Û[Ƹ„A¼¸ßµä¸¶ ¹õ¹>úø¸]¹E ¹E ¹C×î¸C×î¸xи„A¼¸xиC×î¸ßµä¸*)²¸*)²¸„A¼¸xиxи*)²¸4퓸4퓸}C¸~ˆ¸ Þ‰¸}C¸$ƒW¸3<˜·Å›¸~ˆ¸~ˆ¸k¸ôˆÏ4/ûŠ¶N 8ÊÈ¿·Æ 8f–8Æ 8#ð³8f–8ù²•8Ù¾8Ù©8ÅŸ8f–8ù²•8Æ 8Ù©8ù²•8Ù©8Ù©8@Ò8#ð³8Ù¾8w~æ8ÅŸ8Ù¾8Ù¾8@Ò8Ù©8#ð³8ù²•8šo8RG8Æ 8Ñ !7s38Ñ !7[…o7¹0Ÿ7/ûŠ¶ÊÈ¿· ~/¸3<˜·šsç·Å›¸Å›¸}C¸xиÛ[Ƹxиߵä¸C×î¸]¹V¢¹ßµä¸E ¹ j4¹ƒ9¹ j4¹‰9*¹ j4¹õ¹"%¹ j4¹»¶C¹»¶C¹ÑS¹ÑS¹RìM¹ƒ9¹RìM¹»¶C¹ƒ9¹RìM¹JÑH¹õ¹õ¹^ʹV¢¹õ¹"%¹^ʹ¶ ¹¶ ¹"%¹V¢¹ßµä¸–Ú¸V¢¹ßµä¸Û[Ƹxиߵ世ڸߵä¸*)²¸ Þ‰¸xиxиxи–Ú¸ Þ‰¸áþ¸ Þ‰¸áþ¸$ƒW¸ ~/¸ Þ‰¸ Þ‰¸é¨¸$ƒW¸xи„A¼¸$ƒW¸*)²¸*)²¸ Þ‰¸ ~/¸$ƒW¸ Þ‰¸*)²¸áþ¸áþ¸}C¸%£¸áþ¸ßµä¸xиxиC×î¸xи¶ ¹`ß¹`ß¹`ß¹"%¹ƒ9¹„Q/¹^ʹõ¹^ʹE ¹E ¹‰9*¹„Q/¹‰9*¹JÑH¹ƒ9¹‰9*¹ªœ>¹JÑH¹ÑS¹¹ÑS¹ j4¹E ¹„Q/¹E ¹^ʹ¶ ¹"%¹¶ ¹õ¹^ʹxи]¹>úø¸xиxи–ڸߵ丄A¼¸„A¼¸ Þ‰¸áþ¸áþ¸ Þ‰¸Û[Ƹ騸áþ¸„A¼¸–Ú¸–ڸߵä¸xиÛ[Ƹ騸*)²¸4퓸ߵä¸xиC×î¸"%¹^ʹV¢¹>úø¸ßµä¸V¢¹¶ ¹^ʹV¢¹–Ú¸4퓸Û[ƸV¢¹]¹V¢¹]¹‰9*¹"%¹õ¹E ¹õ¹„Q/¹„Q/¹^ʹ‰9*¹ÑS¹»¶C¹JÑH¹„Q/¹Ä#X¹»¶C¹JÑH¹ç—l¹rÔv¹úµq¹úµq¹úø¸>úø¸>úø¸„A¼¸Û[ƸC×î¸4퓸ߵ丄A¼¸Û[Ƹ騸ߵä¸$ƒW¸„A¼¸*)²¸*)²¸–Ú¸xи–Ú¸áþ¸„A¼¸ßµä¸>úø¸–ڸ騸*)²¸>úø¸]¹xи*)²¸*)²¸$ƒW¸Û[Ƹߵä¸*)²¸–ڸߵä¸]¹áþ¸„A¼¸áþ¸xиC×î¸ßµä¸–Ú¸¶ ¹^ʹ j4¹ƒ9¹ j4¹E ¹E ¹ªœ>¹‰9*¹RìM¹RìM¹RìM¹ªœ>¹E ¹‰9*¹ªœ>¹JÑH¹"%¹‰9*¹V¢¹C×î¸4퓸„A¼¸é¨¸é¨¸é¨¸4퓸%£¸}C¸šsç·ÊÈ¿·ÊÈ¿·3<˜·/ûŠ¶ÃÆ7¦rî7f–8Z£‹8ù²•8Ù©8#ð³8w~æ8l^Ü8#ð³8w~æ8% ð8dÃú8+‡9p¯9dÃú8OÚ9#+9ž&9Ä9Ä9«ð 9ž&9Ä9‡#È8t9+‡9øš 9«ð 9úh:9ÕO59ž&97709ŒÒN9ž&9#+9ž&9Ä9t9øš 9% ð8l^Ü8Ù©8Ù¾8@Ò8Ù¾8Ù¾8Ù¾8ù²•8ÅŸ8Z£‹8Z£‹8ù²•8ù²•8f–8f–8Z£‹8f–8Z£‹8ù²•8Ù©8@Ò8#ð³8w~æ8‡#È8@Ò8w~æ8dÃú8Ù¾8f–8ÅŸ8#ð³8ÅŸ8#ð³8f–8f–8šo8šo8ù²•8‡#È8šo8@Ò8l^Ü8Ù¾8ù²•8f–8ÅŸ8ù²•8f–8#ð³8ÅŸ8@Ò8@Ò8+‡9+‡9+‡9øš 9OÚ9úh:9Ä9¢‚?9Ä97709ž&97709dÃú8p¯9p¯9p¯9ž&9#+9ž&9+‡9#+9n·I9n·I9ÊœD9îS9†Cc9( +Y9Ù`h9†Cc9îS9¢‚?9n·I9úh:9¢‚?9ŒÒN9( +Y9n·I9¢‚?9ŒÒN9úh:9¢‚?9#+9#+9OÚ9Ä9OÚ9w~æ8l^Ü8w~æ8p¯9+‡9w~æ8Ä9@Ò8‡#È8Ù¾8l^Ü8w~æ8l^Ü8% ð8l^Ü8w~æ8@Ò8#ð³8Ù¾8#ð³8ÅŸ8#ð³8Ù©8ù²•8Ù¾8#ð³8@Ò8@Ò8w~æ8w~æ8t9p¯9+‡9dÃú8‡#È8#ð³8ÅŸ8Ù©8‡#È8Ù©8‡#È8f–8l^Ü8t9t9Ä9dÃú8dÃú8w~æ8@Ò8l^Ü8l^Ü8w~æ8+‡9p¯9ÕO59p¯9Ä9ž&9p¯9Ä9«ð 9OÚ9øš 9+‡9@Ò8w~æ8OÚ9w~æ8t9øš 9+‡9Ù¾8% ð8p¯9t9dÃú8% ð8Ù¾8Ù©8Z£‹8Z£‹8šo8Z£‹8Ù¾8‡#È8‡#È8l^Ü8#ð³8w~æ8f–8% ð8ÅŸ8f–8ÅŸ8#ð³8s38N 8N 8s38s38N 8Æ 8ÃÆ7ÃÆ7ôˆÏ4¹0Ÿ7¹0Ÿ7?¦6/ûŠ¶ôˆÏ4/«a·?¦6?¦6ÃÆ7¦rî7¦rî7ÃÆ7[…o7ÃÆ7s38ôˆÏ4s38N 8s38N 8N 8ÃÆ7¦rî7s38N 8N 8¦rî7¦rî7Z£‹8Ù©8‡#È8l^Ü8@Ò8Ù¾8t9% ð8dÃú8+‡9+‡9% ð8t9Ä9+‡9«ð 9Ä97709p¯9p¯9«ð 9Ä9ž&9ž&9øš 9Ä9Ä9+‡9+‡9+‡9øš 9øš 9Ä9OÚ9dÃú8t9l^Ü8l^Ü8% ð8‡#È8% ð8p¯9øš 9+‡9#ð³8Ù©8l^Ü8w~æ8l^Ü8øš 9dÃú8t9@Ò8t9t9ù²•8ÅŸ8@Ò8ù²•8ù²•8ÃÆ7s38Æ 8Æ 8/ûŠ¶D·[…o7ôˆÏ4?¦6¦rî7?¦6/«a·Ñ !7ôˆÏ4¹0Ÿ7/«a·[…o7ÃÆ7D·3<˜·D·D·Ñ !7~ˆ¸šsç·~ˆ¸3<˜·~ˆ¸Å›¸D·3<˜·/ûŠ¶/ûŠ¶/«a·[…o7D·D·Ñ !7ÃÆ7Ñ !7/ûŠ¶Ñ !7s38s38— +[8ù²•8šo8s38@Ò8Ù©8— +[8šo8ÅŸ8Ù¾8Ù¾8ù²•8f–8ÅŸ8Æ 8f–8ù²•8Z£‹8Z£‹8#ð³8ù²•8— +[8f–8f–8ÅŸ8¦rî7Z£‹8f–8RG8s38Æ 8— +[8N 8ÃÆ7Ñ !7?¦6s38Æ 8[…o7ÃÆ7[…o7N 8šsç·/«a·D·D·?¦63<˜·}C¸ÊÈ¿·/«a·šsç·}C¸~ˆ¸ ~/¸ ~/¸šsç· ~/¸4퓸k¸Å›¸$ƒW¸Û[Ƹáþ¸C×î¸ßµä¸C×î¸*)²¸%£¸„A¼¸Û[Ƹߵ丄A¼¸C×î¸>úø¸–Ú¸C×A¼¸é¨¸Û[Ƹ„A¼¸ Þ‰¸%£¸}C¸ ~/¸ ~/¸šsç·D·3<˜·3<˜·Å›¸Å›¸D·D·D·3<˜·šsç·D·D·/«a·?¦6[…o7?¦6[…o7/«a·¹0Ÿ7ÊÈ¿·?¦6ôˆÏ4/«a·ÊÈ¿·D·šsç·~ˆ¸šsç·/ûŠ¶[…o7/«a·[…o7ôˆÏ4ôˆÏ4?¦6ôˆÏ4/ûŠ¶ÊÈ¿·$ƒW¸ ~/¸ÊÈ¿·Å›¸3<˜·Å›¸Å›¸/«a·~ˆ¸3<˜·šsç·ÊÈ¿·/«a·Å›¸ÊÈ¿·šsç·šsç· ~/¸}C¸}C¸}C¸Û[Ƹ„A¼¸*)²¸„A¼¸*)²¸}C¸$ƒW¸}C¸ Þ‰¸k¸%£¸4퓸$ƒW¸ ~/¸}C¸ ~/¸k¸$ƒW¸ Þ‰¸/ûŠ¶/ûŠ¶ÊÈ¿·Ñ !7?¦6/ûŠ¶ôˆÏ4/«a·Å›¸/«a·/«a·Å›¸/ûŠ¶3<˜·Å›¸/«a·¦rî7[…o7[…o7[…o7N 8Æ 8ÅŸ8Ù©8šo8šo8#ð³8#ð³8ù²•8Æ 8Z£‹8— +[8— +[8ù²•8— +[8Æ 8f–8šo8Z£‹8Z£‹8ù²•8@Ò8ÅŸ8#ð³8dÃú8#ð³8l^Ü8t9@Ò8% ð8@Ò8l^Ü8f–8šo8— +[8— +[8ÅŸ8ù²•8— +[8— +[8Z£‹8f–8f–8RG8s38ÃÆ7Z£‹8[…o7/«a·/«a·ÊÈ¿·}C¸ÊÈ¿·$ƒW¸é¨¸Û[Ƹ„A¼¸4퓸–ڸߵä¸ßµä¸–Ú¸k¸*)²¸ Þ‰¸ ~/¸k¸k¸~ˆ¸Å›¸}C¸~ˆ¸}C¸ ~/¸ Þ‰¸ ~/¸/«a·$ƒW¸ ~/¸~ˆ¸3<˜·?¦6Å›¸}C¸/ûŠ¶ÊÈ¿·/ûŠ¶3<˜·¹0Ÿ7¹0Ÿ7¹0Ÿ7Ñ !7¦rî7Æ 8šo8RG8Z£‹8ù²•8RG8Ù©8ù²•8s38RG8šo8ù²•8Æ 8s38f–8Æ 8Ù©8šo8f–8s38— +[8— +[8ÃÆ7Ñ !7¦rî7RG8— +[8šo8šo8ù²•8f–8Ù©8ÅŸ8RG8f–8RG8Æ 8[…o7ÃÆ7RG8[…o73<˜·ôˆÏ4/ûŠ¶?¦6šsç·[…o7N 8ÊÈ¿·ôˆÏ4?¦6/«a·D·ÊÈ¿·/«a·Å›¸šsç·}C¸ ~/¸}C¸~ˆ¸áþ¸áþ¸k¸áþ¸áþ¸4퓸šsç·áþ¸ Þ‰¸ Þ‰¸é¨¸Û[Ƹ*)²¸Û[Ƹ>úø¸>úø¸V¢¹^ʹ>úø¸>úø¸–Ú¸xи„A¼¸„A¼¸ßµä¸Û[ƸÛ[Ƹߵä¸V¢¹„A¼¸é¨¸*)²¸ Þ‰¸ ~/¸ ~/¸}C¸}C¸}C¸$ƒW¸/«a·/ûŠ¶Å›¸3<˜·/«a·/«a·Å›¸3<˜·/ûŠ¶N 8s38— +[8— +[8— +[8Z£‹8— +[8f–8f–8ù²•8f–8— +[8ÅŸ8Z£‹8RG8šo8s38¦rî7N 8Æ 8¦rî7¹0Ÿ7?¦6[…o7Ñ !7¦rî7Ñ !73<˜·ôˆÏ4ÊÈ¿·/ûŠ¶Å›¸ÊÈ¿·šsç·}C¸$ƒW¸$ƒW¸}C¸%£¸ Þ‰¸áþ¸xи騸xи„A¼¸ßµä¸C×î¸`ß¹`ß¹]¹C×î¸Û[Ƹxиxи¶ ¹>úø¸–Ú¸Û[ƸÛ[Ƹxиxи$ƒW¸4퓸騸–Ú¸Û[Ƹ騸C×î¸áþ¸xи„A¼¸4퓸ߵä¸ßµä¸ßµä¸xи–Ú¸C×ڸ4퓸„A¼¸ Þ‰¸áþ¸$ƒW¸}C¸ ~/¸ ~/¸Å›¸ ~/¸}C¸/«a·šsç·}C¸}C¸ Þ‰¸Å›¸Û[ƸÛ[Ƹ4퓸k¸4퓸騸k¸%£¸~ˆ¸/«a·D·/ûŠ¶ÊÈ¿·šsç·ÊÈ¿·šsç·~ˆ¸šsç·šsç·šsç· Þ‰¸$ƒW¸}C¸Û[Ƹ*)²¸ßµä¸V¢¹C×î¸>úø¸¶ ¹`ß¹¶ ¹xи„A¼¸–Ú¸C×î¸ßµä¸C× ¹V¢¹]¹„A¼¸é¨¸–Ú¸*)²¸C×î¸xи>úø¸ßµä¸C×ڸ>úø¸]¹>úø¸–Ú¸–Ú¸Û[Ƹߵ丄A¼¸áþ¸*)²¸C×ڸ„A¼¸ Þ‰¸k¸ Þ‰¸*)²¸$ƒW¸~ˆ¸ÊÈ¿·Ñ !7ôˆÏ4/«a·?¦6¦rî7/ûŠ¶¹0Ÿ7RG8¹0Ÿ7¹0Ÿ7[…o7Æ 8ÃÆ7Ñ !7Ñ !7— +[8¹0Ÿ7s38s38¦rî7¹0Ÿ7ÃÆ7N 8N 8f–8Æ 8f–8¦rî7šo8s38— +[8Ù©8ù²•8f–8šo8s38s38¦rî7¦rî7¦rî7¦rî7N 8[…o7s38ÃÆ7Æ 8šo8RG8Æ 8Ñ !7[…o7¹0Ÿ7s38[…o7Ñ !7D·D·/«a·?¦6šsç·D·3<˜·D·/«a·}C¸}C¸ Þ‰¸ÊÈ¿·ôˆÏ4D·Ñ !73<˜·?¦63<˜·~ˆ¸Å›¸D·ôˆÏ4ÊÈ¿·/ûŠ¶3<˜·/«a·Å›¸ÊÈ¿·?¦6šsç·~ˆ¸šsç·$ƒW¸k¸ÊÈ¿·?¦6¹0Ÿ7¦rî7¹0Ÿ7N 8ù²•8f–8ù²•8‡#È8Ù¾8#ð³8Z£‹8ÅŸ8f–8Z£‹8Ù©8% ð8ù²•8— +[8šo8Ù©8šo8‡#È8#ð³8‡#È8@Ò8dÃú8‡#È8#ð³8Ù©8#ð³8Z£‹8Ù©8Ù¾8— +[8ù²•8— +[8N 8Æ 8f–8f–8— +[8— +[8f–8Ù¾8f–8Æ 8N 8?¦6Æ 8¹0Ÿ7/ûŠ¶¹0Ÿ7¹0Ÿ7Ñ !7¦rî7¦rî7N 8Ñ !7[…o7N 8ôˆÏ4šsç·Ñ !7¦rî7ÃÆ7ôˆÏ4?¦6[…o7[…o7Æ 8¹0Ÿ7ÃÆ7¹0Ÿ7s38ÃÆ7/ûŠ¶/ûŠ¶ôˆÏ4N 8Ñ !7[…o7¹0Ÿ7?¦6?¦63<˜·/«a·ôˆÏ4/«a·D·ÃÆ7ôˆÏ4?¦6[…o7/ûŠ¶?¦6[…o7/ûŠ¶¹0Ÿ7¹0Ÿ7ôˆÏ4Ñ !7?¦6[…o7/ûŠ¶ÃÆ7N 8s38šo8¹0Ÿ7N 8¦rî7šo8RG8šo8Æ 8¦rî7— +[8RG8f–8Z£‹8— +[8RG8— +[8šo8¦rî7šo8¦rî7¦rî7N 8ÃÆ7ÃÆ7Ñ !7ôˆÏ4?¦6?¦6D·¹0Ÿ7ÊÈ¿·šsç·/ûŠ¶D·/«a·Å›¸šsç·ÊÈ¿·/«a·Ñ !7Ñ !7Æ 8— +[8Ñ !7¦rî7¦rî7ÃÆ7/ûŠ¶?¦6?¦6?¦6~ˆ¸Å›¸3<˜·/«a·ÊÈ¿·3<˜·}C¸}C¸k¸k¸}C¸ ~/¸$ƒW¸šsç·}C¸}C¸šsç·$ƒW¸$ƒW¸ÊÈ¿·~ˆ¸Å›¸šsç·šsç·šsç·[…o7D·Ñ !7¦rî7s38¹0Ÿ7Ñ !7/ûŠ¶¹0Ÿ7ÃÆ7?¦6ôˆÏ4ÃÆ7¹0Ÿ7ÃÆ7[…o7/ûŠ¶Ñ !7¹0Ÿ7— +[8šo8‡#È8Ù©8Ù¾8@Ò8% ð8l^Ü8+‡9Ä9+‡9+‡9+‡9+‡9+‡9øš 9OÚ9«ð 9OÚ9Ä9øš 9‡#È8p¯9OÚ9dÃú8% ð8t9dÃú8t9Ä9«ð 9+‡9OÚ9t9% ð8OÚ9Ä9l^Ü8‡#È8@Ò8Ù©8Ù©8l^Ü8ù²•8— +[8— +[8f–8Ù©8— +[8šo8šo8RG8Ù¾8šo8Z£‹8Z£‹8ÅŸ8— +[8Æ 8[…o7[…o7— +[8s38RG8s38N 8— +[8Æ 8¦rî7[…o7Z£‹8Æ 8ÃÆ7¹0Ÿ7s38Æ 8N 8‡#È8Ù©8Ù¾8@Ò8l^Ü8l^Ü8øš 9OÚ9øš 9øš 9ž&9¢‚?9«ð 9ÊœD9¢‚?9ÊœD9ŒÒN9úh:9p¯9#+97709ÊœD9ÕO59ÕO59ÕO59«ð 9ÕO59#+97709¢‚?9úh:9úh:9ÕO59ÕO59¢‚?9îS9ŒÒN9¢‚?97709¢‚?9OÚ9#+97709p¯9«ð 9p¯9% ð8% ð8t9+‡9p¯9@Ò8l^Ü8% ð8‡#È8ù²•8ù²•8Z£‹8¦rî7N 8s38Æ 8Ñ !7N 8s38/ûŠ¶[…o7[…o7/«a·ôˆÏ4?¦6Ñ !7[…o7ôˆÏ4Æ 8¹0Ÿ7[…o7?¦6[…o7?¦6/«a·~ˆ¸/ûŠ¶¦rî7?¦6D·/«a·/«a·?¦6¦rî7RG8¦rî7¹0Ÿ7ÃÆ7¦rî7s38¦rî7N 8[…o7RG8[…o7/ûŠ¶¦rî7Æ 8f–8RG8s38N 8N 8f–8— +[8f–8RG8ù²•8ù²•8¦rî7¹0Ÿ7f–8ù²•8šo8f–8N 8Ù©8ÅŸ8‡#È8Ù¾8@Ò8‡#È8Ù¾8— +[8ù²•8f–8— +[8šo8Ù©8[…o7Ñ !7ÃÆ7Æ 8¹0Ÿ7Ñ !7Ñ !7/«a·?¦6/«a·ÊÈ¿·$ƒW¸ ~/¸k¸ Þ‰¸ Þ‰¸%£¸%£¸%£¸áþ¸}C¸*)²¸*)²¸Û[Ƹ]¹]¹„A¼¸¶ ¹–Ú¸C×î¸>úø¸xиÛ[Ƹ–Ú¸>úø¸C×î¸*)²¸áþ¸„A¼¸é¨¸Û[Ƹ–Ú¸ Þ‰¸–Ú¸*)²¸*)²¸ßµä¸„A¼¸„A¼¸Û[Ƹ騸4퓸*)²¸*)²¸ Þ‰¸ Þ‰¸$ƒW¸4퓸騸Û[Ƹ騸 Þ‰¸$ƒW¸}C¸ Þ‰¸Å›¸$ƒW¸~ˆ¸~ˆ¸ Þ‰¸}C¸}C¸ Þ‰¸ ~/¸Å›¸ÊÈ¿·?¦6~ˆ¸ÊÈ¿·~ˆ¸3<˜·[…o7ôˆÏ4N 8¦rî7— +[8[…o7N 8¹0Ÿ7/ûŠ¶šsç·/ûŠ¶ÊÈ¿·/«a·ÊÈ¿·3<˜·D·3<˜·3<˜·/«a·šsç·3<˜·?¦6/ûŠ¶ÊÈ¿·/ûŠ¶ôˆÏ43<˜·D·?¦6?¦6?¦6Ñ !7D·3<˜·3<˜· ~/¸~ˆ¸ ~/¸$ƒW¸ Þ‰¸ Þ‰¸é¨¸„A¼¸é¨¸xи*)²¸xи–Ú¸xи„A¼¸ßµä¸C×î¸]¹^ʹªœ>¹"%¹V¢¹ªœ>¹E ¹^ʹV¢¹`ß¹‰9*¹¶ ¹E ¹E ¹V¢¹C×î¸]¹ Þ‰¸*)²¸„A¼¸ Þ‰¸„A¼¸áþ¸„A¼¸k¸k¸é¨¸*)²¸áþ¸é¨¸ ~/¸3<˜·3<˜·/ûŠ¶D·?¦6¹0Ÿ7[…o7Ñ !7s38Æ 8ÃÆ7¦rî7¦rî7¦rî7¦rî7s38šo8Æ 8RG8Z£‹8šo8ÅŸ8f–8ù²•8f–8— +[8s38f–8N 8ôˆÏ4?¦6/ûŠ¶/«a·ÊÈ¿·/«a·}C¸ ~/¸ Þ‰¸Å›¸/«a·$ƒW¸Å›¸~ˆ¸ÊÈ¿·/«a·Å›¸ ~/¸}C¸/«a·}C¸ ~/¸$ƒW¸}C¸ ~/¸ Þ‰¸k¸ Þ‰¸ Þ‰¸ Þ‰¸áþ¸*)²¸}C¸ Þ‰¸*)²¸$ƒW¸„A¼¸áþ¸áþ¸~ˆ¸D·}C¸~ˆ¸}C¸3<˜·/«a·/ûŠ¶~ˆ¸}C¸?¦6?¦6?¦6?¦6ÃÆ7[…o7¹0Ÿ7ÃÆ7ÊÈ¿·Æ 8Æ 8¹0Ÿ7— +[8f–8f–8s38Z£‹8N 8N 8f–8Æ 8Æ 8#ð³8Ù¾8#ð³8ÅŸ8#ð³8l^Ü8‡#È8l^Ü8w~æ8% ð8dÃú8@Ò8dÃú8#ð³8ù²•8ÅŸ8ÅŸ8‡#È8šo8šo8s38šo8Æ 8s38ÃÆ7/«a·[…o7/ûŠ¶ôˆÏ43<˜·/ûŠ¶ôˆÏ4Å›¸ôˆÏ4$ƒW¸ ~/¸k¸Å›¸ÊÈ¿·3<˜·šsç·šsç·ÊÈ¿·3<˜·k¸$ƒW¸}C¸šsç· ~/¸~ˆ¸/«a·ÊÈ¿·3<˜·/ûŠ¶ôˆÏ4?¦6[…o73<˜·Ñ !7ÊÈ¿·[…o7/ûŠ¶}C¸3<˜·}C¸ÊÈ¿·$ƒW¸~ˆ¸šsç·3<˜·3<˜·šsç·/«a·3<˜·ÊÈ¿·3<˜·?¦6/«a·ôˆÏ4/ûŠ¶3<˜·ôˆÏ4/ûŠ¶?¦6¦rî7¦rî7?¦6N 8N 8— +[8s38¹0Ÿ7?¦6ôˆÏ4¦rî7[…o7N 8šo8ÅŸ8N 8ù²•8Z£‹8šo8f–8f–8ù²•8šo8#ð³8#ð³8ÅŸ8Ù¾8Æ 8— +[8šo8[…o7s38s38s38N 8s38N 8¦rî7[…o7ÃÆ7¹0Ÿ7f–8Æ 8?¦6[…o7?¦6ÊÈ¿·[…o7?¦6?¦6¦rî7N 8ôˆÏ4¦rî7¹0Ÿ7— +[8¹0Ÿ7¦rî7[…o7?¦6/ûŠ¶?¦6/«a·šsç·~ˆ¸Å›¸$ƒW¸šsç·D· ~/¸/ûŠ¶šsç·ÊÈ¿·D·/«a·ÊÈ¿·ôˆÏ4ÃÆ7?¦6?¦6Æ 8s38— +[8f–8šo8RG8N 8RG8ù²•8Ù¾8@Ò8l^Ü8+‡9t9t9øš 9t9+‡9ž&9p¯9ž&9#+9ÊœD9#+9«ð 9Ä9p¯9ÕO59OÚ9n·I9¢‚?9OÚ9¢‚?9«ð 9OÚ9#+9ÕO59OÚ9Ä9t9@Ò8% ð8dÃú8@Ò8% ð8l^Ü8t9@Ò8w~æ8l^Ü8l^Ü8dÃú8% ð8šo8Ù©8Ù¾8ÅŸ8Z£‹8Z£‹8ÅŸ8f–8Z£‹8šo8f–8ù²•8šo8ÃÆ7N 8Æ 8[…o7Ñ !7ôˆÏ4ÊÈ¿·ÊÈ¿·?¦6ôˆÏ4¹0Ÿ7ÃÆ7ôˆÏ4Ñ !7¹0Ÿ7[…o7[…o7ÃÆ7?¦6šsç·ôˆÏ4[…o73<˜·/«a·ÊÈ¿·?¦6ôˆÏ4[…o7Ñ !7[…o7?¦6/ûŠ¶?¦6/ûŠ¶ôˆÏ43<˜·ÃÆ7¹0Ÿ7N 8N 8N 8ÃÆ7— +[8RG8N 8Æ 8RG8— +[8Z£‹8šo8Z£‹8ÅŸ8w~æ8ÅŸ8šo8Z£‹8Z£‹8Z£‹8#ð³8šo8Z£‹8Ù¾8Z£‹8Ù©8Ù¾8ù²•8ÅŸ8‡#È8RG8ÃÆ7s38/ûŠ¶?¦63<˜·ÊÈ¿· ~/¸}C¸%£¸–Ú¸áþ¸*)²¸*)²¸*)²¸–Ú¸áþ¸Û[Ƹõ¹¶ ¹‰9*¹E ¹õ¹„Q/¹]¹]¹V¢¹E ¹ÑS¹ƒ9¹„Q/¹„Q/¹ƒ9¹õ¹õ¹ j4¹ªœ>¹»¶C¹õ¹"%¹„Q/¹ªœ>¹^ʹ‰9*¹‰9*¹„Q/¹¶ ¹^ʹ¶ ¹¶ ¹C×î¸^ʹC×î¸é¨¸xи*)²¸*)²¸é¨¸áþ¸4퓸}C¸ Þ‰¸4퓸~ˆ¸3<˜·šsç·šsç·Å›¸/«a·ÊÈ¿·/ûŠ¶/ûŠ¶ôˆÏ4[…o7šo8¦rî7Z£‹8šo8Æ 8N 8Æ 8ù²•8ù²•8ÅŸ8#ð³8Ù¾8#ð³8l^Ü8@Ò8‡#È8Ù¾8Ù©8ÅŸ8Z£‹8f–8f–8Ù©8Z£‹8Z£‹8— +[8f–8ÅŸ8Z£‹8šo8ÅŸ8ù²•8ÅŸ8Ù©8šo8ÅŸ8ù²•8s38¹0Ÿ7ù²•8#ð³8Z£‹8ÃÆ7Æ 8RG8s38Z£‹8RG8RG8N 8N 8s38ÃÆ7¦rî7— +[8šo8ù²•8— +[8‡#È8ÅŸ8f–8ù²•8f–8#ð³8#ð³8w~æ8% ð8ÅŸ8Ù¾8@Ò8@Ò8#ð³8#ð³8dÃú8t9‡#È8w~æ8ÅŸ8Ù¾8+‡9l^Ü8Ù¾8l^Ü8‡#È8@Ò8@Ò8+‡9dÃú8‡#È8@Ò8l^Ü8Ù¾8#ð³8dÃú8l^Ü8dÃú8dÃú8dÃú8p¯9Ä9p¯9OÚ9«ð 9Ä9+‡9dÃú8úh:9Ä9p¯97709+‡9«ð 9øš 9Ä9øš 9w~æ8w~æ8Ä9ÅŸ8Ù©8‡#È8@Ò8w~æ8Ù©8Z£‹8Æ 8f–8s38/ûŠ¶ôˆÏ4ôˆÏ4ôˆÏ4?¦6Ñ !7ÃÆ7¦rî7ÃÆ7?¦6¹0Ÿ7s38?¦6Ñ !7¹0Ÿ7/ûŠ¶/ûŠ¶ôˆÏ4/«a·šsç·ôˆÏ4D·ôˆÏ4Ñ !73<˜·šsç·~ˆ¸ÊÈ¿·ÃÆ7ÃÆ7ÊÈ¿·¹0Ÿ7[…o7?¦6ôˆÏ4[…o7N 8¦rî7RG8¦rî7¦rî7Z£‹8— +[8šo8s38ù²•8Ù©8f–8ù²•8Ù©8Ù©8Z£‹8— +[8[…o7RG8šo8šo8— +[8— +[8— +[8Æ 8šo8šo8‡#È8Ù©8#ð³8Z£‹8ù²•8l^Ü8@Ò8Ù¾8% ð8w~æ8#ð³8dÃú8@Ò8@Ò8Ù¾8Ù©8ù²•8‡#È8#ð³8ÅŸ8Ù¾8RG8RG8¹0Ÿ7N 8¹0Ÿ7[…o7¦rî7¦rî7ôˆÏ4?¦6D·/ûŠ¶šsç·Å›¸Å›¸Å›¸}C¸4퓸4퓸 Þ‰¸ Þ‰¸é¨¸4퓸騸ߵ丄A¼¸Û[Ƹߵ丄A¼¸Û[Ƹk¸4퓸4퓸4퓸>úø¸ßµä¸õ¹^ʹ]¹¶ ¹„Q/¹>úø¸V¢¹V¢¹>úø¸Û[Ƹáþ¸Û[ƸÛ[Ƹ„A¼¸áþ¸*)²¸>úø¸>úø¸*)²¸ßµä¸–Ú¸–Ú¸xиÛ[Ƹ*)²¸é¨¸*)²¸xи*)²¸Û[Ƹ4퓸 Þ‰¸ Þ‰¸Å›¸$ƒW¸}C¸}C¸ Þ‰¸}C¸ÊÈ¿·šsç·D·ôˆÏ4D·šsç·ôˆÏ4D·šsç·ÊÈ¿·/«a·}C¸Å›¸šsç·ÊÈ¿·šsç·šsç·?¦6šsç·/ûŠ¶$ƒW¸~ˆ¸Å›¸Å›¸Å›¸$ƒW¸$ƒW¸~ˆ¸}C¸ Þ‰¸šsç·%£¸~ˆ¸šsç· Þ‰¸4퓸Û[Ƹ騸騸áþ¸ Þ‰¸áþ¸$ƒW¸ Þ‰¸ Þ‰¸é¨¸–ڸ騸Û[Ƹ*)²¸xиxиÛ[Ƹ Þ‰¸*)²¸„A¼¸áþ¸é¨¸„A¼¸áþ¸k¸ Þ‰¸ Þ‰¸é¨¸$ƒW¸šsç· Þ‰¸}C¸}C¸/«a·ôˆÏ4ÊÈ¿·Ñ !7ôˆÏ4Ñ !7ÃÆ7Ñ !7?¦6s38— +[8¹0Ÿ7¦rî7¹0Ÿ7Æ 8RG8ÃÆ7ÃÆ7Æ 8[…o7Z£‹8— +[8[…o7¦rî7f–8RG8Z£‹8RG8Z£‹8Z£‹8RG8Z£‹8f–8RG8RG8Z£‹8s38Ù©8ÅŸ8Z£‹8f–8ÃÆ7N 8šo8s38šo8@Ò8šo8— +[8‡#È8Ù©8Æ 8šo8¦rî73<˜·3<˜·šsç·D·}C¸4퓸4퓸$ƒW¸}C¸ ~/¸3<˜·3<˜·3<˜·/«a·šsç·$ƒW¸šsç·áþ¸ Þ‰¸ Þ‰¸áþ¸„A¼¸ ~/¸~ˆ¸4퓸騸$ƒW¸ ~/¸~ˆ¸ ~/¸ ~/¸~ˆ¸$ƒW¸4퓸áþ¸ Þ‰¸4퓸k¸ Þ‰¸Û[Ƹ ~/¸$ƒW¸k¸Å›¸ÊÈ¿·?¦6ôˆÏ4šsç·~ˆ¸ÊÈ¿·/«a·Å›¸D·?¦6/ûŠ¶}C¸3<˜·Ñ !7/«a·?¦6/ûŠ¶¹0Ÿ7D·ÊÈ¿·/ûŠ¶/ûŠ¶šsç·D·/ûŠ¶?¦6Å›¸ ~/¸3<˜·šsç· Þ‰¸ ~/¸}C¸ ~/¸ Þ‰¸k¸}C¸ Þ‰¸„A¼¸*)²¸ Þ‰¸$ƒW¸šsç·áþ¸ Þ‰¸k¸$ƒW¸ Þ‰¸ Þ‰¸áþ¸–Ú¸*)²¸é¨¸Û[ƸC×î¸xи*)²¸>úø¸V¢¹é¨¸k¸Û[Ƹ>úø¸]¹ßµä¸`ß¹¶ ¹]¹]¹>úø¸é¨¸–Ú¸C×î¸]¹^ʹ¶ ¹>úø¸C× ¹>úø¸]¹V¢¹„A¼¸V¢¹xи*)²¸Û[Ƹáþ¸ ~/¸Û[Ƹ*)²¸ Þ‰¸$ƒW¸é¨¸k¸áþ¸*)²¸%£¸ÊÈ¿·D·šsç·Å›¸/«a·ôˆÏ4/«a·ôˆÏ4Ñ !7RG8ÅŸ8[…o7¹0Ÿ7¦rî7ÃÆ7N 8ÃÆ7RG8ÃÆ7N 8f–8¹0Ÿ7N 8ÅŸ8ÅŸ8f–8ù²•8Z£‹8#ð³8Z£‹8f–8s38Ù©8Ù©8šo8Æ 8ÃÆ7¦rî7?¦6Æ 8¹0Ÿ7s38ÃÆ7¦rî7RG8?¦6?¦6?¦6[…o7Ñ !7¹0Ÿ7?¦6D·?¦6D·/«a·ôˆÏ4[…o7D·ÊÈ¿·ÊÈ¿·?¦6D·/«a·ôˆÏ4Ñ !7/ûŠ¶ÊÈ¿·/ûŠ¶ôˆÏ4ÊÈ¿·šsç·šsç·šsç·D·ôˆÏ4¹0Ÿ7ôˆÏ4/«a·¹0Ÿ7¦rî7— +[8ÃÆ7ôˆÏ4— +[8Ñ !7Æ 8f–8RG8s38RG8Z£‹8Z£‹8Æ 8s38šo8f–8f–8Z£‹8Z£‹8Ù©8ÅŸ8Z£‹8s38[…o7ÃÆ7— +[8¦rî7Æ 8Ù©8šo8s38— +[8?¦6ÃÆ7[…o7N 8Æ 8RG8Æ 8¦rî7¦rî7N 8Æ 8ÃÆ7Ñ !7¹0Ÿ7N 8/ûŠ¶D·¹0Ÿ73<˜·Ñ !7¹0Ÿ7šsç·~ˆ¸Å›¸4퓸~ˆ¸$ƒW¸Å›¸}C¸xиÛ[ƸÛ[Ƹߵä¸V¢¹ßµä¸¶ ¹>úø¸õ¹^ʹ"%¹ j4¹`ß¹õ¹»¶C¹„Q/¹ÑS¹*@]¹ªœ>¹þ\b¹ÑS¹ƒ9¹ªœ>¹»¶C¹ j4¹„Q/¹ j4¹ j4¹ÑS¹»¶C¹ªœ>¹ªœ>¹RìM¹*@]¹„Q/¹»¶C¹JÑH¹ƒ9¹E ¹^ʹõ¹E ¹ßµä¸„A¼¸]¹C×A¼¸áþ¸„A¼¸Û[Ƹ„A¼¸*)²¸4퓸}C¸k¸[…o73<˜·/ûŠ¶/ûŠ¶ôˆÏ4ôˆÏ4/«a·Ñ !7s38Æ 8s38f–8šo8— +[8Ù©8l^Ü8Ù¾8Ù©8Ù©8Z£‹8‡#È8f–8f–8Z£‹8¦rî7ÃÆ7f–8RG8N 8— +[8f–8šo8ù²•8¦rî7¹0Ÿ7N 8[…o7Ñ !7¹0Ÿ7?¦6ôˆÏ43<˜·Å›¸šsç·/«a·3<˜·D·$ƒW¸$ƒW¸ÊÈ¿·~ˆ¸3<˜·~ˆ¸~ˆ¸Å›¸Å›¸~ˆ¸Å›¸ Þ‰¸Å›¸ÊÈ¿·Å›¸D·D·/ûŠ¶D·[…o7Æ 8N 8RG8— +[8f–8Æ 8N 8RG8Z£‹8s38s38f–8#ð³8ù²•8Z£‹8‡#È8Ù¾8@Ò8t9+‡9l^Ü8% ð8«ð 9ž&9¢‚?9ÊœD97709úh:9n·I9ŒÒN9( +Y9 &^9úh:9–~m9†Cc9†Cc9Àü€92Ú|9Ù`h9–~m9˜Œƒ9Àü€9–~m92Ú|9»œr9Ò¬ˆ9Àü€9˜Œƒ9ž†9˜Œƒ9ÀÍ9Àü€9Ò¬ˆ92Ú|9E»w9Ù`h9Àü€92Ú|9†Cc9–~m9E»w9»œr9¢‚?9n·I9ÕO59úh:9OÚ9ÕO59#+9ÕO59#+9p¯9ž&9úh:9úh:9îS9¢‚?9¢‚?9¢‚?9îS9#+9úh:9ŒÒN9úh:9ÊœD9ÊœD9îS9¢‚?9«ð 9OÚ9p¯9OÚ97709#+9OÚ9ÕO59p¯9øš 9p¯9Ä9‡#È8«ð 9#+97709#+9 &^9îS9–~m9 &^9†Cc9†Cc9ŒÒN9îS9Ù`h9Ù`h9ž†9Ò¬ˆ93=‹9y^9k€•9y^9]ï’92Ú|9»œr9k€•9k€•9ÀÍ9;ÆŸ9öë¶9'Ʊ9'Ʊ9ä ¬9X¢9ê¤9£š9‹49£˜9X¢9£š9ê¤9Ò¬ˆ9Ò¬ˆ93=‹9ž†9E»w9–~m9Àü€92Ú|9ŒÒN9Ù`h9Ò¬ˆ9ž†9Àü€9Àü€9–~m9Àü€9E»w9†Cc9˜Œƒ9–~m9Àü€9Ù`h9–~m9»œr9E»w9†Cc9( +Y9–~m9¢‚?9ŒÒN9n·I9ÊœD9n·I97709OÚ9% ð8t9% ð8Ù¾8#ð³8Z£‹8Æ 8šo8ù²•8šo8šo8f–8ù²•8l^Ü8f–8— +[8RG8Æ 8f–8Ù©8@Ò8f–8Æ 8Ù©8w~æ8ù²•8Z£‹8ù²•8@Ò8#ð³8Ù¾8Ù¾8l^Ü8Ù¾8% ð8@Ò8% ð8t9t9w~æ8dÃú8+‡9øš 97709OÚ9p¯9+‡9t9ÅŸ8Z£‹8Ù©8Z£‹8Ù©8ÅŸ8— +[8Z£‹8— +[8RG8Ñ !7¹0Ÿ7¹0Ÿ7/ûŠ¶?¦6ÊÈ¿·šsç·šsç·ÊÈ¿·D·3<˜·}C¸é¨¸é¨¸ Þ‰¸é¨¸ÊÈ¿·4퓸xи„A¼¸xиC×î¸ßµä¸^ʹ¶ ¹]¹"%¹‰9*¹^ʹV¢¹"%¹>úø¸¶ ¹^ʹõ¹E ¹^ʹV¢¹`ß¹`ß¹‰9*¹¶ ¹¶ ¹V¢¹>úø¸]¹ßµä¸ßµä¸>úø¸>úø¸>úø¸]¹–Ú¸V¢¹^ʹE ¹]¹V¢¹^ʹE ¹`ß¹‰9*¹õ¹»¶C¹‰9*¹^ʹ"%¹V¢¹^ʹ„Q/¹¶ ¹„Q/¹C×î¸ßµä¸¶ ¹V¢¹–Ú¸*)²¸áþ¸Û[Ƹ*)²¸ Þ‰¸„A¼¸4퓸*)²¸–ڸ騸xи4퓸*)²¸Û[Ƹáþ¸é¨¸„A¼¸Û[Ƹáþ¸„A¼¸*)²¸é¨¸Û[Ƹ>úø¸¶ ¹>úø¸ßµä¸ßµä¸ßµä¸–Ú¸"%¹^ʹC× ¹`ß¹ªœ>¹E ¹ÑS¹"%¹»¶C¹ÑS¹þ\b¹ç—l¹RìM¹*@]¹ç—l¹rÔv¹rÔv¹?9ˆ¹F‰€¹F‰€¹úµq¹F‰€¹² •¹?9ˆ¹˜ÉŠ¹½Àœ¹fRŸ¹¬{’¹¹ j4¹ƒ9¹‰9*¹E ¹‰9*¹ªœ>¹ªœ>¹ƒ9¹ j4¹ÑS¹„Q/¹JÑH¹»¶C¹ªœ>¹ªœ>¹"%¹ j4¹E ¹„Q/¹ j4¹„Q/¹‰9*¹„Q/¹JÑH¹‰9*¹‰9*¹ƒ9¹RìM¹*@]¹»¶C¹"%¹»¶C¹ƒ9¹ç—l¹þ\b¹ªœ>¹*@]¹Ä#X¹Ä#X¹F‰€¹¹‰9*¹‰9*¹õ¹õ¹JÑH¹»¶C¹»¶C¹„Q/¹"%¹ j4¹„Q/¹ j4¹»¶C¹ªœ>¹„Q/¹V¢¹E ¹„Q/¹C×î¸^ʹ"%¹¶ ¹C×ڸ`ß¹]¹C×î¸ßµä¸4퓸4퓸$ƒW¸ Þ‰¸%£¸%£¸~ˆ¸ÊÈ¿·/«a·$ƒW¸$ƒW¸k¸}C¸4퓸ś¸}C¸áþ¸šsç·3<˜· Þ‰¸Å›¸ Þ‰¸ ~/¸~ˆ¸}C¸ ~/¸ÊÈ¿· ~/¸ÊÈ¿·3<˜·*)²¸„A¼¸ Þ‰¸~ˆ¸ Þ‰¸4퓸Û[Ƹ–Ú¸Û[Ƹxи Þ‰¸áþ¸Û[Ƹ騸 Þ‰¸ßµä¸V¢¹Û[Ƹ„A¼¸xиߵä¸C×A¼¸„A¼¸Û[Ƹ*)²¸>úø¸ßµä¸Û[Ƹ*)²¸xи>úø¸–ڸ騸ߵ世ڸ>úø¸–Ú¸¶ ¹V¢¹]¹¶ ¹`ß¹E ¹^ʹV¢¹ j4¹¶ ¹¶ ¹‰9*¹^ʹߵä¸xи*)²¸xиxи4퓸騸 Þ‰¸ Þ‰¸áþ¸*)²¸ Þ‰¸ÊÈ¿·~ˆ¸/ûŠ¶ôˆÏ43<˜·?¦6[…o7ÃÆ7RG8[…o7?¦6ÃÆ7?¦6¦rî7N 8[…o7N 8— +[8RG8f–8Z£‹8f–8— +[8Ù¾8#ð³8@Ò8‡#È8ù²•8Ù¾8‡#È8Ù©8l^Ü8‡#È8@Ò8w~æ8‡#È8l^Ü8t9w~æ8#ð³8f–8f–8s38ù²•8ÅŸ8— +[8šo8Æ 8¦rî7N 8N 8šo8ÃÆ7ÊÈ¿·/«a·ôˆÏ4/«a·/ûŠ¶/«a·3<˜·ÊÈ¿·D·šsç· Þ‰¸ ~/¸3<˜·}C¸/ûŠ¶ÃÆ7/«a·/ûŠ¶3<˜·Ñ !7/«a·/ûŠ¶?¦6N 8šo8¦rî7s38N 8N 8s38ÅŸ8Ù©8— +[8Z£‹8#ð³8#ð³8Ù¾8Ù¾8@Ò8dÃú8@Ò8dÃú8t9ž&9ž&9¢‚?9( +Y9†Cc9–~m9 &^9Ù`h9Àü€9˜Œƒ9ÀÍ9k€•9y^9k€•9ž†9£š9;ÆŸ9X¢9y^9£š91|§93=‹9ž†9Àü€9˜Œƒ9y^9ž†9˜Œƒ9Àü€9–~m9˜Œƒ92Ú|9Ù`h9îS9 &^9†Cc9ÊœD9ŒÒN9( +Y9( +Y9–~m9ÊœD9ŒÒN9( +Y9ŒÒN9Ù`h9E»w9E»w9»œr9»œr9ŒÒN9–~m9ÊœD9«ð 9ŒÒN9ÊœD9n·I9ŒÒN9ž&97709ž&97709ÕO59úh:9øš 9øš 9«ð 9øš 9p¯9úh:9#+97709ž&9¢‚?9¢‚?9¢‚?9ÊœD9ŒÒN9ÕO59ÊœD9†Cc9ÊœD9ÊœD9–~m9–~m9»œr9˜Œƒ9˜Œƒ9k€•9Ò¬ˆ9Ò¬ˆ9£š9;ÆŸ9X¢9;ÆŸ9£š9‹49‹49k€•9X¢9öë¶9þX´9¬¥¾9ÈÌÃ9‡`Æ9¬¥¾9N¼9*9Á9}Î9¬¥¾9‡`Æ9ÈÌÃ9t3¯9¬¥¾9¬¥¾9‡`Æ9eôÈ9N¼9}Î9¬¥¾9'Ʊ9¬¥¾9*9Á9‡`Æ9¸°Ð9‡`Æ9N¼9öë¶9öë¶9öë¶9t3¯91|§9ä ¬9öë¶9þX´9X¢9X¢9k€•9]ï’9k€•9Àü€9˜Œƒ9ž†9˜Œƒ9˜Œƒ9]ï’9ž†9†Cc9†Cc9îS9†Cc9n·I9( +Y9ÕO59¢‚?9( +Y9«ð 9ÕO59#+9Ä9#+9p¯9OÚ9t9w~æ8t9% ð8øš 9+‡9dÃú8OÚ9OÚ9Ä9øš 9OÚ9#+9ž&9«ð 9#+9¢‚?9ÊœD9úh:9#+9( +Y9ÕO59ŒÒN9Ù`h9( +Y9»œr9˜Œƒ9Ò¬ˆ9–~m9ž†9ÀÍ92Ú|9Àü€9ÀÍ9;ÆŸ9;ÆŸ9k€•9£˜9£š9ê¤9X¢9y^9£˜9]ï’9;ÆŸ9X¢9X¢9;ÆŸ9£˜9k€•9£š9k€•93=‹9˜Œƒ92Ú|9˜Œƒ93=‹9˜Œƒ9»œr9Ò¬ˆ9Ò¬ˆ9˜Œƒ9Àü€9ÀÍ9£š9Ò¬ˆ9E»w9Àü€9Àü€9E»w9E»w9Àü€9Ù`h9Ù`h9†Cc9ŒÒN9ž&9ž&9#+9ž&9øš 9% ð8@Ò8w~æ8#ð³8Ù¾8‡#È8ù²•8ÅŸ8ù²•8— +[8ÃÆ7[…o7f–8N 8ÃÆ7¹0Ÿ7s38Æ 8Ù©8šo8šo8Ñ !7[…o7Z£‹8ÃÆ7[…o7¹0Ÿ7/ûŠ¶/ûŠ¶?¦63<˜·D·?¦6D·D·ÊÈ¿·?¦63<˜·ÊÈ¿·3<˜·?¦6Ñ !7Ñ !7¦rî7ôˆÏ4/«a·ôˆÏ4¦rî73<˜·/ûŠ¶D·/«a·ôˆÏ4/ûŠ¶/ûŠ¶/ûŠ¶N 8Ñ !7[…o7N 8ÃÆ7?¦6ôˆÏ4ôˆÏ4~ˆ¸$ƒW¸~ˆ¸ Þ‰¸ Þ‰¸4퓸4퓸áþ¸ Þ‰¸%£¸}C¸*)²¸~ˆ¸ Þ‰¸áþ¸ Þ‰¸„A¼¸Û[Ƹ4퓸}C¸áþ¸é¨¸áþ¸4퓸k¸}C¸ Þ‰¸*)²¸4퓸~ˆ¸é¨¸V¢¹]¹é¨¸C×A¼¸*)²¸*)²¸ßµä¸*)²¸>úø¸xи„A¼¸ßµä¸xи„A¼¸ Þ‰¸áþ¸ Þ‰¸k¸Å›¸ ~/¸ ~/¸}C¸k¸ÊÈ¿·Å›¸~ˆ¸ Þ‰¸}C¸šsç·3<˜·/ûŠ¶?¦6D·ôˆÏ4?¦6/ûŠ¶ôˆÏ4ôˆÏ4Æ 8Æ 8Æ 8f–8Æ 8šo8#ð³8Z£‹8ù²•8#ð³8Ù©8w~æ8øš 9l^Ü8@Ò8l^Ü8% ð8@Ò8‡#È8l^Ü8w~æ8w~æ8‡#È8t9w~æ8% ð8Ù©8Ù©8l^Ü8t9% ð8‡#È8% ð8w~æ8w~æ8øš 9l^Ü8dÃú8Z£‹8šo8Ù©8Ù¾8ÅŸ8Æ 8— +[8¦rî7— +[8ù²•8[…o7?¦6?¦6¹0Ÿ7D·[…o7N 8?¦6D·Ñ !7?¦6N 8ÃÆ7Ñ !7[…o7Ñ !7¹0Ÿ7ôˆÏ4Å›¸ÊÈ¿·ÊÈ¿·šsç·/ûŠ¶3<˜·/«a·/«a·[…o7[…o7[…o7¦rî7Ñ !7šo8ÃÆ7ÃÆ7šo8Ù©8šo8RG8f–8ÅŸ8— +[8šo8šo8Z£‹8ÃÆ7Æ 8Z£‹8— +[8šo8Ù¾8ÅŸ8f–8ÅŸ8Ù©8Ù©8w~æ8w~æ8@Ò8w~æ8Ù©8l^Ü8l^Ü8ù²•8l^Ü8Z£‹8Ù©8ÅŸ8#ð³8šo8— +[8N 8N 8¹0Ÿ7/«a·ÊÈ¿·Å›¸šsç·Å›¸ Þ‰¸áþ¸Å›¸~ˆ¸šsç·}C¸ ~/¸šsç·}C¸$ƒW¸é¨¸ Þ‰¸4퓸騸%£¸ Þ‰¸*)²¸áþ¸Û[Ƹߵä¸V¢¹C×î¸>úø¸>úø¸>úø¸"%¹"%¹‰9*¹"%¹õ¹»¶C¹»¶C¹ƒ9¹„Q/¹ƒ9¹„Q/¹ j4¹þ\b¹JÑH¹RìM¹*@]¹ƒ9¹JÑH¹ªœ>¹»¶C¹ƒ9¹JÑH¹Ä#X¹RìM¹ªœ>¹„Q/¹ j4¹"%¹õ¹`ß¹‰9*¹"%¹–Ú¸>úø¸é¨¸4퓸 Þ‰¸}C¸~ˆ¸D·3<˜·ÊÈ¿·šsç·}C¸~ˆ¸/«a·/ûŠ¶šsç·ÊÈ¿·3<˜· ~/¸$ƒW¸$ƒW¸Å›¸ ~/¸}C¸ ~/¸ Þ‰¸é¨¸é¨¸ Þ‰¸%£¸4퓸Û[Ƹk¸é¨¸ Þ‰¸4퓸*)²¸áþ¸4퓸 Þ‰¸ßµä¸„A¼¸ßµä¸xиV¢¹¶ ¹]¹C×î¸>úø¸–Ú¸xи–Ú¸C× ¹xи¶ ¹C×î¸xи>úø¸–Ú¸C× ¹`ß¹õ¹¶ ¹E ¹^ʹõ¹^ʹ`ß¹õ¹õ¹õ¹õ¹]¹^ʹõ¹>úø¸>úø¸]¹]¹^ʹ^ʹ]¹]¹–ڸߵä¸Û[Ƹ>úø¸ßµä¸áþ¸k¸$ƒW¸k¸$ƒW¸ ~/¸Å›¸ Þ‰¸ ~/¸?¦6Ñ !7/ûŠ¶/«a·/«a·D·Æ 8[…o7¹0Ÿ7N 8[…o7¦rî7ÃÆ7?¦6ÃÆ7/«a·šsç·Ñ !7¹0Ÿ7ÃÆ7ÃÆ7N 8šo8s38RG8¦rî7¦rî7ÃÆ7N 8¦rî7¦rî7Æ 8N 8¦rî7N 8N 8s38?¦6[…o7ôˆÏ4ôˆÏ4¹0Ÿ7/ûŠ¶?¦6Å›¸~ˆ¸3<˜·D·3<˜·ÊÈ¿·ÊÈ¿· ~/¸áþ¸k¸ Þ‰¸%£¸ Þ‰¸ Þ‰¸ Þ‰¸%£¸4퓸*)²¸%£¸%£¸$ƒW¸ Þ‰¸4퓸騸 ~/¸4퓸}C¸é¨¸*)²¸$ƒW¸4퓸Û[Ƹ$ƒW¸ Þ‰¸ Þ‰¸}C¸ Þ‰¸4퓸áþ¸$ƒW¸~ˆ¸ ~/¸%£¸áþ¸k¸3<˜·šsç·šsç·ôˆÏ43<˜·/ûŠ¶[…o7?¦6[…o7ôˆÏ4Æ 8ÃÆ7Ñ !7ôˆÏ4¹0Ÿ7s38¹0Ÿ7¦rî7s38ù²•8— +[8s38— +[8ÅŸ8ÅŸ8ù²•8f–8Ù©8ÅŸ8šo8šo8šo8šo8šo8ÃÆ7Æ 8s38N 8s38ÃÆ7ôˆÏ4ôˆÏ4Ñ !7D·D·?¦6?¦6?¦6ôˆÏ4/«a·¦rî7/ûŠ¶3<˜·/ûŠ¶ôˆÏ4/«a·ÊÈ¿·/ûŠ¶}C¸ÊÈ¿·šsç·~ˆ¸%£¸„A¼¸*)²¸–ڸ騸4퓸áþ¸ Þ‰¸k¸ Þ‰¸%£¸ Þ‰¸*)²¸$ƒW¸~ˆ¸áþ¸–Ú¸%£¸k¸é¨¸}C¸~ˆ¸$ƒW¸$ƒW¸$ƒW¸šsç·$ƒW¸D·Å›¸šsç·D·šsç· Þ‰¸k¸k¸ ~/¸ ~/¸/«a·šsç·Å›¸šsç·ôˆÏ4Å›¸šsç·/ûŠ¶/ûŠ¶ÃÆ7¦rî7s38— +[8ÃÆ7Æ 8RG8Æ 8Z£‹8RG8RG8— +[8Z£‹8Z£‹8šo8RG8ÅŸ8ù²•8s38ù²•8N 8Æ 8— +[8s38Æ 8¦rî7¹0Ÿ7Ñ !7/ûŠ¶Ñ !7¹0Ÿ7s38[…o7[…o7/ûŠ¶D·/«a·D·D·ôˆÏ4~ˆ¸ÊÈ¿·[…o7Å›¸D·šsç·$ƒW¸}C¸}C¸šsç·4퓸~ˆ¸ Þ‰¸$ƒW¸ ~/¸4퓸*)²¸„A¼¸áþ¸áþ¸*)²¸}C¸ ~/¸3<˜·~ˆ¸k¸k¸Å›¸~ˆ¸/«a· ~/¸4퓸 ~/¸3<˜·ÊÈ¿·šsç·}C¸?¦6Æ 8[…o7— +[8RG8s38s38šo8RG8— +[8s38N 8— +[8Ù¾8#ð³8#ð³8l^Ü8+‡9t9p¯9ž&9ž&9Ä9OÚ9Ä9úh:9#+9ÕO59#+9+‡9Ä9ž&9«ð 9OÚ9+‡9«ð 9øš 9+‡9w~æ8‡#È8w~æ8w~æ8#ð³8šo8ÅŸ8ÅŸ8Z£‹8šo8Z£‹8ù²•8— +[8s38N 8— +[8s38[…o7— +[8ÃÆ7s38— +[8— +[8¹0Ÿ7Ñ !7Æ 8[…o7ÊÈ¿·3<˜·D·D·~ˆ¸/«a·}C¸*)²¸3<˜·šsç· ~/¸šsç·$ƒW¸ Þ‰¸šsç·šsç·3<˜·?¦6D·?¦6?¦6D·ÃÆ7ôˆÏ4?¦6¦rî7Ñ !7[…o7ÃÆ7?¦6¦rî7s38f–8s38N 8Æ 8RG8[…o7šo8šo8šo8Z£‹8Z£‹8ù²•8ÅŸ8ù²•8Z£‹8ù²•8l^Ü8‡#È8‡#È8Ù©8w~æ8Z£‹8Ù¾8‡#È8ÅŸ8Ù¾8dÃú8l^Ü8Ù©8#ð³8ù²•8šo8— +[8Æ 8s38šo8¹0Ÿ7— +[8ù²•8Æ 8Æ 8f–8¦rî7¹0Ÿ7D·ôˆÏ4D·D·Ñ !7[…o73<˜·/ûŠ¶D·D·3<˜·~ˆ¸šsç· ~/¸é¨¸$ƒW¸ Þ‰¸áþ¸é¨¸}C¸ Þ‰¸$ƒW¸~ˆ¸ ~/¸šsç· ~/¸é¨¸ ~/¸~ˆ¸}C¸šsç·Å›¸Å›¸3<˜·ÊÈ¿·šsç·D·/«a·Å›¸3<˜·ÊÈ¿·D·D·[…o7Æ 8f–8RG8Ù©8f–8s38ù²•8Z£‹8f–8Z£‹8‡#È8dÃú8Ù¾8@Ò8Ù¾8w~æ8+‡9Ä9#+9ÊœD9¢‚?9ž&9Ä9‡#È8p¯9t9l^Ü87709p¯9OÚ9ž&9Ä9p¯9OÚ9Ä9OÚ9ÕO59p¯9øš 9OÚ9OÚ9øš 9ž&9Ä9OÚ9p¯9ž&9«ð 9t9+‡9% ð8w~æ8+‡9l^Ü8@Ò8w~æ8Ù¾8ù²•8ÅŸ8ù²•8Z£‹8šo8s38f–8N 8RG8s38s38¦rî7¹0Ÿ7¹0Ÿ7s38Æ 8[…o7/«a·¹0Ÿ7/«a·ÊÈ¿·D·D·?¦6ÃÆ7RG8N 8N 8— +[8RG8s38Z£‹8ù²•8ÅŸ8f–8šo8RG8f–8¦rî7s38f–8f–8šo8šo8Z£‹8šo8#ð³8Ù¾8@Ò8@Ò8% ð8dÃú8t9Ä9p¯9+‡9t9+‡9w~æ8+‡9p¯9% ð8Ù¾8Ù¾8#ð³8ù²•8s38šo8Z£‹8ÅŸ8#ð³8@Ò8ÅŸ8f–8ù²•8ù²•8— +[8f–8šo8#ð³8f–8¦rî7ÃÆ7¦rî7ÅŸ8RG8[…o7/ûŠ¶D·D·ôˆÏ4Å›¸Å›¸ÊÈ¿·šsç·Å›¸}C¸Å›¸k¸Å›¸~ˆ¸Å›¸~ˆ¸Å›¸Å›¸}C¸ ~/¸áþ¸Û[Ƹ Þ‰¸ Þ‰¸*)²¸ Þ‰¸$ƒW¸ Þ‰¸*)²¸šsç·~ˆ¸šsç·/ûŠ¶Å›¸}C¸/«a·/«a·šsç·šsç·D·ôˆÏ4Ñ !7ÃÆ7¹0Ÿ7¹0Ÿ7— +[8¦rî7Æ 8[…o7[…o7¹0Ÿ7?¦6ÃÆ7ÃÆ7?¦6N 8Æ 8RG8šo8— +[8Æ 8f–8— +[8ù²•8šo8— +[8Z£‹8Z£‹8‡#È8ÅŸ8l^Ü8w~æ8Ù¾8@Ò8Ù¾8‡#È8#ð³8ÅŸ8f–8Z£‹8ù²•8#ð³8‡#È8ÅŸ8‡#È8#ð³8l^Ü8f–8šo8— +[8Æ 8Æ 8¦rî7Ñ !7?¦6Ñ !7Ñ !7šsç·šsç·šsç·k¸~ˆ¸Å›¸ ~/¸$ƒW¸k¸*)²¸*)²¸„A¼¸>úø¸–Ú¸V¢¹¶ ¹>úø¸]¹V¢¹V¢¹V¢¹]¹^ʹ"%¹JÑH¹ƒ9¹ƒ9¹"%¹‰9*¹‰9*¹‰9*¹E ¹E ¹`ß¹–Ú¸>úø¸C×î¸V¢¹>úø¸„A¼¸–Ú¸áþ¸Û[Ƹ–Ú¸–Ú¸áþ¸ ~/¸šsç·Å›¸~ˆ¸ÊÈ¿·$ƒW¸~ˆ¸ ~/¸k¸ Þ‰¸~ˆ¸ÊÈ¿· ~/¸}C¸šsç·šsç·3<˜·3<˜·Å›¸~ˆ¸}C¸3<˜·}C¸ ~/¸k¸4퓸*)²¸é¨¸k¸é¨¸ Þ‰¸ Þ‰¸ Þ‰¸k¸$ƒW¸}C¸šsç· Þ‰¸„A¼¸„A¼¸*)²¸*)²¸]¹–Ú¸xи¶ ¹>úø¸V¢¹¶ ¹xиV¢¹`ß¹õ¹„Q/¹Ä#X¹ªœ>¹‰9*¹RìM¹ƒ9¹„Q/¹"%¹ƒ9¹ÑS¹RìM¹ÑS¹úµq¹Ä#X¹úµq¹ÑS¹E ¹‰9*¹"%¹^ʹV¢¹ßµä¸Û[Ƹߵ世ڸV¢¹>úø¸–ڸߵ世ڸÛ[Ƹߵä¸ßµä¸é¨¸ Þ‰¸k¸áþ¸ ~/¸Å›¸[…o7/«a·?¦6/«a·ôˆÏ4Ñ !7¹0Ÿ7[…o7¹0Ÿ7Ñ !7¹0Ÿ7¦rî7Ñ !7¦rî7ÃÆ7— +[8N 8¦rî7Ñ !7ÃÆ7ÅŸ8— +[8f–8— +[8— +[8šo8Z£‹8#ð³8ÅŸ8f–8ÃÆ7f–8RG8RG8— +[8— +[8ù²•8ù²•8ù²•8— +[8ù²•8ù²•8— +[8— +[8Z£‹8Z£‹8— +[8ù²•8šo8f–8Ù©8— +[8Z£‹8— +[8RG8RG8šo8N 8Æ 8N 8Ù¾8Z£‹8ÅŸ8¦rî7s38— +[8¦rî7?¦6?¦6ôˆÏ4/ûŠ¶Ñ !73<˜·D·/ûŠ¶/ûŠ¶D·3<˜·/«a·D·[…o7/ûŠ¶/«a·ôˆÏ4/«a·/«a·ÊÈ¿·~ˆ¸[…o7ôˆÏ4D·?¦6ÃÆ7¹0Ÿ7ÃÆ7[…o7— +[8Æ 8N 8— +[8N 8— +[8Ù©8— +[8— +[8Z£‹8s38ÅŸ8f–8ù²•8Z£‹8šo8#ð³8RG8f–8s38RG8— +[8¦rî7Z£‹8RG8¦rî7¦rî7[…o7¦rî7N 8¦rî7s38šo8šo8Z£‹8— +[8— +[8— +[8šo8Æ 8N 8ÃÆ7?¦6Ñ !7¹0Ÿ7ÊÈ¿·/ûŠ¶šsç·šsç·3<˜·$ƒW¸%£¸D·šsç·Å›¸ ~/¸ Þ‰¸ Þ‰¸ Þ‰¸ Þ‰¸Å›¸$ƒW¸ ~/¸šsç· Þ‰¸k¸%£¸áþ¸xи„A¼¸Û[Ƹ*)²¸*)²¸]¹C×î¸é¨¸%£¸ Þ‰¸4퓸k¸ Þ‰¸ Þ‰¸ Þ‰¸4퓸 ~/¸ÊÈ¿·~ˆ¸ÊÈ¿· ~/¸Å›¸Å›¸Å›¸~ˆ¸šsç·3<˜·/«a·Ñ !7¦rî7ôˆÏ4Ñ !7[…o7¹0Ÿ7D·D·D·Ñ !7¹0Ÿ7s38¹0Ÿ73<˜·Å›¸Ñ !7¦rî7ôˆÏ4/ûŠ¶?¦6D·?¦63<˜·ôˆÏ4 ~/¸}C¸šsç· ~/¸$ƒW¸~ˆ¸Å›¸}C¸~ˆ¸ÊÈ¿· Þ‰¸ Þ‰¸$ƒW¸%£¸4퓸4퓸 Þ‰¸é¨¸xиxи–Ú¸xиxиxиC×î¸ßµä¸>úø¸ßµä¸é¨¸–ڸߵä¸C×î¸]¹é¨¸ Þ‰¸áþ¸*)²¸C×î¸õ¹¶ ¹>úø¸õ¹E ¹]¹–Ú¸V¢¹C×î¸xи–Ú¸C×ڸ–Ú¸Û[ƸÛ[Ƹxи騸騸–ڸ騸xи*)²¸%£¸ Þ‰¸ ~/¸Å›¸*)²¸4퓸šsç·k¸4퓸}C¸}C¸šsç·Å›¸D·[…o7ôˆÏ4¹0Ÿ7RG8šo8f–8Z£‹8— +[8Z£‹8RG8— +[8ù²•8Z£‹8s38Ù©8— +[8Æ 8s38s38Æ 8Ù©8šo8¦rî7ÃÆ7— +[8¦rî7¹0Ÿ7¦rî7/«a·ôˆÏ4/ûŠ¶ÊÈ¿·/«a·¹0Ÿ7Ñ !7¹0Ÿ7[…o7/ûŠ¶D·Å›¸ÊÈ¿·šsç·ôˆÏ4šsç·/«a·D·/«a·šsç·D·Å›¸ôˆÏ4D·D·/«a·3<˜·?¦6ôˆÏ4ôˆÏ4ôˆÏ4?¦6Å›¸$ƒW¸$ƒW¸Å›¸}C¸$ƒW¸šsç·Å›¸/«a·3<˜·ÊÈ¿·/ûŠ¶/ûŠ¶Æ 8¦rî7¦rî7¹0Ÿ7Æ 8šo8RG8šo8Æ 8s38šo8Ù©8Ù¾8Ù©8RG8f–8RG8šo8ÅŸ8— +[8Ù©8@Ò8#ð³8w~æ8w~æ8t9dÃú8t9t9dÃú8% ð8@Ò8+‡9#ð³8@Ò8@Ò8w~æ8«ð 9t9øš 9ù²•8‡#È8t9#ð³8Ù¾8Ù¾8ù²•8ÅŸ8ÅŸ8dÃú8‡#È8Ù¾8Z£‹8‡#È8ÅŸ8Ù¾8Ù¾8ÅŸ8Ù¾8¦rî7šo8f–8RG8Ù©8Ù©8Ù¾8Z£‹8#ð³8‡#È8#ð³8ù²•8Æ 8f–8s38[…o7Æ 8Æ 8Æ 8Æ 8ÃÆ7¹0Ÿ7¦rî7ÃÆ7?¦6¹0Ÿ7/ûŠ¶D·?¦6ÊÈ¿·3<˜·šsç·/«a·ÊÈ¿·šsç·/«a·/ûŠ¶Ñ !7D·|Pd|1|24600|2013-282T15:32:13.397 ¦Ëj·¦Ëj·ÍaÄ·¦Ëj·ªðœ¶¦Ëj·5df75df7SÖé7ϱ08á)Â7ÓÍ8&»8>ö7SÖé75df7WÈ´á)Â7W·ªðœ¶>ö7WÈ´>ö75df7Ç°D8ϱ08>ö7&»8SÖé7ϱ08ÓÍ8K›š7á)Â7K›š7á)Â75df7>ö7ªðœ¶WÈ´&»8ÓÍ8K›š7&»8á)Â7SÖé7&»85df7>ö7>ö7WÈ´ÍaÄ·K›š7‡E”6ÍaÄ·Àì·ÏE¸uÖY¸4Ð1¸ÏE¸ÏE¸Žm½¸6•¸ÌÂÛ¸¤Ñ¸Žm½¸Žm½¸!9¹À‹¸ÌÂÛ¸¾âå¸{'ú¸&¹6•¸¤Ñ¸Pa¹Tð¸¾âå¸ÌÂÛ¸À‹¸w>©¸øT³¸Ù¸w>©¸À‹¸w>©¸6•¸À‹¸4Ð1¸ÏE¸ÏE¸.ë ¸4Ð1¸ªðœ¶¦Ëj·>ö7SÖé7ÓÍ8ªðœ¶W·5df75df7ªðœ¶K›š75df7WÈ´5df7K›š75df7ªðœ¶5df7ÓÍ8K›š75df7Ç°D8þk€8SÖé7:·X8ð­¨8ð­¨8&»8ò‡”8Ç°D8á)Â7ÓÍ8á)Â7:·X8ϱ08&»8ϱ08{Äl8{Äl8Ç°D8:·X8á)Â7>ö7‡E”6W·¦Ëj·Àì·ªðœ¶>ö7‡E”6K›š7SÖé7K›š7K›š7>ö7>ö7¦Ëj·Ù¸Ù¸4Ð1¸äm¸Ù¸ÍaÄ·ÏE¸ÏE¸.ë ¸À‹¸ÍaÄ·.ë ¸4Ð1¸À‹¸6•¸õû€¸ÏE¸øT³¸äm¸Ù¸ÏE¸Àì·.ë ¸uÖY¸ÍaÄ·`Ñœ·ªðœ¶¦Ëj·Ù¸`Ñœ·.ë ¸`Ñœ·`Ñœ·W·ªðœ¶‡E”6>ö7‡E”6‡E”6Àì·Ï±08K›š7WÈ´K›š7SÖé7ªðœ¶5df7K›š7SÖé7‡E”6>ö7K›š7ÓÍ8{Äl8á)Â7ªðœ¶‡E”6SÖé7>ö7Ç°D8SÖé7SÖé7WÈ´á)Â7{Äl8&»8:·X8:·X8ÓÍ8ϱ08&»85df7>ö75df7á)Â7>ö7ªðœ¶>ö7Àì·W·W·Ù¸uÖY¸ÏE¸4Ð1¸uÖY¸uÖY¸ÏE¸Àì·`Ñœ·`Ñœ·`Ñœ·`Ñœ·uÖY¸Àì·`Ñœ·ÍaÄ·4Ð1¸Àì·.ë ¸ÍaÄ·ÏE¸À‹¸À‹¸À‹¸6•¸À‹¸ÏE¸uÖY¸uÖY¸ÏE¸À‹¸Àì·4Ð1¸À‹¸Ù¸`Ñœ·ÍaÄ·À‹¸Žm½¸À‹¸Žm½¸À‹¸w>©¸À‹¸+*Ÿ¸uÖY¸ÏE¸À‹¸w>©¸uÖY¸+*Ÿ¸Àì·ÏE¸ÏE¸Àì·ÍaÄ·ÏE¸W·K›š7K›š7á)Â7>ö75df7&»8ÓÍ8ÓÍ8>ö7á)Â7Ç°D8:·X8:·X8&»8þk€8{Äl8á)Â7{Äl8¡xŠ8ϱ08ϱ08Ç°D85df7ϱ08Ä™ž8ϱ08>ö7ªðœ¶>ö7ÍaÄ·SÖé7W·.ë ¸ªðœ¶ÍaÄ·¦Ëj·`Ñœ·ÏE¸.ë ¸4Ð1¸Àì·ÍaÄ·WÈ´ÏE¸4Ð1¸.ë ¸ÏE¸ÏE¸6•¸uÖY¸õû€¸ˆÇ¸ÌÂÛ¸+*Ÿ¸À‹¸+*Ÿ¸+*Ÿ¸À‹¸À‹¸Žm½¸äm¸6•¸.ë ¸Àì·Ù¸äm¸uÖY¸.ë ¸4Ð1¸ÍaÄ·Àì·Ù¸`Ñœ·Àì·W·`Ñœ·W·¦Ëj·`Ñœ·W·ªðœ¶>ö7ªðœ¶WÈ´WÈ´W·ÓÍ8>ö7>ö7K›š7ÓÍ8WÈ´5df7K›š7ªðœ¶K›š7á)Â7W·&»8á)Â7ÓÍ8{Äl8&»8ÓÍ8Ç°D8K›š7:·X8ϱ08>ö7Ç°D8ÓÍ8SÖé7ÓÍ8>ö7Ù¸W·W·ÍaÄ·5df7>ö7ÓÍ8ÓÍ85df7á)Â7SÖé75df7SÖé7K›š7WÈ´>ö7W·`Ñœ·Àì·ÏE¸WÈ´W·W·Àì·4Ð1¸À‹¸øT³¸ˆÇ¸6•¸w>©¸ˆÇ¸Tð¸¤Ñ¸!9¹Pa¹Pa¹Œ¹X¹%¹w5¹Œ¹Pa¹âL ¹!9¹X¹%¹n¢ ¹X¹%¹TND¹Pa¹n¢ ¹ÖÐ*¹!9¹{'ú¸&¹¾â师ǸˆÇ¸äm¸À‹¸À‹¸+*Ÿ¸Àì·À‹¸ÍaÄ·¦Ëj·ÍaÄ·Àì·W·`Ñœ·.ë ¸ÍaÄ·¦Ëj·ªðœ¶>ö7ªðœ¶ªðœ¶>ö7W·ªðœ¶WÈ´>ö7ªðœ¶>ö7ªðœ¶WÈ´WÈ´5df7WÈ´W·SÖé7>ö7ªðœ¶WÈ´ªðœ¶ÍaÄ·‡E”6K›š7>ö7‡E”6W·.ë ¸¦Ëj·ªðœ¶¦Ëj·ªðœ¶WÈ´5df7‡E”6W·¦Ëj·ÏE¸Ù¸W·.ë ¸uÖY¸À‹¸À‹¸uÖY¸ÏE¸w>©¸ÌÂÛ¸¾âå¸+*Ÿ¸¤Ñ¸¤Ñ¸¾â帤ѸTð¸&¹w>©¸¤Ñ¸&¹¤Ñ¸{'ú¸Tð¸¤Ñ¸ev¹ev¹!9¹¾âå¸&¹!9¹Tð¸ˆÇ¸{'ú¸¤Ñ¸ÌÂÛ¸&¹!9¹{'ú¸ÌÂÛ¸{'ú¸¾âå¸øT³¸Žm½¸+*Ÿ¸À‹¸äm¸Tð¸w>©¸Žm½¸ÌÂÛ¸+*Ÿ¸6•¸w>©¸w>©¸øT³¸À‹¸õû€¸w>©¸¤Ñ¸À‹¸.ë ¸uÖY¸.ë ¸W·5df7‡E”6¦Ëj·K›š75df7WÈ´á)Â7>ö75df7‡E”6‡E”65df75df7WÈ´&»8á)Â7¦Ëj·`Ñœ·Àì·ªðœ¶>ö7ªðœ¶K›š7ªðœ¶¦Ëj·K›š7`Ñœ·.ë ¸äm¸äm¸¦Ëj·.ë ¸4Ð1¸`Ñœ·ÏE¸Ù¸4Ð1¸ÏE¸À‹¸uÖY¸À‹¸À‹¸+*Ÿ¸+*Ÿ¸6•¸w>©¸w>©¸ˆÇ¸ÌÂÛ¸Pa¹¾â帤ѸøT³¸õû€¸À‹¸6•¸øT³¸6•¸À‹¸À‹¸4Ð1¸+*Ÿ¸6•¸4Ð1¸4Ð1¸uÖY¸À‹¸À‹¸.ë ¸4Ð1¸À‹¸øT³¸¤Ñ¸uÖY¸ÏE¸uÖY¸ÍaÄ·Àì·äm¸Ù¸ÏE¸ÍaÄ·‡E”6‡E”6`Ñœ·5df7á)Â7>ö7{Äl8ϱ08ϱ08SÖé7‡E”6SÖé7ϱ08SÖé7K›š7:·X8ÓÍ8Ç°D8Ç°D8á)Â7:·X8&»8K›š7Ç°D8þk€8¡xŠ8Ä™ž8ò‡”8Ä™ž8{Äl8þk€8þk€8¡xŠ8Ä™ž8:·X8ϱ08>ö7ÍaÄ·‡E”6¦Ëj·¦Ëj·uÖY¸¦Ëj·Àì·uÖY¸À‹¸uÖY¸+*Ÿ¸6•¸Ù¸w>©¸À‹¸6•¸ÏE¸+*Ÿ¸øT³¸+*Ÿ¸Žm½¸Žm½¸6•¸+*Ÿ¸Žm½¸w>©¸äm¸Žm½¸Tð¸!9¹{'ú¸¤Ñ¸¾âå¸!9¹{'ú¸&¹!9¹Pa¹âL ¹ÌÂÛ¸ˆÇ¸¤Ñ¸¾âå¸w>©¸+*Ÿ¸Žm½¸øT³¸äm¸Žm½¸ÏE¸ÏE¸õû€¸Ù¸Àì·¦Ëj·¦Ëj·ÍaÄ·ÍaÄ·ªðœ¶Ç°D8:·X8ÓÍ8SÖé7{Äl8¡xŠ8Ä™ž8¡xŠ8Ç°D8ÓÍ8Ä™ž8{Äl8ϱ08{Äl8{Äl8Ç°D8ϱ08Ç°D8ϱ08:·X8SÖé7K›š7‡E”6>ö7á)Â75df7K›š7WÈ´5df7‡E”6ªðœ¶4Ð1¸`Ñœ·ÍaÄ·4Ð1¸À‹¸uÖY¸Àì·Ù¸.ë ¸¦Ëj·4Ð1¸øT³¸ÏE¸+*Ÿ¸ÌÂÛ¸¤Ñ¸w>©¸ÌÂÛ¸+*Ÿ¸Žm½¸{'ú¸ÌÂÛ¸ˆÇ¸âL ¹!9¹ÌÂÛ¸{'ú¸X¹%¹Pa¹ÌÂÛ¸ÌÂÛ¸ÌÂÛ¸Žm½¸ÌÂÛ¸&¹!9¹&¹ÌÂÛ¸!9¹ev¹!9¹ÌÂÛ¸ÌÂÛ¸âL ¹Tð¸Žm½¸¤Ñ¸ÌÂÛ¸6•¸6•¸4Ð1¸4Ð1¸uÖY¸ÏE¸ÏE¸4Ð1¸Àì·Ù¸Àì·`Ñœ·Ù¸ªðœ¶‡E”6ªðœ¶á)Â75df7á)Â7&»8ªðœ¶ÓÍ8á)Â75df7á)Â7ÓÍ8Ç°D8þk€8¹1Û8”Qå8Ëܼ8?÷Æ8¹1Û8?÷Æ8ð­¨8ð­¨8Ä™ž8:·X8Ä™ž8RIJ8RIJ8RIJ8ò‡”8ð­¨8Ëܼ8—Ñ8—Ñ8Ä™ž8{Äl8ò‡”8á)Â7SÖé7&»8ÓÍ8‡E”6ϱ08á)Â7K›š7ϱ08&»8&»8&»8Ç°D8:·X8‡E”6ϱ08&»8ϱ08Ç°D8SÖé7K›š7:·X8ϱ08{Äl8{Äl8¡xŠ8SÖé7‡E”6SÖé7&»8þk€85df7K›š7ªðœ¶`Ñœ·ªðœ¶K›š7¦Ëj·W·ÍaÄ·WÈ´‡E”6K›š7>ö7‡E”6W·W·K›š7W·ÍaÄ·W·WÈ´ÓÍ8ϱ08¡xŠ8&»8Ä™ž8:·X8{Äl8þk€8ϱ08ϱ08{Äl8¡xŠ8RIJ8RIJ8Ç°D8þk€8¹1Û8ò‡”8—Ñ8—Ñ8Ä™ž8¡xŠ8¡xŠ8¡xŠ8Ä™ž8Ëܼ8:·X8á)Â7RIJ8ò‡”8ð­¨8ð­¨8ð­¨8—Ñ8ò‡”8Ç°D8Ç°D8&»8Ç°D8>ö7>ö7á)Â7ªðœ¶ÍaÄ·Ù¸ªðœ¶Àì·¦Ëj·ÍaÄ·ÍaÄ·ÍaÄ·À‹¸6•¸Ù¸Ù¸äm¸+*Ÿ¸øT³¸À‹¸+*Ÿ¸ÏE¸Ù¸ÏE¸À‹¸uÖY¸À‹¸À‹¸ÏE¸øT³¸¤Ñ¸¤Ñ¸w>©¸À‹¸äm¸W·Àì·Àì·ÍaÄ·ÍaÄ·õû€¸À‹¸ÍaÄ·W·W·WÈ´K›š7&»8ÓÍ8ϱ08Ç°D8ÓÍ8:·X8þk€8¡xŠ8?÷Æ8Ëܼ8:·X8—Ñ8—Ñ8?÷Æ8—Ñ8sï8$–ù8”Qå8`ð9”Qå8—Ñ8‰-9ap%96C9 9 9h¸490D9|96C9~Ñ990D9ë>9ap%9ÚŸ/9|96C9 9`ð9€Y 9?÷Æ8$–ù8¹1Û8ð­¨8ð­¨8?÷Æ8RIJ8$–ù8Ëܼ8RIJ8¡xŠ8þk€8Ç°D8>ö7&»8á)Â7>ö7Àì·W·`Ñœ·ÏE¸Àì·`Ñœ·WÈ´`Ñœ·Ù¸ÏE¸ªðœ¶WÈ´.ë ¸À‹¸6•¸äm¸+*Ÿ¸Ù¸¦Ëj·¦Ëj·ÏE¸ÏE¸äm¸uÖY¸ÏE¸uÖY¸äm¸ÏE¸Ù¸4Ð1¸¦Ëj·.ë ¸ÍaÄ·ÍaÄ·uÖY¸WÈ´`Ñœ·¦Ëj·ªðœ¶5df7ªðœ¶WÈ´WÈ´>ö7‡E”6¦Ëj·¦Ëj·>ö7ªðœ¶>ö7K›š7SÖé7ÓÍ8þk€8¡xŠ8ÓÍ8ò‡”8SÖé7ÓÍ8Ç°D85df75df7Ç°D8ÓÍ8Ç°D8RIJ8Ä™ž8—Ñ8¡xŠ8þk€8Ä™ž8þk€8¡xŠ8Ä™ž8ò‡”8ò‡”8þk€8RIJ8Ä™ž8ò‡”8¡xŠ8Ç°D8ϱ08Ä™ž8{Äl8Ä™ž8¡xŠ8:·X8&»8{Äl8&»8&»8{Äl8{Äl8&»8{Äl8ÓÍ8Ç°D8ϱ08&»8ϱ08ÓÍ8ÍaÄ·.ë ¸W·á)Â7W·¦Ëj·K›š7W·WÈ´ªðœ¶WÈ´`Ñœ·W·ÍaÄ·¦Ëj·.ë ¸Ù¸ÍaÄ·`Ñœ·¦Ëj·WÈ´á)Â7á)Â7SÖé75df7&»8ÓÍ8á)Â7ϱ08¡xŠ8Ç°D8¡xŠ8{Äl8Ç°D8¡xŠ8ϱ08Ç°D8:·X8:·X8:·X8ò‡”8¡xŠ8Ä™ž8Ä™ž8ò‡”8Ä™ž8þk€8ð­¨8þk€8{Äl8ð­¨8Ëܼ8ò‡”8?÷Æ8ð­¨8ð­¨8Ëܼ8?÷Æ8ò‡”8ò‡”8Ä™ž8¡xŠ8ð­¨8Ä™ž8&»8ÓÍ8Ä™ž8\Ý9þk€8¡xŠ8ð­¨8{Äl8ò‡”8¡xŠ8ÓÍ8ò‡”8¹1Û8RIJ8—Ñ8Ä™ž8Ëܼ8ò‡”8ϱ08þk€8Ç°D8&»85df7SÖé7&»8&»8&»8ÓÍ8K›š7ªðœ¶¦Ëj·¦Ëj·`Ñœ·`Ñœ·ªðœ¶uÖY¸.ë ¸ÍaÄ·ÍaÄ·ÍaÄ·ªðœ¶`Ñœ·`Ñœ·5df75df7K›š7ÓÍ8K›š7>ö7á)Â7>ö7‡E”6‡E”65df7K›š7á)Â7SÖé7ÓÍ8ÓÍ8á)Â7Ç°D8{Äl8ϱ08ϱ08Ç°D8þk€8{Äl8—Ñ8ð­¨8þk€8—Ñ8$–ù8ò‡”8Ä™ž8—Ñ8¡xŠ8þk€8RIJ8$–ù8RIJ8Ëܼ8`ð9\Ý9—Ñ8$–ù8$–ù8‰-9”Qå8\Ý9sï8?÷Æ8?÷Æ86C9 9ap%9”Qå8—Ñ8sï8$–ù8sï8¹1Û8¹1Û8ð­¨8:·X8Ä™ž8?÷Æ8?÷Æ8ò‡”8¡xŠ8RIJ8¡xŠ8¡xŠ8RIJ8¡xŠ8¡xŠ8þk€8&»8&»8ÓÍ8>ö7`Ñœ·ªðœ¶ªðœ¶Àì·Ù¸4Ð1¸uÖY¸äm¸6•¸uÖY¸.ë ¸äm¸À‹¸w>©¸øT³¸À‹¸ˆÇ¸{'ú¸{'ú¸âL ¹áè/¹X¹%¹w5¹ñhI¹n¢ ¹ÖÐ*¹n¢ ¹Pa¹w5¹Œ¹ev¹ev¹Pa¹X¹%¹Tð¸¤Ñ¸ÌÂÛ¸&¹ÌÂÛ¸Žm½¸ˆÇ¸¤Ñ¸+*Ÿ¸øT³¸äm¸ˆÇ¸¾âå¸+*Ÿ¸4Ð1¸¦Ëj·.ë ¸`Ñœ·Àì·Àì·ÍaÄ·¦Ëj·¦Ëj·ÍaÄ·K›š7á)Â7Ç°D8:·X8þk€8þk€8¡xŠ8RIJ8ò‡”8¡xŠ8ò‡”8Ä™ž8þk€8RIJ8RIJ8¡xŠ8{Äl8ò‡”8ð­¨8Ä™ž8Ç°D8:·X8SÖé7Ç°D8Ç°D8ÓÍ8&»8&»8ÓÍ8`Ñœ·á)Â7{Äl8&»85df7SÖé7ªðœ¶‡E”6á)Â7ªðœ¶ÓÍ8>ö7WÈ´ªðœ¶`Ñœ·Ù¸À‹¸À‹¸À‹¸ÏE¸ÏE¸À‹¸äm¸4Ð1¸ˆÇ¸¾â帎m½¸+*Ÿ¸øT³¸¤Ñ¸Žm½¸À‹¸À‹¸w>©¸À‹¸Žm½¸À‹¸w>©¸õû€¸ÏE¸ÏE¸.ë ¸Àì·WÈ´.ë ¸`Ñœ·ÍaÄ·`Ñœ·ÍaÄ·ªðœ¶5df7á)Â7‡E”6á)Â7ϱ08{Äl8ϱ08{Äl8ð­¨8:·X8RIJ8?÷Æ8:·X8Ä™ž8{Äl8¡xŠ8¹1Û8¹1Û8$–ù8 9‰-9 9\Ý9`ð96C9|9?÷Æ8sï8”Qå8?÷Æ8ð­¨8?÷Æ8¹1Û8Ëܼ8?÷Æ8¹1Û8 9¹1Û8ò‡”8$–ù8ò‡”8ð­¨8RIJ8þk€8K›š7{Äl8>ö7á)Â7SÖé7K›š7K›š7ÍaÄ·ÍaÄ·‡E”6`Ñœ·`Ñœ·4Ð1¸Ù¸À‹¸ÏE¸6•¸øT³¸6•¸õû€¸ÌÂÛ¸Žm½¸+*Ÿ¸+*Ÿ¸øT³¸+*Ÿ¸6•¸õû€¸Žm½¸äm¸õû€¸.ë ¸À‹¸4Ð1¸`Ñœ·ÏE¸.ë ¸.ë ¸ÍaÄ·>ö7¦Ëj·‡E”6WÈ´ªðœ¶>ö7ªðœ¶Ï±08K›š7K›š7ϱ08&»8þk€8þk€8{Äl8{Äl8ϱ08SÖé7K›š7K›š7ÓÍ8SÖé7Ç°D8ÓÍ8:·X8þk€8á)Â7WÈ´Àì·ÍaÄ·5df7SÖé7&»8W·K›š7>ö7¦Ëj·Àì·¦Ëj·ÍaÄ·`Ñœ·Àì·Ù¸Ù¸`Ñœ·.ë ¸uÖY¸ªðœ¶ÏE¸.ë ¸äm¸+*Ÿ¸äm¸+*Ÿ¸ÌÂÛ¸¤Ñ¸øT³¸ˆÇ¸õû€¸À‹¸Žm½¸¤Ñ¸À‹¸ÌÂÛ¸ˆÇ¸ˆÇ¸¤Ñ¸¾âå¸ÌÂÛ¸Pa¹&¹¤Ñ¸+*Ÿ¸&¹¾âå¸Tð¸ˆÇ¸¾âå¸{'ú¸{'ú¸¾âå¸Pa¹Tð¸&¹¾âå¸+*Ÿ¸+*Ÿ¸w>©¸+*Ÿ¸w>©¸uÖY¸øT³¸äm¸À‹¸ÌÂÛ¸À‹¸À‹¸Žm½¸øT³¸uÖY¸ÏE¸uÖY¸ÏE¸ÍaÄ·.ë ¸ªðœ¶5df7WÈ´á)Â7&»85df7K›š7{Äl8&»8&»8ϱ08Ç°D8RIJ8ð­¨8RIJ8sï8Ëܼ8RIJ8$–ù8—Ñ8?÷Æ8$–ù8ð­¨8¹1Û8”Qå8Ëܼ8?÷Æ8Ä™ž8Ç°D8K›š7ϱ08ÓÍ8þk€8{Äl8Ç°D8ÓÍ8RIJ8{Äl8&»8ϱ08Ç°D8>ö7{Äl8þk€8SÖé7á)Â7:·X8ϱ08Ç°D8Ä™ž8:·X8ϱ08:·X8ÓÍ8K›š75df7>ö7ªðœ¶5df75df7‡E”6ÓÍ8&»8WÈ´WÈ´¦Ëj·À췪𜶇E”6W·Àì·ÍaÄ·Àì·W·WÈ´`Ñœ·ÍaÄ·¦Ëj·>ö7K›š7‡E”6¦Ëj·¦Ëj·>ö75df7á)Â7K›š7þk€8ÓÍ8ÓÍ8&»8:·X8&»8ϱ08K›š7Ä™ž8ò‡”8:·X8Ä™ž8ò‡”8:·X8ð­¨8?÷Æ8Ç°D8Ä™ž8ð­¨8¹1Û8€Y 96C9€Y 96C9ÚŸ/96C9 9ap%9ap%9 9”Qå8$–ù8?÷Æ8RIJ8ð­¨8?÷Æ8Ëܼ8¡xŠ8¹1Û8ò‡”8RIJ8RIJ8?÷Æ8¡xŠ8þk€8Ç°D8{Äl8>ö7WÈ´W·`Ñœ·ªðœ¶¦Ëj·`Ñœ·W·Àì·.ë ¸WÈ´Àì·ÍaÄ·Ù¸`Ñœ·ÍaÄ·4Ð1¸Àì·W·.ë ¸õû€¸4Ð1¸ÏE¸Àì·Ù¸ÍaÄ·Àì·`Ñœ·ÍaÄ·ªðœ¶>ö7‡E”6ÍaÄ·‡E”6¦Ëj·`Ñœ·5df7W·ÍaÄ·WÈ´‡E”6ªðœ¶>ö7K›š7&»8&»8:·X8:·X8¡xŠ8á)Â7þk€8:·X8SÖé7{Äl8ϱ08ò‡”8Ä™ž8¡xŠ8Ëܼ8¡xŠ8RIJ8þk€8RIJ8—Ñ8Ëܼ8ð­¨8Ëܼ8?÷Æ8$–ù8—Ñ8\Ý9ð­¨8ð­¨8¹1Û8ò‡”8¡xŠ8RIJ8ò‡”8ò‡”8þk€8Ëܼ8”Qå8¹1Û8sï8”Qå8”Qå8¹1Û8?÷Æ8\Ý9$–ù8sï8?÷Æ8ð­¨8RIJ8þk€8Ëܼ8Ä™ž8¹1Û8þk€8¡xŠ8&»8&»8Ç°D8>ö7&»8&»8WÈ´‡E”6¦Ëj·`Ñœ·¦Ëj·¦Ëj·WÈ´ªðœ¶W·ªðœ¶5df7Àì·.ë ¸Ù¸4Ð1¸À‹¸.ë ¸Àì·`Ñœ·ªðœ¶K›š7WÈ´K›š7ªðœ¶W·ªðœ¶‡E”6‡E”6K›š7SÖé7:·X8Ç°D8þk€8¡xŠ8á)Â7ÓÍ8ÓÍ8¡xŠ8Ä™ž8þk€8{Äl8RIJ8Ëܼ8Ä™ž8þk€8ð­¨8?÷Æ8?÷Æ8ò‡”8?÷Æ8Ëܼ8—Ñ8¹1Û8$–ù8€Y 9 9$–ù8sï8\Ý9$–ù8RIJ8Ä™ž8Ëܼ8Ä™ž8?÷Æ8Ëܼ8þk€8Ä™ž8¹1Û8?÷Æ8sï8Ä™ž8RIJ8{Äl8ÓÍ8:·X8ò‡”8{Äl8Ç°D8ÓÍ8ϱ08SÖé7&»8ÓÍ8á)Â7¦Ëj·‡E”6‡E”6W·.ë ¸¦Ëj·ªðœ¶`Ñœ·Àì·ÏE¸+*Ÿ¸ÏE¸ÏE¸À‹¸6•¸ˆÇ¸øT³¸ˆÇ¸Tð¸!9¹{'ú¸Pa¹!9¹!9¹¤Ñ¸¤Ñ¸+*Ÿ¸6•¸¾âå¸6•¸w>©¸Žm½¸À‹¸ÏE¸4Ð1¸ÏE¸ÍaÄ·.ë ¸Àì·ÍaÄ·.ë ¸À‹¸WÈ´`Ñœ·Àì·Àì·W·‡E”6ªðœ¶ªðœ¶5df7¦Ëj·¦Ëj·WÈ´>ö75df7K›š7:·X8{Äl8:·X8:·X8K›š7:·X8&»8{Äl8ð­¨8:·X8{Äl8Ëܼ8Ä™ž8{Äl8&»8ÓÍ8¡xŠ8ð­¨8:·X8{Äl8Ä™ž8:·X8{Äl8&»8{Äl8SÖé7Ç°D8Ç°D8þk€8ÓÍ8á)Â7á)Â7&»8K›š7>ö7K›š7K›š7á)Â7á)Â75df7>ö7á)Â7K›š7SÖé7‡E”6ªðœ¶á)Â7ªðœ¶WÈ´.ë ¸Àì·uÖY¸Ù¸Àì·øT³¸äm¸õû€¸À‹¸Žm½¸+*Ÿ¸6•¸øT³¸À‹¸+*Ÿ¸ÌÂÛ¸¤Ñ¸ÌÂÛ¸Žm½¸¤Ñ¸ˆÇ¸w>©¸¾â师ǸøT³¸¾âå¸ÌÂÛ¸øT³¸Žm½¸øT³¸Žm½¸ÏE¸6•¸À‹¸`Ñœ·`Ñœ·ÍaÄ·á)Â7Àì·Ù¸4Ð1¸Àì·¦Ëj·WÈ´K›š7ÓÍ8SÖé7ÓÍ8K›š7WÈ´á)Â75df7{Äl8&»8‡E”6‡E”65df7‡E”6>ö7á)Â7&»8ò‡”8þk€8:·X8¡xŠ8{Äl8{Äl8:·X8ÓÍ8SÖé7Ç°D85df7WÈ´ÓÍ8ªðœ¶ÍaÄ·WÈ´.ë ¸Àì·Àì·À‹¸+*Ÿ¸¤Ñ¸w>©¸6•¸+*Ÿ¸6•¸w>©¸Žm½¸w>©¸ÌÂÛ¸¤Ñ¸øT³¸äm¸À‹¸6•¸6•¸w>©¸+*Ÿ¸Žm½¸w>©¸Žm½¸ˆÇ¸À‹¸øT³¸ˆÇ¸ˆÇ¸{'ú¸w>©¸w>©¸øT³¸+*Ÿ¸ÏE¸w>©¸4Ð1¸4Ð1¸uÖY¸Àì·ÍaÄ·uÖY¸4Ð1¸`Ñœ·Ù¸.ë ¸W·ÍaÄ·ªðœ¶WÈ´5df7ªðœ¶>ö7ÓÍ8>ö7á)Â7ϱ08{Äl8:·X8{Äl8{Äl8&»8¡xŠ8Ëܼ8Ëܼ8?÷Æ8 9¹1Û8\Ý9$–ù8|9|9—Ñ8—Ñ8ò‡”8—Ñ8?÷Æ8Ëܼ8¹1Û8RIJ8RIJ8—Ñ8¹1Û8—Ñ8?÷Æ8ò‡”8ò‡”8?÷Æ8—Ñ8þk€8ò‡”8Ä™ž8ò‡”8Ä™ž8Ä™ž8ò‡”8{Äl8:·X8:·X8SÖé7ÓÍ8SÖé7>ö7ÓÍ8SÖé7K›š7¦Ëj·K›š7ÓÍ8á)Â7{Äl8á)Â7>ö7&»85df7ÓÍ8K›š7>ö7‡E”6ªðœ¶ªðœ¶‡E”6ªðœ¶ªðœ¶ÓÍ85df7¦Ëj·W·ÍaÄ·ÍaÄ·.ë ¸Ù¸ªðœ¶W·.ë ¸Àì·Ù¸õû€¸Àì·Àì·.ë ¸Àì·K›š7ÓÍ8&»8SÖé7ϱ08ò‡”8{Äl8&»8&»8þk€8{Äl8¡xŠ8ò‡”8:·X8¡xŠ8sï8¹1Û8Ëܼ8¹1Û8$–ù8$–ù8 9|9‰-9?÷Æ8 9”Qå8?÷Æ8”Qå8`ð9 9sï8¹1Û8¹1Û8¹1Û8¹1Û8”Qå8—Ñ8—Ñ8`ð9Ëܼ8ð­¨8?÷Æ8¡xŠ8Ä™ž8Ä™ž8þk€8¡xŠ8Ä™ž8¡xŠ8{Äl8Ä™ž8RIJ8ð­¨8ò‡”8{Äl8K›š7SÖé7WÈ´ªðœ¶WÈ´ªðœ¶>ö7>ö75df7:·X8‡E”6K›š7WÈ´‡E”6¦Ëj·`Ñœ·.ë ¸`Ñœ·.ë ¸WÈ´ªðœ¶‡E”65df7Àì·ÍaÄ·ÍaÄ·ªðœ¶Ù¸WÈ´`Ñœ·¦Ëj·`Ñœ·¦Ëj·ÍaÄ·&»8W·¦Ëj·W·WÈ´>ö75df75df7SÖé7ϱ085df7>ö7ÓÍ8:·X8{Äl8Ä™ž8ϱ08ò‡”8{Äl8SÖé7K›š7þk€8á)Â7SÖé7:·X8‡E”6¦Ëj·ÓÍ8á)Â7>ö7:·X8Ç°D8ð­¨8ð­¨8ð­¨8¹1Û8Ä™ž8:·X8{Äl8ÓÍ8á)Â7&»8Ç°D8þk€8Ç°D8ϱ08W·á)Â7K›š7WÈ´K›š7¦Ëj·Àì·WÈ´ÍaÄ·4Ð1¸ªðœ¶WÈ´W·¦Ëj·¦Ëj·.ë ¸4Ð1¸Àì·.ë ¸ÍaÄ·.ë ¸ÏE¸.ë ¸äm¸Àì·.ë ¸uÖY¸4Ð1¸`Ñœ·Ù¸.ë ¸.ë ¸ÍaÄ·.ë ¸À‹¸Žm½¸Ù¸À‹¸À‹¸Àì·.ë ¸.ë ¸`Ñœ·¦Ëj·.ë ¸WÈ´WÈ´ÍaÄ·á)Â7ϱ08SÖé7‡E”6>ö7Ç°D8Ä™ž8{Äl8¡xŠ8?÷Æ8ð­¨8ð­¨8ò‡”8þk€8RIJ8Ëܼ8`ð9sï8Ä™ž8ð­¨8—Ñ8”Qå8ð­¨8ò‡”8þk€8ð­¨8ð­¨8”Qå8RIJ8Ëܼ8ð­¨8Ä™ž8¡xŠ8Ëܼ8ò‡”8ð­¨8ò‡”8SÖé7ò‡”8Ç°D8Ä™ž8ϱ08WÈ´&»8SÖé7ÓÍ8WÈ´W·.ë ¸.ë ¸4Ð1¸ÍaÄ·ÍaÄ·`Ñœ·‡E”65df7á)Â75df7K›š7WÈ´WÈ´`Ñœ·SÖé7K›š7ªðœ¶ÍaÄ·ÍaÄ·¦Ëj·.ë ¸ÏE¸ÏE¸.ë ¸ÍaÄ·äm¸4Ð1¸`Ñœ·Àì·¦Ëj·Ù¸Ù¸4Ð1¸õû€¸Žm½¸À‹¸uÖY¸ÏE¸À‹¸+*Ÿ¸6•¸ÏE¸.ë ¸Àì·>ö7ªðœ¶ªðœ¶5df7>ö7K›š75df7Àì·WÈ´>ö7ÍaÄ·W·5df7‡E”6ϱ08>ö75df7WÈ´¦Ëj·`Ñœ·ªðœ¶‡E”6K›š7WÈ´WÈ´ªðœ¶5df7K›š7K›š7SÖé7SÖé7Ç°D8&»8Ç°D8þk€8{Äl8{Äl8ò‡”8ò‡”8ò‡”8ò‡”8ð­¨8:·X8&»85df7á)Â75df7ÓÍ85df7ÍaÄ·Ù¸ÏE¸ÏE¸ÍaÄ·.ë ¸ˆÇ¸øT³¸Žm½¸w>©¸ÌÂÛ¸Tð¸ÌÂÛ¸&¹{'ú¸{'ú¸Tð¸Tð¸ˆÇ¸øT³¸ˆÇ¸Žm½¸w>©¸w>©¸6•¸ˆÇ¸øT³¸w>©¸Tð¸øT³¸Žm½¸!9¹Tð¸¤Ñ¸ÌÂÛ¸ˆÇ¸¤Ñ¸äm¸äm¸+*Ÿ¸õû€¸4Ð1¸À‹¸äm¸õû€¸4Ð1¸Àì·¦Ëj·¦Ëj·Ù¸.ë ¸Àì·.ë ¸À췪𜶪𜶦Ëj·¦Ëj·Àì·Àì·.ë ¸W·WÈ´WÈ´K›š7SÖé7þk€8ÓÍ8ÓÍ8{Äl8þk€8{Äl8þk€8&»8ϱ08ÓÍ8þk€8:·X8ÓÍ8ϱ08{Äl8ò‡”8‡E”6SÖé7K›š7&»8ð­¨8{Äl8Ç°D8:·X8ϱ08ÓÍ8ÓÍ8‡E”6WÈ´á)Â7ÓÍ8SÖé7SÖé7ªðœ¶¦Ëj·ÍaÄ·W·ÏE¸äm¸Àì·À‹¸+*Ÿ¸ˆÇ¸À‹¸ÏE¸øT³¸6•¸À‹¸+*Ÿ¸õû€¸À‹¸+*Ÿ¸Žm½¸øT³¸ÌÂÛ¸¾âå¸6•¸6•¸Žm½¸¾âå¸&¹Pa¹&¹¤Ñ¸w>©¸w>©¸øT³¸ˆÇ¸¤Ñ¸À‹¸äm¸w>©¸õû€¸øT³¸À‹¸Ù¸äm¸Ù¸.ë ¸ÍaÄ·.ë ¸¦Ëj·¦Ëj·á)Â7SÖé7&»8á)Â7á)Â7SÖé7‡E”65df7‡E”65df7ÍaÄ·W·WÈ´¦Ëj·ªðœ¶Ù¸uÖY¸.ë ¸ªðœ¶Àì·.ë ¸ÍaÄ·`Ñœ·W·ÍaÄ·ÍaÄ·ÍaÄ·4Ð1¸4Ð1¸¦Ëj·`Ñœ·4Ð1¸¦Ëj·`Ñœ·Ù¸Ù¸Àì·ÍaÄ·ÏE¸ÏE¸õû€¸À‹¸ÏE¸À‹¸õû€¸4Ð1¸+*Ÿ¸w>©¸w>©¸w>©¸+*Ÿ¸Žm½¸Žm½¸ÌÂÛ¸ˆÇ¸Žm½¸ÌÂÛ¸&¹Pa¹¤Ñ¸Žm½¸¤Ñ¸{'ú¸!9¹{'ú¸ev¹n¢ ¹Pa¹”:¹Œ¹Œ¹X¹%¹ÖÐ*¹Pa¹Œ¹n¢ ¹áè/¹Œ¹¾âå¸âL ¹âL ¹&¹&¹âL ¹Žm½¸¾âå¸&¹&¹w>©¸+*Ÿ¸Žm½¸4Ð1¸À‹¸+*Ÿ¸À‹¸ÏE¸ÏE¸W·`Ñœ·`Ñœ·.ë ¸ÍaÄ·ªðœ¶K›š7‡E”6á)Â7ϱ08ÓÍ8á)Â7:·X8SÖé7`Ñœ·á)Â7ϱ08‡E”6K›š7&»8SÖé7&»8‡E”6Àì·‡E”6ÓÍ8WÈ´¦Ëj·ÍaÄ·`Ñœ·ÍaÄ·`Ñœ·5df7ªðœ¶¦Ëj·.ë ¸ÏE¸ÏE¸ÍaÄ·Àì·uÖY¸ÍaÄ·À‹¸w>©¸6•¸w>©¸&¹&¹¾âå¸Tð¸Tð¸ev¹{'ú¸ÌÂÛ¸!9¹&¹¤Ñ¸âL ¹ÌÂÛ¸Tð¸!9¹¤Ñ¸ÌÂÛ¸{'ú¸Pa¹âL ¹Pa¹{'ú¸øT³¸6•¸Žm½¸õû€¸w>©¸Žm½¸ˆÇ¸¤Ñ¸ˆÇ¸ÌÂÛ¸6•¸À‹¸õû€¸.ë ¸Àì·.ë ¸‡E”6¦Ëj·¦Ëj·ÍaÄ·ÍaÄ·Àì·Ù¸.ë ¸5df7>ö7`Ñœ·W·K›š7ªðœ¶`Ñœ·ÍaÄ·`Ñœ·5df75df7K›š7>ö7&»8K›š7K›š7>ö75df7WÈ´W·5df7Àì·uÖY¸4Ð1¸À‹¸4Ð1¸4Ð1¸¤Ñ¸+*Ÿ¸w>©¸ˆÇ¸Žm½¸ev¹&¹Œ¹&¹ev¹X¹%¹X¹%¹âL ¹Œ¹X¹%¹Œ¹ev¹X¹%¹Œ¹X¹%¹X¹%¹44?¹TND¹áè/¹„N¹Ø]¹TND¹TND¹TND¹•»X¹44?¹”ŸS¹èôb¹„N¹TND¹„N¹TND¹w5¹”:¹ÖÐ*¹”:¹„N¹•»X¹44?¹ñhI¹TND¹áè/¹”ŸS¹n¢ ¹!9¹!9¹&¹&¹¤Ñ¸¾â帤ѸTð¸6•¸¤Ñ¸w>©¸Žm½¸À‹¸À‹¸À‹¸6•¸6•¸+*Ÿ¸4Ð1¸À‹¸ÏE¸4Ð1¸4Ð1¸6•¸À‹¸ÏE¸äm¸.ë ¸Àì·Ù¸ÍaÄ·`Ñœ·`Ñœ·‡E”6á)Â7K›š7>ö7á)Â7¦Ëj·WÈ´`Ñœ·‡E”6ÍaÄ·`Ñœ·>ö7`Ñœ·K›š7>ö7‡E”6‡E”6>ö7>ö7á)Â7>ö7K›š75df7ÍaÄ·‡E”65df7¦Ëj·.ë ¸¦Ëj·äm¸ÏE¸Ù¸ÏE¸4Ð1¸4Ð1¸6•¸ÏE¸+*Ÿ¸¤Ñ¸Tð¸Tð¸¤Ñ¸Žm½¸øT³¸øT³¸{'ú¸!9¹Œ¹!9¹{'ú¸!9¹Tð¸!9¹&¹Pa¹{'ú¸ÌÂÛ¸øT³¸¾âå¸ÌÂÛ¸øT³¸w>©¸äm¸À‹¸õû€¸6•¸ÏE¸ÍaÄ·.ë ¸Ù¸`Ñœ·¦Ëj·¦Ëj·¦Ëj·>ö7WÈ´ªðœ¶‡E”6‡E”6:·X8Ç°D8ò‡”8:·X8þk€8ð­¨8ò‡”8ò‡”8ð­¨8RIJ8Ëܼ8Ëܼ8—Ñ8?÷Æ8¹1Û8sï8sï8¹1Û8Ëܼ8Ä™ž8—Ñ8”Qå8”Qå8\Ý9\Ý9ð­¨8¹1Û8`ð9”Qå8¹1Û8”Qå8ò‡”8RIJ8ò‡”8{Äl8Ç°D8á)Â7SÖé7ÓÍ8K›š7á)Â7K›š7WÈ´5df7SÖé7ªðœ¶WÈ´Àì·5df7Àì·ÍaÄ·WÈ´Àì·uÖY¸4Ð1¸ÍaÄ·Àì·À‹¸Ù¸.ë ¸¦Ëj·4Ð1¸w>©¸+*Ÿ¸Žm½¸äm¸4Ð1¸ÍaÄ·¦Ëj·`Ñœ·`Ñœ·K›š7á)Â7K›š7WÈ´W·Àì·‡E”6‡E”65df7:·X8K›š7{Äl8K›š7ÓÍ8¡xŠ85df7K›š7þk€8ÓÍ8Ä™ž8:·X8þk€8¹1Û8Ëܼ8¹1Û8 9—Ñ8`ð9ÚŸ/9|9€Y 9ÚŸ/96C9ap%9ÚŸ/90D9ÚŸ/9ë>9ÆI9œ«b9[VS9Ö:N9UrX9ÂŽ]9“æl9¨°€9“æl9[VS9~Ñ99ÆI9ë>9ÚŸ/96C96C9~Ñ99‰-9ap%9‰-96C9\Ý9sï8”Qå8sï8—Ñ8¹1Û8—Ñ8¡xŠ8ò‡”8Ëܼ8sï8Ä™ž8ð­¨8ò‡”8ϱ08&»8Ç°D8þk€8{Äl8ð­¨8ò‡”8Ä™ž8:·X8ÓÍ8ϱ08ò‡”8&»8á)Â7SÖé7ϱ08Ä™ž8{Äl8ð­¨8ð­¨8¡xŠ8Ëܼ8Ç°D8¡xŠ8?÷Æ8¡xŠ8Ä™ž8RIJ8Ä™ž8—Ñ8?÷Æ8”Qå8Ëܼ8Ä™ž8—Ñ8ò‡”8ð­¨8—Ñ8”Qå8Ä™ž8Ä™ž8¡xŠ8ð­¨8?÷Æ8sï8`ð9|9\Ý9 9‰-9 9ÚŸ/9ap%9`ð9‰-9ap%9ÚŸ/9ap%9h¸49ë>9Ö:N9h¸49ë>9[VS9ë>9h¸49ÚŸ/9|9‰-9‰-9|9‰-9 9`ð9|9”Qå8 9|9RIJ8Ëܼ8 9”Qå8Ëܼ8ð­¨8RIJ8Ä™ž8ò‡”8?÷Æ8—Ñ8ð­¨8RIJ8—Ñ8ò‡”8{Äl8Ç°D8Ç°D8ò‡”8:·X8:·X8{Äl8{Äl8ϱ08&»8ϱ08&»8SÖé7SÖé7á)Â7ϱ08ϱ08ϱ08{Äl8Ç°D8{Äl8Ç°D8ÓÍ8&»8Ç°D8á)Â7Ç°D8{Äl8¡xŠ8Ä™ž8Ëܼ8ð­¨8Ëܼ8RIJ8ð­¨8Ëܼ8RIJ8sï8sï8Ä™ž8—Ñ8Ä™ž8ð­¨8ð­¨8”Qå8¹1Û8—Ñ8Ëܼ8—Ñ8sï8”Qå8`ð9 9”Qå8\Ý9`ð9\Ý9$–ù8?÷Æ8—Ñ8Ëܼ8Ä™ž8þk€8RIJ8ð­¨8ò‡”8ϱ08Ç°D8¡xŠ8{Äl8:·X8&»8ϱ08:·X8á)Â7Ç°D8Ç°D8{Äl8ϱ08Ç°D8þk€8¡xŠ8SÖé7:·X8á)Â7ÓÍ8Ç°D8ϱ08ÓÍ8:·X8:·X85df7SÖé75df7W·¦Ëj·‡E”6`Ñœ·`Ñœ·.ë ¸`Ñœ·äm¸uÖY¸Àì·õû€¸+*Ÿ¸6•¸+*Ÿ¸À‹¸+*Ÿ¸ˆÇ¸øT³¸w>©¸6•¸À‹¸¤Ñ¸6•¸øT³¸uÖY¸+*Ÿ¸äm¸Ù¸äm¸ÏE¸À‹¸À‹¸ÏE¸uÖY¸Àì·4Ð1¸Ù¸6•¸+*Ÿ¸4Ð1¸ÍaÄ·Àì·ÍaÄ·‡E”6¦Ëj·ÍaÄ·¦Ëj·¦Ëj·¦Ëj·ªðœ¶K›š7ÓÍ8WÈ´:·X8á)Â7ϱ08ϱ08{Äl8ò‡”8:·X8Ç°D8{Äl8ð­¨8¡xŠ8¡xŠ8SÖé7á)Â7ϱ08SÖé7ÓÍ8ÓÍ8‡E”6‡E”6‡E”6`Ñœ·Àì·¦Ëj·ªðœ¶`Ñœ·`Ñœ·WÈ´uÖY¸.ë ¸ªðœ¶WÈ´`Ñœ·4Ð1¸+*Ÿ¸Àì·4Ð1¸äm¸Ù¸ÏE¸À‹¸À‹¸¤Ñ¸w>©¸w>©¸+*Ÿ¸w>©¸Žm½¸6•¸¤Ñ¸¾âå¸6•¸w>©¸¤Ñ¸w>©¸Tð¸{'ú¸¤Ñ¸¤Ñ¸uÖY¸6•¸6•¸ÏE¸WÈ´`Ñœ·Ù¸Ù¸.ë ¸ÏE¸Àì·Ù¸.ë ¸ÍaÄ·`Ñœ·Àì·¦Ëj·ÍaÄ·‡E”6`Ñœ·ÏE¸Àì·Àì·.ë ¸K›š7ÓÍ8WÈ´‡E”6SÖé75df75df7á)Â7á)Â7þk€8Ä™ž8¡xŠ8¡xŠ8Ä™ž8ð­¨8Ä™ž8ò‡”8:·X8Ä™ž8—Ñ8RIJ8Ä™ž8‰-9|9 9?÷Æ8$–ù8Ä™ž8ò‡”8Ä™ž8ò‡”8ò‡”8RIJ8?÷Æ8RIJ8&»8á)Â7:·X8þk€8{Äl8SÖé7W·‡E”6ÍaÄ·¦Ëj·W·Ù¸Žm½¸uÖY¸uÖY¸Ù¸¦Ëj·.ë ¸ÍaÄ·uÖY¸.ë ¸Àì·Ù¸Àì·4Ð1¸äm¸uÖY¸ÏE¸6•¸Tð¸ˆÇ¸ˆÇ¸&¹Tð¸ÌÂÛ¸Žm½¸ÌÂÛ¸ÌÂÛ¸øT³¸À‹¸uÖY¸6•¸äm¸ÏE¸À‹¸Àì·Àì·ÏE¸4Ð1¸ªðœ¶‡E”6WÈ´W·‡E”6>ö7>ö7ϱ08ò‡”8ϱ08:·X8ð­¨8ÓÍ8Ä™ž8¡xŠ8ò‡”8Ç°D8Ç°D8RIJ8?÷Æ8þk€8?÷Æ8?÷Æ8¡xŠ8:·X8{Äl8þk€8:·X8ò‡”8Ä™ž8ò‡”8¹1Û8\Ý9”Qå8\Ý9ò‡”8RIJ8¹1Û8ò‡”8¡xŠ8—Ñ8Ç°D8ò‡”8:·X8þk€8{Äl8¡xŠ8þk€8&»8{Äl8ϱ08&»8&»8ϱ08>ö7>ö7‡E”6ªðœ¶W·`Ñœ·W·ÍaÄ·Àì·.ë ¸.ë ¸Àì·uÖY¸Ù¸Àì·ÍaÄ·W·Àì·Ù¸WÈ´¦Ëj·¦Ëj·W·WÈ´:·X8ªðœ¶ªðœ¶‡E”6ªðœ¶Àì·.ë ¸`Ñœ·¦Ëj·ÍaÄ·¦Ëj·ÓÍ8¦Ëj·á)Â7‡E”6á)Â7ϱ08&»8á)Â7SÖé7ϱ08þk€8>ö7ÓÍ8&»8á)Â7ϱ08Ç°D8{Äl8:·X8?÷Æ8Ëܼ8?÷Æ8¹1Û8`ð9sï8$–ù8|9 9”Qå8¹1Û8—Ñ8¹1Û8$–ù8sï8|9‰-9 9\Ý9`ð9sï8$–ù8RIJ8$–ù8¹1Û8ð­¨8”Qå8Ëܼ8ò‡”8Ëܼ8Ä™ž8ò‡”8{Äl8þk€8Ä™ž8{Äl8:·X8¡xŠ8{Äl8:·X8¡xŠ8¡xŠ8þk€8&»85df7>ö7SÖé7‡E”65df7K›š7SÖé7&»8ò‡”8SÖé75df7{Äl8ÓÍ8:·X8þk€8Ç°D8ò‡”8{Äl8&»8&»8WÈ´á)Â7á)Â7Ç°D8ÓÍ8á)Â75df7&»8&»8Ç°D8{Äl8SÖé7:·X8þk€8þk€8Ç°D8ÓÍ8:·X8á)Â7¡xŠ8ÓÍ8¡xŠ8þk€8ò‡”8ð­¨8Ëܼ8Ä™ž8?÷Æ8RIJ8¡xŠ8Ëܼ8”Qå8Ëܼ8Ëܼ8¹1Û8¹1Û8|96C9‰-9 9$–ù8”Qå8Ä™ž8—Ñ8?÷Æ8—Ñ8Ä™ž8sï8€Y 9$–ù8\Ý9$–ù8?÷Æ8”Qå8”Qå8Ä™ž8?÷Æ8?÷Æ8ò‡”8”Qå8?÷Æ8RIJ8—Ñ8¡xŠ8ò‡”8?÷Æ8Ëܼ8—Ñ8?÷Æ8{Äl8{Äl8¡xŠ8Ä™ž8þk€8Ç°D8¡xŠ8¡xŠ8þk€8ϱ08:·X8þk€8—Ñ8¡xŠ8ϱ08&»8ϱ08&»8á)Â7{Äl8&»8:·X8ϱ08á)Â7ϱ08{Äl8{Äl8á)Â7ϱ08ϱ08ϱ08Ç°D8SÖé7¡xŠ8þk€8{Äl8á)Â7ϱ08ÓÍ8SÖé75df7Ç°D8{Äl8&»8:·X8¡xŠ8RIJ8RIJ8”Qå8?÷Æ8¹1Û8\Ý9”Qå8—Ñ8\Ý9‰-9€Y 9€Y 9h¸49~Ñ996C9Ö‡*9~Ñ99ÚŸ/9Ö‡*90D9ap%9€Y 9ÚŸ/9€Y 9h¸49Ö‡*9|9Ö‡*9|9€Y 9~Ñ99‰-9ap%9Ö‡*9Ö‡*9|96C9‰-9Ö‡*9‰-9`ð9sï8”Qå8”Qå8$–ù8ð­¨8Ä™ž8þk€8:·X8Ç°D85df7K›š7á)Â7K›š7WÈ´5df7ªðœ¶`Ñœ·ÍaÄ·ÍaÄ·Àì·‡E”6¦Ëj·5df7ªðœ¶ÍaÄ·¦Ëj·ÍaÄ·Àì·äm¸äm¸uÖY¸Àì·À‹¸ÍaÄ·Àì·Àì·Àì·äm¸ÏE¸4Ð1¸ÏE¸ÍaÄ·Àì·ÍaÄ·.ë ¸ÍaÄ·ÍaÄ·ÍaÄ·.ë ¸ªðœ¶>ö7¦Ëj·W·¦Ëj·>ö7‡E”6Ç°D8K›š7á)Â7SÖé7K›š7SÖé7ÓÍ8K›š7ϱ08þk€8:·X8þk€8ÓÍ8á)Â7:·X8:·X8>ö7K›š7WÈ´‡E”6>ö7>ö7&»85df75df7ÓÍ8ÓÍ8SÖé7á)Â7SÖé7>ö7¦Ëj·Àì·ªðœ¶Ù¸4Ð1¸ªðœ¶Ù¸äm¸Àì·Àì·Ù¸uÖY¸À‹¸õû€¸À‹¸ˆÇ¸w>©¸+*Ÿ¸¤Ñ¸ÌÂÛ¸Žm½¸ˆÇ¸&¹{'ú¸&¹&¹âL ¹Œ¹&¹Œ¹ÖÐ*¹X¹%¹ev¹!9¹Pa¹âL ¹Œ¹Œ¹ÖÐ*¹X¹%¹X¹%¹âL ¹Pa¹{'ú¸Tð¸¤Ñ¸ÌÂÛ¸ˆÇ¸¤Ñ¸6•¸+*Ÿ¸Tð¸øT³¸¤Ñ¸øT³¸ˆÇ¸À‹¸Žm½¸Žm½¸øT³¸âL ¹{'ú¸w>©¸äm¸6•¸À‹¸ÏE¸À‹¸Àì·Ù¸4Ð1¸W·Àì·4Ð1¸ÏE¸4Ð1¸.ë ¸ÏE¸.ë ¸¦Ëj·¦Ëj·.ë ¸W·Àì·.ë ¸.ë ¸uÖY¸øT³¸w>©¸uÖY¸4Ð1¸+*Ÿ¸À‹¸øT³¸Žm½¸¤Ñ¸ÌÂÛ¸+*Ÿ¸Žm½¸âL ¹&¹&¹X¹%¹w5¹n¢ ¹ÖÐ*¹”:¹TND¹áè/¹•»X¹n¢ ¹áè/¹áè/¹”ŸS¹”:¹n¢ ¹ÖÐ*¹Pa¹&¹áè/¹X¹%¹ÖÐ*¹n¢ ¹!9¹Œ¹ÖÐ*¹áè/¹TND¹„N¹n¢ ¹!9¹Pa¹n¢ ¹áè/¹w5¹âL ¹ev¹Œ¹áè/¹n¢ ¹X¹%¹n¢ ¹ev¹{'ú¸&¹Pa¹ˆÇ¸¾âå¸Pa¹!9¹Žm½¸¤Ñ¸¾â师ǸTð¸ˆÇ¸w>©¸øT³¸øT³¸À‹¸6•¸À‹¸`Ñœ·ÍaÄ·Àì·K›š7K›š75df75df7á)Â7ªðœ¶¦Ëj·¦Ëj·SÖé7>ö7SÖé75df7&»8SÖé7‡E”6&»8á)Â7WÈ´&»8>ö7ªðœ¶ÍaÄ·`Ñœ·4Ð1¸.ë ¸WÈ´ªðœ¶W·>ö7ªðœ¶ÍaÄ·.ë ¸uÖY¸uÖY¸4Ð1¸.ë ¸ÏE¸ÍaÄ·.ë ¸À‹¸À‹¸w>©¸+*Ÿ¸À‹¸À‹¸Žm½¸ˆÇ¸øT³¸¾âå¸ÌÂÛ¸{'ú¸+*Ÿ¸w>©¸Žm½¸ˆÇ¸ˆÇ¸Žm½¸ˆÇ¸¤Ñ¸Tð¸!9¹{'ú¸Žm½¸+*Ÿ¸äm¸äm¸À‹¸4Ð1¸ÏE¸ÏE¸ÍaÄ·ªðœ¶Àì·4Ð1¸¦Ëj·ªðœ¶WÈ´ªðœ¶WÈ´WÈ´ªðœ¶K›š7>ö75df7SÖé7¡xŠ8ÓÍ8&»8ÓÍ8á)Â7ÓÍ8&»8ϱ08á)Â7:·X8{Äl8¡xŠ8ð­¨8ò‡”8Ëܼ8þk€8RIJ8—Ñ8ð­¨8?÷Æ8—Ñ8ò‡”8RIJ8ð­¨8þk€8{Äl8Ç°D8¡xŠ8ð­¨8Ç°D8:·X8{Äl8:·X8{Äl8SÖé7ϱ08ϱ08&»8:·X8&»8&»8á)Â7>ö7K›š7WÈ´‡E”6‡E”6W·Ù¸.ë ¸uÖY¸À‹¸À‹¸+*Ÿ¸Tð¸øT³¸õû€¸Žm½¸øT³¸w>©¸Žm½¸w>©¸Žm½¸À‹¸À‹¸w>©¸+*Ÿ¸À‹¸+*Ÿ¸+*Ÿ¸6•¸¾âå¸+*Ÿ¸+*Ÿ¸ÌÂÛ¸6•¸+*Ÿ¸6•¸+*Ÿ¸õû€¸w>©¸4Ð1¸Àì·Àì·Àì·ÏE¸`Ñœ·ÍaÄ·¦Ëj·`Ñœ·Àì·¦Ëj·Àì·ªðœ¶K›š7>ö7K›š7ÓÍ8ÓÍ8ϱ08ÓÍ85df7þk€8ò‡”8{Äl8:·X8Ä™ž8{Äl8Ç°D8—Ñ8—Ñ8?÷Æ8¡xŠ8Ä™ž8?÷Æ8¹1Û8`ð9sï8‰-9 9”Qå8sï8?÷Æ8Ëܼ8þk€8ò‡”8ð­¨8ÓÍ8Ç°D8á)Â75df7{Äl8ò‡”8þk€8ÓÍ8ϱ085df7{Äl8ÓÍ8á)Â7>ö7K›š7>ö7>ö7K›š7K›š7WÈ´&»8ªðœ¶W·¦Ëj·WÈ´¦Ëj·ªðœ¶>ö75df75df7ªðœ¶‡E”6W·W·Àì·`Ñœ·ªðœ¶SÖé7‡E”6`Ñœ·`Ñœ·Ù¸Àì·ÏE¸ÏE¸4Ð1¸4Ð1¸4Ð1¸ÍaÄ·ªðœ¶uÖY¸äm¸Àì·ÏE¸ÏE¸ÍaÄ·ÍaÄ·Ù¸Àì·4Ð1¸Àì·ÍaÄ·`Ñœ·¦Ëj·ªðœ¶5df75df7ªðœ¶¦Ëj·¦Ëj·`Ñœ·W·Àì·W·`Ñœ·5df7¦Ëj·ªðœ¶ÍaÄ·4Ð1¸äm¸4Ð1¸Àì·õû€¸.ë ¸uÖY¸õû€¸À‹¸Ù¸À‹¸4Ð1¸À‹¸ˆÇ¸À‹¸À‹¸À‹¸À‹¸Àì·ÏE¸ÏE¸Ù¸õû€¸uÖY¸w>©¸À‹¸Žm½¸õû€¸øT³¸À‹¸äm¸Ù¸+*Ÿ¸äm¸À‹¸6•¸À‹¸ÌÂÛ¸À‹¸À‹¸õû€¸øT³¸Tð¸ˆÇ¸{'ú¸&¹&¹Tð¸{'ú¸n¢ ¹Pa¹ev¹Pa¹{'ú¸!9¹{'ú¸âL ¹Tð¸ev¹âL ¹¾â帾â帾â师ǸTð¸¤Ñ¸6•¸4Ð1¸6•¸uÖY¸uÖY¸ÏE¸À‹¸äm¸uÖY¸ÏE¸uÖY¸ÏE¸¦Ëj·ÍaÄ·ªðœ¶¦Ëj·`Ñœ·ªðœ¶WÈ´á)Â7>ö7ªðœ¶Ï±08&»8WÈ´ÓÍ8ÓÍ8ÓÍ8ªðœ¶ÓÍ8ϱ08Ç°D8ÓÍ8ªðœ¶K›š7&»8{Äl8SÖé7:·X8SÖé7>ö7&»85df7&»8K›š7K›š7SÖé75df7ÓÍ85df7>ö7{Äl8Ç°D8>ö7‡E”6ÍaÄ·¦Ëj·5df7&»8K›š7ϱ08{Äl8:·X8ÓÍ8á)Â7WÈ´‡E”6á)Â7>ö7‡E”6ÍaÄ·K›š7W·.ë ¸Ù¸Àì·Àì·Ù¸.ë ¸¦Ëj·`Ñœ·Àì·ÍaÄ·Àì·`Ñœ·ÍaÄ·ÍaÄ·ÍaÄ·¦Ëj·ÍaÄ·.ë ¸‡E”6¦Ëj·‡E”6WÈ´À췪𜶪𜶪𜶪ðœ¶5df7¦Ëj·¦Ëj·¦Ëj·ÍaÄ·5df7W·ªðœ¶>ö7¦Ëj·‡E”6‡E”6‡E”6ÓÍ8á)Â7á)Â7K›š75df7K›š7ÓÍ8SÖé7á)Â7ÓÍ8:·X8á)Â7SÖé7ϱ08ϱ08‡E”6ÓÍ8SÖé7ÓÍ8ϱ08&»8&»8¡xŠ8:·X8SÖé7&»8ÓÍ8&»8þk€8:·X8&»8¦Ëj·á)Â7K›š75df7W·`Ñœ·Àì·`Ñœ·Ù¸`Ñœ·Àì·4Ð1¸Àì·4Ð1¸.ë ¸4Ð1¸À‹¸ÏE¸4Ð1¸4Ð1¸4Ð1¸õû€¸4Ð1¸w>©¸4Ð1¸+*Ÿ¸À‹¸ÍaÄ·À‹¸uÖY¸4Ð1¸Ù¸À‹¸¦Ëj·W·ªðœ¶¦Ëj·>ö7K›š75df7>ö7ªðœ¶5df7‡E”6`Ñœ·ªðœ¶>ö7á)Â7>ö7‡E”6&»8`Ñœ·ÓÍ8K›š7SÖé7ð­¨8ϱ08ò‡”8?÷Æ8Ä™ž8Ëܼ8ò‡”8þk€8Ä™ž8Ëܼ8þk€8Ëܼ8þk€8RIJ8RIJ8?÷Æ8¹1Û8Ëܼ8RIJ8?÷Æ8Ëܼ8sï8RIJ8Ç°D8ò‡”8ð­¨8RIJ8{Äl8Ç°D8{Äl8&»8ϱ08>ö7>ö7þk€8&»8‡E”6ÓÍ8SÖé7:·X8Ä™ž8SÖé7Ç°D8Ç°D8&»8ϱ08K›š7‡E”6‡E”6W·K›š7Ù¸`Ñœ·ªðœ¶ÍaÄ·+*Ÿ¸ÏE¸+*Ÿ¸øT³¸ˆÇ¸Žm½¸+*Ÿ¸6•¸ˆÇ¸ˆÇ¸Àì·À‹¸+*Ÿ¸.ë ¸uÖY¸äm¸4Ð1¸uÖY¸øT³¸øT³¸6•¸+*Ÿ¸À‹¸õû€¸äm¸ÍaÄ·Àì·4Ð1¸ÍaÄ·Àì·`Ñœ·À‹¸Ù¸ÍaÄ·Ù¸4Ð1¸.ë ¸ÍaÄ·WÈ´ÍaÄ·ÍaÄ·ªðœ¶ªðœ¶‡E”6K›š7‡E”6W·¦Ëj·À췪𜶦Ëj·ªðœ¶ÍaÄ·SÖé7ÓÍ8Ç°D8ϱ08Ç°D8Ä™ž8&»8K›š75df7SÖé7ÓÍ85df7&»8á)Â7WÈ´ÓÍ8‡E”6ªðœ¶‡E”6á)Â7W·Àì·Àì·¦Ëj·ÍaÄ·4Ð1¸w>©¸À‹¸w>©¸õû€¸ÌÂÛ¸Tð¸øT³¸{'ú¸{'ú¸{'ú¸ev¹n¢ ¹Œ¹ev¹&¹&¹âL ¹ÌÂÛ¸!9¹Tð¸¾âå¸&¹{'ú¸!9¹ÌÂÛ¸!9¹&¹{'ú¸!9¹Tð¸Tð¸!9¹âL ¹¾âå¸+*Ÿ¸6•¸Ù¸äm¸.ë ¸W·.ë ¸ÍaÄ·ªðœ¶ªðœ¶á)Â7&»8ÓÍ8ϱ08ò‡”8Ç°D8:·X8Ä™ž8—Ñ8RIJ8ò‡”8Ç°D8¡xŠ8RIJ8Ëܼ8¡xŠ8Ä™ž8{Äl8&»8¡xŠ8Ç°D8¡xŠ8ò‡”8:·X8ò‡”8Ä™ž8:·X8Ä™ž8RIJ8sï8¹1Û8\Ý9¹1Û8sï8—Ñ8Ëܼ8?÷Æ8ap%9‰-9”Qå8sï8¹1Û8sï8”Qå8Ä™ž8¹1Û8—Ñ8—Ñ8—Ñ8Ëܼ8ò‡”8ð­¨8¡xŠ8RIJ8¡xŠ8¡xŠ8ò‡”8ð­¨8Ëܼ8þk€8¡xŠ8Ä™ž8þk€8þk€8:·X8:·X8:·X8ϱ08á)Â7&»8ªðœ¶W·¦Ëj·¦Ëj·¦Ëj·Àì·Ù¸Àì·Àì·ÍaÄ·>ö7á)Â7ϱ08:·X8K›š7ϱ08þk€8Ç°D8ÓÍ8¡xŠ8ϱ08{Äl8:·X8Ç°D8{Äl8þk€8ò‡”8¡xŠ8:·X8Ç°D8Ëܼ8{Äl8ϱ08Ç°D8þk€8ð­¨8—Ñ8Ëܼ8¡xŠ8—Ñ8¹1Û8RIJ8\Ý9‰-9`ð9`ð9‰-9 9ÚŸ/9‰-9|9ap%9h¸49~Ñ99`ð9|9sï8¹1Û8$–ù8¹1Û8¹1Û8€Y 9|9|9$–ù8”Qå8 9”Qå8€Y 9`ð9‰-9 9”Qå8$–ù8\Ý9$–ù8”Qå8?÷Æ8¹1Û8\Ý9Ä™ž8Ä™ž8:·X8ð­¨8ð­¨8\Ý9$–ù8$–ù8Ëܼ8—Ñ8?÷Æ8ò‡”8¡xŠ8þk€8ÓÍ8:·X8:·X8á)Â75df7K›š7¡xŠ8þk€8ÓÍ8¡xŠ8ÓÍ8á)Â7&»8‡E”6>ö7‡E”6SÖé7K›š75df7SÖé7á)Â7SÖé7ϱ08ÓÍ8ϱ08:·X8:·X8{Äl8&»8:·X8K›š7SÖé7:·X8K›š7ÓÍ8ò‡”8SÖé7:·X8Ä™ž8{Äl8ð­¨8ò‡”8&»8{Äl8¡xŠ8þk€8ò‡”8ò‡”8{Äl8ϱ08ϱ08:·X8ϱ08ò‡”8ò‡”8ϱ08Ä™ž8ò‡”8:·X8&»8&»8:·X8SÖé7ÓÍ8ϱ08ò‡”8ϱ08>ö7&»8K›š7WÈ´W·W·>ö7ÓÍ8á)Â7W·W·W·uÖY¸4Ð1¸uÖY¸ÏE¸.ë ¸ÍaÄ·ÍaÄ·`Ñœ·Ù¸4Ð1¸À‹¸À‹¸Ù¸ÏE¸À‹¸À‹¸+*Ÿ¸6•¸6•¸À‹¸6•¸øT³¸6•¸+*Ÿ¸uÖY¸ÏE¸ÌÂÛ¸+*Ÿ¸ˆÇ¸äm¸6•¸À‹¸Ù¸À‹¸¦Ëj·Àì·.ë ¸W·ªðœ¶>ö7SÖé7ϱ08ϱ08þk€8{Äl8ÓÍ8á)Â7K›š7&»8á)Â75df7&»8þk€8á)Â7{Äl8þk€8{Äl8ò‡”8Ëܼ8:·X8¡xŠ8K›š7&»8SÖé7&»8þk€8&»8ϱ08ϱ08{Äl8:·X8þk€8:·X8Ç°D8ÓÍ85df7W·ªðœ¶á)Â7ÍaÄ·`Ñœ·Àì·.ë ¸ÍaÄ·`Ñœ·ÍaÄ·.ë ¸`Ñœ·WÈ´>ö7ªðœ¶.ë ¸Àì·`Ñœ·.ë ¸Àì·Ù¸ÏE¸Ù¸ÍaÄ·ÏE¸Àì·Àì·4Ð1¸.ë ¸`Ñœ·Ù¸ÏE¸4Ð1¸uÖY¸Žm½¸À‹¸uÖY¸äm¸+*Ÿ¸uÖY¸ÏE¸õû€¸+*Ÿ¸Žm½¸õû€¸ÏE¸6•¸+*Ÿ¸À‹¸ÏE¸À‹¸À‹¸.ë ¸Àì·¦Ëj·WÈ´¦Ëj·WÈ´WÈ´5df7á)Â7ÓÍ8ÓÍ8&»8&»8:·X8þk€8SÖé7{Äl8ϱ08þk€8þk€8¡xŠ8ð­¨8þk€8ϱ08&»8¡xŠ8ÓÍ8Ç°D8Ç°D8&»8ð­¨8:·X8¡xŠ8`ð9?÷Æ8Ä™ž8Ëܼ8¡xŠ8¡xŠ8Ëܼ8—Ñ8”Qå8¹1Û8ò‡”8RIJ8ð­¨8{Äl8¡xŠ8ð­¨8Ëܼ8ò‡”8þk€8&»8Ä™ž8á)Â7&»8‡E”6SÖé7>ö7W·¦Ëj·Àì·W·W·WÈ´W·‡E”6SÖé7W·ÍaÄ·Àì·Ù¸4Ð1¸Àì·ÏE¸Àì·`Ñœ·6•¸ÏE¸W·4Ð1¸Ù¸Ù¸äm¸ÏE¸äm¸Àì·Ù¸.ë ¸ªðœ¶W·.ë ¸ªðœ¶`Ñœ·ÍaÄ·¦Ëj·`Ñœ·ÍaÄ·ªðœ¶W·>ö7:·X8K›š7K›š7á)Â7á)Â7:·X8Ä™ž8ò‡”8{Äl8ÓÍ8{Äl8:·X8¡xŠ8RIJ8ϱ08ò‡”8þk€8ÓÍ8&»8á)Â7&»8þk€8:·X8{Äl8{Äl8RIJ8Ä™ž8RIJ8—Ñ8RIJ8Ä™ž8sï8¹1Û8Ëܼ8”Qå8?÷Æ8sï8—Ñ8”Qå8sï8|9¹1Û8”Qå8Ä™ž8Ä™ž8þk€8RIJ8¹1Û8?÷Æ8—Ñ8Ëܼ8—Ñ8Ëܼ8:·X8SÖé7¡xŠ8{Äl8þk€8¡xŠ8þk€8¡xŠ8ϱ08á)Â7á)Â7K›š7á)Â7ϱ08á)Â7ªðœ¶¦Ëj·.ë ¸Àì·Àì·.ë ¸W·Ù¸uÖY¸ÏE¸À‹¸À‹¸.ë ¸ÏE¸¦Ëj·Àì·ÍaÄ·WÈ´>ö75df7ªðœ¶‡E”6W·K›š7ϱ08ÓÍ8K›š7ϱ08Ç°D8ϱ08ϱ08:·X8ÓÍ8ÓÍ8{Äl8ÓÍ8:·X8ò‡”8ò‡”8?÷Æ8—Ñ8”Qå8þk€8&»8:·X8Ä™ž8RIJ8{Äl8ð­¨8RIJ8?÷Æ8þk€8?÷Æ8RIJ8—Ñ8`ð9\Ý9 96C96C9|9`ð9¹1Û8?÷Æ8Ëܼ8—Ñ8¡xŠ8Ä™ž8þk€8Ä™ž8:·X8þk€8&»8ò‡”8{Äl8þk€8¡xŠ8{Äl8:·X8ð­¨8Ç°D8K›š7‡E”6K›š7>ö7K›š7W·¦Ëj·W·W·`Ñœ·‡E”6WÈ´WÈ´Ù¸¦Ëj·‡E”6`Ñœ·Ù¸W·À‹¸`Ñœ·W·ªðœ¶W·¦Ëj·ªðœ¶Ù¸uÖY¸ÍaÄ·Àì·WÈ´5df75df7K›š7K›š7ÓÍ8W·ÓÍ8‡E”6>ö7ϱ08á)Â7WÈ´á)Â7K›š75df7:·X8SÖé7SÖé7ð­¨8ÓÍ8þk€85df7¡xŠ8RIJ8Ä™ž8ò‡”8¡xŠ8—Ñ8sï8”Qå8ò‡”8Ä™ž8¡xŠ8þk€8Ç°D8{Äl8þk€8ò‡”8¡xŠ8Ç°D8K›š7‡E”6&»8á)Â7á)Â7‡E”6W·ÓÍ8&»85df7&»8&»85df75df7‡E”65df7W·W·ÏE¸uÖY¸äm¸6•¸uÖY¸õû€¸À‹¸4Ð1¸ÏE¸6•¸À‹¸4Ð1¸+*Ÿ¸À‹¸äm¸õû€¸À‹¸uÖY¸uÖY¸À‹¸6•¸ÏE¸+*Ÿ¸À‹¸äm¸uÖY¸Àì·`Ñœ·4Ð1¸ÍaÄ·Àì·ÍaÄ·>ö7¦Ëj·W·K›š7WÈ´5df7WÈ´>ö7SÖé7á)Â7>ö7&»8>ö7á)Â7Ç°D8:·X8¡xŠ8ϱ08ϱ08Ç°D8Ç°D8:·X8ϱ08&»8á)Â7SÖé75df7‡E”6WÈ´ªðœ¶ªðœ¶‡E”6¦Ëj·`Ñœ·ªðœ¶ªðœ¶W·>ö7Àì·5df7‡E”6‡E”6‡E”6¦Ëj·¦Ëj·Àì·‡E”6¦Ëj·ªðœ¶>ö7‡E”6ÍaÄ·uÖY¸Ù¸ÏE¸äm¸À‹¸+*Ÿ¸øT³¸¤Ñ¸¤Ñ¸ÌÂÛ¸&¹ÌÂÛ¸ÌÂÛ¸ÌÂÛ¸&¹ev¹Pa¹w5¹ÖÐ*¹Ø]¹ñhI¹áè/¹w5¹Ø]¹áè/¹44?¹„N¹44?¹ñhI¹X¹%¹4h¹4h¹•»X¹èôb¹ê/m¹”ŸS¹ñhI¹ñhI¹„N¹TND¹„N¹”ŸS¹Ø]¹èôb¹w5¹X¹%¹”:¹X¹%¹âL ¹Pa¹Tð¸ˆÇ¸{'ú¸âL ¹&¹&¹Žm½¸ÌÂÛ¸w>©¸¤Ñ¸w>©¸w>©¸w>©¸ÌÂÛ¸Žm½¸w>©¸w>©¸{'ú¸Žm½¸øT³¸¾â帤Ѹ6•¸øT³¸À‹¸+*Ÿ¸6•¸6•¸6•¸õû€¸+*Ÿ¸õû€¸uÖY¸À‹¸w>©¸À‹¸6•¸4Ð1¸+*Ÿ¸À‹¸ˆÇ¸õû€¸6•¸À‹¸4Ð1¸ˆÇ¸w>©¸w>©¸w>©¸Žm½¸¤Ñ¸+*Ÿ¸Žm½¸ˆÇ¸ÌÂÛ¸ˆÇ¸Žm½¸¤Ñ¸&¹&¹¤Ñ¸w>©¸{'ú¸øT³¸ÌÂÛ¸ˆÇ¸âL ¹&¹Œ¹ÖÐ*¹áè/¹ÖÐ*¹w5¹Œ¹ev¹âL ¹Pa¹ev¹ev¹n¢ ¹Œ¹ÖÐ*¹ÖÐ*¹TND¹44?¹TND¹n¢ ¹w5¹ñhI¹w5¹ev¹ev¹!9¹ev¹Pa¹ÖÐ*¹¾â帎m½¸Žm½¸ÌÂÛ¸âL ¹ˆÇ¸ÌÂÛ¸{'ú¸õû€¸w>©¸ÌÂÛ¸ÏE¸ÏE¸.ë ¸.ë ¸À‹¸Ù¸.ë ¸ÏE¸Àì·Àì·Àì·Àì·Àì·Ù¸À‹¸ÏE¸äm¸uÖY¸4Ð1¸4Ð1¸À‹¸uÖY¸Ù¸4Ð1¸À‹¸Àì·.ë ¸Àì·>ö7Àì·`Ñœ·ÏE¸ÏE¸uÖY¸ÏE¸Ù¸.ë ¸äm¸4Ð1¸ÏE¸ÏE¸ÏE¸À‹¸À‹¸À‹¸õû€¸Ù¸w>©¸+*Ÿ¸øT³¸À‹¸6•¸6•¸w>©¸À‹¸6•¸Žm½¸À‹¸.ë ¸Àì·À‹¸6•¸4Ð1¸uÖY¸À‹¸6•¸6•¸À‹¸uÖY¸6•¸øT³¸uÖY¸uÖY¸Àì·ÍaÄ·Àì·¦Ëj·`Ñœ·WÈ´W·>ö7>ö7>ö75df7>ö7&»8ÓÍ8>ö7á)Â7SÖé7SÖé7Ç°D8{Äl8{Äl8:·X8þk€8RIJ8RIJ8ò‡”8RIJ8Ä™ž8ð­¨8¹1Û8¡xŠ8¡xŠ8RIJ8Ëܼ8¡xŠ8ϱ08:·X8:·X8Ç°D8{Äl8:·X8¡xŠ8ϱ08¡xŠ8¡xŠ8ð­¨8:·X8:·X8á)Â7K›š7ϱ08:·X8:·X8:·X8¡xŠ8:·X8þk€85df7á)Â7ϱ08:·X8‡E”6‡E”6|Pd|1|24600|2013-282T15:32:15.397 `V¸Sg¸¤×·+{¸+{¸Èÿ•·+{¸Sg¸F[“¸ÿZB¸Sg¸mj¸·3å·+{¸Sg¸Èÿ•··3å·ÿZB¸Sg¸’¯6+{¸ô\.¸F[“¸F[“¸ô\.¸ô\.¸Sg¸Sg¸·3å··3å·vŠ½·+{¸Èÿ•·Èÿ•·Sg¸Sg¸Èÿ•·J7]·—x%7G:‚¶G:‚¶Sg¸ŒÀ+5—x%7ŒÀ+5Èÿ•·J7]·—x%7G:‚¶- 8•;p8•;p8,5Œ87-\8‹%H8•;p8- 87-\8•;p8;%48‹%H8 > 8 > 8 m¡7‰ús7ܲð77-\8‹%H8;%48- 8•;p8•;p8;%487-\8- 8(‚8+W 8(‚8ܲð7‹%H8 m¡7 m¡7ÑÉ7G:‚¶‰ús7—x%7·3å·+{¸Sg¸·3å·mj¸F[“¸CL‰¸Ðl¸F[“¸F[“¸ÿZB¸·€§¸Ðl¸Ðl¸`V¸mj¸ÿZB¸F[“¸`V¸ÿZB¸F[“¸Ðl¸ç~¸Ðl¸ÿZB¸¯»¸CL‰¸Sg¸F[“¸·3å·Èÿ•·ÑÉ7’¯6ŒÀ+5’¯6 m¡7J7]·’¯6ŒÀ+5‰ús7‰ús77-\8- 8ŒÀ+5•;p8‹%H8ŒÀ+5;%48(‚8{‚´8N›¾8¶È8ÀÒÒ8•;p8N›¾87-\8ÀÒÒ8oVû8ÀÒÒ8N›¾81ñÜ8Tç8¢½9Tç8ù93ñ8ÀÒÒ83ñ8{‚´8¢½9oVû8ÀÒÒ8¢½9¢½93ñ8¶È8Tç81ñÜ81ñÜ83ñ81ñÜ8Tç8ÀÒÒ8ïD–8{‚´8,5Œ8ïD–8{‚´8,5Œ8+W 8- 8ܲð7;%48‹%H8ÑÉ7ܲð7 m¡7‰ús7¤×·ŒÀ+5vŠ½·J7]·¤×·G:‚¶ŒÀ+5—x%7·3å·`V¸vŠ½··3å·+{¸Èÿ•·+{¸J7]·vŠ½·J7]·Sg¸`V¸`V¸·3å··3å·ô\.¸Sg¸mj¸+{¸Sg¸vŠ½·—x%7ܲð7’¯6- 8ܲð7ŒÀ+5¤×· m¡7—x%7‰ús7‰ús7ŒÀ+5ܲð7- 8G:‚¶- 8ܲð7‹%H8,5Œ8,5Œ8ܲð7ÑÉ7 m¡7’¯6 m¡7•;p8‹%H8ܲð7 m¡7‰ús7ܲð7(‚8 > 8- 8,5Œ8‹%H8 > 8;%48- 8•;p8- 8‰ús77-\8- 8 > 8 m¡7ÑÉ7ŒÀ+5vŠ½·+{¸`V¸·3å··3å·ÿZB¸Sg¸F[“¸`V¸ÿZB¸vŠ½·Èÿ•·vŠ½·+{¸J7]·mj¸Èÿ•·ÿZB¸ÿZB¸Sg¸mj¸+{¸Sg¸ÿZB¸ÿZB¸`V¸ç~¸F[“¸¯»¸TD€§¸PÉŸ¯»¸#ä¸Ø–±¸PÉŸÐE¹^Ú¸Ðl¸påϸ`V¸ô\.¸F[“¸Ðl¸Ø–±¸mj¸mj¸Ø–±¸`V¸`V¸ÿZB¸F[“¸ç~¸Sg¸ÿZB¸ô\.¸·3å·+{¸vŠ½·Sg¸·3å·’¯6’¯6·3å·’¯6ÑÉ7ÑÉ7¤×·- 8‹%H8- 8(‚8;%48- 87-\87-\8ïD–87-\87-\8•;p8•;p8»kª8»kª8ïD–8•;p87-\8‹%H8‹%H8ÑÉ7—x%7ŒÀ+5Èÿ•·Èÿ•·vŠ½·vŠ½·J7]·¤×·+{¸vŠ½·¤×·’¯6‰ús7¤×·ŒÀ+5’¯6G:‚¶ô\.¸ô\.¸vŠ½·Èÿ•·ç~¸+{¸Èÿ•·vŠ½·F[“¸mj¸·3å·ô\.¸F[“¸Sg¸ô\.¸Ðl¸mj¸Sg¸Èÿ•·Sg¸ô\.¸ÿZB¸vŠ½·Ø–±¸F[“¸F[“¸`V¸F[“¸mj¸`V¸ô\.¸ô\.¸Sg¸ŒÀ+5;%48ܲð7 > 8ÑÉ7- 8 m¡7¤×·—x%7ܲð77-\8ÑÉ7 > 8- 8- 8(‚8»kª8»kª83ñ81ñÜ8»kª8ÆÐ9œä 9oVû8ù9F9F9nQ&909s:!9F9F9ÆÐ9üh+909093ñ83ñ83ñ83ñ8œä 91ñÜ8+W 8+W 8»kª8+W 8+W 8N›¾87-\8•;p8‹%H8ïD–8,5Œ8‹%H8‹%H8ܲð7—x%7ŒÀ+5 > 8’¯6G:‚¶J7]·G:‚¶¤×·`V¸Sg¸mj¸F[“¸vŠ½·`V¸PÉŸmj¸F[“¸Ðl¸bl ¹¾X¹²ï)¹³€¹NØ$¹³€¹^Ú¸ÐE¹F«¹ÐE¹TDî¸TDX¹¾X¹TDî¸^Ú¸ÐE¹8gø¸ÐE¹#ä¸F[“¸Ø–±¸ÿZB¸ç~¸mj¸Sg¸·3å·+{¸J7]·¤×·G:‚¶’¯6’¯6ŒÀ+5’¯6 > 8- 8ÑÉ7‹%H8ÑÉ7(‚8,5Œ8»kª8(‚8(‚87-\81ñÜ8ÀÒÒ8{‚´8{‚´8¢½9ÀÒÒ8oVû81ñÜ8ÀÒÒ8Tç8{‚´81ñÜ8»kª8N›¾81ñÜ8œä 91ñÜ8¶È8ÆÐ9¶È81ñÜ81ñÜ8+W 8+W 8,5Œ8ïD–8{‚´8;%48 > 8- 8ܲð7‰ús7—x%7—x%7‰ús7 m¡7ŒÀ+5¤×··3å·vŠ½·ŒÀ+5Èÿ•·+{¸ÿZB¸ÿZB¸·€§¸Èÿ•·’¯6ÿZB¸ô\.¸F[“¸CL‰¸ç~¸Ø–±¸F[“¸Ø–±¸påϸPÉŸpåϸbl ¹TDî¸8gø¸F«¹NØ$¹³€¹#丳€¹NØ$¹bl ¹8gø¸¾X¹TD€¹ÐE¹ÐE¹#ä¸#丯»¸Ø–±¸F[“¸¯»¸PÉŸ·€§¸Ø–±¸ç~¸F[“¸`V¸·3å·J7]·¤×·J7]·vŠ½·‰ús7;%48ܲð77-\8‹%H8 > 8;%48;%48+W 8¶È81ñÜ83ñ8+W 8¶È8»kª8N›¾8+W 8(‚8•;p8•;p87-\8ŒÀ+5 > 8‹%H8 > 8ÑÉ7ܲð7- 8ܲð7- 8;%48‰ús7‰ús7ÑÉ7 m¡7 m¡7J7]·Sg¸vŠ½·Èÿ•·Sg¸Èÿ•··3å·Sg¸+{¸·3å·mj¸ô\.¸vŠ½·+{¸vŠ½·Sg¸·3å·`V¸·3å··3å·ô\.¸Sg¸·3å·+{¸Èÿ•·‰ús7Èÿ•·Èÿ•·G:‚¶G:‚¶ÑÉ7‰ús7Èÿ•·Èÿ•·J7]·J7]·G:‚¶¤×·Èÿ•·ŒÀ+5‰ús7 m¡7 m¡7;%48- 87-\8‰ús7‹%H8- 8‹%H87-\8- 8 > 8;%48(‚8- 87-\8(‚8+W 8»kª8+W 8N›¾81ñÜ8¢½9ÆÐ9F9¢½9ÆÐ9$9¾™5909$9ë²:9$9¢½9œä 9oVû8oVû8¢½9ÆÐ9F9œä 9N›¾81ñÜ8»kª8+W 8(‚87-\8,5Œ8- 87-\8,5Œ8,5Œ8(‚8»kª8»kª8(‚8{‚´8 > 8G:‚¶ m¡7—x%7 m¡7Èÿ•·Sg¸·3å·vŠ½·`V¸+{¸+{¸ç~¸ÿZB¸PÉŸç~¸F[“¸#举X¹#ä¸#ä¸Ðl¸¯»¸Ø–±¸F[“¸F[“¸ç~¸ÿZB¸mj¸Ðl¸F[“¸Sg¸`V¸+{¸`V¸`V¸+{¸`V¸ÿZB¸+{¸+{¸·3å·Sg¸+{¸¤×· m¡7vŠ½·G:‚¶G:‚¶·3巤׷ÑÉ7’¯6(‚8•;p8;%48(‚8•;p8•;p8+W 8oVû8¢½9Tç8¢½91ñÜ83ñ8ÆÐ93ñ8œä 9Tç8ÀÒÒ8{‚´8N›¾8(‚87-\8‹%H8 > 8—x%7’¯6—x%7’¯6J7]·Èÿ•·J7]·—x%7ÑÉ7¤×·+{¸`V¸ÿZB¸mj¸`V¸Ðl¸·3å·F[“¸PÉŸؖ±¸·€§¸TDî¸TDî¸^Ú¸bl ¹TDî¸#ä¸8gø¸TDî¸#ä¸påϸTDî¸8gø¸ÐE¹¾X¹ÐE¹³€¹8gø¸påϸPÉŸ#ä¸ÐE¹·€§¸F[“¸F[“¸¯»¸Ðl¸ô\.¸Sg¸Sg¸·3å·Èÿ•·vŠ½·ô\.¸F[“¸vŠ½·vŠ½·+{¸mj¸Èÿ•·Sg¸CL‰¸·3å·+{¸Sg¸+{¸¤×·—x%7G:‚¶’¯6‰ús7 > 8,5Œ8‹%H8‹%H8,5Œ8»kª8»kª8{‚´8¢½91ñÜ8Tç8¢½9N›¾8{‚´8¶È8+W 8ÀÒÒ8ÀÒÒ83ñ8¢½9¶È8ÀÒÒ83ñ8Tç8¶È8N›¾8+W 8+W 8{‚´8ÀÒÒ8‹%H8‹%H8{‚´8»kª8(‚8‹%H8‹%H8,5Œ8- 8—x%7‹%H8ܲð7- 8G:‚¶vŠ½·+{¸`V¸Èÿ•·vŠ½·F[“¸`V¸·3å·vŠ½·ô\.¸Sg¸ç~¸+{¸F[“¸Ðl¸F[“¸mj¸mj¸Ø–±¸^Ú¸`V¸Ðl¸F[“¸F[“¸F[“¸+{¸F[“¸Ðl¸Sg¸J7]·’¯6+{¸’¯6vŠ½··3å·G:‚¶G:‚¶’¯6 m¡7 m¡7- 8 m¡7ÑÉ7•;p8- 8;%48N›¾8N›¾8{‚´8Tç8+W 8»kª8{‚´8Tç8ÀÒÒ8Tç8Tç8{‚´8{‚´8N›¾8,5Œ8ïD–8•;p87-\8 > 8G:‚¶ŒÀ+5¤×·G:‚¶Èÿ•·ÑÉ7ŒÀ+5’¯6—x%7¤×·Èÿ•·¤×·¤×·J7]·Sg¸vŠ½·vŠ½·Sg¸+{¸J7]·J7]·vŠ½·G:‚¶Èÿ•··3å·ô\.¸Sg¸Ðl¸PÉŸؖ±¸^Ú¸`V¸·€§¸#ä¸TD€¹ÐE¹#ä¸PÉŸ^Ú¸¾X¹#ä¸PÉŸ·€§¸^Ú¸PÉŸPÉŸؖ±¸¾X¹8gø¸#ä¸Ø–±¸Ø–±¸Ø–±¸PÉŸCL‰¸Ø–±¸+{¸mj¸J7]·vŠ½·vŠ½·¤×·—x%7’¯6 m¡7—x%7 m¡7G:‚¶- 8‹%H8;%48ÑÉ7;%48,5Œ8,5Œ8ïD–8;%48(‚8+W 8+W 8+W 8»kª8Tç8¶È8œä 93ñ8ÀÒÒ8Tç8+W 8ÀÒÒ8,5Œ8‹%H8ïD–8+W 8ܲð7 > 8;%48+W 8+W 8(‚8ÑÉ7 m¡7ÑÉ7 m¡7ÑÉ7ŒÀ+5J7]·G:‚¶ m¡7J7]·vŠ½·ç~¸CL‰¸ÿZB¸Ðl¸`V¸Ø–±¸Ðl¸Ðl¸mj¸Ø–±¸påϸ¯»¸Ø–±¸Ø–±¸·€§¸^Ú¸F[“¸Ðl¸Ø–±¸påϸ^Ú¸TDî¸TDî¸TD€¹ÐE¹Ø–±¸^ڸؖ±¸F[“¸+{¸F[“¸`V¸`V¸vŠ½·+{¸Sg¸ô\.¸F[“¸·3å·`V¸Sg¸·3巤׷+{¸’¯6¤×·J7]·G:‚¶‰ús7‹%H8ܲð7ܲð77-\87-\8‹%H8•;p8,5Œ8(‚8,5Œ8ÀÒÒ8¶È8¶È8»kª8{‚´81ñÜ8N›¾8+W 8+W 8ïD–8ܲð7- 8 > 8;%48‹%H8ܲð7‹%H8‹%H8ܲð7;%48;%48- 87-\8ܲð7ܲð7 > 8‰ús7‰ús7ÑÉ7(‚8‰ús7’¯6- 8 m¡7 m¡7ŒÀ+5·3å··3å·+{¸ÿZB¸+{¸Sg¸CL‰¸F[“¸¯»¸ÿZB¸PÉŸPÉŸÐl¸·€§¸#ä¸ÐE¹¯»¸·€§¸Ðl¸mj¸Ø–±¸Ø–±¸påϸTDî¸påϸCL‰¸·€§¸¯»¸påϸCL‰¸ÿZB¸Sg¸mj¸ÿZB¸ô\.¸vŠ½·J7]··3å·vŠ½·¤×·Sg¸vŠ½·vŠ½·vŠ½·—x%7 m¡7ܲð7G:‚¶—x%7‰ús7ÑÉ7- 87-\8‹%H87-\8ïD–87-\8‹%H8•;p87-\87-\87-\8 > 8- 8‹%H8,5Œ8(‚8•;p8;%48;%48,5Œ8ܲð7ܲð7- 8ÑÉ7ŒÀ+5ܲð7 > 8’¯6G:‚¶Ü²ð7‹%H8—x%7—x%7—x%7—x%7Èÿ•··3å·J7]·¤×·`V¸F[“¸+{¸ÿZB¸¤×··3å·ô\.¸·3å·ÿZB¸mj¸^Ú¸ÐE¹påϸpåϸPÉŸ³€¹NØ$¹8gø¸^Ú¸påϸ^Ú¸^Ú¸TDX¹¾X¹#ä¸#ä¸TDî¸TDî¸^Ú¸ÐE¹TDî¸#ä¸F[“¸Ðl¸Ðl¸¯»¸·€§¸·€§¸#ä¸PÉŸç~¸^Ú¸`V¸PÉŸô\.¸`V¸Èÿ•·+{¸F[“¸·3å·Èÿ•·J7]·—x%7‰ús7- 8•;p8ܲð7—x%7 > 8ïD–8,5Œ8+W 8ïD–8N›¾8,5Œ8N›¾8N›¾83ñ8Tç8¶È81ñÜ8$9ù9ÆÐ9¢½9ù9oVû8Tç8oVû83ñ8¶È8{‚´8»kª8Tç8¶È8¶È8ïD–8»kª8•;p87-\8;%48ܲð7—x%7—x%7ܲð7‰ús7Èÿ•·¤×·vŠ½·Sg¸vŠ½··3å·—x%7G:‚¶J7]·+{¸`V¸+{¸`V¸ÿZB¸+{¸ç~¸Sg¸vŠ½·G:‚¶J7]··3å·—x%7ŒÀ+5Èÿ•·`V¸vŠ½·ÿZB¸Ø–±¸Ðl¸PÉŸ·€§¸Ðl¸Ðl¸¯»¸påϸPÉŸÿZB¸Sg¸Sg¸·3å·J7]·¤×·¤×·(‚8+W 8- 8;%48;%48ܲð7ÑÉ7ŒÀ+5 > 87-\8‹%H8;%48 m¡7‰ús7 > 8- 8 > 8’¯6 m¡7‰ús7‹%H87-\8 > 8‰ús7ŒÀ+5ܲð7- 87-\8ܲð7ŒÀ+5’¯6- 8ÑÉ7—x%7‰ús7’¯6 > 8‰ús7·3å··3å·Sg¸J7]·G:‚¶mj¸mj¸`V¸ÿZB¸CL‰¸Ðl¸ç~¸Ðl¸F[“¸·€§¸Ðl¸Ðl¸Ðl¸·€§¸CL‰¸·€§¸Ðl¸¯»¸¯»¸8gø¸¾X¹ÐE¹TD€§¸PÉŸ8gø¸PÉŸPÉŸ¯»¸^Ú¸PÉŸ·€§¸påϸPÉŸÐE¹Ø–±¸Ðl¸ÿZB¸mj¸mj¸F[“¸ç~¸`V¸+{¸+{¸·3å·vŠ½·vŠ½·ŒÀ+5’¯6ŒÀ+5—x%7 > 8 > 8‹%H8ïD–8(‚8,5Œ8»kª8(‚8{‚´8N›¾8»kª8ÀÒÒ81ñÜ8ÆÐ9œä 9Tç8$9¢½9$9F9nQ&9üh+9ÉæD9$9nQ&9nQ&9ù9oVû8ù9ù9ù9Tç8ÀÒÒ81ñÜ8+W 8{‚´8{‚´8•;p8ïD–8;%48+W 8ïD–8{‚´8{‚´8ïD–8ïD–8,5Œ87-\8,5Œ8;%48ܲð7- 8- 8‰ús7’¯6Èÿ•·G:‚¶G:‚¶’¯6vŠ½·—x%7mj¸`V¸Èÿ•·`V¸Sg¸+{¸F[“¸Èÿ•·vŠ½·Sg¸ô\.¸Èÿ•·J7]··€§¸vŠ½·Sg¸mj¸mj¸Ðl¸¯»¸påϸ¯»¸CL‰¸PÉŸpåϸ·€§¸·3å·Èÿ•·¤×·ŒÀ+5ŒÀ+5G:‚¶G:‚¶·3å··3å·J7]·+{¸G:‚¶ÑÉ7 > 8—x%7;%487-\8- 8 > 8(‚8•;p8,5Œ8ïD–8+W 8Tç8¢½9ÆÐ9¶È8Tç8oVû8$9ù9üh+909nQ&9ù9nQ&93ñ8oVû83ñ8{‚´8ÆÐ9ÆÐ9ÆÐ9oVû83ñ8$91ñÜ8oVû8oVû8ù9¢½9ù9oVû8oVû8¶È8N›¾87-\8•;p8ÑÉ7‰ús7‹%H8 m¡7‰ús7ܲð7—x%7ŒÀ+5ŒÀ+5J7]··3å·ÿZB¸vŠ½·vŠ½·Sg¸ÿZB¸+{¸+{¸ÿZB¸mj¸`V¸F[“¸`V¸F[“¸F[“¸mj¸mj¸ç~¸·€§¸ç~¸mj¸Ø–±¸¯»¸mj¸ô\.¸vŠ½·Sg¸Èÿ•·J7]·Sg¸`V¸vŠ½·G:‚¶J7]·J7]·G:‚¶J7]··3å·J7]·’¯6G:‚¶‰ús7 > 8- 8’¯6;%48 > 8 m¡7ܲð7ŒÀ+57-\8;%48- 8ÑÉ7 m¡7ÑÉ7 > 8;%48ÑÉ7—x%7‰ús7 > 8ÑÉ7‰ús7G:‚¶vŠ½·Èÿ•·ô\.¸ô\.¸ô\.¸Sg¸Èÿ•·ô\.¸+{¸J7]·ç~¸CL‰¸Ø–±¸Ðl¸Ðl¸`V¸^ڸؖ±¸F[“¸·€§¸F[“¸`V¸¯»¸Ðl¸ÿZB¸`V¸ÿZB¸Sg¸ç~¸Ðl¸mj¸F[“¸Ðl¸ç~¸F[“¸+{¸Sg¸vŠ½··3å·vŠ½··3å··3å··3å··3å·ô\.¸·3å·F[“¸ô\.¸vŠ½··3å·ô\.¸J7]·ŒÀ+5·3å·‰ús7G:‚¶’¯67-\8;%487-\8 > 8 > 8ïD–8ïD–8- 8»kª8,5Œ87-\8N›¾8ù9ÆÐ9œä 9œä 9s:!9ù9ÆÐ9s:!9F9¢½9¢½91ñÜ8ÀÒÒ8¢½9Tç8Tç8ÆÐ9¶È81ñÜ8+W 8,5Œ8+W 8ÀÒÒ8+W 8N›¾8,5Œ8»kª8,5Œ8- 8;%48- 8¤×·‰ús7ÑÉ7’¯6 m¡7ŒÀ+5’¯6G:‚¶vŠ½·ŒÀ+5Èÿ•·F[“¸mj¸·3å·Sg¸¤×·J7]·J7]·vŠ½·ÿZB¸F[“¸·€§¸ç~¸F[“¸·€§¸ç~¸ç~¸¯»¸·€§¸Ðl¸Ðl¸·€§¸Ðl¸¯»¸Ø–±¸Sg¸mj¸Ðl¸ç~¸ç~¸vŠ½·`V¸ç~¸mj¸`V¸F[“¸PÉŸmj¸CL‰¸F[“¸mj¸`V¸mj¸F[“¸Sg¸ÿZB¸+{¸J7]·’¯6+{¸G:‚¶Ü²ð7‰ús7ܲð7;%48(‚8+W 8‹%H8+W 8(‚87-\8,5Œ8+W 8¶È81ñÜ8ïD–8»kª8ÀÒÒ8,5Œ8(‚87-\8ܲð7’¯6¤×·ÑÉ7‰ús7—x%7G:‚¶vŠ½·vŠ½··3å·ô\.¸ô\.¸ÿZB¸vŠ½·G:‚¶vŠ½·¤×·+{¸·3å·vŠ½·+{¸ÿZB¸vŠ½··€§¸Ø–±¸·€§¸¯»¸F[“¸mj¸Ø–±¸¯»¸TD€¹³€¹ÐE¹PÉŸ¯»¸TDî¸bl ¹ÐE¹F[“¸·€§¸¯»¸`V¸mj¸ç~¸mj¸F[“¸Sg¸ÿZB¸Sg¸Sg¸Sg¸ô\.¸Èÿ•·`V¸Èÿ•·ô\.¸G:‚¶¤×·ŒÀ+5Èÿ•·ŒÀ+5—x%7;%48ܲð7 m¡7 m¡7‰ús7¤×·ŒÀ+5;%48- 8ܲð7- 8 > 8ܲð7;%48‹%H8‹%H87-\8•;p8ÑÉ7+W 8N›¾8»kª8N›¾8»kª83ñ8¶È8 > 8,5Œ8»kª8»kª8+W 8+W 8{‚´8+W 8+W 8N›¾8»kª81ñÜ8oVû8+W 8{‚´8+W 8,5Œ8(‚8‹%H8;%48 > 87-\8- 8ŒÀ+5ŒÀ+57-\8ÑÉ7ÑÉ7’¯6 > 8—x%7G:‚¶¤×·vŠ½··3å·+{¸F[“¸Sg¸`V¸F[“¸mj¸ç~¸·€§¸mj¸F[“¸påϸ#丯»¸¯»¸Ø–±¸·€§¸¯»¸F[“¸ÿZB¸·€§¸F[“¸F[“¸Ø–±¸·€§¸¯»¸^Ú¸F[“¸`V¸mj¸F[“¸Sg¸ô\.¸ÿZB¸ô\.¸+{¸+{¸Èÿ•·+{¸Èÿ•·+{¸`V¸ô\.¸¤×·vŠ½·J7]·—x%7G:‚¶Èÿ•·J7]·+{¸Sg¸Sg¸G:‚¶ŒÀ+5G:‚¶’¯6¤×·—x%7 m¡7- 8(‚8‹%H8- 8- 8ÑÉ7;%48- 8 m¡7- 8 m¡7 > 8;%48 > 8‹%H8‹%H8 > 8ŒÀ+5‰ús7ܲð7 > 8ŒÀ+5ŒÀ+5—x%7- 8—x%7ܲð7ŒÀ+5G:‚¶G:‚¶—x%7’¯6·3å·ô\.¸Èÿ•··3å·ÿZB¸`V¸Ðl¸ç~¸PÉŸ¯»¸Ðl¸mj¸CL‰¸`V¸PÉŸpåϸ¯»¸`V¸·€§¸¯»¸Ðl¸ç~¸Ðl¸Ø–±¸Ðl¸F[“¸Ðl¸·€§¸F[“¸ç~¸PÉŸ#ä¸Ðl¸mj¸ô\.¸’¯6+{¸J7]·J7]·’¯6ÑÉ7ŒÀ+5¤×·ŒÀ+5·3å··3å·ÑÉ7vŠ½·G:‚¶ŒÀ+5—x%7ÑÉ7 m¡7‰ús7¤×·’¯6ÑÉ7ÑÉ7‰ús7;%48’¯6’¯6‰ús7—x%7J7]·J7]·Sg¸vŠ½·mj¸Sg¸Sg¸F[“¸Ðl¸F[“¸ô\.¸`V¸ô\.¸ÿZB¸Ðl¸mj¸`V¸Ðl¸CL‰¸CL‰¸Ðl¸F[“¸PÉŸTDX¹F«¹bl ¹ÐE¹bl ¹NØ$¹F«¹ÐE¹ÐE¹³€¹Ø–±¸påϸ^Ú¸¯»¸¯»¸Ø–±¸#丯»¸·€§¸8gø¸~Á¹F«¹«•¹TDî¸8gø¸ÐE¹NØ$¹²ï)¹TDî¸8gø¸³€¹^Ú¸påϸ^Ú¸#ä¸PÉŸÐl¸CL‰¸mj¸F[“¸F[“¸+{¸ç~¸mj¸ô\.¸vŠ½··3å·J7]·G:‚¶+{¸vŠ½·G:‚¶Èÿ•·—x%7+{¸¤×·¤×·’¯6‰ús7·3å·—x%7- 8 > 8 > 8’¯6;%48ÑÉ7- 87-\87-\8 > 8- 8—x%7 > 8ܲð7’¯6’¯6’¯6‹%H8ܲð7ÑÉ7‹%H8 > 8ÑÉ7 m¡7 m¡7‰ús7ܲð7ÑÉ7—x%7ŒÀ+5·3å·‰ús7J7]··3å··3å·J7]·+{¸F[“¸Sg¸+{¸J7]·ÿZB¸ô\.¸+{¸+{¸ç~¸mj¸ô\.¸+{¸`V¸¤×·¤×·J7]·+{¸J7]·—x%7‰ús77-\8‰ús7- 8ܲð7’¯6;%48(‚8 > 8- 8‹%H8‹%H8 m¡7ܲð7- 8(‚8•;p8(‚8ïD–8ÀÒÒ8ÀÒÒ8»kª8¶È8¶È81ñÜ8oVû8Tç8$9ÆÐ9nQ&9üh+9¾™59ÉæD9¿p^928T9˜O9šÌ?9@TY9šÌ?9˜O9¬c928T9¿p^9¾™59¿p^9@TY9tJ9˜O9üh+9˜O9$9œä 9ù9¾™59¾™59F9¢½9$9ÆÐ9»kª8N›¾8¶È8+W 8 > 8;%48 > 8;%48 > 87-\8ܲð7;%48ÑÉ7‰ús7‰ús7ÑÉ7¤×·¤×·Èÿ•··3å·+{¸+{¸vŠ½·`V¸`V¸CL‰¸CL‰¸·3å·vŠ½·Sg¸·3å·vŠ½·+{¸Sg¸¤×·Èÿ•·Èÿ•·G:‚¶+{¸¤×·¤×·G:‚¶—x%7ŒÀ+5’¯6ÑÉ7ŒÀ+5vŠ½·—x%7 > 8G:‚¶ m¡7ŒÀ+5’¯6 m¡7G:‚¶•;p8 > 8’¯6‹%H8‹%H8ܲð7ÑÉ7 m¡7•;p8»kª8ïD–8»kª81ñÜ8¢½9+W 8ïD–8+W 8ÀÒÒ8oVû8¢½9ù9ù9ù9nQ&9s:!9F9nQ&9œä 9üh+9nQ&9¾™59F9¢½93ñ8s:!91ñÜ81ñÜ8ÀÒÒ8{‚´8ïD–8»kª8(‚8(‚8,5Œ8‹%H8(‚87-\8(‚8,5Œ87-\87-\8 m¡7—x%7;%48‰ús7ŒÀ+5 m¡7ܲð7 m¡7J7]·Èÿ•·ç~¸¯»¸Ø–±¸påϸPÉŸPÉŸpåϸ³€¹¾X¹«•¹³€¹8gø¸«•¹NØ$¹³€¹²ï)¹$ 4¹¦/¹)99¹´R>¹«ÙW¹$ 4¹NØ$¹$ 4¹F«¹NØ$¹²ï)¹TDî¸^Ú¸påϸ#丯»¸·€§¸F[“¸+{¸F[“¸J7]·+{¸Èÿ•· m¡7’¯6ÑÉ7ÑÉ7—x%7ܲð7ÑÉ7ܲð7- 8ܲð7G:‚¶- 8G:‚¶Ü²ð7‹%H8•;p87-\8‹%H8»kª8{‚´8(‚8+W 8¶È8•;p8+W 8•;p8,5Œ8+W 8ܲð7‹%H87-\8•;p8‰ús7 m¡7 > 8 > 8¤×·¤×·¤×·J7]·Sg¸ÿZB¸+{¸ÿZB¸ç~¸F[“¸F[“¸+{¸`V¸`V¸Sg¸mj¸Sg¸+{¸ô\.¸Ðl¸Ø–±¸mj¸Ðl¸¯»¸Ðl¸påϸTDî¸Ø–±¸¯»¸¯»¸PÉŸ·€§¸PÉŸ^Ú¸#举X¹«•¹¾X¹bl ¹¯»¸PÉŸÐl¸¯»¸#ä¸ÐE¹påϸF[“¸ç~¸ÿZB¸CL‰¸ô\.¸CL‰¸ô\.¸ÿZB¸mj¸ô\.¸+{¸¤×·G:‚¶ŒÀ+5J7]·vŠ½··3å·+{¸G:‚¶J7]·G:‚¶G:‚¶¤×·ÑÉ7 m¡7—x%7ÑÉ7ܲð7ÑÉ7ܲð7‰ús7—x%7 > 8ÑÉ7 m¡7- 8‰ús7 m¡7 m¡7’¯6- 8—x%7‰ús7‰ús7’¯6—x%7’¯6Èÿ•··3å·vŠ½·’¯6·3å·J7]·+{¸+{¸G:‚¶CL‰¸ÿZB¸ô\.¸+{¸`V¸Ðl¸Ø–±¸Ðl¸ÐE¹PÉŸCL‰¸påϸ·€§¸F[“¸mj¸ç~¸mj¸F[“¸Ðl¸·3å·`V¸ÿZB¸+{¸ÿZB¸·3å·+{¸+{¸ô\.¸vŠ½·J7]··3å·+{¸J7]··3å··3巤׷·3å·—x%7Èÿ•·Èÿ•··3å·ŒÀ+5ÑÉ7;%48‰ús7 > 8•;p8- 8- 8ܲð7- 8‹%H8‹%H8ÑÉ7ïD–8- 87-\8 > 8ܲð7;%48- 87-\8- 8•;p8{‚´8•;p8‹%H8 > 8- 8‹%H8 m¡7ÑÉ7- 8ܲð7ܲð7ÑÉ7ÑÉ7‰ús7- 8- 8 > 8ܲð7 m¡7 m¡7(‚87-\8 m¡7 > 8 m¡7G:‚¶—x%7 m¡7ŒÀ+5ŒÀ+5G:‚¶ÿZB¸Èÿ•·+{¸Sg¸Ðl¸F[“¸ÿZB¸ç~¸Ðl¸F[“¸Ðl¸Sg¸ÿZB¸F[“¸+{¸ŒÀ+5¤×··3å·ŒÀ+5vŠ½·J7]·J7]·J7]·G:‚¶¤×·ŒÀ+5·3å·ŒÀ+5Sg¸J7]·ŒÀ+5’¯6G:‚¶J7]·J7]·ŒÀ+5J7]·’¯6ŒÀ+5’¯6—x%7ŒÀ+5ܲð7ŒÀ+5—x%7‰ús7 > 8 m¡7ÑÉ7(‚8(‚87-\8ܲð7•;p8;%48- 8ÑÉ7 > 8 m¡7‰ús7ÑÉ7‹%H87-\8,5Œ8N›¾8ÀÒÒ8œä 93ñ8œä 9F9nQ&9ù9F9$9ù9oVû81ñÜ8Tç81ñÜ8ÀÒÒ8,5Œ8,5Œ8;%48- 8- 8‹%H8ܲð7- 8’¯6Èÿ•·‰ús7J7]·G:‚¶·3å··€§¸mj¸`V¸CL‰¸mj¸ÿZB¸ô\.¸ÿZB¸`V¸Sg¸`V¸ÿZB¸ç~¸F[“¸F[“¸`V¸·€§¸ç~¸CL‰¸F[“¸ç~¸ÿZB¸`V¸`V¸mj¸F[“¸Ðl¸ç~¸ÿZB¸+{¸`V¸mj¸·3å·ç~¸mj¸Èÿ•·F[“¸F[“¸+{¸Èÿ•·+{¸+{¸vŠ½·’¯6- 8ÑÉ7 > 8Èÿ•· m¡7ܲð7ŒÀ+5‰ús7- 8- 8;%48ܲð7‹%H8 m¡7ܲð7ŒÀ+5ÑÉ7G:‚¶¤×·¤×· m¡7Èÿ•·¤×·G:‚¶J7]·’¯6 m¡7 m¡7ÑÉ7‹%H8;%48ܲð7’¯6J7]·G:‚¶¤×·Ü²ð7ÑÉ7Èÿ•·Ü²ð7 m¡7ŒÀ+5—x%7`V¸vŠ½·¤×··3å·+{¸Sg¸mj¸·3巤׷G:‚¶‰ús7¤×·ô\.¸J7]··3å·ô\.¸ÿZB¸mj¸F[“¸Ø–±¸·€§¸ç~¸CL‰¸`V¸F[“¸Ø–±¸ç~¸F[“¸^ڸؖ±¸mj¸`V¸ô\.¸+{¸ÿZB¸ÿZB¸Èÿ•·Sg¸·3å·vŠ½·ÿZB¸J7]·vŠ½·Èÿ•·J7]·‰ús7 > 8 m¡7‹%H8(‚8ܲð7;%48—x%7 > 8ŒÀ+5 m¡7’¯6 m¡7‹%H8 > 8+W 8+W 8‹%H87-\87-\8ÀÒÒ8ïD–8+W 8¶È8¶È8ÀÒÒ8,5Œ8+W 8ÀÒÒ8N›¾8»kª8ÀÒÒ8ïD–8»kª81ñÜ8oVû81ñÜ83ñ8œä 9ÀÒÒ8Tç8ÀÒÒ8»kª8ïD–8{‚´8+W 8{‚´8•;p8ïD–87-\8;%48‹%H8 m¡7G:‚¶Ü²ð77-\8;%48ܲð7 m¡7’¯6vŠ½·’¯6¤×·¤×·Èÿ•·J7]··3å·CL‰¸Sg¸Èÿ•·+{¸mj¸CL‰¸PÉŸÐl¸·€§¸PÉŸCL‰¸påϸCL‰¸F[“¸ç~¸Sg¸CL‰¸CL‰¸F[“¸Ø–±¸Ø–±¸ç~¸PÉŸ¯»¸·€§¸¯»¸PÉŸF[“¸ÿZB¸ô\.¸`V¸+{¸Sg¸ÿZB¸Sg¸+{¸Èÿ•··3å·’¯6ŒÀ+5‰ús7’¯6ܲð7 m¡7ܲð7 > 8ÑÉ7ܲð7ܲð7‰ús7ÑÉ7G:‚¶¤×·Èÿ•·ÑÉ7‹%H8 > 8‹%H8•;p8{‚´8»kª8•;p87-\8•;p8N›¾8+W 8+W 87-\8,5Œ8;%48•;p8ïD–8•;p87-\87-\8ïD–8+W 8(‚8- 8 > 8 > 8;%48- 8ܲð7‰ús7;%48 m¡7‰ús7ŒÀ+5ŒÀ+5’¯6+{¸Sg¸ô\.¸Ðl¸Ðl¸Ðl¸CL‰¸F[“¸mj¸·€§¸mj¸ô\.¸ÿZB¸mj¸mj¸ÿZB¸ÿZB¸·3å·vŠ½·vŠ½·’¯6G:‚¶ŒÀ+5‰ús7¤×·J7]·G:‚¶J7]·ÑÉ7¤×·¤×·ŒÀ+5 m¡7ÑÉ7ÑÉ7 > 87-\8- 8•;p8ïD–8 > 8 > 8•;p8(‚87-\8+W 8{‚´8+W 8ÀÒÒ81ñÜ81ñÜ8Tç8Tç8Tç8Tç83ñ8¢½9ÆÐ9¢½9s:!9¢½9¢½9»kª8»kª8¶È8»kª8ïD–8+W 8;%487-\8ܲð7,5Œ8- 8ܲð7—x%7‰ús7J7]·vŠ½·’¯6Èÿ•·Èÿ•·+{¸ç~¸ç~¸`V¸F[“¸F[“¸ç~¸ô\.¸ÿZB¸·3å·+{¸ÿZB¸ô\.¸ô\.¸ÿZB¸Ðl¸`V¸Ø–±¸påϸ¯»¸¯»¸^Ú¸8gø¸^Ú¸³€¹¾X¹ÐE¹ÐE¹³€¹¾X¹TD•¹8gø¸påϸ·€§¸påϸÐE¹¯»¸`V¸ÿZB¸ç~¸Sg¸F[“¸ÿZB¸ÿZB¸·3å·vŠ½·¤×·J7]·ŒÀ+5J7]·ŒÀ+5—x%7 m¡7 m¡7ŒÀ+5ÑÉ7- 8G:‚¶’¯6ܲð7ܲð7 m¡7;%48—x%7‰ús7;%48(‚8(‚8(‚8+W 87-\8(‚8 > 8•;p8(‚87-\8•;p8 m¡7- 8 > 8G:‚¶‹%H8 m¡7vŠ½·J7]·vŠ½·+{¸G:‚¶ÿZB¸mj¸ô\.¸`V¸Èÿ•·vŠ½·+{¸—x%7+{¸Ü²ð7vŠ½·vŠ½·G:‚¶J7]·ŒÀ+5ŒÀ+5’¯6’¯6—x%7ÿZB¸J7]·‰ús7’¯6’¯6 m¡7,5Œ8ܲð7- 8- 8’¯6ܲð7‰ús7ÑÉ7- 8(‚8ÑÉ7ܲð7- 8‹%H8- 8- 8 > 8 m¡7 > 8‹%H8ÑÉ7‹%H8‹%H8(‚8‹%H8ïD–8»kª8•;p8ïD–8N›¾8œä 9{‚´8{‚´8œä 9¢½9œä 93ñ8s:!9ë²:9ë²:9F9ë²:9˜O9šÌ?9šÌ?928T9tJ9tJ9˜O9¾™59¬c9¾™59üh+9¿p^9¿p^9¿p^9šÌ?9ë²:909ÉæD928T9šÌ?9s:!9$9nQ&9üh+9ÆÐ9Tç8oVû8ÀÒÒ8N›¾8»kª8¶È8¢½9(‚8,5Œ8•;p8 m¡7(‚8+W 8;%48N›¾87-\8 > 8 m¡7‰ús7—x%7ŒÀ+5ŒÀ+5G:‚¶+{¸Èÿ•·‰ús7’¯6Èÿ•·¤×··3å··3å·ç~¸ô\.¸vŠ½·mj¸ÿZB¸ÿZB¸`V¸+{¸+{¸¤×·Sg¸Èÿ•·G:‚¶J7]·vŠ½·+{¸¤×· m¡7ÑÉ7 m¡7ŒÀ+5¤×·Ü²ð7- 8ŒÀ+5- 8ïD–87-\8‹%H8Tç8»kª8,5Œ8(‚8•;p8- 8ܲð7 m¡7ܲð7ÑÉ7‰ús7ŒÀ+5G:‚¶ŒÀ+5¤×·‰ús7’¯6‰ús7 > 8 m¡7‰ús7’¯6‰ús7‰ús7ŒÀ+5J7]·¤×·¤×·+{¸J7]· m¡7—x%7·3å·ô\.¸Èÿ•·ô\.¸mj¸ç~¸·€§¸PÉŸ`V¸ÿZB¸`V¸¯»¸Ðl¸Ðl¸·€§¸F[“¸F[“¸F[“¸`V¸+{¸F[“¸ÿZB¸+{¸·€§¸·€§¸Ø–±¸Ðl¸Ø–±¸F[“¸mj¸PÉŸ#ä¸TD€§¸#ä¸ÐE¹TDî¸Ø–±¸F[“¸CL‰¸ÿZB¸`V¸·3å·+{¸F[“¸G:‚¶G:‚¶‰ús7 m¡77-\8- 8ܲð7 > 8‹%H8•;p8(‚8•;p8ïD–8(‚8;%48•;p87-\8•;p8+W 8,5Œ81ñÜ8(‚8(‚8ïD–8+W 8•;p8+W 8(‚8»kª8,5Œ8¶È8{‚´8¶È8¶È8ÀÒÒ8,5Œ8(‚8(‚8,5Œ8;%48•;p8+W 8- 8‹%H87-\8 m¡7G:‚¶—x%7G:‚¶ô\.¸Èÿ•·vŠ½·+{¸+{¸Èÿ•·ÿZB¸ô\.¸Sg¸ç~¸`V¸F[“¸·€§¸påϸpåϸ#ä¸ÐE¹#ä¸^Ú¸bl ¹¾X¹³€¹«•¹²ï)¹)99¹~Á¹²ï)¹bl ¹F«¹F«¹F«¹$ 4¹¦/¹¾lC¹¾lC¹´R>¹¦/¹F«¹«•¹~Á¹«•¹³€¹NØ$¹¾X¹NØ$¹NØ$¹«•¹F«¹#ä¸#ä¸$ 4¹påϸpåϸ¯»¸#ä¸Ø–±¸^Ú¸F[“¸mj¸ÿZB¸Sg¸·3å··3å·J7]·G:‚¶J7]·Èÿ•·ŒÀ+5¤×·—x%7’¯6vŠ½·J7]·¤×· m¡7’¯6’¯6J7]·vŠ½·vŠ½·ç~¸ÿZB¸ÿZB¸ÿZB¸·3å·Sg¸CL‰¸Sg¸Sg¸·3å·ÿZB¸ÿZB¸`V¸·3å·+{¸mj¸Sg¸`V¸F[“¸ç~¸Ðl¸CL‰¸PÉŸ¯»¸¯»¸ç~¸Ðl¸·€§¸ÿZB¸ô\.¸`V¸·€§¸F[“¸F[“¸Ø–±¸¯»¸¯»¸Ðl¸påϸ·€§¸Ø–±¸Ø–±¸Ø–±¸·€§¸`V¸Ðl¸#ä¸Ø–±¸Ø–±¸Ðl¸PÉŸF[“¸·€§¸·€§¸ç~¸ô\.¸Ðl¸PÉŸô\.¸`V¸Sg¸ÿZB¸F[“¸ô\.¸`V¸ô\.¸vŠ½·Sg¸·3å·J7]·ŒÀ+5‰ús7ÑÉ7 m¡7ܲð7—x%7—x%7 m¡7’¯6;%48ܲð7ܲð7ÑÉ7—x%7‹%H87-\8—x%7ÑÉ77-\8 m¡7•;p8•;p8ïD–8ïD–8N›¾8;%48 > 8‹%H8- 8 m¡7ܲð7Èÿ•· m¡7‰ús7‰ús7- 8‰ús7G:‚¶G:‚¶’¯6vŠ½·mj¸¤×·+{¸F[“¸ÿZB¸ô\.¸ô\.¸Èÿ•·+{¸Sg¸Èÿ•·ÿZB¸·€§¸¯»¸F[“¸F[“¸F[“¸·€§¸¯»¸CL‰¸`V¸Ðl¸¯»¸påϸpåϸç~¸Ø–±¸F[“¸Ðl¸^Ú¸F[“¸·€§¸·€§¸Ðl¸·€§¸PÉŸؖ±¸F[“¸`V¸mj¸CL‰¸ÿZB¸+{¸vŠ½·J7]·vŠ½·ŒÀ+5—x%7‰ús7‹%H8;%48‹%H8‹%H8•;p8•;p8 > 8;%48ܲð7;%48+W 8+W 8,5Œ8(‚8ÀÒÒ8¶È8»kª81ñÜ8ÀÒÒ8{‚´81ñÜ81ñÜ8oVû8ÀÒÒ8N›¾8{‚´81ñÜ8+W 8{‚´8(‚8»kª8•;p8N›¾8+W 8N›¾8¶È8+W 8Tç8ÀÒÒ8+W 8{‚´8,5Œ8•;p8{‚´87-\8‹%H8‹%H8 m¡7 m¡7ÑÉ7 > 8ŒÀ+5J7]·+{¸J7]·G:‚¶Èÿ•·Èÿ•·+{¸·3å·Ø–±¸·3å·J7]·ô\.¸Sg¸+{¸ç~¸Sg¸mj¸F[“¸`V¸`V¸`V¸mj¸Sg¸Sg¸ç~¸ô\.¸mj¸ÿZB¸+{¸ô\.¸Èÿ•··3å·ô\.¸·3巤׷¤×·G:‚¶ŒÀ+5’¯6G:‚¶Èÿ•·J7]·ŒÀ+5G:‚¶ m¡7’¯6 m¡7ŒÀ+5ÑÉ7- 8—x%7;%48;%48 > 8ܲð7- 8ÑÉ7ïD–8,5Œ8+W 8N›¾8¶È8+W 8»kª8»kª8•;p8;%48ÑÉ7 > 8- 8ïD–8- 8,5Œ8{‚´8+W 8»kª8N›¾8¶È8(‚8{‚´8{‚´83ñ8{‚´8(‚8;%48 m¡7—x%7‰ús7G:‚¶—x%7—x%7ŒÀ+5‰ús7J7]·G:‚¶vŠ½·¤×·‰ús7’¯6’¯6—x%7‰ús7 m¡7ÑÉ7’¯6¤×··3å·ô\.¸+{¸Èÿ•·vŠ½·mj¸ÿZB¸CL‰¸F[“¸PÉŸ`V¸Ø–±¸påϸpåϸ¯»¸CL‰¸mj¸·€§¸¯»¸TD€§¸F[“¸·€§¸ô\.¸+{¸`V¸Sg¸vŠ½··3å··3å·ŒÀ+5¤×· m¡7‹%H8,5Œ8•;p8ïD–8•;p8¶È8¶È8ïD–8ïD–8,5Œ8,5Œ8,5Œ8,5Œ8ïD–8+W 8»kª8¶È8+W 8‹%H8‹%H8 m¡7ŒÀ+5‰ús7—x%7’¯6—x%7—x%7vŠ½·G:‚¶ÑÉ7‰ús7 m¡7‰ús7 m¡7ÑÉ7¤×·‰ús7‰ús7’¯6’¯6¤×··3å·ŒÀ+5·3å·+{¸ç~¸ç~¸F[“¸mj¸CL‰¸ç~¸¯»¸CL‰¸F[“¸F[“¸Ðl¸mj¸mj¸ç~¸Ðl¸mj¸·€§¸F[“¸ÿZB¸Ðl¸ÿZB¸`V¸F[“¸ÿZB¸ô\.¸Ðl¸·€§¸#ä¸ç~¸¯»¸ÿZB¸F[“¸·3å·Èÿ•·Ü²ð7ŒÀ+5 m¡7—x%7—x%7‰ús7- 8•;p8+W 8{‚´87-\8N›¾8,5Œ8¶È8»kª8(‚8N›¾8¶È8¶È8Tç8¶È8N›¾81ñÜ8{‚´8{‚´8»kª8N›¾8ÀÒÒ8ÀÒÒ8¶È8+W 8»kª8(‚8ïD–81ñÜ8+W 8‹%H8(‚8,5Œ8,5Œ8ÀÒÒ8»kª8{‚´8¶È83ñ8ù9oVû8F9ÆÐ93ñ8¶È8+W 8N›¾8ïD–8{‚´8ïD–8,5Œ8(‚8,5Œ8+W 8(‚8+W 8,5Œ8,5Œ8,5Œ8+W 8{‚´8‹%H8ܲð77-\8‹%H8- 8ŒÀ+5ÑÉ7•;p8‰ús7vŠ½·—x%7¤×·Èÿ•·ŒÀ+5Èÿ•·J7]·Èÿ•·¤×·J7]·—x%7—x%7ŒÀ+5+{¸Sg¸’¯6Èÿ•·+{¸¤×·Ü²ð7‰ús7(‚8 m¡7ܲð7’¯6’¯6‹%H8 m¡7‹%H8•;p8ïD–8ïD–8ïD–8ÀÒÒ8¶È83ñ8ÀÒÒ8N›¾8¶È8,5Œ8(‚8ïD–8(‚8•;p8ïD–8+W 8{‚´8ù91ñÜ8¶È8F9F93ñ83ñ8œä 93ñ8Tç8œä 9s:!9s:!9Tç8œä 9¢½9ÆÐ9¢½9oVû8ÆÐ9ÀÒÒ8Tç8¶È8{‚´8(‚8‹%H8•;p8,5Œ87-\8ÑÉ7 > 8—x%7‰ús7’¯6 m¡7¤×·G:‚¶J7]·’¯6G:‚¶G:‚¶Èÿ•·+{¸¤×·+{¸vŠ½·¤×·Èÿ•·G:‚¶vŠ½·ÿZB¸vŠ½··3å·ô\.¸+{¸`V¸+{¸·3å·mj¸ô\.¸Sg¸ô\.¸ç~¸Sg¸·3å·ÿZB¸ÿZB¸·3å·Èÿ•··3å·G:‚¶¤×·G:‚¶Èÿ•·—x%7Èÿ•·G:‚¶G:‚¶—x%7ÑÉ7ŒÀ+5’¯6ܲð77-\8•;p8;%487-\8;%48- 8,5Œ8,5Œ8‹%H8N›¾8{‚´8»kª8{‚´8ÀÒÒ8»kª8{‚´8{‚´8•;p8,5Œ8;%48;%48‹%H8•;p8»kª8(‚87-\8- 8 > 8- 8- 8‹%H8;%48¤×·‰ús7,5Œ8;%48- 8- 8;%48ܲð7ŒÀ+5’¯6ÑÉ7G:‚¶¤×·Sg¸+{¸Èÿ•·ô\.¸`V¸ô\.¸ÿZB¸mj¸mj¸Ø–±¸CL‰¸Ðl¸Ø–±¸¯»¸8gø¸^Ú¸F[“¸F[“¸PÉŸTD•¹³€¹F«¹bl ¹#ä¸ÐE¹#ä¸^Ú¸^Ú¸#ä¸8gø¸påϸؖ±¸Ðl¸ç~¸ç~¸`V¸ç~¸vŠ½·J7]··3å·vŠ½·Èÿ•··3å·ô\.¸Sg¸Sg¸ÿZB¸·3å·Èÿ•·G:‚¶—x%7—x%7—x%7•;p8•;p8ïD–8N›¾8¶È8{‚´8ïD–8»kª8{‚´8,5Œ8+W 8+W 8,5Œ8,5Œ8‰ús7(‚8ܲð7 m¡7—x%7- 8ÑÉ7—x%7ÑÉ7- 8 m¡7ܲð7- 8ÑÉ7•;p8- 8;%48‹%H8‹%H8{‚´87-\8‹%H8(‚8,5Œ8- 8- 8‹%H8ܲð7- 8 m¡7ÑÉ7 > 8G:‚¶—x%7¤×··3å·Èÿ•·¤×·ŒÀ+5 m¡7ܲð7ÑÉ7G:‚¶¤×·¤×·’¯6¤×·Èÿ•·Sg¸mj¸ô\.¸mj¸`V¸ô\.¸F[“¸·3å·+{¸`V¸+{¸+{¸Sg¸+{¸‰ús7’¯6¤×··3å·Sg¸—x%7ŒÀ+5·3巤׷ŒÀ+5‰ús7ÑÉ7ܲð7‹%H8;%48•;p8(‚8ܲð7(‚8+W 87-\8ïD–8‹%H8•;p8»kª8ܲð7;%48 > 8;%48;%48;%487-\8‹%H8 > 8;%48ÑÉ7ÑÉ7;%48 > 8 > 8- 8‰ús7G:‚¶ŒÀ+5ŒÀ+5 m¡7J7]·Ü²ð7—x%7’¯6’¯6 m¡7’¯6—x%7·3å··3å·Èÿ•·ô\.¸`V¸+{¸ô\.¸·€§¸·€§¸·€§¸¯»¸^Ú¸8gø¸#ä¸bl ¹~Á¹~Á¹bl ¹~Á¹~Á¹³€¹¾X¹#ä¸^Ú¸ÐE¹bl ¹«•¹«•¹TDX¹^Ú¸^Ú¸#ä¸^Ú¸CL‰¸·€§¸ç~¸·€§¸Ø–±¸ç~¸ô\.¸Sg¸F[“¸+{¸Èÿ•·J7]··3å·vŠ½·¤×· m¡7—x%7G:‚¶’¯6—x%7—x%7’¯6—x%7J7]·¤×·—x%7—x%7¤×·¤×·ô\.¸+{¸+{¸J7]·vŠ½·+{¸ô\.¸ÿZB¸ô\.¸F[“¸ç~¸ÿZB¸ô\.¸`V¸ÿZB¸Sg¸F[“¸mj¸ÿZB¸ç~¸+{¸mj¸ç~¸ô\.¸`V¸ô\.¸ÿZB¸Ðl¸`V¸vŠ½·`V¸ô\.¸+{¸ô\.¸F[“¸Ðl¸ÐE¹8gø¸påϸF[“¸ÐE¹¯»¸#ä¸PÉŸÐl¸^Ú¸påϸ¯»¸¯»¸Ø–±¸#ä¸^Ú¸CL‰¸Ø–±¸Ø–±¸PÉŸpåϸPÉŸPÉŸç~¸¯»¸PÉŸpåϸ8gø¸Ø–±¸mj¸·€§¸Ø–±¸mj¸CL‰¸+{¸+{¸’¯6 m¡7J7]·¤×·ÑÉ7‹%H8¶È8ïD–8- 8{‚´8ÀÒÒ8ÀÒÒ8oVû8¶È8ÆÐ9oVû8¢½9ÆÐ93ñ8ÀÒÒ83ñ8¢½9oVû83ñ81ñÜ83ñ8{‚´8Tç8»kª8,5Œ8ÀÒÒ8•;p8»kª8•;p8»kª8»kª83ñ8Tç83ñ8oVû8Tç8¶È8ÀÒÒ8ÀÒÒ8ÀÒÒ8Tç8ïD–8,5Œ8N›¾8ïD–8ïD–8;%48J7]·‰ús7G:‚¶+{¸+{¸F[“¸PÉŸؖ±¸Ðl¸Ðl¸^Ú¸Ðl¸^Ú¸F[“¸·€§¸^Ú¸PÉŸÐl¸ÿZB¸ÿZB¸`V¸CL‰¸Ðl¸ÿZB¸ô\.¸PÉŸCL‰¸Sg¸CL‰¸·€§¸mj¸ç~¸ô\.¸ô\.¸Sg¸·3å··3å··3å·vŠ½·¤×·J7]·vŠ½·Sg¸·3å·’¯6ÑÉ7‰ús7+{¸—x%7ܲð7;%487-\8‹%H87-\8 m¡77-\8,5Œ8(‚8‹%H8(‚8»kª8‹%H8‹%H81ñÜ8;%48»kª8,5Œ8,5Œ8¶È8ïD–8(‚8•;p8ïD–8»kª8+W 8+W 8»kª8‹%H8- 8 > 8 m¡7ÑÉ7‰ús7—x%7ŒÀ+5’¯6’¯6ŒÀ+5¤×·+{¸’¯6J7]·Èÿ•·vŠ½··3å·vŠ½·Èÿ•·¤×·Èÿ•··3å·Sg¸Sg¸Sg¸`V¸ÿZB¸ô\.¸ÿZB¸`V¸Ðl¸PÉŸÿZB¸Ðl¸¯»¸F[“¸Ø–±¸ô\.¸F[“¸PÉŸç~¸`V¸Ø–±¸¯»¸PÉŸ#ä¸Ø–±¸ç~¸F[“¸`V¸ç~¸`V¸+{¸+{¸Èÿ•·Sg¸+{¸ô\.¸Sg¸¤×·‰ús7J7]·’¯6—x%7—x%7‰ús7—x%7¤×·¤×·ŒÀ+5;%48(‚8•;p8(‚8‹%H8ïD–8+W 8ïD–87-\8‹%H8ïD–8ïD–8•;p8N›¾81ñÜ83ñ83ñ8•;p8¢½9Tç8¶È8,5Œ8‹%H8ïD–8- 8 > 8;%487-\8;%48ܲð7G:‚¶G:‚¶¤×·J7]·Èÿ•·ÿZB¸ô\.¸J7]··3å·+{¸ô\.¸Sg¸Èÿ•·ÿZB¸ç~¸·3å·ô\.¸Ðl¸·3å·+{¸Èÿ•·`V¸·3å·’¯6G:‚¶J7]·Èÿ•·vŠ½·+{¸ç~¸ô\.¸·€§¸ÐE¹påϸpåϸ¯»¸#ä¸PÉŸPÉŸmj¸ç~¸F[“¸påϸF[“¸`V¸mj¸ô\.¸+{¸Èÿ•·+{¸Sg¸vŠ½·¤×··3å·ŒÀ+5J7]·¤×·’¯6Èÿ•·’¯6ÑÉ7 m¡7ÑÉ7—x%7ŒÀ+5—x%7‰ús7ܲð7 > 8 > 8‹%H8‹%H8- 8‰ús7 m¡7‹%H8;%48‹%H8•;p8;%48‰ús7;%48‹%H8 m¡7—x%7ŒÀ+5 > 8—x%7’¯6G:‚¶+{¸·3å·`V¸Ø–±¸PÉŸF[“¸·€§¸·€§¸Ðl¸F[“¸F[“¸Ðl¸PÉŸ·€§¸Ø–±¸·€§¸påϸPÉŸTDî¸Ø–±¸8gø¸bl ¹ÐE¹~Á¹F«¹³€¹¾X¹TDî¸ÐE¹¾X¹#ä¸8gø¸³€¹bl ¹³€¹F«¹8gø¸¾X¹8gø¸NØ$¹bl ¹~Á¹¦/¹¦/¹¾X¹#ä¸8gø¸8gø¸ÐE¹¯»¸Ø–±¸¯»¸·€§¸ô\.¸`V¸ç~¸+{¸Èÿ•·ŒÀ+5Èÿ•·¤×·vŠ½·’¯6—x%7¤×·’¯6¤×·’¯6Èÿ•·ÑÉ7- 8G:‚¶‰ús7 m¡7ÑÉ7ŒÀ+5‰ús7‰ús7;%48 > 8—x%7ÑÉ7- 87-\8‹%H8ÑÉ7;%48 m¡7- 87-\8‹%H8(‚8,5Œ87-\8(‚8•;p8ܲð7 m¡7—x%7ÑÉ7vŠ½·¤×·—x%7 m¡7¤×··3å·+{¸Sg¸ô\.¸`V¸+{¸vŠ½·Sg¸Sg¸vŠ½·G:‚¶¤×·Èÿ•··3å·ô\.¸Èÿ•·Èÿ•·Èÿ•··3å·ô\.¸·3å··3å·Sg¸Sg¸ç~¸ô\.¸vŠ½·Sg¸·3å·F[“¸`V¸`V¸mj¸ô\.¸mj¸·3å·‰ús7—x%7Èÿ•·Èÿ•·G:‚¶G:‚¶’¯6 m¡7—x%7‰ús7¤×· m¡7G:‚¶ m¡7ŒÀ+5¤×·- 8‹%H8ܲð7’¯6 m¡7‰ús7G:‚¶—x%7J7]·;%48,5Œ8 > 8ÑÉ77-\8ܲð7 > 8,5Œ8•;p8¶È8,5Œ8(‚8ïD–8•;p8¶È8»kª8»kª8{‚´8ïD–8‹%H8ܲð7•;p8‹%H8 > 8 m¡7—x%7ŒÀ+5‰ús7‰ús7‰ús7’¯6 m¡7ÑÉ7+{¸Èÿ•·J7]··3å·ÿZB¸+{¸ô\.¸mj¸`V¸ô\.¸ç~¸mj¸`V¸Ðl¸påϸCL‰¸¯»¸Ðl¸·€§¸mj¸Ðl¸F[“¸Ø–±¸PÉŸÐl¸Sg¸ÿZB¸`V¸mj¸`V¸F[“¸·€§¸mj¸F[“¸PÉŸ¯»¸Ø–±¸·€§¸^Ú¸mj¸·€§¸CL‰¸Ðl¸F[“¸·€§¸påϸ·€§¸F[“¸¯»¸+{¸F[“¸vŠ½·ô\.¸Èÿ•·Èÿ•·J7]·¤×·—x%7G:‚¶’¯6·3å·vŠ½·¤×·G:‚¶’¯6- 8—x%7ÑÉ7‹%H8(‚8(‚8’¯6- 8;%48‹%H8•;p8•;p87-\8- 8;%48;%48•;p8;%48 > 8;%48‹%H8- 8 m¡7‰ús7ŒÀ+5‰ús7ŒÀ+5 m¡7 m¡7ܲð7 > 8G:‚¶ŒÀ+5G:‚¶’¯6—x%7ÑÉ7¤×·¤×·—x%7 m¡7’¯6—x%7ŒÀ+5—x%7vŠ½·G:‚¶Èÿ•·+{¸`V¸`V¸`V¸·3å·J7]·J7]·Èÿ•·Èÿ•·’¯6ô\.¸¤×·vŠ½·vŠ½·Sg¸·3å·+{¸G:‚¶·3å·+{¸¤×·¤×·Èÿ•·—x%7- 8ŒÀ+5 m¡7‹%H8;%48 m¡7‰ús7 > 8’¯6ŒÀ+5—x%7 > 8- 8•;p8ïD–8(‚8ïD–8N›¾8ïD–8,5Œ8ÀÒÒ8‹%H8•;p8;%487-\8ïD–8ܲð7;%48- 8‹%H8- 8- 8 > 8 > 8- 8 > 8•;p8ŒÀ+5‹%H8 > 8‹%H8ÑÉ7•;p8,5Œ8- 8‹%H8,5Œ8- 8‰ús7 > 8 m¡7ÑÉ7 m¡7G:‚¶’¯6 m¡7‰ús7’¯6Èÿ•·G:‚¶ŒÀ+5’¯6vŠ½· m¡7 m¡7G:‚¶’¯6vŠ½·Sg¸J7]·vŠ½·‰ús7‰ús7¤×·G:‚¶’¯6¤×·ŒÀ+5+{¸+{¸¤×·¤×·vŠ½·+{¸Èÿ•·Sg¸·3å·vŠ½·G:‚¶- 8ܲð7- 8‹%H8ܲð7{‚´8»kª8{‚´8œä 9$9ÆÐ9Tç8F9F9s:!9s:!9ù9s:!909nQ&9¾™59nQ&9@TY9¬c9¿p^9šÌ?9s:!9˜O9ÉæD9ë²:909šÌ?928T9üh+9œä 9œä 93ñ8»kª8ÆÐ9¢½9Tç8Tç8¶È8oVû8Tç8+W 8N›¾8Tç8»kª8¶È8{‚´8+W 87-\8‹%H87-\8»kª87-\8‹%H8(‚8- 8(‚8 > 8—x%7 m¡7‰ús7—x%7- 8’¯6ŒÀ+5 > 8ÑÉ7‰ús7G:‚¶¤×·ŒÀ+5ŒÀ+5¤×·J7]·—x%7‰ús7Èÿ•·’¯6¤×·’¯6‰ús7J7]·Èÿ•·—x%7—x%7‰ús7 m¡7ܲð7ŒÀ+5’¯6—x%7’¯6ŒÀ+5ܲð7ŒÀ+5’¯6;%48- 8G:‚¶- 8•;p8ܲð77-\8•;p8‹%H87-\8+W 8,5Œ8;%48N›¾8,5Œ8;%48,5Œ8•;p8- 8 > 8 > 8ïD–8;%48 > 8»kª8N›¾8Tç81ñÜ83ñ8Tç8{‚´81ñÜ8ÀÒÒ8+W 8,5Œ8,5Œ8¶È8ïD–87-\8,5Œ8 > 8—x%7‰ús7—x%7’¯6ÑÉ7ŒÀ+5G:‚¶vŠ½·vŠ½··3å·ô\.¸vŠ½·+{¸mj¸mj¸ÿZB¸`V¸Ðl¸¯»¸påϸF[“¸`V¸PÉŸ·€§¸TDî¸påϸÐE¹F«¹)99¹³€¹ÐE¹F«¹påϸ¾X¹«•¹³€¹¾X¹«•¹påϸÐE¹^Ú¸TD•¹ÐE¹«•¹ÐE¹ÐE¹#ä¸ÐE¹PÉŸpåϸpåϸÐE¹F[“¸·€§¸Ø–±¸¯»¸F[“¸`V¸Sg¸Èÿ•·’¯6¤×·ŒÀ+5- 8‰ús7 m¡7,5Œ8‰ús7ÑÉ7‹%H8- 8•;p87-\8(‚8,5Œ8- 87-\8•;p8ïD–8»kª8»kª8¶È81ñÜ81ñÜ8{‚´81ñÜ8¶È87-\8{‚´8‹%H8‹%H8,5Œ8{‚´8ïD–8,5Œ8•;p8ܲð7—x%7 m¡7 m¡7 > 8G:‚¶’¯6vŠ½·’¯6 > 8‹%H8’¯6 m¡7ÑÉ7‰ús7ŒÀ+5ô\.¸¤×·vŠ½·+{¸ç~¸`V¸`V¸`V¸ÿZB¸F[“¸Ø–±¸`V¸F[“¸ç~¸Ðl¸CL‰¸Ðl¸+{¸F[“¸ÿZB¸·€§¸`V¸F[“¸Ø–±¸ç~¸ç~¸·€§¸Ðl¸Ðl¸ç~¸ÿZB¸`V¸vŠ½·J7]·Èÿ•··3å·’¯6ŒÀ+5¤×·G:‚¶ > 8‹%H8 m¡7ܲð7ÑÉ7’¯6’¯6—x%7ÑÉ7ÑÉ7ܲð7‰ús7 m¡7ÑÉ77-\8 > 8(‚8N›¾8+W 8,5Œ81ñÜ8Tç8F9ÆÐ9$909ÆÐ9ÆÐ9¢½9¢½9$91ñÜ8Tç8ÆÐ9¶È8ÆÐ93ñ8¢½93ñ8¢½93ñ8¶È8»kª8»kª8{‚´8,5Œ8»kª87-\8(‚8{‚´8N›¾8•;p87-\8‹%H8ŒÀ+5‰ús7 m¡7ÑÉ7 m¡7‰ús7—x%7Èÿ•·ÑÉ7ŒÀ+5J7]·—x%7ܲð7—x%7G:‚¶·3å·G:‚¶ŒÀ+5Èÿ•·Ü²ð7ÑÉ7ŒÀ+5ÑÉ7ÑÉ7ÑÉ7;%487-\8 > 8- 8‹%H87-\8;%48•;p8(‚8ïD–87-\8(‚8ïD–8•;p8{‚´8•;p87-\8(‚87-\8ïD–8Tç8•;p8ïD–8+W 8»kª8¶È8{‚´81ñÜ8oVû8Tç8•;p8•;p8,5Œ87-\8+W 8N›¾8{‚´8N›¾81ñÜ8Tç8ÀÒÒ8+W 8N›¾8•;p8•;p8»kª8»kª8•;p8ïD–8,5Œ8,5Œ87-\8- 8—x%7ŒÀ+5’¯6—x%7ŒÀ+5¤×·J7]·—x%7vŠ½·`V¸Sg¸·3å·+{¸ÿZB¸ô\.¸mj¸ÿZB¸ç~¸¯»¸Ðl¸¯»¸påϸbl ¹Ø–±¸F[“¸F[“¸PÉŸPÉŸ·€§¸ç~¸PÉŸÐl¸^Ú¸TDî¸ÐE¹8gø¸8gø¸ÐE¹ÐE¹³€¹8gø¸8gø¸bl ¹ÐE¹TDî¸påϸ¯»¸·€§¸ÿZB¸ç~¸Ø–±¸PÉŸCL‰¸ô\.¸Ø–±¸Sg¸mj¸+{¸vŠ½·ŒÀ+5 m¡7‰ús7ŒÀ+5ܲð7vŠ½·ÿZB¸¤×·J7]·ô\.¸Èÿ•·ŒÀ+5’¯6G:‚¶¤×·G:‚¶’¯6G:‚¶G:‚¶vŠ½·¤×·—x%7ÑÉ7‰ús7- 8 m¡7—x%7Èÿ•·+{¸J7]·¤×·¤×·¤×·Èÿ•·Èÿ•·G:‚¶G:‚¶‰ús7¤×·Èÿ•·¤×·—x%7+{¸ÿZB¸+{¸`V¸Ðl¸ô\.¸ÿZB¸+{¸ô\.¸mj¸mj¸ô\.¸ç~¸F[“¸¯»¸Ðl¸#丯»¸påϸÐE¹TDî¸8gø¸TDî¸ÐE¹8gø¸8gø¸«•¹8gø¸«•¹¾X¹#ä¸^ڸؖ±¸Ø–±¸påϸ¯»¸F[“¸Ø–±¸ç~¸Sg¸`V¸+{¸ÿZB¸+{¸Èÿ•·vŠ½·ŒÀ+5¤×·G:‚¶ m¡7G:‚¶’¯6ܲð7 > 8ŒÀ+5 > 8 > 8‰ús7‰ús7 m¡7ÑÉ7ܲð7 > 8ÑÉ7ÑÉ7 m¡7;%48(‚87-\8•;p8;%48;%487-\8•;p8{‚´8- 8- 8 > 8 m¡7ÑÉ7‰ús7ŒÀ+5G:‚¶ŒÀ+5+{¸+{¸vŠ½·`V¸ÿZB¸Sg¸ô\.¸·3å··3å·ô\.¸ÿZB¸PÉŸç~¸mj¸F[“¸ç~¸Ø–±¸·€§¸Ø–±¸¯»¸ÿZB¸Sg¸F[“¸F[“¸ç~¸ÿZB¸mj¸Ø–±¸ç~¸Ø–±¸Ðl¸·€§¸CL‰¸#ä¸Ø–±¸PÉŸCL‰¸F[“¸¯»¸#ä¸#丯»¸F[“¸Ø–±¸`V¸Ðl¸`V¸·3å·+{¸`V¸`V¸·€§¸F[“¸Sg¸`V¸Sg¸+{¸vŠ½·vŠ½·J7]·G:‚¶J7]·+{¸Èÿ•·ŒÀ+5¤×·Èÿ•·J7]·G:‚¶|Pd|1|24600|2013-282T15:32:17.422 ¦?ö5£¸Ú·í#¸+)¸+)¸í#¸|:¸:³¸n•‹·|:¸|:¸£¸Ú·Þ³·í#¸í#¸°2y¸:³¸í#¸ÄQ¸:³¸è¤†¸è¤†¸:³¸°2y¸|:¸:³¸hפ¸ÄQ¸ÄQ¸|:¸=¸£¸Ú·‚!e¸n•‹·£¸Ú·D':7 + Ø6«b„7¹yÓ7Š3¶¹yÓ7«b„7F€8Òq%8Òq%8 xa8Òq%8ˆu8 xa8F€8Ï„8F€8 xa8Xí˜86£8¬,·8FÁ8Xí˜86£8ŒnM86£8¬,·8Xí˜8Ï„8ŒnM8F€8Ï„8]­8Òq%8¬,·8êÜŽ8]­8¬,·8]­8êÜŽ8Š1û7[Ý«7D':7 xa8ŒnM89l98Òq%89l98F€8F€8ŒnM8Òq%8[Ý«7[Ý«7 + Ø6[Ý«7ÌzH·ÌzH·£¸Ú·ÄQ¸^ø:³¸hפ¸Äš¸‚!e¸Äš¸hפ¸è¤†¸Äš¸Äš¸è¤†¸=¸=¸‚!e¸:³¸=¸hפ¸‚!e¸ÄQ¸+)¸‚!e¸§¹¸ö쮸§¹¸ö쮸hפ¸^ø:͸^øvW׸^øö쮸¬vḗë¸^ø:͸Þÿ¸—븺õ¸:͸ö쮸^ø^ø:³¸Äš¸‚!e¸=¸:³¸í#¸£¸Ú·ÌzH·n•‹·ÌzH· + Ø6Ê|ô¶Š3¶ + Ø6[Ý«7Ê|ô¶Š3¶Š3¶ + Ø6«b„7«b„7[Ý«7 + Ø6¹yÓ7D':7 + Ø6ŒnM8¦?ö5 + Ø6F€8¦?ö5ÌzH·«b„7Ê|ô¶Ê|ô¶Þ³·|:¸:³¸|:¸=¸:³¸|:¸°2y¸°2y¸£¸Ú·ÄQ¸§¹¸hפ¸:͸ºõ¸^øö쮸vW׸§¹¸hפ¸§¹¸:͸ö쮸hפ¸:³¸§¹¸:͸:͸vW׸:͸vW׸vW׸Äš¸ö쮸:³¸è¤†¸ö쮸:͸¬vá¸:͸Z)¹vW׸vW׸hפ¸:³¸ö쮸褆¸§¹¸ö쮸:³¸Äš¸§¹¸:͸:³¸hפ¸:³¸‚!e¸£¸Ú·|:¸|:¸Þ³·n•‹·Ê|ô¶Þ³·Ê|ô¶¦?ö5¦?ö5Š1û7Òq%8ˆu8[Ý«7«b„7D':7F€89l98Xí˜89l98ˆu8êÜŽ8Òq%8ŒnM8êÜŽ8ˆu8ŒnM8 xa8Òq%8¹yÓ7 xa8 xa8«b„7F€8Òq%8 + Ø6¹yÓ7[Ý«7¦?ö5 + Ø6 + Ø6ÌzH·ÌzH·Þ³·£¸Ú·Þ³·n•‹·Þ³·£¸Ú·ÄQ¸=¸:³¸è¤†¸ö쮸ö쮸¬vá¸Â¹Z)¹—ë¸Z)¹Â¹ÿù<¹—à7¹O€#¹Œ—(¹´Ç2¹ÿù<¹Z¯-¹Â¹'>¹¬vá¸ö쮸§¹¸:͸ö쮸:͸^øö쮸ö쮸+)¸í#¸n•‹·Þ³·D':7[Ý«7¹yÓ7[Ý«7Òq%8F€8«b„7Š1û7D':7Òq%8¹yÓ7Š1û7[Ý«7 xa89l989l989l98Xí˜8Š1û7êÜŽ8 xa8ŒnM8Xí˜8ˆu89l98êÜŽ8ŒnM8Ï„8ŒnM8 xa8ŒnM8Š1û79l98Òq%8ŒnM8[Ý«7ŒnM89l98Òq%8Š3¶n•‹·Þ³·|:¸£¸Ú·+)¸n•‹·Ê|ô¶n•‹·í#¸Ê|ô¶¦?ö5n•‹·n•‹·D':7Š3¶Ê|ô¶n•‹·ÌzH·í#¸£¸Ú·ÌzH·‚!e¸‚!e¸+)¸ÄQ¸‚!e¸Þ³·:³¸ö쮸:͸§¹¸ºõ¸:͸¬vá¸Þÿ¸'>¹'>¹¬vá¸:͸褆¸hפ¸ö쮸:³¸:³¸+)¸n•‹·|:¸|:¸+)¸=¸‚!e¸°2y¸:³¸°2y¸:³¸^ø+)¸Þ³·Þ³·Ê|ô¶ + Ø69l98Š1û7¹yÓ7F€8ŒnM8Òq%8Xí˜8FÁ8]­86£8QaË8QaË8FÁ86£8êÜŽ8Ï„8FÁ86£8 xa8ˆu8ˆu86£86£8êÜŽ8êÜŽ8 xa86£86£8Øþ8¬,·8Xí˜8êÜŽ8ŒnM86£8êÜŽ8Ï„8ˆu8Òq%8F€8ŒnM8Ï„8Š1û7«b„7Š1û7«b„7¦?ö5¦?ö5ÌzH·Þ³·ÄQ¸:³¸hפ¸ö쮸^ø^øö쮸ö쮸ö쮸^øhפ¸^ø§¹¸^ø—ë¸Þÿ¸7 +¹—븘S¹—à7¹Œ—(¹Z¯-¹§i¹´Ç2¹˜S¹˜S¹˜S¹Z¯-¹7 +¹§i¹7 +¹7 +¹§i¹˜S¹'>¹7 +¹Z)¹ºõ¸'>¹Z)¹7 +¹vW׸—ë¸vW׸¬vá¸^ø°2y¸:³¸hפ¸:³¸=¸‚!e¸=¸=¸‚!e¸Þ³·¦?ö5í#¸Þ³·ÌzH· + Ø6|:¸¦?ö5n•‹·£¸Ú·n•‹·n•‹·Ê|ô¶ + Ø6Š3¶Š3¶ + Ø6Š3¶[Ý«7¹yÓ7Ê|ô¶Š1û7[Ý«79l98ˆu8Š1û7Š1û7ŒnM89l98ŒnM8¹yÓ7 xa8Òq%8ŒnM8 xa8Š1û7[Ý«7¹yÓ7Š1û7ÌzH·Þ³·9l98«b„7F€8¹yÓ7Ê|ô¶«b„7¹yÓ7n•‹·Ê|ô¶í#¸í#¸í#¸‚!e¸|:¸|:¸°2y¸‚!e¸‚!e¸|:¸:³¸hפ¸Äš¸hפ¸hפ¸°2y¸=¸è¤†¸:³¸+)¸n•‹·n•‹·£¸Ú·£¸Ú·£¸Ú·Ê|ô¶n•‹· + Ø6 + Ø6 + Ø6 + Ø6 + Ø6Š3¶¹yÓ7[Ý«7Òq%8 xa8[Ý«7Š1û79l98Xí˜89l98Òq%89l98¹yÓ7 xa8 xa8ˆu89l98 xa8Ï„8Òq%8ˆu8ŒnM89l98ŒnM8F€8êÜŽ8Xí˜89l989l98[Ý«7D':7ŒnM8Òq%89l98D':7 + Ø6«b„7[Ý«7D':7ÌzH·n•‹·¦?ö5ÌzH·¦?ö5 + Ø6ÌzH·n•‹·+)¸Þ³·¦?ö5ÌzH·Ê|ô¶n•‹·n•‹·¦?ö5Þ³· + Ø6£¸Ú·Þ³·|:¸°2y¸=¸°2y¸£¸Ú·‚!e¸‚!e¸:³¸‚!e¸ÄQ¸hפ¸ÄQ¸|:¸£¸Ú·+)¸ÌzH·ÄQ¸ÄQ¸í#¸=¸|:¸£¸Ú·í#¸=¸+)¸n•‹·Š3¶£¸Ú·n•‹· + Ø6Š3¶¦?ö5£¸Ú·D':7 + Ø6ŒnM8Š1û7ŒnM8F€8Ï„8êÜŽ8Xí˜8t~Õ8QaË8Øþ8ŽP9Øþ8ˆ9ì½é8ˆ9t~Õ8ˆ9Ô{9Ü' 9wÙ19wÙ19Øþ8ˆ9Ü' 9ŽP9Øþ8]­8ì½é8àó8Ü' 9FÁ8êÜŽ8ì½é8QaË86£8ì½é8FÁ8]­8ŒnM8 xa8ˆu8ˆu8¬,·8]­8ˆu8 xa8¹yÓ7¹yÓ7ŒnM8¹yÓ7¹yÓ7«b„7[Ý«7D':7D':7¦?ö5¹yÓ7D':7ÌzH·ÌzH·Þ³·í#¸n•‹·‚!e¸+)¸ÄQ¸ÄQ¸ö쮸+)¸=¸:³¸hפ¸^ø§¹¸hפ¸ö쮸hפ¸:³¸—ë¸Äš¸:³¸=¸=¸:³¸‚!e¸è¤†¸Äš¸hפ¸è¤†¸:³¸hפ¸=¸+)¸í#¸í#¸=¸=¸Þ³·Š3¶+)¸Ê|ô¶D':7Š3¶Š3¶¦?ö59l98F€89l98Š1û7¹yÓ7êÜŽ8QaË8Ï„89l98ˆu8 xa8ŒnM8ˆu8QaË8ŒnM8Òq%89l98ˆu8êÜŽ8 xa8Ï„8Òq%8êÜŽ8 xa8ˆu8Ï„86£89l98ˆu8êÜŽ8Š1û7Xí˜8 xa8Š1û7Š1û7F€8«b„7 + Ø6Š3¶ÌzH·ÄQ¸=¸|:¸:³¸:³¸ÄQ¸ÄQ¸:³¸‚!e¸=¸Ê|ô¶¦?ö5ÄQ¸Þ³·Ê|ô¶+)¸£¸Ú·£¸Ú·£¸Ú·£¸Ú·í#¸Š3¶¦?ö5¹yÓ7Š1û7¹yÓ7Òq%8Š1û7D':7Òq%8¹yÓ79l98F€8[Ý«7 xa89l989l98ˆu8êÜŽ8Ï„8êÜŽ8]­8ì½é8FÁ8¬,·8êÜŽ8ˆu8Xí˜8êÜŽ86£86£8QaË8Øþ8FÁ8Øþ8QaË8Ô{9ŽP9ì½é8Ü' 9a’"9ˆ9Øþ8QaË8Xß8ì½é8¬,·8àó8ˆ9t~Õ8Ü' 9áe9ˆ9ì½é8 xa8FÁ8]­8à;9QaË8]­8Xß86£8Xí˜8Xí˜86£8¬,·8Xí˜89l98QaË8Xí˜8]­8Xí˜8¬,·8êÜŽ8 xa8êÜŽ8¬,·8Ï„8êÜŽ8Xí˜8 xa89l98¹yÓ79l98ˆu8[Ý«7Ï„8Ï„8]­89l98Xí˜89l98Xí˜8ŒnM8[Ý«7ŒnM8F€8¹yÓ79l98[Ý«7D':7Ê|ô¶|:¸£¸Ú·‚!e¸=¸+)¸=¸Þ³·n•‹·ÌzH·Ê|ô¶«b„7¦?ö5Š3¶Š3¶ + Ø6D':7¹yÓ7 + Ø6«b„7 xa89l98[Ý«7¦?ö5 + Ø6 + Ø6Š3¶«b„7¦?ö5[Ý«7 xa89l98Òq%8ˆu8Òq%8¹yÓ7Òq%8¹yÓ7Ï„8Xí˜8FÁ86£86£8ˆu89l98Ï„8FÁ8]­8t~Õ8Ü' 9QaË8ì½é8t~Õ8]­8Ï„8]­8QaË8FÁ8 xa8Xí˜8Ï„8ˆu8ŒnM8Ï„8ˆu86£86£86£8ŒnM89l98 xa8êÜŽ8ŒnM89l98[Ý«7F€8¦?ö5«b„7¦?ö5Ê|ô¶«b„7«b„7[Ý«7[Ý«7n•‹·Ê|ô¶ÌzH·£¸Ú·ÄQ¸ÌzH·Þ³·í#¸Š3¶|:¸Þ³·Š3¶n•‹·ÌzH·ÌzH·£¸Ú·n•‹·¦?ö5¹yÓ7¦?ö5Š3¶Þ³·|:¸ÌzH·Þ³·£¸Ú·¦?ö5D':7ÌzH·ÌzH·ÌzH·«b„7 + Ø6n•‹·«b„7ÌzH·«b„7ŒnM8¹yÓ7¹yÓ7¹yÓ7«b„7¹yÓ7¹yÓ7Òq%8 xa8¹yÓ7«b„7¦?ö5n•‹·í#¸Ê|ô¶£¸Ú·=¸+)¸ÄQ¸°2y¸^ø:³¸ÄQ¸:³¸°2y¸ÄQ¸°2y¸:³¸‚!e¸Äš¸ÄQ¸ÄQ¸ÄQ¸+)¸|:¸|:¸+)¸°2y¸=¸°2y¸^ø=¸:͸§¹¸§¹¸'>¹—븗ë¸^ø¬vḗ븬vḗë¸Z)¹ºõ¸—ë¸:͸—ë¸:͸ö쮸ö쮸‚!e¸¬vá¸:³¸‚!e¸‚!e¸‚!e¸:³¸:³¸+)¸ö쮸Äš¸=¸ÄQ¸:³¸°2y¸+)¸=¸ÌzH·ÌzH·¦?ö5¦?ö5Š3¶ÌzH·¦?ö5D':7 + Ø6[Ý«7 + Ø6[Ý«7[Ý«7¹yÓ7 + Ø6D':7D':7 + Ø6 + Ø6¦?ö5[Ý«7«b„7D':7ŒnM8ŒnM8Š1û7D':7¦?ö5D':7«b„7Òq%8 + Ø6 + Ø6¦?ö5«b„7Š3¶Š1û7¦?ö5Š1û7D':7¦?ö5[Ý«7 + Ø6D':7D':7D':7 + Ø6Š1û7n•‹·Þ³·Þ³·ÌzH·£¸Ú·:³¸hפ¸°2y¸^øhפ¸Þÿ¸¬vḬvá¸:͸ö쮸¬vḰ2y¸ÄQ¸=¸ö쮸:͸hפ¸:³¸:³¸^øvW׸—븗븬vá¸ö쮸^ø:͸:͸:͸vW׸¬vá¸^øhפ¸ö쮸hפ¸:³¸ÄQ¸n•‹·£¸Ú·«b„7[Ý«7 + Ø6Òq%8[Ý«79l98 xa89l98 xa8êÜŽ8ŒnM8êÜŽ8ŒnM8Òq%8Xí˜8]­8Xí˜8ˆu86£8¬,·86£8¬,·8ŒnM8Ï„8êÜŽ8ŒnM8 xa8]­8Xí˜8Ï„8êÜŽ8]­8Xß8]­8ŒnM8Ï„86£8Ï„8]­8 xa8ŒnM8Òq%8Ï„89l98D':7Š1û7F€8¦?ö5Š3¶[Ý«7«b„7D':7«b„7Ê|ô¶Š3¶=¸Þ³·°2y¸=¸Š3¶í#¸n•‹·=¸‚!e¸£¸Ú·|:¸ÄQ¸ÌzH·ÌzH·n•‹·£¸Ú·Ê|ô¶Š3¶|:¸í#¸£¸Ú·|:¸í#¸ÄQ¸+)¸+)¸|:¸¦?ö5Þ³·Ê|ô¶¦?ö5í#¸D':7ÌzH·‚!e¸n•‹·D':7D':7Þ³·¦?ö5¦?ö5Š3¶¦?ö5¦?ö5n•‹·D':7«b„7«b„7¹yÓ7D':7D':7[Ý«7[Ý«7Òq%8Š1û7«b„7F€8Òq%8ŒnM8ŒnM8ŒnM8«b„7¹yÓ7ˆu8êÜŽ8êÜŽ86£8 xa8Xí˜8Ï„8ŒnM8 xa8Xí˜8Xí˜8]­8t~Õ8QaË8Xí˜8Øþ8t~Õ8êÜŽ8ˆu8 xa8Òq%8«b„7 xa8êÜŽ8«b„7[Ý«7ŒnM8[Ý«7Š1û7[Ý«7D':7n•‹·Ê|ô¶n•‹·Þ³·ÄQ¸‚!e¸+)¸|:¸ÄQ¸ÄQ¸ÄQ¸+)¸‚!e¸:³¸:³¸ö쮸:͸°2y¸:³¸§¹¸:³¸:³¸hפ¸°2y¸‚!e¸£¸Ú·=¸n•‹·+)¸+)¸‚!e¸‚!e¸=¸£¸Ú·¦?ö5n•‹·Òq%8 xa8Ï„8ˆu8êÜŽ8[Ý«7«b„7Òq%8«b„7ŒnM8Òq%8Xí˜86£8 xa8êÜŽ8ŒnM8êÜŽ8ŒnM8ŒnM8Xí˜8]­8êÜŽ8ˆu8ŒnM8Òq%8 xa8ŒnM8Ï„8Ï„8ˆu8êÜŽ89l98êÜŽ8ŒnM89l98Ï„8Ï„8Ï„86£8ˆu8ˆu8Ï„8Òq%8F€89l98ŒnM8D':7D':7¹yÓ7F€8«b„7D':7¹yÓ79l98¹yÓ7F€8¹yÓ7[Ý«7Š1û7[Ý«7¹yÓ7«b„7D':7¦?ö5£¸Ú·Ê|ô¶Þ³·:³¸ÄQ¸í#¸+)¸=¸hפ¸§¹¸°2y¸Äš¸è¤†¸ÄQ¸^øvW׸:͸^ø§¹¸hפ¸è¤†¸:³¸ö쮸:͸§¹¸:͸§¹¸ÄQ¸è¤†¸‚!e¸:³¸=¸£¸Ú·=¸í#¸ÌzH·+)¸ÌzH·+)¸ÄQ¸£¸Ú·Š3¶ÄQ¸í#¸ÄQ¸:³¸|:¸Þ³·+)¸Þ³· + Ø6ÌzH·n•‹·n•‹·|:¸ + Ø6¹yÓ7n•‹· + Ø6D':7[Ý«7[Ý«7ˆu8ˆu8êÜŽ8êÜŽ8]­8¬,·8]­8 xa89l98¹yÓ7 xa8[Ý«7¹yÓ7Ê|ô¶£¸Ú·=¸í#¸|:¸:³¸:͸:͸¬vá¸:³¸vW׸hפ¸^øö쮸^ø§¹¸vW׸O€#¹'>¹ºõ¸¬vḗ븺õ¸¬vḘS¹^ø—븧i¹ºõ¸—ë¸Þÿ¸Þÿ¸vW׸vW׸vW׸:͸hפ¸Äš¸vW׸=¸°2y¸£¸Ú·ÄQ¸+)¸ÌzH·Ê|ô¶D':7¦?ö5Ê|ô¶¦?ö5[Ý«7D':7¦?ö5[Ý«7¦?ö5 + Ø6¦?ö5ÌzH·¹yÓ7Š1û7[Ý«7]­8ˆu8QaË86£8QaË8]­8QaË8QaË86£8ì½é8t~Õ8Xß8ˆ9Ü' 9àó8¬,·8¬,·8Xß8Øþ8àó8Xß8àó8QaË8ì½é8Xß8àó8QaË8ì½é8QaË8t~Õ8FÁ8Xí˜86£8Xí˜8Ï„8êÜŽ8ˆu8 xa8 xa8Ï„8ŒnM8Š1û7Òq%8QaË8êÜŽ8 xa89l986£8Òq%8Òq%8F€8¹yÓ7Òq%8[Ý«7¹yÓ7D':7ÌzH·¦?ö5Ê|ô¶£¸Ú·Ê|ô¶Þ³·£¸Ú·í#¸ÌzH·í#¸ÄQ¸n•‹·£¸Ú·¦?ö5Þ³·í#¸+)¸ÄQ¸hפ¸°2y¸+)¸|:¸ÌzH·Š3¶Ê|ô¶«b„7¦?ö5 + Ø6Òq%8¹yÓ7 xa8êÜŽ8ŒnM8]­8Xí˜8]­8¬,·8ì½é8]­8t~Õ8¬,·8t~Õ8FÁ8t~Õ8ˆ9t~Õ8FÁ8]­8]­8¬,·8Xß8ì½é8t~Õ8Xß8ˆ9êÜŽ8êÜŽ8QaË8êÜŽ8]­8t~Õ8t~Õ8FÁ8¬,·8]­8¬,·8Øþ8àó8t~Õ8àó8àó8QaË8t~Õ8Xß8Xí˜8¬,·8ˆu8Ï„8F€8«b„7Š1û7¦?ö5¦?ö5Š1û7 + Ø6n•‹·ÌzH·n•‹·í#¸+)¸|:¸‚!e¸ÄQ¸:³¸°2y¸:³¸:³¸ö쮸:³¸vW׸hפ¸hפ¸hפ¸ö쮸§¹¸§¹¸:³¸hפ¸ö쮸°2y¸:³¸+)¸=¸|:¸n•‹·n•‹·+)¸ÄQ¸+)¸‚!e¸ÄQ¸ÌzH·|:¸|:¸|:¸+)¸ÌzH·¦?ö5«b„7 + Ø6«b„7Š1û7ŒnM8 + Ø6Š1û7 + Ø6Š3¶Òq%8ˆu8Xí˜8 xa89l98Ï„8Xí˜8Xí˜8]­8¬,·8FÁ8êÜŽ8Xß8êÜŽ8F€8ŒnM8Š1û7«b„7F€8[Ý«7Òq%8¹yÓ7¹yÓ7¹yÓ7ŒnM8Ê|ô¶Š3¶¦?ö5n•‹·ÌzH·n•‹·ÌzH·+)¸n•‹·+)¸=¸‚!e¸è¤†¸:³¸=¸:³¸^ø:³¸ºõ¸^øvW׸:͸vW׸Þÿ¸^ø—ë¸Þÿ¸O€#¹Þÿ¸ºõ¸ºõ¸'>¹'>¹O€#¹Z)¹ºõ¸:͸ºõ¸Þÿ¸Z)¹˜S¹Â¹Â¹Þÿ¸Þÿ¸^ø:³¸:³¸:³¸:͸°2y¸+)¸Äš¸+)¸í#¸+)¸+)¸=¸:³¸+)¸|:¸í#¸=¸í#¸í#¸Š3¶¹yÓ7n•‹·|:¸D':7F€8F€8[Ý«7¹yÓ7Ï„8FÁ8êÜŽ8êÜŽ86£8ˆu89l98[Ý«7Òq%8 xa8 xa8ŒnM8¹yÓ7F€8Òq%8Òq%89l98êÜŽ8Ï„8ŒnM8ŒnM8Š1û7ŒnM8ŒnM8 xa8[Ý«7Š3¶Š3¶ÌzH·ÌzH·n•‹·ÄQ¸‚!e¸‚!e¸°2y¸£¸Ú·£¸Ú·=¸‚!e¸=¸n•‹·ÄQ¸ÄQ¸°2y¸:͸hפ¸Þ³·hפ¸|:¸‚!e¸:³¸°2y¸Äš¸:³¸ÄQ¸ÄQ¸|:¸£¸Ú·£¸Ú·+)¸n•‹·Š3¶Ê|ô¶Š3¶¦?ö5¦?ö5Š1û7Òq%8Òq%8Š1û7Š1û7Š1û7«b„7Òq%8[Ý«7ŒnM8«b„79l98Ï„8Ï„8Òq%8]­8Ü' 9Xß8Xß8à;9à;9Ü' 9a’"9áe9à;9áe9‘ <97Á,9Ô{9à;9Ô{97Á,9Ô{9à;9áe9áe9ˆ9„©'9ˆ9Aò697Á,9áe9à;9Xß8Øþ8àó8àó8Øþ8Xß8 xa8]­86£8QaË8¬,·8ˆu8FÁ8ˆu89l98ŒnM8Ï„8Š1û7Š1û7Š1û7 xa8ˆu8Š1û7¹yÓ7 + Ø6n•‹·Þ³·|:¸£¸Ú·Þ³·|:¸£¸Ú·+)¸:³¸:³¸=¸:³¸Äš¸°2y¸Äš¸‚!e¸Äš¸ö쮸:³¸hפ¸ö쮸ÄQ¸:³¸‚!e¸°2y¸ÄQ¸|:¸=¸+)¸£¸Ú·‚!e¸°2y¸+)¸|:¸ÄQ¸:³¸=¸n•‹·=¸n•‹·n•‹·ÌzH·¦?ö5[Ý«7¦?ö5«b„7¹yÓ7F€8Š1û7¹yÓ7«b„7¹yÓ7Ê|ô¶Š3¶n•‹·Ê|ô¶«b„7Š3¶[Ý«7n•‹·Š3¶[Ý«7Š1û7Ê|ô¶ÌzH·í#¸n•‹·n•‹·n•‹·£¸Ú·D':7¹yÓ7D':7Š3¶Ê|ô¶n•‹·D':7ÌzH·£¸Ú·í#¸£¸Ú·Þ³·|:¸+)¸+)¸=¸=¸£¸Ú·|:¸‚!e¸°2y¸ö쮸=¸|:¸:³¸ÄQ¸è¤†¸Äš¸ö쮸:³¸ö쮸^øÄš¸§¹¸^ø褆¸:³¸§¹¸ö쮸vW׸hפ¸¬vá¸ö쮸:͸^ø§¹¸Äš¸Äš¸ö쮸‚!e¸£¸Ú·£¸Ú·Ê|ô¶£¸Ú·ÌzH·¦?ö5 + Ø6Š1û7D':7F€8ŒnM8Š1û7Òq%8êÜŽ8ˆu8Ï„8ŒnM8Òq%8Š1û7Òq%8Òq%8¹yÓ7ŒnM8 xa8êÜŽ8ˆu8 xa8ŒnM86£8Xß8t~Õ8t~Õ8¬,·8FÁ8êÜŽ8àó8àó8]­8FÁ8¬,·8Xí˜8êÜŽ8ŒnM8ˆu89l98 xa8ŒnM8Òq%8 xa8ˆu8 xa8ˆu89l98ˆu8ŒnM8FÁ8Xí˜8Xí˜8Ï„8]­8Ï„8Š1û7ŒnM8¹yÓ7¹yÓ7ŒnM8Š3¶¦?ö5¦?ö5¦?ö5¦?ö5¦?ö5 + Ø6Š3¶£¸Ú·n•‹·n•‹·|:¸|:¸|:¸í#¸í#¸Þ³·£¸Ú·ÌzH·ÌzH·+)¸+)¸Þ³·=¸|:¸=¸:³¸è¤†¸|:¸|:¸Ê|ô¶n•‹·«b„7F€8Òq%8D':7[Ý«7 + Ø6D':7F€89l98Š1û7êÜŽ8F€8Xí˜8Òq%8Òq%8Òq%8Xí˜8 xa8ŒnM86£86£8]­8t~Õ8]­8QaË8QaË8¬,·8QaË8¬,·8Øþ8ˆu8Xí˜8QaË8ì½é86£8FÁ8àó8Ü' 9Xß8àó8ˆ9Xß8Ü' 96£8ˆu8êÜŽ8¬,·8Ï„89l98Òq%8«b„7 + Ø6¦?ö5|:¸|:¸=¸Äš¸è¤†¸ÄQ¸ö쮸Äš¸ö쮸:͸vW׸Þÿ¸Þÿ¸7 +¹ºõ¸—ë¸Þÿ¸^ø¬vá¸Â¹vW׸'>¹§i¹Â¹˜S¹Â¹7 +¹¬vá¸:͸ö쮸:³¸:³¸¬vḧ¹¸ö쮸:͸—ë¸hפ¸7 +¹ºõ¸¬vḬvá¸^ø:͸^øÄš¸¬vá¸:³¸§¹¸^ø§¹¸hפ¸Äš¸:³¸=¸=¸|:¸n•‹·£¸Ú·n•‹·n•‹·¦?ö5:³¸:³¸Š3¶|:¸£¸Ú·Ê|ô¶Þ³·|:¸£¸Ú· + Ø6Š3¶D':7«b„7¦?ö5D':7Ê|ô¶D':7n•‹·¦?ö5Š3¶Ê|ô¶Ê|ô¶n•‹·Þ³·£¸Ú·í#¸‚!e¸=¸ÄQ¸‚!e¸‚!e¸ÄQ¸‚!e¸:³¸hפ¸:³¸‚!e¸Äš¸:³¸§¹¸§¹¸ÄQ¸¬vá¸Äš¸§¹¸§¹¸:³¸ö쮸^ø¬vḧ¹¸:³¸ö쮸vW׸:³¸Äš¸:³¸ö쮸¬vá¸ÄQ¸Äš¸hפ¸§¹¸‚!e¸=¸+)¸|:¸°2y¸í#¸Ê|ô¶í#¸D':7Š3¶ÌzH·n•‹·Š3¶ÌzH·D':7¦?ö5|:¸¹yÓ7 + Ø6[Ý«7 + Ø6F€8¹yÓ7Òq%8¹yÓ7¹yÓ7ŒnM8ˆu8ˆu8êÜŽ89l98Ï„8ˆu8 xa8Òq%8 xa8ˆu8 xa8ˆu89l98Òq%8Òq%8¹yÓ7D':7Š1û7Š1û7[Ý«7Òq%8D':7í#¸Š3¶Ê|ô¶n•‹·n•‹·Š3¶ÌzH·n•‹·Ê|ô¶=¸£¸Ú·í#¸=¸|:¸|:¸n•‹·ÌzH·:³¸í#¸ÌzH·°2y¸:³¸‚!e¸=¸:³¸:³¸:³¸¬vá¸:͸°2y¸§¹¸ö쮸°2y¸è¤†¸hפ¸:͸¬vá¸Þÿ¸§¹¸Þÿ¸:͸§¹¸ö쮸:͸§¹¸:³¸+)¸:³¸^øÄQ¸è¤†¸§¹¸Äš¸:³¸hפ¸:³¸:³¸ö쮸+)¸ÄQ¸¦?ö5D':7¦?ö5D':79l98ˆu8F€8F€8¹yÓ7Ï„8Òq%8Ï„8Ï„8Ï„8¬,·8¬,·8¬,·8FÁ8Xí˜86£8êÜŽ8êÜŽ8ˆu89l98ˆu8Ï„8Xß8]­86£86£8¬,·8QaË8 xa8 xa8ˆu8ŒnM8ŒnM8Xí˜8Ï„8ˆu8Xí˜8àó8FÁ8QaË8¬,·8ˆu8Xß8Xí˜8ŒnM8Ï„8 xa89l98Òq%8F€8[Ý«7D':7«b„7Ê|ô¶Þ³·ÌzH·Š3¶|:¸n•‹·ÌzH·¦?ö5D':7Š3¶D':7¦?ö5¦?ö5D':7ÌzH·Ê|ô¶¦?ö5[Ý«7¹yÓ7 + Ø6Òq%8«b„7Š3¶Š3¶«b„7[Ý«7«b„7D':7Š1û7D':7Òq%8[Ý«7 + Ø6 + Ø6Š1û7[Ý«7[Ý«7 xa8Òq%8ŒnM8F€8Òq%8êÜŽ8ˆu8êÜŽ8êÜŽ89l98Òq%8ˆu89l989l989l98 xa8êÜŽ8 xa86£8Xí˜8Xí˜8¬,·8Xß8àó8Xß8Xß8FÁ8àó8ˆ9áe9áe9ˆ9FÁ8Øþ8QaË8ì½é86£8QaË86£8Òq%8F€8Š1û7«b„7 + Ø6Òq%8«b„7Òq%8Òq%8¹yÓ7ÌzH·n•‹·Š3¶ÌzH·¦?ö5Š3¶Ê|ô¶D':7Š3¶Þ³·£¸Ú·+)¸£¸Ú·í#¸:³¸=¸£¸Ú·ÄQ¸ÄQ¸:³¸°2y¸:³¸:³¸=¸°2y¸‚!e¸:³¸ÄQ¸ÄQ¸:³¸:³¸ÄQ¸|:¸£¸Ú·=¸£¸Ú·Þ³·Þ³·£¸Ú·Þ³·D':7ÌzH·9l98Òq%8[Ý«7[Ý«7Š1û7[Ý«7¹yÓ7Ï„8¹yÓ7ŒnM8ˆu8ˆu8êÜŽ8]­8FÁ86£8Xí˜8ŒnM8Òq%8ˆu86£8Xí˜8]­8Ï„8]­8QaË8]­8 xa8ˆu8]­8êÜŽ89l98ˆu8]­8ˆu86£8êÜŽ8Ï„8]­8êÜŽ8]­8Xß8FÁ86£8Ï„8]­86£8ˆu8Ï„8Òq%8ŒnM8[Ý«7ˆu89l98Òq%8Š1û7ŒnM8«b„7 + Ø6 + Ø6¦?ö5¦?ö5[Ý«7[Ý«7 + Ø6Ê|ô¶¦?ö5Š3¶=¸+)¸|:¸+)¸:³¸+)¸ÌzH·+)¸ÄQ¸‚!e¸è¤†¸è¤†¸í#¸+)¸í#¸Þ³·+)¸£¸Ú·n•‹·Ê|ô¶¦?ö5ÌzH·¦?ö5«b„7[Ý«79l98Òq%8Š1û7Xí˜8FÁ86£8Òq%8]­8ˆ9t~Õ8Xß8t~Õ8QaË8Xß8FÁ8Ü' 9ì½é8à;9áe9Ü' 9àó8„©'9wÙ19Ô{9„©'9„©'9b%A9b%A9Aò69Aò69Aò69„©'9„©'9a’"9Ü' 97Á,9Ô{9wÙ19²?F9„©'97Á,9wÙ19à;9ŽP9ŽP9b%A9Ô{9áe9áe9a’"9à;9àó8ì½é8]­8Ï„8QaË8êÜŽ8t~Õ8¬,·8 xa8«b„7Š1û7¦?ö5D':7D':7 + Ø6D':7n•‹· + Ø6ÌzH·£¸Ú·¦?ö5n•‹·n•‹·[Ý«7 + Ø6D':7¦?ö5|:¸=¸Þ³·ÌzH·Ê|ô¶¹yÓ7Š1û7Š3¶«b„7¦?ö5Š3¶D':7[Ý«7¦?ö5D':7«b„7Š1û7Ê|ô¶£¸Ú·D':7 + Ø6 + Ø6Š3¶ + Ø6¦?ö5|:¸n•‹·[Ý«7D':7«b„7Š1û7F€8Òq%8Š1û7¦?ö5¦?ö5¹yÓ7 xa8¹yÓ7Š1û7[Ý«7«b„7¹yÓ7 xa8ŒnM89l98 xa8F€8ˆu8Ï„8Š1û79l98Ï„8ŒnM8«b„7F€8Ê|ô¶ÌzH·D':7 + Ø6¦?ö5Š3¶D':7Ê|ô¶|:¸ÌzH·D':7Þ³·Þ³·+)¸Þ³·í#¸+)¸ÄQ¸‚!e¸:³¸:³¸‚!e¸£¸Ú·:³¸:͸:³¸ö쮸褆¸:³¸è¤†¸è¤†¸n•‹·£¸Ú·|:¸+)¸+)¸í#¸£¸Ú·£¸Ú·=¸=¸í#¸|:¸í#¸=¸+)¸‚!e¸ÄQ¸í#¸=¸|:¸n•‹·n•‹·+)¸n•‹·ÌzH·ÌzH·Þ³· + Ø6Ê|ô¶ÌzH·Þ³·Ê|ô¶£¸Ú·+)¸£¸Ú·Ê|ô¶ÌzH·Ê|ô¶¦?ö5«b„7F€8[Ý«7¦?ö5ÌzH·Ê|ô¶D':7Òq%8Š1û7Š1û7Š1û7 xa8[Ý«7¹yÓ7[Ý«7Š1û7¹yÓ7D':7Ê|ô¶n•‹·n•‹·Þ³·=¸:³¸:³¸:³¸=¸:³¸Äš¸:³¸ºõ¸—ë¸Z)¹ºõ¸—ë¸Z)¹7 +¹Â¹:͸ºõ¸—ë¸:͸:͸7 +¹7 +¹'>¹Â¹Þÿ¸Z)¹—à7¹7 +¹˜S¹'>¹'>¹/IL¹—à7¹—à7¹—à7¹Z¯-¹—à7¹çB¹ÿù<¹˜œ[¹—à7¹—à7¹V€V¹´Ç2¹Œ—(¹˜S¹Z)¹'>¹'>¹§i¹Z)¹Þÿ¸Z)¹Â¹vW׸ö쮸^ø^ø¬vá¸ö쮸ö쮸:³¸°2y¸hפ¸‚!e¸=¸|:¸í#¸|:¸=¸Þ³·+)¸í#¸ÄQ¸ÌzH·Ê|ô¶Ê|ô¶Þ³·Ê|ô¶Š3¶ÌzH·Ê|ô¶«b„7«b„7 + Ø6¦?ö5Þ³·«b„7 + Ø6D':7¹yÓ7n•‹·«b„7 + Ø6n•‹·¦?ö5Š3¶Š3¶ÌzH·n•‹·|:¸£¸Ú·+)¸í#¸‚!e¸+)¸n•‹·+)¸=¸‚!e¸è¤†¸‚!e¸^ø‚!e¸°2y¸:³¸Äš¸:³¸Äš¸è¤†¸:³¸hפ¸+)¸Äš¸hפ¸hפ¸:³¸‚!e¸:³¸vW׸hפ¸ö쮸hפ¸¬vá¸'>¹ºõ¸vW׸vW׸¬vá¸Äš¸:³¸:³¸°2y¸Äš¸=¸:³¸=¸‚!e¸|:¸í#¸‚!e¸n•‹·[Ý«7Þ³·Þ³·Þ³·D':7D':7ŒnM8 + Ø6Š1û7ŒnM8ŒnM89l98ŒnM8¹yÓ7Òq%8Òq%8D':7¦?ö5Š3¶Š3¶D':7Š3¶[Ý«7D':7Ê|ô¶D':7¦?ö5¦?ö5Š3¶£¸Ú·[Ý«7Þ³·n•‹·ÌzH· + Ø6¦?ö5ÌzH·Þ³·Ê|ô¶£¸Ú·+)¸ÌzH·=¸í#¸‚!e¸è¤†¸‚!e¸=¸:³¸hפ¸vW׸ö쮸Äš¸:͸¬vḰ2y¸^ø:͸ºõ¸^ø:³¸:͸§¹¸hפ¸°2y¸°2y¸:³¸hפ¸=¸:³¸:³¸|:¸‚!e¸ÄQ¸è¤†¸:³¸=¸‚!e¸‚!e¸ÄQ¸=¸Ê|ô¶ + Ø6n•‹·n•‹·n•‹·|:¸Š3¶ÌzH·n•‹·Š3¶n•‹·|:¸Š3¶¦?ö5D':7¹yÓ7Òq%8Š1û7[Ý«7Xí˜8Ï„8F€8Ê|ô¶[Ý«79l98[Ý«7[Ý«79l98Òq%8Š1û7D':7¹yÓ7¹yÓ7Òq%8D':7F€8Ê|ô¶[Ý«7Š1û7¹yÓ7Š1û7D':7¦?ö5D':7¦?ö5D':7F€8Òq%8Òq%8Š1û7[Ý«7D':7D':7Š1û7D':7ŒnM8F€8¹yÓ7F€8[Ý«7[Ý«7ŒnM8F€8Òq%8[Ý«7F€8n•‹·£¸Ú·Þ³·£¸Ú·Þ³·n•‹·|:¸£¸Ú·+)¸ö쮸:³¸|:¸°2y¸í#¸|:¸|:¸Þ³·í#¸ÄQ¸£¸Ú·£¸Ú·‚!e¸ÄQ¸=¸=¸£¸Ú·n•‹·n•‹·Ê|ô¶£¸Ú·¦?ö5D':7 + Ø6ˆu8F€8F€8F€8Òq%8Òq%8ŒnM8Š1û79l98êÜŽ8Š1û7Òq%8 xa8 xa8êÜŽ8Xß8¬,·8Xí˜86£8Xß8êÜŽ8]­8ˆ9FÁ8QaË8ˆ9t~Õ8QaË8Xß8Ü' 9Øþ8àó8áe9ˆ9Xß8t~Õ8Xß8Xß8QaË8t~Õ8t~Õ8Xí˜86£86£8FÁ8¬,·8FÁ8 xa8Ï„8Òq%8ŒnM8ŒnM8ŒnM8 xa8ŒnM8Òq%8ŒnM8F€8Š1û76£8Š1û7¦?ö5F€8êÜŽ8ŒnM8«b„7Òq%8Òq%8Òq%8Òq%8ˆu8Òq%8F€8[Ý«7 xa8 xa8Òq%89l98¹yÓ7¹yÓ7ŒnM8F€8«b„7Š1û7ŒnM8êÜŽ8F€8¹yÓ7Š1û7Š1û7F€8¹yÓ7¹yÓ7 + Ø6Òq%8F€8[Ý«7¦?ö5 + Ø6¦?ö5Òq%8[Ý«7Š1û7«b„7Òq%8Š1û7[Ý«7D':79l98ÌzH·«b„7¦?ö5Ê|ô¶Òq%8Òq%8«b„7 + Ø6Š3¶«b„7[Ý«7Š3¶D':7D':7 + Ø6n•‹·Š3¶«b„7[Ý«7n•‹·Š3¶Š3¶ + Ø6D':7ÌzH·|:¸+)¸=¸=¸+)¸ÄQ¸=¸°2y¸í#¸n•‹·n•‹·=¸Ê|ô¶=¸:³¸Äš¸hפ¸hפ¸vW׸^øÄš¸^ø+)¸:³¸vW׸^ø¬vḗë¸:͸^ø^øÄš¸§¹¸:³¸—ë¸Â¹ö쮸^ø¹'>¹§¹¸:͸¬vḬvá¸^ø^ø§¹¸Äš¸vW׸:͸:͸Äš¸^øÄš¸:³¸‚!e¸:³¸:³¸+)¸‚!e¸+)¸+)¸+)¸£¸Ú·[Ý«7¦?ö5 + Ø6Š3¶Ê|ô¶«b„7Òq%8Š1û7D':7 + Ø6D':7Š3¶F€8[Ý«7 + Ø6 xa8Š1û7D':7Š1û7 + Ø69l98ŒnM8 + Ø6¹yÓ7 xa8Òq%8[Ý«79l98 xa8F€8êÜŽ8 xa8Òq%8[Ý«7ŒnM8Ê|ô¶¹yÓ7Òq%8Òq%8[Ý«7D':7[Ý«7¹yÓ7Òq%8«b„7F€8Š1û7[Ý«7¹yÓ7«b„7 + Ø6Š3¶ + Ø6Ê|ô¶Ê|ô¶Š3¶Š3¶n•‹·£¸Ú·Ê|ô¶¦?ö5«b„7[Ý«7Ê|ô¶¦?ö5¹yÓ7¹yÓ7[Ý«7¹yÓ7ÌzH·¹yÓ7Ê|ô¶¦?ö5ÌzH·Š1û7«b„7Š1û7Òq%8¹yÓ7¦?ö5D':7[Ý«7F€8 + Ø6¹yÓ7F€8¹yÓ7Š3¶¦?ö5Š1û7[Ý«7¦?ö5D':7¦?ö5Š3¶Ê|ô¶¦?ö5|:¸Þ³· + Ø6Ê|ô¶¦?ö5D':7[Ý«7«b„7D':7£¸Ú·Ê|ô¶ÌzH·Š3¶ + Ø6Ê|ô¶Ê|ô¶«b„7D':7D':7«b„7n•‹·|:¸Ê|ô¶D':7Ê|ô¶Š3¶¦?ö5£¸Ú·£¸Ú·Š3¶D':7Š3¶£¸Ú·£¸Ú·Þ³·£¸Ú·D':7Ê|ô¶+)¸í#¸|:¸Þ³·ÄQ¸è¤†¸=¸‚!e¸í#¸|:¸£¸Ú·ÄQ¸ÄQ¸=¸‚!e¸=¸|:¸£¸Ú·Š3¶n•‹·Þ³·‚!e¸°2y¸í#¸£¸Ú·=¸|:¸=¸:³¸§¹¸í#¸‚!e¸=¸‚!e¸:³¸ÄQ¸|:¸Þ³·|:¸n•‹·Þ³·ÌzH·n•‹·Þ³·Š3¶ + Ø6¦?ö5¦?ö5¦?ö5Š1û7Ï„8Š1û7¦?ö5Š1û7 xa89l98Òq%89l98ˆu8ˆu89l98ŒnM8ˆu8ŒnM8Òq%8ŒnM8Òq%8¦?ö5Òq%8F€8Ï„8Òq%8Ï„8 xa89l98Š1û79l98 xa8ˆu8ŒnM8 xa8Š1û7ˆu8]­8FÁ8ˆu8Xí˜8F€8«b„7¦?ö5[Ý«7Š3¶ + Ø6|:¸í#¸=¸Þ³·ÄQ¸í#¸ÄQ¸:³¸í#¸í#¸ö쮸ö쮸§¹¸ºõ¸—ë¸Â¹Œ—(¹§i¹§i¹´Ç2¹Z¯-¹—à7¹Z)¹7 +¹O€#¹§i¹§i¹§i¹—ë¸Â¹Â¹^ø—븺õ¸—ë¸^ø—ë¸Â¹^ø:³¸ÄQ¸Äš¸hפ¸ö쮸°2y¸°2y¸í#¸n•‹·¦?ö5Ê|ô¶ + Ø6ŒnM8Š1û7Š1û7«b„7 + Ø6Š1û7F€8F€89l98êÜŽ8FÁ8ì½é8Xí˜8¬,·8ì½é8àó8QaË8àó8Ü' 9ˆ9ì½é8ˆ9à;9Øþ8Øþ8Xß8QaË8FÁ8¬,·8Ï„8ˆu8êÜŽ8]­8ŒnM86£8ŒnM8D':7¹yÓ7«b„7Š3¶ + Ø6ÌzH·¦?ö5[Ý«7¦?ö5n•‹·ÌzH·Ê|ô¶£¸Ú·ÄQ¸ÌzH·Þ³·í#¸Þ³·Š3¶¦?ö5n•‹·£¸Ú·|:¸ÌzH·Ê|ô¶°2y¸n•‹·£¸Ú·n•‹·í#¸n•‹·Š3¶|:¸n•‹·¦?ö5£¸Ú·ÌzH·¦?ö5¹yÓ7¹yÓ7¹yÓ7 + Ø6[Ý«7[Ý«7ŒnM89l98 + Ø6Š1û7[Ý«7«b„7 xa8 xa8ŒnM8Xí˜8 xa86£8FÁ8¬,·8]­8t~Õ8Øþ86£8Xß8Øþ8ˆ9Øþ8ì½é8áe9wÙ197Á,9áe9Ô{97Á,9áe9ì½é8Ü' 97Á,9à;9áe9Ô{9a’"9wÙ19áe97Á,9Aò69a’"9„©'9b%A97Á,97Á,9Ô{9áe9áe9Xß8à;9Ü' 9àó8Øþ8t~Õ8ì½é8Xß8]­8Øþ8]­8êÜŽ8¬,·8]­8êÜŽ8êÜŽ86£8FÁ8F€8¹yÓ7Š1û7[Ý«7¦?ö5ÌzH·D':7Ê|ô¶¦?ö5ÌzH·Þ³·¦?ö5Š3¶D':7¦?ö5Þ³·Ê|ô¶Þ³·|:¸£¸Ú·n•‹·|:¸Š3¶«b„7D':7D':7Ê|ô¶n•‹·Š3¶Þ³·Ê|ô¶Ê|ô¶£¸Ú·£¸Ú·£¸Ú·Äš¸Þ³·Þ³·¦?ö5|:¸F€8F€8F€8 xa8êÜŽ8¬,·8Xß8QaË8t~Õ8Xß8Xß8t~Õ8t~Õ8ì½é8¬,·8]­8FÁ8]­8ì½é8ˆ9QaË8QaË8Xß8êÜŽ8êÜŽ8QaË8]­86£8¬,·8]­8Ï„8ˆu8 xa89l98Òq%8F€8[Ý«7Xí˜8«b„7ÌzH·D':7 + Ø6 + Ø6Þ³·í#¸|:¸¦?ö5í#¸+)¸n•‹·¦?ö5Š3¶Š3¶Þ³·Þ³·n•‹·ÄQ¸|:¸í#¸|:¸+)¸|:¸n•‹·Ê|ô¶Ê|ô¶Š3¶Š3¶ÌzH·Ê|ô¶Š3¶ + Ø6Þ³·£¸Ú·í#¸=¸í#¸+)¸|:¸n•‹·Þ³·í#¸Þ³·D':7«b„7D':7«b„7F€8ŒnM89l98[Ý«7F€8¦?ö5«b„7F€8ŒnM89l98¹yÓ7¦?ö5Š1û7Òq%8ˆu8 xa8 xa8]­8t~Õ8t~Õ8QaË8¬,·8QaË8t~Õ8Øþ86£8FÁ8ì½é8QaË8ˆ9ì½é8ì½é8QaË8]­8 xa8Ï„8Xí˜8t~Õ8Xß86£8êÜŽ8 xa8êÜŽ8[Ý«7ŒnM8F€8¦?ö5¦?ö5Š3¶n•‹·í#¸|:¸+)¸=¸n•‹·Þ³·=¸ÄQ¸:³¸§¹¸:͸Äš¸hפ¸¬vḬvḧ¹¸ö쮸§¹¸:͸vW׸ö쮸^ø:͸^øhפ¸vW׸ö쮸§¹¸:³¸:³¸—븗ë¸hפ¸^ø¬vá¸Þÿ¸—ë¸ö쮸vW׸ö쮸Þÿ¸—븧¹¸:͸hפ¸Äš¸ÄQ¸^ø:³¸+)¸£¸Ú·D':7D':7¹yÓ79l98¹yÓ7¹yÓ7F€8Òq%8ˆu89l98Š1û7Š3¶ŒnM8Òq%8 xa8Òq%8êÜŽ8Š1û7ŒnM8D':7«b„79l98Ï„8ŒnM8Š1û7F€8ˆu8êÜŽ8Ï„8ŒnM8ˆu8Òq%8D':7¹yÓ7D':7D':7D':7¦?ö5¦?ö5Š3¶«b„7«b„7 + Ø69l98n•‹·¦?ö5¦?ö5«b„7n•‹·Š3¶n•‹·‚!e¸+)¸£¸Ú·+)¸‚!e¸hפ¸‚!e¸:³¸§¹¸§¹¸vW׸ºõ¸:͸¬vá¸:͸¬vḺõ¸Þÿ¸¬vḧ¹¸Þÿ¸¬vḧ¹¸hפ¸^øÄš¸:³¸°2y¸^øhפ¸ö쮸¬vá¸hפ¸vW׸—ë¸^ø¬vḰ2y¸ÄQ¸ÄQ¸í#¸ÄQ¸:³¸ÄQ¸:³¸‚!e¸°2y¸Þ³·hפ¸+)¸‚!e¸í#¸ÄQ¸Þ³·D':7 + Ø6¹yÓ7¹yÓ7Š1û7Š1û7 xa8ŒnM8êÜŽ8êÜŽ8àó8QaË8QaË86£8¬,·8FÁ8¬,·8ì½é8]­8êÜŽ8QaË8¬,·8Xß8¬,·8 xa8 xa8ŒnM8¹yÓ7[Ý«7«b„7[Ý«7F€8Ê|ô¶ + Ø6«b„7Ê|ô¶Þ³·Þ³·n•‹·í#¸:³¸+)¸ÄQ¸Äš¸Äš¸ÄQ¸°2y¸=¸:³¸hפ¸vW׸Äš¸:͸—ë¸:³¸ö쮸^ø‚!e¸:³¸ÄQ¸ö쮸hפ¸è¤†¸^ø:³¸Äš¸Äš¸§¹¸=¸+)¸í#¸ÌzH·|:¸|:¸n•‹·£¸Ú·|:¸í#¸£¸Ú·«b„7n•‹·D':7Ê|ô¶Š1û7«b„7D':7Òq%8[Ý«7«b„7ŒnM8F€8D':7¹yÓ7[Ý«7F€8 xa8ŒnM89l98êÜŽ8êÜŽ8ŒnM8¬,·8Ï„8êÜŽ8QaË8êÜŽ8FÁ8FÁ8]­8t~Õ8FÁ8]­8àó8Xß8¬,·8¬,·8Xß8t~Õ8FÁ8Xí˜8êÜŽ86£8¬,·8êÜŽ8êÜŽ8ˆu8ŒnM8¹yÓ7êÜŽ8 xa8[Ý«7F€8Š1û7D':7«b„7D':7¹yÓ7¦?ö5D':7[Ý«7ŒnM8ŒnM8 xa8ˆu8êÜŽ8Š1û7Š1û7F€8F€8F€8 + Ø6¦?ö5 + Ø6Š1û7Š3¶ + Ø6Ê|ô¶í#¸£¸Ú·|:¸=¸n•‹·|:¸ÄQ¸n•‹·¦?ö5D':7D':7F€89l989l98[Ý«7Š3¶¦?ö5¦?ö5[Ý«7Òq%8F€8Òq%89l98ŒnM8Òq%8êÜŽ8êÜŽ8 xa8Xí˜8¬,·8FÁ8¬,·8FÁ86£8êÜŽ8êÜŽ8¬,·8Xí˜8QaË8]­8Xí˜8êÜŽ8êÜŽ8ŒnM8êÜŽ8Xí˜8êÜŽ8Xí˜8Ï„8êÜŽ8 xa8êÜŽ8«b„7«b„79l98Ï„8 xa8[Ý«7Š1û7¹yÓ7[Ý«7Š1û7Òq%8Òq%8«b„7[Ý«7¹yÓ7D':7¦?ö5Š3¶D':7[Ý«7[Ý«7¦?ö5 + Ø6[Ý«7Ê|ô¶Ê|ô¶Ê|ô¶Þ³·í#¸=¸‚!e¸‚!e¸í#¸:³¸=¸n•‹·+)¸ÄQ¸|:¸‚!e¸hפ¸‚!e¸í#¸°2y¸Þ³·Þ³·ÄQ¸Þ³·n•‹·ÄQ¸=¸+)¸‚!e¸£¸Ú·Þ³·|:¸£¸Ú·£¸Ú·£¸Ú·Ê|ô¶Þ³·Š3¶ + Ø6Òq%8¦?ö5[Ý«7 xa8¹yÓ7«b„7Š1û7ŒnM8Xí˜8Š1û7 xa86£8êÜŽ8Xß8êÜŽ8Òq%8êÜŽ8 xa86£8]­86£86£8]­86£8F€8 xa8¬,·8ŒnM8ˆu8Š1û7 + Ø6ˆu8 + Ø6Š1û7¦?ö5[Ý«7Ê|ô¶Š3¶[Ý«7|:¸ÄQ¸n•‹·|:¸«b„7£¸Ú·Þ³·[Ý«7¦?ö5¦?ö5 + Ø6ÌzH·n•‹·Ê|ô¶£¸Ú·Þ³·Ê|ô¶£¸Ú·Š3¶|:¸í#¸hפ¸Äš¸ö쮸°2y¸°2y¸Äš¸Äš¸§¹¸^ø§¹¸ö쮸ÄQ¸hפ¸Äš¸—븧¹¸7 +¹7 +¹Þÿ¸ºõ¸7 +¹Â¹ºõ¸Â¹7 +¹Z)¹Â¹'>¹Â¹Þÿ¸—ë¸ö쮸^øvW׸‚!e¸Þ³·|:¸|:¸í#¸|:¸|:¸ÄQ¸í#¸£¸Ú·ÌzH·n•‹·[Ý«7Š3¶«b„7Š3¶Š1û7ˆu8êÜŽ8 xa8Òq%8«b„7ŒnM8¹yÓ7êÜŽ89l98ŒnM8êÜŽ8ŒnM8Òq%8Òq%89l98ŒnM8Òq%8 xa8«b„7¹yÓ7[Ý«7D':7«b„7Š3¶ + Ø6Š3¶Š3¶Þ³·|:¸=¸:³¸:³¸hפ¸°2y¸+)¸:³¸Äš¸hפ¸:³¸:³¸¬vḬvḗë¸vW׸Þÿ¸—ë¸Â¹7 +¹Â¹ºõ¸¬vḺõ¸:͸¹ºõ¸7 +¹ºõ¸Þÿ¸'>¹vW׸ö쮸ÄQ¸°2y¸hפ¸í#¸+)¸í#¸Ê|ô¶Þ³·Þ³·Þ³·|:¸Ê|ô¶«b„7F€8ŒnM8F€8Š1û7Š1û7¹yÓ7Òq%8Òq%8Òq%8ˆu89l98Xí˜8ˆu8¬,·8Ï„8ˆu8¬,·8FÁ8QaË8]­8FÁ8QaË8Øþ8àó8t~Õ8¬,·8êÜŽ8Xí˜8ŒnM8 xa8êÜŽ89l98Xí˜8êÜŽ89l98Š1û7F€8Òq%8ŒnM89l98F€8[Ý«7¦?ö5¦?ö5D':7[Ý«7[Ý«7¦?ö5Ê|ô¶|:¸Þ³·|:¸í#¸£¸Ú·Ê|ô¶Þ³·|:¸í#¸£¸Ú·=¸‚!e¸ÄQ¸Äš¸£¸Ú·í#¸í#¸Þ³·£¸Ú·|:¸£¸Ú·ÄQ¸=¸í#¸|:¸+)¸|:¸ÌzH·n•‹·í#¸Š3¶£¸Ú·Š3¶ÌzH·£¸Ú·¦?ö5n•‹·n•‹·Š3¶Ê|ô¶D':7 + Ø6n•‹·¹yÓ7F€8Š1û79l98ŒnM8ˆu8ˆu8 xa8FÁ8FÁ8FÁ8QaË8àó8àó8ì½é8áe9Øþ8Xß8ŽP9Ü' 9Ô{9Ô{9Ô{9ŽP9Ô{9ŽP9a’"9à;9áe9àó8ì½é8à;9QaË8àó86£86£8Xí˜8¬,·86£89l98êÜŽ8¹yÓ7ŒnM8¹yÓ7ŒnM8F€8Š3¶D':7¹yÓ7Š3¶Òq%89l98Š1û7 + Ø6¦?ö5Š1û7 + Ø6F€8F€8Š3¶¦?ö5D':7 + Ø6Ê|ô¶Þ³·n•‹·¦?ö5Þ³·í#¸|:¸í#¸|:¸£¸Ú·=¸:³¸‚!e¸Äš¸hפ¸:³¸+)¸£¸Ú·+)¸|:¸n•‹·n•‹·Þ³·|:¸+)¸£¸Ú·ÌzH·ÌzH·Ê|ô¶Š3¶n•‹·[Ý«7[Ý«7Š3¶Š3¶ + Ø69l98Š1û7 xa8Xí˜8Xí˜86£8ì½é86£8]­8 xa8Xí˜8Xß8ì½é8t~Õ8Xß8FÁ8Xß8Xí˜8Xí˜8àó86£89l98 xa8FÁ8 xa8ŒnM8 xa8[Ý«7 xa8ˆu89l98Òq%8D':7D':7¹yÓ7Òq%8Š1û7¦?ö5¹yÓ7F€8¹yÓ7Òq%8Òq%8 + Ø6Š1û7«b„7[Ý«7D':7ŒnM8ŒnM8 xa8ŒnM8Òq%8«b„7Š1û7¦?ö5Ê|ô¶ + Ø6n•‹·=¸|:¸Ê|ô¶=¸‚!e¸ÄQ¸hפ¸§¹¸:³¸í#¸ö쮸hפ¸:³¸Äš¸:³¸ÄQ¸ÄQ¸‚!e¸+)¸°2y¸+)¸ÄQ¸^ø:³¸è¤†¸:³¸=¸=¸ÄQ¸+)¸:³¸+)¸+)¸ÌzH·Ê|ô¶n•‹·Ê|ô¶ÌzH·Ê|ô¶ÌzH·+)¸+)¸+)¸‚!e¸=¸n•‹·ÄQ¸Þ³·|:¸£¸Ú·n•‹·|:¸ÌzH·£¸Ú·n•‹·Ê|ô¶ÄQ¸ÌzH·Š3¶n•‹·Ê|ô¶Ê|ô¶=¸í#¸£¸Ú·ÄQ¸£¸Ú·£¸Ú·£¸Ú·+)¸ÌzH·Ê|ô¶Þ³·°2y¸è¤†¸°2y¸hפ¸¬vá¸vW׸—ë¸Þÿ¸'>¹vW׸¹¬vá¸Þÿ¸O€#¹˜S¹¬vá¸:͸¹¹´Ç2¹ºõ¸¬vḬvḧ¹¸vW׸¬vḧ¹¸ºõ¸¬vḺõ¸—ë¸Äš¸Äš¸Äš¸í#¸:³¸Äš¸hפ¸‚!e¸:³¸^øÄš¸ö쮸:³¸hפ¸ÄQ¸hפ¸°2y¸§¹¸è¤†¸|:¸:³¸°2y¸:³¸+)¸°2y¸‚!e¸=¸ÄQ¸£¸Ú·£¸Ú·£¸Ú·|:¸=¸|:¸¦?ö5Š3¶D':7Š1û7«b„7«b„7¦?ö5D':7 + Ø6F€8Òq%8Òq%8Š1û7F€8F€8ˆu89l989l98Š1û7 + Ø6[Ý«7¹yÓ7«b„7¦?ö5 + Ø6Š3¶£¸Ú·+)¸|:¸|:¸£¸Ú·í#¸ÄQ¸=¸=¸ÄQ¸£¸Ú·ÄQ¸ÄQ¸§¹¸hפ¸:³¸£¸Ú·=¸‚!e¸°2y¸:³¸^øºõ¸—븺õ¸vW׸7 +¹'>¹7 +¹¬vá¸'>¹O€#¹7 +¹§i¹'>¹'>¹O€#¹Œ—(¹'>¹Þÿ¸'>¹˜S¹¬vḬvá¸Äš¸Äš¸Äš¸+)¸í#¸Ê|ô¶Ê|ô¶Ê|ô¶Š1û7Š3¶¦?ö5Ê|ô¶ÌzH·Š3¶ÌzH·D':7 + Ø6D':7Š1û7Òq%8 xa8Òq%89l98êÜŽ8ˆu8ˆu8Øþ8¬,·8]­8Ï„8¬,·8ì½é8Xí˜8¬,·8]­8ˆu8 xa89l98Š1û7ˆu8ˆu8Š1û7F€8Òq%8 xa89l98 xa8Òq%8«b„7«b„7«b„7Òq%8Òq%8Š1û7Òq%8[Ý«7¹yÓ7D':7D':7ÌzH·D':7£¸Ú·|:¸í#¸Þ³·|:¸ÄQ¸|:¸‚!e¸+)¸:³¸ÄQ¸|:¸í#¸Ê|ô¶¦?ö5|:¸Þ³·«b„7 + Ø6£¸Ú·n•‹·¦?ö5ÌzH·¦?ö5Š3¶ + Ø6n•‹·¦?ö5[Ý«7Š3¶Ê|ô¶«b„7 xa8«b„7ŒnM8Òq%8Š1û7Š1û76£8 xa8¬,·8]­86£8Xß8QaË8Xí˜8Ï„8t~Õ8àó8Ü' 9¬,·8QaË8êÜŽ8Xß8àó8àó8Xß8Xß8FÁ8FÁ8ì½é8ì½é8]­8¬,·8Øþ8ì½é8ˆ9QaË8¬,·8ˆ9ŽP9áe97Á,9à;9Ü' 9Øþ8àó8a’"9àó8t~Õ8ˆ9Xß8t~Õ8Xí˜8FÁ8ˆu8Ï„8ŒnM8Òq%8Òq%8[Ý«7F€8D':7Š3¶D':7n•‹·ÌzH·£¸Ú·‚!e¸°2y¸‚!e¸í#¸Äš¸è¤†¸+)¸ÄQ¸+)¸=¸è¤†¸:³¸‚!e¸Äš¸ÄQ¸°2y¸+)¸í#¸£¸Ú·+)¸n•‹·Š3¶ + Ø6ÌzH·Þ³·¦?ö5 + Ø6D':7«b„7Š3¶¦?ö5n•‹·Þ³·F€8Š1û7Òq%8ŒnM8 xa8 xa8êÜŽ8Xí˜8Ï„8Ï„8êÜŽ8]­8Ü' 9áe9Ü' 9ˆ9a’"9a’"9áe9ì½é8QaË8àó8àó8FÁ8Xß8Xí˜8QaË8t~Õ8Øþ8àó8àó8àó8Øþ8t~Õ8]­8FÁ8êÜŽ86£8Xß8FÁ8QaË8FÁ8¬,·8êÜŽ8¹yÓ7F€89l98¦?ö5Š3¶¦?ö5Š1û7Þ³·|:¸ + Ø6Š3¶ÌzH·£¸Ú·í#¸=¸|:¸ÄQ¸|:¸£¸Ú·=¸|:¸n•‹·n•‹·ÌzH·£¸Ú·+)¸n•‹·+)¸Þ³·ÌzH·¦?ö5Ê|ô¶£¸Ú·n•‹·Þ³·|:¸+)¸£¸Ú·=¸£¸Ú·ÄQ¸^ø§¹¸§¹¸hפ¸‚!e¸Äš¸:³¸ÄQ¸Äš¸:³¸£¸Ú·Š3¶|:¸Ê|ô¶ + Ø6|:¸Ê|ô¶D':7Ê|ô¶D':7 + Ø6[Ý«7Š1û7Š1û7Š1û7 + Ø69l98[Ý«7F€8 xa8¹yÓ7Š1û7¹yÓ7¹yÓ7[Ý«7D':7¹yÓ7Š1û7¦?ö59l98¹yÓ7[Ý«7F€8F€8Òq%8Š1û7Ï„8Òq%8Òq%8Š1û7Òq%89l98êÜŽ8¹yÓ7F€8 xa8[Ý«7D':7 + Ø6¹yÓ7[Ý«7«b„7D':7ÌzH·¦?ö5+)¸|:¸|:¸í#¸Þ³·+)¸+)¸‚!e¸í#¸+)¸:³¸‚!e¸‚!e¸ö쮸:³¸‚!e¸:³¸hפ¸^ø:³¸^ø:³¸Äš¸:³¸hפ¸§¹¸^ø:³¸hפ¸:³¸=¸:³¸‚!e¸Þ³·£¸Ú·=¸|:¸n•‹·ÄQ¸+)¸£¸Ú·=¸=¸£¸Ú·|:¸£¸Ú·£¸Ú·|:¸|:¸Þ³·Þ³·n•‹·n•‹·Ê|ô¶Š3¶Òq%8êÜŽ8ŒnM8Ï„86£8Xí˜8Xí˜8Xí˜8Xß8FÁ8Xí˜8¬,·8Xí˜8êÜŽ8QaË8t~Õ8Ü' 9àó8ì½é8Xß8FÁ8FÁ8]­8êÜŽ8Ï„8F€8ˆu8Òq%8ŒnM8ŒnM8Š1û7 + Ø6«b„7 + Ø6F€8¹yÓ79l98¹yÓ7Òq%8[Ý«7[Ý«7¹yÓ7 + Ø6«b„7[Ý«7ÌzH·Ê|ô¶Ê|ô¶|:¸Ê|ô¶£¸Ú·:³¸‚!e¸:³¸í#¸í#¸£¸Ú·Þ³·ÄQ¸‚!e¸Þ³·Þ³·|:¸í#¸|:¸+)¸¦?ö5í#¸+)¸|:¸í#¸°2y¸‚!e¸|:¸:³¸hפ¸+)¸=¸=¸=¸=¸=¸ÄQ¸£¸Ú·ÄQ¸£¸Ú·+)¸ÄQ¸¦?ö5D':7«b„7Òq%8 xa8¹yÓ7¹yÓ7D':79l98Òq%8Òq%8 xa8]­8êÜŽ8ì½é8¬,·8ŒnM8[Ý«7Ï„8êÜŽ8¬,·8Ï„8ˆu89l989l98 xa8ŒnM8ŒnM8 xa86£8F€8F€8êÜŽ8QaË8Xí˜8 xa8ˆu8ˆu8]­8ˆu8êÜŽ8 xa8ˆu8Ï„8ˆu8ŒnM8Š1û7Š1û7¹yÓ7«b„7D':7«b„7«b„7D':7[Ý«7F€8¹yÓ7¹yÓ7Š3¶ÌzH·Ê|ô¶|:¸Þ³·+)¸£¸Ú·n•‹·|:¸Þ³·Ê|ô¶ÌzH·Þ³·¦?ö5£¸Ú·|:¸Þ³·£¸Ú·n•‹·|:¸|:¸|:¸+)¸£¸Ú·+)¸|:¸‚!e¸:³¸°2y¸=¸:³¸Þ³·Ê|ô¶Ê|ô¶¦?ö5Š3¶D':7«b„7ˆu86£8ŒnM8êÜŽ8¬,·8]­8]­8êÜŽ8]­8QaË8QaË8FÁ8 xa8¬,·8Xí˜8Xí˜8¬,·8¬,·8ˆu8]­8Òq%8Xí˜8Ï„8]­8FÁ8ŒnM8Ï„8Xí˜8Ï„8Xí˜8Xí˜8]­8 xa8ˆu8êÜŽ8¬,·8ŒnM89l98Ï„8Òq%8ŒnM8ˆu8Š1û7[Ý«7¦?ö59l98«b„7[Ý«7[Ý«7[Ý«7Ê|ô¶Þ³·£¸Ú·n•‹·n•‹·£¸Ú·n•‹·£¸Ú·+)¸|:¸n•‹·=¸|:¸=¸:³¸°2y¸hפ¸^øí#¸ÄQ¸í#¸+)¸=¸+)¸+)¸+)¸+)¸Ê|ô¶[Ý«7 + Ø6¦?ö5|:¸n•‹·Ê|ô¶ + Ø6ÌzH·Š3¶¹yÓ7ŒnM8D':7ŒnM8¹yÓ79l98Òq%8Òq%8ˆu8Xí˜8êÜŽ8t~Õ8FÁ8]­8ˆu8êÜŽ8êÜŽ8ŒnM8ˆu8Òq%8Ï„8Xí˜8ˆu8¹yÓ7F€8ŒnM8Š1û7ÌzH·[Ý«7«b„7Š3¶ÌzH· + Ø6Š3¶Òq%8D':7«b„7Ê|ô¶¦?ö5Þ³·Š3¶|:¸í#¸ÄQ¸hפ¸hפ¸ö쮸:³¸ö쮸Äš¸:͸:͸ö쮸vW׸^ø^ø7 +¹vW׸7 +¹ºõ¸¬vá¸Þÿ¸Þÿ¸7 +¹—ë¸Þÿ¸Þÿ¸¬vá¸Z)¹ºõ¸Þÿ¸—ë¸^ø:͸¬vḧ¹¸hפ¸^øhפ¸§¹¸ö쮸í#¸:³¸:³¸=¸=¸:³¸ö쮸—븬vá¸ÄQ¸°2y¸ö쮸褆¸°2y¸|:¸+)¸=¸£¸Ú·n•‹·ÌzH·£¸Ú·n•‹·Þ³·í#¸í#¸£¸Ú·í#¸ + Ø6Þ³·¦?ö5Ê|ô¶«b„7Š1û7¦?ö5[Ý«7¹yÓ7¹yÓ7Ï„8 xa8Ï„8Ï„8F€8ˆu8Xí˜8]­8ŒnM8F€86£8Ï„8Xí˜86£8 xa8ŒnM8 xa8Ï„8ŒnM8 xa8Š1û7[Ý«7D':7Š3¶n•‹·£¸Ú·ÌzH·=¸=¸|:¸|:¸í#¸:³¸‚!e¸è¤†¸í#¸|:¸£¸Ú·+)¸|:¸|:¸ÄQ¸+)¸§¹¸Äš¸hפ¸§¹¸Äš¸ÄQ¸í#¸‚!e¸:³¸hפ¸°2y¸°2y¸‚!e¸è¤†¸:³¸ö쮸‚!e¸Þ³·+)¸°2y¸°2y¸Äš¸‚!e¸=¸ö쮸ÄQ¸Äš¸è¤†¸í#¸hפ¸|:¸Äš¸ö쮸^øvW׸褆¸£¸Ú·‚!e¸Ê|ô¶í#¸|Pd|1|24600|2013-282T15:32:19.397 ;J!¸;J!¸¬Z ¸žCI¸Þêò·Þêò·;J!¸^8Ë·_x·;J!¸žCI¸Þêò·Þêò·h¢£·^8Ë·hZq¸h¢£·‘&oµh¢£·^8Ë·^7s6‘&oµ¿^8{T»7^8Ë·/üâ7¿^8‘&oµ/üâ7{T»7¿^8fNi8x?-8GBU8tË’8¤±8½rÙ8Ý`}8tË’8¡ð¦8¤±8=A8x?-8•¼ˆ8¡ð¦8ƒ³í8á8Å8•¼ˆ8ÚÜœ8fNi8x?-8VJ8x?-8ÔX7‘&oµb±·¶ÔX7}×)·h¢£·}×)·Þêò·^8Ë·^8Ë·h¢£·æÄŒ¸àB5¸^8Ë·æÄŒ¸¢·‚¸®K]¸;J!¸}×)·¬Z ¸ÎÔ–¸žCI¸¢·‚¸àB5¸®K]¸®K]¸ÎÔ–¸;J!¸Üûª¸hZq¸Üûª¸ÎÔ–¸hZq¸,ç ¸«+¿¸»µ¸RcÓ¸Üûª¸hZq¸Üûª¸ÎÔ–¸æÄŒ¸àB5¸®K]¸Þêò·‘&oµh¢£·}×)·b±·¶ÔX7Ž{ +7x?-8Ž{ +7}×)·x?-8_x·‘&oµŽ{ +7_x·Þêò·¬Z ¸àB5¸Þêò·Þêò·Ž{ +7h¢£·Þêò·^7s6VJ8/üâ7_x·‘&oµ¶Ë“7/üâ7{T»7ÔX7¿^8tË’8•¼ˆ8ÚÜœ8GBU8¿^8Ý`}8VJ8GBU8fNi8GBU8x?-8•¼ˆ8tË’8•¼ˆ8fNi8VJ8VJ8/üâ7¿^8/üâ7/üâ7{T»7ÔX7^7s6}×)·}×)·b±·¶h¢£·b±·¶_x·‘&oµ‘&oµÔX7Ž{ +7_x·}×)·‘&oµÔX7Ž{ +7Þêò·_x·_x·‘&oµb±·¶_x·;J!¸‘&oµ^7s6^7s6^7s6b±·¶^7s6‘&oµb±·¶b±·¶^8Ë·}×)·Ž{ +7_x·àB5¸;J!¸¬Z ¸;J!¸ÎÔ–¸àB5¸¢·‚¸_x·h¢£·b±·¶}×)·‘&oµÔX7‘&oµ{T»7/üâ7=A8x?-8=A8/üâ7/üâ7x?-8VJ8GBU8/üâ7/üâ7GBU8VJ8Ž{ +7{T»7ÔX7Ž{ +7Ž{ +7¶Ë“7/üâ7/üâ7{T»7=A8ÚÜœ8•¼ˆ8=A8¡ð¦8û8ÚÜœ8¡ð¦8¤±8•¼ˆ8fNi8GBU8tË’8¡ð¦8Ý`}8GBU8ÔX7VJ8=A8/üâ7‘&oµ¶Ë“7VJ8¶Ë“7VJ8GBU8VJ8¶Ë“7¶Ë“7¿^8¿^8^7s6Ž{ +7‘&oµ/üâ7‘&oµŽ{ +7^7s6{T»7_x·_x·b±·¶¶Ë“7ÔX7ÔX7_x·h¢£·{T»7Ž{ +7x?-8¿^8{T»7/üâ7¿^8VJ8{T»7¿^8VJ8¿^8GBU8{T»7Ž{ +7{T»7/üâ7Ý`}8ÚÜœ8¡ð¦8tË’8•¼ˆ8tË’8•¼ˆ8ÚÜœ8fNi8ÚÜœ8fNi8¤±8û8èTÏ8½rÙ8½rÙ8½rÙ8¤±8½rÙ8û8ÚÜœ8èTÏ8ƒ³í8K’ã8Ï# 9—b9QÖ÷8—b9Rý9¡ð¦8èTÏ8QÖ÷8tË’8¤±8á8Å8¡ð¦8tË’8=A8ÚÜœ8fNi8x?-8VJ8=A8¿^8¿^8{T»7VJ8=A8/üâ7VJ8=A8/üâ7{T»7/üâ7Ž{ +7{T»7VJ8}×)·_x·¬Z ¸žCI¸àB5¸ÎÔ–¸žCI¸ÎÔ–¸žCI¸,ç ¸ÎÔ–¸ÎÔ–¸ÎÔ–¸»µ¸RcÓ¸®K]¸¢·‚¸ÎÔ–¸ÎÔ–¸ÎÔ–¸®K]¸žCI¸h¢£·b±·¶^8Ë·b±·¶h¢£·^8Ë·_x·h¢£·¬Z ¸¬Z ¸^8Ë·h¢£·_x·h¢£·,ç ¸®K]¸®K]¸ÎÔ–¸;J!¸¬Z ¸Þêò·Þêò·Þêò·h¢£·h¢£·Ž{ +7^8Ë·h¢£·‘&oµÔX7}×)·}×)·b±·¶}×)·b±·¶b±·¶_x·b±·¶b±·¶^7s6Ž{ +7{T»7VJ8¶Ë“7¿^8x?-8Ý`}8=A8ÚÜœ8GBU8x?-8VJ8fNi8/üâ7ÔX7VJ8/üâ7¿^8‘&oµb±·¶‘&oµ^7s6_x·h¢£·h¢£·_x·h¢£·¬Z ¸¬Z ¸žCI¸¢·‚¸ÎÔ–¸,ç ¸,ç ¸,ç ¸æÄŒ¸ÎÔ–¸ÎÔ–¸RcÓ¸½A¹òÃñ¸òÃñ¸]çû¸¢ç¸]çû¸½A¹R¹ÜݸÜݸÜûª¸ÜݸRcÓ¸Üûª¸»µ¸hZq¸Üûª¸«+¿¸ÎÔ–¸ÎÔ–¸ÎÔ–¸ÎÔ–¸Üûª¸¬Z ¸¬Z ¸;J!¸¢·‚¸®K]¸¬Z ¸àB5¸^8Ë·¬Z ¸hZq¸Þêò·àB5¸;J!¸Ž{ +7b±·¶ÔX7ÔX7{T»7¶Ë“7/üâ7/üâ7ÔX7tË’8¡ð¦8•¼ˆ8ÚÜœ8¤±8¤±8èTÏ8¤±8èTÏ8½rÙ8Ï# 9Rý9Rý9ƒ³í8898989èTÏ8K’ã8K’ã8½rÙ8¤±8á8Å8á8Å8ƒ³í8=A8tË’8¡ð¦8Ý`}8•¼ˆ8Ý`}8¤±8fNi8ÚÜœ8¤±8=A8=A8GBU8ÔX7ÔX7VJ8x?-8=A8b±·¶_x·¬Z ¸;J!¸®K]¸,ç ¸ÎÔ–¸æÄŒ¸žCI¸¢·‚¸«+¿¸Üûª¸ÎÔ–¸ÜݸÜݸ,ç ¸Üݸ¢ç¸Üݸ«+¿¸Fɸ¢ç¸RcÓ¸«+¿¸æÄŒ¸ÎÔ–¸«+¿¸žCI¸žCI¸¬Z ¸®K]¸žCI¸žCI¸^8Ë·hZq¸¬Z ¸¬Z ¸àB5¸žCI¸Þêò·Þêò·h¢£·{T»7h¢£·^8Ë·¶Ë“7h¢£·‘&oµ^8Ë·h¢£·b±·¶¬Z ¸_x·àB5¸h¢£·ÔX7b±·¶Ž{ +7_x·h¢£·}×)·_x·b±·¶h¢£·_x·^7s6‘&oµ{T»7x?-8x?-8/üâ7x?-8/üâ7Ž{ +7/üâ7/üâ7VJ8¿^8{T»7Ž{ +7‘&oµ{T»7¶Ë“7b±·¶}×)·¬Z ¸Þêò·¬Z ¸Þêò·;J!¸¬Z ¸¬Z ¸žCI¸ÎÔ–¸ÎÔ–¸hZq¸žCI¸Üûª¸,ç ¸¢·‚¸Üûª¸àB5¸¢·‚¸Üûª¸ÎÔ–¸¢·‚¸®K]¸ÎÔ–¸hZq¸¬Z ¸àB5¸;J!¸àB5¸;J!¸ÎÔ–¸ÎÔ–¸®K]¸ÎÔ–¸ÎÔ–¸¬Z ¸}×)·^8Ë·Ž{ +7¶Ë“7ÔX7}×)·{T»7‘&oµ¶Ë“7¿^8x?-8¿^8‘&oµŽ{ +7¿^8{T»7^7s6VJ8x?-8Ý`}8•¼ˆ8fNi8fNi8ÚÜœ8á8Å8ÚÜœ8û8èTÏ8½rÙ8á8Å8¤±8Ý`}8tË’8¤±8GBU8fNi8ÚÜœ8x?-8•¼ˆ8fNi8VJ8{T»7x?-8ÚÜœ8tË’8ÚÜœ8á8Å8tË’8•¼ˆ8•¼ˆ8¤±8VJ8•¼ˆ8fNi8fNi8=A8Ý`}8fNi8VJ8x?-8Ž{ +7‘&oµ‘&oµ^8Ë·_x·hZq¸®K]¸;J!¸žCI¸hZq¸žCI¸ÎÔ–¸;J!¸¬Z ¸hZq¸àB5¸,ç ¸RcÓ¸»µ¸®K]¸¬Z ¸,ç ¸^8Ë·àB5¸hZq¸Üûª¸Üûª¸¬Z ¸,ç ¸RcÓ¸RcÓ¸Üûª¸àB5¸ÎÔ–¸®K]¸;J!¸žCI¸àB5¸ÎÔ–¸RcÓ¸æÄŒ¸ÎÔ–¸ÎÔ–¸¬Z ¸;J!¸_x·¬Z ¸¬Z ¸_x·h¢£·‘&oµ‘&oµÔX7{T»7VJ8^7s6¿^8Ý`}8fNi8Ž{ +7¿^8GBU8=A8x?-8ÚÜœ8tË’8/üâ7GBU8•¼ˆ8Ý`}8=A8¡ð¦8Ý`}8ÚÜœ8¤±8á8Å8û8û8¤±8K’ã8fNi8Ý`}8tË’8GBU8Ý`}8=A8fNi8•¼ˆ8VJ8GBU8tË’8=A8x?-8•¼ˆ8GBU8{T»7/üâ7/üâ7ÔX7^7s6‘&oµ/üâ7_x·b±·¶Ž{ +7^8Ë·Ž{ +7Þêò·Þêò·^8Ë·;J!¸¬Z ¸¬Z ¸;J!¸®K]¸,ç ¸ÎÔ–¸®K]¸Üûª¸ÎÔ–¸¢·‚¸ÎÔ–¸Üûª¸žCI¸«+¿¸»µ¸žCI¸®K]¸¢ç¸«+¿¸,ç ¸«+¿¸¢ç¸Üûª¸ÎÔ–¸æÄŒ¸¬Z ¸ÎÔ–¸¢·‚¸àB5¸hZq¸®K]¸¬Z ¸^8Ë·^8Ë·_x·h¢£·;J!¸àB5¸‘&oµ_x·Ž{ +7‘&oµb±·¶{T»7}×)·{T»7/üâ7ÔX7=A8Ý`}8¶Ë“7•¼ˆ8•¼ˆ8fNi8ÚÜœ8ÚÜœ8ÚÜœ8•¼ˆ8á8Å8Rý9¡ð¦8•¼ˆ8tË’8¤±8¤±8Ý`}8•¼ˆ8Ý`}8=A8x?-8GBU8{T»7x?-8/üâ7}×)·¶Ë“7_x·¬Z ¸ÔX7‘&oµ_x·‘&oµ_x·Þêò·b±·¶Ž{ +7^8Ë·Þêò·h¢£·Þêò·^8Ë·àB5¸h¢£·h¢£·,ç ¸hZq¸hZq¸Üûª¸«+¿¸Üݸ]çû¸]çû¸òÃñ¸2- ¹òÃñ¸RcÓ¸2- ¹¢ç¸òÃñ¸¢ç¸]çû¸]çû¸òÃñ¸]çû¸2- ¹òÃñ¸R¹¢ç¸òÃñ¸ÜݸòÃñ¸¢·‚¸àB5¸;J!¸;J!¸¬Z ¸¬Z ¸žCI¸^8Ë·^8Ë·àB5¸¬Z ¸¬Z ¸^8Ë·;J!¸ÎÔ–¸ÎÔ–¸Üûª¸¢·‚¸¢·‚¸Üûª¸,ç ¸æÄŒ¸ÎÔ–¸ÎÔ–¸®K]¸;J!¸h¢£·b±·¶{T»7_x·_x·_x·¬Z ¸h¢£·‘&oµ_x·_x·b±·¶^7s6ÔX7{T»7GBU8¿^8^7s6/üâ7ÔX7{T»7{T»7^7s6h¢£·‘&oµ_x·_x·¬Z ¸^8Ë·¬Z ¸®K]¸^8Ë·¬Z ¸®K]¸hZq¸Þêò·àB5¸ÎÔ–¸hZq¸hZq¸®K]¸®K]¸ÎÔ–¸àB5¸hZq¸,ç ¸žCI¸;J!¸¢·‚¸žCI¸®K]¸;J!¸¢·‚¸Þêò·;J!¸¬Z ¸žCI¸àB5¸žCI¸®K]¸žCI¸^8Ë·_x·}×)·^7s6=A8}×)·‘&oµ/üâ7Ž{ +7‘&oµÔX7{T»7x?-8tË’8•¼ˆ8tË’8K’ã8á8Å8¤±8ÚÜœ8•¼ˆ8á8Å8¡ð¦8Ý`}8èTÏ8¡ð¦8¤±8ÚÜœ8á8Å8ƒ³í8ÚÜœ8Ï# 9K’ã8Ï# 9K’ã8á8Å869Rý9K’ã8á8Å8Ï# 9K’ã8Rý9Ï# 9ƒ³í8ƒ³í8¤±8tË’8tË’8•¼ˆ8GBU8•¼ˆ8á8Å8á8Å8èTÏ8GBU8ÚÜœ8Ý`}8•¼ˆ8GBU8¿^8GBU8GBU8x?-8•¼ˆ8fNi8=A8{T»7VJ8¿^8b±·¶ÔX7Ž{ +7{T»7VJ8ÔX7b±·¶{T»7ÔX7fNi8ÔX7¶Ë“7‘&oµh¢£·b±·¶Þêò·¬Z ¸‘&oµ‘&oµÞêò·ÎÔ–¸¢·‚¸ÎÔ–¸«+¿¸,ç ¸Üûª¸æÄŒ¸®K]¸,ç ¸ÎÔ–¸Üݸ«+¿¸,ç ¸,ç ¸FɸæÄŒ¸hZq¸,ç ¸ÎÔ–¸;J!¸_x·b±·¶Ž{ +7_x·Ž{ +7Ž{ +7ÔX7‘&oµx?-8/üâ7fNi8=A8Ý`}8GBU8=A8/üâ7•¼ˆ8¤±8x?-8VJ8VJ8=A8GBU8¶Ë“7¶Ë“7‘&oµ}×)·}×)·¬Z ¸^7s6b±·¶^7s6Ž{ +7}×)·Þêò·_x·^8Ë·àB5¸àB5¸¢·‚¸;J!¸àB5¸ÎÔ–¸Fɸ»µ¸¢ç¸FɸFɸÜûª¸»µ¸RcÓ¸¢·‚¸RcÓ¸òÃñ¸òÃñ¸RcÓ¸R¹]çû¸Fɸ2- ¹ÜݸÜݸ]çû¸RcÓ¸Fɸ«+¿¸ÎÔ–¸RcÓ¸«+¿¸RcÓ¸«+¿¸Üûª¸,ç ¸»µ¸ÎÔ–¸»µ¸,ç ¸ÜݸÎÔ–¸hZq¸ÎÔ–¸®K]¸ÎÔ–¸æÄŒ¸®K]¸ÎÔ–¸Þêò·_x·;J!¸h¢£·_x·}×)·‘&oµ{T»7Ž{ +7¿^8/üâ7/üâ7=A8=A8tË’8tË’8tË’8x?-8¡ð¦8Ý`}8¡ð¦8¡ð¦8èTÏ8¡ð¦8û8=A8GBU8¡ð¦8tË’8tË’8á8Å8á8Å8QÖ÷8á8Å8á8Å8èTÏ8á8Å8¡ð¦8¡ð¦8û8á8Å8ÚÜœ8¡ð¦8GBU8Ý`}8GBU8¶Ë“7Ž{ +7{T»7b±·¶{T»7¶Ë“7{T»7b±·¶‘&oµ^7s6_x·Þêò·^8Ë·àB5¸Þêò·‘&oµh¢£·;J!¸¬Z ¸Ž{ +7_x·}×)·h¢£·}×)·;J!¸^8Ë·^8Ë·¬Z ¸æÄŒ¸žCI¸‘&oµÞêò·¬Z ¸^8Ë·;J!¸Þêò·b±·¶;J!¸¬Z ¸®K]¸h¢£·^8Ë·,ç ¸h¢£·Þêò·hZq¸¬Z ¸Þêò·Þêò·ÎÔ–¸¬Z ¸Þêò·b±·¶^7s6‘&oµ}×)·Ž{ +7‘&oµŽ{ +7ÔX7^7s6{T»7¿^8/üâ7•¼ˆ8GBU8VJ8GBU8VJ8=A8•¼ˆ8/üâ7{T»7ÔX7¿^8=A8¿^8tË’8tË’8Ý`}8=A8Ý`}8{T»7{T»7¿^8¿^8¿^8GBU8VJ8x?-8ÔX7¿^8fNi8ÔX7¶Ë“7{T»7x?-8ÔX7^7s6Ž{ +7Ž{ +7^7s6‘&oµ_x·Þêò·}×)·b±·¶^8Ë·žCI¸hZq¸;J!¸Þêò·®K]¸®K]¸žCI¸hZq¸ÎÔ–¸»µ¸žCI¸¢·‚¸ÎÔ–¸æÄŒ¸ÎÔ–¸,ç ¸æÄŒ¸Üûª¸ÎÔ–¸Üݸ»µ¸«+¿¸]çû¸òÃñ¸»µ¸Fɸ«+¿¸«+¿¸ÎÔ–¸òÃñ¸»µ¸Fɸ,ç ¸®K]¸hZq¸b±·¶¬Z ¸žCI¸^8Ë·;J!¸àB5¸_x·Þêò·{T»7fNi8b±·¶_x·¶Ë“7^7s6ÔX7VJ8¿^8GBU8•¼ˆ8Ý`}8fNi8¡ð¦8•¼ˆ8tË’8tË’8û8ÚÜœ8¤±8•¼ˆ8x?-8VJ8x?-8ÚÜœ8ÚÜœ8ÚÜœ8fNi8¡ð¦8tË’8GBU8x?-8=A8tË’8•¼ˆ8/üâ7¿^8{T»7ÔX7^7s6^7s6}×)·^7s6b±·¶Þêò·_x·^8Ë·àB5¸¬Z ¸Þêò·^8Ë·¬Z ¸¬Z ¸^8Ë·b±·¶h¢£·žCI¸»µ¸žCI¸®K]¸ÎÔ–¸®K]¸®K]¸FɸÎÔ–¸hZq¸,ç ¸ÎÔ–¸Üûª¸ÎÔ–¸»µ¸FɸFɸ¢ç¸$¹R¹ïV¹$¹òÃñ¸»µ¸ÎÔ–¸Üûª¸»µ¸¢·‚¸hZq¸»µ¸ÎÔ–¸ÎÔ–¸,ç ¸¢·‚¸hZq¸Þêò·h¢£·¬Z ¸_x·Ž{ +7‘&oµ^7s6¿^8/üâ7Ý`}8/üâ7•¼ˆ8¡ð¦8K’ã8ÚÜœ8GBU8½rÙ8=A8fNi8ÚÜœ8fNi8fNi8û8Ý`}8û8GBU8¿^8/üâ7¿^8x?-8‘&oµ/üâ7/üâ7/üâ7/üâ7VJ8¶Ë“7Ž{ +7VJ8ÔX7/üâ7ÔX7ÔX7=A8/üâ7}×)·ÔX7Ž{ +7}×)·^7s6ÔX7^7s6_x·}×)·žCI¸Þêò·Üûª¸«+¿¸,ç ¸Üûª¸Üݸ«+¿¸«+¿¸Üûª¸¢ç¸Üûª¸«+¿¸FɸFɸ]çû¸¢ç¸òÃñ¸]çû¸R¹¢ç¸FɸRcÓ¸Üݸ¢ç¸hZq¸FɸRcÓ¸æÄŒ¸hZq¸¬Z ¸Þêò·àB5¸àB5¸Ž{ +7‘&oµ}×)·Ž{ +7}×)·/üâ7/üâ7¿^8fNi8GBU8GBU8tË’8¡ð¦8½rÙ8¡ð¦8¡ð¦8èTÏ8á8Å8û8èTÏ8¤±8Ý`}8GBU8èTÏ8ƒ³í8ÚÜœ8GBU8Ý`}8GBU8¤±8=A8ÔX7VJ8ÔX7¶Ë“7VJ8^7s6ÔX7VJ8¿^8^7s6ÔX7_x·}×)·‘&oµ_x·Ž{ +7/üâ7_x·{T»7VJ8/üâ7ÔX7Ž{ +7Ž{ +7‘&oµ_x·‘&oµVJ8¶Ë“7¶Ë“7_x·}×)·b±·¶‘&oµŽ{ +7‘&oµŽ{ +7_x·^7s6^8Ë·^8Ë·®K]¸®K]¸hZq¸®K]¸ÎÔ–¸Þêò·_x·¬Z ¸àB5¸àB5¸;J!¸Ž{ +7Ž{ +7VJ8^7s6Ž{ +7¿^8¿^8Ý`}8GBU8GBU8•¼ˆ8x?-8•¼ˆ8fNi8GBU8¶Ë“7x?-8=A8¿^8=A8GBU8=A8fNi8VJ8Ž{ +7fNi8•¼ˆ8fNi8GBU8GBU8=A8x?-8¤±8fNi8fNi8ÚÜœ8¤±8á8Å8tË’8VJ8x?-8=A8Ý`}8ÚÜœ8Ý`}8=A8=A8¿^8VJ8fNi8¿^8VJ8¿^8/üâ7Ž{ +7}×)·{T»7}×)·_x·^8Ë·¬Z ¸_x·}×)·}×)·_x·¬Z ¸h¢£·^8Ë·®K]¸àB5¸¢·‚¸,ç ¸;J!¸Üûª¸»µ¸Üûª¸«+¿¸òÃñ¸]çû¸R¹½A¹R¹]çû¸ïV¹¸/E¹•eO¹½A¹ïV¹ïV¹2- ¹¢ç¸Fɸ,ç ¸«+¿¸RcÓ¸,ç ¸¢·‚¸¢·‚¸žCI¸hZq¸¢·‚¸Þêò·àB5¸}×)·h¢£·^7s6_x·}×)·‘&oµb±·¶_x·x?-8ÔX7^7s6/üâ7Ž{ +7ÔX7ÔX7VJ8{T»7¿^8x?-8/üâ7ÔX7Ž{ +7¿^8¶Ë“7Ž{ +7VJ8GBU8¿^8=A8fNi8=A8Ý`}8Ž{ +7{T»7b±·¶b±·¶/üâ7x?-8VJ8{T»7GBU8=A8¿^8/üâ7GBU8fNi8x?-8ÔX7¶Ë“7ÔX7‘&oµ‘&oµÔX7ÔX7}×)·^7s6‘&oµ‘&oµŽ{ +7_x·Þêò·‘&oµh¢£·}×)·h¢£·^8Ë·^7s6_x·žCI¸¢·‚¸hZq¸¬Z ¸ÎÔ–¸;J!¸¬Z ¸hZq¸;J!¸žCI¸žCI¸¢·‚¸ÎÔ–¸žCI¸ÎÔ–¸;J!¸;J!¸h¢£·àB5¸^8Ë·àB5¸b±·¶}×)·^8Ë·b±·¶Ž{ +7h¢£·h¢£·àB5¸;J!¸^7s6‘&oµ}×)·¿^8¶Ë“7¶Ë“7{T»7¿^8VJ8¿^8=A8x?-8¶Ë“7{T»7Ý`}8x?-8¿^8Ž{ +7VJ8GBU8¶Ë“7GBU8x?-8=A8¶Ë“7x?-8x?-8Ž{ +7{T»7Ž{ +7ÔX7ÔX7ÔX7¶Ë“7{T»7=A8x?-8Ž{ +7¿^8b±·¶h¢£·^7s6‘&oµ‘&oµ^8Ë·¬Z ¸}×)·‘&oµ_x·^7s6Þêò·àB5¸žCI¸hZq¸àB5¸®K]¸hZq¸žCI¸¢·‚¸,ç ¸ÎÔ–¸RcÓ¸Üݸ«+¿¸]çû¸]çû¸òÃñ¸]çû¸¢ç¸2- ¹½A¹]çû¸Fɸ¢ç¸æÄŒ¸ÎÔ–¸ÎÔ–¸,ç ¸¬Z ¸žCI¸;J!¸¬Z ¸b±·¶}×)·¶Ë“7b±·¶b±·¶¬Z ¸^7s6^7s6}×)·ÔX7h¢£·¬Z ¸¬Z ¸žCI¸¬Z ¸àB5¸‘&oµh¢£·àB5¸;J!¸}×)·_x·¶Ë“7/üâ7GBU8Ý`}8ÚÜœ8VJ8fNi8fNi8tË’8¡ð¦8¤±8tË’8á8Å8tË’8á8Å8û8èTÏ8ƒ³í8á8Å8½rÙ8èTÏ8û8ƒ³í8QÖ÷8Ï# 9Çx9Rý9Ö¾.9Ö¾.9$9$9ƒ³í8Ï# 9QÖ÷8¡ð¦8á8Å8û8•¼ˆ8•¼ˆ8¶Ë“7x?-8Ý`}8•¼ˆ8•¼ˆ8GBU8ÚÜœ8=A8ÔX7{T»7{T»7‘&oµ}×)·h¢£·^8Ë·®K]¸Þêò·}×)·^8Ë·Þêò·àB5¸Þêò·,ç ¸æÄŒ¸žCI¸àB5¸ÎÔ–¸žCI¸hZq¸;J!¸_x·b±·¶_x·/üâ7b±·¶b±·¶b±·¶^7s6ÔX7fNi8=A8/üâ7Ý`}8{T»7x?-8fNi8¿^8GBU8¤±8ÚÜœ8Ý`}8¤±8•¼ˆ8VJ8x?-8Ý`}8Ý`}8¡ð¦8ÚÜœ8Ý`}8GBU8GBU8ÚÜœ8¤±8á8Å8û8Ý`}8¤±8ÚÜœ869¤±8¡ð¦8¡ð¦8Rý9Ï# 9èTÏ8½rÙ8½rÙ8ƒ³í8¡ð¦8èTÏ8¡ð¦8á8Å8•¼ˆ8Ý`}8fNi8ÔX7Ž{ +7/üâ7¿^8{T»7VJ8Ž{ +7Ž{ +7‘&oµ}×)·‘&oµ}×)·Þêò·¬Z ¸ÎÔ–¸àB5¸,ç ¸¢·‚¸®K]¸ÎÔ–¸,ç ¸,ç ¸ÎÔ–¸¬Z ¸àB5¸ÎÔ–¸®K]¸ÎÔ–¸®K]¸®K]¸hZq¸;J!¸Þêò·àB5¸¢·‚¸hZq¸ÎÔ–¸Üûª¸Þêò·àB5¸h¢£·Þêò·¬Z ¸¬Z ¸^8Ë·h¢£·¬Z ¸¶Ë“7^7s6‘&oµÔX7ÔX7Ž{ +7/üâ7{T»7fNi8VJ8fNi8ÚÜœ8K’ã8èTÏ8K’ã8QÖ÷8Rý9QÖ÷8QÖ÷8Ï# 9Ï# 9QÖ÷8½rÙ8èTÏ8ƒ³í8ƒ³í8Rý9èTÏ8á8Å8K’ã8M9K’ã8Rý9—b9QÖ÷8Rý9ƒ³í8tË’8tË’8ÚÜœ8Ý`}8û8¤±8¡ð¦8•¼ˆ8•¼ˆ8¿^8¿^8ÔX7ÔX7ÔX7/üâ7}×)·b±·¶¶Ë“7h¢£·;J!¸^8Ë·Þêò·®K]¸Þêò·®K]¸«+¿¸ÜݸFɸæÄŒ¸»µ¸ÎÔ–¸¢ç¸Fɸ¢ç¸FɸR¹R¹«+¿¸Fɸ«+¿¸«+¿¸,ç ¸Üûª¸ÎÔ–¸¢·‚¸,ç ¸Üûª¸ÎÔ–¸FɸRcÓ¸¢ç¸«+¿¸Üûª¸æÄŒ¸ÎÔ–¸,ç ¸,ç ¸ÎÔ–¸hZq¸^8Ë·¬Z ¸®K]¸^8Ë·}×)·^8Ë·;J!¸}×)·b±·¶Ž{ +7¿^8¿^8Ž{ +7x?-8x?-8¶Ë“7{T»7{T»7Ž{ +7¿^8VJ8GBU8fNi8Ý`}8/üâ7¿^8ÔX7Ž{ +7‘&oµ{T»7}×)·¶Ë“7^7s6h¢£·^7s6}×)·b±·¶¶Ë“7¶Ë“7}×)·Ž{ +7b±·¶{T»7¶Ë“7^7s6^8Ë·}×)·}×)·;J!¸h¢£·h¢£·®K]¸¬Z ¸¬Z ¸h¢£·_x·_x·Þêò·¬Z ¸¢·‚¸,ç ¸¢·‚¸®K]¸Üûª¸»µ¸ÎÔ–¸RcÓ¸«+¿¸Üûª¸FɸòÃñ¸R¹»µ¸Fɸ«+¿¸Üûª¸Fɸ]çû¸ÜݸRcÓ¸¢ç¸RcÓ¸ÎÔ–¸àB5¸®K]¸¢·‚¸ÎÔ–¸b±·¶_x·Þêò·àB5¸¬Z ¸¬Z ¸Þêò·;J!¸¬Z ¸^8Ë·^7s6}×)·^8Ë·^7s6^8Ë·b±·¶x?-8_x·Ž{ +7¿^8^7s6Ž{ +7/üâ7VJ8GBU8GBU8•¼ˆ8fNi8=A8=A8/üâ7¶Ë“7fNi8•¼ˆ8GBU8x?-8¿^8=A8•¼ˆ8¤±8ÚÜœ8¿^8x?-8x?-8VJ8ÔX7¶Ë“7Ž{ +7‘&oµ¶Ë“7^7s6h¢£·_x·‘&oµh¢£·®K]¸®K]¸®K]¸žCI¸b±·¶;J!¸hZq¸Üûª¸ÎÔ–¸hZq¸,ç ¸ÎÔ–¸¢·‚¸hZq¸®K]¸ÎÔ–¸Fɸ»µ¸»µ¸Fɸ«+¿¸,ç ¸RcÓ¸Üûª¸R¹òÃñ¸Üûª¸ÎÔ–¸«+¿¸,ç ¸Üûª¸ÎÔ–¸ÜݸRcÓ¸]çû¸«+¿¸ÎÔ–¸Üûª¸Üûª¸hZq¸¢·‚¸hZq¸®K]¸¬Z ¸_x·_x·^7s6}×)·¬Z ¸;J!¸h¢£·^7s6ÔX7=A8{T»7{T»7b±·¶ÔX7^7s6{T»7=A8¿^8ÚÜœ8x?-8fNi8¿^8x?-8fNi8•¼ˆ8•¼ˆ8¡ð¦8•¼ˆ8x?-8ÚÜœ8fNi8Ý`}8¿^8Ý`}8Ý`}8tË’8•¼ˆ8Ý`}8x?-8¶Ë“7Ž{ +7ÔX7}×)·‘&oµ}×)·b±·¶^8Ë·;J!¸¬Z ¸æÄŒ¸hZq¸Üûª¸«+¿¸ÎÔ–¸ÎÔ–¸¢ç¸RcÓ¸òÃñ¸]çû¸2- ¹¢ç¸RcÓ¸¢ç¸¢ç¸2- ¹2- ¹Àl¹Ç±+¹Ìû:¹6T¹jJJ¹¸/E¹jJJ¹Ð¹^¹ën¹"ôh¹ÂÖc¹˜â5¹˜â5¹6T¹¸/E¹‚@¹ëÉ0¹1š&¹ëÉ0¹˜â5¹.ƒ!¹Àl¹ïV¹]çû¸]çû¸]çû¸«+¿¸ÎÔ–¸ÎÔ–¸ÎÔ–¸¬Z ¸^8Ë·_x·h¢£·Þêò·Ž{ +7}×)·Ž{ +7VJ8¶Ë“7/üâ7{T»7ÔX7x?-8^7s6‘&oµ/üâ7¿^8Ž{ +7VJ8Ý`}8x?-8GBU8¿^8=A8VJ8/üâ7fNi8Ý`}8Ý`}8=A8Ý`}8GBU8Ý`}8‘&oµ^8Ë·;J!¸;J!¸_x·^8Ë·^8Ë·;J!¸žCI¸,ç ¸®K]¸¬Z ¸,ç ¸,ç ¸àB5¸®K]¸¢·‚¸àB5¸hZq¸^8Ë·^8Ë·;J!¸žCI¸¬Z ¸;J!¸^8Ë·‘&oµ/üâ7b±·¶‘&oµ‘&oµ¶Ë“7ÔX7/üâ7ÔX7Ž{ +7{T»7ÔX7x?-8¿^8{T»7{T»7¶Ë“7{T»7Ž{ +7ÔX7VJ8VJ8Ý`}8=A8x?-8Ý`}8Ý`}8û8=A8fNi8ÚÜœ8=A8fNi8tË’8tË’8û8½rÙ8Ï# 9—b9Ï# 9QÖ÷8M×39—b9M9Ï# 9M9Çx9$9Ï# 9Ö¾.9LYM9Ñ#C989ë¦)9Ñ#C9M×39Î >9¾tR9Î >9ë¦)9Kð89Î >9Î >9Ñ#C9ë¦)9ë¦)9Î >9LYM9LYM9Kð89Ö¾.9ý¬\9øæf9LYM9Rý9$969M9Çx9M9—b9M9Rý9K’ã8Rý9Ï# 9èTÏ8Ï# 9½rÙ869èTÏ8•¼ˆ8¡ð¦8¤±8¡ð¦8•¼ˆ8ÔX7VJ8x?-8^8Ë·b±·¶¬Z ¸}×)·¶Ë“7_x·ÔX7^7s6ÔX7{T»7{T»7}×)·b±·¶}×)·Ž{ +7¿^8x?-8¿^8•¼ˆ8=A8¿^8{T»7GBU8fNi8tË’8¶Ë“7x?-8¿^8x?-8Ý`}8tË’8Ý`}8ÚÜœ8ÚÜœ8û8á8Å8á8Å8K’ã8Ï# 9Rý98969K’ã8Rý9QÖ÷8K’ã8—b969Ï# 9M9Ï# 9ƒ³í8½rÙ8¤±8ƒ³í8èTÏ8K’ã8½rÙ8¡ð¦8á8Å8K’ã8èTÏ8èTÏ8ƒ³í8á8Å8tË’8•¼ˆ8¡ð¦8•¼ˆ8VJ8/üâ7^7s6{T»7Ž{ +7¶Ë“7/üâ7^7s6ÔX7Ž{ +7_x·}×)·;J!¸¢·‚¸Üûª¸,ç ¸ÎÔ–¸»µ¸RcÓ¸,ç ¸,ç ¸»µ¸RcÓ¸ÜݸÜݸ«+¿¸ÎÔ–¸RcÓ¸FɸÎÔ–¸FɸæÄŒ¸¢ç¸ÎÔ–¸»µ¸RcÓ¸»µ¸ÜݸFɸRcÓ¸ÎÔ–¸ÎÔ–¸¢·‚¸®K]¸®K]¸¬Z ¸Þêò·àB5¸_x·¬Z ¸^8Ë·‘&oµ}×)·}×)·^7s6Ž{ +7‘&oµb±·¶Ž{ +7b±·¶}×)·‘&oµÔX7Ž{ +7}×)·¶Ë“7{T»7x?-8¿^8/üâ7/üâ7ÔX7/üâ7=A8Ý`}8/üâ7GBU8Ý`}8¤±8á8Å8¡ð¦8¡ð¦8á8Å8•¼ˆ8ÚÜœ8¡ð¦8tË’8tË’8tË’8K’ã8ÚÜœ8tË’8ÚÜœ8=A8•¼ˆ8VJ8GBU8/üâ7‘&oµb±·¶_x·b±·¶^8Ë·h¢£·b±·¶}×)·Ž{ +7Ž{ +7‘&oµÔX7}×)·}×)·¬Z ¸¬Z ¸h¢£·àB5¸_x·ÎÔ–¸ÎÔ–¸¬Z ¸;J!¸;J!¸¢·‚¸hZq¸Þêò·hZq¸hZq¸hZq¸hZq¸¢·‚¸,ç ¸Fɸ»µ¸òÃñ¸$¹«+¿¸Üûª¸»µ¸¢·‚¸ÎÔ–¸,ç ¸«+¿¸¬Z ¸àB5¸®K]¸®K]¸àB5¸h¢£·¬Z ¸}×)·^8Ë·^8Ë·Ž{ +7¬Z ¸^8Ë·‘&oµb±·¶^7s6^7s6VJ8ÔX7=A8=A8=A8=A8û8tË’8ÚÜœ8tË’8tË’8tË’8¡ð¦8GBU8Ý`}8•¼ˆ8Ý`}8•¼ˆ8¡ð¦8•¼ˆ8•¼ˆ8ÚÜœ8•¼ˆ8tË’8¤±8tË’8VJ8fNi8=A8•¼ˆ8fNi8¶Ë“7Ž{ +7x?-8fNi8GBU8•¼ˆ8fNi8x?-8VJ8¶Ë“7¶Ë“7b±·¶Ž{ +7{T»7=A8GBU8=A8tË’8VJ8Ý`}8¿^8{T»7=A8VJ8=A8VJ8ÔX7{T»7Ž{ +7ÔX7=A8¡ð¦8tË’8fNi8ÚÜœ8•¼ˆ8=A8/üâ7GBU8fNi8GBU8•¼ˆ8fNi8tË’8GBU8tË’8GBU8ÚÜœ8û8û8½rÙ8K’ã8èTÏ8èTÏ8èTÏ8¤±8K’ã8¡ð¦8û8á8Å8tË’8á8Å8tË’8û8á8Å8û8á8Å8û8ƒ³í8½rÙ8¤±8¤±8¤±8fNi8ÚÜœ8x?-8fNi8GBU8•¼ˆ8=A8GBU8Ý`}8¡ð¦8Ý`}8=A8Ý`}8tË’8fNi8fNi8=A8¤±8¡ð¦8¡ð¦8èTÏ8tË’8•¼ˆ8û8ÚÜœ8¡ð¦8=A8{T»7¶Ë“7¿^8{T»7¿^8h¢£·‘&oµŽ{ +7}×)·^7s6ÔX7^7s6Ž{ +7ÔX7b±·¶Ž{ +7_x·}×)·h¢£·b±·¶_x·Þêò·^8Ë·^8Ë·Þêò·ÔX7^7s6^8Ë·_x·Þêò·¬Z ¸®K]¸¬Z ¸hZq¸¬Z ¸¬Z ¸h¢£·¬Z ¸hZq¸àB5¸;J!¸;J!¸}×)·‘&oµ}×)·^7s6ÔX7h¢£·àB5¸Þêò·ÔX7ÔX7¶Ë“7_x·^7s6ÔX7{T»7^7s6¿^8¿^8/üâ7/üâ7¶Ë“7{T»7GBU8x?-8=A8x?-8VJ8/üâ7x?-8fNi8fNi8VJ8¶Ë“7{T»7{T»7=A8/üâ7‘&oµVJ8¶Ë“7VJ8VJ8ÔX7ÔX7ÔX7Ž{ +7Ž{ +7ÔX7‘&oµ‘&oµ}×)·}×)·ÔX7_x·_x·‘&oµŽ{ +7ÔX7^7s6‘&oµ^7s6_x·Þêò·hZq¸;J!¸hZq¸¬Z ¸hZq¸hZq¸hZq¸æÄŒ¸»µ¸ÎÔ–¸¢·‚¸ÎÔ–¸»µ¸RcÓ¸Üûª¸ÎÔ–¸ÎÔ–¸àB5¸žCI¸hZq¸hZq¸¢·‚¸¢·‚¸®K]¸¬Z ¸_x·}×)·;J!¸^7s6Þêò·¬Z ¸àB5¸^8Ë·}×)·Ž{ +7¿^8=A8GBU8¶Ë“7VJ8/üâ7=A8‘&oµ/üâ7¶Ë“7^7s6Ž{ +7¡ð¦8Ý`}8Ý`}8ÚÜœ8ÚÜœ8fNi8¡ð¦8tË’8tË’8VJ8ÔX7/üâ7^7s6Ž{ +7^7s6^8Ë·^8Ë·^7s6Þêò·¬Z ¸®K]¸®K]¸^8Ë·h¢£·®K]¸Üûª¸,ç ¸®K]¸Üûª¸ÎÔ–¸¢·‚¸FɸæÄŒ¸«+¿¸æÄŒ¸»µ¸ÜݸòÃñ¸$¹ïV¹Ç±+¹2- ¹$¹ïV¹.ƒ!¹1š&¹Ìû:¹‚@¹˜â5¹Ìû:¹¸/E¹Ð¹^¹‚@¹•eO¹˜â5¹•eO¹"ôh¹Ð¹^¹jJJ¹˜â5¹˜â5¹¸/E¹‚@¹Ç±+¹1š&¹˜â5¹Ìû:¹˜â5¹.ƒ!¹.ƒ!¹˜â5¹Ç±+¹Ìû:¹‚@¹Àl¹Àl¹2- ¹«+¿¸]çû¸¢ç¸»µ¸RcÓ¸ÎÔ–¸æÄŒ¸¢·‚¸hZq¸àB5¸žCI¸àB5¸Þêò·}×)·^8Ë·{T»7¶Ë“7}×)·Ž{ +7^7s6Ž{ +7/üâ7ÔX7ÔX7{T»7GBU8•¼ˆ8=A8•¼ˆ8¡ð¦8Ý`}8èTÏ8QÖ÷8½rÙ8û8Rý9¤±8ƒ³í8ƒ³í8ƒ³í8K’ã8èTÏ8á8Å8½rÙ8¤±8¤±8GBU8{T»7Ž{ +7Ž{ +7^7s6}×)·^7s6}×)·àB5¸®K]¸®K]¸àB5¸¬Z ¸æÄŒ¸ÎÔ–¸,ç ¸»µ¸Üûª¸RcÓ¸½A¹]çû¸2- ¹]çû¸]çû¸¢ç¸¢ç¸,ç ¸«+¿¸¢ç¸¢ç¸FɸFɸòÃñ¸»µ¸«+¿¸ÜݸòÃñ¸»µ¸FɸÎÔ–¸žCI¸àB5¸Üûª¸ÎÔ–¸,ç ¸RcÓ¸Fɸ¢·‚¸Üûª¸ÎÔ–¸;J!¸;J!¸ÎÔ–¸žCI¸^8Ë·¬Z ¸h¢£·b±·¶_x·¿^8Ž{ +7ÔX7=A8¶Ë“7x?-8tË’8{T»7GBU8Ý`}8¿^8GBU8x?-8GBU8VJ8¤±8û8¤±8tË’8ÚÜœ8•¼ˆ8GBU8Ž{ +7{T»7{T»7=A8¿^8ÔX7{T»7{T»7b±·¶/üâ7‘&oµh¢£·}×)·¬Z ¸¬Z ¸¬Z ¸h¢£·®K]¸àB5¸¢·‚¸ÎÔ–¸;J!¸hZq¸Üûª¸¢ç¸R¹òÃñ¸Üûª¸¢ç¸¢ç¸$¹$¹$¹$¹1š&¹˜â5¹‚@¹˜â5¹ëÉ0¹‚@¹ëÉ0¹Àl¹Ìû:¹˜â5¹˜â5¹Ìû:¹˜â5¹‚@¹jJJ¹JY¹¸/E¹Ìû:¹jJJ¹ëÉ0¹‚@¹Ç±+¹Ìû:¹R¹½A¹˜â5¹2- ¹]çû¸$¹$¹FɸÜݸFɸ]çû¸«+¿¸RcÓ¸«+¿¸FɸÜݸ»µ¸ÎÔ–¸àB5¸hZq¸¬Z ¸žCI¸¢·‚¸žCI¸;J!¸hZq¸®K]¸Þêò·¢·‚¸àB5¸¬Z ¸®K]¸žCI¸¢·‚¸;J!¸^8Ë·b±·¶b±·¶h¢£·^7s6Þêò·Ž{ +7Ž{ +7^7s6^8Ë·h¢£·Þêò·¬Z ¸^8Ë·®K]¸^8Ë·h¢£·_x·_x·h¢£·Þêò·àB5¸æÄŒ¸;J!¸Þêò·®K]¸hZq¸Üûª¸ÎÔ–¸hZq¸Üûª¸,ç ¸hZq¸,ç ¸hZq¸®K]¸hZq¸hZq¸¢·‚¸¬Z ¸hZq¸,ç ¸®K]¸hZq¸ÎÔ–¸RcÓ¸,ç ¸,ç ¸¢·‚¸¢·‚¸¢·‚¸;J!¸hZq¸_x·b±·¶b±·¶b±·¶Ž{ +7h¢£·¿^8/üâ7¿^8GBU8tË’8á8Å8¡ð¦8¡ð¦8ÚÜœ8tË’8¡ð¦8ƒ³í8•¼ˆ8¡ð¦8¡ð¦8=A8Ý`}8•¼ˆ8fNi8¡ð¦8¡ð¦8ÚÜœ8¤±86989K’ã8ƒ³í8QÖ÷8èTÏ8û8•¼ˆ8•¼ˆ8tË’8¡ð¦8•¼ˆ8¿^8x?-8fNi8=A8{T»7fNi8ÚÜœ8GBU8tË’8û8fNi8Ý`}8tË’8tË’8/üâ7¿^8VJ8x?-8fNi8¿^8=A8•¼ˆ8¿^8x?-8ÔX7Ž{ +7ÔX7b±·¶b±·¶_x·}×)·Þêò·¬Z ¸¬Z ¸®K]¸;J!¸h¢£·àB5¸žCI¸hZq¸®K]¸;J!¸žCI¸hZq¸žCI¸ÎÔ–¸ÎÔ–¸ÎÔ–¸»µ¸RcÓ¸Üûª¸;J!¸Üûª¸Fɸ,ç ¸Üûª¸;J!¸_x·àB5¸Þêò·;J!¸ÎÔ–¸;J!¸h¢£·Þêò·b±·¶‘&oµÔX7ÔX7^7s6¿^8¶Ë“7x?-8GBU8/üâ7=A8GBU8=A8GBU8=A8Ý`}8VJ8fNi8ÚÜœ8Ý`}8Ý`}8tË’8tË’8VJ8¿^8ÚÜœ8x?-8¶Ë“7/üâ7x?-8/üâ7x?-8=A8VJ8¿^8¶Ë“7ÔX7x?-8¶Ë“7/üâ7fNi8•¼ˆ8VJ8{T»7¶Ë“7b±·¶}×)·‘&oµ^7s6{T»7¶Ë“7Ž{ +7h¢£·‘&oµ^8Ë·}×)·}×)·h¢£·_x·b±·¶‘&oµÞêò·žCI¸žCI¸ÎÔ–¸ÎÔ–¸žCI¸¢·‚¸ÎÔ–¸¬Z ¸;J!¸«+¿¸,ç ¸¬Z ¸ÎÔ–¸àB5¸ÎÔ–¸žCI¸àB5¸æÄŒ¸ÎÔ–¸¬Z ¸Þêò·¬Z ¸àB5¸ÎÔ–¸®K]¸Þêò·àB5¸h¢£·‘&oµb±·¶¬Z ¸^8Ë·‘&oµb±·¶‘&oµb±·¶}×)·b±·¶/üâ7/üâ7fNi8Ý`}8fNi8¡ð¦8¡ð¦8Ý`}8¡ð¦8¡ð¦8¤±8ÚÜœ8¡ð¦8¤±8ÚÜœ8tË’8ƒ³í8½rÙ8½rÙ8Rý9¤±8á8Å8tË’8¤±8¤±8¤±8û8tË’8á8Å8á8Å8Ý`}8•¼ˆ8fNi8VJ8Ý`}8GBU8x?-8¿^8ÔX7VJ8/üâ7=A8•¼ˆ8x?-8tË’8fNi8¿^8/üâ7¿^8VJ8{T»7=A8¶Ë“7‘&oµŽ{ +7^8Ë·_x·^8Ë·Þêò·‘&oµÞêò·h¢£·^8Ë·;J!¸àB5¸;J!¸àB5¸hZq¸;J!¸hZq¸žCI¸hZq¸ÎÔ–¸®K]¸,ç ¸hZq¸¬Z ¸;J!¸;J!¸_x·Þêò·b±·¶h¢£·Ž{ +7‘&oµ‘&oµŽ{ +7‘&oµŽ{ +7ÔX7x?-8¶Ë“7VJ8Ý`}8VJ8Ý`}8GBU8{T»7fNi8GBU8¿^8=A8GBU8=A8•¼ˆ8tË’8fNi8Ý`}8x?-8x?-8tË’8èTÏ8èTÏ8ƒ³í8K’ã8ƒ³í8½rÙ8û8û8û8èTÏ8tË’8GBU8tË’8ÚÜœ8¤±8tË’8GBU8Ý`}8Ý`}8fNi8=A8VJ8{T»7ÔX7=A8=A8VJ8x?-8=A8VJ8x?-8x?-8=A8ÔX7ÔX7¿^8¿^8^7s6ÔX7/üâ7VJ8/üâ7/üâ7fNi8x?-8¿^8¿^8/üâ7¿^8VJ8/üâ7Ž{ +7ÔX7/üâ7Ž{ +7‘&oµ¶Ë“7h¢£·b±·¶h¢£·¶Ë“7¿^8x?-8{T»7ÔX7VJ8x?-8¤±8x?-8•¼ˆ8=A8Ý`}8•¼ˆ8tË’8VJ8x?-8GBU8fNi8¤±8•¼ˆ8GBU8¤±8¤±8¤±8=A8ÚÜœ8û8•¼ˆ8¤±8ƒ³í8Rý9ƒ³í889Ï# 9Çx9á8Å889ë¦)989—b9$9Çx9M×39Ö¾.9ë¦)9—b969èTÏ8QÖ÷8Rý9èTÏ8ƒ³í8tË’8¡ð¦8èTÏ8¡ð¦8tË’8fNi8=A8GBU8}×)·}×)·_x·_x·Þêò·^8Ë·hZq¸®K]¸æÄŒ¸,ç ¸»µ¸Üûª¸æÄŒ¸«+¿¸»µ¸FɸÎÔ–¸Üûª¸»µ¸«+¿¸Üݸ,ç ¸Üûª¸,ç ¸RcÓ¸,ç ¸¢·‚¸ÎÔ–¸Üûª¸hZq¸ÎÔ–¸RcÓ¸ÎÔ–¸ÎÔ–¸hZq¸¢·‚¸;J!¸^8Ë·®K]¸ÎÔ–¸ÎÔ–¸®K]¸,ç ¸æÄŒ¸¢·‚¸žCI¸®K]¸;J!¸^8Ë·Þêò·¬Z ¸}×)·ÔX7}×)·^8Ë·¬Z ¸/üâ7¶Ë“7^7s6¶Ë“7=A8/üâ7fNi8VJ8ÔX7Ž{ +7{T»7Ž{ +7_x·Ž{ +7b±·¶‘&oµÔX7¶Ë“7¶Ë“7¶Ë“7=A8GBU8/üâ7¿^8{T»7{T»7{T»7b±·¶/üâ7Ž{ +7_x·Ž{ +7‘&oµ‘&oµ_x·Þêò·Þêò·;J!¸®K]¸®K]¸Üûª¸hZq¸;J!¸^8Ë·¬Z ¸hZq¸žCI¸«+¿¸Üûª¸Üûª¸ÜݸFɸFɸòÃñ¸Fɸ]çû¸$¹¢ç¸Üݸ¢ç¸¢ç¸¢ç¸2- ¹2- ¹2- ¹$¹R¹2- ¹òÃñ¸òÃñ¸RcÓ¸ÜݸR¹2- ¹2- ¹òÃñ¸]çû¸]çû¸¢ç¸2- ¹R¹¢ç¸®K]¸žCI¸®K]¸ÎÔ–¸ÎÔ–¸ÎÔ–¸hZq¸ÎÔ–¸¢·‚¸¢·‚¸ÎÔ–¸ÎÔ–¸¬Z ¸¬Z ¸}×)·^7s6VJ8¶Ë“7VJ8Ž{ +7b±·¶^7s6^7s6Þêò·VJ8{T»7Ž{ +7h¢£·¶Ë“7}×)·h¢£·Þêò·h¢£·‘&oµ‘&oµb±·¶{T»7¶Ë“7h¢£·h¢£·h¢£·^8Ë·b±·¶Þêò·h¢£·_x·^8Ë·¬Z ¸^8Ë·Þêò·àB5¸ÎÔ–¸àB5¸hZq¸žCI¸¬Z ¸ÎÔ–¸ÎÔ–¸,ç ¸«+¿¸»µ¸«+¿¸]çû¸Üݸ]çû¸]çû¸]çû¸¢ç¸½A¹R¹¢ç¸Fɸ«+¿¸ÎÔ–¸Fɸ$¹ÎÔ–¸RcÓ¸Fɸ»µ¸,ç ¸¢·‚¸ÜݸÜûª¸¢·‚¸¢·‚¸àB5¸¬Z ¸;J!¸àB5¸^8Ë·^7s6_x·¬Z ¸}×)·‘&oµb±·¶¿^8VJ8¶Ë“7/üâ7{T»7/üâ7GBU8/üâ7/üâ7¿^8=A8Ý`}8fNi8=A8fNi8¡ð¦8½rÙ8á8Å8¤±8èTÏ8K’ã8QÖ÷8¤±8¡ð¦8û8½rÙ8ÚÜœ8tË’8=A8GBU8tË’8Ý`}8•¼ˆ8/üâ7=A8VJ8x?-8GBU8¶Ë“7GBU8¶Ë“7}×)·Ž{ +7Ž{ +7¶Ë“7/üâ7{T»7b±·¶^7s6¬Z ¸¢·‚¸^8Ë·¬Z ¸àB5¸ÎÔ–¸¬Z ¸hZq¸®K]¸hZq¸hZq¸®K]¸®K]¸Þêò·®K]¸hZq¸ÎÔ–¸Üûª¸,ç ¸ÎÔ–¸RcÓ¸¢ç¸R¹òÃñ¸òÃñ¸»µ¸FɸÎÔ–¸Üûª¸ÎÔ–¸hZq¸hZq¸;J!¸}×)·^8Ë·_x·¬Z ¸}×)·_x·Þêò·Ž{ +7}×)·Ž{ +7=A8fNi8tË’8/üâ7GBU8{T»7fNi8GBU8•¼ˆ8û8á8Å8û8¤±8½rÙ8K’ã8½rÙ8Çx9ƒ³í8á8Å8½rÙ8¡ð¦8¤±8¤±8½rÙ8½rÙ8ƒ³í8ƒ³í8K’ã8½rÙ869¤±8èTÏ8ƒ³í8ƒ³í8û8¤±8K’ã8¤±8¤±8½rÙ8èTÏ8á8Å8Rý9QÖ÷8K’ã8ÚÜœ8á8Å8fNi8=A8tË’8{T»7^7s6}×)·_x·h¢£·_x·ÎÔ–¸àB5¸¬Z ¸Þêò·hZq¸^8Ë·®K]¸¬Z ¸žCI¸;J!¸^8Ë·}×)·;J!¸;J!¸h¢£·_x·^8Ë·Þêò·b±·¶žCI¸ÎÔ–¸hZq¸»µ¸,ç ¸àB5¸¬Z ¸;J!¸^8Ë·‘&oµ¶Ë“7h¢£·‘&oµ_x·_x·‘&oµ¬Z ¸Þêò·Þêò·¬Z ¸}×)·ÔX7b±·¶{T»7ÔX7ÔX7¿^8{T»7¿^8VJ8=A8¿^8Ý`}8=A8Ý`}8•¼ˆ8•¼ˆ8ƒ³í8¡ð¦8Ý`}8tË’8û8¤±8û8¡ð¦8GBU8Ý`}8fNi8¿^8Ž{ +7¶Ë“7/üâ7‘&oµŽ{ +7b±·¶h¢£·Þêò·Þêò·¬Z ¸‘&oµ^8Ë·‘&oµb±·¶_x·ÔX7‘&oµ}×)·b±·¶‘&oµ_x·h¢£·}×)·Þêò·¢·‚¸Þêò·^8Ë·¬Z ¸àB5¸àB5¸ÎÔ–¸ÎÔ–¸ÎÔ–¸Üûª¸¢·‚¸Üûª¸Üûª¸òÃñ¸«+¿¸Fɸ¢·‚¸Üûª¸»µ¸Üݸ»µ¸RcÓ¸Fɸ»µ¸,ç ¸ÎÔ–¸Üûª¸,ç ¸RcÓ¸»µ¸«+¿¸¢ç¸]çû¸«+¿¸«+¿¸«+¿¸Üûª¸FɸÎÔ–¸hZq¸Þêò·;J!¸‘&oµàB5¸}×)·^7s6ÔX7x?-8{T»7•¼ˆ8•¼ˆ8/üâ7á8Å8á8Å8•¼ˆ8¡ð¦8¡ð¦8Ý`}8¡ð¦8½rÙ8á8Å8¤±8èTÏ8½rÙ8èTÏ8¤±8èTÏ8¤±8Ý`}8fNi8{T»7/üâ7¶Ë“7¿^8ÔX7‘&oµ‘&oµb±·¶‘&oµ}×)·¶Ë“7/üâ7^7s6b±·¶ÔX7VJ8Ž{ +7{T»7ÔX7^8Ë·}×)·;J!¸Þêò·®K]¸»µ¸Üûª¸]çû¸»µ¸òÃñ¸«+¿¸¢ç¸R¹R¹$¹¢ç¸.ƒ!¹1š&¹Ç±+¹1š&¹ïV¹$¹ïV¹$¹¢ç¸]çû¸òÃñ¸¢ç¸«+¿¸òÃñ¸R¹«+¿¸»µ¸¢·‚¸hZq¸ÎÔ–¸¢·‚¸àB5¸žCI¸¢·‚¸;J!¸_x·h¢£·Þêò·_x·b±·¶h¢£·^7s6b±·¶^7s6ÔX7‘&oµ¶Ë“7Ž{ +7VJ8/üâ7tË’8/üâ7VJ8Ý`}8GBU8•¼ˆ8á8Å8GBU8Ý`}8¤±8û8û8K’ã8½rÙ8ƒ³í8tË’8•¼ˆ8fNi8=A8fNi8x?-8VJ8¿^8‘&oµ‘&oµ‘&oµb±·¶‘&oµb±·¶Ž{ +7}×)·}×)·‘&oµ¬Z ¸h¢£·®K]¸žCI¸;J!¸»µ¸®K]¸^7s6Þêò·^8Ë·Þêò·àB5¸hZq¸¢·‚¸hZq¸ÎÔ–¸àB5¸àB5¸ÎÔ–¸Üûª¸«+¿¸¢·‚¸¢·‚¸,ç ¸»µ¸FɸFɸRcÓ¸Üݸ,ç ¸ÎÔ–¸ÎÔ–¸ÎÔ–¸æÄŒ¸hZq¸àB5¸®K]¸žCI¸ÎÔ–¸hZq¸Þêò·Þêò·¬Z ¸¬Z ¸b±·¶/üâ7_x·‘&oµÔX7¶Ë“7=A8GBU8VJ8ÔX7Ž{ +7/üâ7¿^8Ý`}8VJ8=A8¤±8á8Å8¡ð¦8ÚÜœ8•¼ˆ8tË’8fNi8fNi8tË’8GBU8x?-8fNi8•¼ˆ8û8û8K’ã8û8á8Å8½rÙ8ƒ³í8tË’8VJ8û8¡ð¦8x?-8•¼ˆ8¿^8ÚÜœ8ÚÜœ8fNi8ÚÜœ8¶Ë“7¿^8VJ8‘&oµVJ8¶Ë“7¬Z ¸b±·¶^8Ë·Þêò·hZq¸¬Z ¸;J!¸àB5¸Þêò·h¢£·,ç ¸žCI¸àB5¸®K]¸,ç ¸RcÓ¸,ç ¸Fɸ»µ¸»µ¸RcÓ¸«+¿¸»µ¸hZq¸,ç ¸Üûª¸Üûª¸,ç ¸RcÓ¸¢·‚¸ÎÔ–¸,ç ¸;J!¸®K]¸,ç ¸;J!¸¬Z ¸žCI¸h¢£·}×)·¬Z ¸‘&oµ_x·h¢£·b±·¶/üâ7^8Ë·h¢£·‘&oµ}×)·¶Ë“7¶Ë“7ÚÜœ8¤±8•¼ˆ8á8Å8û8Ý`}8èTÏ8½rÙ8QÖ÷8QÖ÷8Rý9QÖ÷8Rý969á8Å8û8¤±8á8Å8Ý`}8tË’8èTÏ8á8Å8á8Å8á8Å8Rý9èTÏ8¡ð¦8¤±8¤±8á8Å8èTÏ8¡ð¦8fNi8GBU8GBU8=A8VJ8{T»7/üâ7VJ8VJ8GBU8VJ8/üâ7/üâ7^7s6VJ8¿^8ÔX7fNi8b±·¶ÔX7ÔX7}×)·}×)·}×)·‘&oµ/üâ7‘&oµ‘&oµŽ{ +7‘&oµÔX7‘&oµ{T»7ÔX7‘&oµ^8Ë·h¢£·®K]¸;J!¸h¢£·‘&oµÞêò·h¢£·àB5¸®K]¸;J!¸h¢£·Þêò·}×)·¬Z ¸h¢£·Þêò·h¢£·h¢£·^8Ë·h¢£·Þêò·^7s6ÔX7ÔX7/üâ7/üâ7fNi8VJ8¶Ë“7/üâ7¶Ë“7¶Ë“7_x·ÔX7VJ8VJ8=A8VJ8ÔX7Ž{ +7/üâ7¶Ë“7¿^8¿^8{T»7ÔX7¶Ë“7h¢£·b±·¶‘&oµ;J!¸}×)·_x·h¢£·^8Ë·àB5¸^8Ë·_x·àB5¸;J!¸;J!¸Þêò·Þêò·àB5¸®K]¸àB5¸®K]¸àB5¸¬Z ¸ÎÔ–¸žCI¸,ç ¸Üûª¸ÎÔ–¸,ç ¸,ç ¸RcÓ¸FɸÜݸïV¹Àl¹2- ¹òÃñ¸¢ç¸½A¹$¹¢ç¸òÃñ¸]çû¸]çû¸R¹½A¹$¹$¹]çû¸¢ç¸¢ç¸Fɸ]çû¸RcÓ¸òÃñ¸®K]¸ÎÔ–¸ÎÔ–¸,ç ¸žCI¸h¢£·¬Z ¸¬Z ¸_x·_x·^7s6{T»7ÔX7ÔX7b±·¶b±·¶^7s6b±·¶ÔX7}×)·¶Ë“7¶Ë“7^7s6‘&oµ^7s6/üâ7Ž{ +7¶Ë“7^7s6/üâ7{T»7^7s6¶Ë“7{T»7GBU8tË’8¡ð¦8û8á8Å8ÚÜœ8á8Å889½rÙ8tË’8èTÏ8K’ã8½rÙ8èTÏ8¡ð¦869¤±8¤±8K’ã8û8fNi8èTÏ8GBU8GBU8¿^8^7s6{T»7}×)·b±·¶^7s6h¢£·Þêò·¬Z ¸àB5¸hZq¸žCI¸b±·¶_x·}×)·^8Ë·Þêò·^8Ë·}×)·^8Ë·b±·¶b±·¶h¢£·b±·¶‘&oµ_x·}×)·}×)·_x·¶Ë“7¶Ë“7^7s6ÔX7¿^8fNi8VJ8=A8•¼ˆ8=A8fNi8GBU8Ý`}8tË’8VJ8GBU8•¼ˆ8¿^8ÚÜœ8•¼ˆ8Ý`}8=A8fNi8ÚÜœ8•¼ˆ8•¼ˆ8Ý`}8ÚÜœ8•¼ˆ8tË’8û8èTÏ8•¼ˆ8èTÏ8K’ã8á8Å8tË’8Ý`}8Ý`}8Ý`}8¡ð¦8tË’8û8tË’8•¼ˆ8èTÏ8tË’8¤±8¡ð¦8¡ð¦8GBU8VJ8VJ8=A8tË’8ÚÜœ8=A8GBU8/üâ7=A8GBU8GBU8Ý`}8fNi8ÔX7VJ8GBU8fNi8¿^8¿^8{T»7¿^8b±·¶¬Z ¸;J!¸¬Z ¸àB5¸žCI¸¬Z ¸àB5¸®K]¸,ç ¸žCI¸hZq¸æÄŒ¸®K]¸žCI¸;J!¸®K]¸hZq¸;J!¸žCI¸àB5¸^8Ë·¬Z ¸h¢£·ÎÔ–¸žCI¸^8Ë·àB5¸¬Z ¸Þêò·;J!¸;J!¸žCI¸^8Ë·Þêò·^8Ë·¬Z ¸h¢£·àB5¸¬Z ¸}×)·Ž{ +7Ž{ +7}×)·¶Ë“7b±·¶Þêò·ÔX7¶Ë“7}×)·x?-8/üâ7^7s6Ž{ +7¿^8¿^8Ž{ +7ÔX7x?-8¶Ë“7ÔX7¶Ë“7¿^8‘&oµ}×)·^7s6‘&oµh¢£·b±·¶}×)·^8Ë·Þêò·®K]¸‘&oµÞêò·àB5¸h¢£·h¢£·ÎÔ–¸ÎÔ–¸ÎÔ–¸;J!¸¬Z ¸^8Ë·¬Z ¸_x·àB5¸hZq¸,ç ¸¢·‚¸Üûª¸,ç ¸,ç ¸RcÓ¸Fɸ»µ¸»µ¸»µ¸ÜݸÎÔ–¸RcÓ¸]çû¸»µ¸FɸFɸ,ç ¸RcÓ¸Üûª¸Üûª¸¢·‚¸æÄŒ¸ÎÔ–¸,ç ¸àB5¸;J!¸,ç ¸Üûª¸¢·‚¸àB5¸Þêò·_x·b±·¶_x·}×)·Ž{ +7ÔX7Ž{ +7^7s6Ž{ +7_x·}×)·Ž{ +7b±·¶^8Ë·b±·¶}×)·¬Z ¸_x·b±·¶}×)·ÔX7ÔX7/üâ7=A8Ý`}8ÚÜœ8¤±8•¼ˆ8¡ð¦8¤±8á8Å8û8û8á8Å8K’ã8û8á8Å8ÚÜœ8û8ƒ³í8ÚÜœ8ÚÜœ8û8•¼ˆ8GBU8•¼ˆ8tË’8¡ð¦8Ý`}8ÚÜœ8fNi8¿^8=A8ÚÜœ8GBU8fNi8GBU8ÔX7ÔX7‘&oµŽ{ +7‘&oµb±·¶h¢£·‘&oµÞêò·;J!¸®K]¸,ç ¸ÎÔ–¸RcÓ¸ÜݸRcÓ¸¢ç¸RcÓ¸¢ç¸ïV¹ÜݸÜݸ$¹]çû¸ïV¹˜â5¹‚@¹jJJ¹˜â5¹•eO¹Ç±+¹R¹½A¹ÜݸRcÓ¸2- ¹2- ¹»µ¸Fɸ,ç ¸ÎÔ–¸ÎÔ–¸®K]¸ÎÔ–¸¢·‚¸àB5¸ÎÔ–¸«+¿¸RcÓ¸Üûª¸,ç ¸®K]¸žCI¸àB5¸^8Ë·‘&oµ^7s6b±·¶Ž{ +7ÔX7=A8fNi8GBU8fNi8•¼ˆ8ÚÜœ8û8á8Å8û8tË’8û8Rý9QÖ÷8½rÙ8á8Å8K’ã8èTÏ8½rÙ8èTÏ8¤±8èTÏ8èTÏ8•¼ˆ8•¼ˆ8GBU8•¼ˆ8tË’8fNi8tË’8tË’8tË’8GBU8Ý`}8tË’8Ý`}8•¼ˆ8=A8/üâ7b±·¶¶Ë“7Ž{ +7x?-8{T»7¶Ë“7{T»7Ž{ +7b±·¶Ž{ +7^7s6}×)·Þêò·¬Z ¸‘&oµŽ{ +7^7s6¶Ë“7}×)·‘&oµ^8Ë·‘&oµ_x·¬Z ¸àB5¸àB5¸Üûª¸àB5¸hZq¸hZq¸^8Ë·;J!¸;J!¸^8Ë·¬Z ¸¬Z ¸Þêò·}×)·b±·¶b±·¶Ž{ +7}×)·Ž{ +7¿^8¶Ë“7/üâ7Ž{ +7ÔX7¶Ë“7b±·¶_x·^7s6VJ8x?-8á8Å8¡ð¦8tË’8¤±8¡ð¦8tË’8û8tË’8¡ð¦8û8½rÙ8ÚÜœ8¡ð¦8¤±8û8K’ã8û8K’ã8tË’8tË’8èTÏ8ÚÜœ8=A8/üâ7=A8¿^8¿^8GBU8ÔX7b±·¶¶Ë“7¶Ë“7¶Ë“7/üâ7/üâ7GBU8ÔX7‘&oµ^7s6Þêò·_x·}×)·h¢£·Þêò·¬Z ¸^8Ë·^8Ë·h¢£·}×)·b±·¶Þêò·ÔX7^7s6¶Ë“7^8Ë·_x·Þêò·àB5¸^8Ë·h¢£·^8Ë·Þêò·žCI¸h¢£·^8Ë·¬Z ¸Þêò·^7s6_x·^8Ë·‘&oµh¢£·_x·àB5¸;J!¸®K]¸¬Z ¸h¢£·àB5¸®K]¸ÎÔ–¸žCI¸®K]¸ÎÔ–¸àB5¸_x·^8Ë·b±·¶Ž{ +7^7s6Ž{ +7^7s6VJ8GBU8x?-8tË’8GBU8x?-8•¼ˆ8Ý`}8=A8VJ8•¼ˆ8¿^8GBU8Ý`}8ÚÜœ8èTÏ8û8½rÙ8½rÙ889QÖ÷8ƒ³í869Rý9QÖ÷8Rý969ë¦)9—b9—b9Çx9Çx9M9Ï# 9Ï# 9K’ã8û8èTÏ8¡ð¦8û8tË’8fNi8/üâ7VJ8ÔX7VJ8^7s6¿^8b±·¶}×)·_x·b±·¶_x·Þêò·^8Ë·Þêò·¬Z ¸^8Ë·Ž{ +7}×)·_x·_x·;J!¸_x·h¢£·žCI¸¬Z ¸žCI¸àB5¸®K]¸;J!¸àB5¸¬Z ¸žCI¸_x·¬Z ¸¬Z ¸Þêò·Þêò·àB5¸_x·_x·}×)·ÔX7¿^8^7s6Ž{ +7/üâ7=A8fNi8GBU8/üâ7Ý`}8•¼ˆ8û8K’ã8½rÙ8èTÏ8á8Å8á8Å8ƒ³í869Ö¾.969—b9Î >9Çx969M9—b9—b9M×39$9½rÙ8ƒ³í8K’ã8Ï# 989M9Ï# 9Rý9Ï# 9QÖ÷8Ï# 9½rÙ8QÖ÷8èTÏ8û8•¼ˆ8ÚÜœ8Ý`}8tË’8•¼ˆ8û8•¼ˆ8•¼ˆ8x?-8fNi8x?-8/üâ7ÔX7=A8x?-8‘&oµ¶Ë“7Ž{ +7ÔX7‘&oµb±·¶¬Z ¸h¢£·h¢£·¬Z ¸Þêò·^8Ë·;J!¸^8Ë·_x·Ž{ +7h¢£·h¢£·}×)·‘&oµ‘&oµÞêò·_x·‘&oµ^8Ë·/üâ7ÔX7¶Ë“7/üâ7GBU8/üâ7ÔX7¶Ë“7¶Ë“7x?-8x?-8GBU8fNi8¿^8¡ð¦8Ý`}8¡ð¦8VJ8tË’8ÚÜœ8=A8¡ð¦8Ý`}8¤±8K’ã8K’ã8Rý969Çx9K’ã8Rý989QÖ÷8QÖ÷889Rý9ƒ³í8M9QÖ÷8QÖ÷8—b9—b969Rý9QÖ÷8½rÙ8Rý9K’ã869ƒ³í8½rÙ8Ï# 9ƒ³í8û8¤±8û8x?-8Ý`}8GBU8¿^8x?-8=A8ÔX7Ž{ +7h¢£·h¢£·h¢£·;J!¸ÎÔ–¸Þêò·àB5¸®K]¸Þêò·žCI¸àB5¸ÎÔ–¸«+¿¸ÎÔ–¸,ç ¸FɸRcÓ¸æÄŒ¸,ç ¸æÄŒ¸»µ¸æÄŒ¸ÎÔ–¸»µ¸žCI¸žCI¸žCI¸hZq¸¢·‚¸žCI¸àB5¸hZq¸h¢£·^8Ë·;J!¸^8Ë·;J!¸h¢£·b±·¶¿^8^7s6^7s6‘&oµ/üâ7¶Ë“7¿^8Ý`}8¿^8VJ8GBU8¿^8x?-8=A8GBU8=A8VJ8Ž{ +7¿^8{T»7VJ8GBU8x?-8Ý`}8fNi8K’ã8á8Å8á8Å8ÚÜœ8Ý`}8tË’8¡ð¦8½rÙ8ÚÜœ8èTÏ8½rÙ8K’ã8QÖ÷8á8Å8á8Å8ƒ³í8½rÙ8tË’8K’ã8QÖ÷8èTÏ8QÖ÷8èTÏ8á8Å8ÚÜœ8•¼ˆ8¡ð¦8Ý`}8fNi8QÖ÷8½rÙ8K’ã8èTÏ8û8èTÏ8½rÙ8èTÏ8¡ð¦8á8Å8•¼ˆ8•¼ˆ8=A8VJ8¿^8=A8=A8/üâ7Ž{ +7^7s6‘&oµ{T»7/üâ7b±·¶h¢£·^8Ë·^8Ë·¬Z ¸Þêò·®K]¸^8Ë·®K]¸¢·‚¸_x·b±·¶b±·¶Ž{ +7b±·¶}×)·VJ8ÔX7^7s6tË’8Ý`}8tË’8tË’8•¼ˆ8èTÏ8ÚÜœ8ÚÜœ8á8Å8ƒ³í8Rý969M9ë¦)9ƒ³í8QÖ÷86969½rÙ8ƒ³í8ƒ³í8Ï# 989QÖ÷8èTÏ869M989$9—b9QÖ÷8Rý96969Çx9ƒ³í8Rý9ƒ³í8û8¡ð¦8¤±8¡ð¦8¤±8½rÙ8ÚÜœ8¡ð¦8tË’8GBU8=A8¿^8x?-8/üâ7Ž{ +7¿^8¶Ë“7‘&oµh¢£·^8Ë·h¢£·¬Z ¸ÎÔ–¸hZq¸®K]¸®K]¸žCI¸ÎÔ–¸,ç ¸;J!¸®K]¸«+¿¸ÎÔ–¸»µ¸»µ¸Üûª¸æÄŒ¸,ç ¸«+¿¸Üûª¸»µ¸Üûª¸«+¿¸¢ç¸ÜݸÜݸ,ç ¸»µ¸»µ¸Üûª¸FɸòÃñ¸»µ¸RcÓ¸RcÓ¸¢·‚¸hZq¸®K]¸žCI¸Þêò·¬Z ¸Ž{ +7ÔX7¶Ë“7Ž{ +7ÔX7¿^8¿^8GBU8•¼ˆ8•¼ˆ8Ý`}8GBU8=A8•¼ˆ8fNi8¤±8•¼ˆ8•¼ˆ8fNi8ÚÜœ8x?-8•¼ˆ8¡ð¦8•¼ˆ8ÚÜœ8fNi8/üâ7fNi8Ý`}8VJ8¿^8VJ8x?-8x?-8‘&oµ_x·_x·b±·¶b±·¶ÎÔ–¸hZq¸®K]¸Üûª¸Fɸ®K]¸àB5¸ÎÔ–¸ÎÔ–¸Üûª¸RcÓ¸Fɸ«+¿¸òÃñ¸2- ¹]çû¸R¹Àl¹R¹]çû¸Üݸ]çû¸2- ¹.ƒ!¹½A¹Àl¹ïV¹.ƒ!¹Ìû:¹Àl¹2- ¹.ƒ!¹Ç±+¹Àl¹ïV¹Ç±+¹‚@¹‚@¹Ç±+¹¸/E¹‚@¹¸/E¹•eO¹‚@¹ëÉ0¹˜â5¹.ƒ!¹.ƒ!¹2- ¹Àl¹Ç±+¹½A¹òÃñ¸$¹]çû¸¢ç¸2- ¹2- ¹½A¹]çû¸RcÓ¸RcÓ¸«+¿¸ÎÔ–¸Üûª¸Üûª¸ÎÔ–¸æÄŒ¸žCI¸®K]¸žCI¸b±·¶¶Ë“7VJ8/üâ7/üâ7/üâ7{T»7x?-8ÔX7¶Ë“7}×)·Ž{ +7‘&oµÔX7h¢£·^8Ë·|Pd|1|24600|2013-282T15:32:21.397 €[ 8€[ 8=[q8€[ 8´C58ãbx7‡ìò7Mx +·Mx +·Ú··6úXo5Mx +·ÕR»·ÓÐX·ˆúâ·ÕR»·ÕR»·¢>-¸‘Mi¸‚I¸qAU¸‘Mi¸Ë’¸‘Mi¸Ë’¸5ð¦¸+¼ˆ¸v8ŸoÜœ¸{Tϸ¹¹á‘ã¸oÜœ¸Ë’¸<-¸ˆúâ·ÕR»·¢>-¸Ë’¸oÜœ¸7±¸5ð¦¸Ë’¸7±¸5ð¦¸5ð¦¸á‘ã¸á‘㸹ab¹´¦)¹ð8¹Y$¹à7¹³í¸¹ÐL¹à7¹ý¹¹v8Ÿ7±¸v8Ÿ{Tϸ{Tϸv8ŸË’¸oÜœ¸7±¸V»¸5ð¦¸`}¸‚I¸ë]¸ë]¸¢>-¸ÕR»·Ê“·ÓÐX·‚I¸Mx +·Ú··6¤£7úXo5Mx +·ÀÚ)7‡ìò7Ú··6Ú··6:Ë7¤£7:Ë7€[ 8:Ë7¤£7‡ìò7=[q8˜ç 8sDI8K!8úXo5‡ìò7:Ë7ãbx7¤£7´C58€*s¶€*s¶ÓÐX·Ê“·ÓÐX·ÕR»·¢>-¸¢>-¸Ê“·<-¸qAU¸qAU¸qAU¸`}¸Ë’¸³í¸5ð¦¸V»¸{TϸV»¸äÕ÷¸5ð¦¸V»¸7±¸7±¸oÜœ¸5ð¦¸5ð¦¸{Tϸ7±¸7±¸oÜœ¸7±¸QrÙ¸V»¸5ð¦¸7±¸V»¸Ë’¸7±¸Ë’¸oÜœ¸QrÙ¸³í¸äÕ÷¸äÕ÷¸äÕ÷¸³í¸ý¹V»¸äÕ÷¸äÕ÷¸™# ¹à7¹¹QrÙ¸5ð¦¸7±¸Ë’¸‚I¸<-¸ˆúâ·ÓÐX·qAU¸‚I¸‚I¸¢>-¸‚I¸<-¸qAU¸¢>-¸‚I¸<-¸ÓÐX·‘Mi¸‚I¸Mx +·ˆúâ·ë]¸ÓÐX·Mx +·Ê“·Mx +·Ú··6ãbx7¤£7ƒL]8´C58´C58sDI8‡ìò7:Ë7K!8¸‚8sDI8ƒL]8QÅŒ8'µ89Õ–8QÅŒ8=[q89Õ–89Õ–8=[q8K!8¸‚8‡ìò7¸‚8Güª8ƒL]8sDI8=[q8QÅŒ8=[q8´C58ÀÚ)7ãbx7€[ 8€[ 8‡ìò7Ê“·úXo5€*s¶€*s¶ë]¸`}¸¢>-¸ˆúâ·¢>-¸ë]¸ë]¸¢>-¸‘Mi¸Ë’¸`}¸5ð¦¸7±¸Ë’¸7±¸oÜœ¸5ð¦¸Ë’¸5ð¦¸v8Ÿ7±¸{Tϸá‘ã¸{TϸQrÙ¸á‘ã¸7±¸v8ŸV»¸{Tϸ¹á‘ã¸7±¸7±¸7±¸QrÙ¸{Tϸ‘Mi¸oÜœ¸{TϸË’¸V»¸V»¸+¼ˆ¸¢>-¸<-¸ÕR»·‚I¸`}¸qAU¸`}¸<-¸Ê“·ˆúâ·¢>-¸€*s¶úXo5€*s¶úXo5ÀÚ)7úXo5úXo5ÓÐX·úXo5¤£7€*s¶úXo5¤£7‡ìò7úXo5K!8K!8ÀÚ)7Ê“·Ú··6Mx +·ÀÚ)7ÀÚ)7ÀÚ)7=[q8€[ 8€[ 8´C58ƒL]8Güª8QÅŒ8,¿89Õ–8QÅŒ8€[ 89Õ–8´C58=[q8QÅŒ8G‚Ý8Güª8¾cÓ8üFÉ8,¿8G‚Ý8üFÉ8'µ8Güª8,¿8,¿8'µ8üFÉ8Güª8'µ8=[q8=[q8=[q8=[q8€[ 8¤£7¤£7¸‚8:Ë7ƒL]8¸‚8€[ 8Ú··6Mx +·ë]¸úXo5`}¸<-¸ë]¸ÓÐX·ë]¸ë]¸ˆúâ·Ê“·ÓÐX·Ê“·€*s¶ë]¸ˆúâ·Mx +·ãbx7ÓÐX·ÓÐX·Ê“·Ê“·úXo5Ê“·ÀÚ)7‡ìò7úXo5€*s¶Ú··6‡ìò7K!8K!8‡ìò7´C58QÅŒ8Güª89Õ–8˜ç 8ƒL]8sDI8¸‚8˜ç 8´C58K!8=[q8Güª8‡ìò7˜ç 89Õ–8ƒL]8˜ç 89Õ–8=[q8'µ8¸‚8¸‚8üFÉ89Õ–89Õ–8ƒL]8,¿8QÅŒ8´C58=[q8sDI8ƒL]8ƒL]8:Ë7=[q8˜ç 89Õ–8ƒL]8sDI89Õ–8´C58€[ 8=[q8‡ìò7ÓÐX·ÕR»·ÀÚ)7ÕR»·Ú··6¤£7ÕR»·ë]¸ÕR»·€*s¶€*s¶ˆúâ·Mx +·€*s¶ÓÐX·Ê“·Mx +·ÓÐX·úXo5Ê“·Ê“·qAU¸qAU¸<-¸qAU¸<-¸<-¸qAU¸`}¸`}¸Ë’¸‘Mi¸Ë’¸Ë’¸7±¸‘Mi¸`}¸‘Mi¸¢>-¸qAU¸ÕR»·Mx +·‚I¸¢>-¸Ê“·ë]¸ÀÚ)7ÕR»·€*s¶ë]¸ë]¸€*s¶ˆúâ·ë]¸ÓÐX·ë]¸‚I¸ë]¸‚I¸oÜœ¸ÕR»·ÓÐX·Mx +·ãbx7:Ë7¤£7€[ 8¤£7´C589Õ–8QÅŒ89Õ–8=[q8K!8sDI8´C58=[q8¸‚8‡ìò7´C58QÅŒ8€[ 8=[q89Õ–8¸‚8sDI8ÀÚ)7K!8úXo5ÀÚ)7¤£7¤£7:Ë7‡ìò7¤£7€[ 8:Ë7sDI8¸‚8ƒL]8üFÉ8QÅŒ8¸‚8K!8:Ë7K!8€[ 8:Ë7‡ìò7€*s¶ÀÚ)7ˆúâ·ÀÚ)7€*s¶úXo5Ú··6ãbx7Ú··6€*s¶Mx +·úXo5ÕR»·Mx +·€*s¶ÕR»·ãbx7¤£7Ú··6ÀÚ)7Ê“·ÀÚ)7¤£7€*s¶Ê“·Mx +·€*s¶úXo5ãbx7¤£7‡ìò7K!8ãbx7:Ë79Õ–8K!8‡ìò7:Ë7€[ 8ãbx7Ú··6ÀÚ)7¤£7¤£7:Ë7ãbx7ãbx7ãbx7¤£7:Ë7sDI8‡ìò7´C58€[ 8ãbx7€[ 8sDI8:Ë7:Ë7‡ìò7:Ë7€[ 8‡ìò7ÀÚ)7¤£7QÅŒ8€[ 8ƒL]8K!8K!8K!8QÅŒ8¸‚8¸‚8´C58´C58´C58QÅŒ8ƒL]8´C58sDI8K!8ãbx7´C58€[ 8ÀÚ)7ãbx7Mx +·ˆúâ·ë]¸Ë’¸‘Mi¸‚I¸Ë’¸‘Mi¸qAU¸Ë’¸`}¸5ð¦¸7±¸oÜœ¸äÕ÷¸V»¸³í¸‘x¹à7¹à7¹ab¹¹ý¹á‘㸴¦)¹äÕ÷¸äÕ÷¸á‘㸑x¹Ÿ¾.¹äÕ÷¸‘x¹´¦)¹à7¹V»¸á‘ã¸ý¹ÐL¹™# ¹¹v8Ÿ5ð¦¸Ë’¸5ð¦¸Ë’¸7±¸V»¸7±¸5𦸑Mi¸5ð¦¸Ë’¸5ð¦¸V»¸`}¸<-¸<-¸‘Mi¸Ë’¸7±¸Ë’¸‘Mi¸oÜœ¸¢>-¸5ð¦¸5ð¦¸<-¸‘Mi¸Ë’¸5ð¦¸7±¸Ë’¸‘Mi¸qAU¸ˆúâ·Mx +·ÕR»·Ê“·ÀÚ)7¤£7ãbx7ÀÚ)7€*s¶:Ë7ÀÚ)7ãbx7¤£7K!8€[ 89Õ–8:Ë7sDI8sDI8€[ 8sDI8¸‚8¸‚8´C58QÅŒ89Õ–8QÅŒ8€[ 8:Ë7ãbx7‡ìò7‡ìò7sDI8¸‚8sDI8K!8sDI8=[q8=[q8sDI8sDI8€[ 8€*s¶úXo5‚I¸Mx +·Mx +·ÕR»·ˆúâ·ë]¸ÕR»·‚I¸¢>-¸¢>-¸<-¸ë]¸‚I¸ÕR»·‘Mi¸‘Mi¸ë]¸qAU¸‚I¸ÓÐX·ÕR»·ˆúâ·ë]¸qAU¸qAU¸ÕR»·úXo5ÓÐX·ÕR»·ë]¸‚I¸oÜœ¸ë]¸ˆúâ·ë]¸ˆúâ·¢>-¸‚I¸Ê“·úXo5ÓÐX·ˆúâ·úXo5€*s¶:Ë7Ú··6€[ 8€[ 8K!8‡ìò7úXo5€[ 8K!8:Ë7K!8ãbx7ƒL]8€[ 8‡ìò7‡ìò7¸‚8=[q8¸‚8sDI8QÅŒ89Õ–8'µ8¸‚8ƒL]89Õ–8´C58sDI8´C58¸‚8€[ 8sDI8sDI8‡ìò7¤£7´C58:Ë7ãbx7ÓÐX·ÕR»·€*s¶Mx +·ÓÐX·ÕR»·ë]¸‚I¸ÕR»·ÕR»·ë]¸¢>-¸ë]¸¢>-¸Ë’¸oÜœ¸5ð¦¸5ð¦¸v8ŸV»¸á‘ã¸ÐL¹äÕ÷¸5ð¦¸Ë’¸V»¸7±¸Ë’¸7±¸Ë’¸<-¸qAU¸ˆúâ·Ë’¸Ë’¸Ë’¸5ð¦¸Qrٸ˒¸Ë’¸7±¸v8Ÿ5ð¦¸<-¸`}¸ÕR»·ˆúâ·‚I¸ÕR»·¢>-¸qAU¸+¼ˆ¸ë]¸Ê“·ÓÐX·Ê“·ÓÐX·¤£7K!8€[ 8Ú··6ãbx7´C58€*s¶sDI8€[ 8´C58´C58úXo5€[ 8K!8ãbx7K!8=[q8'µ8Güª8=[q8sDI8˜ç 8¸‚8ƒL]8¾cÓ8˜ç 8‡ìò7ƒL]8¸‚8´C58ƒL]8¤£7Ú··6sDI8Ú··6Mx +·Ú··6ãbx7úXo5ÓÐX·ÓÐX·Ú··6€*s¶Ú··6¤£7€*s¶ãbx7‡ìò7:Ë7ÀÚ)7ãbx7K!8ãbx7ÀÚ)7ãbx7Mx +·Ú··6ÀÚ)7‚I¸€*s¶ÕR»·‚I¸ë]¸ë]¸ÕR»·Ê“·ÕR»·Mx +·<-¸¢>-¸¢>-¸¢>-¸ë]¸`}¸`}¸¢>-¸ˆúâ·ˆúâ·Ë’¸‘Mi¸5ð¦¸V»¸Ë’¸Ë’¸V»¸5ð¦¸oÜœ¸5ð¦¸V»¸{Tϸv8ŸV»¸QrÙ¸QrÙ¸ý¹³í¸QrÙ¸oÜœ¸ý¹¹v8Ÿv8Ÿ5ð¦¸v8ŸQrٸ˒¸‘Mi¸+¼ˆ¸<-¸ë]¸qAU¸<-¸ˆúâ·<-¸úXo5ÕR»·úXo5ÕR»·ãbx7K!8úXo5ãbx7¤£7¤£7:Ë7´C58:Ë7‡ìò7=[q8¸‚8sDI8K!8QÅŒ8´C58€[ 8¸‚8QÅŒ8sDI8:Ë7‡ìò7:Ë7Ú··6‡ìò7´C58ƒL]8¸‚8sDI8€[ 8ƒL]8˜ç 89Õ–8,¿89Õ–8˜ç 8¸‚8üFÉ8˜ç 89Õ–8ƒL]8K!8=[q8¸‚8:Ë7:Ë7€[ 8Mx +·ÓÐX·ÀÚ)7Ú··6¤£7:Ë7€*s¶€*s¶ÓÐX·Mx +·<-¸‘Mi¸Ë’¸Ë’¸`}¸‘Mi¸7±¸‘Mi¸‘Mi¸v8Ÿv8Ÿ{Tϸv8Ÿ7±¸7±¸oÜœ¸qAU¸‚I¸qAU¸‘Mi¸`}¸Ë’¸¢>-¸qAU¸qAU¸Ê“·ë]¸oÜœ¸Ë’¸Ë’¸¢>-¸Ë’¸5ð¦¸5ð¦¸Ë’¸Ë’¸‘Mi¸qAU¸‘Mi¸‘Mi¸‘Mi¸‘Mi¸oÜœ¸qAU¸‘Mi¸Ë’¸Ë’¸5ð¦¸<-¸ë]¸ÓÐX·ÕR»·€*s¶ãbx7ÀÚ)7ãbx7ÀÚ)7ÀÚ)7´C58€[ 8€[ 8K!8´C58‡ìò7:Ë7¤£7¤£7¤£7¤£7:Ë7:Ë7úXo5ÀÚ)7‡ìò7ãbx7ÕR»·Ê“·Ê“·¢>-¸qAU¸ë]¸ë]¸Ê“·ÕR»·Ê“·Ë’¸<-¸qAU¸Ë’¸Ë’¸V»¸`}¸`}¸<-¸‘Mi¸‘Mi¸Ë’¸Ë’¸5ð¦¸`}¸Ë’¸oÜœ¸‘Mi¸Ë’¸ë]¸ˆúâ·qAU¸ˆúâ·¢>-¸<-¸<-¸`}¸‚I¸Ê“·ÕR»·ÕR»·Mx +·ÀÚ)7€[ 8úXo5úXo5ÓÐX·:Ë7ÀÚ)7:Ë7sDI8€[ 8K!8K!8´C58ƒL]8K!8K!8ƒL]8sDI89Õ–8K!8K!8üFÉ8¸‚8ƒL]8€[ 8€[ 8:Ë7Ú··6:Ë7ãbx7úXo5€*s¶ë]¸ÓÐX·ˆúâ·ÓÐX·ÕR»·qAU¸5ð¦¸Ë’¸5ð¦¸oÜœ¸7±¸v8Ÿ³í¸¹äÕ÷¸³í¸ý¹ÐL¹×3¹ÐL¹Y$¹´¦)¹Ÿ¾.¹×3¹´¦)¹à7¹— >¹×3¹Ÿ¾.¹Y$¹Ÿ¾.¹Ÿ¾.¹Ÿ¾.¹×3¹>H¹ÐL¹´¦)¹à7¹™# ¹¹äÕ÷¸¹™# ¹äÕ÷¸V»¸v8ŸV»¸QrÙ¸QrÙ¸V»¸Ë’¸V»¸5ð¦¸qAU¸Ë’¸¢>-¸¢>-¸ˆúâ·<-¸ˆúâ·‚I¸ë]¸<-¸Ê“·Ê“·Ê“·Ê“·Ú··6Ê“·Mx +·ÕR»·Ê“·¢>-¸`}¸Ë’¸<-¸‚I¸ˆúâ·Ê“·Ê“·ÓÐX·Mx +·:Ë7¤£7€*s¶Ú··6:Ë7€[ 8Ú··6¤£7‡ìò7€[ 8ÓÐX·K!8=[q8¸‚8QÅŒ8¾cÓ8Güª8Güª8'µ8'µ8ƒL]8Güª8'µ8=[q8ƒL]8€[ 8€[ 8‡ìò7:Ë7‡ìò7sDI8‡ìò7:Ë7‡ìò7ãbx7úXo5€*s¶ÓÐX·ƒL]8:Ë7ãbx7ãbx7¤£7¤£7úXo5úXo5Ê“·¤£7ÀÚ)7Mx +·Mx +·úXo5Ê“·:Ë7úXo5ë]¸Mx +·€*s¶‚I¸ë]¸ÕR»·ˆúâ·ë]¸Ê“·ë]¸úXo5ÓÐX·ÓÐX·ë]¸ÕR»·Ê“·€*s¶¤£7‡ìò7ãbx7úXo5¤£7ãbx7sDI8QÅŒ89Õ–8QÅŒ8Éçû8‚¢ç8'µ8_Äñ8%W9ˆ9%W9gš&9öl9Îâ59¸@9¡JJ9dƒ!9öl9gš&9gš&9î/E9¸@9º^9¡JJ9¡JJ9î/E9lT9Y9lT9¡JJ9ùÖc9çNx9½öˆ9Q0s9çNx9º^9Îâ59 n9º^9ÌeO9¸@9¸@9î/E9Y9º^9î/E9¸@9ü:9¸@9gš&9î/E9¸@9!Ê09¸@9gš&9öl9¸@9dƒ!9öl9óA9Éçû8Z9h- 9Éçû8'µ8˜ç 8¸‚8˜ç 8¸‚8¸‚8=[q89Õ–8sDI8=[q8QÅŒ8‡ìò7K!8sDI8ƒL]8sDI8=[q8sDI8sDI8ƒL]8'µ8=[q8sDI8=[q8ãbx7´C58sDI8úXo5QÅŒ8Güª8Güª8˜ç 8=[q8¸‚8,¿8Güª8Güª8_Äñ8‚¢ç8üFÉ8‚¢ç8_Äñ8¾cÓ8Z9óA9óA9ˆ9Z9óA9h- 9‚¢ç8G‚Ý8_Äñ8óA9Éçû8G‚Ý8óA9h- 9Éçû8,¿8,¿8'µ8_Äñ8Éçû8_Äñ8¾cÓ8_Äñ8üFÉ8,¿8Güª8¸‚8´C58˜ç 8Güª8ƒL]8¸‚8QÅŒ8´C58´C58sDI8ãbx7ÀÚ)7ãbx7‡ìò7ãbx7¤£7Ú··6:Ë7Mx +·úXo5Ê“·€*s¶úXo5ãbx7ÕR»·ë]¸ˆúâ·Ë’¸<-¸ë]¸‚I¸ë]¸<-¸ˆúâ·ÕR»·¢>-¸ˆúâ·ˆúâ·‚I¸Ë’¸qAU¸`}¸<-¸‚I¸ÕR»·¢>-¸<-¸¢>-¸ë]¸5𦸑Mi¸Ë’¸5𦸑Mi¸‚I¸¢>-¸¢>-¸‚I¸<-¸qAU¸7±¸`}¸ë]¸¢>-¸Ë’¸5ð¦¸{TϸË’¸v8Ÿ5ð¦¸7±¸¢>-¸Ë’¸+¼ˆ¸Ë’¸V»¸oÜœ¸¢>-¸<-¸‚I¸<-¸+¼ˆ¸5ð¦¸V»¸Ë’¸`}¸Ë’¸V»¸v8Ÿ‘Mi¸‚I¸Ë’¸‘Mi¸ë]¸ë]¸<-¸<-¸<-¸`}¸‘Mi¸‘Mi¸<-¸Ë’¸ˆúâ·ë]¸qAU¸<-¸qAU¸‘Mi¸‚I¸‚I¸‘Mi¸qAU¸ÕR»·ˆúâ·ë]¸¢>-¸‚I¸‘Mi¸¢>-¸Ë’¸‚I¸¢>-¸‚I¸`}¸‚I¸ë]¸ë]¸ÕR»·ÀÚ)7ˆúâ·€*s¶Mx +·€*s¶<-¸Mx +·úXo5‡ìò7¤£7€*s¶€*s¶ÓÐX·úXo5:Ë7¤£7úXo5‡ìò7ÀÚ)7:Ë7ƒL]8´C58:Ë7¸‚8´C58¤£7ƒL]8=[q8sDI8‡ìò7ƒL]8ƒL]8€[ 8K!8sDI8‡ìò7:Ë7ƒL]8‡ìò7sDI8:Ë7Mx +·€[ 8Ú··6úXo5ÀÚ)7ÀÚ)7Ú··6:Ë7ÀÚ)7Ú··6Ú··6ÀÚ)7¤£7sDI8‡ìò7Ú··6Mx +·ÀÚ)7ãbx7ˆúâ·Mx +·ÓÐX·ÕR»·Ê“·Mx +·‚I¸Ê“·úXo5ÓÐX·ÕR»·<-¸Ë’¸oÜœ¸Ë’¸`}¸á‘ã¸7±¸{Tϸ+¼ˆ¸7±¸äÕ÷¸v8ŸQrÙ¸qAU¸`}¸oÜœ¸qAU¸¢>-¸ˆúâ·ÓÐX·Ú··6ÓÐX·€*s¶ë]¸ÕR»·úXo5ÓÐX·¤£7Mx +·ãbx7€[ 8sDI8´C58ƒL]8sDI8´C589Õ–8ƒL]8K!8ƒL]8ƒL]8ƒL]8QÅŒ8ƒL]8Güª8G‚Ý8üFÉ8'µ8'µ8G‚Ý8óA9_Äñ8¾cÓ8G‚Ý8Éçû8h- 9öl9‚¢ç8Éçû8Éçû8G‚Ý8‚¢ç89Õ–8QÅŒ8,¿8'µ89Õ–8Güª8sDI8=[q8¸‚8´C58QÅŒ8´C58‡ìò7:Ë7úXo5´C58K!8€[ 8¤£7¤£7:Ë7Ú··6ãbx7‡ìò7Ú··6¢>-¸ˆúâ·<-¸oÜœ¸5ð¦¸v8ŸV»¸5ð¦¸oÜœ¸7±¸qAU¸5ð¦¸Ë’¸Ë’¸+¼ˆ¸v8Ÿ‘Mi¸Ë’¸‘Mi¸5ð¦¸Ë’¸Ë’¸Ë’¸`}¸¢>-¸ˆúâ·ˆúâ·€*s¶Ú··6Ú··6€*s¶‡ìò7K!8K!8‡ìò7‡ìò7ãbx7‡ìò7=[q8,¿8G‚Ý8üFÉ8˜ç 8'µ8üFÉ8h- 9Güª8üFÉ8˜ç 8¸‚8ƒL]8¸‚8ƒL]8sDI8ƒL]89Õ–8‡ìò7sDI8sDI8K!8¤£7ãbx7¤£7Mx +·úXo5úXo5€*s¶Ú··6ˆúâ·Ê“·¤£7€*s¶:Ë7úXo5ÕR»·ãbx7Mx +·¢>-¸‚I¸ˆúâ·ë]¸ÕR»·ë]¸Ë’¸‘Mi¸qAU¸‘Mi¸7±¸Ë’¸qAU¸`}¸qAU¸‘Mi¸Ë’¸+¼ˆ¸+¼ˆ¸7±¸‘Mi¸qAU¸ÕR»·¢>-¸Ê“·¢>-¸`}¸5ð¦¸qAU¸`}¸oÜœ¸V»¸7±¸v8ŸË’¸qAU¸¢>-¸7±¸v8ŸoÜœ¸Ë’¸QrÙ¸`}¸‚I¸ë]¸<-¸‚I¸qAU¸‚I¸ˆúâ·<-¸Mx +·Mx +·Ê“·ÕR»·¢>-¸‚I¸¢>-¸`}¸Ë’¸oÜœ¸oÜœ¸V»¸v8ŸË’¸Ë’¸Ë’¸qAU¸‘Mi¸<-¸oÜœ¸ë]¸ë]¸¢>-¸ë]¸ÕR»·ˆúâ·ÕR»·Ê“·ÀÚ)7€*s¶‚I¸€*s¶Ê“·ÓÐX·Ú··6úXo5:Ë7:Ë7K!8€[ 8€[ 8´C58sDI8ƒL]8=[q8K!8ƒL]89Õ–89Õ–8,¿8,¿8,¿8˜ç 8'µ8'µ8'µ8'µ8G‚Ý8üFÉ8üFÉ8QÅŒ8Güª8üFÉ8Güª8G‚Ý8üFÉ89Õ–8,¿8,¿8G‚Ý8üFÉ8üFÉ8,¿8¸‚8Güª8¾cÓ8Güª8üFÉ89Õ–8ƒL]8‡ìò7´C58´C58sDI8Ê“·¤£7€[ 8ÀÚ)7úXo5ÀÚ)7Mx +·úXo5úXo5Mx +·ÕR»·ë]¸ˆúâ·ÕR»·ë]¸‚I¸qAU¸ë]¸`}¸qAU¸‚I¸<-¸ÕR»·€*s¶ˆúâ·ÓÐX·€*s¶úXo5úXo5‡ìò7´C589Õ–8,¿8¾cÓ8'µ8Güª8¾cÓ89Õ–8‚¢ç8,¿8¾cÓ8üFÉ8G‚Ý8‚¢ç8üFÉ8'µ8'µ8üFÉ8'µ8G‚Ý8Güª8,¿8G‚Ý8_Äñ8G‚Ý8‚¢ç8Güª8G‚Ý8¾cÓ8G‚Ý8˜ç 8˜ç 8'µ8Güª8=[q8=[q8‡ìò7¸‚8´C58=[q8sDI8sDI8sDI8‡ìò7:Ë7K!8ÀÚ)7:Ë7ãbx7Ú··6úXo5ãbx7ÓÐX·ˆúâ·Mx +·Ê“·ˆúâ·qAU¸oÜœ¸QrÙ¸oÜœ¸7±¸5ð¦¸{Tϸv8Ÿ+¼ˆ¸5𦸑Mi¸<-¸qAU¸`}¸ë]¸<-¸¢>-¸qAU¸‚I¸<-¸ë]¸‘Mi¸¢>-¸¢>-¸Ë’¸Ë’¸Ë’¸7±¸oÜœ¸V»¸7±¸5ð¦¸QrÙ¸V»¸oÜœ¸7±¸V»¸v8ŸV»¸V»¸á‘㸙# ¹´¦)¹×3¹´¦)¹Y$¹Ÿ¾.¹ð8¹š#C¹´¦)¹×3¹>H¹´¦)¹™# ¹Y$¹×3¹š#C¹š#C¹— >¹ÐL¹ÐL¹äÕ÷¸™# ¹ý¹ý¹äÕ÷¸¹á‘ã¸v8ŸäÕ÷¸ÐL¹ý¹QrÙ¸á‘ã¸7±¸{Tϸv8Ÿ³í¸Ë’¸5ð¦¸á‘ã¸{Tϸ5ð¦¸<-¸qAU¸ë]¸Ê“·ë]¸<-¸Mx +·úXo5ÓÐX·ÕR»·ÕR»·€*s¶úXo5Mx +·qAU¸ˆúâ·Mx +·ˆúâ·ˆúâ·¤£7úXo5ãbx7ÀÚ)7€*s¶ãbx7¤£7ãbx7¤£7€*s¶Ê“·ÓÐX·€*s¶ÓÐX·‚I¸Mx +·Mx +·ÕR»·Ê“·qAU¸+¼ˆ¸ë]¸<-¸‚I¸‚I¸<-¸ë]¸‚I¸‘Mi¸+¼ˆ¸ˆúâ·ë]¸Mx +·¢>-¸Ê“·ë]¸+¼ˆ¸ë]¸ˆúâ·‚I¸ÓÐX·ÕR»·€*s¶ˆúâ·Ê“·‡ìò7ÀÚ)7¤£7K!8¸‚8˜ç 8¾cÓ8sDI8K!8QÅŒ8sDI8QÅŒ8QÅŒ8'µ8=[q8¾cÓ8¸‚8=[q8€[ 8´C58‡ìò7ƒL]8Güª8ƒL]8=[q8¸‚8QÅŒ8=[q8ƒL]8K!8€[ 8=[q8ƒL]8QÅŒ8´C58'µ8ƒL]89Õ–8ƒL]8¸‚8Güª8QÅŒ8QÅŒ8¸‚8ƒL]8€[ 8¤£7ÀÚ)7¤£7úXo5¤£7Mx +·‚I¸`}¸qAU¸oÜœ¸Ë’¸v8Ÿ‘Mi¸5ð¦¸5ð¦¸`}¸qAU¸7±¸+¼ˆ¸oÜœ¸v8Ÿ{Tϸ¹ý¹Qrٸ˒¸+¼ˆ¸oÜœ¸V»¸á‘ã¸á‘ã¸Ë’¸V»¸7±¸5ð¦¸V»¸oÜœ¸QrÙ¸QrÙ¸oÜœ¸7±¸5ð¦¸5ð¦¸v8Ÿ{TϸË’¸Ë’¸‘Mi¸¢>-¸ë]¸qAU¸ë]¸€*s¶Ê“·Mx +·¤£7ÀÚ)7Mx +·K!8ƒL]8QÅŒ8QÅŒ8üFÉ8üFÉ8˜ç 89Õ–8Güª8Éçû8¾cÓ8‚¢ç8üFÉ8,¿8¾cÓ8Z9G‚Ý8dƒ!9_Äñ8G‚Ý8_Äñ8Éçû8dƒ!9_Äñ8¾cÓ8Güª8Güª8=[q8Güª89Õ–8sDI8´C58sDI8ƒL]8ƒL]8´C58´C58K!8K!8ƒL]8K!8ãbx7úXo5¤£7¤£7ãbx7Mx +·qAU¸ë]¸¢>-¸Ê“·Ê“·‘Mi¸‘Mi¸‘Mi¸`}¸qAU¸Ë’¸5ð¦¸oÜœ¸QrÙ¸á‘ã¸ý¹‘x¹×3¹ÐL¹¹×3¹´¦)¹Ÿ¾.¹Ÿ¾.¹‘x¹— >¹Y$¹ab¹´¦)¹¹¹ý¹äÕ÷¸{TϸqAU¸`}¸qAU¸qAU¸ˆúâ·¢>-¸¢>-¸úXo5¢>-¸`}¸ÓÐX·‘Mi¸‚I¸€*s¶ÓÐX·úXo5€*s¶Ê“·¤£7ãbx7úXo5ãbx7úXo5ÀÚ)7ãbx7€[ 8ãbx7sDI8‡ìò7¤£7€*s¶ÀÚ)7ãbx7ãbx7ãbx7ˆúâ·ˆúâ·úXo5Mx +·Ê“·€*s¶K!8‡ìò7K!8Ú··6:Ë7‡ìò7:Ë7ãbx7ÓÐX·ãbx7úXo5€*s¶¢>-¸¢>-¸ˆúâ·ˆúâ·<-¸<-¸€*s¶ãbx7¢>-¸€*s¶ˆúâ·ÕR»·úXo5ÓÐX·ÀÚ)7ãbx7Ê“·€*s¶ÕR»·ÓÐX·úXo5Mx +·Ú··6Ú··6úXo5€*s¶ÀÚ)7Ú··6¤£7úXo5ÀÚ)7¤£7€*s¶K!8:Ë7Mx +·ÀÚ)7Ú··6Mx +·úXo5¤£7€[ 8K!8‡ìò7:Ë7ãbx7‡ìò7ãbx7ãbx7ÀÚ)7¤£7ÀÚ)7€*s¶€[ 8‡ìò7‡ìò7:Ë7K!8ÓÐX·€*s¶ÀÚ)7Mx +·€*s¶úXo5úXo5Ú··6Mx +·Ú··6€*s¶ãbx7ÀÚ)7ÀÚ)7Mx +·Ú··6Mx +·ë]¸ˆúâ·ÕR»·<-¸`}¸‘Mi¸Ë’¸7±¸7±¸oÜœ¸5ð¦¸V»¸+¼ˆ¸¢>-¸ˆúâ·Mx +·ˆúâ·ˆúâ·ÓÐX·Mx +·ÓÐX·ÓÐX·ãbx7€*s¶€*s¶Ê“·ÀÚ)7:Ë7ãbx7¤£7K!8€[ 8sDI8K!8sDI89Õ–8¸‚8QÅŒ8QÅŒ89Õ–8¸‚8G‚Ý8üFÉ8'µ8‚¢ç8G‚Ý8_Äñ8'µ8'µ8¸‚8‚¢ç8_Äñ8'µ8G‚Ý8,¿8,¿8G‚Ý8sDI8QÅŒ8¸‚8€[ 8sDI8‡ìò7=[q8:Ë7K!8¤£7sDI8sDI8K!8=[q8K!8=[q8ƒL]8sDI8=[q8ƒL]8€[ 8€[ 8K!8ÀÚ)7ãbx7€*s¶Ê“·úXo5€*s¶ÕR»·úXo5ÓÐX·Mx +·ˆúâ·¢>-¸<-¸ÕR»·ÓÐX·ˆúâ·ÓÐX·Mx +·ÓÐX·ÓÐX·€*s¶Mx +·úXo5ë]¸Mx +·Ê“·Mx +·¤£7Ú··6úXo5€[ 8=[q89Õ–8'µ8,¿8‚¢ç8üFÉ8Güª8,¿8G‚Ý8ˆ9Z9%W9ˆ9_Äñ8ˆ9h- 9óA9Z9óA9gš&9Z9,¿8Z9ˆ9‚¢ç8,¿8ˆ9G‚Ý8G‚Ý8‚¢ç8G‚Ý8üFÉ8‚¢ç8Éçû8G‚Ý8˜ç 8'µ8˜ç 8QÅŒ89Õ–89Õ–8QÅŒ8˜ç 8sDI8‡ìò7K!8´C58´C58QÅŒ89Õ–8€[ 8€[ 8ÀÚ)7ÀÚ)7:Ë7Ú··6€*s¶Ê“·ãbx7Ê“·ÕR»·ÕR»·ˆúâ·ÕR»·‘Mi¸qAU¸`}¸‚I¸‘Mi¸¢>-¸‘Mi¸+¼ˆ¸`}¸‚I¸<-¸ë]¸‚I¸ë]¸ÓÐX·ë]¸ÓÐX·€[ 8´C58´C58sDI8=[q8sDI8ƒL]8Güª8=[q89Õ–8,¿8G‚Ý8˜ç 8,¿89Õ–8,¿8'µ8QÅŒ8QÅŒ8Güª8Güª8Güª8¸‚8QÅŒ89Õ–8üFÉ8üFÉ8‚¢ç8_Äñ8G‚Ý8˜ç 8¾cÓ8,¿8Güª8Güª8QÅŒ8=[q8K!8‡ìò7ãbx7ãbx7ÀÚ)7ÀÚ)7€[ 8K!8‡ìò7K!8ƒL]8€[ 8ãbx7Ú··6úXo5úXo5ë]¸Ú··6ÕR»·<-¸‘Mi¸Ë’¸ë]¸¢>-¸+¼ˆ¸7±¸{Tϸ5ð¦¸5ð¦¸oÜœ¸Ë’¸oÜœ¸5ð¦¸Ë’¸‘Mi¸‘Mi¸Ë’¸Ë’¸+¼ˆ¸`}¸7±¸v8ŸV»¸Ë’¸+¼ˆ¸+¼ˆ¸qAU¸{TϸË’¸5ð¦¸ë]¸qAU¸ë]¸qAU¸‚I¸‚I¸Mx +·ÀÚ)7€[ 8:Ë7ãbx7€[ 8‡ìò7:Ë7¤£7ãbx7ãbx7ÀÚ)7´C58QÅŒ8´C58=[q8sDI8¸‚8´C58K!8sDI8ƒL]8=[q8=[q8¸‚8=[q8¸‚8´C58:Ë7QÅŒ8ƒL]8K!8‡ìò7sDI8Ú··6Ê“·úXo5ÓÐX·ˆúâ·¢>-¸ˆúâ·ÕR»·ë]¸Ë’¸Ë’¸Ë’¸oÜœ¸5𦸑Mi¸‘Mi¸Ë’¸oÜœ¸7±¸QrÙ¸‘Mi¸5ð¦¸qAU¸oÜœ¸7±¸Ë’¸Ë’¸‘Mi¸<-¸oÜœ¸‘Mi¸qAU¸ë]¸<-¸ÕR»·ë]¸¢>-¸ÕR»·ÕR»·ë]¸‚I¸Ê“·ÓÐX·¢>-¸€*s¶ÀÚ)7Ú··6‡ìò7€[ 8ÀÚ)7Ú··6:Ë7¤£7Ú··6ÀÚ)7úXo5úXo5Ú··6Ú··6€[ 8ÀÚ)7´C58¸‚8ãbx7¤£7ãbx7‡ìò7K!8sDI8¤£7sDI8ÀÚ)7€[ 8¤£7‡ìò7K!8ãbx7:Ë7:Ë7ãbx7ÓÐX·ÓÐX·ë]¸úXo5úXo5Ú··6ãbx7ÀÚ)7Ú··6Mx +·Ú··6úXo5úXo5ˆúâ·‚I¸ÕR»·Ê“·‚I¸Mx +·ë]¸‚I¸‘Mi¸qAU¸¢>-¸Ë’¸+¼ˆ¸+¼ˆ¸+¼ˆ¸V»¸oÜœ¸7±¸v8ŸV»¸5ð¦¸Ë’¸Ë’¸QrÙ¸QrÙ¸`}¸qAU¸‘Mi¸`}¸<-¸ÕR»·ÓÐX·úXo5€*s¶úXo5´C58:Ë7ÀÚ)7sDI8K!8´C58´C58€[ 8ƒL]8¸‚8¤£7´C58,¿8¾cÓ8Güª8,¿8,¿8G‚Ý8¾cÓ8üFÉ8Éçû8Éçû8Z9%W9ˆ9öl9dƒ!9Z9óA9dƒ!9öl9dƒ!9!Ê09öl9ˆ9‚¢ç8G‚Ý8‚¢ç8üFÉ8,¿8¾cÓ8_Äñ8üFÉ8Güª8,¿8Güª8QÅŒ8¸‚89Õ–89Õ–8ƒL]8¸‚8˜ç 8´C58,¿8˜ç 8¸‚8K!8´C58€[ 8ÀÚ)7ÀÚ)7¤£7‚I¸+¼ˆ¸ë]¸‚I¸ë]¸qAU¸ÓÐX·€*s¶ˆúâ·ÕR»·<-¸‚I¸ë]¸<-¸<-¸Mx +·€*s¶¢>-¸ÓÐX·ÀÚ)7Mx +·úXo5ÓÐX·ÀÚ)7ÀÚ)7¤£7ãbx7¤£7Ú··6sDI8´C58QÅŒ8ƒL]8€[ 8Güª8Güª8QÅŒ89Õ–8üFÉ8'µ8'µ8,¿8QÅŒ8sDI8Güª8üFÉ8ƒL]8˜ç 8'µ8sDI89Õ–8¸‚8˜ç 8¸‚8=[q8´C58‡ìò7ãbx7´C58ƒL]8K!8:Ë7:Ë7:Ë7sDI8Ú··6¤£7‡ìò7‡ìò7‡ìò7¤£7ÀÚ)7ÀÚ)7€*s¶Mx +·Ú··6‚I¸ë]¸€*s¶¢>-¸Ê“·Ê“·¢>-¸<-¸Mx +·ˆúâ·5ð¦¸<-¸ˆúâ·ˆúâ·ÕR»·Ê“·Ê“·ÓÐX·ë]¸ë]¸‚I¸ÕR»·ë]¸¢>-¸‚I¸‘Mi¸Ë’¸5ð¦¸oÜœ¸+¼ˆ¸V»¸oÜœ¸{TϸqAU¸5ð¦¸Ë’¸¢>-¸‘Mi¸Ë’¸‚I¸<-¸ÕR»·ë]¸‘Mi¸ÕR»·ë]¸¢>-¸Ë’¸qAU¸`}¸oÜœ¸Ë’¸oÜœ¸7±¸{TϸäÕ÷¸³í¸oÜœ¸V»¸á‘ã¸á‘ã¸7±¸V»¸á‘ã¸v8ŸË’¸á‘ã¸Qrٸ˒¸{Tϸ7±¸v8Ÿ5ð¦¸Ë’¸{Tϸ³í¸á‘ã¸äÕ÷¸ý¹¹¹{TϸË’¸Ë’¸Ë’¸ˆúâ·qAU¸¢>-¸Ë’¸Ë’¸qAU¸Ë’¸Ë’¸<¹— >¹š#C¹ˆtR¹mW¹Áæf¹ŽÉa¹mW¹ŽÉa¹´¦)¹à7¹— >¹ab¹‘x¹ý¹ÐL¹™# ¹á‘ã¸äÕ÷¸á‘ã¸V»¸äÕ÷¸V»¸5𦸑Mi¸5ð¦¸{Tϸv8Ÿv8Ÿ5ð¦¸oÜœ¸5ð¦¸7±¸v8Ÿ+¼ˆ¸5ð¦¸5ð¦¸+¼ˆ¸oÜœ¸‘Mi¸7±¸Ë’¸<-¸Ë’¸Ë’¸`}¸7±¸‘Mi¸oÜœ¸ˆúâ·<-¸ˆúâ·‚I¸ë]¸ÀÚ)7ÓÐX·Mx +·ÕR»·úXo5ÓÐX·¢>-¸Ê“·Ê“·:Ë7:Ë7‡ìò7‡ìò7K!8ƒL]8´C58sDI8QÅŒ8ƒL]8¸‚8sDI8€[ 8´C58´C58¸‚8€[ 8‡ìò7‡ìò7¸‚8Güª8QÅŒ89Õ–8€[ 8´C58QÅŒ8ãbx7€[ 8ƒL]8‡ìò7˜ç 8˜ç 8=[q8ƒL]8‡ìò7‡ìò7´C58ãbx7:Ë7Ê“·ë]¸Mx +·ÀÚ)7Ê“·ÀÚ)7úXo5‚I¸‚I¸ÕR»·‚I¸ˆúâ·Ë’¸‚I¸‘Mi¸‚I¸ˆúâ·oÜœ¸Ë’¸ˆúâ·<-¸`}¸qAU¸Ë’¸<-¸qAU¸¢>-¸‘Mi¸Ë’¸5ð¦¸Ë’¸|Pd|1|24600|2013-282T15:32:23.397 N +Î7§¾õ7Œ—8šã¿8†Êµ8šã¿8¢þÉ8¢þÉ8€³«8§ž¡8šã¿8§ž¡8§ž¡8-:Þ8…Ô8šã¿8†Êµ8€³«8’nƒ8†Êµ8…Ô8€³«8…Ô8…Ô8€³«8’nƒ8Œ—8N +Î7°J8¢þÉ8§ž¡8XÅ8°J8–µ"8XÅ8nù}7nù}7Ì´¢5N +Î7nù}7N +Î7!r¦7*½Â6BG]¶BG]¶BG]¶‡ƒ¸·*½Â6ÈÓ+¸)ág¸nô¸€ÕS¸s%œ¸ÐÐ?¸nô¸€ÕS¸)ág¸0ó{¸ëN°¸:’¸9¦¸yºØ¸Œˆ¸:’¸:’¸K߸nô¸åfº¸Œˆ¸)ág¸:’¸)ág¸ëN°¸åfº¸êÙâ¸åfº¸ëN°¸ëN°¸9¦¸à€Ä¸µ÷¸Î³¹9¦¸åfº¸ëN°¸åfº¸)ág¸ÐÐ?¸s%œ¸K߸K߸nô¸nô¸‡ƒ¸·<)à·’=S·Uî·*½Â6BG]¶BG]¶*½Â6!r¦7–µ"8XÅ8’nƒ8°J8’nƒ8šã¿8ÝÇr8§ž¡8–µ"8Œ—8†Êµ8†Êµ8€³«8|ò8-:Þ8-:Þ8¢þÉ8¢þÉ8‡Zè8¢þÉ8¢þÉ8 ü8-:Þ8€³«8Œ—8Ö®68°J8BG]¶*½Â6nù}7BG]¶’=S·’=S·9ý·BG]¶Ì´¢5*½Â6!r¦7Uî·‡ƒ¸·’=S·9ý·’=S·BG]¶Ì´¢5BG]¶K߸<)à·ÐÐ?¸ÈÓ+¸<)à·<)à·:’¸êÙâ¸yºØ¸åfº¸à€Ä¸ûì¸õ ¹Î³¹êÙâ¸ÄœÎ¸êÙ⸀ÕS¸:’¸ëN°¸9¦¸ÄœÎ¸s%œ¸9¦¸ûì¸s%œ¸)ág¸ëN°¸:’¸à€Ä¸)ág¸<)à·ÐÐ?¸0ó{¸<)à·BG]¶’=S·‡ƒ¸·N +Î7*½Â6Uî·*½Â6!r¦7XÅ8nù}7–µ"8§¾õ7|8Œ—8šã¿8Œ—8-:Þ8†Êµ8šã¿8šã¿8†Êµ8Œ—8Œ—8€³«8…Ô8-:Þ8šã¿8ÝÇr8’nƒ8-:Þ8†Êµ8†Êµ8§ž¡8-:Þ8€³«8€³«8§ž¡8-:Þ8†Êµ8‡Zè8†Êµ8§ž¡8€³«8’nƒ8®¸^8ÝÇr8Œ—8§¾õ7§¾õ7nù}7’=S·XÅ8N +Î7N +Î7N +Î7ži/7nù}7N +Î7nù}7Ì´¢5BG]¶9ý·Uî·9ý·ži/7‡ƒ¸·9ý·K߸’=S·9ý·ÈÓ+¸’=S·BG]¶)ág¸nô¸€ÕS¸nô¸*½Â69ý·Uî·<)à·BG]¶BG]¶Ì´¢5Uî·<)à·9ý·BG]¶nô¸<)à·<)à·9ý·Uî·9ý·Ì´¢5Ö®68nù}7§¾õ7ži/7§¾õ7§¾õ7§¾õ7!r¦7*½Â6®¸^8Ö®68°J8Œ—8Ö®68’nƒ8-:Þ8§ž¡8šã¿8šã¿8-:Þ8‡Zè8€³«8§ž¡8 ü8-:Þ8³9^É9fr@9’ÂO9²&19Öß!9§X;9Öß!9Öß!9†b9‡Zè8…Ô8-:Þ8-:Þ8€³«8Œ—8Œ—8’nƒ8XÅ8’nƒ8§ž¡8°J8Ö®68–µ"8!r¦7§¾õ7N +Î7nù}7N +Î7§¾õ7BG]¶nù}7BG]¶nù}7Ì´¢5BG]¶9ý·nô¸ÐÐ?¸nô¸€ÕS¸‡ƒ¸·’=S·9ý·<)à·BG]¶Ì´¢5ÈÓ+¸0ó{¸Œˆ¸)ág¸)ág¸K߸<)à·)ág¸:’¸:’¸µ÷¸åfº¸ëN°¸9¦¸ëN°¸ûì¸9¦¸s%œ¸9¦¸ëN°¸åfº¸)ág¸0ó{¸ÄœÎ¸yºØ¸à€Ä¸ëN°¸ëN°¸9¦¸s%œ¸s%œ¸9¦¸:’¸ÈÓ+¸ÈÓ+¸ÐÐ?¸’=S·Ì´¢5‡ƒ¸·*½Â6*½Â6nô¸<)à·nô¸’=S·9ý·<)à·ÈÓ+¸€ÕS¸nô¸9ý·BG]¶Ì´¢5Uî·ÈÓ+¸‡ƒ¸·nô¸ÈÓ+¸9ý·nô¸‡ƒ¸·s%œ¸<)à·ÈÓ+¸)ág¸:’¸Œˆ¸:’¸Œˆ¸ÄœÎ¸õ ¹êÙâ¸yºØ¸ÄœÎ¸õ ¹Î³¹åfº¸ÄœÎ¸µ÷¸õ ¹ûì¸Î³¹ûì¸ZÇ +¹Î³¹ÄœÎ¸ûì¸s%œ¸µ÷¸ûì¸ÄœÎ¸ÿ¹ZÇ +¹ÿ¹xð¹•Û¹ûì¸õ ¹ûì¸ZÇ +¹•Û¹•Û¹b.¹b.¹ÿ¹Î³¹xð¹`áG¹î¬=¹2J)¹`áG¹à2$¹èÆB¹b.¹Î³¹ÿ¹$¹õ ¹õ ¹9¦¸åfº¸:’¸K߸ÈÓ+¸nô¸Ì´¢5*½Â6*½Â6ži/7nù}7§¾õ7nù}7XÅ8N +Î7XÅ8N +Î7N +Î7*½Â6N +Î7ži/7§¾õ7°J8|8–µ"8Ö®68ÝÇr8°J8§ž¡8€³«8€³«8€³«8†Êµ8¢þÉ8ÝÇr8Œ—8°J8Ö®68®¸^8Ö®68ÝÇr8€³«8ÝÇr8N +Î7Ì´¢5–µ"8Ö®68§¾õ7Œ—8’nƒ8XÅ8XÅ8Ö®68°J8§¾õ7!r¦7*½Â6BG]¶’=S·’=S·9ý·BG]¶BG]¶‡ƒ¸·9ý·BG]¶‡ƒ¸·s%œ¸9ý·ÈÓ+¸ÈÓ+¸ÐÐ?¸‡ƒ¸·0ó{¸0ó{¸)ág¸Œˆ¸€ÕS¸ÐÐ?¸ÈÓ+¸9¦¸à€Ä¸:’¸Œˆ¸ëN°¸ëN°¸ëN°¸åfº¸ëN°¸€ÕS¸ÈÓ+¸ÐÐ?¸K߸ÐÐ?¸ÐÐ?¸<)à·’=S·K߸<)à·nô¸ži/7!r¦7<)à·‡ƒ¸·Ì´¢5BG]¶Ì´¢5BG]¶9ý·§¾õ7§¾õ7§¾õ7XÅ8°J8Œ—8®¸^8Ö®68’nƒ8†Êµ8’nƒ8|8°J8|8°J8Ö®68!r¦7N +Î7ži/7®¸^8§¾õ7–µ"8N +Î7XÅ8BG]¶§¾õ7nô¸*½Â6*½Â6*½Â69ý·*½Â6‡ƒ¸·’=S·<)à·nô¸ÈÓ+¸nô¸:’¸:’¸:’¸s%œ¸à€Ä¸9¦¸êÙâ¸åfº¸ÄœÎ¸yºØ¸ZÇ +¹µ÷¸ûì¸Î³¹õ ¹à€Ä¸µ÷¸ûì¸à€Ä¸û층÷¸ûì¸à€Ä¸µ÷¸õ ¹ûì¸õ ¹ÄœÎ¸)ág¸åfº¸ëN°¸à€Ä¸ÄœÎ¸9¦¸:’¸0ó{¸:’¸€ÕS¸Uî·*½Â6‡ƒ¸·Ì´¢5ži/7§¾õ7–µ"8°J8°J8N +Î7XÅ8|8°J8’nƒ8®¸^8®¸^8|8’nƒ8†Êµ8¢þÉ8…Ô8­‰ 9 ü8¢þÉ8|ò8|ò8-:Þ8Áu9Áu9­‰ 9Áu9Dž9Öß!9­‰ 9Áu9†b9Dž9†b9†b9†b9šã¿8¢þÉ8¢þÉ8†b9§ž¡8Œ—8§ž¡8€³«8€³«8|8§ž¡8®¸^8§¾õ7Œ—8–µ"8–µ"8–µ"8nù}7§¾õ7XÅ8!r¦7nù}7§¾õ7–µ"8Ì´¢5§¾õ7!r¦7BG]¶XÅ8Ì´¢5*½Â6N +Î7ži/7ži/7Ì´¢5BG]¶*½Â6Uî·N +Î7nù}7§¾õ7*½Â6ži/7Ì´¢5BG]¶N +Î7nù}7N +Î7§¾õ7Ö®68XÅ8–µ"8§¾õ7°J8XÅ8§¾õ7|8’nƒ8®¸^8®¸^8|8§ž¡8|ò8†Êµ8|8…Ô8 ü8¢þÉ8¢þÉ8Œ—8¢þÉ8§ž¡8…Ô8šã¿8ÝÇr8–µ"8–µ"8|8|8|8|8šã¿8šã¿8|8’nƒ8’nƒ8’nƒ8€³«8ÝÇr8ÝÇr8–µ"8°J8XÅ8§¾õ7*½Â6nù}7ži/7!r¦7§¾õ7BG]¶Ì´¢5!r¦7Uî·Ì´¢5BG]¶<)à·‡ƒ¸·*½Â6nù}7*½Â6N +Î7!r¦7N +Î7’=S·ži/7<)à·9ý·K߸€ÕS¸<)à·ÐÐ?¸K߸ÐÐ?¸nô¸K߸<)à·9ý·0ó{¸<)à·K߸<)à·nô¸ÈÓ+¸ÐÐ?¸€ÕS¸‡ƒ¸·)ág¸ÐÐ?¸<)à·€ÕS¸Uî·Uî·’=S·BG]¶*½Â6BG]¶N +Î7ži/7*½Â6XÅ8°J8XÅ8°J8XÅ8N +Î7šã¿8Œ—8|8§ž¡8®¸^8ÝÇr8€³«8§ž¡8Œ—8†Êµ8 ü8 ü8|ò8-:Þ8Dž9 ü8‡Zè8šã¿8 ü8‡Zè8 ü8Áu9Dž9 ü8-:Þ8|ò8|ò8|ò8…Ô8€³«8Áu9‡Zè8‡Zè8…Ô8|8°J8°J8§ž¡8XÅ8nù}7*½Â6*½Â6nù}7BG]¶’=S·ži/7*½Â6BG]¶0ó{¸0ó{¸ÈÓ+¸nô¸)ág¸K߸ÐÐ?¸s%œ¸ëN°¸ëN°¸:’¸ëN°¸Œˆ¸:’¸€ÕS¸<)à·Uî·<)à·ÐÐ?¸ÐÐ?¸ÐÐ?¸nô¸€ÕS¸K߸‡ƒ¸·<)à·<)à·K߸K߸nô¸9ý·*½Â6K߸’=S·§¾õ7’=S·9ý·ži/7Uî·ÈÓ+¸*½Â6nù}7!r¦7nù}7Uî·Uî·Uî·BG]¶*½Â6N +Î7Ö®68N +Î7nù}7*½Â6!r¦7*½Â6BG]¶9ý·‡ƒ¸·<)à·<)à·9ý·‡ƒ¸·BG]¶Uî·nô¸K߸<)à·’=S·Uî·Uî·Ì´¢5nù}7BG]¶N +Î7*½Â6BG]¶9ý·’=S·BG]¶9ý·ÐÐ?¸€ÕS¸ÈÓ+¸0ó{¸)ág¸0ó{¸0ó{¸€ÕS¸ÐÐ?¸nô¸K߸nô¸)ág¸)ág¸9¦¸:’¸s%œ¸s%œ¸Œˆ¸:’¸åfº¸€ÕS¸9¦¸yºØ¸yºØ¸êÙâ¸yºØ¸ëN°¸ëN°¸yºØ¸êÙâ¸à€Ä¸:’¸:’¸0ó{¸s%œ¸ÄœÎ¸êÙâ¸9¦¸êÙâ¸åfº¸:’¸0ó{¸ÐÐ?¸K߸nô¸ÈÓ+¸ÈÓ+¸€ÕS¸ži/7‡ƒ¸·<)à·BG]¶Ì´¢59ý·N +Î7nù}7nù}7§¾õ7Ö®68–µ"8*½Â6XÅ8ÝÇr8Ö®68–µ"8®¸^8–µ"8–µ"8!r¦7’nƒ8ÝÇr8’nƒ8šã¿8šã¿8¢þÉ8šã¿8|ò8-:Þ8†b9‡Zè8…Ô8šã¿8šã¿8|ò8Œ—8‡Zè8†b9¢þÉ8šã¿8¢þÉ8šã¿8€³«8’nƒ8šã¿8€³«8’nƒ8XÅ8|8|8Œ—8XÅ8ÝÇr8ži/7Uî·‡ƒ¸·K߸€ÕS¸9¦¸0ó{¸0ó{¸åfº¸ÄœÎ¸ÄœÎ¸ëN°¸)ág¸€ÕS¸åfº¸yºØ¸yºØ¸s%œ¸ÄœÎ¸à€Ä¸yºØ¸ûì¸õ ¹êÙâ¸:’¸0ó{¸ëN°¸nô¸0ó{¸)ág¸:’¸s%œ¸K߸nô¸BG]¶BG]¶ÈÓ+¸’=S·nô¸<)à·‡ƒ¸·ÈÓ+¸<)à·9ý·Uî·<)à·Uî·9ý·Ì´¢5XÅ8§¾õ7§¾õ7§¾õ7!r¦7®¸^8|8®¸^8XÅ8N +Î7°J8Ö®68–µ"8–µ"8ÝÇr8°J8ÝÇr8°J8–µ"8Ö®68°J8N +Î7§¾õ7®¸^8XÅ8!r¦7XÅ89ý·N +Î7!r¦7XÅ8–µ"8*½Â6N +Î7nù}7*½Â6BG]¶<)à·BG]¶Ì´¢5*½Â6BG]¶K߸K߸ÈÓ+¸<)à·€ÕS¸nô¸0ó{¸ëN°¸:’¸:’¸:’¸:’¸åfº¸yºØ¸:’¸ëN°¸s%œ¸9¦¸ÐÐ?¸9¦¸:’¸åfº¸9¦¸ëN°¸åfº¸yºØ¸ëN°¸0ó{¸Œˆ¸à€Ä¸s%œ¸:’¸:’¸€ÕS¸€ÕS¸K߸K߸K߸<)à·’=S·‡ƒ¸·Ì´¢5Uî·N +Î7BG]¶ži/7ži/7N +Î7Ö®68ÝÇr8°J8–µ"8®¸^8Ö®68|8Œ—8|8§ž¡8†Êµ8§ž¡8§ž¡8§ž¡8€³«8§ž¡8šã¿8-:Þ8¢þÉ8šã¿8Œ—8†Êµ8Áu9|ò8šã¿8…Ô8-:Þ8…Ô8…Ô8†Êµ8†Êµ8§ž¡8Œ—8€³«8§ž¡8ÝÇr8Œ—8|8®¸^8Ö®68Ö®68Œ—8|8Ö®68Ö®68XÅ8ži/7BG]¶Uî·Uî·Ì´¢5K߸’=S·9ý·9ý·’=S·9ý·K߸:’¸ÈÓ+¸nô¸€ÕS¸€ÕS¸)ág¸ÐÐ?¸ÈÓ+¸K߸:’¸9¦¸)ág¸€ÕS¸:’¸ÈÓ+¸€ÕS¸ÈÓ+¸K߸0ó{¸)ág¸åfº¸:’¸:’¸<)à·K߸nô¸K߸<)à·‡ƒ¸·€ÕS¸ÈÓ+¸9ý·nô¸ÈÓ+¸‡ƒ¸·Uî·<)à·9ý·’=S·ži/7ži/7!r¦7nù}7nù}7–µ"8§ž¡8§ž¡8€³«8ÝÇr8€³«8¢þÉ8Œ—8€³«8¢þÉ8šã¿8‡Zè8Ö®68€³«8…Ô8€³«8¢þÉ8-:Þ8|ò8‡Zè8-:Þ8-:Þ8‡Zè8|ò8-:Þ8†b9|ò8Áu9 ü8†b9†b9Áu9¢þÉ8…Ô8€³«8’nƒ8°J8XÅ8’nƒ8€³«8®¸^8°J8®¸^8°J8–µ"8N +Î7N +Î7N +Î7Ì´¢5!r¦7’=S·9ý·‡ƒ¸·<)à·<)à·ÈÓ+¸ÈÓ+¸ëN°¸0ó{¸€ÕS¸0ó{¸€ÕS¸:’¸ëN°¸:’¸åfº¸:’¸s%œ¸9¦¸ÈÓ+¸:’¸€ÕS¸ÐÐ?¸<)à·:’¸)ág¸:’¸ëN°¸0ó{¸)ág¸K߸<)à·<)à·9ý·€ÕS¸9ý·9ý·Uî·‡ƒ¸·Ì´¢5K߸BG]¶N +Î7Ì´¢5nù}7–µ"8°J8°J8XÅ8XÅ8°J8®¸^8’nƒ8ÝÇr8§ž¡8|8®¸^8®¸^8¢þÉ8’nƒ8…Ô8†Êµ8†Êµ8¢þÉ8†Êµ8€³«8€³«8ÝÇr8|8Œ—8’nƒ8’nƒ8€³«8€³«8’nƒ8ÝÇr8Ö®68§¾õ7Ö®68§¾õ7!r¦7nù}7Ì´¢5ži/7!r¦7Ì´¢5Ì´¢5<)à·9ý·’=S·Uî·9ý·‡ƒ¸·9ý·BG]¶nô¸)ág¸€ÕS¸nô¸‡ƒ¸·’=S·BG]¶‡ƒ¸·)ág¸<)à·0ó{¸€ÕS¸€ÕS¸)ág¸0ó{¸€ÕS¸:’¸)ág¸ÈÓ+¸€ÕS¸ÐÐ?¸nô¸s%œ¸ÈÓ+¸€ÕS¸‡ƒ¸·K߸N +Î7Uî·ži/7Ì´¢5!r¦7*½Â6XÅ8Ì´¢5§¾õ7!r¦7ži/7nù}7!r¦7§¾õ7N +Î7®¸^8®¸^8|8Œ—8§ž¡8Œ—8€³«8§ž¡8|8|8Œ—8§ž¡8ÝÇr8®¸^8®¸^8Œ—8§¾õ7–µ"8§ž¡8Ö®68®¸^8|8Œ—8!r¦7*½Â6’=S·9ý·9ý·‡ƒ¸·‡ƒ¸·!r¦7<)à·BG]¶nù}7<)à·nô¸nô¸<)à·<)à·K߸ÈÓ+¸ÈÓ+¸‡ƒ¸·K߸K߸€ÕS¸)ág¸s%œ¸ëN°¸à€Ä¸êÙâ¸9¦¸)ág¸ëN°¸:’¸yºØ¸ëN°¸åfº¸êÙâ¸s%œ¸õ ¹õ ¹ûì¸yºØ¸ûì¸ZÇ +¹b.¹•Û¹ZÇ +¹µ÷¸õ ¹ZÇ +¹ëN°¸åfº¸êÙâ¸ÄœÎ¸ûì¸õ ¹yºØ¸ÄœÎ¸åfº¸s%œ¸à€Ä¸åfº¸K߸ÐÐ?¸‡ƒ¸·ÐÐ?¸ÐÐ?¸9ý·nô¸‡ƒ¸·nô¸’=S·N +Î7!r¦7–µ"8N +Î7Ö®68®¸^8ži/7nù}7*½Â69ý·ži/7Uî·BG]¶ži/7nù}7nù}7ži/7Ì´¢5nù}7ži/7!r¦7ži/7’=S·<)à·Uî·nô¸<)à·ži/7§¾õ7XÅ8€³«8°J8§¾õ7§¾õ7°J8Ö®68N +Î7nù}7|8N +Î7*½Â6nù}7Ì´¢59ý·Uî·ži/7Ì´¢5Ì´¢5*½Â6Ì´¢5‡ƒ¸·Ì´¢5<)à·nô¸‡ƒ¸·<)à·K߸ÈÓ+¸9ý·nô¸Œˆ¸ÐÐ?¸ÈÓ+¸€ÕS¸ÈÓ+¸nô¸’=S·Uî·Ì´¢5nù}7*½Â6’=S·‡ƒ¸·<)à·!r¦7®¸^8ži/7Uî·’=S·*½Â6N +Î7XÅ8ži/7ži/7*½Â6–µ"8’nƒ8°J8Œ—8§ž¡8|8Œ—8€³«8†Êµ8…Ô8-:Þ8¢þÉ8 ü8¢þÉ8|ò8¢þÉ8|ò8Dž9…Ô8‡Zè8-:Þ8|ò8†b9|ò8|ò8-:Þ8šã¿8€³«8†Êµ8…Ô8§ž¡8–µ"8§ž¡8°J8®¸^8°J8°J8XÅ8*½Â69ý·*½Â6Uî·’=S·nù}7*½Â69ý·ži/7ži/79ý·9ý·ži/79ý·’=S·‡ƒ¸·9ý·nô¸)ág¸)ág¸ÈÓ+¸yºØ¸ÄœÎ¸ÄœÎ¸µ÷¸õ ¹êÙâ¸yºØ¸ÿ¹•Û¹Î³¹xð¹µ÷¸µ÷¸•Û¹€z3¹xð¹b.¹$¹xð¹2J)¹ZÇ +¹µ÷¸µ÷¸Î³¹õ ¹•Û¹êÙ⸌ˆ¸à€Ä¸åfº¸:’¸)ág¸)ág¸€ÕS¸<)à·<)à·BG]¶ÐÐ?¸’=S·!r¦7§¾õ7§¾õ7§¾õ7°J8Œ—8Ö®68Ö®68ÝÇr8°J8§ž¡8§ž¡8€³«8€³«8|8ÝÇr8ÝÇr8ÝÇr8®¸^8|8XÅ8ži/7®¸^8°J8–µ"8Ö®68|8|8’nƒ8Œ—8°J8–µ"8§¾õ7nù}7°J8Uî·Ì´¢5Ì´¢5Uî·<)à·<)à·9ý·nô¸)ág¸€ÕS¸s%œ¸ÐÐ?¸€ÕS¸9¦¸9¦¸åfº¸ëN°¸9¦¸êÙâ¸ûì¸åfº¸ûì¸yºØ¸êÙâ¸ûì¸êÙâ¸à€Ä¸yºØ¸åfº¸åfº¸åfº¸êÙâ¸ÄœÎ¸ÄœÎ¸:’¸ëN°¸:’¸)ág¸:’¸9¦¸ëN°¸yºØ¸:’¸åfº¸åfº¸)ág¸ëN°¸åfº¸åfº¸ëN°¸à€Ä¸Œˆ¸ëN°¸9¦¸0ó{¸K߸)ág¸K߸nô¸‡ƒ¸·Uî·’=S·Uî·9ý·!r¦7!r¦7XÅ8Œ—8|8–µ"8§ž¡8šã¿8šã¿8|8€³«8…Ô8€³«8§ž¡8Œ—8€³«8Œ—8|8!r¦7§¾õ7§¾õ7§¾õ7!r¦7ÝÇr8Ö®68Ö®68Ö®68§¾õ7!r¦7°J8!r¦7°J8Ö®68§¾õ7N +Î7®¸^8°J8XÅ8°J8°J8°J8nù}7nù}7BG]¶Ì´¢5*½Â6N +Î7Ì´¢5Uî·Uî·Ì´¢5’=S·nô¸‡ƒ¸·Ì´¢5Ì´¢5Ì´¢5ži/7!r¦7Uî·Uî·<)à·9ý·9ý·‡ƒ¸·’=S·‡ƒ¸·’=S·nô¸*½Â6ži/7N +Î7BG]¶N +Î7®¸^8XÅ8§¾õ7°J8|8ÝÇr8Œ—8ÝÇr8®¸^8|8ÝÇr8’nƒ8’nƒ8…Ô8|8|8Œ—8Œ—8§ž¡8’nƒ8°J8šã¿8-:Þ8šã¿8-:Þ8|ò8|ò8‡Zè8-:Þ8¢þÉ8Áu9­‰ 9†b9‡Zè8Dž9³9-:Þ8‡Zè8§ž¡8-:Þ8-:Þ8…Ô8šã¿8†Êµ8-:Þ8§¾õ7–µ"8XÅ8ži/7ži/7nù}7XÅ8BG]¶Ì´¢5Ì´¢5*½Â6N +Î7XÅ8!r¦7*½Â6BG]¶<)à·‡ƒ¸·ÐÐ?¸0ó{¸€ÕS¸9¦¸:’¸s%œ¸ÐÐ?¸€ÕS¸0ó{¸)ág¸ëN°¸9¦¸€ÕS¸ÐÐ?¸:’¸s%œ¸s%œ¸:’¸0ó{¸:’¸<)à·)ág¸à€Ä¸:’¸€ÕS¸€ÕS¸nô¸:’¸9¦¸:’¸)ág¸:’¸€ÕS¸s%œ¸)ág¸K߸€ÕS¸Œˆ¸ÈÓ+¸ÈÓ+¸:’¸)ág¸9¦¸)ág¸ÐÐ?¸ÐÐ?¸:’¸9¦¸ÈÓ+¸9ý·BG]¶BG]¶!r¦7Ö®68Ö®68®¸^8–µ"8XÅ8§¾õ7*½Â6Ì´¢5N +Î7Ì´¢5§¾õ7N +Î7*½Â6nù}7ži/7BG]¶§¾õ7Uî·ži/7Ì´¢5*½Â6Ì´¢59ý·’=S·€ÕS¸’=S·‡ƒ¸·‡ƒ¸·<)à·ÈÓ+¸)ág¸ÐÐ?¸ÐÐ?¸<)à·ÐÐ?¸:’¸)ág¸:’¸s%œ¸0ó{¸ëN°¸åfº¸ëN°¸:’¸åfº¸à€Ä¸:’¸ëN°¸à€Ä¸à€Ä¸9¦¸9¦¸êÙâ¸yºØ¸ûì¸ZÇ +¹•Û¹•Û¹êÙâ¸Î³¹ÄœÎ¸9¦¸êÙâ¸yºØ¸9¦¸ÄœÎ¸s%œ¸åfº¸ëN°¸0ó{¸Œˆ¸:’¸:’¸ÐÐ?¸€ÕS¸K߸ÈÓ+¸<)à·Ì´¢5*½Â6’=S·ži/7ži/7ži/7N +Î7XÅ8°J8ÝÇr8|8†Êµ8|ò8-:Þ8¢þÉ8§ž¡8¢þÉ8‡Zè8‡Zè8|ò8…Ô8Dž9¢þÉ8-:Þ8 ü8-:Þ8Öß!9Öß!9„,9³9¥ŒE9¥ŒE9„,9Dž9Öß!9³9äö&9^É9„,9Áu9¢þÉ8€³«8€³«8§ž¡8§ž¡8šã¿8†Êµ8-:Þ8§ž¡8’nƒ8’nƒ8®¸^8ÝÇr8Ö®68®¸^8nù}79ý·Ì´¢5ži/7nù}7*½Â6Ì´¢5Ì´¢5<)à·<)à·9ý·9ý·ÐÐ?¸s%œ¸s%œ¸yºØ¸à€Ä¸K߸9¦¸ëN°¸:’¸)ág¸:’¸:’¸9¦¸:’¸åfº¸ûì¸à€Ä¸à€Ä¸)ág¸€ÕS¸ÐÐ?¸Ì´¢5BG]¶’=S·Uî·*½Â6§¾õ7N +Î7§¾õ7BG]¶Ì´¢5Ì´¢5Ì´¢5§¾õ7–µ"8§¾õ7®¸^8N +Î7!r¦7XÅ8Ö®68§¾õ7§¾õ7°J8°J8nù}7!r¦7Ì´¢5‡ƒ¸·Uî·’=S·’=S·BG]¶Uî·ži/7ži/7XÅ8®¸^8N +Î7’=S·Ì´¢5ži/7N +Î7Ö®68XÅ8N +Î7!r¦7!r¦7XÅ8–µ"8Ö®68nù}7XÅ8ži/7–µ"8ÝÇr8–µ"8§ž¡8šã¿8§¾õ7XÅ8®¸^8|8°J8N +Î7Ö®68°J8°J8°J8ži/7BG]¶ži/7Uî·‡ƒ¸·’=S·‡ƒ¸·<)à·ÐÐ?¸:’¸0ó{¸:’¸ëN°¸9¦¸:’¸0ó{¸€ÕS¸€ÕS¸<)à·€ÕS¸)ág¸‡ƒ¸·*½Â6BG]¶ži/7!r¦7N +Î7Ö®68°J8§¾õ7§¾õ7ži/7N +Î7ži/7!r¦7ži/7Ö®68®¸^8°J8–µ"8ÝÇr8N +Î7®¸^8!r¦7®¸^8Ö®68XÅ8§¾õ7§¾õ7XÅ8!r¦7ži/7BG]¶ži/7*½Â6Ì´¢5*½Â6°J8§¾õ7®¸^8N +Î7nù}7–µ"8|8®¸^8–µ"8–µ"8Ö®68°J8nù}7Ö®68§¾õ7§¾õ7§¾õ7N +Î7Uî·°J8!r¦7<)à·<)à·<)à·ÈÓ+¸K߸ÐÐ?¸K߸K߸s%œ¸)ág¸Œˆ¸€ÕS¸:’¸ëN°¸ÄœÎ¸:’¸s%œ¸:’¸à€Ä¸yºØ¸yºØ¸µ÷¸ÄœÎ¸êÙâ¸êÙâ¸ÄœÎ¸ÄœÎ¸ëN°¸µ÷¸ÿ¹õ ¹ZÇ +¹ZÇ +¹õ ¹ÿ¹ûì¸û층÷¸µ÷¸êÙâ¸:’¸s%œ¸s%œ¸0ó{¸ÐÐ?¸K߸*½Â6BG]¶<)à·’=S·<)à·ÐÐ?¸<)à·’=S·Uî·Ì´¢5Ì´¢5Ì´¢5ži/7XÅ8nù}7BG]¶®¸^8ÝÇr8!r¦7§¾õ7nù}7–µ"8°J8XÅ8§¾õ7XÅ8°J8ÝÇr8šã¿8†Êµ8§ž¡8’nƒ8€³«8šã¿8†Êµ8’nƒ8N +Î7N +Î7°J8®¸^8ÝÇr8°J8®¸^8°J8ÝÇr8Ö®68°J8Ö®68°J8Ö®68ÝÇr8|8Ö®68!r¦7nù}7!r¦7nù}7Ì´¢5‡ƒ¸·BG]¶’=S·Uî·Ì´¢5§¾õ7’=S·K߸9ý·<)à·)ág¸‡ƒ¸·Uî·<)à·’=S·9ý·BG]¶Ì´¢59ý·BG]¶BG]¶*½Â6<)à·K߸Uî·’=S·Uî·9ý·ži/7BG]¶*½Â6‡ƒ¸·Uî·Ì´¢5Ì´¢5BG]¶nù}7Uî·*½Â6BG]¶§¾õ7*½Â6–µ"8Ö®68|8|8°J8’nƒ8†Êµ8|8Œ—8’nƒ8|ò8†Êµ8šã¿8†Êµ8Œ—8Ö®68®¸^8ÝÇr8’nƒ8|8’nƒ8§ž¡8šã¿8§ž¡8Œ—8§ž¡8’nƒ8’nƒ8Œ—8°J8®¸^8°J8–µ"8°J8*½Â6ži/7N +Î7Uî·‡ƒ¸·K߸’=S·Uî·’=S·BG]¶Uî·Uî·<)à·K߸’=S·<)à·<)à·ëN°¸€ÕS¸9¦¸)ág¸Œˆ¸ÐÐ?¸ÐÐ?¸nô¸s%œ¸s%œ¸9¦¸yºØ¸à€Ä¸åfº¸êÙâ¸à€Ä¸s%œ¸ÄœÎ¸:’¸ûì¸ëN°¸)ág¸ÐÐ?¸K߸:’¸ÈÓ+¸€ÕS¸K߸K߸ÐÐ?¸K߸ÐÐ?¸€ÕS¸<)à·<)à·BG]¶Ì´¢5’=S·9ý·Uî·*½Â6BG]¶ži/7BG]¶‡ƒ¸·Uî·Ì´¢5N +Î7§¾õ7–µ"8XÅ8–µ"8°J8°J8ži/7®¸^8®¸^8ÝÇr8§¾õ7Ö®68–µ"8Ö®68’nƒ8€³«8ÝÇr8€³«8‡Zè8€³«8§ž¡8§ž¡8†Êµ8€³«8€³«8’nƒ8–µ"8°J8’nƒ8’nƒ8ÝÇr8!r¦7–µ"8°J8nù}7§¾õ7nù}7!r¦7!r¦7–µ"8!r¦7Ì´¢5BG]¶Uî·N +Î7nù}7ži/7Ì´¢5nù}7nù}7nù}7Ì´¢5K߸<)à·Uî·<)à·nô¸ÈÓ+¸’=S·nô¸€ÕS¸‡ƒ¸·<)à·<)à·‡ƒ¸·<)à·nô¸ÐÐ?¸K߸)ág¸ÈÓ+¸ÐÐ?¸ÈÓ+¸K߸s%œ¸Uî·<)à·BG]¶Ì´¢5ži/7*½Â6§¾õ7N +Î7–µ"8’nƒ8°J8Ö®68§ž¡8…Ô8’nƒ8’nƒ8|8šã¿8|ò8Dž9­‰ 9|ò8Áu9Áu9Áu9†b9³9Áu9†b9²&19 ü8šã¿8‡Zè8šã¿8Œ—8|8Œ—8|8’nƒ8ÝÇr8Ö®68nù}7°J8!r¦7nù}7!r¦7!r¦7Ì´¢5Ì´¢5’=S·<)à·‡ƒ¸·BG]¶ÈÓ+¸ÈÓ+¸<)à·K߸<)à·)ág¸ÐÐ?¸ÐÐ?¸K߸0ó{¸ÐÐ?¸:’¸:’¸ÄœÎ¸ÄœÎ¸åfº¸ûì¸ûì¸õ ¹ûì¸êÙâ¸yºØ¸û층÷¸yºØ¸:’¸ûì¸s%œ¸ÈÓ+¸åfº¸:’¸€ÕS¸)ág¸ÈÓ+¸€ÕS¸:’¸€ÕS¸:’¸êÙâ¸yºØ¸åfº¸yºØ¸ëN°¸ëN°¸ëN°¸)ág¸:’¸€ÕS¸0ó{¸:’¸€ÕS¸K߸Uî·!r¦7ži/7–µ"8XÅ8XÅ8ži/7!r¦7–µ"8Œ—8§ž¡8Œ—8Œ—8’nƒ8®¸^8Ö®68|8¢þÉ8§ž¡8…Ô8-:Þ8€³«8¢þÉ8šã¿8†Êµ8¢þÉ8†Êµ8Œ—8…Ô8¢þÉ8-:Þ8‡Zè8€³«8’nƒ8|8§ž¡8€³«8†Êµ8†Êµ8šã¿8šã¿8šã¿8†Êµ8 ü8Œ—8…Ô8†b9†Êµ8…Ô8–µ"8§ž¡8’nƒ8|8®¸^8N +Î7®¸^8|8°J8Ö®68N +Î7§¾õ7–µ"8–µ"8®¸^8XÅ8–µ"8BG]¶ži/7’=S·K߸ÐÐ?¸s%œ¸)ág¸ÈÓ+¸)ág¸K߸ÐÐ?¸:’¸K߸K߸€ÕS¸ÐÐ?¸<)à·nô¸s%œ¸ÈÓ+¸ÈÓ+¸nô¸BG]¶9ý·<)à·nô¸Uî·’=S·Ì´¢5’=S·’=S·’=S·§¾õ7§¾õ7°J8ži/7‡ƒ¸·N +Î7–µ"8–µ"8nù}7BG]¶Ì´¢5*½Â6ži/7’=S·BG]¶!r¦7XÅ8nù}7Ö®68°J8®¸^8ÝÇr8’nƒ8XÅ8XÅ8§¾õ7BG]¶Ö®68XÅ8!r¦7!r¦7ži/7’nƒ8°J8N +Î7!r¦7Ö®68XÅ8!r¦7nù}7!r¦7Uî·<)à·K߸<)à·’=S·*½Â6‡ƒ¸·BG]¶nô¸Œˆ¸Œˆ¸:’¸€ÕS¸:’¸ÈÓ+¸0ó{¸:’¸0ó{¸)ág¸:’¸åfº¸ëN°¸9¦¸ëN°¸åfº¸åfº¸à€Ä¸ëN°¸åfº¸:’¸ÄœÎ¸s%œ¸Œˆ¸)ág¸K߸ÈÓ+¸ÐÐ?¸Ì´¢5nù}7Ì´¢5*½Â6*½Â6Uî·Uî·’=S·Uî·9ý·K߸‡ƒ¸·BG]¶’=S·Ì´¢5Ì´¢5ži/7ži/7Ì´¢5BG]¶BG]¶’=S·N +Î7’=S·‡ƒ¸·ži/7§¾õ7°J8*½Â6!r¦7XÅ8XÅ8!r¦7XÅ8§¾õ7ÝÇr8Ì´¢5ži/7®¸^8§¾õ7XÅ8°J8§¾õ7Ö®68*½Â6Ì´¢5‡ƒ¸·*½Â6BG]¶K߸€ÕS¸‡ƒ¸·K߸nô¸ÐÐ?¸:’¸nô¸Œˆ¸€ÕS¸0ó{¸ÈÓ+¸K߸nô¸<)à·ÈÓ+¸<)à·’=S·nô¸‡ƒ¸·nô¸<)à·Uî·’=S·ÐÐ?¸K߸nô¸‡ƒ¸·<)à·nô¸’=S·<)à·9ý·ÐÐ?¸ÈÓ+¸‡ƒ¸·€ÕS¸:’¸:’¸:’¸9¦¸s%œ¸s%œ¸:’¸:’¸:’¸:’¸Œˆ¸0ó{¸:’¸)ág¸€ÕS¸K߸<)à·’=S·<)à·Ì´¢5nô¸nô¸Ì´¢59ý·nù}7N +Î7!r¦7§¾õ7BG]¶nù}7§¾õ7XÅ8°J8ÝÇr8XÅ8–µ"8|8®¸^8N +Î7Œ—8|8’nƒ8’nƒ8ÝÇr8§¾õ7Ö®68§¾õ7®¸^8N +Î7®¸^8°J8’nƒ8!r¦7’nƒ8®¸^8Œ—8°J8|8|8ÝÇr8°J8–µ"8N +Î7N +Î7§¾õ7§¾õ7*½Â6BG]¶!r¦7Ì´¢5BG]¶‡ƒ¸·‡ƒ¸·*½Â6nù}7‡ƒ¸·9ý·0ó{¸BG]¶9ý·K߸:’¸ÐÐ?¸0ó{¸s%œ¸s%œ¸:’¸Œˆ¸)ág¸ÈÓ+¸åfº¸9¦¸:’¸s%œ¸9¦¸s%œ¸:’¸:’¸)ág¸ëN°¸)ág¸0ó{¸:’¸€ÕS¸)ág¸:’¸ÈÓ+¸ÐÐ?¸K߸ÐÐ?¸ÈÓ+¸nô¸‡ƒ¸·9ý·’=S·N +Î7ži/7ži/7’=S·!r¦7Ì´¢5*½Â6nù}7!r¦7nù}7§¾õ7*½Â6nù}7N +Î7XÅ8nù}7XÅ8°J8°J8Œ—8ÝÇr8¢þÉ8®¸^8XÅ8Ö®68–µ"8§¾õ7–µ"8®¸^8XÅ8Ö®68N +Î7XÅ8Ö®68§¾õ7°J8®¸^8nù}7N +Î7BG]¶*½Â6ži/7’=S·K߸’=S·*½Â6‡ƒ¸·‡ƒ¸·<)à·<)à·nô¸9ý·‡ƒ¸·<)à·9ý·BG]¶K߸nô¸Ì´¢5‡ƒ¸·Uî·Ì´¢5nù}79ý·nô¸Uî·9ý·Ì´¢5‡ƒ¸·ÈÓ+¸Uî·Ì´¢5<)à·<)à·‡ƒ¸·‡ƒ¸·’=S·’=S·N +Î7*½Â6§¾õ7–µ"8Ö®68Ö®68§¾õ7N +Î7|8°J8’nƒ8Œ—8–µ"8¢þÉ8†Êµ8Œ—8|8§ž¡8®¸^8§ž¡8¢þÉ8šã¿8¢þÉ8†b9Dž9…Ô8Áu9¢þÉ8‡Zè8šã¿8ÝÇr8Œ—8’nƒ8®¸^8’nƒ8|8šã¿8®¸^8Œ—8§ž¡8®¸^8’nƒ8°J8ÝÇr8®¸^8Œ—8Œ—8Œ—8°J8Ö®68’nƒ8°J8XÅ8Ö®68!r¦7N +Î7§¾õ7!r¦7nù}7nù}7<)à·nù}7nù}7*½Â6*½Â6ÐÐ?¸‡ƒ¸·nô¸K߸€ÕS¸:’¸9¦¸)ág¸Œˆ¸0ó{¸ÈÓ+¸€ÕS¸nô¸:’¸ÐÐ?¸)ág¸à€Ä¸0ó{¸9¦¸ÄœÎ¸êÙâ¸êÙâ¸à€Ä¸s%œ¸:’¸åfº¸ÐÐ?¸Œˆ¸)ág¸ÐÐ?¸s%œ¸:’¸ÐÐ?¸K߸nô¸ÈÓ+¸K߸ÈÓ+¸€ÕS¸nô¸nô¸Ì´¢5’=S·ÈÓ+¸)ág¸ÈÓ+¸Uî·BG]¶Ì´¢5*½Â6*½Â6ži/7N +Î7nù}7§¾õ7§¾õ7Ö®68XÅ8°J8§ž¡8’nƒ8|8–µ"8Œ—8ÝÇr8®¸^8-:Þ8†b9 ü8 ü8…Ô8-:Þ8¢þÉ8¢þÉ8Œ—8’nƒ8°J8XÅ8XÅ8N +Î7®¸^8XÅ8XÅ8ži/7’=S·nô¸‡ƒ¸·9ý·<)à·nô¸BG]¶XÅ89ý·Ì´¢5Ì´¢5nô¸‡ƒ¸·nô¸ži/7’=S·<)à·nô¸ÈÓ+¸9ý·‡ƒ¸·BG]¶9ý·K߸’=S·ÐÐ?¸€ÕS¸à€Ä¸êÙ⸵÷¸µ÷¸åfº¸)ág¸9¦¸êÙâ¸9¦¸:’¸à€Ä¸ëN°¸)ág¸9¦¸9¦¸:’¸Œˆ¸:’¸:’¸:’¸:’¸0ó{¸:’¸ÐÐ?¸nô¸K߸BG]¶’=S·nù}7BG]¶9ý·N +Î7nù}7–µ"8§¾õ7XÅ8–µ"8XÅ8Œ—8|8’nƒ8°J8’nƒ8°J8’nƒ8°J8°J8°J8Ö®68’=S·ži/7!r¦7§¾õ7§¾õ7N +Î7–µ"8|8ÝÇr8§¾õ7–µ"8Ö®68XÅ8’nƒ8*½Â6ÝÇr8*½Â6ži/7nù}7BG]¶nù}7nù}7Uî·BG]¶‡ƒ¸·ÈÓ+¸K߸<)à·ÈÓ+¸BG]¶nô¸K߸ÐÐ?¸0ó{¸0ó{¸€ÕS¸<)à·<)à·’=S·K߸ÐÐ?¸K߸)ág¸€ÕS¸:’¸€ÕS¸:’¸9¦¸s%œ¸Œˆ¸9¦¸åfº¸9¦¸ëN°¸yºØ¸ëN°¸0ó{¸åfº¸åfº¸s%œ¸ëN°¸)ág¸€ÕS¸:’¸:’¸0ó{¸ÈÓ+¸K߸ÈÓ+¸<)à·9ý·Ì´¢5ži/7nù}7!r¦7nù}7XÅ8Ö®68XÅ8XÅ8–µ"8°J8Ö®68Œ—8§ž¡8|8ÝÇr8Œ—8€³«8¢þÉ8Œ—8§ž¡8šã¿8…Ô8Áu9Áu9³9|ò8 ü8 ü8†b9Áu9|ò8‡Zè8|ò8Áu9|8 ü8‡Zè8Œ—8…Ô8€³«8Œ—8Œ—8€³«8®¸^8§ž¡8!r¦7nù}7!r¦7’=S·N +Î7nù}7§¾õ7’=S·ži/7N +Î7ži/7§¾õ7BG]¶Ì´¢5ži/7*½Â6!r¦7‡ƒ¸·K߸K߸<)à·K߸ÈÓ+¸)ág¸€ÕS¸<)à·<)à·)ág¸ÐÐ?¸ÐÐ?¸ÐÐ?¸€ÕS¸)ág¸s%œ¸0ó{¸)ág¸K߸)ág¸‡ƒ¸·‡ƒ¸·ÈÓ+¸ÈÓ+¸’=S·’=S·nù}7Ö®68ži/7–µ"8–µ"8°J8XÅ8ÝÇr8|8XÅ8’nƒ8°J8’nƒ8šã¿8|8|8®¸^8€³«8€³«8|8§ž¡8§ž¡8šã¿8Áu9|ò8†b9Öß!9Dž9 ü8„,9„,9³9­‰ 9Áu9Dž9¢þÉ8-:Þ8­‰ 9…Ô8…Ô8 ü8§ž¡8†Êµ8§ž¡8°J8ÝÇr8€³«8§ž¡8’nƒ8!r¦7’nƒ8XÅ8–µ"8!r¦7nù}7Uî·Uî·Ö®68!r¦7K߸<)à·BG]¶’=S·<)à·<)à·:’¸ÈÓ+¸€ÕS¸‡ƒ¸·)ág¸K߸nô¸)ág¸)ág¸ëN°¸9¦¸Œˆ¸)ág¸:’¸)ág¸:’¸s%œ¸0ó{¸€ÕS¸ÐÐ?¸ÈÓ+¸ÈÓ+¸‡ƒ¸·BG]¶Uî·Uî·*½Â6Uî·9¦¸K߸‡ƒ¸·9ý·<)à·nô¸‡ƒ¸·’=S·BG]¶Ì´¢5‡ƒ¸·§¾õ7nù}7ži/7BG]¶BG]¶!r¦7nù}7N +Î7!r¦7XÅ8ži/7N +Î7XÅ8§¾õ7ži/7*½Â6nù}7nù}7nù}7XÅ8XÅ8!r¦7ži/7–µ"8N +Î7§¾õ7XÅ8Ì´¢5!r¦7!r¦7*½Â6*½Â6*½Â6nù}7*½Â6ži/7!r¦7’=S·Uî·Ì´¢59ý·’=S·’=S·Uî·<)à·K߸ÈÓ+¸ÐÐ?¸‡ƒ¸·€ÕS¸:’¸:’¸s%œ¸9¦¸s%œ¸:’¸0ó{¸s%œ¸€ÕS¸0ó{¸:’¸s%œ¸åfº¸ëN°¸ëN°¸à€Ä¸yºØ¸ûì¸êÙâ¸Î³¹•Û¹õ ¹ZÇ +¹µ÷¸µ÷¸•Û¹µ÷¸ëN°¸yºØ¸à€Ä¸ZÇ +¹à€Ä¸:’¸:’¸ÈÓ+¸s%œ¸)ág¸K߸9ý·9ý·<)à·nô¸9ý·9ý·BG]¶nù}7nù}7*½Â6*½Â6!r¦7*½Â6!r¦7–µ"8§¾õ7nù}7nù}7!r¦7ži/7–µ"8®¸^8’nƒ8ÝÇr8Ö®68ži/7§¾õ7ži/7XÅ8nù}7–µ"8!r¦7nù}7BG]¶*½Â6§¾õ7!r¦7Ö®68’nƒ8–µ"8°J8®¸^8Ö®68Ö®68’=S·‡ƒ¸·<)à·’=S·<)à·9ý·’=S·K߸9ý·<)à·’=S·9ý·€ÕS¸:’¸:’¸:’¸ëN°¸êÙâ¸s%œ¸ÄœÎ¸µ÷¸9¦¸ëN°¸s%œ¸s%œ¸:’¸:’¸:’¸åfº¸)ág¸:’¸yºØ¸yºØ¸:’¸:’¸ÐÐ?¸ÈÓ+¸)ág¸0ó{¸K߸€ÕS¸)ág¸:’¸:’¸nô¸ÐÐ?¸9ý·‡ƒ¸·’=S·ÈÓ+¸Uî·N +Î7Ì´¢5Uî·’=S·*½Â6N +Î7!r¦7§¾õ7®¸^8nù}7!r¦7BG]¶BG]¶nù}7<)à·9ý·‡ƒ¸·Uî·BG]¶<)à·nô¸Uî·*½Â6‡ƒ¸·Uî·BG]¶9ý·BG]¶*½Â6<)à·*½Â6XÅ8Ì´¢5’=S·‡ƒ¸·nô¸nù}7Ì´¢5Ì´¢5nù}7’=S·’=S·nô¸)ág¸K߸ÐÐ?¸nô¸K߸0ó{¸)ág¸ÈÓ+¸K߸9¦¸9¦¸€ÕS¸åfº¸à€Ä¸ÄœÎ¸ëN°¸ÄœÎ¸•Û¹ZÇ +¹à€Ä¸êÙâ¸Î³¹xð¹ÄœÎ¸ÄœÎ¸õ ¹ûì¸ûì¸êÙâ¸ûì¸ëN°¸:’¸:’¸ûì¸9¦¸à€Ä¸9¦¸ëN°¸åfº¸ëN°¸:’¸s%œ¸:’¸ÐÐ?¸<)à·nô¸ÈÓ+¸nô¸nô¸ÐÐ?¸9ý·K߸‡ƒ¸·Ì´¢5Ì´¢5ži/7BG]¶nù}7nù}7–µ"8§¾õ7§¾õ7°J8XÅ8XÅ8N +Î7–µ"8§¾õ7Ì´¢5§¾õ7ži/7®¸^8†Êµ8’nƒ8§¾õ7ÝÇr8–µ"8Ö®68nù}7’=S·!r¦7!r¦7Uî·BG]¶*½Â6ži/7§¾õ7Ì´¢5XÅ8BG]¶‡ƒ¸·Uî·<)à·K߸ÐÐ?¸:’¸ÈÓ+¸)ág¸‡ƒ¸·9ý·ÐÐ?¸ÐÐ?¸9¦¸s%œ¸€ÕS¸Œˆ¸0ó{¸9¦¸åfº¸9¦¸õ ¹ÄœÎ¸à€Ä¸µ÷¸êÙâ¸ûì¸ûì¸õ ¹ëN°¸ëN°¸9¦¸s%œ¸0ó{¸)ág¸0ó{¸ÐÐ?¸‡ƒ¸·’=S·’=S·Ì´¢5!r¦7*½Â6N +Î7Ö®68°J8ÝÇr8®¸^8Ö®68Œ—8|8Œ—8§ž¡8Œ—8–µ"8°J8XÅ8N +Î7ÝÇr8§ž¡8|8Ö®68°J8§ž¡8¢þÉ8…Ô8¢þÉ8§ž¡8-:Þ8¢þÉ8Œ—8¢þÉ8…Ô8€³«8šã¿8…Ô8šã¿8…Ô8†b9šã¿8|8®¸^8-:Þ8†Êµ8¢þÉ8§ž¡8®¸^8’nƒ8|8§ž¡8°J8’nƒ8N +Î7Ö®68!r¦7BG]¶9ý·’=S·’=S·nô¸nô¸‡ƒ¸·K߸ÈÓ+¸K߸)ág¸)ág¸)ág¸)ág¸)ág¸)ág¸s%œ¸ëN°¸ëN°¸ëN°¸9¦¸s%œ¸9¦¸€ÕS¸nô¸nô¸<)à·nô¸€ÕS¸s%œ¸s%œ¸åfº¸9¦¸9¦¸:’¸)ág¸s%œ¸ëN°¸s%œ¸:’¸9¦¸ëN°¸Œˆ¸ÐÐ?¸:’¸Œˆ¸0ó{¸êÙâ¸9¦¸ÈÓ+¸ÈÓ+¸nô¸‡ƒ¸·’=S·Ì´¢5Uî·*½Â6§¾õ7Ì´¢5Ö®68–µ"8§¾õ7XÅ8ÝÇr8¢þÉ8€³«8§ž¡8¢þÉ8§ž¡8|8Œ—8…Ô8|8‡Zè8†Êµ8­‰ 9-:Þ8‡Zè8†b9‡Zè8-:Þ8šã¿8†Êµ8Œ—8†Êµ8…Ô8†Êµ8€³«8€³«8Œ—8šã¿8’nƒ8°J8N +Î7!r¦7Ì´¢5BG]¶‡ƒ¸·nô¸ÈÓ+¸9ý·K߸ÐÐ?¸nô¸‡ƒ¸·0ó{¸ÐÐ?¸ÐÐ?¸€ÕS¸ÐÐ?¸:’¸9¦¸9¦¸9¦¸:’¸:’¸ûì¸êÙ⸵÷¸õ ¹Î³¹õ ¹åfº¸yºØ¸yºØ¸ÄœÎ¸9¦¸yºØ¸à€Ä¸9¦¸:’¸<)à·K߸s%œ¸ÐÐ?¸à€Ä¸ÈÓ+¸nô¸Uî·*½Â6Ì´¢5Uî·‡ƒ¸·Uî·N +Î7!r¦7–µ"8–µ"8XÅ8§¾õ7ÝÇr8’nƒ8’nƒ8ÝÇr8Œ—8|8€³«8†Êµ8 ü8 ü8 ü8³9²&19Öß!9äö&9Öß!9Dž9Áu9­‰ 9­‰ 9Öß!9†b9Öß!9Dž9­‰ 9Dž9Öß!9i?69³9Dž9­‰ 9^É9­‰ 9†b9…Ô8€³«8†Êµ8€³«8Œ—8|8†Êµ8°J8–µ"8°J8ÝÇr8€³«8°J8°J8Ö®68XÅ8nù}7!r¦7Uî·*½Â6<)à·BG]¶BG]¶’=S·Uî·’=S·BG]¶BG]¶ÈÓ+¸K߸BG]¶<)à·<)à·’=S·€ÕS¸:’¸K߸<)à·<)à·‡ƒ¸·<)à·9ý·’=S·‡ƒ¸·K߸€ÕS¸‡ƒ¸·<)à·nô¸‡ƒ¸·ÈÓ+¸ÐÐ?¸BG]¶nù}7Uî·Uî·9ý·*½Â6§¾õ7Ö®68N +Î7Ö®68§¾õ7–µ"8’nƒ8–µ"8Ö®68ÝÇr8’nƒ8Œ—8§ž¡8ÝÇr8ÝÇr8§ž¡8…Ô8|8°J8šã¿8§ž¡8†Êµ8¢þÉ8‡Zè8‡Zè8†Êµ8§ž¡8§ž¡8Œ—8§ž¡8ÝÇr8°J8°J8–µ"8ÝÇr8|8–µ"8°J8®¸^8Ö®68–µ"8XÅ8ÝÇr8!r¦7§¾õ7*½Â6nù}7Ì´¢5’=S·‡ƒ¸·Ì´¢5‡ƒ¸·K߸ÈÓ+¸nô¸K߸Œˆ¸:’¸:’¸ëN°¸ûì¸êÙâ¸åfº¸êÙâ¸êÙâ¸9¦¸à€Ä¸yºØ¸yºØ¸)ág¸Œˆ¸åfº¸ÄœÎ¸êÙâ¸à€Ä¸s%œ¸s%œ¸åfº¸:’¸ÐÐ?¸nô¸nô¸K߸K߸‡ƒ¸·9ý·<)à·’=S·9ý·<)à·ži/7Ì´¢5Ì´¢5<)à·9ý·<)à·K߸BG]¶ži/7N +Î7!r¦7|8Ö®68°J8’nƒ8Œ—8šã¿8®¸^8†Êµ8†b9¢þÉ8€³«8|ò8šã¿8…Ô8€³«8¢þÉ8šã¿8|ò8€³«8Œ—8šã¿8§ž¡8šã¿8…Ô8-:Þ8šã¿8…Ô8‡Zè8…Ô8-:Þ8¢þÉ8’nƒ8-:Þ8€³«8°J8€³«8†Êµ8šã¿8¢þÉ8¢þÉ8’nƒ8’nƒ8®¸^8|8†Êµ8…Ô8€³«8†Êµ8ži/7ÝÇr8|8–µ"8–µ"8!r¦7Ì´¢5XÅ8*½Â6!r¦7BG]¶BG]¶9ý·BG]¶<)à·*½Â6ži/7BG]¶‡ƒ¸·K߸Uî·‡ƒ¸·‡ƒ¸·9ý·*½Â6’=S·*½Â6*½Â6*½Â6N +Î7šã¿8¢þÉ8®¸^8XÅ8°J8°J8’nƒ8†Êµ8§ž¡8-:Þ8šã¿8’nƒ8’nƒ8§ž¡8§ž¡8¢þÉ8|8¢þÉ8|ò8-:Þ8-:Þ8 ü8­‰ 9¢þÉ8Dž9Áu9 ü8 ü8¢þÉ8-:Þ8Áu9Dž9 ü8|ò8‡Zè8|ò8‡Zè8¢þÉ8’nƒ8|ò8…Ô8†Êµ8°J8XÅ8’nƒ8†Êµ8–µ"8°J8XÅ8!r¦7nù}7§¾õ7Uî·Uî·ži/7§¾õ7N +Î7ži/7Uî·Ì´¢5!r¦7*½Â6’=S·*½Â6ÈÓ+¸<)à·*½Â6nô¸Uî·BG]¶Uî·Uî·‡ƒ¸·nô¸ÈÓ+¸‡ƒ¸·nô¸<)à·ÈÓ+¸€ÕS¸s%œ¸9¦¸)ág¸Œˆ¸à€Ä¸s%œ¸à€Ä¸êÙâ¸0ó{¸nô¸s%œ¸:’¸:’¸€ÕS¸€ÕS¸0ó{¸Ì´¢5Ì´¢5ži/7BG]¶Uî·§¾õ7Ì´¢5–µ"8°J8!r¦7–µ"8§¾õ7Œ—8€³«8®¸^8ÝÇr8ÝÇr8šã¿8Œ—8§ž¡8¢þÉ8€³«8¢þÉ8šã¿8…Ô8-:Þ8³9|ò8‡Zè8…Ô8šã¿8†Êµ8‡Zè8…Ô8†Êµ8‡Zè8šã¿8…Ô8‡Zè8-:Þ8…Ô8-:Þ8€³«8’nƒ8ÝÇr8Ö®68|8§¾õ7°J8°J8Ì´¢5ži/7nô¸nô¸0ó{¸ÈÓ+¸9¦¸ëN°¸à€Ä¸ZÇ +¹õ ¹ûì¸yºØ¸ûì¸õ ¹•Û¹b.¹ÿ¹à2$¹b.¹2J)¹2J)¹RüL¹î¬=¹2J)¹2J)¹ÿ¹èÆB¹î¬=¹ÿ¹Î³¹µ÷¸êÙ⸕Û¹µ÷¸à€Ä¸ÄœÎ¸åfº¸õ ¹õ ¹ÄœÎ¸ÄœÎ¸à€Ä¸yºØ¸ëN°¸€ÕS¸s%œ¸:’¸:’¸s%œ¸0ó{¸:’¸9¦¸ÐÐ?¸0ó{¸0ó{¸0ó{¸€ÕS¸9ý·<)à·9ý·ži/7nù}7nù}7Ì´¢5Uî·nù}7N +Î7XÅ8BG]¶ži/7°J8ži/7°J8§¾õ7*½Â6!r¦7N +Î7!r¦7!r¦7!r¦7BG]¶*½Â6*½Â6ži/7Ì´¢59ý·€ÕS¸€ÕS¸)ág¸Œˆ¸:’¸Œˆ¸)ág¸:’¸ëN°¸à€Ä¸ÄœÎ¸à€Ä¸à€Ä¸€ÕS¸9¦¸s%œ¸ÐÐ?¸nô¸K߸‡ƒ¸·ÐÐ?¸K߸nô¸ÈÓ+¸ÈÓ+¸ÈÓ+¸K߸€ÕS¸ÐÐ?¸nô¸K߸ÈÓ+¸nô¸)ág¸K߸0ó{¸0ó{¸<)à·€ÕS¸<)à·ÈÓ+¸K߸<)à·€ÕS¸:’¸0ó{¸:’¸s%œ¸Œˆ¸)ág¸ÐÐ?¸)ág¸<)à·ÈÓ+¸9ý·BG]¶‡ƒ¸·‡ƒ¸·<)à·’=S·‡ƒ¸·*½Â6nù}7–µ"8N +Î7XÅ8N +Î7ži/7§¾õ7°J8|8°J8|8†Êµ8Œ—8®¸^8€³«8|8Œ—8§ž¡8§ž¡8†Êµ8†Êµ8–µ"8°J8’nƒ8’nƒ8®¸^8Ö®68°J8°J8ÝÇr8’nƒ8XÅ8ži/7§¾õ7*½Â6BG]¶BG]¶Ì´¢5Uî·Uî·BG]¶*½Â6K߸‡ƒ¸·ÈÓ+¸K߸€ÕS¸)ág¸åfº¸à€Ä¸9¦¸9¦¸Î³¹ÄœÎ¸xð¹à€Ä¸yºØ¸à2$¹xð¹•Û¹•Û¹êÙâ¸ûì¸êÙ⸵÷¸ûì¸û층÷¸ûì¸ûì¸ÄœÎ¸ûì¸ûì¸à€Ä¸:’¸ÄœÎ¸åfº¸s%œ¸9¦¸:’¸ÈÓ+¸€ÕS¸nô¸’=S·BG]¶*½Â6Uî·BG]¶XÅ8Ì´¢5–µ"8|8§¾õ7®¸^8®¸^8Œ—8ÝÇr8ÝÇr8Œ—8°J8|8†Êµ8°J8ÝÇr8Œ—8°J8|8ÝÇr8|8§ž¡8®¸^8°J8ÝÇr8|8Œ—8–µ"8–µ"8XÅ8Ì´¢5nù}7<)à·9ý·BG]¶N +Î7Ì´¢5BG]¶*½Â6§¾õ7!r¦7§¾õ7!r¦7°J8XÅ8’=S·<)à·K߸9ý·<)à·<)à·ÈÓ+¸K߸‡ƒ¸·ži/79ý·9ý·ÈÓ+¸åfº¸:’¸9¦¸€ÕS¸ëN°¸åfº¸€ÕS¸K߸:’¸)ág¸€ÕS¸)ág¸K߸€ÕS¸)ág¸Œˆ¸åfº¸ÄœÎ¸9¦¸:’¸åfº¸ûì¸ëN°¸ëN°¸åfº¸ëN°¸0ó{¸ÈÓ+¸s%œ¸:’¸€ÕS¸s%œ¸:’¸s%œ¸:’¸<)à·<)à·<)à·:’¸)ág¸‡ƒ¸·nô¸nô¸ži/7Ì´¢5!r¦7N +Î7<)à·<)à·N +Î7Uî·ži/7§¾õ7§¾õ7XÅ8§¾õ7N +Î7!r¦7*½Â6–µ"8XÅ8–µ"8ÝÇr8!r¦7§¾õ7N +Î7*½Â6*½Â6XÅ8!r¦7Ì´¢5ži/7BG]¶Ì´¢59ý·9ý·’=S·Uî·Uî·9ý·9ý·<)à·nô¸ÈÓ+¸ÈÓ+¸‡ƒ¸·‡ƒ¸·€ÕS¸K߸nô¸0ó{¸:’¸nô¸ëN°¸:’¸:’¸ëN°¸Œˆ¸yºØ¸9¦¸ëN°¸ëN°¸9¦¸yºØ¸êÙ⸵÷¸ÿ¹µ÷¸•Û¹Î³¹xð¹ÿ¹µ÷¸xð¹•Û¹yºØ¸à€Ä¸åfº¸ëN°¸0ó{¸ÐÐ?¸K߸ÈÓ+¸nô¸9ý·Uî·<)à·nô¸ÈÓ+¸nô¸ÈÓ+¸<)à·’=S·<)à·9ý·nô¸nô¸nù}79ý·!r¦7!r¦7Uî·*½Â6ži/7BG]¶§¾õ7§¾õ7N +Î7Ö®68!r¦7XÅ8–µ"89ý·*½Â6–µ"8nù}7N +Î7§¾õ7’=S·!r¦7Ì´¢5ži/7Ö®68nù}7!r¦7N +Î7Ö®68Ö®68nù}7Uî·‡ƒ¸·Uî·9ý·BG]¶‡ƒ¸·K߸<)à·‡ƒ¸·ÐÐ?¸’=S·Uî·Ì´¢5‡ƒ¸·Uî·‡ƒ¸·9ý·’=S·<)à·!r¦7!r¦7’=S·Ì´¢5ži/7Uî·Uî·9ý·BG]¶’=S·<)à·nô¸K߸€ÕS¸’=S·ÈÓ+¸€ÕS¸nô¸ÐÐ?¸‡ƒ¸·<)à·BG]¶Uî·’=S·Ì´¢5Uî·’=S·<)à·*½Â6ži/7nù}7!r¦7°J8–µ"8’nƒ8Œ—8¢þÉ8-:Þ8‡Zè8-:Þ8¢þÉ8 ü8Áu9Œ—8‡Zè8†Êµ8¢þÉ8|ò8-:Þ8|8†Êµ8‡Zè8§ž¡8-:Þ8-:Þ8†Êµ8šã¿8|8 ü8|ò8­‰ 9Öß!9†b9­‰ 9¢þÉ8§ž¡8šã¿8€³«8šã¿8§ž¡8Œ—8¢þÉ8€³«8†Êµ8…Ô8¢þÉ8®¸^8°J8°J8ÝÇr8!r¦7BG]¶!r¦7Ì´¢5BG]¶*½Â69ý·Ì´¢59ý·Ì´¢5’=S·*½Â6BG]¶Uî·9ý·ži/7€ÕS¸K߸nô¸)ág¸<)à·9ý·€ÕS¸9ý·<)à·K߸’=S·nô¸<)à·ÈÓ+¸ÈÓ+¸<)à·‡ƒ¸·nô¸ÈÓ+¸)ág¸<)à·BG]¶nô¸0ó{¸K߸‡ƒ¸·‡ƒ¸·<)à·9ý·nô¸nô¸nô¸nô¸K߸’=S·nù}79ý·Uî·Uî·‡ƒ¸·’=S·§¾õ7–µ"8!r¦7§¾õ7XÅ8’nƒ8–µ"8°J8Œ—8Œ—8Œ—8Œ—8|8®¸^8|8Œ—8€³«8§¾õ7Œ—8°J8Œ—8Œ—8ÝÇr8§ž¡8§ž¡8®¸^8|8N +Î7§¾õ7Ì´¢5N +Î7N +Î7BG]¶Uî·9ý·9ý·nô¸Ì´¢5’=S·ÐÐ?¸0ó{¸nô¸:’¸s%œ¸)ág¸0ó{¸à€Ä¸ÈÓ+¸ÈÓ+¸)ág¸ëN°¸ÄœÎ¸9¦¸åfº¸9¦¸ûì¸êÙâ¸êÙâ¸yºØ¸åfº¸à€Ä¸ûì¸yºØ¸:’¸0ó{¸:’¸s%œ¸)ág¸ÐÐ?¸:’¸K߸9ý·nô¸Uî·’=S·9ý·’=S·ži/7ži/7*½Â6N +Î7Ö®68–µ"8–µ"8XÅ8®¸^8€³«8§ž¡8¢þÉ8|8†Êµ8’nƒ8†Êµ8¢þÉ8|ò8‡Zè8¢þÉ8|ò8-:Þ8¢þÉ8 ü8 ü8‡Zè8|ò8†b9‡Zè8Áu9 ü8­‰ 9³9‡Zè8^É9Áu9†b9 ü8³9†b9|ò8|ò8Áu9­‰ 9|ò8Dž9Dž9‡Zè8†b9†Êµ8-:Þ8-:Þ8¢þÉ8|ò8¢þÉ8šã¿8Œ—8°J8|8°J8N +Î7®¸^8–µ"8Uî·Uî·Uî·9ý·nô¸0ó{¸ÐÐ?¸K߸<)à·:’¸ÈÓ+¸nô¸9ý·’=S·’=S·BG]¶*½Â6Ì´¢5nù}7ži/7Ì´¢5ži/7N +Î7N +Î7!r¦7XÅ8!r¦7|8°J8’nƒ8Œ—8†Êµ8|8°J8|8€³«8€³«8†Êµ8Œ—8’nƒ8’nƒ8|8†Êµ8šã¿8 ü8|ò8‡Zè8¢þÉ8†b9Dž9Dž9Öß!9äö&9Dž9i?69XúY9„,9²&19¥ŒE9¥ŒE9„,9³9³9„,9†b9äö&9„,9^É9³9„,9­‰ 9Áu9†b9¢þÉ8|ò8|ò8-:Þ8‡Zè8ÝÇr8°J8®¸^8°J8®¸^8ÝÇr8’nƒ8°J8’nƒ8§¾õ7§¾õ7ži/7XÅ8BG]¶*½Â6*½Â6Uî·’=S·0ó{¸9¦¸ëN°¸Œˆ¸ÄœÎ¸êÙâ¸9¦¸ÄœÎ¸:’¸:’¸9¦¸åfº¸ëN°¸:’¸s%œ¸ÈÓ+¸0ó{¸)ág¸0ó{¸0ó{¸0ó{¸9¦¸Œˆ¸ÈÓ+¸:’¸ÐÐ?¸:’¸€ÕS¸€ÕS¸€ÕS¸K߸ÈÓ+¸K߸ÐÐ?¸ÈÓ+¸9ý·9ý·’=S·Ì´¢5nô¸nô¸‡ƒ¸·Ì´¢5BG]¶‡ƒ¸·!r¦7Ì´¢5nù}7nù}7§¾õ7–µ"8ži/7Uî·Ì´¢5XÅ8!r¦7N +Î7!r¦7Ì´¢5ži/7*½Â6XÅ8Ö®68Uî·N +Î7Ì´¢5*½Â6ži/7‡ƒ¸·’=S·!r¦7‡ƒ¸·Ì´¢5BG]¶Uî·N +Î7*½Â6‡ƒ¸·9ý·K߸ÈÓ+¸0ó{¸à€Ä¸åfº¸:’¸s%œ¸êÙâ¸ÄœÎ¸êÙâ¸ÿ¹•Û¹åfº¸õ ¹ÿ¹xð¹à2$¹2J)¹u“8¹`áG¹u“8¹`áG¹RüL¹b.¹b.¹î¬=¹à2$¹2J)¹à2$¹î¬=¹à2$¹$¹à2$¹yºØ¸ÿ¹•Û¹à€Ä¸Î³¹Î³¹ÄœÎ¸Î³¹•Û¹yºØ¸ëN°¸)ág¸K߸0ó{¸ÈÓ+¸Uî·9ý·9ý·ži/7<)à·Uî·Uî·’=S·nù}7nù}7ži/7ži/7nù}7ži/7§¾õ7nù}7®¸^8°J8§¾õ7XÅ8§ž¡8Œ—8Ö®68°J8XÅ8–µ"8*½Â6§¾õ7!r¦7–µ"8XÅ8–µ"8§¾õ7N +Î7°J8XÅ8§¾õ7XÅ8§¾õ7ži/7Ö®68!r¦7–µ"8–µ"8§¾õ7Ö®68’=S·9ý·<)à·ÐÐ?¸nô¸ÐÐ?¸:’¸)ág¸:’¸Œˆ¸)ág¸)ág¸:’¸s%œ¸0ó{¸:’¸:’¸:’¸9¦¸)ág¸åfº¸à€Ä¸Œˆ¸åfº¸Œˆ¸€ÕS¸:’¸€ÕS¸)ág¸s%œ¸K߸)ág¸åfº¸åfº¸à€Ä¸yºØ¸ëN°¸åfº¸K߸0ó{¸ÐÐ?¸9ý·9ý·Uî·BG]¶Ì´¢5BG]¶9ý·BG]¶!r¦7§¾õ7–µ"8®¸^8®¸^8ÝÇr8§ž¡8§ž¡8§ž¡8-:Þ8¢þÉ8¢þÉ8-:Þ8¢þÉ8 ü8Áu9|ò8Öß!9¥ŒE9fr@9§X;9i?69äö&9äö&9†b9i?69Dž9-:Þ8…Ô8†Êµ8‡Zè8…Ô8†b9†b9šã¿8†Êµ8†Êµ8šã¿8’nƒ8§ž¡8€³«8€³«8€³«8°J8Ö®68®¸^8N +Î7Ö®68°J8!r¦7BG]¶’=S·9ý·BG]¶ÈÓ+¸<)à·€ÕS¸9¦¸ëN°¸µ÷¸ûì¸Î³¹xð¹xð¹u“8¹b.¹€z3¹à2$¹xð¹xð¹b.¹ÿ¹2J)¹$¹à2$¹`áG¹2J)¹xð¹$¹ÿ¹Î³¹•Û¹Î³¹åfº¸ÄœÎ¸Î³¹à€Ä¸êÙâ¸åfº¸êÙâ¸9¦¸9¦¸åfº¸åfº¸ÄœÎ¸:’¸€ÕS¸<)à·nô¸<)à·BG]¶‡ƒ¸·’=S·Uî·’=S·ži/7–µ"8XÅ8ži/7ži/7!r¦7§¾õ7BG]¶nù}7BG]¶!r¦7!r¦7!r¦7!r¦7|8–µ"8Œ—8–µ"8N +Î7|8®¸^8|8’nƒ8°J8®¸^8N +Î7ži/7–µ"8XÅ8!r¦7*½Â6*½Â6Ì´¢5*½Â6Ì´¢5*½Â6Uî·Uî·‡ƒ¸·ÈÓ+¸€ÕS¸ÈÓ+¸0ó{¸€ÕS¸)ág¸:’¸€ÕS¸0ó{¸s%œ¸à€Ä¸à€Ä¸:’¸åfº¸:’¸0ó{¸s%œ¸0ó{¸0ó{¸:’¸:’¸s%œ¸9¦¸åfº¸åfº¸åfº¸ëN°¸9¦¸9¦¸Œˆ¸K߸ÈÓ+¸9ý·Uî·Ì´¢5ži/7Uî·*½Â6Ì´¢5<)à·<)à·Ì´¢5§¾õ7Ì´¢5Uî·*½Â6ži/7nù}7BG]¶ži/7ži/7ži/7!r¦7!r¦7’=S·§¾õ7Ö®68®¸^8°J8®¸^8–µ"8!r¦7–µ"8§¾õ7–µ"8®¸^8Œ—8€³«8XÅ8!r¦7XÅ8BG]¶N +Î7nù}7N +Î7Ö®68ži/7!r¦7§¾õ79ý·ži/7Ì´¢5’=S·ži/79ý·9ý·’=S·<)à·’=S·Uî·nô¸nô¸’=S·nô¸0ó{¸åfº¸åfº¸à€Ä¸s%œ¸0ó{¸:’¸ëN°¸:’¸)ág¸ëN°¸à€Ä¸s%œ¸ÄœÎ¸:’¸€ÕS¸€ÕS¸0ó{¸yºØ¸0ó{¸<)à·ÈÓ+¸nô¸nô¸0ó{¸€ÕS¸K߸̴¢5<)à·ÈÓ+¸9ý·‡ƒ¸·’=S·Ì´¢5<)à·Ì´¢5*½Â6<)à·‡ƒ¸·<)à·’=S·nô¸Uî·N +Î7nù}7N +Î7nù}7Ö®68Ì´¢5BG]¶ži/7!r¦7*½Â6§¾õ7nù}7®¸^8®¸^8XÅ8°J8|8¢þÉ8€³«8|ò8…Ô8¢þÉ8€³«8®¸^8Ö®68Ö®68–µ"8®¸^8°J8Œ—8®¸^8|8ÝÇr8®¸^8XÅ8°J8–µ"8Ö®68!r¦7nù}7*½Â6Uî·!r¦7K߸<)à·‡ƒ¸·0ó{¸:’¸ëN°¸s%œ¸åfº¸|Pd|1|24600|2013-282T15:32:25.397 ~€y¸)q¸‡¸‹d)¸‡¸7oe¸adQ¸7oe¸)q¸mRÛ·mRÛ·)q¸”`=¸)q¸‹d)¸#뚸adQ¸7Ú¸~€y¸~€y¸~€y¸xþ¤¸†Eø7Ú¸7Ú¸7oe¸7Ú¸7oe¸Ûˆ¸=.Œ·‹d)¸‹d)¸‡¸‹d)¸”`=¸ƒÀ7¶&±Õ6àÒ7ýɃ7àÒ7ýɃ7s÷8738Z*a8ö M8TƘ8O:u8Ž·8$:Ë8?WÕ8Gî¬8àÁ8àÁ8(Ù¢8¿98Gî¬8Gî¬8?WÕ8ðµŽ8Z*a8Gî¬8Gî¬8(Ù¢8(Ù¢8O:u8¿98Z*a8Z*a8ðµŽ8y$%8y$%8¿98àÒ7ö M838D«7s÷87y$%8ö M8Z*a8TƘ8&¨„8Gî¬8Ž·8Gî¬8Ž·8(Ù¢8&¨„8àÒ7s÷87ƒÀ7¶s÷87ýɃ7‡¸‡¸öªI·ƒÀ7¶mRÛ·‡¸7Ú¸”`=¸7oe¸)q¸)q¸xþ¤¸xþ¤¸7Ú¸#뚸Ç+¹¸çḆEø†Eø†Eø¬~׸çá¸Ï¾ë¸çá¸Ç+¹¸çḬ¹¬~׸/a͸Ç+¹¸†Eø7Ú¸#뚸adQ¸7Ú¸7Ú¸”`=¸‹d)¸~€y¸‡¸ÿì5=.Œ·×Øö¶öªI·s÷87×Øö¶mRÛ·s÷8738s÷87ÿì5ÿì5&±Õ6ƒÀ7¶ÿì5D«738¿98Z*a8y$%8O:u8Z*a8O:u8&¨„8TƘ8TƘ8TƘ8TƘ8ö M838O:u8y$%8Z*a838y$%8àÒ7O:u8D«738ýɃ7=.Œ·8°³·=.Œ·8°³·”`=¸öªI·mRÛ·=.Œ·×Øö¶‡¸‡¸mRÛ·=.Œ·s÷87öªI·ƒÀ7¶ÿì5=.Œ·8°³·)q¸”`=¸)q¸‹d)¸7Ú¸adQ¸xþ¤¸7Ú¸)q¸adQ¸†Eø/a͸çá¸çá¸Ï¾ë¸xþ¤¸¯¸l¹Ï¾ë¸¬¹ =¹l¹¬¹†Eø¬¹ä( +¹çá¸Ï¾ë¸¬¹†Eø¬~׸†EøÇ+¹¸#뚸#뚸7oe¸)q¸7Ú¸8°³·7oe¸‹d)¸‹d)¸‡¸ƒÀ7¶×Øö¶mRÛ·)q¸)q¸8°³·öªI·ÿì5ÿì5‡¸ƒÀ7¶D«7‡¸‹d)¸‹d)¸mRÛ·mRÛ·öªI·ƒÀ7¶‹d)¸ýɃ7ýɃ7=.Œ·s÷87öªI·mRÛ·mRÛ·8°³·öªI·=.Œ·=.Œ·8°³·=.Œ·7oe¸adQ¸×Øö¶adQ¸mRÛ·mRÛ·mRÛ·öªI·)q¸D«7ƒÀ7¶‡¸öªI·öªI·‡¸‡¸adQ¸‡¸‡¸ƒÀ7¶adQ¸mRÛ·=.Œ·‹d)¸”`=¸‡¸adQ¸‹d)¸öªI·”`=¸ƒÀ7¶öªI·=.Œ·)q¸×Øö¶=.Œ·ƒÀ7¶×Øö¶×Øö¶ýɃ7ÿì5&±Õ6àÒ7s÷87=.Œ·ÿì5ƒÀ7¶ýɃ7D«7&±Õ6ÿì5&±Õ6ƒÀ7¶t—ú7s÷87=.Œ·ƒÀ7¶y$%8y$%838O:u8¿98y$%8t—ú7àÒ7¿98ðµŽ8Z*a8ö M838ýɃ738àÒ7ÿì5ÿì5àÒ7ýɃ7&±Õ6ÿì5&±Õ6×Øö¶&±Õ6ÿì5×Øö¶àÒ7=.Œ·s÷87mRÛ·×Øö¶öªI·8°³·mRÛ·×Øö¶ƒÀ7¶àÒ7ÿì5ÿì5ÿì5×Øö¶‹d)¸)q¸”`=¸‡¸7oe¸~€y¸‡¸7Ú¸7Ú¸Ûˆ¸#뚸xþ¤¸Ûˆ¸7Ú¸†Eø7Ú¸çḬ~׸Ͼ븆Eøçá¸Ï¾ë¸ÙQ¹Ï¾ë¸†Eø†EøÇ+¹¸xþ¤¸xþ¤¸¬~׸l¹Ç+¹¸Ï¾ë¸†Eø~€y¸xþ¤¸#뚸/a͸Ͼë¸/a͸¯¸xþ¤¸¯¸#뚸¯¸xþ¤¸7oe¸adQ¸7Ú¸‡¸‡¸8°³·ÿì5t—ú7s÷87×Øö¶ƒÀ7¶ýɃ7D«7D«7ÿì5y$%8¿98t—ú7ö M8Z*a8Ž·8$:Ë8vß8àÁ8ª–é8$:Ë8$:Ë8O:u8ðµŽ8ö M8O:u8Ž·8Ž·8$:Ë8àÁ8TƘ8àÒ7àÒ7&¨„8àÒ7t—ú7ÿì5ÿì5&±Õ6öªI·mRÛ·‡¸‹d)¸8°³·7oe¸‹d)¸)q¸D«7mRÛ·öªI·ÿì5=.Œ·ÿì5öªI·&±Õ6àÒ7s÷87ýɃ7öªI·ÿì5ÿì5D«7ƒÀ7¶ÿì5s÷87D«7&±Õ6×Øö¶ÿì5&±Õ6s÷87D«7ÿì5ÿì5ÿì5&±Õ6àÒ7àÒ7s÷87s÷87t—ú7D«7ƒÀ7¶ƒÀ7¶ƒÀ7¶ýɃ7D«7ö M838&¨„8ö M8¿98y$%8ö M8¿98Z*a8Gî¬8&¨„8O:u8&¨„8àÁ8¿98(Ù¢8TƘ8Z*a8O:u8O:u8TƘ8TƘ8ðµŽ8&¨„8Ž·8&¨„8(Ù¢8Gî¬8Gî¬8ö M8TƘ8(Ù¢8vß8Õ¸ó8Õ¸ó8Õ¸ó80 9ª–é8Õ¸ó81(9vß8ß9?WÕ8?WÕ8àÁ8Ž·8Ž·8TƘ8(Ù¢8(Ù¢8¿9838àÒ7D«7Z*a8ýɃ7t—ú738TƘ8àÁ8Z*a8àÁ8$:Ë8O:u8Gî¬8TƘ8TƘ8ª–é8(Ù¢8àÁ8?WÕ8ª–é8àÁ8àÁ8àÁ8TƘ8ö M8&¨„8TƘ8ö M8&¨„8&¨„8àÒ738àÒ7y$%8O:u8Z*a8¿98TƘ8y$%838Z*a8ö M8&¨„8ðµŽ8àÁ8Ž·8&¨„8O:u8Ž·8àÁ8‹Üý8?WÕ8ß9Õ¸ó8ª–é8Õ¸ó8‹Üý8Ž·8Ž·8ª–é8Õ¸ó8Gî¬8(Ù¢8O:u8(Ù¢8ðµŽ8(Ù¢8&¨„8Z*a8àÒ7¿98Z*a8TƘ8¿98y$%8O:u8Gî¬8ðµŽ8(Ù¢8Ž·8y$%838¿98&¨„8¿98t—ú7t—ú7àÒ7s÷8738àÒ7y$%8t—ú7y$%8t—ú7y$%838s÷87ÿì5=.Œ·öªI·mRÛ·”`=¸adQ¸adQ¸adQ¸mRÛ·)q¸‡¸‡¸‹d)¸7Ú¸‡¸”`=¸¯¸†EøNáõ¸Ç+¹¸¯¸†Eø¯¸7Ú¸¯¸¯¸/a͸¯¸#뚸7Ú¸~€y¸7Ú¸xþ¤¸)q¸mRÛ·8°³·ƒÀ7¶&±Õ6ÿì5×Øö¶s÷87ÿì5×Øö¶ƒÀ7¶àÒ7&±Õ6&±Õ6ƒÀ7¶ýɃ738t—ú7t—ú7y$%8TƘ8&¨„8&¨„8O:u8O:u8TƘ8Z*a8¿98TƘ8&¨„8$:Ë8$:Ë8Gî¬8O:u8O:u8y$%8Z*a8àÒ7ýɃ7y$%8t—ú7ƒÀ7¶ÿì5àÒ7D«7&±Õ6ÿì5=.Œ·mRÛ·‡¸adQ¸adQ¸‹d)¸×Øö¶adQ¸7oe¸”`=¸7Ú¸Ç+¹¸7Ú¸#뚸xþ¤¸#뚸/a͸/a͸#뚸/a͸/a͸†Eø†Eø†Eø#뚸l¹çá¸Ç+¹¸/a͸†EøÇ+¹¸Ç+¹¸çá¸l¹l¹/a͸¬¹Náõ¸/a͸†Eø/a͸çá¸Ç+¹¸¬~׸ =¹¬~׸xþ¤¸çḆEøxþ¤¸7Ú¸7Ú¸7oe¸‡¸adQ¸‹d)¸‹d)¸ƒÀ7¶=.Œ·s÷87t—ú7t—ú7¿98ö M8¿98t—ú7ö M8&¨„8¿98O:u8&¨„8àÒ7t—ú7O:u8ö M8¿98&¨„8Z*a8¿98Z*a8Gî¬8t—ú7&¨„8(Ù¢8ö M8Z*a8&¨„8s÷87s÷87×Øö¶s÷87ÿì5&±Õ6s÷87àÒ7ýɃ7&±Õ6àÒ7àÒ7ýɃ7D«7ýɃ7D«7ÿì5ÿì5ýɃ7ÿì5¿98ýɃ7ƒÀ7¶8°³·=.Œ·öªI·8°³·=.Œ·‡¸‹d)¸¯¸”`=¸‹d)¸8°³·‹d)¸=.Œ·‹d)¸7Ú¸‡¸”`=¸)q¸”`=¸‹d)¸adQ¸adQ¸7oe¸adQ¸adQ¸~€y¸#뚸#뚸¯¸adQ¸”`=¸8°³·‡¸‹d)¸‡¸‡¸‹d)¸öªI·=.Œ·ƒÀ7¶ÿì5ö M8D«7s÷87&±Õ638s÷87s÷87ƒÀ7¶ƒÀ7¶&±Õ6&±Õ68°³·×Øö¶×Øö¶t—ú7y$%8ðµŽ8(Ù¢838ðµŽ8àÁ8&¨„8Gî¬8D«7&¨„8y$%8ö M8¿98t—ú7TƘ8$:Ë8ðµŽ838D«7ýɃ7ÿì5s÷87s÷87öªI·×Øö¶D«7ýɃ7ýɃ7ÿì538ÿì5ýɃ7&±Õ6öªI·ƒÀ7¶‹d)¸7oe¸‹d)¸7oe¸#뚸7Ú¸/a͸Ͼë¸Ç+¹¸#뚸#뚸¯¸Ç+¹¸#뚸¯¸l¹Ç+¹¸†Eø7Ú¸7Ú¸”`=¸Ç+¹¸7Ú¸adQ¸7Ú¸7Ú¸7Ú¸7oe¸adQ¸‡¸‡¸‹d)¸mRÛ·)q¸)q¸8°³·=.Œ·ƒÀ7¶öªI·=.Œ·ÿì53838t—ú7ýɃ7àÒ7y$%8¿98öªI·y$%8¿98t—ú7y$%8O:u8(Ù¢8&¨„8ðµŽ8ðµŽ8¿98TƘ8$:Ë8&¨„8ö M8Gî¬8&¨„8TƘ8O:u8$:Ë8$:Ë8O:u8(Ù¢8àÁ8(Ù¢8Gî¬8¿98Z*a8Z*a8Z*a8ðµŽ8O:u8y$%8¿98àÒ7t—ú7ýɃ7t—ú7D«7ÿì5s÷87ýɃ7D«7ƒÀ7¶)q¸×Øö¶)q¸‡¸mRÛ·7Ú¸7oe¸=.Œ·mRÛ·öªI·‡¸mRÛ·&±Õ6mRÛ·~€y¸xþ¤¸xþ¤¸Ç+¹¸7Ú¸8°³·=.Œ·adQ¸#뚸‹d)¸8°³·‡¸mRÛ·‡¸=.Œ·mRÛ·8°³·ƒÀ7¶‡¸&±Õ6=.Œ·mRÛ·‹d)¸ÿì5öªI·=.Œ·ÿì5s÷87¿98ýɃ7ýɃ7&±Õ6ýɃ7y$%8TƘ8Z*a8¿98Z*a8(Ù¢8Z*a8Gî¬8(Ù¢8&¨„8Gî¬8¿98Õ¸ó8TƘ8?WÕ8(Ù¢8TƘ8ª–é8ðµŽ8Gî¬8$:Ë8ª–é80 9ß9‹Üý8ª–é8vß8vß8ª–é81(9àÁ8Gî¬8TƘ8ðµŽ8ö M8y$%8¿9838&¨„8(Ù¢8O:u8&¨„8ðµŽ8ö M8ö M8ýɃ7s÷87ö M8ö M8àÒ7t—ú7ýɃ7D«7s÷87D«7t—ú7&±Õ6ƒÀ7¶&±Õ6=.Œ·×Øö¶=.Œ·=.Œ·adQ¸adQ¸mRÛ·×Øö¶mRÛ·×Øö¶8°³·‡¸=.Œ·‹d)¸~€y¸‹d)¸)q¸8°³·=.Œ·‡¸)q¸×Øö¶mRÛ·öªI·=.Œ·&±Õ6D«738D«7àÒ738D«7¿98s÷87D«7t—ú7y$%8&¨„8Z*a8ö M8y$%838O:u8y$%8ðµŽ8ðµŽ8ö M838t—ú7y$%838Ž·8O:u8¿98Z*a8&¨„8s÷87ö M8Z*a8ƒÀ7¶s÷87D«7ÿì5=.Œ·×Øö¶ÿì58°³·×Øö¶8°³·)q¸)q¸adQ¸7oe¸adQ¸)q¸8°³·adQ¸‹d)¸‹d)¸‹d)¸7Ú¸‡¸adQ¸‡¸)q¸)q¸adQ¸7Ú¸#뚸~€y¸7Ú¸#뚸~€y¸Ç+¹¸#뚸¯¸†Eø7oe¸#뚸¯¸çá¸/a͸†Eøl¹l¹Ç+¹¸xþ¤¸adQ¸/a͸7oe¸7Ú¸)q¸”`=¸mRÛ·‡¸adQ¸8°³·8°³·8°³·&±Õ6ƒÀ7¶s÷87s÷87t—ú7mRÛ·×Øö¶×Øö¶&±Õ6y$%838ö M8ö M8s÷87&±Õ638D«7Z*a838TƘ8ö M8y$%8O:u8TƘ8O:u8y$%8383838ýɃ7öªI·ÿì5&±Õ6ÿì5àÒ7&±Õ6=.Œ·8°³·mRÛ·‡¸)q¸‡¸)q¸)q¸mRÛ·”`=¸~€y¸†Eø”`=¸†Eøxþ¤¸†Eø/a͸adQ¸~€y¸7Ú¸7Ú¸”`=¸‡¸”`=¸7Ú¸#뚸#뚸”`=¸adQ¸#뚸~€y¸”`=¸‡¸‡¸)q¸7oe¸/a͸)q¸7oe¸xþ¤¸‹d)¸”`=¸7oe¸‹d)¸”`=¸adQ¸8°³·‹d)¸mRÛ·”`=¸8°³·×Øö¶8°³·s÷87öªI·y$%8y$%8D«7s÷87t—ú7D«7D«7mRÛ·öªI·s÷87s÷87&±Õ6s÷87&±Õ6=.Œ·s÷87ö M8ö M8O:u8Gî¬8àÁ8àÁ8O:u8(Ù¢8&¨„8àÁ8?WÕ8ðµŽ8&¨„8y$%8ðµŽ8Gî¬8Ž·8ª–é8vß8Gî¬8àÁ8ª–é8‹Üý8ß9vß8ª–é8ª–é8vß8Gî¬8&¨„8TƘ8O:u8&¨„8Ž·8Gî¬8(Ù¢8àÁ8Z*a8Z*a8t—ú7Z*a838O:u8O:u838ƒÀ7¶ÿì5D«7ÿì5àÒ7öªI·‡¸)q¸~€y¸#뚸7oe¸adQ¸”`=¸”`=¸~€y¸”`=¸adQ¸~€y¸†Eø7Ú¸~€y¸#뚸adQ¸Ûˆ¸)q¸‡¸”`=¸Ûˆ¸7Ú¸~€y¸=.Œ·”`=¸‹d)¸‡¸=.Œ·)q¸‡¸ýɃ7&±Õ6=.Œ·s÷87ÿì5ýɃ7ƒÀ7¶ÿì5×Øö¶&±Õ6ÿì5öªI·ýɃ7D«7s÷87&±Õ6&±Õ6y$%8ö M8Z*a8Z*a8(Ù¢8?WÕ8&¨„8Z*a8àÁ8Gî¬8?WÕ8àÁ8TƘ8Ž·8TƘ8ö M8y$%8&¨„8Z*a8383838¿98¿98Z*a8TƘ8àÒ7t—ú7¿98àÒ7¿98y$%8t—ú7O:u8D«7y$%8t—ú7t—ú7ýɃ7=.Œ·ÿì5×Øö¶mRÛ·adQ¸7oe¸‡¸”`=¸~€y¸öªI·‹d)¸7Ú¸öªI·=.Œ·”`=¸Ûˆ¸¯¸xþ¤¸¯¸adQ¸7oe¸Ûˆ¸#뚸7Ú¸‹d)¸7Ú¸7Ú¸~€y¸7Ú¸adQ¸”`=¸7oe¸~€y¸7oe¸=.Œ·‹d)¸Ûˆ¸öªI·‹d)¸‡¸×Øö¶s÷8738O:u8y$%8t—ú7t—ú7s÷87ö M8D«7y$%8y$%8Z*a8ö M8ö M8O:u8TƘ8(Ù¢8Ž·8Ž·8Ž·8TƘ8O:u8Gî¬8&¨„8O:u8ö M8&¨„8s÷8738öªI·mRÛ·ƒÀ7¶&±Õ6t—ú7y$%8ýɃ7öªI·8°³·×Øö¶ƒÀ7¶ÿì5×Øö¶8°³·adQ¸‹d)¸8°³·adQ¸7Ú¸7Ú¸Ûˆ¸#뚸‹d)¸”`=¸7Ú¸7Ú¸†Eø¯¸¯¸~€y¸7Ú¸”`=¸~€y¸çá¸#뚸)q¸adQ¸Ç+¹¸Ç+¹¸Ï¾ë¸¬~׸/a͸Náõ¸¬¹Náõ¸/a͸ =¹†Eø#뚸¯¸7Ú¸adQ¸adQ¸~€y¸mRÛ·adQ¸adQ¸‡¸mRÛ·8°³·8°³·öªI·ýɃ7öªI·t—ú7ÿì5&±Õ6¿98ýɃ7ýɃ7àÒ7àÒ738t—ú7¿98O:u8&±Õ6àÒ7D«7y$%8àÒ7¿98t—ú7&¨„8Gî¬8TƘ8TƘ838y$%8y$%8O:u8ö M8t—ú7àÒ7ðµŽ8¿98¿98D«7àÒ7s÷87ýɃ7ýɃ7ÿì5&±Õ6ýɃ7D«78°³·mRÛ·adQ¸ƒÀ7¶‹d)¸)q¸mRÛ·8°³·8°³·”`=¸)q¸)q¸mRÛ·~€y¸†Eø#뚸çá¸xþ¤¸¬~׸¯¸†EøNáõ¸Ï¾ë¸çá¸çá¸Ï¾ë¸Ï¾ë¸¯¸†Eø†Eø/a͸#뚸¬~׸#뚸¬¹l¹#뚸xþ¤¸/a͸#뚸adQ¸7Ú¸Ûˆ¸adQ¸7Ú¸‡¸”`=¸‡¸mRÛ·=.Œ·&±Õ6&±Õ6s÷87ƒÀ7¶&±Õ6ýɃ7ÿì5s÷87öªI·×Øö¶s÷87ÿì5àÒ7àÒ7ýɃ7s÷87ƒÀ7¶×Øö¶öªI·=.Œ·s÷87&±Õ6àÒ7&±Õ6ƒÀ7¶&±Õ6öªI·D«7àÒ7y$%8ýɃ7&±Õ6ÿì5=.Œ·=.Œ·×Øö¶öªI·öªI·mRÛ·)q¸)q¸7oe¸adQ¸‹d)¸8°³·”`=¸7Ú¸)q¸‹d)¸”`=¸‡¸adQ¸‹d)¸”`=¸adQ¸”`=¸‹d)¸7Ú¸”`=¸mRÛ·‡¸7oe¸)q¸8°³·mRÛ·öªI·‡¸‡¸ƒÀ7¶‡¸mRÛ·×Øö¶×Øö¶=.Œ·7oe¸‹d)¸)q¸7oe¸=.Œ·×Øö¶ÿì5ýɃ7öªI·8°³·‹d)¸=.Œ·mRÛ·ƒÀ7¶ýɃ7=.Œ·D«7D«7×Øö¶&±Õ6ƒÀ7¶öªI·ýɃ7s÷87D«7D«7Z*a8y$%8&¨„8(Ù¢8t—ú7TƘ8ö M8ö M8Z*a8TƘ8ö M8Ž·8àÁ8TƘ8ðµŽ8àÁ8àÁ8vß80 9‹Üý8Ž·8vß8ª–é80 91(9ß9ª–é8vß8?WÕ8Ý<9Ž·8(Ù¢8&¨„8(Ù¢8$:Ë8TƘ8&¨„8ðµŽ8y$%8ö M8O:u8O:u8àÒ7t—ú7O:u8y$%8D«7s÷87s÷87ƒÀ7¶ÿì5öªI·ƒÀ7¶&±Õ6&±Õ68°³·8°³·”`=¸7oe¸7Ú¸#뚸~€y¸7oe¸mRÛ·=.Œ·adQ¸)q¸8°³·‹d)¸)q¸”`=¸‡¸Ûˆ¸~€y¸”`=¸)q¸”`=¸7oe¸mRÛ·öªI·”`=¸7oe¸=.Œ·ÿì5‡¸‡¸8°³·adQ¸öªI·s÷87ƒÀ7¶&±Õ6ƒÀ7¶s÷87Z*a8ö M8y$%8¿98t—ú7y$%8ðµŽ8(Ù¢8(Ù¢8TƘ8àÁ8$:Ë8Gî¬8?WÕ8Ž·8$:Ë8$:Ë8?WÕ8?WÕ8vß8TƘ8TƘ8O:u8àÁ8àÁ8O:u8(Ù¢8$:Ë8(Ù¢8Gî¬8ðµŽ8O:u8¿98¿98O:u8TƘ8Z*a8t—ú7D«7ýɃ7=.Œ·8°³·mRÛ·8°³·öªI·=.Œ·)q¸öªI·adQ¸xþ¤¸adQ¸7Ú¸¯¸¬~׸xþ¤¸7Ú¸#뚸#뚸7Ú¸#뚸adQ¸7oe¸”`=¸†EøÇ+¹¸7oe¸7Ú¸¯¸#뚸Ûˆ¸adQ¸¯¸#뚸adQ¸‹d)¸7oe¸adQ¸‹d)¸‡¸=.Œ·×Øö¶ƒÀ7¶s÷87àÒ7s÷87s÷87y$%8y$%8àÒ7ÿì5àÒ7ƒÀ7¶mRÛ·&±Õ6t—ú7ýɃ7Z*a8D«7¿9838t—ú7ö M8ö M838¿98D«7ö M8?WÕ8àÁ8àÁ8Ž·8?WÕ8(Ù¢8(Ù¢8?WÕ8àÁ8vß8?WÕ8$:Ë8vß8àÁ8Ž·8àÁ8‹Üý8$:Ë8ª–é8Ž·8(Ù¢8¿98Z*a8&¨„8O:u8y$%8¿98&¨„8O:u8¿98s÷87¿98s÷87×Øö¶&±Õ6&±Õ6D«7àÒ7ÿì5öªI·ƒÀ7¶8°³·mRÛ·adQ¸)q¸7Ú¸‹d)¸7Ú¸7oe¸”`=¸)q¸~€y¸‹d)¸)q¸~€y¸”`=¸~€y¸”`=¸”`=¸adQ¸xþ¤¸#뚸#뚸xþ¤¸¯¸Ûˆ¸7Ú¸adQ¸mRÛ·”`=¸=.Œ·‹d)¸‹d)¸=.Œ·)q¸‡¸×Øö¶=.Œ·öªI·×Øö¶ÿì5y$%8Z*a8Z*a8Z*a8Õ¸ó8Ž·8àÁ8ª–é81(9Gî¬8h9.R9É•'9.R9.R9Ý<9z­,9€Þ69ß9Ý<9‹Üý8‹Üý8Õ¸ó8vß8‹Üý8vß8àÁ8$:Ë8Gî¬8vß8Gî¬8TƘ8(Ù¢8Gî¬8TƘ8àÁ8ðµŽ8$:Ë8¿98¿98ö M8y$%8D«7y$%8O:u8Z*a8àÒ7×Øö¶=.Œ·×Øö¶=.Œ·‹d)¸/a͸çá¸Ç+¹¸¬~׸†Eø†Eøxþ¤¸/a͸†Eøl¹ä( +¹†Eø¬¹ä( +¹ä( +¹Náõ¸l¹l¹^}¹ÙQ¹ÙQ¹¬¹l¹/a͸çḬ¹xþ¤¸¯¸/a͸¬~׸7Ú¸#뚸xþ¤¸xþ¤¸~€y¸7Ú¸‡¸mRÛ·s÷87ýɃ738D«7ýɃ7àÒ7àÒ7y$%8t—ú7ýɃ7s÷87t—ú7àÒ7y$%8àÒ7t—ú7O:u8ö M8àÒ7àÒ7¿98TƘ8Ž·8ðµŽ8Gî¬8àÁ8(Ù¢8ðµŽ8TƘ8Gî¬8$:Ë8Gî¬8ö M8TƘ8ö M8y$%8àÒ7y$%8y$%8ýɃ7D«7t—ú7ÿì5‡¸‡¸‹d)¸‹d)¸‹d)¸‡¸”`=¸)q¸7Ú¸Ûˆ¸¯¸#뚸/a͸¬¹†EøÇ+¹¸Ï¾ë¸Náõ¸l¹¬¹¬~׸ä( +¹Lg¹Ï¾ë¸Náõ¸ =¹Xô7¹”#¹Ï¾ë¸ =¹ÙQ¹l¹¬¹çá¸Ç+¹¸/a͸l¹¬¹Ï¾ë¸Ï¾ë¸/a͸#뚸#뚸#뚸”`=¸adQ¸8°³·‡¸‹d)¸‹d)¸‡¸mRÛ·=.Œ·&±Õ6s÷87ƒÀ7¶=.Œ·‡¸=.Œ·ýɃ7àÒ7àÒ7ö M8&¨„8¿98TƘ8D«7t—ú7D«7×Øö¶D«7s÷87¿98t—ú7(Ù¢8àÁ8Gî¬8¿98O:u8Z*a838ðµŽ8ö M8¿9838y$%838y$%8D«738ÿì5D«7àÒ7s÷87×Øö¶‡¸‹d)¸mRÛ·”`=¸×Øö¶‡¸mRÛ·mRÛ·”`=¸adQ¸)q¸)q¸‡¸öªI·=.Œ·8°³·~€y¸7oe¸mRÛ·”`=¸mRÛ·adQ¸#뚸¯¸7oe¸#뚸/a͸xþ¤¸adQ¸Ûˆ¸”`=¸)q¸7oe¸~€y¸#뚸Ç+¹¸7oe¸mRÛ·adQ¸‹d)¸mRÛ·”`=¸&±Õ6ƒÀ7¶ÿì5öªI·àÒ7àÒ7ýɃ7ƒÀ7¶t—ú7àÒ7ö M8ðµŽ8t—ú7&±Õ6¿98Z*a8O:u8y$%8(Ù¢8àÁ8ðµŽ8vß8Ž·8(Ù¢8vß8Õ¸ó8Ý<9ª–é8?WÕ8h9Ý<9ß9‹Üý8Õ¸ó81(90 9$:Ë8ª–é8?WÕ8$:Ë8àÁ8$:Ë8vß8Gî¬8$:Ë8O:u8Gî¬8(Ù¢8&¨„8y$%8t—ú7t—ú7ýɃ7t—ú7àÒ7y$%8s÷87D«7àÒ7àÒ7O:u8y$%8×Øö¶ƒÀ7¶ƒÀ7¶öªI·öªI·ÿì5ƒÀ7¶öªI·öªI·ýɃ7s÷87s÷87öªI·mRÛ·öªI·8°³·mRÛ·öªI·‡¸”`=¸‹d)¸7oe¸Ûˆ¸~€y¸‹d)¸7oe¸)q¸‹d)¸‡¸=.Œ·‹d)¸7Ú¸)q¸”`=¸‹d)¸‹d)¸”`=¸öªI·mRÛ·ƒÀ7¶t—ú7ö M8àÒ7s÷87t—ú7àÒ7ýɃ7×Øö¶t—ú7ýɃ7y$%8ö M8O:u8Z*a8y$%8ö M8TƘ8O:u8O:u8TƘ8Z*a8&¨„8O:u8Z*a8ö M8O:u8¿9838Z*a838t—ú7t—ú7ÿì5×Øö¶&±Õ6=.Œ·ƒÀ7¶y$%8t—ú7s÷87àÒ7t—ú7t—ú738ö M8¿98O:u8&±Õ6s÷87D«7ÿì5×Øö¶àÒ7ÿì5D«7D«7ýɃ7D«78°³·s÷87öªI·ƒÀ7¶t—ú7&±Õ6&±Õ6ÿì5×Øö¶ƒÀ7¶D«7×Øö¶8°³·öªI·8°³·öªI·ÿì5mRÛ·&±Õ6y$%8ýɃ7àÒ7àÒ7ÿì5&±Õ6&±Õ6&±Õ6t—ú7D«7àÒ7&¨„8O:u8&¨„8O:u8(Ù¢8TƘ8(Ù¢8O:u8TƘ8&¨„8ðµŽ8¿9838ö M8¿9838Z*a8t—ú7&¨„8ðµŽ8ðµŽ8ðµŽ8ö M8¿98ö M8TƘ8TƘ8Ž·8Z*a8O:u8ðµŽ8ö M8¿9838t—ú7ö M8y$%8ƒÀ7¶&±Õ6öªI·=.Œ·8°³·‡¸~€y¸7Ú¸7oe¸Ûˆ¸¯¸/a͸¬¹Ï¾ë¸†Eøçá¸/a͸Náõ¸l¹Náõ¸Náõ¸ä( +¹Ã-¹Lg¹^}¹Ã-¹TxQ¹#”V¹ø\L¹¬'B¹Â =¹Lg¹#”V¹#”V¹Xô7¹#”V¹Â =¹tÛ2¹tÛ2¹Ã-¹Â =¹¬'B¹”#¹”#¹tÛ2¹H«(¹ =¹ä( +¹ä( +¹Náõ¸Ï¾ë¸l¹Náõ¸¬~׸Ç+¹¸~€y¸Ûˆ¸7oe¸‹d)¸‹d)¸mRÛ·ÿì5D«7D«7ö M838t—ú7¿98O:u8(Ù¢8vß8$:Ë8$:Ë8‹Üý8ª–é8‹Üý8ß9ß9ª–é80 9vß8$:Ë8ðµŽ8vß8(Ù¢8ª–é8(Ù¢8O:u8TƘ8TƘ8Ž·8ª–é8Gî¬8?WÕ8vß8$:Ë8ðµŽ8&¨„8(Ù¢8Gî¬83838ö M838ýɃ7s÷87öªI·)q¸‡¸mRÛ·=.Œ·adQ¸7oe¸‡¸8°³·mRÛ·adQ¸×Øö¶=.Œ·7oe¸)q¸~€y¸7Ú¸†Eø/a͸xþ¤¸Ç+¹¸Ûˆ¸7Ú¸xþ¤¸#뚸~€y¸7Ú¸7oe¸7Ú¸7Ú¸xþ¤¸Ç+¹¸7Ú¸~€y¸adQ¸adQ¸7oe¸‡¸‡¸~€y¸adQ¸öªI·öªI·)q¸7oe¸adQ¸)q¸‡¸ƒÀ7¶&±Õ6àÒ738O:u8àÁ8TƘ8?WÕ8Gî¬8Ž·8ª–é8àÁ8Õ¸ó8Õ¸ó8àÁ8É•'9É•'9h91(9¨~"9z­,9Î÷;9h91(9¨~"9.R9.R9É•'9z­,9É•'90 9ª–é8h9ß9ª–é8ß9ß9‹Üý8vß8ª–é8(Ù¢8(Ù¢8TƘ8àÁ8O:u8¿98s÷87ýɃ7D«7ƒÀ7¶öªI·‹d)¸=.Œ·mRÛ·=.Œ·öªI·mRÛ·‡¸adQ¸¯¸adQ¸‹d)¸‹d)¸”`=¸mRÛ·7Ú¸7oe¸7Ú¸7oe¸7Ú¸Ç+¹¸~€y¸çḆEø¯¸xþ¤¸‹d)¸~€y¸adQ¸8°³·×Øö¶‡¸ƒÀ7¶&±Õ6×Øö¶‡¸=.Œ·=.Œ·8°³·ƒÀ7¶s÷87àÒ7àÒ7ö M8O:u8ö M8O:u8ö M8ƒÀ7¶38t—ú738s÷87ýɃ7ö M8TƘ8¿98ö M8Z*a8&¨„8y$%8O:u8D«7ÿì5ÿì5ÿì5t—ú7¿98Z*a8¿98ö M8ýɃ7ýɃ7s÷87&±Õ6ýɃ738Z*a8t—ú7O:u8¿98ðµŽ8ðµŽ8O:u8àÒ7ƒÀ7¶öªI·ƒÀ7¶s÷87s÷87mRÛ·&±Õ6×Øö¶‡¸‹d)¸8°³·8°³·‡¸‹d)¸7oe¸Ûˆ¸‹d)¸×Øö¶=.Œ·‹d)¸×Øö¶adQ¸7Ú¸”`=¸7Ú¸7oe¸7Ú¸#뚸‹d)¸7Ú¸#뚸”`=¸†Eøçá¸ÙQ¹çá¸Ï¾ë¸¬~׸#뚸adQ¸7Ú¸7Ú¸”`=¸)q¸×Øö¶×Øö¶‡¸×Øö¶s÷878°³·8°³·ƒÀ7¶D«7t—ú7s÷87àÒ7t—ú7ýɃ7àÒ738ö M8ðµŽ8Gî¬8$:Ë8‹Üý8ß90 9TƘ8àÁ8(Ù¢8Gî¬8ðµŽ8&¨„8&¨„8TƘ8&¨„8ðµŽ8&¨„8ðµŽ8TƘ8ðµŽ8(Ù¢8&¨„8ö M8ö M8y$%8O:u8O:u8(Ù¢8&¨„8(Ù¢8TƘ8àÁ8¿98O:u8àÒ7öªI·&±Õ6ýɃ7×Øö¶8°³·8°³·=.Œ·=.Œ·adQ¸~€y¸~€y¸=.Œ·~€y¸7Ú¸xþ¤¸~€y¸‹d)¸~€y¸‹d)¸¯¸¯¸‹d)¸8°³·mRÛ·‡¸adQ¸#뚸7Ú¸”`=¸)q¸mRÛ·‹d)¸)q¸7oe¸7oe¸‹d)¸‹d)¸adQ¸‹d)¸‡¸‹d)¸)q¸=.Œ·=.Œ·&±Õ6ÿì5mRÛ·ÿì5ýɃ7s÷87àÒ7t—ú738t—ú7ðµŽ8O:u8àÒ7àÒ7y$%8ö M8&¨„8àÁ8(Ù¢8&¨„8O:u8ðµŽ8Gî¬8?WÕ8?WÕ8ª–é8?WÕ8$:Ë8àÁ8Õ¸ó8Ž·8Gî¬8Ž·8$:Ë8Ž·8TƘ8y$%8&¨„8TƘ8TƘ8(Ù¢8Gî¬8¿98Z*a8D«7t—ú7àÒ7D«7s÷87‡¸)q¸mRÛ·‡¸adQ¸”`=¸‡¸”`=¸7Ú¸7Ú¸‹d)¸xþ¤¸Ûˆ¸adQ¸‹d)¸7Ú¸7oe¸adQ¸~€y¸#뚸7oe¸adQ¸adQ¸Ç+¹¸Ûˆ¸¯¸¬~׸çá¸Ï¾ë¸†Eø#뚸¬~׸7Ú¸‹d)¸”`=¸7Ú¸7Ú¸xþ¤¸#뚸7oe¸~€y¸7oe¸‡¸‡¸)q¸=.Œ·”`=¸=.Œ·×Øö¶àÒ7ýɃ78°³·=.Œ·8°³·=.Œ·×Øö¶=.Œ·ƒÀ7¶&±Õ6s÷87t—ú7àÒ7s÷87D«7&±Õ6öªI·t—ú7D«7ö M8¿98y$%8àÒ7àÒ7y$%8ÿì5ÿì5ƒÀ7¶àÒ7ýɃ7àÒ7t—ú738¿98Z*a8¿98¿98&¨„8ö M8D«7öªI·mRÛ·)q¸)q¸”`=¸”`=¸7oe¸~€y¸7Ú¸mRÛ·adQ¸¯¸”`=¸)q¸7Ú¸7Ú¸Ûˆ¸”`=¸‹d)¸7Ú¸¯¸¯¸7Ú¸7oe¸7oe¸#뚸xþ¤¸7Ú¸7Ú¸xþ¤¸¯¸#뚸xþ¤¸Ï¾ë¸xþ¤¸Náõ¸Náõ¸Ï¾ë¸ =¹l¹ =¹^}¹Lg¹tÛ2¹Xô7¹Ã-¹Ã-¹Xô7¹^}¹H«(¹ÙQ¹ =¹l¹ä( +¹Ï¾ë¸Ï¾ë¸†Eø#뚸‡¸Ûˆ¸#뚸7Ú¸7oe¸adQ¸)q¸ƒÀ7¶×Øö¶=.Œ·öªI·×Øö¶t—ú7×Øö¶mRÛ·öªI·àÒ7ÿì5×Øö¶&±Õ6ýɃ7s÷87àÒ7D«7D«7¿98Z*a8O:u8(Ù¢8ö M8ðµŽ8ª–é8àÁ8TƘ8Ž·8ðµŽ8(Ù¢8$:Ë8Gî¬8Õ¸ó8àÁ8vß8Õ¸ó8?WÕ8(Ù¢8àÁ8‹Üý8$:Ë8Z*a8ðµŽ8ðµŽ8O:u8(Ù¢8Gî¬8Gî¬8ðµŽ8$:Ë8ðµŽ8Gî¬8ö M8t—ú7ö M838¿9838s÷8738&±Õ6öªI·ÿì5×Øö¶ƒÀ7¶&±Õ6ÿì5ýɃ73838y$%8t—ú7ýɃ7D«7&±Õ6D«73838ðµŽ8Z*a838y$%8Z*a8ðµŽ8àÁ8(Ù¢8Gî¬8vß8Ž·8Ž·8?WÕ8Õ¸ó8Õ¸ó8Õ¸ó8vß8Õ¸ó8$:Ë8$:Ë8vß8ª–é8?WÕ8‹Üý8vß8?WÕ8ª–é80 9Ý<90 9.R91(9ß90 9vß8Õ¸ó8vß8Ž·8(Ù¢8TƘ8Gî¬8ª–é8Ž·8ðµŽ8vß8Z*a8ö M8y$%8ö M838àÒ7s÷87ýɃ7&±Õ6y$%8àÒ7y$%838àÒ7ýɃ7ƒÀ7¶=.Œ·=.Œ·=.Œ·adQ¸”`=¸7Ú¸Ûˆ¸#뚸¯¸†Eø¬~׸çḬ~׸Ç+¹¸Ç+¹¸Ç+¹¸¬~׸¬~׸¯¸çḬ¹Náõ¸†Eøl¹¬¹¬~׸/a͸çá¸~€y¸‹d)¸Ûˆ¸¯¸xþ¤¸/a͸¬~׸†Eøxþ¤¸xþ¤¸~€y¸~€y¸‹d)¸”`=¸‡¸ÿì5&±Õ6öªI·ýɃ7s÷87y$%8ƒÀ7¶D«7D«78°³·s÷87ƒÀ7¶ýɃ7àÒ7t—ú738àÒ7ÿì5&±Õ6s÷8738ÿì5ýɃ7s÷87àÒ7s÷87t—ú7y$%838D«738t—ú7ðµŽ8&¨„8&¨„8(Ù¢8Z*a8(Ù¢8Z*a8Z*a8O:u8¿9838ö M8¿98ÿì5&±Õ6s÷87ýɃ7ƒÀ7¶öªI·”`=¸7oe¸Ûˆ¸‡¸7oe¸7Ú¸Ç+¹¸#뚸†EøÇ+¹¸çá¸#뚸xþ¤¸¬~׸Ç+¹¸Ûˆ¸†Eø#뚸#뚸7oe¸7oe¸#뚸Ûˆ¸‡¸”`=¸adQ¸adQ¸‡¸mRÛ·‡¸8°³·mRÛ·mRÛ·×Øö¶ÿì5àÒ7D«7D«7¿98y$%8O:u8ö M8Gî¬8TƘ8Ž·8$:Ë8?WÕ8&¨„8TƘ8O:u8àÁ8ðµŽ8àÁ8?WÕ8vß8‹Üý8ª–é8ß9Õ¸ó8Õ¸ó8Õ¸ó8ª–é8ª–é8Ž·8àÁ8ß9ª–é8$:Ë8vß8Gî¬8Gî¬8ö M8Z*a8ðµŽ8D«7t—ú7t—ú7àÒ7s÷87&±Õ6D«7ýɃ7ƒÀ7¶&±Õ6×Øö¶8°³·7Ú¸‡¸8°³·7Ú¸7Ú¸/a͸)q¸adQ¸xþ¤¸7Ú¸7Ú¸~€y¸#뚸Náõ¸†Eø†Eø†Eø†Eøxþ¤¸/a͸Ç+¹¸çá¸l¹Ï¾ë¸çá¸xþ¤¸Ï¾ë¸/a͸Náõ¸çḬ¹¬¹Náõ¸ä( +¹¬¹†Eø†Eø7Ú¸7Ú¸”`=¸”`=¸”`=¸7oe¸mRÛ·adQ¸‡¸mRÛ·=.Œ·×Øö¶=.Œ·×Øö¶×Øö¶×Øö¶&±Õ6&±Õ6ƒÀ7¶àÒ7ýɃ7s÷87ö M8àÒ7àÒ7ýɃ7D«7ÿì5s÷87ýɃ7ƒÀ7¶¿98ÿì5&±Õ6ƒÀ7¶&±Õ6ƒÀ7¶)q¸&±Õ6ÿì5mRÛ·ƒÀ7¶=.Œ·‡¸)q¸adQ¸mRÛ·)q¸”`=¸7Ú¸/a͸/a͸xþ¤¸Náõ¸Ï¾ë¸Ï¾ë¸Ï¾ë¸ÙQ¹¬~׸Náõ¸ÙQ¹Lg¹tÛ2¹ä( +¹ä( +¹”#¹Lg¹ =¹tÛ2¹TxQ¹ø\L¹ø\L¹Â =¹ø\L¹tÛ2¹Xô7¹”#¹”#¹l¹l¹Náõ¸”#¹Ï¾ë¸çá¸/a͸l¹/a͸Ç+¹¸†Eø/a͸†EøϾë¸/a͸†Eø¯¸#뚸adQ¸xþ¤¸¯¸7oe¸Ûˆ¸7Ú¸adQ¸‹d)¸‡¸s÷8738y$%838y$%8¿9838t—ú7ö M8y$%8y$%8¿98O:u8¿98(Ù¢8Z*a8TƘ8Gî¬8Gî¬8TƘ8?WÕ8Gî¬8àÁ8Z*a8Gî¬8ðµŽ8ö M8O:u8O:u8TƘ8Z*a8O:u8?WÕ8àÁ8ðµŽ8¿98t—ú7O:u838D«738O:u8Z*a8ö M8¿98y$%8Z*a8ðµŽ8Z*a8O:u8y$%8O:u8¿98t—ú738t—ú7ýɃ7ÿì5ƒÀ7¶8°³·‹d)¸‹d)¸”`=¸7Ú¸)q¸~€y¸¯¸¬~׸¬¹Ï¾ë¸ä( +¹¬¹Náõ¸/a͸Ç+¹¸Ï¾ë¸ =¹†Eø¬~׸Ͼ븆Eø/a͸†Eø#뚸7Ú¸¯¸Ç+¹¸#뚸mRÛ·7oe¸)q¸#뚸adQ¸8°³·‡¸×Øö¶mRÛ·×Øö¶s÷87ýɃ7s÷87öªI·D«7Z*a8ö M838ö M8y$%8Z*a838s÷87t—ú738¿98¿98àÒ7Z*a8Z*a8&¨„8O:u8&¨„8Z*a8ðµŽ8&¨„8Gî¬8&¨„8TƘ8&¨„8O:u8ðµŽ8¿98&¨„8ö M8t—ú7y$%8ýɃ7ýɃ7&±Õ6×Øö¶×Øö¶×Øö¶=.Œ·×Øö¶‡¸ýɃ7ƒÀ7¶‹d)¸)q¸öªI·)q¸‹d)¸‹d)¸‡¸adQ¸‹d)¸ýɃ7ýɃ7t—ú7ƒÀ7¶ÿì5&±Õ6öªI·öªI·×Øö¶ÿì5×Øö¶àÒ7×Øö¶D«7y$%8=.Œ·×Øö¶ÿì5ÿì5ýɃ7)q¸s÷87ÿì5öªI·&±Õ6t—ú7y$%8Gî¬8O:u8ö M8&¨„8ö M8&¨„8Gî¬8TƘ8TƘ8àÁ8(Ù¢8àÁ8(Ù¢8ðµŽ8(Ù¢8Gî¬8O:u8Z*a8TƘ8ö M8TƘ8ðµŽ8ª–é8vß80 90 9ª–é8ß90 9Õ¸ó8?WÕ8$:Ë8vß8ß9Ý<9ß91(9ß9?WÕ8‹Üý8àÁ8ª–é8ß9$:Ë8Gî¬8vß8Ž·8vß8àÁ8(Ù¢8y$%8ö M8Z*a8O:u8t—ú7t—ú7D«7t—ú7ýɃ7&±Õ6ÿì5s÷87s÷87‹d)¸)q¸‹d)¸‹d)¸‡¸)q¸‹d)¸”`=¸‹d)¸adQ¸7oe¸adQ¸mRÛ·Ç+¹¸‹d)¸7oe¸adQ¸”`=¸adQ¸)q¸#뚸~€y¸adQ¸7oe¸)q¸)q¸~€y¸7Ú¸”`=¸Ûˆ¸”`=¸öªI·s÷87=.Œ·×Øö¶ÿì5s÷87àÒ7ÿì5t—ú738D«7y$%8y$%838ö M8Gî¬8TƘ8Ž·8ðµŽ8àÁ8&¨„8ðµŽ8Ž·8&¨„8ö M8TƘ8ðµŽ8Ž·8TƘ8(Ù¢8?WÕ8O:u8O:u8TƘ8ðµŽ8ö M8y$%8y$%8D«7àÒ7t—ú7Z*a8àÒ7ýɃ7t—ú738t—ú7D«7àÒ7=.Œ·‡¸‹d)¸‹d)¸)q¸”`=¸7oe¸adQ¸adQ¸‹d)¸”`=¸8°³·7Ú¸Ç+¹¸adQ¸#뚸7Ú¸7oe¸/a͸Náõ¸¯¸Ç+¹¸/a͸7Ú¸†Eø/a͸¯¸#뚸¬~׸¬~׸xþ¤¸¯¸7Ú¸7Ú¸Ç+¹¸¬~׸çá¸xþ¤¸~€y¸¯¸7Ú¸”`=¸7Ú¸‹d)¸7Ú¸‡¸8°³·=.Œ·&±Õ68°³·=.Œ·àÒ7&±Õ6ýɃ7D«7ÿì5ÿì5D«7àÒ738&±Õ6t—ú7&±Õ6&±Õ63838àÒ7y$%8Z*a8&¨„8¿98ö M8Z*a8ö M8ö M8ðµŽ8TƘ8&¨„8ö M8ö M8t—ú7y$%8ðµŽ8&¨„8ðµŽ8Z*a8Z*a8&¨„8y$%8Z*a8Z*a8Z*a8Gî¬8àÒ7¿98àÒ7ýɃ7s÷87×Øö¶ýɃ7ÿì5ýɃ7ýɃ7ƒÀ7¶×Øö¶=.Œ·×Øö¶s÷87‡¸=.Œ·ÿì5öªI·×Øö¶×Øö¶ÿì5‡¸7oe¸#뚸7Ú¸†Eø¯¸/a͸†Eø7oe¸#뚸†Eø#뚸¯¸†Eø/a͸¬~׸xþ¤¸7Ú¸Ç+¹¸~€y¸7oe¸xþ¤¸7Ú¸adQ¸8°³·7oe¸8°³·ƒÀ7¶ƒÀ7¶s÷87ÿì5×Øö¶ƒÀ7¶ÿì5àÒ7ðµŽ83838O:u8ýɃ7y$%8O:u8àÁ8Gî¬8&¨„8ðµŽ8Gî¬8(Ù¢8Gî¬8$:Ë8vß8àÁ8ª–é8ª–é8ª–é8vß8?WÕ8$:Ë8?WÕ8àÁ8Gî¬8ª–é8Õ¸ó8‹Üý8$:Ë8àÁ8ðµŽ8Gî¬8(Ù¢8Ž·8(Ù¢8ðµŽ8ðµŽ8ö M838¿98¿98¿98àÒ7ýɃ7ƒÀ7¶öªI·ýɃ7s÷87mRÛ·öªI·ƒÀ7¶”`=¸=.Œ·)q¸8°³·)q¸~€y¸adQ¸adQ¸‡¸adQ¸‡¸7Ú¸Ûˆ¸#뚸7Ú¸‡¸adQ¸7Ú¸”`=¸7oe¸”`=¸~€y¸~€y¸7Ú¸7Ú¸”`=¸‹d)¸”`=¸‡¸”`=¸”`=¸)q¸adQ¸8°³·8°³·=.Œ·7oe¸mRÛ·s÷87s÷8738Z*a8O:u8&¨„8O:u8ðµŽ8Ž·8Gî¬8ðµŽ8Gî¬8ðµŽ8(Ù¢8t—ú7y$%8ö M8D«7s÷87t—ú7ýɃ7ö M8ðµŽ8O:u8ðµŽ8¿98&¨„8?WÕ8TƘ8$:Ë8ðµŽ8(Ù¢8$:Ë8Gî¬8TƘ8(Ù¢8TƘ8ðµŽ8(Ù¢8ðµŽ8y$%8y$%8ýɃ7t—ú7àÒ7ö M8s÷87&±Õ6ýɃ7öªI·öªI·mRÛ·mRÛ·mRÛ·mRÛ·mRÛ·‡¸~€y¸adQ¸”`=¸adQ¸7Ú¸mRÛ·7Ú¸#뚸/a͸çá¸Ï¾ë¸çḯ¸/a͸¬~׸¬¹ÙQ¹Ï¾ë¸†Eøxþ¤¸7Ú¸Ç+¹¸çá¸Ç+¹¸¯¸#뚸¯¸xþ¤¸7Ú¸7Ú¸~€y¸”`=¸adQ¸‹d)¸adQ¸#뚸)q¸)q¸mRÛ·mRÛ·mRÛ·8°³·‡¸)q¸=.Œ·&±Õ6&±Õ6×Øö¶s÷87ýɃ7¿98Z*a8y$%838y$%8(Ù¢8ðµŽ8&¨„8TƘ8àÁ8vß8Gî¬8Ž·8Gî¬8O:u8Gî¬8TƘ8ðµŽ8O:u8Z*a8&¨„8D«7y$%8t—ú7s÷87t—ú7t—ú7D«7ÿì5àÒ7ÿì5‡¸mRÛ·=.Œ·‡¸×Øö¶&±Õ6‡¸mRÛ·8°³·)q¸mRÛ·adQ¸7Ú¸7oe¸‡¸adQ¸~€y¸7Ú¸7oe¸#뚸xþ¤¸”`=¸Ûˆ¸7Ú¸7Ú¸7oe¸adQ¸Ç+¹¸7Ú¸xþ¤¸adQ¸‹d)¸”`=¸7oe¸)q¸adQ¸8°³·‡¸‡¸8°³·×Øö¶öªI·&±Õ6ÿì5×Øö¶ƒÀ7¶×Øö¶ÿì5ƒÀ7¶8°³·s÷87ƒÀ7¶×Øö¶×Øö¶öªI·mRÛ·ƒÀ7¶ƒÀ7¶àÒ7ÿì5s÷87=.Œ·ýɃ7s÷87öªI·ÿì5&±Õ6ýɃ7t—ú7&¨„8àÒ7y$%8ÿì5&±Õ6t—ú7y$%8y$%8y$%8Z*a8y$%8y$%8Z*a8Z*a8D«7¿98Z*a8&¨„8t—ú7&±Õ6ÿì5ÿì5àÒ7s÷87ƒÀ7¶s÷87t—ú7×Øö¶×Øö¶×Øö¶s÷87×Øö¶8°³·×Øö¶)q¸=.Œ·‹d)¸mRÛ·‡¸”`=¸×Øö¶8°³·×Øö¶öªI·ýɃ7=.Œ·)q¸×Øö¶ÿì5ƒÀ7¶ƒÀ7¶×Øö¶)q¸‹d)¸adQ¸7oe¸)q¸adQ¸‹d)¸Ûˆ¸mRÛ·‡¸adQ¸7oe¸mRÛ·mRÛ·öªI·öªI·38¿98ÿì5àÒ7ÿì5×Øö¶‡¸mRÛ·7oe¸8°³·mRÛ·&±Õ6ÿì5s÷87ýɃ738y$%8ðµŽ8Ž·8&¨„8Gî¬8$:Ë8?WÕ8Õ¸ó8ª–é8Õ¸ó8h9€Þ69žA9€Þ690 9ß91(91(9ß9Õ¸ó8$:Ë8vß8$:Ë8(Ù¢8&¨„8ðµŽ838ö M8Z*a8s÷87àÒ7ÿì5s÷87&±Õ68°³·‹d)¸=.Œ·ÿì5‡¸‡¸7oe¸)q¸=.Œ·‡¸‡¸‹d)¸=.Œ·)q¸=.Œ·öªI·mRÛ·‡¸mRÛ·‡¸7Ú¸adQ¸=.Œ·×Øö¶mRÛ·mRÛ·8°³·×Øö¶mRÛ·&±Õ6&±Õ6ƒÀ7¶s÷87ýɃ7ƒÀ7¶ƒÀ7¶38D«7àÒ73838ðµŽ8ö M8Z*a8t—ú7D«7àÒ7y$%8TƘ8TƘ8&¨„8(Ù¢8Z*a8¿98ýɃ7t—ú738t—ú7Gî¬8ðµŽ8àÁ8$:Ë8?WÕ8vß81(9.R9?WÕ8$:Ë8ß9àÁ8$:Ë8?WÕ8TƘ8$:Ë8(Ù¢8?WÕ8$:Ë8Ž·8Ž·8$:Ë8TƘ8?WÕ8(Ù¢8O:u8O:u8Z*a8ö M8D«7ÿì5s÷87s÷878°³·”`=¸ƒÀ7¶öªI·ýɃ7‡¸=.Œ·)q¸‡¸‹d)¸adQ¸adQ¸~€y¸‹d)¸”`=¸~€y¸‡¸”`=¸7Ú¸7oe¸¯¸¯¸/a͸¯¸”`=¸~€y¸”`=¸”`=¸‹d)¸‹d)¸)q¸mRÛ·‡¸7oe¸xþ¤¸~€y¸7Ú¸”`=¸adQ¸7Ú¸)q¸=.Œ·8°³·‡¸=.Œ·=.Œ·ƒÀ7¶×Øö¶ƒÀ7¶ƒÀ7¶s÷87t—ú7s÷87D«7àÒ7&±Õ6&±Õ638&¨„8ö M8y$%8TƘ8¿98¿98&¨„8Z*a8(Ù¢8O:u8y$%8ö M8ðµŽ8y$%8¿98àÒ7¿98Z*a838ýɃ7ƒÀ7¶s÷87ƒÀ7¶àÒ7×Øö¶ýɃ7àÒ7ÿì53838ƒÀ7¶y$%8ýɃ7t—ú7s÷87àÒ7ýɃ738mRÛ·s÷87ÿì5ÿì5t—ú7t—ú7t—ú7t—ú7t—ú7D«7×Øö¶&±Õ6=.Œ·t—ú7=.Œ·8°³·mRÛ·7oe¸~€y¸mRÛ·~€y¸Ç+¹¸Ç+¹¸/a͸Ç+¹¸†Eø7Ú¸/a͸7Ú¸Ûˆ¸~€y¸)q¸7Ú¸~€y¸Ûˆ¸~€y¸adQ¸‡¸)q¸adQ¸8°³·mRÛ·=.Œ·‡¸‡¸s÷87ƒÀ7¶àÒ7s÷87y$%838ö M8t—ú7¿98ýɃ7ÿì5s÷87s÷87×Øö¶D«7D«7ÿì5ƒÀ7¶=.Œ·38t—ú7Z*a8y$%8Z*a8O:u838ö M8t—ú7ö M8y$%8t—ú7y$%8t—ú7s÷87àÒ7y$%8D«7×Øö¶&±Õ6s÷87s÷87&±Õ6öªI·ÿì5=.Œ·8°³·‹d)¸)q¸)q¸mRÛ·8°³·×Øö¶mRÛ·7Ú¸7oe¸adQ¸7Ú¸adQ¸7Ú¸7Ú¸adQ¸7oe¸#뚸Ç+¹¸/a͸Ͼë¸/a͸†Eøxþ¤¸†Eø¯¸/a͸xþ¤¸/a͸xþ¤¸7oe¸7Ú¸†Eøxþ¤¸7Ú¸adQ¸#뚸”`=¸)q¸#뚸#뚸)q¸)q¸8°³·mRÛ·‡¸=.Œ·‡¸ƒÀ7¶àÒ7D«7D«7s÷87s÷87&±Õ6D«7×Øö¶s÷87àÒ7D«73838ýɃ7&¨„8&¨„8ðµŽ8ðµŽ8àÁ8&¨„8Ž·8?WÕ8?WÕ8$:Ë8àÁ8TƘ8Ž·8ðµŽ8Ž·8Õ¸ó8$:Ë8(Ù¢8vß8TƘ8TƘ8(Ù¢8TƘ8ðµŽ8ðµŽ8TƘ8&¨„838ðµŽ8&¨„8ö M8O:u8¿98¿98ö M8y$%8Z*a838ýɃ7&±Õ6&±Õ6ÿì5ýɃ7ƒÀ7¶s÷87D«7s÷87D«7s÷87ƒÀ7¶ÿì5ƒÀ7¶s÷87ýɃ7ƒÀ7¶×Øö¶=.Œ·mRÛ·mRÛ·)q¸adQ¸adQ¸=.Œ·öªI·=.Œ·ƒÀ7¶ÿì5=.Œ·mRÛ·×Øö¶‹d)¸×Øö¶s÷87ýɃ7&±Õ6D«738Z*a8Z*a8y$%8O:u8ö M8$:Ë8$:Ë8?WÕ8àÁ8O:u8O:u8ö M8(Ù¢8ðµŽ8vß8ß9$:Ë8ª–é8‹Üý80 9ª–é8$:Ë8vß8vß8$:Ë8àÁ8vß8àÁ8?WÕ8ðµŽ8(Ù¢8$:Ë8Gî¬8TƘ8àÁ8Ž·8àÁ8Õ¸ó8$:Ë8O:u8(Ù¢8vß8Ž·8$:Ë8Õ¸ó8Z*a8&¨„8¿9838ýɃ7=.Œ·D«7ÿì5ÿì5×Øö¶)q¸mRÛ·adQ¸7oe¸mRÛ·)q¸mRÛ·‡¸)q¸8°³·öªI·×Øö¶adQ¸‡¸7Ú¸7Ú¸#뚸7oe¸7Ú¸¬~׸xþ¤¸¯¸7Ú¸”`=¸‡¸öªI·7oe¸‹d)¸öªI·=.Œ·&±Õ6ýɃ7àÒ7&±Õ6ƒÀ7¶8°³·8°³·‡¸”`=¸mRÛ·ýɃ7y$%8ÿì5àÒ7¿98àÒ7ÿì5y$%8&¨„8y$%8¿98D«738O:u8ö M8ðµŽ8(Ù¢8y$%8¿98àÒ7y$%8&¨„8y$%8Z*a8O:u8ö M8t—ú7Z*a8t—ú7t—ú738Z*a8ö M8ðµŽ8O:u8Z*a8ö M8O:u8383838t—ú7ýɃ7ýɃ7t—ú7ƒÀ7¶&±Õ6ýɃ7mRÛ·mRÛ·ƒÀ7¶=.Œ·)q¸)q¸=.Œ·)q¸)q¸‡¸‡¸adQ¸xþ¤¸#뚸Ûˆ¸Ç+¹¸/a͸†EøϾ븆Eø7Ú¸Ûˆ¸¯¸adQ¸Ûˆ¸†EøNáõ¸/a͸¬¹¯¸Ç+¹¸7Ú¸adQ¸~€y¸¯¸xþ¤¸/a͸Ç+¹¸Ûˆ¸xþ¤¸¯¸7Ú¸adQ¸~€y¸‹d)¸8°³·‡¸adQ¸7oe¸‡¸~€y¸adQ¸)q¸‹d)¸‡¸öªI·×Øö¶”`=¸mRÛ·=.Œ·×Øö¶=.Œ·×Øö¶&±Õ6D«7D«7&±Õ6ÿì5¿98D«7ö M838ƒÀ7¶s÷87y$%8ðµŽ8O:u8y$%8D«7Z*a8s÷87&¨„8Z*a8Z*a8y$%8àÒ738ö M8t—ú7D«7àÒ7t—ú7ÿì5=.Œ·)q¸‹d)¸‹d)¸7oe¸‹d)¸adQ¸xþ¤¸~€y¸7Ú¸7Ú¸7Ú¸¯¸xþ¤¸xþ¤¸¯¸7oe¸#뚸7Ú¸#뚸7oe¸Ûˆ¸¯¸7Ú¸¬~׸¯¸¯¸7oe¸7Ú¸/a͸/a͸¯¸/a͸xþ¤¸/a͸/a͸Ç+¹¸¬~׸/a͸¬~׸¯¸xþ¤¸xþ¤¸¯¸†EøÇ+¹¸/a͸#뚸7Ú¸7Ú¸7Ú¸7Ú¸)q¸adQ¸Ûˆ¸xþ¤¸‡¸ƒÀ7¶D«7öªI·&±Õ6ƒÀ7¶&±Õ6ƒÀ7¶D«7&±Õ6&±Õ6s÷87D«7ýɃ7D«7t—ú7s÷87àÒ7ö M8t—ú7¿98O:u8Gî¬8Z*a8y$%8y$%8&¨„838ðµŽ8¿98t—ú7D«7=.Œ·×Øö¶mRÛ·8°³·mRÛ·mRÛ·‡¸mRÛ·‹d)¸~€y¸¯¸7Ú¸Ûˆ¸7oe¸7Ú¸adQ¸#뚸~€y¸7oe¸7Ú¸‡¸)q¸7oe¸7oe¸7Ú¸7Ú¸7Ú¸xþ¤¸7Ú¸7Ú¸#뚸Ç+¹¸†Eø#뚸7oe¸xþ¤¸~€y¸xþ¤¸¯¸Ç+¹¸xþ¤¸7Ú¸7Ú¸~€y¸7Ú¸7oe¸)q¸‹d)¸”`=¸=.Œ·‡¸‡¸ÿì5=.Œ·ÿì5öªI·t—ú7àÒ7ýɃ7s÷87D«738¿98ýɃ7s÷87àÒ738D«7àÒ738y$%8t—ú7Z*a8&¨„8TƘ8O:u8(Ù¢8ðµŽ8ðµŽ8TƘ8TƘ8TƘ8ö M838&¨„8t—ú7ÿì5&±Õ6ƒÀ7¶öªI·öªI·8°³·s÷87×Øö¶ÿì5×Øö¶mRÛ·‹d)¸×Øö¶×Øö¶‹d)¸)q¸mRÛ·”`=¸adQ¸)q¸)q¸~€y¸xþ¤¸†Eø†EøNáõ¸¬¹Ç+¹¸7Ú¸7Ú¸‹d)¸‡¸mRÛ·adQ¸adQ¸mRÛ·)q¸=.Œ·~€y¸öªI·öªI·‡¸)q¸×Øö¶öªI·‹d)¸×Øö¶s÷87&±Õ6ÿì5ƒÀ7¶ÿì58°³·ƒÀ7¶‡¸8°³·öªI·öªI·D«7ƒÀ7¶öªI·=.Œ·ÿì5×Øö¶àÒ7àÒ7=.Œ·‡¸8°³·ƒÀ7¶ýɃ7ƒÀ7¶ýɃ7Z*a838t—ú7O:u8Z*a8¿98(Ù¢8Gî¬8(Ù¢8(Ù¢8(Ù¢8Ž·8Ž·8?WÕ8Ž·8Õ¸ó8(Ù¢8TƘ8(Ù¢8t—ú7y$%8àÒ7ö M8ö M8¿98y$%8ðµŽ8ðµŽ8Z*a8ðµŽ8(Ù¢8TƘ8ö M8O:u8¿98t—ú7t—ú7ÿì5=.Œ·ƒÀ7¶ÿì5×Øö¶mRÛ·×Øö¶mRÛ·&±Õ6×Øö¶àÒ7×Øö¶&±Õ6ƒÀ7¶ýɃ7öªI·ýɃ7ƒÀ7¶×Øö¶ÿì5=.Œ·‡¸ÿì5ÿì5&±Õ6ÿì5mRÛ·mRÛ·ÿì5ÿì538&±Õ6D«7=.Œ·)q¸×Øö¶=.Œ·8°³·#뚸7oe¸‡¸7Ú¸‹d)¸=.Œ·ƒÀ7¶&±Õ6ÿì5×Øö¶¿98D«7D«7×Øö¶ƒÀ7¶ýɃ7t—ú7s÷87àÒ7ýɃ7s÷87àÒ7×Øö¶&±Õ6&±Õ6àÒ7ÿì5ýɃ7¿98s÷87ƒÀ7¶8°³·ƒÀ7¶×Øö¶s÷87ƒÀ7¶t—ú7àÒ7ýɃ7s÷87s÷87t—ú7ƒÀ7¶y$%8s÷87t—ú7ƒÀ7¶D«7öªI·=.Œ·=.Œ·ÿì5ƒÀ7¶8°³·8°³·öªI·8°³·ÿì5×Øö¶‡¸mRÛ·”`=¸)q¸adQ¸=.Œ·mRÛ·~€y¸Ç+¹¸†Eø7oe¸xþ¤¸~€y¸Ûˆ¸Ç+¹¸xþ¤¸/a͸†Eø¯¸7Ú¸adQ¸~€y¸”`=¸7Ú¸”`=¸7Ú¸7Ú¸‡¸)q¸×Øö¶=.Œ·”`=¸)q¸mRÛ·‹d)¸ÿì5s÷87D«7=.Œ·)q¸mRÛ·7oe¸adQ¸8°³·mRÛ·mRÛ·ÿì5ƒÀ7¶×Øö¶t—ú7D«7t—ú7y$%8&¨„8àÁ8Gî¬8vß8Õ¸ó8vß8ª–é8Ž·8Õ¸ó8ß9ª–é8vß8vß80 9‹Üý8ß9Õ¸ó8‹Üý8ß9$:Ë8àÁ8ª–é8vß8Z*a8Gî¬8Z*a8Gî¬8(Ù¢8(Ù¢8TƘ8O:u8(Ù¢8&¨„8ðµŽ8O:u8Z*a8Z*a8TƘ8àÒ7D«7D«7Z*a8ÿì5D«7àÒ7àÒ7ƒÀ7¶s÷87s÷87ƒÀ7¶ƒÀ7¶ÿì5”`=¸mRÛ·=.Œ·7Ú¸7Ú¸xþ¤¸adQ¸adQ¸7Ú¸)q¸7Ú¸#뚸7Ú¸†Eøxþ¤¸#뚸~€y¸)q¸adQ¸‡¸‹d)¸mRÛ·)q¸=.Œ·adQ¸‡¸8°³·mRÛ·ƒÀ7¶&±Õ6&±Õ6&±Õ6ƒÀ7¶D«7s÷87ýɃ7öªI·)q¸8°³·öªI·×Øö¶ÿì5=.Œ·ýɃ7&±Õ6ÿì538¿98&±Õ6t—ú7s÷87ö M8O:u8TƘ8Ž·8O:u8(Ù¢8$:Ë8Gî¬8TƘ8(Ù¢8ðµŽ8$:Ë8TƘ8Gî¬8TƘ8Ž·8vß8Gî¬8O:u8Gî¬8¿98O:u8ðµŽ8t—ú7àÒ7TƘ8&¨„838s÷87ÿì5D«7=.Œ·=.Œ·mRÛ·×Øö¶mRÛ·8°³·ÿì5=.Œ·=.Œ·mRÛ·‹d)¸7oe¸Ûˆ¸7oe¸#뚸7oe¸#뚸Ç+¹¸Ç+¹¸†EøÛˆ¸adQ¸7Ú¸¯¸xþ¤¸/a͸†Eø¯¸Ûˆ¸†Eø¯¸adQ¸7Ú¸”`=¸7oe¸‹d)¸adQ¸7Ú¸7oe¸”`=¸=.Œ·8°³·8°³·8°³·‡¸öªI·×Øö¶ÿì5ýɃ7&±Õ6mRÛ·ƒÀ7¶×Øö¶öªI·&±Õ6àÒ7y$%8y$%8D«7D«7ýɃ7àÒ7t—ú738àÒ7t—ú7&±Õ6ýɃ7D«7ÿì5×Øö¶t—ú7s÷87Z*a8ö M8D«7ðµŽ8ðµŽ8(Ù¢8O:u8ö M8¿98s÷87t—ú7s÷87¿98ðµŽ8t—ú7t—ú7ðµŽ8t—ú7y$%8àÒ7y$%8ÿì5&±Õ6&±Õ6ýɃ7s÷87D«7&±Õ6&±Õ6×Øö¶öªI·×Øö¶=.Œ·öªI·ƒÀ7¶mRÛ·öªI·)q¸‡¸8°³·#뚸7Ú¸‡¸7oe¸adQ¸#뚸7Ú¸¯¸Ç+¹¸¯¸7Ú¸xþ¤¸¯¸7Ú¸‹d)¸‡¸‡¸8°³·‡¸mRÛ·)q¸×Øö¶×Øö¶ÿì5&±Õ6&±Õ6¿98ýɃ73838¿98t—ú7ö M8y$%8¿98àÒ7àÒ7y$%8ö M8O:u8ðµŽ8&¨„8O:u8Z*a8O:u8t—ú7ö M8ðµŽ8&¨„8Z*a8Ž·8¿98(Ù¢8(Ù¢8&¨„8Ž·8(Ù¢8ðµŽ8ö M8(Ù¢8Gî¬8ðµŽ8¿98t—ú7s÷87&±Õ6àÒ7t—ú78°³·ýɃ7t—ú7×Øö¶öªI·ÿì5öªI·×Øö¶öªI·=.Œ·öªI·”`=¸)q¸‡¸)q¸‹d)¸”`=¸7oe¸”`=¸7oe¸~€y¸”`=¸‹d)¸adQ¸adQ¸7Ú¸‹d)¸‹d)¸‹d)¸)q¸7oe¸adQ¸”`=¸‡¸adQ¸7Ú¸)q¸7oe¸adQ¸adQ¸mRÛ·7oe¸‹d)¸)q¸adQ¸=.Œ·8°³·mRÛ·8°³·öªI·öªI·&±Õ6ýɃ7ÿì5&±Õ6&±Õ6D«7D«738ö M8¿98ðµŽ8O:u838O:u8ðµŽ8ö M8ðµŽ8(Ù¢8ðµŽ8ðµŽ8t—ú7O:u8$:Ë8Ž·8O:u8Gî¬8Gî¬8Gî¬8$:Ë8Gî¬8ö M8t—ú7y$%8D«7y$%8y$%8ýɃ7D«7¿9838s÷87&±Õ6ÿì5=.Œ·s÷87=.Œ·×Øö¶mRÛ·7oe¸7oe¸‹d)¸7Ú¸¯¸7Ú¸7Ú¸7Ú¸/a͸Ç+¹¸¯¸Ç+¹¸¬~׸l¹Náõ¸¬~׸¬~׸Lg¹†Eø =¹Lg¹¬~׸Ç+¹¸xþ¤¸Ç+¹¸Ç+¹¸çá¸çḯ¸Ç+¹¸çá¸/a͸7Ú¸~€y¸¯¸¯¸†EøÇ+¹¸7Ú¸7oe¸#뚸adQ¸‹d)¸)q¸‡¸)q¸8°³·ÿì5y$%8àÒ7ÿì5y$%8O:u8ª–é8?WÕ8?WÕ8vß8|Pd|1|24600|2013-282T15:32:27.397 N÷¼8&ùl8ÔëX8[†€8hȨ86´ž8ÈÇ8hȨ8$.Ñ8N÷¼8hȨ8ÈÇ86´ž8ÐÞ²8[†€8Bæ08[†€8ÐÞ²8]¢”8&ùl8]¢”8ï8Bæ08õ›7ÍÛ•6â‘Â7â‘Â7ï8«2g7ê¶ ¸yÃ7yÃ7v§ë·ê¶ ¸±¤¸Á›1¸v§ë·ÍÛ•6Žg£³Z›¶%ýi·%ýi·Éù÷ۡY¸±iœ·Éù÷%ýi·«2g7Á‰·Z›¶±iœ·v§ë·v§ë·Žg£³ÍÛ•6v§ë·Á‰·Á›1¸±¤¸Éù÷Éù÷v§ë·›E¸Éù÷Á‰·Éù÷œ>ê7Z›¶Z›¶œ>ê7Bæ08 8 8“Š8&ùl8[†€8â‘Â7œ>ê7[†€8]¢”8 8NåD8]¢”8“Š8]¢”8&ùl8N÷¼8]¢”86´ž8ÐÞ²8hȨ8[†€8“Š86´ž8[†€8ÔëX8&ùl8ÐÞ²86´ž8N÷¼8]¢”8ÐÞ²8¬ï8[†€8]¢”86´ž8 8œ>ê7ï8NåD8ÔëX8â‘Â7ï8œ>ê7â‘Â7 8Bæ08ÍÛ•6õ›7â‘Â7Žg£³ÍÛ•6Éù÷›E¸›E¸Á›1¸Û¡Y¸—း¸Ÿ¸z:³¸ S½¸ÿ#©¸¸Ÿ¸ÿ#©¸Êý”¸—း¸Ÿ¸Êý”¸ÿ#©¸:¨Û¸–mǸ)Èå¸Î+¹ S½¸i¯m¸i¯m¸Êý”¸ŠÑ¸¸Ÿ¸Êý”¸v§ë·›E¸±¤¸z:³¸Û¡Y¸i¯m¸ê¶ ¸›E¸Û¡Y¸Êý”¸Žg£³v§ë·›E¸ê¶ ¸ê¶ ¸Éù÷±¤¸v§ë·v§ë·%ýi·Û¡Y¸›E¸v§ë·±iœ·±iœ·NåD8Žg£³Á‰·yÃ7Éù÷Žg£³yÃ7yÃ7ï8ï8[†€8ÔëX8Bæ08ï8œ>ê7õ›7 8õ›7œ>ê7õ›7yÃ7yÃ7Z›¶±iœ·v§ë·Éù÷Á‰·Éù÷Žg£³ÍÛ•6Žg£³ÍÛ•6Éù÷±¤¸¸Ÿ¸±¤¸›E¸v§ë·ÿ#©¸i¯m¸Êý”¸–mǸ–mǸÊý”¸z:³¸:¨Û¸z:³¸[îŠ¸ê¶ ¸ê¶ ¸ê¶ ¸¸Ÿ¸[¸Ÿ¸Êý”¸i¯m¸—းÊý”¸ S½¸Êý”¸Êý”¸ŠÑ¸ S½¸z:³¸ S½¸¸Ÿ¸z:³¸i¯m¸Û¡Y¸i¯m¸›E¸Û¡Y¸¸Ÿ¸—းۡY¸i¯m¸›E¸ê¶ ¸Û¡Y¸v§ë·›E¸—းÁ›1¸Û¡Y¸›E¸v§ë·ê¶ ¸yÃ7 8œ>ê7œ>ê7â‘Â7õ›7õ›7â‘Â7yÃ7«2g7«2g7ÔëX8 8Bæ08 8NåD8õ›7Bæ08Bæ08ï8ÔëX8õ›7œ>ê7ï8œ>ê7NåD8&ùl8«2g7 8â‘Â7œ>ê7Z›¶±iœ·õ›7ï8ï8õ›7ÍÛ•6%ýi·õ›7õ›7â‘Â7ÍÛ•6 8Žg£³v§ë·ê¶ ¸›E¸±iœ·ÉùÃ·ê¶ ¸Éù÷Á›1¸›E¸—းÊý”¸)Èå¸Î+¹–mǸ–mǸ:¨Û¸¹éï¸? ¹Â¹? ¹úS¹? ¹Î+¹Ý ú¸Â¹Ý ú¸Ý ú¸Â¹)Èå¸ S½¸:¨Û¸:¨Û¸ŠÑ¸[ S½¸¸Ÿ¸Û¡Y¸Êý”¸¸Ÿ¸i¯m¸ÿ#©¸Êý”¸—း—း›E¸›E¸v§ë·›E¸Êý”¸—းÁ›1¸Û¡Y¸ê¶ ¸±¤¸›E¸Á›1¸Z›¶±iœ·Á‰·Žg£³Á‰·«2g7ÍÛ•6«2g7Žg£³v§ë·õ›7õ›7 8œ>ê7õ›7«2g7yÃ7â‘Â7yÃ7Žg£³õ›7â‘Â7«2g7â‘Â7NåD8 8õ›7«2g7±iœ·«2g7%ýi·±¤¸ê¶ ¸›E¸ê¶ ¸Û¡Y¸±iœ·±¤¸Û¡Y¸Û¡Y¸›E¸i¯m¸¸Ÿ¸ÿ#©¸ÿ#©¸ŠÑ¸ŠÑ¸Î+¹¹éï¸úS¹Ý ú¸Ý ú¸Ý ú¸Î+¹Â¹• ¹? ¹? ¹Â¹:¨Û¸¹é︖mǸ S½¸Ý ú¸–mǸ–mǸŠÑ¸¸Ÿ¸Êý”¸¸Ÿ¸¸Ÿ¸Êý”¸z:³¸[Êý”¸i¯m¸ÿ#©¸Éù÷±¤¸Á›1¸v§ë·ê¶ ¸v§ë·±iœ·Á‰·Á‰·«2g7v§ë·yÃ7ÍÛ•6Z›¶õ›7 8«2g7&ùl8 8yÃ7ï8õ›7 8Bæ08[†€8ÔëX8hȨ8&ùl8ÔëX8[†€8hȨ8N÷¼8ÔëX8 8yÃ7yÃ7â‘Â7Žg£³Žg£³«2g7%ýi·ÍÛ•6%ýi·Éù÷ۡY¸Á›1¸›E¸Á›1¸Êý”¸ÿ#©¸¸Ÿ¸i¯m¸Êý”¸ S½¸ÿ#©¸Á›1¸¸Ÿ¸ S½¸Êý”¸ S½¸ÿ#©¸ŠÑ¸ S½¸ŠÑ¸ S½¸–mǸ¹éï¸Â¹úS¹Êý”¸Êý”¸z:³¸¹éï¸Â¹Ý ú¸ i¹:¨Û¸)È帊ѸŠÑ¸¹é︊Ѹ)È帖mǸ S½¸–mǸ)Èå¸Êý”¸i¯m¸v§ë·v§ë·¸Ÿ¸i¯m¸±iœ·ê¶ ¸Û¡Y¸ê¶ ¸Á›1¸±¤¸Éù÷±iœ·±¤¸ê¶ ¸Éù÷Éù÷%ýi·%ýi·Éù÷%ýi· 8Á‰·«2g7Bæ08NåD8hȨ8NåD8œ>ê7â‘Â7ÔëX8“Š8&ùl8ÐÞ²86´ž8]¢”8N÷¼8KLÛ8$.Ñ8¬ï8)lå8­ê9hȨ8ÈÇ8N÷¼8m 9Á°ù8ÐÞ²8Á°ù8$.Ñ8$.Ñ8KLÛ8ÐÞ²8ÈÇ8]¢”8]¢”8&ùl8ÔëX8hȨ8ÔëX8NåD8 8œ>ê7NåD8«2g7Z›¶Á‰·v§ë·ê¶ ¸ê¶ ¸ê¶ ¸±iœ·Á‰·%ýi·±iœ·Éù÷ÍÛ•6%ýi·Éù÷v§ë·Á›1¸±¤¸v§ë·ê¶ ¸±iœ·ê¶ ¸ê¶ ¸ê¶ ¸Éù÷Žg£³±iœ·%ýi·yÃ7Éù÷Éù÷Z›¶Éù÷Éù÷Z›¶ÍÛ•6Á‰·±¤¸Éù÷Éù÷Žg£³œ>ê7ÍÛ•6«2g7 8ï8ÔëX8&ùl8hȨ8&ùl8[†€8“Š8N÷¼8KLÛ8)lå8KLÛ8hȨ8³ý9Ûf 9P9³ý9Ûf 95•*9à:95•*9=HN9ÀX9áÞ99ÉÅ49P9¾}%9ÉÅ49,-I9P9m 9•D9•D9Ûf 9­ê9Ò%9m 9­ê9­ê9KLÛ8³ý9KLÛ8N÷¼8Á°ù8KLÛ8¬ï8ÐÞ²86´ž8N÷¼86´ž8“Š8“Š8]¢”8ÐÞ²8&ùl8 8ÔëX8ï8 8 8ÍÛ•6Z›¶v§ë·Žg£³±iœ·±¤¸Éù÷v§ë·ê¶ ¸v§ë·ê¶ ¸Éù÷±¤¸Á›1¸Á›1¸ÉùÃ·ê¶ ¸Êý”¸—းv§ë·ê¶ ¸›E¸ê¶ ¸[±iœ·ê¶ ¸Éù÷±¤¸Éù÷Á›1¸Á‰·yÃ7Žg£³ÍÛ•6œ>ê7â‘Â7œ>ê7ÔëX8 8&ùl8ÐÞ²8ÐÞ²8“Š8[†€8“Š8ÔëX8]¢”8ÐÞ²8KLÛ8ÔëX8[†€8[†€86´ž8hȨ8N÷¼8ÈÇ8KLÛ8¬ï8¬ï8Á°ù8ÈÇ8KLÛ8]¢”8ÈÇ8hȨ8ÈÇ8]¢”8$.Ñ8]¢”8ÈÇ8]¢”8ÐÞ²8&ùl8“Š8hȨ8NåD8ÔëX8Bæ08œ>ê7œ>ê7yÃ7Z›¶Z›¶Z›¶%ýi·Žg£³ÍÛ•6Z›¶õ›7œ>ê7Á‰·›E¸ê¶ ¸Á‰·±¤¸±¤¸›E¸ÉùÃ·ê¶ ¸›E¸—းÁ›1¸Êý”¸¸Ÿ¸—းÿ#©¸ÿ#©¸—းi¯m¸›E¸z:³¸ê¶ ¸›E¸ê¶ ¸Éù÷±¤¸Û¡Y¸Û¡Y¸Û¡Y¸v§ë·Û¡Y¸ê¶ ¸v§ë·±¤¸±iœ·õ›7Žg£³±iœ·œ>ê7ÍÛ•6«2g7Z›¶â‘Â7œ>ê7â‘Â7 8[†€8ÔëX8 8 8Á‰·«2g7ï8Bæ08“Š86´ž8“Š86´ž8hȨ8]¢”8&ùl8œ>ê7œ>ê7ï8«2g7Bæ08Bæ08«2g7NåD8õ›7«2g7Bæ08ï8“Š8NåD8Bæ08â‘Â7ÔëX8 8õ›7 8«2g7%ýi·«2g7±iœ·Á‰·%ýi·±iœ·Á‰·Á›1¸v§ë·Û¡Y¸i¯m¸Û¡Y¸ S½¸i¯m¸[¸Ÿ¸ÿ#©¸:¨Û¸Á›1¸›E¸i¯m¸v§ë·Êý”¸Êý”¸Êý”¸z:³¸Á›1¸±iœ·%ýi·ê¶ ¸Éù÷%ýi·Éù÷Žg£³Éù÷Žg£³Žg£³v§ë·ê¶ ¸±¤¸v§ë·Á›1¸±¤¸±¤¸±iœ·Žg£³õ›7«2g7«2g7«2g7œ>ê7Á‰·±¤¸Á‰·%ýi·Á‰·Á‰·õ›7&ùl8ï8õ›7ï8ï8NåD8NåD8 8œ>ê7ï8«2g7œ>ê7“Š8&ùl8œ>ê7â‘Â7ï8NåD8Bæ08&ùl8“Š8“Š8“Š8Bæ08œ>ê7â‘Â7Bæ08NåD8ÐÞ²8ï8NåD8Bæ08ÔëX8â‘Â7â‘Â7â‘Â7«2g7NåD8 8œ>ê7œ>ê7«2g7«2g7%ýi·õ›7ï8â‘Â7Á‰·ÍÛ•6œ>ê7Á‰·Žg£³Z›¶Á‰·Žg£³%ýi·â‘Â7œ>ê7â‘Â7«2g7«2g7«2g7Á‰·ÍÛ•6Žg£³%ýi·yÃ7Z›¶%ýi·Žg£³%ýi·Á›1¸Á‰·%ýi·Á›1¸ê¶ ¸Éù÷Á›1¸Z›¶Žg£³Á‰·Éù÷Á‰·±iœ·ÍÛ•6â‘Â7ÍÛ•6%ýi·ÍÛ•6 8â‘Â7Bæ08ÔëX8¬ï8ÐÞ²8“Š8N÷¼8hȨ8¬ï8ÐÞ²8)lå8ÐÞ²8N÷¼8$.Ñ8]¢”8&ùl8]¢”8Bæ08]¢”8]¢”8[†€86´ž86´ž8hȨ8N÷¼8[†€8ÈÇ86´ž8ï8ï8«2g7ï8 8â‘Â7Á‰·ê¶ ¸Éù÷%ýi·ê¶ ¸±iœ·Á‰·%ýi·Z›¶Z›¶Á‰·v§ë·Á‰·yÃ7Á‰·%ýi·ÍÛ•6Žg£³±¤¸%ýi·Žg£³Á‰·±iœ·v§ë·yÃ7Žg£³ÍÛ•6%ýi·Éù÷â‘Â7Žg£³Žg£³Žg£³%ýi·%ýi·±iœ·Z›¶Z›¶Éù÷Éù÷õ›7%ýi·v§ë·Á‰·v§ë·ÉùÃ·ê¶ ¸±¤¸Éù÷±¤¸¸Ÿ¸%ýi·v§ë·Žg£³±¤¸Á‰·Z›¶Á‰·œ>ê7â‘Â7Bæ08&ùl86´ž86´ž8&ùl8hȨ8&ùl8[†€8N÷¼8hȨ8$.Ñ8ÈÇ8hȨ8hȨ8hȨ8&ùl8hȨ8ÔëX86´ž8)lå8[†€8ï8Bæ08]¢”86´ž8ÈÇ8]¢”8“Š86´ž8]¢”8“Š8$.Ñ8]¢”8hȨ8hȨ8&ùl8[†€8&ùl8NåD8ï8 8[†€8NåD8yÃ7â‘Â7õ›7%ýi·Žg£³yÃ7%ýi·Á‰·v§ë·Žg£³Á›1¸v§ë·±iœ·Á‰·Êý”¸Á›1¸ê¶ ¸—း S½¸:¨Û¸¸Ÿ¸z:³¸Êý”¸—းi¯m¸ S½¸–mǸ—း¸Ÿ¸ S½¸ÿ#©¸Û¡Y¸Û¡Y¸—းÁ‰·Z›¶%ýi·õ›7«2g7â‘Â7õ›7Žg£³œ>ê7œ>ê7 8ï8NåD8&ùl8Bæ08œ>ê7õ›7 8õ›7õ›7ï8yÃ7õ›7NåD8Bæ08NåD8ÔëX8&ùl86´ž8Bæ086´ž8NåD8â‘Â76´ž8ÐÞ²8ÔëX86´ž8NåD8“Š8ÔëX8“Š8[†€8“Š8ÐÞ²8ÈÇ86´ž8&ùl8ÔëX8“Š8NåD86´ž8KLÛ8“Š8“Š8hȨ8]¢”8ÔëX8ï8 8â‘Â7«2g7yÃ7%ýi·Z›¶yÃ7Z›¶v§ë·Á›1¸Á›1¸›E¸¸Ÿ¸i¯m¸Êý”¸—းÿ#©¸Êý”¸z:³¸ÿ#©¸–mǸ? ¹z:³¸Ý ú¸Ý ú¸–mǸ)Èå¸Â¹ŠÑ¸ŠÑ¸)È帹é︹éï¸? ¹úS¹¹éï¸Êý”¸ S½¸—းÿ#©¸ÿ#©¸›E¸›E¸Á›1¸ÍÛ•6ê¶ ¸Á‰·ÍÛ•6%ýi·Á‰·õ›7Á‰·Z›¶%ýi·Žg£³Žg£³ï8&ùl8“Š8“Š8“Š86´ž8)lå8¬ï8ÈÇ8hȨ8)lå8$.Ñ8]¢”8N÷¼8ÐÞ²8¬ï86´ž8]¢”8KLÛ8hȨ8N÷¼8ÐÞ²8“Š8NåD8õ›7œ>ê7â‘Â7Žg£³Žg£³ 8õ›7œ>ê7 8õ›7â‘Â7Žg£³Z›¶±iœ·%ýi·%ýi·Z›¶±iœ·Á›1¸ÿ#©¸¹éï¸ S½¸ÿ#©¸–mǸ S½¸–mǸŠÑ¸)Èå¸? ¹úS¹Î+¹ i¹:¨Û¸? ¹wÃ*¹• ¹ i¹)Èå¸Ý ú¸Î+¹:¨Û¸úS¹ŠÑ¸ S½¸¸Ÿ¸z:³¸ŠÑ¸)Èå¸)Èå¸Ý ú¸¹éï¸:¨Û¸Ý ú¸¹éï¸:¨Û¸ŠÑ¸ S½¸–mǸÿ#©¸ S½¸ÿ#©¸ÿ#©¸Êý”¸¸Ÿ¸—း›E¸Êý”¸›E¸Á›1¸±¤¸Žg£³ÉùÃ·ê¶ ¸%ýi·Á‰·Žg£³Žg£³ÍÛ•6Á‰·Z›¶Žg£³Z›¶NåD8±iœ·±iœ·Éù÷«2g7%ýi·œ>ê7Á‰·Á‰·Éù÷yÃ7ï8â‘Â7õ›7yÃ7õ›7±iœ·õ›7õ›7Z›¶Éù÷Éù÷v§ë·ÍÛ•6ê¶ ¸%ýi·Žg£³±iœ·%ýi·v§ë·v§ë·±iœ·v§ë·±¤¸Á›1¸—းÁ›1¸Û¡Y¸Êý”¸Á›1¸Êý”¸Êý”¸z:³¸z:³¸¸Ÿ¸Û¡Y¸ê¶ ¸›E¸%ýi·±¤¸Û¡Y¸Û¡Y¸±iœ·ê¶ ¸v§ë·%ýi·v§ë·v§ë·ÍÛ•6ÍÛ•6Žg£³ÍÛ•6Žg£³%ýi·ÍÛ•6õ›7yÃ7NåD86´ž8&ùl86´ž86´ž8“Š8hȨ8$.Ñ8“Š8Bæ08&ùl8hȨ8KLÛ8[†€8“Š86´ž8$.Ñ8Ûf 9³ý9KLÛ8­ê9à:9Á°ù8KLÛ8Á°ù8à:9Ûf 9à:9­ê9³ý9­ê9³ý9P9à:9)lå8¬ï8Á°ù8$.Ñ8¬ï8ÈÇ8hȨ8KLÛ8ÈÇ8]¢”8ï8hȨ8&ùl8ÔëX8“Š8Bæ08NåD8NåD8õ›7ÔëX8ÔëX8&ùl8NåD8NåD8ÔëX8â‘Â7Žg£³â‘Â7%ýi·±iœ·±¤¸v§ë·yÃ7Éù÷±iœ·ê¶ ¸Á‰·Z›¶ê¶ ¸ê¶ ¸Û¡Y¸ê¶ ¸Û¡Y¸Û¡Y¸›E¸Û¡Y¸v§ë·z:³¸ÉùÃ·ê¶ ¸Êý”¸ê¶ ¸i¯m¸Êý”¸—းۡY¸Éù÷Éù÷›E¸Éù÷i¯m¸Á›1¸Á‰·i¯m¸Êý”¸Û¡Y¸ê¶ ¸Z›¶±iœ·Éù÷Žg£³±iœ·Éù÷±iœ·v§ë·v§ë·Û¡Y¸ê¶ ¸±¤¸±iœ·Z›¶Éù÷Z›¶Z›¶Á‰·±iœ·Éù÷±iœ·ÍÛ•6Bæ08ÍÛ•6â‘Â7 8ÍÛ•6 8«2g7±iœ·Z›¶Žg£³ÍÛ•6Á‰·Á‰·±iœ·Z›¶Á‰·Z›¶v§ë·Á‰·Žg£³ê¶ ¸v§ë·Éù÷Žg£³v§ë·Á›1¸±¤¸ê¶ ¸Á›1¸Û¡Y¸Û¡Y¸±¤¸±iœ·±iœ·Êý”¸ÿ#©¸Êý”¸Á›1¸i¯m¸Á›1¸v§ë·›E¸ê¶ ¸±¤¸Êý”¸Û¡Y¸±¤¸—းۡY¸ÿ#©¸ÿ#©¸Û¡Y¸ÿ#©¸–mǸ:¨Û¸–mǸۡY¸Êý”¸Û¡Y¸±¤¸i¯m¸[Êý”¸Û¡Y¸v§ë·i¯m¸i¯m¸Éù÷Á‰·Á‰·ÍÛ•6Z›¶Á‰·Z›¶ê¶ ¸±iœ·Žg£³±iœ·Á‰·v§ë·yÃ7õ›7Z›¶Á‰·±iœ·ÍÛ•6œ>ê7Bæ08NåD8]¢”8NåD8&ùl8NåD8Bæ08]¢”8ÔëX8Bæ08ÍÛ•6œ>ê7ÍÛ•6±iœ·v§ë·Z›¶yÃ7ÍÛ•6yÃ7%ýi·«2g7«2g7%ýi·Û¡Y¸%ýi·Éù÷ۡY¸Û¡Y¸ê¶ ¸ÿ#©¸¸Ÿ¸ÿ#©¸Êý”¸Êý”¸ S½¸ÿ#©¸ S½¸:¨Û¸? ¹)Èå¸Î+¹? ¹? ¹)Èå¸úS¹úS¹ i¹Î+¹)Èå¸Î+¹ü«%¹ i¹Â~¹Î+¹wÃ*¹? ¹Ý ú¸wÃ*¹Û/¹Ý ú¸úS¹Â¹:¨Û¸Â¹Ý ú¸¹éï¸)Èå¸:¨Û¸ S½¸ÿ#©¸Êý”¸Á›1¸Û¡Y¸›E¸Á›1¸Û¡Y¸›E¸ÿ#©¸±¤¸›E¸›E¸i¯m¸v§ë·Á‰·â‘Â7â‘Â7õ›7%ýi·õ›7ï8NåD8 8ï8«2g7NåD8NåD8ï8ÈÇ8KLÛ8NåD8[†€8[†€8ÐÞ²8ÈÇ8)lå8­ê9)lå8)lå8KLÛ8KLÛ8ÈÇ8¬ï8³ý9¬ï8)lå8¬ï8­ê9KLÛ8Á°ù8­ê9hȨ8KLÛ8)lå8ÈÇ8ÈÇ8hȨ86´ž8&ùl8[†€8&ùl8&ùl8NåD8“Š8[†€8]¢”8NåD8œ>ê7&ùl8 8œ>ê7â‘Â7NåD8Žg£³ÍÛ•6œ>ê7â‘Â7â‘Â7%ýi·Éù÷Á‰·Éù÷±iœ·v§ë·±¤¸ê¶ ¸Z›¶«2g7±iœ·v§ë·±iœ·%ýi·Žg£³œ>ê7â‘Â7õ›7NåD8ÔëX8œ>ê7õ›7õ›7NåD8õ›7yÃ7œ>ê7œ>ê7Bæ08 8œ>ê7]¢”8]¢”8N÷¼8)lå8]¢”8]¢”8ÐÞ²8[†€86´ž8hȨ86´ž8“Š8“Š86´ž8KLÛ8$.Ñ8]¢”8“Š8[†€8“Š8ï8&ùl8&ùl8&ùl86´ž8ÐÞ²8]¢”8“Š8NåD8ï8Bæ08ï8NåD8õ›7ÍÛ•6â‘Â7Á‰·%ýi·ÍÛ•6Z›¶%ýi·Z›¶ÍÛ•6±iœ·›E¸Û¡Y¸Á›1¸v§ë·ê¶ ¸ê¶ ¸v§ë·v§ë·ê¶ ¸±¤¸Û¡Y¸v§ë·Á›1¸ê¶ ¸Û¡Y¸Êý”¸Û¡Y¸Û¡Y¸¸Ÿ¸¸Ÿ¸ S½¸ÿ#©¸Û¡Y¸[Êý”¸—း¸Ÿ¸Êý”¸i¯m¸[îŠ¸ê¶ ¸Á›1¸±¤¸±iœ·%ýi·Éù÷v§ë·Žg£³Z›¶Žg£³yÃ7yÃ7%ýi·«2g7Žg£³õ›7yÃ7«2g7õ›7œ>ê7ï8Bæ08 8 8Bæ08&ùl8&ùl8 8yÃ7«2g7«2g7±iœ·õ›7ÔëX8&ùl8ÔëX8œ>ê7Bæ08ï8ÍÛ•6yÃ7±iœ·õ›7Z›¶yÃ7Žg£³«2g7Žg£³Žg£³â‘Â7Á‰·%ýi·Z›¶Á‰·Á‰·±iœ·›E¸±¤¸v§ë·ê¶ ¸Êý”¸Û¡Y¸¸Ÿ¸¸Ÿ¸ S½¸z:³¸Êý”¸ÿ#©¸z:³¸z:³¸—းz:³¸i¯m¸Û¡Y¸i¯m¸–mǸÿ#©¸i¯m¸[±¤¸i¯m¸ S½¸:¨Û¸ŠÑ¸ÿ#©¸ŠÑ¸Î+¹Ý ú¸Î+¹Î+¹)Èå¸Î+¹• ¹)È帖mǸ S½¸z:³¸–mǸ›E¸Û¡Y¸i¯m¸±¤¸±iœ·Á‰· 8%ýi·ÍÛ•6â‘Â7 8“Š8Bæ08“Š8]¢”8hȨ8$.Ñ8N÷¼8hȨ8&ùl8hȨ8hȨ8N÷¼8ÐÞ²8KLÛ8¬ï8m 9m 9Á°ù8Ò%9­ê9¬ï8N÷¼8N÷¼8ÐÞ²8ÔëX8“Š8ÔëX8NåD8“Š8]¢”8]¢”8]¢”86´ž8]¢”8NåD8NåD8 8Žg£³œ>ê7Z›¶Z›¶Z›¶Žg£³«2g7ï8yÃ7Á‰·%ýi·±¤¸ÍÛ•6v§ë·%ýi·Á‰·Á›1¸±¤¸Êý”¸ÿ#©¸Êý”¸¸Ÿ¸i¯m¸›E¸±¤¸[¸Ÿ¸±¤¸—းz:³¸z:³¸¹é︹éï¸:¨Û¸ŠÑ¸Ý ú¸Ý ú¸z:³¸–mǸ S½¸[Êý”¸¸Ÿ¸i¯m¸—း±¤¸v§ë·±¤¸ê¶ ¸±iœ·±¤¸±¤¸ê¶ ¸Z›¶Žg£³yÃ7«2g7Á‰·yÃ7â‘Â7Bæ086´ž8[†€8NåD8NåD8hȨ8“Š8hȨ8“Š8ÐÞ²8ÐÞ²8N÷¼8N÷¼8hȨ8KLÛ8hȨ8hȨ8N÷¼8“Š8ÐÞ²8&ùl8“Š8[†€8ÔëX8[†€8Bæ08ï8&ùl8œ>ê7ï8 8Žg£³õ›7ï8 8«2g7%ýi·yÃ7õ›7œ>ê7â‘Â7Z›¶yÃ7ÍÛ•6Z›¶«2g7Z›¶±iœ·%ýi·±iœ·v§ë·Éù÷Z›¶±¤¸ê¶ ¸›E¸±¤¸v§ë·Éù÷±¤¸Á‰·v§ë·v§ë·Z›¶±iœ·Éù÷i¯m¸›E¸—းi¯m¸±¤¸±iœ·Z›¶Z›¶%ýi·Žg£³NåD8Bæ08Z›¶ÍÛ•6œ>ê7 8&ùl8ÔëX8NåD8&ùl8Bæ08“Š8[†€8œ>ê7ÐÞ²8&ùl8ÔëX8&ùl8[†€8[†€86´ž86´ž8$.Ñ8]¢”8]¢”86´ž8ÐÞ²8NåD8â‘Â7&ùl86´ž8“Š8Bæ08[†€8Bæ08“Š8õ›7“Š8[†€8&ùl8 8â‘Â7ÍÛ•6ÍÛ•6%ýi·ÍÛ•6Žg£³õ›7«2g7±iœ·±iœ·Á‰·Z›¶±iœ·«2g7õ›7yÃ7«2g7Žg£³Éù÷ÍÛ•6±iœ·±iœ·ÉùÃ·ê¶ ¸±iœ·Éù÷›E¸Û¡Y¸z:³¸Á›1¸Êý”¸ÿ#©¸z:³¸–mǸ)Èå¸)È帹éï¸Â¹úS¹Ý ú¸)Èå¸ S½¸)È帖mǸ¹é︊Ѹ¹éï¸ÿ#©¸–mǸ—းÿ#©¸Êý”¸—း¸Ÿ¸Êý”¸–mǸ–mǸi¯m¸›E¸±¤¸ S½¸—းۡY¸›E¸Á‰·Žg£³v§ë·%ýi·%ýi·õ›7œ>ê7yÃ7ÔëX8õ›7œ>ê7â‘Â7 8õ›7Á‰·Žg£³ÍÛ•6Z›¶yÃ7yÃ7 8Bæ08õ›7œ>ê7õ›7Z›¶Z›¶Á‰·«2g7yÃ7Á‰·Á‰·v§ë·v§ë·Éù÷%ýi·%ýi·±¤¸ê¶ ¸±¤¸v§ë·ê¶ ¸v§ë·Éù÷Á›1¸¸Ÿ¸±¤¸i¯m¸ê¶ ¸›E¸ÿ#©¸ S½¸—း›E¸ S½¸i¯m¸[Êý”¸Êý”¸Êý”¸ÿ#©¸ÿ#©¸¸Ÿ¸[ S½¸z:³¸z:³¸Êý”¸ S½¸Êý”¸ŠÑ¸Â¹Â¹ŠÑ¸:¨Û¸ü«%¹ü«%¹ÿ#©¸)Èå¸Ý ú¸ S½¸Êý”¸—းi¯m¸z:³¸ S½¸ŠÑ¸ÿ#©¸i¯m¸¸Ÿ¸Û¡Y¸›E¸›E¸ê¶ ¸Á‰·«2g7«2g7&ùl8ï8NåD8Bæ08&ùl8ÔëX8ÈÇ8N÷¼8ÈÇ8“Š8ÐÞ²86´ž8)lå8hȨ8ÐÞ²8ÐÞ²8[†€8ÈÇ8¬ï86´ž8hȨ8ÈÇ8“Š86´ž8KLÛ8ÈÇ8hȨ8ÔëX8hȨ8KLÛ8ÐÞ²8ÈÇ8“Š8&ùl8[†€8ÐÞ²8[†€8]¢”8N÷¼8NåD8“Š8[†€8 8â‘Â7ï8œ>ê7 8õ›7«2g7 8%ýi·%ýi·Z›¶Á‰·Éù÷Žg£³õ›7«2g7ÍÛ•6ÍÛ•6Z›¶Žg£³Z›¶Z›¶Z›¶±iœ·õ›7«2g7Z›¶ê¶ ¸Z›¶yÃ7«2g7Žg£³õ›7«2g7Éù÷Á›1¸Á‰·%ýi·Á‰·õ›7ï8œ>ê7œ>ê7ÍÛ•6ï8NåD8hȨ8]¢”8¬ï8ÈÇ8[†€8ÔëX8$.Ñ8N÷¼8“Š8ÈÇ8³ý9$.Ñ8KLÛ8­ê9³ý9³ý9Ò%9­ê9)lå8m 9Ò%9m 9Ò%9¬ï8P9ÉÅ49:­/9ÉÅ49m 9P9Á°ù8N÷¼8N÷¼8ÈÇ8“Š8N÷¼86´ž86´ž8ï8NåD86´ž8]¢”8NåD8Bæ08«2g7NåD8œ>ê7Bæ08 8ÍÛ•6 8yÃ7«2g7â‘Â7œ>ê7yÃ7Á‰·Z›¶±iœ·%ýi·v§ë·±iœ·ê¶ ¸Êý”¸Êý”¸›E¸i¯m¸Û¡Y¸Á›1¸Á›1¸Êý”¸Êý”¸Á›1¸¸Ÿ¸Êý”¸Û¡Y¸i¯m¸›E¸›E¸z:³¸Êý”¸i¯m¸[–mǸi¯m¸i¯m¸Û¡Y¸Á›1¸±¤¸ê¶ ¸ê¶ ¸Éù÷v§ë·Êý”¸›E¸Á‰·Z›¶±¤¸Žg£³ÍÛ•6ÔëX8ï8Bæ08ï8]¢”8Bæ08 8ÍÛ•6ï8«2g7«2g7â‘Â7õ›7«2g7 8â‘Â7 8â‘Â7 8ï8Žg£³Éù÷Z›¶±iœ·õ›7ÍÛ•6v§ë·Á‰·Žg£³Á‰·«2g7«2g7 8â‘Â7«2g7Á‰·Éù÷ÍÛ•6Z›¶Á‰·ÍÛ•6Z›¶õ›7 8ÍÛ•6ÍÛ•6±iœ·yÃ7ÍÛ•6Z›¶ 8Žg£³%ýi·%ýi·%ýi·Žg£³Û¡Y¸—း±¤¸%ýi·%ýi·ÍÛ•6«2g7ÍÛ•6Žg£³Z›¶Éù÷Á‰·Žg£³Žg£³±iœ·ê¶ ¸›E¸Éù÷±iœ·Á‰·ê¶ ¸Û¡Y¸v§ë·±iœ·±iœ·Z›¶±iœ·Á‰·Žg£³Z›¶%ýi·Z›¶Éù÷õ›7ÍÛ•6Z›¶Z›¶Z›¶Z›¶Z›¶«2g7õ›7Z›¶ÍÛ•6œ>ê7%ýi·Z›¶Z›¶Z›¶ 8Z›¶Z›¶â‘Â7õ›7â‘Â7ÔëX8«2g7 8ï8ï8&ùl8]¢”8]¢”8]¢”8&ùl8“Š8“Š8ÔëX8“Š8ï8 8ï8 8%ýi·Žg£³Éù÷Á‰·yÃ7Z›¶±iœ·Á‰·yÃ7Á‰·ÍÛ•6Á‰·Á‰·Z›¶Éù÷v§ë·›E¸Êý”¸i¯m¸i¯m¸ S½¸Û¡Y¸Êý”¸z:³¸ŠÑ¸Êý”¸ÿ#©¸ÿ#©¸z:³¸–mǸ–mǸŠÑ¸Â¹:¨Û¸ŠÑ¸¹é︊ѸÊý”¸ S½¸¹éï¸ S½¸›E¸Êý”¸Êý”¸Á›1¸›E¸v§ë·%ýi·ÍÛ•6ê¶ ¸Á‰·â‘Â7Bæ08NåD8 8ï8hȨ8N÷¼8hȨ8hȨ8“Š8[†€8hȨ8[†€8[†€8N÷¼8hȨ8“Š8ÔëX8hȨ8[†€8hȨ8Á°ù8Ò%9³ý9¬ï8Ò%9m 9P9Ûf 9­ê9Á°ù8Á°ù8)lå8³ý9Ò%9Á°ù8P9m 9Á°ù8³ý9­ê9³ý9)lå8ÈÇ8$.Ñ8hȨ8ÈÇ8“Š8NåD8[†€8NåD8«2g7õ›7Žg£³Éù÷õ›7Žg£³Á‰·%ýi·±¤¸±iœ·Á›1¸›E¸ê¶ ¸±iœ·›E¸±iœ·±iœ·ê¶ ¸v§ë·±¤¸Á›1¸Û¡Y¸Éù÷v§ë·v§ë·Éù÷±¤¸±¤¸±¤¸Û¡Y¸Û¡Y¸ê¶ ¸±¤¸Û¡Y¸Û¡Y¸v§ë·v§ë·Á‰·Á‰·%ýi·Z›¶%ýi·Z›¶Z›¶Á‰·«2g7«2g7â‘Â7«2g7õ›7œ>ê7&ùl8 8œ>ê7õ›7yÃ7œ>ê7ÍÛ•6Bæ08 8&ùl86´ž8hȨ8N÷¼8hȨ8“Š86´ž8&ùl8ï8NåD8]¢”8 8NåD8â‘Â7[†€8ÔëX86´ž8]¢”8ï8Bæ08[†€8NåD8ï8ï8yÃ7õ›7[†€8ï8â‘Â7ÍÛ•6â‘Â7õ›7õ›7yÃ7±iœ·%ýi·Û¡Y¸Á›1¸%ýi·ê¶ ¸±¤¸±¤¸–mǸ¸Ÿ¸¸Ÿ¸:¨Û¸Ý ú¸? ¹Î+¹Ý ú¸wÃ*¹wÃ*¹Î+¹• ¹ i¹Î+¹Â¹Â~¹ü«%¹wÃ*¹Û/¹‹[I¹ i¹Î+¹¹éï¸Ý ú¸Â¹úS¹? ¹–mǸ–mǸ S½¸)È帖mǸÊý”¸z:³¸Êý”¸›E¸—းۡY¸Á›1¸±¤¸±¤¸Û¡Y¸±¤¸Éù÷%ýi·v§ë·%ýi·%ýi·Á‰·Á‰·Žg£³Á‰·Bæ08â‘Â7 8«2g7yÃ7«2g7Bæ08Á‰·ÍÛ•6«2g7õ›7õ›7â‘Â7 8â‘Â7Žg£³yÃ7yÃ7«2g7ÍÛ•6%ýi·ÍÛ•6Z›¶«2g7«2g7Žg£³Žg£³Á‰·Žg£³«2g7«2g7ÍÛ•6Á›1¸Û¡Y¸ê¶ ¸Û¡Y¸›E¸Á›1¸i¯m¸ÿ#©¸z:³¸)Èå¸ S½¸[[z:³¸z:³¸ŠÑ¸:¨Û¸z:³¸ S½¸¹é︊ѸŠÑ¸ŠÑ¸ŠÑ¸z:³¸Ý ú¸–mǸúS¹Î+¹¹éï¸Â¹ŠÑ¸Â¹:¨Û¸ÿ#©¸–mǸz:³¸–mǸz:³¸z:³¸—းz:³¸¹é︱¤¸i¯m¸ê¶ ¸—း›E¸i¯m¸Á›1¸ê¶ ¸v§ë·—း›E¸ê¶ ¸[Á›1¸±iœ·%ýi·Á‰·Á‰·ÍÛ•6œ>ê7ÍÛ•6«2g7œ>ê7â‘Â7Z›¶õ›7NåD8œ>ê7ÔëX8Bæ08õ›7%ýi·ï8â‘Â7â‘Â7œ>ê7&ùl8œ>ê7â‘Â7œ>ê7«2g7«2g7œ>ê7yÃ7â‘Â7ÍÛ•6ê¶ ¸±¤¸±¤¸%ýi·Á‰·ÍÛ•6±¤¸±¤¸v§ë·›E¸Á›1¸Û¡Y¸›E¸ê¶ ¸Û¡Y¸Á›1¸–mǸ¸Ÿ¸i¯m¸–mǸ–mǸ¹éï¸wÃ*¹Ý ú¸–mǸ)È帊ѸŠÑ¸)Èå¸:¨Û¸ŠÑ¸)È帖mǸ S½¸Êý”¸Êý”¸Êý”¸i¯m¸i¯m¸±¤¸ê¶ ¸Û¡Y¸±iœ·Éù÷Á›1¸ê¶ ¸Êý”¸›E¸ê¶ ¸%ýi·Éù÷v§ë·Éù÷%ýi·±¤¸v§ë·ÍÛ•6%ýi·õ›7Žg£³yÃ7œ>ê7«2g7â‘Â7ï8NåD8â‘Â7&ùl8õ›7õ›7ï8â‘Â7«2g7ï8“Š8Bæ08]¢”8]¢”8&ùl86´ž8&ùl86´ž86´ž8N÷¼8hȨ8ÈÇ8hȨ8N÷¼8$.Ñ8œ>ê7]¢”8Bæ08ÈÇ8$.Ñ8KLÛ8N÷¼8N÷¼8hȨ8]¢”8&ùl8Bæ08ÔëX8 8õ›7õ›7â‘Â7õ›7â‘Â7[†€8œ>ê7õ›7 8œ>ê7&ùl8ÔëX8«2g7ï8ÔëX8Bæ08õ›7œ>ê7ï8“Š8ÔëX8NåD8Bæ08ÔëX8]¢”8hȨ8“Š8hȨ8&ùl8]¢”8NåD8&ùl8ÔëX8Bæ08œ>ê7«2g7 8Bæ08]¢”8&ùl8[†€8ÔëX86´ž8ÔëX86´ž8ÈÇ8KLÛ8œ>ê7]¢”8[†€8]¢”8[†€8NåD8[†€8hȨ8]¢”8N÷¼8]¢”8ÐÞ²8hȨ8ÈÇ8)lå8$.Ñ8ÈÇ8³ý9Á°ù8$.Ñ8N÷¼8ÈÇ8ÐÞ²8NåD86´ž8hȨ8]¢”8&ùl8hȨ8“Š8Bæ08[†€8œ>ê7ï8Bæ08â‘Â7õ›7œ>ê7Z›¶Á‰·Z›¶%ýi·Á‰·›E¸±¤¸v§ë·›E¸Á›1¸ê¶ ¸—းÉù÷±iœ·Á›1¸Êý”¸ÿ#©¸¸Ÿ¸Êý”¸Êý”¸Êý”¸[Êý”¸ S½¸Êý”¸ÿ#©¸—းz:³¸Êý”¸¸Ÿ¸ÿ#©¸›E¸—းz:³¸%ýi·±¤¸Û¡Y¸›E¸v§ë·Á‰·Z›¶Z›¶yÃ7«2g7õ›7«2g7ÔëX8&ùl8Bæ08 8ï8]¢”8õ›7«2g7«2g7[†€8Bæ08 8[†€8NåD8[†€8hȨ8“Š86´ž8ÈÇ8)lå8ÐÞ²8[†€8hȨ8hȨ8“Š8hȨ8N÷¼8&ùl8Bæ08&ùl8“Š8[†€8ÔëX8&ùl8]¢”8NåD8â‘Â7NåD8ï8NåD8ï8Bæ08yÃ7õ›7ÍÛ•6â‘Â7 8õ›7Žg£³Á‰·Žg£³±iœ·›E¸Êý”¸i¯m¸ÿ#©¸z:³¸ÿ#©¸—းÊý”¸Á›1¸[ŠÑ¸ŠÑ¸)Èå¸)Èå¸Ý ú¸ S½¸¸Ÿ¸ S½¸:¨Û¸:¨Û¸ÿ#©¸ŠÑ¸–mǸ¸Ÿ¸z:³¸ S½¸¸Ÿ¸Êý”¸Êý”¸Û¡Y¸i¯m¸ê¶ ¸Á›1¸›E¸i¯m¸ÿ#©¸Êý”¸ê¶ ¸Á›1¸v§ë·Éù÷±iœ·v§ë·±iœ·v§ë·ÍÛ•6yÃ7ÍÛ•6«2g7Á‰·Éù÷Á‰·v§ë·ê¶ ¸v§ë·yÃ7«2g7ï8â‘Â7ÍÛ•6õ›7«2g7œ>ê7Bæ08]¢”8[†€8]¢”8ÈÇ8]¢”8ÔëX86´ž8]¢”8]¢”8&ùl8“Š8Bæ08hȨ8$.Ñ8[†€86´ž8ÐÞ²8“Š8ÔëX8NåD8NåD8[†€8œ>ê7â‘Â7&ùl8«2g7â‘Â7Žg£³ÍÛ•6yÃ7Žg£³Éù÷±¤¸ÍÛ•6%ýi·Žg£³ê¶ ¸v§ë·Éù÷œ>ê7«2g7±iœ·Z›¶Z›¶œ>ê7â‘Â7±iœ·%ýi·Á‰·v§ë·ê¶ ¸%ýi·›E¸Á›1¸ê¶ ¸±¤¸±¤¸±¤¸›E¸ê¶ ¸Û¡Y¸v§ë·Z›¶Žg£³Á‰·±¤¸Éù÷ÍÛ•6Z›¶Á‰·õ›7«2g7â‘Â7õ›7œ>ê7ï8œ>ê7œ>ê7Bæ08NåD8 8ÔëX86´ž8]¢”8ÈÇ8ÐÞ²8)lå8“Š8N÷¼8“Š8N÷¼8­ê9$.Ñ8N÷¼8N÷¼8ÈÇ8ÐÞ²8N÷¼8N÷¼8ÈÇ8ÐÞ²86´ž8hȨ8“Š8&ùl8[†€8NåD86´ž8hȨ8[†€8[†€8“Š8NåD8“Š8[†€8ÐÞ²8ÔëX8Bæ08Bæ08Žg£³ 8õ›7Žg£³±iœ·%ýi·Žg£³Á›1¸±iœ·Éù÷±¤¸Éù÷ۡY¸±¤¸Éù÷v§ë·%ýi·Z›¶›E¸ê¶ ¸Z›¶v§ë·v§ë·%ýi·i¯m¸Û¡Y¸—း S½¸ÿ#©¸Êý”¸i¯m¸z:³¸¸Ÿ¸¸Ÿ¸¸Ÿ¸z:³¸i¯m¸Êý”¸:¨Û¸:¨Û¸ÿ#©¸Êý”¸ÿ#©¸Êý”¸—းÊý”¸—း[±¤¸¸Ÿ¸¸Ÿ¸›E¸›E¸ê¶ ¸v§ë·ê¶ ¸Á‰·±iœ·Éù÷Éù÷õ›7õ›7œ>ê7Bæ08œ>ê7ÔëX8Bæ08 8 8NåD8]¢”8NåD8NåD8NåD8œ>ê7ÔëX8NåD8NåD8œ>ê7[†€8â‘Â7yÃ7œ>ê7õ›7[†€8ÔëX8ÔëX8ï8Bæ08&ùl8ÔëX8«2g7œ>ê7Á‰·±iœ·Éù÷%ýi·Á‰·%ýi·±iœ·v§ë·%ýi·v§ë·Êý”¸Û¡Y¸¸Ÿ¸ÿ#©¸ÿ#©¸Ý ú¸? ¹Î+¹Â~¹Û/¹Û/¹wÃ*¹ô4¹ô4¹Ð&?¹ŸvN¹{çb¹Ð&?¹1 :¹ü«%¹ü«%¹ i¹Â~¹ï@D¹ŸvN¹ü«%¹? ¹? ¹úS¹Â~¹Ý ú¸)Èå¸Î+¹)È帖mǸÿ#©¸¹é︸Ÿ¸i¯m¸z:³¸[¸Ÿ¸¸Ÿ¸i¯m¸ê¶ ¸Éù÷Á‰·Á‰·%ýi·±iœ·ê¶ ¸«2g7Á‰·±iœ·ê¶ ¸Z›¶â‘Â7ÍÛ•6ÍÛ•6ÍÛ•6ï8NåD8œ>ê7â‘Â7â‘Â7&ùl8 8œ>ê7 8Z›¶ï8õ›7Á‰·ÍÛ•6ÍÛ•6yÃ7yÃ7ï8õ›7 8Bæ08Bæ08œ>ê7ÔëX8yÃ7Z›¶ÍÛ•6Žg£³Žg£³yÃ7yÃ7ÍÛ•6Žg£³%ýi·±iœ·[Á›1¸¸Ÿ¸—းۡY¸Êý”¸Êý”¸¸Ÿ¸z:³¸Á›1¸i¯m¸—းÊý”¸z:³¸–mǸÊý”¸ S½¸ÿ#©¸¸Ÿ¸¸Ÿ¸¸Ÿ¸—း—း—းi¯m¸ S½¸¸Ÿ¸z:³¸i¯m¸ S½¸Êý”¸›E¸ S½¸Û¡Y¸Êý”¸v§ë·ê¶ ¸v§ë·ê¶ ¸Á‰·Éù÷õ›7Z›¶ÍÛ•6Žg£³õ›7Bæ08â‘Â7â‘Â7&ùl8NåD8â‘Â7 8]¢”8NåD8 8ÔëX8 8NåD8]¢”8Bæ08&ùl8ÔëX8“Š8&ùl8ÔëX8œ>ê7ï8[†€8ÈÇ8hȨ8]¢”8Bæ086´ž8&ùl8]¢”8hȨ8ÐÞ²8 8â‘Â7ï8Bæ08NåD8]¢”8ï8œ>ê7NåD8%ýi·Á‰·ÍÛ•6Á‰·Žg£³±iœ·Á‰·Á‰·±iœ·±¤¸i¯m¸¸Ÿ¸Êý”¸i¯m¸Êý”¸z:³¸)Èå¸z:³¸Û¡Y¸[Êý”¸ÿ#©¸ S½¸ S½¸:¨Û¸ŠÑ¸[–mǸi¯m¸Êý”¸—းi¯m¸[—á€¸ê¶ ¸ê¶ ¸›E¸v§ë·i¯m¸Á›1¸Á›1¸Éù÷yÃ7ê¶ ¸Z›¶Z›¶yÃ7«2g7&ùl8ï8ï8œ>ê7«2g7yÃ7yÃ7œ>ê7 8â‘Â7 8[†€8NåD8œ>ê7ÔëX8NåD8ÔëX8N÷¼8N÷¼8m 9³ý9Ûf 9­ê9Á°ù8P9Ò%9P9³ý9m 9³ý9ÈÇ8)lå8¬ï8ÈÇ8KLÛ8N÷¼8ÈÇ8N÷¼8KLÛ8ÈÇ8ÈÇ8ÐÞ²8[†€86´ž8N÷¼8]¢”8&ùl86´ž8Bæ08ï8hȨ8Bæ08&ùl86´ž86´ž8Bæ08NåD8NåD8Bæ08NåD8NåD8â‘Â7Bæ08NåD8&ùl8œ>ê7œ>ê7â‘Â7œ>ê7Žg£³«2g7ï8Bæ08«2g7Žg£³v§ë·v§ë·ÉùÃ·ê¶ ¸Û¡Y¸±¤¸›E¸Éù÷v§ë·v§ë·Žg£³yÃ7%ýi·yÃ7yÃ7œ>ê7â‘Â7õ›7yÃ7ÍÛ•6NåD8[†€8œ>ê7ï8]¢”8õ›7â‘Â7&ùl8“Š8&ùl8ï8ÔëX8hȨ8“Š8hȨ86´ž8NåD8&ùl8NåD8]¢”8]¢”8]¢”8ÔëX8œ>ê7õ›7NåD8«2g7â‘Â7yÃ7œ>ê7yÃ7Á‰·yÃ7«2g7v§ë·Á‰·Z›¶ê¶ ¸ê¶ ¸ÍÛ•6%ýi·ê¶ ¸ê¶ ¸Á›1¸±¤¸±iœ·[ۡY¸i¯m¸±iœ·±iœ·v§ë·v§ë·›E¸›E¸Êý”¸Á›1¸›E¸Û¡Y¸ê¶ ¸¸Ÿ¸Á›1¸Á›1¸±¤¸›E¸›E¸Á›1¸Û¡Y¸›E¸v§ë·i¯m¸Éù÷Éù÷ۡY¸Éù÷›E¸v§ë·Z›¶Á‰·±iœ·%ýi·Á‰·ÍÛ•6ÍÛ•6yÃ7Z›¶œ>ê7õ›7yÃ7ï8&ùl8ÔëX8 8[†€8N÷¼8N÷¼8hȨ8]¢”8ÐÞ²86´ž8ÈÇ8hȨ8N÷¼8“Š8]¢”8ÐÞ²8ÐÞ²8[†€8[†€8]¢”86´ž8ÐÞ²8¬ï8ÈÇ86´ž8)lå8KLÛ8$.Ñ86´ž8­ê9m 9Ò%9­ê9¬ï8¬ï8$.Ñ8N÷¼8N÷¼8“Š8NåD8[†€8«2g7â‘Â7 8ÍÛ•6yÃ7«2g7Žg£³«2g7%ýi·yÃ7Éù÷yÃ7Á‰·Á›1¸Z›¶v§ë·±iœ·Á‰·±iœ·v§ë·ê¶ ¸Á‰·v§ë·ê¶ ¸Û¡Y¸Û¡Y¸Á›1¸›E¸Êý”¸ÿ#©¸¸Ÿ¸z:³¸ S½¸Êý”¸Êý”¸Êý”¸Êý”¸—á€¸ê¶ ¸¸Ÿ¸i¯m¸ê¶ ¸›E¸ê¶ ¸Û¡Y¸ê¶ ¸›E¸±¤¸%ýi·ê¶ ¸ê¶ ¸±¤¸›E¸Û¡Y¸Á›1¸›E¸±¤¸±iœ·Á‰·Á‰·Žg£³%ýi·Á‰·±iœ·Éù÷%ýi·ê¶ ¸%ýi·Á‰·«2g7œ>ê7«2g7 8&ùl8ï8“Š8“Š86´ž8ÐÞ²8ÐÞ²8N÷¼8ÐÞ²8KLÛ8¬ï8$.Ñ8ÈÇ8)lå8)lå8ÈÇ8KLÛ8“Š8&ùl8ÐÞ²8ÔëX8[†€8&ùl8Bæ08ï8]¢”8[†€8ÔëX8]¢”8]¢”8“Š8&ùl8&ùl8ÔëX8“Š8Bæ08&ùl8ï8“Š8«2g7œ>ê7õ›7yÃ7Éù÷±iœ·Žg£³œ>ê7Z›¶yÃ7Žg£³v§ë·%ýi·Éù÷Á‰·±iœ·Êý”¸ê¶ ¸v§ë·Û¡Y¸v§ë·i¯m¸v§ë·±iœ·Á‰·Éù÷Á›1¸Éù÷Á‰·Žg£³Z›¶Z›¶Á‰·ÍÛ•6yÃ7«2g7œ>ê7 8NåD8ï8œ>ê7]¢”8&ùl8[†€8ÈÇ86´ž8ÐÞ²8&ùl8[†€8ÐÞ²8ÈÇ8&ùl8&ùl8Bæ08â‘Â7ï8 8ÔëX8ï8õ›7â‘Â7œ>ê7ï8â‘Â7Bæ08œ>ê7 8&ùl8&ùl8]¢”8ÔëX8â‘Â7œ>ê7œ>ê7Z›¶ÍÛ•6Á‰·±¤¸±¤¸i¯m¸Û¡Y¸Á›1¸i¯m¸—း:¨Û¸ÿ#©¸—းÿ#©¸ S½¸Êý”¸¸Ÿ¸ŠÑ¸:¨Û¸–mǸ:¨Û¸)È帖mǸ–mǸÊý”¸¸Ÿ¸Êý”¸Êý”¸:¨Û¸z:³¸¸Ÿ¸z:³¸Êý”¸Û¡Y¸Êý”¸±¤¸›E¸Û¡Y¸—းÊý”¸i¯m¸±¤¸±¤¸v§ë·Á›1¸ê¶ ¸ê¶ ¸yÃ7yÃ7â‘Â7 8NåD8ÍÛ•6œ>ê7Bæ08NåD8ï8Z›¶ 8ï8 8ï8ï8ÔëX8“Š8[†€8hȨ8&ùl8“Š8NåD8œ>ê7&ùl8NåD8Bæ08NåD8“Š8[†€8&ùl8NåD8&ùl8“Š8NåD8ÔëX8&ùl86´ž8ÈÇ8ÈÇ8ÐÞ²8ÐÞ²8$.Ñ8œ>ê7œ>ê7Bæ08hȨ8“Š8&ùl8[†€8ÔëX8yÃ7Žg£³Á‰·%ýi·ê¶ ¸Éù÷±iœ·Á›1¸±¤¸yÃ7Éù÷±iœ·±¤¸Á›1¸Á›1¸Êý”¸ŠÑ¸¹éï¸z:³¸ÿ#©¸Êý”¸)Èå¸Ý ú¸Ý ú¸z:³¸ÿ#©¸ÿ#©¸¸Ÿ¸ÿ#©¸Êý”¸Êý”¸[—း¸Ÿ¸—း›E¸¸Ÿ¸›E¸i¯m¸Éù÷%ýi·Žg£³±iœ·ê¶ ¸Á‰·Á‰·%ýi·Žg£³Á‰·Z›¶yÃ7yÃ7õ›7õ›7NåD8ï8ï8yÃ7«2g7yÃ7œ>ê7œ>ê7&ùl8ï8â‘Â7&ùl8KLÛ8]¢”8)lå8KLÛ8¬ï8ÈÇ86´ž8KLÛ8)lå8)lå8KLÛ8¬ï8“Š86´ž8]¢”8N÷¼8ÈÇ8]¢”8ÔëX8NåD8ï8ÔëX8NåD8 8œ>ê7ÍÛ•6ÍÛ•6Z›¶Á‰·±iœ·Á›1¸±¤¸v§ë·Êý”¸Êý”¸›E¸ S½¸Û¡Y¸z:³¸¸Ÿ¸›E¸ê¶ ¸ÿ#©¸ S½¸v§ë·z:³¸Êý”¸Êý”¸ S½¸z:³¸ÿ#©¸i¯m¸i¯m¸Êý”¸ÿ#©¸—းÊý”¸¸Ÿ¸ÿ#©¸Û¡Y¸Á›1¸±¤¸±¤¸v§ë·Á›1¸ê¶ ¸›E¸ê¶ ¸v§ë·i¯m¸±¤¸Á›1¸Êý”¸v§ë·v§ë·Á‰·Éù÷ÍÛ•6Z›¶±iœ·Á‰·Z›¶õ›7â‘Â7«2g7 8NåD8yÃ7NåD8[†€8“Š8œ>ê7NåD8]¢”8“Š8[†€8&ùl8[†€8]¢”8ÐÞ²8]¢”8ÐÞ²8¬ï8“Š8KLÛ8ÐÞ²8N÷¼8&ùl8Bæ08ÔëX8ï8ÔëX8&ùl8NåD8ÔëX8ÔëX8œ>ê7œ>ê7Bæ08Bæ08œ>ê7yÃ7Á‰·ê¶ ¸ê¶ ¸v§ë·Éù÷Éù÷ÍÛ•6v§ë·%ýi·±iœ·›E¸›E¸i¯m¸i¯m¸v§ë·¸Ÿ¸z:³¸z:³¸ÿ#©¸ S½¸:¨Û¸¹é︖mǸŠÑ¸)Èå¸Ý ú¸? ¹? ¹Ý ú¸ŠÑ¸ S½¸Î+¹)È帖mǸ S½¸ŠÑ¸ S½¸Êý”¸ S½¸ÿ#©¸ÿ#©¸›E¸›E¸±iœ·Á›1¸ê¶ ¸Û¡Y¸ê¶ ¸Á›1¸v§ë·%ýi·ÍÛ•6%ýi·ÍÛ•6NåD8ÍÛ•6ÍÛ•6«2g7yÃ7«2g7±¤¸Á‰·õ›7â‘Â7 8â‘Â7œ>ê7«2g7ï8&ùl8ï8ÔëX8]¢”8ÔëX8[†€8ÔëX8]¢”8NåD8]¢”8[†€8ÔëX86´ž8ÐÞ²8œ>ê7ï8“Š8œ>ê7œ>ê7ï8Bæ08ÍÛ•6â‘Â7œ>ê7«2g7Bæ08NåD8ï8œ>ê7œ>ê7œ>ê7ÍÛ•6Z›¶v§ë·v§ë·v§ë·Á›1¸v§ë·›E¸±¤¸Êý”¸›E¸ÿ#©¸Êý”¸¸Ÿ¸¸Ÿ¸z:³¸[ÿ#©¸¸Ÿ¸Êý”¸Êý”¸Á›1¸›E¸Êý”¸ S½¸—းi¯m¸Êý”¸ S½¸–mǸ S½¸–mǸ–mǸ—းz:³¸¸Ÿ¸–mÇ¸Ý ú¸ S½¸—း[¸Ÿ¸ÿ#©¸ S½¸—းÊý”¸i¯m¸i¯m¸ê¶ ¸Á›1¸Êý”¸i¯m¸Êý”¸Êý”¸—းÊý”¸±¤¸Á›1¸±¤¸Û¡Y¸Êý”¸i¯m¸±¤¸ê¶ ¸›E¸ê¶ ¸Á‰·Á‰·Á‰·œ>ê7yÃ7Z›¶ÍÛ•6ÍÛ•6 8NåD8Bæ08NåD8ÔëX8NåD8NåD8Bæ08ÐÞ²8ÔëX8œ>ê7œ>ê7“Š8â‘Â7Bæ08[†€8 8Žg£³yÃ7yÃ7Éù÷±iœ·±iœ·%ýi·v§ë·Éù÷Á‰·õ›7Éù÷Á‰·v§ë·ÉùÃ·ê¶ ¸±¤¸±¤¸Û¡Y¸Á›1¸Á›1¸›E¸Û¡Y¸›E¸ê¶ ¸Á›1¸Êý”¸Êý”¸¸Ÿ¸Êý”¸Êý”¸Êý”¸[i¯m¸Éù÷v§ë·±¤¸ê¶ ¸Êý”¸›E¸±iœ·±¤¸—း±¤¸Éù÷v§ë·›E¸Éù÷Á‰·Á›1¸ê¶ ¸›E¸Êý”¸ê¶ ¸Éù÷Éù÷±iœ·Á‰·Á‰·Éù÷[±iœ·Éù÷Žg£³Z›¶«2g7œ>ê7«2g7±iœ·õ›7[†€8NåD8ÔëX8“Š8[†€8]¢”8œ>ê7]¢”86´ž8]¢”8&ùl86´ž8hȨ8ÐÞ²8N÷¼8ÔëX8“Š8hȨ86´ž86´ž8]¢”8[†€8&ùl8ÔëX8œ>ê7œ>ê7NåD8ï8 8ï8õ›7%ýi·Žg£³Z›¶±iœ·œ>ê7«2g7ÍÛ•6Á‰·Á‰·Á‰·Žg£³Éù÷Žg£³%ýi·Éù÷Z›¶Éù÷›E¸%ýi·Éù÷v§ë·v§ë·›E¸[v§ë·±¤¸Á›1¸v§ë·Û¡Y¸›E¸±¤¸—း›E¸Á‰·«2g7Z›¶õ›7 8ÍÛ•6 8 8ï8ï8œ>ê7[†€8“Š8ï8“Š8ÔëX8ï8hȨ8N÷¼8&ùl8Bæ08N÷¼8N÷¼86´ž8ÐÞ²8N÷¼86´ž8$.Ñ8­ê9)lå8¬ï8)lå8hȨ8ÐÞ²8KLÛ8à:9³ý9N÷¼8ÈÇ8$.Ñ8$.Ñ8ÈÇ8Á°ù8]¢”8ÐÞ²8“Š8NåD8N÷¼8“Š8hȨ8ÔëX8]¢”8“Š8ÔëX8ÔëX8œ>ê7&ùl8ï8œ>ê7 8Bæ08 8«2g7ÍÛ•6Z›¶yÃ7Z›¶Á‰·Žg£³«2g7Á‰·ê¶ ¸±iœ·±iœ·ê¶ ¸Û¡Y¸Û¡Y¸ÿ#©¸¸Ÿ¸Á›1¸[Êý”¸—း¸Ÿ¸ê¶ ¸Éù÷Á‰·v§ë·%ýi·«2g7«2g7ï8yÃ7â‘Â7ÍÛ•6Žg£³œ>ê7œ>ê7œ>ê7Bæ08yÃ7NåD8&ùl8&ùl8hȨ86´ž86´ž8)lå8³ý9$.Ñ8$.Ñ8N÷¼8KLÛ8“Š8hȨ8ÐÞ²8hȨ8“Š8ÐÞ²8ÈÇ8hȨ8hȨ8N÷¼86´ž8ÐÞ²8ÐÞ²8$.Ñ8N÷¼8ÈÇ8ÈÇ8[†€8ÐÞ²8]¢”8[†€8hȨ86´ž8&ùl8hȨ86´ž8$.Ñ8ÈÇ8]¢”8]¢”8“Š8œ>ê7 8õ›7õ›7%ýi·Žg£³Á‰·±iœ·Éù÷ÉùÃ·ê¶ ¸ê¶ ¸Û¡Y¸[ۡY¸z:³¸ÿ#©¸ S½¸Ý ú¸ i¹)Èå¸Î+¹? ¹? ¹)Èå¸Ý ú¸:¨Û¸)È帊ѸÊý”¸ S½¸ÿ#©¸ S½¸z:³¸Êý”¸i¯m¸Êý”¸Û¡Y¸z:³¸ S½¸[Êý”¸ÿ#©¸ S½¸¸Ÿ¸i¯m¸ŠÑ¸–mǸz:³¸ÿ#©¸Û¡Y¸–mǸۡY¸›E¸Á›1¸Á›1¸v§ë·Éù÷%ýi·›E¸±iœ·Éù÷±iœ·Á‰·Žg£³±iœ·«2g7yÃ7Á‰·%ýi·«2g7±iœ·«2g7NåD8â‘Â7±iœ·yÃ7â‘Â7ï8Žg£³Žg£³Z›¶Z›¶Á‰·Á‰·«2g7%ýi·Á‰·%ýi·Z›¶±iœ·›E¸ê¶ ¸%ýi·ê¶ ¸i¯m¸Û¡Y¸Û¡Y¸Êý”¸Û¡Y¸›E¸Êý”¸[ÿ#©¸Êý”¸ÿ#©¸Êý”¸–mǸ:¨Û¸Â¹–mǸ¹éï¸ i¹Â¹ i¹• ¹ô4¹ü«%¹• ¹ü«%¹ô4¹Û/¹1 :¹ô4¹• ¹wÃ*¹Û/¹ü«%¹úS¹úS¹? ¹úS¹Â¹Ý ú¸úS¹Â¹úS¹• ¹úS¹Â¹¹éï¸:¨Û¸)Èå¸)Èå¸)È帖mǸ–mǸ–mǸz:³¸—á€¸ê¶ ¸±¤¸«2g7yÃ7Á‰·Éù÷yÃ7Žg£³Z›¶œ>ê7â‘Â7ï8[†€8ï8ï8Bæ08 8“Š86´ž8hȨ8“Š8[†€8NåD8 8[†€8NåD8[†€8NåD8â‘Â7œ>ê7œ>ê7&ùl8[†€8Bæ08ï8&ùl8NåD8ï8NåD8[†€8NåD8õ›7ï8NåD8yÃ7Z›¶Éù÷±¤¸Á‰·ÍÛ•6—းÊý”¸Êý”¸v§ë·ê¶ ¸ê¶ ¸±iœ·Á‰·ê¶ ¸ê¶ ¸±iœ·Žg£³Á‰·±¤¸±iœ·±iœ·±iœ·Û¡Y¸›E¸±¤¸›E¸±¤¸±¤¸i¯m¸Êý”¸Á›1¸›E¸Á›1¸Á›1¸Û¡Y¸v§ë·ê¶ ¸±iœ·—းÁ›1¸Á‰·±iœ·v§ë·%ýi·Žg£³Á‰·Žg£³ 8ÔëX8«2g7õ›7ï8]¢”86´ž8ï8[†€8&ùl8&ùl8 8[†€8Bæ08[†€8ÔëX8ÔëX8“Š8NåD8NåD8&ùl86´ž8NåD8“Š86´ž8ÈÇ8hȨ8[†€8ÐÞ²8“Š8“Š8hȨ8“Š8hȨ8ÐÞ²8“Š8Bæ08NåD8“Š8NåD8N÷¼8ÈÇ8Bæ08]¢”8ÔëX8œ>ê7œ>ê7ÍÛ•6õ›7%ýi·±iœ·Á‰·ê¶ ¸Û¡Y¸›E¸—း—းÊý”¸–mǸz:³¸ S½¸¸Ÿ¸Êý”¸¸Ÿ¸Êý”¸–mǸ[Êý”¸Á›1¸Û¡Y¸ÿ#©¸—းÊý”¸›E¸ê¶ ¸%ýi·ÍÛ•6«2g7ÍÛ•6%ýi·±iœ·Á‰·Z›¶õ›7œ>ê7õ›7ÍÛ•6±iœ·%ýi·Á›1¸ê¶ ¸±iœ·yÃ7Z›¶â‘Â7ï8Bæ08 8 8Bæ08œ>ê7œ>ê7Bæ08ÔëX8NåD8ï8â‘Â7œ>ê7õ›7ï8[†€8Bæ08 8“Š8hȨ8ÔëX8NåD8â‘Â7œ>ê7Bæ08ï8ï8Bæ08ÍÛ•6%ýi·Žg£³±iœ·Éù÷Éù÷±iœ·›E¸Û¡Y¸v§ë·›E¸ê¶ ¸±iœ·Žg£³Žg£³v§ë·ê¶ ¸Á›1¸Á›1¸ê¶ ¸Û¡Y¸Êý”¸ÿ#©¸z:³¸–mÇ¸Ý ú¸¹é︹é︖mǸŠÑ¸:¨Û¸¹éï¸Î+¹)Èå¸Ý ú¸–mǸ¹éï¸)È帹éï¸:¨Û¸)È帖mǸ¸Ÿ¸¸Ÿ¸ S½¸¸Ÿ¸z:³¸ÿ#©¸—းz:³¸ÿ#©¸—း–mǸÿ#©¸ÿ#©¸Êý”¸Û¡Y¸Á›1¸Á›1¸—းi¯m¸Û¡Y¸Û¡Y¸›E¸Éù÷v§ë·±iœ·%ýi·Á‰·yÃ7â‘Â7œ>ê7«2g7œ>ê7NåD8[†€8ï8“Š8[†€8hȨ8$.Ñ8ÈÇ8¬ï8­ê9$.Ñ8­ê9ÐÞ²8[†€8]¢”8KLÛ8KLÛ86´ž8&ùl8NåD8[†€8N÷¼8[†€8[†€8KLÛ86´ž8N÷¼8$.Ñ8]¢”8N÷¼8ÈÇ8hȨ8[†€8NåD8Bæ08[†€8&ùl8&ùl8õ›7NåD8ï8œ>ê7 8&ùl8“Š8ÈÇ8hȨ8ÐÞ²8ÔëX8[†€86´ž8[†€8NåD8ÔëX8ÔëX8“Š8“Š8ÔëX8&ùl8]¢”8ÐÞ²8]¢”8]¢”8ÔëX8Bæ08œ>ê7 8&ùl8 8 8]¢”8[†€86´ž8N÷¼8]¢”8&ùl8hȨ8ÐÞ²8[†€8hȨ8[†€8“Š8“Š8[†€8]¢”8 8[†€8N÷¼8ÐÞ²8³ý9­ê9­ê9P9­ê95•*9m 95•*9:­/95•*95•*9:­/9¾}%95•*9P9P9Ûf 9­ê9m 9)lå8KLÛ8¬ï8­ê9$.Ñ8N÷¼8m 9P9­ê95•*9:­/9P9­ê9)lå8Á°ù8KLÛ8Á°ù8KLÛ8$.Ñ8)lå8hȨ8NåD8NåD8œ>ê7œ>ê7yÃ7œ>ê7%ýi·Žg£³Á‰·Z›¶yÃ7õ›7±iœ·Á‰·±iœ·ê¶ ¸Û¡Y¸—း›E¸›E¸¸Ÿ¸Êý”¸¸Ÿ¸ S½¸Êý”¸–mǸ¹Â~¹:¨Û¸Î+¹)Èå¸Â¹ S½¸)È帹éï¸)È常Ÿ¸ S½¸Êý”¸Êý”¸¸Ÿ¸Êý”¸—းÿ#©¸Êý”¸ÿ#©¸Á›1¸i¯m¸z:³¸Û¡Y¸Éù÷v§ë·Û¡Y¸[ۡY¸[Á›1¸ê¶ ¸±¤¸±iœ·v§ë·ê¶ ¸v§ë·±¤¸Z›¶Éù÷yÃ7ê¶ ¸Z›¶ï8«2g7ÍÛ•6õ›7ÍÛ•6Á‰·â‘Â7yÃ7NåD8ÐÞ²8Bæ08NåD8 8œ>ê7«2g7 8ï8Žg£³ÍÛ•6ÍÛ•6v§ë·±iœ·Z›¶v§ë·›E¸±iœ·Á›1¸Êý”¸Êý”¸Êý”¸i¯m¸—း[¸Ÿ¸–mǸۡY¸¸Ÿ¸ S½¸ÿ#©¸[Êý”¸z:³¸? ¹Ý ú¸úS¹ i¹Â~¹Î+¹)Èå¸ÿ#©¸:¨Û¸z:³¸z:³¸z:³¸Û¡Y¸—း S½¸—းz:³¸ S½¸—း—းi¯m¸Á›1¸v§ë·ÍÛ•6v§ë·ê¶ ¸±iœ·%ýi·v§ë·%ýi·ï8œ>ê7NåD8ï8[†€8]¢”8N÷¼8N÷¼8ÈÇ8)lå8KLÛ8Á°ù8Ûf 9ÉÅ49à:9à:9à:9Ûf 9P9Ò%9¬ï8¬ï8Á°ù8KLÛ8ÈÇ8KLÛ8ÈÇ8$.Ñ8ÈÇ8]¢”8“Š86´ž8[†€8ï8ÔëX8 8NåD8 8Žg£³Bæ08«2g7ÍÛ•6yÃ7Á‰·Á‰·±iœ·Žg£³Á›1¸%ýi·Û¡Y¸Êý”¸¸Ÿ¸Û¡Y¸—းi¯m¸i¯m¸Êý”¸i¯m¸i¯m¸ÿ#©¸—း›E¸—းÊý”¸ÿ#©¸:¨Û¸¸Ÿ¸¸Ÿ¸:¨Û¸ŠÑ¸ S½¸ÿ#©¸z:³¸ÿ#©¸Êý”¸ŠÑ¸ÿ#©¸ S½¸ÿ#©¸Û¡Y¸—း–mǸ S½¸ÿ#©¸[[ۡY¸Êý”¸i¯m¸›E¸ê¶ ¸Éù÷õ›7%ýi·yÃ7«2g7NåD8“Š86´ž8hȨ8“Š86´ž8]¢”8ÈÇ8hȨ8ÈÇ8KLÛ8m 9$.Ñ8hȨ8ÈÇ8ÐÞ²8ÐÞ²8­ê9Ûf 9m 9¬ï8³ý9Ò%9­ê9¬ï8­ê9­ê9­ê9ÈÇ8ÐÞ²8ÔëX8[†€8$.Ñ8N÷¼8$.Ñ8NåD8NåD8ÔëX8 8yÃ7â‘Â7%ýi·Á‰·yÃ7ÉùÃ·ê¶ ¸v§ë·ÍÛ•6Á›1¸Û¡Y¸Á›1¸Êý”¸Á›1¸ê¶ ¸›E¸z:³¸[v§ë·–mǸ—းÁ›1¸—းz:³¸)Èå¸ÿ#©¸–mǸz:³¸z:³¸ÿ#©¸z:³¸Êý”¸ŠÑ¸Êý”¸–mǸ¸Ÿ¸:¨Û¸¹é︊Ѹ¸Ÿ¸—းÿ#©¸¸Ÿ¸i¯m¸±¤¸±¤¸Á›1¸%ýi·v§ë·ê¶ ¸%ýi·yÃ7õ›7õ›7ÍÛ•6ÍÛ•6Z›¶Á‰·â‘Â7yÃ7õ›7Žg£³±iœ·NåD8œ>ê7õ›7 8 8â‘Â7â‘Â7â‘Â7ÔëX8ÔëX8hȨ8N÷¼8[†€8KLÛ8ÐÞ²8&ùl8[†€8ï8&ùl8ï8ÐÞ²8hȨ86´ž8&ùl8ÐÞ²8NåD8]¢”8&ùl8ï8õ›7«2g7Z›¶ÍÛ•6Á‰·%ýi·â‘Â7«2g7Z›¶±iœ·Éù÷ÍÛ•6Éù÷v§ë·±iœ·yÃ7â‘Â7NåD8œ>ê7 8]¢”8“Š8 8â‘Â7õ›7Á‰·ÍÛ•6%ýi·yÃ7%ýi·±iœ·â‘Â7±iœ·ÍÛ•6yÃ7ï8Žg£³«2g7&ùl8œ>ê7â‘Â7yÃ7%ýi·Žg£³yÃ7Bæ08ï8Bæ08œ>ê7õ›7â‘Â7 8ï8 8«2g7«2g7NåD8hȨ8NåD8ÔëX8“Š8Bæ086´ž8N÷¼8$.Ñ8$.Ñ8ÈÇ8$.Ñ8$.Ñ8­ê9P9Á°ù8m 9­ê9m 9,-I9¾}%9¾}%9ÉÅ49³ý95•*9­ê9)lå8¬ï8­ê9à:9¾}%9Ò%9¾}%9m 9¬ï8­ê9Á°ù8N÷¼8hȨ8KLÛ8­ê9m 9ÈÇ8ÈÇ8ÈÇ8hȨ8“Š8ï8 8yÃ7yÃ7Á‰·ê¶ ¸±¤¸%ýi·ê¶ ¸%ýi·v§ë·ê¶ ¸Á›1¸¸Ÿ¸—းۡY¸¹éï¸Ý ú¸)Èå¸)È帊Ѹÿ#©¸|Pd|1|24600|2013-282T15:32:29.397 ñ\׸z?͸‚¹'|á¸×#ømò®¸ñ\׸‘Éš¸×#ø +ë¸×#ø +¹¸­¸¸­¸¸Þܤ¸­¸¸mò®¸­¸¸×#ø +¹¸^,e¸ +¹¸Þܤ¸mò®¸×#øÞܤ¸z?͸×#ømò®¸mò®¸‘Éš¸ +¹¸‘=y¸¹.¸û!)¸­¸¸‘Éš¸ê=¸û!)¸ê=¸ê=¸‘Éš¸‘=y¸¹.¸BE¸Ëª‹·"ÎÚ·¹.¸"ÎÚ·N,³·û!)¸BE¸Â·×6Œôô5¹.¸¹.¸BE¸^,e¸­¸¸‘=y¸BE¸ž!Q¸Þܤ¸ê=¸‘Éš¸^,e¸­¸¸Þܤ¸û!)¸Þܤ¸­¸¸ +¹¸ +븄¿õ¸ñ\׸ñ\׸×#øñ\׸×#ø×#ø'|á¸Þܤ¸×#ø„¿õ¸ñ\׸ +¹¸‡ãÿ¸'|ḇãÿ¸‚¹'|á¸z?͸z?͸z?͸×#ømò®¸‘Éš¸­¸¸ê=¸­¸¸BE¸¹.¸‘=y¸^,e¸‘=y¸ž!Q¸û!)¸‘=y¸7Ñô¶N,³·"Îڷ˪‹·Ëª‹·Ëª‹·7Ñô¶Œôô5·×6TM„7g%8TM„7g%8¤É„80ma8ùxÕ8@Á8@Á8¤É„8Àú¢8da989}u8@Á8@Á89}u84'·8É99}u80ma8g%8¤É„80ma8da98³cM8g%8ïÇ«70ma8da98˪‹·7Ñô¶þ¿3¶Ëü97Œôô5þ¿3¶BE¸7Ñô¶Œôô57Ñô¶BE¸7Ñô¶¹.¸BE¸BE¸N,³·û!)¸¹.¸¹.¸‘=y¸ž!Q¸BE¸‘=y¸¹.¸BE¸"ÎÚ·^,e¸ž!Q¸¹.¸^,e¸¹.¸N,³·P¥H·ê=¸Œôô5BE¸N,³·P¥H·Ëª‹·BE¸Œôô5˪‹·N,³·ïÇ«7BE¸^,e¸P¥H·g%8Œôô5Œôô5|u8·×6Ëü97TM„7=dÓ7TM„7P¥H·ïÇ«7ïÇ«7Ëü977Ñô¶Ëü97da98³cM8û7Ëü97û7³cM8w׎8@Á8¤É„8äç˜8@Á8ùxÕ8ùxÕ8æ­8¤É„8Ö[Ë8% 9@Á8@Á8æ­8æ­8É9æ­8äç˜8æ­8Ý—ß8Ö[Ë8É9Ö[Ë8w׎8Ö[Ë8¤É„8Àú¢8w׎8³cM8g%8³cM8û7³cM8ïÇ«7û7Ëü97Ëü97N,³·BE¸BE¸¹.¸ž!Q¸­¸¸Zª†¸ž!Q¸ê=¸‘Éš¸­¸¸¹.¸ê=¸û!)¸N,³·­¸¸ê=¸BE¸^,e¸¹.¸N,³·û!)¸Ëª‹·ê=¸ê=¸û!)¸­¸¸­¸¸‘=y¸‘Éš¸­¸¸Þܤ¸û!)¸"ÎÚ·"ÎÚ·^,e¸"ÎÚ·N,³·7Ñô¶þ¿3¶7Ñô¶BE¸û!)¸7Ñô¶Ëª‹·Ëü97g%8·×6Ëü97TM„7û7da98w׎8û7g%8³cM89}u8w׎8w׎80ma8æ­84'·8äç˜8æ­8Àú¢8æ­8@Á8o¸é8äç˜8g%8¤É„8³cM8³cM8Àú¢8äç˜89}u8g%8|u8|u80ma8g%8·×6þ¿3¶TM„7BE¸BE¸û!)¸BE¸Ëª‹·"ÎÚ·þ¿3¶N,³·Ëª‹·P¥H·P¥H·N,³·P¥H·BE¸P¥H·"ÎÚ·N,³·û!)¸"Îڷ˪‹·ê=¸ê=¸BE¸û!)¸BE¸û!)¸BE¸7Ñô¶ê=¸Ëª‹·N,³·BE¸ž!Q¸N,³·û!)¸ê=¸"Îڷ˪‹·BE¸BE¸N,³·Ëª‹·TM„7ïÇ«7da98g%8û7ïÇ«7|u8Ëü97Ëü97Ëü97Ëü97=dÓ7þ¿3¶7Ñô¶da98g%8³cM8|u89}u8ïÇ«7g%8Ëü97Ëü97TM„7Ëü97³cM8äç˜84'·84'·8o¸é8É9Ý—ß8Ö[Ë8æ­8äç˜8äç˜8Ö[Ë8æ­8@Á8w׎8äç˜8æ­8Ö[Ë80ma89}u8äç˜8äç˜8Àú¢8¤É„8¤É„89}u8äç˜8³cM8¤É„8¤É„8ïÇ«7|u8û7Ëü97û7|u8P¥H·Œôô5ïÇ«7Ëü97Ëü97þ¿3¶7Ñô¶BE¸BE¸ê=¸ž!Q¸Þܤ¸ñ\׸ +¹¸×#ø×#øö +¹z?͸×#øz?͸'|á¸ñ\׸z?͸mò®¸'|á¸z?͸„¿õ¸ +븇ãÿ¸×#øz?͸×#ø‡ãÿ¸‚¹z?͸ +븄¿õ¸ +ë¸×#ø‘Éš¸ +¹¸×#øÞܤ¸Þܤ¸­¸¸¹.¸­¸¸ž!Q¸¹.¸û!)¸û!)¸û!)¸Ëü97Ëü97=dÓ7=dÓ7Ëü97da98Àú¢8w׎8w׎8w׎8æ­8ùxÕ8Ý—ß8ùxÕ8Ý—ß8Ö[Ë8ùxÕ8É9Ö[Ë8@Á8Ý—ß8Ö[Ë8Ö[Ë8@Á8@Á8äç˜8äç˜8Ö[Ë8æ­8¤É„8Ö[Ë84'·8æ­8@Á8¤É„8¤É„8g%8³cM8w׎89}u8w׎8ùxÕ89}u8|u8û7da98û7þ¿3¶TM„7=dÓ7Œôô5N,³·BE¸ž!Q¸­¸¸‘=y¸û!)¸ž!Q¸^,e¸^,e¸­¸¸ž!Q¸­¸¸Þܤ¸×#ø×#ø‘Éš¸‘Éš¸‘Éš¸ñ\׸ +¹¸z?͸‡ãÿ¸ +븇ãÿ¸ö +¹‡ãÿ¸„¿õ¸mò®¸z?͸z?͸ +¹¸‘Éš¸^,e¸^,e¸­¸¸û!)¸Zª†¸Þܤ¸­¸¸ê=¸ž!Q¸û!)¸¹.¸ž!Q¸N,³·BE¸û!)¸ê=¸ê=¸ê=¸ž!Q¸Ëü97P¥H·Ëª‹·Ëü97·×6·×67Ñô¶Â·×6·×6Ëü97P¥H·Ëª‹·û!)¸û!)¸BE¸BE¸ž!Q¸BE¸û!)¸"ÎÚ·­¸¸Zª†¸N,³·ž!Q¸"ÎÚ·ž!Q¸‘Éš¸Þܤ¸‘Éš¸z?͸^,e¸Þܤ¸ñ\׸ +¹¸ +¹¸×#ømò®¸ +¹¸ñ\׸'|á¸'|á¸z?͸„¿õ¸z?͸×#ø'|á¸z?͸×#ømò®¸‘Éš¸×#ø×#øñ\׸„¿õ¸z?͸mò®¸Þܤ¸mò®¸ +¹¸‘Éš¸z?͸­¸¸‘Éš¸mò®¸ž!Q¸ž!Q¸û!)¸­¸¸ê=¸ê=¸P¥H·"ÎÚ·¹.¸Þܤ¸‘Éš¸Zª†¸­¸¸ê=¸ê=¸"ÎÚ·"ÎÚ·û!)¸N,³·¹.¸¹.¸TM„7|u87Ñô¶Ëü97TM„7û7=dÓ7g%8³cM8|u8g%8¤É„8äç˜8äç˜8Àú¢8Ö[Ë8äç˜89}u8|u8³cM8da98äç˜8¤É„8|u8äç˜89}u8¤É„8¤É„8|u8|u8ïÇ«7û7·×6¹.¸Ëü97Œôô5·×67Ñô¶Œôô5da98=dÓ7|u8Œôô5·×6Œôô5Ëü977Ñô¶7Ñô¶BE¸P¥H·û!)¸^,e¸¹.¸¹.¸BE¸^,e¸z?͸ž!Q¸mò®¸ê=¸ +¹¸‘=y¸‘=y¸­¸¸ž!Q¸‘=y¸^,e¸‘Éš¸ê=¸­¸¸^,e¸^,e¸‘=y¸­¸¸‘Éš¸ž!Q¸ž!Q¸^,e¸û!)¸­¸¸‘=y¸^,e¸Þܤ¸­¸¸û!)¸7Ñô¶7Ñô¶7Ñô¶ê=¸^,e¸ž!Q¸"ÎÚ·û!)¸Ëü97TM„7Ëü979}u8|u89}u89}u8w׎8³cM8|u8w׎8äç˜8æ­8o¸é8ùxÕ8É9Ý—ß8É9æ­8äç˜8Ý—ß8Ö[Ë8@Á8äç˜8Àú¢8Àú¢8³cM89}u8äç˜80ma8da98da98¤É„8|u80ma8|u80ma8¤É„8³cM8da98=dÓ7Ëü97þ¿3¶"ÎÚ·ê=¸^,e¸Ëª‹·Ëü97TM„7˪‹·û!)¸BE¸ê=¸­¸¸‘=y¸‘=y¸×#ø‘Éš¸Zª†¸­¸¸ê=¸‘=y¸BE¸¹.¸‘=y¸ž!Q¸Zª†¸­¸¸ñ\׸z?͸z?͸z?͸z?͸ñ\׸mò®¸^,e¸ž!Q¸mò®¸‘=y¸Þܤ¸^,e¸­¸¸ž!Q¸^,e¸­¸¸"ÎÚ·ê=¸BE¸ž!Q¸^,e¸ž!Q¸N,³·¹.¸P¥H·Ëª‹·Ëü97Ëü977Ñô¶7Ñô¶Ëü97Ëü97Ëü97·×6û7ïÇ«7da98g%8³cM8da98|u8ïÇ«7da98=dÓ7³cM8äç˜89}u8³cM8@Á8Àú¢8³cM84'·8äç˜8|u89}u8w׎8w׎8³cM80ma8|u8³cM8=dÓ7þ¿3¶TM„7P¥H·"ÎÚ·¹.¸‘=y¸"ÎÚ·ž!Q¸­¸¸­¸¸ž!Q¸­¸¸û!)¸Zª†¸ž!Q¸‘=y¸­¸¸û!)¸ž!Q¸Zª†¸N,³·BE¸"ÎÚ·7Ñô¶BE¸7Ñô¶N,³·û!)¸û!)¸‘=y¸‘=y¸­¸¸­¸¸ê=¸û!)¸^,e¸^,e¸ž!Q¸N,³·"ÎÚ·N,³·Ëª‹·Â·×6Ëü97TM„7g%8|u89}u89}u8³cM8da98³cM8äç˜8äç˜8æ­8Àú¢8@Á8w׎8æ­8o¸é8ŸÚó8ŸÚó8æ­8@Á8Ö[Ë8æ­8w׎8äç˜8|u8Àú¢8¤É„8äç˜8w׎8¤É„8³cM89}u80ma80ma8äç˜8Àú¢8Ö[Ë8@Á8Ý—ß84'·8Ý—ß8Ý—ß8äç˜8ùxÕ8Zþý8æ­8äç˜8¤É„89}u8û7g%8ïÇ«7Ëü97=dÓ7TM„7|u8TM„77Ñô¶Â·×6g%8·×6þ¿3¶BE¸7Ñô¶Ëª‹·­¸¸ê=¸mò®¸mò®¸­¸¸mò®¸Zª†¸ +¹¸­¸¸‘Éš¸­¸¸­¸¸­¸¸^,e¸mò®¸ +¹¸^,e¸ž!Q¸ê=¸‘Éš¸‘=y¸¹.¸ê=¸¹.¸ž!Q¸Zª†¸N,³·ž!Q¸BE¸‘=y¸‘=y¸"ÎÚ·û!)¸"ÎÚ·"ÎÚ·ê=¸¹.¸Ëª‹·P¥H·Â·×6P¥H·ïÇ«7da98da98g%8û79}u89}u8da989}u8û7g%8=dÓ7Ëü97|u8TM„7û7P¥H·7Ñô¶7Ñô¶þ¿3¶7Ñô¶TM„7þ¿3¶7Ñô¶Â·×6Œôô5=dÓ7Ëü97Œôô5Ëü97Ëü97þ¿3¶þ¿3¶Â·×6"ÎÚ·"ÎÚ·"ÎÚ·¹.¸BE¸BE¸^,e¸ž!Q¸ê=¸"ÎÚ·¹.¸"ÎÚ·ž!Q¸ž!Q¸BE¸Zª†¸^,e¸"ÎÚ·ê=¸ž!Q¸‘=y¸^,e¸‘Éš¸û!)¸mò®¸z?͸'|á¸'|á¸Þܤ¸mò®¸ +¹¸ê=¸­¸¸mò®¸û!)¸ê=¸­¸¸ž!Q¸¹.¸"ÎÚ·­¸¸‘Éš¸^,e¸‘=y¸BE¸^,e¸ê=¸Ëª‹·"ÎÚ·¹.¸P¥H·¹.¸ê=¸"ÎÚ·¹.¸Ëª‹·Ëª‹·BE¸"Îڷ˪‹·N,³·P¥H·û!)¸Ëü977Ñô¶P¥H·ïÇ«7=dÓ7·×6TM„7da98da98äç˜8äç˜8Àú¢8|u8w׎8¤É„8¤É„80ma8w׎8äç˜8w׎8¤É„8æ­8w׎8æ­8w׎8³cM80ma8|u8w׎8g%8Àú¢8w׎8³cM89}u8¤É„89}u89}u8g%8g%8Ëü97TM„7TM„7æ­8¤É„8=dÓ7=dÓ7Ëü97·×6=dÓ7Ëü97ïÇ«7=dÓ7·×6ïÇ«7=dÓ7Œôô5P¥H·N,³·"ÎÚ·P¥H·Œôô5N,³·N,³·7Ñô¶N,³·"ÎÚ·BE¸7Ñô¶BE¸N,³·û!)¸BE¸û!)¸BE¸BE¸¹.¸Ëª‹·Ëü97Œôô5ïÇ«7TM„79}u80ma8ïÇ«7äç˜89}u89}u89}u8Ö[Ë80ma80ma8Àú¢8äç˜8¤É„8Àú¢8Ö[Ë84'·8Ý—ß8É9@Á8ùxÕ8Ý—ß8ùxÕ8Zþý8 99~ï69Ÿ"A9ýrP9ï„7>„7\UÓ7”¹‹·ÀÂH·\UÓ7¬ õ¶¹«7i}×6¬ õ¶<34¶i}×6¹«7<34¶i}×6\UÓ7¬ õ¶>„7$;³·dß97¬ õ¶¬ õ¶¬ õ¶…_%8¬ õ¶ÀÂH· û7dß97ÝÚ·ÝÚ·Vô5ÀÂH·”¹‹·i}×6¬ õ¶Vô5i}×6\UÓ7i}×6\UÓ7n8…_%8«ea8i}×6dß97äY98²ÓŽ8Ã<Á8Ã<Á8 XË8 XË8ÒÖó8¤´é8 XË8¤´é8ÒÖó8ÒÖó8-uÕ8 XË8ä˜8ùö¢8k#·8ùö¢8k#·8ÒÖó8Œúý8”ß8ÒÖó8¤´é8879â9Ã<Á8 ­8k#·8 XË8 ­8Ã<Á8¤´é8k#·8k#·8-uÕ8°uu8äY982\M8dß97i}×6n8 û7>„7n8i}×6äY98 û7dß97i}×6dß972\M8ÀÂH·>„7¹«7<34¶y))¸¸L¸¸L¸ )Q¸ )Q¸¥à¤¸XÍš¸Ey¸s¼¸¸L¸26¸26¸$;³· )Q¸¸L¸¸L¸j%=¸”¹‹·¸L¸$;³·ÀÂH·<34¶y))¸¸L¸j%=¸y))¸Vô5”¹‹·¸L¸ã3e¸ )Q¸$;³·ÝÚ·dß97ÀÂH·ÝÚ·¬ õ¶Vô5i}×6dß97Vô5>„7dß9726¸ û7¹«7äY98<34¶dß97Vô5 û7…_%8¹«7«ea82\M8 ­8ä˜8àÅ„8k#·8Ã<Á8 XË8 ­8ùö¢8ä˜8ä˜8àÅ„8àÅ„8°uu8ä˜8°uu8äY98àÅ„8 û72\M8n8«ea8>„7¹«7<34¶>„7dß97¹«7>„7¹«7<34¶<34¶ÀÂH·”¹‹·¸L¸$;³·¸L¸$;³·j%=¸ )Q¸j%=¸ã3e¸”¹‹·®†¸j%=¸y))¸s¼¸XÍš¸5ö®¸s¼¸s¼¸®†¸s¼¸XÍš¸¥à¤¸¡'øXÍš¸½`׸ )Q¸XÍš¸¡'øs¼¸5ö®¸Ey¸¥à¤¸XÍš¸ã3e¸®†¸¡'øs¼¸ã3e¸s¼¸s¼¸y))¸¸L¸26¸ÝÚ·Vô5Vô5”¹‹·”¹‹·$;³·”¹‹·¬ õ¶ÀÂH·i}×6n8äY98n82\M8ùö¢8«ea8\UÓ7°uu8àÅ„82\M8«ea8ä˜8\UÓ7¹«7>„7dß97Vô5>„7”¹‹·¹«7>„7\UÓ7i}×6dß97dß97i}×6¸L¸ )Q¸$;³·y))¸ã3e¸26¸y))¸Ey¸ã3e¸¡'øs¼¸y))¸Ey¸s¼¸j%=¸®†¸5ö®¸½`׸¡'øEC͸s¼¸è ¹¸s¼¸5ö®¸Õ ë¸õá¸RÃõ¸Vçÿ¸è ¹¸¡'øõḽ`׸XÍš¸EC͸¡'ø¥à¤¸è ¹¸õḽ`×¸è ¹¸¥à¤¸ã3e¸y))¸j%=¸s¼¸s¼¸ )Q¸y))¸y))¸ÝÚ·ÝÚ·j%=¸ã3e¸ÀÂH·”¹‹·$;³·¬ õ¶>„7Vô5>„7…_%82\M8n8°uu8¹«7>„7<34¶i}×6>„7>„7\UÓ7ùö¢8ä˜8n8äY982\M8ä˜82\M8…_%82\M8²ÓŽ8ä˜8 ­8ä˜8°uu8°uu8°uu8 û7äY98 û7\UÓ7äY98i}×6¹«7Vô5¹«7>„7¹«7dß97”¹‹·<34¶ÝÚ·¸L¸y))¸$;³·j%=¸s¼¸5ö®¸ã3e¸ )Q¸j%=¸ã3e¸y))¸XÍš¸ã3e¸s¼¸s¼¸¥à¤¸XÍš¸s¼¸Ey¸Ey¸ )Q¸XÍš¸s¼¸ )Q¸26¸¸L¸26¸26¸¸L¸s¼¸ã3e¸ )Q¸®†¸¸L¸y))¸j%=¸26¸s¼¸ )Q¸26¸ã3e¸s¼¸ã3e¸ã3e¸ÝÚ· )Q¸y))¸ÝÚ·$;³·26¸ÝÚ·dß97>„7¹«7>„7¹«7…_%8 û7äY98²ÓŽ82\M8²ÓŽ82\M8«ea8°uu8«ea8 ­8°uu8«ea8äY98²ÓŽ82\M8«ea8àÅ„8Ã<Á8ä˜8ä˜8äY98n8²ÓŽ8¹«7 û72\M8¹«7dß97¬ õ¶dß97Vô5>„7dß97¬ õ¶j%=¸$;³·ÝÚ·¸L¸”¹‹·j%=¸ã3e¸y))¸®†¸®†¸¸L¸ )Q¸y))¸j%=¸26¸ã3e¸¥à¤¸ã3e¸ã3e¸ÝÚ·$;³·”¹‹·¬ õ¶j%=¸26¸ )Q¸ )Q¸y))¸¬ õ¶<34¶¬ õ¶”¹‹·”¹‹·Vô5Vô5¬ õ¶26¸¸L¸¸L¸ÝÚ·¸L¸$;³·”¹‹·i}×6dß97i}×6i}×6i}×6¬ õ¶¸L¸¸L¸i}×6\UÓ7<34¶<34¶>„7<34¶¬ õ¶\UÓ7 û7°uu8«ea8°uu8k#·8k#·8 ­8ä˜8k#·8-uÕ8k#·8ùö¢8 ­8ùö¢8ä˜8ä˜8ä˜8²ÓŽ8äY98¹«7dß97Vô5¬ õ¶dß97Vô5ÀÂH·ÝÚ·ÀÂH·¬ õ¶$;³·y))¸¸L¸Ey¸ÝÚ· )Q¸ã3e¸y))¸ã3e¸j%=¸ )Q¸ã3e¸ )Q¸ )Q¸j%=¸26¸s¼¸ã3e¸26¸ÝÚ·ÝÚ·y))¸¸L¸ )Q¸¸L¸y))¸s¼¸$;³·y))¸ )Q¸s¼¸è ¹¸5ö®¸¥à¤¸è ¹¸5ö®¸XÍš¸¥à¤¸EC͸ՠë¸5ö®¸s¼¸s¼¸j%=¸Ey¸XÍš¸EC͸s¼¸ã3e¸ )Q¸ã3e¸ã3e¸¸L¸®†¸$;³·$;³·ÝÚ·$;³·ÝÚ·ÝÚ·<34¶<34¶”¹‹·ÀÂH·ÝÚ·”¹‹·¸L¸ÀÂH·<34¶¬ õ¶¬ õ¶n8¹«7 û7<34¶¹«7¹«7¹«7”¹‹·Vô5”¹‹·¸L¸”¹‹·26¸$;³·$;³·ÝÚ·<34¶ÀÂH·$;³·<34¶ÀÂH·”¹‹·$;³·$;³·5ö®¸ã3e¸ÀÂH·$;³·¸L¸ÝÚ·26¸$;³·¸L¸ )Q¸¸L¸ )Q¸¸L¸XÍš¸ã3e¸j%=¸ )Q¸j%=¸s¼¸ÝÚ·26¸ÀÂH·ÝÚ·y))¸ )Q¸y))¸ã3e¸y))¸ )Q¸j%=¸ÀÂH·26¸ )Q¸j%=¸¸L¸¸L¸ÝÚ·26¸”¹‹·<34¶26¸¸L¸ )Q¸¸L¸”¹‹·ÝÚ·ÝÚ·$;³·¬ õ¶>„7>„7n8n8 û7dß97dß972\M8…_%8…_%8²ÓŽ82\M8n8«ea8n8…_%8²ÓŽ8k#·8Ã<Á8â9ÒÖó8-uÕ8”ß8 ­8-uÕ8”ß8æK9879¤´é85# 9Œúý8â9ÒÖó8k#·8¤´é8¤´é8ÒÖó8â9ÒÖó8Ã<Á8”ß8Ã<Á8ùö¢8ÒÖó8Œúý8ÒÖó8ÒÖó8”ß8-uÕ8Ã<Á8¤´é8Ã<Á8-uÕ8-uÕ8 XË8«ea8äY98i}×6äY98¹«7¹«7>„7\UÓ7i}×6ÀÂH·<34¶dß97i}×6<34¶Vô5¬ õ¶Vô5\UÓ7<34¶n8>„7<34¶dß97Vô5n8ÀÂH·i}×6dß97>„7dß97¬ õ¶$;³·¬ õ¶i}×6<34¶i}×6<34¶dß97Vô5¹«7dß97¹«7äY98°uu8\UÓ7n8i}×6<34¶dß97¬ õ¶>„7n8Vô5Vô526¸i}×6¹«7>„7i}×6>„7dß97”¹‹·<34¶Vô5<34¶dß97i}×6>„7<34¶$;³·\UÓ7dß97…_%8¹«7i}×6>„7dß97 û7dß97Vô5Vô5n8ÀÂH·Vô5i}×6”¹‹·26¸$;³·ÀÂH·dß97\UÓ7j%=¸”¹‹·26¸$;³·¸L¸y))¸¸L¸y))¸ )Q¸Ey¸26¸26¸26¸26¸$;³·Vô5i}×6$;³·$;³·$;³·y))¸¬ õ¶ÀÂH·ÝÚ·¸L¸ã3e¸ã3e¸XÍš¸¥à¤¸j%=¸y))¸ )Q¸ÝÚ·y))¸ )Q¸26¸ÀÂH·ÀÂH·ÀÂH·¬ õ¶ÝÚ·ÝÚ·dß97>„7…_%8äY98\UÓ7>„7\UÓ7¹«72\M8 ­8«ea8ä˜8äY98 û7\UÓ7¹«7…_%8n8…_%8äY98àÅ„8n8 û7n8i}×6¹«7 û7\UÓ7<34¶dß97 û7\UÓ7n8Vô5¬ õ¶i}×6 û7>„7äY98n8ä˜8n8\UÓ7…_%8äY98 û7…_%8¹«7\UÓ7>„7dß97¬ õ¶i}×6<34¶26¸ )Q¸$;³·y))¸s¼¸j%=¸ )Q¸$;³·26¸ )Q¸j%=¸XÍš¸Ey¸y))¸¸L¸j%=¸”¹‹·Vô5ÀÂH·ÀÂH·ÝÚ·$;³·¬ õ¶”¹‹·¸L¸¸L¸¸L¸¸L¸j%=¸¸L¸ÝÚ·j%=¸Ey¸y))¸”¹‹·¸L¸”¹‹·ÝÚ·y))¸¸L¸ã3e¸26¸ )Q¸j%=¸¬ õ¶i}×6i}×6dß97dß97i}×6Vô5 û7 û7¹«7…_%8i}×6<34¶>„7…_%8«ea8 û7àÅ„8…_%8äY98ùö¢8àÅ„82\M8²ÓŽ8…_%8dß97äY98äY98…_%8äY98\UÓ7äY98 û7 û7n8n8 û7 û7²ÓŽ8ùö¢82\M8¹«7\UÓ7>„72\M8dß97¬ õ¶Vô5¹«7dß97<34¶”¹‹·ÝÚ·¸L¸ã3e¸j%=¸j%=¸ )Q¸5ö®¸õá¸.¹õá¸õá¸Õ ë¸è ¹¸¡'ø5ö®¸õá¸Vçÿ¸Õ ë¸Õ ë¸Õ ë¸½`׸½`׸½`׸RÃõ¸EC͸¡'ø®†¸ÝÚ·26¸ã3e¸ )Q¸s¼¸Ey¸è ¹¸XÍš¸j%=¸ã3e¸ã3e¸ÝÚ·ÀÂH·dß9726¸Vô5\UÓ7…_%8dß97n8\UÓ7¹«7\UÓ72\M82\M8«ea82\M8àÅ„8²ÓŽ8 ­82\M8ùö¢8Ã<Á8ä˜8àÅ„8ä˜8Ã<Á8-uÕ8k#·8°uu8«ea8àÅ„8ùö¢8ä˜8ùö¢8k#·8k#·8 ­8 ­8²ÓŽ8àÅ„8²ÓŽ8k#·8Ã<Á8äY982\M8°uu8àÅ„8«ea8°uu8\UÓ7\UÓ7\UÓ7äY98«ea8dß97ÀÂH·$;³·”¹‹·¬ õ¶ÝÚ·¸L¸j%=¸y))¸¸L¸s¼¸XÍš¸Ey¸¡'øõá¸õḽ`׸5ö®¸5ö®¸Vçÿ¸5ö®¸è ¹¸5ö®¸XÍš¸è ¹¸¥à¤¸j%=¸s¼¸ )Q¸ã3e¸s¼¸s¼¸y))¸ÝÚ·s¼¸®†¸¸L¸”¹‹·ÀÂH·”¹‹·26¸Vô5$;³·<34¶$;³·¸L¸$;³·>„7¹«7dß97dß97°uu8°uu8äY98ùö¢8äY982\M8 ­8”ß88a9·"9·"98a98798798a9æK9â98798a9â9æK98a9ÒÖó88a95# 9¤´é8Œúý8879¤´é85# 9879Ã<Á8Ã<Á8 ­8ä˜8ä˜8 ­8”ß8ùö¢8ä˜8«ea8°uu8äY98àÅ„8¹«7Vô5…_%8i}×6¸L¸>„7$;³·Vô5ÀÂH·ÝÚ·¹«7$;³·¬ õ¶”¹‹·26¸ )Q¸ã3e¸ÝÚ·Ey¸$;³·ã3e¸¸L¸y))¸y))¸ã3e¸j%=¸ã3e¸ )Q¸s¼¸ )Q¸s¼¸y))¸¸L¸¸L¸$;³·¸L¸ÝÚ·<34¶ÀÂH·y))¸ÝÚ·26¸y))¸26¸26¸ÝÚ·ÝÚ·$;³·”¹‹·$;³·”¹‹·”¹‹·Vô5”¹‹·y))¸”¹‹·y))¸¸L¸”¹‹·$;³·ÀÂH·ÝÚ·i}×6>„7Vô5…_%8äY98¹«7 û7n8>„7”¹‹·$;³·Vô5¹«7 û7¹«7¬ õ¶Vô5¬ õ¶dß97”¹‹·”¹‹·¬ õ¶>„7ÀÂH·j%=¸ã3e¸26¸s¼¸Ey¸ )Q¸ )Q¸ÝÚ·”¹‹·$;³·¸L¸ÝÚ·Ey¸ã3e¸XÍš¸Ey¸s¼¸s¼¸s¼¸s¼¸ )Q¸ )Q¸y))¸¥à¤¸s¼¸õá¸õá¸Ey¸ )Q¸s¼¸XÍš¸¥à¤¸XÍš¸ÝÚ·ã3e¸ã3e¸y))¸ÀÂH·$;³·<34¶¹«7i}×6dß97¹«7äY98°uu8<34¶<34¶n8<34¶\UÓ7¹«7\UÓ7¬ õ¶¬ õ¶i}×6>„7 û7°uu8²ÓŽ8«ea8-uÕ8”ß8-uÕ85# 9â9Œúý8â9¤´é8ÒÖó8ؤ'9*w9æK9ÌÔ198a95# 9ؤ'9ÏUK9‹¼,9æK9*w9æK98a9879Œúý88a95# 9æK9879k#·8 ­8-uÕ8”ß8Ã<Á8k#·8…_%8 û7äY98«ea82\M8 û72\M8…_%8Vô5>„7i}×6¸L¸i}×6i}×6¬ õ¶$;³·¬ õ¶¸L¸”¹‹·j%=¸¸L¸j%=¸Ey¸ã3e¸y))¸y))¸¸L¸ÝÚ·26¸ÝÚ·y))¸¸L¸ÝÚ·ÝÚ·26¸”¹‹·¸L¸$;³·$;³·$;³·dß97\UÓ7dß97dß97¹«7\UÓ7n82\M82\M82\M8 û7n8>„7>„7«ea8ùö¢8ùö¢8”ß8²ÓŽ8 ­8-uÕ8 XË8¤´é8Œúý8”ß8â98a9*w9879879â9â9â9”ß8 XË8ÒÖó8ÒÖó8ÒÖó8¤´é8”ß8¤´é8879Œúý85# 9Œúý8Œúý8Œúý8ÒÖó8k#·8ùö¢8 ­8àÅ„8àÅ„8àÅ„8ùö¢82\M8«ea8«ea8>„7>„7<34¶ÝÚ·$;³·26¸ÝÚ·y))¸26¸ÝÚ·26¸ÀÂH·26¸$;³·ÝÚ·j%=¸ã3e¸26¸ )Q¸XÍš¸¥à¤¸5ö®¸¥à¤¸¥à¤¸®†¸è ¹¸s¼¸j%=¸ã3e¸26¸s¼¸XÍš¸ã3e¸s¼¸XÍš¸XÍš¸½`׸¡'øs¼¸s¼¸¸L¸y))¸¸L¸¸L¸26¸26¸y))¸26¸”¹‹·ÀÂH·ÝÚ·¸L¸ÝÚ·i}×6\UÓ7¹«7¹«7°uu8ùö¢8°uu8ä˜8²ÓŽ8Ã<Á8ùö¢8 XË8Ã<Á8ùö¢8”ß8Ã<Á8Ã<Á8 XË8-uÕ8k#·8 XË8 XË8Œúý8¤´é8 ­8 XË8ä˜8²ÓŽ8Ã<Á8 ­8k#·8ùö¢8ä˜8ùö¢8«ea82\M82\M8äY98ùö¢8àÅ„82\M8«ea8¹«7 û7i}×6<34¶i}×6¸L¸$;³·$;³·s¼¸XÍš¸s¼¸ã3e¸s¼¸XÍš¸5ö®¸½`׸¡'øõḥसõá¸RÃõ¸Vçÿ¸7œ(¹.¹õá¸AX¹RÃõ¸õá¸Þ +¹½`׸s¼¸½`׸¥à¤¸s¼¸s¼¸ã3e¸¸L¸ÀÂH·<34¶$;³·Vô5 û7i}×6i}×6ÀÂH·n8\UÓ7n8\UÓ7°uu8n8…_%8°uu8ùö¢8²ÓŽ8²ÓŽ8…_%8äY98«ea8²ÓŽ8k#·8Ã<Á8¤´é8Œúý8Ã<Á8Œúý8Œúý8 XË8 XË8 XË8k#·8-uÕ8-uÕ8k#·8ÒÖó8¤´é8ÒÖó8¤´é8-uÕ8”ß8¤´é8ÒÖó8â9879â9Ã<Á8879¤´é8 XË8”ß8k#·8Ã<Á8Ã<Á8àÅ„8°uu8àÅ„8ä˜8\UÓ7\UÓ7…_%8\UÓ7…_%82\M8…_%8dß97>„7\UÓ7…_%8…_%8äY98n82\M8>„7>„7äY98\UÓ7\UÓ7äY98 û7«ea8n8 û7n8¹«7n8 û7n8n8«ea8¹«7n8àÅ„8…_%8°uu82\M8 û7 ­8ä˜8ä˜8”ß8 ­8-uÕ8ÒÖó8ÒÖó8ä˜8àÅ„8Ã<Á8Ã<Á8¤´é8Œúý8ÒÖó8”ß8â9â9879â9*w9Œúý85# 9â9ÒÖó8ÒÖó8Ã<Á8879”ß8-uÕ8ùö¢8 XË8 ­8¤´é8 ­8ùö¢8ùö¢8-uÕ8Ã<Á8 XË8Ã<Á8ä˜8…_%82\M82\M8…_%8\UÓ7<34¶>„7<34¶¬ õ¶…_%8dß97dß97\UÓ7 û7…_%8n8«ea8°uu8 û7¹«7dß97ÀÂH·$;³· )Q¸¸L¸¸L¸j%=¸y))¸ )Q¸ )Q¸s¼¸ )Q¸ã3e¸26¸y))¸EC͸ECÍ¸è ¹¸¥à¤¸ã3e¸j%=¸®†¸Ey¸26¸Ey¸5ö®¸XÍš¸j%=¸26¸ÝÚ·$;³·¸L¸”¹‹·ÝÚ·26¸Vô5ÝÚ·ÝÚ·ÝÚ·ÝÚ·”¹‹·”¹‹·$;³·¬ õ¶ÝÚ·ÀÂH·$;³·$;³·”¹‹·$;³·¬ õ¶$;³·ÀÂH·j%=¸ÝÚ·dß97i}×6Vô5<34¶ÝÚ·<34¶$;³·¹«7dß97\UÓ7\UÓ7<34¶y))¸”¹‹·dß97¬ õ¶Vô5<34¶¸L¸$;³·¸L¸ÝÚ· )Q¸ÝÚ·y))¸j%=¸s¼¸Ey¸XÍš¸s¼¸s¼¸è ¹¸®†¸¡'øs¼¸5ö®¸½`׸j%=¸è ¹¸XÍš¸s¼¸ )Q¸ã3e¸j%=¸Vô5ÀÂH·¸L¸j%=¸j%=¸26¸j%=¸y))¸¸L¸Ey¸¡'øs¼¸5ö®¸ECÍ¸è ¹¸õḥस¡'øs¼¸s¼¸s¼¸y))¸y))¸ã3e¸ã3e¸ÝÚ·¸L¸ÀÂH·y))¸Vô5>„7Vô5Vô5¹«7¹«7i}×6dß97¹«7 û7¹«7\UÓ7n8äY98\UÓ7äY98°uu8ä˜8ùö¢8Ã<Á8ä˜8ä˜8ùö¢8ùö¢8ùö¢8ä˜8²ÓŽ8äY98äY98…_%8n8 û7ÀÂH·Vô5dß97 )Q¸26¸”¹‹·¬ õ¶¸L¸¸L¸$;³·”¹‹·y))¸5ö®¸ã3e¸¥à¤¸RÃõ¸è ¹¸®†¸ECÍ¸è ¹¸¡'øs¼¸Þ +¹EC͸EC͸¡'øEC͸Vçÿ¸.¹ù„#¹Vçÿ¸AX¹RÃõ¸Vçÿ¸RÃõ¸ÐB¹ÐB¹.¹RÃõ¸Þ +¹EC͸½`׸õḥस5ö®¸5ö®¸¡'øi¹ÐB¹RÃõ¸RÃõ¸õá¸Vçÿ¸XÍš¸ )Q¸XÍš¸j%=¸ã3e¸s¼¸$;³·$;³·ÀÂH·26¸26¸ )Q¸j%=¸26¸ÀÂH·”¹‹·26¸<34¶ÀÂH·$;³·i}×6”¹‹·i}×6Vô5Vô5ÝÚ·¸L¸ÀÂH·$;³·¬ õ¶Vô5dß97¬ õ¶26¸”¹‹·<34¶dß97>„7<34¶ÀÂH·Vô5$;³·ÀÂH·i}×6i}×6ÀÂH·ÀÂH·ÀÂH·dß97¬ õ¶ÝÚ·¸L¸j%=¸j%=¸j%=¸Ey¸XÍš¸j%=¸ÀÂH·¸L¸ã3e¸Ey¸¸L¸ÝÚ·26¸¥à¤¸s¼¸5ö®¸s¼¸¡'Ã¸è ¹¸s¼¸ã3e¸è ¹¸½`׸EC͸¡'ø¡'Ã¸è ¹¸¡'Ã¸è ¹¸½`׸½`׸EC͸5ö®¸®†¸EC͸s¼¸s¼¸è ¹¸s¼¸¥à¤¸ )Q¸ )Q¸26¸$;³·$;³·¸L¸ÝÚ·¸L¸¸L¸<34¶”¹‹·$;³·ÝÚ·j%=¸$;³·¸L¸y))¸¸L¸j%=¸26¸>„7<34¶”¹‹·dß97Vô5ÀÂH· û7dß97n8 û7Vô5 û7¬ õ¶ÀÂH·¹«72\M8äY98äY98i}×6¬ õ¶<34¶ÝÚ· )Q¸ÀÂH·i}×6y))¸ã3e¸Ey¸26¸s¼¸s¼¸ã3e¸ )Q¸s¼¸5ö®¸5ö®¸s¼¸½`׸RÃõ¸EC͸EC͸EC͸õḽ`׸¥à¤¸Õ ë¸¡'øՠ븽`׸õá¸RÃõ¸XÍš¸®†¸¥à¤¸EC͸½`׸XÍš¸¡'øÐB¹Õ ë¸½`׸½`׸RÃõ¸Þ +¹.¹Õ ë¸¡'øõá¸s¼¸½`׸½`׸EC͸EC͸¡'ø5ö®¸XÍš¸Ey¸ã3e¸j%=¸s¼¸¸L¸ÝÚ·j%=¸26¸ÀÂH·¸L¸”¹‹·ÀÂH·dß97n8ÀÂH·àÅ„8…_%8 û7 û7>„7àÅ„8k#·8ä˜8²ÓŽ8ùö¢8n82\M8°uu8…_%82\M82\M8ä˜8Ã<Á8äY98²ÓŽ8>„7>„7…_%8ä˜8àÅ„8…_%8«ea8°uu8…_%8dß97\UÓ7dß97n8i}×6n82\M8°uu8\UÓ7dß97i}×6n8n8Vô5¹«7¬ õ¶Vô5¹«7\UÓ7”¹‹·ÀÂH·j%=¸®†¸ )Q¸ã3e¸y))¸¥à¤¸¥à¤¸s¼¸RÃõ¸ECÍ¸è ¹¸õá¸i¹Cå7¹`Ì2¹´-¹ÐB¹`Ì2¹ù„#¹RÃõ¸RÃõ¸i¹ÐB¹Pn¹`Ì2¹`Ì2¹AX¹ÐB¹EC͸½`×¸è ¹¸è ¹¸EC͸¡'ø5ö®¸¥à¤¸ )Q¸ã3e¸è ¹¸¥à¤¸XÍš¸®†¸26¸26¸ÀÂH·ÀÂH·ÝÚ·i}×6$;³·”¹‹·ÀÂH·ÝÚ·<34¶i}×6¬ õ¶¬ õ¶<34¶dß97ÀÂH·¬ õ¶¬ õ¶<34¶¹«7 û72\M8°uu8°uu8àÅ„8ùö¢8k#·82\M8…_%8k#·8…_%8n8°uu8²ÓŽ8äY98«ea8àÅ„8…_%8²ÓŽ8°uu8«ea8«ea8n8>„7<34¶2\M82\M8\UÓ7äY98°uu8°uu8n8…_%8¹«7dß97dß97¹«7>„7>„7Vô5<34¶y))¸y))¸¸L¸ÝÚ·ÝÚ·¥à¤¸Ey¸ã3e¸s¼¸s¼¸26¸j%=¸26¸ÝÚ·¸L¸y))¸ )Q¸$;³·<34¶Vô5¹«7¹«72\M8\UÓ7…_%8n82\M8\UÓ7 û7«ea8àÅ„8äY98\UÓ7²ÓŽ8²ÓŽ8 û7 û7°uu8«ea8°uu8…_%8àÅ„8 ­8 XË8-uÕ8ä˜8ä˜8Œúý8”ß8¤´é8”ß8æK9879879â9ÒÖó8ÒÖó8¤´é8æK9 ­8k#·8 ­8²ÓŽ8 XË8«ea8ùö¢8«ea82\M8 û7n82\M82\M8\UÓ7n8n8¹«7¹«7 û7äY98i}×6dß97¹«7”¹‹·dß97¸L¸Ey¸5ö®¸¥à¤¸è ¹¸s¼¸ã3e¸ )Q¸ã3e¸j%=¸s¼¸s¼¸ã3e¸ )Q¸¸L¸Ey¸y))¸s¼¸¸L¸j%=¸Ey¸5ö®¸XÍš¸è ¹¸è ¹¸s¼¸¥à¤¸s¼¸j%=¸ )Q¸¸L¸26¸¸L¸26¸$;³·$;³·ÝÚ· )Q¸ÝÚ·dß97”¹‹·ÀÂH·”¹‹·¹«7\UÓ7äY98n8…_%82\M8ùö¢8²ÓŽ8äY98ùö¢8 ­8 XË8Œúý8 XË8Ã<Á8Œúý8k#·8¤´é8Ã<Á8°uu8ùö¢8ùö¢8²ÓŽ8àÅ„8ùö¢8k#·8àÅ„8 XË8”ß8Œúý8 ­8Ã<Á8Ã<Á8ä˜8k#·8 ­8k#·8 ­8n8…_%8…_%82\M8…_%8äY98 û7n8°uu8n8«ea8\UÓ7 û7…_%8Vô5n8>„7Vô5<34¶>„7n8¬ õ¶>„7äY98 û7¹«7dß97<34¶¬ õ¶”¹‹·<34¶dß97¬ õ¶dß97>„7ÀÂH·Vô5<34¶\UÓ7Vô5dß97n8 û72\M82\M8…_%8…_%82\M82\M8«ea8\UÓ7äY98dß97äY98äY98 û7>„7…_%8>„7Vô5\UÓ7>„7¹«7Vô5 û7i}×6¹«7…_%8…_%8äY98…_%8 û7°uu8àÅ„8ùö¢8…_%8ùö¢82\M8ùö¢8«ea8…_%8n8äY98\UÓ7…_%8i}×6¹«7<34¶¹«7i}×6 )Q¸Ey¸”¹‹·ã3e¸XÍš¸XÍš¸è ¹¸è ¹¸EC͸RÃõ¸Õ ë¸Vçÿ¸Þ +¹Pn¹Pn¹ù„#¹ÐB¹ù„#¹AX¹7œ(¹7œ(¹´-¹AX¹Pn¹Þ +¹Vçÿ¸Pn¹Þ +¹RÃõ¸XÍš¸5ö®¸®†¸XÍš¸ )Q¸RÃõ¸s¼¸¥à¤¸¥à¤¸EC͸¡'øXÍš¸s¼¸ã3e¸XÍš¸XÍš¸26¸j%=¸$;³·¸L¸ã3e¸¸L¸y))¸¸L¸ÝÚ·y))¸26¸j%=¸j%=¸”¹‹·y))¸ÝÚ·ÀÂH·Vô5äY98äY98i}×6\UÓ7¹«7¹«7¹«7dß97\UÓ7dß97i}×6>„7>„7i}×6\UÓ7¹«7\UÓ7\UÓ7dß97«ea8ä˜8Ã<Á8äY98n8 û7n82\M8«ea8>„7 û7¬ õ¶¬ õ¶¬ õ¶”¹‹·”¹‹·ÀÂH·¬ õ¶¬ õ¶”¹‹·i}×626¸26¸”¹‹·j%=¸s¼¸s¼¸s¼¸ã3e¸®†¸XÍš¸5ö®¸s¼¸5ö®¸5ö®¸¡'ø5ö®¸ã3e¸Ey¸5ö®¸¡'øXÍš¸è ¹¸¡'øEy¸Ey¸½`׸¡'øs¼¸½`׸õḽ`׸XÍš¸½`׸ECÍ¸è ¹¸s¼¸Ey¸s¼¸¥à¤¸5ö®¸s¼¸ )Q¸”¹‹·Vô5ÝÚ·ÀÂH·ÀÂH·”¹‹·¬ õ¶n8…_%8>„7dß97 û7¹«7i}×62\M82\M8àÅ„8ä˜82\M8²ÓŽ8Ã<Á8Œúý8”ß8Ã<Á8”ß8²ÓŽ8¤´é8k#·8ùö¢8”ß8k#·8k#·8²ÓŽ8k#·8²ÓŽ8ä˜8k#·82\M82\M8k#·8ä˜82\M8²ÓŽ82\M82\M8äY98àÅ„8\UÓ7¹«7\UÓ7Vô5>„7<34¶<34¶”¹‹·>„7>„7i}×6i}×6”¹‹·¹«7$;³·ÀÂH·<34¶i}×6<34¶<34¶¬ õ¶”¹‹·Vô5¬ õ¶dß97i}×6¬ õ¶26¸ÝÚ·dß97¹«7äY98n8dß97¹«7àÅ„8äY98…_%8n8…_%8«ea8àÅ„82\M82\M8ùö¢8²ÓŽ8Ã<Á8k#·8â9-uÕ8 XË8ÒÖó8Ã<Á8-uÕ8ÒÖó85# 9·"9ؤ'9æK9ؤ'9•í69·"9·"98a9879æK9·"9*w9·"98a98a95# 95# 9879æK98798a9Œúý8 ­8¤´é8-uÕ85# 9Œúý8 XË8â9Œúý8ùö¢8«ea8k#·8ùö¢8”ß8 XË8Ã<Á8Ã<Á8k#·8ä˜8°uu8àÅ„8 û7¹«7…_%8äY98¹«7$;³·i}×6¬ õ¶¸L¸ÝÚ·¸L¸<34¶¸L¸26¸ÝÚ·”¹‹·s¼¸y))¸y))¸ã3e¸j%=¸¥à¤¸EC͸i¹Þ +¹Õ ë¸õḡ'ø5ö®¸Ey¸è ¹¸Ey¸5ö®¸5ö®¸XÍš¸½`×¸è ¹¸EC͸¥à¤¸XÍš¸s¼¸Ey¸”¹‹·ÝÚ·<34¶”¹‹·$;³·<34¶”¹‹·Vô5ÀÂH·26¸\UÓ7 û7n8äY98 û7…_%8°uu82\M8²ÓŽ8²ÓŽ82\M8°uu8°uu82\M8äY982\M8…_%8äY98àÅ„8n8\UÓ7n8…_%8…_%8 û7n8>„7i}×6dß97dß97 û7dß97Vô5Vô5i}×6dß97\UÓ7>„7”¹‹·¸L¸$;³·y))¸ÀÂH·ÝÚ·y))¸y))¸y))¸26¸ÝÚ·j%=¸ã3e¸26¸ã3e¸¥à¤¸5ö®¸Ey¸ã3e¸j%=¸ã3e¸s¼¸j%=¸s¼¸5ö®¸XÍš¸Ey¸õá¸EC͸5ö®¸è ¹¸¥à¤¸EC͸½`׸õá¸EC͸5ö®¸y))¸j%=¸26¸ÝÚ·¸L¸ÝÚ·”¹‹·>„7¹«7<34¶¹«7>„7¹«7dß97…_%8 û7<34¶dß97äY98äY98…_%8n8«ea8 XË8ä˜8Ã<Á85# 9 XË8Ã<Á8²ÓŽ8²ÓŽ8ùö¢8 û72\M8²ÓŽ8n8 û7\UÓ7…_%8äY98°uu8«ea8…_%8\UÓ7\UÓ7>„7dß97i}×6 û72\M8äY98«ea8\UÓ7\UÓ7¹«7i}×6dß97<34¶”¹‹·n8Vô5<34¶¬ õ¶ û72\M82\M8n8>„7i}×6¬ õ¶dß97dß97¬ õ¶¬ õ¶ÝÚ·ÝÚ·ÝÚ·ã3e¸®†¸ã3e¸¥à¤¸XÍš¸s¼¸j%=¸s¼¸j%=¸y))¸¥à¤¸s¼¸”¹‹·”¹‹·”¹‹·26¸<34¶i}×6ÀÂH·>„7 û7¹«7Vô5n8 û7…_%8dß97äY98¹«7 û7äY98…_%8 û7°uu8k#·8 ­8 XË8ä˜8²ÓŽ8²ÓŽ8-uÕ8ùö¢8°uu8k#·8ùö¢8k#·8ùö¢8ÒÖó8-uÕ8k#·8Œúý8°uu8Ã<Á8”ß8 XË8¤´é8 XË8ä˜8ùö¢8àÅ„8àÅ„8 XË8Ã<Á8°uu8äY98 û72\M8àÅ„8…_%82\M8äY98>„7¬ õ¶¬ õ¶¸L¸¸L¸ã3e¸ã3e¸ã3e¸26¸s¼¸Ey¸ÝÚ·j%=¸ã3e¸¸L¸s¼¸ )Q¸j%=¸¥à¤¸XÍš¸¥à¤¸XÍš¸®†¸¸L¸ )Q¸s¼¸s¼¸ )Q¸Ey¸s¼¸j%=¸y))¸ÝÚ·y))¸y))¸®†¸y))¸ã3e¸ )Q¸y))¸Ey¸s¼¸¥à¤¸XÍš¸Ey¸Ey¸XÍš¸ã3e¸ÝÚ·y))¸26¸ÝÚ·26¸¬ õ¶\UÓ7>„7¹«7¹«7i}×6äY98…_%8>„7…_%8äY98 û7n8…_%8°uu8ä˜82\M8\UÓ7n8n8¹«7i}×6Vô5Vô5>„7<34¶>„7<34¶>„7\UÓ7>„7n82\M8äY98¹«7 û72\M8 û7dß97¹«7Vô5¸L¸dß97i}×6”¹‹·¬ õ¶”¹‹·i}×6ÀÂH·ÝÚ·¬ õ¶ã3e¸y))¸s¼¸ã3e¸26¸ÝÚ·XÍš¸j%=¸26¸y))¸26¸26¸®†¸j%=¸$;³·s¼¸s¼¸ )Q¸j%=¸y))¸ÀÂH·¸L¸Ey¸¸L¸y))¸j%=¸$;³·i}×6j%=¸”¹‹·”¹‹·y))¸j%=¸¬ õ¶<34¶¸L¸<34¶¬ õ¶”¹‹·Vô5\UÓ7n8n8äY98äY98°uu8n8«ea8…_%8dß97¹«7…_%8äY98…_%8²ÓŽ8ä˜8àÅ„8²ÓŽ8 ­8-uÕ8-uÕ8k#·8k#·85# 9Ã<Á8k#·85# 95# 9879Œúý8*w95# 9¤´é8â9”ß8-uÕ8 XË8²ÓŽ8ä˜8àÅ„8 XË8 XË8àÅ„8 ­8àÅ„8\UÓ7¬ õ¶i}×6>„7i}×6\UÓ7>„7”¹‹·¬ õ¶y))¸$;³· )Q¸ã3e¸i}×6y))¸ã3e¸¸L¸Ey¸XÍš¸¥à¤¸5ö®¸®†¸¡'øEC͸XÍš¸¥à¤¸Ey¸j%=¸¸L¸ã3e¸XÍš¸ )Q¸ã3e¸¸L¸¸L¸¸L¸¸L¸s¼¸s¼¸Ey¸ã3e¸26¸¸L¸¸L¸Vô5ÝÚ·¸L¸<34¶>„7\UÓ7>„7 û72\M8…_%8dß97 û7«ea8…_%8°uu8k#·8²ÓŽ8k#·8ä˜8k#·8¤´é8¤´é8Œúý8¤´é85# 9879ÒÖó8Œúý8879â9Œúý88a9ÒÖó8â9k#·8 ­8 ­8«ea8àÅ„8 ­8…_%8n8«ea8²ÓŽ8 û7\UÓ7…_%8¹«7¹«7dß97dß97 û7n8¹«7<34¶ÝÚ·”¹‹·26¸y))¸26¸y))¸$;³·®†¸j%=¸ÝÚ·XÍš¸ã3e¸ã3e¸j%=¸ã3e¸5ö®¸5ö®¸½`׸RÃõ¸Pn¹½`׸RÃõ¸Pn¹RÃõ¸½`׸5ö®¸¡'ø¡'øEC͸¡'ø®†¸Vçÿ¸¡'ø¥à¤¸¥à¤¸s¼¸s¼¸ )Q¸ã3e¸¸L¸Ey¸ã3e¸j%=¸ã3e¸26¸dß97$;³·ÀÂH·”¹‹·Vô5ÀÂH·dß97\UÓ7°uu8ä˜8äY98k#·8²ÓŽ8 XË8Ã<Á8k#·8Œúý8 ­8°uu8¤´é8-uÕ8-uÕ8-uÕ8ùö¢8Ã<Á8-uÕ8ÒÖó8k#·8ä˜8àÅ„8äY98«ea8«ea8…_%8\UÓ7\UÓ7«ea8¹«72\M8i}×6>„7i}×6<34¶i}×6Vô5¹«7ÀÂH·”¹‹·i}×6Vô5Vô5<34¶¸L¸y))¸ )Q¸s¼¸Ey¸Ey¸XÍš¸®†¸s¼¸ã3e¸¡'øRÃõ¸½`׸EC͸EC͸õá¸EC͸y))¸EC͸¥à¤¸j%=¸5ö®¸ã3e¸5ö®¸Ey¸ÝÚ·XÍš¸Ey¸ÝÚ·26¸¸L¸”¹‹·¸L¸”¹‹·”¹‹·dß97dß97dß97¹«7dß97<34¶\UÓ7\UÓ7 û7>„7\UÓ7i}×6>„7>„7i}×6 û7i}×6\UÓ7 û7>„7²ÓŽ8ä˜8²ÓŽ8²ÓŽ8ùö¢8ùö¢8 ­8”ß8ÒÖó8k#·8°uu8àÅ„8ä˜8àÅ„8àÅ„8ä˜8°uu8 û7>„7n8<34¶Vô5¹«7>„7<34¶Vô5¬ õ¶ÝÚ·¸L¸<34¶>„7¬ õ¶¬ õ¶¬ õ¶Vô5¬ õ¶¸L¸$;³·Vô5\UÓ7¸L¸dß97ÀÂH·”¹‹·j%=¸s¼¸XÍš¸ )Q¸5ö®¸s¼¸EC͸s¼¸Ey¸Ey¸ã3e¸5ö®¸s¼¸®†¸XÍš¸j%=¸¸L¸¥à¤¸5ö®¸j%=¸¥à¤¸ã3e¸$;³·”¹‹· )Q¸ )Q¸$;³·¹«7”¹‹·$;³·”¹‹· û7>„7”¹‹·¬ õ¶<34¶Vô5 û7dß97>„7¬ õ¶dß97…_%8\UÓ7¹«7 û7<34¶ÝÚ·i}×6\UÓ7<34¶ û7 û72\M8k#·8°uu82\M8n8«ea82\M8äY98àÅ„8n8«ea8ä˜82\M8äY98\UÓ7¹«7…_%8dß97\UÓ7\UÓ7i}×6dß97Vô5ÀÂH·ÀÂH·>„7ÝÚ·i}×6n8>„7i}×6¹«7dß97ÝÚ·26¸ )Q¸ÝÚ·j%=¸Ey¸ )Q¸Ey¸¡'øEC͸¡'ø¥à¤¸s¼¸s¼¸s¼¸¥à¤¸½`׸½`׸5ö®¸s¼¸EC͸XÍš¸®†¸ã3e¸26¸¸L¸y))¸ )Q¸Ey¸Ey¸XÍš¸5ö®¸¸L¸ )Q¸s¼¸y))¸ÝÚ·j%=¸ÝÚ·”¹‹·<34¶$;³·j%=¸”¹‹·$;³·ÀÂH·Vô5¬ õ¶Vô5 û7«ea8°uu8¹«7\UÓ7n8-uÕ8ä˜8«ea8°uu8 ­8²ÓŽ8«ea8«ea8ä˜8Ã<Á8k#·8 XË8-uÕ8Ã<Á8ä˜8k#·8²ÓŽ8«ea8«ea8²ÓŽ8ä˜8ä˜8«ea8«ea8àÅ„8àÅ„8àÅ„8äY98\UÓ7 û7dß97\UÓ7\UÓ7¹«7Vô5¬ õ¶¬ õ¶ÝÚ·¸L¸$;³·¸L¸y))¸ã3e¸ )Q¸ã3e¸XÍš¸XÍš¸s¼¸s¼¸26¸ÝÚ·26¸ÝÚ·j%=¸26¸¸L¸ÝÚ·$;³·¸L¸ÀÂH·Vô5$;³·\UÓ7¬ õ¶¬ õ¶Vô5Vô5$;³·<34¶Vô5i}×6>„7<34¶ÀÂH·dß97Vô5\UÓ7¹«7n8\UÓ7ÀÂH·i}×6dß97i}×6dß97 û7¬ õ¶dß97¹«7…_%8°uu8…_%8àÅ„8ä˜8ä˜82\M8äY98ä˜8«ea8ä˜8ä˜8°uu8°uu8«ea8äY98àÅ„8…_%82\M8ä˜8Ã<Á8ùö¢8ä˜82\M8ä˜8ùö¢8 ­8¤´é8Ã<Á8 ­8°uu8ä˜8 ­8ùö¢8«ea8n8…_%8\UÓ7²ÓŽ8àÅ„8…_%8…_%8¬ õ¶ û7>„7ÀÂH·¹«7dß97<34¶ÝÚ·<34¶ÀÂH·ÝÚ·”¹‹·y))¸ )Q¸ÝÚ· )Q¸j%=¸j%=¸y))¸Ey¸è ¹¸¡'øXÍš¸½`׸ã3e¸¥à¤¸s¼¸¡'ø®†¸j%=¸s¼¸¸L¸$;³·¸L¸ÝÚ·”¹‹·¬ õ¶$;³·dß97Vô5>„7n8¬ õ¶Vô5\UÓ7¹«7…_%8²ÓŽ8…_%8…_%8\UÓ7<34¶¹«7äY98n82\M8²ÓŽ8°uu8ùö¢8àÅ„8-uÕ8²ÓŽ8ä˜8ùö¢8àÅ„8 XË8 ­8”ß8¤´é8 XË8ä˜8 XË8-uÕ8¤´é8-uÕ8 XË8”ß8 ­8”ß8¤´é8-uÕ8ùö¢8²ÓŽ8Ã<Á8k#·8k#·8 XË8 ­8Ã<Á8ä˜8…_%8n8n8dß97 û7²ÓŽ8àÅ„8°uu8«ea8²ÓŽ8²ÓŽ8äY98<34¶\UÓ7…_%8dß97Vô5<34¶i}×6j%=¸<34¶¸L¸¸L¸”¹‹·y))¸ÀÂH·ÀÂH·$;³·¬ õ¶ÀÂH·ÝÚ·Vô5i}×6”¹‹·¸L¸ÝÚ·ÀÂH·ÝÚ·ã3e¸¸L¸>„7dß97n8\UÓ7>„7Vô5 û7\UÓ7 û7n8äY982\M8k#·8²ÓŽ8ùö¢8ä˜8 XË8k#·8ä˜8°uu8 XË8-uÕ8¤´é8¤´é8ÒÖó8Œúý8â9·"9ÌÔ19ä<9*w9879*w9ÌÔ19*w95# 9Ã<Á8k#·8ÒÖó8”ß8k#·8 ­8k#·8 XË8ùö¢85# 9-uÕ8²ÓŽ8«ea8äY98ä˜8°uu8äY98n8\UÓ7«ea8¹«7<34¶i}×6>„7ÀÂH·Vô5¸L¸ÝÚ·”¹‹·¬ õ¶$;³·¬ õ¶¸L¸<34¶”¹‹·<34¶ã3e¸ÝÚ·<34¶5ö®¸26¸s¼¸ )Q¸y))¸s¼¸XÍš¸s¼¸ã3e¸ã3e¸¡'ø5ö®¸s¼¸ )Q¸ã3e¸ã3e¸$;³·”¹‹·ã3e¸¸L¸ÝÚ·s¼¸¸L¸26¸¥à¤¸¥à¤¸s¼¸26¸¸L¸$;³·26¸26¸ )Q¸>„7dß97 û7n8 û7n8 û7…_%8¹«7\UÓ7¹«7¬ õ¶Vô5Vô5<34¶<34¶i}×6i}×6<34¶<34¶ÀÂH·ÀÂH·¬ õ¶$;³·$;³·26¸26¸ )Q¸j%=¸ )Q¸s¼¸26¸ã3e¸j%=¸ )Q¸¡'øs¼¸s¼¸EC͸EC͸½`׸õá¸EC͸ՠë¸5ö®¸s¼¸¥à¤¸5ö®¸¥à¤¸õá¸s¼¸¥à¤¸è ¹¸®†¸è ¹¸¡'øEy¸5ö®¸s¼¸s¼¸s¼¸5ö®¸XÍš¸®†¸¥à¤¸ã3e¸¸L¸26¸$;³·26¸¸L¸ÀÂH·y))¸¸L¸ )Q¸y))¸ÝÚ·ã3e¸26¸¸L¸ )Q¸s¼¸¸L¸<34¶y))¸26¸”¹‹·ÝÚ·$;³·>„7\UÓ7äY98äY98¹«72\M8…_%8 û7 û7äY98«ea8àÅ„8äY98²ÓŽ8…_%8n8«ea8…_%8 û72\M8n8\UÓ7\UÓ7\UÓ7äY98 û7¹«72\M8¹«7…_%82\M82\M8>„7¹«7>„7Vô5¸L¸26¸<34¶y))¸y))¸ã3e¸¡'øEy¸y))¸è ¹¸XÍš¸s¼¸5ö®¸i¹Vçÿ¸Vçÿ¸ù„#¹Õ ë¸EC͸EC͸.¹Vçÿ¸RÃõ¸RÃõ¸RÃõ¸Vçÿ¸ù„#¹Þ +¹i¹Þ +¹AX¹Þ +¹AX¹RÃõ¸.¹RÃõ¸.¹AX¹AX¹RÃõ¸ÐB¹.¹û2G¹7œ(¹7œ(¹RÃõ¸Þ +¹Vçÿ¸s¼¸¡'ø½`׸½`׸ÐB¹i¹Õ ë¸¡'Ã¸è ¹¸Vçÿ¸¡'øXÍš¸¥à¤¸¥à¤¸®†¸XÍš¸®†¸XÍš¸Ey¸y))¸s¼¸ÝÚ· )Q¸ÝÚ·¬ õ¶ÝÚ·ÝÚ·ÝÚ·dß97$;³·26¸<34¶>„7Vô5dß97”¹‹·¸L¸26¸”¹‹·Vô5$;³·$;³·¬ õ¶$;³·¸L¸$;³·”¹‹·>„7i}×6>„7<34¶26¸Vô5¸L¸¬ õ¶¬ õ¶s¼¸26¸y))¸ã3e¸Ey¸XÍš¸¥à¤¸½`׸ՠë¸õá¸ÐB¹Vçÿ¸i¹i¹½`׸½`׸¡'øAX¹ù„#¹AX¹AX¹AX¹.¹Þ +¹½`׸.¹RÃõ¸Þ +¹Þ +¹RÃõ¸Õ ë¸½`׸ՠë¸è ¹¸¥à¤¸XÍš¸ )Q¸26¸¸L¸¸L¸ÀÂH·”¹‹·$;³·y))¸26¸$;³·Vô5i}×6$;³·$;³·>„7dß97¹«7>„7äY98°uu8n8«ea8²ÓŽ8…_%8¹«7\UÓ7dß97>„7«ea8«ea8 û7\UÓ7…_%8>„7\UÓ7°uu8°uu8°uu8 û7dß97…_%8i}×6<34¶¹«7dß97>„7dß97\UÓ7>„7 û7n8>„7<34¶<34¶$;³·Vô5Vô5…_%8>„7Vô5$;³·ÀÂH·dß97<34¶ÀÂH·”¹‹·ÀÂH·y))¸¸L¸26¸>„7¬ õ¶y))¸¥à¤¸5ö®¸s¼¸XÍš¸¥à¤¸Õ ë¸EC͸¡'øECÍ¸è ¹¸®†¸5ö®¸5ö®¸5ö®¸è ¹¸½`׸5ö®¸Ey¸26¸26¸26¸ )Q¸j%=¸j%=¸XÍš¸s¼¸s¼¸ã3e¸ÝÚ·y))¸$;³·ÝÚ·26¸¸L¸<34¶dß97i}×6\UÓ7dß97¹«7…_%82\M8àÅ„8°uu8ùö¢8 ­8Ã<Á8ùö¢8²ÓŽ8²ÓŽ8 ­8²ÓŽ82\M8äY98«ea8äY98²ÓŽ8n8²ÓŽ8àÅ„8°uu8â9¤´é8 ­8²ÓŽ8 XË8 XË8…_%8ùö¢8äY982\M8°uu82\M8>„7i}×6äY98¹«7<34¶”¹‹·¸L¸ÝÚ·$;³·$;³·ÝÚ·ÀÂH·$;³·26¸j%=¸j%=¸y))¸j%=¸26¸¸L¸®†¸ã3e¸y))¸¥à¤¸Ey¸s¼¸ )Q¸j%=¸Ey¸s¼¸s¼¸s¼¸ )Q¸s¼¸j%=¸ã3e¸26¸¸L¸j%=¸¸L¸ÝÚ·26¸s¼¸¬ õ¶¬ õ¶\UÓ7n8n8àÅ„8k#·8àÅ„8°uu82\M8«ea8àÅ„8àÅ„8àÅ„8n8äY98…_%8«ea8²ÓŽ8k#·8²ÓŽ8ùö¢8²ÓŽ8àÅ„8 ­8 ­8-uÕ8”ß8 XË8ùö¢8àÅ„8²ÓŽ8Ã<Á8 XË8¤´é8-uÕ8k#·8Œúý8 XË8 XË8ùö¢8°uu8«ea8ùö¢8…_%8äY98 û7²ÓŽ8 û7dß97<34¶<34¶<34¶Vô5Vô526¸26¸s¼¸s¼¸¥à¤¸è ¹¸Õ ë¸½`׸õá¸Õ ë¸Þ +¹i¹¡'ø¡'ø5ö®¸Þ +¹Þ +¹Õ ë¸Vçÿ¸5ö®¸¡'ø.¹Vçÿ¸Vçÿ¸RÃõ¸ÐB¹Þ +¹½`׸5ö®¸5ö®¸RÃõ¸è ¹¸¡'Ã¸è ¹¸¡'ø¡'øXÍš¸s¼¸Ey¸XÍš¸ )Q¸s¼¸5ö®¸è ¹¸ )Q¸j%=¸$;³·Ey¸$;³·i}×626¸<34¶$;³·>„7¹«7n8<34¶dß97n8 û7…_%8k#·8°uu8ùö¢8«ea82\M8«ea8…_%8 XË8Ã<Á8ä˜8k#·82\M8ùö¢8«ea8 û7ùö¢8…_%8«ea8¹«7\UÓ7n8Vô5<34¶\UÓ7…_%8n8Vô5\UÓ7 û7\UÓ7n8>„7n8<34¶\UÓ7…_%8i}×6dß97ÝÚ·ÀÂH·¬ õ¶y))¸¸L¸”¹‹·26¸ã3e¸Ey¸26¸$;³·¸L¸ÝÚ· )Q¸Ey¸5ö®¸ )Q¸ã3e¸s¼¸XÍš¸XÍš¸®†¸ã3e¸j%=¸y))¸ã3e¸ )Q¸ )Q¸y))¸”¹‹·i}×6i}×6>„7>„7¹«7äY98ùö¢8°uu8ùö¢8²ÓŽ8äY98ä˜8°uu82\M8…_%8°uu8²ÓŽ8…_%82\M8ä˜8äY98Ã<Á8 ­8ùö¢8 XË8 XË8Ã<Á8-uÕ8Ã<Á8ùö¢8 XË8Œúý8-uÕ8¤´é8¤´é8k#·8-uÕ8 XË8k#·8 XË8-uÕ8²ÓŽ8àÅ„8k#·8àÅ„8°uu8²ÓŽ8«ea82\M8àÅ„8°uu82\M8äY98°uu8«ea8Ã<Á8²ÓŽ8²ÓŽ8äY98 û7…_%8\UÓ7>„7dß97>„7dß97ÀÂH·i}×6<34¶ û7<34¶¸L¸26¸y))¸ÝÚ·26¸26¸”¹‹·®†¸ )Q¸ÝÚ·j%=¸s¼¸Ey¸j%=¸ )Q¸s¼¸y))¸26¸26¸ÝÚ·¬ õ¶ )Q¸ÀÂH·Vô5ÝÚ·$;³·dß97¹«7<34¶Vô5Vô5 û7dß97i}×6dß97…_%8>„7\UÓ7dß97 û7>„7\UÓ7n8àÅ„82\M82\M8…_%8i}×6¹«7¹«7 û7n82\M8…_%8>„7n8°uu8àÅ„8dß97²ÓŽ82\M8«ea8n8«ea8²ÓŽ8ä˜8àÅ„8ä˜8n8\UÓ7…_%8n8¹«7 û7i}×6¹«7 û7\UÓ7\UÓ7>„7Vô5\UÓ7¬ õ¶>„7i}×6Vô5¬ õ¶¹«7i}×6<34¶Vô5¬ õ¶ÝÚ·”¹‹·y))¸26¸j%=¸ )Q¸j%=¸¸L¸y))¸¸L¸j%=¸ÝÚ·”¹‹·”¹‹·ÀÂH·¸L¸¸L¸$;³·¬ õ¶¬ õ¶¸L¸ÝÚ·<34¶¸L¸Ey¸s¼¸ )Q¸ÀÂH·”¹‹·$;³·¬ õ¶Vô5¬ õ¶¬ õ¶n8>„7n8«ea8«ea8 ­8«ea8 ­8”ß8²ÓŽ8 XË8-uÕ8-uÕ8â9-uÕ8”ß8 XË8 XË8àÅ„82\M8k#·8ÒÖó8²ÓŽ8 XË8-uÕ8ÒÖó8”ß8k#·8 ­8k#·8k#·8àÅ„8 ­8²ÓŽ8ä˜8ä˜8àÅ„8«ea8ä˜8«ea8…_%8ä˜8°uu8¹«7²ÓŽ8…_%8¹«7¬ õ¶¹«7dß97\UÓ7i}×6 û7>„7¬ õ¶n8\UÓ7¬ õ¶\UÓ7¬ õ¶dß97>„72\M8¹«7¸L¸<34¶i}×6i}×6¹«7i}×6¬ õ¶dß972\M8 û7>„7i}×6i}×6<34¶dß97¹«7i}×6¹«7àÅ„8°uu8ä˜82\M8>„7 û7¹«7…_%82\M8ä˜8-uÕ8ä˜8 XË8²ÓŽ8°uu8ä˜8ùö¢8”ß8k#·8-uÕ8-uÕ8 ­8 XË8-uÕ8¤´é8 XË8 XË8 XË85# 98a9¤´é8ÒÖó8Œúý85# 95# 9 XË8-uÕ8ÒÖó8”ß8-uÕ8 XË8k#·8k#·8Ã<Á8ä˜8ä˜8°uu82\M8°uu8¹«7«ea8dß97¹«7n8…_%82\M8àÅ„8 û7äY98 û7n8äY98äY98\UÓ7…_%8äY98n8>„7¹«7…_%8i}×6¹«7 û7 û7”¹‹·ÀÂH·dß97<34¶¬ õ¶<34¶$;³·¸L¸y))¸¸L¸s¼¸26¸”¹‹·Vô5$;³·ÀÂH·¬ õ¶ÝÚ·”¹‹·”¹‹·ÝÚ·ÀÂH·¬ õ¶¸L¸¬ õ¶dß97¬ õ¶”¹‹·¸L¸¸L¸¬ õ¶ÀÂH·ÀÂH·dß97 û7äY98°uu8°uu8°uu8ä˜8àÅ„8àÅ„8k#·8²ÓŽ8²ÓŽ8ùö¢8 ­8°uu8°uu8ùö¢8k#·8 XË8ÒÖó8ÒÖó8-uÕ8ÒÖó8Œúý8ÒÖó85# 9æK9¤´é8ÒÖó8 XË8-uÕ8â9-uÕ8æK9-uÕ8ùö¢8²ÓŽ8ä˜8 ­8àÅ„8k#·8 ­8 ­8àÅ„8äY98Vô5¹«7¹«7Vô5ÝÚ·ÝÚ·”¹‹·ÀÂH·ã3e¸ )Q¸s¼¸5ö®¸i¹è ¹¸¡'øՠë¸è ¹¸Õ ë¸.¹RÃõ¸Õ ë¸EC͸5ö®¸õḽ`׸EC͸¥à¤¸EC͸5ö®¸EC͸ՠë¸Þ +¹¡'øÐB¹Þ +¹i¹ÐB¹.¹õḽ`׸¥à¤¸è ¹¸è ¹¸õá¸Þ +¹¡'ø5ö®¸½`׸½`׸XÍš¸s¼¸¡'øã3e¸”¹‹·26¸j%=¸$;³·$;³·ÝÚ·i}×6”¹‹·”¹‹·<34¶¸L¸26¸ÝÚ·”¹‹·$;³·dß97>„7>„7\UÓ7äY98dß97>„7\UÓ7i}×6«ea8äY98\UÓ7äY98äY98\UÓ7äY98«ea82\M8äY98dß97<34¶j%=¸j%=¸Ey¸ )Q¸s¼¸Ey¸5ö®¸5ö®¸EC͸s¼¸5ö®¸s¼¸s¼¸s¼¸XÍš¸5ö®¸s¼¸ÝÚ·Ey¸26¸y))¸j%=¸y))¸¥à¤¸¡'øõá¸5ö®¸s¼¸¥à¤¸¥à¤¸5ö®¸è ¹¸è ¹¸¥à¤¸¡'Ã¸è ¹¸¥à¤¸ã3e¸5ö®¸ã3e¸¥à¤¸5ö®¸XÍš¸Ey¸Ey¸26¸<34¶”¹‹·”¹‹·$;³·¬ õ¶i}×6\UÓ7dß97¹«7>„7n8«ea8¹«72\M8«ea8\UÓ7i}×6i}×6äY98\UÓ72\M8«ea8ä˜8k#·8²ÓŽ8°uu8Ã<Á8ùö¢8àÅ„8àÅ„8Ã<Á8 ­8Ã<Á8¤´é8879Œúý8¤´é8”ß8”ß8”ß8k#·8k#·8«ea8«ea8²ÓŽ8ä˜8«ea82\M8¹«7äY98dß97¬ õ¶ÝÚ·”¹‹·y))¸¸L¸y))¸ )Q¸Ey¸$;³·¸L¸j%=¸ÀÂH·”¹‹·¬ õ¶Vô5$;³·ÝÚ·ÝÚ·”¹‹·j%=¸$;³·Ey¸XÍš¸j%=¸ )Q¸è ¹¸y))¸ã3e¸Ey¸y))¸s¼¸¥à¤¸¡'øECÍ¸è ¹¸¡'øXÍš¸XÍš¸j%=¸Ey¸XÍš¸ )Q¸¸L¸Ey¸26¸¸L¸26¸ )Q¸j%=¸ )Q¸ÝÚ·ÝÚ·ÝÚ·Vô5ÀÂH·dß97”¹‹·<34¶äY98 û7dß97”¹‹·¬ õ¶<34¶dß97\UÓ7>„7>„7°uu8äY98°uu8«ea8ä˜8 ­8ùö¢8 ­8°uu8n8…_%8…_%8«ea8«ea8«ea82\M8 û7>„7>„7<34¶¬ õ¶ÀÂH·¬ õ¶<34¶ û7Vô5>„7”¹‹·¬ õ¶ÝÚ· )Q¸ÀÂH·ÝÚ·26¸Ey¸ã3e¸XÍš¸Ey¸s¼¸Ey¸j%=¸26¸26¸¬ õ¶$;³·y))¸ÀÂH·”¹‹·ÝÚ·ÝÚ·26¸ÝÚ·¸L¸¬ õ¶¸L¸<34¶$;³·ÝÚ·i}×626¸s¼¸i}×6<34¶Vô5\UÓ7 û7 û7 û7n8…_%8n8¹«7i}×6>„7Vô5¹«7¹«72\M8n8äY98>„72\M8 XË8ùö¢8ä˜8 ­8 XË8-uÕ8”ß8ÒÖó8 XË8ä˜8àÅ„8äY98²ÓŽ8 ­82\M8àÅ„8«ea8k#·8 ­8ä˜8ùö¢8 XË8 XË8 XË8¤´é8-uÕ8ÒÖó8ùö¢8Ã<Á8k#·8 XË8ùö¢8«ea82\M8ùö¢8ùö¢82\M8ùö¢82\M8°uu82\M8…_%8n8>„7>„7dß97¬ õ¶<34¶”¹‹·”¹‹·¬ õ¶ÝÚ·2\M8i}×6Vô5>„7”¹‹·”¹‹·26¸$;³·¸L¸$;³·ÀÂH·ÝÚ·<34¶¸L¸Ey¸s¼¸j%=¸ã3e¸j%=¸$;³·¬ õ¶¬ õ¶y))¸¸L¸y))¸¸L¸y))¸$;³·”¹‹·”¹‹·$;³·<34¶i}×6>„7Vô5”¹‹·ÀÂH·\UÓ7¹«72\M8äY98dß97ÝÚ·¬ õ¶¹«7i}×6dß97dß97i}×6¹«7<34¶dß97…_%8äY98ùö¢8¤´é8 ­8k#·8 ­8àÅ„8 ­8 XË8â9879”ß8-uÕ8â95# 9-uÕ88a9â9¤´é8·"9879Œúý8-uÕ85# 9¤´é8”ß8”ß8Ã<Á8-uÕ8 XË8Ã<Á8ä˜8ä˜8ùö¢8ùö¢82\M8 ­8°uu8°uu8¹«7…_%8\UÓ7n8¹«7”¹‹·¸L¸26¸ã3e¸¸L¸ÀÂH·ÝÚ·26¸¥à¤¸5ö®¸Ey¸¥à¤¸XÍš¸XÍš¸Ey¸EC͸XÍš¸è ¹¸è ¹¸Õ ë¸½`׸ՠë¸è ¹¸XÍš¸¡'ø5ö®¸5ö®¸XÍš¸®†¸Ey¸y))¸$;³·26¸¸L¸ÀÂH·ÝÚ·ÝÚ·¸L¸¸L¸ÀÂH·Vô5$;³·ã3e¸”¹‹·¬ õ¶”¹‹·i}×6dß97dß97\UÓ7\UÓ7¹«7…_%8 û7…_%8²ÓŽ8 ­8°uu8k#·8 ­8k#·8ä˜8 XË8k#·8 ­8°uu8k#·8«ea8\UÓ7>„7”¹‹·y))¸ÀÂH·¬ õ¶¸L¸ )Q¸26¸26¸y))¸26¸Ey¸ã3e¸ )Q¸y))¸y))¸y))¸XÍš¸s¼¸XÍš¸¥à¤¸s¼¸EC͸EC͸Vçÿ¸Õ ë¸i¹Vçÿ¸7œ(¹ÐB¹Vçÿ¸RÃõ¸õá¸RÃõ¸.¹RÃõ¸ÐB¹´-¹ù„#¹´-¹`Ì2¹ù„#¹AX¹Þ +¹õḽ`׸¥à¤¸õá¸EC͸EC͸õḡ'ø¡'øEC͸s¼¸s¼¸è ¹¸s¼¸j%=¸Ey¸¥à¤¸s¼¸¥à¤¸y))¸Ey¸ã3e¸¸L¸y))¸ÀÂH·y))¸ÝÚ· )Q¸ )Q¸ )Q¸Ey¸¬ õ¶i}×6i}×6Vô5dß97<34¶ÀÂH·”¹‹·<34¶dß97i}×6¹«7Vô5¬ õ¶¸L¸\UÓ7 û7¬ õ¶$;³·”¹‹·j%=¸ )Q¸¥à¤¸26¸ )Q¸Ey¸s¼¸EC͸5ö®¸s¼¸è ¹¸EC͸½`׸s¼¸¡'øs¼¸s¼¸ÐB¹RÃõ¸i¹i¹Õ ë¸Vçÿ¸RÃõ¸½`׸Vçÿ¸Vçÿ¸ù„#¹õá¸RÃõ¸½`׸EC͸Vçÿ¸.¹Vçÿ¸.¹RÃõ¸Õ ë¸Õ ë¸RÃõ¸RÃõ¸½`׸EC͸i¹Vçÿ¸RÃõ¸AX¹Vçÿ¸Õ ë¸¡'ø½`׸¥à¤¸è ¹¸XÍš¸¥à¤¸ )Q¸y))¸ã3e¸s¼¸¸L¸¸L¸¸L¸<34¶”¹‹·ÀÂH·$;³·¹«7\UÓ7äY98\UÓ7äY98äY98\UÓ72\M8…_%8äY98àÅ„8°uu8²ÓŽ8«ea8ä˜8k#·8Ã<Á8ùö¢8°uu8°uu8\UÓ7…_%8>„7i}×6…_%82\M8àÅ„8n8ùö¢8²ÓŽ8n82\M8 û7dß97dß97¹«7dß97ÀÂH·¬ õ¶dß97Vô5 û7i}×6¹«7”¹‹·¬ õ¶Vô5dß97<34¶$;³·”¹‹·ÝÚ·y))¸ÀÂH·ÝÚ·¬ õ¶ÝÚ·ÀÂH·$;³·¬ õ¶¸L¸¸L¸¬ õ¶¸L¸¸L¸ )Q¸5ö®¸Õ ë¸EC͸¥à¤¸õá¸XÍš¸¥à¤¸¥à¤¸XÍš¸s¼¸ECÍ¸è ¹¸è ¹¸EC͸y))¸y))¸s¼¸26¸¸L¸¸L¸¸L¸j%=¸26¸s¼¸y))¸ )Q¸26¸26¸ÝÚ·ÝÚ·ÝÚ·$;³· )Q¸ÝÚ·ÀÂH·ÀÂH·>„7”¹‹·<34¶ÀÂH·Vô5Vô5i}×6¬ õ¶¹«7äY98n8«ea8\UÓ7 û7²ÓŽ8äY982\M8²ÓŽ8\UÓ7Vô5<34¶<34¶\UÓ7i}×6¹«7>„7 û7i}×6 û7…_%8>„7Vô5ÀÂH·Vô5”¹‹·”¹‹·<34¶26¸¬ õ¶Vô5>„726¸¬ õ¶¬ õ¶¬ õ¶¸L¸Ey¸y))¸ã3e¸ )Q¸s¼¸s¼¸¥à¤¸Õ ë¸è ¹¸Õ ë¸RÃõ¸¡'ø¥à¤¸5ö®¸XÍš¸XÍš¸ )Q¸EC͸s¼¸y))¸è ¹¸XÍš¸XÍš¸XÍš¸ã3e¸s¼¸26¸¬ õ¶>„7dß97ÝÚ·”¹‹·|Pd|1|24600|2013-282T15:32:33.397 ˆ /9&°9@q 9 Nî8 Nî8œ]9 Ú8îpø8ø»8ÓÅ8ÓÅ8ìd“8aŠ§8wv8ìd“8U€j8æU‰8ìd“8ÓÅ8ÓÅ8ø»8wv8æU‰8U€j8ÐsV8wv8æU‰8ìd“8ìd“8æU‰8aŠ§8U€j8wv8U€j8ìd“8wv8wv8æU‰8U€j8pz8ÇYå7pz8k°½7k°½7ÂG¡·ö* ¸R΂6ÂG¡·èr®¶”-%·”-%·ÆŒð·4¸ÆŒð·ÂG¡·\H¸èr®¶ÆŒð·ÆŒð·ÔÛÈ·ÔÛÈ·¯s·"7”-%·”-%·¯s·®>'µ¯s·èr®¶®>'µ¯s·ÔÛÈ·ö* ¸ÂG¡·”-%·ÂG¡·”-%·ö* ¸"7®>'µR΂6œ%–7>Ž8pz8,nB8wv8ÐsV8wv8æU‰8wv8!ïÏ8ø»8!ïÏ8U€j8aŠ§8 Ú8@q 9‘…9¬J9¬J9@q 9^Æ9ˆ /9–W>9¤ÂR9+§M9–W>9^Æ9“ô)9¢qC9¢qC9^Æ9“ô)9@q 9îpø8º,ä8¬J9 Ú8 Ú8ø»8„ ±8ÓÅ8!ïÏ8aŠ§8ÐsV8pz8ìd“8>Ž8ÇYå7œ%–7R΂6èr®¶èr®¶œ%–7œ%–7k°½7èr®¶œ%–7Ÿ‚]7Ÿ‚]7"7œ%–7œ%–7\H¸ÔÛÈ·ÂG¡·®>'µ,nB8R΂6¯s·R΂6R΂6¯s·ö* ¸ÂG¡·¯s·¯s·èr®¶ÔÛÈ·ÔÛÈ·ÔÛÈ·ÆŒð·ˆ+Œ¸ò ¸n‚¸\¸n‚¸n‚¸\¸n‚¸Ðx´¸n‚¸\H¸\¸Z(p¸ˆ+Œ¸ˆ+Œ¸I;–¸Z(p¸Ðx´¸Z(p¸ƒM ¸Z(p¸ˆ+Œ¸n‚¸n‚¸\¸n‚¸4¸4¸\H¸4¸ÂG¡·k°½7k°½7”-%·p.8Ÿ‚]7œ%–7Ÿ‚]7p.8>Ž8,nB8,nB8k°½7"7Ÿ‚]7>Ž8”-%·®>'µœ%–7œ%–7ÐsV8ÇYå7Ÿ‚]7Ÿ‚]7pz8ÇYå7p.8pz8œ%–7pz8œ%–7Ÿ‚]7"7œ%–7®>'µ®>'µèr®¶"7ÇYå7ÇYå7"7ÇYå7Ÿ‚]7œ%–7”-%·ÆŒð·4¸ÆŒð·ƒM ¸ˆ+Œ¸ö* ¸\H¸\H¸\H¸ÂG¡·ö* ¸4¸ö* ¸4¸4¸I;–¸ö* ¸ ‘¾¸ÔÛÈ·4¸4¸ÆŒð·ö* ¸ö* ¸ÔÛÈ·R΂6èr®¶ÔÛÈ·n‚¸4¸ÂG¡·ÔÛÈ·ÔÛÈ·œ%–7¯s·R΂6®>'µR΂6ÔÛÈ·”-%·Ÿ‚]7k°½7k°½7ÂG¡·¯s·ÆŒð·R΂6œ%–7ÐsV8pz8,nB8æU‰8,nB8œ%–7ìd“8p.8>Ž8>Ž8U€j8ìd“8U€j8p.8U€j8ÇYå7ÇYå7œ%–7œ%–7œ%–7"7®>'µ"7”-%·®>'µœ%–7R΂6"7Ÿ‚]7®>'µèr®¶ÂG¡·ÔÛÈ·ÔÛÈ·n‚¸”-%·ò ¸4¸ÆŒð·ÂG¡·œ%–7®>'µèr®¶ÔÛÈ·ö* ¸ÔÛÈ·ö* ¸\H¸ÔÛÈ·\H¸ˆ+Œ¸\¸n‚¸ƒM ¸\H¸bª¸h¬È¸I;–¸I;–¸d)ñ¸~çܸƒM ¸¾ß ¹Æ¸¹~çܸh¬È¸ 縠ç¸d)ñ¸ ‘¾¸bª¸Ðx´¸n‚¸ˆ+Œ¸\H¸Z(p¸\¸n‚¸ÂG¡·ÔÛÈ·ö* ¸ò ¸ò ¸Z(p¸n‚¸ò ¸n‚¸4¸ÔÛÈ·¯s·>Ž8¯s·R΂6èr®¶>Ž8,nB8p.8æU‰8pz8U€j8æU‰8U€j8U€j8ÇYå7èr®¶k°½7R΂6k°½7ÇYå7ÇYå7pz8p.8œ%–7>Ž8ÇYå7k°½7ÐsV8Ÿ‚]7"7R΂6"7®>'µ®>'µ"7¯s·¯s·èr®¶"7œ%–7ÇYå7èr®¶œ%–7Ÿ‚]7®>'µ®>'µÆŒð·ÔÛÈ·èr®¶¯s·ö* ¸ÂG¡·ö* ¸4¸\¸ÔÛÈ·èr®¶\H¸n‚¸\H¸4¸ò ¸\H¸\¸ƒM ¸I;–¸ˆ+Œ¸Ðx´¸ˆ+Œ¸I;–¸ò ¸n‚¸I;–¸ö* ¸\¸\¸ˆ+Œ¸bª¸ÆŒð·ˆ+Œ¸\¸ò ¸ò ¸4¸\H¸\H¸ÔÛÈ·ö* ¸¯s·®>'µÆŒð·èr®¶ÔÛÈ·”-%·ÔÛÈ·èr®¶œ%–7œ%–7,nB8"7œ%–7œ%–7,nB8pz8Ÿ‚]7ÇYå7k°½7R΂6p.8ìd“8æU‰8,nB8wv8„ ±8ÐsV8p.8>Ž8ÇYå7p.8"7pz8>Ž8k°½7k°½7pz8ÇYå7,nB8U€j8,nB8>Ž8p.8,nB8ÐsV8ÇYå7R΂6R΂6ÂG¡·”-%·ÂG¡·\H¸ÔÛÈ·ò ¸n‚¸ò ¸ˆ+Œ¸bª¸ ‘¾¸ ‘¾¸I;–¸bª¸ƒM ¸ò ¸ˆ+Œ¸\H¸Ðx´¸n‚¸n‚¸Z(p¸n‚¸\H¸4¸ÆŒð·\H¸ÆŒð·ÆŒð·®>'µ¯s·ÂG¡·ÂG¡·ÔÛÈ·ÂG¡·R΂6®>'µ"7®>'µ"7k°½7¯s·ÔÛÈ·¯s·R΂6pz8>Ž8pz8ÇYå7pz8ÐsV8ÇYå7"7®>'µŸ‚]7,nB8ÇYå7®>'µR΂6ÐsV8ÐsV8ÐsV8,nB8æU‰8ìd“8U€j8ìd“8'“~8U€j8,nB8ÇYå7p.8'“~8k°½7æU‰8,nB8ø»8ø»8U€j8p.8'“~8!ïÏ8ÓÅ8aŠ§8wv8!ïÏ8U€j8U€j8ø»8ìd“8ÐsV8k°½7ÐsV8k°½7ÇYå7"7ÇYå7èr®¶R΂6èr®¶ÂG¡·ÔÛÈ·ÂG¡·4¸ÔÛÈ·èr®¶ÆŒð·n‚¸\H¸Z(p¸~çܸI;–¸n‚¸n‚¸ÆŒð·ÔÛÈ·4¸ò ¸ö* ¸R΂6¯s·ö* ¸ÔÛÈ·n‚¸ö* ¸¯s·ÔÛÈ·\H¸\H¸ÔÛÈ·ÂG¡·ÂG¡·ÆŒð·ö* ¸ÂG¡·R΂6”-%·R΂6R΂6œ%–7k°½7k°½7ÇYå7pz8,nB8p.8ÇYå7U€j8U€j8p.8U€j8U€j8ìd“8!ïÏ8„ ±8ìd“8!ïÏ8 Ú8ÓÅ8!ïÏ8ìd“8ø»8!ïÏ8ÓÅ8aŠ§8„ ±8ø»8ìd“8ìd“8ÐsV8æU‰8ìd“8wv8,nB8'“~8U€j8ÐsV8p.8p.8p.8U€j8,nB8>Ž8>Ž8pz8p.8k°½7"7Ÿ‚]7k°½7p.8>Ž8¯s·Ÿ‚]7k°½7k°½7ÇYå7k°½7>Ž8®>'µ”-%·ÔÛÈ·ÆŒð·ÂG¡·®>'µ”-%·ÔÛÈ·ÆŒð·ÔÛÈ·4¸ò ¸ÔÛÈ·n‚¸n‚¸ÔÛÈ·ò ¸ö* ¸ÔÛÈ·ÆŒð·n‚¸Z(p¸\¸Z(p¸ò ¸ÂG¡·ÂG¡·ÂG¡·èr®¶¯s·èr®¶R΂6œ%–7®>'µk°½7"7,nB8pz8Ÿ‚]7ÇYå7p.8ìd“8U€j8æU‰8U€j8wv8!ïÏ8îpø8 Ú8 Nî8œ]9 Nî8!ïÏ8º,ä8 Nî8 Ú8Šš9‘…9@q 9º,ä8 Ú8!ïÏ8‘…9ÓÅ8ø»8„ ±8„ ±8 Nî8ÓÅ8 Ú8 Nî8ÓÅ8„ ±8„ ±8wv8,nB8'“~8'“~8œ%–7>Ž8p.8pz8Ÿ‚]7"7¯s·"7¯s·"7ÔÛÈ·¯s·ò ¸ÔÛÈ·ò ¸ò ¸ƒM ¸n‚¸ ‘¾¸~çܸ ç¸d)ñ¸ÉÒ¸~çܸh¬È¸·Lû¸ÉÒ¸d)ñ¸h¬È¸~çܸ ‘¾¸Ðx´¸I;–¸ ‘¾¸I;–¸Z(p¸h¬È¸ÉÒ¸~çܸÉÒ¸~çܸ~çܸƒM ¸h¬È¸~çܸ ‘¾¸ˆ+Œ¸\H¸I;–¸ò ¸ò ¸ÔÛÈ·”-%·k°½7R΂6”-%·œ%–7¯s·ÂG¡·"7pz8>Ž8k°½7èr®¶pz8ÐsV8wv8wv8p.8p.8æU‰8ìd“8aŠ§8'“~8ìd“8wv8'“~8wv8ÓÅ8ìd“8wv8æU‰8æU‰8pz8p.8,nB8ÇYå7Ÿ‚]7œ%–7œ%–7Ÿ‚]7¯s·”-%·¯s·ÔÛÈ·¯s·¯s·¯s·ö* ¸I;–¸ƒM ¸n‚¸n‚¸Ðx´¸I;–¸ƒM ¸\¸Z(p¸ˆ+Œ¸ƒM ¸ˆ+Œ¸Ðx´¸ ‘¾¸ÉÒ¸ÉÒ¸ƒM ¸ƒM ¸ˆ+Œ¸Ðx´¸ ‘¾¸é˹é˹@ô¹/¹é˹d+¹f ¹@ô¹“5!¹“5!¹é˹é˹·Lû¸·Lû¸ ‘¾¸·Lû¸~çܸI;–¸bª¸n‚¸n‚¸ö* ¸Ðx´¸I;–¸bª¸n‚¸ˆ+Œ¸I;–¸n‚¸4¸n‚¸ö* ¸ÔÛÈ·n‚¸ò ¸ÆŒð·ò ¸èr®¶”-%·”-%·Ÿ‚]7R΂6k°½7pz8ÇYå7>Ž8ÐsV8ÐsV8ÐsV8,nB8,nB8U€j8pz8ÇYå7R΂6R΂6ÇYå7k°½7R΂6œ%–7œ%–7®>'µR΂64¸ÂG¡·"7”-%·ÔÛÈ·”-%·ÂG¡·”-%·ÂG¡·ö* ¸ÔÛÈ·4¸ö* ¸I;–¸n‚¸ƒM ¸ÉÒ¸bª¸ ç¸~çܸ·Lû¸~çܸ~çܸ~çܸ·Lû¸ÉÒ¸h¬È¸I;–¸Ðx´¸ ç¸~çܸbª¸h¬È¸Ðx´¸bª¸ÉÒ¸n‚¸ƒM ¸bª¸bª¸ ‘¾¸I;–¸ ‘¾¸Ðx´¸ƒM ¸\¸n‚¸ÆŒð·ö* ¸ÔÛÈ·¯s·ÔÛÈ·ÔÛÈ·èr®¶®>'µ”-%·>Ž8p.8p.8œ%–7p.8>Ž8ÇYå7p.8Ÿ‚]7ÐsV8k°½7Ÿ‚]7U€j8'“~8,nB8ÐsV8'“~8pz8p.8p.8,nB8U€j8,nB8U€j8Ÿ‚]7Ÿ‚]7ÇYå7œ%–7œ%–7>Ž8U€j8pz8”-%·Ÿ‚]7"7"7èr®¶Ÿ‚]7®>'µ®>'µ¯s·ÆŒð·¯s·¯s·®>'µR΂6¯s·èr®¶ÂG¡·ÂG¡·ö* ¸ö* ¸”-%·ÔÛÈ·ÆŒð·”-%·ÔÛÈ·ÔÛÈ·\H¸n‚¸”-%·ò ¸ö* ¸\H¸h¬È¸I;–¸4¸n‚¸ƒM ¸Ðx´¸ƒM ¸ˆ+Œ¸\H¸bª¸Ðx´¸ˆ+Œ¸ ‘¾¸ÉÒ¸d)ñ¸Æ¸¹ ‘¾¸I;–¸ˆ+Œ¸ƒM ¸bª¸ÉÒ¸I;–¸n‚¸ˆ+Œ¸ò ¸\¸ˆ+Œ¸\H¸Z(p¸ÆŒð·I;–¸ÆŒð·ö* ¸\H¸ÆŒð·ö* ¸4¸\H¸\H¸ö* ¸®>'µ¯s·èr®¶”-%·k°½7èr®¶èr®¶”-%·èr®¶"7R΂6R΂6œ%–7,nB8œ%–7ÇYå7œ%–7R΂6¯s·"7œ%–7R΂6œ%–7¯s·ÂG¡·èr®¶ÆŒð·ˆ+Œ¸ò ¸ö* ¸n‚¸ÆŒð·ò ¸ÔÛÈ·n‚¸\¸ö* ¸ÔÛÈ·4¸ÔÛÈ·ÔÛÈ·ò ¸4¸ò ¸ò ¸ƒM ¸I;–¸ö* ¸4¸Z(p¸\H¸ˆ+Œ¸ˆ+Œ¸ˆ+Œ¸\H¸ÔÛÈ·ö* ¸ö* ¸ò ¸”-%·\H¸¯s·4¸ÂG¡·”-%·ÆŒð·n‚¸R΂6ÂG¡·ö* ¸ÔÛÈ·èr®¶ÂG¡·¯s·ò ¸ÆŒð·”-%·ÆŒð·èr®¶Ÿ‚]7œ%–7Ÿ‚]7Ÿ‚]7Ÿ‚]7œ%–7k°½7ÐsV8æU‰8 Ú8wv8!ïÏ8!ïÏ8wv8ìd“8,nB8>Ž8ÐsV8'“~8ÓÅ8æU‰8aŠ§8ÓÅ8„ ±8aŠ§8ÓÅ8„ ±8'“~8'“~8æU‰8p.8U€j8,nB8p.8ÇYå7'“~8æU‰8„ ±8U€j8ìd“8wv8ÇYå7Ÿ‚]7p.8k°½7œ%–7>Ž8èr®¶®>'µèr®¶R΂6®>'µÂG¡·”-%·R΂6®>'µ®>'µèr®¶4¸¯s·ÆŒð·4¸ö* ¸ö* ¸Z(p¸\H¸ÆŒð·ÂG¡·ÆŒð·®>'µÆŒð·\¸ÆŒð·®>'µÂG¡·”-%·R΂6”-%·®>'µèr®¶ÔÛÈ·ò ¸R΂6ÂG¡·èr®¶èr®¶œ%–7p.8'“~8,nB8ÇYå7„ ±8ÐsV8U€j8'“~8'“~8ìd“8wv8ìd“8aŠ§8º,ä8º,ä8 Ú8wv8ÓÅ8ø»8wv8ø»8,nB8,nB8,nB8'“~8>Ž8p.8œ%–7R΂6,nB8æU‰8ÐsV8p.8œ%–7œ%–7>Ž8èr®¶ÇYå7ÐsV8ÐsV8,nB8'“~8U€j8æU‰8'“~8æU‰8ìd“8ìd“8æU‰8wv8ìd“8'“~8ø»8º,ä8 Nî8aŠ§8,nB8æU‰8ÓÅ8ÓÅ8'“~8U€j8>Ž8>Ž8p.8,nB8U€j8'“~8>Ž8ÇYå7®>'µp.8>Ž8®>'µÔÛÈ·èr®¶®>'µÂG¡·ÆŒð·èr®¶ö* ¸ÆŒð·ò ¸ö* ¸”-%·ö* ¸\H¸®>'µ®>'µÔÛÈ·®>'µk°½7R΂6”-%·ÆŒð·4¸”-%·”-%·ÂG¡·R΂6®>'µèr®¶”-%·èr®¶ÇYå7pz8U€j8aŠ§8'“~8ÐsV8aŠ§8ìd“8wv8ìd“8ø»8 Ú8U€j8,nB8„ ±8ø»8„ ±8aŠ§8 Ú8º,ä8 Ú8 Nî8º,ä8!ïÏ8@q 9œ]9Šš9œ]9¬J9 Nî8!ïÏ8^Æ9Šš9îpø8@q 9‘…9Šš9/Ý$9%49¤ÂR9 >99^Æ9&°9@q 9&°9“ô)9@q 9º,ä8aŠ§8„ ±8ø»8ÓÅ8„ ±8æU‰8wv8aŠ§8„ ±8 Ú8 Nî8ø»8wv8!ïÏ8îpø8 Ú8ÓÅ8aŠ§8U€j8'“~8pz8ÐsV8>Ž8pz8pz8pz8wv8,nB8k°½7Ÿ‚]7"7¯s·œ%–7œ%–7pz8>Ž8k°½7œ%–7ÇYå7pz8ÇYå7œ%–7,nB8p.8p.8U€j8æU‰8wv8æU‰8ø»8 Ú8 Nî8ø»8º,ä8„ ±8œ]9º,ä8îpø8ø»8ÓÅ8aŠ§8„ ±8ø»8U€j8ìd“8ìd“8U€j8ÓÅ8 Nî8ø»8aŠ§8ìd“8ø»8wv8U€j8ìd“8'“~8ìd“8ÓÅ8ìd“8ìd“8U€j8æU‰8pz8p.8U€j8ìd“8p.8ÐsV8U€j8'“~8ÐsV8U€j8wv8wv8'“~8pz8p.8k°½7œ%–7¯s·èr®¶œ%–7èr®¶ò ¸ò ¸\H¸\¸n‚¸Ðx´¸ˆ+Œ¸ˆ+Œ¸h¬È¸ÉÒ¸n‚¸n‚¸ˆ+Œ¸I;–¸\¸n‚¸n‚¸bª¸h¬È¸d)ñ¸\¸n‚¸4¸\¸ò ¸ò ¸¯s·k°½7"7p.8æU‰8ìd“8ìd“8wv8ìd“8U€j8æU‰8ìd“8ìd“8„ ±8aŠ§8æU‰8,nB8p.8>Ž8U€j8U€j8wv8k°½7,nB8ìd“8aŠ§8ÐsV8ìd“8,nB8aŠ§8'“~8ìd“8wv8aŠ§8aŠ§8ìd“8æU‰8U€j8ìd“8'“~8pz8æU‰8'“~8pz8'“~8ÐsV8p.8œ%–7pz8œ%–7ÔÛÈ·èr®¶”-%·ÔÛÈ·ò ¸4¸ò ¸ö* ¸4¸ˆ+Œ¸ƒM ¸4¸Ðx´¸n‚¸ˆ+Œ¸ƒM ¸n‚¸\¸4¸ò ¸ò ¸ò ¸ÔÛÈ·h¬È¸Ðx´¸I;–¸ ‘¾¸ƒM ¸\¸n‚¸I;–¸ƒM ¸I;–¸bª¸ö* ¸\H¸\¸4¸®>'µ”-%·ÔÛÈ·®>'µR΂6¯s·”-%·ö* ¸¯s·èr®¶®>'µ"7ÇYå7"7Ÿ‚]7ÇYå7Ÿ‚]7pz8>Ž8p.8R΂6pz8'“~8pz8U€j8'“~8pz8ìd“8wv8'“~8aŠ§8'“~8æU‰8p.8ÐsV8wv8U€j8ÐsV8aŠ§8ÓÅ8pz8p.8,nB8pz8U€j8wv8,nB8p.8U€j8p.8R΂6R΂6Ÿ‚]7œ%–7”-%·ÔÛÈ·ò ¸ö* ¸ÆŒð·®>'µö* ¸ö* ¸ÂG¡·ÆŒð·ÔÛÈ·n‚¸4¸Z(p¸\¸\H¸n‚¸n‚¸n‚¸h¬È¸ˆ+Œ¸h¬È¸bª¸ˆ+Œ¸I;–¸ÉÒ¸ÉÒ¸n‚¸n‚¸ ‘¾¸n‚¸n‚¸n‚¸4¸\H¸ÔÛÈ·”-%·\H¸\H¸Ÿ‚]7ò ¸ÔÛÈ·ÂG¡·®>'µœ%–7œ%–7ÔÛÈ·ÇYå7,nB8œ%–7œ%–7ÇYå7®>'µpz8Ÿ‚]7œ%–7,nB8k°½7>Ž8p.8pz8'“~8'“~8„ ±8ÐsV8pz8'“~8æU‰8p.8p.8wv8U€j8ìd“8ìd“8ø»8ÓÅ8 Ú8ø»8 Ú8ìd“8º,ä8aŠ§8 Ú8aŠ§8œ]9œ]9ÓÅ8„ ±8aŠ§8@q 9 Nî8ÓÅ8ÓÅ8ÓÅ8'“~8U€j8ìd“8p.8,nB8R΂6èr®¶œ%–7pz8k°½7®>'µŸ‚]7ÂG¡·®>'µ"7¯s·ÂG¡·Ÿ‚]7ÂG¡·\H¸ÂG¡·n‚¸ÉÒ¸ ‘¾¸ÉÒ¸h¬È¸ˆ+Œ¸4¸n‚¸ò ¸ÆŒð·ÔÛÈ·ÆŒð·ÔÛÈ·ÔÛÈ·ÔÛÈ·ÔÛÈ·ÆŒð·4¸\H¸I;–¸\¸ö* ¸ò ¸ˆ+Œ¸n‚¸n‚¸ˆ+Œ¸I;–¸Ðx´¸I;–¸bª¸\¸\¸ÔÛÈ·4¸ò ¸ÆŒð·èr®¶k°½7ÇYå7>Ž8"7p.8ÐsV8Ÿ‚]7ÇYå7ÇYå7R΂6”-%·R΂6èr®¶èr®¶®>'µŸ‚]7®>'µ¯s·ÔÛÈ·èr®¶pz8®>'µÂG¡·®>'µR΂6èr®¶¯s·ÂG¡·ÂG¡·ÆŒð·èr®¶ÆŒð·\¸\H¸\¸\H¸ÔÛÈ·\¸ö* ¸ÆŒð·ÔÛÈ·ÆŒð·Ðx´¸I;–¸Z(p¸ ‘¾¸ ‘¾¸~çܸé˹ ç¸h¬È¸ˆ+Œ¸n‚¸~çܸÐx´¸n‚¸bª¸ÉÒ¸Ðx´¸I;–¸ˆ+Œ¸ ‘¾¸Æ¸¹·Lû¸Ðx´¸¾ß ¹d)ñ¸Ðx´¸ÉÒ¸ÉÒ¸ÉÒ¸h¬È¸ƒM ¸n‚¸\¸n‚¸\H¸ö* ¸\H¸ÔÛÈ·4¸ò ¸4¸ö* ¸ÂG¡·®>'µ¯s·èr®¶¯s·®>'µÂG¡·"7R΂6”-%·R΂6Ÿ‚]7pz8k°½7pz8®>'µŸ‚]7ÐsV8pz8p.8'“~8pz8p.8>Ž8p.8pz8>Ž8wv8ø»8U€j8ÇYå7pz8pz8æU‰8p.8ø»8ø»8æU‰8U€j8ø»8º,ä8ìd“8æU‰8æU‰8'“~8pz8'“~8ÇYå7p.8U€j8U€j8'“~8pz8ÇYå7p.8R΂6"7"7Ÿ‚]7®>'µÂG¡·¯s·ö* ¸ò ¸ö* ¸ÔÛÈ·ò ¸I;–¸n‚¸n‚¸n‚¸ƒM ¸h¬È¸ƒM ¸4¸n‚¸\¸\¸Ðx´¸ÉÒ¸~çܸI;–¸ƒM ¸ ç¸\H¸ƒM ¸h¬È¸ò ¸4¸4¸ÆŒð·\H¸¯s·¯s·k°½7Ÿ‚]7p.8œ%–7R΂6R΂6k°½7U€j8æU‰8pz8pz8æU‰8p.8ÐsV8'“~8æU‰8ìd“8ø»8wv8„ ±8 Ú8º,ä8¬J9 Ú8 Nî8!ïÏ8º,ä8æU‰8ø»8ø»8wv8aŠ§8º,ä8wv8ø»8„ ±8ÐsV8>Ž8pz8,nB8pz8,nB8k°½7œ%–7pz8k°½7Ÿ‚]7Ÿ‚]7R΂6Ÿ‚]7èr®¶Ÿ‚]7¯s·ÂG¡·ÂG¡·”-%·ÔÛÈ·ö* ¸ÆŒð·ò ¸\¸4¸ˆ+Œ¸I;–¸n‚¸ˆ+Œ¸ˆ+Œ¸ˆ+Œ¸I;–¸ˆ+Œ¸ƒM ¸ ‘¾¸ƒM ¸h¬È¸ ç¸~çܸƒM ¸Ðx´¸bª¸Ðx´¸bª¸ ‘¾¸d)ñ¸h¬È¸h¬È¸h¬È¸ ç¸é˹é˹Ƹ¹d)ñ¸·Lû¸é˹é˹~çܸh¬È¸ƒM ¸ ‘¾¸ˆ+Œ¸I;–¸Ðx´¸4¸ÆŒð·\¸\¸ò ¸ö* ¸ö* ¸ÂG¡·èr®¶èr®¶"7¯s·Ÿ‚]7Ÿ‚]7¯s·Ÿ‚]7èr®¶èr®¶ÆŒð·ö* ¸ò ¸ò ¸”-%·”-%·ÔÛÈ·¯s·ÔÛÈ·ö* ¸®>'µR΂6"7ÂG¡·R΂6R΂6¯s·¯s·®>'µ®>'µ”-%·®>'µœ%–7œ%–7R΂6"7œ%–7¯s·R΂6Ÿ‚]7R΂6pz8ÇYå7Ÿ‚]7®>'µ®>'µ®>'µœ%–7Ÿ‚]7¯s·ö* ¸”-%·ÔÛÈ·ö* ¸èr®¶œ%–7®>'µh¬È¸4¸èr®¶ò ¸"7èr®¶”-%·®>'µèr®¶Ÿ‚]7”-%·Ÿ‚]7k°½7Ÿ‚]7Ÿ‚]7"7ìd“8pz8U€j8ìd“8pz8wv8ø»8'“~8U€j8p.8wv8„ ±8wv8 Nî8 Ú8ø»8 Ú8 Nî8wv8U€j8U€j8aŠ§8ø»8 Nî8„ ±8ìd“8„ ±8æU‰8'“~8wv8'“~8U€j8wv8'“~8pz8ÐsV8p.8U€j8ø»8'“~8æU‰8 Ú8'“~8ÓÅ8º,ä8 Nî8 Ú8„ ±8º,ä8wv8U€j8'“~8wv8æU‰8>Ž8æU‰8ø»8„ ±8æU‰8ø»8pz8pz8>Ž8p.8p.8U€j8œ%–7pz8R΂6œ%–7pz8'“~8p.8ÇYå7p.8,nB8ÐsV8ÇYå7œ%–7R΂6®>'µÂG¡·”-%·ö* ¸ÂG¡·R΂6>Ž8p.8ÇYå7'“~8ìd“8,nB8æU‰8wv8 Ú8ÓÅ8ÓÅ8aŠ§8¬J9œ]9º,ä8œ]9Šš9@q 9 Nî8 Nî8îpø8@q 9îpø8‘…9œ]9 Nî8‘…9 Ú8º,ä8‘…9‘…9/Ý$9Šš9Šš9‘…9ˆ /9îpø8º,ä8Šš9Šš9/Ý$9&°9&°9^Æ9%49‘…9^Æ9îpø8@q 9‘…9º,ä8 Nî8º,ä8!ïÏ8ÓÅ8wv8aŠ§8'“~8æU‰8,nB8ÐsV8ÐsV8k°½7pz8>Ž8ÇYå7œ%–7"7ÆŒð·œ%–7R΂6®>'µR΂6ÔÛÈ·ÔÛÈ·¯s·¯s·ÂG¡·ÆŒð·ÂG¡·¯s·ÂG¡·”-%·èr®¶”-%·"7ÇYå7k°½7èr®¶¯s·ÔÛÈ·R΂6®>'µ®>'µk°½7œ%–7ÂG¡·Ÿ‚]7R΂6ÔÛÈ·ÂG¡·”-%·èr®¶¯s·R΂6R΂6ÂG¡·p.8ÇYå7pz8k°½7pz8pz8pz8æU‰8,nB8>Ž8,nB8ìd“8 Nî8!ïÏ8ÓÅ8îpø8ÓÅ8¬J9ø»8æU‰8ÓÅ8ø»8p.8'“~8„ ±8„ ±8ø»8ø»8wv8„ ±8ìd“8ìd“8æU‰8U€j8'“~8ìd“8ø»8æU‰8ø»8 Ú8„ ±8aŠ§8„ ±8º,ä8aŠ§8!ïÏ8wv8aŠ§8ìd“8ìd“8'“~8'“~8U€j8p.8pz8Ÿ‚]7®>'µŸ‚]7¯s·¯s·"7”-%·èr®¶ÔÛÈ·ö* ¸ƒM ¸ ‘¾¸I;–¸ ‘¾¸ ‘¾¸\¸ƒM ¸\H¸n‚¸ˆ+Œ¸n‚¸n‚¸ˆ+Œ¸ƒM ¸n‚¸I;–¸n‚¸\H¸4¸ÔÛÈ·¯s·ÆŒð·ÆŒð·ÆŒð·\H¸\H¸ö* ¸ÆŒð·ÂG¡·”-%·"7R΂6®>'µ"7œ%–7®>'µÇYå7pz8>Ž8ìd“8wv8æU‰8U€j8ìd“8æU‰8pz8Ÿ‚]7p.8Ÿ‚]7èr®¶k°½7,nB8U€j8ìd“8'“~8ÐsV8ÐsV8p.8'“~8p.8,nB8U€j8wv8aŠ§8ÓÅ8ÐsV8ÓÅ8aŠ§8aŠ§8p.8æU‰8æU‰8wv8'“~8æU‰8pz8ÇYå7ÇYå7"7R΂6pz8æU‰8aŠ§8p.8"7®>'µR΂6ÇYå7œ%–7®>'µ®>'µ¯s·”-%·ÆŒð·"7"7R΂6ÂG¡·ÆŒð·4¸ÆŒð·4¸n‚¸ÆŒð·ò ¸ÆŒð·\H¸ö* ¸ÆŒð·ÔÛÈ·”-%·k°½7ÐsV8k°½7®>'µ®>'µÆŒð·¯s·R΂6®>'µk°½7k°½7”-%·œ%–7>Ž8ÐsV8pz8U€j8æU‰8ÇYå7p.8Ÿ‚]7®>'µpz8œ%–7Ÿ‚]7èr®¶®>'µèr®¶pz8ÇYå7pz8ÇYå7ÇYå7k°½7èr®¶"7ÐsV8pz8>Ž8,nB8ÇYå7ÇYå7"7ÇYå7p.8Ÿ‚]7U€j8,nB8U€j8œ%–7ÇYå7æU‰8U€j8æU‰8U€j8pz8U€j8"7k°½7ÇYå7k°½7"7,nB8'“~8p.8k°½7,nB8p.8>Ž8ÐsV8p.8R΂6¯s·R΂6R΂6ÔÛÈ·®>'µÔÛÈ·ò ¸ÆŒð·\H¸4¸¯s·®>'µ”-%·ÆŒð·”-%·®>'µèr®¶ö* ¸ÆŒð·”-%·ÔÛÈ·¯s·ÂG¡·ÆŒð·”-%·”-%·ÐsV8R΂6¯s·®>'µ¯s·èr®¶ÆŒð·"7ÇYå7R΂6Ÿ‚]7p.8èr®¶>Ž8k°½7œ%–7ÇYå7U€j8p.8,nB8ÐsV8ìd“8ìd“8pz8U€j8,nB8aŠ§8æU‰8U€j8ÓÅ8ìd“8pz8ìd“8æU‰8'“~8,nB8pz8,nB8ÇYå7”-%·k°½7"7œ%–7k°½7pz8"7ÔÛÈ·”-%·ÔÛÈ·ÔÛÈ·R΂6¯s·\H¸¯s·¯s·ÆŒð·ÔÛÈ·¯s·¯s·¯s·ÆŒð·ÂG¡·ÂG¡·ÔÛÈ·ö* ¸\H¸Z(p¸ò ¸ò ¸ò ¸I;–¸4¸\H¸n‚¸I;–¸ ‘¾¸h¬È¸h¬È¸ ‘¾¸Ðx´¸ˆ+Œ¸Ðx´¸ ‘¾¸ƒM ¸ ‘¾¸bª¸\¸ ‘¾¸n‚¸n‚¸Ðx´¸Ðx´¸ÉÒ¸bª¸h¬È¸ƒM ¸h¬È¸bª¸Ðx´¸h¬È¸ÉÒ¸Ðx´¸Z(p¸Z(p¸ˆ+Œ¸ÂG¡·4¸I;–¸ò ¸\H¸4¸4¸ˆ+Œ¸Z(p¸ò ¸ÔÛÈ·R΂6ÔÛÈ·®>'µèr®¶”-%·œ%–7,nB8æU‰8p.8aŠ§8ìd“8wv8aŠ§8ìd“8,nB8,nB8p.8'“~8'“~8U€j8p.8>Ž8k°½7p.8U€j8'“~8ÇYå7ÇYå7p.8R΂6èr®¶ÇYå7"7p.8k°½7Ÿ‚]7”-%·èr®¶ÂG¡·Z(p¸\H¸ö* ¸\¸Ðx´¸bª¸n‚¸ƒM ¸bª¸Ðx´¸ ‘¾¸Ðx´¸ƒM ¸bª¸ˆ+Œ¸~çܸ~çܸ ‘¾¸Ðx´¸\¸\¸Z(p¸ÂG¡·ö* ¸ƒM ¸Ðx´¸\¸ö* ¸\¸I;–¸bª¸\H¸\H¸n‚¸\¸4¸ÆŒð·\¸\¸\¸ò ¸¯s·ÔÛÈ·ÂG¡·œ%–7ÂG¡·R΂6ÇYå7p.8>Ž8ÇYå7ÇYå7ÐsV8'“~8U€j8'“~8æU‰8wv8ìd“8„ ±8ø»8U€j8U€j8ø»8ÓÅ8¬J9!ïÏ8 Ú8„ ±8'“~8ìd“8wv8aŠ§8aŠ§8aŠ§8wv8aŠ§8¬J9 Nî8º,ä8º,ä8ø»8ìd“8U€j8,nB8'“~8U€j8pz8pz8>Ž8p.8>Ž8p.8p.8,nB8>Ž8Ÿ‚]7”-%·Ÿ‚]7k°½7R΂6”-%·ò ¸ÂG¡·ÔÛÈ·ò ¸ÔÛÈ·¯s·ÔÛÈ·ÆŒð·ÂG¡·ö* ¸ò ¸ÆŒð·ö* ¸ÂG¡·ö* ¸¯s·”-%·ÂG¡·ÆŒð·ò ¸ÔÛÈ·¯s·R΂6¯s·œ%–7Ÿ‚]7®>'µpz8œ%–7Ÿ‚]7k°½7"7k°½7>Ž8k°½7Ÿ‚]7Ÿ‚]7k°½7>Ž8R΂6œ%–7”-%·èr®¶Ÿ‚]7p.8ÇYå7>Ž8>Ž8pz8pz8k°½7ìd“8„ ±8,nB8ÐsV8„ ±8,nB8,nB8>Ž8ÇYå7'“~8>Ž8pz8U€j8æU‰8'“~8p.8U€j8>Ž8>Ž8k°½7pz8œ%–7œ%–7œ%–7pz8®>'µÂG¡·¯s·¯s·¯s·ö* ¸ò ¸\H¸ö* ¸n‚¸4¸n‚¸ö* ¸4¸ÔÛÈ·ÂG¡·\¸n‚¸n‚¸ò ¸4¸ÆŒð·Z(p¸ÆŒð·ö* ¸n‚¸\¸4¸\¸4¸\¸ö* ¸ÔÛÈ·ÔÛÈ·ÔÛÈ·ÆŒð·4¸n‚¸ÆŒð·ò ¸ÆŒð·ö* ¸ö* ¸¯s·ö* ¸¯s·èr®¶ÔÛÈ·pz8ÇYå7'“~8aŠ§8,nB8ÐsV8>Ž8U€j8wv8U€j8æU‰8wv8„ ±8ø»8U€j8º,ä8ø»8„ ±8æU‰8wv8ø»8!ïÏ8ø»8ìd“8º,ä8º,ä8¬J9 Ú8wv8wv8ÓÅ8wv8ìd“8U€j8æU‰8ÐsV8U€j8,nB8>Ž8ÐsV8p.8k°½7R΂6èr®¶èr®¶èr®¶ÔÛÈ·ÔÛÈ·ò ¸ÂG¡·”-%·ÆŒð·”-%·ÔÛÈ·¯s·ö* ¸ö* ¸Z(p¸bª¸n‚¸n‚¸ÆŒð·ÔÛÈ·n‚¸n‚¸ö* ¸ƒM ¸ƒM ¸ƒM ¸ˆ+Œ¸n‚¸ò ¸\¸I;–¸ö* ¸n‚¸\¸4¸4¸ö* ¸\H¸n‚¸n‚¸ÔÛÈ·ÔÛÈ·ö* ¸ÂG¡·¯s·"7Ÿ‚]7ÐsV8pz8ÇYå7'“~8,nB8k°½7ÇYå7pz8ÇYå7Ÿ‚]7"7Ÿ‚]7ÇYå7,nB8ÐsV8>Ž8p.8U€j8'“~8'“~8k°½7pz8R΂6®>'µŸ‚]7œ%–7R΂6U€j8U€j8ÐsV8'“~8ÐsV8Ÿ‚]7p.8pz8ÐsV8'“~8pz8>Ž8U€j8>Ž8p.8pz8pz8ÇYå7ÐsV8ÇYå7U€j8>Ž8pz8ÐsV8ÇYå7ÇYå7U€j8,nB8ìd“8ìd“8,nB8U€j8>Ž8ÐsV8p.8œ%–7p.8"7œ%–7pz8æU‰8>Ž8U€j8œ%–7k°½7œ%–7pz8R΂6èr®¶®>'µÔÛÈ·ÔÛÈ·ö* ¸®>'µ®>'µÂG¡·ÆŒð·ÔÛÈ·ÆŒð·n‚¸ ‘¾¸ˆ+Œ¸bª¸4¸ÆŒð·n‚¸n‚¸4¸4¸\H¸n‚¸4¸ÆŒð·4¸4¸"7ÆŒð·ÆŒð·”-%·”-%·R΂6èr®¶®>'µÇYå7pz8>Ž8œ%–7ÇYå7ÔÛÈ·èr®¶R΂6"7ÇYå7Ÿ‚]7®>'µ®>'µ”-%·>Ž8>Ž8p.8U€j8pz8ÇYå7Ÿ‚]7k°½7æU‰8ÐsV8U€j8>Ž8'“~8ìd“8ìd“8>Ž8ÐsV8ìd“8U€j8p.8ìd“8ÐsV8pz8R΂6"7R΂6R΂6èr®¶®>'µÂG¡·ÂG¡·èr®¶”-%·ÔÛÈ·®>'µÆŒð·ò ¸ˆ+Œ¸\H¸n‚¸ƒM ¸h¬È¸ÉÒ¸ˆ+Œ¸ˆ+Œ¸n‚¸I;–¸I;–¸ ç¸bª¸ ‘¾¸Ðx´¸bª¸ ç¸Æ¸¹·Lû¸ ç¸d)ñ¸@ô¹ ‘¾¸ ç¸Æ¸¹~çܸ ‘¾¸Ðx´¸ ‘¾¸h¬È¸h¬È¸ˆ+Œ¸ò ¸ˆ+Œ¸bª¸ˆ+Œ¸\¸Z(p¸ö* ¸n‚¸ÔÛÈ·”-%·èr®¶¯s·ö* ¸"7”-%·ÂG¡·R΂6®>'µèr®¶ÔÛÈ·ÂG¡·ÂG¡·ö* ¸ÔÛÈ·k°½7"7R΂6œ%–7¯s·¯s·"7Ÿ‚]7èr®¶¯s·"7"7”-%·"7R΂6œ%–7Ÿ‚]7Ÿ‚]7R΂6>Ž8®>'µ”-%·ÆŒð·ÆŒð·ÂG¡·ÔÛÈ·ÂG¡·ÆŒð·\H¸4¸ò ¸\¸ö* ¸ÔÛÈ·ÆŒð·4¸ÂG¡·4¸ö* ¸Z(p¸ƒM ¸ƒM ¸~çܸÉÒ¸~çܸ ‘¾¸Ðx´¸Ðx´¸ ‘¾¸Ðx´¸I;–¸n‚¸Ðx´¸ÉÒ¸n‚¸\H¸n‚¸4¸ˆ+Œ¸ ‘¾¸I;–¸n‚¸bª¸ˆ+Œ¸ò ¸n‚¸Ðx´¸Ðx´¸ö* ¸”-%·ÆŒð·èr®¶ÂG¡·ÆŒð·n‚¸4¸\¸ÂG¡·ò ¸ÔÛÈ·ÔÛÈ·èr®¶®>'µŸ‚]7èr®¶ÔÛÈ·”-%·Ÿ‚]7R΂6ÔÛÈ·Ÿ‚]7"7”-%·”-%·ÔÛÈ·4¸¯s·n‚¸ö* ¸\H¸ö* ¸ö* ¸\H¸ÔÛÈ·ö* ¸®>'µR΂6¯s·ÂG¡·¯s·¯s·®>'µèr®¶ÂG¡·ÆŒð·”-%·R΂6¯s·¯s·ö* ¸ÔÛÈ·”-%·ö* ¸\H¸4¸ö* ¸ö* ¸ÂG¡·ÂG¡·ÔÛÈ·\H¸ò ¸”-%·”-%·œ%–7èr®¶”-%·®>'µ®>'µ¯s·4¸¯s·ÂG¡·ÔÛÈ·ÔÛÈ·”-%·èr®¶\H¸ö* ¸ÆŒð·ÔÛÈ·ÆŒð·ÂG¡·ÔÛÈ·ÔÛÈ·ÂG¡·”-%·èr®¶Ÿ‚]7"7R΂6èr®¶”-%·"7R΂6>Ž8”-%·¯s·”-%·Ÿ‚]7R΂6"7Ÿ‚]7pz8èr®¶R΂6®>'µk°½7œ%–7Ÿ‚]7"7œ%–7Ÿ‚]7pz8>Ž8pz8'“~8>Ž8Ÿ‚]7pz8k°½7ÇYå7>Ž8U€j8èr®¶”-%·R΂6”-%·ÂG¡·®>'µèr®¶èr®¶>Ž8œ%–7Ÿ‚]7ÇYå7®>'µ>Ž8>Ž8R΂6pz8ÇYå7R΂6"7R΂6k°½7ÇYå7,nB8k°½7p.8,nB8Ÿ‚]7œ%–7>Ž8ÇYå7R΂6œ%–7èr®¶œ%–7k°½7pz8>Ž8®>'µk°½7¯s·ÂG¡·èr®¶ÂG¡·ÔÛÈ·¯s·ÔÛÈ·ÆŒð·¯s·ö* ¸”-%·ÔÛÈ·ÔÛÈ·èr®¶œ%–7"7k°½7pz8p.8>Ž8®>'µ>Ž8pz8ÇYå7'“~8pz8p.8>Ž8ÇYå7œ%–7>Ž8k°½7>Ž8ÐsV8U€j8,nB8U€j8ÐsV8'“~8'“~8U€j8aŠ§8!ïÏ8º,ä8ø»8œ]9º,ä8º,ä8aŠ§8wv8ø»8wv8ìd“8ìd“8wv8U€j8ìd“8pz8pz8p.8'“~8æU‰8!ïÏ8aŠ§8U€j8U€j8ÐsV8,nB8ìd“8aŠ§8'“~8U€j8ÓÅ8ÐsV8ìd“8wv8'“~8ÐsV8'“~8wv8pz8p.8p.8pz8Ÿ‚]7Ÿ‚]7”-%·”-%·ÆŒð·\¸ÂG¡·R΂6R΂6”-%·4¸\H¸ÂG¡·ò ¸n‚¸ÂG¡·ÂG¡·®>'µ¯s·”-%·ö* ¸”-%·®>'µèr®¶ÔÛÈ·ÆŒð·ÔÛÈ·Ÿ‚]7"7®>'µk°½7®>'µk°½7®>'µŸ‚]7pz8wv8U€j8pz8'“~8>Ž8k°½7ÇYå7,nB8,nB8U€j8p.8,nB8,nB8'“~8aŠ§8pz8Ÿ‚]7p.8p.8ÐsV8ÐsV8ÇYå7ìd“8æU‰8wv8U€j8U€j8>Ž8U€j8ÐsV8'“~8aŠ§8æU‰8U€j8º,ä8!ïÏ8ÐsV8æU‰8ÓÅ8„ ±8æU‰8ìd“8ø»8aŠ§8wv8wv8„ ±8wv8„ ±8U€j8,nB8,nB8k°½7,nB8>Ž8pz8pz8ÇYå7œ%–7"7R΂6”-%·èr®¶\H¸ò ¸”-%·R΂6¯s·ò ¸ÂG¡·¯s·ö* ¸Z(p¸®>'µÂG¡·ÆŒð·ÆŒð·\¸ÂG¡·ÂG¡·ÔÛÈ·èr®¶ÂG¡·®>'µ®>'µŸ‚]7¯s·®>'µ”-%·®>'µR΂6œ%–7"7>Ž8R΂6R΂6”-%·"7®>'µ”-%·R΂6"7œ%–7¯s·èr®¶R΂6¯s·ÂG¡·\H¸èr®¶ÂG¡·R΂6ÂG¡·¯s·”-%·ö* ¸ö* ¸ÆŒð·ö* ¸ÂG¡·¯s·¯s·èr®¶”-%·ÆŒð·ÆŒð·ˆ+Œ¸ò ¸ö* ¸\¸\H¸ö* ¸\¸\H¸ˆ+Œ¸ƒM ¸h¬È¸Ðx´¸h¬È¸ ‘¾¸Z(p¸ ‘¾¸Ðx´¸ƒM ¸I;–¸bª¸I;–¸ÉÒ¸d)ñ¸~çܸh¬È¸ƒM ¸h¬È¸Ðx´¸Ðx´¸Ðx´¸Ðx´¸n‚¸Æ¸¹¾ß ¹~çܸƸ¹d)ñ¸¾ß ¹L&¹“5!¹é˹@ô¹¾ß ¹¾ß ¹d)ñ¸Æ¸¹@ô¹·Lû¸ÉÒ¸ÉÒ¸Ðx´¸ ‘¾¸ ‘¾¸Æ¸¹ÉÒ¸I;–¸ˆ+Œ¸h¬È¸Z(p¸h¬È¸I;–¸Ðx´¸bª¸bª¸n‚¸n‚¸ ç¸\¸n‚¸Z(p¸\¸n‚¸\H¸ö* ¸I;–¸ÂG¡·I;–¸n‚¸ö* ¸n‚¸ö* ¸ö* ¸ö* ¸\H¸n‚¸\H¸ò ¸ö* ¸\H¸ö* ¸ò ¸ö* ¸ÂG¡·ÆŒð·ö* ¸\H¸\H¸ˆ+Œ¸Ðx´¸~çܸI;–¸\¸~çܸÐx´¸ˆ+Œ¸I;–¸n‚¸bª¸ƒM ¸bª¸ ‘¾¸@ô¹Æ¸¹é˹L&¹“5!¹·Lû¸“5!¹¾ß ¹ ç¸/¹@ô¹@ô¹d)ñ¸ ç¸@ô¹d)ñ¸ ç¸f ¹·Lû¸d)ñ¸~çܸ~çܸd)ñ¸Æ¸¹é˹~çܸƸ¹é˹ ç¸~çܸ ç¸~çܸ·Lû¸Ðx´¸Ðx´¸n‚¸ˆ+Œ¸Ðx´¸ƒM ¸Z(p¸ˆ+Œ¸Z(p¸n‚¸n‚¸ÔÛÈ·ò ¸\H¸ÆŒð·ö* ¸ÆŒð·èr®¶Ÿ‚]7œ%–7ÇYå7Ÿ‚]7èr®¶”-%·œ%–7œ%–7æU‰8>Ž8p.8wv8pz8ÐsV8ìd“8k°½7k°½7,nB8œ%–7k°½7pz8œ%–7œ%–7"7>Ž8U€j8ÐsV8wv8,nB8ÐsV8'“~8aŠ§8'“~8,nB8ÐsV8ìd“8ìd“8æU‰8æU‰8p.8æU‰8U€j8k°½7k°½7®>'µŸ‚]7"7R΂6”-%·ÇYå7¯s·¯s·®>'µ¯s·ÆŒð·ÔÛÈ·ÂG¡·R΂6ÂG¡·ÔÛÈ·ÔÛÈ·4¸¯s·ÔÛÈ·4¸¯s·èr®¶”-%·”-%·R΂6ÇYå7Ÿ‚]7Ÿ‚]7¯s·œ%–7pz8ÐsV8>Ž8U€j8ø»8,nB8ìd“8ìd“8æU‰8æU‰8 Ú8!ïÏ8îpø8¬J9¬J9ÓÅ8!ïÏ8îpø8!ïÏ8@q 9‘…9¬J9îpø8º,ä8îpø8œ]9îpø8¬J9‘…9 Ú8ÓÅ8ø»8îpø8¬J9!ïÏ8 Nî8Šš9¬J9‘…9&°9&°9@q 9‘…9 Nî8œ]9œ]9º,ä8¬J9&°9^Æ9œ]9„ ±8!ïÏ8'“~8wv8U€j8>Ž8æU‰8>Ž8ÐsV8>Ž8p.8,nB8,nB8aŠ§8æU‰8ÐsV8'“~8wv8wv8ìd“8'“~8'“~8ìd“8'“~8'“~8„ ±8aŠ§8ìd“8æU‰8ø»8ìd“8'“~8p.8ìd“8aŠ§8wv8U€j8U€j8,nB8p.8wv8>Ž8ÐsV8,nB8p.8ÇYå7ÐsV8ÐsV8,nB8p.8'“~8œ%–7æU‰8'“~8æU‰8wv8ìd“8'“~8'“~8pz8æU‰8pz8æU‰8'“~8„ ±8 Ú8º,ä8ø»8º,ä8¬J9îpø8º,ä8Šš9îpø8¬J9 Nî8Šš9Šš9œ]9œ]9¬J9œ]9‘…9ˆ /9‘…9‘…9Šš9‘…9¬J9‘…9Šš9&°9@q 9œ]9œ]9 Nî8ø»8ø»8º,ä8ø»8!ïÏ8aŠ§8ìd“8ÐsV8U€j8,nB8k°½7p.8>Ž8p.8ÐsV8æU‰8æU‰8wv8U€j8æU‰8,nB8wv8ìd“8wv8aŠ§8wv8ø»8!ïÏ8!ïÏ8„ ±8wv8ÓÅ8U€j8ÓÅ8æU‰8„ ±8aŠ§8!ïÏ8ÐsV8U€j8ÐsV8p.8'“~8ÐsV8'“~8aŠ§8„ ±8aŠ§8ÐsV8ÓÅ8îpø8!ïÏ8ÓÅ8º,ä8 Nî8ÓÅ8º,ä8‘…9 Nî8@q 9 Nî8îpø8ø»8!ïÏ8º,ä8œ]9‘…9¬J9Šš9ÓÅ8îpø8Šš9œ]9¬J9^Æ9@q 9^Æ9ˆ /9Šš9^Æ9&°9@q 9¬J9/Ý$9Šš9‘…9&°9‘…9 Ú8 Ú8îpø8œ]9œ]9º,ä8 Nî8œ]9œ]9îpø8!ïÏ8@q 9îpø8„ ±8ø»8ø»8aŠ§8wv8 Ú8!ïÏ8 Nî8ø»8'“~8æU‰8ìd“8æU‰8Ÿ‚]7>Ž8Ÿ‚]7k°½7Ÿ‚]7ÇYå7Ÿ‚]7Ÿ‚]7¯s·"7ÇYå7¯s·®>'µÆŒð·ò ¸ÔÛÈ·4¸ÂG¡·ÂG¡·®>'µ"7pz8>Ž8k°½7'“~8k°½7p.8ÇYå7"7ÇYå7>Ž8,nB8ø»8,nB8ÓÅ8ÐsV8,nB8pz8pz8>Ž8p.8k°½7,nB8œ%–7>Ž8p.8aŠ§8wv8º,ä8@q 9 Ú8„ ±8„ ±8!ïÏ8 Ú8º,ä8º,ä8@q 9 Ú8œ]9 Ú8ÓÅ8 Nî8&°9^Æ9ˆ /9‘…9&°9–W>9^Æ9“ô)9/Ý$9œ]9îpø8º,ä8ÓÅ8wv8ìd“8wv8p.8æU‰8wv8p.8wv8p.8wv8,nB8ìd“8aŠ§8k°½7"7®>'µœ%–7k°½7èr®¶”-%·”-%·ÂG¡·¯s·\H¸¯s·œ%–7"7k°½7k°½7Ÿ‚]7Ÿ‚]7èr®¶®>'µ"7œ%–7"7k°½7pz8œ%–7ÇYå7>Ž8,nB8'“~8!ïÏ8ìd“8ø»8ø»8„ ±8!ïÏ8ÓÅ8º,ä8aŠ§8ìd“8ÓÅ8ÓÅ8îpø8º,ä8¬J9¬J9&°9‘…9Šš9@q 9œ]9œ]9‘…9 >99œ]9¬J9^Æ9&°9œ]9œ]9^Æ9œ]9œ]9îpø8&°9œ]9 Nî8îpø8„ ±8!ïÏ8îpø8 Ú8ø»8U€j8ìd“8U€j8ÐsV8æU‰8œ%–7R΂6pz8p.8,nB8ÇYå7pz8>Ž8"7k°½7>Ž8Ÿ‚]7'“~8ÐsV8ÐsV8k°½7R΂6R΂6®>'µèr®¶®>'µ"7œ%–7,nB8p.8ÐsV8ìd“8k°½7ÇYå7ÇYå7k°½7ÇYå7R΂6R΂6”-%·®>'µŸ‚]7ÇYå7pz8œ%–7"7"7®>'µ"7ÇYå7”-%·n‚¸\H¸ÔÛÈ·ÔÛÈ·ò ¸ÔÛÈ·"7p.8R΂6œ%–7®>'µR΂6"7R΂6”-%·®>'µœ%–7ÇYå7èr®¶"7k°½7pz8U€j8"7Ÿ‚]7œ%–7ö* ¸Ÿ‚]7k°½7"7èr®¶"7R΂6k°½7Ÿ‚]7Ÿ‚]7>Ž8R΂6Ÿ‚]7œ%–7ÂG¡·ò ¸ÂG¡·ÂG¡·ÂG¡·ÔÛÈ·ÂG¡·n‚¸ÆŒð·n‚¸\H¸\¸n‚¸\H¸I;–¸n‚¸ò ¸\H¸4¸ÂG¡·ö* ¸4¸ƒM ¸Ðx´¸ƒM ¸n‚¸Ðx´¸Ðx´¸ˆ+Œ¸Ðx´¸ƒM ¸ ‘¾¸~çܸ·Lû¸L&¹Æ¸¹ÉÒ¸ ‘¾¸~çܸ~çܸƸ¹~çܸd)ñ¸·Lû¸ ç¸é˹Ƹ¹ÉÒ¸d)ñ¸é˹é˹ ç¸~çܸé˹d)ñ¸¾ß ¹ÉÒ¸I;–¸n‚¸n‚¸n‚¸ˆ+Œ¸ƒM ¸n‚¸·Lû¸ ‘¾¸ ‘¾¸n‚¸h¬È¸Ðx´¸ ç¸ÉÒ¸ƒM ¸ˆ+Œ¸n‚¸I;–¸ÉÒ¸h¬È¸ˆ+Œ¸bª¸I;–¸Ðx´¸ ‘¾¸Æ¸¹¾ß ¹·Lû¸d)ñ¸h¬È¸Æ¸¹f ¹L&¹/¹L&¹¶Ç?¹¶Ç?¹@ô¹L&¹d+¹®:¹Ü”5¹®:¹Ü”5¹åáD¹d+¹d+¹®:¹/¹L&¹L&¹@ô¹@ô¹/¹“5!¹®:¹L&¹f ¹³O¹[OY¹¦h¹R?†¹ âr¹›x¹ âr¹ âr¹í_‹¹J¯ƒ¹}¹R?†¹p¹J¯ƒ¹í_‹¹8¹J¯ƒ¹Çˆc¹¦h¹áÃm¹p¹‰Ïˆ¹8¹í_‹¹“¹h4˜¹“¹h4˜¹h4˜¹}ð¹‰Ïˆ¹}ð¹TW¹.£•¹‰Ïˆ¹R?†¹p¹‰Ïˆ¹J¯ƒ¹›x¹›x¹³O¹áÃm¹³O¹üI¹Ü”5¹Ü”5¹/¹Ü”5¹6|0¹åáD¹®:¹Ü”5¹Ü”5¹6|0¹¶Ç?¹³O¹Úk^¹®:¹³O¹üI¹[OY¹M3T¹Úk^¹ âr¹Çˆc¹ âr¹‰Ïˆ¹}ð¹J¯ƒ¹}¹Çˆc¹‰Ïˆ¹‰Ïˆ¹J¯ƒ¹›x¹ âr¹J¯ƒ¹}¹J¯ƒ¹áÃm¹R?†¹R?†¹R?†¹Çˆc¹›x¹p¹8¹8¹¦h¹Çˆc¹ âr¹}¹R?†¹ âr¹¦h¹áÃm¹¦h¹}¹p¹í_‹¹R?†¹J¯ƒ¹›x¹}¹ âr¹8¹R?†¹R?†¹ âr¹R?†¹¦h¹áÃm¹p¹p¹}¹J¯ƒ¹›x¹‰Ïˆ¹‰Ïˆ¹í_‹¹R?†¹J¯ƒ¹}¹áÃm¹M3T¹[OY¹¶Ç?¹³O¹¦h¹M3T¹L&¹f ¹·Lû¸d)ñ¸¾ß ¹ƒM ¸Ðx´¸n‚¸\H¸\H¸ö* ¸4¸ÔÛÈ·\H¸\H¸ò ¸”-%·”-%·®>'µ¯s·ò ¸ÔÛÈ·ÔÛÈ·”-%·R΂6Ÿ‚]7ÇYå7Ÿ‚]7Ÿ‚]7Ÿ‚]7ÇYå7ÇYå7”-%·>Ž8ÇYå7p.8ÐsV8,nB8„ ±8wv8pz8ìd“8ìd“8ìd“8æU‰8ìd“8wv8>Ž8U€j8p.8pz8wv8ø»8'“~8aŠ§8wv8æU‰8'“~8ÐsV8„ ±8ÓÅ8!ïÏ8„ ±8º,ä8 Ú8'“~8„ ±8ìd“8wv8æU‰8æU‰8ø»8ìd“8„ ±8U€j8U€j8ìd“8pz8p.8k°½7>Ž8U€j8ÐsV8ÐsV8,nB8U€j8'“~8æU‰8¬J9¬J9º,ä8'“~8 Ú8!ïÏ8 Ú8Šš9&°9œ]9œ]9^Æ9‘…9“ô)9^Æ9^Æ9&°9 >99“ô)9^Æ9/Ý$9–W>9Šš9Šš9 >99ˆ /9ˆ /9ˆ /9–W>9ðú\9ðú\9*ŒH9¤ÂR9ù4g9+§M9%49%49–W>9ˆ /9‘…9@q 9/Ý$9ˆ /9œ]9‘…9^Æ9/Ý$9 >99%49^Æ9/Ý$9%49–W>9ˆ /9 >99/Ý$9/Ý$9ˆ /9&°9&°9/Ý$9^Æ9/Ý$9^Æ9¢qC9%49‘…9ˆ /9º,ä8^Æ9œ]9@q 9@q 9îpø8º,ä8Šš9œ]9îpø8!ïÏ8º,ä8@q 9º,ä8 Ú8!ïÏ8º,ä8 Nî8¬J9º,ä8wv8wv8ìd“8 Ú8!ïÏ8 Ú8ÓÅ8îpø8º,ä8 Nî8º,ä8/Ý$9^Æ9&°9%49&°9¬J9%49 >99%49ˆ /9 >99/Ý$9&°9^Æ9œ]9^Æ9Šš9^Æ9œ]9¬J9Šš9‘…9 Nî8Šš9Šš9–W>9œ]9Šš9&°9‘…9/Ý$9^Æ9îpø8–W>9“ô)9œ]9îpø8îpø8/Ý$9Šš9@q 9œ]9‘…9ˆ /9º,ä8^Æ9 Nî8 Ú8@q 9º,ä8 Nî8@q 9 Nî8‘…9îpø8‘…9^Æ9îpø8œ]9/Ý$9‘…9%49¬J9@q 9 Nî8 Nî8º,ä8wv8ÓÅ8 Ú8 Ú8@q 9îpø8îpø8 Nî8 Nî8aŠ§8aŠ§8ìd“8!ïÏ8'“~8p.8œ%–7p.8ÇYå7wv8ø»8ÓÅ8º,ä8ÓÅ8ÓÅ8„ ±8„ ±8aŠ§8 Nî8îpø8º,ä8‘…9Šš9“ô)9ˆ /9“ô)9 >99¢qC9+§M9+§M9*ŒH9¢qC9ô­{9‡ˆ9cö‚9v9ô­{9—f€9b79b79v9b79ߦŠ9ðé”9ëX’9b79ðé”9È9ðé”9›/Ÿ9ëX’9‡ˆ9{—9È9ô­{9ù4g9ߦŠ9—f€9ŸRl9¿b9ªpq9ù4g9¿b9¿b9¤ÂR9’ÞW9¢qC9¢qC9+§M9 >99–W>9&°9‘…9&°9%49^Æ9&°9¬J9@q 9‘…9 Nî8îpø8 Nî8 Ú8ÓÅ8º,ä8œ]9œ]9 Ú8¬J9 Ú8œ]9ø»8îpø8 Nî8 Nî8 Ú8 Nî8œ]9 Nî8îpø8@q 9¬J9îpø8^Æ9‘…9@q 9&°9!ïÏ8‘…9Šš9^Æ9&°9‘…9¢qC9ˆ /9 >99–W>9%49¢qC9–W>9¢qC9*ŒH9 >99+§M9ˆ /9ˆ /9¢qC9/Ý$9 >99–W>9+§M9ù4g9¿b9’ÞW9*ŒH9ðú\9’ÞW9ŸRl9 >99+§M9ô­{9+§M9*ŒH9¤ÂR9¤ÂR9¢qC9 >99–W>9%49ˆ /9ˆ /9‘…9^Æ9/Ý$9&°9%49&°9‘…9Šš9&°9‘…9º,ä8¬J9!ïÏ8îpø8º,ä8ìd“8!ïÏ8wv8ø»8îpø8 Ú8!ïÏ8aŠ§8æU‰8„ ±8æU‰8ÓÅ8aŠ§8'“~8>Ž8>Ž8ÇYå7p.8k°½7U€j8ÐsV8ÇYå7œ%–7"7p.8œ%–7pz8k°½7,nB8k°½7ÐsV8,nB8>Ž8p.8'“~8ìd“8wv8!ïÏ8„ ±8„ ±8aŠ§8ø»8ìd“8ÓÅ8îpø8 Nî8!ïÏ8@q 9œ]9@q 9ÓÅ8 Nî8 Nî8@q 9@q 9¬J9‘…9Šš9œ]9îpø8@q 9¬J9œ]9“ô)9ˆ /9 >99@q 9&°9@q 9œ]9¬J9îpø8ìd“8ø»8'“~8'“~8'“~8ÐsV8pz8U€j8k°½7pz8p.8p.8pz8U€j8æU‰8ÇYå7"7"7èr®¶R΂6èr®¶¯s·ÔÛÈ·ÔÛÈ·¯s·ÔÛÈ·®>'µèr®¶ò ¸ÂG¡·n‚¸n‚¸\H¸I;–¸n‚¸ˆ+Œ¸I;–¸\¸\H¸n‚¸ˆ+Œ¸Z(p¸ˆ+Œ¸ƒM ¸n‚¸n‚¸ò ¸ÆŒð·ò ¸”-%·ö* ¸ò ¸¯s·”-%·k°½7>Ž8pz8U€j8k°½7>Ž8k°½7œ%–7k°½7,nB8œ%–7ÐsV8p.8pz8p.8p.8ÐsV8,nB8ÐsV8U€j8'“~8ìd“8wv8æU‰8'“~8ÐsV8p.8>Ž8,nB8ø»8'“~8„ ±8ø»8aŠ§8aŠ§8wv8!ïÏ8wv8ìd“8'“~8ìd“8>Ž8ÇYå7'“~8ÐsV8ÓÅ8º,ä8wv8ìd“8ø»8'“~8aŠ§8>Ž8pz8p.8k°½7ÇYå7'“~8pz8¯s·R΂6®>'µ¯s·4¸¯s·ÔÛÈ·ÆŒð·\¸ƒM ¸ƒM ¸d)ñ¸h¬È¸ÉÒ¸ ç¸é˹@ô¹h¬È¸¾ß ¹¾ß ¹~çܸd)ñ¸~çܸƒM ¸h¬È¸Ðx´¸ ‘¾¸~çܸÐx´¸ÉÒ¸ƒM ¸bª¸ˆ+Œ¸Ðx´¸ˆ+Œ¸\H¸n‚¸\¸¯s·¯s·ÔÛÈ·ò ¸Z(p¸n‚¸ˆ+Œ¸Ðx´¸\¸ÔÛÈ·n‚¸\H¸ˆ+Œ¸ò ¸4¸ò ¸\H¸ÔÛÈ·R΂6n‚¸ö* ¸”-%·¯s·¯s·èr®¶"7R΂6èr®¶œ%–7®>'µèr®¶R΂6"7”-%·ÔÛÈ·Ÿ‚]7"7ÇYå7”-%·ÔÛÈ·èr®¶R΂6ÆŒð·èr®¶èr®¶”-%·¯s·ÔÛÈ·ÆŒð·4¸4¸ˆ+Œ¸ˆ+Œ¸n‚¸n‚¸ˆ+Œ¸Ðx´¸ƒM ¸Ðx´¸I;–¸ƒM ¸ ‘¾¸~çܸbª¸ÉÒ¸~çܸÉÒ¸~çܸé˹f ¹f ¹f ¹f ¹d+¹~çܸé˹ ‘¾¸Æ¸¹d)ñ¸¾ß ¹Æ¸¹·Lû¸ ‘¾¸ ç¸bª¸ ‘¾¸Ðx´¸I;–¸Ðx´¸4¸Z(p¸ ‘¾¸bª¸ˆ+Œ¸ƒM ¸ˆ+Œ¸ƒM ¸I;–¸n‚¸\¸Ðx´¸ ç¸bª¸bª¸bª¸ƒM ¸n‚¸Ðx´¸ƒM ¸\H¸ƒM ¸\H¸ò ¸Ðx´¸n‚¸ˆ+Œ¸I;–¸4¸ò ¸4¸n‚¸Z(p¸ÆŒð·4¸n‚¸\H¸I;–¸4¸ÂG¡·4¸ÔÛÈ·\H¸”-%·ÆŒð·èr®¶ÆŒð·¯s·ÆŒð·ö* ¸ò ¸ÆŒð·R΂6èr®¶k°½7"7”-%·ÔÛÈ·¯s·ÂG¡·ÂG¡·ö* ¸ÆŒð·n‚¸n‚¸n‚¸ ‘¾¸ÉÒ¸d)ñ¸Æ¸¹d)ñ¸d)ñ¸¾ß ¹L&¹“5!¹L&¹®:¹L&¹6|0¹åáD¹®:¹¦h¹üI¹Úk^¹Úk^¹³O¹Çˆc¹¦h¹M3T¹áÃm¹Çˆc¹Úk^¹M3T¹Çˆc¹¦h¹üI¹Çˆc¹Úk^¹M3T¹¶Ç?¹Ü”5¹Ü”5¹®:¹d+¹Ü”5¹¶Ç?¹L&¹®:¹/¹/¹¾ß ¹Ðx´¸ 縃M ¸I;–¸~çܸbª¸ ‘¾¸L&¹/¹Æ¸¹ 縠縷Lû¸·Lû¸ ç¸Æ¸¹d)ñ¸¾ß ¹ÉÒ¸ÉÒ¸·Lû¸ÉÒ¸ ‘¾¸ ç¸ÉÒ¸~çܸd)ñ¸¾ß ¹é˹Ƹ¹·Lû¸@ô¹“5!¹³O¹¶Ç?¹®:¹6|0¹³O¹¶Ç?¹Úk^¹ âr¹¶Ç?¹M3T¹³O¹[OY¹Çˆc¹M3T¹¦h¹›x¹ âr¹í_‹¹h4˜¹韹鱹h4˜¹ºÃ¬¹K1ª¹Ø{´¹Ó·¹Ý ¥¹ºÃ¬¹ßz¢¹Ÿ§¹Ý ¥¹韹ºÃ¬¹ºÃ¬¹Ÿ§¹Ý ¥¹Ÿ§¹ºÃ¬¹Ó·¹ð¡¹¹ \Á¹.5¼¹K1ª¹ŽÈ¾¹.5¼¹Ÿ§¹Ÿ§¹.£•¹ÊÅš¹Ÿ§¹ÊÅš¹TW¹8¹í_‹¹J¯ƒ¹J¯ƒ¹›x¹R?†¹}¹J¯ƒ¹R?†¹›x¹áÃm¹J¯ƒ¹‰Ïˆ¹R?†¹›x¹áÃm¹¦h¹³O¹Úk^¹L&¹[OY¹Úk^¹d+¹Ü”5¹¶Ç?¹“5!¹®:¹¶Ç?¹åáD¹¶Ç?¹¦h¹Çˆc¹®:¹[OY¹³O¹åáD¹üI¹üI¹M3T¹³O¹üI¹åáD¹®:¹Úk^¹¶Ç?¹M3T¹Ü”5¹åáD¹Ü”5¹üI¹åáD¹}¹›x¹áÃm¹}¹J¯ƒ¹‰Ïˆ¹}¹p¹í_‹¹J¯ƒ¹“¹í_‹¹‰Ïˆ¹‰Ïˆ¹›x¹p¹J¯ƒ¹}¹í_‹¹J¯ƒ¹.£•¹}¹‰Ïˆ¹}ð¹J¯ƒ¹J¯ƒ¹.£•¹‰Ïˆ¹p¹h4˜¹J¯ƒ¹“¹ßz¢¹}ð¹‰Ïˆ¹8¹.£•¹}ð¹}ð¹}ð¹ÊÅš¹8¹J¯ƒ¹ âr¹Úk^¹}¹Çˆc¹áÃm¹Úk^¹¦h¹ âr¹³O¹[OY¹³O¹M3T¹¶Ç?¹üI¹³O¹üI¹åáD¹Ü”5¹d+¹¶Ç?¹6|0¹®:¹åáD¹¶Ç?¹¶Ç?¹L&¹/¹åáD¹6|0¹d+¹Ü”5¹“5!¹6|0¹Ü”5¹®:¹[OY¹6|0¹6|0¹L&¹¾ß ¹d+¹f ¹d+¹f ¹·Lû¸ 縠ç¸f ¹Ü”5¹åáD¹“5!¹Ü”5¹¶Ç?¹6|0¹åáD¹¶Ç?¹d+¹®:¹¶Ç?¹“5!¹¶Ç?¹d+¹®:¹Ü”5¹d+¹6|0¹Úk^¹Ü”5¹Ü”5¹¶Ç?¹6|0¹®:¹6|0¹üI¹L&¹®:¹d+¹Ü”5¹d+¹L&¹Ü”5¹L&¹/¹/¹Æ¸¹/¹~çܸ~çܸd)ñ¸¾ß ¹·Lû¸·Lû¸¾ß ¹@ô¹@ô¹L&¹/¹¾ß ¹·Lû¸ÉÒ¸Ðx´¸n‚¸n‚¸ƒM ¸ ‘¾¸Ðx´¸bª¸ˆ+Œ¸n‚¸\H¸\¸ƒM ¸\H¸ˆ+Œ¸\H¸\¸bª¸n‚¸n‚¸ÆŒð·ÔÛÈ·®>'µèr®¶R΂6®>'µR΂6”-%·R΂6èr®¶¯s·Ÿ‚]7®>'µ"7ÂG¡·èr®¶èr®¶ÔÛÈ·\H¸”-%·"7"7ÔÛÈ·èr®¶ÔÛÈ·ò ¸ÆŒð·ÂG¡·ÆŒð·\H¸¯s·ò ¸ƒM ¸n‚¸ö* ¸¯s·ò ¸ö* ¸ÆŒð·ÔÛÈ·ÆŒð·4¸ÂG¡·ö* ¸ö* ¸\¸ÆŒð·ÆŒð·®>'µö* ¸\H¸\H¸4¸ÔÛÈ·ö* ¸n‚¸ÔÛÈ·4¸ÂG¡·R΂6ÔÛÈ·¯s·¯s·k°½7Ÿ‚]7Ÿ‚]7ÔÛÈ·Ÿ‚]7k°½7ÇYå7k°½7p.8'“~8'“~8„ ±8ø»8!ïÏ8ÓÅ8æU‰8ø»8„ ±8„ ±8ÓÅ8 Ú8º,ä8œ]9!ïÏ8 Ú8!ïÏ8!ïÏ8^Æ9º,ä8¬J9œ]9œ]9‘…9@q 9îpø8„ ±8 Nî8º,ä8ÓÅ8º,ä8 Nî8ÓÅ8!ïÏ8!ïÏ8!ïÏ8 Ú8º,ä8!ïÏ8!ïÏ8wv8'“~8æU‰8,nB8ÐsV8aŠ§8ÓÅ8'“~8º,ä8!ïÏ8„ ±8ø»8ÐsV8U€j8|Pd|1|24600|2013-282T15:32:35.422 È7¦»o8¿ 8à­8à­8o­[8o­[8à­8õ‹8¦»o8¦»o8õ‹8õ‹8ð 8è8õ‹8q+ª8§uÈ8§uÈ8j°9j°9K9;Ä 9$B´8o­[8©°Ü8$B´8Éû8ÂÐæ8§uÈ8§uÈ8$B´8–8õ‹8–8ð 8q+ª8ð 8ñ¥G8ñ¥G8à­8à­8…µï7ñ¥G8¿ 8ñ¥G8o­[8ñ¥G8 È7¥É·»q 7År7¡…#7È*«6¡…#7…µï7i,_·?†¶È*«6?†¶¡…#7”Í 5pû–·pû–·”Í 5”Í 5…µï7È*«6”Í 5”Í 5i,_·¥É·År7”Í 5?†¶NÜ.¸ô†¾·å0æ·ô†¾·pû–·pû–·ô†¾·¡…#7”Í 5…µï7»q 7o­[8¦»o8ñ¥G8ð 8$B´8Éû8©°Ü8ÂÐæ8ÂÐæ8q+ª8}òð8Éû8D’Ò8;Ä 9K9;Ä 9¹Ø9Éû8ú0&9¹Ø9!9…H+9èàI9 +üN9RÆr9)P^9 +üN9)P^9¬3Y9mc9mc9èàI9)P^9iŠh9mc9¬3Y9¢T9*¨m9ßäw9mc9Ï}9ßäw9¬3Y9mc9RÆr9 R‹9RÆr9q1†9*¨m9ßäw9)P^9iŠh9ßäw9mc9¬3Y9*¨m9¬?9@ÆD9¬3Y9…H+9@y59`09!9j°9Ýí9¹Ø9K9j°9ÂÐæ8Éû8ÂÐæ8ÂÐæ8q+ª8è8§uÈ8êZ¾8êZ¾8Éû8ÂÐæ8D’Ò8$B´8õ‹8ñ¥G8õ‹8D’Ò8–8§uÈ8$B´8êZ¾8§uÈ8ð 8§uÈ8q+ª8õ‹8êZ¾8êZ¾8q+ª8©°Ü8}òð8D’Ò8j°9ú0&9¹Ø9Ýí9Ýí9@y59¢9;Ä 9`09`09Ýí9¢9!9@y59`09…H+9èàI9èàI9¬3Y9¢T9ú0&9i’:9¢T9RÆr9RÆr9ßäw9RÆr9RÆr9ßäw9¬3Y9¬3Y9iŠh9¬3Y9)P^9mc9i¡ƒ9‘9iŠh9¢T9@ÆD9*¨m9¬3Y9¬3Y9)P^9Ï}9*¨m9 +üN9!9!9…H+9ú0&9i’:9i’:9¬?9i’:9!9@y59¬?9Ýí9Ýí9¹Ø9¬3Y9@y59ú0&9@y59!9Ýí9;Ä 9Éû8j°9}òð8ÂÐæ8q+ª8è8êZ¾8q+ª8õ‹8D’Ò8êZ¾8q+ª8§uÈ8õ‹8êZ¾8Éû8Éû8j°9©°Ü8§uÈ8q+ª8}òð8§uÈ8ð 8$B´8K9¹Ø9¢9¹Ø9¢9`09K9Éû8Éû8¢9j°9Ýí9Ýí9}òð8}òð8j°9j°9¹Ø9¹Ø9ú0&9…H+9…H+9¢9@y59ú0&9!9!9Ýí9`09!9¹Ø9¢9`09¬?9¢9¢9;Ä 9K9j°9;Ä 9}òð8ÂÐæ8§uÈ8êZ¾8q+ª8õ‹8õ‹8$B´8ñ¥G8à­8à­8…µï7 È7Ò¥38 È7Ò¥38¿ 8o­[8…µï7?†¶¥É·å0æ·?†¶År7i,_·pû–·pû–·i,_·”Í 5”Í 5ô†¾·È*«6¥É·i,_·?†¶pû–·¥É·pû–·»q 7»q 7¦»o8¦»o8o­[8Ò¥38År7 È7»q 7à­8à­8¿ 8…µï7o­[8–8ñ¥G8o­[8$B´8D’Ò8ð 8êZ¾8©°Ü8j°9ÂÐæ8¢9Éû8¢9!9`09Ýí9¹Ø9…H+9 +üN9¬?9`09 +üN9…H+9@y59@ÆD9¬?9i’:9èàI9@y59!9…H+9¹Ø9¢9Ýí9j°9Éû8¹Ø9Éû8}òð8ÂÐæ8ð 8õ‹8ñ¥G8ð 8¦»o8¿ 8 È7õ‹8¿ 8–8–8à­8»q 7År7¥É·¡…#7 È7»q 7?†¶i,_·”Í 5”Í 5ô†¾·¥É·¡…#7”Í 5¥É·ô†¾· ú¸i,_·å0æ·NÜ.¸óÿ~¸-×±¸ãCÚ¸­¸ŒÚB¸óÿ~¸NÜ.¸i,_·ô†¾· ú¸ô†¾·¥É·i,_·uæ¸i,_·i,_·å0æ·È*«6pû–·ô†¾·”Í 5¥É·…µï7”Í 5»q 7¦»o8o­[8¿ 8…µï7Ò¥38o­[8o­[8–8–8õ‹8–8êZ¾8êZ¾8q+ª8õ‹8K9ÂÐæ8}òð8ð 8êZ¾8ñ¥G8§uÈ8ð 8©°Ü8©°Ü8§uÈ8}òð8D’Ò8§uÈ8$B´8o­[8õ‹8–8ð 8q+ª8§uÈ8ð 8o­[8¿ 8¿ 8…µï7¡…#7¡…#7 È7¡…#7»q 7År7¡…#7År7¥É· ú¸å0æ·uæ¸ô†¾·È*«6å0æ·È*«6?†¶ô†¾·uæ¸pû–·¥É·ô†¾·?†¶i,_·År7”Í 5¥É· È7¡…#7È*«6”Í 5?†¶År7ô†¾· ú¸pû–· ú¸ ú¸uæ¸NÜ.¸ ú¸pû–·”Í 5?†¶?†¶…µï7Ò¥38¡…#7Ò¥38è8Ò¥38¦»o8¿ 8è8q+ª8è8–8ð 8–8è8ð 8o­[8¦»o8q+ª8ñ¥G8 È7ñ¥G8¿ 8Ò¥38Ò¥38»q 7¿ 8¿ 8q+ª8è8–8–8ñ¥G8êZ¾8©°Ü8}òð8Éû8$B´8§uÈ8§uÈ8©°Ü8$B´8©°Ü8D’Ò8§uÈ8D’Ò8ð 8o­[8o­[8…µï7 È7»q 7?†¶”Í 5?†¶ŒÚB¸uæ¸NÜ.¸?†¶uæ¸uæ¸uæ¸i,_·uæ¸NÜ.¸óÿ~¸ZŒ‰¸óÿ~¸WàV¸ŒÚB¸uæ¸óÿ~¸ÿìj¸ZŒ‰¸ãCÚ¸n›“¸óÿ~¸­¸ãCÚ¸î„c举 ƸvﻸãCÚ¸-×±¸­¸WàV¸­¸þÀ§¸é%иvﻸZŒ‰¸þÀ§¸­¸WàV¸­¸i,_·i,_· ú¸i,_·¡…#7”Í 5pû–·¡…#7»q 7¡…#7…µï7»q 7à­8ð 8Ò¥38õ‹8Ò¥38o­[8–8o­[8§uÈ8è8ð 8è8ð 8ð 8ñ¥G8–8§uÈ8D’Ò8–8©°Ü8Ò¥38è8ÂÐæ8D’Ò8ð 8è8è8o­[8ñ¥G8¦»o8År7»q 7…µï7ñ¥G8¿ 8 È7¦»o8År7…µï7År7?†¶År7å0æ· ú¸È*«6å0æ·È*«6È*«6ô†¾·å0æ·i,_·ÿìj¸ŒÚB¸­¸-×±¸ÿìj¸ZŒ‰¸ãCÚ¸¾ ƸãCÚ¸î„î¸ãCÚ¸ãCڸŒ ¹y¹ãCÚ¸Âø$¹¡¹ (/¹ (/¹ (/¹Ð§H¹¢@4¹«Y9¹ÔÂM¹8s>¹EC¹ÔÂM¹EC¹ÔÂM¹«Y9¹îṡ¹¡¹ÂŒ ¹²Ë¹²Ë¹²Ë¹y¹²Ë¹ãCÚ¸ãCÚ¸–c両¹&f¹&f¹î„î¸Ú§ø¸é%иþÀ§¸-×±¸­¸WàV¸ÿìj¸WàV¸ ú¸NÜ.¸¥É·i,_·¥É·?†¶È*«6¡…#7¥É·u渡…#7¡…#7ô†¾· ú¸”Í 5È*«6ô†¾·u渌ÚB¸ZŒ‰¸ŒÚB¸ŒÚB¸ŒÚB¸ŒÚB¸ÿìj¸ÿìj¸vﻸڧø¸¾ Ƹóÿ~¸ãCÚ¸î„î¸y¹ÂŒ ¹ãCڸŒ ¹¡¹ÂŒ ¹ (/¹Ú§ø¸ÂŒ ¹²Ë¹î„î¸ÂŒ ¹EC¹îá¹Âø$¹)*¹)*¹ (/¹ (/¹Ð§H¹«Y9¹¢@4¹®Pg¹q3b¹ÔÂM¹EC¹ ]¹«Y9¹8s>¹Vnl¹Vnl¹Vnl¹eŒq¹Ùªv¹²É{¹ ]¹ ]¹ ]¹q3b¹Ð§H¹Ð§H¹¶¹¡¹îá¹ÂŒ ¹y¹Âø$¹&f¹¡¹ãCÚ¸&f¹vﻸ–cä¸þÀ§¸­¸¾ ƸvﻸŒÚB¸óÿ~¸ZŒ‰¸NÜ.¸ ú¸ÿìj¸NÜ.¸WàV¸­¸n›“¸­¸-×±¸ŒÚB¸ZŒ‰¸­¸­¸þÀ§¸ÿìj¸þÀ§¸ÿìj¸ÿìj¸ZŒ‰¸ŒÚB¸WàV¸óÿ~¸óÿ~¸ZŒ‰¸ŒÚB¸uæ¸ ú¸NÜ.¸uæ¸óÿ~¸NÜ.¸ZŒ‰¸­¸vﻸ¾ Ƹ–c丶¹y¹Âø$¹¶¹²Ë¹EC¹8s>¹Ð§H¹8s>¹²Ë¹ÔÂM¹ÔÂM¹EC¹?úW¹8s>¹PÞR¹Vnl¹Ùªv¹²É{¹Ùªv¹Ùªv¹q3b¹Vnl¹Ùªv¹Dƒ¹PÞR¹?úW¹ ]¹vt€¹Vnl¹®Pg¹ ]¹q3b¹²É{¹Ùªv¹®Pg¹ÔÂM¹ÔÂM¹Ð§H¹EC¹8s>¹EC¹¢@4¹¢@4¹¶¹¢@4¹)*¹ (/¹«Y9¹Âø$¹Âø$¹Âø$¹Âø$¹ÂŒ ¹é%и²Ë¹ÂŒ ¹¶¹¢@4¹²Ë¹¶¹ÂŒ ¹ãCÚ¸&f¹¾ Ƹڧø¸î„c丶¹Ú§ø¸y¹ÂŒ ¹²Ë¹¡¹²Ë¹&f¹Ú§ø¸y¹¶¹¢@4¹«Y9¹Âø$¹¶¹¶¹ (/¹«Y9¹Âø$¹8s>¹EC¹)*¹ (/¹«Y9¹¢@4¹Âø$¹«Y9¹Ð§H¹PÞR¹²É{¹8s>¹Vnl¹PÞR¹PÞR¹«Y9¹¢@4¹®Pg¹PÞR¹Vnl¹ÔÂM¹ÔÂM¹EC¹?úW¹ÔÂM¹Ð§H¹PÞR¹ÔÂM¹Ð§H¹Ùªv¹Ùªv¹Vnl¹²É{¹ ]¹²É{¹@”…¹Dƒ¹Ùªv¹?úW¹eŒq¹j$ˆ¹²É{¹q3b¹?úW¹EC¹ (/¹ÔÂM¹ (/¹²Ë¹)*¹îṶ¹²Ë¹¶¹¶¹îṶ¹ÂŒ ¹¡¹ÂŒ ¹Ú§ø¸¡¹ÂŒ ¹ãCÚ¸î„î¸ÂŒ ¹-×±¸¾ Ƹé%и¾ ƸãCÚ¸&f¹î„¸vﻸ¾ Ƹ¾ ƸþÀ§¸ZŒ‰¸-×±¸ÿìj¸vﻸ­¸­¸vﻸ–cä¸vﻸãCÚ¸–cä¸ÂŒ ¹é%иڧø¸¡¹îá¹Ú§ø¸y¹²Ë¹¡¹¶¹¶¹îá¹ (/¹Âø$¹îṡ¹ÔÂM¹?úW¹¢@4¹)*¹y¹)*¹¶¹y¹¢@4¹²Ë¹ÂŒ ¹ÂŒ ¹Âø$¹EC¹¶¹ÂŒ ¹)*¹ÂŒ ¹)*¹²Ë¹Âø$¹¡¹²Ë¹Âø$¹¶¹²Ë¹¶¹²Ë¹ÂŒ ¹)*¹vﻸڧø¸î„˹ڧø¸vﻸvﻸ­¸vﻸZŒ‰¸óÿ~¸ZŒ‰¸NÜ.¸ŒÚB¸uæ¸uæ¸uæ¸i,_·uæ¸uæ¸?†¶uæ¸i,_·?†¶¡…#7”Í 5È*«6pû–·å0æ·?†¶¥É·pû–·ô†¾·i,_·pû–·ô†¾·i,_·?†¶pû–·?†¶¡…#7pû–·ô†¾·”Í 5pû–·»q 7à­8o­[8¡…#7»q 7År7i,_·”Í 5 ú¸u渥ɷŒÚB¸ŒÚB¸ ú¸-×±¸-×±¸ZŒ‰¸ÿìj¸þÀ§¸n›“¸vﻸ­¸þÀ§¸¾ Ƹvﻸé%и-×±¸–cä¸&f¹é%иî„¹y¹ãCÚ¸ãCÚ¸¡¹y¹y¹îá¹ÂŒ ¹&f¹ãCÚ¸¡¹ÂŒ ¹vﻸãCÚ¸y¹¡¹–cä¸y¹vﻸ-×±¸­¸¾ Ƹ­¸ÿìj¸n›“¸­¸­¸WàV¸uæ¸ZŒ‰¸­¸ŒÚB¸¥É·ô†¾·ô†¾·”Í 5¡…#7 È7?†¶i,_·»q 7?†¶År7…µï7”Í 5”Í 5à­8…µï7à­8Ò¥38¥É·pû–·pû–·å0æ·i,_·uæ¸å0æ·”Í 5¡…#7»q 7»q 7È*«6”Í 5NÜ.¸NÜ.¸WàV¸NÜ.¸uæ¸WàV¸ZŒ‰¸WàV¸ÿìj¸ÿìj¸ÿìj¸ZŒ‰¸WàV¸ZŒ‰¸vﻸZŒ‰¸n›“¸é%иŒ ¹y¹¶¹²Ë¹)*¹ (/¹¢@4¹EC¹8s>¹Ð§H¹Ð§H¹îá¹Âø$¹²Ë¹¡¹–c丶¹–cä¸&f¹²Ë¹–cä¸&f¹î„î¸-×±¸–cä¸Ú§ø¸ZŒ‰¸­¸þÀ§¸óÿ~¸–cä¸þÀ§¸u渭¸óÿ~¸å0æ·ô†¾·å0æ·NÜ.¸pû–·ô†¾·pû–·pû–·?†¶¿ 8År7»q 7»q 7ñ¥G8År7År7à­8$B´8ð 8q+ª8êZ¾8–8¦»o8è8ð 8Ò¥38Ò¥38¦»o8–8§uÈ8¦»o8ð 8è8¿ 8¦»o8¦»o8År7¦»o8õ‹8…µï7 È7¿ 8…µï7¡…#7”Í 5¥É·pû–·¥É·pû–·È*«6?†¶ ú¸uæ¸u渌ÚB¸uæ¸ÿìj¸óÿ~¸WàV¸n›“¸ZŒ‰¸þÀ§¸­¸-×±¸­¸-×±¸ÿìj¸vﻸé%иóÿ~¸­¸­¸óÿ~¸­¸þÀ§¸WàV¸ô†¾·ÿìj¸óÿ~¸ŒÚB¸é%и­¸ÿìj¸ŒÚB¸ÿìj¸WàV¸å0æ·ô†¾·¥É·?†¶pû–·ô†¾· ú¸u渥ɷpû–·¡…#7i,_·È*«6År7¿ 8¦»o8…µï7…µï7 È7»q 7År7Ò¥38à­8¦»o8Ò¥38År7…µï7è8ñ¥G8è8ð 8–8êZ¾8ñ¥G8Ò¥38 È7ñ¥G8è8¦»o8¦»o8ñ¥G8Ò¥38Ò¥38à­8År7Ò¥38 È7¡…#7”Í 5 È7År7År7»q 7»q 7o­[8 È7à­8¿ 8¿ 8È*«6”Í 5»q 7¡…#7?†¶År7 ú¸ ú¸È*«6å0æ·ô†¾· ú¸å0æ·NÜ.¸?†¶ È7¿ 8?†¶¥É·È*«6¡…#7ÿìj¸å0æ·ô†¾·?†¶ ú¸?†¶ ú¸ ú¸å0æ·uæ¸ ú¸ô†¾·¥É·i,_·å0æ·pû–· È7”Í 5?†¶…µï7è8o­[8–8¦»o8è8ñ¥G8õ‹8¦»o8è8o­[8¿ 8¿ 8o­[8¦»o8o­[8è8è8ñ¥G8¦»o8–8è8êZ¾8êZ¾8êZ¾8ð 8D’Ò8Éû8D’Ò8©°Ü8ÂÐæ8©°Ü8êZ¾8$B´8õ‹8è8q+ª8$B´8©°Ü8D’Ò8$B´8ð 8–8D’Ò8Éû8©°Ü8}òð8–8êZ¾8è8õ‹8–8õ‹8êZ¾8q+ª8§uÈ8§uÈ8à­8 È7…µï7à­8¿ 8 È7»q 7à­8”Í 5”Í 5à­8 È7…µï7È*«6¥É·År7¡…#7 È7à­8¡…#7È*«6»q 7¥É·¡…#7å0æ·pû–·¥É·uæ¸NÜ.¸uæ¸ ú¸i,_·i,_·å0æ· ú¸”Í 5»q 7»q 7År7…µï7År7Ò¥38¿ 8 È7à­8…µï7à­8à­8…µï7à­8è8¦»o8õ‹8ð 8ð 8§uÈ8D’Ò8Éû8©°Ü8K9K9ÂÐæ8©°Ü8©°Ü8;Ä 9K9Ýí9ÂÐæ8Éû8ÂÐæ8§uÈ8©°Ü8j°9ÂÐæ8}òð8§uÈ8©°Ü8}òð8Éû8D’Ò8K9D’Ò8}òð8ÂÐæ8q+ª8ÂÐæ8$B´8ð 8ð 8è8Ò¥38»q 7o­[8è8Ò¥38à­8»q 7År7»q 7År7”Í 5¥É·¡…#7¡…#7¥É·i,_·pû–·å0æ·i,_·i,_·È*«6È*«6?†¶È*«6i,_·ô†¾·å0æ·å0æ·i,_·¡…#7År7È*«6È*«6È*«6¿ 8 È7à­8Ò¥38¡…#7…µï7Ò¥38è8õ‹8õ‹8$B´8$B´8§uÈ8ÂÐæ8¹Ø9!9Ýí9`09@y59@y59…H+9…H+9ú0&9@ÆD9…H+9@y59i’:9@y59¬?9¬?9…H+9`09i’:9…H+9!9ú0&9…H+9¢9@y59…H+9¢9ú0&9;Ä 9}òð8ú0&9`09@y59!9j°9j°9¹Ø9Éû8$B´8Éû8§uÈ8êZ¾8}òð8q+ª8–8–8¦»o8ñ¥G8õ‹8è8o­[8…µï7¦»o8à­8è8ð 8è8Ò¥38è8ñ¥G8Ò¥38»q 7¡…#7¥É·i,_·”Í 5»q 7 È7ñ¥G8à­8¿ 8o­[8»q 7à­8o­[8o­[8o­[8¦»o8Ò¥38–8è8q+ª8õ‹8Ò¥38õ‹8o­[8Ò¥38ñ¥G8È*«6Ò¥38¦»o8ñ¥G8è8Ò¥38Ò¥38§uÈ8§uÈ8§uÈ8D’Ò8D’Ò8j°9K9©°Ü8êZ¾8D’Ò8©°Ü8}òð8D’Ò8K9Éû8j°9¢9;Ä 9Éû8;Ä 9;Ä 9i’:9;Ä 9K9`09i’:9i’:9¢9…H+9i’:9…H+9Ýí9ÂÐæ8K9Éû8D’Ò8K9êZ¾8êZ¾8©°Ü8êZ¾8Éû8}òð8D’Ò8$B´8õ‹8ð 8ð 8à­8ñ¥G8»q 7»q 7”Í 5»q 7¥É·”Í 5i,_·ô†¾·å0æ· È7…µï7”Í 5?†¶pû–·¡…#7¥É·”Í 5”Í 5i,_·ŒÚB¸NÜ.¸å0æ·pû–·?†¶å0æ·”Í 5¿ 8 È7È*«6¡…#7År7à­8År7 È7 È7¡…#7à­8ñ¥G8Ò¥38o­[8è8õ‹8–8©°Ü8ð 8ÂÐæ8j°9!9¢9ú0&9èàI9`09@y59ú0&9¢T9@ÆD9¢T9`09`09@y59¢9i’:9Ýí9K9;Ä 9K9ÂÐæ8K9}òð8Ýí9ÂÐæ8j°9¢9¢9j°9©°Ü8Éû8D’Ò8j°9K9;Ä 9§uÈ8D’Ò8êZ¾8D’Ò8D’Ò8ð 8D’Ò8D’Ò8õ‹8¦»o8¦»o8o­[8õ‹8¦»o8¿ 8…µï7År7 È7»q 7¡…#7i,_·Ò¥38…µï7ñ¥G8…µï7»q 7¿ 8ñ¥G8Ò¥38»q 7ñ¥G8¦»o8Ò¥38…µï7»q 7 È7 È7È*«6¦»o8è8ñ¥G8¦»o8¦»o8¦»o8o­[8q+ª8D’Ò8q+ª8D’Ò8êZ¾8ÂÐæ8;Ä 9¹Ø9Ýí9¢9K9Ýí9Éû8K9ú0&9Éû8j°9K9}òð8¹Ø9¹Ø9j°9j°9Éû8Éû8ÂÐæ8Éû8Ýí9j°9ÂÐæ8ÂÐæ8ÂÐæ8j°9ÂÐæ8©°Ü8}òð8}òð8j°9}òð8D’Ò8§uÈ8–8$B´8q+ª8$B´8¦»o8o­[8o­[8ð 8Ò¥38ñ¥G8õ‹8è8o­[8ñ¥G8õ‹8¦»o8…µï7õ‹8Ò¥38Ò¥38¦»o8o­[8¦»o8à­8…µï7ð 8¿ 8Ò¥38¦»o8ñ¥G8Ò¥38¡…#7”Í 5¥É·?†¶pû–·?†¶”Í 5¥É·pû–·uæ¸i,_·ô†¾·År7È*«6»q 7”Í 5 È7Ò¥38¡…#7»q 7…µï7År7»q 7…µï7 È7…µï7 È7o­[8ñ¥G8¦»o8è8q+ª8¦»o8–8ñ¥G8o­[8$B´8êZ¾8©°Ü8§uÈ8$B´8q+ª8©°Ü8Éû8Éû8$B´8õ‹8q+ª8D’Ò8$B´8$B´8êZ¾8q+ª8õ‹8–8§uÈ8ñ¥G8õ‹8–8–8ð 8$B´8©°Ü8©°Ü8êZ¾8$B´8$B´8$B´8–8ð 8ð 8$B´8ð 8ð 8o­[8o­[8¿ 8 È7 È7År7¡…#7»q 7È*«6”Í 5»q 7…µï7È*«6…µï7o­[8”Í 5¿ 8Ò¥38ñ¥G8Ò¥38È*«6”Í 5År7?†¶¡…#7¿ 8o­[8…µï7 È7»q 7¡…#7¡…#7År7»q 7År7 È7¡…#7i,_·¥É·År7?†¶i,_·i,_·¡…#7”Í 5¡…#7”Í 5i,_·”Í 5”Í 5È*«6ô†¾·¡…#7 È7»q 7¿ 8År7År7o­[8à­8…µï7è8¦»o8o­[8õ‹8o­[8o­[8õ‹8–8Ò¥38Ò¥38à­8õ‹8ñ¥G8Ò¥38ñ¥G8à­8à­8õ‹8õ‹8o­[8–8¦»o8Ò¥38¦»o8õ‹8–8Ò¥38Ò¥38»q 7È*«6År7År7ô†¾·i,_·È*«6¿ 8i,_·”Í 5i,_·?†¶ô†¾·pû–·uæ¸ô†¾·ŒÚB¸NÜ.¸NÜ.¸ ú¸å0æ·i,_·ÿìj¸”Í 5ô†¾·¥É·”Í 5uæ¸uæ¸?†¶ÿìj¸WàV¸ÿìj¸ŒÚB¸WàV¸vﻸNÜ.¸óÿ~¸­¸­¸uæ¸ô†¾·NÜ.¸ŒÚB¸WàV¸WàV¸uæ¸WàV¸WàV¸WàV¸uæ¸pû–·ô†¾·ô†¾·È*«6¥É·¡…#7¥É·»q 7…µï7 È7à­8è8»q 7o­[8¿ 8¦»o8à­8õ‹8¦»o8ñ¥G8ð 8êZ¾8§uÈ8§uÈ8q+ª8ÂÐæ8§uÈ8§uÈ8§uÈ8ÂÐæ8§uÈ8ð 8¦»o8q+ª8ð 8ÂÐæ8q+ª8q+ª8ð 8$B´8õ‹8õ‹8¦»o8¦»o8 È7ñ¥G8Ò¥38År7È*«6»q 7ô†¾·ô†¾·å0æ·pû–· ú¸NÜ.¸ÿìj¸­¸ÿìj¸­¸-×±¸-×±¸ÿìj¸WàV¸ÿìj¸ŒÚB¸óÿ~¸ÿìj¸­¸-×±¸Ú§ø¸ãCÚ¸é%и¾ Ƹ-×±¸þÀ§¸-×±¸vﻸãCÚ¸ãCÚ¸ãCÚ¸­¸óÿ~¸óÿ~¸vﻸ­¸WàV¸ZŒ‰¸ZŒ‰¸ÿìj¸n›“¸WàV¸­¸ÿìj¸ŒÚB¸uæ¸WàV¸NÜ.¸ŒÚB¸ ú¸å0æ·pû–·¥É·”Í 5”Í 5¡…#7ô†¾·¡…#7¡…#7–8o­[8…µï7¿ 8o­[8¡…#7¿ 8»q 7à­8 È7”Í 5”Í 5»q 7È*«6¥É·i,_·ô†¾·pû–·År7¥É· ú¸”Í 5i,_·å0æ·NÜ.¸ ú¸uæ¸å0æ·WàV¸WàV¸NÜ.¸óÿ~¸ÿìj¸NÜ.¸NÜ.¸uæ¸u渌ÚB¸ŒÚB¸­¸­¸vﻸóÿ~¸­¸þÀ§¸vﻸ–cä¸ãCÚ¸-×±¸¾ Ƹî„î¸ZŒ‰¸-×±¸þÀ§¸vﻸ&f¹&f¹–cä¸é%иÂø$¹¶¹¡¹îá¹ÂŒ ¹ÔÂM¹ÔÂM¹EC¹8s>¹îá¹ (/¹«Y9¹îá¹¢@4¹¢@4¹²Ë¹y¹Ú§ø¸¡¹&f¹Ú§ø¸ÂŒ ¹îṶ¹«Y9¹¢@4¹¶¹Ú§ø¸¶¹Ú§ø¸&f¹Ú§ø¸î„î¸Ú§ø¸¶¹î„˹î„î¸é%иãCÚ¸é%иZŒ‰¸ÿìj¸ÿìj¸WàV¸ÿìj¸ZŒ‰¸¾ ƸvﻸZŒ‰¸WàV¸þÀ§¸ÿìj¸ÿìj¸å0æ·?†¶ ú¸uæ¸å0æ·ŒÚB¸å0æ·NÜ.¸ ú¸uæ¸ÿìj¸ZŒ‰¸ÿìj¸ÿìj¸WàV¸ÿìj¸þÀ§¸¾ Ƹÿìj¸-×±¸-×±¸þÀ§¸ÿìj¸þÀ§¸¾ Ƹ-×±¸ãCÚ¸î„î¸ÂŒ ¹ÂŒ ¹¶¹¡¹¡¹¾ ƸŒ ¹¶¹¶¹¶¹«Y9¹¡¹¡¹&f¹²Ë¹²Ë¹Âø$¹)*¹EC¹«Y9¹¶¹)*¹ (/¹Âø$¹¢@4¹EC¹)*¹²Ë¹«Y9¹Âø$¹²Ë¹Âø$¹î„@4¹8s>¹&f¹y¹Ú§ø¸é%иé%иé%иy¹vﻸ­¸-×±¸ŒÚB¸ZŒ‰¸WàV¸NÜ.¸ÿìj¸óÿ~¸ÿìj¸uæ¸ô†¾·ô†¾·¥É·?†¶»q 7?†¶pû–·”Í 5¥É·ô†¾·uæ¸ ú¸ZŒ‰¸ZŒ‰¸WàV¸NÜ.¸ŒÚB¸WàV¸WàV¸NÜ.¸NÜ.¸ŒÚB¸NÜ.¸ô†¾·ô†¾·WàV¸WàV¸uæ¸å0æ·­¸þÀ§¸­¸­¸­¸é%и–cä¸î„î¸ãCÚ¸&f¹¡¹y¹¶¹y¹îá¹Âø$¹¶¹&f¹Âø$¹¡¹ÂŒ ¹¢@4¹Ð§H¹ (/¹²Ë¹)*¹Ú§ø¸–cä¸y¹Ú§ø¸&f¹Ú§ø¸é%и­¸¾ Ƹ-×±¸ŒÚB¸ŒÚB¸å0æ·pû–·å0æ· ú¸pû–·i,_·uæ¸ ú¸å0æ·WàV¸WàV¸óÿ~¸ ú¸å0æ· ú¸å0æ·ô†¾·ô†¾·È*«6pû–·u渥ɷÅr7i,_·¡…#7i,_·¿ 8…µï7¿ 8…µï7År7År7à­8¡…#7?†¶È*«6År7ñ¥G8»q 7År7 È7i,_·ô†¾· È7ñ¥G8”Í 5¡…#7ñ¥G8”Í 5pû–·¥É·?†¶ ú¸ZŒ‰¸ÿìj¸ŒÚB¸ZŒ‰¸WàV¸­¸ZŒ‰¸ÿìj¸óÿ~¸u渌ÚB¸ ú¸WàV¸óÿ~¸WàV¸­¸WàV¸þÀ§¸n›“¸NÜ.¸é%и-×±¸-×±¸–cä¸é%иþÀ§¸­¸óÿ~¸­¸þÀ§¸é%иãCÚ¸þÀ§¸ÿìj¸n›“¸­¸ZŒ‰¸WàV¸n›“¸ZŒ‰¸ÿìj¸þÀ§¸­¸ÿìj¸NÜ.¸ÿìj¸NÜ.¸ ú¸ ú¸å0淥ɷ¡…#7ñ¥G8o­[8è8ñ¥G8ñ¥G8ð 8è8–8–8ð 8¦»o8è8¦»o8è8è8ñ¥G8è8à­8o­[8¦»o8…µï7¿ 8 È7»q 7 È7¿ 8ñ¥G8à­8–8–8o­[8à­8q+ª8è8è8õ‹8§uÈ8¦»o8–8õ‹8…µï7Ò¥38o­[8 È7»q 7È*«6»q 7»q 7¿ 8…µï7i,_·i,_·¡…#7¥É·ŒÚB¸ÿìj¸NÜ.¸ÿìj¸n›“¸WàV¸n›“¸­¸óÿ~¸­¸-×±¸­¸¾ Ƹڧø¸–cä¸&f¹²Ë¹é%и­¸­¸-×±¸vﻸvﻸ­¸þÀ§¸­¸­¸vﻸé%иZŒ‰¸-×±¸ÿìj¸uæ¸å0æ·i,_·?†¶»q 7?†¶i,_·?†¶i,_·i,_·¥É·pû–·¥É·”Í 5pû–· ú¸uæ¸”Í 5i,_·?†¶à­8è8ñ¥G8¦»o8à­8õ‹8õ‹8o­[8Ò¥38à­8è8à­8à­8»q 7à­8”Í 5»q 7¥É·È*«6pû–·ô†¾·i,_·ô†¾·pû–· ú¸å0æ·å0æ·i,_·å0æ·å0æ·NÜ.¸ÿìj¸uæ¸å0æ·uæ¸WàV¸å0æ·NÜ.¸uæ¸WàV¸ŒÚB¸NÜ.¸-×±¸þÀ§¸­¸ZŒ‰¸þÀ§¸-×±¸þÀ§¸¾ Ƹ-×±¸þÀ§¸vﻸþÀ§¸­¸­¸­¸­¸þÀ§¸vﻸ­¸-×±¸þÀ§¸ÿìj¸óÿ~¸WàV¸å0淥ɷô†¾·å0æ·å0æ·ô†¾·å0æ·pû–·uæ¸ ú¸ ú¸pû–·?†¶pû–· ú¸¥É·¥É·pû–·uæ¸i,_·È*«6?†¶ ú¸È*«6År7…µï7¡…#7È*«6È*«6”Í 5…µï7¿ 8Ò¥38q+ª8ñ¥G8o­[8¦»o8År7o­[8êZ¾8¦»o8êZ¾8êZ¾8$B´8è8…µï7¿ 8ñ¥G8õ‹8è8õ‹8è8Ò¥38»q 7¡…#7¿ 8¡…#7”Í 5¥É·”Í 5¥É·…µï7è8 È7à­8År7È*«6?†¶”Í 5 È7?†¶ô†¾·È*«6pû–·uæ¸WàV¸NÜ.¸å0æ· ú¸ŒÚB¸pû–·uæ¸WàV¸ZŒ‰¸i,_· ú¸ŒÚB¸ ú¸uæ¸ ú¸NÜ.¸NÜ.¸ ú¸å0æ·pû–·WàV¸u渥ɷ¥É·È*«6È*«6¥É·i,_·i,_·”Í 5i,_·?†¶År7Ò¥38»q 7Ò¥38¦»o8¦»o8ð 8$B´8§uÈ8©°Ü8©°Ü8D’Ò8D’Ò8©°Ü8}òð8j°9ÂÐæ8¢9¢9;Ä 9$B´8–8$B´8D’Ò8§uÈ8©°Ü8õ‹8$B´8–8¦»o8ñ¥G8õ‹8ñ¥G8o­[8õ‹8è8ñ¥G8Ò¥38Ò¥38¦»o8ñ¥G8à­8ñ¥G8ð 8…µï7à­8…µï7i,_·i,_·?†¶¥É·?†¶pû–·»q 7È*«6å0æ·å0æ·å0æ·ô†¾·NÜ.¸pû–·¥É·?†¶”Í 5å0æ·uæ¸ ú¸pû–·i,_·å0æ·uæ¸n›“¸ ú¸WàV¸ZŒ‰¸NÜ.¸å0æ·WàV¸n›“¸­¸þÀ§¸-×±¸WàV¸vﻸþÀ§¸u渌ÚB¸­¸WàV¸ŒÚB¸ZŒ‰¸ÿìj¸n›“¸ ú¸å0æ·­¸ÿìj¸óÿ~¸óÿ~¸WàV¸NÜ.¸i,_·i,_·pû–·År7?†¶”Í 5År7”Í 5…µï7pû–·…µï7…µï7”Í 5 È7¦»o8 È7¿ 8…µï7…µï7År7 È7i,_·År7¦»o8ñ¥G8o­[8è8ñ¥G8–8è8o­[8ð 8$B´8§uÈ8–8õ‹8o­[8?†¶i,_·Â–8»q 7»q 7 È7 È7?†¶i,_·ô†¾·¥É·uæ¸NÜ.¸NÜ.¸ÿìj¸i,_·å0æ·WàV¸ŒÚB¸WàV¸­¸ŒÚB¸NÜ.¸­¸-×±¸-×±¸­¸¾ Ƹé%иî„ Ƹ&f¹–cä¸ãCÚ¸ãCÚ¸Ú§ø¸­¸é%и-×±¸­¸n›“¸¾ ƸþÀ§¸é%иóÿ~¸NÜ.¸ô†¾·ô†¾·i,_·…µï7i,_·¡…#7»q 7È*«6…µï7…µï7¡…#7Ò¥38…µï7à­8à­8è8q+ª8¦»o8ð 8q+ª8$B´8 È7¿ 8à­8¿ 8Ò¥38¿ 8è8ñ¥G8ð 8q+ª8õ‹8ð 8o­[8ñ¥G8¦»o8ñ¥G8ñ¥G8è8q+ª8õ‹8à­8ð 8q+ª8õ‹8õ‹8…µï7o­[8o­[8…µï7È*«6i,_·i,_·pû–·NÜ.¸i,_·ô†¾·å0æ·­¸u渭¸­¸NÜ.¸ŒÚB¸þÀ§¸þÀ§¸¾ Ƹî„î¸é%иy¹&f¹¡¹–cä¸é%иé%иé%иãCÚ¸y¹þÀ§¸þÀ§¸ãCÚ¸óÿ~¸ÿìj¸­¸NÜ.¸WàV¸NÜ.¸ŒÚB¸uæ¸óÿ~¸NÜ.¸WàV¸uæ¸å0æ·uæ¸uæ¸å0æ·”Í 5”Í 5År7»q 7”Í 5È*«6»q 7?†¶¡…#7År7”Í 5¡…#7ô†¾· È7È*«6È*«6¡…#7…µï7 È7¡…#7År7à­8à­8»q 7È*«6»q 7»q 7”Í 5?†¶å0æ·?†¶å0淥ɷ¡…#7»q 7År7År7?†¶i,_·å0æ·År7»q 7?†¶È*«6 È7¡…#7È*«6”Í 5NÜ.¸uæ¸?†¶pû–·ŒÚB¸ÿìj¸u渌ÚB¸uæ¸WàV¸é%иn›“¸ ú¸óÿ~¸þÀ§¸ŒÚB¸uæ¸ÿìj¸WàV¸n›“¸¥É·å0æ·pû–·ô†¾·WàV¸WàV¸NÜ.¸ÿìj¸WàV¸WàV¸­¸å0æ·ŒÚB¸uæ¸ô†¾·pû–· ú¸¥É·”Í 5ô†¾·…µï7o­[8År7¿ 8»q 7Ò¥38Ò¥38è8o­[8¦»o8q+ª8q+ª8o­[8Ò¥38ð 8è8Ò¥38o­[8à­8¿ 8…µï7¿ 8è8ð 8$B´8Éû8ÂÐæ8§uÈ8§uÈ8q+ª8q+ª8ð 8êZ¾8;Ä 9Éû8q+ª8}òð8}òð8;Ä 9K9©°Ü8D’Ò8–8©°Ü8D’Ò8$B´8¦»o8q+ª8è8ñ¥G8–8–8Ò¥38à­8»q 7?†¶År7År7År7¡…#7¡…#7»q 7È*«6”Í 5”Í 5uæ¸ô†¾·¥É·?†¶”Í 5?†¶pû–·ô†¾·¥É·pû–·ô†¾·¥É·?†¶å0æ·pû–·å0æ·pû–·i,_·à­8¡…#7”Í 5o­[8»q 7”Í 5År7»q 7År7È*«6…µï7 È7…µï7 È7¿ 8ñ¥G8…µï7Ò¥38o­[8õ‹8¿ 8…µï7¦»o8ñ¥G8êZ¾8êZ¾8j°9!9`09¹Ø9;Ä 9¢9j°9ú0&9!9©°Ü8Ýí9ú0&9¢9Ýí9`09…H+9ú0&9¢9ú0&9ú0&9ú0&9`09j°9ÂÐæ8ÂÐæ8Éû8}òð8ÂÐæ8Éû8©°Ü8ÂÐæ8q+ª8ñ¥G8q+ª8êZ¾8ñ¥G8¿ 8…µï7År7»q 7¿ 8¡…#7à­8È*«6¡…#7¡…#7”Í 5»q 7¥É·¥É·?†¶?†¶i,_· È7”Í 5¥É· ú¸pû–·ô†¾· ú¸uæ¸NÜ.¸ ú¸å0æ·ZŒ‰¸uæ¸WàV¸ ú¸uæ¸óÿ~¸ŒÚB¸pû–·uæ¸å0æ·å0æ·¡…#7ô†¾·¡…#7¡…#7¡…#7à­8Ò¥38 È7…µï7»q 7Ò¥38à­8?†¶¦»o8¿ 8»q 7õ‹8õ‹8¿ 8År7¦»o8¦»o8ñ¥G8o­[8o­[8»q 7 È7Ò¥38 È7à­8à­8o­[8»q 7¦»o8ñ¥G8¿ 8ñ¥G8o­[8o­[8Ò¥38?†¶”Í 5…µï7»q 7 È7pû–·å0æ· ú¸ô†¾·i,_·å0æ·óÿ~¸ÿìj¸ZŒ‰¸ŒÚB¸-×±¸&f¹vﻸé%иî„¸¾ Ƹ&f¹Ú§ø¸¡¹Âø$¹y¹ÂŒ ¹îá¹ÂŒ ¹¶¹¢@4¹Âø$¹²Ë¹²Ë¹«Y9¹ÂŒ ¹îá¹Âø$¹ÂŒ ¹ (/¹ (/¹Âø$¹¢@4¹Âø$¹ÔÂM¹Âø$¹²Ë¹ (/¹¡¹î„î¸ÂŒ ¹&f¹&f¹–cä¸vﻸvﻸvﻸ­¸ZŒ‰¸-×±¸¶¹–cä¸é%и-×±¸î„î¸î„ Ƹvﻸ-×±¸vﻸãCÚ¸vﻸvﻸ­¸–cä¸vﻸ¾ Ƹvﻸn›“¸­¸-×±¸óÿ~¸óÿ~¸­¸WàV¸-×±¸vﻸé%иÿìj¸ÿìj¸­¸WàV¸óÿ~¸þÀ§¸WàV¸WàV¸óÿ~¸u渭¸ŒÚB¸-×±¸-×±¸ZŒ‰¸­¸î„î¸y¹–cä¸é%и&f¹î„î¸é%и-×±¸é%и&f¹&f¹ãCÚ¸&f¹&f¹–cä¸ (/¹)*¹¶¹8s>¹«Y9¹²Ë¹ (/¹îṡ¹y¹vﻸî„cä¸vﻸڧø¸é%и–cä¸&f¹­¸þÀ§¸î„ÚB¸þÀ§¸þÀ§¸ŒÚB¸-×±¸ZŒ‰¸n›“¸óÿ~¸ÿìj¸­¸ŒÚB¸þÀ§¸ÿìj¸ZŒ‰¸NÜ.¸WàV¸n›“¸ŒÚB¸ZŒ‰¸WàV¸u渌ÚB¸u渌ÚB¸óÿ~¸ ú¸uæ¸ ú¸pû–·ô†¾· È7Ò¥38…µï7…µï7¡…#7År7»q 7È*«6År7”Í 5”Í 5¥É·i,_·ÿìj¸WàV¸­¸ ú¸ô†¾· ú¸uæ¸WàV¸ ú¸ŒÚB¸NÜ.¸ô†¾·ZŒ‰¸ ú¸uæ¸ZŒ‰¸é%и–cä¸é%иڧø¸¡¹&f¹&f¹&f¹&f¹–cä¸&f¹y¹–cä¸î„¹)*¹¶¹é%и¾ Ƹ-×±¸­¸¾ Ƹ-×±¸þÀ§¸é%и-×±¸ÿìj¸vﻸ­¸­¸-×±¸¾ Ƹ­¸ZŒ‰¸þÀ§¸­¸¾ Ƹ¾ Ƹ¾ Ƹ–cä¸Ú§ø¸ãCÚ¸vﻸvﻸî„î¸î„î¸y¹ÂŒ ¹¶¹ÂŒ ¹é%и¾ ƸãCÚ¸&f¹ãCÚ¸­¸­¸vﻸZŒ‰¸­¸NÜ.¸ô†¾·u渡…#7È*«6År7?†¶…µï7¡…#7¡…#7 È7…µï7»q 7…µï7”Í 5¡…#7¥É·¥É·¥É·å0æ·i,_·å0æ·¡…#7pû–·»q 7¥É·¥É·È*«6År7pû–·¡…#7År7”Í 5”Í 5¥É·¥É·i,_·ô†¾·¥É·uæ¸WàV¸u渌ÚB¸ÿìj¸ŒÚB¸ÿìj¸n›“¸þÀ§¸­¸é%и¾ Ƹ­¸ÿìj¸å0æ·ÿìj¸ ú¸óÿ~¸ŒÚB¸ŒÚB¸­¸þÀ§¸­¸þÀ§¸vﻸ­¸þÀ§¸ŒÚB¸ŒÚB¸NÜ.¸å0æ·ŒÚB¸WàV¸NÜ.¸ ú¸NÜ.¸WàV¸uæ¸uæ¸ ú¸uæ¸ ú¸¥É·År7u渥ɷ¥É·»q 7År7 È7à­8 È7¿ 8¿ 8År7»q 7Ò¥38–8Ò¥38õ‹8õ‹8¦»o8¦»o8õ‹8è8õ‹8o­[8õ‹8$B´8êZ¾8êZ¾8ÂÐæ8$B´8©°Ü8–8©°Ü8;Ä 9ÂÐæ8ð 8$B´8©°Ü8êZ¾8§uÈ8ð 8©°Ü8K9ÂÐæ8q+ª8D’Ò8–8$B´8ñ¥G8–8o­[8$B´8–8Ò¥38–8 È7Ò¥38ñ¥G8è8õ‹8¦»o8ð 8õ‹8…µï7¿ 8Ò¥38Ò¥38Ò¥38Ò¥38 È7o­[8ñ¥G8o­[8o­[8è8$B´8õ‹8è8Ò¥38…µï7ñ¥G8è8q+ª8–8è8År7Ò¥38ñ¥G8ñ¥G8–8ñ¥G8…µï7q+ª8q+ª8ð 8©°Ü8ÂÐæ8ÂÐæ8K9j°9j°9K9}òð8©°Ü8Ýí9D’Ò8ú0&9¹Ø9¹Ø9@ÆD9;Ä 9¬?9@y59@y59@y59@y59¢T9èàI9 +üN9@y59èàI9@y59…H+9¬3Y9i’:9i’:9`09@y59èàI9!9`09¬?9¢9`09¹Ø9¢9¹Ø9;Ä 9!9ú0&9ú0&9K9;Ä 9D’Ò8ÂÐæ8©°Ü8K9ÂÐæ8D’Ò8êZ¾8$B´8êZ¾8õ‹8¦»o8o­[8ñ¥G8ð 8 È7 È7…µï7År7¦»o8o­[8o­[8è8Ò¥38Ò¥38»q 7¡…#7o­[8à­8o­[8à­8o­[8År7»q 7…µï7È*«6¡…#7…µï7”Í 5…µï7¡…#7¡…#7à­8¦»o8§uÈ8§uÈ8$B´8D’Ò8©°Ü8©°Ü8D’Ò8D’Ò8K9Éû8K9¹Ø9!9¹Ø9…H+9ú0&9¬?9!9¬?9¬?9¢T9i’:9¬?9i’:9èàI9@ÆD9i’:9¬?9¢T9¬3Y9@y59¬?9`09¬?9`09i’:9ú0&9`09èàI9ú0&9i’:9Ýí9ú0&9K9K9ÂÐæ8êZ¾8ÂÐæ8$B´8–8o­[8Ò¥38õ‹8õ‹8ñ¥G8¦»o8à­8à­8»q 7¥É·ô†¾·pû–·i,_·å0æ·ô†¾·å0æ·ŒÚB¸ZŒ‰¸WàV¸WàV¸ŒÚB¸ZŒ‰¸­¸ZŒ‰¸ZŒ‰¸NÜ.¸WàV¸ÿìj¸ŒÚB¸n›“¸­¸­¸ÿìj¸NÜ.¸å0æ·ô†¾·NÜ.¸ŒÚB¸uæ¸i,_·ŒÚB¸ô†¾·å0æ·uæ¸pû–·uæ¸i,_·?†¶År7…µï7¦»o8ñ¥G8ð 8ð 8ÂÐæ8Éû8©°Ü8êZ¾8©°Ü8D’Ò8j°9©°Ü8Éû8K9}òð8Éû8¹Ø9Éû8ÂÐæ8q+ª8$B´8ð 8ñ¥G8ñ¥G8 È7 È7è8Ò¥38 È7Ò¥38o­[8…µï7År7År7”Í 5?†¶¡…#7¡…#7¡…#7¥É·à­8”Í 5å0æ· ú¸å0æ· ú¸­¸-×±¸uæ¸óÿ~¸þÀ§¸ÿìj¸óÿ~¸ZŒ‰¸ÿìj¸¾ Ƹ­¸­¸ãCÚ¸é%и­¸–cä¸é%иWàV¸ÿìj¸vﻸ-×±¸­¸ãCÚ¸-×±¸ãCÚ¸¾ Ƹî„cä¸þÀ§¸&f¹vﻸ-×±¸é%иvﻸWàV¸­¸þÀ§¸óÿ~¸vﻸþÀ§¸vﻸ­¸ZŒ‰¸óÿ~¸ÿìj¸uæ¸ô†¾·¥É·å0æ·i,_·”Í 5È*«6¥É·”Í 5¡…#7i,_·pû–·»q 7…µï7Ò¥38”Í 5Ò¥38ñ¥G8à­8¿ 8¿ 8Ò¥38 È7¡…#7 È7Ò¥38…µï7År7 È7Ò¥38È*«6È*«6i,_·È*«6i,_·ô†¾·pû–·i,_·pû–·i,_·å0æ·uæ¸ô†¾·NÜ.¸óÿ~¸WàV¸ZŒ‰¸­¸­¸NÜ.¸NÜ.¸-×±¸­¸ŒÚB¸uæ¸uæ¸WàV¸ŒÚB¸óÿ~¸­¸ÿìj¸é%и­¸­¸î„c世cä¸&f¹ãCÚ¸&f¹¡¹&f¹î„î¸&f¹–cä¸y¹¶¹îṲ˹¶¹î„¹¾ Ƹÿìj¸óÿ~¸-×±¸WàV¸óÿ~¸NÜ.¸å0æ·i,_·å0æ·ÿìj¸ ú¸pû–·”Í 5År7¥É·¥É·È*«6År7”Í 5¡…#7¡…#7¡…#7 È7È*«6Ò¥38Ò¥38ð 8êZ¾8q+ª8q+ª8$B´8D’Ò8D’Ò8êZ¾8Éû8;Ä 9¢9j°9K9¢9¹Ø9Ýí9`09`09;Ä 9Ýí9Ýí9ÂÐæ8êZ¾8–8è8$B´8¦»o8…µï7Ò¥38Ò¥38¡…#7”Í 5”Í 5»q 7¥É·uæ¸ô†¾·ô†¾· ú¸ŒÚB¸ZŒ‰¸ZŒ‰¸ÿìj¸óÿ~¸þÀ§¸NÜ.¸NÜ.¸ZŒ‰¸ZŒ‰¸NÜ.¸­¸óÿ~¸-×±¸¾ Ƹy¹­¸­¸­¸¾ Ƹ­¸­¸ZŒ‰¸óÿ~¸ŒÚB¸-×±¸þÀ§¸Ú§ø¸é%и–cä¸þÀ§¸vﻸóÿ~¸-×±¸­¸ZŒ‰¸ãCÚ¸ ú¸NÜ.¸ÿìj¸ÿìj¸­¸ÿìj¸ÿìj¸uæ¸u渭¸ô†¾·ŒÚB¸ ú¸uæ¸å0æ·”Í 5È*«6?†¶È*«6?†¶¡…#7”Í 5”Í 5¿ 8È*«6?†¶¥É·År7¦»o8ñ¥G8¿ 8 È7?†¶”Í 5¡…#7pû–·i,_·¥É·å0æ·ô†¾·ZŒ‰¸vﻸóÿ~¸þÀ§¸é%и­¸ŒÚB¸n›“¸¾ ƸãCÚ¸–c丶¹&f¹&f¹¶¹¶¹Âø$¹ (/¹)*¹îá¹¢@4¹Âø$¹ÂŒ ¹¡¹¡¹¡¹²Ë¹Âø$¹îṶ¹¢@4¹¶¹«Y9¹²Ë¹8s>¹«Y9¹ (/¹¡¹EC¹«Y9¹ (/¹¢@4¹¢@4¹îṲ˹ (/¹¢@4¹EC¹²Ë¹y¹Ú§ø¸y¹Ú§ø¸ãCÚ¸ZŒ‰¸-×±¸n›“¸é%иî„ Ƹvﻸ¾ ƸvﻸþÀ§¸vﻸn›“¸ŒÚB¸u渌ÚB¸å0æ·uæ¸pû–·¥É· È7¡…#7ô†¾·¥É·È*«6¥É·pû–·?†¶”Í 5?†¶?†¶i,_·?†¶”Í 5È*«6 È7År7È*«6È*«6?†¶¡…#7”Í 5”Í 5i,_·pû–·¥É·¥É· È7»q 7i,_·¥É·È*«6År7ô†¾·ô†¾·?†¶i,_·År7¥É·?†¶?†¶?†¶pû–·?†¶?†¶å0æ·WàV¸å0æ·NÜ.¸­¸ŒÚB¸ ú¸pû–· ú¸ ú¸ ú¸å0æ·NÜ.¸ô†¾·NÜ.¸­¸ÿìj¸­¸ ú¸uæ¸u渌ÚB¸u渌ÚB¸óÿ~¸n›“¸ÿìj¸ŒÚB¸þÀ§¸WàV¸NÜ.¸ÿìj¸uæ¸ô†¾·i,_·pû–·ô†¾·ô†¾·pû–·¥É·År7?†¶¿ 8…µï7à­8¿ 8Ò¥38…µï7Ò¥38År7¿ 8 È7Ò¥38¿ 8»q 7 È7 È7¥É·?†¶¥É·i,_·År7¥É·¥É·ô†¾·uæ¸ô†¾·WàV¸NÜ.¸WàV¸þÀ§¸î„ Ƹ&f¹vﻸ-×±¸¾ Ƹî„î¸ãCÚ¸î„î¸&f¹¡¹)*¹îṶ¹îá¹îá¹ (/¹¢@4¹¢@4¹ (/¹)*¹²Ë¹²Ë¹¡¹ (/¹)*¹EC¹¢@4¹EC¹EC¹8s>¹PÞR¹)*¹«Y9¹8s>¹îṫY9¹ (/¹¡¹Âø$¹ (/¹ÔÂM¹)*¹²Ë¹«Y9¹¶¹¡¹ÂŒ ¹Âø$¹¡¹²Ë¹¡¹«Y9¹–cä¸ÂŒ ¹î„î¸ãCÚ¸ãCÚ¸þÀ§¸-×±¸­¸-×±¸-×±¸–cä¸-×±¸ãCÚ¸­¸-×±¸é%и¾ Ƹ-×±¸­¸vﻸ-×±¸vﻸãCÚ¸ÿìj¸vﻸé%иóÿ~¸¾ Ƹvﻸé%и-×±¸WàV¸­¸­¸þÀ§¸é%и­¸vﻸ-×±¸­¸é%иãCÚ¸ãCÚ¸î„î¸ãCÚ¸Ú§ø¸&f¹y¹¡¹&f¹&f¹ÂŒ ¹¶¹y¹Âø$¹¢@4¹)*¹¢@4¹)*¹ÔÂM¹Ð§H¹)*¹Âø$¹Ð§H¹q3b¹EC¹Ð§H¹ÔÂM¹ÔÂM¹8s>¹EC¹Ð§H¹¢@4¹?úW¹PÞR¹)*¹«Y9¹Âø$¹ (/¹8s>¹²Ë¹y¹î„î¸ãCÚ¸¾ Ƹvﻸé%иn›“¸WàV¸–c中¸n›“¸–cä¸-×±¸î„î¸&f¹ÂŒ ¹–c両¹îá¹îá¹y¹ÂŒ ¹î„cä¸y¹–c中¸é%и­¸þÀ§¸-×±¸n›“¸óÿ~¸uæ¸ô†¾·i,_·pû–·NÜ.¸å0æ·óÿ~¸­¸ ú¸WàV¸ŒÚB¸å0æ·uæ¸WàV¸uæ¸NÜ.¸WàV¸å0æ·ŒÚB¸ZŒ‰¸ÿìj¸ÿìj¸NÜ.¸þÀ§¸n›“¸­¸óÿ~¸­¸ãCÚ¸¾ Ƹ-×±¸–c世cä¸ãCÚ¸y¹î„î¸Ú§ø¸é%и¾ Ƹ–cä¸ãCÚ¸î„î¸y¹î„î¸&f¹Ú§ø¸&f¹&f¹¾ Ƹ–cä¸vﻸ¾ ƸãCÚ¸Ú§ø¸&f¹y¹–cä¸-×±¸¡¹î„î¸é%иãCÚ¸é%иþÀ§¸n›“¸­¸þÀ§¸-×±¸­¸þÀ§¸å0æ·u渥ɷô†¾·i,_·ô†¾·”Í 5»q 7È*«6År7È*«6 È7È*«6Ò¥38ñ¥G8È*«6¿ 8…µï7…µï7…µï7ñ¥G8ñ¥G8o­[8 È7Ò¥38à­8è8¦»o8ñ¥G8è8ñ¥G8ð 8q+ª8–8–8…µï7Ò¥38o­[8Ò¥38¿ 8¿ 8Ò¥38¿ 8¿ 8»q 7È*«6»q 7»q 7È*«6å0æ·NÜ.¸WàV¸uæ¸ ú¸WàV¸ÿìj¸ÿìj¸pû–·¥É·?†¶¡…#7¥É·å0æ·pû–·óÿ~¸WàV¸ŒÚB¸ÿìj¸å0æ·i,_·i,_·¥É·uæ¸”Í 5”Í 5”Í 5¡…#7?†¶?†¶i,_·È*«6…µï7»q 7pû–·?†¶¡…#7¡…#7pû–·¡…#7…µï7 È7År7»q 7Ò¥38…µï7õ‹8…µï7”Í 5År7¡…#7ñ¥G8”Í 5 È7 È7ð 8q+ª8õ‹8¦»o8ð 8ÂÐæ8Éû8§uÈ8K9K9j°9ÂÐæ8;Ä 9Éû8j°9j°9}òð8K9j°9Éû8}òð8ÂÐæ8¹Ø9K9Éû8@y59ú0&9}òð8Ýí9!9Ýí9K9ÂÐæ8}òð8Ýí9¢9Ýí9ÂÐæ8ÂÐæ8Éû8Ýí9Ýí9;Ä 9Ýí9Éû8Éû8;Ä 9j°9©°Ü8ÂÐæ8©°Ü8K9`09Éû8Éû8K9Éû8Ýí9;Ä 9Éû8¹Ø9!9ú0&9¢T9@y59!9@y59`09Ýí9!9`09¢9¹Ø9¹Ø9!9…H+9@ÆD9 +üN9)P^9RÆr9‘9¦Áˆ9i¡ƒ9q1†9Rs9€&˜98“98“9—â9€&˜9¦Áˆ9q1†9q1†9q1†9á·š9q1†9q1†9€&˜9á·š9kI9á·š9Rs9Rs9kI9‘§9á·š9G••9[H¯9[H¯9çm´9‘§9Û±9[H¯9Û±9ý“¹9™º¾9xuÆ9NÁ9W É9xuÆ9NÁ9¬ÅÐ9NÁ9ý“¹9çm´9çm´9™º¾9çm´9]#ª9çm´9ól¢9ÛŸ9kI9ól¢9ól¢9G••9Rs98“9á·š9kI9á·š98“9€&˜98“9¦Áˆ9‘9G••9Ï}9Ï}9RÆr9mc9iŠh9‘9ßäw9¢T9*¨m9 +üN9mc9iŠh9èàI9èàI9@ÆD9iŠh9mc9¬3Y9@ÆD9èàI9èàI9)P^9mc9¬3Y9mc9RÆr9ßäw9*¨m9‘9¢T9¢T9iŠh9¬3Y9¬3Y9)P^9iŠh9 +üN9mc9q1†9Rs9G••9G••9á·š9[H¯9€&˜9i¡ƒ9‘9Rs9i¡ƒ9q1†9Rs9‘9 R‹9¦Áˆ9Ï}98“9—â9Rs9—â9q1†9 R‹9—â9€&˜9—â9i¡ƒ9i¡ƒ9Rs9‘9i¡ƒ9i¡ƒ9iŠh9)P^9mc9¬3Y9ßäw9RÆr9 +üN9)P^9i’:9i’:9i’:9¢9Ýí9Ýí9Ýí9¢9Ýí9!9¹Ø9©°Ü8K9}òð8ÂÐæ8}òð8$B´8êZ¾8ð 8–8è8è8õ‹8–8$B´8¦»o8Ò¥38Ò¥38ñ¥G8–8¿ 8õ‹8o­[8 È7…µï7 È7o­[8à­8¦»o8è8o­[8–8è8õ‹8ñ¥G8è8 È7o­[8à­8ð 8ñ¥G8õ‹8êZ¾8Ò¥38êZ¾8è8q+ª8}òð8§uÈ8D’Ò8©°Ü8D’Ò8$B´8q+ª8êZ¾8K9$B´8}òð8;Ä 9K9Éû8;Ä 9§uÈ8¹Ø9!9j°9D’Ò8$B´8$B´8q+ª8q+ª8ð 8»q 7õ‹8–8Ò¥38Ò¥38ñ¥G8?†¶?†¶År7i,_· ú¸å0æ· ú¸óÿ~¸NÜ.¸ ú¸ÿìj¸-×±¸­¸¾ Ƹڧø¸y¹¡¹ÂŒ ¹y¹ÂŒ ¹ãCÚ¸é%и-×±¸¾ Ƹî„cä¸é%и&f¹¡¹¶¹–c両¹y¹î„î¸ãCÚ¸ãCÚ¸ãCÚ¸&f¹Ú§ø¸¾ Ƹ–c両¹î„î¸î„î¸ãCÚ¸–cä¸þÀ§¸n›“¸n›“¸¾ ƸþÀ§¸ŒÚB¸i,_·å0æ·ô†¾· ú¸ ú¸ŒÚB¸å0æ·NÜ.¸WàV¸i,_·i,_·ô†¾·”Í 5È*«6”Í 5?†¶År7 È7»q 7…µï7…µï7?†¶È*«6År7År7È*«6Ò¥38È*«6”Í 5”Í 5i,_·¡…#7È*«6å0æ·ô†¾· ú¸å0æ· ú¸È*«6i,_·u渥ɷpû–·i,_·NÜ.¸i,_·?†¶ŒÚB¸NÜ.¸ÿìj¸n›“¸þÀ§¸ZŒ‰¸­¸­¸î„î¸ãCÚ¸î„î¸î„î¸y¹Âø$¹)*¹&f¹&f¹)*¹&f¹&f¹îá¹Ú§ø¸y¹&f¹¡¹ÂŒ ¹îá¹y¹²Ë¹¶¹¡¹²Ë¹¢@4¹¶¹îá¹y¹&f¹¶¹Âø$¹²Ë¹îá¹)*¹)*¹¡¹¶¹¡¹¾ ƸãCÚ¸ãCÚ¸y¹ãCÚ¸î„î¸ÂŒ ¹-×±¸vﻸڧø¸ãCÚ¸vﻸóÿ~¸vﻸ­¸þÀ§¸WàV¸þÀ§¸­¸óÿ~¸–c世cä¸-×±¸vﻸé%и-×±¸óÿ~¸ŒÚB¸óÿ~¸pû–·uæ¸uæ¸å0æ·ŒÚB¸NÜ.¸ ú¸uæ¸ÿìj¸uæ¸þÀ§¸óÿ~¸­¸ZŒ‰¸é%иvﻸþÀ§¸­¸þÀ§¸­¸¾ Ƹé%иvﻸ-×±¸–cä¸vﻸ-×±¸þÀ§¸y¹–cä¸î„î¸&f¹vﻸ­¸î„î¸y¹é%иy¹Ú§ø¸y¹îá¹þÀ§¸ãCÚ¸ãCÚ¸ãCÚ¸¾ Ƹ¾ Ƹ–c中¸þÀ§¸vﻸ-×±¸vﻸþÀ§¸­¸­¸n›“¸­¸­¸ŒÚB¸­¸ÿìj¸­¸WàV¸óÿ~¸ ú¸å0æ·È*«6È*«6»q 7ñ¥G8à­8ð 8–8êZ¾8$B´8êZ¾8õ‹8–8õ‹8ð 8q+ª8êZ¾8$B´8Éû8Éû8Éû8j°9¹Ø9;Ä 9ú0&9 +üN9mc9èàI9èàI9¢T9¬?9¢T9¢T9@ÆD9iŠh9¬3Y9¬3Y9i’:9 +üN9 +üN9)P^9¬?9¬?9…H+9!9Ýí9j°9Éû8©°Ü8ÂÐæ8}òð8$B´8êZ¾8ÂÐæ8$B´8õ‹8D’Ò8–8q+ª8$B´8ð 8êZ¾8è8–8à­8à­8»q 7à­8è8ñ¥G8à­8È*«6År7È*«6¥É·”Í 5¡…#7År7…µï7…µï7¡…#7 È7¿ 8År7¥É·?†¶i,_· ú¸”Í 5…µï7?†¶?†¶¥É·uæ¸È*«6 È7 È7¦»o8o­[8o­[8 È7¦»o8¦»o8$B´8–8êZ¾8q+ª8ÂÐæ8ÂÐæ8j°9;Ä 9Éû8}òð8Éû8Ýí9ÂÐæ8K9j°9}òð8¹Ø9¹Ø9;Ä 9ú0&9…H+9!9j°9Ýí9Ýí9Éû8Éû8¹Ø9Éû8j°9§uÈ8$B´8$B´8q+ª8q+ª8õ‹8–8ð 8ð 8õ‹8ð 8…µï7ñ¥G8¿ 8¿ 8 È7”Í 5År7¡…#7 È7…µï7Ò¥38»q 7…µï7¿ 8¿ 8Ò¥38…µï7»q 7Ò¥38År7…µï7 È7»q 7”Í 5å0æ·å0æ·å0æ·­¸ZŒ‰¸WàV¸ŒÚB¸uæ¸ ú¸uæ¸NÜ.¸uæ¸i,_·NÜ.¸ô†¾·¥É·?†¶¥É·¥É·pû–·È*«6È*«6»q 7 È7…µï7 È7õ‹8¦»o8 È7à­8År7ñ¥G8…µï7»q 7Ò¥38År7È*«6¡…#7”Í 5?†¶År7¥É·?†¶”Í 5¥É·”Í 5¥É·?†¶¡…#7¥É·År7»q 7 È7à­8År7å0æ·?†¶”Í 5i,_·?†¶”Í 5År7 È7¡…#7ô†¾·uæ¸NÜ.¸óÿ~¸ÿìj¸­¸óÿ~¸ŒÚB¸uæ¸WàV¸ ú¸ŒÚB¸óÿ~¸vﻸvﻸvﻸvﻸãCÚ¸óÿ~¸­¸­¸¾ Ƹ–c世c世c丶¹Ú§ø¸y¹ÂŒ ¹&f¹¾ Ƹî„î¸-×±¸-×±¸¾ Ƹî„ ƸþÀ§¸ÿìj¸óÿ~¸ZŒ‰¸WàV¸óÿ~¸ô†¾· ú¸ŒÚB¸i,_· ú¸ŒÚB¸ZŒ‰¸ŒÚB¸­¸uæ¸uæ¸È*«6»q 7…µï7…µï7…µï7ñ¥G8à­8…µï7¿ 8Ò¥38ñ¥G8è8ñ¥G8õ‹8$B´8–8è8è8D’Ò8K9ÂÐæ8D’Ò8©°Ü8–8ð 8Ò¥38¦»o8ñ¥G8o­[8¦»o8Ò¥38Ò¥38»q 7…µï7”Í 5 È7 È7à­8è8ñ¥G8»q 7¿ 8 È7År7…µï7¿ 8»q 7År7å0æ·uæ¸ô†¾·NÜ.¸­¸vﻸ­¸n›“¸NÜ.¸ŒÚB¸ÿìj¸u渥ɷå0æ·u渌ÚB¸ÿìj¸-×±¸ZŒ‰¸þÀ§¸þÀ§¸þÀ§¸­¸ZŒ‰¸n›“¸n›“¸ŒÚB¸vﻸvﻸé%иé%иþÀ§¸WàV¸å0æ· ú¸ô†¾·ŒÚB¸ô†¾·i,_·¥É·ŒÚB¸uæ¸pû–·å0æ·”Í 5NÜ.¸?†¶È*«6År7”Í 5 È7à­8¡…#7År7 È7¡…#7År7È*«6à­8¥É·?†¶È*«6År7Ò¥38à­8Ò¥38År7…µï7 È7…µï7i,_·i,_·År7¡…#7È*«6¡…#7¥É·»q 7…µï7 È7Ò¥38”Í 5”Í 5pû–·ô†¾·i,_·å0æ·óÿ~¸uæ¸vﻸ-×±¸–cä¸vﻸ&f¹-×±¸–cä¸þÀ§¸î„¹²Ë¹²Ë¹8s>¹«Y9¹ ]¹EC¹?úW¹®Pg¹¢@4¹ÔÂM¹?úW¹eŒq¹ ]¹?úW¹EC¹ ]¹?úW¹PÞR¹Ð§H¹¢@4¹îṲ˹î„î¸Ú§ø¸îá¹Ú§ø¸y¹¡¹Ú§ø¸²Ë¹Âø$¹²Ë¹¶¹¶¹¡¹Ú§ø¸ÂŒ ¹é%иé%иZŒ‰¸­¸ÿìj¸-×±¸óÿ~¸-×±¸-×±¸é%иþÀ§¸ZŒ‰¸-×±¸ÿìj¸NÜ.¸uæ¸ô†¾·å0æ·NÜ.¸”Í 5pû–·ô†¾·?†¶¥É·¥É·uæ¸pû–·ÿìj¸ZŒ‰¸ŒÚB¸NÜ.¸óÿ~¸WàV¸uæ¸å0æ·NÜ.¸NÜ.¸óÿ~¸óÿ~¸ÿìj¸ZŒ‰¸þÀ§¸ãCÚ¸­¸­¸é%иé%и&f¹¡¹î„¹«Y9¹¢@4¹|Pd|1|24600|2013-282T15:32:37.397 ¬ƒ8Y¶8Fñ«8.xÞ8¿*K8Ó/#8Fñ«8Y¶8ÇÉ—8ÇÉ—8<Ê8ÇÉ—8ÌBs8Z?8Z?80ýÎ7¿*K8w3_8$²ö7$²ö7Fd§7Z?8Z?8$²ö7Fd§7ØçU¶s·Z?8A±5I17Fd§7I17.e¸ ‘··6ß·{\Q·uY+¸JV?¸°¸°¸˜Ö‘¸˜Ö‘¸Ô^θ°¸ )º¸ )º¸˜Ö‘¸Ã相Ã相@¨ +¹Ã相ô¼ì¸å¹å›â¸˜Ö‘¸}|ظ )º¸ )º¸Qû¥¸˜Ö‘¸Ô^θ )º¸°¸å›â¸˜Ö‘¸Qû¥¸Qû¥¸˜Ö‘¸Qû¥¸˜Ö‘¸Mfg¸Ã相 ‘··• ·6ß·{\Q·{\Q·6ß·étÆ6s· ‘··A±5A±5ØçU¶ ‘··I17s· ‘··{\Q·• ·.e¸.e¸˜Ö‘¸˜Ö‘¸úLJ¸/x{¸Ã相JV?¸uY+¸.e¸ÎZS¸/x{¸z¸uY+¸˜Ö‘¸Qû¥¸˜Ö‘¸/x{¸˜Ö‘¸˜Ö‘¸ÎZS¸Ã相°¸°¸˜Ö‘¸Ã相Ô^θ˜Ö‘¸ÎZS¸Mfg¸uY+¸ÎZS¸Ã相úLJ¸Ã相ÎZS¸}|ظ°¸/x{¸ûBĸ}|ظ@¨ +¹@¨ +¹}|ظ@¨ +¹ßB.¹w¼¹úü¹±=¹Vѹå¹å¹šßö¸ô¼ì¸ô¼ì¸w¼¹w¼¹}|ظVѹ¸”¹Vѹ¸”¹šßö¸¸”¹@¨ +¹šßö¸Vѹå›â¸å›â¸ô¼ì¸ô¼ì¸Ô^θQû¥¸˜Ö‘¸ )º¸˜Ö‘¸°¸°¸Ã相 )º¸Mfg¸˜Ö‘¸Ã相JV?¸Mfg¸ ‘·· ‘··z¸ÎZS¸uY+¸z¸{\Q·.e¸z¸Mfg¸ÎZS¸ ‘··.e¸uY+¸uY+¸˜Ö‘¸uY+¸• ·{\Q·étÆ6{\Q·s· ‘··étÆ6s·A±5A±5A±5I17A±5I17¿*K8Fd§7étÆ6étÆ6s·A±5ØçU¶{\Q·z¸z¸z¸Ã相z¸6ß·• ·uY+¸.e¸uY+¸uY+¸• ·.e¸6ß·6ß· ‘··6ß·6ß·uY+¸˜Ö‘¸Mfg¸Mfg¸Qû¥¸/x{¸˜Ö‘¸ô¼ì¸ )º¸Qû¥¸Ô^θQû¥¸˜Ö‘¸˜Ö‘¸ûBĸ )º¸°¸°¸JV?¸Ã相úLJ¸.e¸{\Q·{\Q·z¸• ·A±5s·s·ØçU¶I17I17Fd§7Z?8F)78w3_8Ó/#8ÇÉ—8.xÞ8{YÔ8Y¶8z!À8<Ê8Ù”9¦‘@9'9e½9¢^69e½9'9¥Ò9&Þü8¥Ò9Ù”9’˜è8™9•ºò8™9.xÞ8<Ê8¢¹8w3_8w3_8¿*K8¿*K8¿*K8¿*K8Ó/#8I17F)78ØçU¶• ·A±5étÆ6I176ß·ØçU¶6ß·Mfg¸• · ‘··6ß·JV?¸ÎZS¸uY+¸Qû¥¸Mfg¸.e¸JV?¸ ‘··• ·Mfg¸JV?¸.e¸JV?¸°¸˜Ö‘¸ )º¸}|ظ°¸ûBĸ°¸Ã相/x{¸Qû¥¸˜Ö‘¸˜Ö‘¸Mfg¸Mfg¸ )º¸°¸.e¸JV?¸°¸Mfg¸ÎZS¸.e¸z¸z¸JV?¸6ß·6ß·Fd§7A±5étÆ6ØÛ7étÆ6ØÛ7Ó/#8w3_8¿*K8¢¹8Fñ«8z!À8{YÔ8<Ê8Y¶8{YÔ8Fñ«8’˜è8&Þü8'9e½9ɨ 9†è9e½9™9e½9ɨ 9’˜è8{YÔ8{YÔ8Y¶8ÇÉ—8<Ê8<Ê8z!À8¢¹8Fñ«8Fñ«8<Ê8z!À8¿*K8Ó/#80ýÎ7ØÛ7$²ö7w3_8w3_8Z?8Fd§7A±5étÆ6ØÛ7$²ö70ýÎ7I17$²ö7 ‘··.e¸ÎZS¸JV?¸˜Ö‘¸ )º¸Mfg¸Qû¥¸˜Ö‘¸°¸°¸ûBĸÔ^θå¹Qû¥¸Ã相ÎZS¸Mfg¸Mfg¸z¸z¸ ‘··Mfg¸ÎZS¸z¸ØçU¶s·A±5A±5A±5{\Q·s·s·ØçU¶$²ö7Ó/#8ÌBs8ÌBs8w3_8w3_8ÇÉ—8¢¹8ÌBs8ÇÉ—8z!À8ÇÉ—8¬ƒ8z!À8.xÞ8Fñ«8.xÞ8•ºò8{YÔ8•ºò8z!À8™9.xÞ8•ºò8’˜è8Y¶8z!À8{YÔ8z!À8’˜è8’˜è8{YÔ8{YÔ8Y¶8™9z!À8•ºò8’˜è8{YÔ8Fñ«8™9{YÔ8’˜è8{YÔ8<Ê8.xÞ8Fñ«8{YÔ8ÇÉ—8`Ü¡8Fñ«8Y¶8Fñ«8ÇÉ—8w3_8$²ö7Z?8Ó/#8$²ö7I17I17ØÛ7ØçU¶s·ØÛ7$²ö7ØÛ7{\Q·étÆ6s· ‘··ÎZS¸6ß·• ·{\Q·JV?¸/x{¸Qû¥¸Qû¥¸Mfg¸å›â¸ô¼ì¸°¸°¸Ô^θ°¸ô¼ì¸Ô^θ˜Ö‘¸ûBÄ¸å¹ )º¸Mfg¸JV?¸˜Ö‘¸/x{¸Mfg¸6ß·ØçU¶s·• ·ØçU¶ØÛ70ýÎ7Fd§7$²ö70ýÎ7Fd§7$²ö7$²ö7¿*K8¬ƒ8`Ü¡8`Ü¡8<Ê8’˜è8™9.xÞ8<Ê8·-,9¥Ò9ÿ!9Ù”9¥Ò9e½9’˜è8z!À8<Ê8•ºò8Fñ«8.xÞ8z!À8<Ê8ÇÉ—8.xÞ8Fñ«8ÇÉ—8w3_8Z?8¢¹8¿*K8$²ö7Fd§7Z?8F)78Fd§7{\Q·{\Q·s·ØÛ7étÆ6z¸ ‘··z¸6ß·úLJ¸˜Ö‘¸°¸ )º¸w¼¹w¼¹}|ظ°¸Ô^θå¹å›â¸å¹@¨ +¹´$¹w¼¹w¼¹VѹÙæ¹@¨ +¹w¼¹´$¹å›â¸Vѹw¼¹šßö¸å¹šßö¸ô¼ì¸}|ظûBĸ )º¸ÎZS¸˜Ö‘¸.e¸z¸.e¸z¸ ‘··étÆ6$²ö7A±5$²ö7F)78F)78I17¿*K8¿*K8$²ö7w3_8ÇÉ—8{YÔ8Fñ«8z!À8.xÞ8Y¶8¬ƒ8`Ü¡8Y¶8Y¶8{YÔ8Y¶8.xÞ8•ºò8.xÞ8’˜è8•ºò8•ºò8’˜è8<Ê8’˜è8z!À8’˜è8z!À8¬ƒ8ÇÉ—8•ºò8ÇÉ—8’˜è8¢¹8Y¶8`Ü¡8`Ü¡8¢¹8`Ü¡8¢¹8z!À8Ó/#80ýÎ7$²ö70ýÎ7Ó/#8Y¶8ÇÉ—8¢¹8¿*K8w3_8Ó/#8Ó/#80ýÎ7Fd§7étÆ6.e¸/x{¸6ß·6ß·uY+¸• ·{\Q·A±5• ·I17Ó/#8Fd§7Z?8I17Z?8$²ö7ØçU¶s·I17A±5I17ØçU¶{\Q·6ß·6ß·z¸6ß·6ß·z¸uY+¸{\Q·A±5I17A±5• ·étÆ6A±5étÆ6I17I17s·Fd§7étÆ6s·Z?8w3_8w3_8w3_8w3_8<Ê8Y¶8¬ƒ8ÇÉ—8F)78ÌBs8w3_8Z?8¬ƒ8w3_8¿*K8w3_8F)78Z?8¬ƒ8I17étÆ60ýÎ7{\Q·ØÛ7I17 ‘··z¸6ß·z¸˜Ö‘¸ÎZS¸˜Ö‘¸˜Ö‘¸/x{¸Qû¥¸Ã相šßö¸å›â¸}|ظô¼ì¸¸”¹w¼¹@¨ +¹VѹVѹšßö¸¸”¹¸”¹å›â¸å¹šßö¸@¨ +¹ßB.¹ô¼ì¸úü¹ßB.¹¸”¹úü¹úü¹´$¹´$¹¸”¹Ùæ¹ô¼ì¸¸”¹å›â¸Ô^θÔ^θ˜Ö‘¸Ã相}|ظÃ相uY+¸/x{¸JV?¸JV?¸z¸ ‘··JV?¸z¸étÆ6 ‘··ØÛ7I17Z?8Fd§7$²ö7ÌBs8Z?8Z?8Ó/#8¿*K80ýÎ7Ó/#8¿*K8w3_8¢¹8¢¹8¿*K8¬ƒ8Fñ«8Fñ«8¢¹8w3_8ÌBs8Y¶8<Ê8¢¹8¬ƒ8¢¹8`Ü¡8¬ƒ8Y¶8$²ö70ýÎ7ØçU¶ØçU¶I17ØçU¶s·{\Q·z¸z¸.e¸6ß·z¸6ß·{\Q·.e¸.e¸ÎZS¸úLJ¸Ô^θÔ^θÔ^θ}|ظ}|ظå¹@¨ +¹å¹ )º¸šßö¸ûBĸô¼ì¸ûBĸÙæ¹w¼¹w¼¹@¨ +¹Ùæ¹@¨ +¹¸”¹ô¼ì¸¸”¹ô¼ì¸}|ظÔ^θå›â¸å¹šßö¸ûBĸ}|ظÔ^θå›â¸Ô^θ/x{¸ )º¸ÎZS¸JV?¸˜Ö‘¸/x{¸JV?¸JV?¸6ß·z¸uY+¸/x{¸{\Q·I17ØÛ7{\Q·F)780ýÎ7I17Z?8Ó/#80ýÎ7¿*K8Z?80ýÎ70ýÎ7F)78$²ö7F)78Z?8$²ö7$²ö7I17I17Z?8Z?8¿*K8Ó/#8Ó/#8¿*K8F)78F)780ýÎ7Z?8Z?8w3_8ÌBs8Ó/#8ÌBs8Z?8Z?8étÆ6Z?8ØÛ70ýÎ7Ó/#8I17I17étÆ60ýÎ7Ó/#8A±5ØçU¶I17Fd§7I17ØçU¶z¸s·s·• ·{\Q·uY+¸.e¸z¸.e¸Mfg¸uY+¸z¸z¸ÎZS¸6ß·s·ØçU¶6ß·ØçU¶s·I17s·A±5s·A±5$²ö7F)78Fd§7A±5ØÛ7ØÛ7ØÛ7étÆ6$²ö70ýÎ7Fd§7¿*K8Fd§7$²ö7s·0ýÎ70ýÎ7$²ö7w3_8¬ƒ8Ó/#8$²ö7F)78Z?8Ó/#8Ó/#8ÇÉ—8Fd§7$²ö7`Ü¡8¬ƒ8`Ü¡8.xÞ8•ºò8™9Ù”9&Þü8™9z!À8’˜è8{YÔ8’˜è8Fñ«8Ó/#8`Ü¡8ÇÉ—8ÇÉ—8`Ü¡8Fd§7Fd§7A±5$²ö7ØÛ7ØÛ70ýÎ7étÆ66ß·z¸6ß·Ã相˜Ö‘¸6ß·ÎZS¸Qû¥¸ )º¸ )º¸ )º¸˜Ö‘¸ûBĸûBĸûBĸÃ相Ã相 )º¸šßö¸ûBĸûBĸ}|ظûBĸQû¥¸Ô^θ°¸šßö¸šßö¸}|ظå›â¸Ô^θúLJ¸˜Ö‘¸ÎZS¸˜Ö‘¸ ‘··A±5ØÛ7ØçU¶• ·• ·$²ö7s·ØçU¶s·A±5{\Q·0ýÎ7étÆ6ØçU¶Ó/#8w3_8$²ö7Fd§7Z?8Z?8Fd§7Z?80ýÎ7`Ü¡8¢¹8¬ƒ8¢¹8Fñ«8.xÞ8{YÔ8Y¶8Fñ«8{YÔ8<Ê8’˜è8Ù”9{YÔ8’˜è8™9†è9ɨ 9•ºò8ɨ 9{YÔ8’˜è8Y¶8z!À8<Ê8ÇÉ—8F)78Fñ«8ÌBs8¿*K8F)78I17Fd§7 ‘··z¸uY+¸Mfg¸ÎZS¸ÎZS¸ ‘··• ·• ·z¸JV?¸JV?¸.e¸Mfg¸úLJ¸/x{¸°¸˜Ö‘¸˜Ö‘¸ûBĸûBĸô¼ì¸°¸°¸å›â¸Ô^θ )º¸˜Ö‘¸Ã相Mfg¸Mfg¸˜Ö‘¸˜Ö‘¸.e¸étÆ6I17ØÛ7$²ö7F)78¿*K8$²ö7étÆ6¿*K8ÌBs8¢¹8ÇÉ—8{YÔ8`Ü¡8™9`Ü¡8<Ê8¢¹8Fñ«8.xÞ8{YÔ8&Þü8.xÞ8e½9Ù”9&Þü8†è9¥Ò9ÿ!9™9Ù”9¥Ò9†è9¥Ò9·-,9ÿ!9•ºò8ÿ!9ÿ!9èE19âw;9¥ÆJ9¦‘@9èE19ÿ!9ÿ!9Ù”9ɨ 9’˜è8™9e½9’˜è8’˜è8ɨ 9&Þü8Y¶8<Ê8{YÔ8¬ƒ8Z?80ýÎ7Ó/#8Fd§7Ó/#8I17$²ö7Z?8ØÛ7s·s·{\Q·A±5• ·z¸ ‘··z¸˜Ö‘¸˜Ö‘¸JV?¸uY+¸JV?¸.e¸z¸uY+¸Mfg¸ÎZS¸˜Ö‘¸JV?¸/x{¸z¸JV?¸.e¸/x{¸JV?¸ ‘··• ·{\Q·ØçU¶ØçU¶• ·étÆ6Fd§7$²ö7Z?8¿*K8w3_8¬ƒ8Fñ«8`Ü¡8z!À8<Ê8¢¹8w3_8ÇÉ—8<Ê8z!À8™9&Þü8ɨ 9ɨ 9ɨ 9Ù”9¥Ò9&Þü8e½9e½9™9™9Ù”9{YÔ8†è9Ù”9e½9ÿ!9†è9†è9&Þü8ɨ 9ɨ 9™9†è9ɨ 9ɨ 9†è9†è9™9e½9¥Ò9•ºò8Ù”9&Þü8.xÞ8z!À8<Ê8ÇÉ—8ÇÉ—8ÇÉ—8F)78¿*K8ÌBs8¿*K8Ó/#8¬ƒ8F)780ýÎ70ýÎ7A±5ØÛ7• ·JV?¸ØçU¶s·z¸z¸.e¸uY+¸JV?¸.e¸étÆ6{\Q·ØçU¶A±5• ·6ß·s·{\Q·ÎZS¸.e¸z¸/x{¸/x{¸z¸JV?¸uY+¸uY+¸6ß·s· ‘··6ß·• ·{\Q·ØçU¶étÆ6ØçU¶s·Fd§7Fd§7ØÛ7ØÛ7étÆ6$²ö7$²ö7w3_8ÌBs8¢¹8ÇÉ—8F)780ýÎ7ÌBs8¿*K80ýÎ7Z?8¿*K8Z?8w3_8ÇÉ—8ÌBs8¢¹8F)78Z?8w3_8w3_80ýÎ7Fd§7Fd§7A±5{\Q·ØçU¶0ýÎ7A±5{\Q·I17I17étÆ6I17ØÛ7s·6ß·ÎZS¸ÎZS¸6ß·6ß·Mfg¸Mfg¸ÎZS¸.e¸JV?¸JV?¸ÎZS¸ûBĸQû¥¸Ã相 )º¸Ã相Qû¥¸Ô^θ )º¸å¹å¹ô¼ì¸¸”¹@¨ +¹šßö¸å¹ô¼ì¸w¼¹:t8¹+)¹}|ظô¼ì¸ô¼ì¸w¼¹@¨ +¹šßö¸Ô^θ˜Ö‘¸/x{¸ )º¸Ô^θ/x{¸˜Ö‘¸˜Ö‘¸Ã相˜Ö‘¸JV?¸ÎZS¸˜Ö‘¸Mfg¸z¸uY+¸z¸ ‘··6ß·ØçU¶• ·s·s·s·0ýÎ7Fd§7Fd§7Ó/#8Fd§70ýÎ7$²ö7ØçU¶étÆ6I17Z?8I17$²ö7w3_8F)78Ó/#8¿*K8ØÛ70ýÎ7w3_80ýÎ7ØÛ7I17A±5ØÛ7{\Q· ‘·· ‘··uY+¸Mfg¸˜Ö‘¸Mfg¸˜Ö‘¸°¸/x{¸˜Ö‘¸ )º¸JV?¸Qû¥¸ )º¸}|ظúLJ¸ûBĸå›â¸å›â¸ô¼ì¸´$¹šßö¸w¼¹@¨ +¹úü¹H[3¹ÂG¹´$¹+)¹úü¹+)¹w¼¹ô¼ì¸úü¹w¼¹¸”¹ÂG¹´$¹w¼¹+)¹úü¹ßB.¹´$¹w¼¹šßö¸@¨ +¹šßö¸ô¼ì¸Ô^θå›â¸šßö¸w¼¹å¹šßö¸Ô^θÔ^θå›â¸Qû¥¸°¸ÎZS¸z¸JV?¸• ·z¸JV?¸ ‘·· ‘··I17 ‘··.e¸z¸6ß·s·• ·.e¸.e¸Fd§70ýÎ7Ó/#8¿*K8étÆ6ØÛ76ß·{\Q· ‘··6ß·z¸ ‘··étÆ6ØÛ7ØçU¶0ýÎ7$²ö7I17ØçU¶étÆ6A±5s·z¸uY+¸.e¸6ß·z¸A±5s· ‘··z¸˜Ö‘¸Mfg¸Mfg¸ÎZS¸Qû¥¸Ã相Qû¥¸Ã相ÎZS¸/x{¸˜Ö‘¸˜Ö‘¸z¸/x{¸.e¸JV?¸.e¸z¸uY+¸Mfg¸Ã相˜Ö‘¸Mfg¸úLJ¸úLJ¸{\Q·z¸{\Q·uY+¸z¸• ·z¸z¸z¸• ·{\Q·z¸6ß·Z?80ýÎ7$²ö7ØÛ7Ó/#8ØÛ7F)78Ó/#8ÇÉ—8¢¹8ÌBs8¿*K8w3_8ÌBs8ÇÉ—8ÇÉ—8Fñ«8¢¹8¬ƒ8ÇÉ—8Y¶8Y¶8z!À8Fñ«8w3_8Ó/#8`Ü¡8ÇÉ—8F)78Ó/#8¢¹8ÌBs8ÇÉ—8ÌBs8w3_8Fd§7ÌBs8¿*K8I17étÆ6I17ØÛ7I17Fd§7$²ö7I17• ·étÆ6A±5{\Q·I17ØÛ7I17A±5A±5I17I17JV?¸Mfg¸JV?¸Mfg¸˜Ö‘¸Ã相˜Ö‘¸ )º¸ô¼ì¸°¸}|ظô¼ì¸Ã相/x{¸°¸Qû¥¸/x{¸Mfg¸˜Ö‘¸˜Ö‘¸JV?¸ÎZS¸6ß·{\Q·ÎZS¸uY+¸ ‘··ÎZS¸ÎZS¸JV?¸JV?¸uY+¸/x{¸JV?¸z¸ ‘··JV?¸uY+¸• ·• ·uY+¸{\Q·A±5• ·Mfg¸z¸s· ‘··étÆ6I17ØçU¶I17• ·• ·étÆ6s· ‘··ØÛ7$²ö7Fd§7étÆ6étÆ60ýÎ7ØÛ70ýÎ7Ó/#8¬ƒ8ÇÉ—8Fñ«8z!À8ÌBs8¬ƒ8z!À8¿*K8ÇÉ—8¿*K8ØÛ7F)78A±5$²ö7Ó/#8ØÛ7Fd§7Z?8A±5ØÛ7ØÛ7 ‘··0ýÎ7I17ÎZS¸ ‘··JV?¸uY+¸/x{¸Mfg¸Qû¥¸Ô^θÔ^θ}|ظ°¸ûBĸûBĸQû¥¸Ô^θûBĸûBĸ )º¸ûBĸÔ^θûBĸûBĸûBĸå›â¸ûBĸQû¥¸Ô^θûBĸ )º¸˜Ö‘¸˜Ö‘¸ )º¸Ô^θ˜Ö‘¸Ã相ÎZS¸Mfg¸Qû¥¸ÎZS¸JV?¸uY+¸z¸Mfg¸s·ØÛ7I17$²ö7A±5ØçU¶ØçU¶étÆ6s·A±5I17ÌBs8F)78w3_8ÌBs8$²ö7Z?8Ó/#8¬ƒ8Ó/#8¿*K8w3_8$²ö7Z?8Z?8Z?8$²ö7F)78¿*K8I17étÆ6$²ö7Fd§7• ·0ýÎ7Fd§7Fd§70ýÎ7ØÛ7étÆ6Fd§7étÆ6{\Q·ØçU¶{\Q·s·ØçU¶{\Q·6ß·.e¸uY+¸6ß·JV?¸ÎZS¸úLJ¸úLJ¸°¸°¸ûBĸ}|ظ°¸ûBĸ}|ظšßö¸w¼¹´$¹šßö¸ô¼ì¸šßö¸ûBĸ}|ظšßö¸å›â¸w¼¹ô¼ì¸@¨ +¹¸”¹å¹@¨ +¹ô¼ì¸VѹVѹå¹ô¼ì¸ô¼ì¸ô¼ì¸¸”¹Qû¥¸°¸Qû¥¸˜Ö‘¸úLJ¸Mfg¸Mfg¸z¸6ß·6ß·• ·s·I17ØÛ7Z?8ØÛ7F)78Ó/#8Y¶8$²ö7Z?8Ó/#8ÌBs8F)78ÌBs8¿*K8¿*K8ÌBs8¿*K8$²ö7¿*K8w3_8Z?80ýÎ7Z?8 ‘··ØçU¶étÆ6ØçU¶étÆ6ØçU¶{\Q·ØçU¶ ‘··{\Q·z¸JV?¸z¸Mfg¸úLJ¸ûBĸQû¥¸ )º¸ )º¸Ã相Ã相Qû¥¸˜Ö‘¸}|ظ˜Ö‘¸Ã相°¸°¸°¸°¸Ã相°¸Ã相 )º¸ÎZS¸Ô^θ°¸Ã相}|ظ}|ظQû¥¸˜Ö‘¸Ô^θÃ相uY+¸JV?¸˜Ö‘¸JV?¸JV?¸/x{¸Ã相ÎZS¸{\Q·ÎZS¸6ß·{\Q·• ·A±5{\Q·ØçU¶ ‘··s·0ýÎ7ØÛ7ÇÉ—8w3_8¢¹8¢¹8¿*K8Ó/#8w3_8¬ƒ8Z?8ÌBs8`Ü¡8Y¶8ÇÉ—8Fñ«8.xÞ8z!À8’˜è8z!À8’˜è8•ºò8†è9¢^69'9·-,9'9†è9âw;9¦‘@9pŽn9§Z9ç«E9e½9ÿ!9†è9'9'9¢^69e½9™9™9&Þü8.xÞ8{YÔ8ÿ!9†è9’˜è8<Ê8’˜è8<Ê8z!À8Fñ«8{YÔ8.xÞ8{YÔ8Fñ«8.xÞ8<Ê8¢¹8Fñ«8Fñ«8w3_8¢¹8Y¶8¬ƒ8Ó/#8¿*K8Fd§7A±5ØçU¶A±5Fd§7ØçU¶A±5ØÛ7ØÛ7Fd§70ýÎ7ÇÉ—8Ó/#80ýÎ7F)78¿*K8¿*K8F)78$²ö7F)78$²ö7w3_8Z?8Z?8Fd§7Ó/#8`Ü¡8Y¶8Fñ«8z!À8Y¶8.xÞ8’˜è8Ù”9<Ê8Ù”9ÿ!9•ºò8.xÞ8ɨ 9ɨ 9&Þü8Ù”9™9•ºò8<Ê8<Ê8¢¹8¢¹8Fñ«8Y¶8F)780ýÎ7ÌBs8¬ƒ8Fñ«8{YÔ8`Ü¡8Fñ«8`Ü¡8Fñ«8`Ü¡8ÌBs8w3_8¬ƒ8¿*K8¢¹8`Ü¡8¿*K8¬ƒ8¿*K8¬ƒ8¿*K8ØÛ7¿*K8$²ö7ÌBs8F)78ØÛ7s·{\Q·{\Q·{\Q·{\Q· ‘··uY+¸.e¸ ‘··6ß·z¸{\Q·z¸uY+¸˜Ö‘¸ÎZS¸˜Ö‘¸úLJ¸°¸ûBĸ°¸°¸Ã相˜Ö‘¸JV?¸ÎZS¸z¸• ·A±5• ·s·A±5$²ö7Fd§7étÆ6F)78ØÛ7I17ØÛ7Ó/#8`Ü¡8ÇÉ—8¢¹8ÇÉ—8`Ü¡8z!À8`Ü¡8’˜è8<Ê8.xÞ8<Ê8Y¶8z!À8<Ê8.xÞ8.xÞ8Fñ«8z!À8Fñ«8.xÞ8&Þü8&Þü8ɨ 9·-,9e½9•ºò8Ù”9'9e½9¥Ò9.xÞ8ɨ 9ÿ!9’˜è8{YÔ8.xÞ8Y¶8¬ƒ8Fñ«8¬ƒ8¢¹8Fñ«8w3_8F)78ÌBs8ÇÉ—8¿*K8w3_8¿*K8$²ö7I17étÆ6I170ýÎ7A±5A±5A±5I170ýÎ7étÆ6• · ‘··6ß·ØçU¶I17{\Q·.e¸z¸ ‘··6ß·uY+¸ØçU¶z¸.e¸˜Ö‘¸˜Ö‘¸z¸z¸JV?¸ ‘··.e¸uY+¸ )º¸Ã相.e¸ÎZS¸Ã相ûBĸQû¥¸°¸˜Ö‘¸JV?¸Ã相˜Ö‘¸Mfg¸˜Ö‘¸ÎZS¸6ß·z¸Qû¥¸uY+¸.e¸• ·6ß· ‘··• ·A±5I17A±5Fd§7s·• ·ØÛ7Z?8A±5étÆ6A±5Z?8A±5I17s·I17ØÛ7A±5ÎZS¸A±5A±5ØçU¶I17$²ö70ýÎ7s·I17ØçU¶s·6ß·z¸uY+¸Mfg¸ ‘··/x{¸z¸JV?¸ÎZS¸ )º¸˜Ö‘¸°¸ûBĸÃ相˜Ö‘¸Qû¥¸ )º¸°¸ )º¸ûBĸ}|ظÔ^θÃ相å›â¸w¼¹Ô^θVѹ´$¹H[3¹Ùæ¹ô¼ì¸}|ظ¸”¹å¹Vѹšßö¸å¹šßö¸å¹ûBĸ°¸Ô^θûBĸ°¸˜Ö‘¸˜Ö‘¸Ã相˜Ö‘¸Ã相Mfg¸.e¸• ·uY+¸s·.e¸ ‘··A±5{\Q·étÆ6ØÛ7$²ö7w3_8¬ƒ8¿*K8F)78w3_8w3_8ÌBs8`Ü¡8`Ü¡8z!À8<Ê8¢¹8Ó/#8ÌBs8¬ƒ8F)78F)78ÇÉ—8¿*K8Ó/#8¿*K8w3_8¬ƒ8w3_8F)78$²ö70ýÎ7$²ö7ÇÉ—8w3_8étÆ6Fd§7étÆ6ØçU¶ØçU¶ØçU¶I17z¸JV?¸uY+¸JV?¸˜Ö‘¸uY+¸JV?¸ÎZS¸Ã相JV?¸Qû¥¸/x{¸Ã相/x{¸uY+¸Mfg¸Ã相JV?¸/x{¸ ‘··z¸z¸ÎZS¸ÎZS¸˜Ö‘¸JV?¸Ã相ÎZS¸ÎZS¸˜Ö‘¸˜Ö‘¸˜Ö‘¸Mfg¸Mfg¸z¸˜Ö‘¸/x{¸ÎZS¸uY+¸˜Ö‘¸Mfg¸z¸s·6ß·.e¸ ‘··• ·z¸.e¸ØçU¶{\Q·z¸s·s· ‘··s·6ß· ‘··ØçU¶ØÛ7ØçU¶ØÛ7F)78Z?8Fd§7I17étÆ6Z?8¿*K8w3_8F)78$²ö7Z?8Ó/#8Ó/#8Ó/#8F)78ÌBs8¿*K8F)78¬ƒ8ØÛ7F)78ÌBs80ýÎ7Z?8¢¹80ýÎ7F)78Fd§7¿*K8Ó/#8F)78Fd§7I17ØçU¶ ‘··Ó/#8étÆ6I17A±5 ‘··s·• ·{\Q·6ß·{\Q·.e¸/x{¸6ß·úLJ¸˜Ö‘¸ )º¸Ã相°¸Ã相/x{¸ÎZS¸Ã相ÎZS¸Mfg¸Qû¥¸Ã相Ã相˜Ö‘¸°¸ûBĸÃ相Ô^θQû¥¸˜Ö‘¸ÎZS¸JV?¸uY+¸6ß·JV?¸.e¸6ß·{\Q·I17ØÛ7I17étÆ6ØÛ7I170ýÎ7étÆ60ýÎ7Z?8Fd§7I17Fd§7Ó/#8Ó/#8¢¹8.xÞ8ÇÉ—8¢¹8`Ü¡8Y¶8<Ê8<Ê8Fñ«8Y¶8’˜è8¬ƒ8Y¶8’˜è8&Þü8<Ê8Fñ«8Y¶8¬ƒ8w3_8`Ü¡8ÌBs8F)78Z?8ÌBs8¢¹8Fd§7Ó/#8w3_80ýÎ7$²ö7Z?80ýÎ7I17I17étÆ6z¸uY+¸Mfg¸.e¸A±5 ‘··uY+¸ÎZS¸Mfg¸Mfg¸.e¸JV?¸ÎZS¸˜Ö‘¸ÎZS¸uY+¸/x{¸ÎZS¸ÎZS¸ÎZS¸JV?¸ÎZS¸.e¸z¸JV?¸JV?¸˜Ö‘¸˜Ö‘¸˜Ö‘¸ÎZS¸ûBĸJV?¸Ã相 )º¸uY+¸Ã相.e¸ÎZS¸ÎZS¸uY+¸˜Ö‘¸Ã相Mfg¸uY+¸ ‘··6ß·z¸.e¸ ‘··6ß·s·.e¸ ‘··{\Q·A±5$²ö7ØçU¶$²ö7ÌBs8w3_8Z?8¬ƒ8¬ƒ8Ó/#8Ó/#8Ó/#8`Ü¡8¢¹8ÌBs8<Ê8<Ê8.xÞ8.xÞ8`Ü¡8`Ü¡8•ºò8z!À8{YÔ8ɨ 9’˜è8Fñ«8z!À8<Ê8•ºò8Y¶8¬ƒ8Fñ«8z!À8¬ƒ8¢¹8$²ö7Ó/#8¿*K8$²ö7Fd§7¢¹8I170ýÎ7$²ö7Z?8Z?8I17Z?8I17étÆ6I17$²ö7ÌBs8F)78Ó/#8ØÛ7A±5Ó/#8ØÛ7étÆ6A±5étÆ6ØçU¶• ·ØçU¶.e¸uY+¸.e¸{\Q·s·• ·z¸6ß·6ß·6ß·z¸6ß·ÎZS¸°¸˜Ö‘¸Ã相Ã相{\Q·Ã相z¸Mfg¸.e¸.e¸JV?¸s·s·{\Q·s·A±5ØÛ7Fd§7¿*K8Z?8¿*K8¬ƒ8ÌBs8¢¹8{YÔ8.xÞ8&Þü8Ù”9e½9•ºò8•ºò8&Þü8¥Ò9Ù”9•ºò8ɨ 9e½9•ºò8.xÞ8.xÞ8<Ê8•ºò8Ù”9¥Ò9&Þü8{YÔ8Y¶8¢¹8ÌBs8w3_8w3_8¿*K80ýÎ7$²ö7ØÛ7A±5étÆ6Z?8Fd§7{\Q·ØçU¶6ß·6ß·z¸uY+¸uY+¸Mfg¸.e¸JV?¸uY+¸˜Ö‘¸JV?¸6ß·• ·/x{¸˜Ö‘¸JV?¸Mfg¸°¸Qû¥¸JV?¸Mfg¸z¸JV?¸.e¸ÎZS¸ÎZS¸Ã相/x{¸Mfg¸ ‘··I17z¸ ‘·· ‘··• ·ÎZS¸6ß·6ß· ‘··z¸• ·ØçU¶A±5I17I17A±5étÆ6ØÛ7ØçU¶0ýÎ7F)78¿*K8¿*K8`Ü¡8¿*K8Fñ«8<Ê8¢¹8ÌBs8.xÞ8{YÔ8ÇÉ—8ÌBs8Y¶8Fñ«8z!À8ÌBs8¬ƒ8¿*K8¿*K8ÌBs8ÌBs8ÌBs8¿*K8w3_8Fñ«8Fñ«8z!À8z!À8ÌBs8¬ƒ8F)78Z?8w3_8w3_8Ó/#8w3_80ýÎ7ØÛ7s·ØçU¶6ß· ‘··ØÛ7{\Q·JV?¸• ·{\Q·z¸{\Q·.e¸ ‘··.e¸˜Ö‘¸°¸/x{¸Ã相Qû¥¸Mfg¸ûBĸ°¸Ô^θ°¸/x{¸Ã相ûBĸ˜Ö‘¸°¸Ã相Ã相 )º¸Ã相˜Ö‘¸Mfg¸.e¸uY+¸ )º¸JV?¸6ß·{\Q·{\Q·z¸uY+¸A±5ØÛ70ýÎ7$²ö7ØÛ7Z?8ØÛ7$²ö7Ó/#80ýÎ7¿*K8$²ö7F)78`Ü¡8ÇÉ—8`Ü¡8Y¶8{YÔ8z!À8e½9ÿ!9e½9ɨ 9.xÞ8.xÞ8e½9{YÔ8{YÔ8’˜è8z!À8Fñ«8¿*K8Y¶8¬ƒ8w3_8Fd§7Fd§7F)78F)78Ó/#8ØÛ7Fd§7étÆ6A±5ØçU¶{\Q·étÆ6• ·.e¸Mfg¸/x{¸/x{¸JV?¸úLJ¸úLJ¸úLJ¸Ã相Mfg¸JV?¸Ã相úLJ¸Ô^θÃ相Qû¥¸ûBĸ )º¸ )º¸ )º¸Ã相ÎZS¸Mfg¸z¸ÎZS¸/x{¸.e¸z¸uY+¸JV?¸.e¸6ß·.e¸{\Q·A±5 ‘··6ß·z¸{\Q· ‘··A±5{\Q·ØçU¶ØçU¶{\Q·ØÛ7I17uY+¸• ·Fd§7F)78Ó/#8Ó/#8¿*K8w3_8w3_8¿*K8w3_8F)78$²ö7$²ö70ýÎ7Z?8w3_8¿*K8¿*K8F)78ÌBs8ÌBs8w3_8Fñ«8z!À8¢¹8ÌBs8F)780ýÎ7F)78Ó/#8¿*K8Fd§7ØÛ7Fd§7ÌBs8étÆ6ØÛ7I17Fd§7ØÛ7I17{\Q· ‘··z¸ ‘··{\Q·A±5{\Q·z¸.e¸JV?¸˜Ö‘¸úLJ¸uY+¸JV?¸˜Ö‘¸°¸Ã相Ô^θ )º¸å›â¸Qû¥¸ûBĸûBĸÃ相Ã相 )º¸ )º¸Ã相°¸Ã相ûBĸÃ相Qû¥¸°¸Ô^θ}|ظûBĸ}|ظô¼ì¸ )º¸šßö¸ô¼ì¸Qû¥¸˜Ö‘¸/x{¸˜Ö‘¸uY+¸Mfg¸Mfg¸Mfg¸z¸˜Ö‘¸˜Ö‘¸uY+¸˜Ö‘¸Mfg¸.e¸Mfg¸°¸Ã相Mfg¸˜Ö‘¸Mfg¸ÎZS¸.e¸ ‘··6ß·z¸ ‘··JV?¸s·étÆ66ß·étÆ6A±5$²ö7Fd§7$²ö7$²ö7Fd§70ýÎ7w3_8F)78ØçU¶ØÛ7ØÛ7I17Z?8Z?8I17ØçU¶0ýÎ7$²ö70ýÎ70ýÎ7$²ö7I17ØçU¶ØçU¶ØçU¶• ·ÎZS¸6ß·ÎZS¸JV?¸˜Ö‘¸uY+¸JV?¸JV?¸/x{¸z¸˜Ö‘¸uY+¸Mfg¸°¸Ã相Qû¥¸Qû¥¸˜Ö‘¸/x{¸úLJ¸/x{¸JV?¸/x{¸°¸˜Ö‘¸úLJ¸°¸˜Ö‘¸Ã相°¸uY+¸˜Ö‘¸Mfg¸Ã相°¸ûBĸ˜Ö‘¸˜Ö‘¸.e¸Mfg¸.e¸ÎZS¸6ß·z¸{\Q·A±5A±5z¸s· ‘·· ‘··.e¸.e¸• ·étÆ6{\Q·z¸étÆ66ß·z¸ØçU¶étÆ6étÆ6I17I17$²ö7F)78I170ýÎ70ýÎ7A±5Ó/#8I17$²ö7ØÛ7ØÛ7Fd§7Ó/#80ýÎ7Fd§7F)78¿*K8étÆ6I17Fd§7¿*K8Ó/#8A±5I17• · ‘··JV?¸ÎZS¸Mfg¸/x{¸uY+¸˜Ö‘¸Mfg¸Ã相Qû¥¸˜Ö‘¸JV?¸˜Ö‘¸°¸}|ظšßö¸å›â¸ûBĸ}|ظÃ相ûBĸå›â¸Ô^θ°¸Ã相˜Ö‘¸°¸Ã相Qû¥¸Ã相å›â¸Ô^θûBĸ/x{¸Mfg¸°¸Ã相Ã相ûBĸÎZS¸˜Ö‘¸úLJ¸Mfg¸ÎZS¸uY+¸.e¸ ‘··z¸z¸z¸{\Q·z¸z¸z¸ ‘··ØçU¶étÆ6A±5étÆ6$²ö7w3_8w3_8ÌBs8F)78z!À8z!À8ÌBs8¬ƒ8¬ƒ8¬ƒ8Ó/#8F)78¬ƒ8ÇÉ—8F)78w3_8ÌBs8¿*K8w3_8Z?8¿*K8¿*K8Ó/#8Ó/#8Z?8F)78¿*K8w3_8ØÛ7• ·ØÛ7¢¹8w3_8F)78Z?80ýÎ7ØÛ7Fd§7étÆ60ýÎ7F)78étÆ6ØçU¶Fd§7A±5ØÛ7$²ö7$²ö70ýÎ7I17étÆ6{\Q·• · ‘··• ·étÆ6s·.e¸uY+¸uY+¸/x{¸.e¸6ß·ÎZS¸.e¸.e¸ÎZS¸ÎZS¸uY+¸ÎZS¸{\Q·ØçU¶A±5s·ØçU¶ØçU¶ØÛ7ØçU¶z¸I17I17Z?8F)78Fd§7¿*K8ÇÉ—8¢¹8Fñ«8Fñ«8Y¶8&Þü8’˜è8`Ü¡8z!À8.xÞ8z!À8Fñ«8.xÞ8Y¶8Fñ«8.xÞ8Ù”9&Þü8e½9'9†è9†è9ÿ!9'9ÿ!9¥Ò9ÿ!9™9™9e½9•ºò8<Ê8ÇÉ—8`Ü¡8`Ü¡8Fñ«8¬ƒ8Fñ«8z!À8`Ü¡8Fñ«8`Ü¡8<Ê8z!À8¢¹8’˜è8¢¹8Fñ«8ÇÉ—8Y¶8Y¶8¢¹8$²ö7¿*K8w3_8A±5A±5s·0ýÎ7{\Q·z¸ÎZS¸˜Ö‘¸ÎZS¸˜Ö‘¸˜Ö‘¸}|ظÃ相 )º¸šßö¸˜Ö‘¸˜Ö‘¸úLJ¸z¸JV?¸Qû¥¸.e¸JV?¸.e¸.e¸.e¸ØçU¶ØÛ7étÆ6• ·s·ØçU¶Z?80ýÎ7ØÛ7I17¢¹8`Ü¡8.xÞ8Fñ«8.xÞ8•ºò8z!À8•ºò8•ºò8e½9™9Ù”9Ù”9•ºò8’˜è8{YÔ8Fñ«8{YÔ8&Þü8<Ê8z!À8•ºò8e½9’˜è8z!À8&Þü8&Þü8ɨ 9.xÞ8ÇÉ—8™9’˜è8<Ê8™9’˜è8z!À8•ºò8.xÞ8Fñ«8•ºò8<Ê8z!À8Fñ«8ÇÉ—8Z?8Z?8Ó/#8F)78w3_8Z?80ýÎ70ýÎ76ß·s· ‘··ØçU¶étÆ6z¸6ß·Mfg¸.e¸z¸/x{¸Ã相˜Ö‘¸°¸Ô^θÎZS¸Ã相úLJ¸}|ظ )º¸Qû¥¸˜Ö‘¸/x{¸ÎZS¸ÎZS¸uY+¸ÎZS¸˜Ö‘¸ûBĸûBĸ/x{¸uY+¸ÎZS¸z¸.e¸uY+¸.e¸{\Q·z¸uY+¸6ß·{\Q·ØÛ7I17A±5Fd§7ØÛ7ØçU¶Fd§7¿*K8ØçU¶ØÛ7A±5$²ö7ØÛ7s·w3_8Fd§7{\Q·Fd§7A±5ØÛ70ýÎ70ýÎ7Z?8F)78$²ö7$²ö70ýÎ7$²ö7étÆ6{\Q·0ýÎ7w3_80ýÎ7ØçU¶0ýÎ70ýÎ7ØÛ7{\Q·étÆ6{\Q·ØçU¶A±5Fd§7I17$²ö70ýÎ7s·s· ‘··z¸ ‘··uY+¸JV?¸Mfg¸{\Q·.e¸uY+¸6ß·Mfg¸˜Ö‘¸ )º¸Ô^θÔ^θ幚ßö¸Ô^θšßö¸å¹å¹Ô^θå›â¸¸”¹å¹}|ظ}|ظ}|ظô¼ì¸Ô^θ}|ظ@¨ +¹Ô^θ˜Ö‘¸ÎZS¸Ô^θå›â¸ô¼ì¸˜Ö‘¸/x{¸Mfg¸.e¸6ß·{\Q·0ýÎ7A±5ØçU¶s·ØÛ7s·I17$²ö7$²ö7Z?8$²ö7Ó/#8$²ö7w3_8Ó/#8.xÞ8{YÔ8ÇÉ—8{YÔ8’˜è8Fñ«8`Ü¡8ÇÉ—8Fñ«8`Ü¡8<Ê8{YÔ8z!À8Fñ«8¬ƒ8ÇÉ—8Y¶80ýÎ7F)78¬ƒ8¿*K8A±5¿*K8F)78¿*K8Z?8w3_8F)78F)78w3_8F)78ØÛ7ØÛ7ØçU¶.e¸ØçU¶z¸étÆ6s·{\Q·• ·uY+¸6ß·.e¸Mfg¸.e¸6ß·z¸uY+¸ÎZS¸ÎZS¸uY+¸Ã相Mfg¸z¸• ·z¸z¸ÎZS¸ÎZS¸• ·ÎZS¸˜Ö‘¸˜Ö‘¸z¸/x{¸ÎZS¸ ‘··Mfg¸.e¸z¸z¸• ·• ·6ß·• ·ØçU¶ØçU¶I17I17¿*K80ýÎ7Ó/#8Z?8ØçU¶F)78¢¹8Z?8`Ü¡8ÇÉ—8ÇÉ—8`Ü¡8w3_8<Ê8z!À8™9{YÔ8•ºò8{YÔ8.xÞ8&Þü8e½9•ºò8’˜è8.xÞ8{YÔ8.xÞ8ɨ 9¥Ò9†è9¥Ò9·-,9¢^69·-,9ÿ!9'9èE19Ù”9z!À8¥Ò9<Ê8.xÞ8Fñ«8¢¹8w3_8Fñ«8Fñ«8¿*K8¿*K8Ó/#8I17Fd§7$²ö7A±5• ·Fd§7ØçU¶{\Q·ØÛ7étÆ6ØÛ7Z?8ØÛ7 ‘··s·étÆ6A±5étÆ6A±50ýÎ7A±5A±5A±5$²ö7I17A±5ØçU¶s·• ·I17Fd§7étÆ6étÆ6$²ö70ýÎ7Fd§7Z?8¿*K8¢¹8¿*K8$²ö7Ó/#8$²ö7$²ö7F)78w3_8Ó/#8¿*K8¿*K8Ó/#8¬ƒ8Ó/#8F)78Z?8¿*K80ýÎ7Z?8$²ö7¿*K8Fñ«8w3_8`Ü¡8¬ƒ8¢¹8z!À8Y¶8z!À8Y¶8Fñ«8`Ü¡8Y¶8ÇÉ—8Y¶8¬ƒ8ÌBs8`Ü¡8w3_8ÇÉ—8ÌBs8ÇÉ—8ÌBs8ÌBs80ýÎ7Z?80ýÎ7ØÛ7• ·ØÛ7I17étÆ6 ‘··ØçU¶{\Q·{\Q·6ß·A±5 ‘·· ‘··JV?¸/x{¸6ß·Mfg¸ÎZS¸JV?¸Qû¥¸˜Ö‘¸Ã相Qû¥¸å›â¸}|ظûBĸÔ^θšßö¸ô¼ì¸ô¼ì¸ô¼ì¸¸”¹å¹Ô^θ@¨ +¹å¹Ô^θ )º¸å›â¸ )º¸ô¼ì¸}|ظšßö¸ô¼ì¸Ô^θÔ^θ )º¸ )º¸Ã相Qû¥¸Mfg¸úLJ¸JV?¸Mfg¸uY+¸ÎZS¸z¸.e¸.e¸6ß·s·s·• ·A±56ß·• ·ØçU¶ ‘··ØçU¶• ·A±5I17$²ö7Fd§7Ó/#8¢¹8F)78ÇÉ—8Y¶8Ó/#8w3_8¢¹8w3_8ÌBs8`Ü¡8ÇÉ—8F)78ÌBs8ÌBs8¿*K8$²ö7F)78w3_8I17étÆ6• ·z¸z¸z¸JV?¸uY+¸Mfg¸Mfg¸˜Ö‘¸Mfg¸ )º¸å›â¸}|ظå¹ô¼ì¸å›â¸VѹûBĸVѹ@¨ +¹å›â¸Vѹ¸”¹´$¹Vѹšßö¸@¨ +¹Vѹ@¨ +¹å¹´$¹+)¹Ùæ¹w¼¹@¨ +¹+)¹+)¹úü¹:t8¹ßB.¹ßB.¹H[3¹¨§B¹Vѹ@¨ +¹@¨ +¹˜Ö‘¸°¸úLJ¸˜Ö‘¸JV?¸Qû¥¸˜Ö‘¸˜Ö‘¸z¸z¸Mfg¸Mfg¸.e¸.e¸ ‘··{\Q·s·A±5I17ØçU¶ØÛ7ØçU¶ ‘··ØçU¶6ß·{\Q·• ·.e¸• ·z¸• ·I17 ‘··ØçU¶A±5A±5{\Q·6ß·ØçU¶ØÛ7• ·A±5A±5I17ØÛ7ØçU¶ØçU¶I17uY+¸JV?¸z¸z¸.e¸Mfg¸6ß· ‘··.e¸z¸Mfg¸ÎZS¸°¸å›â¸Qû¥¸ )º¸Qû¥¸Ô^θ}|ظå›â¸˜Ö‘¸ )º¸å¹å›â¸šßö¸å¹¸”¹ô¼ì¸Ô^θšßö¸å›â¸å›â¸Ô^θ )º¸°¸Ô^θ˜Ö‘¸Ã相Ô^θÃ相Qû¥¸ )º¸°¸Ô^θ˜Ö‘¸Mfg¸úLJ¸˜Ö‘¸/x{¸z¸ÎZS¸z¸uY+¸ÎZS¸.e¸{\Q· ‘··ØçU¶ØÛ7{\Q·• ·• ·6ß·ØçU¶ØçU¶ØçU¶Fd§7ØçU¶ØçU¶• ·Ó/#8$²ö7$²ö7ÌBs8ÇÉ—8¬ƒ8¬ƒ8`Ü¡8w3_8w3_8w3_8Ó/#8Z?8ØÛ7Ó/#8Fd§70ýÎ7$²ö7I17I170ýÎ7A±5ØÛ7F)78I17 ‘··ØçU¶s·ØçU¶{\Q·{\Q·JV?¸ÎZS¸z¸.e¸JV?¸°¸Qû¥¸Mfg¸úLJ¸Qû¥¸˜Ö‘¸°¸°¸Ô^θ}|ظ}|ظ¸”¹´$¹w¼¹@¨ +¹+)¹úü¹w¼¹@¨ +¹@¨ +¹@¨ +¹ô¼ì¸´$¹šßö¸šßö¸å›â¸Qû¥¸å›â¸ûBĸúLJ¸°¸Ã相Qû¥¸˜Ö‘¸/x{¸ )º¸Ô^θ )º¸ûBĸÃ相/x{¸Mfg¸ÎZS¸/x{¸uY+¸ÎZS¸Qû¥¸JV?¸JV?¸úLJ¸JV?¸JV?¸uY+¸uY+¸ ‘··uY+¸.e¸z¸• ·Fd§7F)78F)78w3_8F)78$²ö7Z?8Ó/#8Z?8$²ö7Fd§7Z?8$²ö70ýÎ7ØÛ7Ó/#8¿*K8Ó/#8F)78ÌBs8`Ü¡8ÇÉ—8¬ƒ8`Ü¡8ÇÉ—8¿*K8Ó/#8Z?8$²ö7I17I17Ó/#8Ó/#8A±5Ó/#8Ó/#8¿*K8étÆ6A±5F)78w3_8w3_8Ó/#80ýÎ7étÆ6I17ØçU¶z¸• ·I17A±5z¸A±5I17s·{\Q·6ß·s·ØçU¶{\Q· ‘··• ·.e¸6ß·• · ‘··ØçU¶z¸s·s·.e¸6ß·• ·z¸z¸ ‘··ØÛ7A±5s·• ·I17$²ö7I17$²ö7I17$²ö7¿*K8Ó/#8Ó/#8`Ü¡8`Ü¡8z!À8{YÔ8z!À8¬ƒ8ÇÉ—8¢¹8F)78$²ö7Y¶8Fñ«8ÇÉ—8ÇÉ—8Z?8ÇÉ—8w3_8ÌBs8Z?8ØÛ7ÌBs8ÇÉ—8ÌBs8¿*K8F)78F)78Ó/#8Fd§7Z?8$²ö7ØÛ7$²ö7Z?8$²ö7F)78Ó/#8Z?8Ó/#8ÇÉ—8w3_8`Ü¡8¢¹8ÌBs8Fñ«8¬ƒ8¢¹8ÌBs8Z?8ÇÉ—8F)78Fñ«8¢¹8Ó/#8Z?80ýÎ7$²ö7Ó/#8Z?8$²ö7ØÛ70ýÎ7Fd§7{\Q·ØÛ7$²ö7s·étÆ6I17Fd§7étÆ6Fd§7$²ö7I17$²ö7Z?8A±5Fd§7F)78¢¹8¢¹8ÇÉ—8ÌBs8`Ü¡8`Ü¡8Y¶8{YÔ8<Ê8`Ü¡8•ºò8.xÞ8<Ê8’˜è8{YÔ8ɨ 9'9e½9Ù”9èE19'9ç«E9ÿ!9†è9Ù”9e½9¦‘@9¥Ò9e½9¥Ò9ÿ!9ɨ 9e½9™9¦‘@9èE19•ºò8e½9’˜è8Fñ«8&Þü8™9.xÞ8.xÞ8{YÔ8Ù”9™9.xÞ8¥Ò9ÿ!9Ù”9’˜è8Ù”9Ù”9•ºò8.xÞ8Fñ«8ÇÉ—8¬ƒ8F)78$²ö7ÌBs8ÌBs8w3_8Ó/#8$²ö7ØÛ7I170ýÎ7Z?8¿*K8Z?8Ó/#8$²ö7Z?8F)78Z?8¿*K8¬ƒ8Ó/#8¬ƒ8¬ƒ8$²ö7ÇÉ—8Z?8¢¹8Y¶8&Þü8&Þü8™9™9.xÞ8™9e½9¥Ò9Ù”9'9.xÞ8†è9Ù”9e½9’˜è8’˜è8Fñ«8z!À8z!À8&Þü8¬ƒ8™9ɨ 9’˜è8ɨ 9ɨ 9<Ê8™9{YÔ8<Ê8z!À8{YÔ8™9’˜è8<Ê8{YÔ8’˜è8.xÞ8¢¹8.xÞ8¢¹8`Ü¡8z!À8™9.xÞ8Fñ«8Y¶8.xÞ8{YÔ8&Þü8•ºò8z!À8.xÞ8<Ê8’˜è8.xÞ8ÇÉ—8Y¶8¬ƒ8Fd§7¿*K8ÌBs8Z?8F)78Z?8ØçU¶0ýÎ7Fd§7ØÛ7étÆ60ýÎ7¿*K8Fd§7Fd§7$²ö7Fd§7étÆ6Fd§7I17¿*K8$²ö7w3_8Z?8Z?8ØÛ7étÆ6w3_80ýÎ7Fd§7I170ýÎ7Ó/#8ØÛ7I17Fd§7Ó/#8Ó/#8ØÛ7Z?8¿*K8¿*K8¢¹8w3_8`Ü¡8z!À8z!À8{YÔ8•ºò8.xÞ8’˜è8™9™9•ºò8•ºò8•ºò8<Ê8’˜è8™9Ù”9Ù”9¥Ò9·-,9èE19Ù”9e½9e½9e½9ÿ!9ɨ 9ɨ 9e½9™9·-,9e½9¥Ò9e½9ɨ 9e½9™9•ºò8{YÔ8.xÞ8•ºò8Y¶8’˜è8.xÞ8<Ê8ÇÉ—8ÌBs8Y¶8ÇÉ—8Fñ«8Fñ«8Fñ«8ÌBs8z!À8ÇÉ—8¬ƒ8ÌBs8¬ƒ8F)78w3_8F)78Ó/#8F)78w3_8Z?8Z?8$²ö7Ó/#8Fd§7étÆ6s· ‘··ØçU¶ØçU¶A±5A±5ØÛ70ýÎ7A±5• ·0ýÎ7$²ö70ýÎ7Ó/#8Ó/#8¿*K8Ó/#8Ó/#8Ó/#8¢¹8Y¶8¬ƒ8Y¶8.xÞ8&Þü8.xÞ8™9¥Ò9¥Ò9ɨ 9•ºò8e½9¥Ò9e½9ɨ 9'9Ù”9&Þü8&Þü8.xÞ8¥Ò9’˜è8Ù”9¥Ò9'9™9™9’˜è8•ºò8™9™9{YÔ8w3_8ÇÉ—8Y¶8z!À8<Ê8¬ƒ8z!À8`Ü¡8z!À8.xÞ8Y¶8ÇÉ—8w3_8ÌBs8ÌBs8F)78$²ö70ýÎ7Fd§7Fd§7ØÛ7ØÛ7s·6ß·z¸uY+¸.e¸°¸˜Ö‘¸ )º¸ô¼ì¸Ã相ûBĸ˜Ö‘¸Ã相ûBĸ/x{¸JV?¸Ã相}|ظå›â¸Ô^θQû¥¸}|ظ )º¸úLJ¸°¸ô¼ì¸ûBĸô¼ì¸ )º¸°¸Ã相ûBĸûBĸå›â¸Ô^θ˜Ö‘¸°¸/x{¸ûBĸ˜Ö‘¸Ã相 )º¸JV?¸Mfg¸uY+¸z¸uY+¸JV?¸z¸z¸Qû¥¸˜Ö‘¸Mfg¸6ß·6ß·z¸z¸• ·étÆ6A±5étÆ6A±5{\Q·• ·s·JV?¸.e¸ÎZS¸˜Ö‘¸Qû¥¸°¸Qû¥¸Ã相Ã相°¸˜Ö‘¸˜Ö‘¸Mfg¸Ã相ÎZS¸˜Ö‘¸Mfg¸z¸/x{¸Qû¥¸°¸úLJ¸ûBĸ˜Ö‘¸°¸ûBĸ°¸Qû¥¸Qû¥¸˜Ö‘¸ )º¸ )º¸Ô^θÔ^θûBĸûBĸ¸”¹¸”¹ô¼ì¸@¨ +¹w¼¹å›â¸Qû¥¸}|ظ}|ظ@¨ +¹å›â¸šßö¸´$¹´$¹Vѹå¹å¹Vѹšßö¸ô¼ì¸w¼¹w¼¹å¹Ô^θ°¸Ô^θÙæ¹ô¼ì¸Ô^θå¹ô¼ì¸Ô^θå¹ûBĸÔ^θ )º¸Qû¥¸}|ظÃ相Ã相Ã相˜Ö‘¸Qû¥¸Ô^θ˜Ö‘¸}|ظ°¸°¸Qû¥¸˜Ö‘¸Qû¥¸Ô^θuY+¸˜Ö‘¸Ã相.e¸úLJ¸Mfg¸.e¸.e¸6ß·z¸z¸z¸ÎZS¸˜Ö‘¸Mfg¸Mfg¸ )º¸Ã相Ô^θ˜Ö‘¸Ã相úLJ¸/x{¸ )º¸ )º¸}|ظÔ^θ )º¸å›â¸˜Ö‘¸Ô^θ˜Ö‘¸˜Ö‘¸˜Ö‘¸Ã相}|ظå›â¸¸”¹Vѹ@¨ +¹w¼¹Vѹå¹ô¼ì¸}|ظ¸”¹w¼¹Vѹúü¹+)¹´$¹šßö¸Vѹw¼¹¸”¹¸”¹¸”¹VѹßB.¹:t8¹±=¹´$¹úü¹+)¹Ùæ¹Vѹ¸”¹VѹÙæ¹Vѹå¹w¼¹¸”¹w¼¹šßö¸ )º¸˜Ö‘¸ )º¸å¹šßö¸Ô^θå›â¸°¸šßö¸ô¼ì¸Qû¥¸ûBĸ )º¸ )º¸˜Ö‘¸Ã相uY+¸Mfg¸JV?¸˜Ö‘¸Mfg¸Ã相˜Ö‘¸˜Ö‘¸uY+¸uY+¸uY+¸Ã相JV?¸Mfg¸Ã相˜Ö‘¸uY+¸z¸6ß·{\Q·I17ØçU¶ØçU¶A±5s·étÆ66ß·JV?¸ØçU¶{\Q·z¸.e¸/x{¸°¸ÎZS¸6ß·Mfg¸uY+¸.e¸ÎZS¸JV?¸Mfg¸.e¸JV?¸Mfg¸ûBĸô¼ì¸å›â¸}|ظšßö¸å›â¸å¹ô¼ì¸Ô^θÔ^θ°¸Ã相ûBĸúLJ¸Ô^θûBĸ )º¸å›â¸Ô^θQû¥¸Mfg¸˜Ö‘¸Ô^θÃ相å›â¸ )º¸°¸Ô^θûBĸ˜Ö‘¸Ã相ÎZS¸/x{¸JV?¸{\Q·6ß·$²ö7• ·étÆ6$²ö7I17$²ö7étÆ6$²ö70ýÎ7Fd§70ýÎ7Z?8w3_8¿*K8w3_8¬ƒ8F)78$²ö7¿*K8Ó/#8F)78ÌBs8w3_8Ó/#8Fd§7w3_8Ó/#8Ó/#8F)78¢¹80ýÎ7Z?8I170ýÎ7Z?8$²ö7ØÛ7I17ØçU¶A±5{\Q·ØçU¶• ·uY+¸.e¸JV?¸z¸6ß·Ã相Qû¥¸˜Ö‘¸˜Ö‘¸JV?¸˜Ö‘¸˜Ö‘¸˜Ö‘¸JV?¸úLJ¸ )º¸/x{¸uY+¸˜Ö‘¸°¸/x{¸ÎZS¸.e¸˜Ö‘¸JV?¸JV?¸Ã相uY+¸uY+¸z¸ÎZS¸.e¸uY+¸z¸z¸ØçU¶6ß·{\Q· ‘··JV?¸JV?¸uY+¸6ß·uY+¸uY+¸• ·{\Q·• ·étÆ6ØçU¶Fd§7ØÛ7s·0ýÎ7Fd§70ýÎ7¬ƒ8¬ƒ8¬ƒ8`Ü¡8ÇÉ—8Fñ«8.xÞ8¢¹8Y¶8Ù”9{YÔ8¢¹8’˜è8Y¶8Fñ«8•ºò8™9{YÔ8™9•ºò8•ºò8’˜è8{YÔ8<Ê8.xÞ8z!À8<Ê8&Þü8.xÞ8`Ü¡8z!À8Y¶8w3_8ÇÉ—8F)780ýÎ7¿*K8A±5$²ö7¿*K80ýÎ7I17{\Q·A±5{\Q·{\Q·Fd§7• ·s·JV?¸/x{¸°¸ )º¸˜Ö‘¸}|ظQû¥¸Qû¥¸ )º¸Qû¥¸å¹å›â¸šßö¸+)¹ßB.¹úü¹Vѹúü¹Ùæ¹+)¹w¼¹w¼¹Vѹ¨§B¹+)¹¨§B¹+)¹úü¹w¼¹´$¹ûBĸw¼¹å¹ô¼ì¸ô¼ì¸ô¼ì¸}|ظå›â¸å›â¸Qû¥¸Ã相˜Ö‘¸Mfg¸6ß·• ·uY+¸/x{¸Mfg¸{\Q·• ·{\Q·{\Q·{\Q·6ß·I17étÆ6Fd§70ýÎ7ØÛ7{\Q·étÆ60ýÎ7¿*K8¿*K8Z?8Z?8ØÛ7{\Q·Z?8¬ƒ8F)78ÌBs8ÌBs8Z?8Ó/#8w3_8w3_8¬ƒ8I17Ó/#80ýÎ7F)78F)78Fd§7ÌBs8Z?8$²ö7w3_8s·$²ö7$²ö7étÆ6ØçU¶ØçU¶• ·• ·{\Q·I17• ·s·ØçU¶ ‘··• ·I176ß·z¸{\Q·{\Q·A±5s·ØÛ7I170ýÎ7A±5A±5A±5A±5étÆ60ýÎ7étÆ6étÆ6{\Q·I17s·• ·• ·s· ‘··{\Q·$²ö7$²ö7Fd§7Fd§7Z?80ýÎ7ÌBs8ØÛ7¿*K8ÌBs8`Ü¡8ÌBs8Ó/#8ÌBs8¿*K8F)78ÌBs8F)78Z?8ÌBs8Y¶8¬ƒ8F)78w3_8¬ƒ8F)78Ó/#8¿*K8Fd§7F)78Ó/#8Fd§7étÆ60ýÎ7ÌBs8ÌBs8w3_8ØÛ7ØÛ70ýÎ7étÆ6s·ØÛ7Ó/#80ýÎ7Fd§7étÆ6A±5{\Q·• · ‘··6ß·JV?¸ ‘··.e¸z¸/x{¸˜Ö‘¸Ã相Mfg¸ÎZS¸Mfg¸Mfg¸ÎZS¸/x{¸˜Ö‘¸uY+¸/x{¸/x{¸˜Ö‘¸Ô^θÔ^θ/x{¸uY+¸}|ظ°¸Ã相˜Ö‘¸˜Ö‘¸˜Ö‘¸Ã相˜Ö‘¸°¸˜Ö‘¸Qû¥¸/x{¸ÎZS¸.e¸6ß·z¸z¸JV?¸ÎZS¸ÎZS¸˜Ö‘¸JV?¸°¸.e¸ ‘··z¸• ·A±5{\Q·ØÛ7• ·6ß·ØçU¶A±5 ‘··{\Q·• ·s·ØÛ7s·A±5étÆ6Ó/#80ýÎ7Fd§7A±5étÆ6$²ö7Z?8¬ƒ8F)78ØÛ7A±5ØçU¶étÆ6$²ö7$²ö7I17 ‘··6ß· ‘··{\Q·I17étÆ6• ·s·ØÛ7I17s·A±5s· ‘··6ß·étÆ6 ‘·· ‘··.e¸uY+¸ ‘··.e¸˜Ö‘¸uY+¸.e¸Mfg¸uY+¸Ã相Ã相ûBĸÔ^θ )º¸ûBĸšßö¸å›â¸ô¼ì¸@¨ +¹@¨ +¹šßö¸Ã相ô¼ì¸å›â¸Ã相ûBĸûBĸ/x{¸uY+¸.e¸uY+¸.e¸z¸• · ‘··ÎZS¸z¸Mfg¸ÎZS¸• ·{\Q·uY+¸A±5étÆ6• ·étÆ6Fd§7I17étÆ6Fd§7Fd§7Ó/#8A±50ýÎ7$²ö7étÆ6étÆ6F)78Z?8étÆ6I17Fd§7Ó/#8Fd§7Z?8A±5z¸A±5A±5$²ö7Fd§7• · ‘··Mfg¸˜Ö‘¸{\Q· ‘··• ·ØÛ7• ·ØçU¶s·{\Q·F)78ØçU¶s·s·• ·.e¸{\Q·.e¸uY+¸z¸z¸úLJ¸Mfg¸°¸˜Ö‘¸Ã相 )º¸ )º¸ûBĸMfg¸Ã相°¸°¸Ã相.e¸Mfg¸JV?¸{\Q·z¸uY+¸6ß·.e¸• ·• · ‘·· ‘··uY+¸JV?¸uY+¸.e¸z¸/x{¸Mfg¸uY+¸6ß·z¸6ß·s· ‘··z¸uY+¸• · ‘··{\Q· ‘·· ‘·· ‘·· ‘··I17Fd§7{\Q·$²ö7Z?8Fd§70ýÎ7étÆ6$²ö7¢¹8¬ƒ8<Ê8¢¹8¿*K8Fd§7ÌBs8F)78Y¶8w3_8{YÔ8Fñ«8¬ƒ8ÇÉ—8<Ê8Fñ«8w3_8ÇÉ—8`Ü¡8<Ê8•ºò8Y¶8z!À8ÇÉ—8¢¹8¬ƒ8ÌBs8w3_8w3_8Z?8¿*K8Ó/#8¿*K8Z?8Fd§7Z?8Z?80ýÎ7I17Fd§7$²ö7$²ö7I17ØçU¶A±5I17{\Q·s·{\Q·JV?¸Mfg¸/x{¸úLJ¸˜Ö‘¸uY+¸Mfg¸Mfg¸/x{¸Qû¥¸Ã相˜Ö‘¸Ô^θå›â¸úLJ¸°¸˜Ö‘¸Ã相/x{¸˜Ö‘¸ )º¸˜Ö‘¸Qû¥¸uY+¸ÎZS¸uY+¸ ‘··.e¸6ß·{\Q·s·Fd§7F)78ØÛ7Ó/#8étÆ6Fd§7Z?8w3_8¬ƒ8w3_8Y¶8`Ü¡8¬ƒ8¢¹8¬ƒ8¢¹8ÇÉ—8F)78Ó/#8Z?8ÇÉ—8Y¶8¬ƒ8’˜è8<Ê8<Ê8™9Ù”9•ºò8.xÞ8’˜è8{YÔ8z!À8•ºò8<Ê8{YÔ8<Ê8<Ê8z!À8ÇÉ—8z!À8Y¶8`Ü¡8`Ü¡8Y¶8z!À8F)78ÌBs8z!À8Z?80ýÎ7A±5$²ö7Z?8A±5Ó/#8Ó/#8Ó/#8Fd§7• ·A±5I17s·z¸6ß·s·ØçU¶s·z¸s·étÆ6ÎZS¸ ‘··.e¸A±56ß·s·uY+¸ÎZS¸z¸6ß·z¸ ‘··{\Q·I17étÆ6ØÛ70ýÎ7Z?8I17w3_8¿*K8F)78Z?8$²ö7F)78ÌBs8Ó/#8ÌBs8¿*K8F)78Z?8ÌBs8¬ƒ8ØÛ7w3_8ÇÉ—8ÌBs8Y¶8`Ü¡8ÇÉ—8¢¹8¢¹8Y¶8<Ê8Y¶8•ºò8.xÞ8ÇÉ—8.xÞ8&Þü8.xÞ8.xÞ8ÇÉ—8z!À8’˜è8’˜è8z!À8’˜è8™9z!À8z!À8™9`Ü¡8F)78¿*K8Ó/#8ÌBs8¬ƒ8ÇÉ—8ÇÉ—80ýÎ7ÌBs8w3_8$²ö7I170ýÎ7w3_8Fd§7F)78Ó/#8I17• ·I170ýÎ7ØÛ7• · ‘··A±5étÆ6• ·{\Q·.e¸.e¸.e¸z¸{\Q·A±56ß·ØçU¶étÆ6 ‘·· ‘··uY+¸• ·étÆ6étÆ60ýÎ7I17ØÛ7A±5I170ýÎ7I170ýÎ7Fd§7$²ö7¿*K8¬ƒ8Z?8¿*K8F)78ÇÉ—8<Ê8’˜è8&Þü8e½9ÇÉ—8{YÔ8&Þü8.xÞ8Y¶8{YÔ8<Ê8¢¹8<Ê8{YÔ8’˜è8`Ü¡8Y¶8<Ê8Y¶8<Ê8`Ü¡8ÇÉ—8`Ü¡8ÇÉ—8Fñ«8Y¶8<Ê8{YÔ8Y¶8{YÔ8Y¶8Fñ«8ÇÉ—8Y¶8ÇÉ—8¢¹8Y¶8Fñ«8w3_8w3_8¬ƒ8¿*K8Z?8Ó/#80ýÎ7¢¹8z!À8`Ü¡8.xÞ8¬ƒ8F)780ýÎ70ýÎ70ýÎ7¿*K8$²ö7{\Q·{\Q·0ýÎ7s·A±56ß·• ·z¸JV?¸˜Ö‘¸˜Ö‘¸uY+¸• ·.e¸z¸uY+¸• ·{\Q·étÆ6A±5ØÛ7Fd§7F)78¬ƒ8w3_8ÌBs8w3_8¿*K8F)78ÌBs8Ó/#8Ó/#8¬ƒ8w3_8¿*K8w3_8ØÛ7A±5$²ö7¬ƒ8w3_8ÌBs8¿*K8F)78Ó/#8Ó/#8Y¶8w3_8ÇÉ—8Y¶8<Ê8Fñ«8`Ü¡8¬ƒ8¬ƒ8Z?8ØÛ70ýÎ7¬ƒ8¢¹8ØÛ7Z?8¬ƒ8¿*K8¬ƒ8Y¶8ÇÉ—8¬ƒ8¬ƒ8ÇÉ—8Y¶8ÇÉ—8`Ü¡8¬ƒ8w3_8w3_8Ó/#8F)78Fd§7Ó/#8A±5étÆ6ØÛ7étÆ6I17A±5I17{\Q· ‘··ØçU¶• · ‘··ØçU¶Fd§7{\Q·I17A±5ØçU¶étÆ6étÆ6z¸s· ‘··• ·s·|Pd|1|24600|2013-282T15:32:39.397 ËH÷8„¶9òã8„¶9òã89{åØ8„¶9„¶9,ñ9œ9ïÜ +9¹w.9Â199Ö_)9Ö_)9œ9¹w.99¹w.9œ9ƒH$9Ö_)9&í8ïÜ +99œ9˜ÜB9q-R9q-R9RIW9M9RIW9¤e\9q-R9f‚a9÷G9M9›Â=9Ö_)9RIW9M9›Â=9 ©89÷G9 ©89¤e\9¤e\9˜ÜB9 ©89÷G9)39q-R9RIW9RIW9¤e\9 ©89Ö_)9 ©89˜ÜB9›Â=9ƒH$9ƒH$9)39Â19ƒH$9,ñ9,ñ9„¶9&í8_É9,ñ9_É9&í8èc¦8Ò«Ä8þ>’8{åØ8¿ÇÎ8Αº8&í8Ò«Ä8Αº8{åØ8BPœ8Íy°8þ>’8ˆH|8Ô%@8ˆH|8ˆH|8Ô%@8ˆH|8þ>’8þ>’8¤*T8h6h8Ô%@8ˆH|8D0ˆ8Ô%@8Ô%@8h6h8h6h8D0ˆ8h6h8þ>’8þ>’8h6h8Ò«Ä8ËH÷8¿ÇÎ8{åØ8ËH÷8¿ÇÎ8òã8œ9„¶99_É9ËH÷8,ñ9¹w.9)39,ñ9œ9Ö_)9¹w.9Â19)39¹w.9,ñ9œ9,ñ9,ñ9_É9„¶9&í8òã8òã8òã8&í8Ò«Ä8Αº8þ>’8D0ˆ8þ>’8èc¦8þ>’8¿ÇÎ8èc¦8èc¦8þ>’8¤*T8¤*T8h6h8ˆH|8þ>’8ˆH|8ª(,8¤*T8þ>’8èc¦8þ>’8h6h8Íy°8Αº8D0ˆ8Íy°8ª(,8Ô%@8k‹T7÷Ñà7leb6k‹T7÷Ñà7Ë+¹7ü97¹ª|·ü97leb6^Ÿ˜µÉaÍ·ÉaÍ·³õ·°.·^Ÿ˜µì(À¶^Ÿ˜µleb6Ê¥·¹ª|·¹ª|·ÉaÍ·Éaͷ餑7k‹T7^Ÿ˜µk‹T7ì(À¶é¤‘7ì(À¶ª(,8ª(,848¤*T848ª(,8¤*T8BPœ8Íy°8D0ˆ8h6h8h6h8ª(,8¿ÇÎ8¿ÇÎ8þ>’8èc¦8BPœ8Íy°8&í8òã8&í8Ò«Ä8èc¦8Ò«Ä8&í8ïÜ +9ËH÷8¿ÇÎ8Αº8&í8òã8{åØ8òã8&í8¿ÇÎ8òã8,ñ9ËH÷8{åØ8ËH÷8Αº8{åØ8D0ˆ8h6h8þ>’8¤*T8h6h8èc¦8ª(,8¤*T8¤*T8þH8k‹T7D0ˆ8ˆH|8餑7leb6^Ÿ˜µü97³õ·³õ·°p¸Æ`"¸³õ·¹ª|·°.·zc^¸ +[J¸ +[J¸Sa—¸ +[J¸³õ·ŸŸµ¸«¸¿¸ªÓɸÞCƒ¸Ôs¡¸†ðÓ¸zc^¸Æ`"¸Sa—¸Žrr¸°p¸°.·leb6leb6^Ÿ˜µÉaÍ· +[J¸zc^¸Æ`"¸ÉaÍ·ÉaÍ· +[J¸Æ`"¸ +[J¸ÞCƒ¸zc^¸°p¸ +[J¸°p¸³õ·Žrr¸Æ`"¸ì(À¶°.·°.·¹ª|·leb6餑7ì(À¶°.·¹ª|·Ê¥·Ê¥·³õ·leb6°p¸°p¸¹ª|·³õ·Ê¥·ÉaÍ·¹ª|·°.·ì(À¶leb6k‹T7÷Ñà7^Ÿ˜µk‹T7leb6k‹T7³õ·ÉaÍ·leb6ÉaÍ·Æ`"¸Æ`"¸Æ`"¸ +[J¸Sa—¸Ôs¡¸Sa—¸Sa—¸«¸¿¸HQ¸Sa—¸«¸¿¸£ˆ«¸«¸¿¸ªÓɸŸŸµ¸«¸¿¸HQ¸Sa—¸£ˆ«¸zc^¸Sa—¸ŸŸµ¸ŸŸµ¸öL¹(Þ¸{/è¸.`¹À³¹ +1¹¿)6¹¿)6¹5Ê!¹úB;¹úB;¹­‘J¹­‘J¹ +1¹ +1¹ßø+¹æ¹5Ê!¹öL¹mQò¸.`¹mQò¸mQò¸†ðÓ¸Sa—¸ÞCƒ¸{/è¸(Þ¸£ˆ«¸£ˆ«¸ŸŸµ¸£ˆ«¸Ôs¡¸ŸŸµ¸áY6¸ +[J¸Æ`"¸Æ`"¸Æ`"¸Ê¥·ÉaÍ·ÉaÍ·ì(À¶leb6ì(À¶k‹T7k‹T7leb6k‹T7^Ÿ˜µË+¹7÷Ñà7h6h8ª(,8þH8Ô%@8Ô%@8÷Ñà7k‹T7餑7þH8^Ÿ˜µé¤‘7Ë+¹7÷Ñà7þH8k‹T7ü97leb6ÉaÍ·áY6¸Æ`"¸Žrr¸ÞCƒ¸Sa—¸°p¸¹ª|·Æ`"¸Žrr¸ +[J¸zc^¸Sa—¸Žrr¸áY6¸Sa—¸Žrr¸zc^¸Žrr¸Sa—¸Æ`"¸ŸŸµ¸Sa—¸Æ`"¸Ôs¡¸Sa—¸ÞCƒ¸Æ`"¸áY6¸Žrr¸áY6¸ÞCƒ¸áY6¸°p¸ÞCƒ¸ +[J¸Æ`"¸áY6¸Žrr¸ +[J¸Ôs¡¸ªÓɸŸŸµ¸Sa—¸£ˆ«¸ªÓɸ{/è¸(Þ¸Sa—¸Ôs¡¸«¸¿¸ŸŸµ¸zc^¸áY6¸zc^¸°p¸ +[J¸Žrr¸Sa—¸ÞCƒ¸Žrr¸áY6¸áY6¸°p¸³õ·ÉaÍ·°p¸³õ·ÉaÍ·¹ª|·ÉaÍ·áY6¸Sa—¸ÞCƒ¸°p¸ +[J¸³õ·Æ`"¸Ê¥·^Ÿ˜µ³õ·áY6¸ +[J¸Žrr¸°p¸Ê¥·°.·k‹T7^Ÿ˜µ°.·k‹T7¹ª|·^Ÿ˜µ°.·ì(À¶^Ÿ˜µ^Ÿ˜µ¹ª|·°.·Æ`"¸°p¸°p¸¹ª|·ÞCƒ¸°p¸Sa—¸ÞCƒ¸°p¸³õ·Æ`"¸zc^¸°p¸°p¸Æ`"¸°p¸ +[J¸ +[J¸áY6¸³õ·£ˆ«¸Ôs¡¸ªÓɸ{/è¸mQò¸†ðÓ¸mQò¸Sa—¸ªÓɸ«¸¿¸£ˆ«¸Ôs¡¸†ðÓ¸(Þ¸†ðÓ¸£ˆ«¸£ˆ«¸Žrr¸HQ¸ŸŸµ¸ +[J¸zc^¸ÉaÍ·ÉaÍ·k‹T7°.·³õ·k‹T7÷Ñà7k‹T7Ô%@8þH8ˆH|8ˆH|8¤*T8èc¦8Ô%@8ˆH|8餑7Ë+¹7ª(,8k‹T7ª(,8D0ˆ8k‹T7þH8ª(,8h6h8D0ˆ8Íy°848¿ÇÎ8D0ˆ8èc¦8Ò«Ä8èc¦8Ò«Ä8D0ˆ8ª(,8Ô%@8ˆH|8þ>’8ª(,8÷Ñà7¤*T8ª(,8Ë+¹7°.·ü97^Ÿ˜µk‹T7÷Ñà7k‹T7÷Ñà7leb6ü97k‹T7ü97餑7k‹T7Ê¥·ü97¹ª|·¹ª|·°.·ÉaÍ· +[J¸Æ`"¸ +[J¸Æ`"¸Ôs¡¸zc^¸áY6¸°p¸«¸¿¸ŸŸµ¸ +[J¸ÞCƒ¸Žrr¸°p¸Sa—¸Sa—¸Sa—¸ +[J¸Æ`"¸Žrr¸ +[J¸Sa—¸ÞCƒ¸Æ`"¸ +[J¸¹ª|·ü97°.·^Ÿ˜µé¤‘7^Ÿ˜µk‹T7°.·°.·Ê¥·ÉaÍ·°.· +[J¸°p¸°.·^Ÿ˜µé¤‘7Ê¥·Ô%@848D0ˆ8¤*T8÷Ñà7ª(,8ü97Ë+¹7¤*T8餑7Ô%@8leb6餑748餑7÷Ñà7leb648Ë+¹748Ë+¹7Ë+¹7餑7餑7leb6leb6^Ÿ˜µ°p¸°.·^Ÿ˜µ°.·¹ª|·¹ª|·Ê¥·ÉaÍ·ÉaÍ·°p¸Æ`"¸zc^¸Žrr¸zc^¸Žrr¸Sa—¸zc^¸ +[J¸Æ`"¸Žrr¸ŸŸµ¸Sa—¸HQ¸Sa—¸«¸¿¸ítü¸«¸¿¸ítü¸öL¹(Þ¸.`¹æ¹öL¹æ¹(Þ¸æ¹Aá&¹öL¹öL¹.`¹À³¹À³¹.`¹æ¹ítü¸{/踣ˆ«¸Ôs¡¸(Þ¸ªÓɸ(Þ¸Sa—¸Ôs¡¸ÞCƒ¸ÞCƒ¸áY6¸¹ª|·°p¸áY6¸³õ·Æ`"¸ì(À¶k‹T7ü97ü97ü97ü97餑7÷Ñà7k‹T7°.·leb6ü97餑7^Ÿ˜µleb6^Ÿ˜µì(À¶^Ÿ˜µÉaÍ·³õ·^Ÿ˜µÊ¥·ì(À¶ÉaÍ·Ê¥·ì(À¶¹ª|·¹ª|·Ë+¹7k‹T7þH8ü97ü97leb6³õ·ÉaÍ·Æ`"¸ÞCƒ¸ŸŸµ¸Sa—¸áY6¸ +[J¸ªÓɸmQò¸Ôs¡¸ÞCƒ¸zc^¸zc^¸Ôs¡¸ŸŸµ¸HQ¸Ê¥·³õ·Sa—¸ÞCƒ¸ŸŸµ¸«¸¿¸(Þ¸†ðÓ¸£ˆ«¸ªÓɸ†ðÓ¸†ðÓ¸mQò¸{/踪Óɸ湫ˆ¹ítü¸(Þ¸À³¹«ˆ¹{/è¸(Þ¸öL¹ßø+¹«ˆ¹ßø+¹¸\@¹Aá&¹úB;¹¸\@¹†ÈT¹ +1¹ßø+¹ +1¹ôvE¹ +1¹ßø+¹5Ê!¹À³¹æ¹ßø+¹Aá&¹ +1¹5Ê!¹5Ê!¹.`¹ŸŸµ¸Ôs¡¸ªÓɸmQò¸{/è¸{/踟Ÿµ¸«¸¿¸£ˆ«¸ŸŸµ¸Žrr¸Žrr¸³õ·¹ª|·Æ`"¸Ê¥·Ê¥·ì(À¶°.·leb6¹ª|·^Ÿ˜µÊ¥·ª(,8ì(À¶ì(À¶ÉaÍ·°.·°p¸°p¸¹ª|·Ê¥·°p¸ÉaÍ·Æ`"¸ÉaÍ·Æ`"¸zc^¸ +[J¸HQ¸°p¸^Ÿ˜µ³õ·ÞCƒ¸°p¸Æ`"¸¹ª|·Ê¥·^Ÿ˜µ +[J¸°p¸³õ· +[J¸°p¸Æ`"¸áY6¸zc^¸ +[J¸zc^¸zc^¸áY6¸ÞCƒ¸³õ·Æ`"¸°.·³õ·^Ÿ˜µ³õ· +[J¸Ê¥·Æ`"¸Ê¥·leb6°.·Ê¥·°p¸ +[J¸¹ª|·°p¸áY6¸³õ·Ôs¡¸°p¸¹ª|·¹ª|·³õ·°p¸k‹T7þH8°.·ü974848Ô%@8Ô%@8Ë+¹7ˆH|8ˆH|8ˆH|8èc¦8BPœ8þ>’8èc¦8èc¦8BPœ8Íy°8èc¦8¿ÇÎ8Ò«Ä8þ>’8Ò«Ä8òã8Αº8Íy°8èc¦8èc¦8Íy°8¿ÇÎ8¤*T8þ>’8Αº848BPœ8ˆH|8ª(,848ˆH|8ˆH|8Ë+¹7þH8÷Ñà7ª(,8k‹T7ü97°.·ü97áY6¸áY6¸áY6¸áY6¸Sa—¸HQ¸³õ·zc^¸Sa—¸HQ¸°p¸HQ¸(Þ¸ítü¸HQ¸Sa—¸Sa—¸ŸŸµ¸Žrr¸Sa—¸Ôs¡¸ítü¸ªÓɸ{/è¸Sa—¸ªÓɸítü¸öL¹ŸŸµ¸{/踣ˆ«¸mQò¸(Þ¸Ôs¡¸áY6¸£ˆ«¸ªÓɸ{/è¸öL¹mQò¸«ˆ¹ªÓɸÔs¡¸«¸¿¸ªÓɸŽrr¸ÞCƒ¸³õ·áY6¸Žrr¸«¸¿¸ªÓɸÔs¡¸Žrr¸³õ·Ê¥·Ê¥·áY6¸³õ·¹ª|·^Ÿ˜µü97÷Ñà748÷Ñà7þH8ˆH|8Íy°8¤*T8ˆH|8BPœ8þ>’8D0ˆ8Ô%@8¤*T8h6h8þ>’8餑7Ô%@8h6h8Íy°8ª(,8þH8¤*T848Ô%@8Ë+¹7Ë+¹7ü97餑7^Ÿ˜µé¤‘7¹ª|·³õ·Ê¥·Æ`"¸ÉaÍ·ÉaÍ·°p¸ì(À¶£ˆ«¸áY6¸Žrr¸Žrr¸zc^¸Sa—¸ +[J¸HQ¸Sa—¸£ˆ«¸«¸¿¸ªÓɸ£ˆ«¸t ¹Aá&¹À³¹öL¹«ˆ¹öL¹†ðÓ¸{/踪Óɸt ¹†ðÓ¸(Þ¸(Þ¸Ôs¡¸£ˆ«¸Sa—¸Sa—¸£ˆ«¸Sa—¸zc^¸áY6¸leb6ÉaÍ·Æ`"¸Ê¥·¹ª|·leb6^Ÿ˜µleb6ü97ì(À¶ü97leb6þH8þH8leb6k‹T7餑7Ë+¹7^Ÿ˜µì(À¶ü97ü97k‹T7k‹T7餑7Ô%@8÷Ñà7k‹T7÷Ñà7÷Ñà748÷Ñà7Ë+¹7餑7k‹T7þH8Ë+¹7k‹T7Ë+¹7餑7ì(À¶÷Ñà7÷Ñà7^Ÿ˜µË+¹7^Ÿ˜µ48D0ˆ8k‹T7餑7þH8Ë+¹7^Ÿ˜µÉaÍ·Ê¥·¹ª|·^Ÿ˜µü97°p¸zc^¸áY6¸Žrr¸°p¸áY6¸Æ`"¸áY6¸HQ¸ÞCƒ¸Žrr¸Ôs¡¸zc^¸Sa—¸Ôs¡¸£ˆ«¸«¸¿¸ŸŸµ¸{/è¸ítü¸mQò¸«¸¿¸«¸¿¸HQ¸Sa—¸Ôs¡¸£ˆ«¸Ôs¡¸£ˆ«¸HQ¸ŸŸµ¸Ôs¡¸Ôs¡¸Žrr¸Æ`"¸zc^¸ÉaÍ·°.·áY6¸°p¸ÉaÍ·°p¸leb6^Ÿ˜µì(À¶¤*T8餑7Ë+¹7÷Ñà7Ë+¹7ª(,8D0ˆ8ˆH|8Ô%@8÷Ñà7ˆH|8þ>’8BPœ8Ò«Ä8¿ÇÎ8Αº8Ò«Ä8Íy°8&í8Ò«Ä8èc¦8¿ÇÎ8Ò«Ä8{åØ8þ>’8h6h8D0ˆ8h6h8¤*T8þ>’8Íy°8ˆH|8ª(,8¤*T8Ë+¹7þH8¤*T8ª(,848÷Ñà74848Ô%@8þH8Ë+¹7餑7leb6餑7÷Ñà7leb6^Ÿ˜µ^Ÿ˜µ^Ÿ˜µk‹T7餑7餑7ÉaÍ· +[J¸áY6¸¹ª|·Ê¥·Sa—¸Æ`"¸ÉaÍ·Žrr¸°p¸áY6¸³õ· +[J¸°.·ü97°.·ì(À¶^Ÿ˜µÊ¥·Ë+¹7¹ª|·ì(À¶ÉaÍ·°p¸³õ·ì(À¶k‹T7^Ÿ˜µË+¹7ì(À¶leb6ü97餑7餑7餑7ª(,8÷Ñà748þH8BPœ8Ò«Ä8ËH÷8þ>’8þ>’8D0ˆ8þ>’8Íy°8¿ÇÎ8¤*T8¿ÇÎ8¿ÇÎ8Íy°8Íy°8Αº8Αº8òã8þ>’8&í8„¶9þ>’8¿ÇÎ8ËH÷8ƒH$9Ö_)9)39ïÜ +9„¶9,ñ9&í8&í8„¶9¿ÇÎ8ËH÷8ËH÷8Íy°8Íy°8{åØ8BPœ8BPœ8Ò«Ä8þ>’8BPœ8¤*T8ª(,8D0ˆ8ˆH|8D0ˆ8h6h8餑7ª(,8h6h8Ô%@8^Ÿ˜µé¤‘7Ô%@8÷Ñà7h6h8ª(,8÷Ñà7餑7Ë+¹7k‹T7leb6ì(À¶leb6¹ª|·leb6ü97ì(À¶k‹T748^Ÿ˜µü97餑7Ë+¹7k‹T7¹ª|·ü97leb6k‹T7Ô%@8餑7÷Ñà7k‹T7k‹T7¤*T8h6h8h6h8¤*T8h6h8Ô%@8Ô%@8D0ˆ8¤*T8èc¦8Íy°8Ò«Ä8Αº8BPœ8þ>’8„¶9¿ÇÎ8ËH÷8{åØ8ïÜ +9œ9Â19ƒH$9ËH÷8Â19,ñ9ƒH$9œ9Ö_)9Ö_)9ƒH$9ïÜ +9ËH÷8„¶9ËH÷8&í8{åØ8Ò«Ä8¿ÇÎ8òã8„¶9ïÜ +9&í8¿ÇÎ8{åØ8Íy°8BPœ8D0ˆ8þ>’8¤*T848¤*T8h6h8Ô%@8h6h8¤*T8÷Ñà7Ô%@8Ô%@8¤*T8÷Ñà7餑748^Ÿ˜µ^Ÿ˜µleb6¹ª|·ì(À¶^Ÿ˜µ°.·Ê¥·¹ª|·k‹T7ÉaÍ·Ê¥·Ê¥·é¤‘7leb6ÉaÍ·ì(À¶°.·^Ÿ˜µü97ü97^Ÿ˜µÔ%@8÷Ñà7Ô%@8÷Ñà7þH8÷Ñà7k‹T7÷Ñà7餑7÷Ñà7þH8÷Ñà7D0ˆ8þ>’8þ>’8èc¦8&í8„¶9_É9¿ÇÎ8ïÜ +9¿ÇÎ8„¶9,ñ9&í89œ9_É9_É9„¶9œ9›Â=9 ©89 ©89Ö_)9 ©89)39ƒH$9,ñ9Â19Â19ƒH$9ËH÷8òã8{åØ8„¶9Ò«Ä8¿ÇÎ8Íy°8Íy°8{åØ8òã8Íy°8Ô%@8BPœ8Ô%@8Ë+¹748ü97¤*T8Ë+¹7^Ÿ˜µ48k‹T7÷Ñà7ˆH|8ª(,8ˆH|8ˆH|8h6h8Ë+¹7÷Ñà7h6h848¤*T8Ë+¹7þH8Ô%@8h6h8Ô%@8Ô%@8÷Ñà7Ë+¹7ü97ì(À¶leb6leb6ü97ì(À¶ì(À¶¹ª|·¹ª|·°.·³õ·ÉaÍ·°p¸°p¸^Ÿ˜µÉaÍ·leb6餑7^Ÿ˜µ¹ª|·ì(À¶°.·ü97餑748ª(,848þ>’8ª(,848þH8ª(,8ˆH|8h6h848þ>’8Ô%@8Αº8Íy°8èc¦8þ>’8BPœ8D0ˆ8h6h8D0ˆ8þ>’8Ô%@8D0ˆ8Ô%@8D0ˆ8¤*T8¤*T8þ>’8Ô%@8Ô%@8BPœ8Ò«Ä8èc¦8h6h8¤*T8Íy°8èc¦8D0ˆ8D0ˆ8Íy°8Ô%@8÷Ñà7Ô%@8BPœ8Íy°8Ô%@8þH8ª(,8ˆH|848k‹T7ì(À¶°.·¹ª|·Ê¥·°p¸zc^¸°p¸ +[J¸ +[J¸°p¸áY6¸°p¸zc^¸ +[J¸Žrr¸HQ¸Žrr¸°p¸ÉaÍ·Ê¥·³õ·°p¸Ê¥·¹ª|·áY6¸áY6¸Æ`"¸¹ª|·°.·°.·Æ`"¸ +[J¸zc^¸°p¸Æ`"¸°.·Ê¥·°.·Ê¥·zc^¸°p¸k‹T7°.·ü97餑7leb6餑7ª(,8leb6k‹T7^Ÿ˜µ48þH8ª(,8ª(,8D0ˆ8Ò«Ä8BPœ8Ò«Ä8BPœ848Ô%@8Íy°8Ò«Ä8D0ˆ8ˆH|8BPœ8èc¦8Ô%@8D0ˆ8þH8¤*T8餑7ì(À¶ü97^Ÿ˜µ^Ÿ˜µ°.·é¤‘7°.·k‹T7^Ÿ˜µ^Ÿ˜µ°p¸é¤‘7¹ª|·¹ª|·Ê¥·°p¸°p¸Sa—¸Žrr¸†ðÓ¸ªÓɸ£ˆ«¸ªÓɸítü¸†ðÓ¸†ðÓ¸t ¹À³¹t ¹ +1¹À³¹ßø+¹Aá&¹ +1¹úB;¹«ˆ¹Aá&¹«ˆ¹À³¹.`¹«ˆ¹†ðÓ¸†ðÓ¸£ˆ«¸ŸŸµ¸ÞCƒ¸ +[J¸ŸŸµ¸Sa—¸ +[J¸Æ`"¸Æ`"¸zc^¸áY6¸HQ¸Žrr¸Sa—¸«¸¿¸zc^¸£ˆ«¸Sa—¸³õ·Sa—¸zc^¸^Ÿ˜µË+¹7k‹T748÷Ñà7k‹T7Ë+¹7÷Ñà748D0ˆ8Ô%@8þH8þH8D0ˆ8ˆH|8¤*T8ª(,8þH848BPœ8þ>’8¤*T8¤*T8èc¦8Ò«Ä8ˆH|8¤*T8ˆH|8Ò«Ä8h6h8D0ˆ8ˆH|8ª(,8þH848Ë+¹7÷Ñà7÷Ñà7k‹T7þH8þH8^Ÿ˜µ°.·^Ÿ˜µ°.·°.·³õ·¹ª|·ÉaÍ·Ê¥·°.·ì(À¶^Ÿ˜µ^Ÿ˜µ +[J¸°p¸°p¸áY6¸HQ¸Žrr¸ÞCƒ¸Sa—¸Ôs¡¸Ôs¡¸Sa—¸†ðÓ¸†ðÓ¸«¸¿¸†ðÓ¸ÞCƒ¸ +[J¸ +[J¸³õ·áY6¸áY6¸Ê¥·áY6¸Æ`"¸Ê¥·Ê¥·¹ª|·ü97ü97k‹T7Ë+¹7ª(,8Ô%@8÷Ñà748÷Ñà7èc¦8ª(,8h6h8èc¦8BPœ8Ò«Ä8&í8ïÜ +9Ö_)9Ö_)9Ö_)9)39 ©89Ö_)9ƒH$9œ9Ö_)9›Â=9 ©89ƒH$9Â19ïÜ +9„¶9_É99„¶9„¶9ËH÷8òã8„¶9{åØ8ËH÷8_É9èc¦8_É9èc¦8èc¦8¿ÇÎ8Ò«Ä8òã8BPœ8ˆH|8Íy°8Ë+¹748Ô%@8Ô%@8餑7Ë+¹7Ë+¹7ü97餑7leb6ü9748^Ÿ˜µ°.·leb6¹ª|·áY6¸zc^¸Žrr¸áY6¸ +[J¸ÞCƒ¸ÞCƒ¸Sa—¸ŸŸµ¸Sa—¸zc^¸Sa—¸Sa—¸zc^¸°p¸zc^¸áY6¸zc^¸HQ¸ÞCƒ¸†ðÓ¸ŸŸµ¸{/è¸Ôs¡¸£ˆ«¸ŸŸµ¸Sa—¸ŸŸµ¸HQ¸zc^¸áY6¸Žrr¸áY6¸ì(À¶°p¸Æ`"¸Ê¥·ì(À¶^Ÿ˜µk‹T7^Ÿ˜µé¤‘7^Ÿ˜µ¹ª|·^Ÿ˜µ¹ª|·³õ·°.·leb6°.·k‹T7k‹T7ì(À¶k‹T7ü97ü97Ë+¹7餑7^Ÿ˜µþH8þH848ÉaÍ·48餑748h6h8餑7k‹T748餑7k‹T7¹ª|·é¤‘748k‹T7餑7Ë+¹7餑7Ë+¹7þH8°.·°p¸³õ·ì(À¶Žrr¸³õ·Ê¥·¹ª|·Æ`"¸^Ÿ˜µ^Ÿ˜µì(À¶k‹T7leb6°.·³õ·Ê¥·ÉaÍ·ÉaÍ·Æ`"¸°p¸¹ª|·°p¸°p¸zc^¸Žrr¸ +[J¸ +[J¸Sa—¸ +[J¸Sa—¸Žrr¸zc^¸Æ`"¸áY6¸°p¸Æ`"¸Ê¥·³õ·¹ª|·k‹T7k‹T7k‹T748÷Ñà7餑7餑7Ô%@8餑7Ô%@8ª(,8÷Ñà7ˆH|8Ë+¹7¤*T8¤*T8÷Ñà7þH8Ô%@8^Ÿ˜µ^Ÿ˜µ^Ÿ˜µÔ%@848Ô%@8þH8¤*T8Ô%@848÷Ñà748餑7÷Ñà7餑7þ>’848Ë+¹7÷Ñà7h6h8¤*T8ª(,8ˆH|8þH8k‹T748Ë+¹748ü97k‹T7Ê¥·ÉaÍ·Æ`"¸ +[J¸Žrr¸ŸŸµ¸Ôs¡¸Sa—¸Ôs¡¸†ðÓ¸£ˆ«¸«¸¿¸«¸¿¸ŸŸµ¸ªÓɸŸŸµ¸t ¹æ¹(Þ¸†ðÓ¸mQò¸.`¹À³¹Aá&¹5Ê!¹À³¹Aá&¹æ¹À³¹«ˆ¹t ¹mQò¸{/踫ˆ¹mQò¸ªÓɸŸŸµ¸(Þ¸†ðÓ¸†ðÓ¸ŸŸµ¸£ˆ«¸Ôs¡¸zc^¸HQ¸Ôs¡¸³õ·Ê¥·¹ª|·¹ª|·Ë+¹7ü97°.·°.·ì(À¶^Ÿ˜µü97¹ª|·ü97°.·ü97ü97Ë+¹7leb6^Ÿ˜µleb6þH8þH8Ë+¹7÷Ñà7ª(,8餑7ª(,8餑7þH8ˆH|8餑7þH8ª(,8餑7þH8þH8Ô%@8Ô%@8þH8÷Ñà748餑7k‹T7Ê¥·ü97ü97°.·ÉaÍ·^Ÿ˜µÊ¥·Æ`"¸áY6¸¹ª|·°p¸Sa—¸ +[J¸Žrr¸Žrr¸Ôs¡¸Ôs¡¸Ôs¡¸ŸŸµ¸ªÓɸ†ðÓ¸ŸŸµ¸(Þ¸ªÓɸ†ðÓ¸†ðÓ¸£ˆ«¸£ˆ«¸«¸¿¸ítü¸öL¹†ðÓ¸{/è¸ +1¹«ˆ¹öL¹À³¹¸\@¹5Ê!¹{/è¸ítü¸ítü¸mQò¸{/è¸{/è¸.`¹«ˆ¹mQò¸t ¹t ¹ítü¸{/è¸mQò¸{/è¸æ¹.`¹öL¹À³¹mQò¸(Þ¸ªÓɸÆ`"¸ÞCƒ¸Žrr¸°p¸ÞCƒ¸Sa—¸ +[J¸Ôs¡¸Ôs¡¸ÞCƒ¸áY6¸Æ`"¸Sa—¸ +[J¸Ê¥·°p¸ÞCƒ¸Ê¥·¹ª|·³õ·³õ·Ê¥·³õ·ü97ª(,8k‹T7ì(À¶áY6¸Æ`"¸ +[J¸zc^¸ÉaÍ·°.·Ê¥·ÉaÍ·zc^¸zc^¸zc^¸°p¸°p¸Žrr¸zc^¸ÞCƒ¸Ôs¡¸£ˆ«¸Sa—¸Sa—¸ªÓɸÔs¡¸ŸŸµ¸£ˆ«¸£ˆ«¸Ôs¡¸(Þ¸ŸŸµ¸mQò¸†ðÓ¸«¸¿¸öL¹æ¹¿)6¹æ¹Aá&¹ +1¹¸\@¹­‘J¹­‘J¹¿)6¹Aá&¹úB;¹ +1¹Aá&¹ +1¹¿)6¹ +1¹Aá&¹¿)6¹¸\@¹úB;¹æ¹Aá&¹5Ê!¹5Ê!¹Aá&¹mQò¸ítü¸.`¹«¸¿¸ítü¸{/踆ðÓ¸Ôs¡¸†ðÓ¸£ˆ«¸Žrr¸ +[J¸°p¸ÉaÍ·áY6¸Ê¥·ü97Ë+¹7Ê¥·³õ·k‹T7÷Ñà7k‹T7÷Ñà7餑7þH8餑7leb6Ë+¹7leb6Ô%@8餑7÷Ñà7ì(À¶Ê¥·ì(À¶÷Ñà7Ë+¹7¹ª|·ü97leb6³õ·ÉaÍ·Æ`"¸³õ·Æ`"¸Sa—¸Žrr¸³õ·³õ·Ê¥·Æ`"¸Æ`"¸zc^¸Ôs¡¸Žrr¸ +[J¸Sa—¸Žrr¸£ˆ«¸Žrr¸áY6¸ÞCƒ¸ŸŸµ¸£ˆ«¸£ˆ«¸«¸¿¸Ôs¡¸ªÓɸítü¸ítü¸öL¹.`¹ítü¸{/è¸mQò¸«ˆ¹«ˆ¹æ¹æ¹ítü¸æ¹æ¹(Þ¸t ¹öL¹ªÓɸt ¹mQò¸ítü¸ítü¸«¸¿¸«¸¿¸{/è¸mQò¸«¸¿¸ªÓɸŸŸµ¸£ˆ«¸«¸¿¸ŸŸµ¸«¸¿¸ítü¸Ôs¡¸zc^¸HQ¸Sa—¸°p¸áY6¸Žrr¸áY6¸áY6¸ +[J¸³õ·¹ª|·°.·leb6Ë+¹748Ô%@8Ë+¹7h6h848þH8¤*T8¤*T8k‹T7Ë+¹748Ô%@848Ë+¹7Ë+¹7¤*T8Ë+¹748þH8ª(,8÷Ñà7ì(À¶Ê¥·ÉaÍ· +[J¸ +[J¸³õ·Æ`"¸¹ª|·°.·³õ·³õ·Ê¥·°.·°p¸°p¸°p¸Sa—¸zc^¸áY6¸Æ`"¸zc^¸³õ· +[J¸Žrr¸zc^¸Žrr¸«¸¿¸†ðÓ¸Sa—¸Sa—¸£ˆ«¸ªÓɸSa—¸ªÓɸ†ðÓ¸Sa—¸ŸŸµ¸ÞCƒ¸Sa—¸£ˆ«¸áY6¸áY6¸ÉaÍ·°.·áY6¸³õ·áY6¸áY6¸áY6¸³õ·°.·¹ª|·Ê¥·Ê¥·^Ÿ˜µé¤‘7¤*T8þ>’848þ>’8D0ˆ8D0ˆ8Ô%@8ª(,8ˆH|8BPœ8èc¦8BPœ8èc¦8þ>’8h6h8Ô%@8D0ˆ8BPœ848Ë+¹7¤*T8BPœ8Íy°8þ>’8¿ÇÎ8&í8&í8_É9òã8„¶9_É9„¶9_É9&í8òã8þ>’8ËH÷8ËH÷8&í8ËH÷8¿ÇÎ8òã8&í8Ò«Ä8D0ˆ8D0ˆ8þ>’8ˆH|8Ô%@8ª(,8Ô%@8ª(,8Ë+¹7餑7ˆH|8Ô%@8þH8Ô%@8Ô%@8Ô%@8¤*T8leb6餑7餑7Ë+¹7þH848餑7ì(À¶é¤‘7þH8ü97ì(À¶°.·ÉaÍ·Ê¥·ü97ì(À¶¹ª|·ÉaÍ·Ê¥·°.·°.·³õ·°p¸^Ÿ˜µleb6Ë+¹7leb6ü97k‹T7leb6餑7餑7ª(,848÷Ñà7ˆH|8¤*T8D0ˆ8ª(,8þH8Íy°8Αº8ˆH|8Αº8Αº8èc¦8èc¦8þ>’8BPœ8Íy°8èc¦8¤*T8D0ˆ8èc¦8Ò«Ä8&í8Αº8òã8{åØ8„¶9&í8Íy°8¿ÇÎ8BPœ8Ô%@8Ô%@8¤*T8Ô%@8þH8ª(,8Íy°8þ>’8Ô%@8h6h8þ>’8h6h8þH8ª(,8D0ˆ8ª(,8þ>’8Ë+¹748ü97ü97°.·ì(À¶k‹T7ÉaÍ·°.·Ê¥·áY6¸Ê¥·ÉaÍ·áY6¸Sa—¸zc^¸Æ`"¸ÉaÍ· +[J¸ÞCƒ¸°p¸°p¸zc^¸Sa—¸Ôs¡¸°.·Žrr¸zc^¸°p¸Žrr¸zc^¸Sa—¸ªÓɸªÓɸÔs¡¸«¸¿¸«¸¿¸«¸¿¸Žrr¸Žrr¸Žrr¸«¸¿¸Sa—¸ÞCƒ¸°p¸³õ·Æ`"¸Ê¥·leb6leb6leb6leb6ª(,8^Ÿ˜µü97÷Ñà7ˆH|848D0ˆ8èc¦8Íy°8D0ˆ8¿ÇÎ8Αº8¿ÇÎ8Ò«Ä8&í8þ>’8¿ÇÎ8òã8Ò«Ä8¿ÇÎ8òã8Ò«Ä8þ>’8h6h8Ò«Ä8èc¦8þ>’8D0ˆ8èc¦8þ>’8h6h8ˆH|8èc¦8Αº8Ò«Ä8Ò«Ä8h6h8ˆH|8Ô%@848h6h848Ô%@8÷Ñà74848餑7ì(À¶leb6ì(À¶ÉaÍ·Ê¥·¹ª|·ÉaÍ·Æ`"¸zc^¸³õ·Ê¥·°p¸°p¸ÉaÍ·^Ÿ˜µÉaÍ·Æ`"¸³õ·¹ª|·ÉaÍ·°.·leb6ü97÷Ñà7k‹T7ü97÷Ñà7ª(,848þ>’8Ô%@8þ>’8ˆH|8ª(,848÷Ñà7ü97þH8÷Ñà7h6h8D0ˆ8BPœ8Αº8Αº8òã8„¶9,ñ9„¶9ïÜ +9Â19„¶9_É9&í8ïÜ +9Â19)39œ9)39)39)39÷G9›Â=9M9 ©89M9›Â=9 ©89 ©89Ö_)9)39)39 ©89›Â=9›Â=9RIW9˜ÜB9ƒH$9ƒH$9ƒH$9 ©89Â19&í8ïÜ +9&í89œ99œ9Â19ƒH$9)39ƒH$9ïÜ +9Ò«Ä8&í8_É9Â19œ9,ñ9&í8_É9Αº8þ>’8BPœ8„¶9{åØ8D0ˆ8Íy°8Ò«Ä8þ>’8D0ˆ8ˆH|8Ô%@8h6h8þH8÷Ñà7ü97ü97^Ÿ˜µÊ¥·°.·°.·ü97ü97^Ÿ˜µþH8þH8÷Ñà7Ô%@8÷Ñà7Ô%@8Ë+¹7ª(,8ª(,8Ô%@8Ë+¹7Ô%@8h6h8þH8÷Ñà7Ë+¹7ü97leb6þH8¤*T8÷Ñà7Ë+¹7ª(,8h6h8èc¦8þ>’8BPœ8þ>’8D0ˆ8þ>’8þ>’8þ>’8¿ÇÎ8D0ˆ8Ô%@8ª(,8D0ˆ8þ>’8h6h8þH8Ë+¹7Ô%@8h6h8Íy°8D0ˆ8èc¦8¿ÇÎ8BPœ8h6h8þH8ˆH|8ˆH|8ˆH|8h6h8BPœ8¤*T8¿ÇÎ8BPœ8h6h8Ô%@8Ô%@8ª(,848ª(,8ü97¤*T8þH8leb6ü97Ë+¹7ì(À¶leb6÷Ñà7leb6¹ª|·³õ·ì(À¶leb6k‹T7ª(,8leb6ì(À¶÷Ñà7Ê¥·ì(À¶Ë+¹7^Ÿ˜µË+¹7Ë+¹7k‹T7Ë+¹7¤*T8þ>’8BPœ8h6h8Ô%@8Ô%@8ª(,8þ>’8h6h8Ô%@8h6h8h6h8ˆH|8èc¦8òã8,ñ9Ò«Ä8ïÜ +9œ9Â199,ñ9ƒH$9ïÜ +9,ñ9„¶9¹w.9 ©89Ö_)9ƒH$9Ö_)9„¶9Ö_)9ïÜ +99Ö_)9,ñ9,ñ9ƒH$9_É9ƒH$9„¶9ËH÷8&í8ËH÷8ËH÷8œ9,ñ9ƒH$9,ñ9_É9„¶9{åØ8œ9ïÜ +9Íy°8D0ˆ8{åØ8¿ÇÎ8Ò«Ä8{åØ8èc¦8Íy°8÷Ñà7÷Ñà7餑7Ë+¹7ª(,8÷Ñà7ü97k‹T748ü97÷Ñà7D0ˆ8Íy°8èc¦8D0ˆ8BPœ8D0ˆ8D0ˆ8¤*T8h6h8D0ˆ8Íy°8þ>’8Ô%@8ª(,8BPœ8þ>’8Ô%@8D0ˆ8èc¦8þ>’8BPœ8ˆH|8þ>’8D0ˆ848ü97ˆH|84848ª(,8þH8Ô%@8h6h8ª(,8ˆH|8ª(,8¤*T8¤*T8èc¦8þ>’8èc¦8{åØ8Αº8þ>’8èc¦8Íy°8Ò«Ä8{åØ8&í8Αº8òã8_É9Ò«Ä8òã8Αº8_É9„¶9,ñ9Â19¹w.99¹w.9)39›Â=9˜ÜB9)39÷G9›Â=9)39¹w.9¹w.99Ö_)9œ9Ö_)9œ9)39„¶99Ö_)9„¶9ËH÷8_É9{åØ8„¶9¿ÇÎ8èc¦8èc¦8D0ˆ8D0ˆ8D0ˆ8þH8Ë+¹7leb648Ë+¹7leb6°.·÷Ñà748ü97°.·°.·zc^¸°.·°.·°.·Ê¥·ÉaÍ·¹ª|·°.·^Ÿ˜µ÷Ñà748÷Ñà7leb6餑7÷Ñà7ª(,8þH848ª(,8þ>’8D0ˆ8Ô%@8Ô%@8Ô%@8ˆH|8Íy°8Ò«Ä8{åØ8Ò«Ä8Αº8òã8ïÜ +99ïÜ +9„¶9ïÜ +9Â199_É9{åØ8{åØ8_É9Â19œ9ËH÷8ËH÷8&í8Αº8èc¦8Íy°848þH8ª(,8餑7°.·ü97餑748ü97k‹T7k‹T7÷Ñà7ü97k‹T7Ê¥·³õ·zc^¸ì(À¶°.·³õ·ü97áY6¸ÉaÍ·ÉaÍ·Æ`"¸³õ·zc^¸zc^¸áY6¸£ˆ«¸†ðÓ¸ÞCƒ¸°p¸zc^¸Ôs¡¸ªÓɸSa—¸«¸¿¸Ôs¡¸£ˆ«¸Sa—¸†ðÓ¸†ðÓ¸ªÓɸ.`¹mQò¸mQò¸mQò¸öL¹öL¹5Ê!¹öL¹†ðÓ¸ítü¸{/è¸ítü¸ítü¸t ¹t ¹t ¹ítü¸mQò¸mQò¸«ˆ¹(Þ¸(Þ¸{/è¸.`¹{/è¸Ôs¡¸Sa—¸Sa—¸áY6¸ÞCƒ¸HQ¸Æ`"¸ÞCƒ¸¹ª|·³õ·Ê¥·°.·³õ·ì(À¶°.·°p¸Æ`"¸áY6¸áY6¸°.·¹ª|·Ê¥·áY6¸°p¸¹ª|·^Ÿ˜µÊ¥·³õ·°p¸°p¸ÉaÍ·°.·^Ÿ˜µÊ¥·Æ`"¸Æ`"¸°p¸zc^¸zc^¸zc^¸áY6¸ +[J¸Sa—¸ÞCƒ¸£ˆ«¸ŸŸµ¸«¸¿¸ªÓɸ†ðÓ¸Ôs¡¸Ôs¡¸Ôs¡¸Sa—¸HQ¸«¸¿¸(Þ¸öL¹.`¹ítü¸.`¹.`¹{/è¸.`¹{/踫ˆ¹À³¹öL¹†ðÓ¸ítü¸æ¹ +1¹(Þ¸Aá&¹«ˆ¹«ˆ¹t ¹öL¹(Þ¸.`¹.`¹ítü¸t ¹t ¹mQò¸æ¹«ˆ¹«ˆ¹{/踣ˆ«¸mQò¸ítü¸5Ê!¹«ˆ¹.`¹mQò¸t ¹æ¹.`¹«¸¿¸{/è¸ítü¸(Þ¸(Þ¸«¸¿¸ÞCƒ¸Žrr¸ +[J¸zc^¸Æ`"¸áY6¸Sa—¸zc^¸Sa—¸ÞCƒ¸Žrr¸Žrr¸ÞCƒ¸ŸŸµ¸Ôs¡¸«¸¿¸ŸŸµ¸ÞCƒ¸Žrr¸Žrr¸Æ`"¸Sa—¸áY6¸zc^¸zc^¸Sa—¸Æ`"¸Ôs¡¸ŸŸµ¸«¸¿¸(Þ¸†ðÓ¸«ˆ¹æ¹mQò¸æ¹À³¹t ¹Aá&¹¿)6¹æ¹æ¹ +1¹À³¹«ˆ¹t ¹æ¹¿)6¹5Ê!¹5Ê!¹ +1¹ßø+¹Aá&¹Aá&¹æ¹t ¹À³¹ +1¹5Ê!¹«ˆ¹¸\@¹¸\@¹¸\@¹­‘J¹†ÈT¹ +1¹¿)6¹¸\@¹ßø+¹5Ê!¹5Ê!¹æ¹«ˆ¹À³¹.`¹t ¹†ðÓ¸{/è¸mQò¸öL¹t ¹†ðÓ¸«¸¿¸Sa—¸ŸŸµ¸Ôs¡¸Sa—¸Žrr¸áY6¸ÞCƒ¸Žrr¸zc^¸£ˆ«¸Sa—¸Žrr¸zc^¸áY6¸zc^¸zc^¸áY6¸Æ`"¸°p¸ +[J¸Žrr¸°.·áY6¸áY6¸Æ`"¸Sa—¸Ôs¡¸ªÓɸöL¹ŸŸµ¸Sa—¸†ðÓ¸zc^¸Sa—¸†ðÓ¸ítü¸£ˆ«¸mQò¸ítü¸(Þ¸öL¹öL¹.`¹ítü¸öL¹.`¹æ¹ßø+¹5Ê!¹À³¹ítü¸5Ê!¹¿)6¹«ˆ¹¿)6¹+_¹ß¬O¹ßø+¹¸\@¹ôvE¹%d¹­‘J¹ôvE¹¸\@¹¿)6¹úB;¹¸\@¹À³¹ +1¹À³¹5Ê!¹Aá&¹«ˆ¹ +1¹ +1¹¿)6¹5Ê!¹ äY¹¸\@¹†ÈT¹XYn¹%d¹†ÈT¹úB;¹ +1¹5Ê!¹öL¹«¸¿¸mQò¸(Þ¸{/踪Óɸ£ˆ«¸Ôs¡¸mQò¸Sa—¸ÞCƒ¸«¸¿¸Sa—¸Žrr¸áY6¸ÉaÍ·áY6¸ì(À¶ì(À¶Æ`"¸¹ª|·°p¸Ê¥·°.·ì(À¶°.·zc^¸³õ·Ë+¹7^Ÿ˜µ^Ÿ˜µü97^Ÿ˜µÉaÍ·ì(À¶ÉaÍ·°.·Ê¥·^Ÿ˜µ¹ª|·°p¸°p¸³õ·ÉaÍ·ÞCƒ¸Æ`"¸Sa—¸zc^¸zc^¸ÞCƒ¸Sa—¸ªÓɸ†ðÓ¸ŸŸµ¸(Þ¸ítü¸(Þ¸mQò¸†ðÓ¸mQò¸öL¹(Þ¸†ðÓ¸«¸¿¸{/è¸.`¹{/è¸æ¹†ðÓ¸Sa—¸{/è¸t ¹5Ê!¹mQò¸«¸¿¸(Þ¸ªÓɸªÓɸŸŸµ¸Sa—¸Sa—¸Sa—¸ÞCƒ¸ŸŸµ¸Sa—¸ÞCƒ¸Ôs¡¸ÞCƒ¸Sa—¸Sa—¸ÞCƒ¸ÞCƒ¸Žrr¸Ôs¡¸ŸŸµ¸áY6¸ +[J¸£ˆ«¸ŸŸµ¸«¸¿¸†ðÓ¸ÞCƒ¸£ˆ«¸zc^¸ +[J¸zc^¸°.·Æ`"¸°p¸¹ª|·ì(À¶^Ÿ˜µ^Ÿ˜µé¤‘7þH8Ô%@8÷Ñà7Ë+¹7°.·ü97¹ª|·leb6÷Ñà7ì(À¶leb6leb6°.·é¤‘7÷Ñà7leb6÷Ñà7leb6k‹T7^Ÿ˜µü97leb6k‹T7leb6ì(À¶^Ÿ˜µ³õ·ÉaÍ·Æ`"¸Sa—¸Æ`"¸áY6¸³õ·£ˆ«¸Sa—¸ªÓɸ(Þ¸Sa—¸(Þ¸«¸¿¸«¸¿¸ŸŸµ¸«¸¿¸ŸŸµ¸Sa—¸ +[J¸Ôs¡¸Sa—¸Ôs¡¸Žrr¸mQò¸(Þ¸{/踆ðÓ¸mQò¸ítü¸«¸¿¸†ðÓ¸Ôs¡¸Sa—¸£ˆ«¸†ðÓ¸ +[J¸Æ`"¸°p¸ +[J¸Žrr¸ÉaÍ·ÉaÍ·°p¸°p¸ +[J¸zc^¸³õ·Æ`"¸ÉaÍ·°.·°.·ÉaÍ·ÉaÍ·ì(À¶ì(À¶þH8¹ª|·leb6ì(À¶þH8leb6þH8ª(,8þH8Ô%@8þH8Ô%@8þH8þ>’8BPœ8D0ˆ8þ>’8Ò«Ä8Íy°8ˆH|8h6h8ˆH|8Ô%@8ü97Ô%@8ª(,8餑7ì(À¶k‹T7h6h848ª(,8ª(,8Ë+¹7ª(,8leb6餑7÷Ñà7^Ÿ˜µ48Ô%@8^Ÿ˜µ÷Ñà7Ë+¹7k‹T748leb6ÉaÍ·¹ª|·Ê¥·°p¸Æ`"¸£ˆ«¸Žrr¸ÞCƒ¸Ôs¡¸(Þ¸†ðÓ¸ªÓɸÔs¡¸Žrr¸ÞCƒ¸Žrr¸«¸¿¸°p¸ +[J¸Žrr¸ÞCƒ¸Ôs¡¸Sa—¸zc^¸Sa—¸Sa—¸ªÓɸŽrr¸Ôs¡¸Žrr¸Ôs¡¸Sa—¸Žrr¸ÉaÍ·HQ¸áY6¸ +[J¸³õ·°p¸°.·ÉaÍ·ì(À¶^Ÿ˜µì(À¶Ë+¹748ª(,8þH8¤*T8D0ˆ8h6h8¤*T848ˆH|8Ô%@8h6h8¤*T8h6h8ˆH|8¤*T8ª(,8BPœ8Ò«Ä8D0ˆ8ˆH|8Αº8D0ˆ8h6h8Íy°8ˆH|8÷Ñà7D0ˆ8èc¦8÷Ñà7þH848餑7餑7þH8Ë+¹7Ë+¹7Ë+¹7þH8÷Ñà7ü97Ë+¹7leb6餑7k‹T7¹ª|·¹ª|·Ê¥·ì(À¶ì(À¶³õ·¹ª|·¹ª|· +[J¸Æ`"¸Ê¥·^Ÿ˜µleb6ü97Ë+¹748÷Ñà748leb6ü97Ë+¹7ü97³õ·Ê¥·Ê¥·^Ÿ˜µ°.·Ê¥·¹ª|·¹ª|·°.·Ê¥·³õ·áY6¸³õ·³õ·Æ`"¸Ê¥·ü97leb6°.·ì(À¶ì(À¶ì(À¶ +[J¸°.·ì(À¶Ê¥·¹ª|·¹ª|·^Ÿ˜µþH848ª(,8ª(,8ˆH|8Ô%@8Ò«Ä8Ò«Ä8þ>’8Αº8Íy°8òã8òã8Íy°8Íy°8Íy°8èc¦8{åØ8¿ÇÎ8Íy°8¿ÇÎ8„¶9ËH÷8„¶9òã8{åØ8BPœ8Αº8_É9ËH÷89ïÜ +9¿ÇÎ8òã8Αº8Íy°8{åØ8Íy°8Ò«Ä8Íy°8BPœ8&í8Íy°8¿ÇÎ8Íy°8D0ˆ8Íy°8èc¦8ˆH|8h6h8¤*T8BPœ8ˆH|8h6h8Ô%@8餑7h6h848þH8÷Ñà7÷Ñà7餑7ü97ˆH|8Ô%@8餑748ª(,8D0ˆ8ˆH|8D0ˆ8ˆH|8¤*T8ª(,8Íy°8Íy°8Ò«Ä8þ>’8èc¦8þ>’8þ>’8h6h8èc¦8h6h8Ò«Ä8èc¦8h6h8Ò«Ä8ËH÷8òã8òã8¿ÇÎ8{åØ8{åØ8Íy°8òã8„¶9„¶9,ñ9&í89¹w.9ƒH$99{åØ8œ9¹w.9ƒH$99ïÜ +9ïÜ +9œ9„¶9„¶9ïÜ +99,ñ9_É99{åØ8ïÜ +9Íy°8Ô%@8¿ÇÎ8D0ˆ8ˆH|8Ò«Ä8BPœ8ˆH|8þ>’8Íy°8òã8{åØ8Αº8BPœ8&í8BPœ8D0ˆ8BPœ8h6h8Ò«Ä8¿ÇÎ8¿ÇÎ8Íy°8D0ˆ8Αº8D0ˆ8èc¦8Αº8Αº8èc¦8¤*T8÷Ñà748Ë+¹748ü97^Ÿ˜µ÷Ñà748^Ÿ˜µ¹ª|·é¤‘7þH8ì(À¶ü97k‹T7餑7þH8Ë+¹7leb6þH8餑7÷Ñà748D0ˆ848ª(,8÷Ñà7¤*T8þ>’8D0ˆ8òã8¿ÇÎ8òã8Αº8Ò«Ä8_É9òã8èc¦8Αº8&í8Ò«Ä8¿ÇÎ8_É9{åØ8Ò«Ä8Αº8Ò«Ä8òã8„¶9,ñ9„¶9ËH÷8,ñ9„¶9ƒH$9œ9ïÜ +9œ9„¶9ËH÷8Ò«Ä8Íy°8„¶9&í8Íy°8_É9Íy°8Íy°8D0ˆ8D0ˆ8D0ˆ8þ>’8BPœ8Αº8¤*T8÷Ñà7h6h8ü97÷Ñà748¤*T8þH8¤*T8Ô%@8h6h8¤*T8Ô%@8¤*T8ˆH|8¤*T8¤*T8Ô%@8÷Ñà7^Ÿ˜µì(À¶÷Ñà7Ë+¹7k‹T7ˆH|8þH8¤*T8þH8÷Ñà7k‹T7¹ª|·leb6Ë+¹7leb6Ë+¹7ì(À¶ì(À¶Ê¥·ì(À¶³õ·Æ`"¸ÉaÍ·¹ª|·³õ·Ê¥·^Ÿ˜µk‹T7°p¸ +[J¸³õ·áY6¸áY6¸Sa—¸Sa—¸Ôs¡¸°p¸Sa—¸Žrr¸zc^¸ÉaÍ·¹ª|·°p¸ÉaÍ·ÉaÍ·ÉaÍ·Æ`"¸ÉaÍ·¹ª|·é¤‘7ü97^Ÿ˜µleb648餑7ì(À¶^Ÿ˜µì(À¶ì(À¶Ë+¹7Ë+¹7餑7k‹T7^Ÿ˜µü97餑7leb6餑7k‹T7÷Ñà748k‹T7k‹T7Ë+¹7k‹T7k‹T7餑7^Ÿ˜µì(À¶°.·°p¸Æ`"¸³õ·ì(À¶ü97Ê¥·^Ÿ˜µ°p¸³õ·zc^¸áY6¸zc^¸Žrr¸ +[J¸°p¸áY6¸Ê¥·ÉaÍ·³õ·Æ`"¸°p¸°p¸°p¸zc^¸³õ·áY6¸áY6¸Ê¥·Æ`"¸°p¸³õ·ÉaÍ·áY6¸Ê¥·ÉaÍ·³õ·°p¸³õ·°.·ì(À¶÷Ñà7leb6ü97Ë+¹7leb6k‹T7÷Ñà7Ë+¹7ì(À¶ü97÷Ñà7þH8餑7þH8÷Ñà7Ô%@848ª(,8h6h8{åØ8þ>’8h6h8Ô%@8Ô%@848h6h848Ô%@8h6h8þ>’8Ô%@8Ô%@8Ô%@8D0ˆ8Ô%@8þH8þH848^Ÿ˜µü97ü97Ë+¹7^Ÿ˜µk‹T7³õ·°p¸°.·é¤‘7ì(À¶¹ª|·¹ª|·k‹T7°.·Ê¥·°p¸Ê¥·ÞCƒ¸Žrr¸ÉaÍ·Ê¥· +[J¸°p¸Æ`"¸ì(À¶¹ª|·³õ·zc^¸Žrr¸áY6¸Sa—¸HQ¸£ˆ«¸ŸŸµ¸Sa—¸ªÓɸŸŸµ¸ŸŸµ¸£ˆ«¸«¸¿¸£ˆ«¸Sa—¸áY6¸Sa—¸Žrr¸ÞCƒ¸Sa—¸†ðÓ¸£ˆ«¸Sa—¸ÞCƒ¸ŸŸµ¸Sa—¸Sa—¸{/è¸ÞCƒ¸áY6¸°p¸Æ`"¸ÉaÍ·Ê¥·¹ª|·Ë+¹7þH8^Ÿ˜µé¤‘7ª(,8餑7h6h8þH8Ô%@8Íy°8Αº8ˆH|8Ò«Ä8Αº8èc¦8¿ÇÎ8BPœ8Íy°8Íy°8èc¦8{åØ8{åØ8Αº8{åØ8þ>’8ˆH|8¤*T8¤*T8餑7餑7Ë+¹748leb6÷Ñà7Ê¥·leb6°.·°.·¹ª|·³õ·°p¸Æ`"¸zc^¸Žrr¸ +[J¸Sa—¸ +[J¸Žrr¸Sa—¸zc^¸zc^¸£ˆ«¸zc^¸Ôs¡¸£ˆ«¸Sa—¸Sa—¸öL¹öL¹«¸¿¸«¸¿¸Sa—¸{/è¸{/踆ðÓ¸ªÓɸ£ˆ«¸Sa—¸†ðÓ¸«¸¿¸mQò¸ítü¸mQò¸(Þ¸mQò¸«¸¿¸£ˆ«¸ÞCƒ¸³õ· +[J¸Žrr¸HQ¸°p¸³õ·zc^¸°p¸¹ª|·Æ`"¸áY6¸³õ·°p¸Žrr¸zc^¸Žrr¸áY6¸^Ÿ˜µì(À¶ì(À¶k‹T7ü97k‹T7¹ª|·^Ÿ˜µ÷Ñà7þH8÷Ñà7÷Ñà7ª(,8ª(,8¤*T8þ>’8þ>’8èc¦8þ>’8h6h8BPœ8þ>’8Ô%@8h6h8þ>’8÷Ñà7þH8h6h8D0ˆ848D0ˆ8¤*T8h6h8þ>’8D0ˆ8¤*T8D0ˆ8h6h8þH8þ>’8BPœ8ˆH|8Ô%@8k‹T7k‹T7ü97³õ·é¤‘7ì(À¶ü97¹ª|·Ê¥·zc^¸ì(À¶°.· +[J¸ÉaÍ·ÉaÍ·Æ`"¸ÞCƒ¸³õ·Žrr¸Æ`"¸ì(À¶³õ·zc^¸áY6¸zc^¸£ˆ«¸£ˆ«¸zc^¸°.·³õ·³õ·Ê¥·Æ`"¸zc^¸°p¸zc^¸³õ·Ê¥·Žrr¸ÉaÍ·Ê¥·ÉaÍ·Æ`"¸ü97^Ÿ˜µk‹T7÷Ñà7ü9748Ë+¹7¹ª|·þH8ª(,8ª(,8D0ˆ8ª(,8BPœ848h6h8þH848Íy°8h6h8Ô%@8h6h8ª(,8èc¦8D0ˆ8ª(,8Ë+¹7ü97þH848þH8ª(,8þH8Ô%@8÷Ñà748Ë+¹7餑7k‹T7^Ÿ˜µ +[J¸Ê¥·áY6¸ÉaÍ·ü97leb6¹ª|·48÷Ñà7leb6^Ÿ˜µé¤‘7ü97Ê¥·°.·ì(À¶°.·Ê¥·Æ`"¸³õ·Ê¥·°p¸zc^¸Sa—¸Sa—¸£ˆ«¸ªÓɸŽrr¸«¸¿¸ªÓɸŸŸµ¸«¸¿¸{/è¸Sa—¸†ðÓ¸«¸¿¸†ðÓ¸HQ¸ÞCƒ¸Sa—¸ªÓɸÞCƒ¸£ˆ«¸ŸŸµ¸{/踫¸¿¸(Þ¸†ðÓ¸Sa—¸ÞCƒ¸zc^¸Žrr¸zc^¸HQ¸°p¸Sa—¸Ôs¡¸Ôs¡¸ªÓɸ«¸¿¸Ôs¡¸Sa—¸†ðÓ¸Sa—¸Sa—¸Sa—¸³õ·ÉaÍ·^Ÿ˜µ°.·Ê¥·°p¸°.·³õ·³õ·^Ÿ˜µ³õ·ÉaÍ·leb6ü97þH8Ô%@8þH848h6h8ˆH|8÷Ñà7þH8h6h8Ô%@8þ>’8D0ˆ8èc¦8Ò«Ä8ª(,8èc¦8èc¦8BPœ8BPœ8Αº8Αº8èc¦8Αº8BPœ8BPœ8Αº848ˆH|8Íy°8Ò«Ä8Íy°8ª(,8¤*T8ˆH|8ª(,8¤*T8Ô%@8Ô%@8Ô%@8ü97¹ª|·^Ÿ˜µ¹ª|·¹ª|·°p¸¹ª|·³õ·áY6¸°.·Æ`"¸áY6¸áY6¸áY6¸ +[J¸ªÓɸÔs¡¸Žrr¸Sa—¸zc^¸Sa—¸ŸŸµ¸Ôs¡¸{/踟Ÿµ¸ŸŸµ¸Sa—¸áY6¸Ê¥·¹ª|·°.·¹ª|·^Ÿ˜µÊ¥·¹ª|·ÉaÍ·³õ·leb6Ë+¹7Ë+¹7leb6ª(,8÷Ñà7ü97餑7Ë+¹7Ô%@8BPœ8Ë+¹748ª(,8Ë+¹7^Ÿ˜µk‹T7Ë+¹7ª(,8餑7°.·^Ÿ˜µ°.·ÉaÍ·³õ·³õ· +[J¸Sa—¸zc^¸zc^¸áY6¸zc^¸Žrr¸áY6¸ÞCƒ¸Æ`"¸Sa—¸Sa—¸(Þ¸ªÓɸŸŸµ¸ªÓɸ†ðÓ¸£ˆ«¸£ˆ«¸Æ`"¸Æ`"¸³õ·Žrr¸Ôs¡¸°p¸Sa—¸£ˆ«¸«¸¿¸†ðÓ¸†ðÓ¸Sa—¸Sa—¸«¸¿¸mQò¸ªÓɸ{/è¸.`¹ítü¸ŸŸµ¸«ˆ¹öL¹.`¹mQò¸(Þ¸ítü¸ŸŸµ¸{/踟Ÿµ¸£ˆ«¸ŸŸµ¸Ôs¡¸£ˆ«¸ŸŸµ¸Ôs¡¸ªÓɸSa—¸Žrr¸ +[J¸^Ÿ˜µ°.·°p¸zc^¸leb6°.·Ê¥·°p¸Æ`"¸k‹T7ü97Ê¥·¹ª|·^Ÿ˜µÊ¥·k‹T7餑7ì(À¶é¤‘7餑7ü97ü97Ê¥·ü97leb6þH8k‹T7÷Ñà7÷Ñà7Ë+¹7ü97þH8ü97þH8ü97Ë+¹7k‹T7k‹T7ì(À¶°.·ü9748ì(À¶¹ª|·°p¸leb6ü97°p¸³õ·³õ·ü97ì(À¶¹ª|·³õ·ÉaÍ·ÉaÍ·°.·Æ`"¸Žrr¸Ôs¡¸Ôs¡¸«¸¿¸Sa—¸†ðÓ¸ªÓɸ†ðÓ¸†ðÓ¸ªÓɸítü¸{/踪Óɸ{/è¸{/è¸ítü¸ªÓɸªÓɸ.`¹t ¹æ¹t ¹(Þ¸(Þ¸öL¹mQò¸ítü¸«¸¿¸ŸŸµ¸ítü¸öL¹{/踪ÓɸªÓɸ£ˆ«¸ªÓɸÔs¡¸ªÓɸ£ˆ«¸Ôs¡¸«¸¿¸«¸¿¸Ôs¡¸Sa—¸Žrr¸Ôs¡¸ÉaÍ·ì(À¶°p¸ÉaÍ·¹ª|·°.·Ê¥·ì(À¶ü97餑7þH8þH848Ô%@8Ô%@8ª(,8D0ˆ8D0ˆ8¤*T8þH8ˆH|8h6h8D0ˆ8h6h8ˆH|8Ë+¹7ª(,8BPœ8Αº8èc¦8Αº8Αº8Íy°8Αº8BPœ8èc¦8ˆH|8ˆH|8ª(,8Ô%@8ª(,848Ë+¹7÷Ñà7ü97ü97^Ÿ˜µË+¹7k‹T7^Ÿ˜µ¹ª|·ÞCƒ¸áY6¸áY6¸áY6¸ÞCƒ¸áY6¸zc^¸Ôs¡¸ÞCƒ¸Ôs¡¸Žrr¸zc^¸Sa—¸Æ`"¸áY6¸áY6¸zc^¸«¸¿¸Ôs¡¸áY6¸£ˆ«¸ÞCƒ¸Ôs¡¸Sa—¸áY6¸°p¸¹ª|·Ê¥·Ê¥·³õ·°.·Ê¥·Ê¥·ü97ì(À¶Ô%@8÷Ñà7Ë+¹7ü97^Ÿ˜µÉaÍ·ü97ü97þH8¤*T8Ë+¹7þH8þ>’8k‹T7ª(,8Ô%@8D0ˆ8h6h8Íy°8D0ˆ8D0ˆ8ˆH|8èc¦8þ>’8D0ˆ8Íy°8ËH÷8òã8Íy°8&í8ËH÷8&í8òã8„¶9œ9ƒH$99Ö_)9ïÜ +99&í8òã8_É9{åØ8ïÜ +9_É9œ9,ñ9_É9,ñ9„¶9_É9ËH÷8ËH÷8_É9ïÜ +9òã8{åØ8¿ÇÎ8_É9Ò«Ä8òã8{åØ8„¶9èc¦8Ò«Ä8D0ˆ8ˆH|8BPœ8¤*T8ª(,8Ô%@8Αº8ˆH|8h6h8Ô%@8þ>’8¤*T8þ>’8ˆH|8¤*T8ª(,8¤*T8ª(,8Íy°8èc¦8D0ˆ8D0ˆ8¤*T8þ>’8Αº8BPœ8Íy°848¤*T8ª(,8Αº8Αº8h6h8BPœ8_É9òã8_É9{åØ8ïÜ +99Αº8„¶9ƒH$9,ñ9,ñ99òã8,ñ9òã8,ñ9&í8,ñ9_É9„¶9Â19ïÜ +9{åØ8òã8Ò«Ä8òã8_É9òã8òã8Ò«Ä8¿ÇÎ8èc¦8èc¦8BPœ8ˆH|8Ô%@8ª(,8¤*T8¤*T8Ô%@8Ò«Ä8D0ˆ8¤*T8Ë+¹7leb6leb6^Ÿ˜µÉaÍ·³õ·³õ·°.·48leb6k‹T7leb6ü97^Ÿ˜µk‹T7Ê¥·ü97Ë+¹7°.·Ê¥·ÉaÍ·Ê¥·÷Ñà7Ô%@8leb6Æ`"¸°p¸áY6¸³õ·ÉaÍ·°p¸Ôs¡¸ +[J¸ÉaÍ· +[J¸³õ·^Ÿ˜µ¹ª|·leb6ì(À¶¹ª|·^Ÿ˜µË+¹7þH8餑7Ô%@848餑7ª(,8ˆH|8k‹T7÷Ñà7÷Ñà7÷Ñà7h6h8Ë+¹7ˆH|8BPœ8Ò«Ä8BPœ8BPœ8þ>’8BPœ8¿ÇÎ8BPœ8Ò«Ä8¿ÇÎ8Ò«Ä8òã8èc¦8&í8¿ÇÎ8_É9&í8„¶9Íy°8D0ˆ8Ò«Ä8èc¦8h6h8ˆH|8ˆH|8h6h8D0ˆ8Ô%@8ˆH|8¿ÇÎ8h6h8ˆH|8ª(,848ª(,8èc¦8BPœ8Íy°8¤*T8þ>’8þ>’8D0ˆ8Ô%@8þH8^Ÿ˜µ°.·°.·^Ÿ˜µzc^¸Sa—¸ +[J¸ÞCƒ¸£ˆ«¸HQ¸Žrr¸«¸¿¸ŸŸµ¸«¸¿¸ŸŸµ¸«¸¿¸zc^¸°p¸áY6¸Æ`"¸zc^¸ÞCƒ¸Sa—¸Sa—¸³õ·Sa—¸Sa—¸Sa—¸áY6¸ +[J¸Æ`"¸Žrr¸°p¸Sa—¸Ôs¡¸Sa—¸ÞCƒ¸Sa—¸ŸŸµ¸(Þ¸ŸŸµ¸£ˆ«¸£ˆ«¸«¸¿¸ÞCƒ¸Sa—¸HQ¸ÞCƒ¸«¸¿¸Sa—¸HQ¸HQ¸ +[J¸³õ·°p¸ÉaÍ·ÉaÍ·leb6°.·ì(À¶³õ·ì(À¶^Ÿ˜µé¤‘7leb6leb6ì(À¶ª(,8þH8^Ÿ˜µþH8ü97k‹T7leb6ü97Ë+¹7k‹T7^Ÿ˜µk‹T7°.·°p¸ÉaÍ·leb6k‹T7ÉaÍ·ÉaÍ·°p¸³õ·³õ·Ê¥·Æ`"¸HQ¸áY6¸Ê¥·°p¸Ê¥·HQ¸zc^¸zc^¸Žrr¸áY6¸áY6¸ +[J¸HQ¸£ˆ«¸ªÓɸÔs¡¸£ˆ«¸HQ¸ÞCƒ¸£ˆ«¸Sa—¸Sa—¸áY6¸ªÓɸSa—¸Sa—¸HQ¸zc^¸Æ`"¸áY6¸°p¸°p¸áY6¸°p¸¹ª|·¹ª|·leb6k‹T7°.·ì(À¶¹ª|·leb6k‹T7leb6餑7°.·^Ÿ˜µleb6ì(À¶¹ª|·ì(À¶ì(À¶ì(À¶Ê¥·k‹T7^Ÿ˜µé¤‘7ü97餑748¤*T8þH8Ë+¹7餑7¤*T848÷Ñà7¤*T8ˆH|8D0ˆ8D0ˆ8Ô%@8þ>’8h6h8ˆH|8D0ˆ8Ô%@8ª(,8÷Ñà7leb6k‹T7þH8°.·é¤‘7ü97ì(À¶°p¸é¤‘7÷Ñà7leb6ª(,8þH8Ë+¹7Ë+¹7ü97÷Ñà7þH8k‹T7ü97°.·³õ·zc^¸ÞCƒ¸ +[J¸ŸŸµ¸Sa—¸Žrr¸Žrr¸áY6¸zc^¸áY6¸£ˆ«¸HQ¸Sa—¸«¸¿¸Ôs¡¸ªÓɸ«¸¿¸£ˆ«¸ªÓɸ«¸¿¸Sa—¸Ôs¡¸ÞCƒ¸Sa—¸Sa—¸ÞCƒ¸ +[J¸Sa—¸³õ·ÞCƒ¸Ôs¡¸Sa—¸Æ`"¸Žrr¸HQ¸Žrr¸Žrr¸ +[J¸°p¸zc^¸ +[J¸^Ÿ˜µÊ¥·¹ª|·ü97leb6³õ·^Ÿ˜µì(À¶^Ÿ˜µleb6leb6Ê¥·ì(À¶þH8餑7^Ÿ˜µ°.·ì(À¶÷Ñà7ü97°.·Ë+¹7þH8h6h8¤*T8þ>’848÷Ñà7ª(,8484848þH8¤*T8k‹T7Ô%@8èc¦8ª(,8D0ˆ8D0ˆ8ª(,8Ô%@8Ë+¹7^Ÿ˜µÊ¥·ÉaÍ·°.·³õ·Æ`"¸áY6¸zc^¸Žrr¸zc^¸Žrr¸áY6¸ +[J¸Æ`"¸°.·zc^¸°p¸áY6¸ÞCƒ¸£ˆ«¸Ôs¡¸Sa—¸(Þ¸Žrr¸{/踆ðÓ¸Ôs¡¸ªÓɸ«¸¿¸«¸¿¸Ôs¡¸Ôs¡¸ +[J¸Sa—¸HQ¸áY6¸°p¸Æ`"¸°p¸°p¸ÉaÍ·°.·áY6¸¹ª|·Ê¥·^Ÿ˜µ°.·Ê¥·^Ÿ˜µ°p¸ÉaÍ·Æ`"¸Æ`"¸°p¸ÉaÍ·Æ`"¸°p¸ÉaÍ·ì(À¶Ë+¹7餑7Ô%@8BPœ8ª(,8÷Ñà7Ò«Ä8D0ˆ8ˆH|8èc¦8BPœ8BPœ8Ò«Ä8Íy°8Αº8Íy°8BPœ8h6h8¤*T8h6h8Ô%@8h6h8þ>’8þ>’8èc¦8þ>’8Ô%@8k‹T7þH8餑7ª(,8h6h8¤*T8^Ÿ˜µé¤‘7ü97^Ÿ˜µü97¹ª|·°.·ÉaÍ·°.·^Ÿ˜µÊ¥·°p¸°p¸zc^¸zc^¸ÞCƒ¸ªÓɸ{/踪Óɸ†ðÓ¸£ˆ«¸{/踫¸¿¸ítü¸mQò¸ßø+¹5Ê!¹öL¹5Ê!¹.`¹æ¹«ˆ¹mQò¸«¸¿¸«¸¿¸«¸¿¸ŸŸµ¸«¸¿¸Sa—¸«¸¿¸ŸŸµ¸«¸¿¸Sa—¸Sa—¸«¸¿¸Sa—¸Sa—¸Sa—¸zc^¸ +[J¸Æ`"¸áY6¸³õ·°p¸°p¸áY6¸zc^¸^Ÿ˜µÊ¥·leb6ü97ü97ü97餑7÷Ñà748k‹T7^Ÿ˜µ48ª(,8÷Ñà7þ>’8ª(,8Ô%@8÷Ñà7ª(,848þH848k‹T7°.·ü97ü97ì(À¶Ë+¹7Ë+¹7ü97k‹T7Ê¥·^Ÿ˜µ^Ÿ˜µé¤‘7k‹T7¤*T8ü97Ê¥·ì(À¶ì(À¶ü97k‹T7ÉaÍ·ÉaÍ·leb6^Ÿ˜µleb6ü97ÉaÍ·leb6ü97Ô%@8÷Ñà7leb6h6h8ˆH|8leb6°.·^Ÿ˜µ°p¸áY6¸leb6餑7ü97^Ÿ˜µì(À¶é¤‘7ì(À¶é¤‘7k‹T7餑7÷Ñà7Ô%@8Ë+¹7þH8ª(,8ª(,8÷Ñà7ü97÷Ñà7ª(,8¤*T8ü97Ë+¹7¤*T8ª(,8ˆH|8èc¦8ˆH|8BPœ8Αº8BPœ8{åØ8„¶9òã8BPœ8Αº8èc¦8Íy°8èc¦8ˆH|8þ>’8èc¦8{åØ8„¶9òã8&í8Αº8{åØ8{åØ8D0ˆ8Αº8Αº8{åØ8Ò«Ä8{åØ8ˆH|8þ>’8BPœ8¤*T8þH8h6h8þH8餑7÷Ñà7餑7Ë+¹7leb6÷Ñà7leb6k‹T7Ë+¹7^Ÿ˜µü97餑7k‹T7°.·¹ª|·ÉaÍ·°p¸ÉaÍ· +[J¸ÉaÍ·Ê¥·zc^¸¹ª|·°p¸zc^¸áY6¸ªÓɸ«¸¿¸£ˆ«¸ªÓɸŸŸµ¸Sa—¸Sa—¸zc^¸áY6¸³õ·³õ· +[J¸Žrr¸°p¸Æ`"¸zc^¸¹ª|·³õ·ÉaÍ·°p¸zc^¸zc^¸Ê¥·áY6¸°p¸°p¸ +[J¸Æ`"¸°p¸°p¸Žrr¸ +[J¸Žrr¸³õ·³õ·ì(À¶¹ª|·°.·leb6Ë+¹7^Ÿ˜µk‹T7÷Ñà7þH8¤*T848÷Ñà7Ë+¹7Ë+¹7Ô%@8ª(,8ª(,8餑7Ô%@8¤*T8¤*T848÷Ñà7餑7÷Ñà7leb648¤*T8÷Ñà7ì(À¶ü97ü97Ë+¹7^Ÿ˜µ°p¸¹ª|·³õ·°.·Ê¥·°p¸°p¸zc^¸Žrr¸Æ`"¸áY6¸Žrr¸ŸŸµ¸Žrr¸Žrr¸ +[J¸Sa—¸zc^¸Žrr¸£ˆ«¸HQ¸ÞCƒ¸ÞCƒ¸Ôs¡¸Ôs¡¸ítü¸ªÓɸŸŸµ¸Ôs¡¸ŸŸµ¸mQò¸†ðÓ¸Sa—¸£ˆ«¸ªÓɸ«¸¿¸«¸¿¸{/踟Ÿµ¸ŸŸµ¸«¸¿¸«¸¿¸Sa—¸zc^¸zc^¸áY6¸áY6¸zc^¸³õ·Æ`"¸ÉaÍ·Ê¥·Éaͷ餑7Ê¥·°.·48餑7þH8Ë+¹748ˆH|8{åØ8D0ˆ8þ>’8Íy°8Αº8òã8Íy°8„¶9ïÜ +9œ9òã8_É9Αº8ËH÷8òã8òã8{åØ8ËH÷8Ò«Ä8_É9Αº8èc¦8Ò«Ä8BPœ8Ò«Ä8Íy°8Íy°8þ>’8BPœ8èc¦8D0ˆ8ˆH|8BPœ8Ô%@8÷Ñà7÷Ñà7leb648k‹T7k‹T7餑7k‹T7°.·ü97þH8þH8°p¸^Ÿ˜µì(À¶°.·ì(À¶°.·ì(À¶¹ª|·ü97¹ª|·^Ÿ˜µ48÷Ñà7餑7ì(À¶°p¸³õ·Ê¥·Æ`"¸°.·°p¸áY6¸°p¸ÉaÍ·°.·¹ª|·°p¸³õ·ÉaÍ·ì(À¶k‹T7^Ÿ˜µk‹T7leb6³õ·é¤‘7ì(À¶°.·ü97÷Ñà7^Ÿ˜µleb6ª(,8k‹T7þH8ˆH|8þH8Ô%@8h6h8èc¦8BPœ8þ>’8Íy°8BPœ8¤*T8ˆH|8D0ˆ8èc¦8{åØ8¿ÇÎ8èc¦8h6h8ˆH|8ˆH|8BPœ8ˆH|8h6h8þ>’8Αº8èc¦8|Pd|1|24600|2013-282T15:32:41.397 ˆ +]8ü–‚8´–8´–8´–8´–86¤Œ86¤Œ8ˆ +]8.q8I8²iò7踵6²iò7ö!£7"w¶Ù(7¼_w7踵6ö!£7òË_5¼_w7踵6Py ·Py ·Py ·.Õ»·}ÓY·ö!£7lŸ¸˜i¸<}ã·c€-¸<}ã·$‹¸<}ã·lŸ¸}ÓY·Py ·˜i¸cƒU¸cƒU¸.Õ»·}ÓY·}ÓY·ùK”·òË_5"w¶}ÓY·Py ·¼_w7Ù(7"w¶}ÓY·"w¶}ÓY·òË_5²iò7b !8踵6²iò7.q8…·Ê7.q8ˆ +]8²iò7²iò7ê58mÆ 8Ûª8ü–‚8íñ´8µ%É8íñ´8õ`Ý8+ç8£ñ8hÆû8§õ9¥‰&9Ó9Ó9Ó9× +¿8õ`Ý8µ%É8rBÓ8mÆ 8mÆ 8rBÓ86¤Œ8ü–‚8ü–‚8I8b !8ê58"w¶Ù(7Py ·ùK”·Py ·(ì’¸~A¸cƒU¸lŸ¸ùK”·˜i¸˜i¸e§¸e§¸6³ã¸6³ã¸Åuϸ‹]¹‹]¹P‰¹a>¹Þ9¹ $¹Ýç3¹f4C¹eÏ.¹‹]¹x·)¹x·)¹P‰¹‹]¹µ ¹ $¹‹]¹P4 ¹™H¹rÔí¸µ ¹Åuϸ™H¹Åuϸ—ýœ¸(ì’¸—ýœ¸—ýœ¸#¢}¸˜i¸cƒU¸˜i¸<}ã·.Õ»·"w¶lŸ¸Py ·òË_5ö!£7b !8ö!£7ñ 8ˆ +]8ñ 8.q8Ûª8rBÓ8rBÓ8rBÓ8õ`Ý8§õ9§õ9£ñ8õ`Ý8µ%É8+ç8:19iF9+ç8§õ9£ñ8£ñ8× +¿8mÆ 8mÆ 8mÆ 8íñ´8× +¿8õ`Ý8× +¿8µ%É8´–8mÆ 8I86¤Œ8I8ˆ +]8b !8¼_w7Ù(7b !8²iò7¼_w7ö!£7ùK”·.Õ»·$‹¸Py ·˜i¸cƒU¸(ì’¸˜i¸#¢}¸ºYŸ(ì’¸B݈¸˜i¸lŸ¸B݈¸c€-¸˜i¸(ì’¸˜i¸lŸ¸c€-¸~A¸~A¸c€-¸lŸ¸c€-¸˜i¸<}ã·ùK”·.Õ»·<}ã·ùK”·lŸ¸ùK”·¼_w7踵6¼_w7²iò7ñ 8b !8I8I8ñ 8ê58b !8Py ·Py ·¼_w7ñ 8¼_w7ˆ +]8I8²iò7ñ 8…·Ê7Ù(7ê58I8ü–‚8.q8ˆ +]8I8ê58ê58ê58´–8²iò7ñ 8²iò7ñ 8b !8b !8ñ 8b !8Ù(7Ù(7踵6"w¶Py ·ùK”·c€-¸"w¶Py ·}ÓY·}ÓY·ùK”·lŸ¸.Õ»·(ì’¸cƒU¸(ì’¸c€-¸(ì’¸<}ã·<}ã·"w¶c€-¸$‹¸cƒU¸<}ã·#¢}¸cƒU¸cƒU¸#¢}¸(ì’¸(ì’¸(ì’¸#¢}¸”?»¸—ýœ¸(ì’¸6³ã¸—ýœ¸”?»¸e§¸6³ã¸Ÿ“Ù¸”?»¸cƒU¸”?»¸”?»¸o'±¸ºYŸ(ì’¸—ýœ¸e§¸Åuϸ(ì’¸lŸ¸—ýœ¸(ì’¸cƒU¸#¢}¸cƒU¸lŸ¸<}ã·.Õ»·$‹¸"w¶"w¶"w¶ö!£7¼_w7¼_w7踵6ê58b !8ê58…·Ê7òË_5ñ 8òË_5¼_w7ñ 8²iò7ñ 8mÆ 8ñ 8ñ 8²iò7I8…·Ê7¼_w7ñ 8踵6Ù(7…·Ê7ˆ +]8²iò7²iò7Ù(7"w¶Py ·}ÓY·<}ã·lŸ¸$‹¸~A¸#¢}¸˜i¸—ýœ¸c€-¸$‹¸(ì’¸o'±¸—ýœ¸6³ã¸Î ¹Ÿ“Ù¸ÅuϸrÔí¸ºYŸ—ýœ¸ºYŸD÷÷¸D÷÷¸rÔí¸Ÿ“Ù¸6³ã¸e§¸”?»¸o'±¸ÅuϸŸ“Ù¸Ÿ“Ù¸Ÿ“Ù¸6³ã¸ºYŸ6³ã¸”?»¸Ÿ“Ù¸D÷÷¸”?»¸D÷÷¸Ÿ“Ù¸rÔí¸e§¸ÅuϸºYŸo'±¸—ýœ¸Åuϸ”?»¸e§¸#¢}¸”?»¸(ì’¸~A¸B݈¸ºYŸ#¢}¸(ì’¸e§¸˜i¸<}ã·c€-¸#¢}¸$‹¸<}ã·$‹¸}ÓY·<}ã·Py ·<}ã·.Õ»·.Õ»·c€-¸òË_5"w¶ùK”·.Õ»·lŸ¸lŸ¸~A¸$‹¸e§¸c€-¸(ì’¸#¢}¸c€-¸(ì’¸o'±¸”?»¸Åuϸ—ýœ¸e§¸e§¸”?»¸ºYŸD÷÷¸(ì’¸˜i¸e§¸(ì’¸e§¸—ýœ¸—ýœ¸Åuϸ”?»¸D÷÷¸6³ã¸Ÿ“Ù¸D÷÷¸™H¹P4 ¹Î ¹D÷÷¸µ ¹™H¹µ ¹‹]¹a>¹eÏ.¹s¹P‰¹P‰¹P‰¹eÏ.¹x·)¹Ýç3¹Þ9¹™H¹‹]¹Ýç3¹s¹‹]¹µ ¹D÷÷¸Î ¹D÷÷¸6³ã¸ºYŸe§¸e§¸”?»¸—ýœ¸~A¸c€-¸lŸ¸<}ã·ùK”·òË_5踵6lŸ¸.Õ»·ö!£7²iò7Ù(7Ù(7Ù(7ê58íñ´8µ%É8× +¿8íñ´86¤Œ8× +¿8µ%É8× +¿8rBÓ8Ûª8õ`Ý8rBÓ8:19° 9:19Ó9Ó9° 9iF99¡+9iF9iF98\9iF9hÆû8Ó9iF9õ`Ý8õ`Ý8Ûª8+ç8mÆ 8íñ´8íñ´8+ç8rBÓ8× +¿8õ`Ý8rBÓ8× +¿8I8b !8.q8ñ 8.q8²iò7²iò7òË_5òË_5.Õ»·ùK”·lŸ¸Py ·è¸µ6~A¸˜i¸<}ã·lŸ¸lŸ¸lŸ¸<}ã·ùK”·$‹¸lŸ¸$‹¸~A¸c€-¸lŸ¸"w¶}ÓY·lŸ¸cƒU¸.Õ»·}ÓY·ùK”·<}ã·è¸µ6}ÓY·<}ã·òË_5.Õ»·lŸ¸.Õ»·"w¶è¸µ6Py ·}ÓY·"w¶Ù(7¼_w7ê58.q8.q8rBÓ86¤Œ8.q8mÆ 8I8µ%É8µ%É8ˆ +]8ñ 8ˆ +]8ˆ +]8.q8× +¿8Ûª8ü–‚8.q8+ç8§õ9× +¿8´–8mÆ 86¤Œ86¤Œ86¤Œ8mÆ 8ê586¤Œ86¤Œ8.q8ñ 8ˆ +]8ˆ +]8I8b !8踵6ö!£7…·Ê7²iò7¼_w7²iò7…·Ê7ñ 8b !8…·Ê7ö!£7¼_w7ñ 8Ù(7ö!£7…·Ê7Ù(7òË_5踵6}ÓY·"w¶}ÓY·<}ã·.Õ»·Py ·lŸ¸$‹¸~A¸ºYŸ(ì’¸~A¸~A¸c€-¸$‹¸$‹¸ùK”·ùK”·ùK”·}ÓY·ñ 8…·Ê7.q8ˆ +]8ñ 8b !8ê58ü–‚8ü–‚8íñ´8õ`Ý8hÆû8+ç8õ`Ý8õ`Ý8õ`Ý8ˆ +]8´–8× +¿8µ%É8hÆû8£ñ8Ó9° 9:19Ó9+ç8iF99¡+9Ò598\9£r!9° 9Ó99ë:9›pT9¥‰&9Ò59[¹09¥‰&9:19Ó9Ó9Ó9:19hÆû8+ç8õ`Ý8+ç8íñ´8.q86¤Œ8´–8ü–‚8ˆ +]8´–86¤Œ8I8ˆ +]8²iò7Ù(7踵6Ù(7"w¶}ÓY·.Õ»·.Õ»·<}ã·.Õ»·$‹¸cƒU¸}ÓY·.Õ»·˜i¸o'±¸~A¸~A¸B݈¸(ì’¸(ì’¸o'±¸o'±¸Ÿ“Ù¸o'±¸”?»¸(ì’¸(ì’¸”?»¸~A¸ºYŸe§¸”?»¸6³ã¸Ÿ“Ù¸6³ã¸Ÿ“Ù¸—ýœ¸e§¸#¢}¸—ýœ¸e§¸~A¸—ýœ¸cƒU¸$‹¸lŸ¸c€-¸lŸ¸}ÓY·Py ·òË_5Ù(7¼_w7ö!£7Ù(7…·Ê7Ù(76¤Œ8ˆ +]8ˆ +]8mÆ 8ü–‚8b !8b !8ñ 8ñ 8ñ 8I8ê58ˆ +]8ê58.q86¤Œ8mÆ 8´–8íñ´86¤Œ8µ%É8mÆ 8rBÓ8hÆû8íñ´8ü–‚8ü–‚8ü–‚8ü–‚8¼_w7…·Ê7ö!£7ö!£7òË_5Ù(7ùK”·è¸µ6<}ã·ùK”·è¸µ6.Õ»·}ÓY·Py ·c€-¸lŸ¸lŸ¸c€-¸c€-¸˜i¸<}ã·$‹¸˜i¸$‹¸˜i¸B݈¸(ì’¸~A¸ùK”·—ýœ¸(ì’¸—ýœ¸B݈¸”?»¸c€-¸˜i¸B݈¸˜i¸#¢}¸B݈¸(ì’¸cƒU¸B݈¸(ì’¸B݈¸c€-¸<}ã·}ÓY·$‹¸c€-¸Py ·$‹¸lŸ¸…·Ê7"w¶ñ 8ê58I8ê58…·Ê7mÆ 86¤Œ8× +¿8.q8ˆ +]8ü–‚86¤Œ8Ûª8ö!£7²iò7ê58¼_w7ö!£7¼_w7ùK”·…·Ê7…·Ê7ê58ö!£7ñ 8¼_w7…·Ê7Ù(7"w¶Ù(7²iò7}ÓY·è¸µ6…·Ê7I8ö!£7ùK”·Py ·òË_5²iò7Ù(7…·Ê7ê58ê58ê58²iò7²iò7踵6踵6òË_5<}ã·Ù(7}ÓY·"w¶Ù(7lŸ¸.Õ»·è¸µ6<}ã·}ÓY·²iò7ö!£7Ù(7Ù(7<}ã·c€-¸<}ã·Ù(7.Õ»·<}ã·ùK”·è¸µ6Ù(7踵6.Õ»·˜i¸lŸ¸.Õ»·$‹¸ùK”·"w¶¼_w7…·Ê7ùK”·lŸ¸.Õ»·Py ·è¸µ6}ÓY·Ù(7²iò7²iò7I8ê586¤Œ8ˆ +]8¼_w7ê58ñ 8× +¿8Ûª8Ûª8´–8íñ´8´–8× +¿8mÆ 86¤Œ8Ûª8rBÓ8Ûª8íñ´8rBÓ8× +¿8µ%É8Ûª8íñ´8rBÓ8õ`Ý8µ%É8× +¿8× +¿8Ó9rBÓ8£ñ8§õ9+ç8íñ´8.q8mÆ 8ˆ +]8I8ü–‚8ùK”·òË_5<}ã·Py ·}ÓY·.Õ»·˜i¸—ýœ¸(ì’¸(ì’¸~A¸—ýœ¸o'±¸—ýœ¸e§¸”?»¸ºYŸe§¸(ì’¸—ýœ¸D÷÷¸6³ã¸ÅuϸÅuϸºYŸs¹µ ¹ºYŸŸ“Ù¸ºYŸo'±¸ÅuϸºYŸ”?»¸(ì’¸(ì’¸˜i¸Åuϸe§¸(ì’¸˜i¸—ýœ¸#¢}¸o'±¸(ì’¸”?»¸”?»¸—ýœ¸cƒU¸#¢}¸—ýœ¸lŸ¸lŸ¸lŸ¸ùK”·<}ã·Py ·ùK”·"w¶Py ·òË_5"w¶Py ·¼_w7Ù(7b !8ñ 8ê58mÆ 8´–8ˆ +]8mÆ 8§õ9+ç8iF9Ó9Ó9iF9£r!9:19¥‰&99¡+9î@9¥‰&9[¹09[¹09î@9° 9¥‰&9iF9Ó9:19:19hÆû8£ñ8:19:19rBÓ8rBÓ8íñ´8mÆ 8Ûª8ê58ê58²iò7踵6b !8I8ñ 8ñ 8ñ 8b !8ö!£7ö!£7²iò7b !8ê58ö!£7ê58ü–‚8b !8²iò7…·Ê7Ù(7¼_w7"w¶¼_w7…·Ê7"w¶Py ·òË_5Ù(7òË_5"w¶è¸µ6òË_5ñ 8踵6I8íñ´86¤Œ8ˆ +]86¤Œ86¤Œ8ˆ +]8íñ´8rBÓ8+ç8£ñ8õ`Ý8:19+ç8§õ9Ó9íñ´8íñ´8:19× +¿8õ`Ý8° 9hÆû8hÆû8õ`Ý8° 9° 9hÆû8Ó9õ`Ý8Ó9° 9Ó9£r!9:19° 9hÆû8Ó9+ç8:19:198\9[¹09hÆû8° 9§õ9£ñ8Ó9:19õ`Ý8:19§õ9:19£ñ8õ`Ý8× +¿8× +¿8íñ´8× +¿86¤Œ8Ûª8´–8ü–‚8I8ˆ +]8ê58b !8²iò7…·Ê7ˆ +]8²iò7I8òË_5òË_5Ù(7Ù(7"w¶è¸µ6ùK”·}ÓY·ùK”·cƒU¸c€-¸$‹¸$‹¸$‹¸lŸ¸$‹¸c€-¸$‹¸(ì’¸.Õ»·"w¶~A¸ùK”·~A¸$‹¸<}ã·ùK”·Py ·Py ·¼_w7Ù(7Py ·²iò7.q8…·Ê7I8.q8mÆ 8Ûª86¤Œ8× +¿8Ûª8+ç8Ûª8Ûª8Ûª8mÆ 8× +¿8ü–‚8ü–‚8íñ´8ñ 8ñ 8…·Ê7ñ 8b !8}ÓY·òË_5…·Ê7¼_w7ö!£7踵6"w¶òË_5Py ·<}ã·lŸ¸Py ·"w¶òË_5$‹¸$‹¸˜i¸lŸ¸lŸ¸lŸ¸ùK”·$‹¸lŸ¸˜i¸cƒU¸.Õ»·~A¸˜i¸—ýœ¸(ì’¸”?»¸o'±¸e§¸rÔí¸”?»¸—ýœ¸ºYŸ”?»¸”?»¸”?»¸ÅuϸrÔí¸‹]¹µ ¹s¹Î ¹x·)¹Ýç3¹x·)¹s¹P‰¹‹]¹a>¹èNH¹Ýç3¹f4C¹P‰¹™H¹™H¹‹]¹s¹rÔí¸rÔí¸Ÿ“ٸΠ¹”?»¸e§¸Åuϸ˜i¸$‹¸lŸ¸<}ã·lŸ¸òË_5b !8¼_w7²iò7ü–‚8íñ´8ê58ˆ +]8²iò7ü–‚8ˆ +]8ˆ +]86¤Œ8ü–‚8mÆ 8× +¿86¤Œ8²iò7b !8ê58ˆ +]8ü–‚86¤Œ8I8b !8ê58b !8ö!£7I8b !8I8ü–‚8ñ 8I8²iò7¼_w7²iò7…·Ê7ö!£7ñ 8²iò7Ù(7ö!£7ê58ö!£7²iò7ê58踵6¼_w7ö!£7Ù(7踵6ê58Ù(7…·Ê7ùK”·.Õ»·è¸µ6<}ã·}ÓY·Py ·è¸µ6ùK”·"w¶ùK”·c€-¸B݈¸lŸ¸$‹¸$‹¸ºYŸùK”·cƒU¸˜i¸(ì’¸(ì’¸e§¸c€-¸˜i¸B݈¸cƒU¸(ì’¸˜i¸B݈¸c€-¸$‹¸$‹¸˜i¸c€-¸ùK”·"w¶.Õ»·lŸ¸.Õ»·òË_5"w¶ö!£7Ù(7ñ 8¼_w7²iò7.q8I8I8ü–‚8Ûª8× +¿8õ`Ý8§õ9hÆû8£ñ8+ç8+ç8õ`Ý8rBÓ8íñ´8µ%É8íñ´8× +¿8íñ´8ü–‚8ñ 8ñ 8²iò7b !8ê58踵6…·Ê7…·Ê7I8ñ 8I8b !8踵6…·Ê7¼_w7Ù(7²iò7b !8òË_5"w¶è¸µ6òË_5òË_5Py ·lŸ¸$‹¸lŸ¸˜i¸$‹¸c€-¸$‹¸<}ã·$‹¸}ÓY·$‹¸~A¸lŸ¸cƒU¸$‹¸(ì’¸o'±¸(ì’¸~A¸o'±¸˜i¸(ì’¸o'±¸—ýœ¸”?»¸o'±¸cƒU¸Ÿ“Ù¸(ì’¸(ì’¸Ÿ“Ù¸(ì’¸”?»¸ºYŸe§¸”?»¸—ýœ¸o'±¸e§¸e§¸c€-¸lŸ¸(ì’¸~A¸c€-¸lŸ¸"w¶"w¶"w¶Ù(7}ÓY·}ÓY·ùK”·Py ·Ù(7òË_5ö!£7ö!£7…·Ê7I8"w¶òË_5踵6.Õ»·"w¶¼_w7踵6ùK”·.Õ»·$‹¸cƒU¸c€-¸˜i¸c€-¸~A¸cƒU¸cƒU¸ùK”·c€-¸}ÓY·ùK”·lŸ¸lŸ¸cƒU¸#¢}¸<}ã·lŸ¸(ì’¸cƒU¸—ýœ¸o'±¸—ýœ¸6³ã¸µ ¹s¹D÷÷¸P4 ¹P4 ¹™H¹x·)¹eÏ.¹P‰¹a>¹Ýç3¹èNH¹eÏ.¹x·)¹eÏ.¹Þ9¹èNH¹‹]¹x·)¹ $¹x·)¹eÏ.¹Þ9¹s¹‹]¹6³ã¸P4 ¹µ ¹eÏ.¹P‰¹P‰¹P4 ¹rÔí¸6³ã¸ºYŸD÷÷¸µ ¹Î ¹µ ¹Î ¹rÔí¸P4 ¹6³ã¸µ ¹Åuϸo'±¸o'±¸e§¸6³ã¸o'±¸”?»¸”?»¸o'±¸˜i¸(ì’¸lŸ¸c€-¸~A¸$‹¸cƒU¸cƒU¸c€-¸c€-¸$‹¸~A¸˜i¸e§¸e§¸”?»¸ºYŸ—ýœ¸—ýœ¸—ýœ¸”?»¸˜i¸—ýœ¸˜i¸e§¸˜i¸#¢}¸—ýœ¸o'±¸(ì’¸ºYŸºYŸ—ýœ¸(ì’¸ºYŸΠ¹D÷÷¸™H¹™H¹ÅuϸrÔí¸D÷÷¸Î ¹D÷÷¸D÷÷¸D÷÷¸rÔí¸D÷÷¸™H¹rÔí¸µ ¹Î ¹D÷÷¸Î ¹6³ã¸P4 ¹x·)¹a>¹eÏ.¹Þ9¹äiM¹èNH¹äiM¹X…R¹Þ9¹X…R¹š½\¹Ýç3¹š½\¹ $¹Î ¹6³ã¸µ ¹—ýœ¸(ì’¸—ýœ¸(ì’¸—ýœ¸B݈¸—ýœ¸(ì’¸#¢}¸$‹¸<}ã·<}ã·Py ·òË_5}ÓY·ùK”·.Õ»·Py ·~A¸<}ã·ùK”·Py ·}ÓY·lŸ¸}ÓY·"w¶lŸ¸è¸µ6²iò7ö!£7¼_w7ê58²iò7ˆ +]86¤Œ8²iò7ê58ü–‚8ˆ +]8ê58.q8I8b !8ü–‚8I8Ûª8mÆ 8ü–‚8ˆ +]8ê586¤Œ8ˆ +]86¤Œ8¼_w7ñ 8"w¶"w¶<}ã·"w¶ö!£7Py ·Py ·.Õ»·<}ã·}ÓY·$‹¸ùK”·lŸ¸cƒU¸cƒU¸Py ·"w¶ùK”·.Õ»·<}ã·c€-¸"w¶Py ·Py ·"w¶}ÓY·"w¶Py ·}ÓY·òË_5ö!£7²iò7Ù(7ö!£7²iò7´–8´–8b !8ñ 8.q8mÆ 8rBÓ8´–8£ñ8+ç8× +¿8hÆû8µ%É8× +¿8° 9§õ9§õ9Ó9:19+ç8§õ9£r!99ë:9¥‰&99¡+9¥‰&9iF9[¹099¡+9Ò59"E9"E9›pT9üTO9¯ŒY9›pT9î@9"E9¯ŒY9Ò9J9Ò59"E9Ò9J9"E9[¹09î@99ë:9Ò9J9î@99ë:98\99¡+9£r!99ë:9£r!9hÆû8Ó9hÆû8§õ9õ`Ý8° 9£ñ8iF9+ç8´–8µ%É8+ç86¤Œ8rBÓ8µ%É8§õ9× +¿8hÆû8£ñ8mÆ 8íñ´8µ%É8£ñ8rBÓ8´–8íñ´8´–8´–8µ%É8µ%É8µ%É8õ`Ý8£ñ8£ñ8µ%É8Ó9hÆû8§õ9rBÓ8£ñ8° 9iF9+ç8+ç8hÆû8£ñ8iF99¡+9hÆû8§õ9[¹09Ó9§õ9° 9hÆû8§õ9£ñ8õ`Ý8§õ9Ó9¥‰&98\9:198\9:19Ò59iF9° 9° 9iF9§õ9£r!9iF9:19¥‰&9iF9Ó9° 98\9° 9hÆû8iF98\9Ó9iF9:19Ó9£r!9° 9:19£r!9iF9Ó9rBÓ8° 9õ`Ý8Ûª8+ç8£ñ8µ%É8µ%É8mÆ 8mÆ 8²iò7I8mÆ 8ê58Ù(7ñ 8踵6ùK”·Py ·òË_5}ÓY·Py ·}ÓY·Py ·lŸ¸òË_5#¢}¸<}ã·Py ·Py ·¼_w7踵6òË_5.Õ»·"w¶²iò7…·Ê7òË_5b !8ö!£7Ù(7b !8ñ 8ê58I8b !8I8ˆ +]86¤Œ86¤Œ86¤Œ8µ%É8rBÓ8£ñ8mÆ 8hÆû8µ%É8§õ9§õ9§õ9£ñ8:19Ó9Ó9Ó9Ó9£r!9Ó9£ñ8hÆû8õ`Ý8Ó9£ñ8Ó9× +¿8Ó9§õ9õ`Ý8:198\9° 9rBÓ8rBÓ8hÆû8£ñ8× +¿8+ç86¤Œ8b !8ü–‚8Ûª8ü–‚8rBÓ8´–8I8mÆ 8I8I8b !8…·Ê7¼_w7Py ·.Õ»·}ÓY·}ÓY·<}ã·<}ã·òË_5$‹¸~A¸<}ã·Py ·~A¸lŸ¸~A¸$‹¸<}ã·c€-¸<}ã·"w¶"w¶Py ·.Õ»·.Õ»·<}ã·c€-¸<}ã·˜i¸$‹¸ùK”·.Õ»·<}ã·lŸ¸.Õ»·$‹¸~A¸.Õ»·ùK”·.Õ»·ùK”·"w¶<}ã·cƒU¸$‹¸$‹¸c€-¸ùK”·}ÓY·è¸µ6lŸ¸<}ã·Py ·òË_5}ÓY·òË_5踵6.Õ»·"w¶¼_w7}ÓY·òË_5²iò7òË_5…·Ê7²iò7²iò7…·Ê7Ù(7²iò7²iò7Ù(7ñ 8ö!£7"w¶Ù(7²iò7¼_w7…·Ê7òË_5踵6踵6踵6òË_5¼_w7踵6¼_w7踵6òË_5òË_5$‹¸cƒU¸c€-¸(ì’¸”?»¸#¢}¸e§¸o'±¸(ì’¸˜i¸o'±¸o'±¸Ÿ“Ù¸Åuϸ”?»¸Ÿ“Ù¸”?»¸e§¸o'±¸(ì’¸ºYŸ—ýœ¸(ì’¸—ýœ¸—ýœ¸Åuϸ—ýœ¸o'±¸(ì’¸”?»¸o'±¸Ÿ“Ù¸”?»¸™H¹Î ¹6³ã¸Ÿ“Ù¸™H¹rÔí¸rÔí¸rÔí¸µ ¹Î ¹™H¹™H¹6³ã¸rÔí¸µ ¹e§¸Ÿ“Ù¸D÷÷¸D÷÷¸e§¸ÅuϸºYŸo'±¸”?»¸”?»¸—ýœ¸”?»¸e§¸˜i¸#¢}¸$‹¸$‹¸lŸ¸cƒU¸lŸ¸.Õ»·}ÓY·Py ·…·Ê7òË_5I8²iò7踵6¼_w7Ù(7òË_5òË_5Ù(7}ÓY·<}ã·c€-¸~A¸.Õ»·ùK”·<}ã·Py ·}ÓY·lŸ¸lŸ¸$‹¸(ì’¸(ì’¸˜i¸—ýœ¸ºYŸ”?»¸(ì’¸˜i¸”?»¸—ýœ¸6³ã¸Ÿ“Ù¸”?»¸‹]¹s¹ºYŸo'±¸™H¹P‰¹P‰¹µ ¹µ ¹‹]¹Ýç3¹eÏ.¹D÷÷¸ $¹D÷÷¸P4 ¹‹]¹‹]¹™H¹‹]¹‹]¹x·)¹Ýç3¹µ ¹s¹µ ¹rÔí¸µ ¹Ÿ“Ù¸6³ã¸™H¹rÔí¸Î ¹Î ¹ºYŸŸ“Ù¸”?»¸rÔí¸—ýœ¸(ì’¸˜i¸cƒU¸.Õ»·˜i¸cƒU¸~A¸—ýœ¸cƒU¸lŸ¸Py ·}ÓY·.Õ»·…·Ê7òË_5²iò7I8²iò7²iò7…·Ê7踵6¼_w7踵6"w¶Ù(7"w¶òË_5¼_w7.Õ»·}ÓY·<}ã·~A¸<}ã·c€-¸#¢}¸˜i¸c€-¸.Õ»·$‹¸~A¸c€-¸<}ã·<}ã·~A¸$‹¸~A¸˜i¸(ì’¸o'±¸—ýœ¸o'±¸#¢}¸ºYŸΠ¹D÷÷¸rÔí¸D÷÷¸‹]¹Ÿ“Ù¸P4 ¹™H¹‹]¹µ ¹x·)¹Þ9¹eÏ.¹Þ9¹Þ9¹Þ9¹P‰¹x·)¹Þ9¹a>¹äiM¹èNH¹P‰¹Ýç3¹eÏ.¹ $¹P‰¹x·)¹x·)¹Þ9¹‹]¹P4 ¹rÔí¸Î ¹6³ã¸rÔí¸ÅuϸºYŸ6³ã¸6³ã¸—ýœ¸rÔí¸”?»¸o'±¸”?»¸e§¸e§¸—ýœ¸—ýœ¸<}ã·lŸ¸~A¸$‹¸Ù(7}ÓY·è¸µ6ùK”·òË_5}ÓY·"w¶è¸µ6ùK”·.Õ»·Py ·$‹¸$‹¸ùK”·ùK”·"w¶¼_w7Ù(7}ÓY·$‹¸<}ã·ùK”·$‹¸.Õ»·—ýœ¸~A¸~A¸(ì’¸cƒU¸(ì’¸e§¸o'±¸—ýœ¸o'±¸o'±¸”?»¸B݈¸o'±¸o'±¸B݈¸”?»¸Åuϸ—ýœ¸(ì’¸”?»¸e§¸o'±¸e§¸”?»¸(ì’¸(ì’¸o'±¸6³ã¸Åuϸ—ýœ¸ºYŸe§¸”?»¸D÷÷¸o'±¸”?»¸Î ¹6³ã¸o'±¸ÅuϸÅuϸe§¸—ýœ¸cƒU¸˜i¸$‹¸~A¸c€-¸$‹¸#¢}¸(ì’¸˜i¸~A¸~A¸c€-¸#¢}¸(ì’¸cƒU¸$‹¸cƒU¸˜i¸lŸ¸˜i¸B݈¸$‹¸lŸ¸ùK”·$‹¸ùK”·"w¶"w¶Py ·è¸µ6}ÓY·òË_5…·Ê7ñ 8¼_w7b !8ö!£7ö!£7²iò7Ù(7I8ü–‚8Ù(7¼_w7Ù(7踵6¼_w7¼_w7Ù(7.Õ»·¼_w7ˆ +]8<}ã·Ù(7Ù(7"w¶Ù(7ùK”·"w¶lŸ¸<}ã·cƒU¸~A¸lŸ¸c€-¸˜i¸#¢}¸(ì’¸o'±¸(ì’¸(ì’¸ºYŸ—ýœ¸”?»¸(ì’¸˜i¸(ì’¸cƒU¸$‹¸#¢}¸lŸ¸lŸ¸B݈¸˜i¸~A¸#¢}¸cƒU¸c€-¸c€-¸lŸ¸c€-¸.Õ»·c€-¸˜i¸~A¸B݈¸(ì’¸cƒU¸$‹¸cƒU¸cƒU¸c€-¸c€-¸#¢}¸lŸ¸<}ã·.Õ»·<}ã·ùK”·òË_5}ÓY·è¸µ6Ù(7Ù(7…·Ê7¼_w7ö!£7²iò7Py ·ö!£7²iò7ˆ +]8ñ 8b !8ü–‚8Ûª8ê58ü–‚8× +¿86¤Œ8´–8mÆ 8…·Ê7ü–‚86¤Œ8b !8ñ 8´–8²iò7ê58ñ 8Ù(7ö!£7"w¶ùK”·}ÓY·ùK”·~A¸.Õ»·cƒU¸#¢}¸~A¸”?»¸cƒU¸o'±¸—ýœ¸<}ã·c€-¸c€-¸$‹¸e§¸˜i¸(ì’¸o'±¸e§¸ºYŸe§¸Ÿ“Ù¸Åuϸ”?»¸”?»¸rÔí¸Åuϸµ ¹”?»¸D÷÷¸™H¹D÷÷¸o'±¸”?»¸”?»¸rÔí¸#¢}¸(ì’¸˜i¸cƒU¸lŸ¸"w¶"w¶"w¶òË_5"w¶Py ·òË_5òË_5Ù(7òË_5¼_w7Py ·òË_5ñ 8Ù(7踵6²iò7ñ 8ñ 8b !8ö!£7ö!£7I8.q86¤Œ8´–8ü–‚8ê58.q8.q8´–8µ%É8ü–‚8µ%É8mÆ 8£ñ8íñ´8× +¿8+ç8£ñ8× +¿8õ`Ý8mÆ 8µ%É86¤Œ8íñ´8mÆ 8mÆ 8ü–‚8´–8íñ´8´–8µ%É8.q8ü–‚8mÆ 8mÆ 8´–8´–8ü–‚8ˆ +]8I8I8b !8I8²iò7}ÓY·è¸µ6Ù(7"w¶òË_5ùK”·<}ã·ùK”·lŸ¸Py ·.Õ»·"w¶<}ã·}ÓY·òË_5~A¸<}ã·$‹¸}ÓY·ùK”·Py ·.Õ»·$‹¸<}ã·ùK”·Py ·Py ·<}ã·"w¶Ù(7Ù(7ö!£7ñ 8ö!£7I8b !8I8ˆ +]8I8.q8ü–‚8Ûª8I8.q8…·Ê7ˆ +]8ˆ +]8Ûª8´–8rBÓ8Ûª8µ%É8£ñ8× +¿8hÆû8mÆ 8õ`Ý8§õ9õ`Ý8íñ´8Ûª8´–8´–8µ%É8ˆ +]8× +¿8ü–‚8Ûª8íñ´86¤Œ86¤Œ8ü–‚8.q8íñ´8íñ´8õ`Ý8ü–‚8.q8mÆ 8Ûª8mÆ 8ü–‚8I8²iò7b !8ˆ +]8ê58ˆ +]8…·Ê7²iò7òË_5<}ã·}ÓY·lŸ¸<}ã·.Õ»·cƒU¸#¢}¸#¢}¸cƒU¸˜i¸”?»¸o'±¸ÅuϸÅuϸ”?»¸#¢}¸ºYŸºYŸ(ì’¸—ýœ¸o'±¸B݈¸o'±¸˜i¸(ì’¸˜i¸~A¸$‹¸lŸ¸.Õ»·"w¶ùK”·"w¶<}ã·¼_w7踵6Ù(7b !8ê58ê58ê58²iò7.q8´–8ñ 8.q8.q8.q8b !8´–8´–8´–8ü–‚8.q8ê58.q8I8b !8²iò7²iò7´–8.q8ˆ +]86¤Œ86¤Œ8íñ´8× +¿8´–8µ%É8µ%É8íñ´8£ñ8mÆ 86¤Œ8íñ´8µ%É8ˆ +]8ˆ +]8.q8.q8I8.q8ü–‚8mÆ 8ê586¤Œ8.q8ü–‚8I8ˆ +]8b !8踵6Py ·<}ã·<}ã·.Õ»·"w¶è¸µ6}ÓY·.Õ»·ùK”·lŸ¸<}ã·"w¶lŸ¸"w¶lŸ¸~A¸.Õ»·c€-¸#¢}¸~A¸$‹¸cƒU¸cƒU¸rÔí¸(ì’¸—ýœ¸˜i¸#¢}¸˜i¸<}ã·cƒU¸ºYŸ(ì’¸o'±¸o'±¸˜i¸~A¸$‹¸#¢}¸lŸ¸c€-¸c€-¸<}ã·lŸ¸c€-¸Py ·ö!£7踵6…·Ê7b !8Ûª8Ûª8µ%É8µ%É8+ç8£ñ8rBÓ86¤Œ8mÆ 8Ûª8õ`Ý8Ó9° 9:198\99¡+9iF9iF99¡+9£r!9Ò59£r!9õ`Ý8iF9õ`Ý8µ%É8× +¿8µ%É8£ñ86¤Œ8Ûª8mÆ 8b !8íñ´8mÆ 8ˆ +]8I8ê58ñ 8¼_w7¼_w7òË_5…·Ê7"w¶"w¶.Õ»·Py ·"w¶<}ã·Py ·~A¸c€-¸”?»¸(ì’¸˜i¸c€-¸e§¸˜i¸cƒU¸(ì’¸˜i¸˜i¸˜i¸B݈¸”?»¸o'±¸o'±¸o'±¸B݈¸ºYŸrÔí¸Ÿ“Ù¸ºYŸŸ“Ù¸ºYŸ˜i¸(ì’¸ÅuϸŸ“Ù¸”?»¸(ì’¸˜i¸c€-¸cƒU¸$‹¸lŸ¸lŸ¸òË_5}ÓY·è¸µ6}ÓY·"w¶ö!£7"w¶…·Ê7I8ö!£76¤Œ8I8£ñ8° 9õ`Ý8+ç8£ñ8+ç8§õ9+ç8§õ9£ñ8° 9hÆû8§õ9§õ9§õ9hÆû8µ%É8Ûª8íñ´8mÆ 8íñ´8£ñ8íñ´8´–8rBÓ8£ñ8§õ9mÆ 8ü–‚8ˆ +]8× +¿8Ûª8I8I8b !8I8I8b !8²iò7òË_5ö!£7…·Ê7踵6Ù(7ñ 8ö!£7踵6Py ·"w¶c€-¸}ÓY·.Õ»·<}ã·ùK”·Py ·Py ·.Õ»·.Õ»·ö!£7ö!£7¼_w7Ù(7òË_5踵6¼_w7ùK”·ùK”·è¸µ6ö!£7"w¶ùK”·è¸µ6¼_w7Ù(7…·Ê7I8ö!£7òË_5b !8ñ 8²iò7²iò7²iò7²iò7ü–‚8mÆ 8µ%É8rBÓ8õ`Ý8× +¿8+ç8rBÓ8° 9£ñ8rBÓ8:19§õ9µ%É8£ñ8Ó9hÆû8+ç8£ñ8+ç8õ`Ý8õ`Ý8µ%É8° 9° 9° 9£r!9° 9:19iF9£ñ8hÆû8rBÓ8õ`Ý8£ñ8µ%É8Ó9+ç8õ`Ý8Ûª86¤Œ8.q86¤Œ8.q8mÆ 8I8ü–‚86¤Œ8ˆ +]8.q8ö!£7b !8ö!£7Py ·è¸µ6"w¶òË_5òË_5Py ·òË_5$‹¸.Õ»·Py ·lŸ¸$‹¸}ÓY·}ÓY·$‹¸<}ã·lŸ¸$‹¸Py ·.Õ»·ùK”·lŸ¸~A¸<}ã·Py ·ùK”·òË_5}ÓY·}ÓY·ö!£7Py ·"w¶…·Ê7b !8ñ 8I8²iò7b !8ˆ +]8ˆ +]8ˆ +]8ˆ +]86¤Œ8mÆ 8´–8ü–‚8µ%É8íñ´8hÆû8° 98\9Ò599¡+99ë:99ë:9[¹09Ò9J98\9î@9¥‰&98\9iF9£r!9Ò59:19° 98\9§õ98\9¥‰&99¡+9£r!9° 9£r!9iF9:198\9iF9hÆû8£ñ8Ó9+ç8´–8Ûª8.q8ö!£7ü–‚8ñ 8I8²iò7…·Ê7踵6òË_5踵6¼_w7òË_5.Õ»·ùK”·"w¶Py ·òË_5}ÓY·<}ã·$‹¸$‹¸<}ã·ùK”·#¢}¸e§¸c€-¸#¢}¸(ì’¸~A¸$‹¸cƒU¸—ýœ¸B݈¸˜i¸cƒU¸(ì’¸—ýœ¸ºYŸ~A¸(ì’¸lŸ¸<}ã·$‹¸c€-¸$‹¸òË_5òË_5òË_5b !8I8´–8ü–‚8mÆ 8õ`Ý8mÆ 86¤Œ8´–8I8ü–‚8mÆ 8ü–‚8I8´–8íñ´8× +¿8£ñ8hÆû8Ó9° 9+ç8õ`Ý8× +¿8× +¿8mÆ 8µ%É8£ñ8+ç8´–8mÆ 8µ%É8íñ´8Ûª8´–8ü–‚8ˆ +]8Ûª8µ%É86¤Œ8ü–‚8Ûª8´–8.q8ê58mÆ 8Ûª8mÆ 8ü–‚8b !8Ûª8íñ´8.q8…·Ê7…·Ê7ü–‚8´–86¤Œ8.q8íñ´86¤Œ8.q8mÆ 8ü–‚8²iò7ê58I8ö!£7Py ·Ù(7òË_5}ÓY·ùK”·Py ·.Õ»·c€-¸c€-¸"w¶<}ã·}ÓY·è¸µ6¼_w7Ù(7òË_5}ÓY·"w¶¼_w7踵6ñ 8ñ 8b !8.q8²iò7íñ´86¤Œ8ê58ˆ +]8I8Ûª8Ûª8Ûª8Ûª8rBÓ8§õ9§õ9§õ9hÆû8§õ9+ç8£ñ8õ`Ý8§õ9+ç8+ç86¤Œ8rBÓ8+ç8£ñ8õ`Ý8:19µ%É8rBÓ8hÆû8hÆû8£ñ8rBÓ8õ`Ý8£ñ8£ñ8§õ9£ñ8íñ´8õ`Ý8µ%É86¤Œ8µ%É8íñ´8ˆ +]8.q8µ%É8mÆ 86¤Œ8ê58ñ 8.q8.q86¤Œ8I8ö!£7²iò7òË_5ùK”·<}ã·<}ã·ùK”·$‹¸Py ·ùK”·lŸ¸cƒU¸$‹¸lŸ¸o'±¸lŸ¸~A¸c€-¸(ì’¸Ÿ“Ù¸(ì’¸(ì’¸—ýœ¸o'±¸o'±¸Åuϸ6³ã¸ºYŸ(ì’¸o'±¸”?»¸~A¸(ì’¸ùK”·c€-¸~A¸lŸ¸$‹¸(ì’¸#¢}¸c€-¸ùK”·c€-¸$‹¸ùK”·Py ·òË_5ùK”·"w¶}ÓY·ö!£7ö!£7ˆ +]86¤Œ8ê58ê58ˆ +]8I8I8…·Ê7b !8ñ 8I8I8ü–‚8´–8mÆ 8ü–‚8mÆ 8íñ´86¤Œ86¤Œ8ü–‚86¤Œ8b !8I8ˆ +]8ˆ +]8I8²iò7b !8²iò7踵6I8…·Ê7Ù(7ñ 8I8²iò7ö!£7òË_5Ù(7Ù(7}ÓY·ö!£7Ù(7<}ã·òË_5"w¶è¸µ6Ù(7òË_5Ù(7¼_w7ö!£7.Õ»·}ÓY·ùK”·$‹¸c€-¸$‹¸ùK”·$‹¸cƒU¸lŸ¸$‹¸lŸ¸<}ã·òË_5"w¶Py ·òË_5"w¶òË_5踵6ö!£7Py ·òË_5踵6òË_5¼_w7Ù(7¼_w7¼_w7}ÓY·ö!£7ö!£7òË_5"w¶Py ·.Õ»·Py ·ùK”·.Õ»·"w¶}ÓY·}ÓY·²iò7òË_5Py ·b !8踵6¼_w7ê58ê58ö!£7ü–‚8b !8¼_w7b !8ü–‚8…·Ê7²iò7b !8¼_w7Ù(7Ù(7…·Ê7²iò7òË_5¼_w7ö!£7"w¶ùK”·.Õ»·Py ·lŸ¸c€-¸.Õ»·c€-¸.Õ»·$‹¸ºYŸ”?»¸e§¸#¢}¸ÅuϸΠ¹™H¹s¹‹]¹x·)¹s¹s¹P4 ¹‹]¹‹]¹Ýç3¹eÏ.¹eÏ.¹µ ¹™H¹x·)¹ $¹‹]¹P4 ¹rÔí¸µ ¹rÔí¸µ ¹Î ¹P4 ¹P4 ¹‹]¹P‰¹ $¹Î ¹µ ¹s¹‹]¹s¹µ ¹µ ¹Î ¹™H¹µ ¹P4 ¹ $¹Åuϸµ ¹6³ã¸—ýœ¸ÅuϸºYŸo'±¸B݈¸#¢}¸(ì’¸˜i¸~A¸.Õ»·Py ·lŸ¸òË_5<}ã·.Õ»·}ÓY·è¸µ6¼_w7…·Ê7òË_5}ÓY·ê58ö!£7ö!£7I8²iò7ü–‚8ê58ˆ +]8ê58Ù(7ö!£7"w¶Py ·òË_5ùK”·}ÓY·lŸ¸<}ã·$‹¸lŸ¸<}ã·$‹¸~A¸˜i¸c€-¸cƒU¸lŸ¸Py ·}ÓY·Py ·c€-¸lŸ¸cƒU¸#¢}¸cƒU¸˜i¸~A¸˜i¸—ýœ¸(ì’¸e§¸(ì’¸ºYŸ(ì’¸cƒU¸(ì’¸e§¸#¢}¸$‹¸cƒU¸e§¸cƒU¸c€-¸c€-¸c€-¸}ÓY·"w¶Ù(7"w¶"w¶òË_5Py ·òË_5Py ·}ÓY·}ÓY·<}ã·ùK”·.Õ»·Py ·Ù(7.Õ»·Ù(7"w¶Py ·è¸µ6"w¶ö!£7Ù(7Py ·…·Ê7踵6Ù(7²iò7ö!£7Ù(7…·Ê7²iò7踵6¼_w7ö!£7I8ñ 8ê58…·Ê7ö!£7…·Ê7ˆ +]8ˆ +]8ö!£7ö!£7…·Ê7I8Ù(7b !8…·Ê7òË_5Py ·ùK”·Py ·<}ã·lŸ¸<}ã·<}ã·#¢}¸(ì’¸lŸ¸c€-¸<}ã·lŸ¸#¢}¸(ì’¸(ì’¸rÔí¸ºYŸŸ“Ù¸e§¸ºYŸŸ“Ù¸Ÿ“Ù¸e§¸D÷÷¸”?»¸Ÿ“Ù¸e§¸—ýœ¸e§¸6³ã¸Ÿ“Ù¸e§¸(ì’¸ºYŸrÔí¸rÔí¸P4 ¹Ÿ“Ù¸D÷÷¸P4 ¹ºYŸŸ“Ù¸D÷÷¸”?»¸Ÿ“Ù¸Åuϸo'±¸#¢}¸#¢}¸˜i¸#¢}¸<}ã·Py ·Py ·}ÓY·ùK”·lŸ¸¼_w7òË_5踵6踵6¼_w7ö!£7²iò7…·Ê7mÆ 8ˆ +]8ñ 8ñ 8…·Ê7ˆ +]8´–8´–8.q8.q8ˆ +]8ü–‚8ü–‚8× +¿8íñ´8ˆ +]8´–8ü–‚8íñ´8´–8× +¿8´–8´–86¤Œ8.q8ñ 8ö!£7ö!£7b !8ê58ñ 8ö!£7ö!£7…·Ê7Ù(7踵6Py ·"w¶ùK”·.Õ»·}ÓY·Py ·$‹¸~A¸~A¸$‹¸c€-¸˜i¸B݈¸e§¸~A¸rÔí¸ºYŸŸ“Ù¸ÅuϸrÔí¸P4 ¹ºYŸ™H¹™H¹s¹s¹‹]¹rÔí¸s¹™H¹‹]¹µ ¹s¹Ýç3¹P4 ¹rÔí¸Ÿ“Ù¸6³ã¸6³ã¸o'±¸ºYŸÅuϸ˜i¸B݈¸#¢}¸cƒU¸<}ã·(ì’¸˜i¸$‹¸˜i¸(ì’¸~A¸~A¸<}ã·ùK”·lŸ¸cƒU¸<}ã·lŸ¸ùK”·ùK”·òË_5.Õ»·c€-¸lŸ¸ùK”·cƒU¸<}ã·}ÓY·<}ã·<}ã·.Õ»·c€-¸$‹¸<}ã·lŸ¸<}ã·"w¶$‹¸ùK”·Py ·Ù(7<}ã·lŸ¸ùK”·.Õ»·"w¶<}ã·"w¶.Õ»·lŸ¸˜i¸(ì’¸˜i¸”?»¸—ýœ¸o'±¸#¢}¸”?»¸˜i¸e§¸#¢}¸(ì’¸ºYŸo'±¸rÔí¸6³ã¸(ì’¸D÷÷¸µ ¹D÷÷¸Î ¹Åuϸ6³ã¸s¹‹]¹™H¹™H¹6³ã¸µ ¹P4 ¹‹]¹‹]¹Î ¹µ ¹D÷÷¸P4 ¹Î ¹ÅuϸºYŸrÔí¸D÷÷¸Î ¹Åuϸo'±¸(ì’¸c€-¸lŸ¸lŸ¸c€-¸cƒU¸.Õ»·c€-¸"w¶"w¶lŸ¸$‹¸<}ã·lŸ¸"w¶ùK”·<}ã·<}ã·ùK”·ùK”·òË_5踵6}ÓY·…·Ê7ö!£7"w¶¼_w7Ù(7òË_5踵6踵6òË_5.Õ»·…·Ê7"w¶ö!£7ê58b !8b !8ˆ +]8b !86¤Œ8ü–‚8Ûª8× +¿8íñ´8rBÓ8+ç8µ%É8íñ´8µ%É8µ%É8× +¿8õ`Ý8µ%É8ü–‚8²iò7b !8ê58…·Ê7…·Ê7ˆ +]8…·Ê7ê58ñ 8踵6²iò7…·Ê7踵6$‹¸.Õ»·Ù(7òË_5Py ·~A¸lŸ¸c€-¸<}ã·.Õ»·.Õ»·c€-¸ùK”·Py ·.Õ»·lŸ¸$‹¸~A¸$‹¸.Õ»·c€-¸B݈¸$‹¸$‹¸$‹¸cƒU¸<}ã·~A¸—ýœ¸lŸ¸c€-¸$‹¸~A¸c€-¸ùK”·¼_w7Py ·…·Ê7.q8b !8b !8ˆ +]8ê58²iò7I8.q86¤Œ8ü–‚8íñ´8Ûª8´–8íñ´8I8´–8.q8.q8ˆ +]8.q8´–8ˆ +]8²iò7I8ê58ñ 8.q86¤Œ8.q8Ûª8ü–‚86¤Œ8ñ 8I8I8ö!£7Ù(7ö!£7…·Ê7踵6²iò7…·Ê7Py ·Ù(7…·Ê7ùK”·}ÓY·lŸ¸.Õ»·lŸ¸<}ã·}ÓY·Ù(7"w¶¼_w7òË_5òË_5ùK”·ö!£7Ù(7Py ·Ù(7¼_w7òË_5<}ã·}ÓY·…·Ê7¼_w7"w¶ùK”·ö!£7¼_w7ü–‚8¼_w7ñ 8I8²iò7I8b !8.q8I8.q8õ`Ý8mÆ 86¤Œ8hÆû86¤Œ8× +¿8µ%É8´–8´–8íñ´86¤Œ8Ûª8Ûª8× +¿8rBÓ8µ%É8õ`Ý8µ%É8ü–‚8mÆ 8´–8íñ´86¤Œ8× +¿8íñ´8Ûª8íñ´8´–8× +¿8rBÓ8I8ü–‚86¤Œ8Ûª8+ç8+ç8£ñ8× +¿8hÆû8Ûª8íñ´8µ%É86¤Œ8íñ´8× +¿8Ûª8× +¿8´–8õ`Ý8´–8mÆ 8ê58ö!£7ñ 8Py ·òË_5¼_w7}ÓY·òË_5Py ·Py ·}ÓY·c€-¸.Õ»·}ÓY·.Õ»·$‹¸lŸ¸lŸ¸cƒU¸˜i¸.Õ»·}ÓY·c€-¸c€-¸<}ã·˜i¸˜i¸—ýœ¸~A¸.Õ»·cƒU¸<}ã·ùK”·ùK”·<}ã·<}ã·<}ã·Py ·<}ã·Py ·Py ·<}ã·ö!£7²iò7踵6òË_5…·Ê7…·Ê7I8²iò7ñ 8ñ 8b !8踵6ùK”·¼_w7Ù(7踵6¼_w7Py ·òË_5…·Ê7b !8ˆ +]8mÆ 8´–86¤Œ86¤Œ8× +¿8hÆû8õ`Ý8+ç8+ç8mÆ 8íñ´8Ûª8hÆû8× +¿8I8ˆ +]8ˆ +]8b !8ê586¤Œ8I8I8ê58…·Ê7b !8踵6"w¶¼_w7lŸ¸.Õ»·<}ã·c€-¸c€-¸B݈¸B݈¸(ì’¸#¢}¸”?»¸”?»¸(ì’¸(ì’¸—ýœ¸˜i¸o'±¸o'±¸Ÿ“Ù¸ºYŸ”?»¸6³ã¸”?»¸o'±¸Ÿ“Ù¸ÅuϸºYŸe§¸e§¸o'±¸”?»¸—ýœ¸B݈¸(ì’¸Åuϸ—ýœ¸”?»¸o'±¸(ì’¸”?»¸—ýœ¸—ýœ¸(ì’¸}ÓY·}ÓY·$‹¸<}ã·~A¸#¢}¸lŸ¸}ÓY·"w¶è¸µ6Ù(7b !8…·Ê7ö!£7²iò7ñ 8²iò7ˆ +]8ˆ +]8²iò7ö!£7…·Ê7²iò7ö!£7ö!£7ê58.q8´–8I8ê586¤Œ8ü–‚8I8ñ 8…·Ê7"w¶ùK”·òË_5òË_5ö!£7踵6…·Ê7¼_w7b !8…·Ê7¼_w7¼_w7Ù(7}ÓY·c€-¸.Õ»·$‹¸.Õ»·ùK”·.Õ»·<}ã·#¢}¸o'±¸(ì’¸ÅuϸºYŸ6³ã¸o'±¸Ÿ“Ù¸rÔí¸6³ã¸‹]¹P4 ¹‹]¹™H¹ºYŸÅuϸºYŸP4 ¹Î ¹Î ¹D÷÷¸ $¹Î ¹™H¹rÔí¸Î ¹s¹™H¹µ ¹s¹P4 ¹x·)¹s¹‹]¹‹]¹™H¹D÷÷¸ºYŸ6³ã¸”?»¸o'±¸o'±¸(ì’¸o'±¸ºYŸe§¸Åuϸ(ì’¸(ì’¸e§¸lŸ¸}ÓY·lŸ¸<}ã·$‹¸.Õ»·Py ·è¸µ6òË_5Ù(7ùK”·Py ·òË_5ö!£7…·Ê7¼_w7²iò7ñ 8踵6Ù(7²iò7¼_w7b !8.q8²iò7²iò7ö!£7b !8踵6…·Ê7ö!£7I8ñ 8¼_w7¼_w7²iò7b !8òË_5Py ·¼_w7Ù(7ñ 8òË_5Py ·<}ã·$‹¸}ÓY·$‹¸}ÓY·<}ã·$‹¸$‹¸cƒU¸(ì’¸#¢}¸—ýœ¸~A¸˜i¸(ì’¸(ì’¸˜i¸.Õ»·Py ·cƒU¸c€-¸<}ã·$‹¸cƒU¸(ì’¸cƒU¸c€-¸cƒU¸#¢}¸#¢}¸~A¸cƒU¸.Õ»·.Õ»·.Õ»·.Õ»·c€-¸lŸ¸Ù(7Py ·"w¶Py ·Py ·¼_w7¼_w7²iò7¼_w7Ù(7ö!£7¼_w7b !8mÆ 8mÆ 8× +¿8´–8ˆ +]8Ûª8mÆ 8íñ´8mÆ 8mÆ 8× +¿8rBÓ8× +¿8£ñ8£ñ8:19õ`Ý8£r!9õ`Ý8+ç8õ`Ý8Ó9° 9§õ9íñ´8µ%É8´–8Ûª86¤Œ8mÆ 8µ%É86¤Œ8Ûª8íñ´8Ûª8Ûª86¤Œ8ü–‚8´–86¤Œ8´–8Ûª8´–8× +¿8µ%É8´–8mÆ 8.q8I8ñ 8¼_w7Ù(7Py ·Py ·òË_5踵6Py ·è¸µ6<}ã·ùK”·"w¶Py ·.Õ»·.Õ»·<}ã·$‹¸"w¶.Õ»·ùK”·.Õ»·lŸ¸"w¶}ÓY·<}ã·$‹¸$‹¸è¸µ6ùK”·~A¸cƒU¸lŸ¸c€-¸~A¸c€-¸$‹¸c€-¸~A¸~A¸<}ã·ùK”·"w¶lŸ¸ùK”·òË_5Ù(7¼_w7ö!£7踵6.q8ˆ +]8.q8I8mÆ 8.q8ñ 8ˆ +]8I8mÆ 8.q8I8ê58I8Ûª8õ`Ý8+ç8.q86¤Œ8.q8²iò7b !8¼_w7ñ 8踵6Ù(7²iò7òË_5Py ·.Õ»·<}ã·òË_5.Õ»·cƒU¸.Õ»·.Õ»·cƒU¸c€-¸lŸ¸"w¶}ÓY·<}ã·Py ·òË_5ùK”·"w¶"w¶Py ·ö!£7ùK”·òË_5"w¶lŸ¸.Õ»·"w¶cƒU¸lŸ¸(ì’¸˜i¸cƒU¸cƒU¸B݈¸(ì’¸—ýœ¸#¢}¸.Õ»·}ÓY·c€-¸lŸ¸$‹¸$‹¸lŸ¸Py ·lŸ¸òË_5}ÓY·Py ·Ù(7ö!£7"w¶ö!£7ñ 8ö!£7ü–‚8µ%É8rBÓ8Ûª8mÆ 8rBÓ8× +¿8Ó9µ%É8£ñ8£r!9+ç8rBÓ8mÆ 86¤Œ8ü–‚8õ`Ý8§õ9Ûª8ü–‚8mÆ 8µ%É8.q86¤Œ8ˆ +]8mÆ 86¤Œ86¤Œ8× +¿8hÆû8µ%É8+ç86¤Œ8I86¤Œ86¤Œ8´–86¤Œ86¤Œ8× +¿8µ%É86¤Œ86¤Œ8mÆ 8ˆ +]8× +¿8íñ´8ü–‚86¤Œ8.q8²iò7²iò7Ù(7"w¶ùK”·òË_5ùK”·òË_5<}ã·<}ã·lŸ¸ùK”·~A¸lŸ¸Py ·<}ã·~A¸$‹¸c€-¸<}ã·ùK”·òË_5<}ã·Py ·Py ·$‹¸$‹¸(ì’¸~A¸˜i¸(ì’¸˜i¸~A¸#¢}¸lŸ¸˜i¸˜i¸c€-¸$‹¸~A¸~A¸c€-¸~A¸cƒU¸cƒU¸~A¸lŸ¸lŸ¸"w¶Ù(7ö!£7b !8²iò7…·Ê7²iò7òË_5²iò7¼_w7ñ 8I8ñ 8ñ 8b !8…·Ê7²iò7b !8ˆ +]8´–8ˆ +]8ˆ +]8I8ˆ +]8mÆ 8´–8b !8I8.q8ñ 8ñ 8I8Ù(7²iò7…·Ê7ñ 8ùK”·…·Ê7…·Ê7¼_w7b !8b !8ñ 8I8ö!£7¼_w7Py ·Py ·Py ·¼_w7Py ·—ýœ¸e§¸ºYŸ(ì’¸(ì’¸o'±¸rÔí¸6³ã¸ºYŸD÷÷¸rÔí¸e§¸e§¸Ÿ“Ù¸D÷÷¸s¹ºYŸµ ¹D÷÷¸s¹s¹P‰¹Î ¹™H¹s¹Î ¹P4 ¹P4 ¹™H¹µ ¹e§¸ºYŸ”?»¸ºYŸ”?»¸—ýœ¸—ýœ¸B݈¸#¢}¸e§¸o'±¸(ì’¸#¢}¸cƒU¸c€-¸<}ã·$‹¸è¸µ6Py ·Py ·"w¶òË_5…·Ê7¼_w7.q8ñ 8I8.q8ˆ +]8ü–‚8µ%É8íñ´8Ûª8ü–‚8.q8´–8Ûª8´–8ü–‚8ê58ê58ü–‚86¤Œ8²iò7"w¶ö!£7"w¶Ù(7¼_w7踵6Ù(7"w¶òË_5踵6Ù(7ñ 8ñ 8…·Ê7¼_w7b !8²iò7…·Ê7Ù(7ñ 8²iò7ö!£7Ù(7ê58踵6Py ·òË_5Ù(7¼_w7òË_5˜i¸lŸ¸lŸ¸cƒU¸(ì’¸<}ã·Py ·}ÓY·.Õ»·è¸µ6ùK”·$‹¸Ù(7"w¶}ÓY·…·Ê7ö!£7ˆ +]8.q8b !8.q8I8.q8´–8.q8ˆ +]8I8²iò7.q8.q8ü–‚8rBÓ8µ%É8Ûª8ü–‚8Ûª8…·Ê7I86¤Œ86¤Œ8mÆ 8ü–‚8.q8× +¿8íñ´8mÆ 8ˆ +]8I8.q8ˆ +]8ü–‚8.q8´–8ˆ +]8ü–‚8ê586¤Œ8´–8mÆ 8I8íñ´8´–8ê58b !8²iò7²iò7¼_w7踵6Ù(7"w¶b !8…·Ê7…·Ê7踵6}ÓY·}ÓY·lŸ¸~A¸c€-¸cƒU¸˜i¸cƒU¸c€-¸e§¸#¢}¸o'±¸(ì’¸(ì’¸o'±¸—ýœ¸o'±¸#¢}¸—ýœ¸—ýœ¸#¢}¸˜i¸(ì’¸<}ã·~A¸<}ã·~A¸#¢}¸c€-¸~A¸#¢}¸cƒU¸lŸ¸$‹¸$‹¸lŸ¸Py ·}ÓY·<}ã·.Õ»·Ù(7踵6踵6¼_w7…·Ê7…·Ê7ö!£7…·Ê7ê58ñ 8Ù(7ö!£7¼_w7ö!£7踵6b !8…·Ê7b !8.q8b !8ñ 8ˆ +]8´–8ü–‚8ü–‚8mÆ 8× +¿8Ûª86¤Œ8Ûª8ü–‚8ˆ +]8ˆ +]8íñ´8´–8´–8íñ´8íñ´8× +¿8ü–‚8ˆ +]8ü–‚8ê58ˆ +]8ˆ +]8…·Ê7b !8¼_w7b !8ü–‚8ê58.q8I8ˆ +]8²iò7…·Ê7ñ 8…·Ê7Ù(7踵6Ù(7²iò7Ù(7ö!£7…·Ê7ö!£7踵6踵6踵6òË_5"w¶ùK”·cƒU¸lŸ¸ùK”·.Õ»·<}ã·~A¸c€-¸c€-¸˜i¸lŸ¸lŸ¸lŸ¸<}ã·.Õ»·Py ·}ÓY·lŸ¸<}ã·lŸ¸ùK”·$‹¸~A¸$‹¸"w¶Py ·è¸µ6"w¶"w¶Py ·.Õ»·lŸ¸ö!£7¼_w7Ù(7¼_w7Ù(7¼_w7ñ 8b !8Ù(7¼_w7…·Ê7ñ 8ê58ü–‚8ˆ +]8õ`Ý8× +¿8+ç8+ç8£ñ8µ%É8£r!9§õ98\9° 99¡+9£r!9£ñ8£ñ8hÆû8Ó9× +¿8ü–‚8´–8ü–‚8Ûª8mÆ 8mÆ 8ˆ +]8ñ 8.q8ê58…·Ê7²iò7b !8…·Ê7ö!£7Ù(7…·Ê7踵6"w¶}ÓY·.Õ»·.Õ»·.Õ»·(ì’¸˜i¸lŸ¸(ì’¸o'±¸˜i¸cƒU¸o'±¸”?»¸Ÿ“Ù¸”?»¸6³ã¸ÅuϸD÷÷¸P‰¹eÏ.¹s¹6³ã¸ÅuϸºYŸÅuϸo'±¸ºYŸo'±¸Åuϸe§¸cƒU¸—ýœ¸ºYŸºYŸrÔí¸(ì’¸—ýœ¸—ýœ¸~A¸~A¸cƒU¸(ì’¸#¢}¸.Õ»·ùK”·Py ·}ÓY·<}ã·ùK”·}ÓY·ùK”·"w¶…·Ê7ùK”·òË_5踵6òË_5ùK”·òË_5…·Ê7²iò7Ù(7ö!£7ö!£7"w¶.Õ»·lŸ¸ùK”·~A¸cƒU¸$‹¸lŸ¸~A¸lŸ¸c€-¸ùK”·ùK”·}ÓY·lŸ¸.Õ»·$‹¸lŸ¸Py ·<}ã·cƒU¸~A¸Py ·lŸ¸c€-¸Py ·ùK”·ùK”·˜i¸}ÓY·òË_5<}ã·lŸ¸c€-¸˜i¸#¢}¸e§¸e§¸”?»¸—ýœ¸(ì’¸Ÿ“Ù¸ºYŸrÔí¸—ýœ¸Î ¹D÷÷¸P4 ¹D÷÷¸s¹D÷÷¸rÔí¸P4 ¹Î ¹Ÿ“ٸΠ¹rÔí¸6³ã¸o'±¸(ì’¸˜i¸(ì’¸cƒU¸#¢}¸—ýœ¸lŸ¸.Õ»·~A¸è¸µ6踵6Ù(7Ù(7ö!£7踵6ö!£7ö!£7…·Ê7ö!£7ˆ +]8íñ´8ü–‚8Ûª8µ%É8mÆ 8mÆ 8´–8.q8µ%É8µ%É8+ç8£ñ8× +¿8µ%É8× +¿86¤Œ8× +¿8+ç8hÆû8+ç8Ûª8mÆ 8+ç8+ç8µ%É8£ñ8íñ´8ü–‚8× +¿8´–8ˆ +]8´–8Ûª8Ûª8ˆ +]8´–8ü–‚8´–8.q8´–8× +¿8.q8²iò7ê58ê58²iò7¼_w7}ÓY·è¸µ6ö!£7"w¶è¸µ6<}ã·òË_5踵6踵6ñ 8踵6ñ 8²iò7ö!£7²iò7¼_w7…·Ê7ö!£7"w¶ö!£7Py ·}ÓY·.Õ»·}ÓY·"w¶…·Ê7.Õ»·¼_w7ñ 8…·Ê7b !8ˆ +]8.q8mÆ 8ê58ü–‚8ñ 8.q8I8b !8ˆ +]8´–8ê58.q8.q8²iò7ñ 8ê58I8I8…·Ê7ñ 8I8.q8ö!£7I8ñ 8b !8b !8I8ö!£7Ù(7ö!£7ñ 8ñ 8ê58¼_w7Ù(7…·Ê7ê58踵6¼_w7ˆ +]8…·Ê7ê58²iò7Ù(7¼_w7¼_w7²iò7ñ 8ö!£7²iò7Ù(7²iò7ö!£7ö!£7Py ·<}ã·è¸µ6òË_5$‹¸lŸ¸lŸ¸lŸ¸lŸ¸ùK”·˜i¸#¢}¸~A¸cƒU¸~A¸cƒU¸—ýœ¸$‹¸lŸ¸cƒU¸Py ·<}ã·lŸ¸lŸ¸B݈¸cƒU¸<}ã·lŸ¸lŸ¸ùK”·<}ã·}ÓY·.Õ»·lŸ¸~A¸~A¸<}ã·ùK”·~A¸~A¸ùK”·ùK”·.Õ»·"w¶òË_5òË_5Py ·.Õ»·ùK”·}ÓY·}ÓY·Ù(7òË_5Ù(7òË_5}ÓY·ê58…·Ê7…·Ê7ˆ +]8ñ 8…·Ê7ˆ +]8ˆ +]8Ûª8µ%É8ü–‚8´–86¤Œ8ü–‚8íñ´8´–8ñ 8I8ˆ +]8ˆ +]8ü–‚8ˆ +]8ö!£7ñ 8mÆ 8I8¼_w7¼_w7踵6òË_5ê58òË_5ö!£7踵6ùK”·.Õ»·òË_5ùK”·}ÓY·$‹¸cƒU¸.Õ»·.Õ»·.Õ»·Py ·ùK”·<}ã·$‹¸ùK”·$‹¸cƒU¸#¢}¸e§¸—ýœ¸—ýœ¸rÔí¸ºYŸ(ì’¸B݈¸Ÿ“Ù¸e§¸e§¸ºYŸo'±¸e§¸”?»¸—ýœ¸(ì’¸o'±¸6³ã¸ÅuϸÅuϸo'±¸(ì’¸(ì’¸#¢}¸˜i¸c€-¸.Õ»·˜i¸lŸ¸"w¶Py ·"w¶Ù(7òË_5òË_5ùK”·¼_w7Ù(7òË_5…·Ê7¼_w7ö!£7踵6踵6¼_w7"w¶¼_w7ñ 8踵6…·Ê7踵6ê58踵6Py ·}ÓY·Ù(7òË_5"w¶¼_w7}ÓY·"w¶<}ã·<}ã·ùK”·<}ã·}ÓY·òË_5…·Ê7ñ 8…·Ê7…·Ê7<}ã·lŸ¸<}ã·$‹¸—ýœ¸(ì’¸(ì’¸e§¸ÅuϸÅuϸ6³ã¸6³ã¸D÷÷¸Åuϸ”?»¸”?»¸Î ¹”?»¸rÔí¸rÔí¸Åuϸ6³ã¸rÔí¸s¹6³ã¸ÅuϸΠ¹o'±¸Î ¹6³ã¸e§¸Åuϸ—ýœ¸~A¸cƒU¸cƒU¸lŸ¸#¢}¸cƒU¸#¢}¸(ì’¸o'±¸˜i¸c€-¸c€-¸~A¸c€-¸c€-¸$‹¸Py ·ùK”·Py ·}ÓY·Py ·"w¶ö!£7¼_w7I8Ù(7…·Ê7b !8²iò7ü–‚8Ûª8µ%É8× +¿8íñ´8ü–‚8íñ´8£ñ8× +¿8× +¿8+ç8íñ´8íñ´8Ûª8+ç8£ñ8.q8ˆ +]8ñ 8…·Ê7Ù(7ùK”·<}ã·lŸ¸è¸µ6Py ·<}ã·c€-¸(ì’¸c€-¸lŸ¸#¢}¸(ì’¸—ýœ¸B݈¸˜i¸—ýœ¸”?»¸o'±¸o'±¸ºYŸºYŸ6³ã¸Ÿ“Ù¸ºYŸD÷÷¸ºYŸe§¸—ýœ¸e§¸#¢}¸(ì’¸(ì’¸ºYŸrÔí¸Ÿ“Ù¸ºYŸD÷÷¸D÷÷¸6³ã¸D÷÷¸Î ¹6³ã¸D÷÷¸6³ã¸µ ¹Î ¹D÷÷¸Ÿ“ٸΠ¹µ ¹o'±¸”?»¸rÔí¸ºYŸ—ýœ¸˜i¸—ýœ¸c€-¸~A¸o'±¸#¢}¸$‹¸#¢}¸(ì’¸.Õ»·è¸µ6踵6踵6踵6òË_5òË_5¼_w7ö!£7…·Ê7踵6ñ 8²iò7I8ü–‚8ñ 8mÆ 8ˆ +]8ˆ +]8mÆ 8íñ´8µ%É8íñ´8íñ´8.q86¤Œ8íñ´8µ%É8× +¿8mÆ 8µ%É8µ%É8hÆû8rBÓ8§õ9£ñ8mÆ 8Ûª8rBÓ8Ó9£ñ8× +¿8hÆû8Ó9+ç8£ñ8iF9:19hÆû8hÆû8õ`Ý8hÆû8§õ9hÆû8õ`Ý8µ%É8× +¿8.q8.q8I8b !8´–8ê58I8Ù(7¼_w7¼_w7b !8²iò7ñ 8ñ 8…·Ê7²iò7ñ 8òË_5òË_5踵6òË_5Py ·¼_w7Py ·òË_5¼_w7Py ·¼_w7踵6²iò7Ù(7ñ 8ñ 8ê58…·Ê7.q8I8…·Ê7ñ 8…·Ê7× +¿8´–8Ûª8íñ´8õ`Ý8rBÓ8rBÓ8Ó9hÆû8Ó9£ñ8hÆû8hÆû8£ñ8§õ9hÆû8+ç8õ`Ý8£ñ8íñ´8Ûª86¤Œ8õ`Ý8Ûª8× +¿8´–8ˆ +]8ˆ +]8I8ˆ +]8ˆ +]8I86¤Œ8mÆ 8mÆ 8.q8b !8ü–‚8´–8ñ 8²iò7踵6Py ·è¸µ6Py ·lŸ¸lŸ¸lŸ¸ùK”·Py ·ùK”·cƒU¸<}ã·~A¸cƒU¸cƒU¸c€-¸(ì’¸#¢}¸˜i¸˜i¸o'±¸o'±¸Åuϸo'±¸6³ã¸Î ¹D÷÷¸Ÿ“Ù¸µ ¹eÏ.¹™H¹‹]¹6³ã¸rÔí¸D÷÷¸Î ¹rÔí¸6³ã¸6³ã¸e§¸#¢}¸˜i¸”?»¸(ì’¸ºYŸ~A¸~A¸$‹¸lŸ¸lŸ¸|Pd|1|24600|2013-282T15:32:43.397 ÏR8P&Í7ÏR8ÖB"8ÖB"8tTr8tTr8=J8ùÿÝ89Bò8¶eü8YE9ùÿÝ8I è8{µ8ÄÉ8¶d¡8=J8Ì4ƒ8ZáÓ8ùÿÝ8{µ8{µ8Ì4ƒ8ÏR8¶d¡82B8ÏR8ÏR8P&Í7ÏR8ÏR8Úô7™4|7BU·™4|7ÔŽ¥7Ú•5BU·„ á·™4|7í?¿6ÔŽ¥71§-7í?¿6BU·.g¹· ¯·BU·1§-7 ¯·à‘·BU·BU·×f¸„ á·ïQ¸¨f|¸N’¸~Th¸ïQ¸ F,¸ÖC@¸±HT¸~Th¸N’¸±HT¸±HT¸~Th¸±HT¸±HT¸ F,¸ÖC@¸ïQ¸ÖC@¸±HT¸.g¹·N’¸¨f|¸ïˆ°¸±HT¸~Th¸~Th¸ïQ¸„ á·.g¹·ïQ¸„ á·ñ3d¶Ú•5ÔŽ¥7ÖB"8ÔŽ¥7ÔŽ¥71§-7P&Í7P&Í7Úô7jE^8ÏR8P&Í7ñ3d¶ÖB"82B8tTr8{µ8¶d¡8=J8=J89R—8tTr8¶d¡8Ì4ƒ8Ì4ƒ8‚y«8¶d¡8¶d¡8{µ82B8ùÿÝ8tTr8=J8å;68=J8Úô7™4|7™4|7™4|7à‘·ñ3d¶Ú•5.g¹·×f¸ïQ¸„ á·í?¿6BU·BU·ïQ¸×f¸×f¸×f¸N’¸±HT¸ ¯·.g¹· F,¸±HT¸ïˆ°¸N’¸ô º¸ûºÄ¸ïˆ°¸ûºÄ¸N’¸ïˆ°¸N’¸N’¸êÖθ¸^_œ¸ô º¸ô º¸F5í¸ô º¸s¦¸N’¸s¦¸N’¸ïˆ°¸¨f|¸N’¸^_œ¸ÖC@¸N’¸„ á·ïQ¸N’¸N’¸ÖC@¸×f¸ ¯·BU·Ú•5í?¿6BU·ÔŽ¥7=J8=J8ñ3d¶ÖB"8ÖB"8.g¹·™4|7ñ3d¶BU·.g¹·à‘· ¯·ÖC@¸ F,¸ F,¸„ á· F,¸N’¸ F,¸×f¸ñ3d¶™4|7BU·ñ3d¶í?¿6ñ3d¶BU·1§-7™4|7ÔŽ¥7BU·9R—8ÏR8å;68=J8ÏR8jE^8™4|7Úô7í?¿6P&Í7 ¯·×f¸ñ3d¶™4|7Ú•5í?¿6 ¯·í?¿6à‘·ïQ¸1§-71§-7 ¯· ¯·BU·BU·„ á·ïQ¸×f¸ F,¸×f¸„ á·±HT¸±HT¸ÖC@¸±HT¸ÖC@¸N’¸ÖC@¸^_œ¸s¦¸N’¸ F,¸×f¸.g¹·.g¹·ñ3d¶à‘·BU·ñ3d¶BU·×f¸™4|7í?¿6™4|71§-7ÏR81§-7™4|7P&Í7ñ3d¶ÔŽ¥7ÏR8P&Í7™4|71§-7Ú•5ÔŽ¥7=J81§-7ÔŽ¥7=J8=J8ÔŽ¥7ÔŽ¥7™4|7=J8Úô7Ì4ƒ8å;68Ì4ƒ8¶d¡89R—8tTr89R—89R—89R—8ùÿÝ8¶eü8 9X9¶eü8„©¿8ÄÉ8„©¿8„©¿8jE^82B8{µ8å;68Ì4ƒ89R—8=J8Ì4ƒ8Úô7tTr8=J8jE^8tTr8ÏR8í?¿6.g¹·à‘·„ á·„ á· F,¸N’¸à‘·±HT¸ïQ¸$ã¸s¦¸^_œ¸$ã¸X÷¸ûºÄ¸$㸨ôظ¨ôظŒä +¹F5í¸X÷¸Ëø¹ ¾¹F5í¸Œä +¹³ ¹e9¹%P$¹X÷¸ûºÄ¸ûºÄ¸$ã¸X÷¸$㸠¾¹üйûºÄ¸ûºÄ¸$ã¸ô º¸N’¸¨ôظêÖθêÖθs¦¸s¦¸ûºÄ¸êÖθ^_œ¸ïˆ°¸~Th¸N’¸ïQ¸ÖC@¸±HT¸±HT¸~Th¸ïQ¸ïQ¸ïQ¸×f¸„ á·ñ3d¶„ á·×f¸ïQ¸à‘·1§-7P&Í7P&Í7ÏR8P&Í7í?¿6ÔŽ¥7™4|7í?¿6Úô7P&Í7Úô7ÔŽ¥7ÏR8ÖB"8¶d¡8=J8Úô7™4|7Úô7ÔŽ¥7P&Í7 ¯· ¯·.g¹· ¯·Ú•5ñ3d¶í?¿6í?¿6 ¯·1§-7BU·à‘·×f¸„ á·„ á·„ á·„ á·×f¸±HT¸.g¹·ïQ¸.g¹·à‘·.g¹·„ á·ïQ¸×f¸×f¸BU·à‘·„ á·.g¹·Ú•5í?¿6 ¯·BU·ñ3d¶í?¿6ÔŽ¥7.g¹·™4|7™4|7ÔŽ¥7P&Í7ÖB"8P&Í7P&Í7Ú•5Úô7Úô7 ¯·Úô71§-7ÔŽ¥7ÖB"8™4|7ÔŽ¥7ÔŽ¥7ÔŽ¥7å;68=J8tTr8Ì4ƒ8ÖB"8ÏR8Ú•5Ú•5™4|7Úô7™4|7P&Í7ñ3d¶™4|7ÔŽ¥7Úô7ÏR8Úô7Ì4ƒ8¶d¡8¶d¡8‚y«8ÄÉ89Bò8ÄÉ8Ì4ƒ8{µ8‚y«8{µ8‚y«8I è8ÄÉ8ùÿÝ8‚y«8{µ8=J8jE^82B8å;68ÔŽ¥71§-7 ¯·ñ3d¶1§-7í?¿6™4|7×f¸ F,¸±HT¸ÖC@¸™4|7 F,¸ F,¸à‘·×f¸ F,¸ F,¸ÖC@¸„ á·1§-71§-7 F,¸ÖC@¸N’¸ÖC@¸ïQ¸±HT¸ F,¸~Th¸±HT¸„ á·~Th¸×f¸×f¸Ú•51§-71§-71§-7Úô7Ú•5™4|7™4|71§-7ÏR8=J8ÔŽ¥7P&Í7ÖB"8tTr8ÔŽ¥7jE^8tTr8tTr89R—8ÏR8tTr8¶d¡8¶d¡8ùÿÝ89Bò8‚y«89R—8‚y«8‚y«8ùÿÝ8ùÿÝ89Bò8ZáÓ8¶d¡8¶d¡8å;68{µ8tTr8ùÿÝ8¶d¡8¶d¡8X9ùÿÝ8¶d¡8=J89R—8tTr8å;68P&Í7ÖB"8ÔŽ¥71§-7tTr8=J8tTr8ÏR8¶d¡8å;68=J8ÏR8Úô7ÏR8ÏR8å;68tTr8ÏR8tTr8Úô7jE^8ñ3d¶í?¿6Ú•5„ á·ïQ¸×f¸±HT¸„ á·à‘·.g¹·×f¸à‘·.g¹·×f¸ F,¸×f¸„ á·×f¸×f¸„ á·BU·.g¹·×f¸í?¿6„ á·BU·Ú•5BU·BU·í?¿6BU·BU·í?¿6Ú•5.g¹·Ú•5à‘·BU·Ú•5™4|7ÔŽ¥7ñ3d¶1§-7tTr8=J8ÖB"8ÏR8ÔŽ¥7™4|7í?¿6í?¿6P&Í7Úô7P&Í7 ¯·P&Í7™4|7ÔŽ¥7P&Í7™4|7à‘·í?¿6ñ3d¶™4|7ÔŽ¥7ÔŽ¥7ñ3d¶P&Í7ÏR81§-7í?¿6ÔŽ¥7Úô7å;68í?¿6Ú•5ñ3d¶BU· ¯·ñ3d¶à‘·„ á·à‘·×f¸N’¸×f¸s¦¸¨f|¸N’¸^_œ¸ÖC@¸±HT¸¨f|¸s¦¸~Th¸N’¸N’¸±HT¸¨f|¸~Th¸X?ˆ¸ F,¸ÖC@¸„ á·„ á· F,¸¨f|¸~Th¸ïQ¸±HT¸±HT¸~Th¸~Th¸„ á·„ á·à‘·×f¸×f¸™4|7P&Í7P&Í7Úô7jE^8jE^8‚y«8Ì4ƒ8„©¿8{µ82B89Bò89Bò8ÄÉ8ÄÉ89R—8ZáÓ8{µ8{µ8 9ÄÉ89R—8ÄÉ8{µ8„©¿82B8ÄÉ8{µ8I è8YE9ùÿÝ8ZáÓ8ÄÉ8{µ8ÄÉ8„©¿8ZáÓ8¶eü8ZáÓ89Bò8‚y«8‚y«89R—8ÄÉ8{µ82B89R—89R—8Ì4ƒ8ÖB"8™4|7ÖB"8P&Í7P&Í7å;68Úô7í?¿6BU·ñ3d¶ ¯·.g¹·à‘·1§-7.g¹· F,¸.g¹·ïQ¸N’¸~Th¸ÖC@¸ïQ¸N’¸ïˆ°¸~Th¸s¦¸ô º¸N’¸$ã¸êÖθ¸N’¸ûºÄ¸êÖθûºÄ¸F5í¸¨ôظËø¹¨ôظF5í¸êÖθô º¸^_œ¸ F,¸ïˆ°¸ F,¸à‘·„ á·à‘·BU·„ á·à‘· ¯· ¯·Ú•5×f¸1§-7BU·ñ3d¶ ¯·í?¿6í?¿6í?¿6ÖB"8ÖB"8ÏR8Úô7ÔŽ¥7å;68ÖB"8jE^89R—82B82B8ZáÓ82B8tTr8å;68tTr89R—82B8‚y«8¶d¡8Ì4ƒ8tTr8Ì4ƒ8Ì4ƒ8tTr8ÏR8ÖB"8í?¿6™4|7à‘·ïQ¸à‘·.g¹·BU· ¯·1§-7í?¿6í?¿6 ¯·í?¿6P&Í71§-7ÔŽ¥71§-7BU·BU·.g¹·à‘·à‘·BU·à‘·.g¹· ¯· ¯·¨f|¸~Th¸¨f|¸s¦¸s¦¸ÖC@¸^_œ¸ûºÄ¸ûºÄ¸N’¸±HT¸ô º¸ïQ¸^_œ¸ïˆ°¸s¦¸ô º¸ô º¸ô º¸ïˆ°¸ïˆ°¸s¦¸s¦¸¨f|¸N’¸^_œ¸~Th¸s¦¸ïˆ°¸N’¸~Th¸±HT¸±HT¸ÖC@¸ F,¸ñ3d¶ ¯·×f¸BU·í?¿6Ú•5ïQ¸à‘·ñ3d¶ñ3d¶Ú•51§-7ÔŽ¥7ñ3d¶Úô7í?¿6ÔŽ¥7™4|7Ú•51§-7Úô7Úô7Ú•5„ á·.g¹·ÔŽ¥7Ú•5ÖB"8P&Í7ÔŽ¥7ÖB"8=J8í?¿6Ú•5ÔŽ¥7.g¹·.g¹·.g¹·BU·ÖC@¸~Th¸±HT¸X?ˆ¸~Th¸N’¸¨f|¸±HT¸¨f|¸X?ˆ¸¨f|¸ïˆ°¸N’¸^_œ¸N’¸¨f|¸~Th¸×f¸¨f|¸¨f|¸N’¸s¦¸ûºÄ¸±HT¸s¦¸s¦¸êÖθs¦¸êÖθN’¸N’¸s¦¸X?ˆ¸×f¸ïˆ°¸ûºÄ¸s¦¸s¦¸ïˆ°¸N’¸¨f|¸ô º¸s¦¸×f¸~Th¸N’¸ F,¸N’¸±HT¸ F,¸~Th¸×f¸à‘·ïQ¸à‘· ¯·ñ3d¶Ú•5ñ3d¶1§-7P&Í7P&Í7ñ3d¶P&Í7ÖB"8=J8ÖB"8tTr8¶d¡89R—8„©¿89R—82B8„©¿8ÄÉ8ùÿÝ8ZáÓ8ÄÉ8ÄÉ8=J8=J8Ì4ƒ8Ì4ƒ8å;68P&Í7jE^8tTr8jE^8{µ8{µ8„©¿8ùÿÝ8‚y«8tTr8jE^8ÏR8ÖB"8P&Í7ÖB"8Ú•5„ á·1§-7±HT¸±HT¸ïQ¸±HT¸ô º¸êÖθX÷¸X÷¸üйËø¹$㸠¾¹$㸌ä +¹=#¹êÖθ^_œ¸ûºÄ¸N’¸ô º¸s¦¸N’¸$ã¸ûºÄ¸ô º¸F5í¸Œä +¹¨ôظs¦¸êÖθûºÄ¸$ã¸ïˆ°¸êÖθs¦¸N’¸×f¸ ¯·ÖC@¸ÖC@¸ïQ¸ïQ¸~Th¸Ú•5.g¹·„ á·Úô71§-7í?¿6ÔŽ¥7P&Í7tTr82B8ÏR8Úô7ÖB"8ÖB"8tTr8jE^8tTr8‚y«8¶d¡8‚y«8Úô7ÔŽ¥7Úô7jE^8Ì4ƒ8tTr8ÖB"8ÏR8ÔŽ¥7P&Í7í?¿6Úô7tTr8ÏR8ÏR8å;68=J8ÏR8ÖB"8ñ3d¶„ á·ÖB"8Úô7P&Í7™4|7í?¿6Ú•5ñ3d¶Ú•5.g¹·à‘·à‘· F,¸±HT¸ÖC@¸ F,¸ÖC@¸à‘·à‘·BU·.g¹·„ á·×f¸ F,¸ F,¸N’¸~Th¸±HT¸N’¸X?ˆ¸¨f|¸~Th¸~Th¸ÖC@¸ÖC@¸ÖC@¸ïQ¸^_œ¸±HT¸.g¹·ñ3d¶ñ3d¶BU·1§-7P&Í7™4|7Úô7ÏR8Úô7å;68P&Í7ÖB"8™4|7jE^89R—8ÄÉ8ùÿÝ82B8Ì4ƒ8Úô7ÖB"8ÏR8Ì4ƒ8ZáÓ8jE^89R—8jE^8tTr8{µ8{µ8¶d¡8„©¿8Ì4ƒ8¶d¡8ZáÓ8I è89R—8Ì4ƒ8ÄÉ8¶d¡8ÄÉ8{µ8jE^8P&Í7jE^82B8‚y«8{µ89R—8‚y«8ÄÉ8‚y«8ÄÉ8ÄÉ8„©¿8„©¿8{µ82B8tTr8¶d¡82B8Ì4ƒ82B8Ì4ƒ8ZáÓ8„©¿8„©¿8Ì4ƒ8‚y«89R—8tTr8=J82B8jE^8å;68tTr8ÖB"8jE^8Úô7=J8ÏR8=J8å;68tTr8ÖB"8ÏR8‚y«8Ì4ƒ8tTr8ÖB"8ÖB"8å;681§-7Úô7=J8å;68„©¿8{µ8ÄÉ89R—8ZáÓ8„©¿8ùÿÝ8‚y«8ÄÉ8‚y«82B8Ì4ƒ89R—89R—8{µ89R—8Ì4ƒ8¶d¡8{µ8ùÿÝ8‚y«8„©¿89Bò89Bò89Bò8ÄÉ8{µ8jE^8„©¿8‚y«8‚y«8¶d¡8tTr82B89R—8ÏR8ÏR8å;68å;68Ì4ƒ8jE^8P&Í7™4|71§-7ÔŽ¥7ÖB"8ÖB"8jE^8=J8jE^8Úô7ñ3d¶í?¿6í?¿6.g¹· ¯·Ú•5™4|7à‘·„ á·„ á·BU·×f¸ ¯·×f¸×f¸±HT¸~Th¸~Th¸×f¸±HT¸s¦¸ F,¸X?ˆ¸êÖθ¸N’¸ô º¸ûºÄ¸ûºÄ¸ïˆ°¸ûºÄ¸$㸠¾¹üйX÷¸êÖθ¨ôظêÖθN’¸N’¸N’¸^_œ¸~Th¸~Th¸N’¸X?ˆ¸ïQ¸~Th¸¨f|¸^_œ¸~Th¸ïˆ°¸^_œ¸N’¸^_œ¸ïQ¸~Th¸±HT¸¨f|¸^_œ¸×f¸.g¹·×f¸BU·Ú•5 ¯·í?¿6ñ3d¶Úô7P&Í7í?¿6ÔŽ¥7å;68™4|7í?¿6ÏR8™4|71§-7ÖB"8Ì4ƒ8tTr8jE^8tTr8jE^8jE^8jE^8=J8jE^8jE^8Ì4ƒ8„©¿82B8Ì4ƒ8ÔŽ¥7P&Í7tTr82B8P&Í7å;68tTr8ÏR8ÖB"8=J8P&Í7ÔŽ¥7P&Í7P&Í7™4|71§-7í?¿6.g¹·ñ3d¶ïQ¸¨f|¸à‘·„ á· F,¸N’¸ïˆ°¸¨ôظûºÄ¸N’¸ô º¸¨f|¸ÖC@¸ïQ¸„ á·„ á·„ á· F,¸X?ˆ¸¨f|¸„ á·à‘·×f¸×f¸ÖC@¸.g¹·„ á·à‘· ¯·à‘·.g¹·1§-7Ú•5Ú•5í?¿6í?¿6í?¿6Úô7Ú•5Úô7tTr8P&Í7ÏR8P&Í7å;68jE^8ÖB"8jE^82B8Ì4ƒ8Ì4ƒ8tTr8å;68‚y«8¶d¡8jE^82B8{µ8ZáÓ8‚y«8¶d¡8ÄÉ8¶d¡8=J89R—8‚y«82B8å;68¶d¡8Ì4ƒ8=J8=J8=J8ÔŽ¥7ÏR8Úô7Úô7™4|7ÏR8Úô7Ú•5ÏR8™4|7 F,¸.g¹·í?¿6à‘·ñ3d¶ñ3d¶×f¸ F,¸×f¸¨f|¸~Th¸ïˆ°¸ïˆ°¸êÖθô º¸^_œ¸êÖθûºÄ¸s¦¸êÖθs¦¸ïˆ°¸$ã¸N’¸±HT¸~Th¸¨f|¸ïˆ°¸N’¸±HT¸X?ˆ¸ïQ¸à‘·.g¹·±HT¸„ á·×f¸Ú•5à‘·.g¹·à‘·ïQ¸×f¸„ á·.g¹·„ á·ïQ¸ F,¸.g¹·„ á·„ á·„ á·.g¹·ÖC@¸ ¯·1§-7 ¯·Ú•5Ú•5à‘·BU·Úô7Úô7í?¿6P&Í7™4|7å;68Úô7™4|7P&Í7ÖB"81§-7ÔŽ¥7ÖB"8ÏR8ÖB"8ÔŽ¥7=J8tTr8ÏR81§-7Úô7jE^8Úô7ñ3d¶1§-7Úô71§-7BU·.g¹·ñ3d¶ïQ¸„ á· F,¸¨f|¸ÖC@¸~Th¸s¦¸s¦¸$ã¸ô º¸ô º¸ïˆ°¸~Th¸s¦¸s¦¸êÖθ$㸠¾¹F5í¸³ ¹³ ¹ ¾¹F5í¸êÖθô º¸ûºÄ¸$㸨ôظô º¸¨ôظX÷¸$ã¸ô º¸s¦¸s¦¸ÖC@¸s¦¸ F,¸ÖC@¸~Th¸.g¹·ÖC@¸±HT¸×f¸.g¹·ñ3d¶BU·„ á·„ á· ¯·ñ3d¶.g¹·.g¹·.g¹·BU·í?¿6×f¸×f¸ïQ¸ ¯·BU·BU·BU·í?¿61§-7à‘·í?¿6à‘·1§-7í?¿6×f¸ÖC@¸„ á·×f¸×f¸Ú•5Ú•5™4|7à‘·BU·à‘·à‘·à‘· ¯·.g¹·Ú•5.g¹·ïQ¸1§-7ñ3d¶„ á· ¯·ñ3d¶ÖC@¸à‘·„ á·ïQ¸à‘·1§-7BU·„ á·BU·×f¸ÖC@¸„ á·.g¹·±HT¸ÖC@¸X?ˆ¸~Th¸±HT¸ïˆ°¸±HT¸¨f|¸~Th¸±HT¸ûºÄ¸$㸨ôظ±HT¸$ã¸ô º¸¨ôظ³ ¹%P$¹=#¹=#¹üйX÷¸$ã¸X÷¸ûºÄ¸s¦¸~Th¸¨f|¸ÖC@¸s¦¸^_œ¸ûºÄ¸^_œ¸~Th¸ F,¸~Th¸~Th¸ïQ¸±HT¸„ á·.g¹·BU· ¯·™4|7™4|7ÖB"8™4|7à‘·=J8Úô7í?¿6Úô7Ì4ƒ89R—8ÏR8å;68=J82B8‚y«8tTr82B8„©¿8¶d¡8Ì4ƒ8Ì4ƒ8¶d¡8„©¿8jE^8=J82B8Ì4ƒ89R—8å;68„©¿8ÄÉ8tTr8tTr82B8å;68jE^8å;68ÖB"8=J8å;68å;68jE^8jE^8Úô7Úô7tTr8™4|7ÔŽ¥7à‘·í?¿6ÖB"8P&Í7í?¿6P&Í7P&Í7å;68ÔŽ¥7™4|7Úô7í?¿6=J8™4|7í?¿6Úô7P&Í7ÏR8=J8Úô7tTr8Úô7å;68=J8ÏR8ÖB"8å;68=J8ÏR8P&Í7ÔŽ¥7ÖB"8=J8jE^8ÖB"8¶d¡8Ì4ƒ8å;68{µ8ùÿÝ8jE^8{µ8‚y«8„©¿89R—8ÄÉ8I è8ZáÓ8ÄÉ8 99Bò8„©¿8¶d¡8„©¿8„©¿8‚y«8=J8¶d¡8„©¿8=J8ÄÉ8{µ82B89R—89R—8ùÿÝ8ZáÓ8„©¿89R—8„©¿8tTr8Ì4ƒ82B89R—8tTr8tTr8Ì4ƒ82B82B89R—8Ì4ƒ89R—8¶d¡8Ì4ƒ8™4|7ÖB"8ÖB"8Úô7ÔŽ¥7P&Í7ñ3d¶Ú•5Ú•5™4|7Úô7 ¯·BU·.g¹·ÖC@¸×f¸ F,¸„ á·à‘·„ á·×f¸.g¹·ÖC@¸X?ˆ¸X?ˆ¸s¦¸^_œ¸ô º¸s¦¸$ã¸F5í¸$㸠¾¹Œä +¹F5í¸F5í¸ ¾¹³ ¹êÖθ$ã¸ûºÄ¸$ã¸X÷¸ûºÄ¸s¦¸s¦¸F5í¸F5í¸N’¸¨f|¸s¦¸ïˆ°¸Œä +¹ûºÄ¸^_œ¸N’¸ïQ¸ F,¸ F,¸±HT¸ÖC@¸±HT¸ F,¸ ¯· ¯·ñ3d¶ ¯·ñ3d¶ñ3d¶ñ3d¶ÔŽ¥7Ú•5ÖB"8å;68tTr8tTr8„©¿82B8Ì4ƒ89R—8ÄÉ8Ì4ƒ82B89R—8å;68ÖB"8tTr8ÖB"8™4|7BU·Ú•5BU· ¯·ñ3d¶ñ3d¶BU· ¯·„ á·à‘·N’¸×f¸.g¹·×f¸ïQ¸×f¸×f¸ïQ¸„ á·×f¸ F,¸à‘·.g¹·ïQ¸„ á·ïQ¸×f¸„ á·±HT¸×f¸ïQ¸„ á·×f¸„ á·±HT¸~Th¸±HT¸^_œ¸N’¸^_œ¸ïˆ°¸~Th¸s¦¸^_œ¸êÖθ¸s¦¸N’¸ïQ¸ÖC@¸×f¸.g¹·ïQ¸„ á·×f¸N’¸¨f|¸BU· ¯· ¯·Ú•5™4|7Ú•5P&Í7Úô7P&Í7P&Í7=J89R—82B8tTr8„©¿8„©¿8tTr8‚y«8„©¿8ZáÓ8YE9YE9ZáÓ89Bò8‚y«8{µ8ZáÓ8ZáÓ8=J82B8¶d¡8Ì4ƒ8=J8tTr8tTr8ÖB"8P&Í7ÖB"8ÖB"8=J8tTr8tTr8=J8P&Í7tTr8ÏR81§-7ÔŽ¥7Úô7Úô7Úô7ÔŽ¥71§-7ñ3d¶ñ3d¶1§-7×f¸1§-7ñ3d¶BU·1§-71§-7ÏR82B8ÖB"8í?¿6™4|7à‘·ÖC@¸„ á·Ú•5 ¯· ¯·à‘·BU· F,¸Ú•5à‘·1§-7Úô7Úô7ÏR8ÖB"8Úô7ÔŽ¥7Úô7ÔŽ¥7ÖB"81§-7ÖB"82B8å;68P&Í7P&Í7=J8P&Í7jE^82B8¶d¡8ÄÉ8„©¿8X9YE9I è89Bò8¬9žÙ&9žÙ&9¬9I è8¶eü8¬9YE9xl 9X9xl 9X9”Â!9žÙ&9T;;9¬9f 19X9xl 9X9ùÿÝ8E–9„©¿8‚y«8Ì4ƒ8„©¿89R—8ÄÉ8¶d¡8ZáÓ89R—8{µ8„©¿8„©¿8jE^8Úô7=J8ÖB"8jE^8P&Í7ÔŽ¥7í?¿6P&Í79R—8jE^81§-7ñ3d¶ÏR8í?¿61§-7.g¹·.g¹·ÖC@¸s¦¸~Th¸X?ˆ¸N’¸¨f|¸¨f|¸ô º¸ûºÄ¸ïˆ°¸ûºÄ¸ïˆ°¸^_œ¸±HT¸~Th¸N’¸N’¸N’¸N’¸ F,¸.g¹·Ú•5ñ3d¶.g¹·BU·P&Í7Ú•5P&Í7Úô71§-7Úô7ÖB"8ÏR8ÏR8å;68ÏR8„©¿8ÄÉ8‚y«89R—8¶d¡8ÄÉ8I è89Bò8I è8I è8ÄÉ8X9X9I è8I è89Bò8YE99Bò8xl 9ùÿÝ8{µ8‚y«8ùÿÝ8xl 9ùÿÝ89R—8I è8{µ82B8=J8å;682B8=J8Úô7jE^8ÏR81§-7í?¿6™4|7ñ3d¶×f¸BU·à‘·.g¹·ÖC@¸×f¸×f¸×f¸×f¸N’¸N’¸±HT¸ F,¸ÖC@¸N’¸X?ˆ¸^_œ¸¨ôظ^_œ¸X?ˆ¸±HT¸~Th¸N’¸¨f|¸ÖC@¸X?ˆ¸N’¸X?ˆ¸s¦¸N’¸ô º¸F5í¸³ ¹êÖθûºÄ¸ûºÄ¸ïˆ°¸N’¸¨f|¸ïQ¸N’¸N’¸N’¸ïˆ°¸±HT¸ïQ¸ F,¸×f¸„ á·.g¹·í?¿6Ú•5ÖB"8ÏR8Úô7ÖB"8¶d¡8¶d¡8å;68=J8jE^8å;68ÔŽ¥7=J8tTr8jE^82B82B8tTr8=J8™4|7P&Í7jE^81§-7jE^8Ì4ƒ8ÔŽ¥7ÏR8P&Í71§-7ÏR8ÖB"8P&Í7Úô7ÖB"8Ú•5ÏR8 ¯·í?¿6BU·×f¸„ á·×f¸×f¸ÖC@¸~Th¸N’¸ïˆ°¸s¦¸N’¸s¦¸N’¸ïˆ°¸N’¸ïQ¸s¦¸N’¸^_œ¸~Th¸N’¸êÖθs¦¸X÷¸X÷¸êÖθŒä +¹ ¾¹%P$¹=#¹=#¹³ ¹yg)¹=#¹üй ¾¹Œä +¹ûºÄ¸$ã¸s¦¸~Th¸N’¸^_œ¸±HT¸„ á·„ á·Ú•5Úô7Úô7ÔŽ¥7Ú•5™4|7Úô7ÖB"8{µ8„©¿89R—8jE^8tTr8ÖB"8ÏR8‚y«8Úô7å;68tTr8jE^8=J8Ì4ƒ8Ì4ƒ8=J8jE^8=J8ÏR8Ì4ƒ8Ì4ƒ8P&Í7=J8=J8ÏR8™4|7ÏR8P&Í7ÏR81§-71§-7ÖB"8Úô7í?¿6ÖC@¸~Th¸¨f|¸×f¸ïQ¸~Th¸ÖC@¸¨f|¸×f¸~Th¸N’¸ïQ¸~Th¸s¦¸N’¸êÖθ^_œ¸N’¸$ã¸X÷¸$㸠¾¹$㸨ôظüйûºÄ¸F5í¸üйêÖθ^_œ¸X?ˆ¸~Th¸^_œ¸N’¸X?ˆ¸.g¹·N’¸X?ˆ¸ô º¸X÷¸ô º¸ïˆ°¸ûºÄ¸¨ôظ¨ôظüй ¾¹ûºÄ¸X?ˆ¸ô º¸^_œ¸^_œ¸±HT¸^_œ¸ïQ¸~Th¸ïQ¸ F,¸±HT¸ÖC@¸™4|7í?¿6í?¿6ÏR8P&Í71§-7P&Í7P&Í7Úô7 ¯·à‘·í?¿6×f¸×f¸à‘· F,¸à‘·BU·×f¸ F,¸ñ3d¶ñ3d¶à‘·à‘·„ á·×f¸×f¸„ á·„ á·„ á·±HT¸±HT¸ïQ¸¨f|¸^_œ¸~Th¸ïˆ°¸êÖθ ¾¹=#¹F5í¸F5í¸X÷¸Œä +¹F5í¸ ¾¹F5í¸$㸠¾¹¨ôظ¨ôظ ¾¹e9¹F5í¸ô º¸Œä +¹$ã¸üй$ã¸üйX÷¸ ¾¹êÖθô º¸$ã¸^_œ¸F5í¸êÖθ$ã¸ïˆ°¸N’¸ûºÄ¸s¦¸^_œ¸ûºÄ¸N’¸êÖθô º¸^_œ¸ïˆ°¸^_œ¸ÖC@¸N’¸à‘·à‘· ¯·ñ3d¶1§-7ÔŽ¥7P&Í7P&Í7P&Í7ñ3d¶ÔŽ¥7ÏR8™4|7ÏR8tTr8ÔŽ¥7ÖB"8ÔŽ¥7=J82B8„©¿8=J8Ì4ƒ8tTr8jE^8å;68ÔŽ¥7ÏR8ÏR8ÖB"8tTr8P&Í7ÔŽ¥7tTr8å;68å;68P&Í7Úô7P&Í7Úô7 ¯·Ú•5BU·×f¸ñ3d¶BU·ïQ¸×f¸à‘·à‘·.g¹·×f¸BU·×f¸¨f|¸^_œ¸êÖθ¨f|¸êÖθF5í¸N’¸ûºÄ¸^_œ¸N’¸ô º¸^_œ¸ïˆ°¸s¦¸ïˆ°¸êÖθ^_œ¸$ã¸N’¸×f¸^_œ¸N’¸ÖC@¸ÖC@¸„ á·ïQ¸×f¸×f¸N’¸X?ˆ¸N’¸X?ˆ¸BU· ¯· ¯·™4|7P&Í71§-7Úô7P&Í7P&Í7Ì4ƒ8jE^89R—8{µ8å;682B89R—8ÄÉ8¶d¡8I è89Bò8{µ8¶d¡8ZáÓ8Ì4ƒ8ÄÉ8„©¿8ùÿÝ8„©¿89Bò8ùÿÝ8xl 9„©¿8ZáÓ8Ì4ƒ8ZáÓ8„©¿8{µ8{µ8‚y«8‚y«8‚y«8Ì4ƒ8¶d¡8jE^82B8ZáÓ8„©¿8ùÿÝ8ZáÓ8ZáÓ8I è8ZáÓ8ÄÉ82B8å;689R—8ÏR8P&Í7P&Í7P&Í7Úô7ÔŽ¥7P&Í7P&Í7ÏR81§-7P&Í7P&Í7™4|71§-7ñ3d¶BU·„ á·ÖC@¸ F,¸×f¸ïQ¸ïQ¸ïQ¸.g¹·×f¸ F,¸ÖC@¸×f¸×f¸±HT¸×f¸~Th¸×f¸ñ3d¶„ á·×f¸„ á·~Th¸ F,¸„ á·ïQ¸ïQ¸~Th¸×f¸×f¸¨f|¸×f¸×f¸^_œ¸BU·BU·à‘·™4|7í?¿6í?¿6ñ3d¶Ú•51§-7Úô7=J8ÏR8å;68jE^8å;68ÖB"8=J8¶d¡8tTr8Ì4ƒ8¶d¡8=J8Ì4ƒ8Ì4ƒ8Ì4ƒ8Ì4ƒ8Ì4ƒ8=J8Ì4ƒ8jE^8¶d¡8„©¿8I è8„©¿8{µ89R—8‚y«8¶d¡8‚y«8{µ8‚y«82B8ÄÉ89R—89R—8ZáÓ8I è8¶d¡8‚y«82B8tTr8tTr8=J8tTr8tTr8P&Í7ÔŽ¥7ÏR8Úô7ÏR8BU·ñ3d¶1§-7à‘·à‘·¨f|¸ F,¸~Th¸^_œ¸±HT¸ïQ¸ÖC@¸ÖC@¸~Th¸ F,¸¨f|¸N’¸ô º¸$ã¸ûºÄ¸$ã¸F5í¸^_œ¸¨f|¸ô º¸ô º¸N’¸¨f|¸^_œ¸ïˆ°¸s¦¸N’¸ïQ¸~Th¸N’¸N’¸s¦¸ïˆ°¸±HT¸×f¸ F,¸ïQ¸s¦¸ïQ¸~Th¸à‘·Ú•5BU·×f¸×f¸×f¸™4|7ÔŽ¥7™4|7Úô7Úô7å;68P&Í7=J82B89R—8ÖB"8ÏR8P&Í7å;68Úô7ÏR8P&Í7P&Í7P&Í7Úô7 ¯· ¯· ¯· ¯·™4|7™4|71§-7P&Í7Ú•5ñ3d¶ÔŽ¥71§-7ñ3d¶™4|7ñ3d¶ ¯·BU·×f¸„ á·×f¸™4|7BU·×f¸.g¹·1§-7í?¿6BU·ïQ¸ÖC@¸~Th¸~Th¸±HT¸ F,¸.g¹·à‘·ïQ¸ F,¸à‘·.g¹· F,¸^_œ¸¨f|¸~Th¸ÖC@¸ïˆ°¸±HT¸~Th¸±HT¸~Th¸^_œ¸ F,¸¨f|¸¨f|¸×f¸à‘·ïQ¸×f¸1§-7ñ3d¶BU·Ú•5×f¸ïQ¸ñ3d¶ñ3d¶1§-7ÖB"8ÖB"8ÏR8=J8jE^89R—89R—8Ì4ƒ8‚y«8‚y«8ùÿÝ8{µ8„©¿8Ì4ƒ89Bò8ùÿÝ8ùÿÝ89Bò8ùÿÝ8I è8‚y«8ZáÓ8ÄÉ8{µ8¶eü8ÄÉ8„©¿8„©¿8ZáÓ8YE9{µ8ÄÉ8ùÿÝ89Bò8ZáÓ8ÄÉ8ZáÓ8ùÿÝ8ÄÉ8ÄÉ8{µ8tTr8{µ8tTr8å;68jE^8ÏR8Ì4ƒ8ÏR8jE^8jE^8=J8™4|7ÔŽ¥7Ú•5×f¸×f¸ñ3d¶ ¯·BU·.g¹·Ú•5×f¸Ú•51§-7 ¯· ¯·ïQ¸¨f|¸„ á·BU·¨f|¸ F,¸.g¹·„ á·ïQ¸±HT¸±HT¸ïQ¸„ á·ïQ¸ïQ¸±HT¸~Th¸ÖC@¸„ á·BU·ÔŽ¥7 ¯·„ á·à‘·à‘·à‘·Ú•5ÔŽ¥7í?¿6 ¯·1§-7™4|71§-7Úô7¶d¡89R—8{µ8ÖB"8ÖB"8Ì4ƒ8jE^8Ì4ƒ89R—8tTr8tTr8=J8=J8„©¿8{µ8‚y«8ÄÉ8„©¿8ZáÓ8Ì4ƒ8å;68ÖB"8jE^8å;68jE^8Ì4ƒ8ÔŽ¥7Úô7ñ3d¶ñ3d¶í?¿61§-7×f¸ÖC@¸×f¸ïQ¸×f¸ ¯·.g¹·BU·.g¹·à‘·à‘·ïQ¸~Th¸ F,¸×f¸ÖC@¸^_œ¸ô º¸^_œ¸N’¸¨f|¸^_œ¸F5í¸s¦¸s¦¸ûºÄ¸êÖθûºÄ¸êÖθ^_œ¸N’¸^_œ¸X?ˆ¸N’¸ÖC@¸„ á·N’¸ ¯·×f¸„ á·BU·.g¹·à‘·ÔŽ¥7™4|7í?¿6ÖB"8Úô7ÔŽ¥7å;68ÏR8ÏR8™4|7í?¿6ÏR8ÏR8ÖB"8tTr8jE^8=J8ÖB"8=J8jE^8Ì4ƒ8Ì4ƒ8Ì4ƒ8ÄÉ8ÄÉ89R—8Ì4ƒ82B8¶d¡8¶d¡8¶d¡8tTr8‚y«8tTr8Ì4ƒ8ÏR89R—8å;68tTr8ÖB"8ÏR8Úô7jE^8tTr8ÔŽ¥7 ¯·BU·×f¸N’¸„ á·„ á·Ú•5×f¸ÖC@¸×f¸±HT¸N’¸ÖC@¸N’¸±HT¸N’¸ûºÄ¸^_œ¸ïˆ°¸ïˆ°¸ïˆ°¸s¦¸^_œ¸^_œ¸s¦¸ô º¸$ã¸^_œ¸s¦¸ïˆ°¸¨ôظs¦¸X÷¸$ã¸F5í¸^_œ¸¨f|¸ô º¸êÖθN’¸N’¸ÖC@¸×f¸ïQ¸„ á·í?¿6à‘·BU·à‘· F,¸~Th¸.g¹·.g¹·.g¹·„ á·BU·×f¸ÖC@¸¨f|¸ÖC@¸X?ˆ¸ F,¸ F,¸„ á·×f¸„ á·×f¸Ú•5×f¸ñ3d¶ñ3d¶×f¸BU·ÖC@¸à‘·™4|71§-7Ú•5ÔŽ¥7ÖB"8ÖB"8ÔŽ¥7à‘·1§-7ÔŽ¥7P&Í7P&Í7™4|7Ú•5Úô7™4|71§-7™4|7Úô7ÔŽ¥7ÔŽ¥7™4|7™4|7ñ3d¶ ¯·BU·P&Í7ÔŽ¥7í?¿6ñ3d¶BU·í?¿6.g¹·.g¹·ñ3d¶ïQ¸ïQ¸ F,¸N’¸¨f|¸ïQ¸ÖC@¸~Th¸„ á·±HT¸ÖC@¸ F,¸ F,¸¨f|¸~Th¸s¦¸N’¸ô º¸~Th¸ïˆ°¸s¦¸^_œ¸ïˆ°¸êÖθF5í¸ûºÄ¸N’¸×f¸„ á·ÖC@¸×f¸~Th¸X?ˆ¸ïQ¸×f¸ÖC@¸BU·ñ3d¶1§-7ñ3d¶Ú•5í?¿6P&Í7ÖB"8¶d¡89R—8¶d¡8ÄÉ8„©¿8¶eü8ÄÉ89Bò8X9¶eü8¶eü8X9X9YE9„©¿89Bò8{µ8ÄÉ8xl 9xl 9xl 9I è8{µ89R—89R—8„©¿8„©¿8„©¿89R—8{µ8{µ8‚y«8‚y«8å;68tTr8tTr89R—8å;68ÖB"8å;68P&Í7™4|7Úô7í?¿6í?¿61§-7™4|7ñ3d¶Ú•5×f¸BU· ¯·ïQ¸à‘·×f¸BU·×f¸.g¹·í?¿6BU· ¯· ¯·1§-7™4|7Ú•5à‘·1§-7à‘·×f¸„ á·à‘·ïQ¸.g¹·.g¹·„ á·×f¸.g¹·ñ3d¶ñ3d¶BU·à‘·à‘·×f¸„ á·×f¸à‘·ñ3d¶ ¯· ¯·×f¸.g¹·Ú•5×f¸ ¯·Ú•5Ú•5P&Í7ÏR8tTr8P&Í7=J8¶d¡89R—89R—89R—82B82B8ÏR8ÖB"8Ì4ƒ8P&Í7=J8ÖB"82B89R—82B8¶d¡8=J8jE^8‚y«8‚y«89R—8{µ8jE^89R—8jE^89R—8P&Í7™4|7ÔŽ¥7P&Í7à‘·BU·ïQ¸~Th¸ïQ¸ F,¸±HT¸ F,¸ F,¸à‘·Ú•5„ á·„ á·à‘·ïQ¸ F,¸ F,¸¨f|¸X?ˆ¸ô º¸ïˆ°¸N’¸¨f|¸~Th¸ÖC@¸ F,¸ F,¸ïQ¸.g¹·ÖC@¸~Th¸×f¸BU·P&Í7.g¹·1§-71§-7 ¯·Ú•5™4|7 ¯·BU· ¯·ÔŽ¥7Ú•5BU·1§-7Ú•5ñ3d¶1§-71§-7™4|7P&Í7í?¿6ÏR8ÏR8=J8ÔŽ¥7P&Í7å;68å;68tTr8tTr8å;68jE^82B8‚y«8{µ8„©¿8‚y«8ZáÓ8ZáÓ8YE9ZáÓ8ZáÓ8I è8ùÿÝ8ÄÉ8ZáÓ8ZáÓ8ùÿÝ8„©¿8„©¿8tTr8tTr8ÖB"8ÖB"8Ì4ƒ8å;68ÏR8ñ3d¶Ú•5™4|7å;68P&Í7ÔŽ¥7ÔŽ¥71§-7í?¿6Ú•5Ú•51§-7™4|7ÏR8ÔŽ¥7Úô71§-7à‘·à‘·à‘·ÔŽ¥7„ á·.g¹·1§-7Ú•5Ú•5Úô7ÏR8ÔŽ¥71§-7BU·ÖB"8tTr8å;68å;68tTr8Úô7=J8ÏR89R—8Úô7™4|7ÔŽ¥7ÏR8å;68jE^8Ì4ƒ8tTr8‚y«8tTr8¶d¡8å;68Úô7ÖB"8ÔŽ¥72B8=J8=J8å;68Ì4ƒ89R—8¶d¡8ÄÉ8¶d¡8ÄÉ8X9¶d¡8ZáÓ8{µ8YE99Bò8{µ89Bò8ùÿÝ8ùÿÝ8¶eü8 9žÙ&99Bò89Bò8E–9xl 9YE9X9¶eü8xl 9ÄÉ8xl 9I è8{µ8ÄÉ8„©¿8ZáÓ8ZáÓ8ÄÉ8„©¿8Ì4ƒ8Ì4ƒ8Ì4ƒ8Úô7BU· ¯·™4|7ÏR8ïQ¸BU·à‘·í?¿6 ¯·„ á· F,¸N’¸ F,¸ÖC@¸ F,¸.g¹·ïQ¸ÖC@¸¨f|¸^_œ¸êÖθs¦¸¨ôظs¦¸ô º¸¨ôظs¦¸N’¸^_œ¸s¦¸N’¸N’¸±HT¸N’¸N’¸ïˆ°¸ F,¸à‘·.g¹· F,¸BU·„ á·ïQ¸Ú•5~Th¸×f¸1§-7Ú•5 ¯·Ú•5 ¯·.g¹·Ú•5Ú•5ñ3d¶à‘·Ú•5 ¯·„ á·×f¸.g¹·ñ3d¶BU·à‘·„ á·Ú•5ñ3d¶™4|7ÏR8P&Í7Úô7ÖB"8P&Í7P&Í7å;68å;68ÏR8tTr8¶d¡8ÏR8™4|7P&Í7=J8í?¿6í?¿6.g¹·ÖC@¸×f¸±HT¸ F,¸BU·.g¹· F,¸N’¸ÖC@¸ûºÄ¸s¦¸¨ôظ¸ûºÄ¸êÖθ¨ôظ$ã¸F5í¸ô º¸ûºÄ¸ïˆ°¸ïˆ°¸ûºÄ¸ûºÄ¸F5í¸üй$ã¸üй ¾¹üйêÖθX÷¸$ã¸X÷¸ ¾¹ûºÄ¸ïˆ°¸ïˆ°¸^_œ¸ô º¸ïˆ°¸^_œ¸~Th¸^_œ¸ô º¸^_œ¸N’¸ô º¸^_œ¸N’¸¨f|¸±HT¸±HT¸^_œ¸¨ôظX?ˆ¸s¦¸N’¸¨f|¸N’¸×f¸ F,¸±HT¸N’¸±HT¸ïQ¸„ á· ¯·„ á·Ú•5Ú•5„ á·ÔŽ¥71§-7.g¹·í?¿6ñ3d¶1§-7.g¹·.g¹·Ú•5 ¯·Úô7P&Í7=J8tTr81§-7à‘·P&Í7ÏR8ÔŽ¥7ÔŽ¥7Úô71§-7 ¯·í?¿6 ¯·×f¸í?¿6í?¿6à‘·.g¹·×f¸~Th¸N’¸ô º¸~Th¸N’¸s¦¸s¦¸$ã¸N’¸s¦¸ô º¸ô º¸ô º¸êÖθX÷¸F5í¸¨ôظüй=#¹$ã¸F5í¸X÷¸X÷¸üйËø¹F5í¸³ ¹Œä +¹^_œ¸ô º¸ûºÄ¸$ã¸ô º¸s¦¸¨f|¸ûºÄ¸ïˆ°¸N’¸s¦¸s¦¸X?ˆ¸N’¸¨f|¸ÖC@¸ÖC@¸ïQ¸ïQ¸±HT¸×f¸±HT¸±HT¸ F,¸ïQ¸×f¸±HT¸ïQ¸.g¹·ïQ¸„ á·×f¸Ú•5Ú•5Ú•51§-7í?¿6™4|7ÔŽ¥7™4|7Úô7™4|7P&Í7P&Í7™4|7ñ3d¶™4|71§-7í?¿6ñ3d¶„ á· ¯· ¯·.g¹·ïQ¸à‘·BU·„ á·ñ3d¶ïQ¸à‘·à‘· F,¸×f¸ F,¸ F,¸N’¸±HT¸×f¸N’¸~Th¸^_œ¸ïˆ°¸ô º¸~Th¸ïQ¸N’¸~Th¸ ¯·ïQ¸ F,¸ F,¸„ á·×f¸ F,¸ïQ¸N’¸~Th¸N’¸N’¸N’¸~Th¸¨f|¸X?ˆ¸N’¸ô º¸±HT¸N’¸„ á·~Th¸X?ˆ¸~Th¸~Th¸ÖC@¸×f¸×f¸.g¹·à‘·„ á·×f¸ÖC@¸ïQ¸ÖC@¸„ á·à‘·Ú•5 ¯·ñ3d¶1§-7Úô7ÔŽ¥7P&Í7™4|7P&Í7ÏR8Úô7ÏR81§-7ÏR8=J82B8ZáÓ8ÖB"8P&Í7tTr8ÏR8=J8Úô7ÖB"8P&Í7ÏR8=J8=J8=J8jE^8Ì4ƒ8ÏR8Úô7Úô7ÔŽ¥7™4|7à‘·×f¸„ á·ÖC@¸Ú•5 ¯· ¯·1§-7P&Í7 ¯·Ú•51§-71§-7Ú•51§-7„ á·à‘·ñ3d¶BU·™4|7™4|7ÔŽ¥7ñ3d¶1§-7ÔŽ¥7ïQ¸×f¸Ú•5à‘·.g¹·.g¹·à‘·×f¸ F,¸.g¹·.g¹·BU·í?¿6™4|7™4|71§-7í?¿6ñ3d¶à‘·ñ3d¶Úô7ÔŽ¥7Úô7Úô7ÏR8å;68tTr8¶d¡8=J8Ì4ƒ8ÏR8¶d¡8‚y«82B8¶d¡82B8tTr8{µ8ùÿÝ89Bò8ZáÓ8ùÿÝ8xl 99Bò8X99Bò8 9žÙ&9”Â!9YE9YE9E–9X9 9E–9X9¬9¬9E–9ŠJ9MoE9f 19xl 9X9YE9 9¶eü8ùÿÝ8I è8ùÿÝ8{µ8{µ8ÄÉ82B8{µ8¶d¡8tTr8Ì4ƒ8ÖB"8=J8=J8Úô7í?¿6ÖB"8å;68Ú•5 ¯·ñ3d¶ÔŽ¥7Ú•5ñ3d¶í?¿6BU·ïQ¸„ á·ïQ¸±HT¸~Th¸à‘· ¯·×f¸à‘·1§-7à‘·ñ3d¶ñ3d¶Ú•5ñ3d¶í?¿61§-7Úô7™4|71§-7P&Í7P&Í7Úô71§-7ñ3d¶ÏR8ÔŽ¥7Úô7Ì4ƒ8jE^8=J8ÖB"8Ì4ƒ8jE^8å;68jE^8ÖB"8å;682B8jE^8tTr8=J8ÖB"8ÄÉ8„©¿8ÖB"8jE^8ÖB"8jE^8Ì4ƒ82B8jE^8Ì4ƒ82B8jE^82B82B8jE^8tTr82B82B8„©¿8„©¿8ùÿÝ8‚y«82B82B8‚y«8Ì4ƒ8¶d¡8tTr82B89R—8jE^82B8tTr8ÏR8=J8=J8ÏR8å;68ÔŽ¥7å;68Úô71§-7™4|7ñ3d¶P&Í71§-7í?¿6ñ3d¶à‘·BU·Ú•5ñ3d¶.g¹·BU·™4|7à‘·×f¸ïQ¸~Th¸à‘· ¯·.g¹·í?¿6„ á·BU·.g¹·à‘·×f¸à‘·¨f|¸~Th¸×f¸™4|7BU·à‘·ÔŽ¥7ÏR8P&Í7Ì4ƒ8jE^8ÖB"8tTr8tTr8tTr8tTr8=J8tTr8Úô7ÖB"8å;68Úô7Úô7ÖB"8ÖB"8å;68í?¿6ñ3d¶Úô7í?¿6P&Í7™4|7 ¯·BU·Ú•5„ á·×f¸.g¹·à‘· ¯· ¯·1§-7.g¹·à‘·ïQ¸BU·.g¹·BU·ÖC@¸×f¸ïQ¸X?ˆ¸ÖC@¸N’¸×f¸~Th¸N’¸X?ˆ¸X?ˆ¸±HT¸„ á·„ á·±HT¸~Th¸±HT¸ÖC@¸ïQ¸±HT¸à‘·×f¸ ¯·ïQ¸ F,¸±HT¸×f¸X?ˆ¸×f¸ïQ¸¨f|¸±HT¸ô º¸N’¸ïˆ°¸s¦¸¨ôظ$ã¸ûºÄ¸ïˆ°¸ô º¸~Th¸±HT¸^_œ¸N’¸N’¸×f¸×f¸~Th¸à‘·×f¸í?¿6 ¯·Ú•5í?¿6ñ3d¶×f¸Ú•5í?¿6ñ3d¶Ú•5.g¹· ¯·1§-7BU·1§-7í?¿61§-7™4|7ÖB"8ÏR8ÏR8Ì4ƒ8tTr8ÖB"89R—8¶d¡8„©¿8„©¿8ZáÓ8=J8=J8ÖB"8ÏR8ÖB"8ÏR8¶d¡8Ì4ƒ8=J8ÔŽ¥7å;68jE^8ÖB"8™4|7ÖB"8ÖB"8jE^8ÏR8ÖB"8ÖB"8å;68P&Í7™4|7Ú•5.g¹·×f¸à‘·.g¹·ÖC@¸ÖC@¸N’¸~Th¸ïˆ°¸ïˆ°¸s¦¸X÷¸^_œ¸êÖθ$㸨ôظX÷¸üйF5í¸Œä +¹ ¾¹e9¹³ ¹Œä +¹Œä +¹F5í¸üй=#¹ ¾¹¨ôظ³ ¹%P$¹üй=#¹êÖθ±HT¸s¦¸N’¸N’¸N’¸N’¸×f¸ÖC@¸×f¸à‘·ñ3d¶„ á· ¯·.g¹·.g¹·„ á· ¯·ïQ¸BU·±HT¸à‘·BU·à‘· ¯· ¯·ñ3d¶1§-7í?¿6Úô7Ú•5 ¯·P&Í7ÏR8™4|7Úô7™4|7™4|7™4|7Ú•5P&Í7ÏR8ÖB"8ÏR8ñ3d¶ñ3d¶ÔŽ¥7Úô7Úô7ÔŽ¥7Úô7P&Í7Ú•5Ú•5ñ3d¶ñ3d¶à‘· ¯·Ú•5à‘·BU·×f¸BU·à‘·.g¹· F,¸¨f|¸X?ˆ¸N’¸~Th¸N’¸ô º¸¨f|¸N’¸^_œ¸X?ˆ¸ïˆ°¸ïˆ°¸^_œ¸¨f|¸~Th¸ÖC@¸^_œ¸^_œ¸ô º¸ô º¸ïˆ°¸ûºÄ¸s¦¸$ã¸êÖθûºÄ¸N’¸^_œ¸ûºÄ¸s¦¸^_œ¸ô º¸¨ôظ¸N’¸~Th¸^_œ¸N’¸^_œ¸N’¸„ á·ñ3d¶.g¹·BU·„ á·Ú•5ÔŽ¥7ÔŽ¥7ÔŽ¥7tTr8å;68P&Í7tTr8Ì4ƒ8ÖB"8ÖB"8ÖB"8ÖB"8tTr8=J8{µ8ÏR8Ì4ƒ8Ì4ƒ8jE^8{µ82B8ÏR8Úô7{µ89R—8¶d¡8=J8=J8Úô7ÔŽ¥7ÔŽ¥7tTr82B8å;68=J8Úô7ñ3d¶.g¹·í?¿6í?¿61§-7Úô7Ú•5ñ3d¶ ¯·×f¸à‘·à‘·BU·à‘·ïQ¸„ á·à‘·„ á·BU·.g¹·~Th¸×f¸ïQ¸.g¹·×f¸ïQ¸ïQ¸~Th¸s¦¸^_œ¸¨f|¸ F,¸ F,¸ F,¸ïˆ°¸s¦¸ïˆ°¸ÖC@¸„ á·BU·™4|7 ¯· ¯·à‘·ÔŽ¥7ÔŽ¥7å;68ÖB"8ÔŽ¥7ÔŽ¥7ÖB"8ÏR8ÖB"8=J82B8tTr89R—8=J8=J8å;68tTr8=J82B89R—8=J8tTr8¶d¡8ÄÉ8‚y«8„©¿89Bò8„©¿8¶d¡8ÄÉ82B8¶d¡8ÄÉ8{µ8ÄÉ8I è89Bò8¶eü8ùÿÝ8X9¶eü8ùÿÝ8YE9{µ8{µ8ÄÉ8‚y«89R—8¶d¡89R—8‚y«8tTr8tTr8å;68=J8ÖB"8Úô7tTr8=J8ÖB"8Úô7Ú•5 ¯· ¯·ñ3d¶ÖC@¸ÖC@¸„ á·~Th¸±HT¸×f¸N’¸~Th¸ F,¸~Th¸~Th¸ÖC@¸×f¸.g¹·.g¹·ñ3d¶P&Í71§-71§-7ÔŽ¥7Úô7ÖB"8å;68ÏR8ÏR8ÔŽ¥7Ì4ƒ8tTr8Ì4ƒ8jE^82B8tTr89R—8tTr8Ì4ƒ8=J82B8{µ82B8Ì4ƒ82B89R—8{µ8‚y«8‚y«8„©¿89R—8¶d¡8ZáÓ8„©¿8‚y«8ÖB"8å;682B8‚y«82B8Ì4ƒ8{µ8Ì4ƒ8jE^82B8jE^8Ì4ƒ8tTr8Ì4ƒ8Ì4ƒ89R—8tTr82B8ÖB"89R—8jE^8=J8Úô7ÖB"8™4|7Úô71§-71§-7í?¿6ÔŽ¥71§-7 ¯·™4|7ÖB"82B8ÏR8ÔŽ¥7™4|7™4|7Úô7ÔŽ¥7ÔŽ¥7Ú•5 ¯·à‘·BU· ¯·Ú•5à‘·×f¸.g¹·„ á·í?¿6à‘·×f¸~Th¸^_œ¸ÖC@¸à‘· F,¸BU· ¯·.g¹·BU·ñ3d¶„ á·ÖC@¸s¦¸±HT¸N’¸ÖC@¸ÖC@¸X?ˆ¸×f¸ÖC@¸×f¸„ á·BU·×f¸s¦¸à‘· ¯·à‘· ¯· ¯·Ú•5™4|7ñ3d¶í?¿6 ¯·1§-7ÖB"8ÖB"8P&Í79R—82B8¶d¡8tTr8„©¿8{µ8jE^82B82B8å;68=J8=J8¶d¡8tTr8ÄÉ8ÏR8jE^8=J8=J8ÏR8ÔŽ¥7tTr8¶d¡8tTr8jE^8å;68P&Í7ÏR8=J82B8jE^82B82B8¶d¡8=J89R—8=J8jE^81§-7 ¯·™4|7Úô7BU·1§-7.g¹·à‘· F,¸ ¯·×f¸„ á·×f¸ïQ¸ F,¸±HT¸~Th¸ÖC@¸.g¹·ïQ¸×f¸.g¹·ïQ¸×f¸×f¸™4|7ÖB"8™4|7P&Í7Úô7™4|7ñ3d¶í?¿6 ¯· ¯·Ú•51§-7Ú•5à‘·Ú•5P&Í7=J8å;68=J8Ì4ƒ8‚y«89R—8{µ89Bò8{µ8ùÿÝ8X9‚y«8ùÿÝ8{µ8„©¿8„©¿8ÄÉ8I è8{µ8I è82B8„©¿8ùÿÝ89R—8tTr8‚y«8„©¿89R—8YE9¶eü8I è8ùÿÝ8YE99Bò8‚y«8ZáÓ8ùÿÝ8ZáÓ82B8Ì4ƒ82B8tTr8P&Í7ÖB"89R—8ÖB"8ÔŽ¥72B8å;681§-7ÏR81§-71§-7.g¹·×f¸„ á·„ á·×f¸×f¸N’¸ûºÄ¸s¦¸ûºÄ¸ô º¸F5í¸s¦¸$ã¸$ã¸F5í¸³ ¹üйX÷¸êÖθô º¸$ã¸üй ¾¹³ ¹Ëø¹=#¹ ¾¹ûºÄ¸Œä +¹ ¾¹=#¹Î—3¹X÷¸ ¾¹³ ¹üй ¾¹ ¾¹X÷¸X÷¸ûºÄ¸^_œ¸^_œ¸ F,¸s¦¸^_œ¸ïQ¸X?ˆ¸s¦¸N’¸×f¸×f¸ïQ¸.g¹·ñ3d¶ñ3d¶P&Í7í?¿6Ú•5™4|7ÏR8P&Í7ÔŽ¥7P&Í7jE^89R—8¶d¡8¶d¡8{µ8Ì4ƒ8å;68=J8Ì4ƒ8Ì4ƒ82B8=J8jE^8ÖB"8jE^8P&Í7Úô7ÖB"8ÏR8Úô7™4|7à‘·í?¿6à‘·×f¸±HT¸ÖC@¸ïQ¸ÖC@¸ F,¸ F,¸ F,¸±HT¸„ á·×f¸×f¸~Th¸ïˆ°¸N’¸X?ˆ¸ïˆ°¸ûºÄ¸êÖθô º¸s¦¸$ã¸$ã¸F5í¸êÖθ$ã¸êÖθ$ã¸^_œ¸$ã¸$㸳 ¹Œä +¹¨ôظs¦¸^_œ¸N’¸ûºÄ¸~Th¸~Th¸±HT¸~Th¸^_œ¸~Th¸ F,¸¨f|¸¨f|¸~Th¸ F,¸„ á·¨f|¸×f¸„ á·„ á·.g¹·à‘·BU·™4|7í?¿6í?¿6™4|7ÔŽ¥7ÏR8ÏR8™4|7ÏR8Úô7ÏR8™4|71§-7™4|71§-71§-7Ú•5ñ3d¶Úô7à‘·ÔŽ¥7™4|71§-7Ú•5í?¿6 ¯·ñ3d¶BU·Ú•5à‘·.g¹·×f¸.g¹·„ á·.g¹·ïQ¸„ á·±HT¸N’¸X?ˆ¸N’¸s¦¸s¦¸±HT¸ÖC@¸~Th¸~Th¸^_œ¸N’¸^_œ¸X?ˆ¸N’¸$ã¸$ã¸üй¨ôظ¨ôظN’¸ô º¸X?ˆ¸ïˆ°¸ïˆ°¸ÖC@¸~Th¸~Th¸N’¸ F,¸±HT¸~Th¸~Th¸×f¸„ á·~Th¸×f¸.g¹·à‘·„ á·™4|7í?¿6í?¿6ñ3d¶Úô7 ¯·Úô7P&Í7P&Í7ÏR8=J8P&Í7Úô7å;68ÏR8ÖB"8ÖB"8ÖB"8Ì4ƒ8=J8tTr8{µ8jE^89R—8tTr8ÖB"89R—8jE^8jE^8ÖB"89R—8ÏR8å;68jE^8tTr82B8Ì4ƒ8ÏR8=J8=J8ÖB"8å;68Úô7ÖB"8í?¿6å;68í?¿6BU·Ú•5Ú•5BU·.g¹· F,¸N’¸~Th¸±HT¸N’¸ô º¸N’¸X?ˆ¸ûºÄ¸ô º¸¨ôظêÖθûºÄ¸¨ôظ$ã¸N’¸N’¸~Th¸^_œ¸N’¸~Th¸N’¸N’¸±HT¸X?ˆ¸^_œ¸N’¸^_œ¸N’¸N’¸ÖC@¸×f¸±HT¸„ á·BU·×f¸×f¸.g¹·„ á·™4|7à‘·Ú•5Ú•5×f¸ñ3d¶à‘·ñ3d¶1§-7í?¿6Úô7Úô7ÏR8ÖB"82B8¶d¡8Ì4ƒ8å;68tTr89R—89Bò8I è8=J82B8¶d¡8Úô7{µ8Ì4ƒ8jE^8¶d¡82B8ZáÓ8jE^8tTr8¶d¡8jE^8=J8Ì4ƒ8{µ8å;682B82B8tTr8jE^82B8=J8Úô7tTr8tTr8ÏR8ÔŽ¥7Úô7ÖB"8tTr8tTr8P&Í7Ì4ƒ8ÔŽ¥7í?¿61§-7ÔŽ¥7Ú•5 ¯·.g¹· F,¸à‘·à‘·×f¸à‘·~Th¸N’¸ÖC@¸ïˆ°¸±HT¸~Th¸ F,¸N’¸¨f|¸ÖC@¸ïQ¸¨f|¸±HT¸N’¸ûºÄ¸s¦¸s¦¸±HT¸×f¸N’¸¨f|¸±HT¸„ á·à‘·BU· ¯·í?¿6„ á·ñ3d¶ÔŽ¥7BU·í?¿61§-7ÖB"8ÏR8=J8P&Í7Úô79R—8=J82B89R—8tTr82B82B89R—8ÏR8å;68=J8P&Í7å;68ÖB"8jE^8jE^8ÏR8jE^8tTr8ÏR8=J82B8P&Í7ÏR8jE^8Ì4ƒ8Ì4ƒ8Ì4ƒ8tTr82B82B89R—89R—82B8jE^8ÏR8Úô7ÖB"8í?¿61§-7ÔŽ¥7ÏR8Ì4ƒ8ÔŽ¥7P&Í71§-7.g¹·Ú•5Ú•5„ á·„ á·à‘·~Th¸„ á·×f¸±HT¸±HT¸~Th¸ô º¸s¦¸N’¸¨f|¸ÖC@¸ F,¸X?ˆ¸±HT¸±HT¸^_œ¸êÖθ¨ôظûºÄ¸~Th¸±HT¸¨f|¸ F,¸±HT¸ F,¸ñ3d¶1§-7ÖB"8å;68™4|7ÔŽ¥7ÔŽ¥7Úô7ÖB"8å;68Úô7Úô7P&Í72B8å;68å;68¶d¡8jE^8¶d¡8tTr8tTr8Ì4ƒ82B82B82B8‚y«8¶d¡8Ì4ƒ8=J8Ì4ƒ8Ì4ƒ8Ì4ƒ8Ì4ƒ8jE^89R—8ÏR8jE^8ÏR82B8‚y«8Ì4ƒ8Úô7¶d¡89R—8„©¿8ÄÉ8‚y«8Ì4ƒ89R—89R—89R—89Bò8¶d¡8„©¿8tTr8å;68tTr8tTr89R—8tTr8Ì4ƒ8å;68=J8å;68tTr8ÖB"8ÖB"8P&Í7ÖB"8Úô71§-71§-7Ú•5 ¯·.g¹·ñ3d¶Ú•5ïQ¸ÖC@¸ÖC@¸~Th¸±HT¸¨f|¸s¦¸^_œ¸F5í¸ô º¸ïˆ°¸ûºÄ¸^_œ¸¨f|¸^_œ¸ïQ¸ ¯·×f¸ïQ¸ïQ¸.g¹·à‘·~Th¸×f¸Ú•5í?¿6í?¿6™4|7à‘·.g¹·ÔŽ¥7=J8jE^82B8ÖB"8Úô7=J8jE^8Ì4ƒ8=J8tTr8Ì4ƒ8‚y«8„©¿89R—8‚y«8I è8ÄÉ8„©¿8{µ82B8Ì4ƒ8jE^8ÖB"8å;68tTr8=J8Úô7ÏR8ÏR8Úô7å;68ÖB"8ÔŽ¥7í?¿6í?¿6ÏR8Úô7Ú•51§-7Ú•5BU·ñ3d¶„ á·ïQ¸×f¸à‘·±HT¸^_œ¸×f¸.g¹·.g¹·.g¹·BU·ÖC@¸ÖC@¸ïQ¸X?ˆ¸s¦¸N’¸êÖθêÖθêÖθ¨ôظüйûºÄ¸F5í¸F5í¸ô º¸X÷¸X÷¸¨ôظs¦¸N’¸¨ôظ$ã¸F5í¸¨ôظ ¾¹üй¨ôظF5í¸êÖθûºÄ¸N’¸ô º¸X÷¸ûºÄ¸ÖC@¸±HT¸N’¸X?ˆ¸ô º¸N’¸±HT¸„ á· ¯·BU·™4|7P&Í7ÏR8ÏR8ÏR89R—8tTr8Ì4ƒ8‚y«89R—8tTr8¶d¡8ùÿÝ8{µ8‚y«8„©¿89R—8I è8„©¿8‚y«8‚y«8{µ8‚y«8{µ8Ì4ƒ8{µ8„©¿8ZáÓ8ZáÓ8‚y«8„©¿89R—8jE^8‚y«82B8¶d¡8Ì4ƒ82B8ÏR81§-7ÏR8P&Í7 ¯·™4|7ÔŽ¥7ñ3d¶.g¹·BU·à‘·BU·ñ3d¶à‘·ïQ¸ñ3d¶ïQ¸ñ3d¶BU·×f¸ïQ¸~Th¸~Th¸^_œ¸s¦¸s¦¸êÖθûºÄ¸ûºÄ¸ûºÄ¸ïˆ°¸êÖθ¸¨ôظ¸¨ôظ¨ôظêÖθ ¾¹F5í¸ûºÄ¸N’¸N’¸N’¸¨f|¸ÖC@¸~Th¸×f¸.g¹·ñ3d¶Ú•5P&Í7Úô7.g¹·Ú•5í?¿6ñ3d¶™4|7P&Í7Úô71§-7P&Í7P&Í7™4|7™4|7ÖB"8Úô7ÔŽ¥7Úô7å;68=J8tTr8ÏR8=J8jE^89R—8tTr89R—89R—8ÄÉ8„©¿89R—8Ì4ƒ8‚y«8ZáÓ8ÄÉ8{µ8{µ82B8P&Í7ÏR8ÔŽ¥7ÔŽ¥7å;68ñ3d¶1§-7Úô7ÖB"8P&Í7ÔŽ¥71§-7™4|7Ú•5í?¿6Ú•5.g¹·„ á·1§-7BU·à‘·ÖC@¸„ á·ñ3d¶à‘·.g¹·.g¹·Ú•5ÖC@¸±HT¸BU· F,¸ÖC@¸à‘· ¯· F,¸¨f|¸ F,¸„ á·„ á·.g¹·BU·BU·„ á·„ á· ¯·í?¿6.g¹·í?¿6BU·à‘· ¯· ¯·.g¹·BU·à‘·à‘·1§-7ïQ¸±HT¸×f¸×f¸.g¹·×f¸ïQ¸ F,¸×f¸ïQ¸ñ3d¶í?¿6à‘· ¯·BU·1§-7ÔŽ¥7jE^8jE^8ÔŽ¥7ÏR8ÖB"8Úô7Ì4ƒ8jE^8P&Í7¶d¡8Ì4ƒ8jE^8ÔŽ¥7ÏR8™4|7ÔŽ¥7ÏR8å;68™4|71§-71§-7í?¿6BU·„ á·„ á·Ú•5à‘·„ á·N’¸X?ˆ¸N’¸N’¸N’¸ÖC@¸N’¸„ á·×f¸„ á·~Th¸N’¸~Th¸ïQ¸ F,¸¨f|¸~Th¸¨f|¸N’¸N’¸±HT¸ÖC@¸ÖC@¸ÖC@¸~Th¸ÖC@¸ïˆ°¸^_œ¸±HT¸ÖC@¸ F,¸ïQ¸×f¸~Th¸×f¸~Th¸N’¸ûºÄ¸^_œ¸ïQ¸ÖC@¸±HT¸×f¸.g¹·ñ3d¶ÏR8Ú•5ÔŽ¥7Úô7ÖB"8jE^8ÏR8ÏR8ÏR8å;68ÏR8å;68=J8å;68ÏR8=J8„©¿8tTr8{µ89R—89R—8jE^8¶d¡8I è89Bò8ÄÉ8ZáÓ8Ì4ƒ8jE^8Ì4ƒ8ÄÉ89R—8¶d¡8Ì4ƒ8=J8‚y«8ÄÉ8¶d¡82B8tTr8=J8„©¿89R—8‚y«8jE^8Ì4ƒ8tTr8ÖB"8Ì4ƒ8tTr8jE^8P&Í7ÔŽ¥7BU·.g¹·BU·Ú•5„ á· ¯· ¯·BU· ¯· F,¸ïQ¸.g¹·ïQ¸N’¸^_œ¸s¦¸$ã¸ïˆ°¸ô º¸s¦¸~Th¸^_œ¸N’¸±HT¸s¦¸s¦¸ïˆ°¸ûºÄ¸s¦¸N’¸s¦¸„ á·~Th¸„ á·„ á·X?ˆ¸ÖC@¸ÖC@¸ÖC@¸N’¸×f¸×f¸X?ˆ¸à‘·^_œ¸N’¸ÖC@¸×f¸±HT¸à‘· F,¸ïQ¸±HT¸×f¸×f¸„ á·ÖC@¸.g¹· F,¸„ á·BU· ¯·à‘·Ú•5à‘·P&Í7™4|7í?¿6ÏR8ÏR8™4|71§-7™4|71§-71§-7™4|7P&Í7Úô7ÔŽ¥7ÖB"8ÖB"8tTr8å;68=J8Ì4ƒ82B8=J8„©¿8ÏR8™4|7Úô7BU·|Pd|1|24600|2013-282T15:32:45.397 T {¸Æþ>¸Œg¸,S¸dˆÞ·“ª‘¸,S¸,S¸Œg¸“ª‘¸“ª‘¸+¸“ª‘¸Œg¸“ª‘¸“ª‘¸†#¸ö ¸,S¸Æþ>¸³»›¸,S¸T {¸Æþ>¸ÿ^·ö ¸+¸¨»5;š€7;š€7¨»5$‡#8âÉ6âP·B¤P¶¨»5>¨7âÉ6)»·O 27¨»5Û㶷¨»5$‡#8;š€7;š€7O 27¨»5>¨7>¨7-‹_8-‹_8-‹_8؃8-‹_8-‹_8Ôõ—8g¬8g¬8g¬8ÈhÊ8ÈhÊ8g¬8‚4¶8¬MÀ8g¬8Ôõ—8g¬8ÈhÊ8£å8-‹_8-‹_8؃8-‹_8žšs8V‚K8Ôõ—8g¬8V‚K8-‹_8žšs8Ôõ—8V‚K8¼€78¨»5°ªÏ7¨»5>¨7âÉ6B¤P¶âP·†#¸Æþ>¸Û㶷†#¸T {¸“ª‘¸,S¸Æþ>¸Œg¸Œg¸“ª‘¸7Ï¥¸7Ï¥¸—oâ¸7Ï¥¸7Ï¥¸–2θÞü¹¸Þü¹¸“ª‘¸T {¸“ª‘¸ÆĸdˆÞ·dˆÞ·ö ¸ö ¸)»·“ª‘¸ÿ^·`÷7O 27âP·O 27–8`÷7žšs8¼€78V‚K8`÷7B¤P¶O 27žšs8$‡#8؃8V‚K8Ôõ—8Ôõ—8؃8Ôõ—8Ôõ—8¬MÀ8y¤Þ8¾…Ô8‚4¶8ÈhÊ8îæò8„ +ý8åÄè8„ +ý8Ôõ—8îæò8¬MÀ8v¢8؃8žšs8V‚K8V‚K8V‚K8V‚K8£å8Ôõ—8‚4¶8؃8g¬8¬MÀ8£å8‚4¶8g¬8؃8v¢8v¢8$‡#8-‹_8žšs8Ôõ—8v¢8£å8-‹_8Ôõ—8$‡#8-‹_8$‡#8`÷7$‡#8žšs8B¤P¶âÉ6°ªÏ7)»·âÉ6;š€7)»·ö ¸;š€7ÿ^·O 27¨»5âP·¨»5†#¸B¤P¶âÉ6°ªÏ7¨»5Û㶷)»·âP·âÉ6âP·†#¸ÿ^·ÿ^·¨»5ÿ^·ö ¸ö ¸+¸Æþ>¸Û㶷ö ¸+¸+¸,S¸âP·ö ¸†#¸³»›¸“ª‘¸Œg¸œ‡¸ö ¸Œg¸T {¸dˆÞ·,S¸ö ¸†#¸†#¸Æþ>¸âP·dˆÞ·¨»5O 27âP·âP·ö ¸Û㶷B¤P¶dˆÞ·âÉ6B¤P¶>¨7V‚K8°ªÏ7–8;š€7¼€78-‹_8O 27âÉ6°ªÏ7O 27V‚K8O 27;š€7°ªÏ7dˆÞ·O 27;š€7O 27–8>¨7âÉ6-‹_8V‚K8°ªÏ7âÉ6;š€7°ªÏ7¼€78°ªÏ7)»·dˆÞ·ÿ^·Û㶷Æþ>¸Æþ>¸ö ¸“ª‘¸œ‡¸³»›¸³»›¸Œg¸³»›¸œ‡¸“ª‘¸T {¸,S¸Æþ>¸ú䯸,S¸³»›¸ ì¸–2θÆĸÞü¹¸´k¹ ’ +¹–2θú䯸Æĸ“ª‘¸7Ï¥¸Þü¹¸ú䯸7Ï¥¸“ª‘¸+¸+¸ö ¸ö ¸dˆÞ·ÿ^·âP·;š€7O 27–8–8>¨7–8žšs8؃8V‚K8$‡#8`÷7žšs8°ªÏ7-‹_8-‹_8$‡#8`÷7v¢8-‹_8–8¼€78-‹_8$‡#8V‚K8v¢8¬MÀ8‚4¶8¬MÀ8îæò8v¢8ÈhÊ8¬MÀ8g¬8¼€78g¬8ÈhÊ8Ôõ—8v¢8؃8؃8žšs8–8-‹_8–8$‡#8âP·¨»5B¤P¶O 27†#¸ÿ^·âP·dˆÞ·B¤P¶âÉ6âP·ÿ^·Æþ>¸³»›¸Œg¸–2θŒg¸Æþ>¸Þü¹¸Æþ>¸“ª‘¸³»›¸Æĸ,S¸T {¸+¸+¸+¸³»›¸³»›¸³»›¸“ª‘¸“ª‘¸,S¸†#¸âP·ö ¸ÿ^·†#¸)»·–8O 27žšs8£å8¼€78°ªÏ7؃8Ôõ—8Ôõ—8؃8žšs8žšs8‚4¶8‚4¶8£å8£å8žšs8V‚K8$‡#8$‡#8Ôõ—8-‹_8¬MÀ8¬MÀ8‚4¶8ÈhÊ8v¢8v¢8Ôõ—8V‚K8؃8V‚K8£å8žšs8Ôõ—8‚4¶8g¬8v¢8£å8¼€78žšs8žšs8`÷7$‡#8°ªÏ7–8)»·ö ¸âP·†#¸œ‡¸,S¸,S¸B¤P¶Û㶷Æþ>¸Û㶷+¸+¸†#¸T {¸7Ï¥¸“ª‘¸ÆĸÞü¹¸Þü¹¸ ì¸7Ï¥¸Þü¹¸Þü¹¸ú䯸´k¹?³ö¸´k¹–2θ»¹´k¹8Pظ„~¹?³ö¸ ’ +¹ ì¸ ’ +¹´k¹„~¹U‘B¹=¦¹=¦¹ ’ +¹ ’ +¹=¦¹?³ö¸ ’ +¹–2θ–2θ ì¸ú䯸Þü¹¸„~¹œ‡¸7Ï¥¸³»›¸³»›¸7Ï¥¸“ª‘¸,S¸³»›¸,S¸ö ¸†#¸Æþ>¸Û㶷)»·Æþ>¸Û㶷;š€7)»·âP·âÉ6`÷7âÉ6ö ¸¨»5Û㶷âÉ6B¤P¶O 27;š€7âÉ6¨»5ÿ^·†#¸)»·âÉ6âP·)»·âÉ6;š€7âÉ6;š€7`÷7âÉ6âP·âP·Û㶷B¤P¶Û㶷dˆÞ·+¸dˆÞ·†#¸,S¸7Ï¥¸+¸Æþ>¸Œg¸,S¸Œg¸³»›¸œ‡¸T {¸“ª‘¸“ª‘¸Æþ>¸,S¸³»›¸7Ï¥¸ú䯸“ª‘¸Æþ>¸ö ¸³»›¸Þü¹¸Þü¹¸ú䯸“ª‘¸“ª‘¸Æþ>¸)»·O 27)»·;š€7B¤P¶°ªÏ7–8°ªÏ7–8–8ÿ^·)»·âP·)»·âÉ6$‡#8B¤P¶O 27âÉ6–8–8°ªÏ7V‚K8>¨7âÉ6`÷7;š€7-‹_8؃8-‹_8V‚K8؃8-‹_8žšs8ÈhÊ8žšs8؃8؃8¼€78°ªÏ7`÷7Ôõ—8g¬8v¢8$‡#8$‡#8-‹_8£å8žšs8–8¼€78–8âÉ6°ªÏ7;š€7`÷7)»·°ªÏ7°ªÏ7)»·âP·ÿ^·âP·)»·Û㶷†#¸âP·ö ¸dˆÞ·+¸dˆÞ·Œg¸Œg¸,S¸“ª‘¸7Ï¥¸,S¸œ‡¸,S¸Œg¸ú䯸³»›¸+¸+¸+¸Œg¸“ª‘¸³»›¸“ª‘¸Þü¹¸7Ï¥¸Œg¸,S¸Æþ>¸ö ¸dˆÞ·Æþ>¸dˆÞ·ö ¸†#¸B¤P¶âÉ6B¤P¶¨»5B¤P¶B¤P¶¨»5âÉ6`÷7>¨7âÉ6Û㶷B¤P¶;š€7âÉ6ÿ^·;š€7¨»5B¤P¶B¤P¶$‡#8–8–8–8–8¼€78žšs8¼€78؃8$‡#8¼€78>¨7°ªÏ7£å8$‡#8V‚K8-‹_8;š€7°ªÏ7)»·B¤P¶;š€7O 27B¤P¶)»·O 27)»·B¤P¶)»·B¤P¶ÿ^·)»·ÿ^·âP·†#¸†#¸Û㶷ÿ^·Æþ>¸T {¸Æĸ8Pظ7Ï¥¸³»›¸³»›¸7Ï¥¸Æþ>¸+¸+¸“ª‘¸ö ¸+¸,S¸†#¸†#¸ö ¸Œg¸7Ï¥¸–2θÞü¹¸7Ï¥¸´k¹–2θ³»›¸Þü¹¸“ª‘¸ö ¸“ª‘¸ö ¸,S¸“ª‘¸dˆÞ·†#¸B¤P¶>¨7B¤P¶O 27)»·$‡#8–8>¨7`÷7¼€78؃8؃8‚4¶8g¬8ÈhÊ8„ +ý8ÈhÊ8åÄè8¾…Ô8Í—9îæò8„ +ý8îæò8Í—9„ +ý8¾…Ô8ÈhÊ8åÄè8v¢8£å8y¤Þ8g¬8£å8g¬8£å8£å8-‹_8v¢8‚4¶8–8؃8£å8v¢8؃8–8`÷7$‡#8;š€7`÷7V‚K8–8$‡#8`÷7`÷7–8>¨7`÷7`÷7>¨7B¤P¶dˆÞ·;š€7¼€78¨»5âP·âP·;š€7âÉ6)»·)»·)»·Û㶷ÿ^·dˆÞ·dˆÞ·+¸)»·Û㶷ö ¸†#¸Œg¸dˆÞ·)»·Û㶷+¸âÉ6+¸ÿ^·+¸Æþ>¸Æþ>¸†#¸+¸âP·âP·B¤P¶)»·)»·°ªÏ7°ªÏ7–8O 27°ªÏ7-‹_8žšs8-‹_8žšs8Ôõ—8ÈhÊ8y¤Þ8g¬8¾…Ô8¬MÀ8ÈhÊ8¾…Ô8åÄè8îæò8åÄè8y¤Þ8¿ 9äè9«9Y,'9Çþ9„ +ý8„ +ý8„ +ý8Í—9äè9îæò8 Ó9äè9¿ 9Çþ9Í—9y¤Þ8¬MÀ8v¢8¬MÀ8‚4¶8Ôõ—8g¬8¼€78°ªÏ7–8–8;š€7`÷7;š€7>¨7;š€7$‡#8¼€78-‹_8$‡#8$‡#8>¨7°ªÏ7O 27O 27¨»5¨»5ÿ^·;š€7)»·ö ¸,S¸âP·Û㶷†#¸†#¸†#¸dˆÞ·+¸+¸dˆÞ·³»›¸+¸T {¸Þü¹¸Þü¹¸ú䯸Þü¹¸,S¸ö ¸ö ¸†#¸dˆÞ·Û㶷Û㶷;š€7dˆÞ·âP·âÉ6ÿ^·)»·°ªÏ7°ªÏ7°ªÏ7>¨7¼€78$‡#8°ªÏ7°ªÏ7V‚K8$‡#8؃8°ªÏ7–8$‡#8-‹_8–8V‚K8V‚K8V‚K8Ôõ—8ÈhÊ8ÈhÊ8g¬8žšs8v¢8-‹_8Ôõ—8g¬8žšs8V‚K8£å8Ôõ—8žšs8-‹_8`÷7°ªÏ7–8-‹_8°ªÏ7–8âÉ6`÷7O 27$‡#8)»·;š€7B¤P¶¨»5B¤P¶+¸†#¸Û㶷¨»5B¤P¶dˆÞ·ö ¸Û㶷Û㶷†#¸ö ¸ö ¸†#¸†#¸,S¸Æþ>¸T {¸Æþ>¸³»›¸+¸Æþ>¸“ª‘¸Æþ>¸ö ¸âP·B¤P¶†#¸)»·)»·âP·B¤P¶)»·B¤P¶ö ¸dˆÞ·ö ¸Û㶷ÿ^·,S¸ö ¸dˆÞ·†#¸B¤P¶B¤P¶Û㶷O 27B¤P¶O 27–8`÷7°ªÏ7Ôõ—8£å8¼€78£å8£å8žšs8V‚K8£å8`÷7£å8؃8-‹_8£å8g¬8žšs8v¢8Ôõ—8Ôõ—8-‹_8v¢8¼€78V‚K8žšs8–8$‡#8>¨7B¤P¶âÉ6âP·)»·)»·âÉ6B¤P¶`÷7°ªÏ7âÉ6–8;š€7–8V‚K8£å8؃8-‹_8£å8-‹_8V‚K8$‡#8âÉ6O 27O 27)»·ÿ^·)»·dˆÞ·,S¸T {¸Æþ>¸Œg¸Œg¸³»›¸Æĸ,S¸†#¸“ª‘¸Æþ>¸Œg¸Œg¸“ª‘¸T {¸“ª‘¸Þü¹¸T {¸³»›¸Œg¸“ª‘¸Œg¸Œg¸+¸“ª‘¸“ª‘¸“ª‘¸,S¸Œg¸“ª‘¸ú䯸Œg¸Æþ>¸†#¸ÿ^·)»·B¤P¶ÿ^·Û㶷)»·B¤P¶¨»5)»·)»·dˆÞ·)»·$‡#8$‡#8–8žšs8$‡#8$‡#8-‹_8g¬8ÈhÊ8ÈhÊ8‚4¶8ÈhÊ8ÈhÊ8åÄè8¬MÀ8v¢8‚4¶8ÈhÊ8£å8¬MÀ8g¬8žšs8Ôõ—8žšs8-‹_8žšs8žšs8`÷7°ªÏ7>¨7B¤P¶âÉ6–8O 27¨»5>¨7;š€7O 27`÷7>¨7¨»5;š€7dˆÞ·†#¸†#¸âP·dˆÞ·Æþ>¸†#¸Æþ>¸³»›¸“ª‘¸“ª‘¸8Pظ“ª‘¸Þü¹¸ú䯸ÆĸÞü¹¸ú䯸 ì¸“ª‘¸7Ï¥¸´k¹„~¹oý#¹º)¹ ’ +¹ ì¸—oâ¸Þü¹¸³»›¸T {¸Æþ>¸,S¸Æþ>¸“ª‘¸+¸ö ¸Û㶷ö ¸¨»5âP·Û㶷âP·O 27¼€78°ªÏ7`÷7;š€7žšs8$‡#8žšs8v¢8Ôõ—8v¢8؃8‚4¶8„ +ý8¬MÀ8¬MÀ8‚4¶8؃8g¬8-‹_8v¢8-‹_8g¬8‚4¶8v¢8Ôõ—8¬MÀ8؃8؃8‚4¶8g¬8-‹_8V‚K8–8-‹_8Ôõ—8-‹_8$‡#8V‚K8B¤P¶$‡#8¨»5B¤P¶Û㶷)»·†#¸+¸+¸,S¸,S¸+¸Æþ>¸T {¸dˆÞ·,S¸+¸ö ¸ú䯸“ª‘¸“ª‘¸“ª‘¸Œg¸ö ¸“ª‘¸Æþ>¸T {¸“ª‘¸Þü¹¸,S¸T {¸“ª‘¸Æþ>¸ú䯸³»›¸,S¸+¸ú䯸“ª‘¸Æþ>¸Œg¸7Ï¥¸Æþ>¸dˆÞ·“ª‘¸,S¸†#¸Æþ>¸†#¸dˆÞ·B¤P¶dˆÞ·Û㶷dˆÞ·Û㶷âÉ6;š€7;š€7`÷7£å8$‡#8`÷7$‡#8V‚K8؃8g¬8-‹_8g¬8¬MÀ8؃8g¬8£å8Ôõ—8Ôõ—8¼€78v¢8îæò8¾…Ô8g¬8ÈhÊ8£å8¬MÀ8¬MÀ8¾…Ô8£å8¬MÀ8îæò8؃8£å8¬MÀ8îæò8¬MÀ8‚4¶8Ôõ—8žšs8£å8g¬8v¢8g¬8£å8؃8y¤Þ8؃8g¬8؃8V‚K8–8°ªÏ7B¤P¶âÉ6O 27âÉ6;š€7âP·âÉ6B¤P¶)»·Û㶷†#¸+¸Æþ>¸œ‡¸T {¸T {¸,S¸“ª‘¸ú䯸³»›¸T {¸†#¸,S¸³»›¸Œg¸†#¸Æþ>¸†#¸dˆÞ·+¸,S¸T {¸,S¸†#¸ÿ^·ö ¸Æþ>¸ö ¸Û㶷Û㶷Æþ>¸†#¸†#¸;š€7)»·>¨7>¨7žšs8-‹_8V‚K8>¨7°ªÏ7-‹_8¼€78؃8؃8žšs8Ôõ—8V‚K8$‡#8ÈhÊ8ÈhÊ8g¬8g¬8-‹_8£å8¬MÀ8¬MÀ8g¬8åÄè8v¢8g¬8¾…Ô8£å8V‚K8V‚K8–8`÷7)»·âP·°ªÏ7B¤P¶ö ¸Œg¸T {¸,S¸7Ï¥¸Œg¸“ª‘¸,S¸³»›¸³»›¸“ª‘¸Þü¹¸³»›¸—oâ¸Þü¹¸7Ï¥¸ú䯸–2θú䯸8Pظ´k¹—o⸗o⸴k¹šÐ¹¸æ¹¸æ¹?³ö¸ ’ +¹ ì¸šÐ¹º)¹–,.¹`w=¹„~¹„~¹=¦¹Þü¹¸—oâ¸ú䯸—oâ¸?³ö¸—oâ¸7Ï¥¸Œg¸Œg¸“ª‘¸,S¸†#¸,S¸dˆÞ·,S¸,S¸Œg¸T {¸,S¸“ª‘¸†#¸†#¸ö ¸âP·Û㶷ÿ^·dˆÞ·¨»5¨»5;š€7$‡#8°ªÏ7O 27¨»5)»·>¨7âP·âÉ6°ªÏ7–8V‚K8žšs8°ªÏ7؃8-‹_8>¨7°ªÏ7¨»5âP·–8–8`÷7;š€7âP·O 27dˆÞ·ÿ^·Û㶷âP·âP·âP·ÿ^·âÉ6dˆÞ·dˆÞ·âP·ÿ^·dˆÞ·†#¸ö ¸+¸“ª‘¸+¸,S¸³»›¸“ª‘¸Œg¸“ª‘¸³»›¸“ª‘¸Æĸ8Pظ—oâ¸Þü¹¸?³ö¸ ì¸?³ö¸—oâ¸8PظÆĸÆĸ“ª‘¸Æĸ7Ï¥¸“ª‘¸“ª‘¸Œg¸†#¸,S¸+¸dˆÞ·ö ¸ÆĸT {¸†#¸Û㶷+¸Û㶷B¤P¶âP·O 27;š€7)»·âP·$‡#8>¨7ÿ^·âP·;š€7`÷7¼€78؃8$‡#8$‡#8؃8`÷7¼€78V‚K8-‹_8-‹_8¼€78`÷7`÷7¼€78$‡#8–8V‚K8>¨7)»·¼€78žšs8-‹_8V‚K8V‚K8V‚K8-‹_8-‹_8–8°ªÏ7`÷7>¨7B¤P¶âÉ6)»·)»·)»·ÿ^·B¤P¶dˆÞ·†#¸dˆÞ·ÿ^·B¤P¶âP·âP·°ªÏ7Û㶷¨»5Û㶷Û㶷dˆÞ·+¸ö ¸;š€7-‹_8;š€7¼€78¨»5âÉ6¨»5âÉ6B¤P¶âP·dˆÞ·âP·B¤P¶;š€7;š€7O 27`÷7;š€7`÷7°ªÏ7°ªÏ7âÉ6B¤P¶)»·Û㶷ÿ^·¨»5°ªÏ7;š€7°ªÏ7;š€7>¨7>¨7V‚K8¼€78$‡#8âÉ6`÷7V‚K8`÷7؃8°ªÏ7¼€78Ôõ—8¼€78;š€7£å8-‹_8¼€78>¨7–8؃8¼€78¼€78V‚K8Ôõ—8>¨7`÷7;š€7$‡#8–8–8–8âP·†#¸¨»5†#¸¨»5¨»5>¨7`÷7>¨7O 27O 27Û㶷T {¸+¸œ‡¸†#¸+¸T {¸“ª‘¸“ª‘¸³»›¸7Ï¥¸7Ï¥¸“ª‘¸³»›¸ú䯸 ì¸³»›¸?³ö¸ ’ +¹Æĸ—o⸠’ +¹„~¹?³ö¸ ì¸ ì¸ú䯸ú䯸Æĸ³»›¸–2θœ‡¸Œg¸³»›¸–2θ³»›¸T {¸Œg¸†#¸+¸Æþ>¸†#¸Û㶷dˆÞ·âP·;š€7°ªÏ7$‡#8$‡#8;š€7O 27>¨7âÉ6–8`÷7-‹_8؃8V‚K8£å8؃8žšs8‚4¶8Ôõ—8Ôõ—8v¢8Ôõ—8ÈhÊ8¬MÀ8¬MÀ8ÈhÊ8y¤Þ8îæò8y¤Þ8„ +ý8Çþ9y¤Þ8y¤Þ8«9y¤Þ8¾…Ô8‚4¶8؃8؃8g¬8Ôõ—8؃8V‚K8ÈhÊ8g¬8؃8žšs8$‡#8$‡#8–8¨»5O 27°ªÏ7O 27¨»5¨»5âÉ6+¸¨»5>¨7âÉ6âP·)»·)»·†#¸âP·†#¸¨»5¨»5âP·âÉ6dˆÞ·O 27¨»5B¤P¶ÿ^·B¤P¶âÉ6ÿ^·ÿ^·¨»5âP·)»·†#¸+¸ÿ^·âP·+¸)»·âP·âÉ6>¨7>¨7`÷7¼€78>¨7V‚K8$‡#8$‡#8V‚K8¼€78g¬8¾…Ô8¾…Ô8„ +ý8y¤Þ8y¤Þ8¬MÀ8‚4¶8¾…Ô8åÄè8‚4¶8y¤Þ8‚4¶8g¬8‚4¶8g¬8g¬8y¤Þ8¾…Ô8„ +ý8¾…Ô8‚4¶8åÄè8åÄè8ÈhÊ8îæò8¾…Ô8Ôõ—8¬MÀ8îæò8y¤Þ8¬MÀ8y¤Þ8¿ 9ÈhÊ8y¤Þ8g¬8¬MÀ8g¬8-‹_8Ôõ—8Ôõ—8V‚K8$‡#8£å8–8`÷7°ªÏ7;š€7dˆÞ·âÉ6âÉ6ÿ^·`÷7âÉ6¨»5Û㶷ö ¸Æþ>¸†#¸Æþ>¸“ª‘¸³»›¸7Ï¥¸Æĸ“ª‘¸Þü¹¸“ª‘¸Æþ>¸7Ï¥¸Þü¹¸T {¸“ª‘¸³»›¸“ª‘¸,S¸Œg¸,S¸,S¸Œg¸†#¸†#¸œ‡¸“ª‘¸7Ï¥¸ú䯸8Pظ7Ï¥¸ú䯸Æþ>¸Œg¸“ª‘¸ö ¸dˆÞ·+¸ÿ^·+¸ö ¸dˆÞ·ö ¸Û㶷O 27°ªÏ7>¨7$‡#8–8-‹_8–8–8–8£å8‚4¶8Ôõ—8‚4¶8g¬8-‹_8v¢8؃8£å8g¬8žšs8-‹_8v¢8-‹_8-‹_8£å8-‹_8`÷7žšs8؃8âÉ6âÉ6°ªÏ7O 27âP·>¨7;š€7B¤P¶dˆÞ·ö ¸Æþ>¸dˆÞ·T {¸†#¸†#¸Û㶷âP·ÿ^·dˆÞ·Û㶷âP·dˆÞ·†#¸dˆÞ·ÿ^·ö ¸ÿ^·ö ¸,S¸“ª‘¸†#¸Æþ>¸†#¸dˆÞ·,S¸)»·Û㶷dˆÞ·œ‡¸ö ¸+¸Æþ>¸dˆÞ·†#¸ÿ^·âP·†#¸O 27dˆÞ·B¤P¶B¤P¶>¨7O 27;š€7$‡#8žšs8¼€78؃8–8V‚K8V‚K8؃8-‹_8£å8¬MÀ8‚4¶8ÈhÊ8y¤Þ8£å8ÈhÊ8y¤Þ8¬MÀ8y¤Þ8îæò8îæò8y¤Þ8îæò8äè9 Ó9«9«9«9¿ 9Í—9«9«9åÄè8åÄè8£å8‚4¶8¾…Ô8ÈhÊ8Ôõ—8¬MÀ8V‚K8£å8`÷7;š€7`÷7°ªÏ7¨»5;š€7O 27¨»5âÉ6¨»5âÉ6†#¸ÿ^·dˆÞ·Û㶷+¸+¸ö ¸T {¸T {¸ÆĸŒg¸“ª‘¸7Ï¥¸T {¸,S¸“ª‘¸œ‡¸œ‡¸†#¸ú䯸“ª‘¸ú䯸—o⸜‡¸Æĸ–2θ–2θ–2θ ì¸–2θ7Ï¥¸7Ï¥¸ú䯸“ª‘¸³»›¸³»›¸T {¸“ª‘¸,S¸³»›¸†#¸ÿ^·,S¸ö ¸¨»5ÿ^·)»·dˆÞ·)»·)»·O 27¼€78âÉ6;š€7`÷7>¨7O 27`÷7>¨7¨»5âÉ6V‚K8âÉ6°ªÏ7`÷7O 27;š€7O 27âÉ6°ªÏ7)»·B¤P¶âP·B¤P¶¨»5âP·ÿ^·âÉ6)»·Û㶷†#¸†#¸Œg¸+¸,S¸,S¸âP·†#¸)»·;š€7Û㶷)»·¨»5Û㶷dˆÞ·dˆÞ·†#¸Û㶷+¸“ª‘¸Œg¸–2θ³»›¸–2θ?³ö¸´k¹ ’ +¹ ’ +¹oý#¹=¦¹šÐ¹ ì¸—o⸠’ +¹šÐ¹=¦¹?³ö¸¸æ¹oý#¹?³ö¸–2θ ì¸Æĸ8Pظ8PظÆĸ³»›¸ÆĸÞü¹¸³»›¸Þü¹¸8Pظ,S¸8Pظ7Ï¥¸,S¸T {¸,S¸ö ¸†#¸ÿ^·,S¸)»·†#¸†#¸ö ¸)»·¨»5B¤P¶ÿ^·;š€7âÉ6¼€78¼€78$‡#8-‹_8V‚K8žšs8¼€78žšs8$‡#8–8$‡#8–8¼€78$‡#8$‡#8؃8؃8;š€7;š€7B¤P¶âP·)»·dˆÞ·ö ¸âP·)»·)»·Œg¸dˆÞ·†#¸,S¸,S¸“ª‘¸³»›¸“ª‘¸8Pظ?³ö¸šÐ¹—o⸗o⸠’ +¹8PظÞü¹¸—o⸓ª‘¸,S¸–2θ´k¹Þü¹¸—oâ¸Þü¹¸–2θÆĸ—oâ¸Æĸ–2θÆĸ–2θÆĸú䯸“ª‘¸7Ï¥¸“ª‘¸Þü¹¸7Ï¥¸œ‡¸†#¸ö ¸Û㶷âP·°ªÏ7°ªÏ7¨»5V‚K8žšs8؃8žšs8–8°ªÏ7B¤P¶žšs8$‡#8¼€78g¬8V‚K8g¬8g¬8ÈhÊ8ÈhÊ8‚4¶8‚4¶8ÈhÊ8¾…Ô8îæò8¾…Ô8¾…Ô8 Ó9¿ 9Í—9„ +ý8ÈhÊ8y¤Þ8îæò8v¢8‚4¶8ÈhÊ8g¬8‚4¶8‚4¶8‚4¶8v¢8‚4¶8؃8¼€78žšs8O 27>¨7V‚K8`÷7V‚K8âÉ6$‡#8žšs8–8؃8-‹_8–8O 27¨»5–8âÉ6âÉ6†#¸ÿ^·;š€7†#¸dˆÞ·dˆÞ·âP·)»·âP·)»·Û㶷B¤P¶âP·dˆÞ·B¤P¶âP·B¤P¶ÿ^·âP·)»·O 27âP·âP·)»·O 27;š€7–8-‹_8$‡#8-‹_8¼€78$‡#8Ôõ—8؃8‚4¶8¬MÀ8£å8¼€78-‹_8¼€78؃8؃8`÷7`÷7`÷7`÷7–8–8¼€78$‡#8$‡#8žšs8£å8¼€78¼€78$‡#8–8£å8؃8-‹_8¼€78O 27âÉ6O 27B¤P¶¨»5B¤P¶;š€7dˆÞ·+¸dˆÞ·Û㶷âP·Û㶷âP·;š€7)»·°ªÏ7O 27B¤P¶âP·âP·ÿ^·âÉ6âP·>¨7¨»5âÉ6âP·B¤P¶dˆÞ·ÿ^·Æþ>¸ö ¸†#¸Û㶷Œg¸,S¸dˆÞ·+¸ö ¸Æþ>¸†#¸,S¸†#¸“ª‘¸†#¸Æþ>¸†#¸âP·T {¸Æĸ+¸“ª‘¸“ª‘¸T {¸,S¸“ª‘¸³»›¸ö ¸,S¸ö ¸+¸+¸†#¸âÉ6âÉ6¼€78âÉ6¨»5âÉ6B¤P¶°ªÏ7>¨7B¤P¶`÷7°ªÏ7-‹_8V‚K8°ªÏ7-‹_8؃8Ôõ—8¼€78`÷7V‚K8Ôõ—8Ôõ—8g¬8£å8؃8v¢8Ôõ—8؃8¼€78-‹_8–8¼€78;š€7>¨7O 27O 27âP·âÉ6âP·âP·Û㶷)»·ÿ^·†#¸Æþ>¸+¸Æþ>¸œ‡¸ú䯸³»›¸“ª‘¸“ª‘¸³»›¸7Ï¥¸Œg¸T {¸T {¸Þü¹¸,S¸ú䯸ú䯸“ª‘¸ ì¸—oâ¸8PظÞü¹¸—o⸖2θ ’ +¹´k¹ ì¸´k¹„~¹ú䯸³»›¸Æĸú䯸³»›¸³»›¸T {¸œ‡¸†#¸dˆÞ·dˆÞ·†#¸†#¸ÿ^·B¤P¶)»·âÉ6`÷7)»·>¨7ÿ^·O 27âÉ6)»·¨»5B¤P¶B¤P¶;š€7`÷7)»·;š€7`÷7âÉ6;š€7¼€78V‚K8°ªÏ7-‹_8$‡#8žšs8V‚K8؃8£å8-‹_8£å8£å8žšs8Ôõ—8£å8Ôõ—8¾…Ô8£å8؃8Ôõ—8‚4¶8‚4¶8ÈhÊ8y¤Þ8«9 Ó9¿ 9«9 Ó9 Ó9„ +ý8Y,'9¿ 9y¤Þ8‚4¶8g¬8¬MÀ8؃8Ôõ—8v¢8‚4¶8£å8‚4¶8V‚K8žšs8£å8`÷7V‚K8¼€78$‡#8°ªÏ7âÉ6âP·âP·ÿ^·Æþ>¸T {¸T {¸“ª‘¸+¸“ª‘¸ö ¸†#¸Æþ>¸³»›¸Œg¸ú䯸T {¸,S¸T {¸+¸+¸,S¸âP·†#¸ö ¸)»·Û㶷ÿ^·ÿ^·;š€7âÉ6O 27;š€7O 27–8>¨7$‡#8–8-‹_8¼€78–8V‚K8$‡#8$‡#8$‡#8Ôõ—8-‹_8-‹_8£å8žšs8V‚K8v¢8V‚K8؃8-‹_8žšs8؃8žšs8-‹_8V‚K8–8$‡#8$‡#8`÷7–8–8¼€78`÷7žšs8Ôõ—8-‹_8-‹_8-‹_8>¨7°ªÏ7O 27O 27;š€7`÷7$‡#8`÷7B¤P¶B¤P¶°ªÏ7†#¸âP·)»·†#¸âP·âÉ6)»·Û㶷dˆÞ·ÿ^·âP·)»·Û㶷ö ¸†#¸ÿ^·†#¸dˆÞ·ÿ^·†#¸+¸,S¸Æþ>¸œ‡¸†#¸†#¸Œg¸Œg¸+¸T {¸T {¸“ª‘¸7Ï¥¸7Ï¥¸Œg¸ö ¸dˆÞ·âÉ6ÿ^·B¤P¶B¤P¶ÿ^·âP·Û㶷Û㶷¨»5)»·âÉ6dˆÞ·>¨7B¤P¶ÿ^·B¤P¶B¤P¶¨»5†#¸>¨7$‡#8–8-‹_8`÷7;š€7؃8¼€78°ªÏ7`÷7V‚K8V‚K8؃8$‡#8–8V‚K8-‹_8؃8V‚K8-‹_8؃8žšs8‚4¶8Ôõ—8žšs8V‚K8°ªÏ7¼€78-‹_8-‹_8žšs8V‚K8°ªÏ7¨»5;š€7âÉ6)»·dˆÞ·B¤P¶ÿ^·âP·B¤P¶dˆÞ·âP·†#¸ÿ^·+¸Œg¸,S¸ö ¸Æþ>¸ú䯸³»›¸Æĸ“ª‘¸³»›¸“ª‘¸“ª‘¸ú䯸Æĸ—oâ¸8Pظ–2θ–2θ—oâ¸8Pظ³»›¸Þü¹¸7Ï¥¸ÆĸT {¸Œg¸“ª‘¸³»›¸7Ï¥¸,S¸,S¸dˆÞ·dˆÞ·,S¸ÿ^·B¤P¶†#¸dˆÞ·O 27Û㶷ÿ^·B¤P¶B¤P¶ÿ^·dˆÞ·âÉ6¨»5>¨7)»·âP·¨»5¨»5–8;š€7;š€7°ªÏ7–8$‡#8£å8$‡#8؃8-‹_8£å8؃8$‡#8žšs8-‹_8`÷7$‡#8$‡#8$‡#8–8V‚K8$‡#8¼€78$‡#8–8°ªÏ7$‡#8)»·âÉ6;š€7°ªÏ7âÉ6°ªÏ7£å8$‡#8–8°ªÏ7O 27B¤P¶)»·B¤P¶;š€7)»·)»·)»·†#¸+¸³»›¸“ª‘¸T {¸–2θœ‡¸Œg¸7Ï¥¸Œg¸7Ï¥¸“ª‘¸“ª‘¸œ‡¸“ª‘¸Æþ>¸“ª‘¸T {¸,S¸“ª‘¸³»›¸³»›¸Œg¸³»›¸³»›¸“ª‘¸+¸,S¸“ª‘¸“ª‘¸“ª‘¸“ª‘¸“ª‘¸,S¸Œg¸âP·B¤P¶âP·âP·)»·B¤P¶âÉ6V‚K8$‡#8V‚K8-‹_8£å8¬MÀ8v¢8Ôõ—8¾…Ô8ÈhÊ8Ôõ—8£å8îæò8Í—9ÈhÊ8îæò8îæò8¿ 9Çþ9¿ 9y¤Þ8Í—9¿ 9îæò8åÄè8«9y¤Þ8Í—9Çþ9Í—9Y,'92Ž;9„ +ý8¿ 9«9Í—9¾…Ô8ÈhÊ8åÄè8¾…Ô8¬MÀ8؃8؃8؃8¼€78>¨7`÷7°ªÏ7O 27âÉ6B¤P¶âÉ6dˆÞ·ö ¸Û㶷†#¸âP·ö ¸“ª‘¸³»›¸,S¸œ‡¸T {¸“ª‘¸T {¸7Ï¥¸³»›¸T {¸+¸Þü¹¸,S¸Œg¸Æþ>¸Û㶷âP·+¸,S¸ÿ^·B¤P¶ÿ^·)»·B¤P¶¨»5¨»5âÉ6`÷7¼€78`÷7¨»5>¨7¼€78>¨7`÷7$‡#8°ªÏ7°ªÏ7O 27¨»5B¤P¶¨»5–8–8–8–8žšs8$‡#8¼€78$‡#8`÷7¬MÀ8v¢8‚4¶8؃8-‹_8؃8£å8ÈhÊ8$‡#8žšs8>¨7;š€7O 27`÷7O 27B¤P¶¨»5ö ¸)»·Æþ>¸“ª‘¸,S¸,S¸—o⸜‡¸7Ï¥¸“ª‘¸–2θ³»›¸7Ï¥¸–2θ?³ö¸8Pظ–2θú䯸?³ö¸8Pظ—oâ¸ú䯸—o⸄~¹´k¹šÐ¹ ’ +¹„~¹=¦¹´k¹ ’ +¹¸æ¹ ’ +¹„~¹–2θ—oâ¸Þü¹¸Æĸ ì¸–2θ³»›¸Þü¹¸–2蓪‘¸“ª‘¸“ª‘¸“ª‘¸³»›¸Œg¸Œg¸Æþ>¸Æþ>¸dˆÞ·dˆÞ·Û㶷Û㶷B¤P¶O 27O 27¼€78$‡#8`÷7¨»5¼€78`÷7B¤P¶âÉ6–8âÉ6`÷7V‚K8;š€7V‚K8V‚K8-‹_8V‚K8؃8g¬8g¬8g¬8v¢8g¬8¾…Ô8¾…Ô8‚4¶8v¢8g¬8¾…Ô8åÄè8ÈhÊ8žšs8‚4¶8ÈhÊ8‚4¶8žšs8v¢8g¬8¬MÀ8¬MÀ8Ôõ—8V‚K8¼€78Ôõ—8؃8¼€78)»·>¨7Û㶷)»·¨»5O 27ÿ^·âP·Û㶷dˆÞ·ÿ^·ö ¸“ª‘¸,S¸Œg¸“ª‘¸7Ï¥¸,S¸,S¸T {¸“ª‘¸Œg¸8Pظœ‡¸œ‡¸“ª‘¸ö ¸†#¸+¸;š€7âP·âP·¨»5dˆÞ·Û㶷âÉ6`÷7¨»5>¨7–8-‹_8$‡#8°ªÏ7$‡#8؃8؃8£å8-‹_8؃8؃8£å8žšs8؃8V‚K8-‹_8v¢8؃8¬MÀ8‚4¶8¾…Ô8„ +ý8¬MÀ8¾…Ô8îæò8¬MÀ8؃8g¬8v¢8¬MÀ8¾…Ô8g¬8îæò8¬MÀ8ÈhÊ8¾…Ô8Ôõ—8g¬8g¬8v¢8g¬8y¤Þ8ÈhÊ8¬MÀ8Ôõ—8g¬8-‹_8‚4¶8-‹_8g¬8£å8-‹_8žšs8؃8؃8;š€7$‡#8$‡#8$‡#8-‹_8؃8¼€78>¨7>¨7>¨7°ªÏ7O 27>¨7O 27–8¨»5âÉ6O 27Û㶷ÿ^·âP·ÿ^·Û㶷dˆÞ·+¸T {¸ú䯸“ª‘¸Æĸ³»›¸7Ï¥¸Œg¸“ª‘¸Æþ>¸,S¸âP·Û㶷Û㶷Û㶷O 27;š€7B¤P¶âÉ6âÉ6°ªÏ7–8–8–8؃8-‹_8Ôõ—8–8°ªÏ7-‹_8°ªÏ7v¢8V‚K8$‡#8¼€78V‚K8–8£å8Ôõ—8–8؃8-‹_8؃8¬MÀ8‚4¶8¬MÀ8Ôõ—8¾…Ô8g¬8v¢8£å8Ôõ—8žšs8؃8v¢8–8£å8-‹_8؃8>¨7;š€7>¨7>¨7–8O 27O 27>¨7>¨7>¨7B¤P¶ÿ^·âÉ6¨»5¨»5B¤P¶>¨7âÉ6âP·Û㶷¨»5¨»5†#¸dˆÞ·†#¸,S¸dˆÞ·T {¸7Ï¥¸Œg¸+¸Œg¸,S¸dˆÞ·Þü¹¸,S¸,S¸T {¸ö ¸Æþ>¸“ª‘¸“ª‘¸T {¸Œg¸†#¸†#¸dˆÞ·ö ¸ö ¸âP·âP·âÉ6°ªÏ7;š€7O 27;š€7>¨7âÉ6)»·B¤P¶O 27)»·`÷7–8`÷7¼€78-‹_8V‚K8°ªÏ7>¨7-‹_8>¨7¨»5¨»5O 27¨»5âÉ6B¤P¶V‚K8`÷7`÷7;š€7âÉ6$‡#8¼€78)»·B¤P¶ÿ^·¨»5)»·°ªÏ7O 27¨»5)»·ö ¸dˆÞ·dˆÞ·†#¸œ‡¸+¸7Ï¥¸—oâ¸Æĸ–2θ–2θ ì¸?³ö¸—o⸠츖2θ ì¸—o⸖2θú䯸8Pظú䯸ÆĸÆĸú䯸Þü¹¸–2θ7Ï¥¸ú䯸Æĸ–2θ–2θ´k¹´k¹8Pظ?³ö¸„~¹—o⸖2θ´k¹³»›¸–2θÆĸ ì¸³»›¸–2θ ì¸Þü¹¸„~¹8Pظú䯸Þü¹¸œ‡¸7Ï¥¸œ‡¸Æþ>¸,S¸T {¸†#¸dˆÞ·âÉ6°ªÏ7B¤P¶âP·+¸âP·dˆÞ·ÿ^·)»·Û㶷ÿ^·)»·)»·)»·O 27>¨7°ªÏ7âÉ6°ªÏ7V‚K8¼€78°ªÏ7âÉ6âÉ6>¨7;š€7>¨7¨»5âP·ÿ^·Û㶷âP·dˆÞ·,S¸“ª‘¸œ‡¸Œg¸“ª‘¸“ª‘¸Æþ>¸“ª‘¸œ‡¸Œg¸Œg¸Œg¸Æþ>¸†#¸Œg¸ö ¸+¸T {¸Œg¸Þü¹¸“ª‘¸,S¸–2θÆĸ8Pظ8Pظ„~¹?³ö¸—o⸴k¹8Pظ„~¹´k¹?³ö¸8Pظ—oâ¸?³ö¸“ª‘¸³»›¸ú䯸ú䯸ú䯸8Pظœ‡¸Œg¸7Ï¥¸Æþ>¸ö ¸Æþ>¸“ª‘¸†#¸ÿ^·dˆÞ·dˆÞ·†#¸ÿ^·¨»5âÉ6;š€7¨»5°ªÏ7>¨7$‡#8B¤P¶B¤P¶>¨7-‹_8–8-‹_8g¬8-‹_8žšs8žšs8v¢8¾…Ô8„ +ý8y¤Þ8g¬8‚4¶8v¢8‚4¶8‚4¶8£å8-‹_8؃8£å8Ôõ—8žšs8g¬8£å8žšs8Ôõ—8-‹_8V‚K8‚4¶8¬MÀ8V‚K8-‹_8V‚K8–8`÷7¼€78žšs8-‹_8V‚K8žšs8`÷7$‡#8-‹_8O 27;š€7âÉ6°ªÏ7°ªÏ7°ªÏ7`÷7O 27B¤P¶)»·)»·)»·ÿ^·O 27†#¸,S¸Û㶷B¤P¶†#¸ÿ^·dˆÞ·†#¸Û㶷)»·dˆÞ·)»·)»·)»·âP·Û㶷âP·ÿ^·ÿ^·ö ¸†#¸Û㶷âP·âÉ6`÷7–8$‡#8$‡#8V‚K8-‹_8g¬8žšs8žšs8‚4¶8îæò8¬MÀ8y¤Þ8„ +ý8ÈhÊ8ÈhÊ8åÄè8¾…Ô8¾…Ô8¾…Ô8îæò8F"9Y,'93\193\19F"9ðt69 Ó9åÄè8¿ 9«9îæò8ÈhÊ8ÈhÊ8y¤Þ8Ôõ—8¼€78¬MÀ8‚4¶8v¢8V‚K8v¢8؃8؃8¼€78`÷7>¨7¨»5Û㶷O 27¨»5B¤P¶âP·)»·ö ¸†#¸Û㶷dˆÞ·,S¸Œg¸“ª‘¸“ª‘¸Æþ>¸ú䯸“ª‘¸³»›¸8Pظ³»›¸?³ö¸8Pظ–2θÆĸ ì¸„~¹´k¹´k¹Þü¹¸Þü¹¸—o⸜‡¸ú䯸–2θú䯸7Ï¥¸“ª‘¸Æþ>¸,S¸†#¸Œg¸†#¸ö ¸†#¸†#¸ö ¸Æþ>¸+¸,S¸ÿ^·†#¸†#¸âP·âP·;š€7O 27°ªÏ7¼€78žšs8žšs8-‹_8¼€78V‚K8žšs8-‹_8؃8–8žšs8-‹_8žšs8£å8g¬8åÄè8¾…Ô8v¢8v¢8¾…Ô8îæò8„ +ý8ÈhÊ8؃8؃8؃8-‹_8¼€78-‹_8O 27°ªÏ7âP·ÿ^·)»·âP·âP·ÿ^·Û㶷B¤P¶âP·†#¸†#¸ö ¸Œg¸†#¸“ª‘¸“ª‘¸Œg¸³»›¸“ª‘¸Æĸú䯸³»›¸³»›¸T {¸“ª‘¸,S¸ú䯸“ª‘¸³»›¸“ª‘¸,S¸,S¸ú䯸—o⸳»›¸³»›¸–2θú䯸“ª‘¸7Ï¥¸ú䯸ú䯸?³ö¸?³ö¸—o⸴k¹„~¹„~¹—o⸖2θ–2θŒg¸,S¸“ª‘¸7Ï¥¸7Ï¥¸“ª‘¸,S¸Œg¸†#¸Û㶷dˆÞ·¨»5¨»5âÉ6>¨7>¨7žšs8žšs8žšs8g¬8„ +ý8v¢8£å8„ +ý8ÈhÊ8¾…Ô8g¬8‚4¶8ÈhÊ8žšs8Ôõ—8Ôõ—8$‡#8-‹_8-‹_8–8$‡#8g¬8V‚K8°ªÏ7`÷7O 27)»·B¤P¶;š€7)»·¨»5;š€7>¨7¨»5°ªÏ7>¨7`÷7`÷7>¨7âÉ6Û㶷B¤P¶)»·ÿ^·ö ¸O 27B¤P¶âÉ6B¤P¶;š€7`÷7O 27O 27Û㶷âP·Û㶷¨»5O 27)»·>¨7;š€7B¤P¶¨»5¨»5O 27;š€7`÷7>¨7`÷7¨»5)»·°ªÏ7°ªÏ7–8>¨7>¨7°ªÏ7°ªÏ7–8âÉ6–8¼€78¼€78؃8£å8žšs8V‚K8-‹_8-‹_8g¬8؃8žšs8ÈhÊ8ÈhÊ8y¤Þ8žšs8V‚K8žšs8g¬8-‹_8¼€78žšs8žšs8؃8Ôõ—8v¢8Ôõ—8g¬8‚4¶8-‹_8-‹_8g¬8؃8-‹_8žšs8`÷7v¢8‚4¶8V‚K8žšs8žšs8$‡#8–8$‡#8¼€78`÷7¼€78O 27¨»5;š€7`÷7;š€7;š€7°ªÏ7¼€78°ªÏ7âÉ6;š€7>¨7O 27âÉ6O 27¨»5†#¸†#¸B¤P¶dˆÞ·)»·†#¸Œg¸†#¸+¸dˆÞ·ö ¸+¸,S¸ÿ^·†#¸†#¸Æþ>¸ÿ^·Û㶷¨»5¨»5¨»5B¤P¶âÉ6;š€7–8-‹_8;š€7O 27-‹_8؃8V‚K8;š€7žšs8-‹_8g¬8v¢8v¢8ÈhÊ8¬MÀ8y¤Þ8¾…Ô8¬MÀ8 Ó9Í—9îæò8‚4¶8‚4¶8¾…Ô8‚4¶8Ôõ—8žšs8£å8¬MÀ8ÈhÊ8‚4¶8g¬8¾…Ô8¬MÀ8v¢8‚4¶8g¬8؃8g¬8£å8v¢8£å8؃8£å8¼€78–8;š€7`÷7¨»5)»·ÿ^·+¸Œg¸+¸Œg¸Æþ>¸Œg¸“ª‘¸†#¸ö ¸ö ¸,S¸âP·³»›¸ÆĸT {¸T {¸Þü¹¸³»›¸ú䯸8PظÞü¹¸ú䯸“ª‘¸8Pظ,S¸T {¸7Ï¥¸³»›¸Þü¹¸–2θÆĸú䯸–2θÆĸ?³ö¸ú䯸–2θú䯸ö ¸+¸T {¸,S¸dˆÞ·ÿ^·¨»5°ªÏ7âÉ6)»·âÉ6O 27âP·`÷7$‡#8-‹_8`÷7–8–8$‡#8$‡#8v¢8Ôõ—8g¬8¬MÀ8¾…Ô8ÈhÊ8ÈhÊ8g¬8åÄè8„ +ý8¾…Ô8åÄè8y¤Þ8y¤Þ8äè9y¤Þ8ÈhÊ8y¤Þ8¾…Ô8y¤Þ8Ôõ—8g¬8-‹_8£å8ÈhÊ8g¬8g¬8¬MÀ8v¢8£å8-‹_8v¢8g¬8g¬8g¬8žšs8Ôõ—8$‡#8–8âÉ6$‡#8>¨7;š€7;š€7O 27O 27âÉ6)»·dˆÞ·âP·Û㶷+¸†#¸T {¸+¸T {¸“ª‘¸Œg¸+¸T {¸Æþ>¸Œg¸ÿ^·dˆÞ·ö ¸Û㶷†#¸†#¸†#¸ÿ^·ÿ^·B¤P¶;š€7âÉ6–8¼€78Ôõ—8V‚K8žšs8-‹_8g¬8$‡#8g¬8‚4¶8ÈhÊ8ÈhÊ8g¬8v¢8؃8g¬8g¬8žšs8åÄè8îæò8g¬8g¬8g¬8¬MÀ8v¢8-‹_8žšs8؃8-‹_8¼€78–8`÷7>¨7>¨7>¨7O 27O 27>¨7;š€7°ªÏ7¨»5>¨7¼€78°ªÏ7Û㶷°ªÏ7B¤P¶dˆÞ·ö ¸Û㶷+¸+¸³»›¸“ª‘¸,S¸“ª‘¸Œg¸+¸“ª‘¸Æþ>¸³»›¸—oâ¸Þü¹¸8Pظ—o⸖2θ—oâ¸8PظÆĸ7Ï¥¸Æĸ ì¸8Pظ—oâ¸=¦¹„~¹=¦¹»¹„~¹8Pظ ì¸?³ö¸ ì¸ ì¸´k¹ ’ +¹8Pظ?³ö¸´k¹=¦¹»¹º)¹`w=¹`w=¹—o⸠’ +¹—oâ¸Æĸ–2θú䯸Œg¸ú䯸Þü¹¸8Pظ»¹—oâ¸7Ï¥¸Æĸ7Ï¥¸7Ï¥¸Æĸœ‡¸T {¸dˆÞ·T {¸Œg¸+¸T {¸,S¸¨»5)»·ÿ^·âÉ6°ªÏ7>¨7`÷7`÷7V‚K8`÷7–8Ôõ—8؃8$‡#8V‚K8žšs8$‡#8؃8¼€78-‹_8`÷7V‚K8¨»5âÉ6âÉ6;š€7>¨7ö ¸Û㶷ö ¸Æþ>¸,S¸Œg¸B¤P¶ÿ^·Œg¸†#¸†#¸Œg¸Æþ>¸“ª‘¸œ‡¸“ª‘¸³»›¸³»›¸ÆĸÆĸ—o⸗o⸓ª‘¸ú䯸œ‡¸7Ï¥¸“ª‘¸³»›¸7Ï¥¸–2θT {¸7Ï¥¸³»›¸ú䯸ú䯸—oâ¸Þü¹¸³»›¸Œg¸“ª‘¸T {¸,S¸†#¸dˆÞ·ÿ^·ÿ^·)»·B¤P¶)»·¨»5°ªÏ7°ªÏ7;š€7–8$‡#8¼€78`÷7`÷7-‹_8-‹_8؃8V‚K8$‡#8-‹_8v¢8g¬8ÈhÊ8g¬8Ôõ—8Í—9‚4¶8¬MÀ8‚4¶8¬MÀ8g¬8¬MÀ8V‚K8>¨7>¨7B¤P¶)»·B¤P¶B¤P¶dˆÞ·ÿ^·âP·âP·Û㶷;š€7âÉ6âP·†#¸†#¸†#¸†#¸“ª‘¸ÆĸŒg¸ú䯸Œg¸,S¸T {¸³»›¸“ª‘¸ú䯸Æĸ7Ï¥¸ ì¸—oâ¸7Ï¥¸Æĸ8Pظú䯸ú䯸 ’ +¹?³ö¸?³ö¸—o⸠’ +¹8Pظ8Pظ—oâ¸?³ö¸Æĸ³»›¸Þü¹¸Æĸ,S¸ö ¸ö ¸†#¸Û㶷ö ¸†#¸Æþ>¸œ‡¸Œg¸ö ¸Û㶷ö ¸dˆÞ·B¤P¶B¤P¶)»·°ªÏ7–8¨»5¼€78V‚K8¼€78¼€78žšs8؃8v¢8‚4¶8Ôõ—8¾…Ô8ÈhÊ8y¤Þ8«9ÈhÊ8‚4¶8„ +ý8Í—9¾…Ô8ÈhÊ8¾…Ô8£å8y¤Þ8¬MÀ8¾…Ô8Í—9ÈhÊ8¾…Ô8‚4¶8Í—9‚4¶8g¬8£å8g¬8¬MÀ8¼€78£å8–8–8>¨7âÉ6âP·âP·°ªÏ7O 27>¨7>¨7°ªÏ7°ªÏ7âP·¨»5¨»5;š€7¨»5âP·ÿ^·†#¸ö ¸ö ¸T {¸+¸Þü¹¸Þü¹¸7Ï¥¸7Ï¥¸“ª‘¸—o⸠’ +¹?³ö¸„~¹?³ö¸„~¹ ì¸Æĸ„~¹–2θ—oâ¸?³ö¸—oâ¸Æĸ7Ï¥¸7Ï¥¸“ª‘¸†#¸ö ¸dˆÞ·Û㶷dˆÞ·)»·âP·ö ¸+¸†#¸+¸dˆÞ·ÿ^·)»·âÉ6†#¸†#¸ÿ^·O 27O 27O 27dˆÞ·¨»5âÉ6¨»5âÉ6°ªÏ7$‡#8°ªÏ7`÷7¨»5O 27;š€7–8O 27–8;š€7¼€78¼€78`÷7žšs8¼€78؃8Ôõ—8؃8V‚K8`÷7`÷7¨»5>¨7°ªÏ7¨»5B¤P¶>¨7$‡#8°ªÏ7>¨7B¤P¶)»·dˆÞ·ÿ^·dˆÞ·ö ¸Û㶷†#¸ÿ^·“ª‘¸“ª‘¸,S¸ÿ^·,S¸ö ¸)»·dˆÞ·“ª‘¸Œg¸“ª‘¸ú䯸“ª‘¸“ª‘¸Œg¸“ª‘¸ö ¸+¸dˆÞ·Œg¸“ª‘¸ö ¸T {¸+¸Œg¸†#¸†#¸dˆÞ·†#¸dˆÞ·Û㶷ÿ^·°ªÏ7°ªÏ7$‡#8`÷7Ôõ—8;š€7-‹_8`÷7–8؃8žšs8¼€78؃8V‚K8g¬8£å8؃8¾…Ô8¬MÀ8ÈhÊ8‚4¶8ÈhÊ8åÄè8îæò8¬MÀ8¬MÀ8ÈhÊ8g¬8Ôõ—8-‹_8v¢8؃8¼€78Ôõ—8£å8–8`÷7$‡#8V‚K8°ªÏ7`÷7–8`÷7°ªÏ7>¨7¼€78V‚K8;š€7¨»5`÷7B¤P¶O 27âP·¨»5O 27âP·âP·ÿ^·B¤P¶O 27B¤P¶B¤P¶)»·†#¸)»·âP·)»·âÉ6>¨7¨»5O 27Û㶷)»·Æþ>¸ö ¸T {¸“ª‘¸†#¸+¸+¸ÿ^·Œg¸œ‡¸“ª‘¸œ‡¸,S¸³»›¸³»›¸“ª‘¸Æþ>¸†#¸“ª‘¸T {¸dˆÞ·¨»5>¨7B¤P¶;š€7ÿ^·$‡#8>¨7–8–8؃8-‹_8–8-‹_8–8$‡#8$‡#8B¤P¶âÉ6O 27B¤P¶Æþ>¸)»·+¸ÿ^·âÉ6âÉ6;š€7âÉ6°ªÏ7)»·°ªÏ7>¨7Û㶷;š€7B¤P¶âP·O 27âÉ6¨»5âÉ6)»·¨»5;š€7O 27B¤P¶¨»5$‡#8âÉ6B¤P¶;š€7B¤P¶°ªÏ7¼€78B¤P¶âÉ6âÉ6$‡#8;š€7Û㶷¨»5âP·)»·¨»5dˆÞ·)»·Æþ>¸dˆÞ·+¸;š€7dˆÞ·†#¸ÿ^·†#¸†#¸dˆÞ·ö ¸dˆÞ·ÿ^·Û㶷ÿ^·Û㶷ö ¸âÉ6†#¸¨»5B¤P¶Û㶷B¤P¶B¤P¶;š€7B¤P¶°ªÏ7O 27B¤P¶¨»5°ªÏ7°ªÏ7âÉ6;š€7$‡#8V‚K8–8>¨7°ªÏ7¼€78âÉ6O 27$‡#8°ªÏ7$‡#8$‡#8¼€78V‚K8-‹_8£å8Ôõ—8¼€78V‚K8‚4¶8g¬8žšs8-‹_8V‚K8-‹_8-‹_8°ªÏ7>¨7°ªÏ7;š€7O 27O 27°ªÏ7B¤P¶Û㶷)»·ÿ^·¨»5;š€7âÉ6O 27O 27>¨7¨»5O 27¨»5;š€7;š€7;š€7;š€7>¨7°ªÏ7°ªÏ7°ªÏ7;š€7°ªÏ7V‚K8$‡#8¨»5âÉ6$‡#8$‡#8°ªÏ7)»·ÿ^·O 27ö ¸†#¸Û㶷)»·†#¸ÿ^·¨»5âÉ6O 27O 27>¨7¨»5`÷7`÷7¼€78°ªÏ7؃8`÷7–8V‚K8O 27$‡#8`÷7>¨7-‹_8؃8-‹_8žšs8Ôõ—8v¢8v¢8Ôõ—8y¤Þ8Ôõ—8Ôõ—8ÈhÊ8ÈhÊ8¾…Ô8‚4¶8g¬8«9y¤Þ8Í—9åÄè8îæò8Í—9Í—9„ +ý8¾…Ô8åÄè8y¤Þ8Í—9Í—9„ +ý8åÄè8y¤Þ8¬MÀ8g¬8¬MÀ8Ôõ—8¼€78£å8-‹_8žšs8žšs8V‚K8$‡#8؃8Ôõ—8¼€78£å8£å8`÷7¨»5)»·Æþ>¸ÿ^·dˆÞ·ÿ^·T {¸,S¸Û㶷+¸ö ¸“ª‘¸,S¸7Ï¥¸³»›¸T {¸Þü¹¸Þü¹¸7Ï¥¸Þü¹¸“ª‘¸ÆĸT {¸ ì¸³»›¸“ª‘¸T {¸Œg¸T {¸7Ï¥¸³»›¸œ‡¸Æþ>¸,S¸ÿ^·ÿ^·†#¸;š€7Û㶷†#¸dˆÞ·+¸†#¸B¤P¶Û㶷âP·âÉ6°ªÏ7°ªÏ7–8$‡#8žšs8V‚K8V‚K8-‹_8؃8¾…Ô8£å8‚4¶8v¢8£å8‚4¶8ÈhÊ8¾…Ô8‚4¶8‚4¶8g¬8Ôõ—8v¢8£å8-‹_8v¢8Ôõ—8-‹_8؃8v¢8žšs8؃8žšs8žšs8-‹_8–8B¤P¶dˆÞ·)»·dˆÞ·Œg¸T {¸ú䯸Þü¹¸7Ï¥¸“ª‘¸ ì¸8Pظ?³ö¸“ª‘¸—oâ¸=¦¹»¹=¦¹ì]8¹oý#¹»¹–,.¹`w=¹âQ¹È«G¹ì]8¹U‘B¹–,.¹º)¹º)¹`w=¹ì]8¹`w=¹º)¹È«G¹óýV¹ì]8¹º)¹¸æ¹ýD3¹ì]8¹oý#¹oý#¹¸æ¹¸æ¹ ’ +¹ ì¸8Pظ?³ö¸–2θ„~¹ ì¸?³ö¸´k¹Æĸ?³ö¸Þü¹¸Æĸœ‡¸,S¸“ª‘¸ú䯸Œg¸7Ï¥¸Þü¹¸Æĸ³»›¸Œg¸ú䯸7Ï¥¸+¸†#¸âÉ6B¤P¶)»·âÉ6)»·B¤P¶Û㶷>¨7O 27)»·O 27>¨7–8âÉ6ÿ^·¨»5ÿ^·âÉ6¨»5¨»5>¨7;š€7;š€7)»·`÷7¼€78âÉ6)»·¨»5âP·dˆÞ·ö ¸“ª‘¸,S¸†#¸Æþ>¸âP·ÿ^·ÿ^·ÿ^·Æþ>¸+¸ö ¸+¸+¸ö ¸+¸dˆÞ·ú䯸ú䯸³»›¸Æþ>¸+¸Æþ>¸Œg¸7Ï¥¸ú䯸“ª‘¸ú䯸³»›¸ú䯸Þü¹¸“ª‘¸8Pظú䯸Æþ>¸ÿ^·B¤P¶¨»5âÉ6;š€7°ªÏ7–8`÷7>¨7V‚K8V‚K8£å8V‚K8y¤Þ8g¬8؃8؃8Ôõ—8¬MÀ8¬MÀ8v¢8g¬8åÄè8v¢8¬MÀ8ÈhÊ8y¤Þ8åÄè8؃8v¢8„ +ý8„ +ý8ÈhÊ8Í—9«9Y,'9«9 Ó9 Ó9«9Çþ93\19 Ó92Ž;9;ÂE92Ž;9ø§@9F"9ø§@9Çþ9Çþ9„ +ý8F"9 Ó9«9¿ 9y¤Þ8¿ 9Í—9¬MÀ8ÈhÊ8îæò8ÈhÊ8‚4¶8g¬8‚4¶8£å8V‚K8–8žšs8°ªÏ7âÉ6)»·`÷7âÉ6âP·)»·âP·+¸Æþ>¸Œg¸,S¸“ª‘¸ú䯸œ‡¸ú䯸Þü¹¸ú䯸ú䯸Þü¹¸´k¹?³ö¸7Ï¥¸8Pظú䯸Æĸú䯸ú䯸Þü¹¸7Ï¥¸8PظÞü¹¸“ª‘¸Œg¸7Ï¥¸–2蓪‘¸“ª‘¸ö ¸dˆÞ·âÉ6;š€7;š€7âÉ6;š€7ÿ^·ÿ^·;š€7B¤P¶†#¸>¨7¨»5–8Ôõ—8$‡#8£å8£å8žšs8V‚K8¬MÀ8£å8£å8$‡#8V‚K8$‡#8-‹_8$‡#8V‚K8žšs8°ªÏ7;š€7;š€7;š€7;š€7âÉ6;š€7;š€7O 27âP·¨»5†#¸Û㶷)»·âP·âP·†#¸dˆÞ·ÿ^·œ‡¸Æĸ“ª‘¸“ª‘¸Œg¸ú䯸Þü¹¸—oâ¸8PظT {¸Œg¸Þü¹¸7Ï¥¸ÆĸÞü¹¸?³ö¸?³ö¸=¦¹?³ö¸´k¹=¦¹ì]8¹šÐ¹=¦¹„~¹´k¹=¦¹´k¹?³ö¸ ì¸8Pظ“ª‘¸Œg¸Æþ>¸dˆÞ·†#¸Œg¸dˆÞ·³»›¸†#¸âP·dˆÞ·†#¸†#¸B¤P¶`÷7¼€78°ªÏ7°ªÏ7$‡#8Ôõ—8g¬8Ôõ—8‚4¶8¬MÀ8v¢8Ôõ—8v¢8g¬8¾…Ô8îæò8y¤Þ8ÈhÊ8 Ó9äè9«9¾…Ô8Í—9„ +ý8«9îæò8Í—9ÈhÊ8åÄè8Í—9¬MÀ8g¬8¾…Ô8„ +ý8¬MÀ8îæò8žšs8Ôõ—8g¬8Ôõ—8؃8Ôõ—8Ôõ—8؃8؃8v¢8žšs8-‹_8¼€78;š€7`÷7>¨7O 27O 27>¨7¨»5V‚K8>¨7>¨7–8;š€7`÷7âÉ6°ªÏ7¨»5O 27âÉ6–8âP·âP·âÉ6âÉ6B¤P¶–8âÉ6;š€7;š€7âÉ6¨»5¨»5)»·;š€7$‡#8;š€7âÉ6dˆÞ·âP·ÿ^·†#¸âP·Û㶷dˆÞ·Æþ>¸dˆÞ·†#¸ö ¸)»·Û㶷B¤P¶;š€7âP·–8V‚K8>¨7V‚K8–8–8-‹_8؃8v¢8Ôõ—8`÷7V‚K8-‹_8-‹_8$‡#8$‡#8V‚K8¼€78>¨7`÷7$‡#8-‹_8V‚K8-‹_8Ôõ—8v¢8£å8ÈhÊ8ÈhÊ8åÄè8Í—9‚4¶8‚4¶8Ôõ—8>¨7âP·`÷7O 27O 27âÉ6¨»5)»·†#¸)»·Æþ>¸+¸“ª‘¸Æþ>¸“ª‘¸ú䯸Œg¸Œg¸Œg¸Æþ>¸Û㶷ö ¸†#¸Û㶷†#¸dˆÞ·+¸ö ¸ÿ^·Û㶷+¸,S¸,S¸†#¸ö ¸†#¸,S¸Û㶷,S¸ö ¸dˆÞ·Œg¸“ª‘¸ú䯸7Ï¥¸ú䯸³»›¸8Pظ–2蓪‘¸“ª‘¸,S¸dˆÞ·ÿ^·†#¸¨»5)»·>¨7°ªÏ7¨»5dˆÞ·°ªÏ7>¨7$‡#8O 27–8؃8-‹_8¼€78$‡#8>¨7V‚K8–8؃8`÷7>¨7؃8¼€78؃8¼€78V‚K8`÷7¼€78°ªÏ7¼€78Ôõ—8v¢8žšs8žšs8Ôõ—8£å8V‚K8V‚K8žšs8Ôõ—8Ôõ—8v¢8-‹_8؃8¼€78°ªÏ7$‡#8`÷7V‚K8–8–8$‡#8°ªÏ7–8>¨7¨»5°ªÏ7âÉ6O 27ÿ^·B¤P¶âÉ6¨»5âP·âÉ6âÉ6;š€7°ªÏ7;š€7O 27$‡#8–8–8–8`÷7âÉ6âÉ6B¤P¶ö ¸B¤P¶B¤P¶B¤P¶–8âÉ6O 27âÉ6âP·¨»5`÷7°ªÏ7–8°ªÏ7>¨7¼€78>¨7`÷7;š€7$‡#8`÷7؃8-‹_8¼€78V‚K8؃8¼€78؃8îæò8£å8Ôõ—8Ôõ—8؃8-‹_8-‹_8$‡#8-‹_8¼€78g¬8-‹_8-‹_8£å8£å8؃8v¢8g¬8g¬8Ôõ—8¾…Ô8V‚K8žšs8žšs8V‚K8–8–8£å8£å8°ªÏ7-‹_8>¨7âÉ6`÷7`÷7°ªÏ7>¨7¼€78°ªÏ7;š€7O 27B¤P¶;š€7`÷7âP·dˆÞ·dˆÞ·ö ¸T {¸†#¸Œg¸—oâ¸Æĸ8Pظ–2θ–2θ—oâ¸ú䯸–2θú䯸,S¸T {¸Þü¹¸8Pظœ‡¸†#¸Œg¸,S¸T {¸Æþ>¸+¸+¸œ‡¸“ª‘¸Œg¸,S¸Æþ>¸dˆÞ·†#¸ÿ^·Û㶷†#¸Û㶷“ª‘¸Œg¸T {¸“ª‘¸ö ¸†#¸,S¸T {¸“ª‘¸,S¸³»›¸“ª‘¸³»›¸“ª‘¸7Ï¥¸“ª‘¸ú䯸“ª‘¸ú䯸,S¸T {¸+¸dˆÞ·†#¸Œg¸œ‡¸†#¸Æþ>¸Þü¹¸³»›¸œ‡¸7Ï¥¸—oâ¸ú䯸–2θ7Ï¥¸“ª‘¸ú䯸“ª‘¸–2蓪‘¸œ‡¸ú䯸“ª‘¸“ª‘¸œ‡¸“ª‘¸³»›¸ú䯸Þü¹¸“ª‘¸7Ï¥¸7Ï¥¸—o⸖2θ—o⸄~¹?³ö¸8Pظ—oâ¸8Pظ„~¹»¹´k¹–2θ7Ï¥¸´k¹Æĸ?³ö¸=¦¹ ì¸–2θ´k¹ ’ +¹»¹ ì¸8Pظ8Pظ—o⸖2θú䯸ú䯸Æþ>¸T {¸T {¸,S¸T {¸+¸ÿ^·ö ¸+¸âP·ÿ^·âP·`÷7`÷7`÷7$‡#8°ªÏ7O 27O 27°ªÏ7;š€7B¤P¶;š€7âÉ6âÉ6;š€7¨»5)»·;š€7°ªÏ7$‡#8¼€78-‹_8‚4¶8£å8Ôõ—8V‚K8–8°ªÏ7>¨7)»·¨»5âP·âP·B¤P¶†#¸ÿ^·†#¸âÉ6B¤P¶ö ¸+¸¨»5O 27ö ¸+¸Û㶷ö ¸Û㶷dˆÞ·†#¸Û㶷Û㶷†#¸“ª‘¸T {¸ö ¸†#¸ö ¸ÿ^·B¤P¶âP·dˆÞ·Û㶷âP·+¸+¸ÿ^·B¤P¶>¨7¨»5âP·>¨7âP·âÉ6¨»5+¸Û㶷¨»5âÉ6>¨7O 27¨»5âÉ6;š€7B¤P¶°ªÏ7`÷7Ôõ—8£å8-‹_8؃8£å8£å8åÄè8¬MÀ8‚4¶8|Pd|1|24600|2013-282T15:32:47.397 6¤Œ8mÆ 86¤Œ8ê58Ûª8ü–‚8Ûª86¤Œ8I8b !8ñ 86¤Œ8.q8I8× +¿86¤Œ8ü–‚8ê58ê58b !8´–8ü–‚8.q8I8mÆ 8b !8.q8b !8b !8ˆ +]8²iò7…·Ê7ñ 8…·Ê7ñ 8ö!£7²iò7òË_5òË_5Py ·}ÓY·.Õ»·.Õ»·òË_5Py ·lŸ¸Py ·¼_w7ùK”·.Õ»·<}ã·$‹¸(ì’¸c€-¸cƒU¸<}ã·<}ã·lŸ¸lŸ¸e§¸~A¸˜i¸c€-¸cƒU¸e§¸~A¸c€-¸o'±¸—ýœ¸”?»¸cƒU¸(ì’¸˜i¸e§¸.Õ»·$‹¸˜i¸<}ã·~A¸c€-¸$‹¸cƒU¸~A¸(ì’¸—ýœ¸<}ã·~A¸~A¸#¢}¸<}ã·Ù(7踵6I8²iò7¼_w7…·Ê7踵6…·Ê7ˆ +]8ñ 8ˆ +]8Ûª8.q8ü–‚8ˆ +]8ê58mÆ 8ü–‚8´–8²iò7I8ñ 8²iò7I8ê58ö!£7b !8ñ 8…·Ê7Py ·ùK”·òË_5}ÓY·<}ã·}ÓY·~A¸o'±¸$‹¸~A¸cƒU¸(ì’¸cƒU¸e§¸”?»¸e§¸—ýœ¸#¢}¸ºYŸŸ“Ù¸rÔí¸Ÿ“Ù¸rÔí¸ºYŸ6³ã¸6³ã¸e§¸D÷÷¸™H¹D÷÷¸P4 ¹µ ¹Î ¹Î ¹ºYŸµ ¹Î ¹rÔí¸µ ¹µ ¹µ ¹6³ã¸rÔí¸6³ã¸D÷÷¸Ÿ“Ù¸6³ã¸Ÿ“Ù¸”?»¸e§¸—ýœ¸—ýœ¸˜i¸cƒU¸~A¸˜i¸#¢}¸lŸ¸ùK”·ùK”·<}ã·<}ã·.Õ»·òË_5¼_w7踵6}ÓY·Py ·"w¶ö!£7Ù(7踵6Ù(7Py ·Ù(7ùK”·è¸µ6$‹¸.Õ»·c€-¸c€-¸~A¸ùK”·è¸µ6}ÓY·}ÓY·Py ·.Õ»·"w¶òË_5"w¶"w¶ùK”·$‹¸$‹¸$‹¸$‹¸e§¸o'±¸”?»¸o'±¸(ì’¸”?»¸(ì’¸—ýœ¸6³ã¸e§¸(ì’¸rÔí¸Åuϸ”?»¸B݈¸Ÿ“Ù¸6³ã¸ºYŸ”?»¸Ÿ“Ù¸D÷÷¸µ ¹ÅuϸD÷÷¸rÔí¸”?»¸ÅuϸŸ“Ù¸e§¸e§¸ºYŸ6³ã¸o'±¸Ÿ“Ù¸Åuϸ#¢}¸o'±¸Ÿ“Ù¸˜i¸—ýœ¸e§¸lŸ¸~A¸cƒU¸lŸ¸.Õ»·Ù(7<}ã·}ÓY·"w¶è¸µ6²iò7ö!£7ö!£7b !8ˆ +]8ê586¤Œ8ˆ +]8´–8´–8I8ñ 8Ûª8Ûª8´–8.q8mÆ 8+ç8× +¿8× +¿86¤Œ8´–8´–8× +¿8× +¿8mÆ 86¤Œ8Ûª8µ%É8+ç8Ûª8£ñ8+ç8rBÓ8µ%É8× +¿8mÆ 8íñ´8× +¿8rBÓ8µ%É8ˆ +]8× +¿8Ûª8rBÓ8mÆ 8´–8Ûª8íñ´8× +¿8õ`Ý8íñ´8Ûª8+ç8µ%É8õ`Ý8+ç8µ%É8íñ´8× +¿8Ûª8I86¤Œ8b !8…·Ê7²iò7踵6ˆ +]8²iò7¼_w7.q8…·Ê7踵6¼_w7}ÓY·lŸ¸<}ã·~A¸lŸ¸lŸ¸}ÓY·òË_5$‹¸<}ã·"w¶c€-¸ùK”·.Õ»·lŸ¸cƒU¸(ì’¸#¢}¸#¢}¸˜i¸˜i¸$‹¸c€-¸òË_5}ÓY·Py ·.Õ»·<}ã·c€-¸c€-¸$‹¸lŸ¸B݈¸$‹¸}ÓY·òË_5踵6b !8b !8…·Ê7I8ü–‚8I8b !8…·Ê7I8I8I8ˆ +]8.q8b !8.q8ö!£7²iò7b !8ö!£7I8…·Ê7ñ 8²iò7²iò7ö!£7òË_5踵6²iò7Py ·<}ã·.Õ»·òË_5}ÓY·}ÓY·Py ·Ù(7踵6踵6òË_5}ÓY·.Õ»·"w¶c€-¸lŸ¸c€-¸~A¸lŸ¸˜i¸(ì’¸e§¸B݈¸—ýœ¸”?»¸e§¸e§¸e§¸o'±¸o'±¸(ì’¸—ýœ¸Ÿ“Ù¸#¢}¸(ì’¸e§¸#¢}¸(ì’¸B݈¸B݈¸#¢}¸lŸ¸c€-¸c€-¸$‹¸˜i¸#¢}¸—ýœ¸—ýœ¸lŸ¸(ì’¸˜i¸˜i¸~A¸$‹¸.Õ»·<}ã·Py ·.Õ»·<}ã·"w¶è¸µ6Ù(7ö!£7…·Ê7²iò7²iò7ê58b !8ê58rBÓ8× +¿8µ%É8íñ´8õ`Ý8õ`Ý8hÆû8hÆû8Ó9£ñ8hÆû8õ`Ý8µ%É8õ`Ý8+ç8Ûª8õ`Ý86¤Œ8ü–‚8.q8ˆ +]8I8I8ê58ˆ +]8I8¼_w7踵6ê58Py ·$‹¸Py ·Ù(7òË_5.Õ»·ö!£7Ù(7"w¶<}ã·lŸ¸~A¸$‹¸$‹¸(ì’¸ùK”·.Õ»·c€-¸cƒU¸c€-¸cƒU¸<}ã·òË_5}ÓY·<}ã·òË_5"w¶}ÓY·.Õ»·$‹¸}ÓY·c€-¸lŸ¸~A¸c€-¸~A¸e§¸B݈¸—ýœ¸ºYŸc€-¸(ì’¸lŸ¸<}ã·lŸ¸"w¶}ÓY·ùK”·$‹¸ùK”·¼_w7Py ·è¸µ6踵6¼_w7ñ 8I8ü–‚86¤Œ8b !8´–8´–8mÆ 8íñ´8rBÓ8õ`Ý8´–8rBÓ8§õ9rBÓ8õ`Ý8Ó9µ%É8íñ´8° 9§õ9õ`Ý8× +¿86¤Œ8íñ´8´–8+ç8ˆ +]8mÆ 8ü–‚8.q8.q8.q8…·Ê7ê58b !8¼_w7}ÓY·¼_w7"w¶Ù(7¼_w7òË_5.Õ»·è¸µ6lŸ¸<}ã·c€-¸6³ã¸~A¸#¢}¸e§¸(ì’¸e§¸cƒU¸cƒU¸(ì’¸(ì’¸(ì’¸(ì’¸o'±¸(ì’¸o'±¸o'±¸”?»¸˜i¸—ýœ¸~A¸~A¸~A¸—ýœ¸c€-¸$‹¸~A¸(ì’¸—ýœ¸~A¸lŸ¸~A¸lŸ¸#¢}¸~A¸lŸ¸~A¸ùK”·<}ã·˜i¸~A¸<}ã·Py ·}ÓY·è¸µ6¼_w7¼_w7…·Ê7踵6ö!£7ñ 8ö!£7ê58ˆ +]8ˆ +]8ˆ +]8ê58¼_w7ö!£7¼_w7}ÓY·<}ã·}ÓY·"w¶}ÓY·Ù(7¼_w7<}ã·òË_5~A¸lŸ¸è¸µ6"w¶<}ã·}ÓY·<}ã·}ÓY·Ù(7<}ã·c€-¸cƒU¸lŸ¸lŸ¸lŸ¸B݈¸c€-¸~A¸c€-¸.Õ»·"w¶c€-¸$‹¸—ýœ¸c€-¸˜i¸.Õ»·~A¸lŸ¸}ÓY·cƒU¸c€-¸.Õ»·cƒU¸c€-¸˜i¸o'±¸cƒU¸~A¸(ì’¸#¢}¸—ýœ¸#¢}¸#¢}¸#¢}¸<}ã·lŸ¸.Õ»·"w¶<}ã·.Õ»·Py ·lŸ¸òË_5}ÓY·Py ·Py ·Py ·<}ã·}ÓY·Ù(7}ÓY·Py ·è¸µ6I8ü–‚86¤Œ8rBÓ8rBÓ8õ`Ý8hÆû8Ó9£ñ8:19° 9õ`Ý8hÆû8° 9× +¿8£ñ8+ç8rBÓ8Ó9Ûª8mÆ 8hÆû8× +¿8õ`Ý8rBÓ8hÆû8mÆ 8´–8.q8mÆ 8b !8.q8b !8íñ´8íñ´8Ûª8b !8ñ 8ˆ +]8ñ 8ö!£7ê58²iò7òË_5Ù(7踵6²iò7踵6¼_w7²iò7¼_w7Ù(7Ù(7òË_5òË_5ö!£7.Õ»·lŸ¸.Õ»·#¢}¸c€-¸c€-¸$‹¸cƒU¸˜i¸˜i¸—ýœ¸—ýœ¸o'±¸ºYŸ(ì’¸o'±¸e§¸o'±¸Åuϸo'±¸—ýœ¸e§¸˜i¸(ì’¸cƒU¸c€-¸lŸ¸$‹¸lŸ¸~A¸$‹¸lŸ¸$‹¸}ÓY·cƒU¸Py ·$‹¸Ù(7òË_5"w¶¼_w7踵6…·Ê7ˆ +]8ö!£7b !8ñ 8ˆ +]8ñ 8ñ 8ö!£7ñ 8ö!£7…·Ê7ê58.q8b !8´–8ü–‚8²iò7I8ˆ +]8b !86¤Œ8I8I8mÆ 8´–8ˆ +]86¤Œ8ü–‚8Ûª8ˆ +]8ˆ +]8.q8I8…·Ê7ê58¼_w7ˆ +]8Ù(7¼_w7}ÓY·.Õ»·$‹¸.Õ»·Py ·.Õ»·<}ã·$‹¸(ì’¸~A¸c€-¸~A¸#¢}¸6³ã¸—ýœ¸(ì’¸”?»¸”?»¸”?»¸o'±¸—ýœ¸B݈¸—ýœ¸—ýœ¸(ì’¸˜i¸(ì’¸B݈¸(ì’¸c€-¸(ì’¸~A¸c€-¸~A¸˜i¸~A¸.Õ»·$‹¸<}ã·~A¸lŸ¸~A¸.Õ»·.Õ»·.Õ»·}ÓY·¼_w7Py ·ö!£7òË_5²iò7…·Ê7²iò7b !8ö!£7²iò7mÆ 8íñ´8× +¿8íñ´8µ%É8× +¿8µ%É8.q8× +¿8µ%É8õ`Ý8Ûª8:19Ó9õ`Ý8hÆû8£ñ8õ`Ý8hÆû8:19§õ9§õ9° 99¡+9£ñ8+ç8õ`Ý8§õ9íñ´8rBÓ8£ñ8Ûª8£ñ8rBÓ8´–8b !8ˆ +]8.q8ê58I8踵6ö!£7¼_w7òË_5}ÓY·…·Ê7"w¶ö!£7ñ 8ö!£7Ù(7Ù(7Ù(7"w¶ùK”·òË_5Py ·Py ·lŸ¸"w¶è¸µ6ùK”·"w¶…·Ê7òË_5Py ·}ÓY·}ÓY·lŸ¸lŸ¸lŸ¸lŸ¸cƒU¸<}ã·.Õ»·}ÓY·è¸µ6.Õ»·è¸µ6òË_5<}ã·òË_5ùK”·<}ã·ùK”·}ÓY·"w¶.Õ»·¼_w7I8b !8踵6¼_w7…·Ê76¤Œ8b !8ü–‚8ñ 8ñ 8I86¤Œ8I8´–8ü–‚8íñ´8mÆ 8´–8µ%É8ˆ +]8´–86¤Œ86¤Œ86¤Œ8I86¤Œ86¤Œ8ˆ +]8ü–‚8.q8íñ´86¤Œ8mÆ 86¤Œ8ˆ +]8ˆ +]8µ%É8Ûª8õ`Ý8ü–‚8´–8Ûª8ˆ +]8…·Ê7ñ 8²iò7ê58Ù(7踵6Ù(7¼_w7ñ 8ö!£7I8ñ 8òË_5²iò7"w¶…·Ê7²iò7ö!£7踵6}ÓY·}ÓY·"w¶²iò7Ù(7<}ã·¼_w7ùK”·.Õ»·"w¶…·Ê7"w¶…·Ê7òË_5<}ã·Py ·Py ·è¸µ6"w¶}ÓY·òË_5踵6Ù(7<}ã·è¸µ6¼_w7}ÓY·}ÓY·"w¶è¸µ6"w¶ö!£7…·Ê7Ù(7ö!£7²iò7ñ 8ê58b !8I8…·Ê7ñ 8ê58ü–‚8ü–‚8I8ˆ +]8Ûª8ü–‚8ü–‚8+ç8+ç8× +¿8£ñ8× +¿8õ`Ý8µ%É8mÆ 8£ñ8Ûª8× +¿8.q8ü–‚8.q8ü–‚8ü–‚8b !8´–8ˆ +]8ñ 8ê58ˆ +]8ˆ +]8ü–‚8b !8Py ·ùK”·òË_5$‹¸~A¸}ÓY·lŸ¸$‹¸lŸ¸c€-¸.Õ»·~A¸$‹¸$‹¸}ÓY·cƒU¸c€-¸<}ã·Py ·c€-¸(ì’¸$‹¸B݈¸c€-¸(ì’¸e§¸˜i¸cƒU¸(ì’¸—ýœ¸”?»¸(ì’¸˜i¸c€-¸c€-¸lŸ¸cƒU¸ùK”·$‹¸<}ã·<}ã·ùK”·}ÓY·òË_5Ù(7}ÓY·}ÓY·Py ·òË_5ùK”·<}ã·¼_w7Py ·Py ·ùK”·}ÓY·Ù(7¼_w7}ÓY·Ù(7"w¶ñ 8ñ 8…·Ê7ñ 8ö!£7Ù(7¼_w7…·Ê7ê58ñ 8ê58I8I8I8ü–‚8.q8× +¿8mÆ 8ñ 8I8b !8¼_w7²iò7I8²iò7ü–‚8I8²iò7I8ü–‚8ñ 8ˆ +]8ñ 8.q8…·Ê7踵6b !8¼_w7…·Ê7ö!£7ö!£7¼_w7"w¶Ù(7ùK”·lŸ¸lŸ¸"w¶c€-¸lŸ¸.Õ»·c€-¸òË_5Py ·è¸µ6踵6}ÓY·~A¸lŸ¸}ÓY·lŸ¸(ì’¸(ì’¸.Õ»·lŸ¸lŸ¸.Õ»·è¸µ6b !8lŸ¸ùK”·"w¶Py ·.Õ»·ùK”·}ÓY·Ù(7lŸ¸lŸ¸}ÓY·"w¶c€-¸ùK”·$‹¸ùK”·è¸µ6Ù(7踵6踵6²iò7…·Ê7ü–‚8.q8.q8Ûª8´–8²iò7I8I86¤Œ8´–8.q86¤Œ8ˆ +]8ê58.q8mÆ 8ü–‚8.q8ü–‚8íñ´8.q86¤Œ8.q8ñ 8²iò7b !8ö!£7Ù(7踵6"w¶lŸ¸lŸ¸"w¶}ÓY·lŸ¸"w¶òË_5$‹¸ùK”·$‹¸˜i¸˜i¸(ì’¸e§¸ºYŸ”?»¸o'±¸e§¸D÷÷¸ÅuϸŸ“Ù¸6³ã¸ÅuϸŸ“Ù¸—ýœ¸”?»¸rÔí¸rÔí¸o'±¸D÷÷¸s¹P4 ¹Î ¹D÷÷¸D÷÷¸rÔí¸6³ã¸Åuϸ—ýœ¸—ýœ¸(ì’¸o'±¸Åuϸo'±¸o'±¸e§¸o'±¸e§¸—ýœ¸o'±¸cƒU¸<}ã·cƒU¸(ì’¸cƒU¸c€-¸ùK”·}ÓY·}ÓY·òË_5c€-¸lŸ¸lŸ¸~A¸lŸ¸}ÓY·"w¶Ù(7踵6Py ·¼_w7Ù(7ñ 8I8ñ 8.q8I86¤Œ8ˆ +]8ê58ü–‚8ü–‚8´–8I8ê58b !8Ù(7²iò7Ù(7<}ã·Py ·"w¶è¸µ6ñ 8òË_5…·Ê7…·Ê7踵6.Õ»·}ÓY·ùK”·.Õ»·c€-¸.Õ»·$‹¸lŸ¸lŸ¸lŸ¸<}ã·$‹¸cƒU¸c€-¸<}ã·e§¸(ì’¸o'±¸—ýœ¸(ì’¸o'±¸(ì’¸B݈¸o'±¸(ì’¸”?»¸”?»¸o'±¸˜i¸e§¸o'±¸ºYŸ”?»¸(ì’¸”?»¸$‹¸cƒU¸˜i¸cƒU¸cƒU¸(ì’¸—ýœ¸B݈¸.Õ»·<}ã·c€-¸è¸µ6.Õ»·~A¸Py ·"w¶Py ·òË_5…·Ê7ê58ê58ö!£7ö!£7ñ 8…·Ê7¼_w7"w¶ê58òË_5踵6ö!£7ö!£7²iò7²iò7²iò7¼_w7…·Ê7…·Ê7òË_5²iò7<}ã·<}ã·ùK”·lŸ¸òË_5"w¶Py ·ùK”·<}ã·ö!£7òË_5.Õ»·ùK”·òË_5$‹¸lŸ¸lŸ¸~A¸<}ã·$‹¸ùK”·$‹¸c€-¸lŸ¸}ÓY·}ÓY·<}ã·c€-¸<}ã·c€-¸B݈¸lŸ¸lŸ¸$‹¸$‹¸˜i¸e§¸˜i¸—ýœ¸(ì’¸˜i¸(ì’¸Ÿ“Ù¸e§¸rÔí¸6³ã¸Î ¹D÷÷¸o'±¸”?»¸6³ã¸µ ¹Î ¹6³ã¸o'±¸ºYŸÅuϸe§¸ºYŸe§¸o'±¸o'±¸”?»¸Åuϸ—ýœ¸”?»¸(ì’¸—ýœ¸e§¸B݈¸#¢}¸#¢}¸—ýœ¸”?»¸”?»¸”?»¸Ÿ“Ù¸o'±¸rÔí¸”?»¸cƒU¸˜i¸.Õ»·}ÓY·}ÓY·Py ·òË_5²iò7踵6Ù(7…·Ê7Ù(7Ù(7ùK”·ùK”·}ÓY·}ÓY·ùK”·Py ·Py ·ö!£7"w¶}ÓY·Py ·<}ã·c€-¸lŸ¸cƒU¸$‹¸~A¸<}ã·cƒU¸o'±¸˜i¸cƒU¸—ýœ¸e§¸(ì’¸Åuϸo'±¸Ÿ“Ù¸”?»¸6³ã¸6³ã¸Ÿ“Ù¸ºYŸe§¸e§¸ºYŸe§¸P4 ¹µ ¹rÔí¸™H¹™H¹Î ¹Åuϸo'±¸o'±¸ºYŸÅuϸo'±¸e§¸o'±¸ºYŸÅuϸºYŸD÷÷¸6³ã¸o'±¸Î ¹rÔí¸P4 ¹D÷÷¸o'±¸6³ã¸ºYŸ—ýœ¸e§¸(ì’¸”?»¸(ì’¸~A¸(ì’¸lŸ¸”?»¸˜i¸$‹¸—ýœ¸cƒU¸~A¸c€-¸(ì’¸—ýœ¸~A¸˜i¸~A¸lŸ¸c€-¸cƒU¸cƒU¸—ýœ¸cƒU¸.Õ»·(ì’¸cƒU¸cƒU¸<}ã·lŸ¸lŸ¸}ÓY·lŸ¸}ÓY·Py ·è¸µ6踵6òË_5òË_5¼_w7"w¶…·Ê7"w¶Py ·"w¶ùK”·Py ·}ÓY·<}ã·ùK”·Py ·.Õ»·ùK”·<}ã·Py ·.Õ»·<}ã·c€-¸cƒU¸#¢}¸~A¸<}ã·˜i¸$‹¸—ýœ¸$‹¸˜i¸(ì’¸—ýœ¸o'±¸rÔí¸”?»¸~A¸c€-¸lŸ¸c€-¸(ì’¸˜i¸~A¸cƒU¸$‹¸lŸ¸ùK”·òË_5c€-¸<}ã·è¸µ6Ù(7Ù(7I86¤Œ8I8b !8íñ´8´–86¤Œ8× +¿8.q8× +¿8´–8mÆ 8mÆ 8íñ´8µ%É8+ç8:19õ`Ý8õ`Ý8hÆû8+ç8Ó9iF9£r!9[¹09î@9Ò599ë:9¥‰&9[¹098\9î@9Ò59¥‰&9£r!99¡+9î@9î@98\99¡+9iF9:19° 9Ó9£r!9iF9[¹099ë:9[¹09¥‰&98\9° 98\9:19µ%É8õ`Ý8íñ´8× +¿8+ç8õ`Ý8rBÓ8£ñ8íñ´8rBÓ8rBÓ8íñ´8ü–‚8´–86¤Œ8ˆ +]86¤Œ8ü–‚8b !8I8b !8ñ 8ê58b !8Ù(7踵6踵6¼_w7Ù(7ñ 8…·Ê7…·Ê7b !8²iò7²iò76¤Œ8踵6ˆ +]8.q86¤Œ8.q8mÆ 8íñ´8íñ´8ü–‚8rBÓ8£ñ8µ%É8õ`Ý8õ`Ý8rBÓ8rBÓ8iF9iF9:19£r!9iF9Ó9£r!9iF9£r!99¡+99¡+9Ò598\9¥‰&9£r!9° 9° 9iF9iF9Ò599ë:9£r!98\9iF9Ò59iF9iF98\9§õ9õ`Ý8£ñ8µ%É8£ñ8Ûª8mÆ 8µ%É8Ûª8mÆ 8ü–‚8I8mÆ 8íñ´86¤Œ8I8¼_w7ê58I8²iò7ö!£7Ù(7Ù(7踵6"w¶lŸ¸Py ·lŸ¸˜i¸cƒU¸lŸ¸c€-¸c€-¸$‹¸<}ã·#¢}¸$‹¸cƒU¸ÅuϸB݈¸(ì’¸o'±¸e§¸˜i¸—ýœ¸(ì’¸˜i¸c€-¸cƒU¸˜i¸cƒU¸cƒU¸c€-¸<}ã·<}ã·<}ã·$‹¸<}ã·}ÓY·òË_5.Õ»·è¸µ6Ù(7"w¶Ù(7ùK”·ùK”·Py ·è¸µ6$‹¸ùK”·.Õ»·.Õ»·}ÓY·.Õ»·"w¶"w¶lŸ¸.Õ»·è¸µ6²iò7²iò7²iò7²iò7Ù(7ñ 8…·Ê7ö!£7Py ·è¸µ6I8b !8²iò7.q8²iò7¼_w7ê58Py ·lŸ¸ùK”·ö!£7}ÓY·è¸µ6ö!£7¼_w7"w¶}ÓY·Py ·Ù(7"w¶Py ·"w¶¼_w7¼_w7}ÓY·lŸ¸$‹¸#¢}¸e§¸(ì’¸(ì’¸(ì’¸#¢}¸˜i¸˜i¸(ì’¸—ýœ¸—ýœ¸ºYŸ˜i¸(ì’¸e§¸o'±¸c€-¸cƒU¸o'±¸—ýœ¸~A¸cƒU¸#¢}¸$‹¸$‹¸c€-¸cƒU¸B݈¸”?»¸B݈¸$‹¸lŸ¸cƒU¸(ì’¸cƒU¸˜i¸(ì’¸lŸ¸~A¸Py ·<}ã·"w¶è¸µ6¼_w7踵6Ù(7²iò7踵6b !8²iò7I8.q8Ûª8íñ´8µ%É8íñ´86¤Œ8rBÓ8£ñ8õ`Ý8õ`Ý8§õ9£ñ8Ûª8× +¿8§õ9rBÓ8£ñ8£ñ8õ`Ý8õ`Ý8Ûª8õ`Ý8´–8.q8mÆ 8´–8ö!£7…·Ê7²iò7ˆ +]8.q8ˆ +]8¼_w7¼_w7lŸ¸è¸µ6"w¶òË_5踵6òË_5¼_w7lŸ¸ùK”·Ù(7$‹¸"w¶<}ã·~A¸c€-¸cƒU¸(ì’¸~A¸~A¸$‹¸c€-¸(ì’¸(ì’¸˜i¸B݈¸#¢}¸˜i¸c€-¸(ì’¸˜i¸$‹¸$‹¸<}ã·c€-¸<}ã·è¸µ6ö!£7òË_5<}ã·}ÓY·¼_w7ö!£7…·Ê7ñ 8¼_w7Ù(7b !8I8b !8ñ 8…·Ê7I8²iò7¼_w7¼_w7ö!£7òË_5踵6b !8ê58ê58ê58ü–‚8²iò7ˆ +]8ˆ +]8.q8ê58ˆ +]8´–8ñ 8ñ 8b !8I8ö!£76¤Œ8ñ 8ñ 8ñ 8²iò7I8I8b !8ñ 8b !8²iò7Ù(7ö!£7…·Ê7b !8ö!£7I8²iò7¼_w7踵6òË_5}ÓY·òË_5<}ã·"w¶<}ã·cƒU¸~A¸$‹¸o'±¸ºYŸB݈¸Åuϸ”?»¸o'±¸Ÿ“Ù¸rÔí¸6³ã¸6³ã¸µ ¹ $¹™H¹s¹s¹™H¹D÷÷¸µ ¹P4 ¹P4 ¹eÏ.¹µ ¹™H¹Î ¹D÷÷¸µ ¹Ÿ“Ù¸rÔí¸µ ¹Ÿ“Ù¸ÅuϸP4 ¹Ÿ“Ù¸µ ¹(ì’¸B݈¸~A¸$‹¸c€-¸~A¸lŸ¸.Õ»·ùK”·"w¶Ù(7Py ·¼_w7òË_5Ù(7ö!£7ö!£7ö!£7I8ê58ü–‚8ö!£7…·Ê7ˆ +]8.q8íñ´8× +¿8rBÓ8Ûª8rBÓ8µ%É8× +¿8£ñ8rBÓ8rBÓ8õ`Ý8§õ9hÆû8mÆ 8õ`Ý8hÆû88\9° 9µ%É86¤Œ8mÆ 8.q8ˆ +]8I8ñ 8I8…·Ê7.q8mÆ 8ñ 8²iò7ˆ +]8b !8ñ 8b !8"w¶Ù(7.Õ»·"w¶"w¶"w¶}ÓY·lŸ¸~A¸.Õ»·<}ã·c€-¸$‹¸~A¸cƒU¸(ì’¸cƒU¸c€-¸~A¸cƒU¸c€-¸c€-¸<}ã·.Õ»·ùK”·.Õ»·ùK”·lŸ¸}ÓY·.Õ»·è¸µ6ö!£7òË_5¼_w7¼_w7…·Ê7ö!£7ùK”·ùK”·lŸ¸lŸ¸"w¶ö!£7¼_w7²iò7ñ 8¼_w7²iò7¼_w7…·Ê7ˆ +]8ˆ +]8ˆ +]8b !8ê58.q8I8I8ö!£7b !8¼_w7²iò7ö!£7ö!£7Py ·ñ 8}ÓY·"w¶¼_w7ö!£7"w¶"w¶òË_5¼_w7.Õ»·Py ·c€-¸"w¶.Õ»·lŸ¸~A¸<}ã·cƒU¸òË_5$‹¸c€-¸lŸ¸lŸ¸}ÓY·ùK”·}ÓY·.Õ»·}ÓY·lŸ¸<}ã·$‹¸˜i¸(ì’¸ÅuϸÅuϸΠ¹ÅuϸºYŸ”?»¸B݈¸e§¸o'±¸Ÿ“Ù¸e§¸—ýœ¸˜i¸e§¸”?»¸#¢}¸cƒU¸—ýœ¸<}ã·<}ã·lŸ¸˜i¸(ì’¸˜i¸~A¸˜i¸.Õ»·òË_5<}ã·ùK”·~A¸<}ã·ùK”·.Õ»·Py ·òË_5òË_5²iò7¼_w7¼_w7…·Ê7òË_5²iò7¼_w7踵6b !8²iò7ü–‚8rBÓ8íñ´8íñ´8íñ´8+ç8Ó9hÆû8§õ9° 9Ó9iF9:19° 9Ó9õ`Ý8+ç8° 9õ`Ý8+ç8Ûª8íñ´8íñ´8ˆ +]8× +¿8ü–‚86¤Œ8b !8ê58¼_w7¼_w7踵6òË_5ö!£7¼_w7ö!£7"w¶.Õ»·}ÓY·lŸ¸$‹¸<}ã·lŸ¸.Õ»·˜i¸—ýœ¸ºYŸ—ýœ¸e§¸Åuϸe§¸Ÿ“Ù¸o'±¸—ýœ¸P4 ¹rÔí¸D÷÷¸ºYŸ6³ã¸D÷÷¸Ÿ“ٸΠ¹µ ¹e§¸(ì’¸Åuϸ(ì’¸—ýœ¸—ýœ¸c€-¸$‹¸c€-¸(ì’¸c€-¸c€-¸c€-¸˜i¸~A¸Py ·lŸ¸B݈¸<}ã·"w¶$‹¸˜i¸lŸ¸.Õ»·lŸ¸ö!£7òË_5ö!£7踵6踵6ö!£7…·Ê7踵6ñ 8…·Ê7b !8…·Ê7²iò7ê58b !8íñ´8mÆ 8ü–‚8mÆ 8ˆ +]8ˆ +]8b !8b !8²iò7ö!£7ö!£7…·Ê7Ù(7²iò7²iò7ñ 8b !8ê58Ù(7¼_w7ñ 8òË_5òË_5}ÓY·}ÓY·ùK”·<}ã·#¢}¸c€-¸~A¸cƒU¸(ì’¸ºYŸ—ýœ¸cƒU¸~A¸#¢}¸—ýœ¸(ì’¸ÅuϸŸ“Ù¸ºYŸe§¸ÅuϸrÔí¸6³ã¸D÷÷¸µ ¹ºYŸÅuϸµ ¹D÷÷¸Ÿ“Ù¸ÅuϸÅuϸe§¸(ì’¸—ýœ¸~A¸(ì’¸~A¸$‹¸c€-¸ùK”·.Õ»·lŸ¸.Õ»·}ÓY·ùK”·}ÓY·"w¶¼_w7b !8b !8…·Ê7b !8b !8ê58ˆ +]8ê58ü–‚8mÆ 8ˆ +]8mÆ 8× +¿8ˆ +]8´–8ê58ê58ö!£7I8ê58ñ 8¼_w7¼_w7ñ 8…·Ê7Ù(7²iò7ö!£7ö!£7²iò7ö!£7Py ·ùK”·Ù(7Ù(7}ÓY·òË_5踵6òË_5òË_5Py ·è¸µ6Ù(7"w¶¼_w7<}ã·.Õ»·~A¸#¢}¸(ì’¸˜i¸B݈¸o'±¸ºYŸ”?»¸(ì’¸o'±¸ºYŸÅuϸB݈¸ºYŸo'±¸cƒU¸”?»¸(ì’¸”?»¸o'±¸”?»¸(ì’¸”?»¸B݈¸—ýœ¸e§¸(ì’¸(ì’¸cƒU¸˜i¸~A¸lŸ¸<}ã·c€-¸lŸ¸lŸ¸~A¸$‹¸lŸ¸~A¸lŸ¸ùK”·}ÓY·.Õ»·Ù(7ùK”·Py ·Ù(7ö!£7ñ 8…·Ê7ê58ˆ +]8I8ˆ +]8ñ 8I86¤Œ86¤Œ8.q86¤Œ8.q8´–8Ûª8mÆ 8ü–‚8ü–‚8²iò7ê58íñ´8íñ´86¤Œ8mÆ 8× +¿8+ç8+ç8õ`Ý8× +¿8µ%É8íñ´8õ`Ý8rBÓ8× +¿8ü–‚86¤Œ8× +¿8rBÓ8Ûª8´–8I8ê58¼_w7Ù(7ñ 8…·Ê7踵6ùK”·…·Ê7¼_w7}ÓY·ùK”·˜i¸#¢}¸~A¸lŸ¸lŸ¸$‹¸cƒU¸#¢}¸˜i¸lŸ¸~A¸<}ã·o'±¸ºYŸe§¸(ì’¸c€-¸cƒU¸(ì’¸(ì’¸~A¸e§¸c€-¸(ì’¸(ì’¸cƒU¸cƒU¸#¢}¸e§¸—ýœ¸(ì’¸—ýœ¸$‹¸.Õ»·<}ã·<}ã·˜i¸"w¶.Õ»·ùK”·b !8Ù(7ñ 8b !8²iò7b !86¤Œ8Ûª8ü–‚8I8ˆ +]8Ûª8ü–‚8´–8I8ü–‚8Ûª8Ûª8íñ´8ü–‚8mÆ 86¤Œ8´–8´–8µ%É8µ%É8Ûª8+ç86¤Œ8Ûª8´–8+ç8hÆû8× +¿86¤Œ86¤Œ8´–8íñ´8Ûª8mÆ 86¤Œ86¤Œ8ñ 8²iò7òË_5…·Ê7ê58b !8ê58b !8ö!£7…·Ê7òË_5.Õ»·…·Ê7òË_5¼_w7Py ·Py ·Py ·è¸µ6Ù(7Py ·<}ã·òË_5<}ã·}ÓY·}ÓY·~A¸c€-¸$‹¸.Õ»·lŸ¸}ÓY·ùK”·.Õ»·<}ã·Py ·}ÓY·}ÓY·ùK”·<}ã·}ÓY·ö!£7Ù(7¼_w7.q8ê58ˆ +]8Ûª8µ%É8ü–‚8´–8ö!£7…·Ê7.q8Ûª8´–8b !8ˆ +]8¼_w7²iò7ê58b !8…·Ê7b !8b !8²iò7¼_w7.q8ö!£7"w¶²iò7ñ 8.q8.q8I8ü–‚8.q86¤Œ8…·Ê7ñ 8…·Ê7b !8ö!£7踵6¼_w7òË_5Py ·"w¶è¸µ6ê58I8I8…·Ê7ñ 8Ù(7òË_5踵6lŸ¸lŸ¸lŸ¸#¢}¸~A¸lŸ¸e§¸—ýœ¸cƒU¸Ÿ“Ù¸Ÿ“Ù¸(ì’¸e§¸6³ã¸Ÿ“Ù¸D÷÷¸ºYŸrÔí¸s¹x·)¹™H¹µ ¹ $¹x·)¹™H¹P4 ¹rÔí¸”?»¸#¢}¸(ì’¸cƒU¸~A¸cƒU¸c€-¸~A¸lŸ¸.Õ»·.Õ»·lŸ¸cƒU¸<}ã·lŸ¸¼_w7…·Ê7Py ·<}ã·.Õ»·Py ·Ù(7Ù(7踵6I8ñ 8ê58I8²iò7ö!£7ñ 8…·Ê7ü–‚86¤Œ8Ûª8ü–‚8I8ˆ +]8.q8ü–‚8ü–‚8× +¿8õ`Ý8+ç8µ%É8rBÓ8µ%É8íñ´8.q8mÆ 8Ûª8+ç8Ûª8.q8ñ 8ü–‚8ê58¼_w7.q8ê58踵6踵6ùK”·Py ·Py ·.Õ»·Py ·$‹¸}ÓY·.Õ»·$‹¸c€-¸~A¸˜i¸cƒU¸cƒU¸$‹¸—ýœ¸#¢}¸—ýœ¸Åuϸ6³ã¸ºYŸºYŸ—ýœ¸rÔí¸P4 ¹Î ¹‹]¹‹]¹eÏ.¹Ýç3¹P‰¹s¹Î ¹P‰¹P‰¹P4 ¹µ ¹6³ã¸6³ã¸Î ¹Î ¹D÷÷¸Î ¹µ ¹Åuϸ—ýœ¸o'±¸B݈¸$‹¸c€-¸cƒU¸~A¸$‹¸cƒU¸lŸ¸~A¸}ÓY·è¸µ6.Õ»·òË_5ñ 8…·Ê7ö!£7ê58…·Ê7ˆ +]8ü–‚8× +¿8rBÓ8Ûª8íñ´8íñ´8hÆû8iF9§õ9Ó9£ñ8õ`Ý8iF9Ó9µ%É8+ç8£ñ8mÆ 8rBÓ8íñ´8rBÓ8× +¿8´–8.q8ü–‚8´–8.q8.q8I8I8ü–‚8ö!£7…·Ê7¼_w7}ÓY·¼_w7"w¶ùK”·òË_5òË_5}ÓY·$‹¸cƒU¸cƒU¸(ì’¸e§¸cƒU¸#¢}¸(ì’¸˜i¸e§¸e§¸—ýœ¸o'±¸—ýœ¸Åuϸo'±¸”?»¸Î ¹™H¹—ýœ¸ÅuϸΠ¹Ÿ“Ù¸P4 ¹D÷÷¸o'±¸Åuϸo'±¸B݈¸rÔí¸o'±¸˜i¸~A¸c€-¸~A¸lŸ¸c€-¸(ì’¸.Õ»·$‹¸ùK”·.Õ»·òË_5…·Ê7òË_5ñ 8踵6²iò7ê58ñ 8²iò76¤Œ8I8踵6…·Ê7ˆ +]8b !8b !8I8mÆ 8Ûª8µ%É8íñ´8´–8µ%É8´–8Ûª8Ûª8ê58ê58ü–‚8ñ 8ñ 8ü–‚8ñ 8ü–‚86¤Œ8.q8´–8.q8.q8²iò7b !8ùK”·Py ·}ÓY·.Õ»·òË_5Ù(7òË_5òË_5踵6.Õ»·.Õ»·}ÓY·Py ·.Õ»·ùK”·<}ã·òË_5.Õ»·òË_5Ù(7.Õ»·~A¸˜i¸$‹¸˜i¸—ýœ¸e§¸Åuϸ(ì’¸$‹¸#¢}¸$‹¸cƒU¸—ýœ¸#¢}¸$‹¸c€-¸<}ã·ùK”·.Õ»·ùK”·Py ·òË_5<}ã·$‹¸"w¶ùK”·}ÓY·ùK”·²iò7踵6ñ 8²iò7…·Ê7¼_w7踵6²iò7ˆ +]8²iò7b !8ê58´–8rBÓ8íñ´86¤Œ8rBÓ8Ûª8µ%É8íñ´8§õ9íñ´8Ûª8õ`Ý8rBÓ86¤Œ8rBÓ8mÆ 8µ%É86¤Œ8´–8rBÓ8rBÓ8mÆ 8rBÓ8+ç8Ûª8× +¿86¤Œ8mÆ 8íñ´8Ûª8ˆ +]8´–8ˆ +]8Ûª8I8ê58²iò7…·Ê7¼_w7òË_5òË_5¼_w7ö!£7"w¶òË_5踵6踵6踵6¼_w7踵6<}ã·<}ã·~A¸~A¸<}ã·~A¸<}ã·$‹¸c€-¸<}ã·<}ã·.Õ»·.Õ»·}ÓY·}ÓY·òË_5<}ã·ùK”·…·Ê7踵6¼_w7b !8ö!£7²iò7¼_w7Ù(7…·Ê7ö!£7ñ 8I8Ûª8ˆ +]8ñ 8I8ê58ü–‚86¤Œ8õ`Ý8íñ´8Ûª8rBÓ8õ`Ý8µ%É8£ñ8rBÓ8§õ9õ`Ý8:19Ó9Ó9iF9õ`Ý8íñ´8õ`Ý8+ç8íñ´8rBÓ8£ñ8× +¿8õ`Ý8´–8× +¿86¤Œ8b !8ü–‚8ê58ñ 8ê58ñ 8ˆ +]8ö!£7Ù(7ö!£7"w¶òË_5Py ·¼_w7¼_w7踵6ö!£7ùK”·<}ã·.Õ»·.Õ»·c€-¸lŸ¸c€-¸cƒU¸.Õ»·cƒU¸$‹¸˜i¸cƒU¸c€-¸c€-¸c€-¸lŸ¸lŸ¸òË_5…·Ê7.Õ»·.Õ»·"w¶ùK”·<}ã·}ÓY·c€-¸c€-¸.Õ»·lŸ¸Py ·Py ·è¸µ6Py ·.Õ»·ùK”·Py ·<}ã·}ÓY·Py ·}ÓY·è¸µ6.Õ»·Py ·òË_5…·Ê7ùK”·}ÓY·…·Ê7踵6¼_w7踵6"w¶Ù(7ñ 8…·Ê7ö!£7I8´–8ˆ +]8ü–‚8.q8ˆ +]8I8.q8mÆ 8µ%É8íñ´8õ`Ý8µ%É8.q8´–8.q8ê586¤Œ8…·Ê7…·Ê7.q8ñ 8òË_5òË_5Ù(7踵6ùK”·.Õ»·òË_5"w¶<}ã·<}ã·.Õ»·.Õ»·}ÓY·$‹¸rÔí¸o'±¸cƒU¸(ì’¸6³ã¸Î ¹ºYŸ6³ã¸™H¹Ÿ“Ù¸µ ¹rÔí¸P4 ¹rÔí¸™H¹µ ¹P‰¹™H¹‹]¹P4 ¹P4 ¹s¹µ ¹D÷÷¸6³ã¸6³ã¸Î ¹D÷÷¸Î ¹µ ¹ºYŸµ ¹Î ¹Ÿ“Ù¸D÷÷¸Ÿ“Ù¸rÔí¸ÅuϸÅuϸÅuϸÅuϸe§¸(ì’¸e§¸˜i¸~A¸$‹¸cƒU¸~A¸.Õ»·c€-¸ö!£7Py ·ö!£7ö!£7²iò7I8I8²iò76¤Œ8I8.q8.q8íñ´8mÆ 86¤Œ8.q8ê58b !8.q8ñ 8ü–‚8…·Ê7ö!£7.q8ê58ˆ +]8²iò7ñ 8ü–‚8ñ 8ü–‚8I8´–8b !8ñ 8ö!£7}ÓY·òË_5b !8ö!£7}ÓY·òË_5ùK”·c€-¸<}ã·˜i¸cƒU¸<}ã·<}ã·—ýœ¸—ýœ¸(ì’¸cƒU¸o'±¸—ýœ¸c€-¸.Õ»·lŸ¸lŸ¸~A¸˜i¸—ýœ¸~A¸B݈¸$‹¸lŸ¸—ýœ¸o'±¸(ì’¸ºYŸB݈¸(ì’¸6³ã¸o'±¸#¢}¸6³ã¸ºYŸ(ì’¸—ýœ¸˜i¸—ýœ¸˜i¸cƒU¸.Õ»·lŸ¸.Õ»·Ù(7踵6ö!£7ñ 8.q8²iò7ñ 8ñ 8ê58I8ˆ +]8ˆ +]8Ûª8I8b !86¤Œ8.q86¤Œ8ü–‚8rBÓ8µ%É8íñ´8mÆ 8mÆ 8Ó9Ûª8µ%É8+ç8+ç8× +¿8+ç8õ`Ý8õ`Ý8hÆû8íñ´8íñ´8£ñ8£ñ8µ%É8íñ´8õ`Ý8rBÓ8+ç8íñ´8ü–‚86¤Œ8ˆ +]8mÆ 8íñ´8× +¿8ü–‚8²iò7…·Ê7ö!£7ñ 8b !8ñ 8…·Ê7òË_5…·Ê7踵6踵6¼_w7lŸ¸~A¸.Õ»·lŸ¸$‹¸#¢}¸(ì’¸#¢}¸e§¸o'±¸”?»¸˜i¸˜i¸e§¸o'±¸#¢}¸(ì’¸o'±¸ºYŸ(ì’¸(ì’¸(ì’¸(ì’¸c€-¸~A¸~A¸B݈¸—ýœ¸˜i¸o'±¸(ì’¸cƒU¸cƒU¸.Õ»·c€-¸˜i¸Åuϸ—ýœ¸(ì’¸c€-¸<}ã·lŸ¸è¸µ6òË_5¼_w7<}ã·}ÓY·Py ·ö!£7¼_w7}ÓY·lŸ¸"w¶.Õ»·<}ã·.Õ»·}ÓY·c€-¸lŸ¸cƒU¸<}ã·è¸µ6}ÓY·è¸µ6ùK”·.Õ»·c€-¸lŸ¸#¢}¸c€-¸lŸ¸$‹¸ùK”·<}ã·lŸ¸c€-¸˜i¸~A¸#¢}¸˜i¸cƒU¸(ì’¸˜i¸cƒU¸cƒU¸cƒU¸(ì’¸#¢}¸˜i¸#¢}¸cƒU¸—ýœ¸(ì’¸B݈¸ºYŸ—ýœ¸Ÿ“Ù¸”?»¸#¢}¸”?»¸ºYŸŸ“Ù¸”?»¸o'±¸e§¸rÔí¸(ì’¸e§¸˜i¸(ì’¸e§¸Ÿ“Ù¸6³ã¸rÔí¸rÔí¸rÔí¸Åuϸo'±¸—ýœ¸o'±¸o'±¸˜i¸cƒU¸lŸ¸Py ·˜i¸<}ã·$‹¸}ÓY·ö!£7²iò7ö!£7b !8Ù(7ê58Ù(7…·Ê7I8ü–‚8.q8ü–‚8ˆ +]8ü–‚8Ûª8+ç8rBÓ8hÆû8Ó9hÆû8° 9µ%É8µ%É8µ%É8ü–‚8´–8µ%É8íñ´8Ûª8íñ´8Ûª8+ç8× +¿8rBÓ8µ%É8Ûª8I8ˆ +]8ñ 8b !8b !8²iò7ü–‚8ê58ü–‚8I8…·Ê7…·Ê7Ù(7"w¶è¸µ6c€-¸è¸µ6"w¶<}ã·"w¶è¸µ6踵6òË_5Py ·ùK”·¼_w7}ÓY·ùK”·$‹¸<}ã·(ì’¸(ì’¸˜i¸(ì’¸—ýœ¸—ýœ¸(ì’¸(ì’¸c€-¸˜i¸B݈¸cƒU¸˜i¸#¢}¸~A¸c€-¸~A¸$‹¸#¢}¸lŸ¸}ÓY·"w¶lŸ¸ùK”·Py ·²iò7ö!£7ùK”·¼_w7Py ·¼_w7踵6ö!£7ü–‚8b !8ê58I8ü–‚8mÆ 8ü–‚8íñ´8mÆ 8mÆ 8mÆ 86¤Œ8ü–‚8I8ê58I8ê58.q8I8ü–‚8ü–‚8mÆ 8ˆ +]8I8.q8²iò7ê58…·Ê7¼_w7b !8òË_5ñ 8ñ 8…·Ê7ñ 8ö!£7踵6…·Ê7Ù(7òË_5}ÓY·.Õ»·.Õ»·lŸ¸ùK”·lŸ¸~A¸~A¸(ì’¸c€-¸lŸ¸lŸ¸"w¶.Õ»·ùK”·lŸ¸lŸ¸<}ã·˜i¸(ì’¸˜i¸<}ã·cƒU¸$‹¸lŸ¸c€-¸~A¸~A¸.Õ»·$‹¸~A¸.Õ»·.Õ»·Py ·<}ã·<}ã·Py ·è¸µ6"w¶Py ·¼_w7踵6ö!£7…·Ê7ñ 8b !8I8I8b !8ê58ü–‚8ê58ñ 8ˆ +]8ñ 8.q8ˆ +]8ñ 8.q8ˆ +]8´–8ü–‚8ü–‚8× +¿8õ`Ý8µ%É8.q8ü–‚8íñ´8ü–‚8ˆ +]8.q8ü–‚8b !8.q8I8…·Ê7b !8ê58ö!£7ñ 8¼_w7ñ 8²iò7cƒU¸lŸ¸$‹¸c€-¸$‹¸~A¸˜i¸$‹¸<}ã·lŸ¸Ù(7$‹¸c€-¸c€-¸ùK”·.Õ»·<}ã·(ì’¸lŸ¸$‹¸<}ã·lŸ¸lŸ¸cƒU¸(ì’¸(ì’¸e§¸˜i¸~A¸cƒU¸$‹¸"w¶Py ·Py ·lŸ¸Py ·ùK”·cƒU¸lŸ¸"w¶Py ·Py ·Ù(7<}ã·ùK”·Py ·Py ·…·Ê7.q8òË_5òË_5¼_w7"w¶ê58.q8²iò7ê58ü–‚8I8ü–‚8rBÓ8µ%É8õ`Ý8+ç8Ó9£ñ8µ%É8rBÓ8µ%É8× +¿8+ç8ü–‚8+ç8ˆ +]8´–8ü–‚86¤Œ8mÆ 8´–8õ`Ý8£ñ8mÆ 8rBÓ8.q8Ûª8íñ´8´–8´–8rBÓ8mÆ 8Ûª8ˆ +]8ˆ +]8ü–‚8I8ü–‚8.q8ˆ +]8ê58I8ê58b !8ö!£7ö!£7ñ 8²iò7ö!£7踵6踵6踵6Ù(7"w¶<}ã·ùK”·}ÓY·lŸ¸<}ã·$‹¸lŸ¸~A¸lŸ¸$‹¸lŸ¸<}ã·}ÓY·Py ·"w¶òË_5ùK”·è¸µ6"w¶"w¶¼_w7Ù(7²iò7Ù(7òË_5òË_5Py ·"w¶…·Ê7ñ 86¤Œ8.q8× +¿8íñ´8+ç8Ûª8ê58mÆ 8× +¿8µ%É8mÆ 8´–8´–8ˆ +]8× +¿8rBÓ8£ñ8Ûª8mÆ 8íñ´8× +¿8mÆ 8õ`Ý8§õ9.q8rBÓ8rBÓ8ˆ +]8ê58mÆ 8£ñ8hÆû8õ`Ý8£ñ8µ%É8× +¿8ü–‚8´–8mÆ 8õ`Ý8ü–‚8ü–‚86¤Œ8²iò7ˆ +]8I8¼_w7ñ 8²iò7²iò7¼_w7¼_w7²iò7}ÓY·"w¶}ÓY·ùK”·.Õ»·$‹¸lŸ¸~A¸cƒU¸˜i¸˜i¸˜i¸c€-¸lŸ¸B݈¸˜i¸˜i¸Åuϸ6³ã¸o'±¸ºYŸÅuϸD÷÷¸”?»¸6³ã¸Åuϸe§¸—ýœ¸rÔí¸o'±¸ºYŸΠ¹—ýœ¸”?»¸Åuϸ(ì’¸(ì’¸—ýœ¸(ì’¸”?»¸”?»¸e§¸”?»¸ºYŸe§¸(ì’¸˜i¸$‹¸(ì’¸cƒU¸#¢}¸.Õ»·Py ·"w¶Py ·I8ˆ +]8ê58.q8.q8Ûª8íñ´8ˆ +]8mÆ 8´–8´–8ü–‚8´–8mÆ 8ü–‚8mÆ 8´–8íñ´8íñ´8ü–‚8+ç8íñ´8õ`Ý8hÆû8hÆû8rBÓ8rBÓ8hÆû8rBÓ8mÆ 8Ûª8mÆ 8Ûª86¤Œ8Ûª8mÆ 8mÆ 8mÆ 8ê58.q8ü–‚8.q8ˆ +]8.q8²iò7ê58òË_5Py ·¼_w7ö!£7Py ·.Õ»·Py ·cƒU¸c€-¸<}ã·˜i¸B݈¸~A¸~A¸lŸ¸.Õ»·c€-¸c€-¸c€-¸c€-¸$‹¸lŸ¸c€-¸~A¸<}ã·˜i¸$‹¸c€-¸c€-¸$‹¸c€-¸ùK”·$‹¸~A¸c€-¸c€-¸c€-¸lŸ¸ùK”·.Õ»·ùK”·.Õ»·è¸µ6踵6}ÓY·"w¶Py ·¼_w7²iò7òË_5…·Ê7b !8ñ 8I8I8ñ 8ˆ +]8.q8²iò7I8b !8Ù(7Ù(7"w¶¼_w7¼_w7Ù(7Ù(7b !8ñ 8¼_w7踵6"w¶òË_5<}ã·}ÓY·}ÓY·ùK”·cƒU¸B݈¸$‹¸lŸ¸˜i¸~A¸<}ã·~A¸$‹¸˜i¸lŸ¸—ýœ¸o'±¸D÷÷¸ºYŸŸ“Ù¸—ýœ¸6³ã¸6³ã¸‹]¹P4 ¹µ ¹rÔí¸D÷÷¸‹]¹ $¹a>¹Þ9¹a>¹Þ9¹P‰¹Þ9¹x·)¹‹]¹s¹™H¹ $¹‹]¹P‰¹Ÿ“Ù¸Ÿ“Ù¸rÔí¸ºYŸÅuϸ—ýœ¸—ýœ¸Ÿ“Ù¸o'±¸o'±¸(ì’¸”?»¸Åuϸ”?»¸”?»¸—ýœ¸~A¸cƒU¸"w¶ùK”·ùK”·}ÓY·¼_w7}ÓY·Py ·è¸µ6ñ 8²iò7踵6ê58ü–‚8ê58I8…·Ê7…·Ê7ñ 8b !8ˆ +]8ˆ +]8²iò7ü–‚8ê58b !8´–8£ñ86¤Œ8ˆ +]8õ`Ý8× +¿8íñ´8.q8´–8ê58ˆ +]8µ%É8I8…·Ê7ˆ +]8I8²iò7´–8ñ 8…·Ê7b !8b !8ˆ +]8b !8I8ö!£7²iò7b !8¼_w7Ù(7踵6<}ã·"w¶"w¶}ÓY·"w¶ùK”·¼_w7ö!£7"w¶.Õ»·.Õ»·ùK”·lŸ¸lŸ¸lŸ¸ùK”·lŸ¸òË_5¼_w7lŸ¸lŸ¸$‹¸˜i¸$‹¸—ýœ¸B݈¸”?»¸(ì’¸#¢}¸o'±¸Ÿ“Ù¸rÔí¸(ì’¸ÅuϸΠ¹”?»¸”?»¸”?»¸˜i¸—ýœ¸~A¸(ì’¸#¢}¸˜i¸˜i¸#¢}¸.Õ»·(ì’¸—ýœ¸c€-¸cƒU¸e§¸c€-¸lŸ¸cƒU¸.Õ»·<}ã·ùK”·ùK”·ùK”·¼_w7¼_w7òË_5I8ö!£7²iò7²iò7ü–‚8b !86¤Œ8.q86¤Œ8ü–‚8mÆ 8´–8õ`Ý8µ%É8´–8mÆ 8ü–‚8b !8ö!£7òË_5òË_5踵6…·Ê7ö!£7踵6Ù(7"w¶Py ·òË_5b !8}ÓY·"w¶}ÓY·lŸ¸lŸ¸.Õ»·<}ã·<}ã·˜i¸—ýœ¸#¢}¸(ì’¸˜i¸˜i¸o'±¸—ýœ¸lŸ¸—ýœ¸(ì’¸—ýœ¸”?»¸(ì’¸B݈¸#¢}¸<}ã·~A¸lŸ¸—ýœ¸(ì’¸c€-¸cƒU¸#¢}¸$‹¸ùK”·<}ã·.Õ»·ùK”·cƒU¸$‹¸lŸ¸Py ·Py ·è¸µ6¼_w7¼_w7b !8b !8I8Ûª8.q8Ûª8I8× +¿8mÆ 8Ûª8× +¿8+ç8íñ´8+ç8+ç8£ñ8iF9hÆû8+ç8µ%É8× +¿8Ûª8µ%É8hÆû8:19µ%É8§õ9+ç8µ%É8rBÓ8+ç8§õ9rBÓ8mÆ 86¤Œ8ü–‚8× +¿8íñ´8´–8ü–‚86¤Œ8.q8rBÓ8µ%É8ü–‚8ê58ê58b !8ü–‚8b !8ˆ +]8ê58¼_w7ö!£7ö!£7ö!£7踵6踵6"w¶òË_5踵6ùK”·Py ·Ù(7ùK”·"w¶<}ã·.Õ»·lŸ¸.Õ»·$‹¸"w¶lŸ¸.Õ»·$‹¸"w¶lŸ¸}ÓY·.Õ»·è¸µ6òË_5ˆ +]8ö!£7ö!£7…·Ê7ö!£7ˆ +]8²iò7²iò7I8I8.q86¤Œ8ü–‚8´–8µ%É8× +¿8íñ´8´–8Ûª8íñ´8mÆ 8.q8mÆ 8× +¿8£ñ8hÆû8£ñ8× +¿8õ`Ý8rBÓ8õ`Ý8rBÓ8° 9hÆû8° 9iF9+ç8õ`Ý88\98\9:19° 9iF9iF9[¹09[¹09¥‰&9:199¡+9° 9rBÓ8rBÓ8+ç8rBÓ8+ç8£ñ8Ó9£ñ8hÆû8hÆû8õ`Ý8mÆ 8mÆ 8× +¿8ü–‚8b !8ˆ +]8Ù(7"w¶è¸µ6ùK”·ö!£7òË_5ùK”·Ù(7òË_5.Õ»·è¸µ6"w¶}ÓY·Py ·c€-¸ùK”·Py ·ùK”·lŸ¸Py ·ùK”·è¸µ6òË_5Ù(7踵6ùK”·.Õ»·òË_5踵6ö!£7…·Ê7ˆ +]8I8.q8ñ 8¼_w7ˆ +]8I8b !8ö!£7ê58ê58Ù(7…·Ê7…·Ê7ñ 8¼_w7ö!£7}ÓY·ùK”·è¸µ6…·Ê7ùK”·.Õ»·òË_5¼_w7Ù(7踵6òË_5ùK”·lŸ¸lŸ¸òË_5.Õ»·$‹¸˜i¸Py ·lŸ¸$‹¸c€-¸lŸ¸e§¸o'±¸(ì’¸ºYŸ”?»¸e§¸~A¸˜i¸—ýœ¸—ýœ¸e§¸ºYŸºYŸ—ýœ¸ÅuϸŸ“Ù¸Ÿ“Ù¸ºYŸºYŸo'±¸6³ã¸rÔí¸s¹P4 ¹P4 ¹èNH¹eÏ.¹Ýç3¹Ýç3¹èNH¹a>¹äiM¹š½\¹a>¹—÷f¹š½\¹Þ9¹eÏ.¹f4C¹ $¹x·)¹‹]¹Î ¹P4 ¹eÏ.¹eÏ.¹s¹‹]¹‹]¹eÏ.¹eÏ.¹Ýç3¹Þ9¹P‰¹™H¹P4 ¹µ ¹6³ã¸—ýœ¸rÔí¸ºYŸe§¸”?»¸—ýœ¸(ì’¸o'±¸—ýœ¸e§¸$‹¸cƒU¸<}ã·}ÓY·lŸ¸ùK”·}ÓY·"w¶}ÓY·è¸µ6踵6¼_w7Py ·òË_5òË_5.Õ»·è¸µ6<}ã·.Õ»·$‹¸~A¸c€-¸$‹¸cƒU¸˜i¸˜i¸lŸ¸ùK”·c€-¸Py ·òË_5~A¸$‹¸lŸ¸cƒU¸(ì’¸cƒU¸.Õ»·}ÓY·}ÓY·.Õ»·lŸ¸~A¸~A¸˜i¸cƒU¸˜i¸6³ã¸—ýœ¸ºYŸºYŸ”?»¸rÔí¸Åuϸe§¸o'±¸o'±¸#¢}¸ºYŸ(ì’¸”?»¸(ì’¸”?»¸(ì’¸—ýœ¸#¢}¸˜i¸cƒU¸”?»¸˜i¸cƒU¸˜i¸lŸ¸#¢}¸˜i¸~A¸lŸ¸c€-¸cƒU¸$‹¸c€-¸$‹¸lŸ¸~A¸~A¸lŸ¸~A¸}ÓY·}ÓY·lŸ¸ùK”·ê58ö!£7ö!£7b !8ö!£7²iò7²iò7…·Ê7ê58ˆ +]8ˆ +]8b !8ê58…·Ê7¼_w7²iò7b !8ˆ +]8ˆ +]8ˆ +]8ê58ö!£7ˆ +]8I8ˆ +]8.q8b !86¤Œ8…·Ê7b !8ö!£7ê58ˆ +]8.q8I8ê58ñ 8I8b !8²iò7ö!£7踵6Py ·…·Ê7²iò7¼_w7òË_5¼_w7ö!£7ö!£7}ÓY·$‹¸lŸ¸˜i¸~A¸—ýœ¸(ì’¸#¢}¸(ì’¸˜i¸—ýœ¸o'±¸—ýœ¸e§¸”?»¸Åuϸ6³ã¸Ÿ“Ù¸rÔí¸µ ¹D÷÷¸”?»¸Ÿ“Ù¸ºYŸ—ýœ¸—ýœ¸(ì’¸cƒU¸o'±¸~A¸—ýœ¸~A¸Py ·.Õ»·lŸ¸¼_w7"w¶ùK”·…·Ê7ö!£7ö!£7ö!£7²iò7ê58ê58b !8…·Ê7ñ 8²iò7²iò7I8¼_w7¼_w7¼_w7.Õ»·"w¶<}ã·òË_5踵6¼_w7踵6…·Ê7b !8…·Ê7I8mÆ 8ê58I8ö!£7¼_w7Ù(7òË_5òË_5ùK”·Py ·"w¶.Õ»·òË_5}ÓY·c€-¸(ì’¸lŸ¸ùK”·~A¸~A¸cƒU¸~A¸#¢}¸(ì’¸#¢}¸(ì’¸(ì’¸”?»¸o'±¸rÔí¸Ÿ“Ù¸Ÿ“Ù¸”?»¸Ÿ“Ù¸B݈¸D÷÷¸Ÿ“Ù¸ÅuϸD÷÷¸µ ¹µ ¹P4 ¹‹]¹Ÿ“Ù¸D÷÷¸D÷÷¸P4 ¹™H¹s¹µ ¹P‰¹eÏ.¹‹]¹P4 ¹™H¹‹]¹Þ9¹™H¹s¹‹]¹™H¹P4 ¹‹]¹ÅuϸºYŸ˜i¸D÷÷¸Ÿ“Ù¸(ì’¸o'±¸c€-¸(ì’¸cƒU¸lŸ¸c€-¸c€-¸c€-¸$‹¸<}ã·ùK”·}ÓY·b !8I8¼_w7¼_w7ê58²iò7ö!£7ö!£7ö!£7踵6ö!£7Ù(7Py ·òË_5踵6¼_w7.Õ»·Py ·Ù(7}ÓY·Py ·.Õ»·lŸ¸Py ·è¸µ6¼_w7¼_w7¼_w7²iò7踵6…·Ê7}ÓY·}ÓY·<}ã·.Õ»·Py ·"w¶<}ã·ùK”·}ÓY·$‹¸}ÓY·$‹¸.Õ»·Py ·ùK”·$‹¸#¢}¸(ì’¸˜i¸(ì’¸—ýœ¸—ýœ¸—ýœ¸ºYŸo'±¸6³ã¸(ì’¸(ì’¸B݈¸<}ã·"w¶}ÓY·}ÓY·ùK”·òË_5ùK”·òË_5ö!£7òË_5ùK”·è¸µ6¼_w7ùK”·Py ·òË_5¼_w7踵6…·Ê7b !8ê58mÆ 8ˆ +]8b !8ñ 8Ûª8mÆ 8.q8b !8ü–‚8ˆ +]86¤Œ8ü–‚8Ûª86¤Œ8Ûª8õ`Ý8£ñ8£ñ8õ`Ý8hÆû8£ñ8£ñ8hÆû8£ñ8Ó9Ó9µ%É8µ%É8µ%É8£ñ8õ`Ý8rBÓ8õ`Ý8õ`Ý8Ûª8íñ´8× +¿8.q8ê58.q8.q8Ûª8× +¿8.q8rBÓ8rBÓ8Ûª8µ%É8´–86¤Œ8Ûª8I8Ûª8.q8I8mÆ 8Ûª8ˆ +]8ñ 8b !8²iò7òË_5踵6¼_w7òË_5踵6…·Ê7"w¶Py ·¼_w7Ù(7b !8Ù(7ö!£7Py ·.Õ»·.Õ»·<}ã·òË_5"w¶…·Ê7ê58¼_w7ˆ +]8ˆ +]8…·Ê7ö!£7ö!£7Ù(7²iò7I8ö!£7…·Ê7ü–‚8.q8Ûª8ˆ +]8ê58ˆ +]8mÆ 8.q8ü–‚8.q8´–8Ûª8mÆ 8§õ9rBÓ8õ`Ý8rBÓ8µ%É8iF9° 9hÆû8hÆû8µ%É8× +¿8´–8Ûª8íñ´8mÆ 8mÆ 8£ñ8.q8µ%É8µ%É8õ`Ý8õ`Ý8mÆ 8rBÓ8rBÓ8£ñ8£ñ8õ`Ý8£ñ8£ñ8× +¿8§õ9§õ9° 9Ó9° 9:19Ó9£ñ8× +¿8Ûª8Ûª8I8b !8I8Ù(7²iò7Ù(7²iò7Ù(7.Õ»·òË_5¼_w7òË_5lŸ¸ùK”·ùK”·òË_5òË_5ùK”·}ÓY·.Õ»·lŸ¸.Õ»·.Õ»·è¸µ6Py ·òË_5ùK”·Py ·.Õ»·¼_w7"w¶Py ·Py ·Ù(7Py ·<}ã·.Õ»·Ù(7Ù(7¼_w7踵6òË_5…·Ê7Ù(7b !8ê58b !8"w¶¼_w7¼_w7²iò7ü–‚8I8b !8.q8íñ´8Ûª8Ûª8µ%É8§õ9£ñ8rBÓ8rBÓ8mÆ 8mÆ 8Ûª8£ñ8hÆû8× +¿8£ñ8µ%É8´–8Ûª8Ûª8.q8´–8I86¤Œ8I8ñ 8Ù(7…·Ê7ö!£7…·Ê7"w¶òË_5}ÓY·<}ã·cƒU¸ùK”·ö!£7ùK”·$‹¸˜i¸#¢}¸lŸ¸˜i¸(ì’¸˜i¸cƒU¸(ì’¸ùK”·<}ã·(ì’¸˜i¸#¢}¸#¢}¸˜i¸c€-¸B݈¸e§¸—ýœ¸(ì’¸6³ã¸ºYŸ”?»¸(ì’¸(ì’¸(ì’¸—ýœ¸e§¸c€-¸˜i¸—ýœ¸(ì’¸~A¸.Õ»·$‹¸#¢}¸<}ã·$‹¸$‹¸c€-¸Py ·Ù(7ö!£7Py ·¼_w7Ù(7¼_w7b !8ê58Ù(7ö!£7.q8ˆ +]86¤Œ86¤Œ8´–8× +¿8´–8ü–‚8ü–‚8mÆ 8ˆ +]8ˆ +]8Ûª8´–8I86¤Œ8²iò7ö!£7ö!£7b !8I8ñ 8²iò7ö!£7¼_w7Py ·$‹¸.Õ»·ùK”·cƒU¸cƒU¸(ì’¸(ì’¸~A¸˜i¸cƒU¸(ì’¸(ì’¸(ì’¸#¢}¸Åuϸ6³ã¸e§¸D÷÷¸P4 ¹rÔí¸6³ã¸ÅuϸŸ“Ù¸ÅuϸrÔí¸D÷÷¸e§¸ºYŸŸ“Ù¸Åuϸ—ýœ¸(ì’¸”?»¸ºYŸÅuϸºYŸ(ì’¸”?»¸—ýœ¸e§¸”?»¸ºYŸ—ýœ¸e§¸o'±¸(ì’¸~A¸(ì’¸B݈¸<}ã·.Õ»·}ÓY·.Õ»·ùK”·lŸ¸lŸ¸"w¶lŸ¸lŸ¸.Õ»·Py ·¼_w7²iò7²iò7ñ 8踵6²iò7ê58…·Ê7ñ 8I8ñ 8I8ü–‚8Ûª8.q8.q8× +¿8.q8Ûª8.q8´–8× +¿8I86¤Œ86¤Œ8ñ 8ü–‚8íñ´86¤Œ8.q8I8ö!£7ö!£7踵6¼_w7Ù(7Py ·lŸ¸ùK”·lŸ¸$‹¸˜i¸#¢}¸˜i¸#¢}¸#¢}¸ºYŸ—ýœ¸B݈¸(ì’¸˜i¸cƒU¸B݈¸˜i¸o'±¸ÅuϸrÔí¸rÔí¸Åuϸ—ýœ¸ºYŸD÷÷¸”?»¸Ÿ“Ù¸Ÿ“Ù¸Ÿ“Ù¸D÷÷¸D÷÷¸Ÿ“Ù¸o'±¸ºYŸŸ“Ù¸—ýœ¸ÅuϸŸ“Ù¸Åuϸ—ýœ¸”?»¸Ÿ“Ù¸e§¸cƒU¸(ì’¸˜i¸#¢}¸—ýœ¸cƒU¸$‹¸<}ã·}ÓY·<}ã·òË_5¼_w7踵6ö!£7ü–‚8ˆ +]8ü–‚8µ%É8õ`Ý8hÆû8+ç8hÆû8§õ9+ç8§õ9hÆû8:199¡+98\9iF9§õ9£r!99¡+9iF9§õ9Ûª8° 9hÆû8hÆû89¡+9¥‰&9£r!9:19iF9§õ9+ç8£ñ8:19hÆû8§õ9+ç8´–8+ç8õ`Ý8õ`Ý8£ñ8õ`Ý8íñ´8´–8.q8mÆ 8.q8ü–‚8´–86¤Œ8ü–‚86¤Œ8ñ 8I8ê58ñ 8ñ 8"w¶"w¶cƒU¸Py ·Py ·è¸µ6踵6òË_5…·Ê7踵6"w¶"w¶Py ·…·Ê7Py ·…·Ê7ü–‚8…·Ê7ñ 8I8ñ 8ö!£7ñ 8踵6b !8b !8.q8ˆ +]8mÆ 8Ûª8× +¿86¤Œ8× +¿8µ%É8íñ´8Ûª8mÆ 8rBÓ8+ç8§õ9µ%É8§õ9õ`Ý8hÆû8õ`Ý8+ç8× +¿8+ç8× +¿8µ%É8µ%É8íñ´8§õ9´–8× +¿8rBÓ86¤Œ8rBÓ8+ç86¤Œ8íñ´8ü–‚8íñ´8µ%É8ü–‚8íñ´86¤Œ8.q8²iò7ö!£7¼_w7ñ 8ö!£7踵6…·Ê7òË_5}ÓY·ùK”·lŸ¸~A¸lŸ¸.Õ»·<}ã·"w¶<}ã·.Õ»·Py ·"w¶ùK”·Py ·<}ã·<}ã·ùK”·<}ã·—ýœ¸cƒU¸#¢}¸˜i¸lŸ¸lŸ¸~A¸ùK”·c€-¸˜i¸.Õ»·¼_w7òË_5I8踵6Ù(7…·Ê7…·Ê7Py ·è¸µ6²iò7ñ 8.q8ˆ +]8mÆ 8íñ´8ü–‚8Ûª8.q8ü–‚8.q86¤Œ8´–8ñ 8b !8b !8²iò7ö!£7¼_w7²iò7ö!£7²iò7²iò7mÆ 8Ûª8õ`Ý8Ûª8ü–‚8íñ´8b !8.q8ü–‚8ê58ñ 8²iò76¤Œ8ˆ +]8.q8b !8òË_5b !8ñ 8b !8ñ 8…·Ê7…·Ê7¼_w7ö!£7¼_w7"w¶Py ·è¸µ6Ù(7踵6踵6lŸ¸˜i¸lŸ¸c€-¸B݈¸B݈¸(ì’¸(ì’¸$‹¸$‹¸$‹¸o'±¸e§¸cƒU¸(ì’¸#¢}¸—ýœ¸”?»¸(ì’¸(ì’¸o'±¸(ì’¸(ì’¸(ì’¸(ì’¸”?»¸Åuϸ”?»¸ºYŸ”?»¸—ýœ¸e§¸—ýœ¸o'±¸cƒU¸#¢}¸#¢}¸(ì’¸c€-¸~A¸lŸ¸~A¸$‹¸lŸ¸"w¶ùK”·lŸ¸…·Ê7Ù(7"w¶è¸µ6ö!£7òË_5òË_5Py ·Py ·}ÓY·<}ã·.Õ»·lŸ¸è¸µ6òË_5}ÓY·Py ·Py ·è¸µ6踵6ö!£7"w¶òË_5…·Ê7¼_w7¼_w7¼_w7òË_5…·Ê7¼_w7¼_w7踵6¼_w7b !8ö!£7…·Ê7ùK”·è¸µ6踵6¼_w7¼_w7lŸ¸ùK”·<}ã·$‹¸lŸ¸(ì’¸cƒU¸#¢}¸˜i¸~A¸lŸ¸ºYŸe§¸ºYŸ(ì’¸o'±¸(ì’¸|Pd|1|24600|2013-282T15:32:49.397 ˆ‘¹^¤¹»â¸Þþö¸ˆ‘¹ˆ‘¹Þþö¸á¹e#$¹ª ¹á¹1Üì¸Þþö¸±›Ø¸.Hº¸.Hº¸¶{¸Ñœ¸:0°¸9…·÷“?¸{°ß·’˜S¸÷“?¸§¢¸ —+¸&¤g¸ —+¸žõ‘¸¶{¸÷“?¸÷“?¸’˜S¸žõ‘¸¶{¸’˜S¸÷“?¸¶{¸§¢¸’˜S¸9…·9…·{°ß·§NR··{°ß·· ¸·9…·¶í©5{°ß···¶í©5¶í©5·üè~7üè~7íJ8’7ö7êW07£ë68`ê¦7¶í©5··`ê¦7üè~7Jò"8ì‚Î7¶í©5üè~7`ê¦7ÛY¶ÛY¶ì‚Î7§NR·ÛY¶§NR· ¸·¶{¸§¢¸¶{¸.Hº¸»â¸±›Ø¸f¦¸Ñœ¸#bĸ~θ.Hº¸#bĸ1Üì¸Þþö¸f¦¸:0°¸¶{¸¶{¸ø懸¶{¸žõ‘¸Ñœ¸¶{¸žõ‘¸&¤g¸:0°¸’˜S¸ —+¸žõ‘¸f¦¸÷“?¸’˜S¸ø懸#bĸ:0°¸:0°¸~θ±›Ø¸Ñœ¸:0°¸žõ‘¸Ä•Ä6§NR·žõ‘¸÷“?¸’˜S¸ê·¸9…·ê·¸ ¸·ê·¸9…·ÛY¶·üè~7êW07ÛY¶Ä•Ä6’7ö7’7ö7ì‚Î7¶í©5êW07Ä•Ä6`ê¦7Ä•Ä6üè~7`ê¦7¶í©5`ê¦7`ê¦7ì‚Î7£ë68£ë68!ƒ8Jò"8ì‚Î7·`ê¦7`ê¦7ì‚Î7 ¸· ¸·§¢¸{°ß·§NR· ¸·ê·¸ê·¸§¢¸{°ß· —+¸{°ß· ¸·{°ß· —+¸’˜S¸žõ‘¸ê·¸ø懸’˜S¸žõ‘¸’˜S¸ ¸·ê·¸§NR·ê·¸ê·¸·9…·žõ‘¸f¦¸žõ‘¸’˜S¸~θ.Hº¸#bĸ:0°¸Ñœ¸f¦¸žõ‘¸:0°¸Ñœ¸žõ‘¸&¤g¸ —+¸:0°¸&¤g¸ê·¸ ¸·§¢¸÷“?¸ ¸· —+¸9…·`ê¦7`ê¦7§NR·§NR·’7ö7Ä•Ä6ì‚Î7’7ö7¶í©5¶í©59…·’7ö7üè~7`ê¦7î8¶í©5üè~7`ê¦7`ê¦7`ê¦7Jò"8és8î8£ë68Ÿš8és8N½¡8íJ8`ê¦7íJ8Jò"8íJ8£ë68’7ö7íJ8î8`ê¦7üè~7üè~7êW07¶í©5¶í©5 ¸·§¢¸žõ‘¸’˜S¸{°ß·§¢¸ —+¸ê·¸¶{¸žõ‘¸÷“?¸.Hº¸Ñœ¸Ñœ¸.Hº¸±›Ø¸#bĸ1Üì¸~θ»â¸ˆ‘¹1Üì¸1Üì¸j=¹‡ö¹e#$¹ª ¹1Ü츈‘¹1Üì¸^¤¹ˆ‘¹^¤¹á¹ª ¹Ñœ¸~θf¦¸f¦¸f¦¸&¤g¸:0°¸»â¸:0°¸±›Ø¸žõ‘¸:0°¸žõ‘¸§¢¸9…·· ¸·¶í©5 —+¸ —+¸§¢¸§¢¸9…·¶í©5{°ß·{°ß·ê·¸§NR·§NR· ¸·9…·î8üè~7üè~7ì‚Î7`ê¦7Jò"8î8Ÿš8`ê¦7Ÿš8¼ª—8î8¨õ^8J:Ô8¼ª—8TÀ8.Ò«8!ƒ8Ÿš8N½¡8aÊ8N½¡8J:Ô8!ƒ8¨õ^8.Ò«8£ë68Ÿš8Ÿš8íJ8íJ8¼ª—8!ƒ8¨õ^8Ÿš8J:Ô8¼ª—8:éµ8¼ª—8!ƒ8¼ª—8íJ8és8és8Jò"8¼ª—8ì‚Î7ì‚Î7üè~7 ¸· ¸·ê·¸¶í©5êW079…·§NR·`ê¦7§NR· ¸·9…··§NR·`ê¦7’7ö7êW07£ë68Jò"8£ë68Ÿš8íJ8Ÿš8!ƒ8N½¡8á¾ü8aÊ81…9á¾ü81…9Wyè8õq9.Ò«8aÊ8Wyè8TÀ8 ™ 91…9øÂ9`'9`'9ç¶J9ç¶J9ÒO9*h;9+œE9*h;92619Qï!9*h;9ÆíT9+œE9`'9êN69Qï!9Qï!9+œE92619êN69ÒO9+œE9êN69êN69`'9*h;9Qï!9 ™ 9Qï!9øÂ9êN69×Ø9,9õq9øÂ9õq9U›ò8Wyè8¼ª—8¨õ^8íJ8ì‚Î7!ƒ8¼ª—8N½¡8!ƒ8¨õ^8¨õ^8Ÿš8íJ8î8Jò"8Ä•Ä6¶í©5êW07¶í©5`ê¦7§NR· ¸·ê·¸ ¸·¶í©5§¢¸ê·¸’˜S¸{°ß·ÛY¶§NR·{°ß·§¢¸§¢¸’˜S¸§¢¸ê·¸{°ß·§¢¸{°ß·ÛY¶ ¸·ÛY¶üè~7üè~7`ê¦7’7ö7üè~7¶í©5ì‚Î7és8.Ò«8.Ò«8.Ò«8TÀ8TÀ8øXÞ8Ÿš8:éµ8¹­9á¾ü8øXÞ8Wyè8á¾ü8J:Ô8á¾ü8õq9 ™ 9`'9*h;9×Ø9*h;9¹­9×Ø92619Qï!9¹­9øÂ9õq9J:Ô8øXÞ8U›ò8J:Ô8!ƒ8TÀ8Ÿš8íJ8î8¼ª—8és8!ƒ8¼ª—8Ÿš8Jò"8Ä•Ä6`ê¦7î8î8ì‚Î7`ê¦7Ä•Ä6êW07Ä•Ä6¶í©5êW07üè~7’7ö7és8ÛY¶üè~7Ä•Ä6üè~7ÛY¶··ê·¸ê·¸9…·§NR·§¢¸ ¸· ¸··ê·¸ ¸·ÛY¶`ê¦7`ê¦7ì‚Î7êW07{°ß··êW07·ê·¸Ä•Ä6üè~7î8`ê¦7¨õ^8¼ª—8£ë68Ÿš8¨õ^8N½¡8TÀ8aÊ8TÀ8J:Ô8U›ò8õq9¹­9`'9Qï!92619,9ç¶J9*h;9ë@9`'9,9ë@9ç¶J9ÒO9ä Z9ä Z9ÆíT9ç¶J92619êN69*h;9*h;9`'92619Qï!9Qï!9¹­9¹­9U›ò8á¾ü8!ƒ8N½¡8TÀ8!ƒ8¨õ^8î8Jò"8íJ8Jò"8íJ8és8î8üè~7`ê¦7üè~7¶í©5`ê¦7’7ö7’7ö7’7ö7¨õ^8`ê¦7Ä•Ä6ì‚Î7’7ö7üè~7ÛY¶¶í©5ê·¸§NR·ê·¸’˜S¸§¢¸žõ‘¸’˜S¸ —+¸§¢¸ê·¸¶{¸¶{¸žõ‘¸žõ‘¸÷“?¸ø懸žõ‘¸:0°¸f¦¸ —+¸§¢¸ø懸¶{¸ ¸·9…··{°ß·¶í©5¶í©5’7ö7ì‚Î7£ë68êW07¨õ^8!ƒ8íJ8N½¡8N½¡8N½¡8TÀ8J:Ô8:éµ8N½¡8íJ8¨õ^8Ÿš8¼ª—8:éµ8Jò"8N½¡8és8£ë68Jò"8íJ8Jò"8’7ö7¨õ^8íJ8ÛY¶êW07êW07êW07íJ8`ê¦7¶í©5Ä•Ä6¶í©5êW07ì‚Î7êW07ì‚Î7 ¸·ê·¸· ¸·{°ß·9…·§¢¸{°ß·§¢¸’˜S¸&¤g¸žõ‘¸§¢¸÷“?¸’˜S¸f¦¸Ñœ¸#bĸ.Hº¸žõ‘¸÷“?¸#bĸžõ‘¸žõ‘¸»â¸#bĸ»â¸^¤¹!̹±›Ø¸±›Ø¸è· +¹^¤¹±›Ø¸#bĸÞþö¸è· +¹1Üì¸~θ~θ~θ:0°¸Ñœ¸~θ.Hº¸~θ’˜S¸Ñœ¸#bĸ±›Ø¸f¦¸žõ‘¸¶{¸÷“?¸{°ß·§¢¸{°ß· —+¸ ¸·&¤g¸ ¸·{°ß· —+¸Ä•Ä6’7ö7Ä•Ä6Ä•Ä6Ä•Ä6·êW07Ä•Ä6êW07êW07ì‚Î7£ë68!ƒ8:éµ8:éµ8¼ª—8Ÿš8Jò"8íJ8£ë68üè~7íJ8£ë68üè~7î8ì‚Î7ì‚Î7’7ö7üè~7íJ8’7ö7î8`ê¦7ì‚Î7ì‚Î7`ê¦7üè~7êW07ÛY¶Ä•Ä6üè~7`ê¦7î8üè~7êW07Ä•Ä6¶í©5§NR·ÛY¶Ä•Ä69…·¶í©5§NR·üè~7§NR···ê·¸¶{¸ê·¸ê·¸Ñœ¸¶{¸ —+¸§¢¸¶{¸žõ‘¸žõ‘¸÷“?¸÷“?¸ ¸·ê·¸ê·¸§NR· —+¸ê·¸¶í©5¶í©5·`ê¦7ì‚Î7ì‚Î7î8ì‚Î7`ê¦7üè~7ÛY¶î8Jò"8¨õ^8.Ò«8:éµ8Ÿš8aÊ8:éµ8!ƒ8TÀ8TÀ8Ÿš8J:Ô8aÊ8Ÿš8N½¡8TÀ8:éµ8øXÞ8aÊ8øXÞ8øXÞ8 ™ 91…9õq9øÂ91…9 ™ 9øXÞ8á¾ü8TÀ8øXÞ8:éµ8TÀ8TÀ8Ÿš8£ë68`ê¦7·üè~7§NR··§¢¸ —+¸§¢¸’˜S¸’˜S¸¶{¸’˜S¸f¦¸žõ‘¸žõ‘¸÷“?¸÷“?¸f¦¸.Hº¸Ñœ¸&¤g¸žõ‘¸:0°¸žõ‘¸žõ‘¸žõ‘¸ —+¸f¦¸’˜S¸÷“?¸&¤g¸÷“?¸§¢¸§¢¸÷“?¸÷“?¸÷“?¸ø懸žõ‘¸ —+¸§¢¸÷“?¸§NR·9…·Ä•Ä6§NR· ¸·ÛY¶Ä•Ä6êW07`ê¦7êW07`ê¦7`ê¦7î8î8!ƒ8£ë68£ë68ì‚Î7¨õ^8ì‚Î7íJ8és8íJ8£ë68és8:éµ8N½¡8N½¡8TÀ8TÀ8TÀ8øXÞ8õq9U›ò8U›ò81…9Qï!9õq9U›ò81…9J:Ô8á¾ü8á¾ü8TÀ8TÀ8J:Ô8:éµ8:éµ8.Ò«8¨õ^8¨õ^8¼ª—8!ƒ8¨õ^8£ë68és8íJ8Jò"8íJ8î8Ä•Ä6¶í©5ÛY¶êW07êW07ÛY¶ —+¸···Ä•Ä6·Ä•Ä6 ¸·&¤g¸÷“?¸§¢¸&¤g¸žõ‘¸§¢¸{°ß· —+¸’˜S¸ê·¸§¢¸÷“?¸ —+¸{°ß·§NR·ê·¸{°ß·ÛY¶êW07`ê¦7ì‚Î7üè~7î8íJ8ì‚Î7£ë68ÛY¶íJ8!ƒ8és8¨õ^8¨õ^8¨õ^8.Ò«8TÀ8¼ª—8:éµ8!ƒ8íJ8N½¡8!ƒ8íJ8:éµ8.Ò«8TÀ8J:Ô8J:Ô8Wyè8!ƒ8¼ª—8!ƒ8:éµ8¼ª—8¨õ^8és8!ƒ8!ƒ8Ÿš8£ë68Jò"8íJ8és8¼ª—8¼ª—8és8Ÿš8N½¡8Ÿš8Jò"8és8î8Jò"8’7ö7î8és8Jò"8N½¡8¼ª—8`ê¦7üè~7î8’7ö7¶í©5·Ä•Ä69…·Ä•Ä6Ä•Ä6{°ß·§NR·§¢¸÷“?¸ê·¸ ¸·÷“?¸f¦¸¶{¸#bÄ¸è· +¹ª ¹ˆ‘¹ª ¹á¹´:)¹è· +¹ª ¹‡ö¹ª ¹Þþö¸ˆ‘¹!̹:0°¸±›Ø¸~θ1Üì¸#bĸf¦¸ø懸§¢¸÷“?¸ ¸·ê·¸ ¸·ÛY¶ê·¸§¢¸§¢¸ ¸·Ä•Ä69…·¶í©5ÛY¶`ê¦7’7ö7üè~7és8¨õ^8î8Jò"8Jò"8Ä•Ä6!ƒ8!ƒ8£ë68íJ8.Ò«8N½¡8Ÿš8.Ò«8£ë68Jò"8Jò"8aÊ8TÀ8!ƒ8¨õ^8íJ8Ÿš8`ê¦7Ä•Ä6ÛY¶ÛY¶·¶í©5··¶í©59…·§NR···{°ß·§¢¸¶{¸ø懸~θÑœ¸{°ß·÷“?¸’˜S¸:0°¸Ñœ¸f¦¸.Hº¸#bĸ:0°¸±›Ø¸~θ#bĸ1Üì¸!̹žõ‘¸#bĸžõ‘¸.Hº¸~θˆ‘¹Þþö¸»â¸#bĸf¦¸#bĸ±›Ø¸.Hº¸~θ#bĸø懸ø懸÷“?¸ —+¸&¤g¸ê·¸žõ‘¸žõ‘¸§NR·9…·§NR·ÛY¶ÛY¶üè~7`ê¦7ì‚Î7î8és8Jò"8ì‚Î7¨õ^8¨õ^8£ë68!ƒ8Jò"8íJ8¨õ^8Jò"8£ë68N½¡8¼ª—8.Ò«8N½¡8és8:éµ8TÀ8és8N½¡8és8£ë68és8£ë68üè~7Jò"8¨õ^8’7ö7üè~7`ê¦7íJ8î8üè~7ê·¸§NR·§NR·{°ß·9…·§NR·9…·9…·{°ß· ¸·§¢¸9…·§¢¸&¤g¸žõ‘¸&¤g¸ê·¸.Hº¸’˜S¸§¢¸ê·¸&¤g¸Ñœ¸÷“?¸¶{¸žõ‘¸§¢¸ ¸·{°ß·§NR· ¸·§NR·ÛY¶ ¸·§NR·9…·¶í©5ÛY¶ ¸·Ä•Ä6üè~7Ä•Ä69…· ¸·9…·ê·¸9…·¶í©59…·’7ö7’7ö7î8êW07î8£ë68íJ8¨õ^8és8Jò"8és8¨õ^8TÀ8TÀ8!ƒ8N½¡8N½¡8N½¡8¼ª—8:éµ8:éµ8:éµ8á¾ü8 ™ 9á¾ü8¹­9 ™ 9Wyè8øXÞ8J:Ô8øXÞ8øXÞ8á¾ü8aÊ8Wyè8TÀ8aÊ8.Ò«8Wyè81…9TÀ8øXÞ8TÀ8Wyè8J:Ô8aÊ8TÀ8TÀ8øXÞ8¼ª—8¼ª—8¨õ^8:éµ8¼ª—8¼ª—8¨õ^8Jò"8¨õ^8üè~7êW07Ä•Ä6`ê¦7¶í©5·9…·· ¸·ê·¸{°ß·ê·¸{°ß·’˜S¸§¢¸žõ‘¸’˜S¸÷“?¸&¤g¸÷“?¸žõ‘¸ —+¸ê·¸{°ß·ê·¸§¢¸ê·¸ ¸·§¢¸ê·¸ê·¸ ¸·ê·¸ —+¸{°ß· —+¸§¢¸§NR·{°ß·§NR·üè~7·`ê¦7ì‚Î7`ê¦7üè~7ÛY¶··Ä•Ä6êW07ÛY¶íJ8Jò"8î8’7ö7és8î8ì‚Î7N½¡8és8Ÿš8!ƒ8`ê¦7î8î8N½¡8!ƒ8!ƒ8íJ8és8íJ8î8íJ8’7ö7ì‚Î7és8íJ8TÀ8:éµ8!ƒ8`ê¦7Jò"8ì‚Î7íJ8ì‚Î7ì‚Î7ì‚Î7Ä•Ä6üè~7üè~7¶í©5üè~7 ¸·9…· ¸·§NR·9…·ê·¸{°ß·{°ß·§¢¸’˜S¸ê·¸ê·¸ —+¸¶{¸&¤g¸ —+¸&¤g¸žõ‘¸Ñœ¸#bĸ.Hº¸#bĸ:0°¸Ñœ¸&¤g¸’˜S¸ø懸:0°¸&¤g¸žõ‘¸÷“?¸žõ‘¸Ñœ¸9…·¶{¸’˜S¸&¤g¸¶{¸&¤g¸ —+¸9…·¶í©5’7ö7Ä•Ä6·’7ö7Jò"8¶í©5Jò"8¼ª—8£ë68£ë68Jò"8ì‚Î7Jò"8¨õ^8!ƒ8és8íJ8¼ª—8!ƒ8!ƒ8!ƒ8Ÿš8és8¨õ^8¼ª—8TÀ8:éµ8¼ª—8:éµ8 ™ 9 ™ 9J:Ô8õq9á¾ü8:éµ8øXÞ8TÀ8:éµ8øXÞ8TÀ8:éµ8.Ò«8¨õ^8!ƒ8`ê¦7êW07§NR··’7ö79…· ¸·{°ß·’˜S¸ê·¸{°ß·’˜S¸:0°¸Ñœ¸.Hº¸f¦¸Ñœ¸f¦¸f¦¸:0°¸žõ‘¸f¦¸#bĸ.Hº¸~θ±›Ø¸~θ±›Ø¸f¦¸»â¸Ñœ¸~θ±›Ø¸~θ1Üì¸.Hº¸±›Ø¸è· +¹1Üì¸~θ#bĸ±›Ø¸žõ‘¸Ñœ¸’˜S¸ —+¸¶í©5§¢¸§NR·¶í©5¶í©5ÛY¶¶í©5`ê¦7`ê¦7ÛY¶£ë68’7ö7£ë68és8Jò"8’7ö7ì‚Î7ì‚Î7£ë68¨õ^8üè~7£ë68î8ì‚Î7Jò"8’7ö7î8£ë68’7ö7î8£ë68êW07î8¨õ^8és8N½¡8£ë68`ê¦7¨õ^8¨õ^8¼ª—8Jò"8`ê¦7£ë68êW07Ä•Ä6`ê¦7ÛY¶êW07ÛY¶9…·Ä•Ä6’7ö7ÛY¶§NR·ÛY¶{°ß·{°ß·9…·ê·¸§¢¸ —+¸žõ‘¸:0°¸~θ#bĸ¶{¸f¦¸#bĸžõ‘¸:0°¸&¤g¸.Hº¸#bĸ»â¸ˆ‘¹:0°¸»â¸~θf¦¸Ñœ¸žõ‘¸.Hº¸f¦¸.Hº¸~θ.Hº¸f¦¸÷“?¸#bĸ.Hº¸ø懸.Hº¸¶{¸žõ‘¸f¦¸Ñœ¸žõ‘¸¶{¸÷“?¸&¤g¸ —+¸{°ß··9…· —+¸·§NR·9…·¶í©5ÛY¶êW07üè~7!ƒ8£ë68ì‚Î7£ë68’7ö7’7ö7’7ö7êW07Ä•Ä6êW07·üè~7Ä•Ä6üè~7`ê¦7’7ö7Ä•Ä6`ê¦7’7ö7`ê¦7üè~7üè~7î8êW07ì‚Î7Jò"8§NR·ê·¸{°ß·¶{¸’˜S¸¶{¸f¦¸’˜S¸žõ‘¸žõ‘¸#bĸ#bĸf¦¸~θ»â¸:0°¸Ñœ¸.Hº¸.Hº¸f¦¸~θ#bĸ.Hº¸~θˆ‘¹Þþö¸ˆ‘¹è· +¹è· +¹±›Ø¸ˆ‘¹è· +¹1Üì¸^¤¹»â¸Þþö¸#bÄ¸è· +¹»â¸^¤¹±›Ø¸#bĸ:0°¸#bĸf¦¸Ñœ¸±›Ø¸Ñœ¸žõ‘¸&¤g¸’˜S¸ ¸· ¸·{°ß·§¢¸ —+¸ —+¸§¢¸§¢¸ê·¸9…·`ê¦7`ê¦7üè~7·î8î8¨õ^8¨õ^8¼ª—8és8:éµ8J:Ô8á¾ü8U›ò8J:Ô8øXÞ8á¾ü8J:Ô8õq91…9øÂ9øÂ91…9¹­9øXÞ8TÀ8Wyè8Ÿš81…9N½¡8øXÞ8øXÞ8:éµ8N½¡8:éµ8Jò"8¨õ^8`ê¦7êW07êW07ÛY¶ —+¸§NR·§¢¸’˜S¸:0°¸:0°¸žõ‘¸žõ‘¸Ñœ¸:0°¸:0°¸!̹Þþö¸ˆ‘¹^¤¹‡ö¹‡ö¹ˆ‘¹ˆ‘¹±›Ø¸!̹^¤¹»â¸^¤¹±›Ø¸±›Ø¸1Üì¸~θ1Ü츱›Ø¸~θ^¤¹±›Ø¸^¤¹Þþö¸žõ‘¸.Hº¸žõ‘¸žõ‘¸#bĸ:0°¸.Hº¸Ñœ¸žõ‘¸÷“?¸÷“?¸žõ‘¸žõ‘¸÷“?¸§¢¸ ¸·êW07êW079…·êW07êW07`ê¦7ì‚Î7ì‚Î7ì‚Î7Jò"8î8üè~7`ê¦7î8íJ8’7ö7êW07 ¸·9…·Ä•Ä6 ¸·êW07ì‚Î7£ë68`ê¦7’7ö7êW07Ä•Ä6Ä•Ä6§NR·ÛY¶Ä•Ä6§NR·9…·ÛY¶·§NR·ê·¸{°ß· ¸·’˜S¸÷“?¸:0°¸Ñœ¸Ñœ¸¶{¸žõ‘¸÷“?¸žõ‘¸žõ‘¸~θ&¤g¸.Hº¸:0°¸žõ‘¸žõ‘¸±›Ø¸Ñœ¸f¦¸^¤¹Þþö¸f¦¸~θˆ‘¹±›Ø¸±›Ø¸ˆ‘¹Þþö¸è· +¹ˆ‘¹±›Ø¸#bĸ»â¸±›Ø¸Ñœ¸f¦¸žõ‘¸Ñœ¸’˜S¸&¤g¸&¤g¸ø懸:0°¸f¦¸.Hº¸žõ‘¸žõ‘¸&¤g¸Ñœ¸f¦¸ ¸·ê·¸·9…·ÛY¶Ä•Ä6üè~7Ä•Ä6{°ß·9…·¶í©5{°ß·¶í©5ì‚Î7íJ8ì‚Î7ì‚Î7Jò"8¨õ^8íJ8íJ8£ë68és8Ÿš8N½¡8.Ò«8Ÿš8¼ª—8Ÿš8Ÿš8Jò"8£ë68és8êW07¶í©5§NR·êW07{°ß·§¢¸{°ß·ê·¸ê·¸{°ß·{°ß·§¢¸&¤g¸ —+¸§¢¸ —+¸ —+¸·9…·{°ß·§NR·{°ß·§NR·§NR·{°ß·÷“?¸ —+¸ê·¸’˜S¸÷“?¸Ñœ¸ø懸ê·¸&¤g¸žõ‘¸Ñœ¸žõ‘¸ —+¸žõ‘¸ê·¸’˜S¸¶{¸’˜S¸{°ß· ¸·9…·§NR·§NR·9…·¶í©5’7ö7üè~7ÛY¶Jò"8`ê¦7’7ö7êW07’7ö7Jò"8Jò"8és8!ƒ8£ë68’7ö7Jò"8î8Jò"8íJ8J:Ô8¼ª—8!ƒ8øXÞ8¹­9 ™ 9×Ø9 ™ 9¹­91…9á¾ü8õq9 ™ 9õq9U›ò8á¾ü8J:Ô8aÊ8N½¡8!ƒ8Ÿš8£ë68íJ8£ë68¨õ^8aÊ8!ƒ8!ƒ8és8!ƒ8!ƒ8¨õ^8’7ö7ÛY¶`ê¦7Jò"8¶í©5êW07{°ß·§¢¸ —+¸{°ß· ¸·ê·¸žõ‘¸÷“?¸f¦¸.Hº¸f¦¸f¦¸¶{¸.Hº¸.Hº¸~θ»â¸#bĸ:0°¸žõ‘¸±›Ø¸»â¸#bĸ»â¸±›Ø¸.Hº¸žõ‘¸žõ‘¸.Hº¸f¦¸:0°¸Ñœ¸žõ‘¸Ñœ¸f¦¸Ñœ¸Ñœ¸&¤g¸’˜S¸&¤g¸žõ‘¸žõ‘¸’˜S¸ —+¸’˜S¸ê·¸§¢¸’˜S¸÷“?¸÷“?¸ —+¸¶í©5·ê·¸9…··ì‚Î7¶í©5¶í©5êW07Ä•Ä6üè~7Ä•Ä6üè~7î8¶í©5üè~7íJ8’7ö7êW07¶í©5¶í©5¨õ^8ÛY¶§NR·Ä•Ä6üè~7`ê¦7’7ö7Ä•Ä6Ä•Ä6Ä•Ä6’7ö7Jò"8íJ8íJ8êW07Jò"8£ë68¶í©5’7ö7`ê¦7êW07ì‚Î7Ä•Ä6ÛY¶Ä•Ä6¶í©5üè~7¶í©5·¶í©59…·¶{¸žõ‘¸&¤g¸÷“?¸&¤g¸.Hº¸ø懸Ñœ¸žõ‘¸f¦¸Ñœ¸.Hº¸f¦¸f¦¸^¤¹Ñœ¸f¦¸:0°¸žõ‘¸:0°¸Þþö¸&¤g¸:0°¸žõ‘¸¶{¸’˜S¸÷“?¸§¢¸{°ß·÷“?¸{°ß·9…·§¢¸÷“?¸·êW07Jò"8!ƒ8¨õ^8£ë68íJ8êW07£ë68Jò"8Jò"8£ë68Jò"8î8¼ª—8!ƒ8J:Ô8és8¨õ^8¨õ^8£ë68£ë68íJ8’7ö7íJ8¼ª—8¨õ^8¨õ^8¨õ^8’7ö7î8üè~7ì‚Î7`ê¦7’7ö7êW07üè~7ÛY¶¶í©5`ê¦7üè~7’7ö7·¶í©5ÛY¶÷“?¸ê·¸ ¸·ÛY¶’˜S¸ —+¸÷“?¸÷“?¸’˜S¸ —+¸žõ‘¸ø懸:0°¸#bĸžõ‘¸f¦¸.Hº¸:0°¸Ñœ¸#bĸˆ‘¹»â¸è· +¹!̹Ṉ‘¹1Üì¸Þþö¸»â¸.Hº¸.Hº¸¶{¸¶{¸ø懸&¤g¸žõ‘¸žõ‘¸:0°¸±›Ø¸žõ‘¸žõ‘¸žõ‘¸žõ‘¸&¤g¸ê·¸&¤g¸žõ‘¸÷“?¸ ¸· ¸·üè~7êW07Ä•Ä6ÛY¶¶í©5§NR·’7ö7ì‚Î7íJ8üè~7ì‚Î7£ë68`ê¦7üè~7î8üè~7’7ö7Jò"8î8Jò"8TÀ8:éµ8!ƒ8¨õ^8Ÿš8¨õ^8¨õ^8¨õ^8î8!ƒ8ì‚Î7és8!ƒ8és8!ƒ8!ƒ8¨õ^8üè~7’7ö7`ê¦7¶í©5Ä•Ä6Ä•Ä6ÛY¶¶í©5§NR·ÛY¶ì‚Î7Jò"8î8Ä•Ä6ÛY¶¶í©5ÛY¶ì‚Î7`ê¦7ì‚Î7êW07ì‚Î7üè~7·Ä•Ä6¶í©5üè~79…·§NR·§¢¸§NR·ÛY¶ê·¸{°ß·{°ß·{°ß· —+¸ê·¸ø懸 —+¸¶{¸ø懸:0°¸~θ§¢¸’˜S¸{°ß·9…·&¤g¸§¢¸ —+¸§NR·`ê¦7Ä•Ä6’7ö7î8`ê¦7ì‚Î7`ê¦7íJ8¼ª—8N½¡8aÊ8Ÿš8.Ò«8U›ò8Wyè8øXÞ8aÊ8aÊ8U›ò8:éµ8 ™ 9¹­9øÂ9õq91…9 ™ 9`'9Qï!9Qï!9U›ò8 ™ 9õq9øÂ9`'9êN69Qï!9øÂ91…9 ™ 9¹­91…9U›ò8 ™ 9õq9U›ò8Wyè8aÊ8aÊ8Wyè8øXÞ8øXÞ8Wyè8øXÞ8.Ò«8:éµ8:éµ8¼ª—8aÊ8N½¡8:éµ8N½¡8£ë68¨õ^8íJ8üè~7£ë68¨õ^8íJ8és8:éµ8N½¡8Ÿš8!ƒ8’7ö7êW07Jò"8üè~7`ê¦7î8`ê¦7êW07’7ö7ì‚Î7ÛY¶{°ß· —+¸Ä•Ä6êW07·êW07`ê¦7’7ö7Jò"8êW07ÛY¶üè~7’7ö7’7ö7és8íJ8aÊ8és8és8N½¡8Ÿš8!ƒ8¼ª—8øXÞ8á¾ü8õq9øXÞ8Wyè8×Ø9Qï!9¹­9¹­9õq9 ™ 9 ™ 9õq9U›ò8õq9á¾ü8õq9õq9 ™ 9 ™ 91…9J:Ô8U›ò8øXÞ8øXÞ8øXÞ8øXÞ8øÂ9øXÞ8.Ò«8N½¡8TÀ8TÀ8TÀ8aÊ8Wyè8.Ò«8aÊ8.Ò«8:éµ8aÊ8aÊ8N½¡8:éµ8aÊ8î8íJ8és8î8êW07`ê¦7êW07Ä•Ä6êW07Ä•Ä6··¶í©5¶í©5Ä•Ä6Ä•Ä6{°ß·9…·§NR·ê·¸ —+¸{°ß·ø懸:0°¸žõ‘¸&¤g¸žõ‘¸ø懸žõ‘¸{°ß·§¢¸÷“?¸{°ß·9…·¶í©5ê·¸·¶í©5Ä•Ä6êW07`ê¦7¶í©5ì‚Î7ì‚Î7’7ö7¼ª—8N½¡8Ÿš8¼ª—8á¾ü8.Ò«8Wyè81…9Wyè8aÊ8:éµ8øXÞ8.Ò«8.Ò«8:éµ8:éµ8øXÞ8øXÞ8õq9õq9J:Ô8U›ò8Wyè8aÊ8N½¡8Wyè8:éµ8U›ò8.Ò«8¼ª—8¼ª—8íJ8Ÿš8:éµ8N½¡8Ÿš8¼ª—8N½¡8és8¨õ^8êW07êW07’7ö7¨õ^8íJ8ì‚Î7`ê¦7üè~7êW07Ä•Ä6ÛY¶üè~7`ê¦7Ä•Ä6§NR·§¢¸÷“?¸’˜S¸ê·¸·{°ß· —+¸{°ß· —+¸{°ß· ¸·ê·¸¶{¸žõ‘¸÷“?¸§¢¸&¤g¸ê·¸ —+¸žõ‘¸Ñœ¸f¦¸{°ß·÷“?¸{°ß·ê·¸’˜S¸ —+¸ —+¸9…·êW07’7ö7`ê¦7£ë68Ÿš8¨õ^8¨õ^8és8£ë68øXÞ8.Ò«8és8.Ò«8Jò"8£ë68TÀ8és8J:Ô8J:Ô8á¾ü8 ™ 9:éµ8¼ª—8:éµ8øXÞ8N½¡8N½¡8Wyè8.Ò«8J:Ô8á¾ü8J:Ô8aÊ8U›ò8 ™ 9õq9Wyè8¹­9aÊ8aÊ8:éµ8.Ò«8¼ª—8¼ª—8Ÿš8¨õ^8Ÿš8íJ8`ê¦7’7ö7íJ8Ä•Ä6¶í©5î8£ë68Ä•Ä6Ä•Ä6üè~7`ê¦7Jò"8Ä•Ä6¶í©5Jò"8`ê¦7üè~7êW07그그9…·9…·§¢¸ê·¸žõ‘¸{°ß·§NR· ¸· —+¸Ñœ¸¶{¸žõ‘¸’˜S¸žõ‘¸÷“?¸ê·¸¶{¸’˜S¸ê·¸9…·· ¸·êW07·üè~7íJ8Jò"8£ë68`ê¦7`ê¦7î8és8`ê¦7’7ö7£ë68és8Jò"8¼ª—8J:Ô8aÊ8aÊ8øXÞ8øXÞ8Wyè8U›ò8J:Ô8aÊ8øXÞ8aÊ8:éµ8:éµ8øXÞ8J:Ô8U›ò8á¾ü8U›ò81…9á¾ü8 ™ 91…9J:Ô8á¾ü8õq9Wyè8 ™ 9aÊ8á¾ü8¼ª—8N½¡8!ƒ8íJ8és8Ÿš8íJ8Jò"8üè~7ÛY¶`ê¦7üè~7¶í©5··`ê¦7üè~7êW07¶í©5ÛY¶9…·{°ß·9…·¶í©5Ä•Ä6Ä•Ä6’7ö7`ê¦7üè~7üè~7`ê¦7ÛY¶ê·¸ê·¸Ä•Ä6ê·¸{°ß·ê·¸ —+¸9…·’˜S¸ê·¸ê·¸÷“?¸ê·¸9…·§NR·ÛY¶§NR·¶í©59…·ê·¸¶í©5`ê¦7êW07ì‚Î7íJ8ì‚Î7’7ö7Jò"8£ë68î8î8Jò"8î8’7ö7`ê¦7¨õ^8î8£ë68Jò"8és8és8¨õ^8N½¡8!ƒ8.Ò«8N½¡8:éµ8N½¡8Ÿš8Ÿš8:éµ8N½¡8Ÿš8aÊ8!ƒ8£ë68íJ8!ƒ8íJ8£ë68¨õ^8î8£ë68êW07ì‚Î7’7ö7ì‚Î7Jò"8ì‚Î7¶í©5 —+¸¶{¸’˜S¸ —+¸ê·¸f¦¸.Hº¸.Hº¸~θ:0°¸:0°¸f¦¸Þþö¸^¤¹è· +¹è· +¹Þþö¸ˆ‘¹:0°¸±›Ø¸^¤¹Þþö¸è· +¹j=¹”R.¹e#$¹”R.¹k3¹á¹ª ¹á¹^¤¹ˆ‘¹‡ö¹ˆ‘¹»â¸Þþö¸±›Ø¸f¦¸f¦¸÷“?¸ê·¸§NR·êW07·9…·ê·¸ÛY¶üè~7Jò"8êW07Jò"8£ë68¨õ^8:éµ8TÀ8aÊ8¨õ^8íJ8Ÿš8£ë68`ê¦7Jò"8íJ8üè~7és8¼ª—8Ÿš8Ÿš8Ÿš8Ÿš8Ÿš8N½¡8N½¡8.Ò«8:éµ8Wyè8U›ò8¹­9×Ø9 ™ 9õq9 ™ 91…9øXÞ8TÀ8!ƒ8N½¡8N½¡8N½¡8íJ8£ë68§NR·{°ß·9…·’˜S¸’˜S¸9…·{°ß·¶{¸~θ#bĸf¦¸~θ±›Ø¸Þþö¸^¤¹ˆ‘¹^¤¹^¤¹!Ì¹è· +¹”R.¹ª ¹^¤¹è· +¹Þþö¸è· +¹Þþö¸!Ì¹è· +¹ª ¹ª ¹ÊìL¹k3¹óƒ8¹2R¹ª ¹á¹á¹´:)¹è· +¹e#$¹!̹e#$¹´:)¹^¤¹è· +¹è· +¹1Üì¸1Ü츈‘¹±›Ø¸»â¸»â¸#bĸf¦¸±›Ø¸.Hº¸~θÑœ¸¶{¸žõ‘¸žõ‘¸žõ‘¸ø懸§¢¸ —+¸÷“?¸¶{¸’˜S¸¶{¸÷“?¸’˜S¸{°ß· ¸·’˜S¸žõ‘¸ø懸.Hº¸#bĸ.Hº¸žõ‘¸Ñœ¸ø懸Ñœ¸¶{¸f¦¸žõ‘¸.Hº¸’˜S¸ø懸 —+¸’˜S¸ø懸¶{¸¶{¸ø懸’˜S¸:0°¸±›Ø¸»â¸±›Ø¸.Hº¸:0°¸:0°¸ˆ‘¹Þþö¸1Üì¸.Hº¸~θ»â¸Ñœ¸žõ‘¸žõ‘¸1Üì¸1Üì¸Þþö¸±›Ø¸f¦¸:0°¸~θ±›Ø¸:0°¸.Hº¸~θf¦¸Ñœ¸~θf¦¸ø懸¶{¸ø懸¶{¸žõ‘¸&¤g¸§¢¸ê·¸ê·¸{°ß·9…·{°ß·9…·ê·¸§NR·{°ß·{°ß·ê·¸{°ß·÷“?¸ê·¸{°ß·žõ‘¸’˜S¸’˜S¸§¢¸9…· ¸·¶{¸&¤g¸ ¸·`ê¦7ê·¸9…·§NR·üè~79…·ÛY¶Ä•Ä6¶í©5ì‚Î7§NR·{°ß·ê·¸{°ß· ¸··ÛY¶·¶í©5£ë68üè~7ì‚Î7ì‚Î7Ä•Ä6ÛY¶§¢¸ÛY¶ê·¸9…·üè~7Ä•Ä6ÛY¶§NR·{°ß·ê·¸ê·¸Ñœ¸¶{¸÷“?¸ —+¸{°ß·ê·¸·ÛY¶9…·êW07ÛY¶Ä•Ä6üè~7¶í©5êW07§NR·ÛY¶£ë68·`ê¦7Ä•Ä6ì‚Î7ì‚Î7Jò"8Jò"8î8Jò"8!ƒ8.Ò«8TÀ8N½¡8Ÿš8.Ò«8øXÞ8:éµ8aÊ8N½¡8:éµ8N½¡8N½¡8aÊ8aÊ8.Ò«8aÊ8¼ª—8¼ª—8¨õ^8Jò"8és8N½¡8¼ª—8aÊ8.Ò«8:éµ8aÊ8Wyè8aÊ8J:Ô8õq91…9õq9øÂ9Qï!9õq91…9¹­9øXÞ8á¾ü8õq9á¾ü8á¾ü8øXÞ8:éµ8õq91…9J:Ô8.Ò«8Ÿš8.Ò«8¨õ^8és8Jò"8Jò"8Jò"8Jò"8£ë68’7ö7íJ8Ÿš8Jò"8£ë68`ê¦7§NR·`ê¦7üè~7ê·¸·¶í©5üè~7§NR·9…·9…·§NR··9…· —+¸ —+¸§¢¸’˜S¸§¢¸{°ß·ø懸&¤g¸ —+¸ê·¸’˜S¸§NR· ¸·{°ß·÷“?¸{°ß·Ä•Ä6§NR·’˜S¸§¢¸9…· ¸·§¢¸9…·Ä•Ä6··êW07üè~7üè~7£ë68¨õ^8£ë68`ê¦7`ê¦7Ä•Ä6Jò"8’7ö7’7ö7üè~7’7ö7ÛY¶Ä•Ä6üè~7Ä•Ä6’7ö7íJ8`ê¦7íJ8¼ª—8és8és8’7ö7`ê¦7’7ö7!ƒ8¼ª—8£ë68£ë68íJ8és8!ƒ8Jò"8!ƒ8¼ª—8.Ò«8øXÞ8¨õ^8¨õ^8Ÿš8¼ª—8¼ª—8és8¶í©5ì‚Î7`ê¦7üè~7’7ö7{°ß·§¢¸ ¸· ¸·ê·¸:0°¸.Hº¸~θžõ‘¸f¦¸f¦¸~θ!̹^¤¹»â¸~θ±›Ø¸ˆ‘¹Þþö¸^¤¹!̹»â¸ˆ‘¹á¹è· +¹»â¸#bĸ.Hº¸Ñœ¸ø懸:0°¸.Hº¸f¦¸Ñœ¸ —+¸’˜S¸÷“?¸9…· —+¸÷“?¸f¦¸f¦¸f¦¸’˜S¸’˜S¸’˜S¸{°ß·9…·{°ß·9…·Ä•Ä6î8és8íJ8Jò"8£ë68íJ8¨õ^8Ÿš8és8:éµ8N½¡8¼ª—8TÀ8aÊ8¼ª—8U›ò8Wyè8øXÞ8á¾ü8J:Ô8J:Ô8 ™ 9¹­9J:Ô8¼ª—8N½¡8.Ò«8N½¡8.Ò«8£ë68N½¡8Ÿš8aÊ8!ƒ8Ÿš8TÀ8TÀ8íJ8üè~7ÛY¶’7ö7·{°ß· —+¸ê·¸&¤g¸žõ‘¸.Hº¸f¦¸~θ»â¸:0°¸:0°¸±›Ø¸Þþö¸!̹1Üì¸Þþö¸Þþö¸»â¸^¤¹±›Ø¸±›Ø¸Ñœ¸÷“?¸f¦¸f¦¸žõ‘¸ —+¸ —+¸ê·¸žõ‘¸:0°¸’˜S¸&¤g¸&¤g¸žõ‘¸f¦¸f¦¸’˜S¸žõ‘¸.Hº¸žõ‘¸&¤g¸žõ‘¸’˜S¸’˜S¸¶{¸’˜S¸ —+¸÷“?¸ø懸f¦¸žõ‘¸’˜S¸§¢¸’˜S¸ —+¸§¢¸ ¸·÷“?¸·¶í©5ÛY¶`ê¦7·¶í©5¶í©5{°ß·9…· ¸·ÛY¶¶í©5 ¸·êW079…·{°ß·ê·¸9…·9…·’˜S¸§¢¸ —+¸’˜S¸f¦¸žõ‘¸žõ‘¸#bĸÞþö¸f¦¸#bĸ~θ~θ±›Ø¸#bĸ:0°¸»â¸~Î¸è· +¹»â¸1Üì¸.Hº¸±›Ø¸è· +¹!Ì¹è· +¹ˆ‘¹ˆ‘¹è· +¹^¤¹´:)¹‡ö¹á¹ÚÑG¹$W¹”R.¹$W¹j=¹j=¹^@\¹”R.¹2R¹$W¹d·B¹ÊìL¹j=¹óƒ8¹e#$¹ª ¹^¤¹1Ü츴:)¹j=¹ª ¹”R.¹k3¹”R.¹´:)¹óƒ8¹ÚÑG¹óƒ8¹k3¹á¹»â¸ˆ‘¹Þþö¸»â¸:0°¸’˜S¸žõ‘¸ —+¸’˜S¸.Hº¸¶{¸&¤g¸&¤g¸ ¸· —+¸ ¸·ê·¸ ¸· —+¸¶í©5üè~79…·ÛY¶ÛY¶¶í©5’7ö7êW07Ä•Ä6î8êW07Ä•Ä6êW07{°ß·{°ß·9…·§NR·9…·ê·¸·ÛY¶ê·¸9…·ê·¸ ¸·{°ß··9…·’˜S¸§¢¸’˜S¸&¤g¸ —+¸Ñœ¸žõ‘¸žõ‘¸žõ‘¸~θ±›Ø¸¶{¸±›Ø¸»â¸f¦¸#bĸ#bĸ1Üì¸1Ü츻â¸á¹á¹ª ¹”R.¹‡ö¹”R.¹óƒ8¹e#$¹”R.¹á¹e#$¹$W¹ÚÑG¹k3¹d·B¹]a¹2R¹j=¹d·B¹”R.¹”R.¹j=¹$W¹ÚÑG¹Þ—k¹2R¹$W¹2R¹ª ¹á¹á¹‡ö¹‡ö¹ª ¹ˆ‘¹ˆ‘¹ˆ‘¹!̹ˆ‘¹1Ü츻⸱›Ø¸#bĸÑœ¸f¦¸:0°¸žõ‘¸žõ‘¸¶{¸ ¸·÷“?¸’˜S¸§NR·{°ß·ê·¸ —+¸{°ß···Ä•Ä6ê·¸ ¸·§¢¸{°ß·{°ß·ê·¸’˜S¸9…·§NR·{°ß·¶{¸Ñœ¸žõ‘¸¶{¸.Hº¸~θ1Üì¸#bĸ.Hº¸f¦¸’˜S¸ —+¸&¤g¸ø懸 —+¸&¤g¸ê·¸ —+¸’˜S¸f¦¸¶{¸ —+¸§¢¸’˜S¸ê·¸ ¸·’˜S¸ —+¸÷“?¸¶í©5·ê·¸ ¸·÷“?¸:0°¸’˜S¸ —+¸ÛY¶Jò"8êW07ÛY¶üè~7ÛY¶üè~7î8Jò"8Jò"8î8’7ö7§NR·’7ö7`ê¦7Jò"8íJ8¨õ^8.Ò«8TÀ8TÀ8:éµ8Wyè8Wyè8:éµ8õq9¹­9TÀ8U›ò8Wyè8 ™ 9á¾ü8×Ø9,9Wyè8á¾ü8J:Ô8 ™ 91…9á¾ü8U›ò8×Ø9øÂ9á¾ü8U›ò8¹­91…9aÊ8U›ò8!ƒ8J:Ô8J:Ô8¨õ^8Ÿš8íJ8íJ8Jò"8Ä•Ä6`ê¦7êW07 ¸·ÛY¶¶í©5¶í©5üè~7§NR·9…·`ê¦7¶í©5¶í©59…·ê·¸§¢¸§¢¸&¤g¸’˜S¸’˜S¸ —+¸žõ‘¸&¤g¸&¤g¸ê·¸ø懸 —+¸{°ß·&¤g¸ ¸·§¢¸ê·¸ ¸· ¸·ÛY¶`ê¦7êW07íJ8’7ö7Jò"8és8£ë68`ê¦7¨õ^8íJ8és8!ƒ8N½¡8Ÿš8TÀ8¼ª—8N½¡8øXÞ8aÊ8aÊ8aÊ8Wyè81…9J:Ô8J:Ô8aÊ8J:Ô81…9U›ò8õq9J:Ô8TÀ8íJ8N½¡8Wyè8TÀ8Wyè8Wyè8Ÿš8.Ò«8.Ò«8Wyè8á¾ü8õq9 ™ 9¹­9Qï!91…9Qï!9Qï!91…9¹­9õq9U›ò8øXÞ8J:Ô8aÊ8J:Ô8N½¡8Wyè8:éµ8.Ò«8.Ò«8!ƒ8!ƒ8íJ8ì‚Î7ì‚Î7¶í©5Ä•Ä6`ê¦7êW07¶í©5ÛY¶ÛY¶¶í©5`ê¦7`ê¦7êW07î8üè~7ì‚Î7Jò"8üè~7£ë68î8£ë68¨õ^8Jò"8î8¨õ^8’7ö7ì‚Î7¨õ^8¼ª—8¨õ^8Ÿš8Ÿš8!ƒ8J:Ô8TÀ8õq91…91…9á¾ü826192619Qï!9`'9êN69,92619ÆíT9*h;9ÆíT9àœs9r&_9Ö`i9¨~n9¨~n9+œE9¨~n9ÒO92619êN69*h;92619`'9ë@9ç¶J92619*h;9êN69ÒO9,9ÆíT9Ö`i9ç¶J9»x9àœs9Ö`i9ÆíT9Ö`i9Ú}9pCd9r&_9êN69*h;9`'92619`'91…9U›ò8aÊ8U›ò8.Ò«8øXÞ8aÊ8Ÿš8£ë68Jò"8î8î8`ê¦7üè~7’7ö7ÛY¶üè~7Jò"8£ë68Ä•Ä6ÛY¶`ê¦7£ë68Jò"8¨õ^8¨õ^8¨õ^8!ƒ8:éµ8N½¡8Jò"8Jò"8íJ8£ë68!ƒ8Jò"8¶í©5`ê¦7£ë68î8î8íJ8î8î8î8î8N½¡8¼ª—8és8Jò"8.Ò«8£ë68ì‚Î7!ƒ8î8ì‚Î7!ƒ8£ë68î8¨õ^8î8és8£ë68Ä•Ä6¼ª—8J:Ô8aÊ8Wyè8J:Ô8.Ò«8J:Ô8aÊ8Wyè8øXÞ8aÊ8øXÞ8 ™ 9Qï!9êN69 ™ 9øÂ9`'9øÂ9×Ø9 ™ 9õq9Qï!91…9øÂ9U›ò8Wyè8á¾ü8U›ò8:éµ8íJ8¨õ^8N½¡8és8£ë68és8`ê¦7î8êW07üè~7Jò"8Ä•Ä6¶í©5§¢¸÷“?¸žõ‘¸ø懸žõ‘¸÷“?¸Ñœ¸f¦¸f¦¸Ñœ¸#bĸ#bĸ&¤g¸÷“?¸žõ‘¸’˜S¸:0°¸f¦¸.Hº¸.Hº¸žõ‘¸&¤g¸’˜S¸žõ‘¸’˜S¸÷“?¸&¤g¸žõ‘¸{°ß·÷“?¸÷“?¸{°ß·{°ß·9…· ¸··§NR·9…·÷“?¸·{°ß· ¸·§NR·Ä•Ä6ì‚Î79…·¶í©5êW079…·Ä•Ä6î8Jò"8Jò"8ì‚Î7£ë68êW07¨õ^8és8î8Jò"8£ë68és8!ƒ8’7ö7£ë68`ê¦7ì‚Î7î8î8Jò"8!ƒ8Jò"8ì‚Î7£ë68`ê¦7êW07 ¸·{°ß· ¸·’˜S¸Ñœ¸¶{¸÷“?¸ø懸:0°¸Ñœ¸žõ‘¸žõ‘¸#bĸ±›Ø¸»â¸^¤¹Þþö¸è· +¹^¤¹‡ö¹‡ö¹è· +¹´:)¹ˆ‘¹e#$¹!̹á¹á¹‡ö¹‡ö¹»â¸‡ö¹^¤¹‡ö¹”R.¹ª ¹j=¹2R¹1Üì¸^¤¹j=¹ª ¹e#$¹ª ¹‡ö¹d·B¹´:)¹á¹1Üì¸è· +¹!̹±›Ø¸±›Ø¸Þþö¸#bĸ#bĸ#bĸžõ‘¸žõ‘¸.Hº¸ø懸f¦¸žõ‘¸§¢¸ —+¸9…· ¸·ê·¸§NR··§NR·{°ß··î8î8!ƒ8`ê¦7êW07¨õ^8î8î8Jò"8ì‚Î7êW07î8’7ö7’7ö7Jò"8’7ö7£ë68¼ª—8!ƒ8’7ö7î8£ë68î8î8íJ8£ë68ì‚Î7’7ö7!ƒ8¨õ^8£ë68Ÿš8íJ8î8és8£ë68Jò"8ì‚Î7`ê¦7î8’7ö7ì‚Î7êW07 ¸·· —+¸ê·¸÷“?¸’˜S¸9…·§¢¸’˜S¸§NR· ¸· ¸·ê·¸ÛY¶· ¸·§¢¸ê·¸9…·ÛY¶{°ß·ê·¸êW079…·ê·¸ê·¸ ¸· —+¸ê·¸ê·¸·ÛY¶{°ß·÷“?¸êW07êW07§NR·êW07Ä•Ä6ÛY¶êW07üè~7üè~7üè~7§NR·¶í©59…·Ä•Ä6·{°ß·ÛY¶ÛY¶§NR·Ä•Ä69…· ¸·üè~7§NR·î8î8íJ8üè~7ì‚Î7î8£ë68üè~7üè~7’7ö7ì‚Î7¨õ^8ì‚Î7üè~7íJ8üè~7êW07Jò"8Ä•Ä6ÛY¶`ê¦7üè~7üè~7·êW07ì‚Î7{°ß·9…·§NR·{°ß· ¸·ê·¸ê·¸§¢¸§¢¸§¢¸&¤g¸¶{¸ —+¸žõ‘¸žõ‘¸¶{¸žõ‘¸&¤g¸žõ‘¸¶{¸¶{¸ ¸·{°ß· —+¸ê·¸ ¸·{°ß·§NR·{°ß· —+¸{°ß·9…·ÛY¶{°ß·9…· ¸·ÛY¶÷“?¸§NR·’˜S¸ê·¸ ¸·{°ß·žõ‘¸§¢¸Ä•Ä6Ä•Ä6¶í©5`ê¦7üè~7§NR·Ä•Ä6`ê¦7ÛY¶·êW07êW07êW07!ƒ8és8íJ8íJ8£ë68£ë68¼ª—8.Ò«8Wyè8:éµ8øXÞ8Wyè8TÀ8.Ò«8¼ª—8!ƒ8.Ò«8.Ò«8øXÞ8.Ò«8.Ò«8Ÿš8¼ª—8:éµ8íJ8¨õ^8és8¨õ^8’7ö7íJ8és8Jò"8£ë68î8î8£ë68üè~7ì‚Î7¶í©5ê·¸· ¸·÷“?¸ —+¸¶{¸ÛY¶ ¸·ê·¸’˜S¸:0°¸&¤g¸¶{¸Ñœ¸žõ‘¸#bĸ:0°¸&¤g¸f¦¸žõ‘¸žõ‘¸žõ‘¸:0°¸#bĸžõ‘¸÷“?¸§¢¸&¤g¸÷“?¸§¢¸&¤g¸÷“?¸{°ß··ÛY¶ÛY¶ÛY¶`ê¦7ì‚Î7üè~7Jò"8Ÿš8î8!ƒ8aÊ8aÊ8TÀ8TÀ8J:Ô8Wyè8á¾ü8Wyè8Qï!9 ™ 9øÂ9õq9á¾ü8Wyè8øÂ9 ™ 9 ™ 9õq9á¾ü8J:Ô8õq9øÂ9øÂ9 ™ 9¹­9õq9 ™ 9¹­91…9á¾ü8×Ø9øÂ9:éµ8aÊ8aÊ8øXÞ8Wyè8:éµ8TÀ8aÊ8!ƒ8íJ8¨õ^8¨õ^8Jò"8ÛY¶ÛY¶ÛY¶ ¸·9…·’˜S¸ê·¸ê·¸§¢¸÷“?¸’˜S¸ —+¸ê·¸§¢¸f¦¸ê·¸’˜S¸ —+¸ÛY¶{°ß·ÛY¶ ¸·9…·üè~7`ê¦7ÛY¶¶í©5¶í©5ì‚Î7Ä•Ä6¶í©5ÛY¶êW07üè~7ì‚Î7£ë68`ê¦7Ä•Ä6ì‚Î7`ê¦7üè~7’7ö7êW07ì‚Î7ì‚Î7`ê¦7ì‚Î7¶í©5¶í©5üè~7`ê¦7ì‚Î7êW07··ê·¸§NR·Ä•Ä6{°ß· ¸··`ê¦7êW07’7ö7`ê¦7`ê¦7üè~7’7ö7£ë68ì‚Î7£ë68£ë68Jò"8`ê¦7êW07¶í©5Ä•Ä6ì‚Î7üè~7Ä•Ä6ÛY¶9…·üè~7··§NR··ê·¸{°ß·ê·¸ ¸·{°ß·{°ß·ÛY¶§¢¸{°ß·{°ß··êW07 ¸·ê·¸9…·{°ß· —+¸ê·¸{°ß··{°ß· —+¸ê·¸Ñœ¸ø懸÷“?¸&¤g¸&¤g¸f¦¸:0°¸:0°¸&¤g¸.Hº¸&¤g¸¶{¸’˜S¸÷“?¸:0°¸f¦¸1Üì¸~θžõ‘¸.Hº¸žõ‘¸÷“?¸&¤g¸¶{¸÷“?¸ø懸 —+¸÷“?¸ê·¸ ¸· ¸·êW07êW07`ê¦7`ê¦7êW07ì‚Î7ì‚Î7ì‚Î7íJ8és8Ÿš8!ƒ8íJ8Ÿš8ì‚Î7és8TÀ8¨õ^8.Ò«8¼ª—8Ÿš8:éµ8:éµ8!ƒ8:éµ8!ƒ8íJ8Ÿš8¨õ^8`ê¦7üè~7êW07£ë68íJ8¶í©5Jò"8üè~7`ê¦7`ê¦7¨õ^8Ÿš8!ƒ8î8és8¨õ^8£ë68!ƒ8üè~7’7ö7Ä•Ä6ì‚Î7î8¶í©5§¢¸9…·§NR· ¸· ¸· —+¸¶{¸÷“?¸žõ‘¸¶{¸’˜S¸÷“?¸ —+¸žõ‘¸žõ‘¸÷“?¸ê·¸9…·÷“?¸§¢¸9…·&¤g¸:0°¸ê·¸&¤g¸÷“?¸žõ‘¸ê·¸Ä•Ä6§¢¸&¤g¸&¤g¸’˜S¸f¦¸¶{¸’˜S¸§¢¸ê·¸¶{¸ ¸·ê·¸§NR·§NR·9…·¶í©5ì‚Î7üè~7î8ì‚Î7üè~7`ê¦7£ë68`ê¦7£ë68ì‚Î7’7ö7és8:éµ8Ÿš8¼ª—8és8J:Ô8TÀ8.Ò«8TÀ8U›ò8U›ò8J:Ô8:éµ8N½¡8TÀ8J:Ô8TÀ8J:Ô8J:Ô8TÀ8Wyè8N½¡8øXÞ8øXÞ8:éµ8N½¡8Ÿš8és8.Ò«8!ƒ8.Ò«8£ë68`ê¦7¶í©5Ä•Ä6ÛY¶§NR·êW07Jò"8`ê¦7·§NR·· ¸·{°ß· —+¸ÛY¶§¢¸{°ß·’˜S¸’˜S¸žõ‘¸ê·¸¶{¸’˜S¸&¤g¸žõ‘¸&¤g¸ê·¸÷“?¸§¢¸÷“?¸ê·¸§¢¸§¢¸§NR·§NR·’˜S¸ÛY¶§NR· —+¸ê·¸§NR·÷“?¸9…·§NR·§NR·9…··Ä•Ä6üè~7’7ö7üè~7üè~7üè~7üè~7¶í©5’7ö7êW07¶í©5êW07’7ö7’7ö7£ë68!ƒ8’7ö7£ë68£ë68ì‚Î7Jò"8¨õ^8¨õ^8î8ì‚Î7£ë68êW07’7ö7`ê¦7üè~7üè~7`ê¦7ì‚Î7’7ö7`ê¦7Jò"8ì‚Î7Jò"8£ë68üè~7Jò"8`ê¦7êW07¶í©5ÛY¶`ê¦7ì‚Î7üè~7íJ8`ê¦7¶í©5ÛY¶Ä•Ä6ÛY¶êW07¶í©5ÛY¶···÷“?¸{°ß·’˜S¸’˜S¸ —+¸{°ß· ¸·’˜S¸žõ‘¸žõ‘¸Ñœ¸f¦¸¶{¸žõ‘¸Ñœ¸f¦¸ —+¸§NR··9…·9…·§NR·§NR· —+¸§¢¸ê·¸§¢¸ —+¸ ¸·§NR·§NR·ÛY¶§NR·Ä•Ä6`ê¦7üè~7’7ö7és8î8’7ö7`ê¦7î8î8íJ8!ƒ8Ÿš8:éµ8N½¡8aÊ8N½¡8N½¡8¨õ^8¼ª—8és8¨õ^8aÊ8:éµ8øXÞ8:éµ8aÊ8TÀ8és8¼ª—8Ÿš8.Ò«8¨õ^8íJ8!ƒ8Ÿš8.Ò«8N½¡8.Ò«8és8Jò"8’7ö7`ê¦7`ê¦7ÛY¶êW07ÛY¶§¢¸§¢¸ÛY¶ ¸·· —+¸ê·¸§¢¸§¢¸ —+¸&¤g¸’˜S¸’˜S¸žõ‘¸¶{¸ ¸·žõ‘¸žõ‘¸:0°¸f¦¸:0°¸f¦¸1Üì¸è· +¹1Ü츱›Ø¸»â¸±›Ø¸Ñœ¸~θ¶{¸ø懸&¤g¸žõ‘¸ —+¸:0°¸’˜S¸&¤g¸ —+¸{°ß· ¸·§NR·êW07Ä•Ä6· ¸·9…·ì‚Î79…·{°ß·¶í©5`ê¦7ÛY¶·9…·¶í©5¶í©5 ¸·’7ö7£ë68êW07üè~7ì‚Î7î8ì‚Î7’7ö7íJ8î8¶í©5·’7ö7Ÿš8’7ö7’7ö7î8¨õ^8.Ò«8î8î8¨õ^8Ÿš8¼ª—8íJ8’7ö7¨õ^8ì‚Î7üè~7`ê¦7{°ß·§NR·ÛY¶êW07 ¸·· ¸·§NR··ê·¸{°ß·ê·¸’˜S¸§¢¸’˜S¸’˜S¸ —+¸’˜S¸Ñœ¸žõ‘¸.Hº¸¶{¸&¤g¸’˜S¸’˜S¸&¤g¸.Hº¸f¦¸~θ#bĸÑœ¸~θ»â¸~θÞþö¸Ñœ¸:0°¸»â¸~θ»â¸1Üì¸#bĸf¦¸:0°¸f¦¸.Hº¸¶{¸f¦¸:0°¸:0°¸žõ‘¸žõ‘¸÷“?¸÷“?¸÷“?¸9…·9…·ê·¸Ä•Ä6Ä•Ä6üè~7`ê¦7î8`ê¦7`ê¦7ì‚Î7êW07î8£ë68íJ8êW07î8î8Ä•Ä6íJ8î8¨õ^8£ë68üè~7¨õ^8î8’7ö7î8üè~7Jò"8Ä•Ä6üè~7Ä•Ä6Ä•Ä6§NR·ê·¸{°ß··ê·¸Ä•Ä6·ì‚Î7êW07¶í©5ì‚Î7ÛY¶¶í©5¶í©5 ¸· ¸·§¢¸’˜S¸§NR·§¢¸{°ß·’˜S¸’˜S¸&¤g¸žõ‘¸ø懸&¤g¸:0°¸Ñœ¸÷“?¸:0°¸»â¸.Hº¸:0°¸.Hº¸Þþö¸~θf¦¸:0°¸±›Ø¸.Hº¸.Hº¸žõ‘¸:0°¸f¦¸žõ‘¸¶{¸žõ‘¸.Hº¸’˜S¸ÛY¶9…·ê·¸9…·{°ß·{°ß· ¸·üè~7`ê¦7·`ê¦7ì‚Î7ì‚Î7î8íJ8ì‚Î7î8Ÿš8:éµ8.Ò«8!ƒ8î8.Ò«8aÊ8:éµ8.Ò«8TÀ8Wyè8U›ò8J:Ô8øXÞ8á¾ü8U›ò8á¾ü8J:Ô8 ™ 9U›ò81…9¹­9á¾ü8øXÞ81…9 ™ 9øXÞ8øXÞ8TÀ8J:Ô8TÀ8:éµ8¼ª—8Ÿš8és8és8és8¼ª—8és8ì‚Î7üè~7Jò"8`ê¦7üè~7§NR·ê·¸9…·{°ß·9…·§NR·{°ß· ¸·§¢¸÷“?¸’˜S¸ê·¸§NR·ê·¸9…·üè~7§NR·{°ß·¶í©5üè~7ÛY¶{°ß·ÛY¶¶í©5·üè~7ÛY¶¶í©5`ê¦7î8î8¼ª—8és8:éµ8U›ò8aÊ8aÊ8Wyè8U›ò8J:Ô8øXÞ8.Ò«8õq91…9Qï!9 ™ 9õq9õq9õq9,9Qï!9Qï!9*h;9¹­9ë@9ë@9×Ø9Qï!9,926192619ç¶J9*h;9,9*h;9¹­92619`'9¹­9øÂ9,9Qï!92619øÂ9 ™ 9øÂ91…9õq9õq9`'9`'9*h;9øÂ9õq9õq9øXÞ8á¾ü8aÊ8:éµ8TÀ8á¾ü8øXÞ8:éµ8N½¡8:éµ8¼ª—8íJ8£ë68íJ8ì‚Î7üè~7Ä•Ä69…·êW07ÛY¶¶í©5·Ä•Ä6¶í©5ê·¸·{°ß·ê·¸ê·¸§¢¸ ¸· ¸·{°ß·ÛY¶`ê¦7ÛY¶·ì‚Î7`ê¦79…·üè~7Jò"8¨õ^8íJ8íJ8Jò"8Jò"8î8¨õ^8:éµ8J:Ô8.Ò«8U›ò8á¾ü8U›ò8øXÞ8J:Ô8J:Ô8J:Ô8:éµ8aÊ8 ™ 9U›ò8Wyè8U›ò8øXÞ8á¾ü8õq9U›ò8øÂ9õq9á¾ü8õq9¹­9Wyè8øXÞ8U›ò8øXÞ8øXÞ8øXÞ8õq9øXÞ8Wyè8øXÞ8TÀ8TÀ8TÀ8aÊ8aÊ8N½¡8Ÿš8íJ8’7ö7£ë68üè~7`ê¦7ì‚Î7’7ö7`ê¦7ì‚Î7’7ö7î8ÛY¶§NR··§NR·’˜S¸ —+¸{°ß·žõ‘¸Ñœ¸f¦¸~θ±›Ø¸#bĸø懸Ñœ¸»â¸#bĸ#bĸ.Hº¸’˜S¸ —+¸ —+¸Ñœ¸&¤g¸ ¸·ê·¸ ¸·{°ß· ¸·üè~7ÛY¶§NR· ¸·§NR·9…·{°ß··`ê¦7·¶í©5ÛY¶·ÛY¶¶í©5êW07{°ß·Ä•Ä6’7ö7Ä•Ä6’7ö7¨õ^8¼ª—8Ÿš8és8.Ò«8¼ª—8és8Ÿš8íJ8.Ò«8N½¡8J:Ô8øXÞ8N½¡8¨õ^8¼ª—8¼ª—8.Ò«8íJ8¨õ^8î8î8üè~7¨õ^8¨õ^8Ÿš8¨õ^8î8Jò"8N½¡8’7ö7Ÿš8î8£ë68î8êW07`ê¦7ÛY¶9…·¶í©5§¢¸§NR·¶í©5ø懸’˜S¸ê·¸žõ‘¸~θ:0°¸.Hº¸#bĸ±›Ø¸#bĸ#bĸ±›Ø¸ˆ‘¹!̹»â¸‡ö¹^¤¹ˆ‘¹è· +¹á¹‡ö¹´:)¹e#$¹e#$¹”R.¹óƒ8¹ÚÑG¹j=¹á¹‡ö¹óƒ8¹è· +¹^¤¹1Üì¸.Hº¸±›Ø¸ø懸.Hº¸:0°¸÷“?¸÷“?¸÷“?¸ ¸·ê·¸·Ä•Ä6¶í©5·’7ö7{°ß···êW07`ê¦7ì‚Î7êW07¼ª—8¼ª—8!ƒ8ì‚Î7î8íJ8’7ö7íJ8£ë68Jò"8¨õ^8.Ò«8¼ª—8Ÿš8íJ8:éµ8.Ò«8és8és8Ä•Ä6êW07£ë68î8`ê¦7üè~7ÛY¶·ê·¸ÛY¶¶í©5 ¸·§NR··ê·¸ê·¸Ä•Ä6ê·¸ ¸·§¢¸ —+¸§¢¸ ¸·ê·¸ê·¸ ¸·9…·§NR·{°ß···êW07üè~7’7ö7¶í©5`ê¦7’7ö7ÛY¶§NR·9…··êW07êW07ÛY¶¶í©5§NR·¶í©5üè~79…···§NR·{°ß·9…·{°ß·§NR·`ê¦7’7ö7`ê¦7Jò"8’7ö7Jò"8Jò"8¨õ^8íJ8¶í©5·ì‚Î7íJ8Ÿš8íJ8Jò"8íJ8íJ8:éµ8TÀ8.Ò«8Ÿš8¨õ^8:éµ8és8TÀ8’7ö7’7ö7üè~7êW07ì‚Î7£ë68íJ8íJ8î8üè~7î8’7ö7üè~79…·{°ß· ¸·9…·÷“?¸9…· ¸·ê·¸žõ‘¸f¦¸Ñœ¸:0°¸1Üì¸1Üì¸!Ì¹è· +¹e#$¹á¹!̹´:)¹´:)¹”R.¹d·B¹”R.¹e#$¹$W¹d·B¹d·B¹ÊìL¹d·B¹ÚÑG¹]a¹óƒ8¹2R¹^@\¹2R¹^@\¹2R¹]a¹k3¹ÚÑG¹óƒ8¹óƒ8¹ª ¹ª ¹ª ¹‡ö¹á¹á¹´:)¹!̹ˆ‘¹^¤¹Þþö¸±›Ø¸»â¸1Üì¸è· +¹±›Ø¸žõ‘¸~θ.Hº¸~θf¦¸Ñœ¸Ñœ¸ê·¸ —+¸’˜S¸ —+¸ —+¸ —+¸§¢¸’˜S¸’˜S¸’˜S¸ —+¸žõ‘¸ø懸žõ‘¸žõ‘¸÷“?¸žõ‘¸Ñœ¸žõ‘¸¶{¸ø懸 ¸·§¢¸÷“?¸ ¸·{°ß·9…·ê·¸&¤g¸§¢¸§¢¸¶{¸¶{¸ø懸f¦¸Ñœ¸&¤g¸Ñœ¸&¤g¸f¦¸ø懸1Üì¸^¤¹±›Ø¸Þþö¸e#$¹´:)¹´:)¹j=¹óƒ8¹d·B¹óƒ8¹j=¹ÚÑG¹óƒ8¹ÊìL¹d·B¹$W¹d·B¹Gzf¹^@\¹^@\¹ÚÑG¹^@\¹$W¹è· +¹‡ö¹è· +¹^¤¹Þþö¸ª ¹^¤¹è· +¹e#$¹´:)¹”R.¹j=¹ª ¹´:)¹e#$¹!̹‡ö¹e#$¹è· +¹!̹ˆ‘¹ˆ‘¹ˆ‘¹1Üì¸#bĸžõ‘¸žõ‘¸žõ‘¸žõ‘¸ —+¸ —+¸ê·¸ÛY¶ÛY¶ÛY¶üè~7¶í©5î8ì‚Î7Jò"8Jò"8`ê¦7’7ö7`ê¦7î8¶í©5êW07{°ß·ÛY¶êW07¶í©5 ¸·{°ß·{°ß·{°ß·9…·§¢¸{°ß·žõ‘¸ê·¸žõ‘¸f¦¸’˜S¸Ñœ¸&¤g¸Ñœ¸Ñœ¸f¦¸:0°¸÷“?¸ø懸:0°¸’˜S¸f¦¸Ñœ¸#bĸ#bĸ:0°¸ˆ‘¹±›Ø¸ˆ‘¹^¤¹Þþö¸ˆ‘¹^¤¹è· +¹!Ì¹è· +¹Þþö¸ˆ‘¹è· +¹Þþö¸ˆ‘¹^¤¹»â¸»â¸Þþö¸Þþö¸±›Ø¸~θ:0°¸žõ‘¸žõ‘¸»â¸:0°¸»â¸’˜S¸Ñœ¸žõ‘¸&¤g¸f¦¸:0°¸žõ‘¸Ñœ¸ —+¸žõ‘¸ø懸±›Ø¸f¦¸f¦¸¶{¸¶{¸’˜S¸ ¸·{°ß· ¸·üè~7`ê¦7üè~7és8!ƒ8’7ö7¨õ^8Jò"8¼ª—8!ƒ8Ÿš8|Pd|1|24600|2013-282T15:32:51.397 Ž–,9þ%9V9:Q9 +ê9V9 +ê9V9 +ê9Xý9¸)Õ8ié8 ض8¸)Õ8 ض8«ˆŽ8 ض8ié8ãÀ¬8 ض8!Ð`8ÆÄ88îz„8«ˆŽ8«ˆŽ8øßt8ÆÄ88ÛÆL8¦Ê$8¦Ê$8ª–77ª–77iÙ8²ƒ7á¸(Câ5(=¶ª–77³ßŒ·…-Ò7$’ª7"õÒ6…äù7"õÒ6Ü·"õÒ69 K·…äù7ª–77(=¶(Câ5¦Ê$8Ϋ¢8ÛÆL8…äù7ÛÆL8¦Ê$8™˜8ãÀ¬8¸)Õ8Hß8ié8Hß8Hß8¤ Ë8ç®ý8¤ Ë88‹ó8ié8¤ Ë8 +ê9¸)Õ8ç®ý8ié8Hß8Hß88‹ó8¸)Õ8¸)Õ8V9ç®ý8 ض88‹ó8ç®ý8¸)Õ8Hß8Xý9jñÀ8ãÀ¬8ãÀ¬8 ض8¤ Ë8¤ Ë8!Ð`8 ض8ç®ý8¤ Ë8¤ Ë8Ϋ¢8ié8V98‹ó8ié8 +ê9 +ê9Hß88‹ó8¤ Ë88‹ó88‹ó8jñÀ8jñÀ8™˜8Ϋ¢8 ض8¸)Õ8 ض8«ˆŽ8™˜8jñÀ8ãÀ¬8™˜8™˜88‹ó8¤ Ë8Ϋ¢8ãÀ¬8 ض8ãÀ¬8øßt8!Ð`8ãÀ¬8«ˆŽ8Ϋ¢8…äù7²ƒ7iÙ8!Ð`8ÆÄ88…äù7øßt8«ˆŽ8îz„8øßt8Ϋ¢8ÆÄ88«ˆŽ8™˜8!Ð`8øßt8™˜8Ϋ¢8¦Ê$8™˜8ié8¸)Õ8Hß8Hß8¸)Õ8ç®ý8L;9Ê®19V98‹ó8¤ Ë88‹ó8Ϋ¢8Hß8ié8V9þ%9ç®ý8L;9:Q9V9þ%9Xý9:Q9L;9Ág"9Ê®19Ž–,9Ê®19ß~'9Ê®19L;9ç®ý8 +ê9ß~'9V9V9L;9ç®ý8ç®ý8:Q9 +ê9ç®ý8L;9Hß8Xý9¸)Õ8 ض8ç®ý8 ض8Hß8™˜8îz„8…äù7Ϋ¢8™˜8ãÀ¬8øßt8ÛÆL8…äù7ª–77(Câ59 K·Ü·(Câ5á¸Üʸª–77³ßŒ·Ü·Pb´·á¸Pb´·Ü·³ßŒ·ÚÚy¸ƒ¾Q¸•º=¸g¾)¸tA¯¸ù†¸ƒ¾Q¸~‘¸~‘¸xÉe¸á¸ƒ¾Q¸~‘¸Üʸ³ßŒ·á¸(Câ5³ßŒ·á¸l–ù¶³ßŒ·"õÒ6l–ù¶9 K·(Câ59 K·9 K·Ü·9 K·l–ù¶"õÒ69 K·…-Ò7ÆÄ88²ƒ7iÙ8¦Ê$8ÆÄ88™˜8 ض8!Ð`8ié8ié8ç®ý8Xý9Hß8Xý9ç®ý8Hß8ç®ý8ç®ý8Xý9L;9ç®ý8 +ê9¤ Ë8Xý9V9Xý9ié8ié88‹ó8¤ Ë8jñÀ8ié8¸)Õ8 ض8«ˆŽ8Ϋ¢8¦Ê$8øßt8$’ª7$’ª7¦Ê$8ÛÆL8!Ð`8ÛÆL8øßt8$’ª7!Ð`8iÙ8…-Ò7l–ù¶l–ù¶²ƒ7…-Ò7(Câ5…-Ò7l–ù¶ª–77$’ª7l–ù¶…äù7…-Ò7ª–77"õÒ6!Ð`8¦Ê$8ÆÄ88…-Ò7$’ª7(Câ5(Câ5"õÒ6¦Ê$8…-Ò7ÆÄ88!Ð`8…-Ò7ÆÄ88Ϋ¢8!Ð`8™˜8«ˆŽ8Ϋ¢8ÛÆL8ié8jñÀ8¸)Õ88‹ó8¸)Õ88‹ó8ç®ý88‹ó8Xý9Xý9:Q9ß~'9Ž–,9:Q9ôF9Ág"9þ%9V9:Q9þ%9ié8¸)Õ8ç®ý8ç®ý8V9 +ê9L;9þ%98‹ó8Hß8ié8þ%9Xý9 ض8Ϋ¢8«ˆŽ8!Ð`8«ˆŽ8¦Ê$8!Ð`8²ƒ7îz„8øßt8!Ð`8ÆÄ88ÛÆL8!Ð`8îz„8²ƒ7(=¶…-Ò7²ƒ7l–ù¶(Câ5l–ù¶³ßŒ·l–ù¶l–ù¶9 K·³ßŒ·Üʸ³ßŒ·á¸l–ù¶g¾)¸g¾)¸á¸ƒ¾Q¸xÉe¸xÉe¸u›¸~‘¸g¾)¸ÚÚy¸þrø~‘¸xÉe¸g¾)¸u›¸u›¸~‘¸þrø5¬×¸ÚÚy¸xÉe¸Üʸg¾)¸Ü·"õÒ6l–ù¶(=¶l–ù¶(=¶…-Ò7²ƒ7(Câ5"õÒ6l–ù¶9 K·³ßŒ·Ü·Pb´·²ƒ7$’ª7"õÒ6…äù7(Câ5ª–77iÙ8¦Ê$8ÆÄ88øßt8îz„8øßt8 ض8ÛÆL8îz„8Ϋ¢8îz„8²ƒ7iÙ8…-Ò7øßt8$’ª7…-Ò7iÙ8…äù7$’ª7…äù7ÛÆL8ÛÆL8…-Ò7¦Ê$8øßt8ÆÄ88²ƒ7¦Ê$8…äù7(=¶Ü·(=¶9 K·³ßŒ·g¾)¸ƒ¾Q¸Ü·á¸ù†¸~‘¸Pb´·~‘¸ÚÚy¸5¬×¸~¹B,¹Ú-¹æS¹.~¹bò2¹æS¹ðª#¹µ$=¹2Â(¹2Â(¹æS¹îö¸B,¹bò2¹ðª#¹2Â(¹5¬×¸xËá¸fìë¸îö¸°ŽÍ¸þrøù†¸•º=¸u›¸•º=¸Pb´·(Câ5ª–77l–ù¶9 K·³ßŒ·²ƒ7$’ª79 K·9 K·"õÒ6³ßŒ·³ßŒ·…-Ò7"õÒ6²ƒ7(Câ5iÙ8ÛÆL8…-Ò7ÛÆL8™˜8îz„8!Ð`8¦Ê$8™˜8¸)Õ8ãÀ¬8îz„8«ˆŽ8Ϋ¢8 ض8Ϋ¢8ÛÆL8ÆÄ88ÛÆL8ÆÄ88ª–77Ü·(=¶l–ù¶Ü·ƒ¾Q¸ƒ¾Q¸•º=¸ÚÚy¸•º=¸g¾)¸Ü·xÉe¸ÜʸÚÚy¸ÚÚy¸~‘¸~‘¸u›¸u›¸6Y¹¸Ó+¥¸5¬×¸þrøu›¸tA¯¸Ó+¥¸6Y¹¸Ó+¥¸xËá¸îö¸~¹xËḰŽÍ¸îö¸¸h¹½? +¹B”¹æS¹B,¹bò2¹æS¹¸h¹½? +¹B”¹B”¹µ$=¹bò2¹ðª#¹æS¹îö¸~¹æS¹B,¹fì븰ŽÍ¸5¬×¸6Y¹¸fì븰ŽÍ¸°ŽÍ¸~‘¸tA¯¸6Y¹¸Ó+¥¸6Y¹¸tA¯¸xÉe¸ƒ¾Q¸ƒ¾Q¸g¾)¸ƒ¾Q¸Ü·9 K·ª–77Pb´·l–ù¶ª–77l–ù¶l–ù¶(Câ5²ƒ7ª–77(=¶"õÒ6ÆÄ88ª–77…äù7!Ð`8iÙ8¦Ê$8!Ð`8ÛÆL8…äù7øßt8øßt8™˜8îz„8øßt8¸)Õ8ãÀ¬8øßt8îz„8îz„8Ϋ¢8«ˆŽ8iÙ8øßt8îz„8¦Ê$8"õÒ6iÙ8ÛÆL8iÙ8…-Ò7$’ª7(=¶"õÒ69 K·l–ù¶Ü·Pb´·9 K·Ü·Üʸù†¸u›¸6Y¹¸þrøtA¯¸fìë¸6Y¹¸°ŽÍ¸þrø5¬×¸°ŽÍ¸Ó+¥¸fìë¸þrøxÉe¸u›¸°ŽÍ¸°ŽÍ¸u›¸fìë¸Ó+¥¸~‘¸ƒ¾Q¸~‘¸ƒ¾Q¸g¾)¸~‘¸Ü·³ßŒ·xÉe¸á¸Pb´·l–ù¶ª–77(Câ5(Câ5³ßŒ·ª–77iÙ8¦Ê$8$’ª7²ƒ7ª–77(Câ5¦Ê$8…-Ò7…-Ò7…äù7¦Ê$8¦Ê$8¦Ê$8¦Ê$8!Ð`8«ˆŽ8iÙ8iÙ8…-Ò7$’ª7ª–77¦Ê$8$’ª7"õÒ69 K·³ßŒ·³ßŒ·Pb´·³ßŒ·(=¶Pb´·Pb´·9 K·³ßŒ·Üʸg¾)¸Ü·9 K·á¸²ƒ7Pb´·Üʸḃ¾Q¸~‘¸~‘¸u›¸xËá¸6Y¹¸6Y¹¸°ŽÍ¸xËá¸u›¸îö¸6Y¹¸°ŽÍ¸6Y¹¸xËá¸þrø~¹~¹B”¹îö¸þrøþrøÓ+¥¸xÉe¸tA¯¸~‘¸~‘¸Ó+¥¸g¾)¸~‘¸~‘¸á¸•º=¸á¸xÉe¸³ßŒ·"õÒ6ª–779 K·Ü·Ü·Pb´·ª–77ª–77…äù7…-Ò7¦Ê$8 ض8ÆÄ88ÛÆL8ãÀ¬8ãÀ¬8Ϋ¢8Ϋ¢8 ض8ié8ãÀ¬8jñÀ8Ϋ¢8«ˆŽ8ãÀ¬8!Ð`8…äù7¦Ê$8™˜8!Ð`8øßt8Ϋ¢8iÙ8$’ª7$’ª7¦Ê$8…äù7$’ª7!Ð`8îz„8«ˆŽ8iÙ8«ˆŽ8Ϋ¢8¦Ê$8øßt8ÛÆL8iÙ8iÙ8"õÒ6…-Ò7$’ª7ª–77(=¶l–ù¶á¸•º=¸á¸ƒ¾Q¸~‘¸xËá¸5¬×¸Ó+¥¸°ŽÍ¸þrøîö¸fì븽? +¹B,¹.~¹¸h¹.~¹ðª#¹.~¹B,¹~¹B”¹B,¹îö¸xËá¸þrø5¬×¸fìë¸5¬×¸~¹5¬×¸xËḰŽÍ¸tA¯¸6Y¹¸ÚÚy¸fìë¸5¬×¸þrø6Y¹¸xËá¸~¹5¬×¸°ŽÍ¸6Y¹¸tA¯¸•º=¸ƒ¾Q¸ÚÚy¸ƒ¾Q¸•º=¸•º=¸³ßŒ·³ßŒ·Pb´·l–ù¶(=¶¦Ê$8²ƒ7…-Ò7…äù7²ƒ7iÙ8ÆÄ88!Ð`8$’ª7¦Ê$8…-Ò7$’ª7ÆÄ88«ˆŽ8™˜8¤ Ë8ié8Hß8jñÀ8¤ Ë8¤ Ë8ç®ý8ãÀ¬8 ض8jñÀ8ãÀ¬8«ˆŽ8ãÀ¬8îz„8!Ð`8øßt8…äù7iÙ8ª–77(Câ5…äù7$’ª7³ßŒ·•º=¸á¸(Câ5(Câ5•º=¸Ü·xÉe¸•º=¸xÉe¸~‘¸ƒ¾Q¸ƒ¾Q¸~‘¸°ŽÍ¸tA¯¸°ŽÍ¸Ó+¥¸u›¸6Y¹¸°ŽÍ¸xÉe¸~‘¸~‘¸xËá¸g¾)¸u›¸ƒ¾Q¸u›¸g¾)¸ƒ¾Q¸g¾)¸Pb´·(=¶³ßŒ·Pb´·Pb´·Ü·9 K·(=¶"õÒ6$’ª7²ƒ7iÙ8iÙ8øßt8ª–77ª–77¦Ê$8iÙ8ÛÆL8…-Ò7ÆÄ88ÛÆL88‹ó8¤ Ë8¸)Õ8ç®ý8L;9Xý9þ%9Xý9ç®ý8V9Ê®19L;9Ê®19¨ú@9Ê®19Ç69Ê®19Ág"9»/K9Ûà;9:Q9Ž–,9V9Ág"9Ê®19Ž–,9Ž–,9Ê®19ié8ié8þ%9Ϋ¢8ãÀ¬8Hß8¤ Ë8¸)Õ8¸)Õ8™˜8«ˆŽ8Ϋ¢8îz„8!Ð`8(Câ5…-Ò7Ü·(=¶Üʸ•º=¸•º=¸ƒ¾Q¸•º=¸ÚÚy¸•º=¸~‘¸°ŽÍ¸u›¸tA¯¸xËá¸tA¯¸îö¸B,¹xËḰŽÍ¸°ŽÍ¸6Y¹¸6Y¹¸5¬×¸tA¯¸5¬×¸fìë¸tA¯¸fìë¸Ó+¥¸tA¯¸u›¸~‘¸~‘¸~‘¸þrøÓ+¥¸~‘¸Ó+¥¸Üʸ(Câ5Ü·9 K·…-Ò7(=¶…-Ò7ÛÆL8ÛÆL8øßt8ÆÄ88!Ð`8«ˆŽ8!Ð`8!Ð`8Hß8 +ê9¸)Õ8ié8ãÀ¬8¤ Ë8ãÀ¬8Hß8ãÀ¬8Hß8ié8jñÀ8¤ Ë8 ض8Ϋ¢8ié8¤ Ë8 ض8îz„8ÆÄ88ÆÄ88ÛÆL8iÙ8!Ð`8!Ð`8ÛÆL8ª–77$’ª7ÆÄ88!Ð`8ÛÆL8ª–77(Câ5"õÒ6²ƒ7²ƒ7…äù7³ßŒ·á¸²ƒ7³ßŒ·(=¶³ßŒ·9 K·Pb´·ƒ¾Q¸Ü·(Câ59 K·³ßŒ·á¸³ßŒ·•º=¸ƒ¾Q¸~‘¸°ŽÍ¸þrøþrø½? +¹5¬×¸xËá¸fìë¸þrøÚÚy¸°ŽÍ¸tA¯¸tA¯¸°ŽÍ¸þrøÓ+¥¸6Y¹¸~‘¸6Y¹¸u›¸~‘¸~‘¸á¸l–ù¶³ßŒ·l–ù¶l–ù¶l–ù¶"õÒ6³ßŒ·ª–77(Câ5³ßŒ·l–ù¶(Câ5…äù7ª–77$’ª7…-Ò7$’ª7«ˆŽ8…äù7(Câ5¦Ê$8iÙ8¦Ê$8ÛÆL8øßt8ãÀ¬8™˜8ÆÄ88ÆÄ88«ˆŽ8ãÀ¬8«ˆŽ8«ˆŽ8«ˆŽ8øßt8ÛÆL8ÆÄ88$’ª7ÛÆL8…-Ò7iÙ8iÙ8…-Ò7"õÒ6(=¶²ƒ7…-Ò7(=¶Pb´·ª–779 K·g¾)¸Pb´·ƒ¾Q¸g¾)¸ÚÚy¸6Y¹¸5¬×¸u›¸~‘¸ƒ¾Q¸~‘¸Ó+¥¸tA¯¸~‘¸tA¯¸îö¸5¬×¸¸h¹B,¹îö¸~¹¸h¹½? +¹B,¹æS¹2Â(¹B”¹¸h¹¸h¹xËá¸îö¸~¹fìë¸xËá¸6Y¹¸þrøu›¸ÚÚy¸tA¯¸ƒ¾Q¸u›¸6Y¹¸~‘¸tA¯¸°ŽÍ¸ƒ¾Q¸xÉe¸g¾)¸á¸³ßŒ·l–ù¶(Câ5³ßŒ·Ü·9 K·•º=¸(=¶"õÒ6(=¶…äù7$’ª7¦Ê$8…äù7 ض8øßt8ÆÄ88ÛÆL8ãÀ¬8™˜8«ˆŽ8™˜8Ϋ¢8 ض8¤ Ë8øßt8¸)Õ8¤ Ë8 ض8Hß8 ض88‹ó8Hß8ié8Ϋ¢8îz„8jñÀ8jñÀ8¦Ê$8…äù7iÙ8$’ª7…äù7iÙ8"õÒ6²ƒ7$’ª7…-Ò7"õÒ6³ßŒ·9 K·Ü·Ü·á¸•º=¸ÜʸÜʸ³ßŒ·Ü·ÜʸÚÚy¸~‘¸xËá¸B,¹fìë¸þrøþrøþrøþrø6Y¹¸Ó+¥¸þrøu›¸ÚÚy¸~‘¸~¹5¬×¸~¹xËá¸xËḽ? +¹xËá¸5¬×¸6Y¹¸5¬×¸~‘¸ÚÚy¸ù†¸6Y¹¸~‘¸Üʸg¾)¸Pb´·ƒ¾Q¸~‘¸Ó+¥¸•º=¸Üʸ•º=¸Ü·ƒ¾Q¸~‘¸ƒ¾Q¸ÚÚy¸~‘¸xÉe¸ƒ¾Q¸xÉe¸tA¯¸~‘¸Üʸ•º=¸ƒ¾Q¸Üʸù†¸xÉe¸ÚÚy¸6Y¹¸ù†¸xÉe¸g¾)¸tA¯¸fìë¸5¬×¸B,¹îö¸½? +¹B”¹¢>B¹B”¹bò2¹µ$=¹I 8¹B,¹Ú-¹Ú-¹B”¹µ$=¹I 8¹I 8¹òsL¹òsL¹òsL¹ä`¹¼B¹2Â(¹2Â(¹.~¹½? +¹B,¹5¬×¸þrø~‘¸Ó+¥¸ÚÚy¸g¾)¸ÚÚy¸•º=¸xÉe¸ÚÚy¸ù†¸6Y¹¸á¸•º=¸ƒ¾Q¸Ü·xÉe¸ƒ¾Q¸á¸Ü·ƒ¾Q¸l–ù¶Üʸg¾)¸~‘¸Üʸg¾)¸~‘¸~‘¸Ó+¥¸Ó+¥¸tA¯¸°ŽÍ¸þrøxËá¸tA¯¸°ŽÍ¸u›¸5¬×¸~¹~¹½? +¹¸h¹îö¸æS¹.~¹Ú-¹µ$=¹2Â(¹Ú-¹òsL¹Ú-¹Ú-¹I 8¹PQ¹!«V¹¢>B¹òsL¹¼B¹bò2¹¢>B¹fÇ[¹2Â(¹µ$=¹.~¹¸h¹Ú-¹½? +¹îö¸2Â(¹B”¹½? +¹B,¹°ŽÍ¸5¬×¸xËá¸xËá¸xËá¸5¬×¸5¬×¸îö¸5¬×¸~¹xËá¸6Y¹¸Ó+¥¸B,¹5¬×¸~¹°ŽÍ¸~‘¸~‘¸þrøtA¯¸u›¸u›¸tA¯¸xÉe¸ƒ¾Q¸xÉe¸Ó+¥¸°ŽÍ¸Ó+¥¸6Y¹¸°ŽÍ¸tA¯¸u›¸~‘¸~‘¸°ŽÍ¸þrøÚÚy¸~‘¸5¬×¸fì븰ŽÍ¸5¬×¸6Y¹¸~‘¸ù†¸tA¯¸6Y¹¸fì븸h¹B”¹¸h¹bò2¹bò2¹¸h¹Ú-¹2Â(¹ YG¹ YG¹Ú-¹ YG¹µ$=¹bò2¹I 8¹Ú-¹2Â(¹¸h¹2Â(¹2Â(¹æS¹ðª#¹Ú-¹~¹æS¹~¹°ŽÍ¸fìë¸ÚÚy¸xÉe¸u›¸Üʸƒ¾Q¸xÉe¸ÚÚy¸~‘¸ƒ¾Q¸ÚÚy¸~‘¸g¾)¸á¸g¾)¸xÉe¸ƒ¾Q¸u›¸á¸•º=¸ƒ¾Q¸ÜʸPb´·á¸l–ù¶"õÒ6ḳߌ·"õÒ6²ƒ7²ƒ7ª–779 K·l–ù¶(Câ5ª–77$’ª7…-Ò7"õÒ6(Câ5ḳߌ·²ƒ7(Câ5(=¶9 K·g¾)¸ƒ¾Q¸ƒ¾Q¸xÉe¸•º=¸Pb´·Üʸ³ßŒ·ƒ¾Q¸Pb´·Ü·ÚÚy¸9 K·(Câ5Üʸƒ¾Q¸ÚÚy¸~‘¸~‘¸tA¯¸6Y¹¸•º=¸ÚÚy¸~‘¸5¬×¸~‘¸ƒ¾Q¸~‘¸~‘¸u›¸~‘¸ÚÚy¸6Y¹¸þrøÚÚy¸tA¯¸îö¸°ŽÍ¸Ó+¥¸g¾)¸³ßŒ·Ü·l–ù¶ª–77²ƒ7$’ª7ÛÆL8iÙ8ÛÆL8™˜8Ϋ¢8«ˆŽ8jñÀ8Hß8Ϋ¢8 ض8Ϋ¢8jñÀ8¤ Ë8¤ Ë8ç®ý88‹ó8 +ê9 +ê9ß~'9:Q9Ág"9V9ß~'9V9L;9:Q9Ág"9L;9Ág"9ç®ý88‹ó8V9Xý9V9Ç69Ž–,9Ûà;9Ûà;9Ž–,9¨ú@9¨ú@9Ç69Ž–,9Ág"9¨ú@9Ê®19Ág"9L;9L;9ôF9L;9Ž–,9ß~'9ç®ý8¤ Ë8 +ê9þ%98‹ó8ãÀ¬8Hß8™˜8ié8™˜8 ض8¤ Ë8îz„8øßt8…äù7øßt8Ϋ¢8îz„8!Ð`8…-Ò7…äù7ÛÆL8ÆÄ88…-Ò7ÆÄ88îz„8øßt8ÆÄ88ÆÄ88îz„8iÙ8!Ð`8…äù7îz„8¸)Õ8øßt8™˜8jñÀ8 ض8îz„8Ϋ¢8 ض8øßt88‹ó8Hß8Ϋ¢8¤ Ë8¤ Ë8¤ Ë8ãÀ¬8¤ Ë8ié8ié8 +ê9 +ê9¤ Ë8V9V9¨ú@9Ê®19Ç69úJP9Ç69»/K9±fU9»/K9Ê®19ôF9ôF9ß~'9¨ú@9Ê®19¨ú@9Ç69±fU9éÙi9Ág"9Ê®19Ç69Ûà;9Ž–,9:Q9V9ç®ý8þ%9:Q9þ%9þ%9V9V9V9ç®ý8þ%9V9ié8Hß8Hß8ç®ý8 +ê9ié8¤ Ë8¸)Õ8jñÀ8 ض8¸)Õ8jñÀ8«ˆŽ8 ض8ÆÄ88øßt8øßt8¦Ê$8iÙ8 ض8«ˆŽ8…äù7…-Ò7!Ð`8¦Ê$8iÙ8iÙ8ÛÆL8¦Ê$8…-Ò7…äù7iÙ8"õÒ6!Ð`8…äù7…äù7ÛÆL8$’ª7$’ª7$’ª7¦Ê$8$’ª7iÙ8ÆÄ88ÛÆL8!Ð`8øßt8 ض8«ˆŽ8ãÀ¬8 ض8ç®ý8Ϋ¢8ãÀ¬8îz„8™˜8 ض8¤ Ë8¸)Õ8¤ Ë8ié8jñÀ8V9ié8ç®ý8 +ê9V9 +ê9 +ê9Hß8V9ß~'9úJP9Ê®19Ûà;9ôF9Ç69ôF9Ê®19ß~'9:Q9ß~'9Ûà;9V9Ág"9Ž–,9Ç69Xý9Xý98‹ó8 +ê9þ%9ôF9Ž–,9ß~'9:Q9Xý9Ág"9Ág"9V9 +ê9V9ß~'9Ág"9V9ç®ý8Xý9:Q9Xý9Ž–,9ß~'9:Q9Ž–,9Ž–,9L;9Ûà;9:Q9L;9Ç69:Q9V9Ág"9L;9ß~'9:Q9Ç69ôF9L;9ß~'9Ág"9ß~'9Ê®19Ç69Ûà;9úJP9Ù‚Z9¨ú@9ôF9±fU9Ç69¨ú@9t9éÙi9¹9·S~9Å÷n9w¼d9Ù‚Z9éÙi9éÙi9w¼d9¬4y9vI„9¹9—‘98ú‹9¹9¹9ˆÙ†9vI„9t9éÙi9·S~9ÒŠŽ9Éi‰9¹9Éi‰9¢=–9Ÿƒ 9ˆ¬“9Q`›9€£9åΘ9Q`›9åΘ9åñ9ˆ¬“9Éi‰9Éi‰9ˆÙ†98ú‹9ÒŠŽ9åΘ9vI„9ÒŠŽ9Éi‰9ÒŠŽ9Éi‰9ÒŠŽ9—‘9åΘ9¹9vI„9Éi‰9w¼d9Ù‚Z9±fU9Ù‚Z9ôF9Ág"9ôF9úJP9:Q9:Q9V9ß~'9L;9V9¸)Õ8Hß8¸)Õ8 ض8 ض8V98‹ó8¤ Ë8Hß8«ˆŽ8jñÀ8¸)Õ8!Ð`8!Ð`8ÛÆL8øßt8ÆÄ88…-Ò7øßt8…-Ò7¦Ê$8Ϋ¢8¤ Ë8¸)Õ8îz„8Ϋ¢8ãÀ¬8¤ Ë8¤ Ë8îz„8ãÀ¬8ãÀ¬8¤ Ë8ié8¸)Õ8¸)Õ8L;9Xý9 +ê9Hß8þ%9Ž–,9 +ê9Hß88‹ó8Hß8¤ Ë8ié8™˜8Hß8¸)Õ8¸)Õ8V9¤ Ë8ãÀ¬8 ض8jñÀ8 ض8¸)Õ8¤ Ë8Ϋ¢8Hß8ãÀ¬8ãÀ¬8¸)Õ8¤ Ë8ãÀ¬8™˜8øßt8ÆÄ88!Ð`8øßt8ÛÆL8…-Ò7¦Ê$8øßt8!Ð`8¦Ê$8¦Ê$8…äù7iÙ8(Câ5ÆÄ88$’ª7³ßŒ·"õÒ6…äù7…-Ò7(Câ59 K·Ü·Ü·ÚÚy¸xÉe¸xÉe¸6Y¹¸þrø~‘¸þrøxËḰŽÍ¸þrø5¬×¸tA¯¸6Y¹¸B,¹îö¸þrøîö¸îö¸xËḰŽÍ¸þrø°ŽÍ¸tA¯¸xÉe¸ÚÚy¸ƒ¾Q¸g¾)¸g¾)¸Ü·ƒ¾Q¸g¾)¸g¾)¸Üʸá¸l–ù¶l–ù¶Pb´·(=¶²ƒ7…-Ò7…äù7(=¶ª–77!Ð`8ÆÄ88$’ª7ÛÆL8ÆÄ88îz„8Ϋ¢8jñÀ8 ض8¤ Ë8 ض8 ض8Ϋ¢8 ض8¸)Õ8 ض8ãÀ¬8¤ Ë8ié8ãÀ¬8Ϋ¢8ç®ý8 ض8¸)Õ88‹ó8ié8 ض8ié8L;9ç®ý8Hß8Hß8V9Ϋ¢8ãÀ¬8™˜8«ˆŽ8™˜8jñÀ8¤ Ë8ãÀ¬8 ض8ÛÆL8!Ð`8$’ª7"õÒ6…äù7…-Ò7ª–77$’ª7…-Ò7(=¶$’ª7iÙ8²ƒ7ª–77²ƒ7$’ª7l–ù¶l–ù¶"õÒ6ª–77²ƒ7$’ª7$’ª7"õÒ6!Ð`8…-Ò7…äù7¦Ê$8!Ð`8ÛÆL8…äù7¦Ê$8(Câ5iÙ8ÆÄ88…äù7!Ð`8«ˆŽ8Ϋ¢8îz„8!Ð`8ãÀ¬8Ϋ¢8«ˆŽ8Ϋ¢8Ϋ¢8¸)Õ8Ϋ¢8¤ Ë8Hß8Hß8Xý9Ž–,9þ%9ç®ý8 +ê9ié8V98‹ó8Xý9þ%9V9ç®ý8 +ê9:Q9L;9V9Ág"98‹ó8þ%9V98‹ó88‹ó8¤ Ë8jñÀ8¸)Õ8¤ Ë8Hß8ié8þ%98‹ó88‹ó8Xý9¸)Õ8«ˆŽ8ãÀ¬8îz„8iÙ8…äù7²ƒ7ÛÆL8…äù7iÙ8…äù7(=¶(=¶³ßŒ·"õÒ6(=¶9 K·…-Ò79 K·ª–77(=¶l–ù¶(=¶³ßŒ·á¸á¸Pb´·á¸ƒ¾Q¸~‘¸u›¸ÚÚy¸~‘¸Üʸ•º=¸Üʸg¾)¸~‘¸ƒ¾Q¸g¾)¸Ü·9 K·"õÒ6á¸9 K·"õÒ6…-Ò7²ƒ7(Câ5iÙ8$’ª7ÆÄ88!Ð`8iÙ8!Ð`8Ϋ¢8ãÀ¬8™˜8 ض8¸)Õ88‹ó8ié88‹ó8ié8Xý9ç®ý8Xý9þ%9þ%9L;9V9 +ê9:Q9Hß88‹ó8V9V9V98‹ó8¸)Õ8¸)Õ8 +ê9Hß88‹ó8Hß8 ض8¤ Ë8ãÀ¬8ãÀ¬8¤ Ë8 ض8™˜8 ض8Ϋ¢8îz„8!Ð`8…-Ò7$’ª7…-Ò7ª–77(Câ5(=¶Ü·ƒ¾Q¸Pb´·ƒ¾Q¸~‘¸g¾)¸ÚÚy¸u›¸ÚÚy¸~‘¸u›¸6Y¹¸fìë¸~¹5¬×¸fì븽? +¹îö¸xËá¸B,¹îö¸tA¯¸B,¹îö¸°ŽÍ¸u›¸u›¸~‘¸tA¯¸tA¯¸ù†¸þrøtA¯¸þrøtA¯¸Ó+¥¸tA¯¸B,¹5¬×¸5¬×¸°ŽÍ¸xËá¸îö¸þrø½? +¹u›¸~‘¸~‘¸ÚÚy¸Ü·g¾)¸ƒ¾Q¸á¸•º=¸Pb´·l–ù¶9 K·³ßŒ·ª–77ª–77l–ù¶(=¶(Câ5³ßŒ·9 K·Pb´·Pb´·Ü·Ü·g¾)¸(=¶á¸9 K·Ü·³ßŒ·"õÒ6"õÒ6(Câ5Ü·9 K·Ü·á¸Üʸg¾)¸Üʸḃ¾Q¸tA¯¸xÉe¸tA¯¸fìë¸îö¸fìë¸.~¹I 8¹½? +¹2Â(¹I 8¹B”¹µ$=¹2Â(¹I 8¹¢>B¹bò2¹Ú-¹ðª#¹2Â(¹Ú-¹Ú-¹Ú-¹bò2¹B”¹½? +¹2Â(¹Ú-¹bò2¹PQ¹!«V¹[u¹¢>B¹òsL¹¢>B¹I 8¹ YG¹bò2¹I 8¹Ú-¹ðª#¹Ú-¹æS¹B,¹Ú-¹B”¹æS¹½? +¹fìë¸xËá¸~¹°ŽÍ¸tA¯¸tA¯¸ÚÚy¸°ŽÍ¸îö¸5¬×¸6Y¹¸5¬×¸B”¹.~¹æS¹½? +¹B,¹fìë¸~¹îö¸½? +¹æS¹xËá¸6Y¹¸6Y¹¸~‘¸6Y¹¸6Y¹¸6Y¹¸6Y¹¸Ó+¥¸~‘¸xËá¸xËḰŽÍ¸6Y¹¸~‘¸~¹6Y¹¸~‘¸°ŽÍ¸fì븰ŽÍ¸°ŽÍ¸fìë¸xËá¸~¹îö¸¸h¹~¹I 8¹2Â(¹ðª#¹bò2¹ðª#¹bò2¹I 8¹PQ¹ YG¹!«V¹fÇ[¹!«V¹ä`¹¢>B¹-섹Öyz¹[u¹ø˜¹‚O”¹-섹•ž¹¦à–¹‡¾‘¹Œ¹‚O”¹M|‡¹M|‡¹=\‚¹·-¹¦à–¹¦à–¹‡¾‘¹Œ¹-섹Œ¹‚O”¹Œ¹˜ Š¹Œ¹=\‚¹‚O”¹iœ¹óq™¹Œ¹[u¹-섹fÇ[¹[u¹ YG¹;f¹ YG¹òsL¹µ$=¹2Â(¹I 8¹¸h¹Ú-¹I 8¹~¹æS¹B”¹~¹fìë¸xËá¸5¬×¸°ŽÍ¸~‘¸Ó+¥¸xÉe¸tA¯¸tA¯¸~‘¸Ó+¥¸~‘¸ù†¸ƒ¾Q¸~‘¸6Y¹¸~‘¸Ó+¥¸6Y¹¸ÚÚy¸6Y¹¸B,¹þrø°ŽÍ¸5¬×¸2Â(¹.~¹B,¹¸h¹2Â(¹.~¹B”¹¸h¹bò2¹bò2¹µ$=¹;f¹¢>B¹ä`¹PQ¹ä`¹fÇ[¹Èk¹ä`¹fÇ[¹fÇ[¹ä`¹fÇ[¹[u¹PQ¹ YG¹B”¹¢>B¹I 8¹B”¹PQ¹ YG¹µ$=¹ðª#¹Ú-¹2Â(¹ðª#¹Ú-¹ðª#¹B”¹ðª#¹½? +¹xËá¸~¹xËá¸~¹~¹îö¸B,¹ðª#¹æS¹¸h¹fìë¸xËá¸6Y¹¸5¬×¸Ó+¥¸~‘¸Ó+¥¸6Y¹¸6Y¹¸6Y¹¸•º=¸ù†¸ÚÚy¸g¾)¸Ü·(=¶l–ù¶l–ù¶²ƒ7"õÒ6l–ù¶l–ù¶(=¶iÙ8(Câ5ÆÄ88…-Ò7ª–77…äù7²ƒ7Ü·(=¶²ƒ7(Câ5²ƒ7²ƒ7iÙ8ÆÄ88…-Ò7îz„8²ƒ7l–ù¶ƒ¾Q¸ÚÚy¸xÉe¸Üʸu›¸6Y¹¸6Y¹¸æS¹~¹xËḰŽÍ¸xËḽ? +¹B,¹~¹½? +¹¸h¹¸h¹æS¹.~¹B”¹I 8¹Ú-¹µ$=¹µ$=¹ä`¹PQ¹µ$=¹¢>B¹I 8¹òsL¹;f¹Èk¹!«V¹;f¹fÇ[¹!«V¹µ$=¹òsL¹PQ¹¸h¹¢>B¹.~¹½? +¹B,¹Ú-¹I 8¹.~¹Ú-¹.~¹B,¹½? +¹~¹xËá¸~¹½? +¹þrø~¹5¬×¸æS¹B,¹fìë¸6Y¹¸xËá¸xËá¸5¬×¸u›¸6Y¹¸~¹ù†¸ƒ¾Q¸á¸9 K·ƒ¾Q¸ƒ¾Q¸ÜʸÜʸ9 K·(Câ59 K·9 K·l–ù¶Ü·Ü·Pb´·ª–77(=¶"õÒ6³ßŒ·~‘¸•º=¸³ßŒ·9 K·l–ù¶ª–77iÙ8…äù7$’ª7$’ª7(Câ5(Câ5³ßŒ·³ßŒ·Ü·ƒ¾Q¸g¾)¸Üʸá¸g¾)¸Ü·ÚÚy¸u›¸ƒ¾Q¸ù†¸•º=¸g¾)¸•º=¸Üʸ~‘¸6Y¹¸þrø5¬×¸6Y¹¸5¬×¸tA¯¸tA¯¸ÚÚy¸~‘¸u›¸ƒ¾Q¸Üʸƒ¾Q¸á¸ÚÚy¸Pb´·(Câ5"õÒ6l–ù¶Üʸ"õÒ6(Câ5(=¶9 K·9 K·(=¶¦Ê$8³ßŒ·(=¶²ƒ7iÙ8øßt8!Ð`8ÛÆL8ÛÆL8!Ð`8«ˆŽ8ÛÆL8iÙ8ÆÄ88ÛÆL8¦Ê$8!Ð`8øßt8™˜8Ϋ¢8™˜8¸)Õ88‹ó8ié8ié8ç®ý8jñÀ8¸)Õ8¤ Ë8 +ê9Xý9Ág"9Ág"9V9ié8þ%9V9 +ê9Xý9 +ê9Xý9þ%9 +ê9 +ê9 ض8ãÀ¬8Ϋ¢8ÆÄ88«ˆŽ8!Ð`8ÛÆL8 ض8ÛÆL8…äù7iÙ8iÙ8"õÒ6(=¶9 K·ƒ¾Q¸ù†¸ƒ¾Q¸•º=¸~‘¸°ŽÍ¸tA¯¸ƒ¾Q¸6Y¹¸6Y¹¸tA¯¸ù†¸6Y¹¸xËá¸þrø~¹°ŽÍ¸°ŽÍ¸B,¹xËá¸B,¹xËá¸tA¯¸5¬×¸5¬×¸°ŽÍ¸5¬×¸6Y¹¸ƒ¾Q¸•º=¸Üʸg¾)¸Ü·³ßŒ·³ßŒ·•º=¸(=¶…-Ò7Ü·²ƒ7ª–77ª–77ª–77²ƒ7…äù7ÛÆL8iÙ8øßt8øßt8ÆÄ88øßt8øßt8ÛÆL8ÛÆL8ÆÄ88ãÀ¬8¸)Õ8ãÀ¬8Hß8¸)Õ8 ض8™˜8îz„8øßt8™˜8ÆÄ88ÛÆL8Ϋ¢8Ϋ¢8ÛÆL8iÙ8"õÒ6²ƒ7(=¶(=¶…äù7…äù7²ƒ7¦Ê$8ÆÄ88…äù7îz„8!Ð`8ÛÆL8ÛÆL8ÆÄ88ÛÆL8¦Ê$8²ƒ7…äù7ÆÄ88(Câ5¦Ê$8ÆÄ88²ƒ7$’ª7ª–77Pb´·(=¶³ßŒ·ª–77(=¶(Câ5³ßŒ·9 K·Pb´·ª–77³ßŒ·(=¶³ßŒ·9 K·²ƒ7²ƒ7"õÒ6²ƒ7(=¶ª–779 K·l–ù¶³ßŒ·²ƒ7$’ª7îz„8îz„8îz„8!Ð`8«ˆŽ8¦Ê$8Ϋ¢8!Ð`8¦Ê$8øßt8øßt8ãÀ¬8 ض8Hß8 +ê9Xý9Ág"9V9 +ê9Ê®19Xý9þ%9V9L;9Ž–,9þ%9V9ç®ý8V9¤ Ë8Xý9L;9Ág"9þ%9Xý9ç®ý8Hß8:Q9þ%9L;9L;9þ%9¤ Ë8¤ Ë8Hß8ié8ié8V9¸)Õ8ié8jñÀ8 ض8¤ Ë8ãÀ¬8™˜8Ϋ¢8¸)Õ8jñÀ8Hß8jñÀ8¤ Ë8jñÀ8«ˆŽ8™˜8ÆÄ88iÙ8iÙ8iÙ8ÛÆL8…-Ò7…-Ò7îz„8ÛÆL8²ƒ7"õÒ6(Câ5(Câ5…-Ò7…äù7(Câ5(Câ5(Câ5…-Ò7$’ª7…äù7¦Ê$8iÙ8ÆÄ88…äù7øßt8ÛÆL8øßt8¤ Ë8jñÀ8Ϋ¢8™˜8«ˆŽ8!Ð`8ÆÄ88!Ð`8ÛÆL8îz„8øßt8ÛÆL8«ˆŽ8™˜8Ϋ¢8ié8 +ê9Hß8Xý9Hß8jñÀ8Hß8ié8L;9Xý9:Q9V98‹ó8¤ Ë8¤ Ë8™˜8Ϋ¢8ãÀ¬8¤ Ë8!Ð`8îz„8Ϋ¢8îz„8Hß8Ϋ¢8 ض8«ˆŽ8øßt8!Ð`8¦Ê$8ª–77"õÒ6"õÒ69 K·l–ù¶Ü·Ü·á¸•º=¸ù†¸ÚÚy¸u›¸~‘¸ÚÚy¸u›¸u›¸tA¯¸fìë¸îö¸îö¸B,¹B”¹½? +¹.~¹µ$=¹ðª#¹½? +¹B”¹B”¹B”¹I 8¹2Â(¹bò2¹Ú-¹B”¹I 8¹;f¹I 8¹bò2¹!«V¹òsL¹PQ¹¢>B¹bò2¹Ú-¹Ú-¹Ú-¹¸h¹æS¹B,¹þrø6Y¹¸6Y¹¸xÉe¸ÚÚy¸xÉe¸ÚÚy¸ƒ¾Q¸•º=¸ƒ¾Q¸~‘¸xÉe¸•º=¸³ßŒ·á¸Ü·l–ù¶(=¶…-Ò7"õÒ6…-Ò7…äù7ÆÄ88…-Ò7²ƒ7øßt8¦Ê$8…äù7²ƒ7$’ª7²ƒ7…äù7!Ð`8$’ª7ÆÄ88¦Ê$8ÆÄ88Ϋ¢8¦Ê$8Ϋ¢8«ˆŽ8 ض8«ˆŽ8¦Ê$8ÆÄ88!Ð`8øßt8ãÀ¬8 ض8«ˆŽ8 ض8 ض8ãÀ¬8«ˆŽ8«ˆŽ8™˜8!Ð`8øßt8øßt8jñÀ8Ϋ¢8jñÀ8Ϋ¢8Ϋ¢8Ϋ¢8Ϋ¢8 ض8øßt8 ض8øßt8ÛÆL8™˜8îz„8ÆÄ88ÆÄ88…äù7…äù7(Câ5…-Ò7…äù7$’ª7ª–77ª–77ª–77²ƒ7Ü·…-Ò7…-Ò7ª–77…äù7«ˆŽ8Ϋ¢8™˜8ÆÄ88øßt8ãÀ¬8™˜8ãÀ¬8jñÀ88‹ó8Hß8 ض8ãÀ¬8 ض8ç®ý8 ض8¸)Õ8¸)Õ8ié8 +ê9 +ê9V9V98‹ó8Hß8ié8Xý9Ç69Ç69Ûà;9Ág"9¨ú@9Ž–,9Ág"9Ûà;9Ç69þ%9ß~'9L;9V9Ág"9Ê®19Ê®19ß~'9V9L;9Ág"9L;9 +ê9Ž–,9þ%9L;9þ%9L;9ié8 +ê9ç®ý8¸)Õ8Ϋ¢8jñÀ8Xý9 ض8™˜8™˜8™˜8¤ Ë8Hß8Hß8îz„8Hß8¤ Ë8Hß8ãÀ¬8 ض8Xý9ié8¸)Õ8¸)Õ8ç®ý88‹ó8¸)Õ8Xý98‹ó8¸)Õ8 +ê9Hß8¸)Õ8ç®ý8Xý9ié8Hß8Hß88‹ó8¤ Ë8¸)Õ8Ϋ¢8¤ Ë8¸)Õ8¸)Õ8 +ê9Hß8 +ê9Xý9ié8V9V9L;9Ž–,9:Q9Ç69L;9Ç69L;9Ž–,9ôF9ôF9ôF9úJP9t9vI„9Å÷n9ÒŠŽ9vI„98ú‹9Éi‰9Éi‰9vI„98ú‹9ˆ¬“9Q`›9ˆ¬“9åΘ9ˆ¬“9åΘ9€£9ÒŠŽ9ˆ¬“9Q`›9Éi‰9ÒŠŽ9—‘9åΘ98ú‹9·S~9úJP9éÙi9vI„9Ù‚Z9Å÷n9éÙi9éÙi9ôF9Ûà;9Ê®19±fU9Ê®19:Q9Ág"9V98‹ó88‹ó8¸)Õ88‹ó8ç®ý88‹ó8ié8ç®ý8¤ Ë8ãÀ¬8Ϋ¢8jñÀ8¤ Ë8Ϋ¢8îz„8jñÀ8™˜8ÆÄ88¸)Õ8 ض8Ϋ¢8!Ð`8!Ð`8™˜8ãÀ¬8Ϋ¢8îz„8¤ Ë8ié8¤ Ë8 ض8¤ Ë8¸)Õ8¸)Õ8¸)Õ8ãÀ¬8Hß8ié8 +ê9V9Ág"9:Q9Ág"9L;9Xý9Ág"9:Q9ß~'9Ê®19w¼d9Ù‚Z9úJP9»/K9¬4y9Ù‚Z9qŸ_9qŸ_9Ûà;9ôF9±fU9úJP9éÙi9w¼d9Ù‚Z9»/K9úJP9Ç69Ág"9Ê®19Ž–,9Ç69¨ú@9Ç69V9þ%9þ%9ß~'9Ág"9ié8ç®ý88‹ó8ç®ý8:Q9L;9V9L;9ié8 +ê9¸)Õ8ãÀ¬8Hß8ç®ý8 ض8 ض8™˜8«ˆŽ8jñÀ8™˜8Ϋ¢8Ϋ¢8™˜8ãÀ¬8!Ð`8øßt8™˜8ÆÄ88iÙ8!Ð`8¦Ê$8iÙ8¦Ê$8…äù7²ƒ7Pb´·"õÒ6ª–779 K·(Câ5l–ù¶(=¶ÜʸPb´·Ü·Ü·Ü·9 K·9 K·³ßŒ·á¸l–ù¶l–ù¶(Câ5(Câ5³ßŒ·²ƒ7g¾)¸l–ù¶á¸á¸á¸Ü·(=¶…-Ò7Pb´·"õÒ6"õÒ6"õÒ6(=¶ª–77"õÒ6…-Ò7(=¶¦Ê$8¦Ê$8…-Ò7«ˆŽ8ÛÆL8ÆÄ88ÛÆL8¦Ê$8øßt8îz„8!Ð`8 ض8øßt8ÛÆL8¦Ê$8iÙ8…-Ò7ª–77…-Ò7«ˆŽ8iÙ8iÙ8…äù7iÙ8ª–77Ü·²ƒ7²ƒ7Ü·ª–77á¸ÜʸÚÚy¸xÉe¸á¸•º=¸ÚÚy¸xÉe¸ÚÚy¸~‘¸6Y¹¸fìë¸þrø°ŽÍ¸îö¸îö¸xËá¸~¹xËá¸5¬×¸~¹îö¸B,¹5¬×¸5¬×¸.~¹~¹æS¹¸h¹½? +¹.~¹B”¹bò2¹æS¹.~¹ðª#¹½? +¹°ŽÍ¸6Y¹¸6Y¹¸Ó+¥¸ù†¸~‘¸ƒ¾Q¸ÜʸxÉe¸ƒ¾Q¸á¸g¾)¸³ßŒ·ÜʸÜʸ•º=¸ƒ¾Q¸Üʸ•º=¸ÚÚy¸•º=¸~‘¸u›¸ù†¸Ü·•º=¸Ü·á¸Pb´·9 K·(=¶l–ù¶l–ù¶(Câ5(Câ5"õÒ6"õÒ6"õÒ6²ƒ7(=¶Üʸܷ9 K·Pb´·Pb´·³ßŒ·Ü·ƒ¾Q¸Üʸ~‘¸~‘¸ÚÚy¸~‘¸á¸9 K·Ü·³ßŒ·g¾)¸xÉe¸•º=¸ÚÚy¸•º=¸xÉe¸~‘¸u›¸~‘¸u›¸tA¯¸°ŽÍ¸u›¸~‘¸u›¸tA¯¸~‘¸•º=¸~‘¸Ó+¥¸ù†¸Ó+¥¸þrøxËá¸tA¯¸~‘¸5¬×¸ƒ¾Q¸Ó+¥¸~‘¸xÉe¸ÚÚy¸6Y¹¸6Y¹¸~‘¸xÉe¸Üʸ•º=¸á¸l–ù¶(=¶l–ù¶(=¶(=¶9 K·(Câ5²ƒ7…-Ò7$’ª7$’ª7(Câ5"õÒ6(Câ5"õÒ6…-Ò7…-Ò7…-Ò7$’ª7(Câ5¦Ê$8¦Ê$8…-Ò7îz„8îz„8øßt8ÛÆL8ÛÆL8¦Ê$8!Ð`8øßt8Ϋ¢8îz„8jñÀ8¸)Õ8¤ Ë8 ض8Ϋ¢8«ˆŽ8ãÀ¬8Ϋ¢8øßt8™˜8ÆÄ88øßt8!Ð`8øßt8!Ð`8iÙ8l–ù¶²ƒ7…-Ò7…äù7ª–77²ƒ7ª–77(=¶9 K·"õÒ6(=¶9 K·(=¶Ü·á¸ƒ¾Q¸•º=¸l–ù¶ƒ¾Q¸xÉe¸•º=¸ù†¸ƒ¾Q¸ƒ¾Q¸~‘¸ÚÚy¸ƒ¾Q¸tA¯¸u›¸~‘¸6Y¹¸~‘¸ÚÚy¸ù†¸u›¸ÜʸxÉe¸ƒ¾Q¸~‘¸~‘¸~‘¸xÉe¸g¾)¸g¾)¸ÚÚy¸á¸9 K·Ü·á¸³ßŒ·³ßŒ·…-Ò7ª–77$’ª7(Câ5iÙ8iÙ8«ˆŽ8¸)Õ8!Ð`8ÛÆL8îz„8¤ Ë8 +ê9™˜8V9 +ê9jñÀ8ié8Hß8ié8þ%98‹ó8 +ê9Xý9þ%9 +ê9þ%9L;9:Q9þ%9Ç69Ž–,9:Q9ç®ý8ç®ý8ç®ý8ié8jñÀ88‹ó8¸)Õ8Ϋ¢8!Ð`8«ˆŽ8!Ð`8«ˆŽ8îz„8ÛÆL8¦Ê$8iÙ8ÆÄ88¦Ê$8ª–77iÙ8!Ð`8øßt8!Ð`8ª–77…-Ò7$’ª7iÙ8…äù7…-Ò7$’ª7$’ª7"õÒ6$’ª7(=¶…-Ò7…-Ò7ÆÄ88ª–77…äù7…äù7"õÒ6iÙ8øßt8…äù7¦Ê$8…äù7¦Ê$8iÙ8iÙ8ÆÄ88øßt8l–ù¶¦Ê$8…-Ò7ÆÄ88ãÀ¬8…äù7øßt8ÆÄ88øßt8ÆÄ88…äù7«ˆŽ8™˜8ãÀ¬8Ϋ¢8ç®ý8ãÀ¬8Ϋ¢8ié8¸)Õ88‹ó8ç®ý88‹ó8þ%9Ág"9Ê®19úJP9»/K9Ê®19Ê®19 +ê9L;9:Q9:Q9¸)Õ8Ág"9þ%9V9V9Ê®19Ág"9ß~'9Ž–,9ç®ý8V9Xý9¤ Ë8Ág"9:Q9¤ Ë8ié88‹ó8¤ Ë8¸)Õ8ãÀ¬8«ˆŽ8ãÀ¬8™˜8jñÀ8ãÀ¬8«ˆŽ8!Ð`8!Ð`8ÛÆL8«ˆŽ8ÆÄ88iÙ8ÆÄ88…-Ò7…äù7"õÒ6¦Ê$8iÙ8ÛÆL8!Ð`8$’ª7$’ª7…äù7…-Ò7$’ª7…-Ò7"õÒ6…-Ò79 K·²ƒ7(=¶(Câ5…-Ò7…-Ò7(Câ5…äù7…äù7²ƒ7¦Ê$8…-Ò7¦Ê$8$’ª7²ƒ7!Ð`8¦Ê$8"õÒ6ª–77$’ª7"õÒ6iÙ8…-Ò7"õÒ6"õÒ6l–ù¶$’ª7$’ª7²ƒ7ÆÄ88…äù7ª–77"õÒ6ª–77(Câ5$’ª7²ƒ7²ƒ7¦Ê$8…äù7¦Ê$8!Ð`8îz„8«ˆŽ8¦Ê$8iÙ8…äù7¦Ê$8!Ð`8ÛÆL8îz„8¦Ê$8¦Ê$8…-Ò7²ƒ7$’ª7…-Ò7…-Ò7$’ª7…äù7$’ª7³ßŒ·(Câ59 K·"õÒ6³ßŒ·á¸9 K·Ü·Üʸg¾)¸g¾)¸tA¯¸tA¯¸°ŽÍ¸°ŽÍ¸xËá¸tA¯¸~¹6Y¹¸.~¹.~¹5¬×¸5¬×¸¸h¹fìë¸B,¹.~¹.~¹ðª#¹µ$=¹bò2¹2Â(¹Ú-¹Ú-¹ðª#¹¸h¹¸h¹B”¹.~¹xËá¸B”¹°ŽÍ¸þrø°ŽÍ¸fìë¸xËá¸fìë¸fì븰ŽÍ¸fìë¸xËá¸þrøþrøþrøtA¯¸Ó+¥¸u›¸Ó+¥¸ÚÚy¸ù†¸ÚÚy¸ÚÚy¸~‘¸~‘¸~‘¸tA¯¸5¬×¸°ŽÍ¸~‘¸ƒ¾Q¸g¾)¸ÜʸÜʸPb´·³ßŒ·á¸~‘¸~‘¸~‘¸~‘¸ÚÚy¸ƒ¾Q¸~‘¸xËá¸Ó+¥¸~‘¸ƒ¾Q¸•º=¸g¾)¸³ßŒ·á¸Pb´·ƒ¾Q¸á¸xÉe¸Pb´·ÜʸÜʸù†¸Ó+¥¸~‘¸þrøxËá¸~¹xËá¸Ó+¥¸°ŽÍ¸fì븽? +¹.~¹xËá¸5¬×¸tA¯¸tA¯¸5¬×¸xËá¸îö¸I 8¹2Â(¹¸h¹¢>B¹ YG¹µ$=¹2Â(¹Ú-¹bò2¹2Â(¹bò2¹ YG¹!«V¹!«V¹!«V¹ä`¹ YG¹fÇ[¹;f¹Öyz¹ä`¹fÇ[¹!«V¹;f¹òsL¹ YG¹ YG¹!«V¹bò2¹¢>B¹Ú-¹2Â(¹ðª#¹~¹þrøB,¹xËá¸B,¹tA¯¸¸h¹îö¸fìë¸îö¸þrøîö¸fìë¸5¬×¸þrøtA¯¸Ó+¥¸•º=¸Ó+¥¸~‘¸u›¸ÚÚy¸u›¸xËá¸fìë¸5¬×¸.~¹æS¹B,¹½? +¹B”¹B”¹ðª#¹bò2¹Ú-¹ðª#¹I 8¹2Â(¹B”¹Ú-¹.~¹.~¹B”¹bò2¹µ$=¹µ$=¹µ$=¹bò2¹I 8¹ YG¹PQ¹òsL¹µ$=¹PQ¹!«V¹ä`¹;f¹òsL¹¼B¹ YG¹fÇ[¹;f¹fÇ[¹!«V¹!«V¹;f¹[u¹ä`¹Èk¹ø˜¹˜ Š¹·-¹·-¹·-¹¦à–¹·-¹iœ¹iœ¹¶¸£¹iœ¹Ì&¡¹·-¹iœ¹•ž¹óq™¹¦à–¹•ž¹Yo«¹Ø®¹{”°¹{”°¹A'³¹°s½¹þܨ¹ÇJ¦¹•ž¹Yo«¹þܨ¹¯šÂ¹5M¸¹°s½¹.Âǹ°s½¹Ø®¹*ºµ¹{”°¹{”°¹*ºµ¹þܨ¹Yo«¹*ºµ¹óq™¹ÇJ¦¹Ì&¡¹‚O”¹Œ¹Œ¹‡¾‘¹¦à–¹-섹˜ Š¹=\‚¹Öyz¹M|‡¹=\‚¹ø˜¹¼B¹µ$=¹µ$=¹¢>B¹Ú-¹µ$=¹Ú-¹ðª#¹[u¹Ú-¹I 8¹2Â(¹I 8¹2Â(¹Ú-¹Ú-¹bò2¹.~¹.~¹ðª#¹æS¹fì븸h¹¸h¹xËá¸~¹þrøtA¯¸xËá¸xËá¸~‘¸xÉe¸u›¸ƒ¾Q¸•º=¸~‘¸u›¸Üʸ~‘¸•º=¸xÉe¸(=¶ÚÚy¸ÚÚy¸•º=¸Üʸá¸Pb´·l–ù¶"õÒ6"õÒ6…äù7ª–77…-Ò7iÙ8…-Ò7…-Ò7iÙ8…-Ò7…-Ò7ÛÆL8$’ª7²ƒ7ª–779 K·$’ª7ÆÄ88ÆÄ88(=¶ÆÄ88(Câ5³ßŒ·²ƒ7(=¶9 K·(=¶9 K·(=¶³ßŒ·l–ù¶³ßŒ·³ßŒ·Üʸ³ßŒ·ù†¸xÉe¸~‘¸g¾)¸u›¸•º=¸xÉe¸u›¸•º=¸ù†¸u›¸5¬×¸tA¯¸þrø¸h¹fì븸h¹¸h¹2Â(¹æS¹~¹¸h¹fì븰ŽÍ¸6Y¹¸6Y¹¸xÉe¸~‘¸Pb´·g¾)¸•º=¸9 K·á¸á¸9 K·(=¶á¸á¸Pb´·ª–77ÛÆL8²ƒ7²ƒ7ÆÄ88$’ª7l–ù¶(=¶(=¶ÛÆL8ÆÄ88$’ª7iÙ8…-Ò7îz„8ãÀ¬8«ˆŽ8ãÀ¬8™˜8ç®ý8¸)Õ8ié8Ϋ¢8¸)Õ8ié8þ%9L;9:Q9Ág"9Xý9Xý9Ûà;9Ç69Ê®19ß~'9Xý9L;9ß~'9L;9:Q9Ç69L;9Xý9ié8Xý9þ%9 +ê9L;9ç®ý8ß~'9Ê®19ß~'9ß~'9Ê®19 +ê9ié88‹ó8Hß8ãÀ¬8!Ð`8jñÀ8«ˆŽ8Ϋ¢8¤ Ë8jñÀ8Ϋ¢8 ض8jñÀ88‹ó8ç®ý8ié8ié8ié88‹ó8ié8V9Ûà;9þ%9þ%9Ûà;9V9þ%9ç®ý8L;9ß~'9Ê®19Ág"9Ûà;9»/K9ß~'9¨ú@9Ç69ß~'9Ê®19qŸ_9Ù‚Z9w¼d9·S~98ú‹9¹9ÒŠŽ98ú‹9ˆ¬“9ˆ¬“9—‘9ˆ¬“98ú‹9ˆÙ†98ú‹9åΘ9ˆ¬“9åΘ9¶9¨9¶9¨9¶µ9ñ¯9¶9¨9Öƒ²9̪9¶9¨9ñ¯9Öƒ²9Þ<º9$м9h²É9~^­9~^­9~^­9Öƒ²9€£9¶9¨9¹©·9¶9¨9Ÿƒ 9Öƒ²9åñ9Ÿƒ 9Q`›9ˆ¬“9åΘ9åΘ9Q`›9åñ9̪98ú‹9ˆ¬“9Q`›9ÒŠŽ9ˆ¬“9¢=–9Éi‰9ˆÙ†9ˆ¬“9¢=–9åΘ9Ÿƒ 9åñ9·S~9Éi‰9ˆ¬“9t9·S~98ú‹9¹9¬4y9¹9Å÷n9·S~98ú‹9·S~98ú‹9Éi‰9Å÷n9vI„9—‘9ÒŠŽ9Éi‰98ú‹9Éi‰9—‘98ú‹9ˆÙ†9¹98ú‹9Éi‰9¹9¬4y9ˆÙ†9vI„9Å÷n9¬4y9¬4y9·S~9Å÷n9t9Å÷n9¬4y9Å÷n9ˆ¬“9ˆÙ†9Q`›9Ÿƒ 9åΘ9¢=–9åΘ9—‘9¶9¨9Ÿƒ 9Ÿƒ 9¶9¨9åΘ9Ÿƒ 9€£9Q`›9ˆ§¥9¢=–9ˆ§¥9ˆ§¥9Q`›9¶9¨9¶9¨9ˆ§¥9~^­9¶9¨9Ÿƒ 9̪9åΘ9Éi‰9åñ9åñ9—‘9Q`›9åñ9ˆ§¥9Q`›9åΘ9¢=–98ú‹9¢=–9¢=–9t9qŸ_9¬4y9éÙi9Å÷n9Å÷n9úJP9úJP9w¼d9t9qŸ_9qŸ_9w¼d9»/K9Ù‚Z9t9±fU9éÙi9éÙi9Å÷n9¬4y9t9·S~98ú‹9Éi‰9t9¹9Å÷n9Å÷n9±fU9·S~9w¼d9w¼d9ˆÙ†9vI„9¬4y9qŸ_9¹9¬4y9éÙi9Éi‰9vI„9·S~9Éi‰98ú‹9Éi‰9—‘9ÒŠŽ98ú‹9ÒŠŽ9¬4y9Éi‰9Éi‰9åñ9~^­9åΘ9ˆ§¥9¶9¨9€£9̪9ñ¯9ñ¯9¶µ9Þ<º9Šc¿9Þ<º9Šc¿9$м9$м9¹©·9Šc¿9ºŠÄ9$м9Öƒ²9Öƒ²9Öƒ²9Šc¿9ñ¯9¹©·9Þ<º9¶µ9Þ<º9ºŠÄ9~^­9åñ9~^­9€£9€£9Ÿƒ 9åñ9Ÿƒ 9€£9åΘ9åñ9€£9åñ9¶9¨9€£9̪9åñ9åñ9¢=–9ˆ¬“9Éi‰9éÙi9qŸ_9ôF9Ù‚Z9Å÷n9Ù‚Z9úJP9»/K9¨ú@9ôF9»/K9»/K9Ž–,9Ág"9:Q9Ê®19Ž–,9Ág"9:Q9L;9Ê®19Hß8:Q9Ûà;9ß~'9Ág"9:Q9Ç69éÙi9Ç69Ž–,9»/K9»/K9¨ú@9ôF9¨ú@9qŸ_9¬4y9·S~9éÙi9t9qŸ_9·S~9t9éÙi9±fU9éÙi9Å÷n9t9úJP9úJP9w¼d9±fU9±fU9éÙi9éÙi9·S~9t9Å÷n9éÙi9éÙi9w¼d9ˆÙ†9vI„9¹9Éi‰9ˆ¬“9·S~98ú‹9ˆÙ†9vI„98ú‹9ˆÙ†9úJP98ú‹9vI„9qŸ_9úJP9¬4y9Ù‚Z9qŸ_9±fU9Ág"9ôF9Ûà;9¨ú@9ôF9¨ú@9:Q9ié88‹ó88‹ó8¤ Ë8ãÀ¬8 ض8™˜8¸)Õ8 ض8¤ Ë8Ϋ¢8øßt8«ˆŽ8îz„8…äù7¦Ê$8²ƒ7…äù7…äù7ÛÆL8ÛÆL8¸)Õ8 ض8«ˆŽ8!Ð`8øßt8«ˆŽ8«ˆŽ8¤ Ë8¤ Ë8ç®ý8¸)Õ8¸)Õ8jñÀ8ié8ç®ý88‹ó8jñÀ8ç®ý8ß~'9Ç69Ûà;9¨ú@9w¼d9¨ú@9±fU9Ù‚Z9w¼d9±fU9w¼d9t9Å÷n9·S~9t9¬4y9vI„9·S~9t9éÙi9w¼d9Å÷n9t9Ù‚Z9Ù‚Z9t9éÙi9úJP9w¼d9ôF9Ûà;9Ç69úJP9úJP9Ûà;9úJP9qŸ_9±fU9qŸ_9Ç69Ž–,9ôF9Ž–,9Ž–,9Ê®19:Q9:Q9Xý98‹ó8ié8:Q9L;9L;9ç®ý8þ%9Xý9ié8ç®ý8Hß8ÛÆL8!Ð`8ÆÄ88…-Ò7ÛÆL8…äù7(Câ5(=¶(Câ5(=¶Ü·l–ù¶(=¶Pb´·³ßŒ·9 K·³ßŒ·l–ù¶ÜʸÜʸg¾)¸"õÒ6l–ù¶³ßŒ·g¾)¸g¾)¸•º=¸9 K·xÉe¸á¸á¸(=¶l–ù¶á¸á¸l–ù¶(Câ5(=¶ª–77(Câ5$’ª7…äù7ÆÄ88øßt8ÆÄ88îz„8îz„8!Ð`8Ϋ¢8jñÀ8™˜8jñÀ8jñÀ8«ˆŽ8¤ Ë8ié8ç®ý8Hß8¤ Ë8¤ Ë8¸)Õ8 ض8ié88‹ó8L;9ç®ý8¤ Ë8 ض8™˜8jñÀ8ãÀ¬8 ض8¸)Õ8!Ð`8¦Ê$8™˜8!Ð`8™˜8jñÀ8¸)Õ8¤ Ë8«ˆŽ8ãÀ¬8ÛÆL8…äù7¦Ê$8…äù7iÙ8…äù7ª–77Üʸḃ¾Q¸tA¯¸Üʸ•º=¸~‘¸u›¸þrøu›¸Ó+¥¸~‘¸6Y¹¸~¹tA¯¸Ó+¥¸°ŽÍ¸°ŽÍ¸þrøþrøxËá¸æS¹.~¹½? +¹2Â(¹B”¹.~¹¸h¹.~¹½? +¹.~¹2Â(¹¸h¹B”¹ðª#¹òsL¹fÇ[¹ YG¹2Â(¹¢>B¹ðª#¹B”¹ðª#¹½? +¹æS¹½? +¹æS¹ðª#¹.~¹.~¹¸h¹.~¹½? +¹5¬×¸tA¯¸°ŽÍ¸u›¸Ó+¥¸°ŽÍ¸ÚÚy¸•º=¸ÚÚy¸g¾)¸Üʸ(=¶Ü·(=¶(Câ5Pb´·(Câ5Ü·Ü·³ßŒ·Ü·Ü·²ƒ79 K·Pb´·á¸Üʸá¸á¸Üʸ~‘¸u›¸u›¸°ŽÍ¸þrøtA¯¸þrøþrøþrøîö¸½? +¹B”¹B”¹½? +¹.~¹B”¹ðª#¹µ$=¹Ú-¹ðª#¹ðª#¹2Â(¹I 8¹µ$=¹µ$=¹¢>B¹2Â(¹¢>B¹I 8¹µ$=¹µ$=¹ YG¹2Â(¹bò2¹ YG¹¢>B¹PQ¹Ú-¹bò2¹ YG¹I 8¹I 8¹I 8¹ YG¹ YG¹!«V¹µ$=¹2Â(¹ðª#¹æS¹B,¹îö¸°ŽÍ¸îö¸þrøfìë¸5¬×¸~‘¸u›¸6Y¹¸Ó+¥¸~‘¸Üʸá¸Ü·Ü·ÚÚy¸•º=¸•º=¸Ü·Pb´·Üʸ³ßŒ·Ü·l–ù¶Pb´·ª–77ª–77l–ù¶²ƒ7Ü·•º=¸ÚÚy¸tA¯¸ƒ¾Q¸xÉe¸þrø5¬×¸þrø6Y¹¸B,¹B,¹~¹îö¸B,¹¸h¹°ŽÍ¸~¹æS¹5¬×¸æS¹B,¹xËḽ? +¹ðª#¹.~¹bò2¹¢>B¹B”¹¸h¹bò2¹¢>B¹I 8¹Ú-¹bò2¹ðª#¹2Â(¹¢>B¹bò2¹µ$=¹¢>B¹bò2¹¢>B¹¢>B¹òsL¹ðª#¹ YG¹2Â(¹2Â(¹I 8¹µ$=¹I 8¹B”¹æS¹B,¹~¹5¬×¸½? +¹fìë¸5¬×¸fìë¸~‘¸°ŽÍ¸þrø5¬×¸îö¸°ŽÍ¸tA¯¸°ŽÍ¸5¬×¸5¬×¸~¹°ŽÍ¸ÚÚy¸þrø°ŽÍ¸ÚÚy¸xÉe¸•º=¸Pb´·ƒ¾Q¸á¸9 K·Pb´·Ü·9 K·"õÒ6l–ù¶Pb´·l–ù¶l–ù¶ª–77"õÒ6Pb´·Üʸ(Câ5(=¶³ßŒ·Pb´·Pb´·á¸l–ù¶Ü·Üʸƒ¾Q¸g¾)¸Ó+¥¸ÚÚy¸~‘¸~‘¸u›¸°ŽÍ¸þrøxËá¸tA¯¸u›¸5¬×¸xËá¸tA¯¸u›¸6Y¹¸~¹¸h¹.~¹½? +¹fìë¸B,¹æS¹2Â(¹æS¹.~¹I 8¹2Â(¹I 8¹µ$=¹µ$=¹I 8¹ðª#¹bò2¹µ$=¹½? +¹æS¹fìë¸B,¹¸h¹½? +¹¸h¹îö¸îö¸B,¹þrøtA¯¸u›¸tA¯¸Ó+¥¸tA¯¸ÚÚy¸~‘¸xÉe¸~‘¸ÚÚy¸á¸Üʸá¸Ü·g¾)¸Pb´·l–ù¶(=¶(=¶…äù7ª–77"õÒ6(Câ5ÆÄ88$’ª7…-Ò7"õÒ6…-Ò7²ƒ79 K·(Câ5…äù7²ƒ7"õÒ6ª–77(=¶²ƒ7(=¶³ßŒ·g¾)¸Ü·ª–77Pb´·³ßŒ·Pb´·l–ù¶³ßŒ·•º=¸ƒ¾Q¸ÜʸÜʸu›¸tA¯¸g¾)¸ƒ¾Q¸xÉe¸6Y¹¸þrøîö¸B”¹~¹îö¸~¹½? +¹~¹¸h¹æS¹B”¹B,¹¸h¹2Â(¹Ú-¹Ú-¹ðª#¹2Â(¹!«V¹ YG¹2Â(¹µ$=¹Ú-¹Ú-¹µ$=¹.~¹æS¹¸h¹fì븸h¹æS¹.~¹.~¹ðª#¹B”¹.~¹B,¹¸h¹ðª#¹.~¹µ$=¹æS¹½? +¹fìë¸fìë¸6Y¹¸îö¸Ó+¥¸Ó+¥¸5¬×¸þrø5¬×¸xËá¸~‘¸~‘¸ƒ¾Q¸u›¸ƒ¾Q¸³ßŒ·u›¸xÉe¸ÜʸÚÚy¸ƒ¾Q¸~‘¸ƒ¾Q¸•º=¸ƒ¾Q¸(=¶l–ù¶Pb´·á¸~‘¸•º=¸•º=¸u›¸u›¸tA¯¸xËá¸þrø~‘¸u›¸Ó+¥¸xËá¸5¬×¸6Y¹¸6Y¹¸½? +¹¸h¹æS¹½? +¹2Â(¹bò2¹bò2¹µ$=¹bò2¹bò2¹Ú-¹ðª#¹2Â(¹òsL¹2Â(¹bò2¹PQ¹ YG¹¢>B¹bò2¹!«V¹ YG¹ YG¹PQ¹µ$=¹òsL¹;f¹fÇ[¹Ú-¹bò2¹¢>B¹2Â(¹ YG¹!«V¹PQ¹ YG¹òsL¹µ$=¹ YG¹PQ¹òsL¹µ$=¹ YG¹.~¹.~¹½? +¹½? +¹B,¹½? +¹½? +¹°ŽÍ¸îö¸5¬×¸.~¹þrøfìë¸þrøþrø6Y¹¸fìë¸5¬×¸þrø°ŽÍ¸þrøù†¸þrøþrøƒ¾Q¸îö¸5¬×¸ù†¸g¾)¸~‘¸ƒ¾Q¸ÚÚy¸xÉe¸á¸Üʸܷ•º=¸g¾)¸~‘¸g¾)¸ƒ¾Q¸á¸g¾)¸ƒ¾Q¸~‘¸xÉe¸~‘¸Ü·ƒ¾Q¸g¾)¸Ü·g¾)¸³ßŒ·ÚÚy¸ÜʸÚÚy¸•º=¸~‘¸u›¸Ó+¥¸ƒ¾Q¸ƒ¾Q¸u›¸xÉe¸~‘¸°ŽÍ¸tA¯¸5¬×¸tA¯¸fìë¸xËá¸Ó+¥¸fì븽? +¹½? +¹°ŽÍ¸~¹¸h¹B,¹~¹îö¸°ŽÍ¸xËá¸fìë¸~¹B,¹îö¸½? +¹tA¯¸5¬×¸~¹þrø6Y¹¸tA¯¸6Y¹¸u›¸þrøtA¯¸~‘¸Üʸ•º=¸xÉe¸Üʸá¸á¸Ü·ÜʸܷÜʸ³ßŒ·l–ù¶á¸(Câ5á¸Pb´·³ßŒ·9 K·Üʸܷ"õÒ6²ƒ7"õÒ6ª–77³ßŒ·ª–77²ƒ7l–ù¶ª–77²ƒ7²ƒ7(Câ5²ƒ7l–ù¶•º=¸(Câ5"õÒ6l–ù¶ª–77l–ù¶³ßŒ·Ü·á¸ÚÚy¸xÉe¸•º=¸tA¯¸°ŽÍ¸g¾)¸•º=¸u›¸ƒ¾Q¸xÉe¸6Y¹¸tA¯¸°ŽÍ¸xËá¸Ó+¥¸fìë¸B”¹~¹xËá¸5¬×¸xËá¸fìë¸5¬×¸æS¹þrøîö¸B”¹ðª#¹Ú-¹½? +¹½? +¹îö¸æS¹~¹½? +¹fìë¸îö¸xËá¸.~¹îö¸fìë¸tA¯¸~‘¸Pb´·|Pd|1|24600|2013-282T15:32:53.422 VzÉ9ܺ9”ª9ܺ9ºÞ´9ÜK²9ÜK²9‹&­9"¹¯9ÜK²9ܺ9ɨ9ܺ9­RÄ9|¢Î9­RÄ9­RÄ9˜¼9”ª9ܺ9­RÄ9ÜK²9ܺ9¿Á9­RÄ9‹&­9˜¼9¿Á9ɨ9"¹¯9º9u(›9º9šÝ¢9”ª9‹&­9šÝ¢9¶t“9 —˜9u(›9Ì–9É¡†9NÅx9É¡†9É¡†9Ù9É¡†9Oä}9°¦s90_9°¦s90_9°X69æÛO90_9>0_9ó¥E9²‹@9‘÷T9>0_9NÅx9¤ji9¤ji92‰9É¡†9Ù9Oä}9Oä}9q‹9u(›9Ì–9¶t“9º9 —˜9šÝ¢9¶t“9šÝ¢9šÝ¢9¼K 9Ì–9¶t“9u(›9¼K 9Ì–9q‹9Éã9Ì–9 —˜9Ì–9É¡†9Éã9Éã9Éã9¶t“92‰9É¡†9wˆn9¤ji90_9Ù9æÛO9NÅx9Oä}9°¦s9É¡†9É¡†9q‹9SŽ9Éã92‰9q‹9u(›9¶t“9Ì–9u(›9u(›9u(›9¼K 9”ª9ºÞ´9šÝ¢9‹&­9ºÞ´9ܺ9šÝ¢9šÝ¢9Ÿo¥9º9º9‹&­9ÜK²9u(›9Ÿo¥9‹&­9ɨ9”ª9”ª9ɨ9"¹¯9 —˜9ɨ9º9¶t“9¶t“9Ù9É¡†9q‹9NÅx9Ù9¶t“9q‹9º„9º„9º„9°¦s9>0_9‘÷T9°Z9æÛO9°¦s9Oä}9°¦s9°¦s9NÅx9NÅx9Oä}92‰9q‹9NÅx9Ù9wˆn9wˆn9wˆn9wˆn9¤ji9Oä}9NÅx9q‹9Oä}9 —˜9Ì–9NÅx9Ì–9º„9q‹9q‹92‰9šÝ¢9¼K 9u(›9ɨ9‹&­9ܺ9ܺ9ƒ+¿9¿Á9ܺ9VzÉ9VzÉ9˜¼9ƒ+¿9ZÌ9­RÄ9¿Á9‹&­9‹&­9ɨ9”ª9ºq·9˜¼9ܺ9˜¼9ËÓ9»6Ñ9•_Ö9VzÉ9VzÉ9"¹¯9ºq·9ƒ+¿9ºÞ´9"¹¯9"¹¯9ºÞ´9‹&­9‹&­9º9¼K 9”ª9”ª9¶t“9º„9Éã9SŽ9°¦s9°¦s9wˆn9°Z9wˆn9°ÀJ9°X69Å',9ó¥E9ù!9Ü¢ 9ö?19Ü¢ 9"'9v·9v·9Ü¢ 9®{9PÒü8°À8’üµ8®ò8®{9ÁŒè8®MÔ8®MÔ8®MÔ8°À8Á0Ê8Á0Ê8‚å«8’üµ8®ò8PÒü8ìŽ9PÒü8ìŽ9¶Ì9Ü¢ 9®{9®MÔ8_lÞ8ù!9¶Ì9Å',9ù!9v·9"'9ó¥E9°ÀJ9>0_9¤ji90_9NÅx9¤ji9Oä}9°¦s9Ù9wˆn9°Z92‰9wˆn90_9°Z9ö?19v·9Å',9–â9¶Ì9–â9–â9ù!9PÒü8ÁŒè8PÒü8‚å«8dK8‚å«8æ­8æ­8c ƒ8ìÎÎ7ó7p|¸;¿··cdß·;¿··Ç‘¸Âp+¸ƒó›¸¦¸³}g¸ƒó›¸ÅÈ츃󛸳}g¸V⑸¦¸œ{¸ä°¸ä°¸ä°¸œ{¸´Ó‡¸Âp+¸ƒó›¸-rS¸ m?¸;¿··GOW¶p|¸¸Q·cdß·³}g¸Âp+¸xk·î07GOW¶œ9·œ9·p|¸;¿··š¿Å6%6§7ìÎÎ7‹#8dK8a+s8Ãö7_8c ƒ8žÐ¡8žÐ¡8®MÔ8®MÔ8_lÞ8PÒü8PÒü8°À8°À8ÁŒè8’üµ8®MÔ8Ü¢ 9®{9_lÞ8¾—8’üµ8c ƒ8c ƒ8a+s8æ­8ô78Ãö7(8ìÎÎ7Ãö7ó7xk·[{®5;¿·· m?¸Ç‘¸p|¸´Ó‡¸p|¸-rS¸´Ó‡¸ m?¸³}g¸ƒó›¸ÅNĸÓ4º¸ƒó›¸´Ó‡¸ jθ jθÅNĸ£š¹d¹E×¹E×¹È칤$¹ò0)¹.z8¹ãL¹.z8¹œ­B¹hþQ¹¤“=¹¤“=¹.z8¹.z8¹ÈG¹.z8¹¤“=¹;a3¹ÈG¹¤“=¹Èì¹;a3¹.z8¹ò0)¹é¹ò0)¹£š¹´§â¸Ï‡¹é¹ÑH.¹d¹d¹oëö¸-® +¹Ï‡¹E×¹ÅÈ츠jθ´§â¸ÅÈ츦¸ä°¸ jθƒó›¸œ{¸ƒó›¸œ{¸¦¸-rS¸ m?¸Âp+¸p|¸ m?¸Âp+¸Âp+¸Âp+¸-rS¸³}g¸Âp+¸p|¸´Ó‡¸ƒó›¸´Ó‡¸´Ó‡¸¦¸ÅNĸ´§â¸ jθχ¹´§â¸ jθ´§â¸LˆØ¸LˆØ¸ä°¸oëö¸d¹E×¹£š¹é¹ò0)¹Èì¹£š¹oëö¸d¹-® +¹;a3¹.z8¹ÑH.¹CW¹œ­B¹;a3¹CW¹’6\¹CW¹1€¹Žk¹CW¹ypf¹ ´‡¹ ¬p¹ê#…¹ ´‡¹]DŠ¹ ´‡¹Vö‘¹]DŠ¹]DŠ¹ ´‡¹ö“‚¹]DŠ¹ypf¹qÊu¹Žk¹qÊu¹PSa¹ãL¹ÈG¹;a3¹é¹ò0)¹œ­B¹ò0)¹¤$¹oëö¸ jθÅÈì¸Ó4º¸LˆØ¸ jθLˆØ¸d¹LˆØ¸´§â¸´§â¸ƒó›¸ÅNĸ³}g¸Ó4º¸¦¸cdß·ä°¸´§â¸ä°¸ƒó›¸ƒó›¸³}g¸³}g¸œ{¸œ{¸ƒó›¸¦¸¦¸ m?¸-rS¸œ{¸ m?¸ä°¸Ó4º¸Ó4º¸ÅNĸLˆØ¸ƒó›¸ÅNĸä°¸Ó4º¸LˆØ¸ƒó›¸³}g¸ƒó›¸œ{¸³}g¸³}g¸ä°¸¦¸¦¸ jθÅNĸ-® +¹E×¹£š¹oëö¸Ï‡¹ÅÈ츣š¹E×¹Èì¹È칤$¹ãL¹ÑH.¹ÈG¹ãL¹ãL¹¤“=¹;a3¹;a3¹;a3¹ãL¹;a3¹;a3¹ãL¹Žk¹PSa¹’6\¹.z8¹¤“=¹ãL¹¤“=¹hþQ¹CW¹’6\¹ÈG¹¤$¹.z8¹¤“=¹¤$¹¤$¹´§â¸oëö¸d¹Èì¹£š¹é¹d¹ÑH.¹é¹ÅÈì¸E×¹-® +¹oëö¸oëö¸oëö¸LˆØ¸LˆØ¸Ó4º¸ÅNĸ jθƒó›¸¦¸´Ó‡¸ä°¸ÅNĸχ¹oëö¸´§â¸ÅNĸ jθä°¸V⑸ÅNĸLˆØ¸LˆØ¸ÅNĸÅÈ츠jθχ¹Èì¹E×¹d¹¤$¹ò0)¹œ­B¹ãL¹œ­B¹ãL¹œ­B¹ÑH.¹ãL¹¤“=¹ãL¹œ­B¹PSa¹Žk¹1€¹ö“‚¹qÊu¹ƒe¹}—¹1€¹ƒe¹ ´‡¹7éz¹ê#…¹ê#…¹ö“‚¹ƒe¹ ´‡¹1€¹ƒe¹ƒe¹ƒe¹ ´‡¹U‡”¹ÚÔŒ¹Žk¹ÚÔŒ¹]DŠ¹ÚÔŒ¹ƒe¹7éz¹qÊu¹ ¬p¹7éz¹ö“‚¹ö“‚¹ ´‡¹ö“‚¹ö“‚¹7éz¹PSa¹qÊu¹ÚÔŒ¹ ´‡¹ ¬p¹Žk¹qÊu¹PSa¹CW¹’6\¹CW¹¤“=¹Žk¹œ­B¹;a3¹ò0)¹E×¹oëö¸´§â¸ƒó›¸Ó4º¸ƒó›¸³}g¸Ç‘¸Âp+¸³}g¸ä°¸p|¸œ{¸³}g¸´Ó‡¸ƒó›¸¦¸ƒó›¸ä°¸œ{¸ m?¸-rS¸-rS¸p|¸cdß· m?¸ƒó›¸ƒó›¸ä°¸¦¸ä°¸ƒó›¸ÅNĸ£š¹Ï‡¹Ï‡¹-® +¹ò0)¹Èì¹Èì¹;a3¹Ï‡¹Èì¹ÈG¹.z8¹;a3¹;a3¹CW¹hþQ¹ö“‚¹CW¹ ¬p¹Žk¹ypf¹]DŠ¹]DŠ¹ÚÔŒ¹ÚÔŒ¹]DŠ¹ ´‡¹ê#…¹]DŠ¹ê#…¹ö“‚¹7éz¹ ¬p¹ ¬p¹ ¬p¹7éz¹ ´‡¹ ¬p¹1€¹ö“‚¹ypf¹ ¬p¹ypf¹ypf¹7éz¹qÊu¹Žk¹ ¬p¹7éz¹]DŠ¹Žk¹CW¹ ¬p¹7éz¹ypf¹Žk¹PSa¹;a3¹.z8¹ÈG¹ãL¹;a3¹ò0)¹ÈG¹È칤$¹é¹E×¹-® +¹-® +¹£š¹£š¹Ï‡¹ÅÈ츴§â¸ÅNĸ jθÅNĸÅÈì¸ÅÈì¸LˆØ¸ jθÈì¹é¹E×¹-® +¹ÅÈì¸-® +¹£š¹E×¹Èì¹é¹.z8¹d¹ÑH.¹é¹;a3¹;a3¹ÑH.¹PSa¹CW¹7éz¹7éz¹qÊu¹PSa¹PSa¹ ¬p¹hþQ¹’6\¹hþQ¹ypf¹ypf¹œ­B¹œ­B¹ÈG¹ypf¹Žk¹ypf¹ ´‡¹7éz¹]DŠ¹ ¬p¹7éz¹ ¬p¹7éz¹qÊu¹Žk¹qÊu¹PSa¹ãL¹’6\¹CW¹Žk¹PSa¹ypf¹ypf¹œ­B¹ÈG¹ÑH.¹¤$¹ò0)¹ò0)¹E׹鹤“=¹oëö¸-® +¹d¹-® +¹´§â¸oëö¸´§â¸ jθƒó›¸V⑸¦¸ä°¸´Ó‡¸œ{¸-rS¸ä°¸LˆØ¸ƒó›¸³}g¸œ{¸Âp+¸³}g¸-rS¸;¿·· m?¸Ó4º¸¦¸ƒó›¸Ó4º¸LˆØ¸ÅNĸ´§â¸´§â¸´§â¸ÅÈì¸LˆØ¸-® +¹£š¹E׹χ¹-® +¹ÅNĸχ¹-® +¹d¹ÅÈì¸oëö¸d¹d¹£š¹£š¹é¹¤$¹.z8¹ãL¹CW¹PSa¹hþQ¹’6\¹hþQ¹hþQ¹œ­B¹ãL¹’6\¹ãL¹ypf¹PSa¹’6\¹ÑH.¹ÈG¹ãL¹¤“=¹œ­B¹-® +¹d¹£š¹Èì¹Èì¹ò0)¹ò0)¹È칤$¹ÑH.¹¤$¹-® +¹LˆØ¸Ï‡¹oëö¸LˆØ¸Ï‡¹-® +¹LˆØ¸Ó4º¸LˆØ¸´§â¸Ó4º¸œ{¸-rS¸œ9·[{®5%6§7î07î07š¿Å6ìÎÎ7%6§7‹#8ô78(8c ƒ8dK8žÐ¡8žÐ¡8°À8°À8PÒü8®ò8Á0Ê8®{9ìŽ9ìŽ9Å',9"'9ðq;9ðq;9ìŽ9–â9Å',9ö?19ö?19°X69ö?19ó¥E9"'9Å',9‘÷T9²‹@9"'9"'9ðq;9æÛO9"'9Ü¢ 9PÒü8v·9ù!9–â9"'9ó¥E9"'9Å',9ù!9ù!9¶Ì9Å',9ó¥E9"'9ìŽ9°X69ö?19Å',9ö?19"'9ìŽ9–â9ù!9v·9²‹@9ö?19¶Ì9ù!9v·9ðq;9ö?19ö?19ðq;9²‹@9°Z9²‹@9°X69ó¥E9°ÀJ90_9wˆn9Ù9NÅx9¤ji9q‹9É¡†9‘÷T9°Z9>0_9°X69‘÷T9ðq;9‘÷T9æÛO9ðq;9ó¥E9Å',9¶Ì9²‹@9"'9¶Ì9ö?19ö?19Ü¢ 9"'9Ü¢ 9v·9PÒü8®ò8ÁŒè8’üµ8®MÔ8žÐ¡8dK8žÐ¡8¾—8a+s8_8ô78¾—8c ƒ8_8°À8æ­8_8¾—8æ­8æ­8_8a+s8ô78ô78æ­8’üµ8æ­8‚å«8¾—8c ƒ8¾—8žÐ¡8‚å«8‚å«8°À8®MÔ8PÒü8‚å«8æ­8æ­8PÒü8ÁŒè8ÁŒè8ÁŒè8ìŽ9¶Ì9v·9v·9Å',9Å',9–â9v·9Å',9Å',9‘÷T9°ÀJ9ðq;9Å',9ó¥E9²‹@9Å',9Å',9Å',9v·9Ü¢ 9PÒü8žÐ¡8a+s8‚å«8c ƒ8®MÔ8ÁŒè8Á0Ê8®MÔ8ÁŒè8æ­8®MÔ8_lÞ8°À8°À8a+s8dK8c ƒ8%6§7%6§7î07[{®5p|¸œ{¸ƒó›¸ƒó›¸³}g¸³}g¸p|¸ƒó›¸ÅNĸä°¸´Ó‡¸LˆØ¸ÅNĸ£š¹d¹E×¹E×¹Èì¹ò0)¹é¹E×¹Èì¹ò0)¹d¹E×¹ÑH.¹ÑH.¹;a3¹¤“=¹E×¹¤“=¹;a3¹ÑH.¹Èì¹Èì¹-® +¹-® +¹ÅÈì¸oëö¸£š¹ jθLˆØ¸ jθÅNĸ£š¹£š¹oëö¸ÅÈ츠jθƒó›¸ÅNĸoëö¸LˆØ¸ÅNĸLˆØ¸ä°¸´Ó‡¸ÅNĸÓ4º¸ä°¸ÅÈ츠jθ¦¸ƒó›¸ƒó›¸¦¸LˆØ¸ä°¸´§â¸Ï‡¹Ó4º¸d¹χ¹ jθä°¸LˆØ¸ÅÈì¸-® +¹LˆØ¸Ó4º¸ jθ-® +¹Ï‡¹Ï‡¹£š¹;a3¹¤$¹ÑH.¹ò0)¹ÑH.¹ÑH.¹Èì¹ò0)¹¤“=¹;a3¹ÑH.¹ò0)¹¤“=¹ÈG¹CW¹ãL¹’6\¹hþQ¹1€¹ypf¹ypf¹Žk¹1€¹ypf¹’6\¹CW¹hþQ¹PSa¹ypf¹’6\¹1€¹1€¹]DŠ¹ÚÔŒ¹]DŠ¹ ´‡¹}—¹U‡”¹¯^¡¹²‚¦¹G;œ¹çÌž¹ÚÔŒ¹ƒe¹Î©™¹G;œ¹G;œ¹¯^¡¹ë©¹²‚¦¹G;œ¹ÚÔŒ¹ÚÔŒ¹ƒe¹Vö‘¹ÚÔŒ¹7éz¹ ¬p¹7éz¹1€¹7éz¹ ¬p¹Žk¹ ¬p¹7éz¹ypf¹ö“‚¹qÊu¹qÊu¹PSa¹ ¬p¹7éz¹ö“‚¹7éz¹’6\¹PSa¹qÊu¹7éz¹qÊu¹ ¬p¹qÊu¹7éz¹’6\¹PSa¹hþQ¹ÈG¹.z8¹CW¹hþQ¹PSa¹CW¹qÊu¹7éz¹ö“‚¹1€¹U‡”¹ÚÔŒ¹G;œ¹çÌž¹Î©™¹çÌž¹Î©™¹ƒe¹Î©™¹ƒe¹Î©™¹U‡”¹Vö‘¹¯^¡¹²‚¦¹Î©™¹G;œ¹çÌž¹²‚¦¹Ì9®¹çÌž¹²‚¦¹²‚¦¹çÌž¹Î©™¹žð£¹žð£¹J§«¹²‚¦¹ë©¹G;œ¹ë©¹ë©¹žð£¹žð£¹U‡”¹Î©™¹Î©™¹¯^¡¹J§«¹žð£¹'òµ¹ë©¹J§«¹Ì9®¹Ì9®¹G;œ¹çÌž¹Vö‘¹Î©™¹ÚÔŒ¹ÚÔŒ¹çÌž¹ÚÔŒ¹Î©™¹Î©™¹ÚÔŒ¹ê#…¹ ¬p¹qÊu¹ypf¹’6\¹qÊu¹Žk¹ypf¹CW¹¤“=¹CW¹ãL¹;a3¹ãL¹ò0)¹¤“=¹ò0)¹œ­B¹ò0)¹.z8¹.z8¹ò0)¹ÑH.¹.z8¹ò0)¹é¹E×¹-® +¹ÅÈì¸Ó4º¸Ï‡¹Èì¹d¹ò0)¹œ­B¹¤$¹é¹£š¹-® +¹d¹E×¹E×¹ò0)¹;a3¹ò0)¹’6\¹ãL¹.z8¹ÈG¹CW¹ãL¹PSa¹hþQ¹¤“=¹hþQ¹PSa¹ÈG¹Žk¹ypf¹ypf¹7éz¹ö“‚¹ê#…¹ÚÔŒ¹ÚÔŒ¹Vö‘¹]DŠ¹ÚÔŒ¹7éz¹ö“‚¹ê#…¹1€¹ ´‡¹ ´‡¹qÊu¹1€¹ê#…¹PSa¹ ¬p¹ö“‚¹7éz¹1€¹1€¹ê#…¹PSa¹¤“=¹.z8¹¤“=¹CW¹¤$¹¤“=¹;a3¹Ï‡¹¤$¹ò0)¹¤“=¹ÈG¹ãL¹¤$¹È칤$¹.z8¹ÑH.¹¤$¹ò0)¹ò0)¹.z8¹E×¹ÑH.¹¤$¹ÑH.¹ò0)¹é¹Ï‡¹LˆØ¸Ó4º¸ä°¸ä°¸ƒó›¸Ó4º¸ƒó›¸Ó4º¸ƒó›¸ƒó›¸ä°¸ƒó›¸ƒó›¸ƒó›¸ƒó›¸ä°¸LˆØ¸´§â¸oëö¸-® +¹-® +¹œ­B¹ÑH.¹;a3¹œ­B¹ãL¹é¹ÑH.¹ÈG¹ãL¹œ­B¹hþQ¹ãL¹œ­B¹CW¹’6\¹ ¬p¹ypf¹7éz¹’6\¹’6\¹7éz¹’6\¹PSa¹7éz¹ ¬p¹qÊu¹1€¹Žk¹ ¬p¹Žk¹1€¹ ´‡¹ ´‡¹]DŠ¹qÊu¹ ´‡¹1€¹hþQ¹1€¹1€¹ÈG¹PSa¹hþQ¹œ­B¹Ï‡¹ÅÈì¸-® +¹ÅNĸ䰸䰸 jθÅNĸV⑸ä°¸ƒó›¸³}g¸Âp+¸î07GOW¶œ9·œ9·xk·;¿··[{®5ô78ô78æ­8‚å«8dK8_8%6§7ô78dK8ìÎÎ7‹#8ô78ô78ô78ó7(8ìÎÎ7[{®5;¿··xk·Ç‘¸;¿··Âp+¸Ç‘¸ä°¸Ó4º¸´Ó‡¸Ó4º¸ƒó›¸¦¸V⑸ jθ´Ó‡¸œ{¸oëö¸ä°¸oëö¸oëö¸Ï‡¹£š¹d¹ÑH.¹ÑH.¹ÑH.¹;a3¹¤“=¹¤“=¹ÈG¹¤“=¹ÑH.¹Žk¹’6\¹PSa¹PSa¹1€¹qÊu¹qÊu¹’6\¹ ¬p¹qÊu¹ ¬p¹ ¬p¹’6\¹Žk¹ÈG¹œ­B¹ò0)¹ÈG¹;a3¹Èì¹-® +¹;a3¹-® +¹ÅÈì¸LˆØ¸³}g¸ƒó›¸¦¸œ{¸ä°¸ƒó›¸´Ó‡¸ƒó›¸ƒó›¸-rS¸xk·p|¸œ9·%6§7xk·%6§7î07¸Q·(8%6§7Ãö7ô78ó7î07Ãö7dK8c ƒ8ìÎÎ7a+s8c ƒ8æ­8’üµ8’üµ8(8ô78ô78‚å«8c ƒ8a+s8(8[{®5[{®5ìÎÎ7œ9·[{®5xk·(8‹#8î07%6§7GOW¶¸Q· m?¸³}g¸³}g¸p|¸³}g¸Âp+¸ jθÓ4º¸œ{¸ƒó›¸´§â¸Ó4º¸ jθ´§â¸´§â¸oëö¸ÅÈ츠jθÅNĸoëö¸ä°¸ƒó›¸ jθÅNĸ¦¸ÅNĸoëö¸Ï‡¹-® +¹´§â¸Ó4º¸ƒó›¸ m?¸Ç‘¸;¿··;¿··;¿··GOW¶š¿Å6ó7ìÎÎ7î07ô78(8¾—8°À8®MÔ8¾—8‚å«8®ò8’üµ8’üµ8‚å«8ÁŒè8ÁŒè8ìŽ9Ü¢ 9v·9ìŽ9¶Ì9ÁŒè8¶Ì9Á0Ê8ÁŒè8ìŽ9–â9Å',9v·9PÒü8Ü¢ 9–â9²‹@9Å',9¶Ì9®{9ù!9–â9ðq;9ù!9Ü¢ 9–â9Å',9ö?19ðq;9ö?19ðq;9æÛO9°X69°X69ðq;9ö?19"'9°ÀJ9"'9ö?19ù!9–â9"'9ðq;9Å',9¶Ì9²‹@9PÒü8"'9ù!9Ü¢ 9PÒü8ìŽ9®MÔ8’üµ8ÁŒè8ÁŒè8®ò8®MÔ8®MÔ8®MÔ8Á0Ê8®MÔ8®MÔ8®MÔ8ÁŒè8ìŽ9¶Ì9ù!9ìŽ9¶Ì9Å',9ö?19"'9"'9ó¥E9ó¥E9°X69æÛO9‘÷T9¤ji9°ÀJ9°ÀJ90_9ó¥E9æÛO9ö?19ó¥E9°ÀJ9ó¥E9æÛO9°¦s9NÅx9Ù90_9>0_9>0_9NÅx90_9>0_9Oä}9NÅx9°¦s9æÛO90_9æÛO9ðq;9‘÷T9°ÀJ9‘÷T9‘÷T9wˆn9Ù9Oä}92‰9NÅx9NÅx9Ì–92‰9SŽ9Ì–9u(›9Ÿo¥9q‹9SŽ9q‹9Ì–9É¡†9¶t“9 —˜9Éã9°¦s9NÅx9É¡†9q‹9Oä}9Oä}90_9æÛO9°Z9‘÷T9²‹@9°X69"'9ö?19¶Ì9ù!9v·9ù!9²‹@9ö?19ù!9v·9"'9v·9ö?19Å',9"'9¶Ì9ìŽ9ìŽ9ö?19"'9–â9ÁŒè8–â9PÒü8PÒü8_lÞ8®ò8PÒü8°À8ìŽ9®ò8_lÞ8ìŽ9Á0Ê8®ò8ÁŒè8_lÞ8®MÔ8ÁŒè8®MÔ8Á0Ê8c ƒ8c ƒ8æ­8žÐ¡8dK8dK8%6§7‹#8%6§7ìÎÎ7ìÎÎ7(8GOW¶Ãƒö7ó7ó7GOW¶cdß·xk·œ9·;¿··ó7ìÎÎ7š¿Å6GOW¶ó7ó7‹#8î07ô78(8_8¾—8¾—8c ƒ8ìÎÎ7c ƒ8æ­8žÐ¡8c ƒ8æ­8c ƒ8°À8‚å«8¾—8_lÞ8Á0Ê8ÁŒè8®ò8®MÔ8PÒü8ù!9¶Ì9Å',9Å',9ðq;9–â9Å',9ðq;9°X69²‹@9°ÀJ9ö?19æÛO9ö?19ðq;9–â9ðq;9"'9°X69Ü¢ 9v·9PÒü8®ò8PÒü8®MÔ8PÒü8¾—8‚å«8’üµ8‚å«8_lÞ8®{9Á0Ê8ÁŒè8æ­8°À8°À8°À8PÒü8ìŽ9PÒü8‚å«8ÁŒè8ÁŒè8°À8’üµ8®MÔ8®ò8®ò8_lÞ8Á0Ê8®{9ÁŒè8PÒü8Ü¢ 9_lÞ8®{9Á0Ê8®ò8–â9PÒü8v·9ù!9®{9–â9v·9°X69ó¥E9ö?19ö?19°X69ù!9¶Ì9ó¥E9ö?19°X69²‹@9>0_9ó¥E9°Z9>0_90_9ó¥E90_9‘÷T9´7&¬Q8?¨=8:›8·e8·e8rÈy8ØÎ8ßï†8ØÎ8ØÎ8BÄJ7Œ»Œ7~ù6÷ú·­ë¸òÜ$¸Ï<ƒ·Ýräµd¶ª·†Þ7·÷ú·òÜ$¸áQÒ·­ë¸Ï<ƒ·­ë¸5ÙL¸áQÒ·òÜ$¸$„„¸@¢˜¸­úÀ¸@¢˜¸aᶸaᶸ$„„¸ä‘Ž¸ä‘Ž¸@¢˜¸$„„¸ä‘Ž¸áQÒ·×8¸"ʬ¸­ë¸×8¸­ë¸÷ú·÷ú·‚â`¸‚â`¸×8¸òÜ$¸×8¸"ʬ¸‚â`¸ä‘Ž¸‚â`¸×8¸5ÙL¸÷ú·†Þ7·d¶ª·†Þ7·Ýr䵆Þ7·Ï<ƒ·Ï<ƒ·†Þ7·¸ƒÓ¶¸ƒÓ¶:<6†Þ7·ÝräµÝräµ~ù6Ýr䵬)8>´7–¸8~ù6~ù6¸ƒÓ¶BÄJ7>´7~ù6–¸8Ï<ƒ·¸ƒÓ¶~ù6Ýr䵆Þ7·Œ»Œ7ØÎ8~ù6Ýräµ:<6d¶ª·d¶ª·¸ƒÓ¶Ï<ƒ·Ýräµ:<6:<6†Þ7·¸ƒÓ¶­ë¸­ë¸­ë¸÷ú·>´7d¶ª·¸ƒÓ¶d¶ª·†Þ7·†Þ7·òÜ$¸Ï<ƒ·òÜ$¸Ï<ƒ·×8¸òÜ$¸×8¸­ë¸÷ú·5ÙL¸‚â`¸ µ¢¸@¢˜¸$„„¸_ré¸ µ¢¸aᶸòÜ$¸ä‘Ž¸`òt¸ä‘Ž¸5ÙL¸ä‘Ž¸5ÙL¸×8¸òÜ$¸¸ƒÓ¶Ýräµ>´7BÄJ7¸ƒÓ¶Œ»Œ7Œ»Œ7¸ƒÓ¶Ýr䵸ƒÓ¶~ù6>´7ØÎ8&¬Q8Dþ8Dþ848¯8:›848¯8·e8?¨=8&¬Q8&¬Q8¬)8Dþ8:›8:›8k…Í8:›8rÈy8î¢×8:›8õO¹80Âá8õO¹8Dþ8:›8:›8:›8&¬Q8Dþ8ßï†8·e8Dþ8Dþ8õO¹8k…Í8œ'9Ø9Ø9õO¹8Dþ8·e8–¸8¬)8¥àÛ7?¨=8ØÎ8>´7&¬Q8¥àÛ7¸ƒÓ¶Ýräµd¶ª·¸ƒÓ¶Ï<ƒ·:<6Ýräµ~ù6d¶ª·òÜ$¸¸ƒÓ¶BÄJ7:<6:<6Œ»Œ7Ýräµ÷ú·5ÙL¸×8¸`òt¸ µ¢¸÷ú·×8¸áQÒ·$„„¸"ʬ¸òÜ$¸÷ú·†Þ7·d¶ª·Ï<ƒ·Ýräµ~ù6Ýräµ>´7BÄJ7BÄJ7&¬Q8Dþ8¬)8–"¥8ßï†8–¸8rÈy8&¬Q8:›8rÈy848¯8–"¥8î¢×8Dþ8&¬Q8»iÃ8õO¹8î¢×8ãë8¢ö8; +9d9d9d9d9î¢×8E¦#9‡½(9œ'9>O9ãë8YÕ-9¶í29; +9…y9; +90Âá8>O9¢ö8Ø9E¦#9E¦#9…y9Ø9k…Í8Ø9¢ö8¢ö848¯8k…Í8–"¥8ãë8î¢×8»iÃ8ßï†848¯8¥àÛ7Dþ8rÈy8&¬Q8–¸8>´7–¸8&¬Q8>´7BÄJ7¥àÛ7ØÎ8>´7Ýräµ~ù6Ï<ƒ·>´7?¨=8Œ»Œ7&¬Q8¬)8¥àÛ7rÈy8–¸8Œ»Œ7¬)8·e8BÄJ7Œ»Œ7?¨=8>´7¬)8:<6?¨=8·e8¬)8–¸8·e8?¨=8&¬Q8¬)8¥àÛ7rÈy8¬)8Dþ848¯8ßï†8õO¹8Ø9õO¹80Âá8Ø948¯80Âá8k…Í8œ'9ãë8>O9; +9>O9…y9d9˜9¶í29s¦V9 =9 =9_TG9_TG9 ŠQ9ž89ž89˜9ž89¶í29ž89 =9ž89¶Â[9s¦V9 =9˜9DoL9_TG9õ9B9¶í29˜9 =9õ9B9_TG9d9œ'9œ'9¢ö8»iÃ848¯8»iÃ848¯8»iÃ8»iÃ8œ'9»iÃ8–¸8?¨=8¬)8·e8¥àÛ7?¨=8–¸8ØÎ8&¬Q8BÄJ7?¨=8Dþ8:›8·e8ßï†8–¸8?¨=8Dþ848¯8Dþ8»iÃ8»iÃ848¯8Dþ8ØÎ8BÄJ7¬)8–¸8·e8?¨=8rÈy8ØÎ8BÄJ7¥àÛ7¥àÛ7†Þ7·:<6Ýräµ~ù6ØÎ8>´7ØÎ8BÄJ7Ýräµ–¸8¬)8¬)8&¬Q8ßï†8:›8·e8·e8?¨=8k…Í8–"¥8rÈy8–"¥848¯8–"¥8»iÃ8»iÃ8–"¥8õO¹848¯8Dþ8k…Í8õO¹8rÈy8Dþ8:›848¯8ßï†8k…Í8»iÃ848¯8»iÃ8Dþ8:›8Dþ8?¨=8:›8&¬Q8~ù6BÄJ7?¨=8ØÎ8~ù6~ù6~ù6Œ»Œ7Ýr䵭븭ë¸Ýräµ:<6¸ƒÓ¶†Þ7·~ù6BÄJ7¸ƒÓ¶Ýräµ:<6áQÒ·áQÒ·Ýräµd¶ª·¸ƒÓ¶Ï<ƒ·Ï<ƒ·ÝräµÏ<ƒ·d¶ª·d¶ª·†Þ7·ØÎ8&¬Q8¬)8?¨=8¬)8&¬Q8Dþ8:›8·e8Dþ8ãë8¢ö8–"¥8Dþ8õO¹8:›8:›8õO¹8:›8Dþ8õO¹848¯8k…Í80Âá8ãë8ãë8Ø9>O9œ'9d9E¦#9 =9YÕ-9‡½(9; +9 =9 =9_TG9_TG9s¦V9s¦V9‡½(9DoL9¶í29_TG9_TG9¶í29s¦V9 =9DoL9 ŠQ9 =9‹üe9jß`9‹üe9DoL9 ŠQ9 ŠQ9DoL9s¦V9fVu9k9‹üe9$uz9 8p9äY‚9fVu9k9äY‚9k9 8p9 8p9‹üe9õ9B9s¦V9 =9…y9¶í29E¦#9…y9¶í29‡½(9d9î¢×8œ'9¢ö8Ø9Ø9¢ö80Âá80Âá80Âá8>O90Âá8¢ö8k…Í848¯8»iÃ8œ'9…y9…y9E¦#9¶í29˜9YÕ-9E¦#9YÕ-9_TG9jß`9 ŠQ9E¦#9YÕ-9ž89õ9B9k9_TG9jß`9‹üe9s¦V9k9? +Š9äY‚9äY‚9¸šŒ9LÞ–9? +Š9fVu9Ôé„9¸šŒ9LÞ–9F”9]+9óy‡9LÞ–9¸šŒ9óy‡9äY‚9$uz9$uz9äY‚9óy‡9‹üe9s¦V9jß`9_TG9_TG9k9¶Â[9 ŠQ9õ9B9DoL9‡½(9ž89…y9‡½(9>O9ž89ãë8; +9ãë8Ø9ãë8ãë8; +9»iÃ8rÈy8:›8Dþ8rÈy8–¸8–¸8ßï†8¬)8¬)8–¸8¥àÛ7?¨=848¯8rÈy8·e8»iÃ8»iÃ8rÈy8ßï†8Œ»Œ7¥àÛ7–¸8ØÎ8†Þ7·:<6d¶ª·†Þ7·Ýräµ:<6¸ƒÓ¶>´7>´7–¸8¬)8–¸8>´7¥àÛ7·e8¬)8ØÎ8ØÎ8Œ»Œ7&¬Q8¬)8rÈy8?¨=8rÈy8ØÎ8¬)8ßï†8¬)8:›8&¬Q8?¨=8–"¥8:›8»iÃ8õO¹8õO¹8¢ö8î¢×8»iÃ8¢ö80Âá8œ'9ãë8œ'90Âá848¯8Dþ8k…Í8õO¹8î¢×8k…Í8:›8–"¥8õO¹8–"¥8Dþ8Dþ8»iÃ8k…Í80Âá8ßï†8ßï†8Œ»Œ7ØÎ8Ýr䵌»Œ7¬)8~ù6÷ú·¸ƒÓ¶$„„¸@¢˜¸ä‘Ž¸$„„¸­úÀ¸þ2Õ¸þ2Õ¸ µ¢¸ƒ”ó¸é˸±î¹3¸ý¸§*¹þ ¹_r鸱î¹±î¹þ¹þ¹§*¹þ¹þ ¹þ¹ãU¹ö?¹±î¹9›,¹ll"¹§*¹v³1¹<Ì6¹v³1¹ll"¹ƒ”ó¸ö?¹3¸ý¸3¸ý¸3¸ý¸þ ¹_ré¸þ¹§*¹±î¹ƒ”󸃔ó¸þ2Õ¸­úÀ¸ãU¹­úÀ¸"ʬ¸­úÀ¸aᶸ­úÀ¸ µ¢¸é˸ÖQ߸"ʬ¸ÖQ߸"ʬ¸ µ¢¸"ʬ¸"ʬ¸­úÀ¸aᶸ§*¹±î¹ÖQ߸þ2ո䑎¸"ʬ¸ÖQ߸@¢˜¸ä‘Ž¸ µ¢¸aᶸ"ʬ¸ µ¢¸þ2Õ¸é˸ µ¢¸aᶸé˸3¸ý¸ö?¹Šƒ'¹ll"¹ö?¹v³1¹9›,¹<Ì6¹9›,¹i4K¹ªOP¹ªOP¹'Ád¹!¤_¹uün¹™Þi¹™Þi¹ÎK„¹iX~¹™Þi¹i4K¹ªOP¹i4K¹'Ád¹¡F¹‡‡Z¹!¤_¹<Ì6¹v³1¹_kU¹i4K¹¡F¹™Þi¹¡F¹ªOP¹ªOP¹i4K¹i4K¹v³1¹Vÿ@¹Šƒ'¹v³1¹v³1¹<Ì6¹Vÿ@¹i4K¹_kU¹™Þi¹#l‰¹?ј¹â®“¹,Ž¹ò‘¹âÛ†¹#l‰¹iX~¹iX~¹â®“¹·t¹‡‡Z¹Vÿ@¹ªOP¹_kU¹ªOP¹Vÿ@¹9›,¹ll"¹¡F¹ˆå;¹9›,¹ˆå;¹v³1¹ll"¹<Ì6¹9›,¹v³1¹v³1¹þ¹ãU¹<Ì6¹Šƒ'¹ll"¹ll"¹þ ¹_ré¸3¸ý¸±î¹ƒ”󸊃'¹ãU¹ãU¹ll"¹ˆå;¹<Ì6¹<Ì6¹9›,¹Vÿ@¹Šƒ'¹i4K¹i4K¹ˆå;¹uün¹·t¹!¤_¹™Þi¹uün¹^9y¹iX~¹^9y¹ê»¹iX~¹uün¹uün¹^9y¹ê»¹^9y¹·t¹iX~¹âÛ†¹ê»¹iX~¹â®“¹’ü‹¹âÛ†¹^9y¹iX~¹#l‰¹ê»¹_kU¹uün¹·t¹·t¹‡‡Z¹‡‡Z¹·t¹uün¹·t¹â®“¹ÎK„¹^9y¹ÎK„¹™Þi¹^9y¹uün¹™Þi¹¡F¹i4K¹ˆå;¹¡F¹ãU¹§*¹ãU¹v³1¹§*¹§*¹_r鸱î¹9›,¹ÖQ߸_ré¸3¸ý¸ÖQ߸­úÀ¸ÖQ߸_ré¸é˸@¢˜¸ä‘Ž¸$„„¸ä‘Ž¸ä‘Ž¸"ʬ¸þ2Õ¸‚â`¸"ʬ¸aᶸ"ʬ¸ä‘Ž¸×8¸×8¸ µ¢¸ä‘Ž¸@¢˜¸@¢˜¸é˸ µ¢¸5ÙL¸"ʬ¸ä‘Ž¸`òt¸@¢˜¸ µ¢¸ä‘Ž¸÷ú·@¢˜¸`òt¸5ÙL¸­úÀ¸ä‘Ž¸@¢˜¸"ʬ¸ä‘Ž¸@¢˜¸"ʬ¸ÖQ߸é˸ƒ”ó¸þ¹þ2Õ¸­úÀ¸"ʬ¸ÖQ߸aᶸ@¢˜¸@¢˜¸"ʬ¸aᶸƒ”ó¸þ2Õ¸_ré¸ä‘Ž¸"ʬ¸@¢˜¸ µ¢¸ä‘Ž¸aᶸ䑎¸‚â`¸ µ¢¸‚â`¸`òt¸aᶸþ2Õ¸÷ú·÷ú·5ÙL¸òÜ$¸d¶ª·­ë¸­ë¸òÜ$¸d¶ª·÷ú·†Þ7·×8¸d¶ª·†Þ7·Ï<ƒ·áQÒ·¸ƒÓ¶†Þ7·÷ú·d¶ª·÷ú·Ýr䵸ƒÓ¶>´7Œ»Œ7¥àÛ7†Þ7·~ù6Œ»Œ7>´7¥àÛ7>´7·e8¥àÛ7BÄJ7>´7~ù6BÄJ7–¸8:<6:<6Ýr䵸ƒÓ¶Œ»Œ7BÄJ7¸ƒÓ¶Ýr䵸ƒÓ¶†Þ7·†Þ7·d¶ª·Ýr䵌»Œ7Ï<ƒ·d¶ª·­ë¸d¶ª·­ë¸÷ú·‚â`¸`òt¸­úÀ¸"ʬ¸þ¹é˸aᶸll"¹§*¹ãU¹9›,¹Šƒ'¹<Ì6¹þ ¹±î¹Šƒ'¹v³1¹i4K¹ˆå;¹ö?¹¡F¹v³1¹9›,¹ãU¹Šƒ'¹Šƒ'¹þ¹3¸ý¸ƒ”ó¸ÖQ߸§*¹±î¹_ré¸ÖQ߸3¸ý¸ö?¹þ2Õ¸þ ¹ƒ”ó¸_ré¸"ʬ¸ µ¢¸­úÀ¸ÖQ߸@¢˜¸ä‘Ž¸"ʬ¸aᶸ5ÙL¸‚â`¸­ë¸òÜ$¸Ï<ƒ·áQÒ·Ï<ƒ·Œ»Œ7Œ»Œ7¥àÛ7BÄJ7~ù6¥àÛ7¥àÛ7Œ»Œ7¬)8¸ƒÓ¶BÄJ7>´7BÄJ7Œ»Œ7BÄJ7~ù6:<6&¬Q8Œ»Œ7ØÎ8¬)8·e8&¬Q8·e8–¸8?¨=8ØÎ8¬)8?¨=8¥àÛ7BÄJ7>´7ØÎ8ØÎ8:<6–¸8?¨=8BÄJ7¥àÛ7BÄJ7Ýräµ~ù6:<6áQÒ·ÝräµòÜ$¸òÜ$¸Ýräµ÷ú·­ë¸¸ƒÓ¶ÝräµÝräµ$„„¸÷ú·¸ƒÓ¶×8¸áQÒ·­ë¸÷ú·÷ú·Ï<ƒ·‚â`¸‚â`¸5ÙL¸×8¸5ÙL¸÷ú·÷ú·÷ú·†Þ7·Œ»Œ7†Þ7·†Þ7·Ï<ƒ·Ï<ƒ·†Þ7·¸ƒÓ¶¸ƒÓ¶~ù6¸ƒÓ¶¥àÛ7Œ»Œ7>´7?¨=8·e8¬)8ØÎ8¬)8¬)8·e8ßï†8rÈy8ßï†8¬)8·e8:›8:›8Ø9»iÃ8:›8–"¥8:›8k…Í8»iÃ848¯848¯8õO¹8î¢×8»iÃ8»iÃ8Dþ8Dþ8ßï†8rÈy8»iÃ8î¢×8õO¹8Dþ8Dþ8rÈy8?¨=8¬)8ØÎ8BÄJ7BÄJ7–¸8¥àÛ7&¬Q8¬)8¬)8·e8–¸8¥àÛ7¥àÛ7¥àÛ7:<6~ù6BÄJ7Ýräµd¶ª·¸ƒÓ¶¸ƒÓ¶Ï<ƒ·Ï<ƒ·Œ»Œ7÷ú·÷ú·­ë¸¸ƒÓ¶¸ƒÓ¶~ù6:<6–¸8–¸8ØÎ8¥àÛ7Ýräµ:<6Œ»Œ7:<6Œ»Œ7áQÒ·¸ƒÓ¶:<6~ù6¬)8ØÎ8~ù6:<6BÄJ7ØÎ8BÄJ7¬)8~ù6¥àÛ7&¬Q8·e8·e8¥àÛ7¬)8»iÃ8õO¹8–"¥8ßï†8rÈy8k…Í8ãë80Âá8õO¹8:›8Dþ8õO¹8õO¹8ãë848¯8Ø9î¢×848¯8rÈy8–"¥8î¢×8:›8î¢×8&¬Q8Dþ8ßï†8?¨=8rÈy8·e8·e8–¸8¬)8¬)8¬)8>´7>´7:<6­ë¸‚â`¸÷ú·5ÙL¸aᶸ䑎¸áQÒ·ä‘Ž¸5ÙL¸ µ¢¸ä‘Ž¸ä‘Ž¸ä‘Ž¸ä‘Ž¸ä‘Ž¸­úÀ¸aᶸé˸þ2Õ¸­úÀ¸­úÀ¸­úÀ¸§*¹_ré¸3¸ý¸ƒ”󸃔ó¸é˸aᶸ"ʬ¸ÖQ߸òÜ$¸‚â`¸ µ¢¸@¢˜¸ µ¢¸"ʬ¸aᶸ­úÀ¸ä‘Ž¸@¢˜¸ä‘Ž¸÷ú·áQÒ·­ë¸÷ú·­ë¸­ë¸†Þ7·÷ú·÷ú·÷ú·­ë¸:<6Ýr䵸ƒÓ¶ÝräµBÄJ7ØÎ8~ù6Œ»Œ7?¨=8¥àÛ7¬)8?¨=8–¸8¬)8?¨=8–¸8&¬Q8¬)8ßï†8»iÃ8–"¥848¯8î¢×848¯8–"¥8»iÃ8î¢×8:›8õO¹80Âá8î¢×8õO¹8»iÃ8î¢×8î¢×8ßï†8k…Í8»iÃ848¯8ßï†8?¨=8Dþ848¯8–"¥8»iÃ8õO¹8ßï†8»iÃ8&¬Q8&¬Q8–¸8BÄJ7–¸8¥àÛ7–¸8ØÎ8:<6ØÎ8¸ƒÓ¶~ù6ÝräµòÜ$¸áQÒ·:<6d¶ª·áQÒ·‚â`¸‚â`¸5ÙL¸×8¸áQÒ·ÝräµáQÒ·­ë¸†Þ7·Ï<ƒ·BÄJ7ØÎ8BÄJ7–¸8·e8ßï†8·e8ßï†8·e8¬)8ØÎ8¬)8ßï†8–"¥848¯8rÈy8rÈy8»iÃ8»iÃ8:›8õO¹8ãë80Âá8î¢×8d9¢ö8œ'9˜9d9œ'9œ'9õO¹8; +9Ø9Ø9¢ö8¢ö8œ'9‡½(9d9; +9˜9˜9…y9Ø9œ'9k…Í8; +9¢ö80Âá8Ø9k…Í8î¢×848¯8–"¥8&¬Q8¬)8·e8?¨=8–¸8>´7Œ»Œ7–¸8¬)8>´7–¸8ØÎ8:<6:<6¸ƒÓ¶>´7Œ»Œ7Œ»Œ7BÄJ7Ýr䵸ƒÓ¶>´7BÄJ7¸ƒÓ¶¸ƒÓ¶Ï<ƒ·÷ú·¸ƒÓ¶¥àÛ7¥àÛ7BÄJ7áQÒ·÷ú·†Þ7·†Þ7·~ù6~ù6Ï<ƒ·:<6÷ú·¸ƒÓ¶BÄJ7–¸8–¸8¥àÛ7BÄJ7>´7–¸8–¸8¬)8·e8&¬Q8ßï†8–¸8Dþ8õO¹80Âá8ãë8î¢×8Ø9œ'9E¦#9d9YÕ-9õ9B9‡½(9‡½(9E¦#9; +9ãë8Ø9œ'9…y9˜9˜9œ'9…y9>O9œ'9˜9…y9î¢×8¢ö8ãë8œ'9¢ö8œ'9…y9õO¹8–"¥8–"¥8Ø9Dþ8õO¹8–"¥8k…Í8õO¹8Dþ8»iÃ8–"¥8&¬Q8–¸8¬)8&¬Q8ØÎ8ØÎ8>´7¬)8¬)8>´7Ýr䵸ƒÓ¶~ù6d¶ª·†Þ7·Ï<ƒ·Ï<ƒ·Ï<ƒ·­ë¸áQÒ·d¶ª·Ï<ƒ·~ù6BÄJ7Ï<ƒ·5ÙL¸‚â`¸$„„¸aᶸ䑎¸ä‘Ž¸@¢˜¸‚â`¸`òt¸‚â`¸`òt¸‚â`¸‚â`¸‚â`¸$„„¸Ï<ƒ·áQÒ·Ï<ƒ·òÜ$¸×8¸­ë¸d¶ª·×8¸áQÒ·Ï<ƒ·Ï<ƒ·­ë¸Ï<ƒ·†Þ7·¸ƒÓ¶¸ƒÓ¶†Þ7·d¶ª·:<6BÄJ7BÄJ7~ù6BÄJ7~ù6Ï<ƒ·:<6:›8BÄJ7~ù6&¬Q8?¨=8ØÎ8rÈy8?¨=8ßï†8–¸8·e8>´7>´7Œ»Œ7BÄJ7&¬Q8¥àÛ7BÄJ7>´7:<6:<65ÙL¸`òt¸5ÙL¸$„„¸é˸­úÀ¸ µ¢¸5ÙL¸×8¸ä‘Ž¸@¢˜¸ä‘Ž¸`òt¸ µ¢¸aᶸaᶸþ2Õ¸þ2Õ¸ƒ”ó¸§*¹ƒ”ó¸_ré¸_ré¸ÖQ߸ƒ”ó¸§*¹±î¹3¸ý¸3¸ý¸3¸ý¸ÖQ߸ÖQ߸aᶸé˸é˸_ré¸þ2ո䑎¸"ʬ¸­úÀ¸$„„¸ä‘Ž¸"ʬ¸­ë¸ä‘Ž¸×8¸÷ú·÷ú·Ýräµ~ù6Ï<ƒ·:<6d¶ª·Ï<ƒ·:<6~ù6:<6BÄJ7~ù6>´7~ù6Œ»Œ7>´7–¸8ßï†8ßï†8&¬Q8rÈy848¯848¯8»iÃ80Âá8õO¹80Âá8õO¹8:›848¯8õO¹8–"¥8–"¥8»iÃ848¯8k…Í8>O9¢ö8ãë8Ø9Ø9Ø9»iÃ80Âá8:›8k…Í848¯8Dþ8ßï†8õO¹8k…Í8»iÃ8ßï†8–¸8·e8rÈy8?¨=8>´7:<6†Þ7·:<6Ï<ƒ·:<6BÄJ7d¶ª·†Þ7·¸ƒÓ¶­ë¸òÜ$¸‚â`¸‚â`¸$„„¸5ÙL¸áQÒ·ä‘Ž¸òÜ$¸5ÙL¸áQÒ·d¶ª·†Þ7·~ù6:<6¸ƒÓ¶BÄJ7–¸8ØÎ8¬)8BÄJ7BÄJ7&¬Q8·e8Dþ8ßï†8ßï†8:›8k…Í848¯8»iÃ8k…Í8rÈy8:›8:›8:›8î¢×8–"¥8ßï†8ãë8î¢×8Ø9>O9…y9õ9B9˜9œ'9ãë8…y9d9˜9…y9‡½(9¶í29ž89…y9; +9d9>O9>O9E¦#9ãë80Âá80Âá8¢ö8ãë8õO¹8î¢×8ãë8>O9; +9œ'9¢ö8d9¢ö8Ø9î¢×8¢ö80Âá8ãë848¯8õO¹8:›8–"¥848¯8»iÃ8õO¹8–"¥8·e8?¨=8Dþ8¬)8rÈy8¬)8?¨=8–¸8rÈy8rÈy8–¸8–"¥848¯8:›8:›848¯8&¬Q8·e8:›8Dþ8ØÎ8&¬Q8–¸8ØÎ8–¸8Dþ8Dþ8Dþ8ßï†8:›8»iÃ8k…Í80Âá8; +90Âá8d90Âá8d9˜9YÕ-9˜9‡½(9YÕ-9E¦#9 =9_TG9E¦#9_TG9_TG9 ŠQ9_TG9 ŠQ9s¦V9‹üe9fVu9¶Â[9¶Â[9 ŠQ9s¦V9‹üe9‹üe9 ŠQ9jß`9s¦V9k9 ŠQ9s¦V9k9‹üe9_TG9 ŠQ9¶Â[9jß`9‹üe9_TG9fVu9fVu9k9$uz9 8p9F”9äY‚9k9s¦V9¶Â[9¶Â[9DoL9 =9 =9YÕ-9d9YÕ-9˜9YÕ-9‡½(9; +9d9; +9¢ö8œ'9>O9‡½(9¢ö8¢ö8ãë80Âá8œ'9d9Ø90Âá8d9î¢×8˜9>O9œ'9œ'9Ø9k…Í8»iÃ80Âá80Âá80Âá8…y9d9d9Ø9‡½(9œ'9ãë8>O9¶í29‡½(9…y9_TG9s¦V9¶Â[9‹üe9fVu9‹üe9 8p9F”9Ôé„9]+9äY‚9 8p9fVu9-¼‘9äY‚9óy‡9LÞ–9-¼‘9™o™9p$¡9óy‡9'M”9œ9'M”9'M”9™o™9¬’ž9LÞ–9™o™9-¼‘9LÞ–9'M”9? +Š9Ôé„9? +Š9¶Â[9k9‹üe9s¦V9DoL9jß`9 ŠQ9 =9ž89¶í29YÕ-9 =9ž89¶í29d9d9¢ö8œ'9õO¹80Âá8œ'9œ'9õO¹848¯80Âá8¢ö8»iÃ8õO¹8»iÃ8œ'9î¢×8&¬Q8–"¥8õO¹8»iÃ8õO¹8¬)8&¬Q8Dþ8–"¥8î¢×8î¢×8î¢×8¢ö8d9>O9>O9î¢×8¢ö8î¢×8î¢×8Ø9ãë80Âá8k…Í8œ'9–"¥8Ø9>O9Ø9; +9; +9œ'9œ'9Ø9¢ö8¢ö8ãë8>O9>O9…y9>O9…y9ž89 =9õ9B9õ9B9¶í29¶í29d9>O9E¦#9d9˜9; +9E¦#9E¦#9œ'9˜9˜9d9œ'9œ'9YÕ-9…y9œ'9Ø9»iÃ8õO¹8–"¥8rÈy8Dþ848¯8:›8î¢×8:›8»iÃ8Dþ8ßï†8·e8rÈy8·e8&¬Q8:›8ßï†8·e8·e8·e8¥àÛ7–¸8–¸8Œ»Œ7–¸8ØÎ8¬)8¬)8BÄJ7:<6¥àÛ7¥àÛ7BÄJ7>´7ØÎ8¬)8¬)8~ù6†Þ7·¸ƒÓ¶:<6~ù6:<6–¸8·e8¥àÛ7BÄJ7&¬Q8ØÎ8·e8?¨=8ØÎ8?¨=8>´7¸ƒÓ¶Ýr䵸ƒÓ¶áQÒ·­ë¸­ë¸Ï<ƒ·†Þ7·ÝräµBÄJ7:<6~ù6BÄJ7Ýr䵸ƒÓ¶†Þ7·Ï<ƒ·d¶ª·†Þ7·÷ú·Œ»Œ7¸ƒÓ¶Ï<ƒ·Ï<ƒ·­ë¸áQÒ·Ï<ƒ·÷ú·òÜ$¸òÜ$¸5ÙL¸‚â`¸‚â`¸5ÙL¸áQÒ·áQÒ·d¶ª·Ýr䵸ƒÓ¶÷ú·×8¸5ÙL¸"ʬ¸­úÀ¸þ2Õ¸þ ¹é˸"ʬ¸­úÀ¸þ2Õ¸3¸ý¸ãU¹ö?¹v³1¹<Ì6¹<Ì6¹ll"¹Šƒ'¹v³1¹þ¹ãU¹§*¹ö?¹v³1¹¡F¹Šƒ'¹<Ì6¹ˆå;¹™Þi¹iX~¹ªOP¹!¤_¹i4K¹™Þi¹!¤_¹^9y¹!¤_¹_kU¹ªOP¹ˆå;¹9›,¹¡F¹_kU¹¡F¹¡F¹‡‡Z¹ˆå;¹Vÿ@¹ˆå;¹‡‡Z¹ªOP¹ˆå;¹ãU¹Šƒ'¹9›,¹Šƒ'¹ãU¹v³1¹þ ¹Šƒ'¹ˆå;¹i4K¹ãU¹§*¹9›,¹¡F¹¡F¹ˆå;¹<Ì6¹ll"¹Šƒ'¹Vÿ@¹þ¹§*¹v³1¹3¸ý¸þ ¹ƒ”ó¸±î¹ÖQ߸þ ¹±î¹þ ¹ll"¹v³1¹ˆå;¹<Ì6¹v³1¹¡F¹‡‡Z¹i4K¹v³1¹9›,¹ˆå;¹ˆå;¹ˆå;¹!¤_¹Vÿ@¹<Ì6¹Vÿ@¹_kU¹_kU¹'Ád¹‡‡Z¹‡‡Z¹'Ád¹'Ád¹·t¹ÎK„¹ÎK„¹â®“¹â®“¹â®“¹,Ž¹#l‰¹«b›¹?ô¹?ô¹«b›¹#l‰¹?ј¹ü?–¹ú… ¹«b›¹cΪ¹Ú`­¹?ô¹Ú`­¹ä©¥¹<¨¹Ü£¹Ú`­¹<¨¹cΪ¹Ü£¹Ú`­¹Ú`­¹µ¹2†²¹µ¹Ú`­¹<¨¹«b›¹Ü£¹Ü£¹?ј¹â®“¹ò‘¹âÛ†¹ê»¹'Ád¹™Þi¹’ü‹¹ê»¹'Ád¹·t¹iX~¹^9y¹#l‰¹â®“¹«b›¹Ü£¹?ј¹«b›¹â®“¹?ô¹ü?–¹â®“¹ò‘¹â®“¹,Ž¹?ô¹«b›¹?ô¹«b›¹ú… ¹Ü£¹«b›¹â®“¹,Ž¹ò‘¹â®“¹ò‘¹â®“¹«b›¹â®“¹«b›¹ò‘¹ú… ¹ü?–¹«b›¹<¨¹«b›¹«b›¹?ј¹,Ž¹,Ž¹,Ž¹,Ž¹ú… ¹?ô¹<¨¹<¨¹cΪ¹cΪ¹«b›¹ä©¥¹ú… ¹ú… ¹tó¯¹<¨¹«b›¹2†²¹ä©¥¹ü?–¹cΪ¹«b›¹â®“¹ò‘¹ü?–¹?ô¹’ü‹¹?ј¹ò‘¹?ô¹â®“¹âÛ†¹â®“¹,Ž¹ü?–¹ê»¹uün¹ê»¹’ü‹¹™Þi¹·t¹'Ád¹!¤_¹iX~¹ê»¹ê»¹™Þi¹·t¹#l‰¹·t¹ÎK„¹^9y¹uün¹™Þi¹ªOP¹‡‡Z¹!¤_¹ªOP¹v³1¹ll"¹Vÿ@¹ö?¹ö?¹þ ¹3¸ý¸ö?¹9›,¹±î¹9›,¹Šƒ'¹þ¹þ¹±î¹ƒ”ó¸_r鸧*¹<Ì6¹§*¹±î¹3¸ý¸3¸ý¸_ré¸þ¹þ¹ãU¹±î¹<Ì6¹Šƒ'¹§*¹ãU¹Šƒ'¹ll"¹<Ì6¹<Ì6¹i4K¹i4K¹i4K¹i4K¹_kU¹!¤_¹9›,¹¡F¹Vÿ@¹v³1¹v³1¹9›,¹Šƒ'¹v³1¹v³1¹ãU¹9›,¹§*¹±î¹ƒ”ó¸_ré¸aᶸaᶸ µ¢¸é˸ÖQ߸_ré¸"ʬ¸aᶸ­úÀ¸ä‘Ž¸­úÀ¸"ʬ¸aᶸ$„„¸"ʬ¸@¢˜¸ µ¢¸‚â`¸òÜ$¸­ë¸5ÙL¸áQÒ·áQÒ·†Þ7·†Þ7·¸ƒÓ¶¸ƒÓ¶:<6>´7Œ»Œ7>´7ØÎ8Œ»Œ7–¸8rÈy8rÈy8:›8rÈy8õO¹8»iÃ80Âá8¢ö8ãë8>O90Âá80Âá8œ'9Ø9Ø9; +9d9d9>O9˜9>O9; +9k…Í8î¢×8œ'9k…Í8î¢×8; +9œ'9»iÃ8–"¥80Âá8–"¥8Dþ8»iÃ8¢ö8:›8–"¥8î¢×8Dþ8–"¥8Dþ80Âá848¯8Dþ8õO¹80Âá848¯8ßï†8&¬Q8:›8·e8–¸8rÈy8~ù6õO¹8Dþ848¯8Dþ8:›8Dþ8Dþ8õO¹848¯8õO¹8»iÃ8î¢×8Ø9>O9…y90Âá8k…Í8î¢×80Âá8»iÃ8–"¥8õO¹8ãë8Ø9œ'9…y9¶í29‡½(9E¦#9>O9 =9õ9B9DoL9õ9B9s¦V9k9jß`9k9F”9Ôé„9-¼‘9'M”9'M”9? +Š9? +Š9'M”9-¼‘9™o™9œ9™o™9[¶£9œ9¬’ž9¬’ž9'M”9]+9LÞ–9-¼‘9Ôé„9-¼‘9¸šŒ9Ôé„9Ôé„9äY‚9óy‡9óy‡9óy‡9Ôé„9? +Š9? +Š9'M”9óy‡9óy‡9F”9F”9äY‚9F”9Ôé„9$uz9fVu9‹üe9s¦V9DoL9¶Â[9¶Â[9‹üe9jß`9DoL9DoL9¶Â[9 =9¶í29 ŠQ9‡½(9…y9E¦#9˜9YÕ-9E¦#9˜9…y9E¦#9E¦#9˜9Ø9>O9Ø9œ'9î¢×8ãë8œ'9œ'9E¦#9ž89‡½(9; +9…y9œ'9‡½(9‡½(9E¦#9¶í29õ9B9‡½(9¶í29YÕ-9; +9YÕ-9_TG9¶í29 =9DoL9E¦#9_TG9 =9s¦V9DoL9E¦#9‡½(9YÕ-9‡½(9YÕ-9 =9ž89DoL9s¦V9‡½(9‡½(9YÕ-9 =9E¦#9d9¢ö8»iÃ80Âá80Âá848¯8œ'9¢ö848¯8»iÃ8k…Í8ßï†8:›8–¸8Dþ8–¸8BÄJ7>´7¥àÛ7>´7>´7>´7:<6~ù6ÝräµÏ<ƒ·÷ú·5ÙL¸×8¸ä‘Ž¸$„„¸`òt¸×8¸ä‘Ž¸­úÀ¸"ʬ¸ÖQ߸3¸ý¸é˸ÖQ߸3¸ý¸þ2Õ¸þ2Õ¸þ ¹3¸ý¸é˸ll"¹§*¹ö?¹¡F¹v³1¹¡F¹ˆå;¹¡F¹i4K¹Vÿ@¹<Ì6¹ö?¹Vÿ@¹Vÿ@¹§*¹ˆå;¹Vÿ@¹ˆå;¹ll"¹v³1¹9›,¹ll"¹9›,¹<Ì6¹ö?¹9›,¹v³1¹9›,¹ll"¹ll"¹ãU¹Šƒ'¹ll"¹þ ¹ö?¹§*¹ÖQ߸ƒ”ó¸ÖQ߸þ2Õ¸þ2Õ¸­úÀ¸"ʬ¸aᶸé˸䑎¸­úÀ¸aᶸÖQ߸"ʬ¸é˸­úÀ¸_ré¸_ré¸þ ¹þ ¹§*¹ö?¹9›,¹v³1¹§*¹þ¹ˆå;¹<Ì6¹ö?¹§*¹ll"¹v³1¹ªOP¹<Ì6¹9›,¹ªOP¹ˆå;¹ãU¹ˆå;¹Šƒ'¹9›,¹ªOP¹i4K¹ªOP¹¡F¹Vÿ@¹_kU¹'Ád¹!¤_¹‡‡Z¹!¤_¹!¤_¹_kU¹ªOP¹‡‡Z¹uün¹ê»¹™Þi¹uün¹¡F¹i4K¹'Ád¹'Ád¹_kU¹‡‡Z¹_kU¹ªOP¹ˆå;¹'Ád¹ˆå;¹v³1¹Šƒ'¹ãU¹ãU¹þ ¹Šƒ'¹þ¹3¸ý¸ƒ”󸃔󸃔ó¸_ré¸@¢˜¸ÖQ߸aᶸ䑎¸ µ¢¸‚â`¸`òt¸÷ú· µ¢¸áQÒ·`òt¸òÜ$¸­ë¸:<6d¶ª·¸ƒÓ¶:<6†Þ7·Ýräµ~ù6áQÒ·÷ú·¸ƒÓ¶†Þ7·áQÒ·¸ƒÓ¶¸ƒÓ¶:<6†Þ7·~ù6:<6>´7BÄJ7:<6¸ƒÓ¶`òt¸áQÒ·÷ú·×8¸ä‘Ž¸5ÙL¸5ÙL¸5ÙL¸`òt¸­ë¸ä‘Ž¸ä‘Ž¸ä‘Ž¸‚â`¸ä‘Ž¸ µ¢¸­úÀ¸ä‘Ž¸$„„¸÷ú·×8¸‚â`¸`òt¸`òt¸Ï<ƒ·÷ú·ä‘Ž¸òÜ$¸áQÒ·­ë¸×8¸`òt¸5ÙL¸d¶ª·­ë¸Ï<ƒ·­ë¸òÜ$¸òÜ$¸òÜ$¸@¢˜¸áQÒ·òÜ$¸÷ú·­ë¸÷ú·×8¸Ï<ƒ·d¶ª·†Þ7·ÝräµáQÒ·†Þ7·¸ƒÓ¶~ù6†Þ7·Ýr䵌»Œ7ØÎ8¬)8Dþ8:›8k…Í848¯848¯80Âá8k…Í8Ø9œ'9ãë8ãë8d9Ø9¶í29‡½(9; +9œ'9>O9œ'9>O948¯8Ø9–"¥8õO¹8¢ö8õO¹8k…Í8ãë8rÈy8:›80Âá80Âá8rÈy8k…Í8¢ö8œ'90Âá8¢ö848¯8»iÃ8î¢×8k…Í848¯8Dþ8–"¥8–¸8¬)8¥àÛ7ØÎ8ØÎ8¬)8rÈy8¥àÛ7&¬Q8rÈy8&¬Q8¬)8?¨=8¬)8?¨=8>´7Dþ8&¬Q8BÄJ7¬)8ØÎ8¬)8ØÎ8¥àÛ7Œ»Œ7>´7¥àÛ7~ù6¥àÛ7Ýr䵌»Œ7Ýräµ:<6>´7:<6Œ»Œ7:<6Œ»Œ7Ýräµ:<6~ù6¸ƒÓ¶>´7:<6>´7:<6BÄJ7÷ú·Œ»Œ7òÜ$¸¸ƒÓ¶­ë¸¸ƒÓ¶:<6~ù6¬)8Œ»Œ7¥àÛ7Œ»Œ7†Þ7·¸ƒÓ¶:<6:<6ØÎ8~ù6¬)8¬)8¬)8rÈy8·e8–"¥8:›8–"¥8»iÃ8ßï†8:›8–"¥8ßï†8–"¥8&¬Q848¯848¯8k…Í8k…Í8k…Í8·e8¬)8?¨=8?¨=8¥àÛ7¸ƒÓ¶†Þ7·~ù6BÄJ7>´7:<6BÄJ7Ï<ƒ·>´7~ù6BÄJ7áQÒ·:<6Ï<ƒ·†Þ7·Ï<ƒ·Ýräµ÷ú·Ï<ƒ·÷ú·`òt¸ä‘Ž¸ä‘Ž¸@¢˜¸ µ¢¸ä‘Ž¸`òt¸ µ¢¸"ʬ¸­úÀ¸ µ¢¸@¢˜¸þ2ո䑎¸@¢˜¸ µ¢¸aᶸ‚â`¸÷ú·­ë¸`òt¸áQÒ·Ï<ƒ·`òt¸‚â`¸`òt¸‚â`¸÷ú·5ÙL¸×8¸Ýräµ>´7>´7¸ƒÓ¶ØÎ8Dþ8–¸8BÄJ7¥àÛ7·e8Dþ8–"¥8–"¥8¢ö8»iÃ8ßï†8–"¥8õO¹8rÈy8Dþ8&¬Q8–"¥8ØÎ8BÄJ7rÈy8rÈy8ßï†8rÈy8¬)8¥àÛ7?¨=8ßï†8&¬Q848¯8rÈy8Dþ8Dþ8rÈy8&¬Q8ßï†8rÈy8&¬Q8ßï†8&¬Q8?¨=8:<6Œ»Œ7>´7d¶ª·~ù6ØÎ8:<6áQÒ·÷ú·×8¸­ë¸òÜ$¸$„„¸5ÙL¸d¶ª·÷ú·Ï<ƒ·"ʬ¸`òt¸áQÒ·¸ƒÓ¶òÜ$¸‚â`¸ä‘Ž¸ä‘Ž¸5ÙL¸÷ú·`òt¸5ÙL¸×8¸5ÙL¸ä‘Ž¸@¢˜¸×8¸­ë¸áQÒ·5ÙL¸‚â`¸d¶ª·d¶ª·Ï<ƒ·~ù6¸ƒÓ¶Ï<ƒ·~ù6†Þ7·Ï<ƒ·­ë¸×8¸5ÙL¸òÜ$¸¸ƒÓ¶÷ú·5ÙL¸÷ú·áQÒ·ä‘Ž¸÷ú·Ï<ƒ·d¶ª·†Þ7·†Þ7·¸ƒÓ¶¸ƒÓ¶¸ƒÓ¶Œ»Œ7–¸8>´7BÄJ7>´7>´7>´7BÄJ7~ù6¥àÛ7:<6~ù6Œ»Œ7ÝräµØÎ8BÄJ7>´7ØÎ8:<6Ï<ƒ·:<6×8¸÷ú·­ë¸áQÒ·Ýr䵆Þ7·áQÒ·­ë¸­ë¸aᶸ@¢˜¸òÜ$¸òÜ$¸÷ú·áQÒ·‚â`¸÷ú·d¶ª·5ÙL¸÷ú·Ï<ƒ·÷ú·d¶ª·×8¸×8¸‚â`¸áQÒ· µ¢¸ µ¢¸ä‘Ž¸@¢˜¸aᶸ"ʬ¸@¢˜¸$„„¸ä‘Ž¸­ë¸÷ú·¸ƒÓ¶~ù6BÄJ7Œ»Œ7Œ»Œ7¥àÛ7Ï<ƒ·ØÎ8ØÎ8¥àÛ7&¬Q8¥àÛ7?¨=8·e8¬)8–¸8&¬Q8rÈy8Dþ8¬)8rÈy8rÈy8rÈy8rÈy8k…Í8k…Í8ßï†8Dþ8–"¥8ßï†8–"¥848¯8:›8õO¹8Dþ8õO¹8Ø90Âá8k…Í8õO¹8ãë8>O9d9»iÃ80Âá8¢ö8·e8»iÃ8–"¥8–¸8&¬Q8–¸8·e8–¸8–¸8?¨=8ØÎ8¥àÛ7–¸8–¸8?¨=8¬)8&¬Q8&¬Q8:›8ßï†8:›8:›8&¬Q8¥àÛ7&¬Q8¥àÛ7>´7>´7†Þ7·¸ƒÓ¶Ï<ƒ·BÄJ7Ï<ƒ·áQÒ·áQÒ·ÝräµòÜ$¸Ï<ƒ·Œ»Œ7Œ»Œ7ØÎ8>´7:<6~ù6†Þ7·Ýräµ~ù6¬)8¥àÛ7~ù6Œ»Œ7–¸8&¬Q8–¸8ØÎ8·e8:›8¬)8rÈy8:›8Dþ8–"¥8Dþ8õO¹8:›8ßï†8î¢×8k…Í8î¢×8ßï†8õO¹8:›848¯8î¢×8k…Í8õO¹8k…Í8:›848¯848¯8¢ö80Âá8k…Í8–"¥8ßï†8rÈy8¬)8·e8rÈy8¥àÛ7¥àÛ7:›8¥àÛ7–¸8¥àÛ7?¨=8?¨=8ßï†8Dþ8?¨=8–"¥8:›8&¬Q8&¬Q8>´7¬)8¥àÛ7¸ƒÓ¶>´7~ù6Œ»Œ7~ù6~ù6>´7¥àÛ7¥àÛ7:<6Œ»Œ7Œ»Œ7Ï<ƒ·¸ƒÓ¶áQÒ·d¶ª·÷ú·†Þ7·†Þ7·~ù6†Þ7·¸ƒÓ¶Ýr䵸ƒÓ¶:<6áQÒ·÷ú·d¶ª·­ë¸Ï<ƒ·áQÒ·áQÒ·÷ú·†Þ7·Ï<ƒ·áQÒ·d¶ª·BÄJ7Œ»Œ7Œ»Œ7ØÎ8ØÎ8~ù6BÄJ7~ù6ØÎ8Dþ8&¬Q8·e8Dþ8·e8–"¥8ßï†8·e8Dþ8k…Í8Dþ848¯8œ'9¢ö8¢ö8¢ö8î¢×8õO¹8¢ö8ãë8õO¹8õO¹848¯8k…Í8Dþ8¬)8–"¥8î¢×8Dþ848¯8·e8–"¥8Dþ8Dþ8:›8&¬Q8&¬Q8Dþ848¯8·e8?¨=8Œ»Œ7ØÎ8¥àÛ7BÄJ7~ù6>´7~ù6†Þ7·ÝräµBÄJ7Ýräµ:<6~ù6>´7:<6BÄJ7Ýräµ:<6áQÒ·áQÒ·†Þ7·¸ƒÓ¶¸ƒÓ¶Ï<ƒ·Ï<ƒ·¸ƒÓ¶÷ú·:<6÷ú·×8¸áQÒ·áQÒ·†Þ7·†Þ7·Ï<ƒ·áQÒ·5ÙL¸‚â`¸@¢˜¸òÜ$¸­ë¸‚â`¸`òt¸ä‘Ž¸¸ƒÓ¶áQÒ·áQÒ·Ýr䵸ƒÓ¶:<6?¨=8–¸8¬)8Dþ8¬)8&¬Q8·e8·e8?¨=8>´7&¬Q8Œ»Œ7ØÎ8Œ»Œ7Œ»Œ7¬)8Dþ848¯8õO¹8·e8·e8:›8–"¥848¯8–"¥8î¢×8»iÃ8Dþ8–"¥8õO¹8&¬Q8Dþ8¬)8:›8Dþ848¯8:›8–"¥8»iÃ8»iÃ8–"¥8k…Í8Ø9»iÃ8î¢×8õO¹8õO¹848¯80Âá8õO¹848¯848¯8ãë848¯8k…Í80Âá8–"¥8»iÃ8ãë8»iÃ8Dþ8–"¥8:›8·e8&¬Q8¬)8rÈy8ßï†8:›848¯8ØÎ8&¬Q8rÈy8¬)8>´7¬)8–¸8?¨=8–¸8?¨=8Œ»Œ7>´7Œ»Œ7Ýräµ~ù6BÄJ7>´7BÄJ7¥àÛ7?¨=8ØÎ8rÈy8rÈy8ßï†8k…Í8õO¹8î¢×8ãë80Âá8ãë8k…Í8œ'9ãë8î¢×80Âá8…y9E¦#9YÕ-9õ9B9YÕ-9E¦#9ãë8¢ö8¢ö8>O90Âá80Âá8œ'9d9E¦#9‡½(9 =9 =9…y9d9E¦#9¶í29œ'9E¦#9ž89>O9‡½(9YÕ-9E¦#9E¦#9E¦#9ãë8œ'9Ø9d9¢ö8»iÃ8»iÃ8:›8Dþ8·e848¯8ßï†8Dþ8ßï†8»iÃ8–¸8:›8·e8Œ»Œ7ØÎ8·e8¬)8·e8ØÎ8¥àÛ7>´7BÄJ7~ù6:<6ÝräµBÄJ7Ýr䵆Þ7·÷ú·Ï<ƒ·ÝräµÝr䵭븸ƒÓ¶~ù6áQÒ·áQÒ·†Þ7·áQÒ·áQÒ·Ï<ƒ·áQÒ·Ï<ƒ·áQÒ·¸ƒÓ¶†Þ7·ÝräµáQÒ·Ýräµ>´7¸ƒÓ¶Ýräµ~ù6BÄJ7BÄJ7Ýräµ:<6~ù6BÄJ7?¨=8BÄJ7BÄJ7–¸8&¬Q8?¨=8>´7ØÎ8¥àÛ7?¨=8–¸8Dþ8Dþ8õO¹8k…Í8»iÃ8k…Í8õO¹8ßï†8õO¹8–"¥8rÈy8–"¥8:›8k…Í8:›848¯8:›8Dþ8ØÎ8&¬Q8Œ»Œ7Œ»Œ7Ýräµ>´7Ï<ƒ·:<6¸ƒÓ¶÷ú·áQÒ·­ë¸5ÙL¸×8¸$„„¸"ʬ¸$„„¸`òt¸ä‘Ž¸ä‘Ž¸÷ú·5ÙL¸òÜ$¸ä‘Ž¸ä‘Ž¸ µ¢¸"ʬ¸­úÀ¸ µ¢¸­úÀ¸"ʬ¸@¢˜¸ä‘Ž¸þ2Õ¸@¢˜¸"ʬ¸é˸_ré¸_ré¸ÖQ߸ƒ”ó¸þ¹­úÀ¸­úÀ¸"ʬ¸ µ¢¸­úÀ¸@¢˜¸þ2Õ¸­úÀ¸ä‘Ž¸ä‘Ž¸‚â`¸×8¸×8¸òÜ$¸÷ú·áQÒ·†Þ7·Ï<ƒ·BÄJ7†Þ7·­ë¸†Þ7·¸ƒÓ¶Œ»Œ7¸ƒÓ¶ØÎ8BÄJ7Œ»Œ7¥àÛ7~ù6:<6BÄJ7–¸8ßï†8Œ»Œ7>´7¥àÛ7ØÎ8·e8?¨=8>´7?¨=8&¬Q8¬)8?¨=8:›8ßï†8rÈy8·e8–"¥8:›8–"¥8:›8–"¥8¢ö8»iÃ8Dþ848¯8ãë8k…Í848¯8–"¥8Dþ8Dþ8–"¥8:›8Dþ8·e8&¬Q8?¨=8ßï†8&¬Q8¥àÛ7?¨=8?¨=8Œ»Œ7>´7ØÎ8ØÎ8–¸8BÄJ7¥àÛ7>´7~ù6¸ƒÓ¶Ï<ƒ·†Þ7·Ï<ƒ·d¶ª·÷ú·÷ú·òÜ$¸­ë¸~ù6†Þ7·d¶ª·áQÒ·:<6Ï<ƒ·:<6Ï<ƒ·Ï<ƒ·òÜ$¸÷ú·5ÙL¸ä‘Ž¸òÜ$¸5ÙL¸`òt¸òÜ$¸÷ú·d¶ª·Ï<ƒ·†Þ7·†Þ7·áQÒ·BÄJ7¸ƒÓ¶d¶ª·áQÒ·:<6BÄJ7¬)8BÄJ7Œ»Œ7>´7¬)8&¬Q8Dþ8rÈy8Dþ8·e8·e8?¨=8–¸8¬)8ØÎ8&¬Q8ØÎ8BÄJ7Ï<ƒ·:<6>´7d¶ª·­ë¸÷ú·áQÒ·×8¸òÜ$¸òÜ$¸ä‘Ž¸`òt¸÷ú·ä‘Ž¸­ë¸5ÙL¸`òt¸d¶ª·áQÒ·5ÙL¸ä‘Ž¸aᶸ"ʬ¸ä‘Ž¸5ÙL¸ µ¢¸@¢˜¸$„„¸ µ¢¸ µ¢¸aᶸaᶸ­úÀ¸þ2Õ¸þ2Õ¸±î¹ƒ”ó¸±î¹þ ¹±î¹þ ¹ƒ”󸃔ó¸_ré¸"ʬ¸é˸ µ¢¸þ2Õ¸é˸­úÀ¸5ÙL¸ä‘Ž¸×8¸5ÙL¸5ÙL¸­ë¸5ÙL¸áQÒ·÷ú·áQÒ·÷ú·†Þ7·d¶ª·~ù6~ù6BÄJ7BÄJ7¥àÛ7&¬Q8?¨=8¬)8ßï†8rÈy8–"¥8Dþ8k…Í848¯8õO¹8õO¹848¯8k…Í8ãë8»iÃ80Âá8œ'9œ'9œ'9k…Í8:›8&¬Q8&¬Q8&¬Q8&¬Q8¬)8·e8Œ»Œ7Œ»Œ7?¨=8:<6~ù6–¸8~ù6:<6?¨=8>´7ØÎ8>´7¥àÛ7BÄJ7Ýr䵌»Œ7>´7:<6~ù6Œ»Œ7¸ƒÓ¶ÝräµÏ<ƒ·~ù6¸ƒÓ¶>´7BÄJ7Ï<ƒ·Ýräµ÷ú·÷ú·×8¸÷ú·÷ú·­ë¸­ë¸5ÙL¸òÜ$¸`òt¸5ÙL¸$„„¸ä‘Ž¸$„„¸ä‘Ž¸‚â`¸@¢˜¸­ë¸ µ¢¸òÜ$¸òÜ$¸5ÙL¸­ë¸Ï<ƒ·÷ú·Ï<ƒ·áQÒ·áQÒ·áQÒ·÷ú·†Þ7·d¶ª·BÄJ7d¶ª·¸ƒÓ¶¸ƒÓ¶BÄJ7ØÎ8rÈy8Dþ8ßï†8rÈy8õO¹80Âá8ãë8¢ö8¢ö8õO¹8õO¹8Ø9>O9î¢×8»iÃ8»iÃ8k…Í80Âá8Ø9–"¥8Dþ8õO¹8:›80Âá8–"¥8:›8õO¹8k…Í848¯8õO¹8¢ö8k…Í8–"¥8ßï†8õO¹8:›8&¬Q8–¸8Dþ8&¬Q8–¸8¬)8·e8–¸8Œ»Œ7~ù6÷ú·:<6¸ƒÓ¶d¶ª·†Þ7·:<6d¶ª·‚â`¸ÖQ߸䑎¸5ÙL¸"ʬ¸‚â`¸‚â`¸‚â`¸5ÙL¸`òt¸×8¸×8¸ä‘Ž¸`òt¸ä‘Ž¸ µ¢¸@¢˜¸`òt¸òÜ$¸×8¸­ë¸òÜ$¸­ë¸d¶ª·¸ƒÓ¶BÄJ7Ï<ƒ·ØÎ8¥àÛ7ØÎ8ØÎ8¥àÛ7BÄJ7¥àÛ7ØÎ8¥àÛ7¥àÛ7&¬Q8&¬Q8:›8·e8î¢×8»iÃ8:›80Âá8»iÃ8õO¹8ãë8k…Í8Dþ848¯80Âá8Ø9¢ö8ãë8k…Í80Âá8õO¹8ßï†8:›8¢ö8k…Í8¢ö8¢ö8>O9ãë8î¢×8–"¥80Âá8Ø9k…Í8õO¹8–"¥8»iÃ8–"¥8ßï†8ßï†848¯848¯8rÈy8ØÎ8¥àÛ7>´7–¸8Œ»Œ7~ù6Ýr䵆Þ7·:<6Ï<ƒ·¸ƒÓ¶ÝräµÝräµBÄJ7BÄJ7Ï<ƒ·:<6:<6d¶ª·­ë¸Ï<ƒ·d¶ª·áQÒ·òÜ$¸`òt¸‚â`¸`òt¸­ë¸5ÙL¸d¶ª·`òt¸òÜ$¸×8¸­ë¸‚â`¸5ÙL¸`òt¸ä‘Ž¸ä‘Ž¸ä‘Ž¸@¢˜¸5ÙL¸×8¸áQÒ·÷ú·5ÙL¸÷ú·áQÒ·5ÙL¸×8¸d¶ª·d¶ª·Ýräµ:<6~ù6:<6?¨=8¬)8Œ»Œ7Œ»Œ7ßï†8Dþ8–"¥8:›8î¢×8Ø9î¢×8õO¹80Âá80Âá8¢ö8; +9>O9Ø90Âá8Ø9d9ãë8¢ö8>O9d9ãë8; +9¢ö8¢ö8Ø9»iÃ8ßï†8:›8&¬Q8·e8:›8rÈy8ßï†8Dþ8&¬Q8¥àÛ7BÄJ7Œ»Œ7~ù6¸ƒÓ¶áQÒ·†Þ7·÷ú·áQÒ·­ë¸$„„¸ä‘Ž¸`òt¸­úÀ¸ä‘Ž¸­úÀ¸"ʬ¸ µ¢¸aᶸþ2Õ¸­úÀ¸þ2Õ¸ƒ”ó¸ll"¹ãU¹ll"¹þ¹§*¹ƒ”ó¸_r鸃”ó¸é˸é˸ µ¢¸‚â`¸é˸þ2Õ¸­úÀ¸­úÀ¸ µ¢¸ä‘Ž¸`òt¸é˸@¢˜¸×8¸­ë¸÷ú·:<6÷ú·Ï<ƒ·Ï<ƒ·¸ƒÓ¶Ï<ƒ·áQÒ·:<6&¬Q8¥àÛ7–¸8Dþ8:›8:›8ßï†8&¬Q8&¬Q8–¸848¯8:›8?¨=8ßï†8õO¹8–¸8¥àÛ7&¬Q8Œ»Œ7Œ»Œ7Œ»Œ7?¨=8–¸8?¨=8·e8Œ»Œ7†Þ7·¸ƒÓ¶~ù6:<6BÄJ7~ù6Œ»Œ7BÄJ7~ù6:<6Ýr䵸ƒÓ¶:<6Œ»Œ7:<6¸ƒÓ¶†Þ7·:<6†Þ7·`òt¸÷ú·áQÒ·5ÙL¸ä‘Ž¸é˸ µ¢¸é˸ÖQ߸­úÀ¸é˸ƒ”ó¸_ré¸é˸§*¹±î¹±î¹±î¹­úÀ¸ÖQ߸­úÀ¸ µ¢¸þ2Õ¸é˸­úÀ¸@¢˜¸ µ¢¸ä‘Ž¸×8¸ä‘Ž¸òÜ$¸ä‘Ž¸ µ¢¸5ÙL¸ä‘Ž¸5ÙL¸ä‘Ž¸ µ¢¸"ʬ¸ä‘Ž¸"ʬ¸ä‘Ž¸é˸aᶸ"ʬ¸5ÙL¸aᶸ䑎¸`òt¸×8¸÷ú·áQÒ·‚â`¸‚â`¸×8¸d¶ª·áQÒ·†Þ7·d¶ª·­ë¸áQÒ·áQÒ·áQÒ·:<6†Þ7·Ï<ƒ·­ë¸Ï<ƒ·¸ƒÓ¶d¶ª·Ýr䵆Þ7·d¶ª·>´7†Þ7·d¶ª·d¶ª·d¶ª·áQÒ·†Þ7·­ë¸òÜ$¸­ë¸÷ú·÷ú·é˸3¸ý¸ÖQ߸"ʬ¸ µ¢¸þ2Õ¸ÖQ߸é˸þ ¹ƒ”ó¸3¸ý¸ƒ”ó¸3¸ý¸ö?¹§*¹ö?¹§*¹ãU¹±î¹þ¹§*¹±î¹_ré¸ãU¹9›,¹v³1¹ll"¹Šƒ'¹v³1¹ˆå;¹v³1¹i4K¹¡F¹<Ì6¹§*¹þ¹Šƒ'¹þ¹þ ¹ãU¹ll"¹v³1¹þ¹Šƒ'¹þ ¹þ ¹þ¹ƒ”󸃔ó¸ÖQ߸þ2Õ¸$„„¸ä‘Ž¸5ÙL¸×8¸­ë¸d¶ª·×8¸áQÒ·d¶ª·òÜ$¸d¶ª·ÝräµÝr䵸ƒÓ¶d¶ª·÷ú·¸ƒÓ¶BÄJ7¥àÛ7†Þ7·†Þ7·d¶ª·†Þ7·Ýräµd¶ª·†Þ7·BÄJ7¥àÛ7Œ»Œ7:<6ÝräµBÄJ7:<6BÄJ7Ï<ƒ·~ù6†Þ7·~ù6BÄJ7&¬Q8·e8¬)8&¬Q8–¸8ßï†8rÈy8rÈy8¬)8Ýräµ>´7Œ»Œ7¥àÛ7–¸8>´7BÄJ7Œ»Œ7÷ú·Ï<ƒ·~ù6Ï<ƒ·÷ú·áQÒ·BÄJ7áQÒ·d¶ª·‚â`¸òÜ$¸÷ú·òÜ$¸÷ú·­ë¸¸ƒÓ¶Ï<ƒ·†Þ7·áQÒ·:<6d¶ª·†Þ7·†Þ7·­ë¸÷ú·d¶ª·òÜ$¸òÜ$¸­ë¸òÜ$¸†Þ7·>´7~ù6–¸8>´7–¸8¬)8–¸8ßï†8>´7·e8:›8:›8õO¹8:›8ßï†8:›848¯8k…Í8Dþ8:›8ãë8ãë8ãë8Ø9; +90Âá8»iÃ8k…Í80Âá8Ø9¢ö80Âá8–"¥8–"¥8»iÃ848¯8k…Í8¢ö8Ø9œ'9ãë8ãë8î¢×8Dþ80Âá8»iÃ8&¬Q8&¬Q8:›8?¨=8ØÎ8Œ»Œ7>´7ØÎ8:<6ÝräµØÎ8ÝräµÝräµÏ<ƒ·¸ƒÓ¶~ù6Ï<ƒ·:<6­ë¸d¶ª·>´7¬)8Œ»Œ7Œ»Œ7ØÎ8?¨=8ßï†8rÈy8?¨=8–¸8ØÎ8BÄJ7ØÎ8–"¥8Dþ8Dþ8Dþ8–"¥8:›8rÈy8?¨=8ßï†8Dþ8:›8õO¹8k…Í8Ø90Âá8–"¥8–"¥8õO¹8õO¹8î¢×8–"¥8&¬Q8:›8»iÃ8:›8:›8»iÃ8Ø9î¢×8î¢×8î¢×80Âá8»iÃ8:›8»iÃ8k…Í8õO¹8»iÃ8»iÃ8:›848¯8ßï†8ßï†8õO¹8k…Í8Dþ8ßï†8ßï†8ßï†8–"¥8õO¹8rÈy8?¨=8rÈy8ßï†8>´7:<6ØÎ8–¸8?¨=8Œ»Œ7BÄJ7†Þ7·:<6†Þ7·Ï<ƒ·†Þ7·áQÒ·÷ú·­ë¸‚â`¸d¶ª·áQÒ·‚â`¸÷ú·÷ú·Ï<ƒ·†Þ7·†Þ7·d¶ª·¸ƒÓ¶Ýräµd¶ª·5ÙL¸÷ú·×8¸­ë¸òÜ$¸÷ú·÷ú·­ë¸áQÒ·áQÒ·d¶ª·áQÒ·`òt¸òÜ$¸†Þ7·5ÙL¸5ÙL¸‚â`¸‚â`¸‚â`¸­ë¸÷ú·ä‘Ž¸"ʬ¸†Þ7·ÝräµÏ<ƒ·¸ƒÓ¶†Þ7·¸ƒÓ¶†Þ7·Œ»Œ7¸ƒÓ¶†Þ7·d¶ª·~ù6>´7Œ»Œ7:<6Ýräµ~ù6Ï<ƒ·>´7–¸8>´7~ù6:<6¬)8:›8&¬Q8¬)8·e8ßï†8rÈy8&¬Q8rÈy8:›8?¨=8rÈy8Dþ8ßï†8Dþ8&¬Q8>´7–¸8–¸8¥àÛ7>´7:<6Ï<ƒ·áQÒ·÷ú·÷ú·5ÙL¸­ë¸Ï<ƒ·‚â`¸ä‘Ž¸@¢˜¸"ʬ¸aᶸ­úÀ¸ µ¢¸`òt¸aᶸ µ¢¸$„„¸ µ¢¸"ʬ¸ÖQ߸þ¹þ ¹±î¹þ¹§*¹ãU¹±î¹ãU¹§*¹±î¹§*¹ö?¹§*¹ãU¹ãU¹v³1¹ö?¹ö?¹v³1¹þ¹3¸ý¸_ré¸_ré¸_ré¸ÖQ߸þ¹ÖQ߸ µ¢¸ µ¢¸ µ¢¸×8¸5ÙL¸÷ú·÷ú·‚â`¸5ÙL¸`òt¸5ÙL¸òÜ$¸­ë¸5ÙL¸‚â`¸­ë¸‚â`¸­ë¸†Þ7·ÝräµBÄJ7–¸8¬)8BÄJ7Ýr䵌»Œ7BÄJ7>´7Œ»Œ7Ýräµ>´7:<6†Þ7·>´7?¨=8Œ»Œ7–¸8–¸8ØÎ8¸ƒÓ¶Ýräµ:<6Œ»Œ7~ù6BÄJ7Œ»Œ7BÄJ7¥àÛ7Œ»Œ7–¸8~ù6Œ»Œ7Œ»Œ7:<6BÄJ7ÝräµBÄJ7Ýr䵸ƒÓ¶Ýr䵸ƒÓ¶†Þ7·áQÒ·¸ƒÓ¶d¶ª·d¶ª·áQÒ·5ÙL¸`òt¸×8¸é˸é˸ÖQ߸­úÀ¸@¢˜¸aᶸ µ¢¸é˸þ2ո䑎¸­úÀ¸_ré¸é˸é˸"ʬ¸­úÀ¸ÖQ߸þ2Õ¸ µ¢¸@¢˜¸×8¸òÜ$¸‚â`¸@¢˜¸aᶸ‚â`¸áQÒ·òÜ$¸òÜ$¸5ÙL¸×8¸÷ú·÷ú·Ï<ƒ·?¨=8d¶ª·†Þ7·BÄJ7>´7d¶ª·Ï<ƒ·:<6ØÎ8BÄJ7–¸8~ù6>´7–¸8¥àÛ7~ù6†Þ7·>´7¥àÛ7ØÎ8Œ»Œ7ØÎ8·e8·e8–¸8&¬Q8rÈy8ØÎ8>´7>´7>´7:<6~ù6:<6:<6Ýr䵆Þ7·d¶ª·:<6¸ƒÓ¶d¶ª·òÜ$¸áQÒ·×8¸†Þ7·÷ú·ä‘Ž¸÷ú·òÜ$¸­ë¸5ÙL¸‚â`¸‚â`¸òÜ$¸áQÒ·×8¸÷ú·áQÒ·áQÒ·$„„¸ä‘Ž¸ä‘Ž¸@¢˜¸é˸þ2Õ¸ µ¢¸ÖQ߸ÖQ߸ƒ”ó¸ÖQ߸é˸ƒ”ó¸3¸ý¸_ré¸ÖQ߸ƒ”ó¸3¸ý¸ƒ”󸃔ó¸é˸þ2Õ¸ÖQ߸ µ¢¸ µ¢¸é˸aᶸ µ¢¸@¢˜¸aᶸ­úÀ¸ä‘Ž¸ä‘Ž¸‚â`¸5ÙL¸`òt¸ µ¢¸@¢˜¸ä‘Ž¸`òt¸­ë¸áQÒ·òÜ$¸Ýr䵸ƒÓ¶­ë¸Œ»Œ7:<6Œ»Œ7†Þ7·d¶ª·Ýr䵌»Œ7BÄJ7Œ»Œ7¸ƒÓ¶d¶ª·:<6Ï<ƒ·Ï<ƒ·­ë¸Ï<ƒ·†Þ7·¸ƒÓ¶áQÒ·:<6:<6Ï<ƒ·Ýräµ>´7d¶ª·÷ú·¸ƒÓ¶áQÒ·áQÒ·÷ú·áQÒ·~ù6~ù6¸ƒÓ¶÷ú·òÜ$¸d¶ª·áQÒ·d¶ª·¸ƒÓ¶5ÙL¸áQÒ·Ýräµ~ù6†Þ7·Ï<ƒ·­ë¸Ï<ƒ·d¶ª·5ÙL¸×8¸ä‘Ž¸­ë¸­ë¸"ʬ¸­úÀ¸5ÙL¸‚â`¸ µ¢¸òÜ$¸†Þ7·ä‘Ž¸÷ú·òÜ$¸áQÒ·Ï<ƒ·¸ƒÓ¶áQÒ·áQÒ·­ë¸­ë¸ä‘Ž¸òÜ$¸áQÒ·‚â`¸×8¸ä‘Ž¸÷ú·5ÙL¸òÜ$¸Œ»Œ7†Þ7·BÄJ7~ù6>´7ØÎ8BÄJ7–¸8–¸8ÝräµáQÒ·>´7>´7?¨=8?¨=8>´7ØÎ8BÄJ7>´7&¬Q8BÄJ7:›8:›8¬)8õO¹8&¬Q8·e8–¸8rÈy8&¬Q8&¬Q8–¸8¥àÛ7–¸8¥àÛ7¥àÛ7&¬Q8ßï†8¥àÛ7–¸8Dþ8rÈy8&¬Q8rÈy8BÄJ7Œ»Œ7>´7?¨=8Dþ8·e8–¸8ØÎ8Œ»Œ7Œ»Œ7>´7ÝräµÏ<ƒ·×8¸÷ú·×8¸­ë¸÷ú·­ë¸ä‘Ž¸ µ¢¸ÖQ߸䑎¸aᶸÖQ߸aᶸ µ¢¸_ré¸þ2Õ¸ÖQ߸é˸ÖQ߸_r鸃”ó¸±î¹§*¹ö?¹3¸ý¸§*¹ö?¹±î¹_ré¸_r鸧*¹ãU¹Šƒ'¹þ¹þ¹3¸ý¸±î¹"ʬ¸aᶸÖQ߸_ré¸@¢˜¸ä‘Ž¸ä‘Ž¸­ë¸òÜ$¸ÝräµáQÒ·òÜ$¸†Þ7·~ù6~ù6†Þ7·Œ»Œ7>´7~ù6ØÎ8ØÎ8~ù6Œ»Œ7¬)8Œ»Œ7?¨=8–¸8¬)8rÈy8¬)8ßï†8–¸8>´7¬)8·e8Dþ848¯8Dþ8?¨=8»iÃ8Dþ8:›8ØÎ8¬)8?¨=8>´7¬)8¬)8ØÎ8>´7ÝräµÝräµd¶ª·×8¸d¶ª·÷ú·ä‘Ž¸‚â`¸×8¸‚â`¸$„„¸­úÀ¸@¢˜¸‚â`¸òÜ$¸ä‘Ž¸ä‘Ž¸ä‘Ž¸‚â`¸ä‘Ž¸@¢˜¸5ÙL¸@¢˜¸ä‘Ž¸‚â`¸ÖQ߸þ2Õ¸þ2Õ¸_ré¸"ʬ¸aᶸþ2Õ¸ µ¢¸ä‘Ž¸‚â`¸ä‘Ž¸5ÙL¸5ÙL¸áQÒ·×8¸5ÙL¸×8¸5ÙL¸‚â`¸×8¸Ï<ƒ·d¶ª·÷ú·†Þ7·d¶ª·¸ƒÓ¶~ù6:<6BÄJ7–¸8ØÎ8ØÎ8>´7·e8ßï†8ØÎ8ßï†8·e8?¨=8:›8:›8:›8Dþ848¯8»iÃ8õO¹8õO¹8·e8:›8î¢×8ßï†8–"¥8·e8ßï†8–"¥8Dþ8¬)8&¬Q8rÈy8ßï†8–¸8rÈy8–"¥8ØÎ8–¸8¬)8>´7Œ»Œ7¬)8¥àÛ7ØÎ8Œ»Œ7:<6Ýräµ¥àÛ7¥àÛ7BÄJ7–¸8¥àÛ7>´7¥àÛ7BÄJ7†Þ7·–¸8Œ»Œ7–¸8¥àÛ7–¸8?¨=8¥àÛ7~ù6Ýr䵸ƒÓ¶d¶ª·÷ú·òÜ$¸òÜ$¸÷ú·ä‘Ž¸‚â`¸ä‘Ž¸­ë¸×8¸÷ú·òÜ$¸÷ú·†Þ7·Ï<ƒ·áQÒ·áQÒ·÷ú·Ï<ƒ·d¶ª·­ë¸¸ƒÓ¶†Þ7·÷ú·†Þ7·òÜ$¸†Þ7·÷ú·áQÒ·5ÙL¸­ë¸†Þ7·ÝräµBÄJ7¸ƒÓ¶Ýräµ–¸8>´7&¬Q8·e848¯8–"¥8ãë8ãë8k…Í8œ'9–"¥8ãë848¯8»iÃ8»iÃ8:›848¯8»iÃ8–"¥8»iÃ8ßï†8·e8ßï†8:›8ßï†8Dþ8–"¥848¯8ßï†8Dþ8rÈy8rÈy8&¬Q8BÄJ7Œ»Œ7BÄJ7¸ƒÓ¶¬)8>´7ÝräµØÎ8·e8–¸8ßï†8–¸8>´7Ýräµ¥àÛ7ØÎ8BÄJ7~ù6Ýräµ÷ú·áQÒ·÷ú·Ï<ƒ·5ÙL¸÷ú·5ÙL¸d¶ª·5ÙL¸aᶸ5ÙL¸$„„¸‚â`¸ä‘Ž¸÷ú·ä‘Ž¸­ë¸Ï<ƒ·d¶ª·Ýräµ>´7>´7–¸8Œ»Œ7:<6¥àÛ7?¨=8 \ No newline at end of file diff --git a/test/ex12_sounder_xyz.d3t b/test/ex12_sounder_xyz.d3t new file mode 100644 index 0000000..6eee3b7 --- /dev/null +++ b/test/ex12_sounder_xyz.d3t @@ -0,0 +1,72 @@ +|Sx||50| + +|Hx|1|3566| + + + + +

SCET %{RANGE}

+
+ + + +
+ + + +

cΔt/2, Apparent altitude (km)

+
+ + + + + + + + + +
+ + + +

Frequency (MHz)

+
+ + + + 1.09400e-01; 1.20500e-01; 1.31200e-01; 1.42300e-01; 1.53000e-01; 1.75200e-01; 1.85900e-01; 1.97000e-01; + 2.07600e-01; 2.18800e-01; 2.29900e-01; 2.40500e-01; 2.51700e-01; 2.73400e-01; 2.84600e-01; 2.95200e-01; + 3.06300e-01; 3.17000e-01; 3.28100e-01; 3.39200e-01; 3.49900e-01; 3.61000e-01; 3.71700e-01; 3.82800e-01; + 3.93900e-01; 4.04600e-01; 4.15700e-01; 4.26400e-01; 4.37500e-01; 4.48600e-01; 4.59300e-01; 4.70400e-01; + 4.81100e-01; 4.92200e-01; 5.03300e-01; 5.14000e-01; 5.25100e-01; 5.35800e-01; 5.46900e-01; 5.58000e-01; + 5.68700e-01; 5.79800e-01; 6.01600e-01; 6.23400e-01; 6.45200e-01; 6.67400e-01; 6.89200e-01; 7.10900e-01; + 7.32700e-01; 7.54500e-01; 7.76300e-01; 8.08400e-01; 8.20300e-01; 8.42100e-01; 8.63900e-01; 8.85700e-01; + 9.07900e-01; 9.29700e-01; 9.51500e-01; 9.73300e-01; 9.95100e-01; 1.01730e+00; 1.03910e+00; 1.08270e+00; + 1.10440e+00; 1.12670e+00; 1.14850e+00; 1.17020e+00; 1.20230e+00; 1.21380e+00; 1.23600e+00; 1.25780e+00; + 1.27960e+00; 1.32320e+00; 1.34540e+00; 1.36720e+00; 1.38900e+00; 1.41080e+00; 1.43260e+00; 1.45480e+00; + 1.47660e+00; 1.49840e+00; 1.52020e+00; 1.54200e+00; 1.56420e+00; 1.58600e+00; 1.60780e+00; 1.62950e+00; + 1.65130e+00; 1.67350e+00; 1.71710e+00; 1.76070e+00; 1.80470e+00; 1.84830e+00; 1.89230e+00; 1.93590e+00; + 1.97950e+00; 2.02350e+00; 2.06700e+00; 2.11060e+00; 2.15460e+00; 2.19820e+00; 2.24220e+00; 2.28580e+00; + 2.32940e+00; 2.37340e+00; 2.41700e+00; 2.46100e+00; 2.50460e+00; 2.54810e+00; 2.59210e+00; 2.63570e+00; + 2.67970e+00; 2.72330e+00; 2.76690e+00; 2.81090e+00; 2.85450e+00; 2.89850e+00; 2.94210e+00; 2.98560e+00; + 3.02960e+00; 3.07320e+00; 3.11720e+00; 3.16080e+00; 3.20440e+00; 3.24840e+00; 3.29200e+00; 3.33600e+00; + 3.37960e+00; 3.42310e+00; 3.46720e+00; 3.51070e+00; 3.55430e+00; 3.59830e+00; 3.64190e+00; 3.68590e+00; + 3.72950e+00; 3.77310e+00; 3.81710e+00; 3.86070e+00; 3.90470e+00; 3.99180e+00; 4.07940e+00; 4.16700e+00; + 4.25460e+00; 4.34220e+00; 4.42930e+00; 4.51690e+00; 4.60450e+00; 4.69210e+00; 4.77970e+00; 4.86680e+00; + 4.95440e+00; 5.04200e+00; 5.12960e+00; 5.21680e+00; 5.30430e+00; 5.39190e+00; 5.47950e+00; 5.50130e+00 + + +
+ + + +

Spectral Density (V!a2!nm!a-2!nHz!a-1!n)

+
+ + + +
+
+|Pd|1|153636|2012-12-21T15:06:40.596 1.5404e+03 1.7882e-14 1.1964e-14 4.3845e-15 1.9897e-15 5.8294e-16 5.5629e-15 3.6921e-16 5.1378e-16 5.3454e-15 2.7233e-15 1.1994e-15 8.0604e-16 4.7716e-15 3.9284e-15 2.8748e-15 2.0690e-14 2.5603e-16 2.7896e-14 4.0383e-14 4.3642e-14 4.0472e-15 1.7055e-16 1.2781e-15 1.8675e-15 2.5219e-15 7.1005e-15 6.3852e-16 1.1482e-14 7.6976e-15 1.2768e-15 2.1475e-15 4.0420e-15 2.9598e-15 1.0416e-15 2.3144e-16 1.8417e-15 3.0793e-16 1.7931e-18 2.7420e-15 2.4696e-15 1.7503e-15 9.3758e-16 1.2735e-15 1.8525e-15 9.4337e-16 2.1681e-15 2.7481e-15 3.1339e-16 2.5059e-15 1.6063e-15 1.5660e-15 5.8638e-16 2.7318e-16 2.0322e-15 8.5845e-16 6.4143e-16 1.3470e-15 1.0353e-15 1.5410e-15 1.8740e-16 9.5311e-16 1.4535e-15 8.7838e-16 9.2256e-16 2.8626e-16 5.6984e-17 1.1092e-16 5.9016e-16 7.0918e-16 7.3241e-17 1.2930e-16 2.3816e-16 3.6356e-16 9.3854e-15 3.9353e-15 2.1990e-15 6.9923e-15 2.2491e-15 3.7620e-15 3.4977e-15 1.7777e-15 3.2740e-15 3.3084e-15 3.7573e-15 2.9646e-15 3.1670e-15 4.5478e-15 2.9797e-15 3.4170e-15 1.2962e-15 1.0469e-15 2.3075e-15 2.0364e-15 2.3987e-15 2.0311e-15 2.0579e-15 1.3732e-15 1.1851e-15 1.2204e-15 6.1086e-16 1.4595e-15 4.7559e-16 9.8597e-16 1.1024e-15 4.3125e-18 6.2496e-17 2.5261e-16 6.5043e-16 1.0332e-15 1.5184e-15 1.2051e-15 5.7103e-16 1.1893e-15 3.8463e-16 6.0035e-16 8.8018e-16 5.9852e-16 5.8087e-16 6.1402e-16 4.1762e-16 1.8428e-16 4.7950e-16 3.4017e-16 6.1230e-16 5.0094e-16 4.5369e-16 2.8062e-16 2.0718e-16 4.0667e-16 2.0605e-16 4.3946e-16 3.4484e-16 1.1555e-16 3.1252e-16 2.1677e-16 7.7106e-17 1.4205e-16 3.8719e-16 7.7095e-17 1.8892e-16 1.5261e-16 1.7052e-16 4.4066e-17 2.1766e-17 6.0927e-17 3.4405e-17 2.5728e-17 5.1722e-18 6.1049e-17 4.7752e-17 2.3127e-17 2.4941e-17 3.6204e-17 3.0905e-17 1.8696e-17 3.1598e-17 8.7993e-17 1.3869e-16 6.9334e-17 9.6476e-17 1.3146e-15 5.7769e-16 4.8248e-16 5.5534e-16 7.2950e-17 4.7076e-16 3.2168e-15 4.0706e-15 1.5309e-16 3.4491e-18 1.3375e-16 1.0703e-15 1.6816e-16 7.8466e-16 2.6654e-16 3.7362e-16 5.1629e-16 1.8561e-15 3.8575e-16 1.2777e-15 3.3622e-16 4.4221e-16 1.6233e-16 2.7263e-18 4.3266e-17 1.4865e-16 6.4796e-16 8.4959e-16 1.5399e-15 1.2163e-15 6.3516e-17 1.5516e-17 1.6421e-16 9.5209e-17 2.9235e-16 2.7609e-17 2.8041e-16 1.8469e-16 2.6159e-16 9.7294e-16 4.8800e-16 9.9472e-17 1.4353e-16 4.4261e-16 1.3087e-16 3.6772e-16 1.8921e-16 5.5602e-16 1.8054e-16 4.9836e-17 2.9031e-16 1.1550e-16 1.2965e-16 8.6273e-17 1.2928e-16 1.2936e-16 6.8200e-17 6.4552e-16 1.8566e-16 2.6771e-17 7.7090e-17 6.7429e-17 1.3137e-15 2.3483e-16 1.6102e-16 4.0839e-16 3.1510e-22 1.9314e-16 4.7279e-16 3.4179e-16 1.5516e-16 3.9694e-16 3.7754e-16 2.7799e-16 1.3421e-16 9.5908e-17 1.2045e-16 9.2057e-17 1.0534e-16 2.5559e-17 2.1232e-16 3.3623e-16 1.9196e-16 1.8647e-17 2.3724e-16 8.8237e-16 1.2316e-16 7.6221e-17 1.0934e-15 2.4588e-17 4.3579e-16 2.3493e-16 3.0520e-16 5.3303e-17 1.2814e-16 1.2505e-16 4.3053e-17 1.5850e-16 1.2967e-17 4.7656e-17 1.5883e-16 1.2701e-17 3.8883e-17 1.5172e-16 4.4921e-23 4.6500e-23 9.5498e-17 1.1187e-17 2.2322e-17 7.3724e-17 1.1854e-16 1.6351e-17 1.6972e-17 2.1946e-17 8.8449e-18 2.0589e-17 1.3630e-16 1.1886e-16 5.7535e-17 2.5002e-17 6.7091e-17 4.0244e-17 3.9251e-17 4.3052e-17 1.8785e-17 3.7214e-17 2.6429e-17 4.5369e-18 1.2681e-16 2.3775e-17 5.6846e-17 2.8042e-17 1.9987e-17 3.1585e-17 1.9075e-16 4.3927e-17 1.3411e-23 3.0598e-17 2.3829e-17 6.5258e-17 6.7147e-18 1.2310e-16 1.6932e-16 6.2578e-17 6.2408e-17 7.2807e-18 9.5485e-18 2.9555e-17 7.2688e-17 2.5842e-17 3.9913e-17 4.6393e-24 1.5406e-17 3.7385e-18 9.6597e-18 1.5589e-17 1.1578e-18 8.3368e-18 2.2011e-18 3.8082e-18 8.7981e-17 3.7826e-16 8.7842e-16 1.5847e-16 1.3330e-16 4.9873e-17 8.5057e-17 1.2793e-17 5.4675e-17 2.0152e-16 8.8266e-17 1.2553e-16 3.9548e-16 3.2335e-16 5.7116e-18 7.9014e-18 1.4145e-17 9.7180e-17 9.2579e-16 6.2495e-17 3.5714e-16 4.6292e-17 2.1359e-18 9.8147e-18 5.8999e-18 3.3119e-17 1.1157e-17 9.3671e-18 6.2052e-18 3.3630e-17 3.5952e-17 8.5339e-17 2.0763e-16 1.7479e-16 4.3091e-16 3.2481e-18 3.6298e-16 1.1297e-16 7.5277e-18 8.4348e-17 3.0046e-16 3.7249e-16 1.5948e-17 1.4174e-16 7.4161e-16 2.6476e-17 3.7221e-16 6.3689e-16 5.4162e-17 1.0351e-16 2.2080e-16 2.6209e-16 2.7781e-17 2.3006e-16 2.7408e-16 8.1931e-16 3.4668e-16 5.2981e-16 4.3321e-17 1.2047e-16 1.7520e-16 1.4235e-16 1.4769e-16 9.2256e-17 8.9455e-18 1.8045e-16 4.7392e-16 7.0819e-16 1.0638e-16 1.5869e-16 1.1637e-16 3.4402e-16 7.2712e-16 4.8457e-16 7.5974e-16 2.6945e-16 1.2905e-16 1.1089e-16 3.3224e-16 2.4773e-16 1.1774e-16 1.5179e-16 1.0351e-16 2.5360e-16 2.9793e-16 5.7208e-23 1.1245e-16 4.0769e-17 1.7523e-17 3.3195e-16 9.2020e-17 2.7670e-16 1.8277e-16 1.8989e-16 5.3820e-16 1.9452e-16 2.7910e-16 5.5257e-17 8.6448e-18 2.5994e-17 1.7171e-17 1.5524e-17 2.3608e-17 3.7581e-17 1.4375e-17 7.4400e-18 8.4716e-17 4.3149e-17 1.1002e-16 6.9470e-17 4.1158e-23 1.6225e-16 4.8491e-17 1.1320e-16 3.6485e-17 7.9268e-17 4.1481e-17 3.2590e-17 2.9475e-23 9.2599e-19 2.5047e-17 2.5688e-17 2.5554e-23 8.6105e-17 5.0094e-17 6.8093e-17 1.0494e-16 3.5539e-17 2.7694e-17 5.7636e-18 1.3118e-17 2.9558e-17 5.9337e-17 1.1082e-17 1.1221e-17 2.5328e-16 3.3044e-17 8.2380e-18 6.3078e-18 1.3704e-17 1.4681e-16 6.6344e-17 2.1707e-17 8.3438e-18 2.1242e-17 2.5411e-17 6.9625e-17 1.4778e-19 6.8845e-17 1.5281e-17 8.7037e-18 8.9075e-19 2.6961e-18 7.4770e-19 1.5580e-18 3.2441e-17 5.9627e-17 1.2884e-17 1.4307e-17 5.0777e-18 2.6540e-16 3.4734e-16 7.9007e-16 1.6344e-17 2.5533e-17 1.6512e-17 2.2243e-16 1.3288e-16 1.3896e-16 1.8526e-16 8.2309e-17 4.1443e-17 7.7101e-17 4.9941e-16 1.1518e-16 5.4181e-17 1.8389e-17 5.9668e-16 9.2244e-16 3.8192e-16 3.9063e-17 1.2182e-18 1.3349e-23 3.2716e-18 1.9666e-18 8.4722e-17 1.3732e-17 1.0304e-17 2.0684e-17 4.8203e-17 1.5819e-16 4.2670e-17 3.5284e-17 1.7479e-16 4.0807e-16 1.5266e-16 5.1781e-16 4.6621e-17 5.0812e-17 2.4520e-16 5.9084e-16 1.1429e-16 1.5037e-16 3.6056e-16 8.1795e-18 5.8835e-17 2.2022e-16 1.9545e-16 8.3048e-17 1.0351e-16 3.6800e-17 3.5094e-16 2.5003e-16 3.3551e-16 6.7228e-17 1.8327e-16 5.6833e-17 1.0962e-16 3.6514e-16 1.0039e-16 2.8733e-16 3.0718e-16 5.4413e-17 1.1742e-16 1.5207e-16 1.2347e-16 2.9242e-16 2.7898e-16 6.6190e-16 3.7841e-16 1.5516e-16 2.6463e-17 2.3771e-16 1.1069e-15 1.1025e-16 2.2607e-16 2.1078e-16 1.3599e-16 1.1345e-16 2.3986e-16 9.6510e-18 3.2663e-17 9.4097e-17 9.1369e-17 1.4897e-16 6.2059e-16 8.0319e-17 3.1020e-16 2.2429e-16 3.7234e-16 3.4724e-18 2.5059e-16 1.1553e-16 8.6618e-17 1.6819e-16 1.8526e-17 5.9383e-17 1.5559e-16 4.8987e-17 3.3359e-16 1.5454e-16 4.2337e-18 3.1940e-17 2.7699e-16 1.5812e-17 2.3808e-17 7.7015e-18 6.3924e-18 1.2596e-16 1.1484e-16 3.5560e-17 1.7106e-16 3.2004e-16 2.5411e-17 2.1449e-16 3.0883e-18 9.9753e-17 3.8341e-18 9.6207e-17 1.3705e-16 1.8696e-16 1.5670e-16 3.8433e-17 1.2756e-16 1.1741e-17 2.3753e-17 2.6429e-17 5.5198e-17 1.1515e-16 2.5216e-17 2.1864e-18 1.0610e-16 1.9363e-17 7.8131e-17 7.0896e-17 3.5983e-17 2.4461e-17 3.7660e-17 1.7171e-17 7.1458e-17 4.6392e-17 9.5919e-18 9.2256e-17 5.4416e-17 6.7513e-18 1.4676e-16 4.8804e-17 2.2166e-17 9.3989e-17 6.5729e-17 1.1190e-17 2.5832e-17 3.8515e-19 9.3711e-17 2.9602e-17 1.6852e-17 1.0999e-17 1.7128e-16 1.2106e-17 1.1425e-17 9.8888e-17 1.3882e-16 2.6687e-16 2.8425e-16 8.7540e-17 1.6209e-16 2.8603e-17 6.8091e-17 3.0982e-16 3.3998e-17 2.8700e-17 1.8139e-16 1.0768e-16 7.6181e-18 8.5674e-18 3.4992e-17 4.9508e-17 2.1574e-16 6.4738e-16 6.3190e-16 1.2137e-16 2.9643e-17 8.5435e-19 6.5431e-18 1.2455e-17 3.8510e-17 2.5747e-18 4.3089e-17 8.9975e-17 4.4840e-18 4.4341e-17 1.7068e-16 2.8091e-16 3.1121e-16 1.7815e-16 5.8466e-17 7.8790e-16 2.8690e-16 7.5277e-17 3.2562e-16 3.5491e-16 2.1164e-18 1.7998e-16 5.8186e-16 1.1260e-15 2.6476e-17 3.4119e-16 1.4490e-16 3.2858e-16 6.1337e-17 5.6835e-16 1.5548e-16 3.2412e-17 1.4379e-17 9.3084e-17 2.9646e-16 2.1597e-16 8.5258e-17 2.1042e-16 2.0078e-17 2.0324e-16 1.4235e-16 6.9959e-17 1.7613e-16 1.6996e-16 2.0894e-16 4.1342e-16 7.5111e-17 2.7185e-16 1.2207e-16 1.0344e-16 4.2340e-16 1.8178e-16 1.3007e-16 1.3421e-16 2.2835e-17 1.6131e-16 1.3809e-16 1.8233e-17 1.8285e-16 1.0230e-16 1.3641e-16 7.1137e-16 3.4869e-16 4.1564e-16 6.0777e-16 1.6242e-16 1.2053e-16 1.3142e-16 1.0714e-16 1.9098e-16 1.7228e-16 4.8452e-16 3.8312e-17 4.6452e-17 1.4821e-16 8.9075e-18 1.8613e-16 2.2332e-16 1.2708e-16 7.2975e-17 2.6814e-17 9.7208e-18 1.0161e-16 4.4921e-23 4.6500e-23 3.6505e-16 5.7532e-17 2.6627e-16 3.1049e-16 6.0585e-17 1.0691e-16 5.2128e-17 5.5443e-17 1.0061e-16 4.1178e-18 2.9630e-18 9.5853e-18 9.3377e-17 2.1298e-17 1.2524e-16 1.6098e-16 1.0467e-16 2.7107e-17 1.6437e-16 2.2962e-17 1.3215e-17 1.7467e-16 6.7778e-17 7.2045e-19 8.8913e-17 5.7599e-17 1.5615e-17 2.4049e-16 3.3153e-17 3.7385e-18 2.1457e-18 3.9229e-18 7.0087e-19 5.7753e-17 5.7685e-17 5.1157e-17 1.4544e-17 3.3194e-17 5.3352e-17 6.4813e-17 6.1270e-17 1.4571e-16 1.7348e-17 1.1123e-17 2.2257e-17 1.4846e-17 2.2146e-17 5.2339e-18 1.3711e-17 5.6035e-17 3.4734e-18 4.3200e-17 2.3111e-17 8.8859e-18 4.1446e-17 2.4975e-16 1.1344e-16 1.4568e-17 6.6318e-17 8.9637e-17 1.3135e-16 1.8405e-16 7.7911e-17 2.2123e-16 1.5704e-17 1.6818e-16 3.1239e-17 2.7171e-16 5.7116e-18 1.0046e-16 6.3653e-17 1.1467e-16 1.0063e-16 3.4720e-17 5.5804e-18 5.6850e-18 1.0679e-17 2.6718e-17 1.3111e-18 1.9255e-16 4.3770e-17 3.7468e-18 1.0342e-18 3.3630e-18 9.4674e-17 3.3618e-17 3.0263e-16 9.3788e-17 1.0050e-16 1.2993e-16 9.8057e-17 2.0441e-16 1.1103e-16 3.1581e-16 4.0129e-16 8.0424e-17 8.8852e-17 1.2682e-16 2.0994e-16 1.1767e-17 2.8226e-16 1.0531e-22 1.6971e-16 1.9551e-16 1.3493e-16 1.1106e-16 4.7692e-16 1.0065e-16 2.4305e-16 3.6653e-16 8.2408e-16 1.3398e-16 3.0944e-17 2.8779e-16 1.2615e-16 4.3454e-16 2.4097e-16 5.0322e-17 8.9455e-18 6.6482e-17 8.8733e-16 5.3651e-17 1.5366e-16 2.5634e-16 2.3274e-16 8.3357e-16 1.5381e-16 1.7853e-16 8.1486e-17 9.8191e-17 1.7852e-16 1.4645e-16 1.4181e-17 4.6990e-16 1.7758e-16 2.3056e-16 6.0222e-17 1.7901e-16 4.7817e-17 6.7734e-17 1.1066e-16 5.8849e-16 7.7101e-17 1.8266e-16 1.1459e-16 2.9584e-17 4.3107e-17 1.0827e-16 3.1715e-16 1.0807e-16 1.9300e-17 2.1230e-16 1.7146e-16 4.6212e-17 2.7187e-17 2.7519e-16 1.6386e-16 2.6585e-16 4.4921e-23 1.6368e-17 7.7015e-17 7.6709e-17 2.3916e-17 4.2958e-16 4.1158e-23 3.7733e-18 1.0911e-17 5.1978e-17 1.1056e-18 6.7944e-17 8.9876e-17 2.2046e-17 2.8296e-17 2.5002e-17 6.2619e-18 5.0519e-17 1.9625e-17 1.2677e-16 1.8785e-17 6.0175e-17 4.8972e-17 6.5784e-17 2.0771e-16 9.3658e-18 7.9438e-17 7.5789e-18 7.5577e-17 1.9948e-17 4.7434e-17 7.1966e-17 3.7336e-17 1.3730e-17 2.8035e-17 1.7946e-17 1.1293e-17 2.1182e-16 1.6932e-17 1.3822e-16 1.0341e-16 1.9415e-17 6.8962e-18 5.6451e-17 4.3920e-18 2.5955e-17 3.8669e-17 4.6022e-18 2.4265e-17 1.1465e-17 9.0365e-18 5.4771e-18 2.7208e-17 2.0463e-17 8.8043e-18 6.3471e-18 2.1814e-18 4.4797e-16 2.8650e-16 5.1875e-17 2.3344e-16 3.5720e-16 7.4896e-17 2.0345e-16 4.5562e-17 6.5532e-17 8.1768e-17 6.6069e-18 1.9342e-16 1.6150e-15 1.7135e-17 4.6280e-17 3.6777e-17 3.8872e-16 1.0482e-22 1.0833e-15 2.7902e-17 2.3958e-17 1.2388e-17 1.4722e-17 2.0486e-23 2.5186e-16 1.3732e-17 1.3114e-17 4.4471e-17 2.2420e-18 4.1944e-17 4.3704e-16 7.0568e-17 2.1316e-17 1.6140e-16 1.1693e-16 1.2558e-16 1.4345e-16 1.3926e-16 4.8255e-16 1.9762e-16 3.6191e-16 1.2530e-16 5.4705e-17 2.0449e-16 8.2369e-17 4.6526e-17 1.9545e-16 1.8054e-17 9.5840e-17 2.2489e-16 3.7315e-16 4.6302e-17 1.5817e-16 9.3084e-17 4.3122e-17 3.4100e-17 4.8719e-17 4.0846e-16 6.2243e-16 1.0512e-16 1.7232e-16 6.2186e-16 2.4322e-16 3.9360e-16 2.8492e-17 4.0333e-16 2.1460e-17 9.4557e-17 1.2207e-17 1.5516e-16 1.0585e-16 1.6780e-16 3.9021e-16 2.5165e-16 3.2198e-16 5.5921e-17 5.4816e-16 1.8840e-16 1.3566e-16 1.0230e-16 5.7640e-18 1.6937e-17 1.3426e-16 1.3609e-16 2.5629e-17 1.0352e-16 3.2970e-16 1.4018e-17 8.7816e-17 9.5492e-17 3.8285e-17 5.5177e-17 2.5819e-16 1.1373e-16 5.7122e-17 4.1568e-17 1.0034e-16 3.1698e-17 3.6103e-17 3.0478e-16 5.5462e-16 3.4717e-17 5.5676e-18 1.4375e-18 3.4224e-17 9.7039e-17 3.3560e-17 1.8495e-16 1.1342e-17 4.8204e-16 6.0373e-17 2.4246e-17 7.0459e-17 1.0724e-16 5.1472e-18 1.1062e-16 2.5880e-17 1.6978e-17 2.5928e-17 3.6676e-17 1.3700e-17 6.6235e-17 6.4579e-17 2.8960e-17 8.7096e-18 7.7733e-19 1.5123e-18 6.9235e-17 3.5302e-17 3.2796e-17 2.1221e-17 2.6233e-17 8.8659e-17 6.1205e-17 1.1029e-16 1.0729e-17 2.4714e-17 9.8121e-17 1.2464e-16 7.1115e-17 2.7710e-17 1.0875e-16 1.3060e-17 9.2213e-18 3.3691e-17 6.8829e-17 8.7188e-18 2.4485e-17 3.5505e-17 7.4603e-19 9.3529e-18 8.6660e-18 8.7231e-18 3.1472e-17 3.3705e-18 1.8091e-23 1.8947e-17 1.6508e-17 5.4585e-17 7.8529e-17 1.7943e-16 2.4178e-16 7.1772e-17 1.5916e-16 4.6166e-17 1.8479e-16 8.5010e-17 1.2712e-16 3.9418e-17 3.5198e-17 7.8682e-17 4.6925e-16 7.4234e-16 4.8548e-17 1.6141e-16 2.2349e-16 3.4985e-16 7.7149e-17 7.4994e-16 1.2835e-16 2.0304e-17 7.2620e-18 4.1985e-17 1.6192e-16 7.7020e-17 1.1157e-17 3.9342e-17 4.1368e-18 4.5961e-17 2.8762e-17 1.6809e-17 2.3206e-16 9.9472e-18 1.9033e-16 2.1275e-16 9.9778e-17 8.6069e-16 1.7502e-16 6.4928e-16 1.2341e-15 4.6561e-17 2.4150e-16 3.0088e-16 1.0933e-15 1.0002e-16 6.8238e-17 3.0665e-16 2.1665e-17 1.3801e-16 2.6987e-16 8.3959e-16 4.6302e-18 1.7255e-16 3.1028e-17 2.2100e-16 1.1367e-16 2.1923e-16 2.4755e-17 6.0235e-17 3.0135e-16 1.4984e-17 6.2186e-17 1.0903e-16 5.3673e-16 1.5196e-16 1.2100e-16 5.4724e-16 9.4557e-17 2.0752e-16 1.2930e-16 2.6463e-17 9.9280e-16 4.8457e-16 2.8280e-16 1.3473e-16 5.0759e-16 1.1298e-16 1.9853e-16 9.8305e-18 2.3935e-16 4.2269e-17 5.3447e-16 3.3564e-17 3.1265e-17 3.7528e-16 4.4978e-16 1.1522e-16 7.1844e-17 1.5983e-16 4.5142e-17 6.9435e-16 2.0691e-17 7.3292e-17 2.1304e-16 1.2505e-16 7.1260e-17 1.8904e-16 1.3832e-16 2.7005e-16 4.8221e-16 1.3548e-16 9.0265e-17 3.3405e-17 2.8750e-18 1.0416e-17 1.8484e-17 1.8059e-16 8.2910e-17 3.8280e-17 5.0838e-16 1.0314e-16 2.4246e-17 6.5838e-17 7.7393e-18 9.7797e-17 1.7086e-16 7.2848e-17 4.8103e-17 2.0186e-16 1.3418e-17 2.1406e-17 1.2593e-16 1.5148e-17 1.6437e-17 4.0381e-17 2.6429e-17 4.0832e-17 4.7372e-17 9.2218e-17 1.2535e-16 3.0315e-17 4.9968e-18 2.7152e-17 1.4128e-16 8.7387e-17 5.9651e-17 1.7653e-17 3.5043e-18 8.8098e-18 7.9050e-17 6.4479e-17 1.2655e-16 6.6387e-17 4.1825e-17 5.7104e-19 8.4611e-17 4.5811e-17 3.4313e-24 2.6292e-17 1.4697e-16 1.4400e-17 9.6288e-19 3.7385e-18 8.7249e-18 5.8984e-18 2.3156e-18 4.3957e-17 2.6413e-17 1.7772e-17 2.6903e-17 2.8491e-16 7.8389e-16 6.9285e-17 4.3472e-16 2.6958e-18 2.9657e-16 2.8062e-16 5.6953e-17 2.0744e-16 2.3176e-16 1.1052e-16 3.3167e-16 4.5709e-17 1.5231e-16 7.9014e-18 7.6383e-17 1.3022e-16 8.3858e-17 8.8188e-16 8.0916e-17 2.2740e-17 9.8250e-18 2.7263e-17 7.7355e-17 7.3939e-17 1.7165e-17 3.0911e-17 2.9992e-17 1.9057e-17 3.9547e-17 1.0086e-16 1.3571e-16 3.8368e-17 4.1264e-16 1.4617e-16 2.8041e-16 2.1338e-16 9.7861e-17 2.8247e-16 6.3016e-23 1.7990e-16 1.4353e-16 3.1082e-16 3.1627e-16 3.2359e-17 2.6365e-16 3.3698e-17 1.8054e-17 8.0505e-17 1.7991e-16 5.3307e-17 1.4817e-16 2.4444e-16 3.6199e-16 8.0853e-17 5.6833e-17 2.8013e-16 1.9340e-22 3.3464e-17 2.1901e-22 5.6940e-16 2.9538e-16 2.1806e-16 7.3353e-16 3.5140e-16 1.7142e-16 5.3651e-16 1.0638e-16 1.0986e-16 1.0344e-16 7.6742e-16 4.3697e-22 2.2953e-17 7.1660e-16 2.4890e-16 3.2262e-16 4.1844e-18 2.1676e-16 2.3593e-17 1.5249e-16 1.1528e-16 3.7262e-16 9.9014e-16 8.2759e-17 8.0731e-16 1.3386e-16 3.0666e-16 2.5759e-16 3.3546e-16 3.4203e-16 9.3972e-17 3.1382e-16 7.7290e-16 1.7620e-17 1.4821e-16 2.2863e-16 5.9910e-16 4.3224e-18 2.1662e-17 3.4341e-17 1.1713e-16 9.5819e-17 5.1500e-17 4.4921e-23 1.7856e-17 1.2784e-16 5.1139e-17 3.8266e-17 3.7713e-16 1.4224e-16 7.2951e-17 9.2134e-17 2.8876e-17 2.5650e-16 1.2765e-16 2.5679e-17 7.6682e-17 1.6506e-16 2.2779e-16 4.8306e-17 3.4250e-17 8.3407e-17 7.9727e-19 1.7220e-17 6.0967e-17 1.3836e-16 1.8147e-17 5.3931e-17 1.2968e-17 3.2067e-17 8.4125e-17 3.1230e-18 1.5515e-17 3.1112e-17 1.4954e-17 5.2785e-17 8.6303e-18 1.7872e-17 1.6184e-16 4.3096e-16 4.0766e-17 2.7134e-17 1.6869e-17 9.2378e-17 1.4419e-17 4.0183e-17 4.8027e-17 3.5136e-18 1.6517e-17 2.1137e-17 4.6393e-24 2.3494e-17 1.2462e-18 1.3087e-17 3.4548e-17 1.3315e-17 3.8652e-17 1.2106e-17 1.2694e-17 1.0034e-16 1.4912e-16 4.1449e-17 1.0197e-16 5.8460e-16 1.0109e-17 7.7907e-17 2.0221e-16 1.6448e-16 1.2318e-17 2.5667e-16 2.2043e-16 2.2599e-17 1.7555e-15 9.5193e-17 1.9189e-17 1.0326e-16 6.0834e-16 1.0667e-15 1.5277e-16 1.1161e-17 1.2182e-17 7.2620e-18 4.6892e-17 5.4411e-17 8.6262e-17 3.2613e-17 1.0959e-16 6.4120e-17 5.7171e-17 4.9135e-17 6.4651e-18 4.2069e-17 2.5579e-16 1.5836e-16 5.3594e-17 3.1309e-16 3.0124e-16 5.4576e-17 2.3735e-16 1.3712e-15 1.9048e-17 2.2099e-16 1.4174e-16 1.2542e-15 1.0002e-16 2.1712e-17 8.3571e-16 5.0551e-16 3.0669e-17 5.3155e-17 1.9546e-16 5.3248e-16 6.2309e-17 2.5857e-16 7.0073e-17 1.8187e-16 6.0898e-17 1.2378e-17 9.3698e-17 3.0135e-16 3.8959e-16 4.1198e-16 1.0064e-16 2.2364e-16 2.2794e-16 4.7392e-16 6.4381e-17 2.3639e-17 1.3428e-16 3.2325e-16 2.9109e-16 5.0339e-16 2.0046e-15 5.5123e-17 3.3568e-16 3.4198e-16 2.0922e-17 1.1345e-16 6.4881e-17 1.3318e-16 1.8445e-16 2.6723e-16 7.4587e-18 1.1035e-17 5.3089e-16 5.2296e-16 1.5953e-17 3.5396e-16 1.0538e-17 5.4257e-23 8.7011e-18 2.5864e-16 1.1660e-17 1.1853e-16 3.8596e-17 1.0392e-17 6.1074e-17 4.6106e-17 3.0471e-16 4.8650e-17 2.1169e-17 2.2497e-16 9.7432e-18 1.4375e-18 2.9760e-17 2.7725e-16 1.3744e-16 4.7833e-17 2.8355e-17 1.9756e-17 1.9999e-16 5.9402e-17 4.8513e-17 1.3820e-16 5.8678e-17 1.2839e-17 8.2433e-17 1.1790e-16 2.7780e-18 7.1564e-17 1.0532e-16 8.4225e-17 1.1481e-16 8.1403e-17 6.2551e-17 1.8034e-16 1.4367e-17 2.5726e-16 8.4293e-17 1.4576e-17 3.9410e-17 5.8713e-17 6.9265e-17 9.1807e-18 9.5798e-17 1.6737e-17 1.3612e-16 2.8035e-18 3.5239e-17 1.6115e-16 6.1282e-18 3.1910e-17 6.9834e-17 1.8607e-17 5.9388e-17 4.5621e-17 1.4778e-18 1.9105e-17 6.9999e-17 1.1066e-17 3.8599e-18 2.8887e-18 6.2308e-18 1.5269e-17 6.3197e-18 5.7890e-19 2.6526e-17 1.1005e-17 2.9197e-17 1.8178e-17 4.0554e-16 2.3706e-16 4.6545e-17 4.1250e-16 8.4919e-17 6.6239e-17 9.0375e-17 4.3284e-17 1.2318e-16 3.3357e-16 5.2855e-17 1.1127e-15 1.9528e-15 6.4731e-17 1.0610e-16 5.6580e-18 3.7123e-16 8.3858e-16 7.9855e-16 1.1161e-17 1.0152e-17 2.1359e-18 1.7039e-23 8.6532e-17 7.7790e-17 2.5747e-18 1.5924e-17 8.2736e-18 2.5783e-17 2.3968e-17 6.9823e-17 1.5471e-16 2.8421e-18 5.8775e-16 3.8166e-16 1.0322e-16 3.8910e-16 2.6347e-17 4.4332e-16 2.8433e-16 2.0953e-16 1.8910e-16 8.9766e-16 9.8154e-17 2.2946e-16 1.3337e-16 1.5838e-16 6.4995e-17 4.9836e-17 2.2489e-16 6.6634e-17 2.3151e-17 6.2309e-17 1.1377e-16 3.2880e-16 7.3883e-17 2.1314e-16 1.9185e-16 6.0235e-17 1.4016e-17 1.7981e-16 6.1409e-16 7.5483e-17 4.9200e-16 3.6090e-16 2.9242e-16 7.5111e-17 6.1462e-16 8.5448e-17 9.0511e-17 3.9694e-17 3.7754e-16 1.5787e-15 1.3901e-16 3.0827e-16 2.8391e-16 4.7702e-16 4.3353e-16 5.3085e-17 1.3511e-17 2.2672e-16 2.5030e-16 5.5940e-18 8.2759e-17 6.7734e-17 1.4279e-17 2.3043e-17 9.6376e-17 2.5467e-16 1.3195e-16 3.5152e-16 3.1899e-16 3.1649e-16 1.2974e-16 3.4119e-16 4.6022e-17 4.0716e-17 1.0086e-16 6.4986e-17 8.5853e-18 2.9636e-17 3.7495e-17 3.2849e-16 1.4375e-18 5.9520e-18 9.2418e-18 1.2785e-17 2.8700e-17 9.0737e-17 3.1346e-16 1.8992e-16 1.8427e-16 2.0791e-17 1.4815e-16 6.1767e-17 1.6296e-16 8.2433e-17 1.4148e-17 1.2964e-17 3.0415e-17 6.9357e-17 4.0886e-18 5.5011e-17 1.7063e-16 2.2962e-17 6.9182e-17 5.5198e-17 2.6237e-17 5.7636e-18 2.2593e-17 2.0463e-17 8.2448e-17 1.1193e-16 1.4281e-17 3.1310e-17 9.8703e-17 1.0749e-16 1.6681e-16 2.5451e-17 1.2209e-17 3.7302e-17 5.3183e-17 1.2806e-16 3.3921e-17 9.2365e-17 4.2438e-18 2.3792e-17 6.4563e-17 3.5056e-17 6.2169e-18 1.4549e-17 4.8337e-17 3.4893e-18 5.2973e-18 1.0533e-17 1.7367e-17 2.2737e-18 2.2011e-17 8.8859e-18 4.1446e-17 2.9764e-16 1.9270e-17 8.5274e-18 6.5489e-16 1.4827e-17 1.5694e-16 1.9808e-17 1.9546e-16 2.0448e-16 3.5198e-17 7.0273e-17 9.2256e-16 4.3169e-16 3.4269e-17 5.4181e-17 1.1316e-16 2.7405e-16 5.8701e-16 1.4582e-16 1.3951e-18 4.2232e-17 3.1611e-17 7.6336e-18 8.1943e-17 1.1553e-16 5.1494e-18 1.6861e-17 7.6531e-17 1.6815e-17 4.6738e-17 1.5775e-16 4.0169e-16 2.1031e-16 1.6597e-16 9.0948e-17 2.4600e-16 5.7558e-16 8.0923e-17 4.7078e-17 4.7187e-16 1.2487e-16 2.0277e-16 4.7991e-16 2.8628e-16 3.2359e-17 5.6762e-16 1.0109e-17 2.2026e-16 1.1501e-17 6.2560e-16 2.2211e-16 2.7781e-17 1.2941e-16 1.7065e-16 3.1263e-16 5.6833e-18 1.9031e-22 1.2378e-17 3.8818e-16 3.5041e-17 1.4235e-16 5.4413e-17 3.6903e-16 3.5782e-17 5.1286e-16 1.0083e-17 3.5409e-16 4.8461e-16 3.6621e-17 1.2930e-16 1.9847e-16 1.3983e-17 9.6914e-17 1.1983e-17 3.4709e-16 2.6670e-16 8.9965e-17 5.1051e-16 1.5532e-16 2.7023e-17 3.8427e-17 4.2155e-16 4.5871e-16 5.0943e-16 7.5056e-17 4.4621e-16 4.0769e-17 2.0151e-16 1.4577e-16 4.8614e-17 4.3157e-16 6.2074e-17 1.3659e-16 5.1257e-17 5.7122e-17 1.1877e-17 2.9083e-17 3.1698e-17 1.0975e-16 3.3769e-16 1.1290e-16 2.7496e-16 2.5750e-16 5.7500e-18 1.4880e-17 4.8134e-23 3.5158e-17 2.7424e-16 3.1049e-16 2.0414e-16 2.3898e-17 1.0911e-17 2.5411e-17 6.4126e-17 3.1913e-17 4.0494e-17 4.3230e-16 9.4320e-19 1.0001e-16 5.9935e-17 5.2232e-17 2.6167e-17 5.9795e-17 2.7395e-17 1.6944e-16 2.4874e-17 1.9660e-17 5.1016e-18 1.4985e-16 3.3524e-17 1.6522e-16 8.8069e-17 1.6624e-18 1.6066e-16 1.9300e-16 4.0340e-17 1.2161e-17 8.2702e-17 2.8714e-17 1.5444e-16 2.0250e-17 1.3676e-17 7.7996e-17 2.6347e-17 3.7260e-17 5.7026e-18 3.0590e-17 1.5482e-17 6.2920e-18 1.7656e-17 2.9692e-19 1.8102e-17 1.0468e-17 4.9857e-18 8.0049e-18 5.2101e-18 2.1221e-17 3.4392e-23 2.5388e-18 9.3071e-17 7.2742e-17 3.1850e-16 7.7102e-17 2.9876e-16 3.1541e-16 1.6560e-17 4.3991e-16 7.8458e-16 8.3763e-18 1.2238e-16 8.3487e-17 1.1366e-16 8.0159e-16 1.3993e-16 2.8219e-17 3.5363e-17 7.2690e-16 1.6302e-15 6.2495e-17 7.8125e-17 8.1215e-19 2.1359e-18 1.9629e-17 1.9666e-18 4.0821e-17 9.3547e-17 5.6203e-18 1.9650e-17 1.0089e-17 1.3182e-17 1.3059e-16 5.5233e-16 7.2046e-16 1.0811e-16 1.8190e-16 1.2042e-17 7.5490e-16 1.3174e-17 5.0805e-16 2.8433e-16 5.5027e-17 1.2758e-16 2.7601e-16 5.7256e-17 9.1194e-17 1.1476e-16 5.0884e-16 7.2216e-18 3.9486e-16 6.5422e-17 2.7542e-16 6.4824e-17 4.7930e-18 2.1203e-16 2.8029e-16 4.5467e-16 3.6539e-17 1.4234e-16 8.0313e-17 9.8114e-17 2.9968e-16 2.5652e-16 2.0967e-16 7.6037e-16 5.6984e-17 2.6217e-16 6.3308e-16 5.9098e-17 9.7655e-17 2.1981e-16 1.9847e-16 1.8178e-16 1.0457e-16 2.0851e-16 7.7640e-17 1.4841e-16 1.5273e-16 1.0940e-16 6.8813e-17 2.4514e-16 2.3825e-16 3.0299e-16 2.6292e-16 1.3793e-16 1.5377e-16 2.1061e-16 1.0458e-16 1.5245e-16 1.4051e-17 5.9031e-17 3.1324e-17 8.2765e-17 3.3981e-16 1.3135e-16 2.1614e-17 1.6330e-17 1.0470e-16 1.7290e-17 1.4441e-16 8.8715e-17 4.2337e-18 1.6664e-17 4.1757e-18 2.8750e-18 5.9520e-18 1.1398e-16 1.5502e-16 3.0294e-17 1.1484e-16 5.5316e-17 3.9306e-23 4.3642e-17 1.5016e-17 3.6485e-17 1.1427e-16 8.2963e-17 2.8756e-18 1.8864e-17 2.4446e-16 1.6102e-16 8.9051e-17 1.9380e-16 2.2324e-17 6.7314e-17 3.4838e-17 5.4413e-17 1.2174e-16 1.2025e-16 4.1066e-17 1.0932e-17 7.5789e-19 4.7470e-17 4.0451e-17 4.8964e-17 1.4603e-23 3.1328e-17 3.3344e-17 2.2883e-16 1.9349e-16 2.5943e-17 3.1440e-17 4.7105e-17 2.5575e-17 4.8083e-17 1.7702e-17 2.5198e-17 6.3396e-17 4.4579e-17 6.3258e-17 1.0071e-17 3.5482e-17 5.2959e-17 1.0717e-17 2.0566e-17 7.1623e-18 5.7890e-18 5.9115e-17 5.5027e-18 1.9041e-17 2.9085e-18 2.2126e-16 1.8906e-16 5.8270e-17 3.2927e-16 2.0219e-18 6.3229e-17 9.1613e-17 1.1117e-16 2.1631e-16 1.9927e-16 5.1654e-17 2.4061e-16 5.5951e-16 8.4722e-17 1.2416e-17 1.3296e-16 3.8094e-16 6.6751e-16 5.5551e-17 1.5346e-17 2.8425e-18 1.4951e-17 3.9259e-17 1.7306e-16 4.0821e-17 8.5823e-19 4.3089e-17 9.3078e-18 1.4573e-17 2.0373e-17 8.2753e-17 3.2841e-16 1.4637e-16 2.7560e-16 1.8352e-16 3.0965e-17 9.1807e-16 1.4491e-16 1.0789e-16 1.5144e-15 1.9048e-17 7.1196e-23 6.9625e-17 9.1065e-16 1.8533e-16 6.7308e-16 1.9545e-16 1.5165e-16 1.3034e-16 1.9627e-16 4.2646e-16 1.3428e-16 1.7255e-16 4.6542e-17 2.7490e-16 1.3640e-16 4.2020e-16 6.8695e-16 1.3385e-17 7.0082e-18 8.9905e-16 2.7207e-16 1.6774e-17 5.3673e-17 7.5979e-17 2.0167e-16 1.0730e-17 1.4184e-16 6.1034e-17 4.0407e-22 3.3078e-16 2.9365e-16 7.6001e-16 5.0330e-17 4.1560e-16 1.5486e-16 4.1844e-17 3.8288e-16 2.5952e-16 7.5278e-17 3.1510e-16 5.6458e-17 1.4731e-16 1.2322e-16 1.4096e-16 3.6947e-16 5.3177e-17 1.2266e-17 1.6334e-16 5.5038e-16 1.2356e-16 4.1382e-17 1.9989e-17 1.2494e-16 1.5438e-18 3.5630e-17 9.0156e-17 2.5934e-17 4.6212e-17 4.0780e-16 1.2984e-16 5.1381e-17 3.6189e-17 2.8750e-18 1.6368e-17 6.1612e-18 6.5522e-17 2.8700e-17 5.6711e-17 3.9512e-16 4.9934e-16 7.2737e-18 6.8149e-17 3.4550e-23 7.4120e-17 1.6000e-16 2.7797e-17 8.2059e-17 2.5002e-17 4.0255e-17 1.1988e-17 1.0876e-16 3.1891e-18 2.3481e-18 7.0468e-17 1.9278e-16 4.2344e-17 1.4576e-17 1.2104e-16 1.0713e-16 3.8652e-17 3.6227e-17 1.3853e-16 1.8769e-16 5.7012e-17 1.7595e-17 1.9614e-18 1.0583e-16 1.6315e-17 1.0988e-17 8.3130e-17 5.6439e-17 3.1198e-17 4.1167e-17 2.8266e-17 8.6733e-17 3.9604e-17 5.8963e-17 8.2021e-18 8.7037e-19 3.4442e-17 1.9258e-19 5.2339e-18 3.1161e-17 1.3482e-17 5.1522e-17 2.2737e-17 2.0910e-17 1.0155e-17 7.0530e-17 6.4316e-16 3.1232e-16 6.9995e-17 2.0691e-16 2.7295e-17 7.2261e-17 1.5723e-16 1.7769e-16 6.0605e-17 1.7328e-16 1.8019e-18 2.2133e-16 9.6157e-16 8.5674e-18 5.9825e-17 8.4870e-18 1.8270e-16 5.7023e-16 3.8192e-16 4.8828e-17 8.1215e-19 6.1940e-17 1.0905e-17 6.2933e-17 5.1603e-17 1.9739e-17 1.3114e-17 4.4471e-17 3.3630e-18 9.5873e-18 2.1593e-16 1.9542e-16 4.3484e-16 4.8725e-17 1.7215e-16 5.7286e-16 1.8290e-16 9.2215e-17 1.1907e-15 5.4446e-17 5.6509e-16 4.5565e-16 8.2058e-17 1.9903e-16 5.8835e-18 2.9156e-16 1.6512e-16 8.6659e-17 1.5718e-16 4.4978e-17 7.4630e-16 9.7235e-17 3.2113e-16 6.6711e-16 1.7249e-16 7.9567e-17 1.0535e-15 7.1790e-16 1.5393e-16 5.6766e-16 5.7689e-16 5.7522e-16 1.9290e-16 2.3258e-16 3.4191e-16 6.0500e-17 5.3651e-17 2.7185e-16 3.6621e-17 2.1981e-16 3.8371e-16 1.1186e-16 8.4162e-17 2.6363e-16 8.3577e-16 9.0550e-16 5.0841e-16 3.5655e-16 3.9322e-17 3.2814e-17 1.7484e-16 3.6321e-16 1.8274e-16 5.7380e-16 4.1006e-16 8.9243e-18 1.3649e-16 3.7499e-16 4.5489e-16 1.5105e-16 3.4804e-18 2.0001e-16 1.1993e-16 1.3936e-16 3.9986e-16 1.8112e-16 4.9877e-16 4.7546e-17 1.0831e-16 6.0097e-17 1.3689e-16 1.4303e-16 4.3149e-17 4.4921e-23 1.4880e-18 3.6967e-17 2.2373e-17 2.2003e-16 2.4811e-16 1.0668e-16 2.5156e-17 8.3648e-17 2.8876e-17 2.4434e-16 9.4709e-17 7.0123e-17 8.1475e-17 3.1786e-16 7.4079e-17 1.6102e-17 6.8501e-18 1.2348e-16 2.1526e-16 4.6180e-17 7.7594e-17 8.0065e-17 6.0491e-18 3.4982e-17 7.2045e-18 3.9355e-17 5.5326e-17 5.6214e-18 2.1611e-17 2.7542e-17 9.3462e-19 1.1158e-16 1.2004e-16 4.3804e-17 3.7197e-17 1.2178e-16 1.5987e-17 7.7278e-17 1.1083e-16 1.3832e-17 4.1828e-17 5.1191e-17 1.8620e-17 1.0760e-17 3.8202e-18 1.2682e-17 1.5291e-17 1.6176e-17 5.0594e-17 3.8016e-17 5.0558e-18 1.9104e-17 1.6674e-17 1.2106e-17 1.2694e-18 2.8503e-16 1.8004e-16 2.6214e-16 1.0801e-16 3.1037e-16 3.8079e-17 5.5701e-17 1.0771e-16 3.1848e-16 1.2170e-16 1.3917e-16 5.9462e-17 3.8551e-17 1.6379e-15 2.1609e-16 5.9825e-17 9.0528e-17 5.1311e-16 4.1929e-16 1.3888e-17 4.7433e-17 6.9032e-18 9.8250e-18 1.4177e-17 4.0644e-17 6.7778e-17 1.9739e-17 8.4304e-18 2.1718e-17 2.0178e-17 4.7936e-18 2.7153e-17 8.6853e-17 1.9894e-17 6.6845e-16 4.7098e-17 7.8446e-16 4.9131e-16 2.7853e-16 5.0216e-16 1.0304e-15 1.0794e-16 1.3897e-16 2.9342e-16 5.9710e-16 2.9417e-18 3.0707e-16 7.6832e-16 8.6659e-17 1.1501e-16 4.0889e-18 5.7749e-17 1.2965e-16 4.4095e-16 1.2928e-16 1.3475e-16 7.3883e-17 1.4007e-16 1.0521e-16 3.3464e-16 2.8033e-16 1.3486e-16 3.1093e-17 5.0322e-17 2.8626e-16 1.5196e-16 5.9492e-16 3.2190e-17 2.9549e-16 1.2207e-17 2.7153e-16 1.1908e-16 6.9916e-17 1.8108e-16 2.0372e-16 4.3159e-16 3.6564e-17 6.5381e-23 1.7625e-16 1.5729e-17 1.5635e-16 4.2462e-16 2.2583e-17 5.4076e-17 3.8621e-17 6.9198e-16 8.9243e-18 2.1271e-17 4.9064e-17 2.6345e-16 3.2988e-16 1.4966e-16 9.1386e-17 4.8306e-17 9.4505e-17 9.2631e-18 5.7899e-17 2.7919e-16 1.3255e-16 7.7983e-17 5.5375e-16 1.9758e-17 5.5547e-18 2.9230e-17 4.4921e-23 2.3808e-17 5.2370e-17 1.5981e-17 4.7833e-17 6.6635e-17 3.6878e-17 1.1068e-16 4.0005e-17 6.3528e-17 2.0675e-16 4.3237e-17 7.9012e-17 6.3263e-17 3.2069e-17 5.0929e-17 1.0735e-17 2.3119e-17 8.9949e-18 2.0251e-16 5.8704e-17 1.4569e-16 1.3059e-16 1.8828e-16 3.4253e-17 1.6570e-17 6.9235e-17 1.6674e-17 3.9350e-17 3.2139e-17 7.1406e-18 7.3835e-17 1.1587e-17 4.1190e-17 2.1727e-17 1.9904e-17 8.8207e-17 6.5279e-17 4.5585e-18 3.3556e-17 7.5582e-17 1.6846e-17 1.1405e-17 4.7879e-17 1.4603e-17 8.2021e-18 4.9735e-18 9.6498e-18 1.2325e-17 4.2369e-18 3.1161e-18 2.8228e-17 3.2997e-17 2.0463e-17 3.4392e-23 1.3964e-17 5.8169e-18 4.9101e-17 1.8252e-16 5.6494e-17 1.1241e-16 6.4363e-17 1.1328e-16 1.9354e-16 6.1509e-17 1.5028e-16 1.3700e-16 6.4267e-17 1.2296e-16 5.0872e-16 5.7116e-18 3.8378e-17 1.7540e-16 3.6540e-16 5.1321e-16 6.2495e-16 3.3482e-17 8.1215e-19 4.6562e-17 1.7039e-23 4.9166e-17 4.0050e-17 6.8659e-18 2.9975e-17 1.7581e-17 2.6904e-17 1.2703e-16 6.5944e-17 5.4690e-16 4.8884e-16 7.4610e-17 6.1715e-16 6.5716e-16 1.6676e-16 2.6723e-16 7.6697e-16 2.1375e-16 1.1640e-16 6.8348e-18 1.5417e-16 5.7256e-16 2.3534e-17 6.2035e-17 4.7177e-17 3.2497e-16 4.9836e-17 2.3307e-16 1.1994e-16 9.2605e-18 1.9172e-17 1.0343e-16 4.3122e-16 1.9323e-16 3.7757e-16 2.3517e-16 2.0747e-16 2.1901e-22 4.3454e-16 3.1093e-16 6.4580e-16 8.0509e-17 6.4582e-16 1.2100e-16 2.8971e-16 9.1011e-16 1.0986e-16 4.1377e-16 3.1755e-16 4.3697e-22 1.2701e-15 1.0066e-16 3.2426e-16 3.1617e-16 2.5734e-16 6.4016e-16 7.6678e-17 1.4863e-16 9.3377e-16 2.2771e-16 2.1071e-16 2.5563e-16 1.4828e-16 3.9267e-17 1.3649e-16 2.1027e-17 1.7563e-18 2.7259e-16 3.4282e-16 5.6556e-16 1.2160e-16 5.5422e-16 3.3193e-16 1.7073e-16 1.2942e-16 2.0603e-16 3.1049e-16 5.7235e-18 4.4102e-23 3.4717e-17 3.9251e-16 1.4375e-18 1.1904e-17 3.3886e-17 5.9130e-17 1.7220e-16 6.9470e-17 6.1902e-17 1.4213e-16 3.7581e-17 5.1978e-17 2.6424e-16 1.9559e-17 3.4568e-17 9.5853e-18 1.4431e-16 2.2594e-16 3.4887e-17 6.8501e-17 3.8433e-17 4.8633e-17 1.3306e-17 1.9003e-17 1.5391e-16 4.2344e-17 6.9964e-17 1.7363e-16 3.2067e-17 6.0631e-18 8.5571e-17 3.3247e-17 3.3663e-17 3.3179e-17 1.7380e-16 2.0007e-17 3.2590e-17 3.2629e-18 5.1886e-18 5.3289e-19 2.3444e-17 5.8225e-17 6.5867e-18 1.7417e-17 5.3843e-17 3.5910e-17 7.4664e-18 3.9325e-18 2.6111e-18 2.0784e-17 3.9863e-17 2.5422e-17 2.4928e-18 2.4436e-17 6.9468e-18 3.5621e-17 2.2011e-18 3.9352e-17 4.8717e-17 3.5098e-16 2.5560e-16 3.8728e-17 5.2723e-17 1.4187e-16 6.7369e-17 3.3344e-16 3.1164e-16 1.9709e-17 1.4891e-16 4.6248e-17 5.9155e-17 1.2883e-15 2.9748e-23 2.5962e-17 1.9096e-16 4.0815e-16 5.7023e-17 1.3888e-16 8.3706e-18 8.1215e-18 8.5435e-19 4.0349e-17 9.4399e-17 1.1322e-16 3.4329e-18 1.4987e-17 4.9642e-17 3.3630e-18 4.1944e-17 2.5860e-18 1.4114e-16 1.1041e-15 3.3194e-16 9.7444e-17 1.7719e-16 1.0400e-16 1.9760e-16 2.6481e-16 5.4648e-16 1.7990e-16 2.8706e-16 2.5363e-16 2.9991e-17 1.1767e-17 5.7382e-16 6.4026e-16 1.5888e-16 1.1501e-16 3.9662e-16 6.2636e-16 9.2605e-17 8.1480e-17 3.5682e-16 1.7788e-16 8.5250e-17 3.9584e-16 3.7752e-16 7.3620e-17 1.4016e-17 2.4724e-16 3.1093e-17 1.9290e-16 9.1244e-16 1.9945e-16 1.3108e-16 2.0387e-16 1.4893e-15 1.9531e-16 2.9739e-16 2.6463e-17 1.6780e-16 1.2803e-15 1.3661e-16 1.0733e-16 1.2905e-17 1.0879e-16 4.2543e-17 1.3763e-17 7.7208e-18 3.4584e-17 1.5055e-17 6.3399e-17 3.9541e-16 3.6064e-16 1.0709e-17 4.2010e-16 2.2604e-16 2.5642e-16 1.2848e-16 7.3089e-17 7.5868e-17 2.4986e-17 4.8054e-17 1.1424e-16 1.4846e-18 8.8702e-17 3.0257e-17 2.5561e-16 2.9905e-16 1.6935e-17 7.4989e-17 8.7689e-17 4.4921e-23 8.9280e-18 2.1564e-17 4.9941e-23 1.1161e-16 8.0812e-17 5.9268e-17 2.3520e-16 9.4558e-17 3.3959e-16 5.1964e-17 1.2868e-16 1.0074e-16 4.7926e-18 7.3570e-17 2.2224e-17 1.0019e-16 2.6758e-23 6.8688e-17 6.3781e-17 2.4460e-23 9.3430e-17 3.5990e-16 2.8733e-17 8.0167e-18 1.2248e-17 3.7168e-17 1.0535e-16 2.9731e-16 1.2634e-16 3.5703e-18 6.0283e-17 3.9052e-17 1.9614e-18 5.7821e-17 1.8925e-17 4.8834e-17 5.4621e-17 1.9754e-17 2.9203e-17 4.2813e-17 6.7382e-17 2.9707e-17 9.0143e-18 1.2737e-17 2.8314e-17 2.1759e-17 1.2070e-16 1.2325e-17 2.1185e-17 4.3625e-18 1.4325e-17 2.8945e-18 9.0947e-18 1.4307e-17 1.7772e-17 1.5488e-16 1.7094e-16 2.4287e-16 1.0126e-16 4.8744e-17 2.2241e-17 4.4034e-17 4.1267e-18 1.5081e-16 4.7006e-16 7.1479e-17 4.4446e-17 5.5101e-16 1.4483e-15 2.7606e-17 4.6280e-17 5.6580e-17 6.0640e-16 6.7086e-18 7.5689e-16 5.7199e-17 1.2690e-23 1.5378e-17 1.5758e-16 5.2444e-17 5.3914e-17 2.4889e-17 1.9671e-17 2.9992e-17 3.3630e-18 2.9960e-17 1.3965e-16 8.6853e-17 3.2257e-16 5.7861e-16 2.3874e-16 3.3718e-16 1.7931e-16 7.5277e-18 1.0220e-15 4.5372e-16 1.6296e-16 1.3670e-17 5.8435e-16 8.9702e-16 1.7650e-17 9.6929e-23 6.7396e-17 7.9438e-17 2.6835e-17 3.6800e-17 2.0434e-16 8.7975e-17 4.1699e-16 4.7059e-16 4.2583e-16 2.2733e-16 3.3494e-16 1.9804e-16 6.6927e-18 2.8733e-16 1.8730e-16 7.9287e-16 6.7096e-17 8.9455e-18 3.5140e-16 3.2267e-16 3.1117e-16 8.7465e-16 4.8827e-17 5.1721e-17 2.3816e-16 1.9576e-16 1.5047e-16 3.5710e-16 2.7631e-16 7.9580e-17 1.3390e-16 7.2930e-17 4.5220e-17 1.6021e-16 6.5326e-17 2.8605e-16 1.1934e-16 8.2759e-17 3.8077e-16 4.4443e-16 2.1271e-17 4.7312e-16 7.0253e-17 5.2087e-17 6.7869e-17 2.0864e-16 1.4992e-16 1.6018e-18 8.3368e-17 1.4549e-16 1.0034e-16 1.6281e-16 2.8594e-16 1.2306e-16 8.6086e-17 1.7914e-16 3.6189e-17 4.4921e-23 2.6784e-17 1.2168e-16 1.7579e-17 1.1799e-16 1.5595e-16 2.1205e-16 7.4209e-17 5.9402e-17 6.9304e-17 2.5540e-16 3.6031e-17 8.8889e-18 1.8308e-16 4.7160e-18 2.4076e-17 9.8400e-17 7.8776e-17 2.5554e-23 3.9863e-18 6.3400e-17 2.2962e-17 4.3530e-17 5.0662e-17 8.8913e-17 3.7463e-17 2.9152e-17 2.2737e-17 2.6233e-17 1.0584e-16 1.5301e-17 1.8225e-17 3.9052e-17 1.5691e-18 5.9574e-17 1.5597e-16 1.4345e-17 5.2223e-17 1.2265e-16 6.1127e-17 4.7753e-17 2.9551e-17 3.7531e-17 8.2755e-18 4.1065e-17 2.3033e-17 4.9735e-18 9.0560e-18 4.0441e-18 1.5702e-17 2.8979e-17 4.2131e-18 1.1578e-17 1.1368e-17 2.3111e-17 1.1425e-17 7.2712e-19 3.2734e-16 1.4725e-16 1.6842e-16 2.8749e-16 8.1886e-17 1.9721e-16 1.3082e-16 9.9781e-17 9.2632e-17 7.9060e-17 3.7239e-17 3.2569e-17 3.0032e-15 4.3789e-17 7.9014e-18 2.1783e-16 2.8765e-16 1.3082e-16 5.4163e-16 1.9531e-17 1.0964e-17 2.5630e-18 3.2716e-18 5.0477e-17 1.3093e-17 1.9739e-17 5.6203e-18 5.7915e-17 7.8470e-18 9.5873e-18 3.8791e-17 1.0314e-16 3.9789e-16 2.9996e-16 4.3850e-16 4.6964e-16 3.2814e-16 3.9521e-16 4.9236e-16 4.0532e-16 6.6139e-23 2.5972e-16 3.7548e-16 1.3632e-17 1.2944e-16 1.2407e-17 3.7068e-16 1.5888e-16 2.6068e-16 2.0444e-17 6.5301e-16 1.5280e-16 1.4978e-22 5.7919e-16 5.3902e-17 5.6833e-18 4.5065e-16 4.3321e-16 1.2716e-16 2.1024e-17 7.4921e-18 6.2186e-17 4.1935e-17 3.6676e-16 7.5029e-16 1.5125e-16 3.3532e-22 4.0187e-16 9.5214e-16 2.8446e-16 4.1017e-16 4.3697e-22 2.3310e-15 1.5578e-16 5.9372e-17 5.1620e-17 1.5064e-16 7.9008e-17 6.0163e-16 4.8255e-17 8.0312e-16 5.6458e-17 1.8833e-16 1.8391e-17 2.1602e-16 8.3888e-17 3.0134e-17 1.7523e-16 1.2294e-17 3.4724e-18 3.6545e-16 4.6555e-17 8.1621e-17 6.4071e-18 8.9543e-17 2.6871e-16 1.5123e-16 2.0171e-17 3.2926e-16 2.1177e-16 1.8346e-17 3.8328e-16 5.5676e-17 2.8750e-18 1.4880e-18 1.5403e-18 2.3812e-16 2.2481e-16 5.2457e-17 1.5805e-17 2.2640e-17 9.6983e-18 6.9304e-18 1.2936e-16 1.7706e-16 9.8765e-19 1.5049e-16 5.7535e-17 1.0186e-17 7.6037e-17 1.2844e-17 1.6354e-17 1.1162e-17 9.0795e-17 3.1355e-16 4.8194e-17 6.3516e-17 1.1078e-16 4.3947e-17 6.9235e-17 8.4125e-17 2.1861e-17 1.4407e-17 6.4775e-17 2.8039e-17 3.9052e-17 7.4927e-17 7.2189e-17 7.1131e-17 6.1043e-18 2.0516e-17 2.1056e-17 8.6884e-17 8.2333e-19 1.7859e-16 9.3231e-17 8.8666e-19 4.2822e-18 7.5055e-17 2.4868e-18 6.6806e-18 7.7031e-18 7.9754e-18 6.2321e-18 1.2218e-17 2.3156e-18 7.5789e-19 7.7037e-17 8.8859e-18 6.8349e-17 1.0608e-16 5.3156e-16 1.5243e-16 3.2264e-16 1.3749e-16 2.5216e-17 1.2875e-16 4.0095e-16 1.5127e-16 8.7724e-17 1.2313e-16 5.1179e-17 3.9309e-15 3.8077e-18 2.0318e-17 4.4203e-23 5.4226e-16 3.7568e-16 2.0137e-16 3.6273e-17 3.6547e-18 4.4426e-17 3.3261e-17 2.0978e-17 5.3914e-18 5.1494e-18 3.1848e-17 9.3078e-18 1.3452e-17 3.5952e-18 9.6976e-17 1.0857e-16 1.1510e-16 2.1774e-16 1.6566e-16 1.9715e-15 4.6621e-16 8.6569e-17 1.0730e-15 1.3914e-16 1.3122e-16 1.0480e-16 4.2272e-17 5.8074e-16 4.2655e-16 1.2407e-17 1.3142e-16 3.2497e-17 3.9486e-16 1.4720e-16 1.3882e-22 7.8714e-17 7.6688e-17 4.0854e-16 5.8753e-16 1.0798e-16 1.0353e-16 1.1140e-16 6.6927e-17 1.4717e-16 6.7429e-17 2.4291e-22 1.8451e-16 4.7411e-16 3.7990e-16 4.3358e-16 1.3949e-16 5.5552e-16 4.8827e-17 7.6288e-16 4.8956e-16 1.3983e-17 4.9477e-16 2.1570e-17 4.2702e-16 2.3229e-16 2.6989e-16 8.7111e-17 1.7695e-17 1.9302e-17 2.9204e-16 1.1292e-17 4.1582e-16 1.1770e-16 6.2242e-16 1.9990e-16 7.6221e-17 5.4321e-17 5.2690e-17 4.4621e-16 4.1765e-17 2.0691e-16 9.9944e-18 1.4576e-16 6.7929e-17 3.4294e-16 3.0537e-17 7.3481e-17 1.2564e-16 1.0445e-16 9.3143e-17 1.3887e-17 2.7838e-18 1.7250e-17 5.9520e-18 4.4669e-17 2.3972e-17 1.1958e-16 2.4102e-17 1.2907e-16 1.8992e-16 2.1942e-16 1.2590e-16 7.4076e-17 4.1178e-18 1.8765e-17 5.7512e-17 8.4888e-17 6.5745e-17 1.6191e-16 6.0794e-17 1.6109e-16 7.9727e-19 2.0429e-16 1.5836e-18 1.5002e-16 3.7807e-18 6.5591e-18 1.0086e-17 1.5305e-17 8.1852e-17 8.3072e-17 7.2036e-17 4.7944e-17 2.7104e-17 1.9784e-16 4.7859e-17 4.9061e-18 1.9251e-17 8.5460e-17 1.3589e-17 4.6888e-17 4.4802e-17 6.2903e-17 1.5661e-16 2.3871e-18 4.5811e-18 1.4603e-17 3.5955e-18 6.2045e-17 3.1770e-17 1.2710e-17 8.7231e-18 3.8016e-17 7.5836e-18 5.7890e-19 2.2737e-18 2.3111e-17 2.2850e-17 2.0359e-17 1.2366e-16 2.5087e-16 8.2787e-17 5.2458e-16 1.4153e-17 1.8366e-16 2.5709e-16 4.5106e-17 3.0500e-16 1.3646e-16 1.2613e-17 5.6297e-16 1.2138e-15 4.6645e-17 5.5310e-17 1.4145e-18 4.6257e-16 1.1405e-15 2.0832e-16 1.2556e-17 7.7154e-18 1.5378e-17 1.1450e-17 4.5888e-17 4.6212e-17 8.5823e-18 1.8734e-17 1.0342e-18 2.2420e-18 5.2730e-17 2.0818e-16 2.0628e-16 3.3679e-16 1.9642e-16 2.0951e-16 1.4795e-16 1.3807e-16 2.6347e-16 3.0208e-16 1.0083e-15 8.4657e-17 3.1896e-17 2.4866e-18 4.4169e-16 2.0592e-17 3.1017e-17 4.3807e-17 2.8886e-17 9.9673e-17 3.0258e-16 1.2883e-16 1.3428e-16 3.8344e-17 1.2928e-16 9.7024e-17 2.8417e-17 6.0898e-17 3.7752e-16 4.6849e-17 1.4016e-17 1.4984e-17 1.1660e-16 2.5161e-16 1.6996e-16 1.3296e-16 6.0500e-17 5.5797e-16 9.6921e-16 2.1972e-16 2.8446e-16 1.3231e-17 7.1314e-16 4.0296e-16 6.7106e-17 1.3701e-16 2.6885e-16 2.9082e-16 4.0517e-17 4.2271e-16 1.7758e-16 1.3449e-17 4.3284e-17 2.8903e-16 2.1517e-16 1.6476e-16 8.9243e-17 2.5702e-16 7.1668e-16 1.3875e-16 5.7816e-16 4.5246e-17 3.4485e-17 2.9983e-17 4.8054e-17 6.6385e-17 9.5013e-17 5.8165e-18 9.7975e-17 1.8485e-16 3.6488e-16 1.9758e-17 1.8886e-16 1.7816e-16 4.3125e-18 1.4880e-18 2.3104e-17 2.0775e-17 2.5830e-16 2.1266e-17 7.3755e-17 1.1572e-16 8.8497e-17 2.4256e-17 1.0393e-16 3.2942e-17 2.4494e-16 7.5724e-17 8.1115e-17 8.7969e-17 3.8466e-17 2.5688e-17 7.0324e-17 6.6173e-17 2.1916e-17 5.2257e-17 1.2748e-16 9.8299e-17 2.7694e-17 2.7017e-16 7.4337e-17 5.7599e-17 1.2492e-17 4.4884e-17 5.1004e-19 6.2619e-17 4.2915e-18 8.3950e-17 4.3804e-17 2.8387e-17 3.2658e-17 4.3963e-17 8.8782e-17 2.7027e-17 9.6330e-17 6.0387e-17 3.4481e-17 3.3988e-17 4.1175e-17 2.5168e-17 6.0926e-18 3.7115e-18 1.2517e-17 2.4425e-17 1.6515e-17 3.2441e-17 1.5051e-17 2.8800e-17 4.4021e-17 2.9197e-17 1.5269e-17 2.7945e-16 3.4904e-17 4.1216e-17 7.3680e-16 2.7969e-17 4.2529e-17 6.6027e-18 3.2577e-16 1.4486e-16 2.8158e-17 1.5616e-17 2.4327e-16 8.1429e-16 2.9748e-23 5.4181e-17 3.7201e-16 1.2633e-16 4.8638e-16 1.6527e-15 6.4175e-17 1.4619e-17 4.3145e-17 5.9979e-18 1.3766e-17 1.4326e-16 1.0299e-17 2.5291e-17 1.4479e-17 2.6904e-17 2.3968e-18 2.0947e-16 7.1925e-17 5.6273e-16 9.8973e-16 7.1459e-17 5.3329e-16 1.0759e-16 2.2583e-16 7.7090e-16 2.1577e-16 1.5873e-16 6.8348e-17 3.5061e-16 5.9983e-17 7.9427e-17 7.7543e-17 2.4600e-16 1.6971e-16 4.2169e-17 4.0889e-17 2.2211e-17 4.6302e-18 1.0545e-16 4.4991e-16 1.0241e-16 3.9783e-17 3.6539e-17 1.0521e-16 1.1378e-16 2.3828e-16 4.5702e-16 2.5652e-16 2.9354e-16 5.2778e-16 4.5587e-16 7.0583e-17 1.8241e-16 4.4915e-16 2.4414e-17 9.0511e-17 1.5878e-16 6.4322e-16 2.5504e-16 4.1222e-16 1.4158e-16 6.8826e-16 3.3475e-17 4.1732e-16 3.1064e-16 4.0534e-17 4.7649e-16 1.8819e-18 6.7128e-17 1.0851e-16 4.7414e-16 5.8900e-17 3.0843e-16 4.3807e-17 1.7563e-18 3.0210e-16 2.1231e-16 3.1037e-17 4.5641e-16 2.2425e-17 2.2540e-16 2.3753e-16 9.8881e-17 9.3652e-17 1.0687e-16 1.8601e-16 7.0563e-17 2.2774e-16 1.9347e-16 1.4375e-18 3.2736e-17 7.7015e-17 4.9541e-17 1.1480e-16 9.6408e-17 5.6633e-17 3.6476e-17 2.4246e-17 1.2128e-16 6.7443e-17 2.0589e-17 1.2346e-16 1.5049e-16 1.6978e-17 3.7039e-18 6.7986e-17 4.7094e-17 2.5554e-23 2.4715e-17 1.8785e-17 1.0293e-16 6.2964e-17 1.9660e-17 2.6309e-16 1.9164e-16 1.5086e-16 6.5936e-17 2.1799e-16 1.0972e-16 2.6012e-17 1.3552e-17 4.2485e-17 2.2243e-16 1.3141e-16 1.6641e-17 4.8834e-18 3.2506e-17 7.5324e-17 5.7318e-17 4.2319e-17 2.2270e-17 4.5886e-17 2.3644e-17 8.7840e-18 9.5504e-18 9.6984e-18 5.0030e-17 5.0070e-18 3.2400e-18 2.9602e-17 9.2689e-18 1.0999e-17 1.3642e-17 9.9048e-18 5.0777e-18 8.3618e-17 2.7703e-16 1.1089e-16 4.1926e-17 4.6987e-16 1.8231e-16 2.8039e-16 2.5049e-16 2.3966e-16 1.2367e-16 2.6101e-16 2.6428e-17 4.1010e-16 3.0218e-15 7.4250e-17 3.5274e-23 1.6974e-16 6.2778e-16 1.3786e-15 6.6662e-16 4.8828e-17 8.5275e-18 2.1359e-18 2.1265e-17 2.2289e-17 7.1629e-17 8.5823e-19 2.9038e-17 3.1026e-17 8.9680e-18 2.9960e-17 2.1852e-16 2.9991e-16 4.8315e-17 4.5680e-18 2.4199e-16 3.9223e-16 2.3310e-17 1.6937e-17 2.2558e-16 6.4730e-16 4.8678e-17 2.7339e-17 1.8152e-16 9.7336e-16 7.3543e-17 1.3648e-16 5.1558e-16 1.8054e-17 4.6003e-17 1.6356e-16 9.7730e-17 2.2225e-16 9.5859e-18 9.8256e-17 1.5093e-16 4.2057e-16 1.7660e-16 4.4559e-16 1.4724e-16 9.9516e-16 8.6909e-16 3.6534e-16 3.6064e-16 8.9455e-17 2.9679e-22 1.0083e-16 2.3606e-16 1.5366e-16 6.3476e-16 2.5860e-17 3.9694e-16 3.6356e-16 2.1729e-15 2.3727e-16 6.0513e-16 2.7100e-16 7.0926e-16 2.4310e-16 2.9491e-16 1.3511e-16 1.4986e-16 6.5868e-17 3.3564e-17 1.9678e-16 2.5080e-16 6.0685e-17 2.2334e-16 3.5571e-16 1.2646e-16 4.6878e-17 1.7228e-16 5.6901e-17 3.4147e-16 1.2334e-16 1.6056e-16 7.8683e-17 4.6532e-17 4.0342e-17 2.0940e-16 1.7600e-16 8.4675e-18 1.5831e-16 2.2270e-17 5.7500e-18 3.5712e-17 1.3863e-17 1.0068e-16 1.1161e-17 1.7013e-17 7.6389e-17 3.2702e-17 3.0065e-16 1.8365e-16 2.2223e-16 1.2868e-16 4.4444e-16 3.3549e-17 1.9807e-16 1.7594e-17 6.1724e-17 2.0550e-17 2.4532e-18 2.1845e-16 7.1227e-17 1.8211e-17 3.3425e-17 8.5444e-17 2.2228e-16 1.1095e-16 3.2067e-17 5.9873e-17 4.4347e-17 6.6495e-18 1.0609e-16 4.2992e-17 8.3254e-17 8.6696e-17 7.9899e-17 7.8310e-18 6.3179e-17 1.3589e-17 4.9927e-17 2.2855e-17 1.8113e-18 6.9809e-17 2.2015e-17 9.4577e-18 7.6860e-19 5.1685e-17 2.2754e-17 1.9597e-17 8.6660e-18 5.4333e-17 1.4334e-17 2.1908e-17 9.2624e-18 1.5158e-17 1.7609e-17 2.6658e-17 8.5800e-17 3.1643e-16 1.1624e-15 2.7714e-17 6.4893e-16 7.0429e-17 1.3700e-16 4.7044e-17 3.7817e-17 1.4535e-16 2.9241e-17 4.5648e-17 1.9209e-16 2.2109e-15 3.5221e-17 6.7726e-17 2.8290e-18 6.0446e-16 2.2910e-15 3.4025e-16 4.1853e-18 3.1268e-17 3.8446e-18 6.5431e-17 5.2444e-17 5.9305e-17 1.7165e-18 2.8101e-18 6.5155e-17 2.9146e-17 4.5539e-17 1.7456e-16 9.9067e-17 1.9752e-16 6.0906e-16 1.2018e-16 4.1975e-16 1.4524e-16 1.3174e-16 3.1974e-16 6.6545e-17 2.7514e-17 5.9235e-17 6.2165e-17 7.6342e-17 1.6474e-16 1.7370e-16 6.7396e-17 4.7302e-16 8.0505e-17 1.5947e-16 2.0879e-16 2.8708e-16 7.1895e-17 6.8779e-16 1.4015e-16 1.1367e-17 2.4359e-17 1.9185e-16 4.7518e-16 4.6254e-16 1.5733e-16 8.5506e-17 4.1935e-17 2.7731e-16 1.5196e-16 2.8233e-16 1.0730e-16 5.9098e-17 6.3476e-16 9.0511e-17 5.1602e-16 1.8178e-16 4.7182e-16 1.4380e-17 1.3701e-17 1.2023e-15 1.3599e-16 8.7111e-17 8.6508e-17 1.0037e-16 1.9213e-18 7.5277e-17 5.0533e-16 3.2184e-16 4.7780e-16 1.2851e-16 1.2585e-16 1.8399e-16 1.9846e-16 5.3823e-17 3.2020e-16 5.0004e-17 2.4986e-17 4.6131e-16 1.1888e-16 3.0137e-16 3.8535e-16 1.3255e-16 1.3864e-16 9.4438e-17 2.8225e-18 1.3193e-16 4.4401e-16 4.4921e-23 4.6500e-23 1.1398e-16 4.1551e-17 9.0882e-17 1.8431e-17 2.2390e-17 6.6662e-17 3.7581e-17 4.2737e-17 4.4225e-18 9.2650e-18 4.1481e-17 9.0101e-17 1.2450e-16 9.2599e-18 6.9775e-17 6.5076e-17 4.9881e-17 1.1959e-17 1.9568e-17 5.7800e-17 4.9749e-17 2.2684e-18 6.1219e-17 1.0807e-17 1.6106e-16 1.9705e-17 5.3716e-17 5.2087e-17 2.6165e-16 4.5329e-17 4.0340e-17 1.5691e-16 1.0163e-17 4.0460e-17 1.3429e-17 1.8731e-16 1.9536e-18 1.2697e-17 7.7393e-18 1.3120e-16 6.7901e-17 1.3300e-18 4.1724e-18 2.5842e-17 1.2558e-17 3.3700e-17 4.9685e-17 2.9908e-17 2.8356e-17 3.1598e-17 1.5051e-17 1.5158e-18 3.4392e-23 4.6968e-17 5.0898e-17 1.0184e-16 9.1987e-17 1.9862e-16 4.0454e-16 3.8011e-16 3.3496e-17 2.8433e-16 3.3853e-16 9.8545e-19 1.4729e-16 8.9493e-17 3.0109e-16 1.7606e-16 6.6635e-18 9.0301e-18 1.1175e-16 5.6364e-17 8.8219e-16 2.1526e-16 1.2556e-17 2.3146e-17 8.5435e-18 1.0360e-17 3.4744e-17 1.2015e-16 9.5264e-17 2.8101e-18 6.3086e-17 6.7260e-18 1.1984e-17 3.2325e-17 1.3299e-16 2.4300e-16 5.7861e-17 3.8978e-17 8.3951e-16 1.5600e-16 2.3336e-16 2.3735e-16 7.7233e-16 1.5662e-16 1.3214e-16 2.7104e-16 7.3615e-16 2.7358e-16 9.3052e-17 2.5611e-16 2.8886e-17 4.9836e-17 4.0889e-18 4.3534e-16 4.3524e-16 1.4379e-16 5.6368e-16 9.7024e-17 1.7618e-16 1.2180e-17 1.9340e-22 2.0747e-16 2.9434e-16 2.9219e-16 5.4413e-16 3.3548e-17 3.7571e-16 1.9945e-16 1.3713e-15 8.5841e-16 9.8103e-16 4.8827e-17 1.1637e-16 3.9694e-17 8.3899e-17 2.6524e-16 7.1899e-16 4.2245e-16 1.4411e-16 1.4436e-16 7.0904e-17 1.7695e-17 2.1232e-17 2.3056e-17 4.6860e-16 1.4731e-16 1.8391e-18 3.6796e-16 1.0888e-16 2.3575e-16 1.3142e-16 1.7563e-17 2.0140e-16 1.2530e-16 3.3796e-16 8.3286e-18 2.2425e-16 6.7929e-17 3.4442e-16 1.0761e-16 2.5214e-16 5.3433e-17 9.3007e-17 1.4113e-17 6.2491e-17 1.0022e-16 1.4375e-18 1.7856e-17 3.5427e-17 7.9905e-17 3.6672e-17 1.0208e-16 1.3434e-16 1.1823e-16 2.3033e-17 3.1187e-17 1.7690e-17 4.5296e-17 2.1235e-16 5.7512e-17 2.2637e-17 6.1115e-17 1.6102e-17 4.2813e-17 7.6048e-17 4.9431e-17 1.7220e-16 8.6304e-17 4.6640e-17 8.0907e-17 6.9235e-17 7.0604e-17 2.7694e-17 5.2294e-17 5.9962e-17 5.4304e-17 1.5301e-18 3.1310e-17 2.9611e-17 1.3534e-16 1.2966e-17 4.4049e-17 7.5388e-17 3.8901e-17 2.8154e-16 3.0473e-17 1.3173e-17 5.0537e-17 1.2864e-17 1.4039e-17 4.6116e-17 4.7977e-17 1.7159e-17 5.4930e-18 1.3480e-17 7.7885e-24 1.3087e-17 6.7410e-18 2.0840e-17 8.3368e-18 3.6318e-17 6.3471e-18 6.4713e-17 6.4922e-16 7.5116e-16 2.1674e-17 5.0833e-16 7.8179e-17 1.2119e-16 1.0441e-16 3.1893e-17 6.9967e-17 2.1173e-16 9.4298e-17 6.5137e-17 1.0361e-15 1.9039e-18 9.0301e-18 3.3948e-17 5.5392e-16 1.0298e-15 8.7493e-16 5.5804e-18 7.7154e-18 1.6660e-17 5.3981e-17 1.3111e-17 1.0783e-16 3.6904e-17 1.0304e-17 1.0342e-18 1.5694e-17 1.3182e-17 1.1637e-17 1.3571e-17 1.2931e-16 4.9639e-16 4.8722e-16 2.3740e-16 1.0221e-16 1.2233e-16 5.5120e-16 2.5610e-16 1.1005e-16 8.8852e-17 6.5397e-16 6.2709e-17 5.8835e-18 4.6526e-17 1.3142e-16 2.3109e-16 1.3034e-16 8.1369e-16 2.6654e-17 2.1762e-16 2.3965e-17 4.0854e-16 8.0853e-17 1.9323e-16 4.2629e-17 2.0423e-16 1.3385e-16 1.0512e-16 4.7950e-16 3.7312e-16 1.6774e-17 1.7891e-17 3.0392e-16 7.0583e-17 3.2190e-17 1.4775e-15 3.0517e-16 1.4223e-16 3.9694e-17 9.7882e-17 2.7850e-15 4.3140e-17 8.5175e-16 3.3123e-16 1.7365e-16 6.5434e-16 4.6990e-16 4.4395e-17 4.4191e-17 2.0701e-16 6.7128e-17 4.7633e-16 3.2952e-16 8.7458e-17 1.0635e-17 2.2780e-17 6.3228e-17 3.1078e-16 5.1685e-16 1.1035e-16 6.6629e-17 1.4096e-16 2.4238e-16 4.6393e-23 1.2651e-16 1.3111e-16 1.7329e-16 2.2894e-17 1.8346e-17 9.7208e-17 5.2057e-16 2.8750e-18 8.9280e-18 5.5451e-17 4.9541e-16 7.9721e-18 3.1191e-17 7.1121e-17 2.0124e-17 2.6670e-17 5.7753e-18 7.5182e-17 2.7795e-17 3.0617e-17 2.5880e-16 2.8485e-16 2.5928e-17 2.7731e-17 1.8838e-17 6.3782e-17 1.3314e-16 5.0094e-17 2.7475e-16 5.5190e-17 2.0416e-17 5.3931e-17 1.3689e-17 4.2270e-17 1.7810e-16 4.5596e-17 8.2010e-17 2.5502e-18 8.8789e-18 1.5578e-16 1.2945e-17 5.6420e-17 4.7638e-17 1.4040e-17 1.2603e-16 1.3111e-16 3.5008e-17 5.7304e-17 3.8402e-17 2.9176e-18 2.3053e-17 5.4900e-17 5.0561e-18 1.2434e-18 3.8599e-18 2.6190e-17 2.4923e-18 6.7618e-17 3.6233e-17 9.2624e-18 5.3810e-17 3.3016e-18 6.3471e-18 5.0898e-18 2.6308e-16 8.2897e-17 1.3537e-16 3.0739e-16 1.5771e-16 4.1023e-17 2.0138e-16 1.7359e-16 3.9418e-18 8.0143e-17 1.6878e-16 4.6527e-18 1.6760e-16 9.5193e-18 1.4787e-16 2.4047e-16 6.7248e-16 1.0164e-15 1.1805e-16 4.1853e-18 1.2690e-23 5.9804e-18 7.0884e-18 1.1013e-16 1.1553e-17 1.7165e-17 8.4304e-17 3.9300e-17 3.5031e-23 1.1984e-17 1.0344e-17 2.7141e-17 5.2010e-16 8.6792e-17 7.1459e-17 6.1931e-17 3.7476e-16 1.8819e-17 2.1577e-16 2.8030e-16 9.5239e-17 3.4174e-17 1.7157e-16 3.5990e-16 7.9427e-17 7.1340e-17 1.6512e-16 7.7993e-16 2.0318e-16 7.1146e-16 2.9319e-16 1.4470e-22 2.6841e-16 2.5857e-16 5.0668e-16 1.0230e-16 1.2180e-16 3.7133e-17 1.2047e-16 8.4098e-17 2.8470e-16 2.3320e-17 6.2902e-16 3.3098e-16 9.4974e-18 2.2183e-16 4.0774e-16 1.1347e-15 3.8146e-22 2.8446e-16 4.1348e-22 9.7882e-17 1.2012e-15 1.1504e-16 4.3615e-16 8.6893e-16 3.7241e-16 3.1806e-16 4.0895e-16 1.3125e-16 3.0934e-16 1.8631e-16 3.6548e-16 4.3219e-16 1.5560e-16 3.0343e-17 1.7726e-17 3.1015e-16 1.0889e-16 3.9933e-16 6.2648e-17 4.6555e-17 1.4325e-16 2.8031e-16 4.0140e-17 6.0868e-17 1.9631e-16 2.2477e-16 1.4152e-16 1.1447e-17 1.4959e-16 2.0969e-16 5.1500e-17 1.0062e-17 1.4880e-18 8.9337e-17 6.3924e-18 4.4644e-17 4.6786e-17 5.2682e-18 2.5156e-18 2.1821e-16 7.2769e-17 1.9459e-16 2.0589e-18 1.1951e-16 9.1060e-17 3.0182e-17 5.5559e-18 9.5717e-17 2.0550e-17 1.9707e-16 9.9658e-17 7.8272e-18 1.7498e-16 8.5506e-17 9.2250e-17 7.5066e-17 3.3141e-17 1.1661e-17 4.6231e-17 3.8101e-17 1.3299e-17 7.8546e-17 1.9160e-17 3.2186e-17 6.7081e-17 4.6958e-17 5.3185e-17 1.5261e-18 3.2506e-17 1.1939e-17 5.4234e-17 1.1214e-16 3.6975e-17 1.1405e-17 7.8617e-17 7.9056e-18 5.9550e-18 7.0873e-18 1.3213e-17 1.1555e-17 1.1714e-17 2.1812e-18 2.8649e-17 5.7890e-19 1.8189e-17 8.8043e-18 6.6010e-17 1.0180e-17 1.1214e-16 1.8834e-16 1.0801e-16 2.7622e-16 1.4591e-16 7.6778e-17 1.5434e-16 1.4307e-16 1.8083e-16 7.3645e-17 4.3425e-16 6.5603e-16 4.5116e-16 6.2827e-17 2.2575e-17 9.4772e-17 3.1292e-16 6.5409e-16 4.6524e-16 1.2556e-17 2.8425e-18 4.2717e-19 4.2530e-17 5.8344e-17 7.2399e-17 6.8659e-17 8.4304e-18 1.9650e-17 2.4662e-17 1.1984e-18 1.2930e-18 1.1264e-16 4.0499e-16 1.2638e-16 7.4707e-17 2.5288e-16 4.4648e-16 1.5055e-16 4.2370e-16 3.0651e-16 7.4075e-17 3.8958e-16 4.6002e-16 7.3615e-17 9.1194e-17 2.2953e-16 1.4827e-16 1.4443e-17 1.4568e-16 1.0631e-16 2.4877e-16 9.2605e-17 7.1895e-17 7.7570e-17 4.2583e-16 6.8200e-17 2.9231e-16 6.1269e-16 6.6927e-18 1.8221e-16 2.2476e-17 6.2186e-16 1.2580e-16 2.7731e-16 3.1341e-16 1.5125e-16 2.3606e-16 4.2551e-16 2.9296e-16 1.6809e-16 2.9109e-16 9.7882e-17 1.8873e-15 4.7693e-16 2.6945e-16 1.2260e-16 8.9965e-17 4.3150e-16 2.3986e-16 2.1232e-16 1.9213e-18 1.6561e-16 2.1444e-16 1.0851e-16 1.7373e-15 2.5880e-16 4.4314e-17 1.7523e-18 2.6169e-16 1.7362e-17 8.5271e-17 1.4311e-16 4.9805e-16 3.2516e-16 5.3108e-16 3.5630e-17 1.1197e-16 2.6367e-16 5.6321e-17 2.7473e-16 1.4113e-17 2.2219e-16 2.8951e-16 4.4921e-23 4.6500e-23 8.1636e-17 4.9941e-23 4.9826e-23 2.4102e-17 5.0048e-17 3.1570e-16 9.4558e-17 6.3528e-17 4.8647e-17 3.3045e-16 9.6790e-17 1.0256e-16 1.4054e-16 2.5928e-17 1.2971e-16 1.0703e-16 2.6167e-17 9.0091e-17 1.8472e-16 3.1592e-16 1.5547e-17 9.0737e-17 7.9438e-17 2.2514e-23 4.5185e-17 7.0484e-17 5.6214e-18 1.6014e-16 2.8562e-17 8.5050e-17 1.7595e-17 3.2952e-17 8.6907e-17 1.2105e-16 5.4328e-17 5.7285e-17 3.8639e-17 4.4077e-17 6.7513e-18 9.5649e-17 2.0688e-17 2.6895e-17 4.0516e-17 1.8764e-17 6.5899e-18 2.9692e-19 1.6562e-17 1.4705e-17 1.8696e-17 1.0112e-17 8.6835e-18 2.1221e-17 4.4021e-18 1.6502e-17 4.0718e-17 3.2128e-16 2.0652e-16 1.9897e-17 1.2169e-16 5.7287e-18 4.0271e-17 8.2122e-17 1.8453e-16 2.4686e-16 5.9024e-17 1.2013e-18 7.6570e-16 5.8659e-16 6.4731e-17 3.8378e-17 2.1359e-16 1.5160e-16 8.3522e-16 6.1106e-16 6.9755e-18 1.2182e-17 5.9804e-18 8.7242e-18 2.6877e-17 8.9343e-17 4.8919e-17 1.4051e-17 1.3445e-17 4.4840e-18 1.9175e-17 2.8446e-17 1.1399e-16 4.8315e-16 1.7967e-16 1.7865e-16 1.1010e-16 5.1103e-16 2.0701e-17 4.9432e-16 2.2182e-16 6.5609e-17 4.5565e-17 1.8401e-16 4.4715e-16 2.1769e-16 2.7295e-16 1.0109e-16 1.2638e-16 1.7634e-16 3.3529e-16 2.3100e-16 2.2225e-16 7.1895e-17 4.3957e-16 2.6951e-17 1.1367e-17 6.0898e-18 2.3517e-16 6.0235e-17 4.9057e-17 2.9968e-16 4.3530e-16 2.6000e-16 8.9455e-17 1.3296e-16 5.5458e-16 3.1117e-16 7.3282e-16 9.3993e-16 1.0344e-16 2.2493e-16 9.7882e-17 1.7037e-15 2.6603e-16 2.0780e-16 1.0109e-16 1.2762e-16 5.2672e-17 6.2915e-17 1.9302e-16 2.4017e-16 1.3174e-17 3.3564e-17 1.3058e-16 9.1166e-16 1.1245e-16 1.7726e-18 6.8339e-17 5.0933e-17 3.4203e-16 2.6973e-16 4.6555e-17 4.3975e-16 6.4071e-18 1.0498e-16 1.2322e-16 6.5436e-17 3.6740e-16 5.1122e-16 3.1766e-16 7.7619e-17 2.7774e-18 7.3770e-17 1.4375e-17 1.4880e-18 8.7797e-17 1.5981e-18 9.5666e-17 1.4461e-16 8.6926e-17 4.6538e-17 2.3033e-17 9.3560e-17 2.0675e-16 4.5296e-17 1.7778e-17 5.9429e-17 1.2262e-17 2.6854e-17 1.7891e-17 1.1645e-16 3.5980e-17 1.4271e-16 5.8704e-17 1.6627e-17 6.6850e-17 5.9735e-17 6.1947e-17 7.8529e-17 4.1541e-17 4.7747e-17 5.8088e-17 4.1559e-17 5.3554e-17 1.8038e-16 1.2874e-18 2.3537e-17 4.6257e-17 5.9711e-17 2.8080e-17 4.5828e-17 1.3545e-16 1.0139e-16 4.7588e-17 2.5982e-17 5.3047e-19 2.5417e-17 3.9528e-18 2.2359e-17 1.2931e-17 1.6033e-17 1.7139e-17 5.6077e-17 1.9943e-17 4.2131e-19 2.8945e-18 4.2442e-17 2.2011e-18 2.5388e-18 7.2712e-19 5.3344e-17 1.2871e-16 2.3237e-16 4.9407e-17 2.2274e-16 1.5054e-18 1.1307e-16 2.8567e-16 1.5398e-23 7.0937e-17 1.0030e-16 1.9674e-16 4.4016e-17 8.5674e-18 1.0385e-16 6.2238e-17 4.5869e-16 2.8512e-16 8.5410e-16 3.0692e-17 4.8729e-18 3.1611e-17 1.8539e-17 7.9321e-17 4.6982e-17 4.1195e-17 3.7468e-18 2.7923e-17 4.4840e-18 2.1571e-17 3.7497e-17 3.9627e-16 4.1352e-16 2.2231e-16 1.2018e-16 1.6687e-16 1.1386e-15 4.2720e-16 9.4940e-16 1.0446e-15 6.6139e-23 5.0122e-17 3.0834e-16 5.4257e-16 4.9715e-16 4.6836e-16 4.7851e-16 5.3801e-16 4.6003e-17 6.5422e-17 3.8648e-16 1.5743e-16 1.1024e-16 8.2742e-17 5.3902e-16 3.4100e-17 4.3847e-16 3.9608e-16 2.1417e-16 1.1073e-15 8.2413e-17 1.0883e-16 2.6209e-22 2.3258e-16 2.0894e-16 6.8567e-16 1.1803e-16 1.2883e-15 1.7090e-16 9.0511e-17 1.3231e-16 3.2161e-16 8.8243e-16 1.1025e-16 5.7545e-16 5.4416e-16 2.8036e-16 2.1069e-16 1.0479e-15 5.7906e-18 1.0952e-16 3.8015e-16 6.8993e-16 6.0506e-16 2.1968e-17 5.1404e-16 1.7194e-16 1.7523e-17 8.7816e-17 1.3890e-17 4.0547e-16 1.5174e-16 1.1993e-16 1.0892e-16 5.0947e-17 2.6722e-17 1.3523e-16 4.5241e-16 4.3324e-17 2.0032e-17 1.1572e-16 4.3049e-17 6.8203e-17 4.4921e-23 4.4640e-18 2.9266e-17 9.5886e-18 8.2910e-17 9.9244e-17 1.4488e-17 1.1068e-16 3.3944e-17 8.0854e-17 6.6337e-18 9.7797e-17 1.9753e-17 5.9429e-17 7.0740e-17 5.5559e-18 3.5782e-17 2.0293e-16 2.8620e-17 1.2916e-16 2.4264e-16 2.6129e-17 2.4291e-23 7.2590e-17 9.4743e-18 8.5013e-17 2.9152e-18 3.8652e-17 8.5571e-17 7.6469e-17 3.1112e-17 4.4862e-17 1.7166e-17 3.8444e-17 7.6745e-17 1.7685e-16 1.5871e-16 3.4904e-17 2.9088e-17 4.5347e-18 4.5119e-17 2.2413e-17 6.8564e-17 6.2066e-18 1.7678e-17 2.0000e-17 1.4423e-17 2.3753e-18 3.0812e-17 1.6200e-17 1.9943e-17 3.3705e-18 3.4734e-17 4.1684e-17 2.3111e-17 1.2694e-18 4.0718e-17 3.6856e-16 3.3886e-16 4.0860e-17 2.6163e-16 1.5164e-17 3.5754e-17 1.5805e-16 1.1573e-16 1.7689e-16 1.5541e-16 7.0273e-17 1.6883e-16 8.7947e-16 1.5231e-16 3.5274e-23 4.2435e-17 8.7461e-17 1.0667e-15 7.6383e-17 1.2556e-17 3.2486e-17 1.6233e-17 3.3806e-17 7.8666e-18 1.2092e-16 5.1494e-18 1.1241e-17 1.9650e-17 3.3630e-17 6.1119e-17 1.6809e-17 2.3070e-16 7.8157e-17 1.9795e-16 9.7444e-17 1.2042e-17 5.2897e-16 1.9196e-16 4.0997e-16 6.6545e-17 1.9260e-16 1.4353e-16 1.0692e-16 3.8171e-17 1.4709e-17 2.1092e-16 1.1626e-15 3.9358e-16 4.9836e-17 2.0036e-16 2.2656e-16 9.2605e-17 3.3551e-17 6.2056e-17 7.7080e-16 4.5467e-17 1.2180e-17 2.1042e-16 2.0915e-22 4.9057e-17 9.8896e-16 4.4308e-16 3.7741e-16 1.7891e-16 3.7990e-16 4.5375e-16 1.5022e-16 1.3002e-16 4.8827e-17 2.3274e-16 1.8524e-16 4.1949e-16 1.0202e-17 1.6537e-16 9.5908e-17 1.3550e-16 6.2766e-18 3.4642e-16 2.8508e-16 5.9836e-17 1.6139e-16 2.8229e-16 4.6617e-16 8.0185e-16 8.9702e-17 2.1418e-17 4.6087e-17 8.5862e-17 1.2821e-16 1.8404e-16 2.6799e-16 7.7592e-17 4.0311e-16 1.2974e-16 1.0189e-16 2.3011e-16 2.8646e-16 1.0086e-17 2.8882e-17 5.7235e-18 1.0020e-16 6.8046e-17 1.1692e-16 1.4375e-18 3.4224e-17 1.8484e-17 4.6345e-17 4.3528e-16 7.2306e-17 3.6878e-17 3.7733e-17 5.8190e-17 9.4715e-17 4.0908e-17 4.0148e-17 5.0370e-17 7.3807e-17 8.4888e-18 3.7965e-17 2.6836e-18 4.7950e-17 1.0058e-16 1.0524e-16 6.5748e-17 7.9178e-19 1.1116e-16 7.1834e-17 1.2681e-16 4.8270e-17 1.8220e-17 4.5473e-18 8.1198e-18 3.8234e-17 3.5703e-18 1.0608e-16 1.2016e-17 4.5898e-17 1.0513e-17 1.2627e-16 3.7541e-17 1.4095e-16 2.4963e-17 8.3438e-17 3.1945e-17 4.9537e-17 7.9571e-18 1.0123e-16 1.1529e-17 1.1236e-17 8.5793e-18 1.3807e-17 2.2917e-17 6.3305e-17 9.9714e-18 1.0533e-17 1.7367e-17 3.0315e-18 2.9714e-17 1.0155e-17 2.9085e-17 2.0974e-16 5.7555e-16 3.5531e-17 1.2136e-16 1.4996e-16 4.7045e-17 1.3494e-16 1.6721e-16 1.7935e-16 5.2526e-17 8.4688e-17 2.4925e-16 1.4838e-15 4.7596e-18 3.8378e-17 4.4203e-23 4.8007e-16 1.4994e-15 9.0271e-17 2.7902e-17 2.1522e-17 1.0252e-17 4.7438e-17 6.5555e-17 6.3927e-17 7.7241e-18 1.4051e-17 5.9984e-17 1.1210e-18 6.3516e-17 1.0344e-17 2.5784e-17 1.6626e-16 2.5276e-16 8.6076e-17 6.0383e-16 1.1368e-15 6.9632e-17 5.4139e-16 4.4364e-17 2.5186e-16 9.1130e-18 1.3428e-16 6.1891e-16 2.9417e-18 2.9466e-16 3.5720e-16 1.2999e-16 1.1501e-16 2.2898e-16 7.1076e-17 9.2605e-18 6.7101e-17 1.3446e-16 8.0853e-17 2.8417e-17 1.2180e-17 2.2280e-16 1.4055e-16 1.8922e-16 9.7397e-17 7.7733e-18 2.0129e-16 8.9455e-18 1.0447e-16 1.0083e-17 1.0730e-17 8.1556e-16 2.1972e-16 9.1804e-16 3.9694e-17 4.3697e-22 9.2069e-16 4.0743e-17 1.8725e-16 4.1941e-16 2.9291e-17 5.8749e-17 1.5807e-15 6.1767e-17 2.8628e-16 1.3174e-17 2.7970e-17 5.3334e-17 1.9588e-16 3.9088e-16 9.3947e-17 2.8037e-17 3.0911e-16 1.0417e-17 1.7402e-18 2.5519e-16 2.9983e-16 1.5537e-16 4.1221e-16 7.7198e-17 1.6432e-16 2.8816e-17 3.0182e-16 2.4325e-17 9.5965e-17 1.6664e-17 8.6297e-17 1.0062e-17 8.9280e-18 1.4325e-16 3.6756e-17 2.2322e-17 7.5142e-17 3.5560e-17 3.3960e-17 4.8491e-17 4.0427e-17 1.6142e-16 4.1178e-18 3.8518e-17 9.2977e-17 5.8478e-17 1.2964e-17 2.1469e-17 4.7950e-17 2.0934e-16 2.0729e-17 7.7489e-17 6.7301e-17 7.6956e-17 1.3611e-16 6.7778e-17 4.1786e-17 1.8220e-17 7.6547e-17 3.7476e-17 2.1057e-17 5.6104e-17 8.4116e-18 4.1627e-17 1.7065e-16 8.6557e-17 3.9155e-18 4.5477e-17 1.5720e-17 2.1924e-17 3.6132e-16 1.9809e-16 3.8688e-17 8.2223e-18 1.9211e-18 4.3920e-18 1.1123e-17 9.6984e-18 3.8154e-17 3.8515e-17 1.5203e-17 1.8696e-17 1.3166e-23 3.7629e-17 4.3957e-17 2.2011e-18 1.2694e-18 6.6895e-17 2.1520e-16 5.9991e-17 1.3466e-16 3.3126e-16 3.3698e-18 3.7636e-19 7.5106e-17 4.9435e-16 3.9911e-17 4.5649e-16 6.0063e-18 1.5154e-16 5.3327e-17 1.1709e-16 2.1447e-17 7.0725e-18 6.8414e-16 2.2071e-15 8.8188e-16 3.2087e-17 1.6243e-18 1.3670e-17 4.9073e-18 9.1777e-17 2.5417e-17 3.8620e-17 1.9671e-17 3.8265e-17 3.0267e-17 1.1984e-18 2.2111e-16 3.4470e-16 1.4210e-18 6.2886e-16 2.1925e-16 6.8812e-17 6.7062e-16 7.9041e-17 1.4516e-16 5.8479e-17 2.0529e-16 4.0781e-16 1.4671e-16 8.1795e-18 5.8835e-17 5.8933e-17 1.5164e-16 1.0832e-17 6.5171e-17 3.6391e-16 8.4403e-17 3.2412e-17 4.7930e-18 2.1720e-16 7.5463e-17 1.2503e-16 4.8719e-17 3.8370e-16 1.4322e-15 6.9381e-16 2.9968e-17 2.4097e-16 1.5935e-16 6.2619e-17 6.5532e-16 2.0167e-17 1.6095e-16 1.3947e-15 4.0283e-16 4.0407e-22 2.7786e-16 4.3697e-22 2.2979e-15 8.3883e-17 6.4624e-16 2.2584e-16 3.0337e-16 1.5599e-16 1.3546e-15 3.5130e-16 2.1711e-16 2.2771e-16 1.7714e-16 3.8253e-16 1.0435e-15 1.8384e-16 7.6221e-17 4.6786e-16 5.6202e-17 1.0070e-16 3.6545e-17 3.4485e-18 1.6657e-17 1.6018e-18 4.6315e-18 1.6330e-16 1.0615e-16 7.0599e-17 7.6539e-17 4.1496e-17 1.7782e-16 1.8470e-16 1.3919e-16 4.4921e-23 7.4400e-18 5.2370e-17 2.4611e-16 4.3049e-17 2.6654e-16 1.1590e-16 1.8238e-16 3.5156e-17 1.5016e-17 3.2063e-17 2.3368e-16 2.3704e-17 1.9171e-17 1.0375e-16 1.7594e-17 8.0509e-17 3.4250e-17 1.2675e-16 1.9134e-17 1.8785e-17 8.7096e-18 6.9959e-18 1.1569e-16 9.4014e-17 3.0259e-17 2.0698e-16 4.4715e-17 3.1855e-17 4.0451e-17 1.1425e-16 5.5610e-17 1.0128e-16 7.7281e-17 9.7771e-17 3.7197e-17 6.1043e-18 1.1137e-16 7.9448e-17 7.7996e-18 9.5506e-18 8.4799e-17 6.6707e-17 1.7334e-16 1.0102e-17 1.7977e-18 2.0018e-17 1.0095e-17 4.1404e-17 1.6449e-17 2.3994e-17 1.4746e-17 5.2101e-18 4.6231e-17 5.5027e-18 1.6502e-17 3.4902e-17 1.1396e-16 1.0944e-16 2.0963e-17 2.7821e-16 2.2241e-17 1.1253e-16 1.7497e-16 4.1462e-17 1.9413e-16 7.6894e-17 4.4446e-17 3.6424e-16 4.8248e-17 7.8058e-17 6.4340e-17 1.2589e-16 8.8433e-16 1.9623e-15 1.8054e-16 9.0681e-17 1.5837e-17 9.8250e-18 2.4537e-17 1.7044e-17 8.4722e-17 4.1195e-17 1.3114e-17 1.7581e-17 3.3630e-18 2.2770e-17 7.7581e-18 1.2214e-17 4.6752e-16 2.1165e-16 1.6241e-17 7.2941e-16 1.8828e-16 9.7861e-17 1.0396e-16 6.4529e-17 8.4657e-17 2.2783e-18 2.9590e-16 1.2515e-15 4.7068e-17 2.1092e-16 6.5374e-16 1.8415e-16 2.9519e-16 4.1298e-16 6.9744e-16 1.9447e-16 1.1024e-16 1.4997e-16 9.1094e-16 5.6833e-18 9.7437e-17 6.1888e-17 1.0039e-16 2.9434e-16 1.6483e-16 7.7733e-17 2.6209e-22 1.2524e-16 5.3185e-16 8.0667e-17 1.8241e-16 1.3002e-16 2.0752e-16 2.9739e-16 1.4554e-16 2.9365e-16 7.9062e-17 5.2487e-16 2.6717e-16 1.7207e-16 1.3181e-16 8.3059e-17 5.7017e-17 1.6214e-16 5.3221e-16 5.6458e-18 7.6452e-17 3.0161e-16 4.9427e-17 5.7115e-17 1.3117e-16 1.7523e-18 1.0187e-16 7.8998e-16 7.8832e-16 4.6555e-17 5.9966e-17 4.3248e-17 3.0877e-18 1.4549e-16 9.3064e-17 1.5561e-16 3.3504e-16 1.3307e-16 1.0584e-16 1.6664e-17 1.5032e-16 5.7500e-18 5.9520e-18 7.8555e-17 5.1139e-17 7.4938e-17 1.9565e-16 4.3463e-17 2.9432e-16 1.9397e-17 1.2590e-16 1.8795e-17 3.9119e-17 3.1605e-17 8.2433e-17 1.4148e-17 8.7043e-17 5.8146e-17 4.2813e-18 1.2184e-16 1.9693e-16 6.4183e-17 1.6469e-16 1.3603e-16 7.7883e-17 5.5388e-17 8.3572e-17 1.6689e-16 4.7747e-17 3.3729e-17 4.5438e-17 9.6907e-18 7.2433e-17 4.8493e-17 4.6682e-17 4.1001e-17 1.0409e-16 2.5638e-16 6.1548e-17 8.3356e-17 3.1017e-17 5.5987e-18 5.5819e-17 1.8726e-16 4.3446e-17 4.7214e-18 1.0191e-16 3.8545e-18 1.7503e-16 2.5998e-17 1.2711e-17 2.8044e-18 2.8228e-17 1.1578e-18 6.6694e-17 1.8709e-17 7.6165e-18 2.0432e-16 7.7410e-16 6.0355e-17 6.5732e-17 5.2856e-16 5.7287e-17 8.2047e-17 7.7995e-17 2.4968e-16 2.5129e-17 7.7977e-17 1.0631e-16 9.2389e-17 4.5709e-17 6.6635e-18 5.0795e-17 2.9705e-17 6.1029e-16 2.5157e-15 3.4720e-17 1.3951e-17 2.0304e-18 8.9706e-18 1.2541e-17 5.7033e-17 7.8561e-17 4.4628e-17 4.3089e-17 2.8958e-17 5.6050e-18 1.1984e-18 5.4307e-17 4.8855e-17 2.0889e-16 5.1771e-16 4.2226e-17 2.0300e-16 1.2014e-16 1.0539e-16 7.2970e-16 4.0331e-18 1.3122e-16 7.0626e-17 6.4651e-17 1.6359e-16 2.9417e-16 5.1489e-16 4.7851e-16 7.7993e-16 5.7887e-16 2.0444e-17 8.4403e-17 9.2605e-17 1.7255e-16 6.7228e-17 1.9944e-16 1.9892e-16 3.0449e-17 4.3321e-17 2.6771e-17 4.5553e-16 1.4984e-17 1.8656e-16 6.7096e-17 9.8400e-17 3.7040e-16 8.0667e-17 2.2533e-16 4.0187e-16 8.7890e-16 4.0084e-16 7.0126e-16 1.6780e-16 5.8404e-16 1.0066e-16 5.1607e-16 2.6885e-16 1.8202e-16 1.4586e-16 1.5729e-17 1.7179e-16 4.4383e-16 1.1292e-16 7.3655e-16 1.3241e-16 3.7711e-16 5.5777e-23 2.1980e-16 1.1740e-16 1.0011e-16 1.0244e-16 7.8310e-17 1.3794e-17 6.4963e-17 9.6107e-18 4.4772e-17 1.5885e-16 4.9440e-17 2.4350e-16 3.0038e-16 2.0605e-16 2.0886e-16 9.7208e-17 1.8095e-16 4.3125e-18 8.9280e-18 1.0166e-16 1.5981e-18 3.6193e-16 1.1909e-16 2.6341e-16 1.1446e-16 2.4246e-18 6.5838e-17 2.1007e-17 2.4707e-17 2.9531e-16 1.1790e-16 8.9604e-17 9.2599e-19 1.5207e-17 5.9082e-17 3.1073e-17 3.6674e-17 5.7921e-17 4.2043e-16 4.5085e-17 1.2779e-16 1.0640e-16 1.7291e-17 7.5794e-17 5.3052e-17 1.6240e-17 3.1031e-17 6.1715e-17 4.0656e-17 6.8663e-18 1.5691e-17 7.4292e-17 1.0017e-16 1.4040e-17 3.4638e-17 5.8175e-17 5.9676e-17 3.3263e-17 9.8504e-18 1.3129e-17 4.8618e-17 2.0642e-17 3.7752e-17 2.4370e-17 3.0731e-17 7.5298e-17 3.9877e-18 2.7110e-17 1.6852e-18 2.8945e-18 1.3642e-17 2.2011e-18 1.3964e-17 4.5081e-17 1.5579e-16 8.9587e-16 2.0785e-16 2.7025e-16 9.1322e-17 2.7474e-17 4.6219e-17 2.0503e-16 1.3304e-16 6.2815e-17 1.7719e-16 1.8744e-16 2.0315e-16 3.5221e-17 6.7726e-17 9.1943e-17 2.0019e-16 1.0331e-15 3.7497e-16 2.9297e-17 1.1776e-17 4.2717e-18 5.1800e-17 2.6222e-18 1.4326e-16 1.2873e-17 1.6861e-17 1.5513e-17 2.1299e-17 3.8349e-17 1.7326e-16 1.3028e-16 6.1104e-17 3.6544e-17 8.4452e-17 4.6620e-16 1.1297e-16 2.6347e-17 1.0004e-16 1.4519e-16 5.5027e-17 4.5337e-16 5.0975e-16 4.9077e-16 4.4126e-17 3.1017e-16 1.3479e-16 8.6659e-17 9.5840e-17 2.8622e-16 2.1767e-16 6.9454e-17 2.8758e-17 1.0756e-15 3.9348e-16 1.0798e-16 6.0289e-16 1.6091e-16 1.0708e-16 2.5229e-16 1.0489e-16 3.6534e-16 5.8709e-16 1.4313e-16 7.9778e-16 3.1510e-22 4.6139e-16 5.9098e-17 1.8310e-16 9.0511e-17 2.2493e-16 6.9916e-17 9.1814e-17 1.8694e-16 2.2150e-16 1.9357e-17 4.9376e-16 7.4146e-16 1.4746e-16 3.3972e-16 3.2663e-17 1.1856e-16 3.5429e-17 2.5747e-17 3.6430e-16 2.4988e-17 2.0207e-16 2.5233e-16 1.5280e-16 1.7015e-16 2.0709e-16 2.5347e-16 6.4963e-17 5.0056e-23 6.1754e-18 2.8207e-16 3.9262e-17 2.2332e-16 1.5741e-16 1.1590e-16 5.6450e-18 1.9303e-16 1.0857e-16 1.4375e-18 1.6368e-17 9.2418e-18 2.3492e-16 5.1022e-17 1.1342e-17 7.1121e-17 9.5591e-17 6.3039e-17 4.1582e-17 8.0710e-17 1.8633e-16 2.5481e-16 1.6295e-16 1.6789e-16 1.7686e-16 5.9040e-17 7.2782e-17 6.2147e-17 2.3918e-18 7.2010e-17 6.7301e-17 5.1304e-17 3.2514e-17 1.3628e-16 4.6829e-17 2.3321e-17 2.6905e-16 5.1842e-17 1.3853e-17 1.5709e-16 3.9721e-17 1.4848e-16 8.5911e-17 1.0951e-23 7.5373e-17 5.1886e-18 1.9717e-16 1.0398e-16 1.7232e-17 9.6494e-17 6.4955e-17 2.2280e-17 5.0096e-17 8.8938e-17 4.3820e-18 7.4603e-19 3.5778e-17 1.5599e-17 1.1465e-17 6.2321e-19 3.2441e-17 4.9785e-17 1.3642e-17 2.2011e-18 6.3471e-18 4.5081e-17 2.7945e-16 4.1121e-16 6.4666e-17 8.8834e-16 1.4928e-16 5.0432e-17 2.5751e-16 3.7361e-17 1.0249e-16 5.4151e-18 1.6217e-17 3.2835e-16 8.5492e-17 7.3299e-17 4.5151e-18 3.1119e-17 4.0427e-16 1.1908e-15 4.7219e-16 5.5804e-18 1.5837e-17 1.3670e-17 5.4526e-19 6.5555e-19 1.6559e-16 6.0076e-17 2.4354e-17 6.2052e-17 3.3630e-18 5.2730e-17 1.6809e-17 2.8634e-16 1.6342e-16 3.4412e-16 2.7122e-16 5.8490e-16 1.3269e-16 5.6458e-18 8.4740e-16 2.1779e-16 9.9472e-17 4.5565e-17 1.6909e-16 2.1812e-17 1.3238e-16 9.6929e-23 4.3133e-16 6.7522e-16 1.6101e-16 6.2151e-16 1.1417e-15 3.5190e-16 1.1503e-16 2.0685e-17 1.4015e-16 1.2503e-16 1.7052e-16 5.4461e-16 9.3698e-17 5.0459e-16 4.4203e-16 8.5506e-17 7.7160e-16 2.5942e-16 2.3744e-16 9.0750e-17 3.2190e-17 4.3733e-16 1.1474e-15 1.0344e-16 2.6463e-17 5.7331e-16 2.7417e-15 1.0785e-16 3.4481e-16 1.2475e-16 3.4731e-16 4.0517e-17 2.7132e-16 4.4781e-16 1.9213e-18 5.4576e-17 9.5099e-17 4.0460e-17 4.0274e-17 1.5350e-16 1.2585e-16 2.2429e-16 1.2294e-17 3.3683e-16 4.5246e-17 4.4831e-16 1.3326e-17 2.0182e-16 2.5010e-16 1.0837e-16 1.8904e-17 3.5588e-16 4.0436e-17 2.7902e-16 1.0443e-16 1.3193e-16 3.0065e-16 7.1874e-18 4.6500e-23 1.4017e-16 6.8718e-17 6.3777e-17 8.7901e-17 1.3829e-16 3.8488e-16 1.7821e-16 3.0147e-16 4.8647e-17 3.0883e-18 3.0617e-17 5.9429e-17 3.6785e-17 1.1112e-17 1.3418e-17 6.5932e-17 1.1448e-16 1.1800e-16 5.9486e-17 1.5836e-18 1.3215e-17 8.8469e-17 3.4982e-17 6.1238e-17 1.2389e-17 3.4863e-17 4.2473e-17 5.4304e-17 3.1112e-17 5.3741e-17 7.6388e-17 1.1808e-16 1.4368e-17 2.3493e-17 5.7991e-18 8.5795e-17 2.1707e-17 9.7948e-18 1.2169e-16 4.8824e-17 1.5914e-18 2.4679e-17 1.4823e-17 2.8314e-17 1.0569e-17 1.6627e-17 2.5035e-18 5.7323e-18 1.7450e-17 6.5303e-17 8.1046e-18 8.3368e-18 1.8709e-17 7.6165e-17 3.7810e-17 5.6375e-17 2.8432e-16 1.1547e-16 7.5271e-16 1.8635e-16 2.1453e-17 2.4802e-16 1.9865e-16 2.7100e-17 1.2725e-16 1.5436e-16 3.3167e-16 9.1756e-16 3.3318e-17 9.3688e-17 5.3751e-17 1.4383e-16 1.6537e-15 1.1805e-16 1.1161e-17 2.8019e-17 2.5630e-18 5.4526e-18 1.2455e-17 2.5494e-16 3.4329e-18 3.3722e-17 1.9650e-17 2.0178e-17 4.9135e-17 2.0688e-17 6.5140e-17 2.8421e-16 6.9281e-16 4.8884e-16 2.2880e-16 9.8620e-17 3.1993e-17 2.1577e-17 2.4602e-16 1.7778e-16 8.2017e-17 2.5115e-16 4.6350e-17 1.8239e-16 3.1017e-18 5.2232e-16 1.1374e-15 1.9935e-16 1.0631e-16 5.3751e-16 6.0193e-17 6.2309e-17 1.6161e-22 7.5463e-17 2.2733e-17 1.2789e-16 1.2378e-16 3.3464e-17 7.0082e-18 3.3715e-16 2.3320e-17 1.6774e-17 4.4727e-17 4.7487e-17 1.0083e-17 1.1803e-16 7.0918e-17 3.1738e-16 6.8530e-16 5.8218e-16 8.3899e-17 4.9222e-16 1.8934e-16 1.6441e-16 4.1941e-16 9.2057e-17 3.4439e-16 9.8305e-17 5.4046e-17 2.2480e-16 3.5380e-16 2.1630e-16 2.0046e-16 2.0137e-17 1.6064e-17 1.8789e-16 2.4532e-17 1.4929e-16 4.9482e-16 7.6570e-17 2.9313e-17 6.8295e-17 1.2974e-16 5.5887e-16 7.1260e-17 2.2248e-16 1.3832e-16 8.0871e-17 1.1304e-16 3.9092e-16 3.4717e-17 4.3844e-16 4.4921e-23 5.9520e-18 3.0806e-18 7.9905e-17 1.5944e-17 2.1266e-16 4.0829e-17 3.8991e-17 3.0307e-17 2.8876e-17 7.5182e-17 9.2650e-18 1.2247e-16 1.2461e-17 9.4320e-18 6.8523e-17 1.0735e-17 2.4831e-17 5.7240e-18 1.1162e-17 6.5748e-17 1.4252e-17 1.2437e-16 2.0265e-16 1.2098e-16 3.8184e-17 1.8584e-16 5.1536e-17 6.2460e-19 7.1482e-17 6.1205e-18 1.5234e-16 2.5749e-17 7.1396e-17 4.2052e-18 5.0901e-17 2.2586e-17 2.6111e-17 5.7524e-17 1.0103e-16 3.2769e-17 1.1992e-17 8.2356e-17 5.0244e-18 2.4485e-17 1.5505e-17 3.0712e-17 1.0837e-17 1.6562e-17 1.0966e-17 2.1812e-18 4.2131e-19 7.5257e-18 1.2126e-17 4.4021e-18 3.8082e-18 5.8169e-18 1.9337e-16 1.1198e-16 2.7359e-17 5.8194e-16 4.3807e-18 1.1065e-16 1.0193e-16 1.5309e-16 1.7196e-16 1.0776e-16 1.1052e-16 7.1518e-16 1.7022e-15 1.5992e-16 3.2734e-17 4.8093e-17 5.8502e-16 8.1174e-16 1.4235e-15 5.5804e-18 4.0607e-18 3.0329e-17 1.0905e-18 1.4422e-17 9.8586e-17 1.3732e-17 9.3671e-19 1.6547e-17 3.5031e-23 4.3143e-17 4.3963e-17 4.2409e-23 7.1052e-18 4.9487e-16 4.2226e-17 7.9306e-16 1.3090e-16 1.3362e-16 1.2966e-15 2.3392e-16 3.8096e-17 7.9739e-17 1.2433e-16 5.9438e-16 2.5593e-16 1.3958e-16 5.7961e-16 2.4553e-16 3.0669e-17 3.3120e-16 1.9102e-16 1.4354e-16 1.5337e-16 3.1028e-17 2.6951e-17 1.1935e-16 6.0898e-17 1.0521e-16 5.1534e-16 7.0082e-17 6.2934e-16 3.1093e-17 3.3548e-17 3.3993e-16 1.1397e-16 2.9242e-16 2.1460e-17 2.4821e-16 8.5448e-17 3.8791e-17 5.1602e-16 3.0763e-16 2.6932e-15 2.2744e-15 1.1669e-15 4.7748e-16 5.8163e-16 2.2082e-16 1.7105e-16 4.6325e-17 5.5142e-16 1.2985e-16 4.4193e-16 2.2805e-16 1.4279e-16 3.2841e-16 2.0562e-16 1.4894e-16 3.2492e-16 1.0938e-16 9.2232e-17 5.1728e-18 1.0661e-16 9.6107e-18 5.8666e-17 1.9448e-16 1.8904e-17 1.8586e-16 8.2315e-17 1.0016e-16 2.0463e-16 2.9579e-16 4.0365e-17 5.7500e-18 3.5712e-17 3.5427e-17 1.5981e-17 1.0842e-16 2.8355e-18 6.5853e-17 2.1005e-16 6.9100e-17 1.5016e-17 1.1056e-17 2.2648e-17 2.0642e-16 1.0065e-16 4.2444e-17 8.9821e-17 1.8159e-16 3.3394e-17 7.5230e-17 4.8872e-16 2.3481e-18 1.3460e-16 5.7522e-17 1.5123e-18 3.7533e-16 1.1887e-16 8.0167e-18 4.5473e-17 1.3616e-16 6.6495e-18 6.1205e-18 2.9908e-17 7.7675e-17 2.7460e-18 1.4648e-16 1.2530e-16 5.5244e-17 5.6220e-17 1.6172e-16 4.7160e-18 1.9760e-18 1.8701e-17 2.1219e-18 8.2755e-18 2.6572e-17 1.7640e-17 1.1563e-17 2.5238e-18 2.3109e-18 5.7323e-18 2.8044e-18 3.5812e-17 8.6835e-18 1.5916e-17 2.3111e-17 1.5233e-17 2.2722e-23 2.9218e-16 2.2797e-16 7.0351e-17 7.7659e-16 1.1929e-16 1.0049e-16 1.2586e-16 1.2438e-16 1.2762e-16 9.6930e-17 3.9041e-17 1.9940e-16 1.0928e-15 1.4279e-17 2.0092e-16 1.0750e-16 1.1934e-15 7.6814e-16 6.3190e-16 4.3597e-23 1.6243e-17 6.8348e-18 2.7263e-18 2.4255e-17 7.3169e-17 1.4590e-17 1.6861e-17 8.2736e-18 1.1210e-18 5.9920e-18 4.7842e-17 2.2935e-16 6.1815e-16 1.3856e-16 4.4012e-16 4.5416e-16 1.2552e-17 1.3550e-16 3.7074e-16 2.7021e-16 2.5397e-16 1.3670e-17 4.6499e-16 2.2085e-16 1.0884e-16 9.6154e-17 2.0556e-16 4.6218e-16 1.3034e-16 1.5538e-16 6.4413e-16 2.3151e-16 6.0391e-16 4.1371e-16 2.6951e-17 2.2165e-16 4.8110e-16 1.7329e-16 2.8779e-16 2.3828e-16 2.2476e-17 2.6429e-16 4.1096e-16 1.4313e-16 1.7095e-16 3.6300e-16 8.5841e-17 1.1820e-17 3.2959e-16 1.0344e-16 2.1170e-16 5.5932e-17 3.4430e-16 2.6363e-17 6.8049e-16 5.3771e-16 3.3266e-16 4.7202e-16 5.1118e-17 2.5672e-16 1.1528e-17 4.3284e-17 7.0858e-17 1.1954e-16 6.6086e-16 2.1418e-17 1.7726e-16 4.9239e-16 5.2865e-16 1.0869e-15 2.7495e-16 2.6209e-16 1.9656e-16 7.8488e-17 1.0653e-16 1.1877e-17 3.3445e-17 1.0662e-16 7.2206e-18 3.5057e-16 3.1189e-16 1.2498e-17 1.0300e-16 1.4375e-18 4.6500e-23 8.1636e-17 2.8606e-16 1.7539e-17 1.1342e-16 4.8731e-17 1.1068e-16 2.1457e-16 3.4652e-18 1.9901e-17 1.6471e-17 1.1556e-16 2.3963e-17 2.3674e-16 3.5188e-17 8.0509e-18 2.4489e-16 6.5417e-18 2.6310e-17 6.8096e-17 2.0982e-16 1.6324e-17 1.5501e-16 6.5591e-18 4.2507e-17 8.0167e-17 2.1221e-17 1.6864e-17 3.2693e-17 3.5703e-17 6.1685e-17 2.1457e-17 4.7467e-17 3.5043e-18 1.6380e-16 2.7469e-18 5.3555e-17 6.6858e-17 6.2034e-17 1.9101e-17 9.5506e-17 5.1721e-18 3.6057e-17 8.8609e-17 1.7528e-17 1.8029e-17 8.4621e-18 1.3480e-18 1.7446e-18 9.0365e-18 2.5279e-18 1.7367e-18 5.3052e-18 1.6508e-17 5.0777e-18 1.0034e-16 2.8612e-16 1.1453e-16 4.9743e-18 4.9407e-16 6.4026e-17 1.4528e-16 3.8296e-16 2.8886e-16 2.4488e-16 3.1570e-16 4.2645e-17 5.5832e-17 1.1190e-15 6.7587e-17 7.9014e-18 1.3155e-16 4.7618e-16 3.0524e-16 9.0271e-17 3.2087e-17 2.0304e-18 8.9706e-18 6.3250e-17 7.1455e-17 4.5442e-17 2.3172e-17 3.1848e-17 3.1026e-18 4.4840e-18 9.5873e-18 2.7153e-17 1.5471e-16 2.6147e-16 6.1516e-16 2.2899e-16 2.6665e-16 8.0690e-17 2.8794e-16 5.0216e-16 1.4116e-17 1.3122e-16 3.0301e-16 2.8844e-16 8.6975e-16 2.9712e-16 2.4814e-17 3.3698e-17 3.2497e-17 3.0669e-16 3.2711e-17 5.7749e-17 2.2688e-16 4.3137e-17 5.5851e-16 1.1319e-16 5.6833e-17 4.4456e-16 3.7133e-17 1.9409e-16 9.1106e-17 4.3454e-16 5.0526e-16 4.1935e-17 6.2619e-17 7.5979e-17 1.5125e-16 3.2190e-17 1.4184e-15 6.1034e-17 2.1981e-16 9.2620e-17 2.7966e-17 1.9128e-16 7.6693e-17 1.3701e-17 6.7213e-23 1.5064e-16 8.9137e-17 3.3030e-16 2.9339e-16 1.4986e-16 1.9760e-16 4.4752e-17 2.1333e-16 1.6000e-15 4.2837e-17 4.7860e-17 6.4834e-16 5.2690e-17 9.0283e-17 2.5059e-16 1.0346e-17 5.5302e-16 7.8488e-17 2.5319e-16 4.1568e-17 1.3087e-16 5.5903e-16 7.9427e-17 8.1560e-17 2.6814e-17 5.8325e-17 2.7838e-18 4.3125e-18 4.6500e-23 1.7867e-16 7.5111e-17 2.7105e-17 1.4178e-17 3.1609e-17 2.7671e-17 1.0426e-16 2.6566e-17 5.8598e-17 1.6471e-16 3.0864e-23 2.8756e-18 8.7718e-17 3.0558e-17 1.0556e-16 5.2232e-17 9.5673e-17 2.3918e-17 7.0445e-18 4.5923e-17 5.5968e-17 2.2684e-18 1.4576e-17 1.1239e-16 2.1864e-18 3.1073e-17 9.9936e-18 1.5626e-16 1.1017e-16 4.9067e-17 3.8194e-17 2.9422e-17 5.2565e-17 1.9577e-17 6.8673e-17 5.5953e-18 1.2091e-16 1.0339e-16 5.1458e-24 1.6146e-16 5.8352e-18 1.2177e-16 9.5526e-18 1.6404e-17 1.6786e-17 4.5131e-17 1.9643e-17 9.4708e-18 8.4757e-17 3.7918e-18 1.0999e-17 5.3052e-18 1.2106e-17 3.8082e-18 3.6356e-18 2.4369e-16 4.2503e-16 3.5531e-17 2.5102e-16 1.8871e-17 1.5167e-16 8.9137e-17 4.1006e-18 1.9709e-16 9.6388e-17 9.0094e-18 4.1209e-17 1.1850e-15 1.6754e-16 3.3863e-17 9.7601e-17 1.0495e-16 1.7442e-16 1.1805e-16 3.0692e-17 6.0911e-18 4.2717e-19 3.2716e-17 4.2611e-17 2.9730e-16 8.5823e-18 2.8101e-18 1.5513e-17 1.4573e-17 5.2730e-17 8.4046e-17 2.0356e-17 6.3947e-17 1.9186e-16 4.8722e-17 4.0427e-16 3.5862e-18 1.3362e-16 1.4908e-16 7.0578e-16 6.3493e-18 1.8226e-17 6.1170e-16 3.2173e-16 4.5303e-16 2.0782e-16 2.9991e-16 3.1775e-16 7.2838e-17 1.8809e-16 7.5519e-16 1.2039e-16 7.1895e-17 8.7913e-16 1.5632e-16 2.7848e-16 4.2629e-17 5.9412e-16 9.3698e-17 5.1160e-16 1.6483e-16 3.7312e-16 4.1935e-17 3.5782e-16 3.7990e-16 6.0500e-17 2.1460e-17 2.2457e-16 4.8827e-17 6.4651e-17 2.6463e-16 5.5932e-17 3.9148e-15 1.1025e-16 1.2331e-16 6.0223e-17 8.1178e-16 4.9633e-16 2.2610e-16 1.9302e-17 1.1528e-17 4.1403e-17 1.8647e-16 1.2690e-16 3.0938e-16 4.9619e-16 6.2040e-17 1.4894e-16 1.9846e-16 1.2154e-16 1.9316e-16 6.8971e-18 4.8140e-16 1.2013e-16 3.6589e-16 4.7507e-17 3.7807e-17 2.1900e-16 4.6212e-17 1.4595e-16 3.9515e-17 2.7357e-16 6.1243e-17 2.0125e-17 1.4880e-18 1.1706e-16 1.6141e-16 1.9133e-17 3.6862e-17 1.7122e-17 9.1818e-17 1.3456e-16 9.2405e-18 4.0908e-17 6.0737e-17 1.1457e-16 1.6966e-16 1.3771e-16 2.4446e-16 4.5622e-17 2.3119e-17 4.1704e-17 2.3918e-18 1.0958e-17 4.9090e-17 7.5401e-17 5.8979e-17 1.0130e-16 5.7636e-17 6.5591e-18 7.5031e-17 8.1823e-17 9.9742e-18 2.0402e-18 9.4864e-17 5.1068e-17 6.4727e-17 2.8035e-17 4.9270e-17 1.0560e-16 2.1582e-17 4.9058e-17 1.2878e-17 9.0072e-17 1.7559e-17 1.5119e-17 8.1425e-17 1.2188e-17 9.4381e-18 3.4815e-18 1.5737e-17 3.4664e-18 3.4145e-17 4.9545e-17 8.4262e-19 9.8413e-18 2.3494e-17 3.4392e-23 2.7927e-17 1.7451e-17 2.5278e-16 6.8717e-17 3.3008e-16 1.7309e-16 1.9646e-16 4.7045e-17 1.7208e-16 4.7066e-16 3.1534e-17 2.7021e-16 2.0541e-16 4.4533e-17 2.7764e-16 2.1894e-17 6.7726e-17 1.4145e-17 1.2147e-15 2.2709e-15 1.8749e-16 8.2311e-17 1.1370e-17 5.5533e-18 9.2694e-18 7.8666e-17 8.3182e-17 8.5823e-19 7.4937e-18 3.2319e-23 5.6050e-18 3.5952e-18 2.3404e-16 1.3571e-18 1.6768e-16 2.4058e-16 3.2969e-16 5.9006e-16 6.4910e-16 1.4679e-16 6.6890e-16 3.3071e-16 9.1006e-17 4.8755e-16 5.8932e-16 2.4266e-16 2.8535e-16 4.3424e-17 1.8534e-16 2.0943e-16 3.3352e-16 2.2080e-16 1.3771e-16 2.3151e-17 5.2723e-17 1.1377e-16 3.1802e-16 1.7050e-17 8.3430e-16 1.2378e-17 2.8779e-16 1.4016e-17 2.2476e-17 4.6640e-17 2.7677e-16 1.0735e-16 3.7040e-16 3.0250e-17 9.6571e-17 8.2738e-17 4.7607e-16 1.9395e-16 1.0585e-16 6.0127e-16 1.6756e-15 1.3661e-16 3.6308e-16 2.6670e-16 1.7784e-16 1.0737e-16 5.0725e-16 1.6407e-16 9.9910e-17 1.6185e-16 4.4379e-16 2.6299e-16 4.3752e-16 2.1775e-16 3.3324e-16 1.4894e-16 3.0033e-16 6.4587e-16 1.1137e-16 6.2074e-17 1.4992e-17 3.7161e-16 3.2884e-16 2.9543e-16 1.1633e-17 1.0518e-16 3.0327e-17 1.2306e-16 5.0382e-16 1.2498e-16 3.2013e-17 4.4921e-23 1.4880e-18 1.4479e-16 4.1551e-17 4.1614e-16 1.4178e-17 1.5805e-16 2.8929e-17 1.5275e-16 9.1250e-17 1.1720e-16 3.3148e-16 2.3407e-16 2.4059e-16 7.9229e-17 1.2964e-17 2.5047e-17 9.2476e-17 8.2590e-17 6.0592e-17 2.0742e-16 1.5836e-18 1.0105e-17 1.3006e-16 1.9677e-17 4.7550e-17 2.4050e-17 4.5473e-18 3.0668e-16 6.0953e-17 5.1004e-19 2.3833e-17 4.1627e-17 2.0791e-17 3.3922e-16 5.1554e-17 4.8224e-17 1.2256e-17 2.1403e-16 3.5914e-17 2.5523e-17 4.0544e-17 2.7319e-17 2.1575e-17 1.3231e-16 4.0449e-17 1.2931e-17 4.4538e-19 9.6288e-19 2.2431e-18 3.3653e-17 1.8538e-17 3.5313e-17 3.9410e-17 2.2011e-17 1.5233e-17 1.0470e-16 4.0190e-16 9.6750e-16 6.8219e-17 9.0193e-17 7.9864e-17 7.1508e-18 2.6040e-16 3.1757e-16 3.5723e-16 1.5325e-16 7.9283e-17 1.9674e-16 2.1661e-15 3.7125e-17 9.9332e-17 2.6876e-17 1.5937e-16 2.3816e-15 2.7776e-17 1.6741e-17 1.7867e-17 1.1107e-17 7.0884e-18 1.8355e-17 8.7033e-17 2.2314e-17 5.6203e-18 1.2410e-17 1.1210e-17 4.9135e-17 2.6765e-16 9.4995e-18 6.5368e-17 3.3499e-17 1.2343e-16 1.1182e-16 5.4510e-16 2.2019e-16 1.1966e-16 2.8433e-16 2.0318e-16 7.1196e-23 1.7903e-16 3.2991e-16 9.1929e-23 1.0236e-16 1.7523e-16 8.6659e-17 1.5334e-17 1.1040e-16 4.5311e-16 2.7781e-16 1.2462e-16 1.6548e-16 9.9180e-16 3.4100e-16 1.8269e-16 1.6091e-16 2.0078e-17 1.5418e-16 8.9905e-17 6.0631e-16 4.9483e-16 1.6996e-16 3.7990e-17 6.0500e-17 1.6095e-16 1.3829e-15 4.8827e-17 4.0407e-22 1.1908e-16 2.2373e-16 8.1612e-17 1.4859e-16 1.5756e-16 2.6240e-16 1.8830e-17 4.0719e-16 6.1440e-23 3.2814e-17 6.1483e-17 5.7964e-16 1.2307e-16 8.2759e-17 3.4416e-16 1.5350e-16 7.2675e-17 2.3656e-16 3.1789e-16 6.9449e-18 5.2207e-17 4.7762e-16 4.9972e-17 2.7551e-16 4.5080e-16 1.0392e-17 3.1409e-16 1.5272e-16 3.8558e-16 2.1463e-17 8.4675e-18 5.1381e-16 3.6189e-17 2.8750e-18 1.7856e-17 2.3104e-17 2.2693e-16 3.1889e-18 2.9773e-17 1.1854e-16 2.4275e-16 1.3820e-16 4.0427e-16 3.0957e-17 8.4415e-17 1.4420e-16 5.1761e-17 1.1413e-16 9.0747e-17 2.6836e-17 1.1902e-16 5.5605e-17 1.5626e-16 1.1506e-16 1.1877e-17 1.0883e-16 1.9206e-16 2.2775e-23 1.1959e-16 1.8438e-16 3.0315e-17 3.3104e-17 1.9394e-17 1.0711e-17 8.0844e-17 1.5449e-16 1.4122e-17 4.2753e-17 6.2648e-17 9.2480e-17 4.1565e-17 1.1353e-16 2.8296e-16 1.8113e-17 7.1380e-19 3.9255e-17 2.1428e-17 4.5567e-17 2.5842e-17 7.4603e-18 6.4431e-17 6.7402e-18 1.3708e-17 1.9008e-17 3.3705e-18 5.7890e-19 6.0631e-18 7.7037e-18 3.0466e-17 1.1634e-17 1.8792e-17 4.6539e-17 2.8425e-17 1.4126e-16 5.3917e-18 4.1400e-17 2.0097e-16 1.0525e-16 1.7295e-16 1.5216e-16 7.5679e-17 7.2449e-17 2.6824e-15 1.4945e-16 3.2734e-17 1.1316e-17 3.7511e-16 1.0432e-15 3.6108e-16 9.4867e-17 2.2740e-17 2.6485e-17 3.9804e-17 1.9011e-17 1.8100e-16 3.0896e-17 1.4051e-17 3.2319e-23 1.0089e-17 4.7936e-18 2.9739e-17 1.6013e-16 9.0804e-16 1.2836e-15 5.6193e-16 7.3113e-16 1.1834e-16 2.1642e-16 3.0601e-16 3.4281e-17 1.9260e-16 2.7339e-17 3.8045e-16 7.8250e-16 3.0006e-16 1.7060e-16 6.6385e-16 4.4774e-16 9.9673e-17 3.6800e-17 4.4423e-17 7.4084e-16 1.4379e-17 1.0343e-16 5.3902e-18 6.8200e-17 1.8269e-16 7.4265e-17 4.0156e-17 2.3828e-16 4.4953e-17 4.4308e-16 3.1032e-16 6.2619e-17 7.5979e-17 1.2100e-16 2.8971e-16 8.7465e-16 3.7841e-16 1.8102e-16 1.3231e-17 7.6907e-16 2.0199e-15 7.4056e-16 1.4158e-16 2.4519e-16 4.3309e-16 2.1474e-16 2.4576e-16 3.1269e-16 2.8052e-16 9.7861e-17 5.9670e-17 2.3724e-16 6.5903e-17 1.2494e-17 8.5084e-17 9.2871e-17 1.5631e-16 8.6811e-16 1.3226e-16 6.8971e-18 5.8467e-16 3.2356e-16 4.7859e-17 6.9775e-17 5.8165e-18 2.2765e-16 4.3324e-18 1.7314e-16 1.5100e-16 1.0137e-16 3.8277e-16 4.3125e-18 5.9520e-18 5.8531e-17 1.3104e-16 1.6901e-16 1.8856e-16 9.6145e-17 2.3646e-16 6.0614e-17 5.6598e-17 3.1178e-16 1.0192e-16 5.3333e-17 4.6968e-17 9.5263e-17 1.1945e-16 2.8357e-16 4.3669e-17 9.8126e-18 1.1162e-17 1.2132e-16 9.8972e-17 3.1093e-17 1.8904e-17 3.9355e-17 5.0432e-18 2.4050e-17 1.4400e-17 3.9350e-17 4.3775e-17 4.5394e-17 2.8506e-17 3.4332e-17 2.9814e-17 1.7171e-17 3.8176e-17 1.2300e-16 1.5187e-17 2.6092e-16 6.3485e-18 1.3173e-17 1.2563e-17 9.6944e-17 3.8126e-17 3.0744e-17 5.5505e-17 1.0569e-17 4.6393e-24 8.2808e-18 1.1714e-17 2.5863e-17 2.5279e-18 7.9309e-17 1.2884e-17 1.9810e-17 5.0777e-17 2.2468e-16 5.5769e-17 3.2614e-16 6.7153e-17 3.8133e-17 1.7523e-17 9.4467e-17 1.1142e-16 2.8066e-16 6.5040e-17 1.0722e-16 4.0843e-17 1.8611e-16 1.3628e-16 1.8087e-17 6.5469e-17 9.0528e-17 6.5110e-16 2.5392e-15 2.4304e-16 4.6038e-17 8.1215e-19 1.4524e-17 3.6532e-17 5.5066e-17 1.5635e-16 4.2912e-18 2.9272e-23 1.0756e-16 1.1210e-17 9.5873e-18 5.3014e-17 8.0068e-17 1.5631e-16 1.0659e-16 9.4196e-17 3.0965e-17 1.2498e-15 2.1454e-16 3.5897e-16 3.4684e-16 8.6774e-17 5.6957e-16 4.8986e-16 5.4802e-16 5.8835e-17 2.6985e-16 3.3361e-16 4.9107e-16 6.1337e-17 9.6906e-16 1.5548e-16 9.2605e-18 1.5817e-16 1.1377e-16 2.1022e-16 2.2733e-17 4.2629e-17 7.6741e-16 3.3464e-17 9.8114e-17 1.9480e-16 4.1198e-16 7.2966e-16 2.5047e-16 4.7487e-17 2.6217e-16 3.3263e-16 7.0918e-16 1.7090e-16 1.6809e-16 1.4554e-16 2.7966e-17 2.7493e-15 9.3469e-16 7.7183e-16 7.9580e-17 5.0213e-17 1.7017e-16 4.1681e-16 6.1767e-17 7.2050e-16 4.1403e-17 3.9158e-17 4.8736e-16 7.3226e-17 3.3912e-17 4.6441e-16 1.6121e-16 3.3370e-17 5.5906e-16 1.7924e-16 7.2419e-17 7.4958e-17 2.0823e-17 1.0653e-16 5.0476e-17 2.3993e-16 8.9330e-17 6.9318e-17 4.0065e-17 2.5403e-17 1.9442e-17 3.8973e-17 1.4375e-18 7.4400e-18 6.6233e-17 1.7579e-17 2.7105e-17 4.8204e-17 6.1902e-17 1.2578e-17 5.4553e-17 3.6096e-23 9.9506e-17 5.3531e-17 1.9753e-18 6.7097e-18 2.1411e-16 2.1298e-16 2.3258e-17 1.4385e-16 1.2266e-17 6.2984e-17 2.5282e-16 2.4743e-23 2.6429e-17 8.3176e-18 1.4576e-18 5.1872e-17 4.1541e-17 3.9410e-17 9.6814e-17 1.7316e-23 3.2643e-17 1.2944e-16 4.3773e-17 4.1426e-16 1.8223e-17 6.6563e-17 2.4417e-17 2.8509e-17 1.4457e-16 8.9605e-17 7.9040e-17 8.1230e-17 3.5011e-17 1.0921e-16 7.3896e-17 5.9550e-18 4.1405e-17 5.0921e-17 1.7717e-17 6.4800e-18 1.5892e-17 4.1710e-17 1.4473e-17 1.2884e-17 6.0530e-17 3.9669e-23 5.8896e-17 4.1645e-16 2.9778e-16 1.5989e-17 2.2548e-16 8.2223e-17 7.0756e-17 2.1913e-16 1.0024e-17 2.3060e-16 6.8771e-17 4.1443e-17 2.4659e-16 7.0002e-16 9.5193e-17 1.3545e-17 2.5461e-17 8.7461e-17 1.1002e-15 3.4025e-16 4.3597e-23 6.4972e-18 4.6989e-18 3.8168e-18 5.2444e-17 1.0321e-16 4.4628e-17 1.0304e-17 8.2736e-18 2.1299e-17 1.6778e-17 5.5600e-17 9.0924e-17 2.4868e-16 1.2181e-16 1.3642e-16 5.1953e-16 1.8469e-16 5.6458e-18 2.9816e-16 1.6737e-16 8.2541e-17 3.5769e-16 3.6056e-16 8.1795e-18 5.5893e-17 1.3958e-16 5.9646e-16 1.0832e-17 7.6672e-18 4.9067e-17 4.8421e-16 3.7042e-16 1.0545e-16 2.5340e-16 1.8327e-16 2.0460e-16 2.4359e-17 1.9340e-22 2.4763e-16 4.1348e-16 1.7981e-16 9.3279e-17 2.9354e-16 6.2619e-17 1.2347e-16 4.0333e-17 1.0730e-17 5.6734e-16 7.8124e-16 5.9479e-16 3.3078e-16 7.9704e-16 1.0839e-15 4.5536e-17 4.7954e-17 4.1726e-16 3.1383e-17 1.6814e-16 7.1566e-16 6.1381e-16 6.0906e-16 2.2583e-17 4.3074e-16 5.0943e-16 7.1578e-16 1.1066e-16 9.0401e-17 6.3958e-16 3.8639e-17 1.2154e-17 5.0466e-17 3.8968e-16 1.0994e-16 1.6018e-17 1.4203e-16 3.5778e-16 1.5995e-16 8.3567e-17 2.6427e-16 1.6026e-16 2.5403e-17 2.4302e-16 6.2635e-17 4.4921e-23 1.0416e-17 6.0071e-17 5.9130e-17 8.7693e-17 5.9546e-17 7.9023e-17 1.8238e-16 5.5765e-17 1.5709e-16 3.5048e-16 1.0912e-16 8.0000e-17 5.0802e-17 1.0375e-17 2.8706e-17 8.4088e-17 3.5963e-17 9.8944e-17 7.5740e-17 9.3143e-17 5.3049e-17 1.6479e-16 1.6786e-16 2.2374e-16 8.2131e-17 3.3524e-17 3.5621e-17 5.0593e-17 2.1057e-17 1.1782e-16 1.0888e-16 2.1028e-17 1.5064e-16 1.6120e-17 1.1029e-16 4.5172e-17 2.8776e-17 3.6468e-17 1.9046e-17 1.3717e-16 3.2264e-17 1.0092e-16 2.3496e-17 1.4384e-17 1.3483e-18 1.6040e-17 8.3137e-18 8.4734e-18 1.2212e-17 3.1161e-19 2.4857e-17 1.8091e-23 3.7894e-18 3.4392e-23 7.9973e-17 3.1266e-17 2.5884e-16 3.5522e-16 6.7508e-17 4.6357e-16 3.6057e-17 1.3549e-17 5.0346e-17 2.8932e-16 2.9564e-17 1.2076e-16 2.5226e-17 2.8913e-16 2.0069e-15 1.7135e-17 2.4833e-17 7.2140e-17 4.0038e-16 1.8751e-15 1.2499e-16 4.0458e-17 3.2486e-18 4.3145e-17 1.0360e-17 4.2611e-17 2.3645e-16 1.2015e-17 6.5570e-18 5.3778e-17 4.4840e-17 3.7151e-17 5.8186e-17 9.3638e-17 5.4141e-16 3.1671e-16 9.7444e-17 1.1182e-16 3.8372e-16 1.6937e-16 1.9616e-18 2.8433e-16 4.8678e-17 2.2783e-16 5.9678e-17 3.6262e-16 3.6183e-16 1.7680e-16 1.6175e-16 1.4804e-16 3.8336e-18 2.8622e-17 4.0425e-16 3.1023e-16 3.0675e-16 7.4467e-16 2.1561e-17 2.2733e-17 1.3398e-16 5.2605e-16 3.3464e-17 3.7844e-16 1.4235e-16 2.9538e-16 2.6000e-16 4.4727e-17 4.8437e-16 4.0333e-17 2.1460e-17 4.6097e-16 5.6152e-16 5.5600e-16 3.9694e-17 8.6695e-16 1.1171e-15 5.1049e-16 2.2835e-17 3.7639e-16 7.1135e-17 1.2155e-16 1.7105e-16 1.5442e-17 5.7832e-16 6.2104e-17 8.5775e-17 4.7817e-17 6.5537e-16 2.4988e-16 7.0903e-18 2.2780e-17 6.4984e-17 1.9272e-16 9.5712e-17 7.0178e-16 1.1993e-16 1.2654e-16 7.1017e-17 1.6627e-16 1.2942e-16 2.5070e-16 2.9171e-16 2.0319e-16 1.1290e-17 5.1381e-17 6.5419e-17 2.8750e-18 5.9520e-18 1.2322e-17 4.1551e-17 2.2163e-16 1.4178e-18 9.7462e-17 2.2514e-16 1.2971e-16 1.6864e-16 4.7541e-17 8.2356e-18 3.9506e-17 8.4350e-17 1.6034e-17 5.9263e-17 2.4242e-16 2.2263e-17 1.8808e-17 1.4749e-16 5.0094e-17 1.7340e-16 6.2186e-17 2.3629e-23 1.0640e-16 2.9538e-17 3.6440e-17 5.9115e-17 5.8088e-17 2.3273e-16 1.0609e-16 1.1916e-16 4.7206e-17 6.5512e-17 4.2052e-18 3.3934e-17 4.5782e-17 1.0871e-16 2.1707e-18 7.0741e-18 4.2155e-17 8.2800e-17 9.5485e-18 6.9455e-18 5.8304e-17 3.6741e-17 4.7497e-17 1.4697e-17 1.3288e-17 2.4923e-19 9.6597e-18 8.8476e-18 8.5098e-17 1.2126e-17 4.4021e-18 2.4119e-17 4.9444e-17 3.0309e-16 8.5588e-16 1.2329e-16 1.9829e-16 9.0311e-17 1.1761e-23 2.4389e-16 2.2508e-16 1.1234e-16 2.6750e-16 6.0063e-19 1.7946e-17 4.7063e-16 6.4731e-17 5.8696e-17 1.1316e-17 2.9348e-16 1.7778e-15 1.0971e-15 5.5804e-18 8.5275e-18 2.1786e-17 1.9084e-17 6.0966e-17 1.4326e-16 3.0038e-17 2.8101e-18 6.2052e-18 3.9235e-17 4.7936e-18 4.0342e-16 6.3782e-17 2.9842e-17 1.9947e-16 1.1693e-16 8.4295e-17 1.8290e-16 9.5979e-17 5.7670e-16 6.0496e-18 5.2911e-17 8.6574e-17 1.9893e-17 1.4178e-16 5.2951e-17 3.6911e-16 1.9208e-16 2.1665e-16 5.7504e-17 6.5422e-17 5.8638e-16 1.5743e-16 3.8344e-17 1.0860e-16 3.2341e-17 1.6482e-16 4.3847e-16 6.1888e-17 1.7401e-16 1.0512e-16 1.5733e-16 3.1093e-16 2.2645e-16 8.9455e-17 4.0839e-16 3.9325e-16 5.0432e-16 9.6921e-16 3.9062e-16 6.4651e-17 1.8524e-16 6.9916e-17 3.4889e-15 9.8263e-17 2.7402e-17 5.2480e-16 6.0465e-16 1.8233e-17 2.7525e-17 6.1767e-17 4.3230e-16 7.3019e-16 1.6782e-17 1.6552e-17 1.2815e-17 1.7313e-16 3.0134e-16 1.0864e-16 8.9572e-17 5.2087e-17 8.3531e-17 2.3622e-16 3.5813e-16 2.8832e-17 1.3740e-16 7.4229e-17 5.5984e-16 2.0892e-16 1.8629e-16 1.1304e-16 2.6249e-16 1.1804e-16 3.6189e-17 2.8750e-18 3.1248e-17 3.3886e-17 3.0364e-17 2.7105e-17 1.5595e-17 1.3171e-17 1.3081e-16 1.4547e-17 2.0791e-17 6.6337e-18 1.1324e-17 9.8765e-17 1.5336e-17 1.1318e-17 3.7039e-17 7.4248e-17 4.6238e-17 6.2964e-17 5.5809e-18 3.1309e-17 1.0293e-17 1.5469e-16 1.5350e-16 2.9152e-17 3.0259e-17 1.6762e-17 7.8062e-17 6.8082e-17 1.4019e-16 2.1932e-17 3.9254e-17 2.6092e-16 1.1651e-16 1.9519e-16 2.4146e-17 1.4040e-16 6.8209e-17 5.6439e-18 3.7547e-17 4.9071e-17 4.5540e-17 1.2944e-16 1.7290e-17 4.8751e-17 2.5842e-18 8.4550e-18 2.4050e-17 2.2339e-17 2.4923e-19 4.0820e-17 1.9380e-17 6.3679e-18 1.5158e-18 2.5312e-17 5.0777e-17 2.1814e-18 5.0434e-16 1.3925e-16 1.4212e-18 6.9237e-16 5.1895e-17 6.9250e-17 1.2504e-16 5.6041e-17 9.5589e-17 2.1985e-16 2.5346e-16 4.7989e-16 7.5335e-16 7.9010e-17 1.4561e-16 1.1457e-16 1.1662e-17 8.4864e-16 3.5414e-16 4.8828e-17 2.7613e-17 1.3242e-17 1.3086e-17 3.0811e-17 4.3901e-17 1.7165e-18 1.0304e-17 4.0334e-17 4.4840e-17 1.4381e-17 1.0215e-16 7.0568e-17 5.2578e-17 2.0404e-16 8.1204e-18 8.6015e-18 2.5283e-16 1.0162e-16 1.2946e-16 3.0651e-16 5.4181e-16 2.0504e-17 5.4208e-16 5.3167e-16 9.1929e-23 7.4442e-17 9.1659e-16 5.0551e-17 4.6003e-17 2.6578e-16 3.5538e-17 5.5563e-17 3.3551e-17 1.6161e-22 8.6243e-17 1.5345e-16 1.9487e-16 9.9020e-17 3.0787e-16 2.1725e-16 1.6483e-16 5.9077e-16 5.8709e-17 2.5047e-16 3.3241e-16 8.0667e-17 6.4381e-17 1.2529e-15 2.4414e-17 2.5860e-17 6.6157e-17 9.7882e-17 7.2431e-16 1.1983e-16 4.5670e-17 5.0114e-16 7.7412e-17 5.8749e-17 1.2386e-16 1.2469e-15 1.3065e-16 1.1292e-16 8.5775e-17 2.2069e-16 2.3432e-16 2.6594e-16 4.4314e-17 7.3245e-16 2.3183e-16 1.6494e-16 2.5407e-16 5.1728e-18 1.9822e-16 4.5971e-16 7.4877e-16 1.1877e-16 2.3993e-16 1.0806e-16 8.0871e-17 7.1544e-18 3.2741e-16 8.8876e-17 2.4636e-16 2.8750e-18 1.4880e-17 2.0024e-17 8.9494e-17 3.3483e-17 2.5520e-16 3.6614e-16 2.1885e-16 2.6913e-16 3.0032e-17 1.4152e-16 2.0898e-16 1.3926e-16 1.1598e-16 2.8296e-18 3.1484e-17 1.7891e-18 1.5755e-16 2.4532e-18 7.9727e-17 1.7455e-16 1.0214e-16 3.1093e-17 4.3856e-17 7.2879e-19 6.4841e-18 5.6117e-17 2.4252e-17 7.3079e-17 1.7178e-17 4.3353e-17 6.0283e-17 3.5619e-17 2.2753e-17 4.4855e-17 5.8080e-17 9.0343e-17 4.7960e-18 2.1707e-19 7.0559e-17 4.2484e-17 5.9959e-18 9.2435e-17 2.6009e-17 3.0085e-17 4.3258e-17 4.6751e-17 3.8599e-18 1.9258e-18 2.6917e-17 4.7987e-17 2.7807e-17 1.7946e-17 1.5158e-17 3.4392e-23 1.7772e-17 1.3015e-16 2.6793e-16 1.8906e-17 2.9491e-17 3.2529e-16 7.0092e-17 1.2044e-17 2.3852e-16 2.8157e-16 2.7593e-17 1.5487e-16 3.5557e-16 4.4001e-16 9.4549e-16 7.6154e-17 6.7726e-17 8.2041e-17 2.8182e-16 1.5899e-15 4.7913e-16 5.8594e-17 1.3806e-17 1.8796e-17 2.3991e-17 5.2444e-18 1.5019e-16 5.7501e-17 2.2481e-17 6.3086e-17 1.2331e-17 3.4754e-17 9.5683e-17 4.4783e-17 3.0410e-16 1.5683e-16 2.2250e-16 1.2042e-17 8.8400e-16 6.9443e-16 4.6097e-16 1.0284e-16 1.3334e-16 2.3466e-16 5.2218e-16 2.6174e-16 5.0010e-17 1.8300e-16 2.9317e-16 2.8886e-17 2.0318e-16 2.1262e-16 2.4877e-16 1.4817e-16 1.7255e-16 4.1371e-17 1.0780e-17 1.5345e-16 1.9487e-16 2.1042e-16 1.4055e-16 3.5041e-17 9.7397e-17 4.7417e-16 3.9419e-16 1.0735e-16 2.5643e-16 3.1510e-22 1.1803e-16 5.2006e-16 3.2959e-16 3.6204e-16 2.5140e-16 2.0975e-16 9.7680e-16 7.8850e-16 1.4615e-16 6.7213e-23 2.5106e-17 1.6004e-16 3.9322e-17 3.2427e-16 1.1528e-16 8.6192e-16 2.1444e-16 4.3035e-16 3.3501e-16 2.8558e-17 3.0134e-17 1.6471e-16 4.2152e-17 1.8057e-16 3.4804e-16 9.1386e-17 1.1993e-16 6.9357e-16 2.4702e-16 1.4400e-16 1.9631e-16 8.6448e-18 1.5885e-17 5.7235e-17 1.5242e-16 3.4023e-16 2.8255e-16 1.1500e-17 1.0416e-17 1.1090e-16 3.3560e-17 1.2755e-17 7.7977e-17 2.7658e-17 2.4527e-16 5.0916e-17 1.5478e-16 5.8598e-17 1.1839e-16 1.9753e-18 1.6007e-16 1.0375e-16 4.0743e-17 1.4402e-16 1.4300e-16 2.4368e-16 2.4915e-23 5.4790e-17 3.9589e-18 1.4614e-16 1.5123e-17 9.2557e-17 4.1066e-17 1.2973e-16 1.2884e-17 2.1861e-17 5.1533e-17 3.0092e-17 2.2057e-16 1.3389e-16 6.6689e-18 1.1214e-17 6.8521e-18 1.7794e-16 5.8884e-17 5.4051e-17 2.7208e-18 9.8800e-18 3.3548e-17 3.4481e-18 4.7141e-17 7.7958e-18 7.7302e-17 1.9024e-17 1.3955e-17 2.3109e-17 3.9877e-17 9.3481e-19 6.7410e-18 4.6312e-17 5.6084e-17 1.9810e-17 7.6165e-18 2.6176e-17 1.1093e-16 2.1561e-16 2.8780e-17 5.3121e-16 1.7860e-17 9.9359e-17 9.2026e-17 3.2349e-17 1.8477e-16 1.0451e-16 5.8261e-17 3.2901e-16 3.2250e-16 1.9039e-17 4.9666e-17 5.9409e-17 6.9969e-16 9.4927e-16 2.4304e-16 5.8594e-17 4.0607e-19 4.9125e-17 1.7448e-17 1.3111e-17 1.8793e-16 4.2912e-18 8.4304e-18 3.8265e-17 1.1210e-17 5.8722e-17 2.5860e-18 8.6853e-17 2.4584e-16 2.4972e-16 3.2806e-16 1.0838e-16 8.6069e-17 9.4097e-18 5.1001e-17 2.1779e-16 3.5979e-17 3.8730e-17 6.2165e-17 5.0713e-16 1.5297e-16 6.2035e-17 1.0109e-17 9.0270e-17 8.0505e-17 1.2778e-22 2.3988e-16 4.6302e-18 1.0545e-16 4.2922e-16 1.6844e-22 1.9892e-16 5.4808e-17 1.9340e-22 3.0787e-16 5.6065e-17 9.7397e-17 2.2542e-16 2.7677e-16 1.7891e-16 6.5532e-16 1.9158e-16 7.5111e-17 3.6936e-22 1.8310e-16 2.5860e-17 2.2493e-16 1.3983e-17 1.6067e-15 3.9065e-16 1.5071e-15 4.7318e-17 1.0461e-16 1.2155e-17 4.8956e-16 1.2739e-16 3.6313e-16 3.7639e-17 2.1444e-16 3.6598e-16 3.5881e-16 1.2494e-17 1.4003e-16 8.4110e-17 8.9397e-16 1.1633e-16 1.1311e-16 2.9140e-16 1.5991e-16 4.9655e-17 3.6280e-16 2.0784e-17 3.6353e-17 1.7866e-16 3.7547e-17 2.4325e-16 5.1511e-16 2.9718e-16 6.7646e-16 1.4375e-18 1.4880e-18 3.0806e-18 2.0775e-17 2.7424e-16 2.1550e-16 1.2117e-16 1.4842e-16 2.3882e-16 3.0032e-16 1.5479e-17 2.7795e-17 2.9630e-17 1.0352e-16 1.3676e-16 1.3890e-16 2.2990e-16 5.6513e-17 6.7053e-17 7.8132e-17 1.2523e-17 2.0586e-17 4.2753e-17 1.8147e-17 6.3405e-17 1.9452e-17 1.2827e-16 2.4707e-16 7.4328e-17 3.2693e-17 6.1205e-17 2.8039e-17 3.4332e-17 3.4521e-17 2.8035e-18 1.4063e-16 2.3501e-17 1.0018e-16 9.0736e-17 9.8855e-17 2.6380e-16 9.5078e-17 6.5381e-17 2.8225e-17 3.5026e-17 8.9886e-18 8.5172e-17 2.5832e-17 4.4293e-18 5.4831e-18 7.7901e-18 1.3166e-23 6.9468e-18 1.9705e-17 8.8043e-18 6.3471e-18 1.7451e-17 6.0982e-16 2.2833e-16 1.1547e-16 4.4964e-16 5.0210e-17 1.3549e-17 2.5874e-16 1.4534e-16 1.7344e-16 7.3645e-17 2.4205e-16 3.6756e-16 1.0615e-15 2.8558e-18 9.5945e-17 8.4870e-18 1.8270e-16 3.1866e-16 1.0416e-16 5.5804e-17 6.4972e-18 6.1940e-17 3.4351e-17 7.8666e-18 1.0475e-16 2.1456e-17 1.5924e-17 9.3078e-18 4.8203e-17 8.3889e-18 3.4911e-17 2.4699e-16 4.3626e-16 9.5928e-17 1.0394e-16 4.3008e-17 1.5600e-16 3.5757e-17 4.9236e-16 1.0284e-16 3.9366e-16 1.4353e-16 2.6855e-16 4.2806e-16 1.9710e-16 4.6526e-17 3.5720e-16 3.9358e-16 8.0505e-17 3.2711e-17 2.0434e-16 6.4824e-17 1.3900e-16 6.5159e-16 2.0483e-16 1.7760e-22 4.2629e-17 4.3321e-17 5.0865e-16 8.4098e-17 8.9905e-17 1.6324e-16 3.2709e-16 3.5782e-17 8.5477e-17 3.4283e-16 6.5454e-16 2.3639e-16 4.2724e-16 6.4651e-17 6.4834e-16 1.3983e-17 3.0605e-16 1.3901e-16 1.7355e-16 1.6776e-16 2.4897e-16 6.1180e-16 1.9661e-17 9.0720e-17 9.9910e-17 4.5355e-16 2.2563e-16 1.0483e-16 9.7573e-16 2.7844e-16 2.6057e-16 3.5046e-18 4.6894e-16 1.7362e-17 1.0789e-16 1.3277e-16 8.9949e-17 5.2859e-17 9.5719e-17 1.7815e-17 1.0324e-16 2.8816e-18 1.5163e-16 2.4325e-17 3.9515e-17 1.7914e-16 2.5054e-17 5.7500e-18 2.9760e-18 7.0854e-17 1.8218e-16 1.7379e-16 5.1040e-17 4.2146e-17 4.0249e-17 9.6983e-17 1.2013e-16 1.9901e-17 5.4561e-17 2.9630e-18 6.7097e-18 4.1501e-17 2.9632e-17 1.0735e-17 6.8501e-17 4.3339e-17 1.3155e-16 5.7921e-17 1.0372e-16 1.7801e-16 5.6711e-17 7.4337e-17 3.0979e-17 7.2151e-17 4.5473e-18 9.3690e-17 2.9923e-17 1.2241e-17 1.2150e-16 1.9741e-17 3.9621e-17 6.6933e-17 1.8599e-17 8.5460e-17 7.5670e-17 7.0983e-17 2.4306e-17 7.9040e-18 1.1920e-16 1.9628e-17 5.5564e-17 3.6234e-18 3.2809e-17 1.5542e-17 7.6901e-17 5.8929e-17 9.7201e-18 1.5269e-17 9.2689e-18 2.6629e-17 1.5158e-18 5.5027e-17 1.5233e-17 2.3268e-17 1.5155e-17 5.1302e-16 3.2049e-16 3.2397e-16 4.3807e-17 3.6131e-17 1.4196e-16 2.2143e-16 2.6114e-16 9.1515e-17 1.0151e-16 1.2562e-16 1.3603e-15 9.9953e-17 1.8060e-17 7.6383e-17 4.4508e-16 8.1174e-16 8.3327e-17 2.3717e-17 1.0558e-17 3.4174e-18 1.3086e-17 5.8999e-18 1.0860e-16 5.0636e-17 3.7468e-18 2.0684e-18 3.5872e-17 1.3182e-17 1.0215e-16 1.2756e-16 4.9594e-16 6.8520e-17 1.6241e-17 3.4062e-16 3.8910e-16 1.3926e-16 1.5693e-16 2.6618e-16 1.9683e-16 3.6452e-17 4.4759e-16 4.2806e-16 8.8252e-18 9.6154e-17 5.0884e-16 1.5526e-16 4.6003e-17 1.4311e-16 5.0198e-16 1.3428e-16 1.9651e-16 1.3963e-16 9.1633e-17 1.9892e-16 3.0449e-16 4.2703e-16 2.1417e-16 1.6119e-16 1.4984e-16 4.4308e-16 1.3419e-16 2.7731e-16 3.7990e-17 1.4117e-16 3.3532e-22 2.3285e-15 3.2959e-16 9.0511e-17 3.9694e-17 9.7882e-17 2.7289e-16 3.9305e-16 5.2521e-17 2.4734e-16 2.4688e-16 6.4827e-17 5.4854e-16 1.2546e-16 1.1528e-17 3.6698e-16 4.2328e-16 9.1955e-18 2.9840e-16 2.6237e-16 1.4003e-16 4.0303e-17 1.4051e-17 2.4481e-16 6.2648e-16 5.1728e-18 1.8490e-16 6.8076e-16 1.0344e-16 1.3213e-16 6.6890e-17 9.5093e-17 1.0109e-16 3.0192e-16 1.9758e-17 9.5819e-17 4.1757e-17 4.4921e-23 2.3808e-17 6.3152e-17 6.3924e-18 1.1320e-16 4.9622e-17 6.7170e-17 1.1446e-16 6.1826e-17 2.0791e-17 4.6436e-17 1.4206e-16 2.1728e-17 1.7637e-16 3.9614e-17 3.0558e-17 3.0415e-17 5.0519e-17 2.5513e-16 2.3121e-17 4.7746e-17 5.2257e-17 8.0842e-17 4.9905e-17 1.0932e-17 8.5013e-17 1.8293e-16 1.7431e-16 1.1867e-17 8.0902e-17 9.5888e-17 4.5796e-17 1.1844e-16 1.6476e-17 4.3454e-17 1.0441e-17 8.2103e-17 9.9650e-17 1.5846e-17 7.0015e-17 4.9400e-19 5.6247e-17 1.5516e-17 6.3544e-18 4.1724e-18 5.1235e-17 1.2682e-17 1.0392e-18 5.1996e-17 6.4551e-17 2.4305e-17 3.9603e-17 2.0840e-17 5.3052e-18 1.1005e-17 5.0777e-18 2.2541e-17 4.2251e-16 7.5625e-17 4.0150e-17 3.2993e-16 4.0775e-17 9.4843e-17 3.3674e-16 9.1124e-17 2.1187e-16 1.3538e-16 6.1264e-17 5.3838e-17 3.0218e-16 1.0186e-16 4.9666e-17 6.2238e-17 1.1078e-16 1.0298e-15 3.4025e-16 9.6262e-17 7.1875e-17 2.4776e-17 5.4526e-19 4.5888e-18 1.9178e-16 1.6306e-17 1.1241e-17 2.4821e-17 3.3630e-18 5.9920e-18 2.7153e-17 4.2341e-16 1.7195e-16 4.7203e-17 1.8190e-16 3.2686e-16 1.0579e-16 6.5868e-17 1.5693e-17 8.8727e-17 4.6561e-17 1.1391e-17 1.2184e-16 4.4987e-16 1.1473e-16 7.1340e-17 3.7068e-16 2.8886e-17 1.6484e-16 5.0293e-16 2.8875e-16 7.8714e-17 3.4509e-16 2.3788e-16 4.8512e-17 1.9323e-16 1.7052e-16 1.9340e-22 7.3620e-17 4.9057e-17 3.1467e-16 5.4413e-17 1.9290e-16 1.5207e-16 2.7542e-16 1.4117e-16 3.8628e-16 1.3593e-15 6.1034e-17 1.1637e-16 3.8371e-16 3.6356e-16 2.4076e-15 1.7016e-16 7.8096e-16 3.1832e-16 2.1968e-16 3.5250e-16 1.0617e-16 2.3163e-17 1.7292e-16 3.5569e-16 1.8647e-18 1.5632e-16 2.0137e-17 5.0512e-16 1.2053e-16 6.1330e-17 5.4446e-16 6.1983e-16 1.6880e-16 3.6210e-17 3.4647e-16 1.2494e-16 2.7789e-16 4.3053e-17 7.2707e-18 1.0518e-16 1.9496e-16 7.8699e-17 4.9394e-17 2.9162e-17 1.4476e-16 4.4921e-23 2.9760e-18 2.4645e-17 3.3560e-17 1.2755e-16 1.5595e-17 2.3707e-17 2.2137e-16 1.6366e-16 3.4652e-17 1.2604e-16 1.4412e-17 7.1111e-17 1.0544e-16 4.5274e-17 1.2223e-16 1.5207e-17 1.7125e-18 1.0712e-16 3.5877e-17 1.2132e-16 1.4727e-16 1.7101e-17 2.2684e-17 1.6033e-17 5.1872e-17 5.2473e-17 3.4105e-17 1.8676e-16 1.3410e-16 7.6506e-18 5.7012e-17 1.9226e-16 1.9614e-18 7.3591e-18 3.3282e-17 4.1814e-17 3.0907e-17 3.0694e-16 1.2153e-17 2.9047e-16 4.5683e-18 3.7133e-18 4.7288e-18 7.0272e-18 4.1123e-17 4.1032e-18 9.5013e-18 4.9492e-17 1.6948e-17 3.9885e-17 2.9492e-18 4.8628e-17 3.7894e-18 5.5027e-18 4.0621e-17 3.3447e-17 2.9521e-16 3.6613e-16 9.6288e-17 1.6248e-16 2.0387e-16 5.5701e-17 2.8433e-16 3.5220e-16 1.9709e-18 1.3863e-16 3.1833e-17 3.7554e-16 1.1089e-16 4.2837e-17 5.3052e-17 2.1218e-17 2.4295e-16 8.9560e-16 6.9439e-17 9.7657e-18 8.9336e-18 9.3978e-18 1.7039e-23 3.6711e-17 1.3479e-16 6.0076e-18 4.0278e-17 8.2736e-18 2.5783e-17 1.3182e-17 5.0428e-17 6.2425e-17 2.9984e-16 6.5322e-16 3.2481e-18 1.6859e-16 1.7931e-16 1.0162e-16 1.6085e-16 3.1659e-16 6.7726e-17 2.8023e-16 4.1277e-16 4.3624e-17 2.2063e-16 1.5199e-16 1.0531e-22 2.1665e-16 1.4184e-16 2.4533e-17 5.3307e-17 3.2412e-16 3.8344e-17 1.0343e-16 2.1561e-17 3.5805e-16 2.8013e-16 3.3419e-16 1.6732e-16 2.7332e-16 1.5733e-16 3.5757e-16 3.7741e-16 4.4727e-16 2.8492e-17 1.7142e-16 1.0730e-17 1.1820e-16 8.7890e-16 1.5516e-16 3.9694e-17 3.2161e-16 2.8309e-15 9.5866e-17 1.3473e-16 1.6776e-16 6.6951e-17 5.7939e-16 1.1010e-16 1.3704e-16 3.0165e-16 9.4097e-18 8.2046e-17 7.7242e-17 1.6238e-15 1.5528e-16 1.4712e-16 1.3668e-16 2.8101e-17 7.4657e-16 6.7869e-16 3.2071e-16 2.9150e-16 7.3682e-17 4.9403e-17 1.0392e-17 1.9049e-16 8.6448e-18 1.0224e-15 1.1018e-16 4.3325e-16 7.4989e-17 1.0718e-16 5.7500e-18 4.6500e-23 2.6185e-17 1.9177e-17 1.2755e-17 4.0265e-16 2.2917e-16 4.0249e-17 1.4426e-16 2.3101e-17 2.8746e-17 9.2650e-18 1.3827e-17 7.0931e-17 1.1318e-17 5.7411e-17 2.3258e-17 3.4250e-18 8.9949e-18 6.6173e-17 1.0488e-16 2.6129e-17 9.4834e-17 2.2684e-18 2.2775e-23 2.2982e-16 2.9152e-18 5.3052e-17 6.4959e-17 7.7023e-17 1.2904e-16 1.2524e-16 9.3983e-17 1.0199e-17 8.3403e-17 3.5892e-18 5.1276e-17 3.9966e-17 4.0810e-17 1.4257e-16 2.1571e-17 4.8681e-17 3.1033e-17 4.8323e-17 1.9435e-17 3.9325e-18 1.1563e-17 4.6764e-17 2.4650e-17 1.8942e-17 4.6741e-18 1.0954e-17 1.8091e-23 9.0947e-18 1.4307e-17 1.7772e-17 1.0907e-17 9.2140e-17 2.1270e-16 4.4413e-17 1.6381e-16 3.4709e-17 2.3598e-16 1.7827e-16 3.5083e-17 3.9467e-16 4.2238e-17 1.7418e-17 5.2974e-16 2.5309e-16 1.4755e-16 7.9014e-18 9.7601e-17 4.0815e-17 2.5593e-15 4.3747e-16 2.7902e-18 3.2080e-17 6.1086e-17 3.3261e-17 7.3421e-17 2.4723e-16 5.2352e-17 1.2177e-17 7.2394e-18 1.0425e-16 4.7936e-18 1.3706e-16 3.7862e-16 6.2526e-17 6.7759e-16 4.8722e-17 4.8340e-16 9.3241e-17 5.6458e-18 1.8439e-16 1.9964e-16 1.4815e-17 2.9617e-16 2.1385e-16 5.6438e-16 2.0592e-17 3.5050e-16 2.3589e-16 2.8886e-17 1.9935e-16 7.2782e-16 7.1076e-17 4.6302e-17 9.5859e-17 4.6542e-17 4.8512e-17 1.1935e-15 9.7437e-17 1.7947e-16 1.2716e-16 1.6820e-16 4.4953e-17 2.6429e-16 4.5290e-16 1.1629e-16 2.9679e-22 2.5208e-16 2.6825e-16 4.6097e-16 4.3945e-16 4.0084e-16 1.7201e-16 1.0348e-15 5.8659e-16 1.1983e-16 3.1741e-16 1.2690e-16 5.9209e-16 2.1879e-16 8.0020e-16 3.2814e-16 1.4218e-16 1.3738e-16 4.3261e-16 8.6437e-17 8.9519e-16 1.0174e-16 9.5719e-17 2.1728e-16 5.6202e-17 3.1773e-16 1.8272e-16 7.4144e-17 1.1327e-16 4.0045e-17 2.9333e-17 5.3445e-17 2.6465e-16 2.7375e-17 1.1986e-16 9.8731e-17 7.4796e-17 5.4714e-16 3.9808e-16 2.8750e-18 2.9760e-18 3.0806e-18 1.7579e-16 3.1251e-16 1.1626e-16 2.5814e-16 3.7608e-16 6.9100e-17 1.1551e-17 1.1277e-16 4.4781e-16 2.2716e-17 1.3036e-16 1.1318e-17 6.5745e-17 1.9680e-17 6.0794e-17 2.8620e-17 1.6743e-17 3.5222e-17 1.6865e-16 9.4057e-17 5.2930e-18 9.9845e-17 2.1614e-17 3.5711e-17 6.5178e-17 6.7457e-17 5.8183e-17 1.6321e-17 3.5983e-17 2.5320e-17 8.9049e-17 3.6795e-17 2.6430e-17 5.9517e-17 1.4654e-17 2.0275e-16 3.1743e-17 8.5627e-18 1.3905e-16 8.8854e-18 7.6844e-18 2.6242e-17 2.3595e-17 1.2309e-17 1.0392e-17 1.5406e-18 1.1963e-17 1.2464e-17 8.4262e-19 2.1419e-17 1.5158e-17 2.0910e-17 7.6165e-18 3.1993e-17 6.6680e-17 1.5561e-16 8.6340e-17 1.7143e-16 7.6157e-17 1.5054e-17 1.9932e-16 9.6136e-17 1.6605e-16 1.2780e-16 1.1352e-16 1.0768e-16 3.9953e-16 3.0462e-17 5.1923e-17 1.9237e-16 3.5762e-16 2.0998e-15 4.2358e-16 8.3706e-18 1.6649e-17 2.0077e-17 1.0360e-17 4.9822e-17 2.1874e-16 3.6904e-17 9.1797e-17 4.0334e-17 8.9680e-18 1.9175e-17 1.1120e-16 1.5199e-16 3.7799e-16 1.8729e-16 3.2481e-17 7.6897e-16 1.9903e-16 7.5277e-18 1.0593e-16 2.1577e-16 3.1746e-17 4.2603e-16 2.2628e-16 8.7248e-17 3.5301e-17 1.8610e-17 6.2341e-16 1.1952e-15 1.0734e-16 4.2933e-16 7.6407e-16 4.6302e-17 3.4030e-16 1.0343e-17 2.6951e-17 1.0230e-16 7.3078e-17 2.4755e-17 6.6927e-17 6.3073e-16 4.7950e-16 2.1765e-16 1.0903e-16 2.5942e-16 1.4246e-16 5.0417e-17 4.1847e-16 2.1275e-16 1.9531e-16 2.1981e-16 4.3664e-16 2.5170e-16 1.1145e-15 1.6058e-16 9.1341e-18 3.8715e-17 2.0713e-16 1.2155e-17 1.0814e-16 2.7023e-17 2.6899e-17 3.2557e-16 7.4587e-18 1.8391e-18 3.6064e-16 5.5331e-17 2.7120e-16 5.0816e-17 4.7421e-16 1.5626e-16 5.5687e-17 6.7246e-17 1.6657e-17 9.2904e-17 2.6245e-17 2.5238e-17 7.8523e-17 5.6191e-17 7.7983e-17 9.4438e-17 7.4796e-17 9.9985e-17 3.4797e-17 4.4921e-23 2.5296e-17 4.6209e-18 2.0775e-17 2.0728e-17 6.5217e-17 1.6595e-16 2.3772e-16 2.6064e-16 1.7326e-17 4.1239e-16 3.2942e-17 3.6543e-17 1.2269e-16 7.8286e-17 2.0464e-16 1.0735e-17 1.6269e-17 7.9319e-17 6.9362e-17 4.1484e-17 1.7102e-16 1.3836e-16 9.7543e-17 9.4743e-18 1.5994e-16 1.3118e-17 1.9705e-17 5.9337e-17 8.3118e-18 2.6012e-17 1.8692e-18 5.3643e-17 1.6084e-17 9.6369e-17 1.1910e-16 1.0042e-16 7.5137e-17 4.9927e-18 5.4053e-17 1.5973e-17 3.1550e-17 7.5593e-18 4.0343e-17 2.0313e-17 1.1573e-17 8.2063e-18 6.9775e-18 4.3330e-17 9.9693e-19 2.0254e-17 2.1066e-18 1.0420e-17 1.0610e-17 5.5027e-18 1.7772e-17 4.6535e-17 1.1881e-16 1.5961e-16 1.3075e-16 1.4723e-16 1.2131e-16 8.0165e-17 3.7636e-16 1.1573e-16 8.1792e-17 2.2310e-16 2.9250e-16 1.7015e-16 6.8563e-16 1.1423e-16 3.7249e-17 3.8192e-17 6.0737e-23 8.9225e-16 3.4720e-16 3.4877e-17 1.9085e-17 1.0252e-17 7.0884e-18 5.3099e-17 1.2708e-16 5.9218e-17 1.4051e-17 2.7923e-17 6.7260e-18 6.4714e-17 3.8791e-17 1.2078e-16 2.9700e-16 5.1009e-16 3.4105e-17 1.3659e-15 5.3076e-16 1.5055e-17 5.9240e-16 1.1696e-16 4.7620e-16 1.4353e-16 8.7528e-16 8.5612e-16 2.5593e-16 1.3648e-16 8.7615e-17 9.0270e-17 1.5334e-16 3.2711e-16 5.7749e-17 1.8984e-16 9.5859e-18 4.6025e-16 2.3717e-16 5.6833e-18 2.0096e-16 6.1888e-18 5.0865e-16 2.1901e-22 2.2476e-17 1.0105e-16 1.5935e-16 2.2364e-16 9.4974e-18 4.1342e-16 1.1803e-16 1.6548e-16 2.8076e-16 5.1721e-17 4.1348e-22 5.5932e-17 1.5889e-15 1.8934e-16 1.0504e-16 5.5921e-17 2.2387e-16 4.0517e-18 3.9322e-16 4.0534e-17 2.8820e-17 7.9041e-16 3.2632e-16 1.7839e-16 1.7940e-16 2.9629e-16 1.3826e-16 1.2441e-16 1.9320e-17 1.9793e-16 1.3400e-16 2.6036e-16 1.6657e-18 4.3248e-17 1.4203e-16 3.1325e-16 2.0358e-17 5.9073e-17 1.4441e-18 1.1304e-16 5.3628e-17 3.4162e-16 1.4058e-16 1.4375e-18 1.4880e-18 1.6635e-16 5.1139e-17 4.4325e-16 5.2457e-17 9.2194e-17 1.3584e-16 1.3093e-16 8.2009e-17 2.3439e-16 2.3986e-16 3.2593e-17 1.1215e-16 7.5456e-17 2.1298e-17 2.7955e-23 5.6513e-17 7.1959e-17 1.4670e-16 2.3481e-18 2.2170e-17 5.7522e-17 7.5614e-19 8.0167e-18 8.5734e-17 2.6965e-17 2.3684e-23 1.9613e-16 2.4935e-17 6.1205e-18 7.4770e-18 4.2915e-19 2.3027e-16 4.8710e-17 8.2552e-17 6.1043e-19 7.4604e-18 3.7771e-17 8.3982e-17 9.8800e-19 2.8552e-17 2.7983e-17 6.0884e-17 3.3050e-17 6.8538e-18 1.4796e-17 8.6106e-18 2.6383e-17 1.2462e-17 2.4928e-17 4.2131e-19 1.2157e-17 2.2737e-18 2.9714e-17 1.7772e-17 3.6356e-18 3.2613e-16 4.7993e-16 1.7410e-17 9.5830e-17 5.7961e-17 1.6560e-17 1.6301e-16 1.1345e-16 1.4486e-16 1.1534e-16 1.6818e-17 1.5573e-15 3.4874e-16 4.0933e-17 5.6438e-18 8.3456e-17 3.3624e-16 2.3749e-15 4.1663e-17 9.7657e-18 2.0304e-18 2.4349e-17 3.8168e-18 8.5221e-18 1.9024e-16 3.4329e-18 2.6228e-17 1.0342e-18 1.4573e-17 1.0306e-16 5.1850e-16 2.6599e-16 1.1368e-17 7.3088e-17 3.2481e-17 9.9778e-17 1.6317e-16 6.7750e-17 3.4131e-16 6.6545e-17 2.7514e-17 2.5061e-17 1.0941e-16 3.0537e-16 1.8239e-16 7.3201e-16 5.7624e-16 2.2026e-16 6.5171e-17 4.8658e-16 3.1096e-17 4.6302e-17 1.7734e-16 5.5334e-16 3.3958e-16 2.3302e-16 1.1571e-16 1.1140e-16 3.3464e-17 4.9057e-17 2.0229e-16 2.4291e-22 8.3869e-18 3.5782e-17 9.4974e-18 1.2100e-16 1.2876e-16 2.0093e-16 2.3193e-16 1.0344e-16 9.2620e-17 4.6144e-16 7.9317e-16 2.8760e-16 7.1360e-23 6.4525e-17 5.5443e-16 5.2267e-16 2.6935e-16 1.6600e-16 2.5554e-16 1.3174e-17 2.6478e-16 9.1955e-18 2.6727e-16 5.8008e-16 2.4816e-17 2.1553e-16 8.4303e-17 3.1252e-17 1.9142e-17 2.2071e-16 1.8156e-16 1.6018e-18 3.2421e-17 3.5630e-17 1.3523e-16 2.8816e-17 7.2206e-18 6.0097e-17 2.9636e-17 3.3328e-17 8.6297e-17 2.8750e-18 3.8688e-17 1.5095e-16 5.1139e-17 7.1749e-17 4.4305e-23 1.9756e-17 3.3960e-17 4.8491e-17 3.1187e-17 1.1056e-18 8.9562e-17 2.2617e-16 2.3005e-17 4.0558e-17 7.3153e-17 2.8804e-16 5.5657e-17 9.8126e-18 7.9727e-18 2.4734e-16 1.1402e-16 7.6956e-17 1.5879e-17 2.9152e-18 6.6281e-17 3.9355e-17 2.3684e-23 1.4491e-16 2.0502e-17 1.0303e-16 4.2058e-18 2.8753e-17 6.2766e-18 5.3616e-17 8.8098e-18 4.4561e-17 7.7268e-18 7.3805e-18 8.3800e-17 3.2604e-17 8.8225e-17 4.9069e-17 3.7535e-17 7.5762e-18 5.7303e-18 2.8473e-17 1.2322e-17 5.0070e-18 4.1373e-17 1.3087e-17 4.2131e-17 5.7890e-19 1.8947e-17 4.4021e-18 3.9669e-23 1.8178e-17 1.6852e-16 2.4687e-16 1.2365e-16 2.0459e-16 1.8702e-16 1.4678e-17 4.0442e-17 2.9023e-16 3.3013e-17 2.5234e-16 2.5046e-16 9.3917e-16 4.9941e-17 1.3327e-17 6.9984e-17 5.5166e-17 3.8872e-17 1.1572e-15 1.2499e-16 2.3717e-17 4.2232e-17 5.1261e-18 2.2901e-17 2.6877e-17 8.7033e-17 1.5448e-17 1.4051e-17 2.0684e-17 1.0089e-17 8.1492e-17 8.5339e-17 5.4283e-18 1.7195e-16 2.4972e-16 3.2481e-17 2.0884e-15 1.6497e-16 2.1078e-16 7.2578e-16 2.0165e-17 4.6773e-16 4.1009e-17 1.2433e-16 2.3993e-16 9.1194e-17 4.3114e-16 1.3816e-16 1.9859e-16 1.9551e-16 3.2711e-16 1.1550e-16 7.8714e-17 4.7930e-17 6.7228e-17 3.7192e-16 1.2503e-16 3.6539e-17 2.1042e-16 1.4055e-16 2.2426e-16 4.3454e-16 2.0988e-16 1.3419e-16 5.3673e-17 6.9331e-16 2.0167e-17 8.5841e-17 1.2292e-15 3.0517e-16 1.2930e-16 5.2925e-16 1.3983e-16 3.7491e-16 4.2421e-16 2.4662e-16 5.9363e-16 1.7365e-16 3.8086e-16 2.9491e-17 2.3356e-16 1.4026e-16 1.2985e-16 2.4241e-17 1.3977e-16 9.4644e-16 3.0343e-17 3.5451e-17 2.1904e-16 2.5115e-16 5.0871e-16 9.5712e-17 3.7934e-17 4.4975e-17 1.7620e-17 4.4772e-17 2.5089e-16 1.5123e-16 1.2247e-16 1.1900e-15 5.2943e-17 1.3971e-16 1.6803e-16 2.9230e-16 1.4375e-18 2.9760e-18 4.8134e-23 2.4291e-16 4.9826e-23 1.7013e-17 4.2146e-17 5.5342e-17 1.8184e-17 2.7259e-16 3.0957e-17 7.9268e-17 2.3901e-16 1.3803e-16 4.5274e-17 1.5742e-17 8.5877e-17 8.5626e-18 1.0630e-17 7.1754e-18 5.4007e-17 1.5836e-17 4.5085e-17 7.3346e-17 9.6201e-17 2.3775e-17 4.3728e-18 6.8210e-18 5.6214e-17 3.5464e-17 1.3261e-17 1.0748e-17 1.7209e-16 3.5306e-18 8.4104e-18 3.8829e-17 1.6176e-16 1.0445e-16 9.7682e-18 6.4936e-17 1.8854e-16 2.1985e-17 4.3234e-17 1.2842e-16 1.3835e-17 5.5505e-17 5.8190e-17 5.6414e-18 2.0413e-17 1.7695e-17 1.1529e-17 2.1066e-18 2.0840e-17 2.7284e-17 3.3016e-18 2.4119e-17 1.5997e-17 1.1881e-16 2.4796e-16 4.7611e-17 1.9630e-16 1.5164e-17 8.8821e-17 4.4940e-16 2.1369e-16 1.3451e-16 2.0252e-16 2.3965e-16 1.9807e-16 3.9191e-16 8.7577e-17 1.0159e-17 6.6482e-17 2.7405e-16 1.3484e-15 7.7077e-16 8.3706e-18 1.0558e-17 1.3349e-23 1.5267e-17 1.0358e-16 2.2028e-16 4.2912e-18 2.0608e-17 7.2394e-18 2.3541e-17 1.9175e-17 6.4651e-18 7.7353e-17 1.2789e-16 5.6339e-16 1.1368e-17 1.9267e-16 3.9986e-16 3.5757e-17 2.2754e-16 3.1861e-16 3.8096e-17 3.7136e-16 5.2218e-16 2.9446e-16 4.0596e-16 6.2035e-18 3.7068e-16 2.6720e-16 5.7504e-17 1.9218e-16 6.7078e-16 2.8708e-16 1.2941e-16 8.2742e-17 7.2229e-16 5.6833e-18 4.8719e-17 4.8891e-16 2.0078e-17 9.8114e-17 4.4953e-16 1.5547e-16 3.8580e-16 7.3353e-16 8.5477e-17 3.2267e-16 9.6571e-17 7.6828e-16 2.6855e-16 5.1721e-17 1.9847e-16 9.7882e-17 1.9740e-15 1.9173e-17 9.3624e-17 2.5810e-17 2.1131e-16 6.2598e-16 3.5390e-17 3.6288e-16 5.7640e-18 6.8879e-16 2.3681e-16 1.6552e-17 4.4668e-16 2.4096e-16 5.0873e-16 2.3305e-16 1.0538e-16 2.2571e-17 9.2232e-17 1.8277e-16 4.6640e-17 3.8443e-17 4.2301e-16 9.5013e-17 5.1913e-16 3.0113e-16 4.7945e-16 5.1512e-17 1.0726e-16 1.2498e-17 8.7689e-17 1.4375e-18 1.4880e-18 5.2370e-17 4.9941e-23 5.5805e-17 1.4178e-17 5.2682e-17 2.6413e-17 8.1223e-17 8.3164e-17 5.8598e-17 1.3383e-17 1.0864e-17 2.8756e-17 1.1130e-16 4.6299e-18 5.0095e-17 2.6630e-16 7.9319e-17 4.7836e-18 7.8272e-17 3.0879e-17 5.5968e-17 4.5369e-18 5.9761e-17 4.3227e-18 1.4576e-17 1.5916e-17 1.3054e-16 2.4160e-16 5.7124e-17 3.5983e-17 2.0513e-16 9.6110e-17 1.0828e-16 2.3167e-17 1.8008e-17 1.9850e-16 1.0419e-17 8.3619e-17 7.1136e-17 2.4697e-17 5.9280e-17 7.3888e-19 5.7096e-18 3.0337e-18 1.8899e-17 4.8991e-18 6.2202e-17 5.7323e-18 1.8073e-17 2.9492e-18 3.0682e-17 1.8189e-17 8.8043e-18 2.6658e-17 3.9991e-17 1.0002e-16 2.5814e-17 2.0253e-17 3.9426e-16 6.5711e-17 1.8818e-18 3.6150e-16 2.3510e-16 9.6574e-17 1.1372e-17 4.8651e-17 1.2363e-16 6.3654e-16 7.4250e-17 7.2241e-17 9.0528e-17 7.5800e-17 1.3484e-15 2.1526e-16 5.5804e-18 1.6243e-18 5.5533e-18 6.5431e-18 1.5209e-16 1.0090e-16 2.1456e-17 2.2481e-17 1.4479e-17 1.2331e-17 8.6285e-17 1.5646e-16 1.6963e-16 2.8989e-16 1.9490e-16 3.5730e-17 3.5954e-16 1.4165e-16 2.2583e-17 1.4516e-16 2.2787e-16 2.3281e-16 1.6631e-16 5.7192e-17 9.5427e-17 8.2369e-17 1.3958e-16 5.8635e-16 2.8886e-16 2.3001e-17 5.6427e-16 1.1550e-16 1.8521e-17 1.1503e-16 3.3097e-16 4.3122e-17 1.1935e-16 4.9328e-16 8.0454e-17 5.4211e-16 5.6065e-17 5.7689e-16 2.0988e-16 5.0322e-17 9.8400e-17 1.8995e-17 4.9408e-16 4.2920e-17 3.0731e-16 5.8593e-16 1.2930e-16 1.4554e-16 1.1186e-16 1.2191e-15 1.0545e-16 1.7355e-16 1.4841e-16 2.0713e-16 8.1033e-18 4.5220e-16 8.2999e-17 2.2864e-16 6.5868e-17 8.9318e-16 5.2414e-16 5.8581e-17 1.2137e-16 6.2040e-17 2.1553e-16 1.4402e-16 1.9098e-16 3.4108e-16 3.3796e-16 3.4980e-17 8.4895e-17 4.4772e-16 3.5630e-17 2.6174e-17 4.4665e-17 1.1120e-16 3.5772e-17 6.7740e-17 2.0830e-17 2.5054e-17 4.3125e-18 2.5296e-17 6.3152e-17 4.9541e-17 2.2481e-16 1.2902e-16 9.4828e-17 9.6849e-17 2.5458e-17 1.3861e-16 8.0710e-17 2.1721e-16 1.5605e-16 6.6138e-17 1.2262e-17 9.0747e-17 1.8786e-17 7.9632e-17 2.0443e-17 2.3440e-16 3.4440e-17 2.0586e-17 3.2648e-17 6.2004e-17 5.4659e-17 6.8443e-17 1.0932e-17 9.0189e-17 7.1205e-17 6.6495e-17 1.0099e-16 1.7758e-17 3.8194e-17 2.5852e-16 2.0675e-17 6.7542e-17 4.2425e-17 2.3980e-17 1.0419e-17 3.2287e-17 5.6480e-17 5.7104e-19 1.6975e-17 1.0344e-18 7.6860e-19 6.6291e-18 6.8386e-18 1.2470e-17 3.1775e-17 1.1963e-17 3.5835e-17 5.0558e-18 5.7890e-18 1.2126e-17 3.8519e-17 2.0311e-17 2.5449e-17 7.2742e-17 2.3233e-16 1.1903e-16 3.6376e-16 3.5383e-17 1.8818e-18 2.1913e-16 1.0024e-16 9.2632e-17 2.1552e-16 1.7719e-16 3.9082e-16 3.2673e-16 8.5674e-18 3.6121e-17 1.5135e-16 1.8464e-16 6.1049e-16 7.6383e-16 9.9052e-17 2.3958e-17 5.6387e-17 7.6336e-18 4.1300e-17 2.4184e-16 1.0985e-16 7.4937e-18 2.3787e-17 8.9680e-18 2.8762e-17 5.5600e-17 2.0356e-17 8.7962e-16 3.2737e-16 5.0752e-23 3.4750e-16 4.8414e-17 2.8982e-16 2.0008e-16 2.3795e-16 1.5873e-16 1.5264e-16 3.6056e-16 3.1355e-16 1.6180e-16 2.1092e-16 4.4144e-16 2.7081e-16 3.8336e-18 3.1075e-16 2.6654e-17 3.0097e-16 3.4989e-16 1.5514e-17 2.6951e-17 1.1367e-17 4.3847e-16 2.2898e-16 1.8070e-16 1.2615e-16 1.7981e-16 4.0421e-16 2.0967e-16 1.1629e-16 4.2738e-16 1.5125e-16 1.6095e-16 2.8367e-16 2.1972e-16 4.0084e-16 7.9388e-17 2.5170e-16 7.0390e-16 2.2289e-16 2.1465e-16 5.4846e-16 1.3181e-16 1.1547e-16 5.2691e-16 7.6243e-16 3.1510e-16 3.0111e-16 1.5104e-16 2.6299e-16 8.6589e-16 3.1057e-16 6.2926e-16 5.6073e-17 2.6696e-16 1.1737e-15 7.8310e-17 2.3967e-16 3.6146e-16 8.1691e-17 1.0807e-17 5.1812e-16 3.3445e-17 3.4435e-16 1.2564e-16 5.7235e-18 1.1008e-16 3.4717e-17 1.2527e-17 2.8750e-18 1.7856e-17 7.7015e-17 6.3924e-18 4.4644e-17 5.8128e-17 1.2644e-16 9.1818e-17 2.6549e-16 7.5079e-17 7.7393e-17 8.2356e-17 8.7901e-17 7.4765e-17 5.2819e-17 6.5745e-17 1.2524e-16 1.9437e-16 3.9251e-17 1.3554e-17 1.2837e-16 1.8211e-17 1.2437e-17 1.3233e-16 2.3321e-17 7.2045e-18 4.8100e-17 6.9726e-17 2.4360e-17 2.5268e-16 2.5502e-17 7.0564e-17 3.3473e-17 3.4129e-17 1.2125e-16 5.8732e-18 3.4794e-17 5.3289e-18 1.6150e-16 5.5867e-17 6.6196e-17 8.9938e-18 2.3871e-17 4.6845e-17 8.4546e-18 1.6404e-17 5.3465e-18 1.2025e-17 8.4734e-18 2.8662e-17 2.4617e-17 4.6344e-18 4.6312e-18 1.1368e-17 5.5027e-18 2.5388e-18 7.2712e-19 2.7884e-16 7.5662e-16 7.4614e-18 6.2638e-16 1.4726e-16 4.9303e-17 9.5740e-17 9.1124e-17 4.6021e-16 2.7888e-16 8.4688e-17 7.9760e-17 7.9905e-16 4.9500e-17 3.8378e-17 8.7699e-17 1.3605e-16 9.8617e-16 3.5414e-16 5.9989e-17 4.8729e-18 1.2815e-18 1.3086e-17 9.3743e-17 1.4480e-16 2.2314e-17 5.9949e-17 5.7915e-17 5.7171e-17 2.7563e-17 8.7925e-17 5.8354e-17 7.3325e-16 3.8980e-16 9.0948e-17 3.5610e-16 3.5862e-16 2.7288e-16 2.3147e-16 7.4612e-16 2.3069e-16 2.9390e-16 1.2184e-16 4.0625e-16 2.0298e-16 1.5509e-17 3.5720e-16 1.4082e-16 3.4502e-17 6.5422e-17 5.7749e-17 1.4470e-22 5.2243e-16 5.6885e-17 1.0780e-17 3.8647e-16 2.0705e-16 1.4234e-16 2.0078e-16 5.6065e-16 1.0489e-16 4.9749e-16 1.7613e-16 1.6996e-16 2.9442e-16 1.0083e-17 1.3949e-16 3.7823e-16 4.6386e-16 3.7497e-16 5.2925e-17 2.7966e-16 1.9893e-15 1.7735e-16 3.2883e-16 3.8930e-16 2.3014e-17 2.6133e-16 1.3173e-16 3.8604e-17 1.4986e-16 3.7639e-17 4.5125e-16 4.8000e-16 1.1350e-16 8.9243e-17 2.5348e-16 2.6460e-16 2.1954e-16 1.0938e-16 3.4804e-18 1.0001e-16 8.3286e-18 7.3682e-17 9.4175e-17 9.0114e-16 2.5593e-16 4.3944e-16 3.8702e-16 1.1447e-16 4.2337e-18 2.3191e-16 1.1970e-16 4.3125e-18 2.5296e-17 6.6233e-17 3.1962e-18 4.9826e-23 5.8128e-17 2.1073e-16 1.8364e-16 9.6983e-18 2.0791e-17 1.2162e-17 3.5001e-17 3.4568e-17 2.1088e-16 7.6399e-17 1.1112e-17 2.7731e-17 6.1651e-17 2.9847e-16 4.5444e-17 1.9098e-16 9.5014e-18 1.9822e-16 4.5369e-17 2.5143e-16 1.4265e-16 1.4795e-16 1.7431e-17 4.8095e-17 1.4407e-17 2.0045e-16 4.5796e-17 1.1072e-16 6.2766e-18 8.3753e-17 6.1016e-17 1.7397e-17 1.1457e-16 8.2487e-18 6.4211e-17 1.1461e-16 4.6968e-17 9.2966e-17 2.6452e-17 1.6360e-17 5.6179e-18 4.2648e-17 1.7221e-17 1.4058e-17 1.7446e-17 1.0283e-17 2.9492e-18 5.0943e-17 2.2737e-18 2.4212e-17 7.6165e-18 8.7254e-18 1.0002e-16 2.4833e-16 2.2917e-16 3.6475e-16 1.0413e-16 1.5054e-18 1.2545e-16 4.3284e-17 2.5178e-16 1.3104e-16 1.3394e-16 1.7281e-17 7.1356e-16 4.7596e-17 6.7726e-17 7.2140e-17 1.3994e-16 7.6143e-16 2.6387e-16 3.4877e-17 1.6243e-18 2.1359e-18 1.9084e-17 1.7700e-17 2.9268e-16 4.8061e-17 2.3418e-17 1.8616e-17 4.5961e-17 3.1159e-17 4.5256e-17 2.9041e-16 3.4105e-16 3.3499e-17 1.1368e-16 3.4750e-16 7.1724e-18 3.0676e-16 1.6281e-16 2.6215e-17 6.3493e-18 4.4654e-16 1.0344e-15 6.7072e-16 6.4718e-17 1.1787e-16 5.6613e-16 1.0471e-16 2.3001e-17 1.4720e-16 4.5755e-16 1.2039e-16 6.7101e-17 1.0343e-17 8.0853e-17 1.2503e-16 3.6539e-16 1.4234e-16 5.1534e-16 5.2561e-16 2.5473e-16 3.6534e-16 3.9419e-16 2.2364e-16 1.9945e-16 7.0583e-17 1.0730e-17 3.0731e-16 6.1034e-17 9.0511e-17 1.3231e-17 2.6568e-16 2.6779e-16 1.2702e-16 7.1360e-23 4.7318e-17 1.7575e-16 4.0517e-17 3.1458e-16 2.5286e-16 5.2645e-16 7.2831e-16 9.3234e-18 2.5380e-16 2.3249e-16 5.3903e-16 2.8716e-16 1.7873e-16 1.8793e-16 4.9309e-16 2.7843e-16 7.9316e-17 5.6635e-17 1.9221e-17 2.0842e-16 1.9893e-16 1.1051e-16 1.4408e-17 1.4297e-16 1.9460e-16 1.2278e-16 1.1665e-16 1.0718e-16 2.8750e-18 1.4880e-18 2.3104e-17 3.0364e-17 2.5989e-16 1.2335e-16 9.0877e-17 4.2764e-17 6.3039e-17 4.5047e-17 3.9802e-17 7.2061e-17 1.5802e-17 9.2019e-17 1.9902e-16 1.6760e-16 1.1540e-16 5.4800e-17 4.3339e-17 2.7107e-17 1.5420e-16 6.8885e-17 4.6640e-17 1.5123e-18 2.1135e-17 7.2045e-19 3.2067e-17 6.0631e-18 1.8113e-17 3.3247e-18 3.2132e-17 1.5889e-17 4.2915e-18 1.9614e-18 1.4718e-17 7.2436e-17 1.4986e-16 1.0658e-18 6.2951e-17 4.7033e-16 7.2618e-17 6.4242e-17 4.1112e-18 3.1624e-17 6.2586e-18 1.0112e-18 4.9735e-19 5.3445e-18 2.6961e-18 4.5859e-17 4.7676e-17 1.6852e-17 5.0943e-17 5.0021e-17 1.5407e-17 9.5206e-17 3.3447e-17 2.2429e-17 2.8941e-16 3.3044e-17 6.5125e-16 1.5737e-16 3.0109e-18 1.3494e-16 9.7503e-17 1.3205e-16 1.2076e-16 1.5076e-16 3.1106e-16 4.5201e-16 1.3613e-16 1.9189e-17 8.9114e-17 7.7744e-18 1.2981e-15 1.9443e-16 2.7902e-18 3.2080e-17 8.1163e-18 2.3991e-17 1.1800e-17 2.0256e-16 2.5747e-18 7.4937e-18 3.1026e-17 2.4662e-17 5.8722e-17 1.2930e-18 2.6599e-16 2.6715e-16 2.8474e-16 7.3083e-17 2.0644e-17 6.9034e-16 1.6749e-16 1.7654e-16 4.3154e-16 1.2699e-16 1.2075e-16 2.9342e-16 2.2357e-16 1.4120e-16 6.0174e-16 1.6849e-16 5.0551e-17 5.7504e-17 3.6800e-17 1.7769e-17 1.1113e-16 6.8539e-16 1.6161e-22 5.9292e-17 8.5250e-17 6.8206e-16 3.0944e-17 4.6849e-17 1.0512e-16 1.7981e-16 1.7101e-16 1.5935e-16 2.1469e-16 2.7542e-16 1.9158e-16 1.0730e-16 3.5459e-17 7.4462e-16 3.8791e-17 6.6157e-17 1.5381e-16 1.0967e-16 2.1810e-16 9.3624e-17 2.5595e-16 7.0717e-16 6.0775e-18 4.6203e-16 2.6444e-16 2.4017e-16 3.3875e-17 4.2701e-16 3.4207e-16 1.4645e-17 2.4631e-16 1.7371e-16 2.0502e-16 9.1329e-17 1.0938e-16 5.2207e-17 1.5001e-16 1.7490e-16 1.9221e-17 5.2491e-17 1.9745e-16 1.1924e-16 3.7461e-17 7.2206e-18 1.6455e-16 1.2137e-16 2.6802e-16 5.5676e-18 5.7500e-18 2.6784e-17 7.3934e-17 3.9953e-17 2.2322e-17 1.3611e-16 2.6341e-18 5.6600e-17 3.2853e-16 2.8645e-16 9.3977e-17 1.9559e-17 5.9259e-18 4.7351e-16 1.1318e-17 3.7039e-18 4.4727e-17 1.0874e-16 3.1073e-17 1.7540e-17 2.3482e-17 7.0468e-17 1.7101e-17 1.5879e-17 3.4982e-17 9.1497e-17 1.1879e-16 2.2737e-18 1.9550e-16 2.2719e-17 9.1807e-18 1.0328e-16 1.6393e-16 4.2759e-17 4.5206e-17 3.5892e-18 5.0360e-17 1.9264e-16 8.9000e-18 1.3749e-16 2.7993e-17 3.1693e-17 3.1165e-17 1.3004e-17 1.6580e-17 2.0224e-18 1.2807e-17 8.0167e-18 1.6754e-17 5.6576e-17 4.5806e-17 9.6902e-18 5.2101e-18 2.8800e-17 6.6032e-18 3.4274e-17 2.2722e-23 5.5284e-16 1.2725e-17 5.8270e-17 3.3822e-16 4.1449e-17 1.2533e-16 1.8653e-16 8.2012e-17 4.4641e-16 1.5325e-16 6.6670e-17 1.3293e-16 2.0865e-15 7.6154e-17 1.3545e-17 6.6482e-17 1.8075e-16 1.7442e-15 6.2495e-17 5.8594e-17 2.9643e-17 1.7941e-17 4.3621e-18 3.2777e-18 2.5494e-16 3.3471e-17 7.4937e-18 6.7223e-17 3.0267e-17 3.3555e-17 4.9135e-17 2.2256e-16 1.8331e-16 4.2330e-16 6.9997e-16 2.5460e-16 3.9269e-16 1.1668e-16 7.3559e-16 8.2678e-17 2.5820e-16 2.9617e-17 5.0229e-16 2.0721e-16 2.3828e-16 2.1712e-16 4.9873e-16 6.1023e-16 3.8336e-18 2.3715e-16 5.1974e-16 1.8521e-17 4.7930e-18 4.6542e-17 1.6171e-17 5.7970e-16 4.5674e-16 6.1269e-16 4.9526e-16 9.8114e-17 1.0789e-15 2.0988e-16 1.6774e-16 8.9455e-18 1.4246e-16 9.8817e-16 1.2876e-16 6.5008e-16 9.7655e-17 9.0511e-17 3.1755e-16 1.2585e-16 6.6565e-16 7.4895e-23 3.0142e-16 1.5056e-16 6.4858e-16 1.9245e-16 1.5139e-16 1.2353e-16 5.3797e-17 1.9384e-16 4.8295e-16 4.1012e-16 5.1807e-16 8.2104e-17 7.4448e-17 1.0689e-16 3.2843e-16 2.3439e-16 1.8620e-16 8.1041e-17 1.4992e-17 8.0089e-17 4.5698e-16 7.4081e-16 1.2360e-16 7.7803e-17 9.8200e-17 3.3340e-16 6.9151e-17 1.8886e-16 3.8973e-17 4.4921e-23 1.1904e-17 1.8484e-17 7.6709e-17 4.7833e-17 2.1266e-16 6.9804e-17 1.5974e-16 3.3944e-17 4.6202e-17 4.3119e-17 8.3385e-17 5.2346e-17 1.4378e-17 3.4898e-17 1.5742e-16 2.2364e-17 3.0311e-16 8.9949e-18 7.9727e-17 3.0996e-16 3.3255e-17 1.5547e-18 8.6957e-17 3.2067e-17 1.7147e-16 5.8303e-17 3.4863e-17 7.4952e-18 4.2667e-17 4.6924e-17 3.6450e-17 1.8453e-17 3.4129e-17 1.2966e-17 4.8944e-18 2.9301e-17 1.5720e-17 1.9102e-17 1.1119e-16 1.0703e-17 3.3163e-16 9.1905e-17 2.2019e-17 3.3709e-17 6.1235e-17 1.1066e-17 1.3361e-17 4.8144e-18 2.9908e-18 9.9714e-18 5.4771e-18 4.8049e-17 2.8042e-17 1.7609e-17 3.6813e-17 7.7802e-17 2.7642e-16 1.8034e-16 1.6735e-16 1.9929e-16 1.0076e-16 3.5754e-17 8.0884e-17 2.1961e-16 2.2665e-17 8.9349e-17 1.7118e-16 2.0771e-23 9.3533e-16 2.6654e-17 1.8625e-16 2.2632e-17 1.0301e-16 1.6268e-15 5.2079e-16 6.6965e-17 8.1215e-19 2.3067e-17 8.1789e-18 1.5078e-17 1.7946e-16 6.6084e-17 2.0608e-17 2.0684e-18 2.2420e-18 6.4714e-17 1.2930e-17 7.7353e-17 5.5420e-17 1.9795e-17 9.5820e-17 3.3030e-16 1.9903e-16 3.5757e-17 1.8439e-16 5.2228e-16 2.1799e-16 2.2783e-17 1.8898e-16 3.2173e-16 1.8533e-16 2.1712e-16 2.5274e-16 2.8886e-17 3.0669e-17 7.3600e-17 1.9546e-16 1.1576e-16 3.0196e-16 5.1714e-18 1.4985e-15 1.0230e-16 2.0096e-16 3.7133e-17 4.4172e-16 1.4016e-17 1.7232e-16 7.3846e-16 2.3483e-16 9.8400e-17 1.6146e-16 4.0333e-17 4.3994e-16 5.0825e-16 7.3241e-17 2.7153e-16 1.5878e-16 4.0551e-16 5.4323e-16 2.1570e-17 4.3387e-17 2.3229e-16 6.5381e-23 5.2064e-16 9.3586e-16 2.6251e-16 2.0174e-16 1.0915e-16 3.5056e-16 5.7472e-23 8.0914e-16 1.7849e-17 6.9130e-17 3.7499e-16 1.5631e-16 2.0661e-16 1.0093e-16 1.5863e-16 1.5491e-16 1.4576e-16 8.0280e-17 1.0837e-16 1.4105e-16 1.2103e-16 4.3179e-16 4.4357e-17 2.4132e-16 1.8470e-16 5.5676e-18 1.4375e-18 5.9520e-18 5.2370e-17 1.2465e-16 1.4190e-16 1.1767e-16 3.4243e-17 2.6413e-17 1.2123e-17 9.7025e-17 2.6535e-17 7.4120e-17 2.8642e-17 6.6138e-17 4.5274e-17 4.9077e-17 1.9680e-17 1.6269e-17 2.1751e-16 8.6902e-17 1.3619e-16 1.2668e-16 6.9959e-18 1.0586e-17 7.2879e-18 2.3775e-17 4.8100e-17 3.7894e-18 4.1224e-17 7.7023e-17 2.9582e-17 1.0468e-16 2.9783e-16 1.4319e-16 5.9574e-18 7.6026e-17 1.8282e-16 2.2115e-17 3.0607e-17 1.3858e-16 1.8113e-18 2.8281e-16 2.0291e-17 2.2757e-17 1.5372e-18 4.0224e-17 1.5294e-17 8.6551e-17 3.8515e-18 2.7416e-18 5.6089e-18 8.8476e-18 4.8628e-17 1.2126e-17 3.3016e-18 2.9197e-17 4.2173e-17 4.7888e-17 5.2792e-16 8.0655e-17 2.7622e-16 1.1120e-17 2.6082e-16 1.1142e-16 1.6266e-16 2.6903e-16 1.1642e-16 2.4025e-16 5.1578e-16 3.4705e-17 9.7097e-17 3.5274e-23 1.1882e-16 6.6082e-17 1.3518e-15 4.1663e-17 5.5804e-18 3.2486e-18 2.4776e-17 1.3632e-17 2.3600e-17 1.6944e-16 4.2912e-17 1.8734e-17 8.8941e-17 7.5107e-17 3.7450e-23 6.5944e-17 8.4139e-17 6.1104e-17 9.1360e-17 8.4776e-16 1.1526e-16 2.2772e-16 1.6937e-17 6.2182e-16 4.5574e-16 6.6139e-23 6.8348e-17 2.0390e-16 5.0713e-16 1.5297e-16 1.4578e-16 2.7295e-16 1.1916e-16 1.8401e-16 3.2711e-16 9.3287e-17 9.7235e-17 1.0545e-16 4.6542e-17 1.4554e-16 1.7760e-22 1.2180e-17 1.5472e-16 3.2794e-16 1.3316e-16 6.7429e-17 1.5547e-17 4.3612e-16 6.2619e-17 1.0447e-16 4.0333e-17 2.8971e-16 1.5129e-15 1.3428e-16 6.4651e-17 1.8524e-16 7.1314e-16 1.0151e-15 1.6537e-16 3.0371e-16 3.8070e-16 2.7199e-17 1.9043e-16 3.8535e-16 7.8366e-16 2.3825e-16 4.0085e-16 3.9158e-17 1.7104e-16 3.2952e-17 3.5340e-16 5.1405e-17 1.8574e-16 1.7563e-18 2.7779e-16 9.0491e-17 2.1726e-16 2.3487e-16 6.4552e-16 6.3298e-17 9.2044e-17 8.5794e-17 7.3481e-17 4.0869e-16 5.4374e-16 1.8346e-17 5.5547e-17 1.2527e-17 4.4921e-23 8.9280e-18 2.0024e-16 3.1962e-17 2.3916e-17 1.5028e-16 3.1609e-17 7.5467e-17 6.1826e-17 2.4256e-17 9.1766e-17 2.0589e-16 2.2025e-16 2.3005e-17 9.1490e-17 2.6854e-17 2.0575e-17 1.5156e-16 5.7240e-18 7.0957e-17 1.7533e-16 6.3342e-18 4.6640e-18 4.1588e-17 4.6643e-17 2.3054e-17 2.1864e-18 1.2581e-16 7.4952e-18 7.8685e-17 7.9056e-17 8.8789e-17 3.0040e-18 5.0213e-17 5.2565e-17 1.6967e-16 4.4866e-17 1.1191e-16 3.9073e-18 2.6845e-17 1.2778e-16 3.9116e-17 6.1137e-17 7.4036e-17 1.3176e-18 1.1236e-17 1.3677e-18 1.0986e-17 1.9258e-18 5.0843e-17 6.5437e-18 1.8116e-17 3.7629e-17 3.0315e-18 1.2106e-17 3.8082e-18 6.3259e-17 5.3465e-16 4.1449e-16 9.8775e-17 8.4888e-17 1.1356e-16 4.0271e-17 7.8407e-17 2.3920e-16 2.0448e-16 1.2942e-16 1.4235e-16 4.5796e-16 7.1779e-16 1.3327e-17 9.0301e-17 5.3751e-17 2.2934e-16 3.0524e-15 1.7360e-16 3.6273e-17 2.0710e-17 8.5435e-19 2.7263e-18 7.2110e-18 1.2015e-16 8.4965e-17 5.3392e-17 7.2394e-17 2.2420e-18 4.7936e-18 1.8878e-16 2.0899e-16 9.0946e-17 1.1420e-16 6.0091e-17 4.6448e-17 2.7793e-16 6.2104e-17 2.4716e-16 7.8644e-16 2.3281e-17 2.2099e-16 2.2628e-16 7.6887e-16 2.4711e-16 9.6929e-23 5.1221e-16 2.2026e-16 1.9168e-17 1.2267e-16 3.5538e-17 2.8245e-16 3.8344e-17 1.9651e-16 6.5221e-16 1.5913e-16 4.0802e-16 2.9087e-16 1.9409e-16 6.1672e-16 2.2476e-17 1.5547e-17 2.3483e-16 1.7891e-16 5.6984e-17 1.8150e-16 7.8330e-16 5.6734e-16 7.3241e-17 1.1637e-16 1.5878e-16 2.0975e-16 5.9169e-16 5.7520e-17 5.5946e-16 1.1399e-16 6.3812e-16 4.6392e-16 3.6176e-16 5.8871e-16 1.7676e-16 5.1189e-16 2.6292e-16 3.2368e-16 2.5629e-16 8.7458e-17 1.7548e-16 2.0852e-16 5.2690e-18 8.8026e-16 1.7402e-18 2.1898e-16 1.5241e-15 7.5284e-17 1.9144e-16 5.4930e-17 1.6286e-16 1.0950e-16 4.1735e-16 4.1925e-16 7.0563e-18 8.4710e-17 2.5054e-16 4.4921e-23 1.1904e-17 1.1090e-16 2.7168e-17 3.7788e-16 4.2533e-17 1.5673e-16 2.7923e-16 3.8793e-17 3.8117e-17 1.8795e-17 1.6986e-16 5.8271e-17 6.0387e-17 1.0281e-16 4.6299e-18 5.9040e-17 1.7725e-16 3.4344e-17 9.6469e-17 3.3657e-17 3.1671e-17 1.3448e-16 2.4953e-17 4.0084e-17 2.2334e-17 1.1661e-16 5.7599e-17 3.1230e-17 7.0927e-17 1.8871e-17 1.5982e-16 1.7595e-17 1.1612e-16 2.1727e-17 3.8829e-17 8.7596e-17 1.8091e-16 4.3414e-19 1.1718e-16 2.2395e-17 1.3990e-17 2.8115e-17 3.9900e-17 7.4335e-17 5.2134e-17 1.8651e-18 1.3658e-17 1.3480e-18 1.9191e-17 9.3481e-19 5.0979e-17 2.4893e-17 5.3052e-18 2.8614e-17 1.2694e-17 5.0171e-17 9.6989e-17 3.7486e-16 1.8618e-16 1.0611e-16 4.8188e-17 1.2872e-16 2.5297e-16 3.4718e-16 2.0892e-16 1.2021e-16 1.6938e-16 3.0575e-17 8.7100e-16 8.5674e-18 8.0142e-17 1.4145e-18 1.7492e-17 2.0092e-15 7.9855e-16 8.5101e-17 1.2588e-17 1.7087e-18 3.1080e-17 9.5054e-17 1.0706e-16 5.3210e-17 6.5570e-18 1.7581e-17 6.7260e-18 3.5952e-18 4.1377e-17 1.6285e-17 4.5899e-16 8.7858e-16 8.1204e-18 3.1309e-16 9.0731e-16 4.3285e-17 3.5112e-16 7.0579e-17 2.0318e-16 5.9007e-16 6.6889e-16 8.4521e-17 3.8243e-17 5.7072e-16 1.7523e-16 3.3219e-16 3.8336e-18 1.6764e-16 7.9961e-17 1.2965e-16 5.5119e-16 3.6717e-16 1.1319e-16 1.8187e-16 1.2180e-16 1.9804e-16 5.7558e-16 2.1024e-17 1.9480e-16 4.8194e-16 6.7096e-17 1.1629e-16 3.4191e-16 4.0333e-16 1.1803e-16 5.2006e-16 2.4414e-17 2.5860e-16 4.1348e-22 3.4958e-16 1.2522e-15 2.1570e-17 1.7583e-16 3.2477e-16 4.1007e-16 7.3538e-16 2.1627e-17 1.6600e-16 1.5755e-16 2.8229e-16 1.1188e-17 3.0713e-16 8.9702e-16 5.2118e-16 1.2585e-16 4.2055e-17 7.4468e-16 1.9446e-16 7.1349e-17 1.0346e-17 2.4320e-16 8.8098e-17 8.7999e-17 4.7804e-16 1.8613e-16 1.8730e-17 7.2206e-18 3.4914e-16 6.1813e-16 3.0551e-17 5.0108e-17 1.4375e-18 1.4880e-18 1.2168e-16 3.3560e-17 6.5372e-17 6.0964e-17 2.8975e-17 6.0625e-16 3.2732e-17 8.6629e-17 1.8353e-16 8.5444e-17 6.5185e-17 5.1761e-17 3.4898e-17 6.4819e-18 1.0735e-17 2.5688e-18 1.2838e-16 4.6241e-17 2.6612e-17 7.9178e-17 3.1093e-18 2.2684e-18 1.3118e-17 6.4841e-17 9.4743e-18 1.5158e-18 1.2742e-16 1.3243e-16 2.8562e-17 2.4300e-17 3.9911e-17 1.6084e-17 9.0061e-17 1.2627e-16 7.1420e-17 4.2897e-17 1.3024e-18 1.6143e-17 5.1458e-24 8.4799e-17 1.3262e-19 1.4778e-18 1.2298e-17 7.4269e-17 7.4603e-18 2.9692e-18 2.2532e-17 1.3957e-17 1.9008e-17 1.3166e-23 9.2624e-18 8.3368e-18 3.3016e-18 3.5544e-17 2.8358e-17 3.1643e-16 3.6613e-16 9.1669e-17 6.3003e-18 2.6284e-17 1.5657e-16 5.0759e-17 4.8296e-17 3.8038e-16 1.8249e-16 1.0511e-16 5.3838e-17 4.7402e-17 1.2185e-16 5.3052e-17 8.4870e-17 3.1486e-16 1.5027e-15 2.0276e-15 7.8125e-17 5.2789e-18 4.1436e-17 7.0884e-18 2.8844e-17 2.1412e-16 1.0299e-17 5.6203e-18 2.7923e-17 2.2420e-17 8.2690e-17 1.3189e-16 1.1399e-16 7.5315e-17 1.3856e-16 6.4963e-18 4.4728e-17 3.2814e-16 4.3285e-17 2.0008e-16 3.9121e-16 1.7355e-16 7.1196e-23 7.2111e-17 4.4169e-16 4.8244e-16 1.1476e-16 1.1120e-16 5.2357e-16 2.9902e-16 2.9031e-16 4.5311e-16 1.3428e-16 1.0545e-16 2.0168e-16 9.7024e-17 2.2733e-17 3.7757e-16 6.1888e-16 7.4289e-16 1.3316e-16 1.4984e-17 4.2753e-16 9.2256e-17 7.2458e-16 8.5477e-17 5.1425e-16 2.1460e-16 2.9549e-16 4.7607e-16 7.1116e-16 9.2620e-17 6.9916e-17 4.3356e-16 1.5578e-16 2.8087e-16 3.1617e-16 1.4227e-16 3.2616e-16 3.3424e-16 5.2695e-16 4.7841e-16 1.7878e-16 1.9579e-16 5.7472e-23 4.5583e-16 3.2841e-16 1.4535e-16 3.5046e-18 3.6707e-16 4.1843e-16 1.3052e-16 1.8967e-17 9.9944e-17 8.9700e-17 2.8561e-16 2.6426e-16 1.9195e-16 8.0685e-17 2.1373e-16 1.1733e-16 3.5987e-16 3.0273e-16 1.2109e-16 8.6249e-18 2.9760e-18 1.6943e-17 9.5886e-18 3.8266e-17 1.5595e-17 6.3219e-17 5.7858e-17 9.4558e-17 9.4715e-17 1.1167e-16 3.0883e-17 3.0864e-23 1.4282e-16 7.5456e-18 2.6854e-17 7.2458e-17 8.5626e-18 8.1772e-18 7.6538e-17 7.5141e-17 5.0674e-17 7.8510e-17 1.1645e-16 8.7455e-18 2.6657e-17 4.2270e-17 8.1094e-17 2.4360e-17 2.8814e-17 1.1527e-16 1.6823e-17 1.0643e-16 4.3544e-17 4.9061e-18 2.6103e-18 1.6512e-16 7.6736e-17 1.0419e-17 9.9762e-18 2.3218e-17 9.2222e-17 7.4266e-17 2.4235e-17 1.2078e-18 1.1910e-17 1.7407e-18 4.9734e-17 1.9258e-17 2.2431e-18 4.0509e-18 4.2131e-19 2.4314e-17 1.3642e-17 3.1916e-17 2.7927e-17 3.5629e-17 1.3821e-16 4.3266e-17 5.5783e-17 1.2600e-16 2.6453e-16 4.3281e-17 1.6837e-16 3.4536e-16 1.3796e-17 1.9332e-16 2.3424e-16 3.4297e-16 1.3459e-16 2.0942e-17 1.7383e-16 6.6482e-17 1.8075e-16 9.1237e-16 5.9023e-16 6.2779e-17 2.2740e-17 1.0252e-17 1.0905e-18 8.5877e-17 3.3889e-17 6.0076e-17 6.5570e-18 8.3770e-17 7.8470e-18 1.3182e-17 1.0344e-17 2.5784e-17 5.6131e-16 2.6647e-16 2.0788e-16 2.9073e-16 2.7972e-16 4.8742e-16 1.1946e-15 1.9762e-16 1.2064e-16 3.6452e-17 2.0390e-16 5.1803e-17 2.3240e-16 6.8238e-16 4.0438e-17 6.4995e-17 1.6484e-16 2.7395e-16 1.9102e-16 1.2039e-16 9.5859e-17 2.9994e-16 4.5817e-16 5.1150e-17 1.2180e-17 1.6091e-16 2.6771e-16 1.0512e-16 4.4953e-17 2.3320e-17 3.3548e-17 2.8626e-16 2.9679e-22 3.0250e-16 2.3606e-16 6.6190e-16 2.4414e-17 7.8874e-16 1.1908e-16 1.8178e-16 5.3813e-16 4.9131e-16 4.1103e-17 1.1399e-16 3.4103e-16 7.5766e-16 1.6712e-16 3.2041e-16 6.0042e-23 1.6937e-17 2.8343e-16 7.6138e-16 3.7528e-16 1.7492e-16 3.2084e-16 1.0689e-16 2.3535e-16 4.7399e-16 1.2878e-16 3.1382e-16 1.3326e-16 9.9311e-17 5.2491e-17 1.1283e-16 1.7450e-17 3.6020e-17 2.8882e-18 5.4374e-17 5.7861e-17 2.4996e-17 8.9081e-17 4.3125e-18 1.7856e-17 3.3886e-17 3.1962e-17 2.7424e-16 4.4305e-23 1.0536e-16 1.4339e-16 8.8497e-17 7.7389e-17 1.1277e-16 1.0294e-18 9.8765e-18 1.4090e-16 1.9807e-17 3.6113e-17 1.3866e-16 2.6544e-17 6.1983e-16 9.5672e-18 2.1916e-17 2.4743e-23 4.2753e-17 4.9905e-17 3.3524e-17 8.2131e-17 1.9677e-17 9.0947e-17 1.2242e-16 1.1637e-17 1.4893e-16 1.1309e-16 7.0809e-17 8.5519e-17 1.2195e-16 4.5681e-17 1.6176e-17 1.4121e-17 1.7887e-16 9.0149e-17 5.4340e-17 3.3406e-17 8.9252e-17 1.4778e-18 2.9646e-17 3.3707e-18 3.1209e-17 8.1652e-18 1.8680e-17 2.4923e-18 4.0820e-17 1.6852e-17 7.6994e-17 4.0926e-17 1.4307e-17 1.5233e-17 3.7083e-17 1.0911e-16 1.9561e-16 9.4512e-17 1.0644e-16 7.0766e-18 3.8389e-17 1.4196e-16 8.9302e-17 2.3503e-16 3.7147e-16 2.8470e-16 2.5257e-16 5.8405e-17 8.5674e-18 1.4222e-16 7.0725e-18 7.1913e-17 7.0441e-16 5.5551e-17 1.8136e-17 1.4619e-17 1.3349e-23 6.3250e-17 2.0978e-17 1.6020e-16 4.0337e-17 3.6532e-17 1.4479e-17 1.0089e-17 2.3968e-17 1.9395e-17 8.1289e-16 6.2526e-17 8.1615e-16 4.0439e-16 2.8729e-16 4.3214e-16 8.6569e-17 3.9231e-18 1.7161e-15 2.7514e-17 3.0301e-16 2.7601e-16 4.2806e-16 1.7356e-16 8.7779e-16 4.7851e-16 5.7773e-17 1.3418e-16 4.6613e-16 4.4867e-16 2.7781e-16 8.6273e-17 5.1714e-17 6.4143e-16 5.6833e-18 1.0962e-16 3.0944e-16 2.0915e-22 5.6065e-17 8.2413e-17 7.7733e-17 3.3548e-17 7.5142e-16 2.9442e-16 3.1510e-22 1.7168e-16 1.7729e-16 6.1034e-17 3.8791e-17 1.3231e-16 2.7966e-17 7.4726e-16 1.3182e-16 2.2835e-18 3.0112e-16 1.7156e-16 2.0258e-18 7.2745e-17 1.1002e-16 2.4017e-16 4.4414e-16 5.4076e-17 1.5081e-16 6.9564e-17 3.5697e-17 2.3752e-16 7.0091e-17 1.2646e-16 3.3162e-16 1.8272e-16 8.6213e-18 3.4980e-17 3.0754e-16 6.1754e-18 2.3753e-17 1.1778e-16 9.2211e-17 3.5092e-16 1.2449e-16 3.9797e-16 1.2220e-16 4.5932e-17 8.6249e-18 4.4640e-18 4.1588e-17 1.4383e-17 3.6672e-17 1.5595e-17 8.6926e-17 3.6476e-17 1.9397e-16 6.6993e-17 5.6386e-17 7.2061e-17 2.1235e-16 5.6553e-17 4.4330e-17 6.3893e-17 1.5207e-17 7.7063e-17 5.8058e-17 2.5513e-17 2.5830e-17 1.5836e-18 6.6073e-17 9.8299e-18 3.6513e-16 7.5647e-17 7.3608e-17 1.2202e-16 3.1855e-17 1.0140e-16 1.6831e-17 9.4397e-17 8.4542e-17 1.1376e-17 1.2265e-17 1.1942e-16 1.2025e-16 1.0311e-16 6.2951e-18 7.0741e-18 7.9698e-17 5.1393e-18 5.0262e-17 6.5022e-18 6.2586e-18 3.5280e-17 6.5899e-18 7.2745e-18 3.6204e-17 4.7354e-17 2.1812e-18 3.5390e-17 2.3735e-17 4.9263e-17 1.1005e-17 6.3471e-18 7.9983e-18 4.5039e-16 2.9087e-17 3.1978e-17 4.0554e-16 2.4937e-17 9.6348e-17 1.0895e-16 6.5154e-17 8.6227e-17 1.3213e-16 1.1832e-16 3.1239e-16 2.7002e-16 2.8558e-17 1.2416e-17 1.1882e-16 5.0533e-17 1.1405e-16 4.8607e-16 2.7902e-18 5.2789e-18 9.8250e-18 4.3621e-18 4.2611e-17 2.6187e-17 1.8023e-17 9.3671e-19 1.1790e-16 6.2776e-17 3.5952e-18 1.4870e-16 2.3070e-17 3.3679e-16 7.3697e-16 1.8839e-16 6.9672e-16 9.8620e-17 1.5055e-17 1.8105e-15 1.1494e-16 2.4127e-16 1.7087e-16 4.0531e-16 5.4530e-18 5.0010e-17 4.3114e-16 7.7506e-17 2.1665e-17 7.6672e-17 9.8133e-17 3.7315e-16 1.4470e-22 2.3965e-17 5.4299e-16 1.6171e-17 2.6143e-16 6.0898e-18 5.5699e-17 1.8740e-16 1.1213e-16 2.6972e-16 1.3992e-16 9.2256e-17 5.2778e-16 1.8045e-16 1.8150e-16 2.3606e-16 3.7823e-16 5.0048e-16 1.1637e-16 5.2925e-17 2.7966e-16 3.4966e-15 4.4817e-16 1.3473e-16 1.9357e-17 2.0294e-16 4.6594e-17 3.0868e-16 1.9688e-16 1.0567e-16 3.3875e-17 1.6036e-16 9.0116e-17 4.8329e-16 1.3208e-16 2.3043e-17 3.1191e-16 5.2690e-18 6.7712e-17 2.5755e-16 5.1728e-18 8.9949e-17 1.2013e-16 1.3123e-16 1.0392e-17 7.5615e-17 4.8987e-17 1.5019e-16 4.4715e-23 1.2842e-16 4.8604e-17 1.3919e-17 7.1874e-18 4.4640e-18 9.5498e-17 1.9017e-16 1.2118e-16 1.2618e-16 4.0829e-17 3.2954e-16 4.2430e-17 5.3133e-17 5.4175e-17 4.2207e-17 2.0741e-17 7.3807e-17 4.9046e-17 3.6113e-17 6.2619e-18 5.5657e-17 1.7990e-17 1.1720e-16 5.4790e-17 1.1560e-16 3.8866e-18 3.2968e-16 7.7981e-17 2.7377e-17 1.0276e-16 1.1671e-16 1.3741e-17 4.3775e-17 1.0864e-16 5.6077e-18 2.8195e-16 1.0513e-16 6.4830e-17 1.2073e-16 3.0186e-16 1.1937e-16 3.1258e-17 3.7728e-17 8.7273e-18 4.3256e-17 1.8567e-17 7.5366e-18 2.4156e-18 1.3595e-17 1.7034e-17 2.7019e-17 5.7773e-19 6.5050e-17 3.1161e-18 9.8587e-17 1.1578e-18 1.6674e-17 4.4021e-18 3.0466e-17 4.3627e-17 1.8610e-16 4.0285e-16 5.0809e-17 5.8393e-16 7.1777e-17 1.0914e-17 8.3772e-17 1.8179e-16 2.2173e-17 1.9711e-16 5.8982e-16 7.5107e-17 8.0413e-17 8.5674e-18 4.6280e-17 1.8954e-16 1.6715e-16 8.5535e-16 2.2221e-16 3.7668e-17 2.8425e-18 1.3349e-23 1.5267e-17 5.8999e-17 2.6033e-16 2.8322e-17 1.7797e-17 1.6547e-17 3.3630e-18 2.5167e-17 3.8791e-18 1.2214e-17 6.1673e-16 2.8322e-16 1.2343e-16 4.1459e-16 2.0800e-16 3.3310e-16 3.8447e-16 1.2623e-15 4.5503e-16 3.0757e-16 3.2574e-16 6.8162e-16 1.4415e-16 2.5124e-16 1.1794e-16 1.1555e-16 5.2137e-16 2.1262e-16 5.5528e-16 2.0836e-16 7.6688e-17 2.5857e-16 8.0853e-17 5.1150e-16 1.7660e-16 7.4265e-17 3.3464e-17 3.8545e-16 2.0229e-16 2.9538e-16 7.5483e-17 1.6996e-16 2.3744e-16 1.0083e-16 7.1892e-16 1.6548e-16 1.2207e-17 3.8791e-17 2.6463e-17 3.2161e-16 4.3356e-17 2.9239e-16 9.1341e-17 1.8927e-16 2.9291e-17 1.4181e-17 4.3254e-17 1.3318e-16 8.3963e-16 9.7861e-17 2.0511e-17 2.6115e-16 5.1624e-16 9.6383e-17 7.0017e-16 3.1892e-16 8.2547e-17 2.7779e-17 8.5271e-17 2.9313e-17 5.3303e-17 9.2904e-17 3.3965e-17 9.6498e-17 5.0895e-17 6.9158e-17 7.5094e-17 8.8715e-17 1.2137e-16 2.2913e-16 6.9594e-18 4.3125e-18 1.7856e-17 7.2394e-17 1.3903e-16 4.7833e-17 2.8355e-18 1.6200e-16 3.9306e-23 2.1215e-16 2.1946e-17 1.4152e-16 1.2662e-16 5.1358e-17 2.1950e-16 1.6506e-16 2.9632e-17 1.7980e-16 1.0703e-16 3.1891e-17 2.2324e-17 1.0880e-16 5.2257e-17 1.3992e-17 7.4858e-17 6.7778e-17 1.7291e-17 6.1219e-17 6.9726e-17 2.6858e-17 5.5412e-17 1.9892e-17 1.4066e-16 7.4671e-17 7.2573e-17 9.5318e-17 2.0883e-17 1.5566e-17 5.0624e-18 1.1179e-16 3.9179e-17 2.1571e-17 4.2828e-17 1.2334e-17 4.4037e-17 1.3275e-16 1.2247e-17 2.3624e-18 6.5322e-18 1.8102e-17 2.1185e-17 3.1161e-17 1.2639e-17 6.3679e-18 3.4105e-17 7.7037e-18 2.0311e-17 7.5620e-17 2.7339e-16 6.3591e-16 2.3095e-17 4.1051e-16 9.9409e-17 8.9197e-17 1.1307e-16 4.5562e-17 1.8083e-16 1.5054e-16 5.3456e-17 4.4333e-16 1.2612e-16 3.3318e-17 2.2575e-17 4.4203e-23 1.9825e-16 4.0923e-16 5.5551e-17 3.0692e-17 2.6801e-17 6.8348e-18 6.3250e-17 1.4684e-16 2.3183e-16 7.7241e-18 4.4962e-17 5.5847e-17 2.1299e-17 5.1532e-17 2.0688e-17 1.9813e-16 1.1937e-16 1.4313e-16 4.8722e-18 3.6814e-16 1.6138e-17 7.1514e-17 6.2182e-16 8.0661e-17 2.5186e-16 1.2075e-16 2.0639e-16 3.8716e-16 1.3826e-16 1.1787e-16 2.1230e-16 2.5276e-17 7.6672e-18 2.3307e-16 8.6180e-16 4.8155e-16 4.3137e-17 3.6199e-17 1.0241e-16 2.2165e-16 2.7404e-16 2.1661e-16 6.0235e-17 4.9057e-17 1.4984e-17 5.4413e-17 8.3869e-17 1.1629e-16 6.9331e-16 1.0083e-17 1.5022e-16 2.3639e-17 3.7841e-16 9.0511e-17 1.3231e-17 4.3697e-22 1.4843e-15 1.3421e-16 3.4938e-16 3.6564e-16 4.3936e-17 2.9375e-16 1.9858e-16 2.7023e-16 2.8244e-16 2.4842e-16 2.3868e-16 8.4598e-17 5.4919e-17 3.0878e-16 4.2542e-17 9.8128e-17 1.0889e-16 8.5075e-17 2.0187e-16 1.5863e-16 7.4291e-16 1.6018e-16 4.9403e-17 3.1473e-16 1.6432e-16 1.0662e-16 1.1264e-16 7.5837e-17 1.4536e-16 2.4302e-16 1.9486e-17 1.4375e-18 2.2320e-17 8.1636e-17 3.9953e-17 2.4076e-16 1.3469e-16 4.2146e-17 8.6787e-17 7.2737e-18 8.3164e-17 3.6485e-17 6.0737e-17 1.0667e-16 2.6839e-17 3.8671e-17 6.8523e-17 9.3033e-17 6.9357e-17 1.4147e-16 2.3918e-18 1.1584e-16 4.0381e-17 4.8972e-17 8.0151e-17 1.2025e-16 3.1700e-17 6.1219e-17 3.7894e-17 1.1368e-16 8.8659e-18 1.6321e-17 1.1262e-16 1.2617e-16 8.1988e-17 4.8009e-17 3.7850e-17 1.9442e-16 2.4513e-17 1.5412e-17 1.5055e-17 8.6120e-17 2.7838e-17 1.4986e-17 8.9996e-17 1.9215e-17 2.3595e-18 6.8883e-17 1.7073e-17 2.1183e-18 4.2120e-17 2.8044e-18 7.1623e-17 3.8786e-17 4.5473e-18 1.6508e-17 3.5544e-17 1.8905e-17 4.1220e-17 9.0532e-17 2.9384e-16 6.1809e-16 7.9527e-17 1.4377e-16 2.3522e-16 1.0343e-16 3.1042e-17 1.0126e-16 1.1352e-16 7.3113e-18 3.1065e-16 7.6154e-18 1.3319e-16 6.9311e-17 5.8308e-18 5.4340e-16 9.7215e-17 9.3471e-17 1.5431e-17 1.1107e-17 1.1450e-17 3.0155e-17 7.3169e-17 1.4590e-17 3.3722e-17 9.5146e-17 8.9680e-18 7.1904e-18 4.1377e-17 2.5784e-17 3.4957e-16 2.1317e-16 1.5591e-16 2.2192e-16 1.3090e-16 3.4628e-16 2.3343e-16 1.0869e-15 1.0371e-16 1.5720e-16 3.5558e-16 1.0361e-16 1.1473e-16 3.6600e-16 1.5838e-16 2.3109e-16 5.7504e-17 2.3715e-16 7.4186e-16 6.9454e-17 7.4770e-16 2.6374e-16 1.0780e-17 1.7760e-22 2.0096e-16 7.4265e-17 9.3698e-17 7.8492e-16 2.5473e-16 1.6324e-16 6.6257e-16 3.7571e-16 2.2794e-16 2.1175e-16 1.0730e-16 9.2193e-16 3.9062e-16 3.6204e-16 1.7201e-16 3.3560e-16 6.3249e-16 2.6363e-17 1.0596e-15 1.7207e-16 2.4688e-16 6.0775e-18 1.3959e-16 2.9532e-16 1.7484e-16 2.7288e-16 5.0346e-17 2.9242e-16 4.2837e-16 1.2316e-16 2.2512e-16 2.2780e-16 1.4753e-16 2.4654e-16 4.0199e-16 6.2763e-16 1.4159e-16 3.5399e-16 3.0877e-18 3.0879e-16 1.0470e-16 2.1612e-17 1.8774e-17 3.6201e-16 3.0624e-16 4.0272e-17 9.3257e-17 5.7500e-18 1.3392e-17 1.7713e-16 3.9953e-17 2.6627e-16 2.0274e-16 1.7122e-17 3.8991e-17 2.4124e-16 1.7326e-17 6.1915e-17 1.1324e-17 1.7778e-16 1.6103e-16 3.8294e-16 1.6020e-16 2.6836e-17 1.0275e-17 2.5349e-17 1.1959e-16 9.3926e-18 2.5337e-17 2.1765e-17 3.3270e-17 2.7694e-17 9.8702e-17 4.8100e-17 1.9705e-17 1.1680e-16 3.6572e-17 5.8145e-17 7.7573e-17 2.3174e-17 7.8457e-18 1.1144e-16 2.1861e-17 3.1437e-17 1.0551e-16 8.0100e-17 4.8611e-17 1.6582e-16 1.5946e-16 1.1007e-17 8.5710e-18 2.4815e-17 1.0966e-16 4.5632e-17 1.2025e-17 3.4664e-18 1.0717e-17 2.7421e-17 8.4262e-19 1.0420e-17 3.8652e-17 6.6032e-18 2.0311e-17 +|Pd|1|153636|2012-12-21T15:06:48.139 1.5293e+03 1.9251e-14 1.4537e-14 4.0372e-15 2.2939e-15 8.0080e-16 8.3234e-16 3.2427e-15 7.9282e-15 3.7967e-15 8.9868e-15 2.0891e-15 1.1490e-15 2.6268e-15 6.4077e-16 1.1272e-14 1.7082e-14 2.1366e-14 2.1774e-14 3.7444e-14 3.0977e-14 3.6789e-15 3.9267e-16 1.4972e-15 1.3724e-15 2.4091e-15 1.7152e-15 5.5528e-16 1.0957e-14 7.3728e-15 1.8934e-15 2.2242e-15 3.0735e-15 2.6707e-15 1.5688e-15 3.6239e-16 1.5055e-15 8.2230e-16 1.2283e-15 1.6034e-15 2.2715e-15 9.7600e-16 3.1535e-16 6.7437e-16 1.6760e-15 9.5427e-16 1.0090e-15 4.2494e-16 8.0875e-17 7.4021e-16 6.8238e-16 7.4009e-16 5.4196e-16 1.3891e-16 2.2479e-15 8.7913e-16 1.6548e-15 2.1313e-15 5.7244e-16 1.5039e-15 3.0117e-16 7.4287e-16 3.3715e-16 7.0737e-16 1.0903e-16 8.0509e-17 2.3744e-16 4.0333e-16 1.3949e-16 6.1462e-16 2.1972e-16 4.0407e-22 9.2620e-17 1.1186e-16 1.9204e-15 3.2858e-15 4.9552e-15 3.6607e-15 2.8475e-15 2.6032e-15 3.0022e-15 1.4978e-15 3.1568e-15 2.8417e-15 3.9158e-16 1.8336e-15 9.7939e-16 1.7599e-15 2.9088e-15 5.9753e-16 9.9759e-16 2.7502e-15 1.0337e-15 1.2622e-15 1.0877e-15 1.8212e-15 1.7198e-15 1.0199e-15 1.6810e-15 1.0302e-15 6.3541e-16 3.7775e-16 5.2357e-16 7.9711e-16 4.8159e-16 2.0125e-17 7.1424e-17 3.0806e-16 7.3832e-16 1.2564e-15 5.2457e-16 1.1300e-15 6.7668e-16 1.6051e-15 7.6003e-16 3.7702e-16 7.4635e-16 6.0346e-16 6.9206e-16 8.6680e-16 6.8523e-16 2.4868e-16 3.7418e-16 4.1295e-16 2.9977e-16 3.8823e-16 3.4759e-16 4.7106e-16 4.1134e-16 1.9605e-16 3.0115e-16 1.2754e-16 1.4400e-16 1.5365e-16 2.8593e-16 2.0555e-16 4.0562e-16 9.6987e-17 1.4162e-16 1.5699e-16 1.2008e-16 1.3185e-16 7.7801e-17 6.7944e-17 4.2807e-17 5.6810e-17 4.6968e-17 1.6312e-17 4.5219e-17 1.9984e-17 6.2920e-18 2.6360e-17 1.1728e-17 2.4650e-17 7.6265e-17 4.8922e-17 9.0161e-17 9.2045e-17 2.6526e-17 6.7133e-17 1.0790e-16 7.3003e-16 1.0323e-15 1.8906e-17 5.1875e-17 2.1156e-16 2.9081e-16 2.9093e-16 5.7774e-18 4.3740e-17 2.1384e-16 1.2888e-16 5.3816e-16 8.4280e-16 1.3289e-16 5.5593e-16 4.8763e-16 2.7866e-16 1.8931e-15 5.9036e-16 6.6662e-16 3.3761e-16 3.0090e-16 2.8279e-16 5.9979e-17 5.5722e-17 7.2399e-17 4.8318e-16 8.9081e-16 1.7943e-15 1.0862e-15 8.7484e-17 1.1766e-16 1.1671e-16 2.9131e-16 4.4766e-16 1.3317e-16 4.3008e-17 5.2000e-17 2.1454e-16 1.6281e-16 1.2906e-15 1.5873e-16 5.4678e-17 4.0780e-16 2.9991e-16 6.7660e-17 2.6055e-16 1.6849e-17 1.4443e-17 3.6802e-16 7.3600e-17 5.7749e-17 4.6302e-18 4.7930e-17 1.3963e-16 2.3178e-16 1.3640e-16 4.8719e-17 2.0423e-16 2.0747e-16 9.8114e-17 5.2445e-17 2.1765e-16 5.1160e-16 3.2204e-16 6.6482e-16 1.8150e-16 1.1803e-16 2.2457e-16 2.6855e-16 5.8186e-16 1.9847e-16 4.3697e-22 2.0454e-15 9.8263e-17 1.7583e-16 2.8391e-16 3.7660e-16 7.9008e-17 1.9858e-16 5.4046e-17 9.6067e-18 9.4097e-18 2.7970e-17 1.8391e-18 2.5629e-17 5.8900e-17 7.0903e-18 3.8550e-17 3.7058e-16 1.4063e-16 2.4363e-17 1.5001e-16 1.6158e-16 1.0412e-16 3.0877e-17 2.3753e-17 7.8523e-17 1.8586e-16 4.6212e-17 2.8618e-17 2.8225e-18 4.9993e-17 5.7067e-17 1.4375e-18 3.8688e-17 1.8021e-16 4.9941e-23 4.7833e-18 1.8431e-17 3.9512e-18 4.0249e-17 1.5154e-16 7.0459e-17 1.4484e-16 2.4398e-16 1.1852e-17 1.0640e-16 8.4888e-18 4.9077e-17 9.1244e-17 1.9608e-16 2.4532e-18 2.3121e-17 2.8960e-17 2.3753e-18 1.0105e-17 6.3516e-17 2.2775e-23 7.2045e-17 1.9240e-16 2.0463e-17 1.6240e-17 4.4884e-17 1.3771e-17 6.4956e-17 4.2915e-17 2.5499e-17 8.7608e-17 9.1361e-18 3.3573e-17 7.3272e-17 9.1821e-17 4.9337e-17 3.1451e-17 1.6560e-17 1.3925e-17 7.3888e-19 3.4258e-17 7.9774e-18 3.1085e-17 1.0541e-17 3.2738e-17 4.9846e-19 5.4219e-17 8.4262e-18 1.7367e-18 4.5473e-18 6.6032e-18 8.8859e-18 2.5449e-17 4.1524e-16 5.0393e-16 7.4614e-18 3.3159e-18 1.1457e-17 6.0970e-17 7.0567e-17 3.5538e-17 7.0952e-17 1.7599e-16 6.7871e-17 4.6527e-17 6.5685e-16 4.4741e-17 1.0385e-16 2.4471e-16 1.0262e-15 1.3417e-16 6.2495e-17 2.7483e-16 6.5784e-17 5.1261e-18 4.8528e-17 1.0489e-17 6.9318e-17 5.6643e-17 1.6861e-17 1.5513e-17 3.5031e-23 6.3516e-17 1.7197e-16 1.3706e-16 6.9631e-17 5.1771e-17 2.7609e-17 3.9567e-16 2.6359e-16 6.3986e-17 1.1769e-16 3.2264e-16 1.0159e-16 3.0073e-16 4.9483e-16 1.7177e-16 6.1777e-17 2.9156e-16 1.0109e-17 1.8054e-16 8.8172e-17 5.1111e-16 7.6851e-16 1.3891e-17 1.4379e-17 1.6031e-16 1.0780e-16 7.9567e-16 3.4103e-16 2.5993e-16 8.0313e-17 2.1901e-22 1.1238e-16 3.1870e-16 9.2256e-17 1.8786e-16 4.2738e-16 1.9158e-16 1.0730e-17 1.1820e-16 1.5869e-16 2.0688e-16 1.8524e-16 5.5932e-17 3.9021e-16 7.9089e-17 1.0047e-16 2.9466e-16 2.0922e-17 2.0258e-16 1.1797e-17 5.5590e-16 6.7247e-17 3.4439e-16 8.0181e-17 1.6184e-16 5.9496e-16 1.3743e-16 8.5084e-17 1.2862e-15 5.6202e-17 1.0070e-16 7.8310e-17 1.5174e-16 6.1632e-17 1.2974e-16 4.6161e-16 3.3106e-16 1.4541e-18 1.6857e-16 7.6683e-16 1.2735e-16 5.2781e-16 4.8604e-17 2.1853e-16 4.4921e-23 4.4640e-18 3.3886e-17 7.9905e-17 9.5666e-18 6.3799e-17 1.4093e-16 2.8174e-16 8.8497e-17 4.6202e-18 2.1338e-16 3.7060e-17 1.3827e-17 9.5853e-19 9.4320e-19 7.9635e-17 4.1149e-17 2.0208e-16 2.2896e-17 7.9727e-17 7.1227e-17 1.1006e-16 1.8656e-17 6.8053e-18 4.4456e-17 2.0173e-17 3.7168e-17 2.3684e-23 2.1861e-17 4.8209e-17 1.7341e-17 2.1496e-17 9.5699e-17 4.8251e-17 1.4368e-17 1.2399e-17 2.0144e-17 2.2381e-17 8.6829e-18 3.3411e-16 1.5149e-17 1.4861e-16 5.3047e-18 1.3448e-17 3.6564e-17 1.5730e-18 3.1085e-18 1.6033e-17 1.0784e-17 7.7885e-24 1.2776e-17 7.5836e-17 4.0523e-18 6.8210e-18 3.4392e-23 3.1735e-17 3.8537e-17 3.4007e-16 1.3983e-15 2.3095e-17 1.0246e-16 2.7295e-17 2.6345e-18 7.2630e-17 2.5287e-16 1.3304e-17 8.1768e-17 1.5616e-16 1.4290e-16 1.7911e-15 3.6173e-17 1.1288e-18 3.5363e-17 5.7919e-16 3.4885e-16 3.1942e-16 6.1384e-17 1.3806e-17 5.9804e-18 4.9073e-18 4.5233e-17 1.0783e-16 2.9180e-17 1.9671e-17 1.9650e-17 4.4840e-18 7.1904e-17 4.3963e-17 1.8592e-16 5.2436e-16 3.7762e-16 5.3594e-17 1.2180e-15 5.6841e-16 2.4842e-16 2.0793e-16 1.1252e-15 1.5662e-16 1.5720e-16 4.2272e-16 4.0625e-16 1.1767e-16 3.9082e-16 1.0952e-15 1.8776e-16 1.9168e-17 4.2115e-16 8.7513e-16 2.0373e-16 4.6012e-16 5.6885e-17 2.7490e-16 1.3072e-16 9.7437e-17 7.4884e-16 2.5432e-16 7.7090e-17 1.1238e-16 2.3320e-16 2.3483e-16 4.4727e-17 1.9945e-16 2.8233e-16 7.7257e-16 1.0638e-15 6.1034e-17 8.2753e-16 3.0432e-16 6.9916e-17 1.3645e-15 1.8934e-16 1.6898e-16 4.9039e-16 1.5273e-16 9.3188e-17 2.9491e-17 2.3356e-16 3.5929e-16 3.3875e-16 1.5850e-16 1.6552e-17 4.8695e-16 2.7665e-16 1.5244e-16 1.1039e-16 2.2481e-16 3.3683e-16 9.2232e-17 6.8971e-18 1.3326e-17 5.0056e-23 4.3073e-16 5.9383e-17 3.4899e-17 2.0892e-16 2.5994e-17 1.8458e-16 1.1008e-16 9.7208e-18 2.8255e-16 1.2937e-17 4.6500e-23 4.7749e-17 7.8307e-17 2.2322e-16 6.2382e-17 5.0048e-17 2.5030e-16 2.4246e-18 3.6096e-23 1.7469e-16 4.3237e-17 1.1259e-16 9.5853e-18 1.3582e-16 2.1298e-17 9.3033e-17 5.8226e-17 1.3901e-17 5.2620e-17 2.8960e-17 1.0293e-17 2.6429e-17 4.5369e-18 4.1541e-17 6.6281e-17 2.0115e-16 1.3263e-16 9.9936e-18 9.3092e-17 1.1221e-17 4.2992e-17 1.2488e-16 2.9029e-17 7.3591e-17 1.5009e-17 5.7075e-17 3.4904e-17 8.4875e-17 1.6506e-17 4.2484e-17 2.2841e-18 7.5327e-17 3.1329e-17 1.5592e-17 3.8651e-17 1.3180e-17 2.3605e-17 3.4856e-17 7.2527e-17 6.2321e-17 5.4771e-18 2.1998e-17 9.8525e-18 1.6508e-17 1.5233e-17 4.2900e-17 4.8252e-16 1.2435e-16 2.3450e-16 7.2950e-18 1.5198e-16 1.0350e-16 1.5145e-16 2.6381e-16 2.1581e-16 6.2815e-17 2.2944e-16 7.3180e-16 5.4173e-16 3.2366e-17 3.4992e-17 4.6679e-17 3.9455e-16 1.9388e-15 3.4720e-17 7.1150e-17 1.0152e-17 1.3349e-23 4.4166e-17 2.1633e-17 1.7561e-16 5.1494e-18 2.0608e-17 6.5155e-17 7.5107e-17 3.7450e-23 2.1981e-17 9.4995e-17 8.6683e-17 4.1264e-16 1.0232e-16 2.5805e-16 8.4814e-16 9.5979e-17 5.8259e-16 1.2926e-15 1.3334e-16 5.9690e-16 1.0195e-16 6.2709e-16 3.5007e-16 2.7295e-16 1.7186e-16 6.1384e-17 5.0987e-16 8.1778e-18 8.4403e-17 6.0193e-17 2.3006e-16 5.6885e-17 4.3122e-17 2.8417e-17 4.8719e-17 6.6220e-16 1.7401e-16 2.0324e-16 4.5702e-16 3.2648e-16 2.0129e-16 2.6836e-17 2.8492e-17 2.0167e-17 5.3651e-17 3.7823e-16 4.7607e-16 3.8791e-16 2.9109e-16 2.5170e-16 1.7929e-15 1.0785e-16 2.5119e-16 6.4525e-18 4.1844e-16 5.2672e-16 1.0027e-16 2.4900e-16 1.7484e-16 4.1214e-16 3.2072e-16 4.9656e-17 1.0069e-16 4.8191e-17 1.4181e-17 5.1692e-16 3.5126e-17 8.1602e-17 2.2797e-16 2.4829e-16 2.9983e-17 1.6979e-16 1.2351e-17 2.8801e-16 3.6499e-16 4.2215e-16 6.0653e-17 1.3164e-16 2.7237e-16 2.2219e-16 4.1757e-18 4.4921e-23 1.6368e-17 9.0878e-17 3.3560e-17 1.4350e-17 1.4178e-17 1.5936e-16 4.1507e-17 7.1525e-17 2.3448e-16 1.4705e-16 2.0589e-17 1.2444e-16 1.2461e-17 1.1790e-16 3.7039e-18 9.6611e-17 1.1131e-16 7.4412e-17 2.4715e-17 6.5748e-17 1.7973e-16 1.4381e-16 6.6541e-17 3.2067e-17 2.5216e-17 4.8100e-17 3.0315e-17 1.1368e-16 8.0347e-17 2.9582e-17 3.2712e-18 8.8404e-17 1.3730e-17 1.6120e-16 1.1714e-16 3.1437e-17 2.7444e-17 9.0519e-17 2.7752e-17 2.0913e-17 1.1278e-17 1.9893e-18 6.9159e-17 8.2789e-17 2.6854e-17 2.5614e-17 3.2512e-17 2.5228e-17 1.4455e-17 3.5523e-17 2.4436e-17 6.3679e-18 3.0315e-18 1.5407e-17 1.9041e-17 1.4688e-16 1.1699e-16 4.3557e-16 6.0758e-17 1.3197e-16 2.3926e-17 1.8517e-16 1.0688e-16 1.4853e-16 1.9660e-16 1.2942e-16 3.7839e-16 3.5094e-16 1.4474e-16 8.5674e-17 1.0046e-16 9.0528e-17 8.5518e-17 3.8910e-16 6.2495e-17 1.1300e-16 1.8679e-17 1.3242e-17 4.1440e-17 5.5066e-17 9.2424e-17 3.2613e-17 6.5570e-18 3.4129e-17 1.9057e-17 7.5500e-17 1.2542e-16 1.6285e-17 1.0942e-16 5.1314e-16 1.7215e-16 3.6642e-16 1.8828e-16 9.0333e-17 2.0989e-16 1.6334e-16 8.4657e-18 1.1619e-16 1.5417e-16 1.6632e-16 2.6770e-16 2.7916e-16 4.6503e-16 2.4915e-16 6.9004e-17 1.2267e-16 6.5745e-16 6.9454e-17 2.8758e-17 3.1028e-16 1.0780e-16 1.1367e-17 3.5321e-16 2.6612e-16 5.8227e-16 2.1025e-16 4.8699e-16 1.5547e-16 2.5161e-17 6.2619e-17 3.7990e-16 4.0333e-17 2.0387e-16 1.1701e-15 1.4648e-16 1.2930e-17 2.7786e-16 1.9576e-16 1.5302e-17 1.2942e-16 1.0961e-16 3.2047e-16 2.9291e-17 1.0129e-17 4.5220e-17 1.4670e-16 5.3797e-17 3.1052e-16 7.6452e-17 2.0414e-16 5.6384e-16 5.3546e-18 2.9425e-16 1.5070e-16 1.8090e-16 1.3890e-17 5.5687e-17 3.1037e-16 6.8295e-17 3.3477e-16 4.0140e-17 1.7815e-16 1.3669e-16 9.9415e-17 2.1662e-16 1.5024e-16 3.6693e-17 2.6385e-17 8.9081e-17 1.4375e-18 1.1904e-17 4.0048e-17 1.0068e-16 4.3049e-17 1.1767e-16 7.1121e-17 1.5596e-16 1.5396e-16 8.0854e-18 1.6805e-16 8.0297e-17 7.9012e-17 1.1502e-16 6.5081e-17 1.2964e-17 9.4822e-17 9.9326e-17 1.2429e-16 1.0524e-16 3.4440e-17 8.7888e-17 6.6073e-17 2.1928e-17 3.2067e-17 1.6859e-16 8.1625e-17 1.5688e-16 1.7989e-16 2.2165e-18 8.6707e-18 1.0281e-17 2.1028e-17 1.0592e-16 9.6018e-17 4.2092e-17 2.3440e-16 2.2648e-17 3.6251e-17 1.1609e-17 7.0642e-17 2.9979e-17 1.6365e-16 1.0330e-16 2.4485e-17 6.1797e-18 5.6823e-17 4.6393e-24 1.5984e-17 2.2431e-18 2.4305e-17 2.9071e-17 8.1046e-18 1.8947e-17 2.2011e-17 6.3471e-17 7.7802e-17 7.1711e-16 4.8720e-17 9.5578e-17 5.7034e-17 1.3142e-16 6.3981e-18 3.0042e-16 7.2899e-17 7.7851e-17 2.0036e-16 1.8319e-16 2.4061e-16 5.7051e-16 1.7135e-17 1.5803e-17 1.4711e-16 5.3837e-16 2.5493e-16 2.1526e-16 5.8594e-17 1.7461e-17 3.8446e-18 1.2541e-17 6.6866e-17 1.4634e-16 6.2651e-17 1.4051e-17 2.1718e-17 3.3630e-18 3.9547e-17 2.5860e-18 2.4156e-16 7.9862e-16 2.3754e-16 1.9489e-17 7.7414e-17 5.2897e-16 5.6458e-17 3.3739e-16 8.6509e-16 1.5027e-16 4.0553e-16 7.9571e-17 1.0715e-15 1.2944e-16 1.0856e-16 4.3470e-16 4.6940e-17 9.2006e-17 2.4533e-16 3.3761e-16 8.3345e-17 3.8344e-17 5.6885e-17 7.5463e-17 5.6833e-17 1.9487e-16 1.3615e-16 2.8779e-16 2.1725e-16 7.4921e-18 8.3951e-16 1.9290e-16 5.3673e-17 3.7990e-16 5.7475e-16 3.6482e-16 2.7185e-16 3.8146e-22 2.3274e-16 7.9388e-17 4.3348e-16 2.2188e-16 4.1702e-16 2.2378e-16 7.2483e-16 1.8830e-16 1.1264e-15 1.0224e-16 3.0111e-16 3.5929e-16 1.6937e-17 1.6782e-17 6.0690e-17 3.2402e-16 8.7458e-17 1.4181e-17 2.6284e-17 5.4270e-16 4.2190e-16 3.6197e-16 1.2587e-16 2.9983e-16 2.8832e-17 3.3193e-16 2.0784e-17 1.0324e-16 2.8816e-18 1.3864e-16 7.1544e-18 4.2338e-17 2.0691e-16 1.4615e-16 4.3125e-18 5.9520e-18 8.3176e-17 4.3149e-17 1.4350e-17 4.6786e-17 1.3171e-17 1.5848e-16 2.1457e-16 6.1218e-17 8.1816e-17 3.8090e-17 1.7580e-16 7.0931e-17 1.5091e-17 5.8337e-17 2.5674e-16 2.3975e-17 1.8808e-17 2.1526e-17 5.6356e-17 2.2487e-16 6.9182e-17 3.5539e-17 2.2775e-23 2.8818e-17 3.4253e-17 3.5848e-16 8.3697e-17 6.7603e-17 2.3462e-17 1.6356e-17 2.0170e-17 4.9036e-17 1.5419e-17 6.6563e-17 1.1659e-16 7.9933e-18 1.9536e-17 5.1695e-17 1.0604e-16 8.5656e-18 9.6016e-17 1.9802e-17 4.2273e-17 4.4494e-17 8.0820e-18 5.9532e-17 3.6590e-18 1.6699e-17 1.2464e-18 1.7695e-17 5.2101e-18 6.8210e-18 1.1005e-18 7.6165e-17 1.5560e-16 2.6672e-16 2.2251e-16 3.3754e-17 3.4685e-16 2.9654e-17 8.8068e-17 1.4774e-16 1.6858e-17 1.7196e-16 7.7977e-17 2.0842e-16 3.4097e-16 7.0256e-17 1.1423e-16 1.4787e-16 4.4203e-23 8.2019e-16 4.9979e-16 1.4582e-16 1.2556e-17 1.2182e-18 1.7514e-17 4.7983e-17 3.8677e-17 7.3169e-17 2.5747e-18 2.8101e-18 2.4821e-17 2.1299e-17 1.3182e-17 2.1981e-17 2.9856e-17 1.6342e-16 2.8931e-16 1.2668e-16 7.3973e-17 1.4165e-16 1.1292e-17 9.2194e-17 2.6215e-16 4.0212e-17 6.8348e-18 2.4617e-16 2.5084e-16 8.8252e-17 2.1712e-17 2.3926e-16 6.8605e-17 4.2169e-17 1.0222e-16 1.1994e-16 6.4824e-17 3.8344e-17 2.2237e-16 4.8512e-17 1.2503e-16 1.2180e-17 2.4755e-17 7.4289e-16 2.1901e-22 2.1727e-16 1.5547e-17 4.1935e-17 3.4887e-16 8.5477e-17 2.6217e-16 3.2190e-17 1.0992e-15 4.8827e-17 1.2930e-17 4.1348e-22 1.0348e-15 1.3619e-15 9.5866e-18 4.4757e-16 1.1399e-16 7.2181e-16 3.5655e-16 8.4542e-17 1.4091e-16 8.4539e-17 5.0812e-17 8.7640e-17 3.6782e-17 2.8009e-16 1.6421e-16 2.6589e-17 2.2780e-16 2.8277e-16 1.5626e-17 2.9584e-17 2.2415e-17 1.2993e-16 3.8443e-17 2.9333e-16 1.4400e-16 3.0537e-17 9.2211e-17 2.8882e-17 1.4309e-17 1.8770e-16 7.2212e-17 1.1692e-16 2.8750e-18 1.0416e-17 1.5865e-16 1.4383e-17 1.6741e-16 5.2457e-17 6.1902e-17 2.7797e-16 1.6366e-16 1.6171e-17 1.4373e-16 1.1324e-17 4.2469e-17 4.9843e-17 1.8864e-16 4.0743e-17 7.2458e-17 1.7981e-16 1.1612e-16 1.4590e-16 6.8879e-17 7.1260e-18 9.9498e-17 2.2684e-17 1.1151e-16 2.6657e-17 3.6440e-17 2.6678e-16 3.6664e-16 5.5412e-19 1.0201e-17 1.2290e-16 3.3044e-17 2.3145e-17 2.4530e-18 3.8176e-17 7.2641e-17 7.4604e-18 2.9739e-17 1.1971e-17 1.3470e-16 1.5132e-17 2.6922e-17 9.5316e-17 2.9646e-17 5.2921e-17 4.2275e-18 1.4697e-17 8.0882e-18 1.7446e-18 2.1812e-18 2.5279e-18 1.7367e-18 2.8800e-17 9.9048e-18 7.6165e-18 3.9264e-17 1.0729e-16 6.7445e-16 4.7185e-16 1.9365e-16 1.5535e-16 5.2690e-18 1.3164e-16 2.2872e-16 3.4983e-17 1.4567e-16 1.6637e-16 7.0920e-16 2.9203e-16 1.3613e-16 2.4833e-17 5.5166e-17 2.3906e-16 2.8847e-16 1.1874e-15 6.4175e-17 3.6547e-18 2.6912e-17 1.4177e-17 8.9810e-17 4.0050e-17 1.3732e-17 2.5291e-17 2.7923e-17 2.0178e-17 2.2770e-17 1.1896e-16 5.2247e-16 2.9557e-16 1.2334e-16 2.8096e-16 8.0854e-17 2.3310e-17 4.4226e-16 7.5324e-16 8.2274e-16 7.6191e-17 7.0626e-17 3.1580e-16 3.5990e-16 7.9427e-17 3.4119e-17 4.0101e-16 7.9438e-17 3.1435e-16 7.9733e-16 9.3288e-16 1.3428e-16 5.7516e-17 9.8256e-17 5.3902e-17 3.4100e-17 1.3398e-16 1.8566e-17 1.3385e-16 1.4717e-16 5.9937e-17 2.2542e-16 8.3869e-18 1.0735e-16 2.9679e-22 3.1510e-22 9.6571e-17 9.4557e-17 4.5165e-16 2.3274e-16 6.3511e-16 8.8094e-16 1.1375e-15 8.3883e-17 6.6907e-16 4.6243e-16 4.1844e-18 1.1547e-16 2.1627e-17 9.4580e-17 5.3797e-17 2.0325e-16 1.4358e-16 2.9793e-16 1.2082e-16 3.2128e-17 5.2468e-16 1.6121e-16 1.4051e-17 9.2020e-17 7.4829e-17 1.4484e-16 7.9955e-17 4.0525e-16 1.9298e-16 1.5588e-16 9.8881e-17 6.4836e-17 7.5094e-17 1.7314e-16 2.3286e-16 2.4441e-16 8.3513e-18 4.3125e-18 2.9760e-18 5.6991e-17 1.1187e-17 5.1022e-17 8.5066e-17 4.7414e-17 4.4022e-17 6.0614e-17 1.9867e-16 9.9506e-18 5.8678e-17 1.1951e-16 1.0065e-16 1.0375e-17 1.2501e-16 1.3418e-17 2.4831e-17 3.1891e-17 6.8565e-17 1.4872e-17 7.9178e-18 7.7733e-18 9.6786e-17 5.9032e-17 3.6023e-18 1.3045e-16 6.1389e-17 6.6833e-17 3.4355e-17 4.2843e-17 2.6637e-17 1.6136e-16 3.1775e-17 2.3129e-17 1.3541e-16 2.7164e-17 7.2739e-17 4.3414e-18 1.0901e-16 1.3289e-16 3.1835e-17 1.1166e-16 1.4187e-17 3.8101e-17 1.1011e-17 9.9471e-18 1.9151e-17 4.2367e-18 4.6606e-17 8.7249e-18 1.2639e-18 3.7629e-17 2.3494e-17 3.1916e-17 2.5388e-18 3.8537e-17 2.3399e-16 2.2579e-16 9.0959e-17 1.3794e-16 5.6276e-17 1.3173e-17 3.8791e-17 1.3714e-16 1.3796e-17 6.3356e-17 1.6577e-16 1.7946e-16 3.1827e-16 1.2375e-17 1.1288e-18 4.2435e-18 4.7618e-16 1.0398e-15 6.2495e-17 1.2556e-17 1.2182e-18 4.2717e-19 3.8168e-18 6.2933e-17 3.6199e-17 1.5448e-17 4.6835e-18 3.2060e-17 4.4840e-18 2.7563e-17 6.8530e-17 6.3782e-17 6.2099e-16 1.9795e-16 6.3826e-16 3.4406e-17 1.9007e-16 2.8229e-17 2.7462e-17 1.4116e-16 2.9207e-16 1.5492e-16 8.1311e-16 5.1803e-17 1.7650e-16 7.7543e-17 5.0547e-16 3.9719e-17 1.4568e-16 8.1778e-18 8.8845e-18 2.3151e-17 3.3551e-17 8.5327e-16 8.0853e-17 1.7760e-22 2.8622e-16 1.7329e-16 1.6732e-16 2.1901e-22 2.0229e-16 1.7879e-16 3.9419e-16 8.0509e-17 5.6984e-17 4.0333e-17 3.8628e-16 1.0165e-15 4.8827e-17 3.3618e-16 6.4834e-16 6.7119e-16 5.5343e-16 4.8652e-16 1.2788e-16 3.3553e-16 8.2224e-16 3.2819e-16 6.0359e-16 2.5093e-16 1.0183e-16 1.9384e-16 9.6963e-17 2.1701e-16 4.6132e-16 6.0507e-16 9.0401e-17 2.5058e-16 1.0538e-17 2.1355e-16 1.0441e-16 7.0695e-17 3.8812e-16 2.5308e-16 4.6933e-16 1.3955e-16 3.4172e-16 3.0257e-16 2.2817e-16 9.4438e-17 3.6693e-17 5.9714e-17 2.2270e-17 1.0062e-17 4.4640e-18 5.0830e-17 1.4862e-16 4.9826e-23 2.4102e-17 7.9023e-18 1.0817e-16 4.2430e-17 5.0823e-17 3.3168e-18 6.1767e-18 8.7901e-17 2.2909e-16 1.5751e-16 8.3339e-18 1.9054e-16 1.4985e-16 5.4787e-17 4.1458e-17 7.8272e-18 2.9296e-17 2.9538e-17 1.0586e-17 2.0406e-17 1.4193e-16 7.1422e-17 5.3810e-17 8.7445e-18 6.3170e-17 4.5904e-17 2.3132e-16 2.1457e-17 2.1968e-17 7.0087e-18 9.4624e-18 1.5383e-16 2.5312e-17 2.0839e-17 5.4597e-17 3.8367e-17 5.6533e-17 1.0198e-16 4.4333e-17 1.9764e-17 1.2247e-17 8.3307e-18 2.9692e-19 5.7773e-19 9.4708e-18 9.7376e-24 1.4746e-17 2.8945e-18 9.0947e-18 1.2106e-17 4.1891e-17 3.6356e-18 1.9519e-16 8.1079e-16 1.8831e-17 2.9412e-16 2.2376e-16 1.1667e-16 1.3453e-16 3.7817e-17 2.0547e-16 2.2906e-16 1.4896e-16 5.3173e-18 2.3785e-16 1.8943e-16 1.4674e-17 1.0750e-16 4.9950e-16 6.6415e-16 8.1244e-16 4.6038e-17 8.9336e-18 8.1163e-18 9.8147e-18 1.0489e-17 3.0038e-17 5.4927e-17 2.8101e-17 2.3787e-17 1.6815e-17 2.7563e-17 6.2065e-17 7.0568e-17 3.2684e-16 2.9844e-16 2.7609e-17 5.1609e-18 1.4345e-16 2.7100e-16 1.0416e-15 1.3672e-15 7.6191e-17 2.2783e-18 2.7352e-16 4.5260e-16 7.8544e-16 4.6526e-17 4.6503e-16 2.4915e-16 1.8785e-16 1.0631e-16 4.4423e-18 4.1209e-16 1.4978e-22 2.1720e-16 1.1319e-16 1.0798e-16 1.4007e-16 2.1661e-16 2.0915e-22 1.7520e-16 2.3975e-16 1.4769e-16 1.6774e-17 1.9680e-16 1.8995e-17 7.0583e-17 9.6571e-17 7.0918e-17 2.4414e-16 1.6809e-16 1.7201e-16 1.3983e-17 1.3874e-15 2.1330e-16 6.3938e-17 1.7852e-16 2.9291e-16 5.8952e-16 1.9464e-16 3.2814e-17 4.2269e-16 1.3174e-17 1.5477e-16 5.5173e-17 4.9427e-17 4.1944e-16 1.0458e-16 1.2266e-16 6.4984e-17 7.2921e-17 5.7427e-17 2.2243e-16 1.2326e-16 1.6018e-16 2.1305e-16 3.5630e-17 4.5078e-17 3.4579e-17 3.7836e-16 6.8682e-17 2.0322e-16 1.2498e-17 1.3223e-16 4.4921e-23 2.0832e-17 1.3093e-16 2.5570e-17 4.9826e-23 5.8128e-17 2.8448e-16 2.2388e-16 4.0005e-17 2.3101e-18 3.6485e-17 1.4206e-16 1.0173e-16 5.4636e-17 2.2731e-16 2.0372e-17 1.2524e-17 5.2232e-17 2.9438e-17 1.1082e-16 9.3926e-18 1.3777e-16 4.4308e-17 4.6125e-17 8.3082e-17 2.4928e-16 8.8184e-17 1.2732e-16 1.1805e-16 1.5737e-16 7.2936e-17 3.0842e-17 2.1886e-17 1.8634e-16 5.0112e-17 1.2073e-17 3.3573e-17 2.0783e-17 9.3775e-17 9.6679e-17 2.8158e-17 9.9218e-17 3.2492e-17 5.9110e-18 9.4428e-18 4.3820e-18 6.7143e-18 4.3201e-17 2.5035e-18 3.5640e-17 1.0283e-17 1.3166e-23 1.7367e-18 1.5158e-18 1.1005e-17 1.0155e-17 1.1488e-16 2.7884e-17 2.1815e-16 2.1176e-16 1.2833e-16 9.4691e-17 9.7854e-18 7.8407e-17 2.5970e-16 4.9272e-19 2.3339e-16 1.7418e-16 5.8823e-16 3.5551e-17 2.1894e-17 5.8696e-17 1.4004e-16 1.5160e-16 2.2675e-15 6.2495e-17 1.6741e-17 2.1928e-17 9.3978e-18 8.7242e-18 7.6699e-17 1.9409e-16 1.8881e-17 2.0608e-17 5.4813e-17 1.4573e-17 9.1079e-17 5.1721e-18 1.7235e-16 9.1088e-16 1.4618e-16 1.2668e-16 7.7414e-17 2.4207e-16 3.9709e-16 6.5124e-16 5.4849e-16 3.8096e-17 5.9235e-16 2.4617e-16 7.2797e-16 1.0884e-16 2.6675e-16 6.1667e-16 7.8716e-16 6.3637e-16 3.6800e-17 1.3882e-22 1.6669e-16 1.4379e-17 1.0343e-17 9.1633e-17 1.1367e-17 3.0449e-17 2.4136e-16 6.6927e-18 4.2049e-17 2.9968e-17 2.2542e-16 3.9419e-16 8.0509e-17 3.0392e-16 1.2100e-16 9.6571e-17 1.6429e-15 1.8310e-16 2.7153e-16 1.3231e-16 6.9916e-16 9.2834e-16 2.9479e-16 2.2835e-17 1.0324e-16 1.0461e-16 3.2211e-16 4.7186e-17 1.9688e-16 3.8235e-16 2.0701e-17 5.6686e-16 3.7885e-16 1.2815e-17 3.6590e-16 1.5599e-16 1.6997e-16 5.4446e-17 2.4481e-16 2.4363e-17 1.0518e-16 3.6646e-17 1.2814e-16 2.7789e-17 2.1675e-16 4.5078e-17 1.8730e-16 6.3541e-17 1.0732e-16 8.8909e-17 2.9996e-16 3.1318e-16 7.1874e-18 8.9280e-18 8.7797e-17 1.4063e-16 3.9063e-16 1.0775e-16 1.9492e-16 8.4271e-17 2.8367e-16 1.4900e-16 8.9555e-17 9.6768e-17 1.3037e-16 1.5336e-17 2.7353e-17 1.8520e-18 2.1469e-17 3.4250e-18 5.5605e-17 2.4715e-17 1.5341e-16 6.9677e-17 1.6324e-16 6.7297e-17 3.4982e-17 2.8818e-18 7.5794e-17 2.1979e-17 4.6845e-17 3.3247e-17 1.7341e-17 1.4487e-17 7.2525e-17 2.0007e-17 1.6646e-16 3.1911e-16 4.3951e-17 1.5187e-17 9.5512e-18 1.8139e-17 3.3757e-17 6.2814e-18 8.8854e-18 1.1970e-17 1.7568e-18 4.1910e-17 4.2275e-17 5.6414e-18 6.7402e-18 3.5889e-17 9.3482e-18 3.7918e-17 5.7890e-19 8.3368e-18 1.4307e-17 3.9669e-23 7.4166e-17 1.0184e-16 5.3810e-17 2.3450e-17 2.1885e-16 4.2460e-17 2.5216e-16 1.3866e-16 3.1301e-16 2.3355e-16 7.0396e-17 1.3814e-16 3.1904e-16 1.6929e-17 6.8539e-17 2.5962e-17 8.4870e-18 5.9279e-16 2.4285e-15 2.7776e-17 5.5804e-18 5.6850e-18 9.3978e-18 1.3632e-17 1.3766e-17 1.3710e-16 6.2651e-17 1.1241e-17 3.4129e-17 3.9235e-17 1.7976e-17 2.0300e-16 1.0857e-16 1.1937e-16 1.4770e-16 7.3083e-17 1.5655e-16 8.8938e-16 4.5166e-17 4.6685e-16 4.7792e-16 1.4815e-17 1.3214e-16 5.3959e-16 3.9261e-16 2.2946e-16 6.3896e-16 4.7514e-16 2.3831e-16 2.6835e-17 2.4533e-16 3.5538e-17 1.8521e-16 1.2941e-16 1.5514e-16 1.8327e-16 7.9567e-17 1.1571e-16 4.9510e-17 1.7401e-16 8.5500e-16 2.2476e-16 3.1093e-16 1.1742e-16 9.8400e-17 2.8492e-17 5.8483e-16 1.2876e-16 2.5649e-15 1.8310e-16 2.5860e-17 1.9847e-16 1.6780e-16 1.8363e-16 4.0743e-16 2.6945e-16 2.1508e-17 1.8202e-16 1.1750e-16 5.1118e-17 7.5278e-17 7.4932e-17 8.8451e-17 8.2046e-17 6.9886e-17 6.7917e-16 5.1047e-16 1.8435e-16 1.5771e-17 2.4588e-17 1.7362e-18 6.6128e-17 9.4835e-17 2.3320e-17 6.4071e-18 1.8989e-16 2.1526e-16 9.8881e-17 1.2535e-16 4.9100e-17 2.8618e-18 5.2216e-17 2.9718e-16 1.1831e-16 2.8750e-18 4.6500e-23 2.1410e-16 9.2690e-17 5.4211e-17 9.0737e-17 7.7706e-17 8.1755e-17 1.5396e-16 2.4487e-16 3.9802e-17 1.0294e-17 8.9876e-17 1.6966e-16 1.3299e-16 3.0558e-17 9.5717e-17 9.0763e-17 8.5861e-17 4.4647e-17 1.1506e-16 1.1322e-16 2.0988e-17 1.5652e-16 2.2593e-17 9.2938e-17 1.4284e-16 8.3368e-18 1.4990e-17 5.9291e-17 7.1406e-17 4.2058e-18 5.5789e-18 6.3158e-17 1.0513e-18 1.3150e-16 3.3726e-16 8.9525e-17 1.0419e-17 3.1198e-17 3.0957e-17 3.2835e-17 5.6495e-17 8.4232e-18 3.1293e-17 2.7078e-17 5.0854e-17 1.8557e-17 1.2517e-17 1.4455e-17 7.4785e-18 8.0049e-18 2.8945e-18 7.5789e-18 7.7037e-18 9.6476e-17 2.2722e-23 2.5338e-16 3.9049e-16 5.8626e-17 1.2932e-17 6.4026e-17 6.3605e-17 7.4693e-17 1.1801e-16 1.8526e-16 1.7545e-16 9.4899e-17 7.6437e-17 1.6760e-16 8.3770e-17 5.6438e-18 1.4852e-16 2.8765e-16 2.9484e-15 2.3609e-16 2.7902e-18 9.7458e-18 2.5630e-17 5.4526e-18 3.3433e-17 1.4249e-16 8.5823e-18 1.7797e-17 1.4479e-17 6.3897e-17 5.8722e-17 7.2409e-17 2.3477e-16 1.8616e-16 9.5928e-17 1.9489e-17 2.3912e-16 3.0483e-17 8.4687e-17 3.4524e-16 2.9240e-16 1.3334e-16 1.5948e-17 5.3959e-16 5.9710e-16 1.5297e-16 1.4268e-16 2.8980e-16 5.7773e-17 3.2202e-16 1.4720e-16 2.2211e-16 5.0933e-17 9.5859e-17 3.7751e-16 2.5334e-16 2.2733e-17 4.8719e-17 1.9340e-22 2.6771e-17 1.4016e-16 2.9968e-16 2.4097e-16 3.1032e-16 1.0735e-16 9.4974e-18 3.1510e-22 7.7257e-16 5.5552e-16 8.5448e-17 2.9739e-16 1.3231e-16 4.3348e-16 1.8414e-15 2.6603e-16 4.5670e-17 5.5706e-16 3.9752e-17 8.1033e-18 7.8644e-17 6.7557e-17 4.8034e-17 9.7861e-17 5.8271e-23 7.5587e-16 8.2379e-16 1.4279e-17 1.2053e-16 2.8037e-17 8.7816e-17 4.6878e-17 8.1790e-17 1.7932e-16 3.8312e-17 1.6018e-18 4.6315e-18 6.9775e-17 1.3087e-16 2.9536e-16 6.4697e-16 4.2927e-18 1.8346e-17 1.1526e-16 2.7420e-16 1.4375e-18 2.3808e-17 7.0854e-17 1.1187e-16 2.7105e-17 4.5368e-17 1.3171e-18 1.6225e-16 6.6676e-17 3.1649e-16 1.1056e-18 9.2650e-17 3.2593e-17 5.6553e-17 7.5456e-18 6.9449e-17 6.5302e-17 2.8257e-17 7.3595e-18 3.5877e-17 2.1055e-16 1.2431e-16 3.4202e-17 5.8979e-17 5.8303e-18 2.4351e-16 1.4795e-16 1.0989e-16 5.7463e-17 9.4201e-18 7.8036e-17 4.2992e-17 2.2316e-17 5.9628e-17 2.1026e-18 3.2629e-18 1.7702e-17 1.1137e-16 1.7149e-17 6.1127e-17 1.3750e-16 1.3419e-17 8.6202e-18 2.9555e-18 3.6234e-17 1.9663e-17 2.6111e-18 3.1176e-18 1.4443e-17 1.1714e-17 2.0878e-17 1.1797e-17 1.1578e-18 1.5158e-17 5.5027e-18 3.8082e-18 1.3815e-17 2.7945e-16 1.1198e-16 2.0217e-16 7.2619e-17 4.6840e-17 2.2582e-18 2.3275e-16 2.7702e-16 1.8280e-16 1.1372e-16 1.5436e-16 2.8448e-16 6.1791e-16 7.9010e-17 2.8219e-17 5.6580e-17 1.0301e-16 1.3920e-15 2.9164e-16 1.8136e-17 4.4668e-18 1.2388e-17 1.1996e-17 4.9822e-17 1.3864e-16 5.1494e-18 7.4937e-18 3.1026e-18 3.4751e-17 3.1159e-17 6.4651e-18 8.1425e-18 2.7284e-16 6.1972e-16 1.9976e-16 5.3329e-17 3.4428e-16 1.3174e-17 8.8271e-17 1.2724e-15 1.1640e-16 7.1196e-23 5.2467e-16 4.6350e-17 3.3830e-16 7.1340e-17 6.7396e-18 1.0832e-17 4.2169e-17 2.1262e-16 4.7976e-16 4.6302e-18 5.7516e-17 1.5514e-16 2.6951e-16 3.4668e-16 1.2180e-17 4.3321e-17 2.2086e-16 1.6820e-16 1.4235e-16 1.6324e-16 3.3548e-16 5.3673e-17 4.7487e-17 3.5292e-16 1.6095e-16 6.8554e-16 1.2207e-17 4.9135e-16 2.9109e-16 1.3983e-16 1.0839e-15 4.7933e-17 2.1008e-16 2.5810e-16 5.9419e-16 3.7275e-16 1.8678e-16 5.5011e-16 1.0759e-16 9.5979e-17 1.5290e-16 2.2069e-17 1.4096e-16 1.0709e-17 7.0903e-18 1.9801e-16 8.4303e-17 2.4481e-16 4.5246e-17 7.9316e-17 9.8278e-17 5.0056e-23 5.4035e-17 7.5714e-17 7.8523e-17 1.1670e-16 1.4008e-16 2.5184e-16 5.7861e-17 1.8331e-16 5.5676e-18 4.4921e-23 1.4880e-18 1.0782e-17 4.9541e-17 1.7379e-16 2.1266e-17 7.9023e-17 3.0187e-16 8.6072e-17 1.3861e-17 5.5281e-17 5.1472e-17 5.5309e-17 1.4378e-17 3.6785e-17 3.8891e-17 5.4568e-17 4.7950e-17 1.1203e-16 7.0957e-17 5.4007e-17 1.4252e-17 4.6640e-18 1.7391e-17 1.4357e-16 2.3054e-17 8.9642e-17 9.6252e-17 2.9981e-17 1.3853e-16 7.0896e-17 3.7852e-17 8.0250e-17 1.9614e-17 4.2052e-17 7.5373e-17 8.7902e-17 8.0199e-17 1.8885e-17 1.5418e-16 2.5688e-17 1.1806e-16 2.6258e-17 4.2707e-17 2.8658e-17 1.6180e-17 7.4603e-18 2.4793e-17 2.9272e-17 2.0686e-17 1.0283e-17 2.5279e-18 1.6788e-17 9.0947e-18 5.5027e-18 1.0155e-17 1.0180e-17 1.5518e-16 1.0006e-15 4.4058e-17 7.3945e-17 8.7615e-17 8.8821e-17 1.5681e-16 2.8704e-17 1.8329e-16 3.9530e-17 6.6670e-17 7.9095e-16 7.1187e-16 9.6145e-17 9.2559e-17 4.4203e-23 1.1389e-15 1.2679e-15 1.2499e-16 4.1853e-18 4.0607e-19 2.1359e-18 2.6173e-17 7.8666e-18 9.7816e-17 3.0896e-17 9.3671e-19 3.7231e-17 4.3719e-17 7.1904e-18 3.2325e-17 5.0212e-17 2.1316e-17 2.0404e-16 1.5266e-16 5.0749e-16 5.9172e-17 1.0539e-16 2.7854e-16 9.8810e-17 4.2117e-16 2.0277e-16 1.6909e-16 6.2709e-17 5.8835e-18 6.8238e-17 1.5164e-16 1.1284e-22 8.4339e-17 8.1778e-17 1.0661e-16 6.9454e-17 1.2941e-16 5.4816e-16 3.9887e-16 7.9567e-17 1.8878e-16 2.1042e-16 7.3620e-17 2.1725e-16 2.3975e-16 3.7312e-16 1.1742e-16 4.4727e-17 2.1844e-16 4.9408e-16 5.3651e-16 2.9549e-16 2.8076e-16 3.1032e-16 1.8524e-16 9.7882e-17 1.4639e-15 4.7933e-18 5.0237e-16 1.8712e-16 6.0674e-17 3.2211e-16 9.4373e-17 1.4284e-16 9.2224e-16 3.1428e-16 5.5940e-17 2.3357e-16 2.6361e-16 1.1245e-16 6.5408e-16 7.4297e-16 2.2305e-16 8.6811e-18 2.7147e-16 1.1380e-16 8.3286e-18 2.6429e-16 1.0807e-17 5.4930e-17 8.8702e-17 3.1121e-16 8.6647e-16 5.7235e-18 3.8104e-17 2.3608e-17 9.7432e-18 1.4375e-18 4.6500e-23 1.4941e-16 2.5570e-17 2.1525e-16 1.8998e-16 2.9370e-16 1.1446e-16 7.2737e-18 1.8481e-16 2.6535e-17 5.7649e-17 7.9012e-18 3.2590e-17 1.4148e-17 4.0743e-17 3.1578e-16 4.3669e-17 3.9251e-17 1.5148e-17 1.0410e-16 3.9589e-18 1.5547e-18 2.7977e-17 8.8913e-17 1.7291e-17 3.2067e-17 1.1368e-16 2.8732e-17 4.7100e-17 2.0402e-18 8.0377e-17 2.1886e-17 4.3152e-17 1.8923e-17 3.2629e-17 2.0388e-16 5.4354e-17 9.0519e-17 3.9361e-17 6.7513e-18 2.6553e-17 3.1828e-18 1.0137e-16 1.0651e-17 8.3033e-17 1.6164e-18 2.3753e-18 2.7153e-17 3.3397e-17 3.4277e-18 3.3705e-18 1.7946e-17 8.3368e-18 3.4392e-23 2.5388e-17 1.2361e-17 4.7888e-17 1.0108e-16 1.3857e-16 9.6162e-18 1.9275e-16 1.1667e-17 2.5379e-16 3.4126e-16 1.3304e-17 5.0902e-17 1.8259e-16 3.6756e-16 2.3024e-16 1.5231e-17 2.3704e-17 3.2534e-17 3.5179e-16 1.1271e-15 3.4025e-16 1.3951e-17 1.8273e-17 8.5435e-19 2.3446e-17 5.8999e-18 2.0333e-16 5.1494e-18 8.8051e-17 3.8265e-17 4.4840e-18 4.7936e-18 1.0086e-16 2.0356e-16 9.5209e-17 2.4363e-17 2.5011e-16 1.0167e-15 8.2483e-17 6.7750e-17 3.1385e-16 3.1256e-16 3.5768e-16 3.6452e-17 7.5344e-16 1.3632e-17 3.0300e-16 9.9256e-17 1.9545e-16 1.0832e-16 1.3418e-16 3.2711e-17 1.3882e-22 2.7781e-16 4.3137e-17 2.0685e-16 6.0370e-16 8.9229e-16 2.9231e-16 2.4755e-16 1.0708e-16 2.8733e-16 1.7981e-16 3.8866e-17 1.8451e-16 7.3353e-16 9.4974e-18 2.1175e-16 7.2965e-16 4.4915e-16 1.5869e-16 3.3618e-16 1.8524e-16 4.3697e-22 4.6672e-16 6.8304e-16 1.6213e-16 1.4411e-16 8.7873e-17 1.9651e-16 1.6515e-16 2.4514e-16 9.4146e-17 1.6185e-16 3.9531e-16 7.3564e-18 2.5446e-16 2.0526e-16 2.1803e-16 7.7101e-17 4.6718e-16 6.5976e-17 6.6128e-17 9.8283e-17 4.3309e-17 4.3248e-17 7.1017e-17 3.8599e-17 2.1957e-16 3.6020e-17 1.2131e-16 2.2465e-16 1.9193e-16 2.6663e-16 1.9486e-17 1.2937e-17 1.1904e-17 9.5498e-17 1.7579e-17 3.8266e-17 6.8053e-17 1.1590e-16 8.3013e-17 2.1821e-17 2.8876e-17 6.3020e-17 2.3677e-17 5.7284e-17 8.3392e-17 1.9902e-16 5.8337e-17 2.5942e-17 1.8838e-17 2.2078e-17 2.3918e-17 1.3306e-17 2.3753e-18 5.5968e-17 6.0491e-18 2.1864e-17 1.2968e-16 1.3045e-16 3.4105e-17 5.4965e-17 3.4910e-17 6.7325e-17 2.2898e-17 2.9611e-17 2.4322e-16 1.8012e-16 1.5336e-17 7.5693e-17 6.9275e-18 6.0780e-18 8.1080e-17 1.4211e-16 1.1278e-17 1.0079e-17 1.4778e-18 4.3920e-18 2.6517e-17 1.1066e-17 3.7263e-17 2.3109e-18 1.9939e-18 4.8299e-17 1.1797e-17 5.7890e-19 1.8947e-17 1.8709e-17 3.8082e-18 9.8161e-17 4.1463e-16 9.4895e-17 2.4871e-18 1.3927e-17 1.7860e-17 4.7421e-17 2.9093e-16 1.1892e-16 1.7738e-16 1.1372e-16 7.9283e-17 1.7281e-17 6.6362e-16 1.1899e-16 1.0159e-17 1.2165e-16 1.9630e-16 1.0499e-15 4.1663e-16 3.2087e-17 1.2690e-23 4.6989e-18 2.3446e-17 7.8666e-18 1.1399e-16 6.0076e-18 2.9038e-17 5.1710e-17 5.1566e-17 1.1025e-16 2.3274e-17 1.2892e-16 3.8510e-16 2.6951e-16 1.2505e-16 4.5932e-16 1.3628e-16 1.3926e-16 7.3167e-16 9.0744e-17 1.3122e-16 1.0480e-16 2.8596e-16 1.1424e-15 2.5887e-16 1.2407e-17 3.4372e-16 1.2638e-16 3.8336e-17 2.9440e-16 1.8657e-16 1.4817e-16 1.9172e-16 1.6548e-16 1.4554e-16 3.9783e-17 4.3238e-16 5.4461e-16 2.0915e-22 3.7143e-16 2.3413e-22 6.9959e-17 1.1742e-16 3.5782e-17 2.0894e-16 1.5125e-16 3.2190e-17 8.8647e-16 2.0752e-16 3.1032e-16 4.3664e-16 2.7966e-17 2.8131e-15 1.5339e-16 8.2207e-17 6.4525e-18 4.2681e-16 1.0129e-17 1.7498e-16 2.4900e-16 2.7283e-16 8.8451e-17 3.7294e-17 2.7586e-17 8.5125e-16 2.8558e-17 8.8629e-18 3.1541e-17 2.7399e-16 2.2224e-16 6.7869e-17 2.5864e-17 8.1621e-17 1.2814e-17 8.4912e-17 2.4941e-16 4.2170e-17 6.4836e-17 2.8882e-18 1.0302e-16 2.3145e-16 7.9155e-17 2.2409e-16 1.1500e-17 1.6368e-17 2.3104e-17 1.6780e-16 2.4395e-16 1.1342e-17 3.4243e-17 3.0187e-17 1.4547e-17 3.4652e-18 2.1891e-16 3.9119e-17 3.8518e-17 5.9429e-17 4.3387e-17 1.4260e-16 2.2364e-17 1.1046e-16 3.1073e-17 1.7062e-16 2.5047e-17 7.9178e-19 5.9854e-17 3.6295e-17 4.5914e-17 6.7722e-17 1.0203e-17 2.7284e-17 1.5615e-17 1.2856e-16 2.5910e-16 1.4019e-18 1.0729e-17 7.0612e-18 1.4193e-16 2.7735e-17 4.4561e-17 2.0862e-16 2.0144e-16 7.4368e-18 4.3637e-17 3.4262e-18 2.0954e-17 1.6255e-18 2.3607e-17 2.6966e-18 6.9629e-18 1.0244e-17 2.7538e-17 1.2711e-17 1.5580e-17 2.9492e-17 1.7367e-18 1.8189e-17 3.3016e-18 8.8859e-18 2.9085e-18 1.7337e-16 1.0435e-16 3.5175e-17 9.2846e-17 1.2468e-17 4.3281e-17 3.7140e-17 1.3896e-16 2.8824e-16 1.2888e-16 1.4415e-17 5.4170e-16 7.7281e-16 1.8087e-17 2.5962e-17 2.4047e-17 5.0533e-17 5.8365e-16 5.5551e-16 2.0926e-17 2.6801e-17 5.9804e-18 5.1255e-17 3.5400e-17 2.2490e-16 4.6344e-17 7.4937e-18 2.3787e-17 8.2954e-17 2.3968e-18 1.6551e-16 5.7133e-16 1.4779e-16 3.3346e-16 1.1125e-15 2.9761e-16 6.0965e-17 4.7048e-17 4.3155e-16 2.6013e-16 1.4815e-16 3.1668e-16 6.8381e-16 6.1619e-16 8.8252e-18 4.6526e-17 3.0328e-17 1.2999e-16 1.1884e-16 2.8213e-16 4.8865e-17 3.7042e-17 1.5817e-16 3.8785e-16 2.3717e-16 3.4100e-17 1.1571e-16 1.9340e-22 3.3464e-17 2.5930e-16 2.2476e-16 3.4980e-16 1.7613e-16 4.4727e-17 2.8492e-17 5.0417e-17 3.2190e-17 4.7279e-16 1.4648e-16 3.4911e-16 4.1348e-22 5.1738e-16 4.2846e-16 1.3421e-16 9.5223e-16 4.6028e-16 4.1844e-16 1.2763e-16 2.9491e-17 1.2739e-16 1.5179e-16 8.0923e-17 3.3191e-16 3.6782e-18 4.7597e-17 4.9619e-16 2.2334e-16 4.7312e-17 8.4303e-17 3.9933e-17 8.7011e-18 1.8967e-16 2.9983e-17 2.0823e-17 2.2386e-16 1.6776e-16 5.3803e-17 1.9595e-16 3.3937e-16 3.0049e-16 1.9616e-16 1.2220e-16 2.6585e-16 4.3125e-18 1.0416e-17 1.8792e-16 2.2373e-17 2.0090e-16 4.9622e-17 2.8053e-16 6.9178e-17 3.8551e-16 5.6598e-17 5.4175e-17 3.0780e-16 4.8395e-17 6.7097e-17 1.6978e-17 6.7597e-17 3.1309e-17 1.6954e-16 1.3411e-16 4.3850e-17 4.6963e-17 2.2328e-16 9.0947e-17 2.3062e-16 4.8100e-17 1.1455e-16 1.1223e-16 2.1221e-17 1.7114e-16 4.2667e-17 8.6707e-18 1.8926e-16 6.9951e-17 3.4129e-17 5.9574e-18 2.1209e-17 7.0199e-18 7.3538e-17 1.8668e-17 9.9400e-17 3.6556e-17 1.8701e-17 1.5649e-17 3.4136e-17 1.1968e-17 2.2472e-18 3.8545e-17 7.5714e-18 1.0207e-17 8.9724e-18 7.4785e-18 8.0049e-18 2.3156e-17 4.5473e-18 6.8233e-17 2.0311e-17 1.4542e-16 3.7947e-16 3.4686e-16 1.0979e-16 5.3718e-17 2.5172e-16 5.3443e-17 3.1280e-16 4.1188e-16 1.2318e-17 1.1263e-16 2.9791e-16 7.3113e-18 2.2685e-16 1.0471e-17 2.1447e-17 5.9409e-17 3.1486e-16 3.8239e-16 9.0271e-17 3.4877e-17 7.3093e-18 5.9804e-18 1.5267e-17 6.7521e-17 4.4672e-17 6.6942e-17 2.5291e-17 2.4821e-17 4.4840e-17 2.3968e-18 1.1120e-16 2.7141e-18 2.4015e-16 1.2334e-16 1.1206e-16 6.4511e-16 1.5959e-16 9.4097e-17 7.4344e-16 2.2383e-16 2.0529e-16 1.0480e-16 2.7104e-16 2.2630e-16 1.5297e-16 1.5819e-16 2.6958e-17 5.0551e-17 2.3385e-16 1.7173e-16 4.4423e-16 3.0097e-16 3.1154e-16 1.0860e-16 1.0780e-16 2.8417e-17 2.0096e-16 8.6643e-17 2.0078e-17 1.9623e-16 2.3413e-22 4.7417e-16 7.3805e-16 3.0415e-16 2.7542e-16 1.6133e-16 1.0730e-17 3.4277e-16 4.6386e-16 4.6549e-16 6.6157e-17 4.3697e-22 1.7853e-17 1.0545e-16 3.0371e-16 3.0542e-16 7.5319e-17 4.2543e-16 1.4156e-16 2.5865e-16 7.1090e-17 3.9521e-17 2.4614e-16 1.0115e-16 2.3981e-16 1.2851e-16 1.1344e-16 8.4986e-16 1.1767e-16 1.9446e-16 5.9167e-17 2.8450e-16 3.1649e-17 3.6841e-17 8.3368e-17 2.4793e-16 2.5011e-16 5.1869e-17 9.2424e-17 9.1577e-17 4.9394e-17 1.1109e-17 9.0473e-17 2.8750e-18 1.4880e-18 2.9266e-17 1.4383e-17 3.8745e-16 1.8431e-17 1.0141e-16 8.1755e-17 9.0921e-17 2.7721e-17 4.8647e-17 2.5736e-17 5.0370e-17 1.9362e-16 8.6774e-17 1.0001e-16 9.8400e-18 1.5413e-17 4.3339e-17 6.5376e-17 3.7570e-17 7.9178e-19 8.4729e-17 2.9490e-17 4.3728e-18 1.0519e-16 1.7054e-16 2.2737e-17 3.1230e-18 6.5940e-17 5.1004e-19 2.7104e-17 1.2016e-17 2.1968e-17 7.0087e-19 1.7293e-17 1.4528e-16 3.2240e-17 3.8639e-17 1.5236e-16 5.7304e-17 3.9544e-17 2.2413e-17 8.2755e-17 1.2627e-17 1.5842e-17 1.7532e-17 6.8291e-18 3.3894e-17 1.0966e-17 9.7376e-24 2.5279e-18 5.2101e-18 1.1368e-17 1.9810e-17 1.2694e-18 6.9076e-17 1.4548e-17 4.5666e-16 2.5582e-17 1.0346e-16 3.9427e-17 2.3748e-16 2.9506e-16 2.2781e-17 3.6856e-16 3.5739e-17 7.8682e-17 2.3197e-16 4.4693e-16 2.3798e-17 6.2082e-17 5.6580e-17 2.1963e-16 9.0231e-16 2.2498e-15 2.2322e-17 3.2486e-18 2.3067e-17 9.8147e-18 5.8999e-17 2.1335e-16 1.7165e-18 6.5570e-18 1.6547e-17 1.7936e-17 1.8096e-16 4.5773e-16 7.5996e-17 2.9700e-16 5.4816e-17 9.7444e-18 4.9889e-17 2.2952e-16 4.1403e-17 3.3347e-17 3.5693e-16 8.4657e-18 4.5565e-17 2.6358e-16 1.1179e-16 7.9427e-17 3.7531e-16 1.5164e-16 2.3470e-16 6.1337e-17 5.3155e-17 1.1550e-16 2.3151e-16 9.5859e-18 1.8617e-16 1.9944e-16 1.6482e-16 1.2789e-16 5.6937e-16 2.8779e-16 1.2615e-16 9.7397e-17 3.4202e-16 1.6774e-17 1.7891e-16 1.7095e-16 1.2100e-16 3.3532e-22 3.5459e-16 1.8310e-16 1.4223e-16 6.7480e-16 1.0487e-15 4.2846e-16 2.2289e-16 4.0875e-16 1.4841e-16 6.5381e-23 6.1383e-16 2.7525e-17 1.1581e-16 4.6112e-17 2.1642e-16 9.3234e-17 9.0116e-17 1.7025e-16 3.3734e-16 1.5953e-17 2.7511e-16 2.2832e-17 5.0350e-17 1.7054e-16 2.4829e-16 9.1615e-17 3.0434e-17 3.7361e-16 2.0784e-17 4.9295e-16 1.3111e-16 2.0218e-17 1.5740e-17 2.2157e-16 1.3887e-18 4.4540e-17 7.1874e-18 2.2320e-17 5.5451e-17 9.4288e-17 1.4509e-16 7.5142e-17 7.5072e-17 5.1569e-17 6.1826e-17 1.3861e-17 7.4076e-17 1.0912e-16 2.4593e-16 1.6295e-16 1.8770e-16 1.1112e-16 8.9455e-19 4.4525e-17 6.7871e-17 7.9727e-18 7.8272e-19 1.2035e-16 3.9644e-17 9.8299e-17 4.7372e-17 4.2507e-17 1.4576e-18 1.7431e-17 1.3616e-16 3.9897e-17 7.6506e-18 1.9627e-17 5.4931e-17 9.4933e-17 3.6795e-17 4.8944e-18 7.7830e-17 2.2115e-17 3.5491e-16 2.8296e-17 2.0369e-16 1.0007e-16 3.7133e-17 4.5515e-17 2.3058e-17 7.8651e-18 2.9841e-17 1.2916e-17 6.3550e-18 7.9754e-18 7.4785e-18 4.2974e-17 9.2624e-18 3.3347e-17 1.9810e-17 5.0777e-18 1.8178e-17 3.5219e-16 6.1337e-16 4.3347e-17 1.7011e-16 9.7050e-17 7.0379e-17 2.2160e-16 1.8179e-16 1.5570e-16 2.0902e-16 8.5289e-17 5.3173e-17 1.1546e-15 2.8558e-18 5.9825e-17 1.1740e-16 6.5110e-16 8.2181e-16 2.1700e-22 9.6262e-17 1.1370e-17 1.2815e-17 4.3621e-18 1.0358e-16 6.6237e-17 2.1456e-17 3.7468e-18 9.9283e-17 3.1388e-17 1.2224e-16 1.2801e-16 4.2409e-23 5.9825e-16 2.5581e-16 2.4199e-16 9.5993e-16 2.3310e-16 1.0162e-16 5.7474e-16 3.2264e-17 2.2646e-16 8.8852e-17 7.4598e-17 1.7722e-16 6.2659e-16 3.1328e-16 6.3352e-16 5.6690e-16 1.9168e-16 3.2711e-17 1.2616e-15 9.2605e-17 1.5817e-16 3.4648e-16 1.5632e-16 8.5250e-17 3.1058e-16 1.4234e-16 4.6849e-17 1.9623e-16 4.9448e-16 3.4980e-16 5.9547e-16 6.9775e-16 1.2347e-16 1.6133e-16 2.7898e-16 3.9005e-16 6.1034e-17 1.9395e-16 2.6463e-17 2.5170e-16 4.9656e-15 8.6279e-17 2.3064e-16 2.1508e-18 4.5401e-16 2.6336e-17 3.4407e-16 5.5011e-16 9.6067e-17 7.5277e-18 3.5242e-16 1.6184e-16 1.2339e-15 3.1235e-16 3.5451e-18 2.9088e-16 9.6598e-17 2.1355e-16 7.6570e-17 3.9141e-16 4.1976e-16 1.4416e-17 1.3895e-17 1.8112e-16 2.5157e-16 6.0514e-17 4.0436e-17 5.2943e-17 1.4113e-17 1.5276e-17 1.9486e-17 5.7500e-18 4.4640e-18 3.6967e-17 3.8354e-17 1.9133e-17 9.4990e-17 4.2146e-17 6.2889e-18 1.0426e-16 4.0312e-16 5.9703e-17 7.2061e-18 3.2593e-17 4.0258e-17 4.6217e-17 5.5559e-18 9.7506e-17 2.6758e-23 3.0256e-16 3.2847e-16 1.1741e-17 5.5425e-17 1.1660e-17 1.1871e-16 4.2270e-17 1.2392e-16 2.1062e-16 9.8525e-18 8.4946e-17 3.7680e-17 3.5193e-17 3.0702e-16 2.8324e-17 5.8843e-17 4.9761e-17 1.5727e-16 2.9911e-17 1.3455e-16 1.2742e-16 9.6860e-17 6.0597e-17 5.8674e-17 5.5700e-17 6.6499e-18 3.4587e-17 1.5168e-17 3.8856e-24 3.8748e-17 7.5105e-18 4.7354e-18 3.6769e-17 2.9492e-18 8.1046e-18 1.3642e-17 1.5407e-17 3.8082e-18 1.3015e-16 3.8068e-16 4.5666e-16 1.4248e-16 1.4060e-16 9.0985e-18 4.1776e-17 2.4925e-16 1.0798e-16 6.6025e-17 1.7112e-16 5.5858e-17 1.8877e-16 2.5902e-16 6.0923e-17 1.4110e-16 4.4203e-23 1.3411e-16 1.2411e-15 6.1801e-16 2.6507e-17 3.6547e-18 2.3495e-17 5.4526e-18 1.7110e-16 3.5044e-16 6.9517e-17 1.8734e-17 1.1376e-17 2.2420e-17 1.3182e-17 3.1679e-16 1.5742e-16 4.6894e-16 5.3750e-16 2.1113e-16 2.0644e-17 1.4345e-17 9.2215e-17 2.4520e-16 4.5170e-16 4.2329e-18 8.6574e-17 3.5310e-16 1.5187e-15 2.2946e-16 2.0161e-16 1.4490e-16 1.1284e-22 1.1501e-16 2.6987e-16 3.5538e-16 1.2502e-16 4.8888e-16 8.1708e-16 2.3717e-16 1.0798e-16 7.3078e-17 1.1759e-16 1.2716e-16 1.3316e-16 3.4464e-16 4.1976e-16 1.5935e-16 6.9775e-16 4.7487e-17 2.0167e-17 3.2190e-17 9.6921e-16 2.3193e-16 1.2930e-17 7.9388e-17 1.1186e-16 5.6108e-17 2.4685e-16 1.1235e-15 3.5489e-16 7.9504e-17 3.5655e-16 2.7132e-16 1.4091e-16 5.7640e-18 1.8819e-17 2.0511e-16 8.0920e-17 8.4942e-16 6.1756e-16 2.9070e-16 3.2067e-16 5.5500e-16 7.4657e-17 2.0883e-17 8.1041e-17 2.5985e-16 4.9175e-16 2.1923e-16 6.3837e-17 6.3982e-17 2.0027e-16 5.1988e-17 1.8745e-16 1.1713e-16 1.5831e-16 1.6007e-16 4.3125e-18 2.2320e-17 8.1636e-17 2.7168e-17 3.1889e-18 1.8006e-16 4.2146e-17 8.8045e-18 9.6983e-17 1.0973e-16 3.4550e-23 9.2650e-18 4.6420e-17 1.1982e-16 1.6412e-16 1.4168e-16 5.8146e-17 5.3088e-17 4.8245e-17 2.1526e-17 3.1309e-18 8.3929e-17 4.2753e-17 1.0284e-16 2.1864e-17 3.3861e-17 1.6033e-17 3.9410e-17 1.0181e-16 4.5438e-17 1.0354e-16 1.2103e-16 1.2359e-16 8.0419e-17 9.1463e-17 1.8957e-16 4.2730e-17 1.4494e-16 7.1851e-17 1.1971e-16 9.8635e-17 1.2420e-17 4.8140e-17 8.5710e-18 2.3168e-17 9.9999e-18 1.6164e-17 4.4983e-17 5.1996e-18 7.4770e-19 4.6741e-18 6.5725e-17 2.7208e-17 1.5158e-18 1.5407e-17 4.0621e-17 7.2712e-19 4.8495e-17 3.0105e-16 3.4465e-17 4.9540e-16 5.1221e-17 1.7237e-16 1.7786e-16 1.2028e-16 3.6807e-16 2.6913e-16 1.4896e-16 1.7747e-16 2.3108e-16 2.0276e-16 3.3863e-17 1.5560e-17 4.0232e-16 1.0029e-15 4.8607e-17 2.2322e-17 1.8273e-17 2.0504e-17 1.0905e-17 9.8988e-17 1.0552e-16 1.0556e-16 2.8101e-18 6.4120e-17 6.0534e-17 2.3968e-17 1.5646e-16 4.5326e-16 2.8421e-18 7.0042e-17 4.8722e-18 1.5655e-16 5.0207e-17 1.6937e-17 1.0475e-15 1.8552e-16 1.2064e-16 2.5061e-16 2.7104e-16 3.5717e-16 1.2061e-16 2.4814e-17 4.0101e-16 1.1193e-16 1.4951e-16 2.4124e-16 8.9734e-16 3.7042e-17 4.7930e-18 1.4997e-16 2.2100e-16 2.8417e-17 8.0386e-16 7.7360e-16 1.3385e-16 8.4098e-17 1.7981e-16 7.2291e-16 3.1032e-16 5.2778e-16 5.4135e-16 1.7142e-16 8.5841e-17 6.7372e-16 5.0048e-16 1.9395e-16 3.0432e-16 3.4958e-16 1.2318e-15 2.8760e-17 1.1646e-16 6.4525e-18 2.8454e-16 1.4789e-16 1.3369e-16 2.5865e-16 1.4602e-16 4.9683e-16 5.5940e-17 4.4138e-17 3.6247e-16 4.4621e-17 1.2408e-16 5.3795e-16 2.1954e-16 2.0835e-17 2.4363e-17 5.1728e-18 1.4825e-16 2.2265e-16 4.4772e-17 4.4538e-17 5.9474e-16 2.3341e-16 7.0762e-17 4.5788e-17 4.6571e-17 2.6385e-17 4.3496e-23 2.8750e-18 1.6368e-17 4.8134e-23 1.5022e-16 3.5077e-17 1.0491e-16 5.1365e-17 1.0062e-17 4.8491e-17 1.6171e-17 3.3168e-18 1.7501e-17 2.2716e-17 1.4570e-16 9.6207e-17 1.7038e-16 3.7571e-17 4.9663e-17 1.8808e-17 6.8565e-17 7.8272e-18 2.3753e-18 2.2309e-16 2.3440e-17 1.3118e-17 6.7002e-17 7.9438e-17 3.7136e-17 2.0987e-16 8.6997e-17 2.8052e-17 5.9348e-17 1.8024e-17 2.0007e-17 5.6420e-17 2.3167e-17 2.1975e-17 1.0365e-16 6.8161e-17 1.9046e-17 5.0552e-17 1.0279e-17 2.6869e-16 2.3496e-17 2.9646e-18 3.0561e-17 5.8066e-17 2.5238e-18 1.0399e-17 3.7385e-18 9.3481e-19 5.5192e-17 6.3679e-18 7.5789e-18 1.1005e-18 1.7772e-17 1.9269e-16 2.1701e-16 1.1635e-16 1.4958e-16 1.4955e-16 2.0893e-17 2.9356e-17 1.6548e-16 4.5106e-16 9.1647e-17 1.1263e-16 8.4688e-17 9.6377e-17 7.1779e-16 5.7116e-18 2.7090e-17 5.3751e-17 5.4809e-16 1.7006e-15 9.7215e-17 2.7902e-18 2.2334e-17 3.2465e-17 7.6336e-18 5.8344e-17 4.2361e-17 1.2873e-17 4.8709e-17 1.5513e-17 1.1210e-17 1.3182e-17 2.0688e-17 5.2926e-17 5.9825e-16 2.5429e-16 4.7098e-17 2.1676e-16 1.0579e-16 7.9041e-17 1.7654e-16 2.6618e-16 8.0424e-17 1.0480e-16 4.4759e-17 7.9614e-16 1.0590e-16 3.3499e-16 1.1727e-15 3.6108e-17 7.2838e-17 1.6764e-16 8.4403e-17 2.8708e-16 3.4989e-16 4.6542e-17 1.0241e-16 6.2517e-17 4.8110e-16 6.6839e-16 1.4724e-16 7.0082e-18 8.9905e-17 7.8510e-16 8.3869e-18 8.9455e-18 6.6482e-17 3.8317e-16 1.9314e-16 1.3002e-16 4.3945e-16 4.1377e-16 6.4834e-16 9.7882e-17 9.5639e-16 9.1073e-17 1.2559e-16 5.3771e-17 5.4397e-17 3.9504e-16 2.9098e-16 5.5783e-16 7.3011e-17 1.4867e-16 6.0416e-16 1.9862e-16 4.4851e-16 7.1394e-18 1.3472e-16 6.4834e-17 1.9495e-16 3.9239e-16 2.3319e-16 1.2070e-17 1.3326e-17 4.3248e-17 9.4175e-17 1.0541e-16 2.0358e-17 8.9330e-17 2.7727e-16 5.0081e-17 8.1852e-17 8.1932e-17 1.5868e-16 4.4921e-23 3.8688e-17 1.4479e-16 2.7168e-17 1.6582e-16 7.9395e-17 5.5316e-17 1.5848e-16 1.0547e-16 1.0280e-16 7.9604e-17 4.0148e-17 6.9136e-17 3.8341e-17 2.9334e-16 1.8520e-17 1.3060e-16 8.5626e-18 3.5980e-17 7.9727e-19 1.7220e-16 6.3342e-17 4.7417e-17 5.9735e-17 1.2754e-16 2.8818e-17 6.5591e-18 6.8210e-18 8.4946e-17 3.6627e-16 3.7743e-17 1.6823e-17 2.6178e-17 5.8059e-17 1.6470e-17 3.1030e-16 2.2586e-17 7.8867e-17 1.3524e-16 8.6340e-17 1.0868e-17 9.1366e-18 1.5914e-18 2.9851e-17 2.1960e-17 5.3370e-17 5.7196e-18 8.6106e-18 9.4363e-18 1.8692e-17 1.7450e-17 2.8649e-17 1.4473e-17 2.9558e-17 2.2011e-18 2.9197e-17 2.5449e-17 1.0305e-16 1.1198e-16 7.9589e-17 1.7939e-16 1.1929e-16 2.0474e-16 4.9521e-17 2.8750e-16 1.2417e-16 2.4043e-16 3.0031e-17 7.5107e-17 1.7268e-16 9.5193e-19 1.5803e-17 4.6679e-17 9.7180e-17 2.2944e-15 1.5971e-16 4.4643e-17 4.4262e-17 1.3349e-23 3.3806e-17 1.3767e-16 1.5789e-16 9.4405e-18 2.5291e-17 1.4479e-17 6.8381e-17 4.4341e-17 4.3963e-17 5.7404e-16 2.8421e-17 6.9129e-16 2.9071e-16 1.0666e-16 3.2993e-16 2.6347e-17 8.7879e-16 3.6499e-16 2.9630e-17 1.2530e-16 2.0887e-16 6.2709e-17 3.2359e-17 3.1017e-17 4.7851e-16 1.2999e-16 2.5685e-16 1.2267e-17 2.2656e-16 2.5929e-16 1.0545e-16 8.2742e-17 1.5093e-16 8.5250e-17 1.8269e-16 6.8077e-17 3.0787e-16 7.7090e-17 3.5962e-16 2.4097e-16 4.1935e-17 7.1564e-17 2.6593e-16 4.6383e-16 9.9790e-16 8.1556e-16 9.7655e-17 2.3274e-16 7.9388e-17 1.1186e-16 7.0135e-16 7.6693e-17 2.6032e-16 9.6787e-17 2.7199e-16 7.2930e-17 1.7695e-17 2.7023e-17 1.9021e-16 6.2104e-17 5.2211e-17 3.1632e-16 1.3437e-15 1.5885e-16 7.7993e-17 3.6448e-16 3.4073e-16 8.7332e-16 3.4804e-18 3.6210e-17 2.0655e-16 1.1213e-16 1.5130e-16 4.6393e-23 4.7986e-17 1.9739e-16 2.3106e-17 1.1018e-16 4.7983e-17 2.0691e-16 1.0857e-16 1.4375e-18 8.9280e-18 3.5427e-17 1.7579e-17 4.6238e-17 1.7439e-16 1.1458e-16 1.2578e-18 1.3820e-16 2.0791e-17 7.5182e-17 4.4266e-17 6.6173e-17 6.2304e-17 5.1876e-17 3.3243e-16 2.2543e-16 8.2201e-17 2.1261e-17 5.8998e-17 1.5654e-18 1.1006e-16 1.0883e-17 4.9149e-17 6.7049e-17 4.0345e-17 4.5914e-17 9.3220e-17 7.1205e-17 1.7676e-16 1.3261e-17 3.0375e-17 1.4848e-16 1.2259e-23 2.7194e-16 1.0115e-17 8.1492e-17 4.6628e-17 1.2568e-16 8.5614e-17 1.3338e-17 6.8382e-17 1.0822e-16 1.9802e-17 5.8743e-17 1.1123e-17 1.0444e-17 1.1431e-17 3.1197e-17 1.7945e-17 7.2292e-17 8.8476e-18 1.5051e-17 7.6547e-17 1.1005e-18 1.6502e-17 5.3080e-17 4.8313e-16 5.8283e-16 9.9486e-17 7.4608e-17 8.0875e-18 6.7745e-17 3.3426e-16 3.1256e-16 3.0204e-16 1.2021e-16 7.8081e-18 1.0635e-16 1.4474e-16 1.0471e-16 7.4499e-17 1.1740e-16 4.0427e-16 2.2340e-15 3.5414e-16 1.8136e-17 1.2182e-17 1.0679e-17 4.4711e-17 2.0322e-17 1.2246e-16 8.5823e-19 5.9013e-17 2.7923e-17 2.4662e-17 9.8269e-17 4.0407e-23 2.6327e-16 3.4105e-17 2.2992e-16 1.4617e-17 7.2253e-16 2.3310e-17 6.2104e-17 8.4348e-17 3.3273e-16 1.5450e-16 2.3466e-16 2.9839e-16 3.1900e-16 4.6774e-16 2.1092e-16 1.0109e-17 3.2136e-16 4.6003e-17 1.8400e-16 8.8845e-18 4.9081e-16 1.6296e-16 3.3097e-16 1.6171e-16 6.7632e-16 5.2981e-16 9.2832e-17 7.3620e-17 5.6065e-16 2.2476e-17 6.9959e-17 4.6128e-16 7.6037e-16 2.8492e-16 4.0333e-17 2.8971e-16 1.3002e-16 1.3428e-16 4.0407e-22 6.3511e-16 1.8178e-16 2.7544e-16 8.3883e-17 3.7678e-16 1.5056e-17 2.1341e-16 4.0517e-17 6.3112e-16 7.5278e-17 5.4566e-16 1.1292e-17 1.8647e-18 5.2598e-16 1.7208e-16 5.6402e-16 2.6057e-16 2.3656e-16 5.0055e-16 9.6707e-16 3.6197e-16 1.2242e-16 3.3814e-16 1.3455e-16 7.4105e-17 3.5481e-16 4.7696e-16 1.1815e-16 1.0398e-16 7.7268e-17 1.8487e-16 2.9718e-16 1.5450e-16 2.8750e-18 5.9520e-18 1.5403e-18 6.0728e-17 8.9288e-17 8.2230e-17 1.1590e-16 3.7985e-16 1.1759e-16 1.6171e-17 7.7393e-18 3.0883e-17 2.3111e-16 6.9972e-17 3.3955e-17 1.7038e-16 1.4313e-17 1.3871e-16 1.3247e-16 7.0957e-17 3.2874e-17 9.5014e-18 1.0727e-16 7.4102e-17 1.5305e-17 1.2536e-16 1.6762e-17 3.5848e-16 6.8706e-18 2.2054e-16 1.3414e-16 1.8692e-18 1.1801e-16 5.6882e-17 2.8385e-17 1.5205e-16 2.1670e-17 1.5907e-16 3.9724e-17 1.1500e-16 3.2933e-18 9.2508e-17 5.9546e-17 4.4333e-19 2.3717e-17 4.1797e-17 3.9042e-17 4.6616e-17 6.0180e-24 9.9693e-19 1.9319e-17 1.8538e-17 5.0943e-17 3.5621e-17 2.2011e-18 4.4430e-17 5.0171e-17 2.2065e-16 3.9776e-16 1.1086e-16 4.6091e-17 2.1971e-16 8.6563e-18 2.3192e-16 2.5606e-16 1.9709e-18 1.2401e-16 2.8289e-16 2.8514e-16 2.6494e-16 1.7135e-17 3.8378e-17 1.5701e-16 2.5461e-16 1.2277e-15 9.7215e-16 1.2556e-17 4.4668e-18 5.9804e-18 4.2530e-17 5.6377e-17 2.7650e-16 2.6820e-23 1.0304e-17 2.0684e-17 2.2420e-17 2.0373e-17 7.2409e-17 2.2256e-16 4.4763e-16 3.2128e-16 7.7955e-17 6.0211e-17 3.4786e-16 3.1805e-16 7.2970e-16 7.7233e-16 7.4075e-17 1.3442e-16 2.0887e-16 8.2067e-16 1.2944e-16 8.3747e-17 3.8416e-16 6.1384e-17 3.8336e-18 1.3084e-16 2.6654e-16 6.9454e-17 3.4989e-16 3.6199e-17 8.3548e-16 7.3883e-17 2.4359e-16 2.4755e-17 4.5511e-16 6.3073e-16 5.2445e-17 9.3279e-17 2.9354e-16 8.9455e-18 2.1844e-16 3.0250e-17 1.2125e-15 1.1820e-16 1.2207e-16 6.0772e-16 1.3231e-16 6.5721e-16 1.0023e-15 3.5950e-17 4.5670e-17 4.3016e-18 1.2553e-17 2.2082e-16 5.1315e-16 2.2197e-16 8.6460e-17 1.7690e-16 1.1561e-16 9.1955e-18 5.8581e-17 1.3743e-16 3.7401e-16 6.7813e-16 4.7245e-16 1.5695e-15 1.2182e-17 2.9313e-17 2.0322e-16 1.3295e-16 1.7754e-16 3.0434e-16 3.0682e-16 2.0171e-17 2.3106e-17 1.8745e-16 9.8788e-18 1.8053e-17 7.7946e-17 1.4375e-18 1.0416e-17 1.6635e-16 4.9941e-23 2.5511e-17 1.4178e-17 2.1073e-17 6.2889e-17 2.0851e-16 1.7095e-16 4.5220e-16 8.2356e-18 2.4691e-17 2.3963e-16 6.6024e-17 1.3149e-16 1.1629e-16 1.1988e-16 1.6354e-17 1.1879e-16 2.0820e-16 3.5630e-17 2.1454e-16 1.7316e-16 2.9152e-18 4.9711e-17 1.2900e-16 1.3339e-16 1.6614e-16 7.6469e-17 3.5703e-18 3.0375e-17 1.0986e-16 9.4149e-18 8.1300e-17 1.2595e-16 3.4489e-17 6.2348e-17 4.6236e-17 8.4889e-17 9.9129e-17 3.0122e-17 2.1484e-17 3.5466e-18 5.4022e-17 2.6854e-17 2.8473e-17 2.0784e-18 1.5406e-18 2.2431e-18 5.2973e-18 2.0644e-17 6.3679e-18 9.0947e-18 8.8043e-18 3.8082e-18 2.2722e-23 1.0002e-16 8.9805e-17 5.3296e-17 1.2070e-16 1.2906e-16 1.1216e-16 3.7553e-17 1.3669e-17 9.8052e-17 8.0685e-17 8.7691e-17 2.3064e-16 2.2008e-17 9.7097e-17 2.0318e-17 1.9803e-17 1.8464e-16 5.6353e-16 2.6387e-16 1.9531e-17 1.0152e-17 1.1961e-17 3.1080e-17 3.3433e-17 1.2092e-16 6.6942e-17 1.7797e-17 1.1376e-17 5.7171e-17 1.2344e-16 1.4223e-16 6.2425e-17 4.4194e-16 4.0960e-16 9.2572e-17 1.0666e-16 2.4207e-16 3.1993e-17 6.2770e-17 1.5124e-16 1.1852e-16 1.1163e-16 4.4759e-16 1.3632e-16 6.4718e-17 4.3424e-17 5.5265e-16 5.6690e-16 1.1501e-17 6.9511e-17 2.6654e-17 1.2039e-16 4.7930e-18 4.6025e-16 1.2397e-16 1.5345e-16 4.7501e-16 4.0227e-16 8.0313e-17 4.2049e-16 5.2445e-17 1.5547e-17 1.3419e-16 2.6836e-17 2.4693e-16 3.2267e-16 3.3263e-16 6.0280e-16 3.8146e-22 4.9135e-16 2.1170e-16 4.1949e-17 2.0658e-16 3.8346e-17 2.3292e-16 3.2047e-16 4.6238e-16 7.7995e-16 4.1091e-16 3.0883e-17 2.3440e-16 8.3934e-16 3.2445e-16 1.8391e-17 1.5194e-16 4.1052e-17 4.8569e-16 4.3807e-16 3.1614e-17 1.3890e-16 3.1324e-17 4.1210e-16 1.5658e-16 9.6107e-18 3.0877e-17 4.7507e-16 1.0179e-16 4.3224e-17 8.3759e-17 3.5629e-16 1.0161e-16 1.7914e-16 4.3496e-23 7.1874e-18 5.9520e-18 9.7039e-17 7.3513e-17 1.3553e-16 1.0775e-16 3.1609e-17 1.1320e-17 1.8669e-16 4.7357e-17 3.7591e-17 4.5296e-17 1.4716e-16 1.0544e-16 3.1126e-17 6.4819e-18 9.8400e-17 1.7468e-16 1.9625e-17 6.2984e-17 2.5047e-17 1.9003e-17 4.5085e-17 3.5539e-17 1.4576e-17 4.8270e-17 4.3728e-18 1.5764e-16 3.1230e-18 8.8659e-18 2.6522e-17 5.3741e-17 1.4162e-17 1.3534e-16 1.2616e-17 6.1995e-18 1.3124e-17 2.7977e-17 8.4658e-18 7.2555e-19 2.3053e-18 5.7104e-19 1.3554e-16 1.7201e-16 3.4258e-17 5.1685e-18 6.4656e-17 8.0167e-18 6.1625e-18 1.3459e-17 2.8044e-18 3.6654e-17 1.6788e-17 4.0168e-17 3.4392e-23 3.5544e-17 4.5808e-17 1.2972e-16 1.0435e-16 7.1417e-17 1.6580e-17 1.4928e-16 1.6560e-17 1.4980e-16 3.0937e-16 1.0347e-17 2.8971e-16 9.6701e-17 8.1754e-17 5.7559e-17 7.6154e-18 1.0159e-17 1.4145e-18 3.6540e-16 6.9099e-16 5.0691e-16 2.2322e-17 5.6850e-18 6.4076e-18 6.5431e-18 2.4911e-17 2.6110e-16 1.2873e-17 1.4987e-17 4.0334e-17 3.3630e-17 5.9920e-18 6.4651e-18 2.4699e-16 6.9631e-17 1.0354e-16 5.0752e-23 2.5288e-16 1.9186e-16 6.9632e-17 7.5717e-16 1.2099e-17 4.8255e-16 1.3214e-16 7.0868e-16 3.6262e-16 1.3826e-16 2.9466e-16 7.7506e-17 1.6971e-16 1.8785e-16 1.5129e-16 9.7730e-17 1.5280e-16 1.5337e-16 5.6885e-17 1.6844e-22 6.8200e-17 4.3847e-16 2.2898e-16 2.7440e-16 3.8545e-16 1.5733e-16 7.7733e-18 2.6209e-22 2.7731e-16 2.4693e-16 2.5208e-16 1.0730e-16 3.3095e-16 2.0752e-16 6.7237e-16 6.6157e-17 4.4746e-16 2.0403e-17 3.4032e-16 1.8725e-16 1.0754e-16 3.9543e-16 6.0775e-18 1.1207e-16 3.2814e-16 3.5161e-16 7.5277e-17 1.6596e-16 8.5886e-16 9.4095e-16 3.5697e-18 2.3930e-16 1.6471e-16 3.8639e-17 1.5973e-16 1.0441e-17 2.5519e-16 1.1160e-16 2.3706e-16 1.1579e-16 8.2691e-16 1.4396e-16 6.0946e-16 4.6212e-16 1.8601e-17 1.4818e-16 8.8876e-17 1.9486e-17 1.4375e-18 1.3392e-17 2.7725e-17 5.4335e-17 1.8814e-16 9.4990e-17 1.6331e-16 1.1320e-17 5.3340e-17 1.1551e-18 2.3771e-16 7.2061e-18 1.9753e-16 4.6009e-17 7.5456e-18 1.2779e-16 1.9680e-17 7.0213e-17 5.3152e-17 7.0160e-17 3.2091e-17 1.3144e-16 2.0211e-17 8.9225e-17 1.0713e-16 3.3861e-17 1.0130e-16 1.3642e-17 3.9975e-17 3.2139e-17 5.7635e-17 4.6264e-17 2.0599e-17 8.6696e-17 5.1163e-17 1.5531e-16 3.5710e-17 5.2756e-17 1.7757e-16 1.8066e-16 1.1971e-16 1.7559e-17 4.1112e-18 5.2461e-17 1.9215e-17 3.6067e-17 2.4743e-17 2.5832e-17 6.9328e-18 8.4240e-17 2.5552e-17 8.4262e-18 2.8366e-17 3.1831e-17 8.8043e-18 2.5388e-18 4.8717e-17 1.7094e-16 1.8179e-18 4.9032e-17 6.1676e-17 2.1230e-17 1.0162e-16 2.6659e-16 1.8407e-16 2.1877e-16 1.5271e-16 1.3995e-16 9.5047e-17 1.6506e-16 9.0433e-17 2.2575e-17 1.1316e-17 1.8658e-16 9.0902e-16 3.2636e-16 9.0681e-17 1.8273e-17 5.9804e-18 2.2356e-17 6.6866e-17 8.6262e-17 4.8919e-17 4.6835e-18 6.8257e-17 1.7936e-17 3.2357e-17 4.9135e-17 4.7498e-17 5.2578e-16 5.6491e-16 1.8190e-16 7.3801e-16 5.5586e-17 5.2694e-17 2.6285e-16 1.6939e-16 1.2064e-16 1.2075e-16 2.9093e-16 1.6632e-16 3.5301e-17 2.4814e-16 2.2578e-16 2.5998e-16 4.9836e-17 1.5947e-16 3.5538e-16 2.7318e-16 4.3137e-17 1.1894e-16 1.0241e-16 2.3870e-16 1.8878e-16 9.2832e-17 6.6927e-18 3.5041e-17 5.3194e-16 2.3320e-17 2.3483e-16 4.4727e-17 1.5196e-16 1.0083e-17 7.5111e-17 6.2644e-16 1.5869e-16 2.1981e-16 4.1348e-22 3.3560e-16 2.2596e-15 2.3966e-18 1.0961e-16 1.2690e-16 4.6656e-16 1.3978e-16 4.1091e-16 1.1195e-16 4.6112e-16 2.9358e-16 1.1747e-16 1.4161e-16 4.2471e-16 3.5697e-17 4.6087e-17 1.5946e-16 2.4588e-17 5.0698e-16 5.3251e-16 3.6037e-16 2.9150e-16 2.8832e-16 3.8596e-17 1.4697e-16 8.8702e-17 1.6425e-16 1.5885e-17 1.4309e-17 1.2701e-17 2.4996e-17 1.0996e-16 7.1874e-18 1.4880e-18 1.8484e-17 9.1092e-17 5.8994e-17 5.6711e-18 5.0048e-17 9.5591e-17 7.2737e-18 7.0459e-17 1.8795e-16 7.5150e-17 2.3506e-16 5.7512e-18 2.9239e-17 2.2409e-16 1.5923e-16 1.1645e-16 7.9319e-17 5.8201e-17 1.8785e-17 2.7000e-16 6.8405e-17 8.9225e-17 9.4014e-17 2.5936e-17 3.3524e-17 7.2757e-17 7.2454e-17 6.7603e-17 1.5301e-18 1.2571e-16 1.8453e-17 1.4083e-16 1.6365e-16 1.1746e-17 1.5017e-16 1.2256e-17 5.7307e-17 1.1609e-16 5.5492e-17 6.4242e-18 3.1431e-17 2.2166e-17 3.8979e-17 9.3257e-18 9.2010e-18 9.6053e-17 9.6288e-19 9.2216e-18 2.0878e-17 1.3482e-17 2.3156e-18 1.8947e-17 2.6413e-17 7.6165e-18 2.6176e-17 2.8006e-16 8.2606e-16 1.5278e-17 5.1065e-17 2.0219e-17 7.9788e-17 3.2684e-16 4.6473e-17 2.9219e-16 2.3935e-16 1.9220e-16 1.7880e-16 7.7705e-16 1.5231e-17 2.4833e-17 1.1599e-16 3.0514e-16 8.7212e-16 2.2915e-16 1.2556e-17 1.7461e-17 1.1961e-17 1.1996e-17 4.7199e-17 2.6495e-16 2.4030e-17 4.7772e-17 2.9992e-17 6.5018e-17 2.7563e-17 1.8490e-16 1.6828e-16 8.9525e-17 1.4161e-16 3.0533e-16 1.0322e-16 8.7862e-17 9.9742e-17 1.1554e-15 1.1091e-16 2.5397e-16 4.7844e-17 2.4369e-16 5.4802e-16 5.8835e-18 4.2804e-16 3.0665e-16 1.2349e-15 7.6672e-18 4.9067e-17 7.4186e-16 8.3345e-17 3.8344e-16 4.1371e-17 6.0909e-16 2.5007e-16 3.6539e-17 2.2280e-16 1.3385e-16 2.1024e-17 2.9968e-17 7.7733e-18 5.0322e-17 7.1564e-17 1.8995e-17 7.0583e-17 1.8241e-16 1.7729e-16 7.2021e-16 1.2930e-16 4.3664e-16 1.2585e-16 1.0712e-15 1.1025e-16 2.1693e-16 7.3128e-17 3.2638e-16 2.3095e-16 9.6339e-17 1.6986e-16 2.3632e-16 3.7639e-17 2.7224e-16 5.3334e-17 1.2815e-17 1.4457e-16 1.5421e-16 7.7101e-17 1.8090e-16 4.3232e-16 2.5233e-16 5.1728e-17 2.3653e-16 3.7642e-16 7.7192e-18 9.7983e-17 1.8322e-16 1.7578e-16 1.3142e-16 1.2878e-17 1.4395e-16 2.7635e-16 2.7838e-18 4.4921e-23 1.3392e-17 1.9100e-16 1.2785e-17 2.8700e-17 7.3724e-17 2.2127e-16 1.6100e-16 7.3949e-17 8.4319e-17 1.5589e-16 4.2207e-17 1.0469e-16 4.7926e-18 6.6967e-17 1.1112e-17 2.4153e-17 1.2330e-16 5.3152e-17 2.6310e-17 1.7063e-16 8.7888e-17 4.9749e-17 7.5614e-17 9.1828e-17 7.2045e-18 2.9152e-17 1.3642e-17 8.0574e-17 3.7680e-17 6.7325e-17 1.7758e-17 1.6308e-17 1.9301e-16 8.1300e-17 6.2648e-17 2.1365e-17 6.3946e-17 5.1012e-17 1.0702e-16 6.9654e-17 1.3662e-16 7.2410e-17 4.4333e-18 4.0626e-18 6.6291e-18 1.6164e-17 1.2470e-17 5.7773e-19 1.7945e-17 2.1812e-18 2.1908e-17 5.7890e-18 3.8652e-17 2.2011e-18 5.0777e-18 2.9085e-18 3.0976e-16 1.9234e-16 2.2811e-16 4.6423e-18 3.3159e-16 1.7689e-17 1.1472e-16 2.6745e-16 1.4782e-18 1.7057e-16 2.4446e-16 2.2599e-17 2.6748e-16 3.4269e-17 2.3704e-17 1.8389e-17 1.3605e-16 1.1036e-15 9.7215e-17 2.7902e-18 3.4922e-17 1.1961e-17 7.0884e-18 6.5555e-18 4.6982e-17 8.5823e-18 1.5924e-17 9.3078e-18 3.0267e-17 1.1984e-18 4.7842e-17 4.8855e-17 1.1652e-16 4.9487e-16 5.0996e-16 1.9267e-16 1.5779e-16 2.8794e-16 5.0805e-16 4.2145e-16 7.6191e-17 4.7160e-16 7.9571e-17 5.4530e-18 8.8252e-18 3.7221e-16 6.4026e-17 1.0832e-17 2.9519e-16 5.8471e-16 3.0207e-16 7.4084e-17 1.4858e-16 1.2411e-16 1.5093e-16 3.1827e-16 1.5103e-15 1.2378e-17 1.1378e-16 7.0082e-18 2.5473e-16 2.0211e-16 1.6774e-17 4.4727e-17 7.5979e-17 9.8817e-16 4.7213e-16 3.1913e-16 8.5448e-17 3.2325e-16 5.1602e-16 1.3983e-16 2.5504e-17 7.8370e-16 2.7402e-17 2.9251e-16 4.3099e-16 2.5323e-16 8.2773e-16 9.4580e-17 9.6067e-17 2.4465e-17 5.5940e-18 9.7472e-17 3.1121e-16 4.4621e-17 3.3679e-17 1.9450e-16 2.1076e-17 1.9098e-17 1.7402e-17 1.0173e-16 2.6652e-17 1.6018e-17 5.8666e-17 3.8599e-17 1.7886e-16 4.6826e-16 1.1553e-16 2.4325e-17 9.5965e-17 7.9155e-17 4.5932e-17 7.1874e-18 4.6500e-23 4.1588e-17 4.7943e-18 8.2910e-17 4.5368e-17 6.5853e-18 4.4022e-17 1.2365e-16 1.5824e-16 3.5380e-17 5.5384e-16 5.3333e-17 6.7097e-18 1.1413e-16 8.0561e-17 1.6191e-16 9.3332e-17 2.4532e-17 1.4909e-16 2.4460e-23 2.3595e-16 4.5862e-17 1.5879e-17 1.0130e-16 1.1383e-16 5.8303e-18 2.2737e-18 1.3117e-17 2.3273e-17 2.4482e-17 3.8787e-17 2.1371e-16 3.0598e-17 7.2890e-17 7.7005e-17 3.9067e-17 5.3022e-17 5.9695e-17 1.9408e-17 6.5867e-19 1.4561e-17 2.2320e-16 3.6501e-17 4.2273e-17 1.1461e-17 4.0659e-17 8.6106e-18 2.2724e-17 1.2960e-17 1.7761e-17 6.3197e-18 2.7787e-17 4.4715e-17 5.5027e-18 5.0777e-18 7.2712e-18 2.3217e-16 4.4575e-16 2.7714e-17 6.4660e-17 6.3352e-17 5.4949e-17 1.6920e-17 4.2373e-17 3.1731e-16 2.6317e-16 1.2613e-17 1.8611e-16 5.0195e-16 1.9324e-16 9.0301e-18 5.9409e-17 3.4985e-17 9.4592e-16 2.1700e-22 8.9286e-17 9.7458e-18 1.5805e-17 5.9979e-18 4.2611e-17 2.2952e-16 1.9739e-17 2.9975e-17 5.1710e-18 4.4840e-18 2.3968e-17 9.0511e-18 3.1077e-16 4.2631e-18 3.7001e-16 4.6286e-16 2.7697e-16 5.3614e-16 3.7639e-18 4.8059e-16 3.5088e-16 4.2329e-18 5.9235e-17 5.6943e-16 1.2869e-15 4.1184e-17 1.0856e-16 2.2915e-16 3.0331e-16 5.3670e-17 5.0702e-16 4.4423e-18 2.6855e-16 9.1066e-17 1.6031e-16 1.6710e-16 1.5345e-16 4.2629e-17 8.9118e-16 2.7440e-16 1.0512e-16 1.1238e-16 1.0105e-16 2.6209e-22 2.6836e-17 2.1844e-16 3.2267e-16 1.0730e-17 1.7729e-16 6.9579e-16 3.8791e-17 3.0432e-16 2.7966e-17 7.9317e-16 2.2289e-16 1.0276e-16 1.5056e-17 6.4858e-17 2.4513e-16 7.6678e-17 2.0653e-16 3.6313e-16 1.6561e-16 1.0815e-16 1.2874e-17 1.6842e-16 8.2104e-17 1.0990e-16 2.1027e-17 9.8354e-17 4.6878e-17 1.6532e-16 3.2761e-16 8.1621e-17 5.8786e-16 3.8596e-17 1.6330e-16 3.7807e-16 3.0833e-16 3.0327e-17 2.5184e-16 2.6814e-17 7.2212e-17 1.6703e-17 4.4921e-23 5.9520e-18 1.5403e-17 8.3101e-17 1.1958e-16 3.2609e-17 5.0048e-17 8.0498e-17 1.0304e-16 5.6598e-17 1.7690e-17 1.3589e-16 4.1481e-17 7.6682e-17 1.6883e-16 1.3890e-16 1.8786e-17 1.1988e-17 7.3595e-18 4.4647e-17 8.9230e-17 2.6525e-16 1.0883e-17 6.1248e-17 2.9880e-17 5.0432e-17 1.3993e-16 8.9431e-17 7.4952e-18 4.2113e-17 2.5655e-16 3.0375e-17 4.7206e-18 3.7660e-17 1.2055e-16 4.4049e-17 2.1365e-18 1.0658e-18 6.9463e-17 1.4402e-16 5.3187e-17 2.1985e-17 8.3550e-18 6.2066e-18 1.9984e-17 7.3033e-18 4.4513e-17 3.5630e-18 2.4265e-17 1.6948e-17 7.4785e-18 4.2131e-19 1.0999e-17 2.8800e-17 1.1005e-18 3.8082e-17 1.5269e-17 2.1641e-16 5.7446e-17 1.5989e-17 2.3543e-16 1.6242e-16 1.0199e-16 1.3123e-16 1.1983e-16 3.8925e-17 4.7111e-17 1.7538e-16 1.8079e-16 1.5473e-15 5.4260e-17 2.9348e-17 2.4047e-17 1.1273e-16 3.0088e-15 2.2915e-16 3.6273e-17 2.2740e-17 9.3978e-18 2.0175e-17 8.8499e-17 7.4710e-17 1.8881e-17 3.3722e-17 8.1702e-17 6.7260e-18 3.8349e-17 4.7842e-17 6.1883e-16 6.9631e-17 2.0556e-16 3.8978e-17 6.3307e-16 2.9945e-16 2.6912e-16 4.6097e-16 4.4364e-17 9.5239e-17 2.2555e-16 1.2433e-17 2.9446e-16 5.8835e-18 5.9863e-16 1.9208e-16 4.5857e-16 5.3670e-17 4.0889e-17 2.3100e-16 9.7235e-17 5.7516e-17 1.0343e-16 8.0853e-17 2.2733e-16 2.4359e-17 5.5699e-17 2.0747e-16 7.0082e-18 1.1987e-16 2.3320e-17 2.3483e-16 2.6836e-17 2.9442e-16 5.0417e-17 5.9016e-16 6.1462e-16 1.9531e-16 6.4651e-17 7.9388e-17 2.6568e-16 9.0283e-16 4.2660e-16 4.1788e-16 2.9896e-16 8.7873e-17 6.7663e-16 4.1878e-16 1.1002e-16 9.2224e-17 2.8794e-16 3.7294e-17 2.3908e-17 2.0320e-16 5.3546e-18 1.1167e-16 3.5221e-16 7.3765e-17 1.1112e-16 3.4282e-16 5.0004e-17 4.6640e-17 6.4071e-17 1.6982e-17 1.8409e-16 1.5414e-16 8.6448e-18 1.0687e-16 1.6455e-16 8.7497e-17 2.7496e-16 2.2549e-16 7.1874e-18 2.9760e-18 1.0782e-17 5.1139e-17 1.7698e-16 1.3894e-16 2.2390e-17 4.7796e-17 6.4251e-17 6.9304e-18 8.8449e-17 8.2356e-18 8.5926e-17 6.7097e-17 8.6774e-17 4.6299e-18 1.6996e-17 1.5413e-17 5.4787e-17 1.2597e-16 3.6788e-17 1.6627e-17 2.0910e-16 3.4026e-17 4.3728e-18 5.3313e-17 1.1588e-16 3.5621e-17 1.3304e-16 5.6520e-17 6.4265e-17 9.1125e-17 1.5020e-17 1.6476e-17 3.5394e-17 8.3204e-17 2.7469e-17 5.3289e-19 7.3805e-18 9.5409e-17 2.6347e-18 6.6811e-17 2.1882e-17 3.3102e-17 1.3945e-16 5.9550e-18 5.2222e-18 3.2067e-17 6.7402e-18 9.4708e-18 6.2321e-19 1.0112e-17 2.9524e-17 4.5473e-17 1.4307e-17 1.9041e-17 5.8169e-17 1.6124e-16 2.4360e-16 2.1318e-17 3.7470e-17 3.2350e-17 2.3297e-16 3.1404e-16 1.2985e-16 1.6950e-16 2.9241e-17 7.0874e-17 5.9820e-18 1.2231e-15 4.3789e-17 3.6121e-17 8.6285e-17 2.5655e-16 1.3920e-15 2.4998e-16 2.7902e-17 3.5734e-17 6.8348e-18 3.6532e-17 3.5400e-17 1.3864e-16 1.2873e-16 2.9272e-23 3.1026e-18 1.3452e-17 2.2770e-17 2.4050e-16 2.4020e-16 5.8262e-17 2.2992e-16 1.7378e-16 6.5888e-16 3.1559e-16 8.0923e-17 8.1994e-16 1.8754e-16 1.1005e-16 2.9162e-16 5.3710e-16 4.8532e-16 1.0590e-16 1.6439e-16 6.2341e-16 1.5526e-16 5.7504e-17 8.1778e-17 2.2211e-17 7.6862e-16 2.1089e-16 2.2237e-16 1.5632e-16 1.1367e-17 3.0449e-17 1.9185e-16 3.3464e-17 2.3828e-16 4.6451e-16 6.9959e-17 1.5935e-16 1.7891e-16 4.0839e-16 3.0250e-17 4.2920e-17 2.3639e-16 7.3241e-17 6.7237e-16 3.7048e-16 3.4958e-16 6.9880e-16 3.2355e-16 3.4253e-17 4.3016e-17 1.5901e-16 3.0388e-16 3.0868e-16 3.8604e-18 1.1336e-16 4.8177e-16 7.4587e-17 9.1955e-17 1.0618e-16 5.3546e-17 3.7933e-16 6.8339e-17 8.0791e-17 6.3893e-16 6.7695e-16 3.1382e-16 1.5325e-16 4.8054e-18 4.7859e-17 9.9467e-17 3.1991e-17 5.4174e-16 6.6430e-17 9.5869e-17 3.5281e-17 3.3467e-16 2.5611e-16 4.3125e-18 5.9520e-18 1.2784e-16 1.8698e-16 1.2277e-16 6.2382e-17 5.5316e-17 4.7796e-17 1.6972e-17 5.5443e-17 3.9581e-16 5.6620e-17 1.6000e-16 7.8599e-17 2.9475e-23 5.2781e-17 1.2524e-17 8.1344e-17 1.5291e-16 6.2984e-17 8.1403e-17 1.6627e-17 2.4097e-17 5.4442e-17 5.1016e-17 2.5216e-17 9.6929e-17 1.2126e-17 8.9318e-17 3.3247e-17 4.5904e-18 1.3926e-16 1.0557e-16 4.5113e-17 4.2052e-18 1.0865e-16 6.1043e-18 1.2150e-16 1.0854e-18 1.2643e-16 1.2202e-16 4.0972e-17 4.8804e-17 1.3152e-17 1.7678e-17 1.3483e-18 4.9735e-18 1.1877e-18 1.3095e-17 1.4206e-17 3.1161e-18 3.7076e-17 1.3894e-17 2.0463e-17 1.1005e-18 8.8859e-18 4.2173e-17 3.3886e-16 1.1344e-16 2.4871e-17 3.1302e-16 7.6157e-17 6.3229e-17 6.5202e-17 1.0662e-16 1.8773e-16 2.4476e-16 6.1865e-17 1.1745e-15 1.5025e-15 3.6173e-17 2.1447e-17 4.2435e-18 5.8308e-18 9.4927e-16 6.9439e-16 4.0458e-17 1.2690e-23 1.4951e-17 3.2716e-18 4.3922e-17 1.4480e-16 4.7203e-17 8.4304e-18 9.3078e-18 5.6050e-18 2.1811e-16 6.7237e-17 6.2833e-16 3.2684e-16 1.8424e-16 2.4361e-17 1.9956e-16 8.2483e-17 1.8819e-18 7.9247e-16 2.9441e-16 2.4127e-16 1.1391e-17 2.5115e-16 1.9085e-17 1.6474e-16 1.7990e-16 4.8862e-16 5.6690e-16 6.5171e-17 6.5422e-17 2.6209e-16 4.6302e-18 6.7101e-17 1.1894e-16 2.6951e-17 3.0690e-16 8.5258e-17 8.6643e-16 1.8740e-16 1.4717e-16 1.9480e-16 2.4874e-16 1.7613e-16 4.9200e-16 1.4246e-16 1.0083e-16 9.2279e-16 1.6548e-16 1.2207e-16 7.7581e-17 5.4249e-16 1.3983e-16 8.1357e-16 1.3901e-16 3.1284e-16 1.9357e-16 6.7787e-16 4.9228e-16 7.8644e-18 9.6896e-16 1.1528e-16 3.3875e-17 1.1002e-16 6.6207e-17 7.3409e-16 3.9267e-16 5.5393e-23 1.9275e-16 5.3217e-16 3.7329e-16 1.7402e-17 2.4140e-17 1.1660e-16 2.8672e-16 7.5649e-17 2.0933e-16 5.7002e-16 5.3310e-17 7.3650e-17 2.8618e-17 4.2338e-17 1.0971e-16 5.4284e-17 2.8750e-18 1.9344e-17 5.5451e-17 1.1187e-17 1.4031e-16 3.6862e-17 1.4883e-16 2.2263e-16 2.5458e-17 4.6202e-17 3.4274e-17 1.7295e-16 5.5309e-17 7.6682e-18 9.5263e-17 2.5002e-17 8.9455e-17 2.6544e-17 1.3656e-16 2.8702e-17 6.2617e-17 1.3619e-16 1.0028e-16 4.1588e-17 2.9152e-18 1.2248e-16 7.4337e-17 3.1073e-17 5.5590e-17 1.5127e-16 2.0402e-18 7.0096e-18 2.6178e-17 4.3152e-18 7.0437e-17 1.3378e-17 1.8374e-16 3.3572e-17 8.1185e-17 8.3438e-18 1.8113e-17 7.4520e-17 1.4588e-17 2.3644e-18 4.2493e-17 7.1797e-17 9.8227e-18 1.0095e-17 5.4499e-17 7.2277e-18 2.4928e-17 2.2751e-17 1.2736e-17 6.2905e-17 4.1820e-17 5.0777e-18 1.8614e-16 2.1823e-16 2.2651e-16 7.9589e-17 1.6348e-16 7.2114e-17 1.1291e-17 2.8020e-16 8.5657e-17 5.4200e-18 2.9241e-17 5.9462e-17 3.5094e-16 9.7850e-16 2.8558e-17 4.1764e-17 1.9803e-17 2.4878e-16 1.7442e-15 1.2291e-15 2.2322e-17 9.3397e-18 3.0756e-17 3.8168e-18 7.7355e-17 1.2246e-16 8.1532e-17 1.8734e-18 8.2736e-18 1.3452e-17 1.3182e-17 1.2801e-16 6.5140e-17 4.1210e-17 2.8778e-16 1.7865e-16 3.6126e-17 5.7379e-17 8.4687e-17 4.7862e-16 4.4364e-16 1.2699e-17 5.2400e-17 5.1472e-16 7.6342e-16 5.1480e-16 2.1712e-16 1.6175e-16 2.3109e-16 3.2585e-16 1.8809e-16 6.1747e-16 1.5743e-16 1.4858e-16 2.4823e-16 3.2880e-16 1.5913e-16 3.8975e-16 1.8566e-16 3.0117e-16 9.8114e-17 3.7461e-17 3.9644e-16 1.6774e-17 1.7891e-17 1.8045e-16 3.0250e-17 3.5409e-16 1.7729e-16 5.7372e-16 6.4651e-16 4.1017e-16 3.7754e-16 1.3951e-15 1.9892e-16 1.0733e-16 1.9357e-17 2.4479e-16 8.5085e-17 2.9491e-16 7.7208e-17 3.8427e-16 1.1668e-16 3.3751e-16 2.5196e-16 3.1121e-16 1.7313e-16 3.4211e-16 1.4369e-16 3.2492e-16 1.2501e-16 5.5687e-17 7.9316e-17 1.3326e-17 3.2036e-18 2.6245e-17 3.4739e-16 5.6711e-17 8.9330e-17 3.7547e-17 3.2338e-16 3.9515e-17 4.3396e-23 1.6842e-16 4.4921e-23 5.9520e-18 1.8484e-17 1.4383e-17 3.8585e-16 5.8128e-17 8.4292e-17 1.6351e-17 1.0911e-17 1.6517e-16 1.4373e-17 5.4561e-17 1.6790e-17 2.1375e-16 1.4242e-16 1.7316e-16 3.9360e-17 8.3057e-17 5.0699e-17 1.5945e-17 1.1897e-16 1.1085e-17 5.5190e-17 5.2930e-18 5.5388e-17 6.4120e-17 2.5508e-17 9.7010e-17 5.6214e-18 7.2036e-18 5.9675e-17 4.8600e-17 8.1537e-18 1.7261e-17 1.6365e-16 4.2092e-17 1.2819e-17 9.3788e-17 2.0188e-17 5.9132e-17 9.2048e-17 1.6846e-17 2.8646e-17 1.8915e-17 1.4494e-17 9.4381e-18 4.9238e-17 1.4104e-17 7.8956e-18 1.2462e-17 2.1812e-18 2.1908e-17 5.7890e-19 3.7894e-18 3.3016e-18 2.4119e-17 1.8178e-17 7.5773e-17 1.0544e-16 1.8121e-17 1.5087e-16 8.8626e-17 6.5863e-17 2.7236e-16 1.0115e-16 1.1628e-16 1.5595e-16 1.1772e-16 2.2266e-16 1.0251e-15 3.2366e-17 1.0159e-17 5.2337e-17 2.1379e-17 2.6533e-15 4.1663e-17 2.7902e-17 6.4972e-18 1.0679e-17 4.3621e-18 1.6782e-16 3.5968e-16 1.7165e-18 6.5570e-18 6.2052e-18 2.8025e-17 7.1904e-18 1.2413e-16 4.3019e-16 2.2737e-16 4.2635e-16 1.3480e-16 5.7114e-16 7.9255e-16 4.8930e-17 1.3770e-15 7.6023e-16 2.5397e-17 7.0626e-17 5.7689e-16 4.4442e-16 5.5893e-17 3.1017e-18 1.3479e-17 1.8054e-17 1.6868e-16 6.3787e-16 2.5765e-16 1.9447e-16 1.4858e-16 2.4823e-16 6.8455e-16 5.1150e-17 1.2180e-16 2.6612e-16 1.3385e-16 3.5041e-17 7.4921e-18 1.2670e-15 8.3869e-18 2.5942e-16 2.8492e-17 3.1510e-22 1.9314e-16 1.1110e-15 5.4931e-16 3.8791e-17 1.3231e-17 6.9916e-17 2.1423e-16 3.7867e-16 4.6127e-16 1.9357e-16 6.9043e-16 3.1400e-16 4.3451e-16 3.2234e-16 3.3816e-16 3.0299e-16 3.3564e-17 3.4943e-17 9.7390e-16 5.5777e-23 1.8789e-16 1.5595e-16 2.2657e-16 1.2674e-16 3.3064e-16 3.5175e-16 7.6624e-17 1.9221e-17 7.8736e-17 3.0137e-16 2.0649e-16 3.3138e-17 7.8705e-16 1.8601e-17 4.5160e-17 2.4996e-17 1.5311e-16 4.4921e-23 1.7856e-17 1.5711e-16 6.2326e-17 6.3777e-18 3.5444e-17 8.6926e-17 1.2578e-16 2.5215e-16 8.3164e-17 2.1007e-17 1.4412e-16 3.2296e-16 9.5853e-19 1.8864e-17 1.2593e-16 1.0914e-16 5.8226e-17 1.9625e-17 6.9362e-17 4.3049e-17 7.9970e-17 2.6429e-17 8.5444e-17 5.3931e-17 2.1614e-18 1.4576e-18 1.2884e-17 1.8113e-17 7.1482e-17 4.4884e-17 8.8789e-17 1.0171e-16 1.9614e-17 1.5559e-16 6.6563e-17 6.2874e-17 1.4521e-16 9.7682e-17 4.5709e-17 8.3980e-18 5.7246e-17 6.9227e-17 6.5908e-17 1.7678e-17 2.8988e-17 2.5987e-17 6.9775e-18 2.1376e-17 1.9939e-18 2.1189e-17 2.4436e-17 1.0420e-17 3.7894e-18 9.9048e-18 8.8859e-18 6.5440e-18 1.7882e-16 3.8831e-16 1.2933e-16 1.8005e-16 1.9713e-16 8.5057e-17 2.2697e-17 4.0550e-17 2.9071e-16 5.9566e-18 1.7598e-16 2.4393e-16 1.8994e-15 1.1423e-17 3.6121e-17 2.9705e-17 9.3292e-17 1.0063e-15 4.5135e-16 1.1719e-16 8.1215e-18 3.1184e-17 4.6347e-17 1.1997e-16 4.3901e-17 4.0337e-17 1.4987e-17 5.1710e-17 3.6993e-17 9.5873e-18 2.4567e-17 5.0347e-16 8.3841e-17 8.4203e-16 6.9835e-17 5.7458e-16 5.3793e-18 2.7100e-16 5.1001e-17 3.2264e-16 1.8413e-16 1.7315e-16 1.9644e-16 1.6904e-16 4.8244e-16 1.5509e-17 2.2241e-16 3.0692e-16 8.4339e-17 4.9067e-17 3.3317e-16 1.4470e-22 1.4379e-17 1.2411e-16 2.5334e-16 3.9783e-17 2.6186e-16 3.0325e-16 2.0915e-22 2.2426e-16 8.2413e-17 7.4623e-16 8.3869e-18 2.7955e-22 1.3296e-16 3.0250e-17 3.2190e-17 3.4277e-16 3.6621e-17 1.2930e-16 1.0585e-16 4.3697e-22 9.5384e-16 2.1570e-16 1.2103e-16 4.3447e-16 2.5106e-17 8.6503e-16 1.8481e-16 2.1618e-16 2.4977e-17 2.2395e-16 1.3426e-16 7.9081e-17 5.5469e-16 3.0878e-16 1.9144e-16 1.7698e-16 6.6916e-16 5.1218e-16 1.0963e-16 3.4485e-17 2.0155e-16 7.8488e-17 6.1754e-18 5.3445e-17 2.4284e-16 1.4408e-18 1.3142e-16 3.0764e-16 4.3749e-17 2.2636e-16 1.1970e-16 1.4375e-18 7.4400e-18 9.0878e-17 2.1734e-16 6.5372e-17 9.0737e-17 1.4224e-16 1.2452e-16 6.3039e-17 9.2405e-17 1.5700e-16 3.0883e-17 6.7160e-17 3.4507e-17 3.1126e-17 7.2227e-17 2.1469e-17 2.3975e-17 2.2078e-17 3.6674e-17 2.6612e-17 4.3548e-17 1.0105e-16 3.7580e-16 1.2827e-16 5.3313e-17 1.1369e-16 9.8525e-18 1.2492e-18 8.4226e-17 3.2132e-17 7.4302e-17 2.4762e-16 6.7473e-17 7.3591e-17 1.8272e-17 1.1598e-17 2.8776e-17 5.9478e-17 2.0678e-17 8.6944e-17 6.6811e-17 4.3764e-18 3.8865e-17 4.0516e-17 5.5055e-18 2.7354e-18 2.0784e-18 9.2437e-18 3.7883e-17 2.1812e-17 4.1710e-17 1.0420e-17 1.7431e-17 2.8614e-17 1.2694e-18 9.9615e-17 1.7943e-16 7.5989e-17 1.6238e-16 2.3941e-16 1.3513e-16 3.0109e-18 1.4443e-16 5.3399e-16 8.4749e-17 1.0180e-16 3.5978e-16 1.5420e-16 7.6435e-16 9.1385e-17 2.5962e-17 7.0725e-18 4.8590e-17 8.9896e-16 2.0832e-17 1.6741e-17 5.6850e-18 5.9804e-18 8.1789e-18 5.0477e-17 1.5173e-16 5.2352e-17 4.1215e-17 3.9300e-17 1.3452e-17 3.3555e-17 1.2930e-18 3.3655e-16 4.1068e-16 2.1013e-16 2.3224e-16 6.7780e-16 1.3269e-16 4.3285e-17 5.8847e-16 3.3878e-16 2.9207e-16 2.7111e-16 1.3676e-16 7.0889e-17 1.0002e-16 1.1476e-16 3.2350e-16 5.0551e-17 4.0253e-16 1.2267e-16 4.8421e-16 6.9454e-17 9.9214e-16 1.2411e-16 5.3902e-18 2.3870e-16 7.3078e-17 2.7849e-16 2.8779e-16 2.1725e-16 2.8470e-16 2.4291e-22 7.2966e-16 7.1564e-17 1.8995e-17 3.1258e-16 3.9701e-16 5.0825e-16 3.7841e-16 2.1981e-16 1.7201e-16 5.5932e-17 1.6858e-15 7.1180e-16 2.9686e-17 3.2262e-16 1.0043e-16 3.8491e-16 1.5729e-16 7.4313e-16 3.4008e-16 6.3986e-17 8.2046e-17 9.0116e-17 5.4919e-17 3.6233e-16 3.8288e-16 9.1119e-17 1.5456e-16 7.7435e-16 4.2113e-16 2.5864e-17 3.3148e-16 2.8832e-17 7.4105e-17 1.5291e-16 3.9989e-16 1.2967e-16 2.4550e-17 4.0065e-17 7.6208e-17 9.7208e-18 9.7432e-17 4.4921e-23 3.8688e-17 3.3886e-17 1.1187e-17 8.7693e-17 7.3724e-17 5.2682e-18 2.0502e-16 1.4547e-17 2.6566e-16 1.9348e-16 9.2650e-17 3.7531e-17 8.0516e-17 1.4054e-16 3.3335e-17 1.2613e-16 9.4188e-18 8.4225e-17 6.2187e-17 2.0820e-16 4.8299e-17 8.5506e-18 3.2514e-17 1.8220e-17 2.1686e-16 1.2389e-16 6.0631e-18 4.8719e-17 7.5360e-17 6.1205e-18 2.9908e-17 1.7595e-17 1.1180e-16 1.2090e-16 1.1877e-16 6.2264e-17 5.5953e-17 2.1707e-17 4.0812e-17 1.6467e-19 6.5669e-18 6.0739e-17 1.3152e-17 2.3717e-17 7.5280e-18 1.3180e-17 4.4538e-19 1.1555e-17 1.4206e-17 3.5523e-17 5.4771e-18 1.0420e-17 1.2126e-17 1.4307e-17 2.2850e-17 3.1266e-17 8.7896e-17 4.8720e-17 8.8116e-17 1.3927e-17 4.5492e-17 1.5280e-16 3.1157e-16 5.7408e-17 2.8775e-16 4.4404e-17 8.2286e-17 2.7384e-16 7.2203e-16 4.7596e-17 9.0301e-18 4.2435e-18 1.1662e-17 5.2327e-16 3.2636e-16 1.6741e-17 3.2486e-18 8.5435e-19 5.4526e-19 1.0095e-16 5.3144e-17 8.5823e-17 2.9272e-23 1.1376e-17 3.2509e-17 9.1079e-17 1.1637e-17 5.6726e-16 1.1652e-16 9.9734e-16 1.7053e-16 4.4040e-16 7.3517e-17 4.7048e-17 1.6477e-16 5.3035e-16 7.8308e-17 6.1513e-17 2.5612e-16 2.7265e-18 8.5310e-16 2.8846e-16 1.5164e-16 3.3942e-16 8.0505e-17 2.1262e-16 3.9092e-16 1.4470e-22 3.8344e-17 5.1714e-18 5.8214e-16 5.6833e-18 4.8719e-17 2.5374e-16 5.3542e-16 8.4098e-17 9.7397e-17 7.7733e-18 8.3869e-18 2.5942e-16 5.0336e-16 5.0417e-17 1.9314e-16 1.8911e-16 1.4770e-15 2.1981e-16 2.1170e-16 1.8178e-16 1.1987e-15 9.8502e-16 4.8411e-16 2.6025e-16 2.8872e-16 1.0534e-16 1.6515e-16 8.4929e-17 3.4008e-16 4.9118e-16 4.6617e-17 3.5495e-16 7.8718e-17 1.9277e-16 6.6117e-16 1.6647e-16 6.8497e-17 5.6080e-16 7.4829e-17 6.5522e-17 4.3809e-16 3.2036e-18 1.1733e-16 4.6393e-23 1.4541e-17 8.6448e-18 3.7114e-16 3.8634e-17 2.6390e-16 1.8470e-16 1.2527e-17 1.0062e-17 1.4880e-18 6.6233e-17 7.9905e-18 1.7539e-17 4.6786e-17 6.3219e-17 3.7733e-17 4.9704e-17 9.9335e-17 1.3267e-16 1.1118e-16 3.1605e-17 7.1889e-17 3.7728e-18 2.2409e-16 2.4153e-17 2.2263e-17 2.1670e-16 2.4915e-23 8.7664e-17 1.3381e-16 3.1093e-18 5.6711e-17 5.3202e-17 2.7377e-17 1.2389e-17 5.5326e-17 1.4491e-16 5.6520e-17 5.3044e-17 1.3412e-16 5.1497e-17 2.1184e-17 3.6445e-17 6.1343e-17 2.1365e-17 3.3838e-17 8.0317e-18 6.2578e-17 1.2185e-17 4.0972e-17 2.2108e-16 7.8321e-18 4.0626e-18 2.0224e-18 6.6521e-17 1.2174e-17 1.5984e-17 3.2400e-18 6.2944e-17 4.9294e-17 1.3894e-17 8.3368e-18 2.8614e-17 3.8082e-17 1.6724e-17 5.3223e-16 2.4724e-16 6.9995e-17 4.6091e-17 1.3344e-16 5.6078e-17 2.4183e-16 1.2849e-16 1.6753e-17 5.0360e-17 6.4868e-17 8.3748e-17 1.5947e-15 9.5193e-18 1.3094e-16 1.5560e-17 1.3605e-17 5.1321e-16 7.6383e-17 8.3706e-18 2.3146e-17 1.7087e-18 2.8899e-17 2.4911e-17 1.3633e-16 2.4889e-17 5.7139e-17 5.7915e-17 7.8470e-18 2.6365e-17 1.7068e-16 9.3638e-17 1.3216e-16 1.5227e-16 4.3850e-17 4.7480e-16 1.2014e-16 2.2019e-16 3.0797e-16 2.9240e-16 4.4445e-17 7.0626e-17 4.3267e-16 1.2705e-15 1.6768e-16 1.1476e-16 2.3252e-16 2.0943e-16 1.8018e-16 3.2302e-16 3.7759e-16 6.4824e-17 2.3965e-17 5.6885e-17 4.8512e-17 7.9567e-17 3.7757e-16 2.4755e-17 3.4802e-16 3.7143e-16 7.4921e-17 2.7984e-16 2.7677e-16 6.2619e-17 1.6146e-16 1.0083e-16 1.1803e-16 1.0519e-15 6.1034e-17 3.8791e-17 9.2620e-17 4.1949e-17 4.8202e-16 5.1049e-16 3.5623e-16 1.6346e-16 5.2514e-16 1.6207e-16 1.4746e-16 5.7906e-17 2.3825e-16 6.3986e-17 8.7640e-17 8.2943e-16 6.0411e-16 6.4255e-17 1.2585e-16 8.9717e-16 1.1767e-16 1.8057e-16 1.2008e-16 1.9829e-16 4.9972e-18 1.6018e-16 1.4975e-16 4.4537e-18 2.1812e-16 2.6511e-16 9.3868e-17 1.3880e-16 2.1169e-16 4.3049e-17 1.3084e-16 4.4921e-23 1.1904e-17 5.2370e-17 4.9941e-23 9.5666e-18 2.2684e-17 1.0141e-16 9.0560e-17 2.0609e-17 8.0854e-17 6.6337e-18 8.2356e-18 5.7284e-17 2.0896e-16 2.2260e-16 8.3339e-18 8.9455e-19 3.4250e-18 1.0630e-17 3.8269e-17 7.5923e-17 3.5630e-17 3.6534e-17 7.9395e-17 1.7491e-17 2.8818e-17 2.9152e-18 8.7157e-17 1.4990e-17 4.7654e-17 8.4667e-17 1.7290e-17 3.0040e-17 1.1769e-17 1.1284e-16 3.1324e-17 1.6787e-17 2.0516e-17 9.8334e-17 3.7366e-17 5.1458e-24 1.0393e-16 5.1058e-17 4.4333e-19 2.2619e-17 2.6966e-18 1.7656e-17 2.5238e-17 1.7139e-17 1.6449e-17 1.4022e-17 1.3482e-17 2.3156e-18 1.5916e-17 7.7037e-18 3.9669e-23 5.0898e-17 1.7337e-16 3.4868e-16 7.2127e-17 1.3065e-16 5.3243e-17 2.6232e-16 1.7992e-16 1.0525e-16 2.3700e-16 1.1318e-16 3.6038e-17 2.7318e-16 6.4754e-16 1.6183e-16 1.4900e-16 8.4870e-17 2.9737e-16 3.3543e-16 7.9855e-16 1.6741e-17 6.9032e-18 7.2620e-18 5.4526e-19 5.8999e-18 1.3633e-16 6.8659e-18 2.8101e-18 1.5513e-17 4.4840e-18 3.7450e-23 6.9823e-17 1.8728e-16 2.5721e-16 4.9487e-16 2.7609e-16 8.4811e-16 3.0483e-17 1.8819e-17 5.8847e-18 3.1055e-16 4.0635e-16 2.2783e-18 2.8596e-16 5.9983e-17 1.0002e-16 8.0645e-17 3.2350e-16 1.8054e-17 1.5334e-17 2.1671e-16 2.6209e-16 8.3345e-17 8.1480e-17 1.1377e-16 2.1561e-16 6.0244e-16 4.2020e-16 3.3419e-16 2.2755e-16 4.1348e-16 2.2476e-16 8.5506e-17 2.9354e-16 1.6102e-16 4.5587e-16 9.0750e-17 1.2876e-16 2.4821e-16 1.9531e-16 2.3274e-16 9.2620e-17 9.7882e-17 6.8350e-16 4.7933e-17 1.1418e-17 1.7207e-16 3.1174e-16 1.5599e-16 4.9349e-16 1.6600e-16 9.6067e-18 4.3284e-17 2.0884e-16 2.5747e-17 1.1881e-15 2.3203e-16 5.3177e-18 3.0490e-16 1.3875e-16 4.9656e-16 1.0441e-17 1.2242e-16 1.0161e-16 8.7938e-16 1.3431e-16 1.3361e-16 7.2707e-17 7.2040e-18 9.9644e-17 4.1496e-17 5.6450e-17 5.8325e-17 9.1865e-17 4.3125e-18 4.6500e-23 7.7015e-18 1.1986e-16 1.1161e-17 3.2042e-16 4.2146e-17 4.2764e-17 1.4547e-17 2.7721e-17 2.3660e-16 9.2650e-18 4.1481e-17 4.9843e-17 1.8864e-17 7.4079e-18 7.9615e-17 1.5413e-17 9.5673e-17 5.5809e-18 3.6005e-17 3.9589e-18 6.8405e-17 2.3440e-17 3.8626e-17 6.0518e-17 2.8787e-16 2.1979e-17 1.9987e-17 1.1470e-16 1.0201e-17 9.9069e-17 1.2016e-17 3.2560e-17 4.6958e-17 6.6563e-17 8.4239e-17 1.7319e-16 2.9174e-16 1.5236e-17 9.4683e-17 1.9415e-17 3.5940e-17 1.1527e-17 3.2391e-17 7.5280e-18 3.9788e-18 1.4846e-17 1.1747e-17 8.7231e-18 3.8016e-17 2.9492e-18 1.1578e-17 2.3684e-23 1.9810e-17 6.3471e-18 2.2541e-17 1.7276e-16 6.8863e-16 7.7457e-17 5.3055e-18 5.7287e-18 2.7625e-16 2.5255e-16 1.1892e-16 1.7689e-16 5.6858e-17 3.3034e-17 3.7886e-17 1.7022e-15 2.1894e-17 1.5803e-16 1.5560e-17 5.8308e-17 5.3669e-16 1.1805e-16 1.5486e-16 2.8831e-17 1.7087e-18 8.7242e-18 5.8999e-18 1.9486e-16 2.0598e-17 2.2481e-17 1.8616e-17 2.2420e-17 1.0786e-17 1.8878e-16 1.6285e-16 2.5152e-16 3.9589e-17 2.4361e-17 2.5288e-16 8.9655e-17 2.6347e-17 1.0063e-15 2.1779e-16 6.3493e-18 2.2783e-17 5.2218e-17 7.8250e-16 7.9427e-17 1.0856e-16 6.3352e-16 1.4082e-16 5.3670e-17 1.3084e-16 2.8430e-16 4.6302e-18 6.2309e-17 1.8617e-16 5.0129e-16 2.6143e-16 1.0414e-15 2.4755e-16 1.2047e-16 4.9758e-16 4.4953e-17 6.9959e-16 3.3548e-17 2.6836e-17 9.4974e-18 4.0333e-16 5.2578e-16 6.8554e-16 3.4179e-16 4.9135e-16 7.0126e-16 2.5170e-16 1.0814e-15 3.1875e-16 2.2835e-17 3.3553e-16 1.6738e-17 9.5214e-17 6.1440e-23 9.6510e-17 2.2480e-16 2.2771e-16 5.1279e-16 2.5747e-17 5.1258e-17 1.2316e-16 9.2174e-17 1.2091e-16 3.8639e-16 1.6668e-16 5.5687e-17 1.7588e-16 1.2493e-16 4.1967e-16 5.7277e-16 2.1675e-16 3.7807e-17 3.3715e-16 2.7438e-16 3.5772e-17 1.2701e-17 6.2491e-17 3.3405e-17 4.3125e-18 1.1904e-17 1.5403e-18 7.9905e-17 6.5372e-17 3.9697e-17 8.5609e-17 4.2764e-17 1.7336e-16 4.6202e-18 1.8464e-16 1.9971e-16 8.7901e-17 4.3230e-16 3.4898e-17 2.3150e-17 2.2364e-17 5.9938e-18 1.5782e-16 8.2119e-17 2.2699e-17 1.3302e-16 3.1093e-17 5.2930e-18 6.2676e-17 5.3313e-17 9.4743e-18 2.8042e-17 1.0556e-16 6.6495e-18 3.5703e-17 1.3505e-16 4.1198e-17 5.0997e-18 6.2377e-17 3.0019e-17 3.0216e-17 6.3413e-17 6.7727e-17 6.6750e-17 1.4820e-17 8.1373e-17 1.3262e-16 1.9063e-17 4.5018e-17 1.4607e-18 1.6164e-18 4.8991e-18 7.5105e-18 7.4770e-18 8.7873e-17 3.3705e-17 1.0999e-17 1.8947e-17 4.2921e-17 1.2694e-18 4.2173e-17 1.5458e-16 6.3627e-17 1.3253e-16 1.1937e-17 2.2847e-16 4.0647e-17 1.3907e-16 1.0525e-16 6.8982e-18 3.8718e-16 5.1654e-17 3.8551e-17 3.3376e-15 2.2846e-17 5.8696e-17 1.9803e-17 9.7180e-17 1.1740e-15 1.2499e-16 2.2322e-17 1.2182e-17 2.9902e-17 2.2356e-17 1.0554e-16 6.0846e-17 2.4030e-17 2.4354e-17 1.3445e-17 8.9680e-18 4.0746e-17 6.7237e-17 1.8321e-16 3.4531e-16 6.0145e-16 2.6797e-16 7.1392e-16 4.6083e-16 2.6912e-16 1.4908e-16 4.9405e-16 4.4445e-17 4.3059e-16 6.2165e-16 8.4521e-16 1.9121e-16 2.4814e-17 4.7177e-16 2.7803e-16 4.2169e-17 5.3155e-16 2.3544e-16 5.5563e-17 3.3551e-16 7.6019e-16 2.0483e-16 3.1258e-16 6.0898e-18 3.4657e-16 2.1417e-16 9.8114e-17 1.6483e-16 4.6640e-17 1.1742e-16 1.2524e-16 2.9679e-22 6.0500e-17 4.9359e-16 8.2738e-16 2.6855e-16 1.6809e-16 5.4249e-16 5.5932e-17 8.7223e-16 5.5602e-16 2.2835e-17 2.4734e-16 2.5106e-17 7.6982e-17 4.3844e-16 3.6674e-17 3.5737e-16 5.0812e-16 3.0394e-16 1.4161e-16 7.6887e-17 1.1959e-15 2.2512e-16 1.2266e-16 2.7574e-16 3.6113e-16 3.2716e-16 1.9139e-16 1.1660e-16 1.9382e-16 2.4702e-17 8.9075e-18 7.2852e-16 7.4922e-17 1.5163e-16 5.1512e-17 2.2580e-17 6.9434e-17 1.0996e-16 2.8750e-18 1.4880e-17 1.1398e-16 1.9177e-17 1.5466e-16 1.2618e-16 6.5853e-17 8.3013e-17 1.3335e-17 1.5478e-16 1.4484e-16 1.8530e-16 1.7778e-17 7.6682e-18 3.8671e-17 7.8709e-17 1.2613e-16 4.3669e-17 5.3969e-17 2.0729e-16 4.6963e-18 2.6920e-17 1.4691e-16 1.3611e-17 2.2593e-17 3.6023e-17 1.1515e-16 4.5473e-18 2.0612e-17 7.7577e-18 7.4976e-17 1.3552e-17 8.1537e-18 2.1968e-17 3.6445e-17 7.7331e-17 2.2494e-16 5.6752e-17 2.0839e-17 3.1924e-17 6.3890e-17 6.9666e-17 5.8352e-18 4.5219e-17 1.3725e-17 1.3483e-17 2.4868e-19 7.4229e-19 4.2367e-18 9.4708e-18 5.2661e-17 1.6010e-17 1.7367e-17 8.3368e-18 3.4392e-23 2.7927e-17 1.8178e-17 1.9155e-16 3.5995e-17 1.1015e-17 7.2950e-18 7.1440e-17 1.9119e-16 1.1885e-16 2.5059e-17 2.1138e-16 1.9494e-16 3.3034e-17 4.7324e-16 4.4524e-16 5.0452e-17 7.9014e-18 7.0725e-18 5.2477e-17 1.8080e-15 5.2774e-16 4.8828e-17 2.8019e-17 4.6989e-18 5.4526e-19 6.5555e-19 1.9178e-16 4.7203e-17 1.6861e-17 2.1718e-17 1.1210e-17 2.3968e-18 1.8102e-17 2.6599e-16 2.4442e-16 7.7960e-16 2.1113e-17 6.0039e-16 9.6289e-16 4.1403e-17 2.9227e-16 8.8727e-17 1.6931e-17 2.3010e-16 2.5861e-16 8.4521e-17 3.8243e-17 6.2035e-18 2.1904e-16 1.5526e-16 3.8336e-18 1.8400e-16 1.6881e-16 1.8521e-16 3.3551e-16 8.7913e-17 2.0483e-16 4.2057e-16 4.6892e-16 1.8566e-17 8.0313e-17 5.6065e-17 7.4921e-18 7.9287e-16 1.5097e-16 3.3098e-16 8.5477e-17 2.1175e-16 1.0730e-17 5.9098e-17 9.7655e-17 4.7842e-16 1.8524e-16 2.3771e-16 1.0278e-15 2.2289e-16 7.0789e-17 6.2589e-16 3.9752e-16 1.0129e-16 1.3763e-17 1.9302e-16 1.3641e-16 5.2694e-17 1.4544e-16 2.9793e-16 1.3419e-15 1.2316e-16 2.5702e-16 9.3046e-16 5.9715e-17 3.1252e-17 2.0187e-16 3.6554e-16 6.8295e-17 7.8488e-17 5.5115e-16 2.6277e-16 1.0906e-16 1.6857e-16 1.9062e-16 4.4715e-23 2.1169e-17 7.3600e-17 2.0878e-17 8.6249e-18 1.3392e-17 1.6327e-16 1.9337e-16 4.7833e-17 8.5066e-18 1.3171e-17 4.4651e-16 6.9100e-17 2.0791e-17 1.1056e-17 1.7398e-16 4.0494e-17 9.6811e-17 8.4888e-18 5.6485e-17 2.8715e-16 8.5626e-18 2.7802e-17 3.5877e-17 2.5047e-17 2.6129e-17 6.9959e-18 8.3176e-18 9.8387e-17 8.6454e-18 4.2999e-17 2.5768e-17 5.8088e-17 2.3273e-16 7.4466e-17 3.3179e-17 1.4591e-17 3.0206e-17 1.0951e-23 4.8291e-17 2.1365e-17 9.3788e-17 8.1619e-17 8.7609e-17 1.2745e-16 9.8218e-17 6.1668e-17 1.0788e-17 1.3176e-17 3.9325e-18 5.1973e-17 4.2756e-17 1.2132e-17 2.3926e-17 1.4645e-17 3.2441e-17 7.5257e-18 1.2126e-17 3.3016e-18 2.6658e-17 4.3627e-17 1.6428e-16 1.3525e-16 7.8168e-17 1.9232e-17 1.5063e-16 1.0877e-16 1.2463e-16 2.1004e-16 1.8724e-17 8.2309e-17 2.8470e-16 2.8581e-16 1.9468e-15 1.1423e-17 3.4202e-16 1.2448e-16 7.3856e-17 2.5124e-15 6.9439e-17 1.3951e-17 1.6243e-17 1.6660e-17 1.7039e-23 3.0155e-17 1.5866e-16 8.5823e-18 5.9013e-17 6.6189e-17 3.3630e-18 2.1571e-17 3.2325e-17 6.2425e-17 3.9221e-16 5.8775e-16 9.0948e-17 1.2042e-17 7.5310e-17 1.3174e-17 2.9620e-16 7.0578e-16 5.3969e-16 2.6428e-16 5.3213e-16 3.9534e-16 1.9415e-16 4.5285e-16 1.8534e-16 6.3189e-16 8.4339e-17 2.9440e-16 1.7325e-16 7.8714e-17 1.2941e-16 3.2062e-16 7.0073e-17 4.0352e-16 3.2276e-16 2.4755e-17 6.6927e-18 1.0512e-16 2.9219e-16 6.2186e-17 3.6903e-16 2.7955e-22 1.3296e-16 1.0083e-17 2.6825e-16 9.4557e-16 8.7890e-16 2.1981e-16 3.9694e-17 5.5932e-16 8.4672e-16 2.7561e-16 2.9001e-16 5.1620e-17 4.1844e-16 7.2930e-17 1.5729e-16 1.1388e-16 1.5371e-16 9.2215e-17 2.9835e-17 9.5633e-17 1.1167e-16 1.4279e-17 3.1906e-17 2.4707e-16 3.3019e-16 5.2087e-17 3.4108e-16 4.8107e-16 6.1632e-17 1.1533e-16 2.3158e-17 1.4846e-18 2.9083e-18 3.1409e-16 2.4550e-16 6.1957e-16 8.6086e-17 2.0830e-17 1.2527e-17 4.4921e-23 1.7856e-17 1.3709e-16 7.5111e-17 9.4071e-17 1.0350e-16 1.8307e-16 7.7982e-17 3.6369e-17 6.1218e-17 1.3931e-16 8.8532e-17 1.4123e-16 2.1663e-16 4.6217e-17 1.4723e-16 1.5207e-16 4.4525e-17 8.9949e-17 9.5672e-18 4.5398e-17 7.8386e-17 1.0338e-16 1.8526e-16 5.3931e-17 7.2045e-17 2.2593e-17 6.8210e-18 1.1243e-17 1.2080e-16 1.3771e-17 5.7479e-17 1.5449e-17 2.6676e-17 4.7659e-17 1.5662e-17 4.0899e-17 4.7960e-17 2.2141e-17 2.4306e-17 5.0223e-17 8.9938e-17 3.7531e-17 1.5664e-17 2.7999e-17 1.5618e-17 5.4709e-18 2.4496e-17 1.7332e-18 1.9689e-17 9.3482e-18 1.6852e-17 3.1261e-17 2.1221e-17 3.3016e-17 3.1735e-17 7.4893e-17 8.7896e-17 4.8248e-16 6.7508e-18 1.0810e-16 6.0656e-18 1.1178e-16 1.0441e-16 3.2714e-16 3.0697e-16 6.9854e-17 6.3667e-17 7.3113e-18 3.2589e-15 2.5702e-17 2.2575e-18 7.0725e-18 1.1662e-17 1.7912e-15 2.8470e-16 2.7902e-18 3.6141e-17 2.9048e-17 1.6358e-18 4.8511e-17 1.1014e-16 6.2651e-17 9.3671e-19 5.1710e-18 1.0089e-17 2.5167e-17 2.8964e-16 4.0169e-16 1.5063e-16 3.2280e-16 1.6241e-18 1.1354e-16 2.6179e-16 2.0513e-16 9.2586e-16 2.2182e-17 3.5979e-17 4.6704e-16 2.4866e-17 5.4530e-18 9.1194e-17 2.6985e-16 5.4591e-16 1.3721e-16 8.4339e-17 3.2711e-17 1.4659e-16 1.1113e-16 3.4509e-16 1.5514e-16 3.3419e-16 1.4777e-16 3.6539e-16 2.5374e-16 3.3464e-17 2.5229e-16 5.8439e-16 5.6745e-16 2.0129e-16 1.6996e-16 9.4974e-18 2.8233e-16 2.1460e-17 2.4230e-15 9.7655e-17 6.4651e-17 3.9694e-17 4.3697e-22 1.0457e-15 4.6735e-16 2.7402e-17 1.2905e-17 4.2472e-16 3.7883e-16 6.2915e-17 8.1069e-17 4.9955e-17 3.7639e-17 1.8647e-18 3.0897e-16 7.1395e-17 1.6421e-16 6.7358e-17 7.1844e-17 1.1767e-16 2.8821e-16 1.0441e-17 1.0690e-16 9.6612e-17 3.0434e-17 1.0035e-16 4.1865e-16 1.1778e-16 2.6943e-16 2.1951e-16 1.3450e-16 3.9515e-17 9.9985e-17 1.0578e-16 2.8750e-18 1.4880e-17 2.3104e-17 1.1187e-17 2.0728e-16 8.2230e-17 8.5609e-17 9.3076e-17 1.2123e-18 1.1089e-16 4.4225e-17 6.8973e-17 8.7901e-17 2.0800e-16 4.3387e-17 7.8709e-17 1.6191e-16 4.9663e-17 1.2266e-16 2.7904e-17 4.2267e-17 4.7507e-17 1.5158e-16 3.8563e-17 5.1744e-17 4.1066e-17 1.6835e-16 9.9283e-17 1.7614e-16 3.9897e-17 6.0695e-17 7.0096e-18 8.2825e-17 2.0438e-16 1.7206e-16 5.2533e-17 2.4417e-17 1.7639e-16 2.3878e-18 4.5347e-17 7.0806e-18 2.0429e-16 1.4588e-18 3.0442e-17 3.2940e-18 3.0449e-17 2.6111e-17 1.9300e-18 9.4363e-17 3.6637e-17 9.6597e-18 4.6344e-17 1.2157e-17 6.0631e-18 1.1005e-17 3.0466e-17 1.2943e-16 3.2855e-16 4.7702e-16 2.8780e-17 8.5551e-17 4.6503e-17 6.0594e-17 7.6757e-17 4.5106e-17 2.9662e-16 6.6064e-17 9.0094e-17 5.1179e-17 1.1571e-15 1.6183e-17 2.4833e-17 1.0467e-16 3.2847e-16 2.0596e-15 2.5692e-16 2.5112e-17 1.4619e-17 4.2717e-18 3.2170e-17 1.0489e-17 1.1861e-16 2.8322e-17 3.7468e-18 2.0684e-18 3.6993e-17 1.6778e-17 2.1981e-17 4.7905e-16 6.8210e-17 7.0652e-16 2.5498e-16 1.9095e-16 1.6497e-16 1.9572e-16 2.0008e-16 1.1172e-15 1.3545e-16 3.6908e-16 4.2272e-17 3.6262e-16 2.0298e-16 8.6848e-17 3.5046e-16 6.8605e-17 2.2618e-16 9.8133e-17 5.5528e-16 1.3891e-17 3.2592e-16 5.1714e-18 2.4795e-16 1.7618e-16 9.6219e-16 6.1888e-18 8.0313e-17 2.1025e-16 4.3454e-16 5.9854e-16 1.7613e-16 2.6836e-17 4.7487e-17 4.0333e-17 3.3532e-22 7.6828e-16 1.5869e-16 6.4651e-17 7.6742e-16 2.6568e-16 4.3356e-17 4.0983e-16 3.6536e-17 3.5058e-16 4.4564e-16 1.2155e-17 1.7105e-16 6.3697e-17 1.9213e-17 1.6185e-16 3.3191e-16 2.2621e-16 5.4187e-16 1.5528e-16 4.9632e-16 1.2792e-16 2.7399e-16 2.7085e-16 2.7843e-17 2.5519e-16 1.6158e-16 3.1876e-16 1.1270e-16 2.5683e-16 3.1991e-17 8.6448e-17 1.4441e-18 4.8650e-17 1.9758e-17 4.3049e-16 3.1457e-16 1.2937e-17 1.6368e-17 7.7015e-18 1.7579e-17 4.3687e-16 5.1040e-17 8.0340e-17 6.6662e-17 2.4488e-16 1.1666e-16 1.5589e-16 6.8973e-17 4.3457e-17 1.7253e-16 1.6317e-16 4.0743e-17 8.0509e-18 1.7981e-17 3.0256e-17 8.5308e-17 2.1994e-16 4.7507e-18 2.1454e-16 6.4272e-17 8.0896e-17 2.1614e-18 1.2244e-16 1.8947e-17 6.4334e-17 1.1304e-16 5.8655e-17 1.4019e-17 2.9611e-17 6.1197e-17 4.0650e-17 9.9192e-17 6.1043e-19 2.6378e-17 7.3805e-17 5.8044e-17 1.3914e-16 9.5649e-18 3.2757e-17 5.1131e-17 2.9646e-17 3.2584e-18 4.2772e-17 1.3807e-17 2.0798e-17 1.4206e-17 2.5240e-17 5.4771e-18 5.2101e-18 1.2884e-17 1.8709e-17 2.5388e-18 7.9983e-18 1.5882e-16 7.3080e-17 1.7303e-16 1.0047e-16 5.0210e-17 7.1508e-18 2.1954e-16 2.9798e-16 1.9709e-17 3.9530e-17 1.7839e-16 6.7331e-16 3.5551e-16 3.8077e-18 1.6480e-16 8.9114e-17 3.8872e-17 1.2210e-15 8.3327e-17 6.4175e-17 6.4972e-18 9.8250e-18 1.7039e-23 5.1133e-17 2.5417e-17 3.0038e-17 1.5924e-17 4.4471e-17 2.2420e-18 3.3555e-17 1.4094e-16 4.6141e-17 5.0020e-16 1.2334e-16 9.9068e-17 2.9589e-16 3.9986e-16 3.1993e-17 9.0232e-17 3.9121e-16 1.5238e-16 1.1847e-16 2.7850e-16 4.3624e-17 1.2061e-16 1.1383e-15 1.3142e-16 3.3219e-16 7.6672e-17 6.9511e-17 1.0350e-15 6.4824e-17 3.1154e-16 7.3433e-16 4.8512e-16 1.7618e-16 4.9936e-16 2.4136e-16 1.4055e-16 1.1213e-16 1.8730e-16 1.0649e-15 9.7289e-16 2.6836e-16 2.8492e-16 3.2267e-16 8.5841e-17 9.4557e-17 3.6621e-16 9.0511e-17 3.9694e-16 3.7754e-16 7.3706e-16 3.0677e-16 2.5119e-17 3.6564e-17 8.1596e-17 1.4789e-16 3.3424e-17 7.2769e-16 2.1903e-16 1.8819e-16 1.2866e-16 1.1200e-15 6.3889e-16 4.2837e-17 4.4314e-17 3.0665e-16 3.5829e-16 1.0001e-15 5.5687e-17 7.9316e-17 7.3292e-17 1.6018e-18 1.7445e-16 7.2745e-17 1.8904e-17 3.6020e-17 1.1986e-16 8.1560e-17 4.4102e-23 6.9434e-18 7.9338e-17 4.4921e-23 1.0416e-17 1.2014e-16 4.7943e-17 1.1480e-16 6.3799e-17 2.2390e-17 1.1194e-16 1.2608e-16 1.6517e-16 1.4373e-17 1.2045e-16 5.4321e-17 5.7512e-18 1.3299e-16 2.4076e-17 4.1149e-17 3.9388e-17 2.5554e-23 7.9727e-19 4.1484e-17 2.4743e-23 1.3215e-17 6.9565e-17 1.3556e-16 3.6023e-18 1.0640e-16 2.3494e-17 1.1180e-16 3.2139e-17 3.5703e-18 2.1029e-17 1.0385e-16 5.9235e-17 7.9548e-17 9.4624e-18 5.1886e-17 2.0250e-17 4.0158e-17 1.2878e-17 2.5029e-17 1.5275e-16 9.9729e-17 1.3300e-17 2.7889e-17 2.7640e-17 4.8492e-17 1.3361e-18 5.9699e-18 4.7354e-18 5.9205e-18 8.0471e-17 1.2157e-17 4.0168e-17 1.6508e-17 4.5699e-17 2.1814e-18 3.1643e-16 4.3048e-16 1.1015e-17 4.4566e-16 2.5004e-16 1.2345e-16 1.5351e-16 1.4534e-16 3.5969e-16 3.0866e-17 2.2463e-16 4.7989e-16 5.2734e-16 2.0942e-17 2.3704e-17 1.2731e-17 1.1273e-16 1.3451e-15 2.1700e-22 4.3597e-23 2.2740e-17 8.5435e-18 1.9084e-17 3.5400e-17 8.0871e-17 3.4329e-17 3.7468e-18 1.3445e-17 4.9324e-17 3.4754e-17 1.9266e-16 4.5869e-16 9.9472e-17 7.5524e-16 1.5429e-16 2.0644e-16 3.0841e-16 1.8819e-18 1.7458e-16 5.0413e-16 7.6191e-17 5.5590e-16 1.0941e-16 4.4442e-16 5.6187e-16 1.4268e-16 1.6512e-16 2.3831e-16 1.9551e-16 1.1858e-16 1.5548e-16 3.3801e-16 1.8213e-16 1.3446e-16 1.4554e-16 1.1367e-16 4.9328e-16 3.1563e-16 6.9605e-16 1.7520e-16 9.7397e-17 2.3320e-16 2.5161e-17 1.1629e-16 4.7487e-16 6.0500e-17 3.2190e-17 5.2006e-16 4.8827e-16 6.3358e-16 5.8218e-16 2.7966e-16 8.1357e-16 3.8346e-17 6.6222e-17 3.6134e-16 6.2766e-18 4.2543e-17 2.0644e-16 3.0883e-17 2.4977e-17 2.7853e-16 7.4587e-18 2.3908e-16 8.4210e-17 2.1061e-16 6.5585e-17 5.1517e-16 3.5829e-16 8.5075e-17 1.2704e-16 3.2761e-17 4.6640e-17 1.4096e-16 1.8526e-17 4.6393e-23 6.9798e-17 1.0086e-17 1.7185e-16 3.4055e-16 1.2278e-16 4.1661e-17 3.1039e-16 4.4921e-23 1.7856e-17 1.3863e-17 6.7120e-17 6.3777e-18 5.5293e-17 6.4536e-17 5.6600e-17 2.5458e-17 3.4652e-18 9.0661e-17 1.0912e-16 8.0000e-17 4.7926e-17 3.7728e-18 2.1298e-17 2.5942e-17 1.4556e-16 4.0886e-17 1.7301e-16 8.1403e-17 9.4222e-17 4.1198e-17 1.0964e-16 1.8803e-16 1.3689e-17 4.4456e-17 1.2278e-16 4.0599e-17 9.5863e-17 4.2843e-17 5.6544e-17 2.5749e-17 2.4557e-16 7.9899e-17 3.0280e-16 3.6626e-17 2.2381e-17 4.6019e-17 4.8793e-17 3.2275e-17 4.8110e-17 1.0742e-17 4.4481e-17 9.8820e-18 1.0112e-17 2.0889e-17 2.6722e-18 8.2808e-18 4.7105e-17 7.1669e-18 1.3166e-23 3.1261e-17 1.8947e-17 1.6508e-17 1.2694e-17 1.8178e-17 2.8976e-16 5.4719e-16 1.5101e-16 2.7953e-16 9.3007e-17 1.3925e-16 8.7074e-17 1.3851e-16 3.4491e-17 9.5305e-17 8.4688e-17 2.1602e-16 5.3327e-17 8.5674e-18 4.5151e-18 6.0824e-17 4.8590e-17 6.7086e-17 5.4857e-16 2.6507e-17 8.9336e-18 3.7591e-17 1.9084e-17 1.2849e-16 7.7020e-17 2.1456e-17 3.2785e-17 1.1376e-17 4.4840e-18 2.7563e-17 2.9739e-17 2.5513e-16 9.9472e-17 5.2532e-16 1.2505e-16 6.0383e-16 3.9269e-16 1.9760e-16 7.1205e-16 2.0770e-16 2.4974e-16 2.2783e-17 3.5310e-16 1.5268e-16 4.1184e-17 2.3263e-16 1.3142e-16 1.5888e-16 4.9836e-17 4.1707e-16 3.5538e-17 3.4264e-16 8.6273e-17 3.4648e-16 8.8938e-16 1.3640e-16 3.2885e-16 1.7947e-16 1.1378e-16 2.0324e-16 2.2476e-17 2.3320e-17 1.8451e-16 2.5047e-16 2.4693e-16 4.0333e-16 1.6095e-16 1.4184e-16 4.1503e-16 8.0167e-16 4.6310e-16 1.3983e-17 7.1921e-16 7.4296e-17 2.5119e-17 2.3659e-17 1.2972e-16 1.9245e-16 8.6508e-17 5.2116e-17 9.6067e-18 2.8229e-17 8.0181e-17 3.8253e-16 2.9290e-17 1.8563e-16 5.8495e-17 2.3481e-16 1.3172e-16 1.1233e-15 8.7011e-18 1.3794e-17 3.2648e-16 2.1304e-16 2.7789e-17 3.1473e-16 2.9083e-18 3.4579e-17 3.4803e-16 5.2943e-17 1.1149e-16 1.0971e-16 7.3770e-17 5.7500e-18 2.2320e-17 1.1090e-16 2.8766e-17 3.0294e-17 8.6484e-17 6.4536e-17 2.2011e-16 5.8190e-17 1.5016e-17 5.8598e-17 2.6766e-17 7.0123e-17 2.2334e-16 2.5372e-16 7.5931e-17 4.2044e-17 2.9969e-17 2.1015e-16 7.9727e-18 1.8002e-17 5.6216e-17 8.8615e-17 5.2930e-18 4.9558e-17 3.6023e-17 4.0812e-17 9.7767e-17 1.2617e-16 6.5386e-17 9.7928e-17 7.9443e-18 4.8064e-17 3.2560e-17 1.0969e-16 1.5303e-16 9.6448e-17 5.3022e-17 5.7307e-17 3.0473e-17 1.5643e-17 1.0850e-17 1.2334e-17 3.4432e-17 1.2078e-17 8.8763e-18 1.6288e-17 1.7815e-18 7.3564e-17 3.2400e-18 2.1812e-18 1.0954e-17 1.3894e-17 1.0610e-17 6.6032e-18 9.6476e-17 6.4713e-17 1.3094e-16 9.1623e-17 5.0098e-17 2.0923e-16 1.5467e-16 2.8227e-17 2.4017e-16 1.5036e-16 9.5589e-17 9.3139e-17 8.7691e-17 3.0508e-16 4.1984e-16 3.8077e-18 1.5803e-16 3.2534e-17 2.7210e-17 3.0189e-16 5.2079e-16 2.0926e-17 1.6243e-17 3.4174e-18 3.8168e-18 3.8677e-17 1.4249e-16 1.3732e-17 2.6228e-17 2.6889e-17 1.1210e-17 1.1984e-17 4.5256e-17 1.3028e-16 1.9752e-16 7.5676e-16 6.1715e-17 2.0472e-16 3.9986e-16 5.9846e-16 3.7466e-16 9.2155e-16 3.4921e-16 1.5948e-16 3.7299e-17 2.3993e-16 1.0884e-16 4.3114e-16 3.4709e-16 2.0221e-16 4.7153e-16 2.9849e-16 6.2192e-17 6.9454e-17 3.8344e-17 1.6161e-22 7.5463e-17 1.2276e-15 4.8110e-16 3.3419e-16 3.4802e-16 5.8168e-16 1.4235e-16 4.3530e-16 1.5097e-16 2.7731e-16 2.8492e-17 4.4367e-16 2.6825e-16 7.0918e-17 1.2207e-17 2.7153e-16 2.6463e-16 2.3771e-16 4.2846e-16 1.9173e-16 3.3796e-16 5.5276e-16 7.6366e-16 3.0388e-17 2.9491e-16 6.1767e-17 3.7658e-16 1.2797e-16 2.7970e-17 3.3104e-16 1.1734e-15 3.1592e-16 1.4181e-16 1.9275e-17 2.0373e-16 9.2367e-16 9.2232e-17 1.9657e-16 2.8984e-16 3.3637e-17 1.4203e-16 1.6330e-17 5.5257e-17 4.8987e-17 1.4586e-16 5.7235e-18 8.1852e-17 2.2636e-16 9.7432e-18 4.4921e-23 4.4640e-18 4.4669e-17 2.0775e-17 4.7833e-18 6.5217e-17 9.0877e-17 1.8741e-16 7.5162e-17 1.3861e-17 1.3267e-17 1.9457e-16 2.0049e-16 9.4894e-17 2.1694e-17 6.8523e-17 2.1559e-16 1.8838e-17 4.7019e-16 1.0125e-16 4.5398e-17 8.0762e-17 5.4413e-18 2.7977e-17 1.3118e-17 3.2420e-17 7.4337e-17 5.3052e-17 1.0431e-16 4.4330e-17 2.2442e-17 2.5702e-17 2.6178e-17 5.8843e-18 3.1539e-17 9.0056e-17 9.5379e-24 1.8651e-18 2.8654e-17 4.3533e-18 2.2559e-17 4.0401e-17 5.7556e-17 4.4333e-19 2.8219e-17 3.8539e-17 3.8047e-17 4.6393e-24 2.4650e-17 7.9754e-18 6.2321e-19 7.5836e-18 1.8091e-23 3.6379e-17 6.6032e-18 6.4740e-17 5.3807e-17 3.5098e-16 3.0577e-16 1.1725e-17 1.4159e-16 1.3479e-16 1.6296e-16 2.4760e-18 3.4627e-17 3.7989e-16 1.2617e-16 6.1264e-17 5.5699e-16 1.1596e-16 9.9953e-17 4.7408e-17 1.2731e-16 1.3605e-17 3.9916e-16 4.1663e-17 1.3951e-18 1.2182e-18 2.6058e-17 4.0895e-17 9.3743e-17 1.7715e-17 2.2314e-17 6.8380e-17 9.3078e-18 6.7260e-18 2.2770e-17 1.7326e-16 1.3299e-16 4.2631e-18 1.2334e-16 7.4707e-17 9.4445e-16 1.1476e-16 1.9196e-16 2.0989e-16 2.1174e-16 4.0212e-17 2.0960e-16 2.9839e-16 3.8989e-16 1.7062e-16 3.1328e-16 4.2460e-16 3.9719e-17 3.4502e-17 1.9627e-16 3.5538e-17 9.2605e-17 1.2462e-16 3.5165e-16 1.1319e-16 2.2733e-17 6.0898e-18 9.2832e-17 4.0156e-17 2.5229e-16 2.3413e-22 1.1660e-16 6.7096e-17 2.7955e-22 2.4693e-16 4.0333e-16 6.3308e-16 1.1229e-15 1.3428e-16 6.3358e-16 1.3231e-16 6.4322e-16 1.5353e-15 1.1264e-16 4.3615e-16 2.5810e-17 5.2096e-16 8.7111e-17 1.2583e-16 5.1537e-16 1.7484e-16 7.5654e-16 2.0511e-16 2.9609e-16 4.1190e-16 2.7844e-16 4.3605e-16 8.9367e-17 1.3699e-16 5.1739e-16 1.0093e-16 6.0349e-17 4.4975e-17 1.5858e-16 5.2954e-16 2.2863e-16 1.8613e-16 1.3832e-16 6.4841e-16 6.4390e-17 2.2580e-17 2.2219e-17 1.3919e-16 7.1874e-18 2.9760e-18 4.6209e-18 6.5522e-17 8.7693e-17 9.4990e-17 2.2653e-16 1.4968e-16 7.7586e-17 1.5016e-17 8.4027e-17 1.0294e-17 9.3827e-17 1.7349e-16 4.6217e-17 1.2964e-17 1.2971e-16 3.4336e-16 1.0794e-16 2.5114e-16 2.8178e-17 2.0586e-17 2.2542e-17 2.4953e-17 1.7928e-16 9.3658e-18 2.4050e-17 1.0610e-17 2.1237e-17 4.4330e-18 2.6522e-17 5.1404e-18 2.6607e-17 7.8457e-19 1.1109e-16 3.7523e-17 2.2891e-17 1.4388e-16 1.0246e-16 6.4573e-17 1.4655e-17 1.4419e-17 4.7610e-17 2.6304e-17 3.7332e-18 8.9886e-18 1.8651e-18 4.7507e-17 2.9849e-17 2.4923e-19 5.9828e-17 3.0334e-17 1.5051e-17 2.8042e-17 6.6032e-18 2.4119e-17 2.8358e-17 3.5825e-16 3.1123e-16 1.6238e-16 1.4590e-16 3.4035e-17 9.3714e-17 1.5145e-16 2.0640e-16 2.6607e-17 1.2184e-16 5.5858e-17 1.8611e-17 1.1512e-16 4.7596e-17 6.3211e-17 7.9212e-17 1.7492e-16 5.4675e-16 2.3609e-16 2.9297e-17 2.8425e-18 2.5203e-17 1.7039e-23 1.0161e-16 7.6250e-17 9.4405e-18 9.3671e-19 8.1702e-17 1.2331e-17 6.5912e-17 4.6549e-17 7.0432e-16 6.2952e-16 8.9837e-17 4.5474e-17 1.8923e-16 4.8414e-16 2.3712e-16 1.9420e-16 1.4700e-15 6.9842e-17 2.0504e-17 5.9430e-16 4.9077e-17 1.2944e-16 4.3114e-16 1.3479e-16 1.8776e-16 6.9004e-17 5.2338e-16 2.2211e-17 1.0187e-16 6.2309e-17 1.1894e-16 4.5278e-16 1.8755e-16 5.3590e-16 1.4234e-16 6.6927e-18 6.3073e-17 3.5962e-16 7.8510e-16 1.0064e-16 2.5942e-16 4.0839e-16 3.0250e-17 3.2190e-16 2.1866e-15 3.8146e-22 7.7581e-17 6.6157e-17 3.3560e-16 2.1678e-16 1.7975e-16 6.0513e-16 1.5056e-17 2.3014e-17 6.2598e-16 1.0814e-16 1.1002e-16 3.0741e-17 9.2215e-17 1.8274e-16 4.3403e-16 5.7299e-16 1.4457e-16 5.5393e-23 1.7523e-18 1.9846e-16 3.9933e-17 3.3064e-17 3.4485e-18 4.2976e-16 1.0572e-16 3.6435e-16 2.9692e-18 1.9631e-16 3.2562e-16 4.3757e-16 3.1479e-17 4.2338e-17 2.6940e-16 2.6446e-17 4.4921e-23 4.4640e-18 8.4716e-17 4.9941e-23 4.9427e-17 5.6711e-17 6.5853e-18 7.5467e-18 1.9033e-16 4.6202e-17 3.3169e-17 2.1721e-16 1.8173e-16 1.4378e-16 2.4806e-16 8.9821e-17 1.5207e-17 1.7981e-17 3.8433e-17 7.7335e-17 2.4460e-23 4.2756e-17 5.6745e-17 3.2514e-17 2.2447e-16 9.3658e-17 5.8303e-18 2.1221e-17 8.6820e-17 7.7577e-18 8.2116e-17 1.2384e-16 7.8963e-17 1.6476e-16 2.6983e-17 7.2436e-17 1.2514e-17 2.5579e-17 4.3631e-17 7.1829e-17 1.0835e-16 1.1706e-17 2.6524e-18 2.2019e-17 4.8202e-17 5.7303e-17 1.5294e-17 1.3807e-17 1.0592e-17 1.4705e-17 9.7376e-24 2.9492e-18 2.7208e-17 4.5473e-18 3.9619e-17 6.4740e-17 1.0252e-16 5.0677e-16 9.5223e-16 6.8219e-17 1.6115e-16 9.8061e-17 5.2690e-18 1.2421e-16 2.1323e-16 1.5718e-16 3.8664e-16 1.0811e-16 3.1771e-16 4.3254e-16 2.9510e-17 3.0477e-16 8.9114e-17 7.1913e-17 3.7233e-16 1.3888e-17 4.0458e-17 2.0304e-18 1.3349e-23 3.1080e-17 5.9655e-17 1.3633e-16 4.2053e-17 9.3671e-19 4.1368e-18 3.0267e-17 4.1944e-17 4.6549e-17 1.6421e-16 1.0231e-16 5.4511e-16 5.0346e-17 5.6770e-17 7.6386e-16 2.9546e-16 1.0593e-16 5.6664e-16 6.9842e-17 1.1163e-16 2.7352e-16 4.5260e-16 1.1767e-17 4.9628e-17 2.8643e-16 1.9859e-16 2.0318e-16 7.6462e-16 1.5992e-16 1.3428e-16 9.1066e-17 1.2411e-16 2.5873e-16 1.8755e-16 4.2629e-16 1.9185e-16 8.7006e-17 1.9623e-16 7.4921e-18 2.0988e-16 1.1322e-15 4.4727e-17 4.7487e-17 1.2100e-16 1.7168e-16 8.0374e-16 4.5165e-16 1.4223e-16 5.2925e-17 7.1314e-16 1.0202e-16 2.9239e-16 5.4804e-17 1.6561e-16 2.5106e-17 2.5120e-16 2.1430e-16 4.0534e-17 1.7676e-16 2.6347e-17 4.9228e-16 9.1955e-18 1.2082e-16 8.5673e-17 3.2438e-16 6.5886e-16 5.2690e-17 4.1148e-16 1.6532e-16 2.7243e-16 1.5991e-16 2.2425e-17 4.8245e-23 4.0084e-17 4.7986e-17 1.3111e-16 5.9065e-16 4.7219e-17 1.7217e-16 3.7217e-16 8.7689e-17 2.8750e-18 2.9760e-18 7.0854e-17 6.5522e-17 4.6238e-17 1.1059e-16 9.6145e-17 4.4148e-16 4.4855e-17 3.1187e-17 1.9901e-17 1.7912e-16 9.5802e-17 1.0544e-17 4.4330e-17 1.0278e-16 2.0664e-16 5.9082e-17 4.8245e-17 9.5672e-18 9.5491e-17 2.0586e-17 4.5862e-17 7.5614e-17 2.6965e-17 1.6570e-17 3.5711e-17 9.0947e-17 1.2492e-17 8.0347e-17 4.1823e-17 4.7198e-17 2.1886e-17 1.7339e-16 1.0022e-16 4.6333e-17 2.8690e-17 1.5987e-18 5.2314e-17 7.5638e-17 8.2333e-17 1.8701e-17 4.4029e-17 2.3053e-17 1.0563e-16 6.8538e-18 3.4815e-17 2.8207e-17 2.0221e-17 1.2212e-17 3.0226e-17 4.7608e-17 6.0206e-17 1.2126e-17 9.9048e-18 3.8082e-18 6.5440e-17 8.9715e-17 7.6353e-17 1.3146e-17 1.0611e-17 6.0656e-18 1.5845e-16 1.9478e-16 3.6905e-17 2.2123e-16 1.0505e-16 7.9283e-17 1.0329e-15 2.5817e-16 1.3613e-16 1.2981e-16 2.8290e-17 1.1078e-16 1.3686e-15 4.2358e-16 3.4877e-17 9.3397e-18 7.6891e-18 5.4526e-18 6.5555e-18 1.0013e-17 1.8023e-17 1.4051e-17 2.2752e-17 2.2420e-18 1.0786e-17 2.1981e-17 1.1535e-16 2.0605e-16 7.9178e-17 4.8722e-18 8.3263e-16 1.0938e-16 2.3336e-16 5.8455e-16 7.6830e-16 1.4815e-16 2.2783e-18 3.2326e-16 5.7256e-17 1.1767e-16 2.7916e-17 3.4709e-16 1.9498e-16 1.0351e-16 2.0444e-17 3.5538e-17 1.0187e-16 5.7516e-17 3.1028e-17 9.1633e-17 1.3640e-16 1.3398e-16 1.0521e-16 3.3464e-16 4.9057e-17 8.9905e-17 4.2753e-16 2.9354e-16 1.8786e-16 2.6593e-16 3.0250e-16 1.8241e-16 5.4370e-16 2.4414e-17 6.9823e-16 2.7786e-16 1.3983e-16 9.3089e-16 5.9916e-17 1.7126e-16 3.3338e-16 1.7156e-16 3.6465e-16 2.9295e-16 4.0534e-17 2.1903e-16 4.8930e-17 3.0767e-16 1.7839e-16 7.9084e-16 1.8206e-16 7.6221e-17 1.0444e-15 2.7925e-16 1.8230e-16 8.7185e-16 1.1897e-16 5.2054e-23 4.4049e-16 1.2505e-16 6.8291e-17 1.9776e-16 1.6857e-16 1.3142e-16 5.4374e-17 8.1852e-17 5.5547e-17 5.5676e-17 4.4921e-23 4.4640e-18 1.0628e-16 1.6301e-16 1.4350e-17 1.2760e-16 5.2682e-17 4.0249e-17 4.0005e-17 1.7326e-17 7.7393e-18 1.3383e-17 6.2222e-17 7.6682e-18 1.0847e-16 6.4819e-17 3.6676e-17 1.1645e-16 4.0068e-17 2.0330e-16 7.2793e-17 3.8005e-17 3.4980e-17 1.0813e-16 1.7491e-17 4.3227e-18 1.0713e-16 7.5789e-17 1.4241e-16 8.3118e-17 6.3755e-17 1.7898e-16 8.2825e-17 4.5898e-17 2.1096e-16 6.5258e-18 6.5621e-17 2.5845e-17 9.6814e-17 2.5648e-16 1.7784e-17 1.5304e-16 9.0181e-18 3.1920e-17 1.2078e-17 3.5955e-18 1.2434e-19 1.2767e-17 3.6782e-17 5.7323e-18 4.9545e-17 1.3061e-17 2.1998e-17 8.2610e-17 4.0720e-17 1.1425e-17 2.4722e-17 3.0552e-16 9.0532e-17 6.2534e-17 2.2548e-17 2.7632e-16 1.5807e-17 2.4141e-16 1.2302e-16 6.1591e-17 3.5739e-17 1.0391e-16 2.0671e-16 3.1996e-16 1.5326e-16 8.8044e-17 3.5363e-17 6.0251e-17 1.4122e-15 1.7360e-16 7.9521e-17 1.2182e-18 4.6989e-18 1.5813e-17 1.5733e-17 1.0783e-16 3.6904e-17 1.4051e-17 2.8958e-17 5.6050e-18 1.1984e-18 8.6632e-17 6.1068e-17 2.7710e-16 3.1824e-16 6.4963e-18 1.5139e-16 4.7876e-16 2.4465e-17 2.5697e-16 4.3355e-16 1.0794e-16 5.6957e-17 4.4013e-16 4.6350e-16 9.7077e-17 3.5360e-16 4.9536e-16 5.9217e-16 8.0505e-17 4.7431e-16 9.5953e-16 3.5653e-16 5.4640e-16 1.6161e-22 2.6951e-17 1.2503e-16 4.2629e-17 4.5797e-16 3.8149e-16 5.7467e-16 1.3486e-16 3.0316e-16 2.2645e-16 4.9200e-16 2.2794e-16 4.0333e-17 3.3532e-22 5.9098e-17 5.4931e-16 3.8791e-16 2.6463e-17 4.1949e-17 1.2216e-15 6.9503e-17 9.1341e-17 6.0008e-16 3.4940e-16 1.8030e-16 1.7498e-16 4.6325e-17 4.6112e-17 3.5380e-16 3.7294e-18 2.1885e-16 6.0777e-16 6.9609e-17 2.2157e-16 1.9450e-16 1.9144e-16 7.4657e-17 7.1349e-17 8.1041e-17 3.9644e-16 4.1646e-17 4.6315e-17 1.0837e-16 2.7629e-17 1.5849e-17 1.4297e-16 1.4309e-17 1.9899e-16 1.6525e-16 1.2805e-16 2.8750e-18 3.1248e-17 5.0830e-17 7.9905e-18 2.4873e-16 7.0888e-17 4.2146e-17 1.4590e-16 4.3642e-17 6.9304e-18 2.3218e-17 5.1472e-18 1.2741e-16 2.9954e-23 2.7353e-17 1.2038e-17 2.7955e-23 7.1926e-17 3.4344e-17 1.2597e-16 1.2758e-16 9.7389e-17 7.7733e-19 7.1834e-17 9.8387e-17 4.3227e-18 5.1016e-18 8.7157e-17 1.9519e-23 4.3775e-17 2.0402e-18 4.6264e-17 8.3254e-17 2.1184e-17 3.5744e-17 8.7446e-17 6.5621e-17 1.1484e-16 1.5195e-17 6.2578e-17 2.4815e-16 1.7417e-17 2.1749e-17 7.3445e-17 2.4925e-17 1.1910e-17 1.8651e-18 5.1960e-18 6.9328e-18 2.2182e-17 8.6626e-17 8.4262e-18 1.3315e-17 7.3515e-17 3.4392e-23 8.8859e-18 2.2541e-17 6.7286e-17 1.4143e-16 1.4212e-16 4.5097e-17 4.2123e-17 1.9571e-17 9.2438e-17 2.3237e-17 4.2966e-16 9.4222e-17 1.0931e-16 9.3718e-17 1.8622e-17 9.7097e-17 2.0318e-17 4.1021e-17 1.0690e-16 1.1774e-15 2.4304e-16 9.2076e-17 1.0152e-17 8.5435e-19 2.6173e-17 2.4255e-17 6.0846e-17 2.5747e-17 8.4304e-18 2.2752e-17 3.4751e-17 1.1984e-18 5.1462e-16 1.0042e-16 2.8705e-16 1.0659e-17 8.1204e-18 1.3453e-15 6.9931e-16 9.4097e-18 3.9428e-16 5.7068e-16 8.6774e-17 6.0602e-16 1.2184e-16 2.5084e-16 2.7064e-16 2.2332e-16 1.1120e-16 6.8605e-17 2.3001e-17 4.8249e-16 4.5755e-16 7.8714e-17 4.4095e-16 1.3446e-16 1.6171e-16 4.2057e-16 3.5321e-16 1.2378e-16 1.5393e-16 1.5418e-16 1.9480e-16 7.7733e-18 3.2709e-16 2.5047e-16 5.3185e-16 3.9325e-16 1.1803e-16 2.8367e-16 4.6386e-16 1.0344e-16 2.6463e-17 4.6144e-16 4.6162e-16 3.3793e-16 2.9229e-16 1.1830e-16 2.2387e-16 1.0940e-16 6.4881e-17 7.9332e-16 2.2672e-16 2.7100e-16 9.6963e-17 3.2368e-16 7.6704e-16 2.4988e-16 4.0769e-17 7.0091e-18 1.2646e-16 1.3195e-16 1.3226e-16 1.3622e-16 7.4958e-17 6.2470e-17 4.3228e-17 1.2025e-16 1.1924e-16 7.0599e-17 2.2240e-16 3.8634e-17 2.3850e-16 2.6385e-17 4.4540e-17 4.4921e-23 4.4640e-18 1.0936e-16 1.8378e-16 1.7539e-16 1.7013e-17 3.9512e-17 5.2827e-17 3.6369e-17 4.1582e-17 2.0012e-16 9.4709e-17 3.0123e-16 9.5853e-18 2.3297e-16 5.1855e-17 2.3258e-17 2.5688e-18 5.6423e-17 2.2324e-17 4.6963e-17 1.2510e-16 2.8761e-17 1.2250e-16 3.4982e-17 1.3689e-17 3.6440e-18 8.6399e-17 1.4491e-16 1.3465e-16 1.8157e-16 4.6731e-18 5.1927e-17 8.1596e-17 3.1539e-18 8.8098e-18 9.7974e-17 6.0483e-17 3.5166e-17 2.1404e-17 1.7619e-17 1.9558e-17 5.5700e-18 1.8620e-17 1.0760e-17 1.5730e-17 1.5294e-17 1.4846e-19 3.5819e-17 1.3209e-17 2.8356e-17 8.8476e-18 6.9468e-18 1.5158e-18 2.7513e-17 6.3471e-18 1.6724e-17 2.0004e-16 2.5051e-16 1.1103e-23 6.6318e-18 2.4532e-16 7.3390e-17 1.5599e-16 1.8179e-16 4.1882e-17 1.9440e-16 1.2013e-17 3.1971e-16 3.1573e-16 1.1423e-17 7.6756e-17 2.8290e-18 2.1379e-17 2.0428e-15 6.9439e-17 1.6741e-17 3.4110e-17 8.1163e-18 2.2901e-17 9.8332e-18 3.3658e-16 5.1494e-17 9.3671e-18 1.5513e-17 8.9680e-18 1.2463e-16 1.1249e-16 1.0992e-16 2.0747e-16 3.5174e-16 8.1204e-18 7.2941e-16 3.5503e-16 2.2207e-16 6.2378e-16 1.0587e-15 1.6085e-16 1.4125e-16 3.9785e-16 4.8804e-16 7.9427e-17 1.9231e-16 3.3698e-17 1.5526e-16 4.4470e-16 9.4044e-17 1.1461e-15 6.9454e-17 7.6688e-17 2.0685e-17 1.8866e-16 2.2733e-17 1.1023e-15 3.0944e-17 2.6771e-17 4.2049e-16 7.4921e-18 8.0842e-16 1.9290e-16 9.3928e-16 3.2291e-16 1.3108e-16 1.3949e-16 7.3282e-16 3.6621e-17 1.2930e-16 2.6463e-17 2.0975e-16 9.3344e-16 4.2421e-16 2.0552e-17 7.3128e-17 3.5567e-17 9.7240e-17 5.7410e-16 1.1388e-16 1.9406e-16 6.5868e-17 7.5893e-16 2.1517e-16 1.3181e-16 2.1240e-16 1.8435e-16 4.5559e-17 2.9858e-16 6.0941e-16 2.1231e-16 3.6210e-17 3.0816e-16 1.5057e-16 1.6674e-16 1.9300e-16 5.8165e-18 7.2040e-18 4.6212e-16 2.1177e-16 1.1290e-17 4.9993e-17 2.1018e-16 2.8750e-18 4.4640e-18 6.3152e-17 8.7896e-17 8.9288e-17 1.8431e-17 6.0716e-16 8.6787e-17 2.7883e-17 3.2342e-17 9.8400e-17 1.1324e-17 6.7160e-17 3.3549e-17 1.0092e-16 7.4079e-17 3.0415e-17 6.6788e-17 5.7240e-18 8.3713e-17 1.6594e-16 1.4410e-16 4.1198e-17 1.5123e-17 1.3847e-17 5.7636e-17 5.3202e-17 6.5178e-17 1.9987e-17 8.5889e-17 1.0201e-18 1.3131e-16 1.5020e-17 1.0709e-16 1.4963e-16 1.6315e-18 1.4528e-16 9.6452e-17 1.3676e-17 2.3199e-16 2.0880e-16 1.0992e-17 3.8327e-17 3.2363e-17 8.4437e-17 2.2247e-17 1.3304e-17 3.4442e-17 2.3109e-17 3.8631e-17 6.2321e-19 8.4262e-19 4.2260e-17 1.4400e-17 8.8043e-18 2.1580e-17 2.9085e-18 2.9097e-16 2.1015e-16 3.5282e-16 2.6196e-17 1.1154e-16 1.3173e-16 1.4031e-16 3.8819e-16 5.0751e-17 2.4368e-16 2.5827e-17 4.6261e-16 6.0945e-16 1.7230e-16 8.8044e-17 5.7995e-17 7.7744e-17 1.5195e-15 1.2499e-16 5.5804e-18 3.2486e-18 6.8348e-18 8.1789e-18 2.1633e-17 5.0063e-17 5.4927e-17 2.3418e-17 3.4129e-17 3.3630e-18 7.1904e-18 5.3014e-17 2.7141e-18 5.6273e-16 2.8931e-16 2.9233e-17 4.4384e-16 4.0165e-16 2.1266e-16 5.2374e-16 2.4803e-16 1.4815e-17 2.4377e-16 1.3676e-16 2.3720e-16 7.9427e-17 1.7990e-16 8.7615e-17 1.3721e-16 8.8172e-17 1.1449e-16 7.5519e-17 1.4817e-16 3.8823e-16 2.4823e-16 5.3902e-18 5.1150e-17 7.9168e-17 6.0650e-16 1.0708e-16 3.5041e-16 4.7200e-16 4.9749e-16 1.1742e-16 2.6836e-17 3.1341e-16 8.0667e-17 1.1803e-16 2.0093e-16 1.2207e-17 1.0344e-16 3.8371e-16 1.2585e-16 1.1400e-15 5.3206e-16 7.5356e-17 4.1726e-16 1.4018e-16 4.1125e-16 1.4746e-16 4.8834e-16 5.3221e-16 2.1078e-16 2.2749e-16 7.3564e-18 9.2631e-16 1.1602e-16 3.0134e-17 8.7614e-18 6.8321e-16 3.4724e-17 3.6545e-17 4.4141e-16 2.9983e-17 1.5697e-16 1.7291e-16 3.5630e-17 9.7427e-17 4.6538e-16 5.8776e-16 5.4374e-17 2.9919e-16 5.6936e-17 4.5376e-16 4.3125e-18 4.6500e-23 6.3152e-17 6.3924e-18 2.5511e-17 1.5170e-16 1.5410e-16 6.5405e-17 9.9407e-17 9.0095e-17 1.7026e-16 1.7501e-16 3.4568e-17 1.9746e-16 1.7921e-17 7.8709e-17 5.0095e-17 4.2813e-18 1.3574e-16 1.6583e-16 3.9919e-17 4.3548e-17 7.8510e-17 7.4102e-17 2.5508e-17 5.2593e-17 7.6523e-17 2.2737e-17 3.1855e-17 4.2113e-17 2.6063e-16 1.8692e-18 2.7894e-17 1.5691e-17 1.6470e-17 4.8944e-17 2.9911e-17 2.2221e-16 7.4890e-17 3.4282e-17 3.4580e-18 7.4663e-17 7.6521e-17 7.1524e-17 1.5482e-17 1.7078e-17 8.7037e-18 1.1134e-17 2.7153e-17 2.2431e-18 1.2464e-17 2.9492e-18 5.2680e-17 1.8189e-17 1.1005e-17 2.0311e-17 5.0171e-17 1.1578e-16 3.5013e-16 1.1370e-17 1.1241e-16 8.9974e-17 2.2996e-16 1.0688e-16 3.4627e-17 3.2717e-16 7.0396e-17 1.6878e-16 1.1964e-17 1.4898e-16 1.8182e-16 1.1288e-18 2.8290e-17 2.2740e-16 1.4323e-15 1.2638e-15 5.5804e-18 1.2182e-17 5.1261e-18 2.6718e-17 6.5555e-18 1.4557e-16 3.0038e-17 1.9671e-17 4.1368e-17 3.3630e-18 4.3143e-17 8.1460e-17 4.6141e-17 2.0037e-16 7.9178e-17 2.9721e-16 9.5649e-16 2.9586e-16 5.4576e-17 1.0985e-16 8.5097e-16 1.5238e-16 1.1391e-17 2.7601e-16 5.4530e-18 4.7068e-17 9.0881e-16 1.4827e-16 3.5025e-16 2.3001e-17 1.0631e-16 3.9092e-16 3.9357e-16 7.1895e-17 9.3084e-17 7.1690e-16 5.6833e-18 5.4808e-17 4.3321e-17 6.6927e-18 1.4016e-16 1.4984e-16 3.1093e-17 1.6774e-17 3.0415e-16 2.0894e-16 8.0667e-17 8.5841e-17 5.3188e-16 3.8146e-22 4.2670e-16 3.9694e-16 6.9916e-17 8.5948e-16 3.9545e-16 1.8040e-16 3.2262e-17 6.6951e-17 1.6612e-16 8.5329e-16 5.0378e-16 2.2288e-16 3.9897e-16 2.7970e-17 3.1265e-17 8.1464e-16 2.8736e-16 8.8629e-18 3.2242e-16 1.5631e-16 6.2504e-16 2.2623e-17 3.6727e-16 8.1621e-17 1.4256e-16 1.4975e-16 5.9383e-17 5.8165e-17 7.9244e-17 7.3650e-17 2.0891e-16 1.6935e-17 5.6936e-17 1.4336e-16 1.2937e-17 1.4880e-18 8.1636e-17 1.6940e-16 2.0728e-17 2.6654e-16 1.7780e-16 4.2764e-17 2.9095e-17 6.4683e-17 5.5281e-18 6.1767e-17 3.9506e-18 5.1761e-17 7.2626e-17 1.7594e-17 1.5297e-16 5.7369e-17 9.8126e-18 1.8337e-17 1.0175e-17 3.9589e-18 5.7522e-17 3.7807e-18 3.9355e-17 5.7636e-17 1.1661e-17 8.0336e-17 2.8794e-16 2.0281e-16 1.5811e-17 1.7290e-17 1.2445e-17 1.6084e-17 1.9484e-16 1.9904e-17 6.1348e-17 1.1191e-17 2.1468e-16 5.4234e-17 1.5693e-16 8.5656e-17 1.0808e-16 3.3988e-17 1.0760e-17 1.1461e-17 1.1066e-17 9.6498e-18 1.9450e-17 7.4770e-19 5.6089e-17 2.5279e-18 2.7787e-17 1.0610e-17 6.6032e-18 1.2694e-17 6.0351e-17 3.3522e-16 1.7234e-16 5.6494e-17 5.9355e-17 2.4734e-16 3.6883e-17 1.4320e-16 2.8795e-16 6.8489e-17 2.3718e-16 1.8079e-16 3.1239e-17 1.1343e-15 9.5193e-19 8.9173e-17 9.1943e-17 1.3605e-17 5.3334e-16 5.6246e-16 4.0458e-17 2.8425e-18 1.3349e-23 9.2694e-18 4.5888e-18 1.0013e-16 5.1494e-18 9.3671e-18 3.5163e-17 6.7260e-18 4.7936e-18 2.1205e-16 5.5640e-16 8.0715e-16 4.1569e-16 1.6566e-16 2.9245e-16 7.8896e-17 4.1403e-17 7.2578e-17 1.0768e-15 1.0582e-16 2.2783e-18 5.1970e-16 4.1170e-16 2.8829e-16 1.7060e-16 6.6048e-16 6.1023e-16 2.1851e-16 8.1778e-18 3.0207e-16 2.5929e-16 2.2048e-16 4.6542e-17 5.9292e-17 7.3883e-17 6.3334e-16 9.9020e-17 2.0078e-17 7.0082e-18 9.7397e-16 2.9538e-16 6.7096e-17 2.6836e-17 1.3296e-16 1.0083e-17 4.1847e-16 1.5366e-16 4.0283e-16 1.4223e-16 1.3231e-17 1.2585e-16 7.5491e-16 2.2528e-16 3.0371e-16 1.0754e-17 3.3475e-17 8.5085e-17 4.5220e-17 5.7906e-18 3.2471e-16 7.5277e-18 1.0442e-16 4.4138e-17 2.5812e-16 4.6406e-17 5.8495e-17 4.2055e-17 2.5115e-16 2.7953e-16 4.5420e-16 3.0175e-16 2.2154e-16 5.7664e-17 1.4667e-16 1.1431e-16 2.6174e-17 2.2765e-16 8.6647e-17 3.9922e-16 5.6450e-18 1.0415e-16 1.1831e-16 2.0125e-17 4.6500e-23 4.6209e-17 7.9905e-18 1.0364e-16 2.1692e-16 3.8195e-17 5.0311e-18 1.2123e-17 6.9304e-18 1.0061e-16 2.9854e-17 1.3827e-17 1.9458e-16 5.1876e-17 8.8895e-17 1.5207e-17 3.4250e-17 1.0712e-16 1.5148e-16 1.0175e-17 1.5836e-18 2.6429e-17 4.6881e-17 1.6762e-17 2.4495e-17 6.3405e-17 2.3494e-17 3.1230e-18 1.6291e-16 1.1731e-17 1.8692e-18 4.1198e-17 7.2965e-17 8.7608e-18 1.3052e-17 1.1842e-16 1.1457e-17 1.0637e-17 2.0007e-16 4.8247e-17 4.0686e-17 7.5327e-17 4.1821e-17 2.8768e-17 1.3146e-17 4.9735e-18 4.7655e-17 2.1761e-17 1.0219e-17 3.1161e-19 9.6902e-18 1.8525e-17 2.3494e-17 3.3016e-18 1.7772e-17 1.2725e-16 1.6609e-16 2.1597e-16 4.5835e-17 1.7276e-16 4.4481e-17 1.2759e-16 4.5394e-16 1.0160e-16 1.9955e-16 2.4801e-16 1.8770e-23 6.2745e-16 1.1343e-15 1.3517e-16 3.5274e-23 4.2435e-18 1.1856e-16 8.8554e-16 4.1663e-17 9.7657e-17 4.0607e-18 3.4174e-18 2.7263e-18 5.7688e-17 2.0333e-16 1.1157e-17 7.4937e-18 1.0342e-18 4.4840e-17 1.0786e-17 3.1032e-17 3.7591e-16 2.4158e-16 2.8931e-17 9.7444e-17 1.7375e-16 4.2496e-16 2.4465e-17 3.2170e-16 1.6556e-15 4.6561e-17 6.8348e-18 1.0195e-16 2.7265e-17 1.6180e-16 1.5199e-16 6.8744e-16 2.8886e-17 1.5718e-16 9.8133e-17 3.3317e-16 1.1576e-16 3.3071e-16 5.0679e-16 2.2639e-16 3.1258e-16 6.0898e-17 1.9340e-22 1.2047e-16 1.2615e-16 5.7689e-16 5.4413e-17 3.6903e-16 3.7571e-16 1.5196e-16 6.0500e-17 1.9314e-16 2.5294e-15 2.0752e-16 4.0407e-22 2.6463e-17 4.4746e-16 2.2010e-15 1.3182e-16 4.7726e-16 7.9796e-16 1.3390e-16 8.5490e-16 3.3424e-17 7.5278e-17 3.9772e-16 1.8819e-17 2.1817e-16 9.7472e-17 1.8306e-18 8.9243e-17 4.4314e-17 3.5046e-17 7.7278e-17 7.5873e-16 2.5755e-16 4.3107e-17 4.5641e-16 1.1533e-16 1.0143e-15 2.6722e-17 1.9485e-16 2.2765e-16 1.4008e-16 3.6488e-16 1.4113e-17 3.6106e-17 1.1553e-16 1.4375e-18 8.9280e-18 3.6967e-17 2.5570e-17 1.4350e-17 1.5879e-16 1.3171e-16 6.4147e-17 2.9095e-16 1.0396e-17 1.8795e-16 1.1427e-16 2.9926e-16 4.1025e-16 1.2262e-17 7.8709e-17 7.8720e-17 8.5626e-19 2.3223e-16 3.4283e-17 1.5185e-16 8.2345e-17 1.0105e-17 9.2250e-17 5.7575e-17 1.5778e-16 1.8220e-17 1.2202e-16 8.3072e-17 1.3188e-16 2.0708e-16 6.0750e-17 1.5449e-17 1.7261e-17 5.8522e-17 3.3934e-17 1.3429e-17 4.1032e-17 1.9102e-16 1.7413e-17 2.8487e-17 7.1380e-19 3.8459e-17 2.6304e-17 2.8768e-17 6.8089e-17 4.2275e-18 3.8599e-18 4.1789e-17 2.2431e-18 6.2009e-17 6.3197e-18 3.2418e-17 2.7284e-17 2.2011e-18 2.5388e-17 1.5997e-17 1.8670e-16 3.9376e-16 5.8626e-17 9.7488e-17 1.0278e-16 2.5969e-17 3.8296e-16 1.0662e-16 1.2515e-16 1.2401e-16 5.9462e-17 2.1868e-16 6.9071e-16 4.1885e-17 4.5151e-18 2.4047e-17 2.8571e-16 4.4612e-16 1.3193e-16 4.4643e-17 1.6649e-17 3.4174e-18 1.4177e-17 1.3111e-17 1.0783e-16 5.1494e-17 4.6835e-18 3.1026e-18 7.8470e-18 9.5873e-18 1.0861e-16 2.7141e-18 3.1121e-16 7.4610e-17 1.6403e-16 3.9567e-16 1.9903e-16 7.5277e-16 1.4712e-16 6.1907e-16 4.6561e-17 1.1619e-16 2.5115e-16 2.7265e-16 8.5310e-17 4.0633e-16 4.7514e-16 7.2216e-18 1.7634e-16 5.3155e-17 4.9753e-16 1.3891e-17 5.2723e-17 2.0685e-16 1.0780e-16 1.1935e-16 2.6795e-16 4.0227e-16 3.3464e-17 6.3073e-17 3.1467e-16 2.9538e-16 4.6128e-16 1.7891e-16 2.0894e-16 1.4117e-16 3.2190e-17 2.4821e-16 6.1034e-17 5.1721e-17 5.2925e-17 1.3983e-16 5.3558e-17 6.1354e-16 4.1103e-17 4.3016e-18 7.2600e-16 4.0517e-16 1.9661e-18 1.5828e-16 1.3449e-16 9.2215e-17 4.7176e-16 2.8506e-16 6.9931e-16 7.6749e-17 1.9498e-17 1.4719e-16 4.2679e-16 6.1809e-16 2.0535e-16 9.1386e-17 1.2326e-16 3.3637e-17 1.5593e-16 1.2619e-16 1.1633e-17 1.6569e-16 1.2708e-16 2.0462e-16 3.8104e-17 1.4859e-16 1.6842e-16 4.4921e-23 1.4880e-18 7.7015e-18 2.2693e-16 4.4644e-17 3.5444e-17 2.2390e-17 6.6662e-17 4.8491e-18 9.2405e-18 5.8598e-17 6.2796e-17 1.5802e-17 6.9014e-17 1.4525e-16 6.4819e-18 1.0556e-16 8.5626e-17 7.3595e-18 1.3554e-17 1.0175e-17 1.4727e-16 4.8972e-17 2.3365e-16 4.1541e-17 1.4409e-18 6.5591e-18 6.1389e-17 3.7476e-18 5.5412e-19 1.1680e-16 4.4394e-17 3.0469e-17 3.8836e-17 3.5744e-17 2.6430e-17 7.3251e-18 1.0551e-16 4.7756e-18 6.3848e-17 3.6227e-18 1.3448e-16 1.3262e-19 7.8174e-17 2.9646e-17 2.4719e-17 4.6005e-18 5.3445e-18 4.7567e-17 1.0966e-17 4.6741e-18 4.6344e-18 4.6312e-18 1.2126e-17 3.4392e-23 6.3471e-18 3.3447e-17 1.0487e-16 3.0468e-16 2.6293e-16 1.4391e-16 3.4776e-16 5.1561e-17 1.4485e-16 2.3601e-16 1.7738e-17 1.4025e-16 4.0242e-17 4.0545e-17 2.2016e-15 3.3318e-17 5.5310e-17 2.6876e-17 1.5160e-16 3.7568e-16 3.0553e-16 7.1150e-17 2.2334e-17 3.8446e-18 2.5627e-17 9.1121e-17 1.5404e-17 1.7165e-17 3.3722e-17 6.1018e-17 2.5783e-17 5.9920e-18 9.1804e-17 1.4385e-16 4.1778e-16 4.7203e-17 4.8722e-18 1.4106e-16 1.6138e-17 7.1514e-17 1.8046e-16 7.8644e-16 5.7144e-17 2.5289e-16 4.7245e-16 8.5203e-23 1.5003e-16 3.3809e-16 1.3614e-15 3.6830e-16 1.0121e-15 6.9511e-17 8.4847e-16 1.7132e-16 2.4444e-16 1.1894e-16 3.2341e-16 2.9553e-16 1.9031e-22 3.1563e-16 2.2086e-16 2.8033e-16 5.3943e-16 6.6073e-16 3.3548e-17 7.1564e-17 2.9679e-22 3.1510e-22 2.3606e-16 9.4557e-16 3.6621e-17 2.5860e-17 4.1348e-22 5.5932e-17 2.7289e-16 9.5866e-18 1.8268e-17 4.3016e-17 1.6528e-16 2.6133e-16 2.6739e-16 6.0802e-16 3.7274e-16 6.2104e-17 2.3122e-16 1.2874e-16 1.7739e-15 3.0164e-16 2.9956e-16 4.1880e-16 1.8793e-16 4.1669e-16 6.9609e-17 4.0865e-16 2.6652e-17 3.0594e-16 6.1754e-18 1.9597e-16 7.4161e-17 4.0342e-17 1.8774e-17 2.3467e-16 1.1996e-16 4.1661e-17 1.5589e-16 4.4921e-23 2.6784e-17 4.7749e-17 1.6301e-16 4.9427e-17 1.1909e-16 2.7658e-17 3.0187e-17 5.6977e-17 3.6096e-23 8.5132e-17 1.0294e-17 9.8765e-18 2.0129e-17 1.9996e-16 6.9449e-17 4.6517e-17 5.7369e-17 5.6423e-17 5.6606e-17 2.1916e-17 2.2962e-17 1.2049e-16 1.9357e-16 1.8293e-16 1.4409e-16 4.2270e-17 1.3794e-16 1.2492e-17 3.4355e-17 4.5904e-18 1.6356e-17 4.6348e-17 1.5927e-16 5.0112e-17 1.0343e-16 3.9067e-17 7.6469e-17 1.2048e-16 3.3919e-17 2.0419e-17 9.9503e-17 4.5090e-18 3.2363e-17 1.0431e-17 4.1685e-17 4.9487e-17 1.3807e-17 4.6218e-18 1.4455e-17 5.2973e-18 1.6431e-17 5.7890e-18 3.7894e-18 4.6222e-17 6.7279e-17 2.6176e-17 3.2673e-16 2.9414e-16 2.5937e-17 3.2761e-16 4.9536e-17 4.5540e-17 2.4802e-16 9.6136e-17 2.2320e-16 1.1047e-16 1.8019e-18 1.2230e-16 1.7547e-15 1.0376e-16 6.0953e-17 1.4711e-16 5.4420e-17 1.2076e-16 3.0553e-16 1.1579e-16 6.0911e-18 1.7087e-18 6.9248e-17 1.0358e-16 1.2323e-16 1.8881e-17 2.8101e-17 1.3445e-17 3.1388e-17 4.6738e-17 5.9479e-17 2.0628e-16 1.5063e-16 3.3346e-16 1.4941e-16 1.0322e-16 2.1159e-16 8.0923e-17 1.2554e-16 2.2182e-17 4.0212e-17 2.0277e-16 3.0834e-16 1.1724e-16 2.5593e-16 1.3648e-16 9.0985e-17 1.6249e-16 1.7251e-16 4.3751e-16 7.0632e-16 7.8714e-16 1.5337e-16 1.8617e-16 1.0780e-17 1.0230e-16 1.0779e-15 3.6514e-16 5.3542e-17 2.1025e-16 4.4953e-17 4.4308e-16 3.8580e-16 2.9520e-16 2.8492e-17 6.0500e-16 6.4381e-17 3.6641e-16 1.8310e-16 2.5860e-16 6.6157e-17 4.6144e-16 6.7330e-16 6.9503e-17 1.0733e-16 2.0433e-16 3.4103e-16 5.9560e-16 1.7695e-16 3.8411e-16 1.9213e-16 6.2104e-17 2.4241e-17 4.8920e-16 5.8031e-16 1.4636e-16 1.6130e-16 1.6822e-16 1.6158e-16 1.6668e-16 9.7452e-17 2.4140e-17 1.4492e-16 6.5193e-16 6.1754e-18 4.3053e-17 2.1812e-17 8.3567e-17 1.8052e-16 9.8731e-17 2.6532e-16 1.9442e-17 3.4658e-16 4.3125e-18 1.4880e-18 3.6967e-17 3.1962e-18 2.4076e-16 1.2335e-16 1.7122e-17 7.0436e-17 4.8491e-17 8.0854e-18 6.1915e-17 4.5296e-17 8.8889e-18 8.1475e-17 5.6592e-18 8.3339e-18 5.0095e-17 4.2813e-18 3.6797e-17 2.4636e-16 1.1819e-16 5.4633e-17 3.6534e-17 1.8450e-16 7.0693e-17 2.7377e-17 1.5305e-17 6.8968e-17 1.2492e-17 4.8763e-17 2.1677e-16 4.0656e-17 3.9052e-17 3.4914e-17 1.8923e-17 3.8502e-17 2.1365e-18 6.7677e-17 1.6758e-16 1.0883e-17 3.8697e-17 9.8504e-17 5.3843e-17 4.2855e-17 5.0508e-18 2.3146e-17 4.2275e-18 1.3361e-18 4.2559e-17 1.7197e-17 1.8073e-17 1.0533e-17 6.9468e-18 7.5789e-19 1.1005e-18 7.6165e-18 6.5440e-18 8.9109e-17 1.9743e-16 2.9526e-16 1.3496e-16 1.5501e-17 3.6507e-17 3.0414e-16 4.7840e-17 3.4491e-17 7.7977e-17 1.0271e-16 3.9215e-17 4.8502e-16 9.5193e-17 6.6597e-17 5.9409e-17 3.2652e-16 7.2453e-16 3.4025e-16 1.5346e-17 6.4972e-18 1.1961e-17 3.8168e-18 1.2521e-16 3.3889e-17 1.2015e-17 4.4025e-17 2.4821e-17 4.4840e-18 3.7450e-23 1.0732e-16 6.5140e-17 1.7052e-16 4.0655e-16 1.9326e-16 3.7847e-16 1.1781e-15 5.4576e-17 1.0396e-15 9.1752e-16 4.0212e-17 1.9365e-16 3.5061e-16 1.1997e-16 4.5597e-16 3.2568e-16 2.5611e-16 3.2497e-17 1.1980e-22 2.7804e-16 3.5094e-16 1.8521e-16 8.6273e-17 1.6548e-16 2.8568e-16 3.1827e-16 8.5258e-17 7.5503e-16 2.0078e-16 7.7090e-17 8.7658e-16 1.6324e-16 5.0322e-17 3.1309e-16 1.1397e-16 8.0667e-16 3.7555e-16 1.1820e-17 9.7655e-17 9.0511e-17 3.9694e-16 4.0551e-16 8.4162e-16 3.1875e-16 6.7135e-16 1.0969e-16 6.9043e-17 1.0534e-15 2.4183e-16 3.1269e-16 1.3834e-16 1.3174e-17 1.6782e-17 3.1265e-17 2.8741e-16 2.5345e-16 9.9264e-17 7.1844e-17 4.0044e-16 5.9900e-16 3.9329e-16 2.2071e-16 1.6324e-16 3.3637e-17 4.9403e-17 1.7815e-17 3.3590e-16 2.3629e-16 2.7727e-16 5.8666e-17 7.4796e-17 5.5547e-17 1.2805e-16 2.8750e-18 1.6368e-17 2.9266e-17 1.5981e-18 1.8655e-16 1.9565e-16 1.0536e-17 1.9621e-16 2.6670e-17 8.6629e-17 7.6287e-17 6.1767e-18 9.3827e-17 1.7254e-17 1.4903e-16 1.5371e-16 1.0287e-16 9.7613e-17 1.2511e-16 1.4351e-17 2.5830e-17 3.9589e-17 2.8761e-17 1.9282e-16 2.1135e-17 1.5490e-16 1.8949e-17 9.7767e-17 2.6858e-17 1.1082e-18 8.8237e-17 3.2712e-17 1.5320e-16 1.7261e-17 1.6821e-17 4.0134e-17 1.0805e-16 4.0766e-17 7.3153e-17 2.0678e-17 3.7379e-17 3.7403e-17 2.8248e-17 3.8126e-17 6.1269e-17 2.2921e-17 2.9841e-18 2.0784e-17 3.8323e-17 2.4923e-19 1.1841e-17 3.0334e-17 9.2624e-18 1.8947e-17 3.4392e-23 2.9197e-17 1.2725e-16 1.9640e-16 2.3778e-16 9.5578e-17 2.5068e-16 1.7354e-16 2.4915e-16 9.8628e-17 1.1618e-16 2.8184e-16 9.6930e-17 8.7091e-17 1.5487e-16 3.0582e-15 5.6164e-17 1.0046e-16 3.2534e-17 6.2195e-17 8.0168e-16 2.4304e-16 1.5346e-17 3.2486e-18 4.6562e-17 4.3621e-18 1.1144e-17 8.0871e-17 2.0598e-17 1.8734e-18 1.0342e-18 9.1922e-17 2.3968e-18 1.9395e-17 1.5878e-16 2.8421e-17 3.0301e-16 1.3967e-16 2.2536e-16 5.0386e-16 8.8451e-17 8.4348e-17 8.0661e-17 3.1746e-17 2.7567e-16 4.9732e-17 5.4257e-16 4.1184e-17 2.1092e-16 1.3479e-17 5.4162e-17 1.4568e-16 3.7209e-16 1.7769e-17 1.3428e-16 5.2723e-17 1.8617e-16 5.7136e-16 2.1028e-16 8.5258e-17 1.8566e-17 2.4094e-16 8.4098e-17 8.9905e-17 1.0883e-16 4.1096e-16 4.6517e-16 6.6482e-17 3.1258e-16 8.5841e-17 1.1820e-16 9.3993e-16 1.6809e-16 1.9847e-16 4.3348e-16 1.0916e-15 1.4380e-16 6.1198e-16 6.2374e-17 8.3688e-17 2.2892e-16 5.1512e-16 3.8604e-18 5.7640e-18 8.0923e-17 1.1934e-16 6.9886e-17 9.9038e-16 8.9243e-18 1.8612e-16 6.3082e-17 2.4764e-16 1.0417e-17 2.9584e-17 2.4829e-16 1.7823e-16 2.7551e-16 4.7859e-17 2.3753e-17 2.6465e-16 2.7952e-16 2.6572e-16 7.5837e-17 9.4554e-17 9.1653e-17 5.1500e-17 4.4921e-23 5.9520e-18 3.3886e-17 6.0728e-17 2.0409e-16 6.6635e-17 3.4507e-16 4.5280e-17 3.6369e-18 3.6962e-17 9.9506e-17 7.2061e-18 1.5111e-16 1.8691e-16 2.5466e-17 3.9817e-17 2.6836e-18 4.4525e-17 1.6354e-18 2.8702e-17 1.8785e-17 3.4047e-17 9.2502e-17 1.1418e-16 1.8949e-17 7.4927e-17 8.3082e-17 8.1094e-17 5.4965e-17 8.2010e-17 7.4466e-17 1.9160e-17 9.1837e-17 4.8251e-17 1.1074e-16 4.0786e-17 9.7668e-18 1.0658e-18 2.1208e-16 9.9944e-17 1.8014e-16 1.6674e-16 1.8169e-17 3.0294e-17 8.7840e-18 1.2247e-17 8.0820e-18 1.0392e-18 3.8515e-19 1.4954e-17 9.3481e-19 1.9802e-17 4.9207e-17 2.6526e-17 6.8233e-17 6.8548e-17 2.8358e-17 6.7286e-17 1.9379e-16 1.0020e-16 3.2363e-16 8.9300e-17 1.2796e-16 1.8075e-16 7.4266e-17 2.1335e-16 1.0018e-16 1.3814e-17 2.0139e-16 1.9612e-15 2.1894e-17 6.7726e-18 1.1316e-17 1.2439e-16 4.1594e-16 6.5967e-16 9.2076e-17 3.0862e-17 1.2815e-17 3.7623e-17 6.6866e-17 2.5417e-17 5.1494e-17 1.9671e-17 9.1010e-17 9.3043e-17 2.1571e-17 2.5860e-16 1.6285e-17 4.4407e-23 3.1976e-17 1.9489e-16 3.6470e-16 2.9586e-16 3.4251e-16 4.5116e-17 2.3392e-16 4.0001e-16 1.2758e-16 2.4866e-18 3.8171e-16 2.7358e-16 1.7680e-16 1.4490e-16 4.3330e-17 9.5840e-17 3.2711e-17 7.5519e-17 2.8708e-16 7.6688e-17 4.5508e-16 8.6243e-17 4.7740e-16 1.9031e-22 5.5699e-17 2.6771e-17 4.3451e-16 7.4921e-17 2.8761e-16 2.0129e-16 5.2778e-16 2.2794e-16 1.8150e-16 3.2190e-17 2.2457e-16 3.8146e-22 9.0511e-17 2.6463e-17 1.6780e-16 3.3435e-15 1.2702e-16 2.0095e-16 3.8715e-17 2.5316e-16 6.3307e-23 3.8535e-16 2.7602e-16 2.8820e-17 2.9546e-16 1.6036e-16 6.6207e-17 1.9222e-16 1.9633e-17 8.3311e-17 1.0514e-17 2.7750e-16 5.7642e-16 2.9062e-16 1.1897e-16 6.8295e-17 4.4850e-17 1.8526e-17 2.0784e-17 2.2394e-16 1.6857e-16 2.3972e-16 2.8618e-18 4.9394e-17 9.0265e-17 4.1757e-18 2.8750e-18 5.9520e-18 3.8507e-17 8.4699e-17 2.5830e-16 1.8147e-16 1.1195e-16 1.0062e-17 8.0011e-17 5.8908e-17 9.0661e-17 3.2119e-16 1.3827e-16 2.0129e-17 6.1308e-17 8.0561e-17 1.6102e-17 2.9113e-17 4.3830e-16 5.5809e-17 5.2442e-17 1.0056e-16 8.2397e-17 2.3440e-17 2.4779e-17 3.1700e-17 1.2244e-16 1.8189e-17 2.9981e-17 3.8234e-17 4.9984e-17 1.5889e-17 2.3174e-17 4.3544e-17 6.3078e-18 2.9692e-17 2.1365e-18 5.6752e-17 9.2256e-17 5.6048e-17 1.9266e-17 5.7104e-18 1.3262e-16 2.9555e-17 1.0102e-17 6.4044e-18 1.3553e-17 2.3753e-17 4.6218e-18 2.0686e-17 9.3481e-19 5.0558e-18 2.4893e-17 1.3642e-17 3.4392e-23 2.7927e-17 2.7630e-17 2.4853e-16 1.8179e-18 1.0482e-16 7.1292e-17 3.6798e-16 1.5054e-17 1.7869e-16 2.3100e-16 1.5619e-16 2.4314e-16 8.4688e-17 6.6068e-16 1.3035e-16 2.2846e-17 1.5125e-16 8.4870e-18 2.2351e-16 2.3447e-15 4.3052e-16 4.1853e-17 6.9032e-18 1.9223e-17 3.3806e-17 9.0466e-17 3.8510e-17 3.7762e-17 2.1544e-17 4.1368e-18 5.8292e-17 4.7936e-17 9.6976e-17 7.1925e-17 4.2631e-17 8.2681e-16 5.0752e-23 4.6448e-16 7.8538e-16 1.9760e-16 5.7474e-16 5.4446e-17 2.9630e-16 3.1896e-17 2.1385e-16 3.8989e-16 2.1181e-16 1.2407e-16 1.2468e-16 9.0270e-17 9.2006e-17 6.3787e-16 4.8865e-16 6.0193e-17 2.7320e-16 9.8256e-17 3.6114e-16 1.8187e-16 4.5065e-16 2.3517e-16 3.1456e-16 1.6820e-16 1.4984e-17 1.8656e-16 1.5097e-16 6.2619e-16 1.0447e-16 2.5208e-16 2.2533e-16 1.2056e-15 3.6621e-16 2.8446e-16 1.4554e-16 1.8178e-16 1.1477e-16 2.3966e-17 6.4395e-16 1.0109e-16 5.5862e-16 2.0866e-16 3.1654e-16 2.8760e-16 1.8637e-16 6.9631e-16 1.5663e-16 2.5380e-16 1.9222e-16 6.4077e-16 1.2585e-16 2.9263e-16 1.9846e-16 3.0557e-16 7.8310e-17 7.2419e-17 2.3320e-17 2.7230e-16 3.7052e-17 8.1652e-17 5.8165e-18 2.1180e-16 1.0398e-16 1.0589e-16 2.6814e-17 3.4717e-17 3.2013e-17 4.4921e-23 2.9760e-18 9.2418e-18 5.4335e-17 4.3528e-16 1.5879e-16 6.4536e-17 2.1760e-16 8.7284e-17 7.2769e-17 2.1560e-16 5.5590e-17 5.9259e-18 9.5853e-19 3.0182e-17 5.1855e-17 8.4982e-17 1.3786e-16 7.1142e-17 2.8702e-17 2.0351e-17 7.1260e-18 1.5547e-18 1.2854e-17 1.1661e-17 2.8818e-17 1.0640e-16 2.1221e-17 8.0574e-17 8.0902e-17 9.9458e-17 8.8789e-18 2.2230e-16 1.4985e-16 3.5043e-19 6.1995e-18 5.2497e-17 1.1191e-16 7.9014e-17 1.2298e-16 6.2079e-17 8.5084e-17 2.3739e-17 1.5221e-17 1.9984e-17 2.5505e-17 1.6164e-18 8.0019e-17 1.2132e-17 5.4831e-18 3.4277e-17 2.5279e-18 3.1840e-17 3.7136e-17 1.1005e-18 5.4585e-17 5.0171e-17 2.4247e-16 6.8536e-16 6.6442e-17 5.5708e-17 1.8871e-17 3.3120e-17 2.6205e-16 1.3031e-16 5.6713e-16 1.5541e-16 2.4025e-18 2.5922e-16 7.1272e-16 3.5983e-16 5.6438e-18 3.5363e-17 1.9825e-16 1.4491e-15 3.2636e-16 4.8828e-17 1.9898e-17 1.4097e-17 5.9979e-18 2.0322e-17 3.3119e-17 2.0598e-17 2.8101e-18 9.8249e-17 3.2509e-17 1.1984e-17 3.8791e-17 1.6556e-16 2.2594e-16 1.0415e-15 5.2295e-16 2.4256e-16 9.3062e-16 9.4097e-17 4.1193e-16 7.7031e-16 9.1006e-17 3.6452e-17 7.7706e-23 5.6166e-16 1.2649e-16 9.3052e-18 1.6849e-16 2.8886e-17 1.8401e-16 1.3084e-16 4.5755e-16 3.8431e-16 7.6688e-17 1.0343e-17 1.4554e-16 1.6482e-16 6.0898e-18 7.4265e-17 5.3542e-17 1.4016e-17 1.7981e-16 5.4413e-16 3.3548e-17 3.3098e-16 1.8995e-17 1.6133e-16 2.4679e-16 2.6003e-16 1.0986e-16 1.0861e-15 1.0188e-15 3.0763e-16 3.5450e-16 2.0611e-16 2.6717e-16 2.1078e-16 3.3475e-17 1.5194e-16 5.2691e-16 2.8374e-16 7.3011e-17 4.6860e-16 5.4076e-17 2.3173e-16 1.0819e-15 1.8920e-16 1.6130e-16 4.0828e-16 1.8968e-16 4.8961e-16 1.2182e-16 1.3449e-16 7.4958e-17 1.1213e-16 4.4772e-17 6.2352e-17 2.8065e-16 1.8874e-16 1.4441e-17 8.8715e-17 1.9758e-17 1.5276e-17 1.2527e-16 1.1500e-17 2.9760e-18 5.6991e-17 1.6780e-16 3.0294e-17 7.2306e-17 5.5316e-17 3.1193e-16 2.7276e-16 1.0742e-16 5.6386e-17 1.3383e-17 1.9951e-16 6.8055e-17 6.0365e-17 1.5186e-16 1.5207e-16 6.8501e-17 1.7908e-16 3.8269e-17 4.1484e-17 2.6920e-17 3.5757e-17 1.0586e-17 9.6201e-17 5.2593e-17 4.0812e-17 1.5916e-17 4.9968e-18 3.3247e-18 2.4482e-17 1.8225e-17 1.4848e-16 1.4122e-17 5.2565e-17 2.0883e-17 1.8313e-18 1.3855e-17 7.1634e-17 2.8115e-17 1.7718e-16 1.5703e-18 1.1273e-17 7.3888e-18 2.0972e-17 2.6966e-18 8.2063e-18 1.3510e-17 2.8116e-17 4.2369e-18 7.7901e-18 2.6964e-17 1.9683e-17 3.9410e-17 1.3206e-17 1.2694e-18 4.6535e-17 3.6613e-16 4.5812e-17 1.6664e-16 8.2898e-18 1.6613e-16 8.2423e-17 9.9454e-17 5.0346e-16 1.4634e-16 8.0685e-17 3.3095e-16 4.0412e-16 6.1707e-16 9.6145e-17 5.6438e-18 2.6027e-16 7.6577e-16 4.5619e-16 5.9718e-16 7.6730e-17 6.0911e-18 2.6912e-17 2.7263e-18 3.6711e-17 5.3144e-17 9.4405e-18 6.7443e-17 5.8949e-17 2.2420e-18 3.4754e-17 2.9739e-17 1.9542e-16 3.0979e-16 3.4108e-16 5.0346e-17 3.2514e-16 4.6262e-16 4.3849e-16 1.7340e-15 3.8112e-16 3.4709e-16 4.1464e-16 2.0390e-16 1.8268e-16 2.0886e-16 4.0633e-16 3.3698e-18 4.8024e-16 2.3001e-17 1.3493e-16 3.9980e-17 4.1672e-17 2.5403e-16 4.6542e-17 1.4554e-16 3.5805e-16 4.8719e-17 9.2832e-17 6.4250e-16 1.5418e-16 1.1238e-16 4.0421e-16 3.0193e-16 2.5047e-16 4.5587e-16 1.0083e-16 2.5752e-16 6.7372e-16 6.1034e-17 3.2325e-16 5.6895e-16 6.9916e-17 7.4216e-16 2.4206e-16 8.6774e-17 6.0223e-17 7.8039e-16 5.0646e-17 1.0617e-16 1.6214e-16 2.0174e-16 2.7100e-16 3.7294e-18 6.0138e-16 6.4988e-16 1.2673e-16 1.6308e-16 5.4759e-23 1.3172e-16 4.3579e-16 1.2356e-16 9.8283e-17 2.5652e-16 2.4187e-16 1.2814e-16 5.3445e-17 2.3557e-16 8.9330e-17 2.8882e-17 4.1925e-16 1.6935e-16 6.9434e-18 2.2966e-16 2.8750e-18 4.6500e-23 8.0095e-17 6.3924e-18 1.8176e-16 1.4178e-16 1.3566e-16 6.6662e-17 1.0304e-16 2.5411e-17 1.6474e-16 4.0148e-17 1.3630e-16 8.5309e-17 1.6129e-16 1.4631e-16 2.8626e-17 1.3700e-17 6.3782e-17 4.0661e-17 1.9568e-17 1.9794e-17 6.9959e-18 1.9735e-16 1.3701e-16 1.3689e-17 1.6762e-17 3.4863e-17 4.9344e-17 3.7680e-17 4.1313e-17 8.3648e-17 7.3384e-17 4.4328e-17 3.4342e-17 2.9366e-18 1.2666e-16 1.6519e-17 3.2995e-17 1.2878e-17 1.5643e-17 1.1278e-17 1.1936e-18 3.3205e-16 4.2822e-18 5.7527e-17 6.2169e-18 4.1865e-17 3.4664e-18 5.7323e-18 1.4022e-17 4.2131e-18 1.1578e-18 3.7894e-18 2.3111e-17 2.9197e-17 1.5633e-16 1.5458e-16 4.2030e-16 5.4717e-17 2.7854e-17 2.3589e-17 7.5648e-17 3.7140e-17 5.1576e-16 1.0446e-16 8.4475e-17 3.9281e-16 3.0575e-17 8.3884e-16 5.7116e-18 5.8696e-17 1.3155e-16 3.4985e-17 2.0797e-16 2.2915e-16 6.2779e-17 6.9032e-18 1.0679e-17 5.4526e-19 6.5555e-18 1.7175e-16 1.8881e-17 2.8101e-17 5.9984e-17 2.9146e-17 4.1944e-17 3.2325e-17 6.5140e-17 2.1173e-16 1.3399e-16 5.2782e-16 1.1698e-16 5.6662e-16 2.2583e-17 4.3547e-16 9.5987e-16 2.0953e-16 3.4630e-16 4.4759e-16 4.7986e-16 3.1771e-16 1.1787e-16 1.3816e-16 1.0580e-15 1.2267e-16 4.0889e-18 1.2883e-16 3.6116e-16 7.1895e-17 4.1371e-17 9.1633e-17 1.1935e-16 2.4359e-17 4.8891e-16 1.4055e-16 5.1860e-16 1.5733e-16 1.3215e-16 8.3869e-18 4.5622e-16 4.5587e-16 1.4117e-16 3.7555e-16 9.4557e-16 3.6621e-17 1.6809e-16 1.0585e-16 1.6780e-16 1.8822e-15 2.9718e-16 1.2377e-15 2.8391e-16 3.6823e-16 3.4439e-17 8.5132e-16 8.4929e-17 9.8949e-16 1.0727e-16 5.8271e-23 1.9310e-16 1.4956e-15 3.1771e-16 1.2053e-16 5.0991e-16 3.6883e-17 7.5005e-16 6.6128e-17 4.6038e-16 1.8323e-17 4.9976e-16 1.6210e-16 1.0986e-16 1.5850e-16 3.3138e-16 1.2997e-17 2.4182e-16 2.9213e-16 1.6664e-17 2.5054e-17 1.4375e-18 2.6784e-17 4.9289e-17 6.3924e-18 6.0588e-17 2.4102e-17 4.1158e-23 2.3898e-17 6.5463e-17 5.4288e-17 1.5036e-16 3.6031e-17 2.9630e-18 7.0931e-17 9.4320e-18 8.3339e-18 1.6996e-17 3.6819e-17 1.3411e-16 1.0524e-16 9.7057e-17 1.2431e-16 2.7207e-17 5.2930e-18 5.9761e-17 2.5216e-17 2.6965e-17 1.5916e-17 4.8095e-17 1.6624e-17 4.1313e-17 4.6731e-17 7.2955e-18 1.9614e-17 5.4667e-17 6.1669e-17 7.9050e-17 1.2256e-17 1.8668e-16 8.1624e-18 6.2079e-17 2.9979e-18 8.0367e-17 5.3643e-17 7.2468e-18 3.2809e-17 6.8386e-18 1.0392e-18 7.5105e-18 2.6169e-17 5.9517e-17 1.5589e-17 1.1578e-17 1.5158e-18 4.6222e-17 3.9669e-23 7.4893e-17 2.4126e-16 2.5087e-17 4.8677e-17 1.7574e-17 1.6512e-17 6.9250e-17 2.0716e-16 3.4491e-16 3.7841e-16 4.8736e-18 7.5679e-17 2.6653e-16 5.9760e-16 5.7116e-18 1.1513e-16 1.5277e-16 2.2546e-16 5.5682e-16 5.5551e-16 1.1161e-17 3.6547e-18 1.1961e-17 2.5082e-17 7.2110e-18 7.6250e-17 4.4628e-17 1.8734e-18 7.2394e-18 1.1210e-18 9.5873e-18 3.2325e-17 7.0432e-16 1.8473e-17 4.9639e-16 1.0556e-16 1.5311e-16 1.6676e-16 2.8041e-16 5.8651e-16 2.2787e-16 1.7143e-16 7.9739e-17 2.5363e-16 4.6350e-17 3.4713e-16 2.9466e-16 3.6394e-16 2.1665e-16 2.3001e-17 2.5351e-16 8.8845e-18 6.9454e-17 1.5817e-16 5.1714e-17 2.9646e-16 5.3423e-16 1.8878e-16 7.4265e-17 7.3620e-17 7.0082e-18 2.2476e-16 4.6640e-17 5.8709e-17 1.2524e-16 1.8045e-16 8.0667e-17 2.7898e-16 2.4821e-16 5.3710e-16 2.5860e-17 2.7786e-16 3.0763e-16 3.5450e-16 1.8215e-16 3.7450e-16 1.3980e-16 3.1383e-17 4.9633e-16 5.8983e-17 2.0074e-16 2.9589e-16 1.2044e-16 3.4869e-16 8.8277e-17 3.6613e-18 2.8915e-16 3.5097e-16 2.1027e-17 4.3908e-17 2.5002e-16 9.9192e-17 8.6213e-18 1.1160e-16 1.3775e-16 4.4463e-16 6.3095e-16 2.9083e-17 1.0374e-16 2.8882e-18 2.6185e-16 1.7076e-16 3.6106e-17 1.2805e-16 4.3125e-18 2.9760e-18 1.0782e-17 3.6756e-17 7.9721e-17 5.6711e-17 1.3171e-18 2.1382e-17 7.1525e-17 4.6202e-18 2.8746e-17 2.3574e-16 5.2346e-17 2.1567e-16 6.5081e-17 8.9821e-17 1.0108e-16 1.4642e-16 6.5417e-18 3.5080e-17 1.5028e-16 1.1877e-17 1.0572e-16 1.2930e-16 4.5185e-17 1.2032e-16 5.8303e-18 7.1999e-17 6.3085e-17 1.6624e-18 8.9767e-17 2.4300e-17 9.4841e-17 1.4515e-16 7.7095e-18 4.5354e-17 1.6787e-17 1.2070e-16 1.5412e-17 1.8139e-17 5.1870e-17 7.2664e-17 2.1484e-17 3.1033e-17 2.5474e-17 5.5055e-18 3.7301e-17 3.5778e-17 9.4363e-18 2.7416e-18 3.5835e-17 3.6654e-17 3.4734e-17 4.5473e-18 3.3016e-18 1.2694e-17 4.7263e-17 4.5524e-16 3.0905e-17 5.4007e-17 3.1833e-17 3.4035e-17 1.8065e-17 1.8116e-16 2.0275e-16 2.7100e-17 2.2093e-16 3.8440e-17 1.9275e-17 2.8780e-16 7.8058e-17 1.8850e-16 4.9508e-17 3.8677e-16 5.0315e-17 3.5414e-16 1.3951e-18 4.4668e-18 1.5378e-17 7.0884e-18 3.9333e-17 1.0475e-16 2.4030e-17 1.8734e-17 2.2752e-17 8.9680e-18 2.1571e-17 5.1721e-18 1.1128e-16 1.2931e-16 7.6133e-17 9.7444e-17 6.7608e-16 6.9931e-17 1.6373e-16 5.4336e-16 4.5574e-16 7.1959e-17 1.0936e-16 2.4866e-17 4.3079e-16 3.5595e-16 2.6055e-16 2.0893e-16 2.0943e-16 1.1117e-16 6.9511e-17 7.5074e-16 2.7781e-17 1.9651e-16 2.1720e-16 1.0241e-16 1.3072e-16 1.0962e-16 1.2378e-16 1.4724e-16 5.6065e-17 2.9219e-16 9.3279e-16 6.7934e-16 6.1724e-16 1.0447e-16 4.0333e-17 2.1460e-17 3.3095e-16 2.8076e-16 5.0428e-16 4.6310e-16 1.3983e-17 2.5504e-15 9.5866e-18 2.4434e-16 6.5385e-16 4.1844e-18 1.5802e-16 2.8312e-16 2.4514e-16 1.9598e-16 3.1993e-17 5.8271e-23 2.0782e-16 5.4919e-17 2.4988e-17 4.4314e-17 5.4321e-16 8.7816e-18 3.2988e-16 1.7402e-16 5.0004e-17 6.4963e-17 4.6452e-17 1.7445e-16 1.6776e-16 8.7248e-17 1.7578e-16 1.9640e-16 1.7886e-16 2.1169e-17 1.1109e-17 2.3662e-17 1.4375e-18 8.9280e-18 1.5403e-18 1.5981e-18 5.8994e-17 1.4178e-18 6.5853e-17 6.2889e-17 9.5770e-17 1.8019e-16 8.8449e-18 1.1942e-16 1.0765e-16 2.6072e-16 5.9422e-17 9.2599e-18 5.3673e-18 9.5901e-17 8.5861e-17 8.1321e-17 6.2617e-17 2.2962e-17 1.1660e-17 1.7391e-17 7.2879e-18 3.3141e-17 2.1864e-17 1.6446e-16 1.0931e-16 8.8659e-18 1.9024e-16 2.9440e-17 4.8064e-17 1.4515e-17 2.8735e-17 1.0572e-16 1.7245e-16 8.0199e-17 1.7583e-17 1.6869e-17 3.0134e-17 5.5819e-17 1.1936e-17 1.5960e-17 3.6454e-17 5.6179e-19 1.4050e-17 1.1877e-18 1.9258e-18 1.2960e-17 1.0906e-17 8.8476e-18 1.6209e-17 9.0947e-18 3.3016e-18 1.5233e-17 2.3268e-17 1.0426e-16 2.5560e-16 8.3497e-17 6.9966e-17 1.1626e-16 7.1132e-17 3.5490e-17 1.3076e-16 2.7494e-16 1.5704e-16 3.4236e-17 2.8248e-16 3.0896e-16 6.8539e-17 2.7090e-17 4.1021e-17 1.2439e-16 4.1594e-16 9.9298e-16 5.5804e-18 7.3093e-18 4.6989e-18 5.2890e-17 1.3111e-18 3.6199e-17 5.2352e-17 6.5570e-18 3.2319e-23 1.1210e-18 1.4381e-17 6.8530e-17 4.0169e-16 1.3216e-16 4.7050e-16 2.4199e-16 3.1137e-16 2.9586e-16 7.7159e-17 6.4928e-16 5.7874e-16 1.0582e-17 2.6884e-16 2.3623e-16 5.0168e-16 6.4718e-17 1.2407e-16 3.3361e-16 2.8886e-17 1.1980e-22 2.9849e-16 7.5519e-17 3.5653e-16 3.4030e-16 1.6031e-16 4.3122e-17 4.9445e-16 4.6892e-16 5.3223e-16 3.2794e-16 3.8545e-16 1.9480e-16 2.3320e-16 1.7613e-16 1.1540e-15 2.3744e-16 1.2100e-16 1.3949e-16 1.0638e-16 2.1972e-16 4.2670e-16 1.4554e-16 1.3983e-16 8.9773e-16 1.6297e-16 3.8591e-16 2.7315e-16 2.9291e-17 6.8878e-17 3.5390e-16 4.6132e-16 2.6322e-16 2.7853e-16 4.4752e-17 1.0115e-16 3.9725e-16 4.9976e-16 2.4284e-16 4.5559e-17 5.4885e-23 4.7225e-16 1.0093e-16 1.4139e-16 1.6824e-16 3.0114e-16 4.5698e-16 4.6022e-17 5.6711e-17 4.2504e-16 6.3541e-17 4.2927e-17 2.9354e-16 1.0554e-16 4.3496e-23 5.7500e-18 1.1904e-17 3.0806e-17 7.8307e-17 4.3687e-16 2.4102e-17 7.6389e-17 1.1949e-16 6.4251e-17 5.8908e-17 4.9753e-17 5.6620e-17 6.9136e-18 2.5976e-16 1.2922e-16 6.8523e-17 3.2204e-17 7.7919e-17 7.3595e-18 1.1162e-17 1.1976e-16 4.7507e-18 2.1765e-17 7.5614e-18 2.2228e-16 7.4927e-17 1.6325e-16 3.9410e-17 1.6864e-17 2.7706e-18 5.7124e-17 7.4770e-18 6.0080e-17 1.0866e-16 7.6394e-17 7.6678e-17 7.6303e-18 1.1937e-16 8.6829e-18 4.7342e-17 7.3770e-17 5.6961e-17 1.6445e-17 2.0689e-18 8.5644e-18 3.5505e-17 4.2275e-18 1.2916e-17 2.9464e-17 2.3677e-17 1.9319e-17 1.8116e-17 2.8366e-17 2.2737e-18 1.1005e-17 1.2694e-18 7.7802e-17 4.0796e-16 9.7804e-16 9.0959e-17 2.0459e-16 5.2906e-16 1.5995e-16 3.5077e-17 8.2012e-17 1.9709e-16 9.0432e-17 1.1532e-16 1.0768e-16 1.0758e-15 1.0471e-17 6.2082e-17 2.4047e-17 4.4897e-16 5.7023e-17 2.2915e-16 1.8136e-17 1.1370e-17 3.3320e-17 5.8343e-17 4.5888e-18 1.8485e-16 3.5188e-17 4.6835e-18 6.3086e-17 3.5031e-23 3.1159e-17 3.4911e-17 5.6997e-17 5.5420e-17 2.3754e-16 4.3525e-16 1.8923e-17 2.3310e-17 1.6937e-17 9.8079e-17 1.1696e-16 1.8413e-16 1.1163e-16 2.2131e-16 2.9991e-16 4.3832e-16 8.9950e-17 2.4600e-16 1.4804e-16 1.1884e-16 1.7991e-16 1.2438e-16 2.7781e-17 1.8693e-16 2.6891e-16 7.0073e-17 5.2287e-16 2.6186e-16 9.2832e-17 1.6063e-16 9.1106e-17 9.7397e-17 3.4202e-16 4.1935e-17 3.6676e-16 9.7823e-16 5.0417e-17 4.2920e-17 2.9195e-15 4.8827e-17 5.1721e-17 5.9541e-16 4.1949e-17 5.3558e-17 2.1570e-17 5.0237e-17 4.8609e-16 7.9295e-16 2.2892e-16 2.2413e-16 1.0616e-16 2.7283e-16 7.7159e-17 2.4987e-16 1.2138e-16 2.7826e-16 6.0685e-17 1.0281e-16 2.1027e-16 9.1329e-17 3.2988e-16 2.9584e-17 2.6036e-16 8.8284e-17 2.3226e-16 1.1888e-16 8.6106e-17 9.8881e-17 3.1698e-17 1.8774e-17 6.4390e-17 5.2216e-17 2.3608e-17 4.3149e-17 4.3125e-18 1.1904e-17 2.0024e-16 1.7579e-17 2.7105e-17 2.5378e-16 4.2146e-17 2.4652e-16 1.0547e-16 1.7326e-17 4.0908e-17 4.6325e-17 1.7778e-17 4.2175e-17 2.2637e-17 1.5279e-16 1.3418e-17 8.5626e-18 9.5673e-17 6.5376e-17 3.1309e-18 5.6216e-17 6.5296e-17 1.0888e-16 8.1625e-17 4.2507e-17 1.6033e-17 1.5158e-17 4.1224e-17 1.4352e-16 1.2037e-16 4.3927e-17 4.7635e-17 5.4528e-17 1.2265e-17 1.6967e-17 6.4705e-17 1.0738e-16 5.1446e-17 4.8611e-17 3.8367e-17 1.4276e-19 6.2331e-17 8.5710e-18 6.2586e-18 3.1236e-17 2.4868e-18 5.0476e-18 3.4279e-17 8.4739e-18 2.0878e-17 2.8228e-17 1.2157e-17 2.3684e-23 3.3016e-18 1.5233e-17 2.4722e-17 1.6973e-16 1.5634e-16 1.3928e-16 3.4817e-17 4.6503e-17 4.5916e-17 1.8199e-16 3.7224e-16 2.9071e-17 3.2761e-16 6.1865e-17 8.5742e-17 4.6301e-16 3.3318e-17 9.9332e-17 5.6580e-18 1.1273e-16 3.6897e-17 1.5346e-15 2.7902e-18 2.7613e-17 3.1611e-17 3.2716e-18 3.2777e-18 3.0808e-18 9.4405e-18 1.4051e-17 1.1480e-16 4.4840e-18 2.3968e-18 3.4911e-17 2.5377e-16 1.6768e-16 2.5733e-16 3.7841e-16 1.2730e-16 2.0979e-16 2.6912e-16 8.4740e-16 4.4565e-16 2.9630e-17 2.6428e-16 2.8347e-16 6.7890e-16 2.3534e-17 1.3648e-16 3.6731e-16 1.4443e-17 4.2169e-17 7.3600e-17 1.5104e-16 9.2605e-17 9.1066e-17 1.1377e-16 6.0370e-16 7.9567e-17 4.6892e-16 4.9510e-17 6.0235e-16 3.6442e-16 2.9968e-17 8.8615e-16 1.5935e-16 6.2619e-17 7.5979e-17 1.1092e-16 3.6482e-16 2.0093e-16 3.8146e-22 2.4567e-16 1.4554e-16 1.1186e-16 1.9740e-15 9.3469e-17 7.1246e-16 1.8712e-16 2.1341e-16 4.5784e-16 1.0420e-16 7.7208e-17 9.4146e-17 8.2805e-17 1.0442e-16 1.7471e-16 1.1258e-15 6.0685e-17 4.0769e-17 3.8550e-17 7.9034e-17 2.6564e-16 2.8888e-16 5.8625e-17 4.6640e-16 1.9382e-16 1.2351e-17 6.0868e-17 4.6532e-17 2.8816e-17 9.2424e-17 1.0589e-16 3.4717e-16 2.7496e-16 1.2388e-16 4.4921e-23 3.7200e-17 2.0332e-16 1.5661e-16 3.5077e-17 1.2760e-16 2.1073e-17 1.0062e-16 3.0307e-17 1.9520e-16 3.7591e-17 2.5736e-17 1.5802e-17 5.7512e-18 1.8864e-18 4.6299e-18 2.1290e-16 1.2244e-16 2.8620e-17 1.6982e-16 6.4183e-17 4.7507e-17 3.2259e-16 8.9225e-17 1.0859e-16 2.1614e-17 4.3728e-18 4.6231e-17 1.4990e-17 5.4858e-17 8.7727e-17 5.6544e-17 4.2915e-18 1.4122e-17 3.6445e-17 2.2514e-17 2.7164e-17 2.6245e-16 1.0962e-16 2.0315e-17 1.2037e-16 1.3362e-16 7.3603e-17 6.5760e-17 7.8507e-17 1.3820e-17 3.0712e-17 2.7613e-17 9.6288e-18 2.2680e-17 1.4022e-17 3.7918e-17 9.8413e-18 2.0463e-17 4.0720e-17 1.0155e-17 +|Pd|1|153636|2012-12-21T15:06:55.682 1.5183e+03 1.9219e-14 1.5800e-14 4.7204e-15 2.1731e-15 1.3937e-15 1.4409e-15 1.8954e-15 8.1049e-16 4.7407e-15 1.1062e-15 3.8772e-16 3.3635e-16 5.6683e-15 2.8957e-15 7.6250e-15 1.9448e-14 2.0680e-15 3.0262e-14 2.0562e-14 3.3456e-14 4.0514e-15 3.0009e-16 9.8207e-16 1.2612e-15 2.2046e-15 1.7330e-15 5.7501e-16 1.0227e-14 6.6437e-15 1.7465e-15 1.8384e-15 3.3644e-15 2.3084e-15 3.9789e-16 3.5783e-16 1.3382e-15 1.1991e-15 6.8496e-16 1.9647e-15 1.8517e-15 1.0990e-15 3.3440e-16 2.0049e-16 1.4845e-15 1.0415e-15 6.4424e-16 9.9256e-16 9.4354e-17 1.6429e-15 1.2382e-15 1.9340e-15 1.7769e-17 1.7132e-16 2.3150e-15 9.8256e-16 1.2505e-15 1.0969e-15 6.3943e-16 5.8793e-16 1.6063e-16 6.8680e-16 8.9156e-16 6.7627e-16 3.3548e-17 2.6836e-17 2.8492e-17 6.4533e-16 1.9314e-16 6.1462e-16 3.0517e-16 6.4651e-17 2.3816e-16 2.7966e-17 4.3662e-15 8.6279e-16 3.9208e-15 3.1531e-15 4.4062e-15 4.5460e-15 3.9283e-15 2.4591e-15 5.8601e-16 1.5150e-15 1.9094e-15 2.0267e-15 1.1551e-15 1.1548e-15 2.0544e-15 3.0577e-15 7.1307e-16 2.7970e-15 3.1846e-15 1.2691e-15 1.1344e-15 1.6274e-15 9.9732e-16 8.3285e-16 1.1677e-15 7.6218e-16 6.4119e-16 4.5788e-16 6.8305e-16 7.3878e-16 4.6072e-16 2.8750e-18 1.7856e-17 2.6801e-16 4.5706e-16 1.1193e-15 1.3398e-15 4.3068e-16 4.7418e-16 6.8736e-16 4.5278e-16 4.6546e-16 4.8590e-16 1.8765e-16 4.1983e-16 6.3289e-16 4.5095e-16 2.3527e-16 3.5278e-16 2.7148e-16 1.4510e-16 1.5967e-16 5.6058e-16 4.7339e-16 2.3743e-16 5.6846e-17 2.9178e-16 2.6601e-16 2.6223e-16 1.8051e-16 2.8482e-16 2.3513e-16 3.0048e-16 1.9054e-16 1.8124e-16 2.0010e-16 3.3934e-17 8.9122e-17 4.6361e-17 1.6085e-16 2.3036e-17 2.5194e-17 3.1693e-17 1.0291e-16 1.5664e-17 5.7096e-18 2.1685e-17 2.7106e-17 3.2958e-17 6.2010e-17 3.6388e-17 6.0140e-17 1.0154e-16 9.5519e-17 1.0156e-16 1.5518e-16 2.2215e-16 1.0107e-15 6.1043e-16 1.4398e-16 1.3111e-16 2.9843e-18 1.0473e-15 1.7971e-15 4.0978e-16 1.7496e-16 1.8231e-17 1.6299e-16 1.1952e-16 1.0608e-15 2.0992e-16 1.2051e-15 4.6505e-16 1.4004e-16 9.0571e-16 1.9790e-16 2.7776e-16 5.7618e-16 2.9765e-16 2.6741e-16 8.1244e-17 8.9810e-17 3.6199e-17 2.6262e-16 2.8757e-16 1.7581e-15 8.3066e-16 3.2357e-17 7.2409e-17 4.0712e-17 8.8104e-17 2.0099e-16 1.0881e-16 1.9956e-16 2.0979e-16 3.5945e-16 2.4520e-16 1.4116e-16 9.3123e-17 2.1188e-16 3.0336e-16 9.6791e-16 1.2944e-16 2.5124e-16 2.0893e-16 1.2277e-16 1.4951e-16 1.5129e-16 1.3327e-16 9.7235e-17 8.6273e-17 8.1190e-16 2.3178e-16 3.0122e-16 3.4103e-16 1.9804e-16 3.3464e-17 1.4016e-16 1.2737e-16 4.4308e-16 1.8451e-16 2.7731e-16 7.5979e-17 3.0250e-17 3.3532e-22 4.9642e-16 8.5448e-17 2.9739e-16 4.6310e-16 1.3983e-17 1.6577e-15 5.2726e-17 2.2835e-18 5.8072e-17 2.1550e-16 1.0332e-16 5.3085e-17 2.2583e-16 1.5179e-16 1.6937e-17 6.5264e-16 5.8851e-17 8.4942e-16 1.7849e-16 2.0916e-16 1.7523e-17 3.1614e-17 2.5522e-16 1.1485e-16 5.8625e-17 1.8323e-17 6.2470e-17 1.2351e-17 7.5714e-17 7.1253e-17 1.4120e-16 4.4190e-16 1.1733e-16 2.3145e-16 3.7078e-16 3.7581e-17 4.4921e-23 1.0416e-17 2.4645e-17 4.7943e-18 6.0588e-17 1.8147e-16 1.1722e-16 1.2326e-16 1.0911e-17 4.6202e-18 4.4225e-18 2.0589e-17 1.2839e-17 3.1631e-17 3.1126e-17 7.1301e-17 8.9455e-19 8.5626e-19 2.2078e-17 1.7221e-16 7.6706e-17 2.6129e-17 3.1093e-18 1.0662e-16 3.7897e-17 1.2248e-17 5.9032e-17 2.2737e-18 5.9337e-17 6.5940e-17 9.7418e-17 1.0141e-16 4.2915e-17 2.3537e-17 2.8735e-17 3.9807e-17 5.1276e-17 8.4729e-17 2.9088e-17 3.4101e-17 9.7647e-17 2.8552e-18 7.8643e-17 9.0143e-18 6.5880e-18 3.4269e-17 1.0817e-17 1.0541e-17 5.9699e-18 2.0188e-17 1.0595e-17 4.6766e-17 2.2577e-17 1.2884e-17 8.8043e-18 3.5544e-17 1.0689e-16 8.9109e-17 4.0067e-16 2.4161e-17 4.6423e-17 2.6857e-16 8.4681e-17 1.9891e-16 7.8367e-17 3.5476e-17 1.3321e-16 6.1264e-17 3.5493e-16 1.4813e-16 6.5683e-17 2.8219e-16 1.6974e-17 1.1273e-15 1.1203e-15 6.8745e-16 2.7344e-16 4.3856e-17 1.6660e-17 1.4722e-17 2.0978e-17 2.2721e-16 2.4889e-17 2.8101e-18 3.6197e-17 3.5031e-23 7.1904e-17 3.8791e-17 2.4699e-16 6.4515e-16 2.2079e-16 1.9651e-16 2.2020e-16 4.5724e-16 1.4679e-16 6.0613e-16 1.0486e-15 5.9260e-17 2.1643e-16 1.7406e-16 3.4354e-16 7.6485e-17 1.3648e-16 1.1457e-16 1.1555e-16 6.1337e-17 4.6204e-16 6.6634e-17 1.0650e-16 2.2527e-16 8.7913e-17 4.5278e-16 4.1488e-16 5.7853e-16 1.3615e-16 1.0039e-16 2.8033e-17 1.7232e-16 8.2397e-16 2.1806e-16 1.6996e-16 9.4974e-18 7.0583e-17 5.3651e-17 1.3238e-15 1.3428e-16 1.2930e-17 1.8524e-16 5.8729e-16 1.6195e-15 2.6123e-16 8.6774e-17 1.3550e-16 7.5319e-17 3.6465e-17 6.1932e-16 3.2814e-17 8.4539e-17 5.2694e-17 2.7038e-16 9.9311e-17 6.7734e-17 1.2673e-16 1.0813e-16 3.5747e-16 2.2657e-16 5.0350e-17 4.1591e-16 2.9830e-16 2.7651e-16 4.0045e-17 3.0723e-16 2.9692e-17 3.7226e-16 1.8730e-17 2.0795e-16 1.9746e-16 4.7983e-17 2.4858e-16 3.2153e-16 4.4921e-23 1.6368e-17 1.8638e-16 3.0364e-17 3.5077e-17 8.5066e-18 1.7122e-17 2.2514e-16 1.6972e-17 1.9636e-17 2.5429e-17 9.2650e-18 1.1753e-16 2.1088e-17 3.9614e-17 8.5191e-17 9.8400e-18 2.5688e-17 8.5043e-17 4.7836e-18 9.7839e-17 1.3539e-16 2.1765e-17 1.0586e-16 1.1734e-16 2.2190e-16 2.9152e-18 7.2757e-17 5.9337e-17 1.8840e-17 6.3755e-17 1.0748e-17 4.8493e-17 9.3364e-17 1.5419e-16 8.5162e-17 8.1797e-17 1.3882e-16 5.4268e-18 1.2552e-16 4.1661e-17 1.9986e-18 2.7319e-17 5.8076e-17 7.3566e-18 2.0674e-17 1.8153e-17 5.9383e-19 1.3480e-18 1.3209e-17 4.4560e-17 3.6654e-17 1.9104e-17 3.0315e-18 6.6032e-18 1.2694e-18 1.3815e-17 1.7882e-16 2.8032e-16 9.8065e-17 1.0943e-17 9.1659e-17 5.4572e-17 1.6094e-16 7.4722e-17 4.3853e-17 1.7220e-16 9.0094e-18 5.0515e-17 7.7620e-16 2.5702e-17 5.9825e-17 1.6974e-17 6.0834e-16 1.9153e-15 4.8607e-16 2.6507e-17 1.0558e-17 7.9027e-17 4.6347e-17 5.8999e-18 8.3952e-17 8.0674e-17 5.2456e-17 3.3094e-17 3.0267e-17 2.3968e-17 9.0511e-17 9.4995e-17 2.4158e-16 4.4157e-17 8.1204e-18 1.3762e-17 3.7117e-16 3.7639e-17 4.9628e-16 1.1293e-16 6.3493e-17 7.1196e-23 2.8596e-16 8.4521e-16 5.8835e-18 5.8933e-17 1.0109e-17 3.1775e-16 2.4918e-16 1.2267e-17 2.1323e-16 1.8984e-16 1.1503e-16 7.7570e-17 7.5463e-17 2.8417e-17 7.4905e-16 4.2084e-16 1.2047e-16 2.7332e-16 1.1987e-16 1.5547e-17 2.3483e-16 2.6836e-17 4.7487e-16 4.6383e-16 1.0730e-16 2.1275e-16 5.3710e-16 1.6809e-16 4.8956e-16 2.7966e-17 1.9128e-16 2.0132e-16 6.8506e-18 2.0863e-16 1.6738e-17 2.5728e-16 1.6712e-16 1.7372e-16 1.7100e-16 3.0111e-17 3.1700e-16 3.4023e-16 6.3340e-16 1.7135e-16 4.3605e-16 3.5046e-18 1.7563e-17 9.0283e-17 2.9584e-17 1.7243e-16 1.0827e-16 6.2470e-17 1.0035e-16 2.6722e-16 2.3266e-17 7.7803e-17 4.3324e-18 1.0159e-16 8.8909e-17 6.5268e-17 3.8694e-16 1.1500e-17 8.9280e-18 6.0071e-17 8.7896e-17 3.6672e-17 1.0066e-16 3.6351e-16 9.1818e-17 1.0911e-16 1.9636e-17 4.7541e-17 4.4266e-17 3.0864e-23 1.4857e-16 9.6207e-17 5.9263e-17 1.8786e-17 8.7338e-17 4.9063e-18 1.8098e-16 2.1133e-17 6.5718e-17 1.1815e-16 5.2930e-18 1.6252e-16 5.7636e-18 1.8730e-16 9.0189e-17 8.7445e-18 2.7152e-17 4.3353e-17 6.3087e-17 6.0510e-17 1.0592e-17 4.2052e-18 1.0115e-17 4.8834e-18 3.2240e-17 1.1722e-17 3.8635e-17 5.0882e-17 4.6968e-17 5.2252e-17 3.1624e-17 1.9764e-17 6.8538e-18 1.4672e-17 1.1877e-18 1.7332e-17 2.2929e-17 1.9319e-17 1.6431e-17 1.9683e-17 3.6379e-17 3.4392e-23 1.6502e-17 3.6356e-17 3.0430e-16 3.6976e-16 1.0553e-16 4.4102e-17 2.1904e-16 4.8174e-17 5.6330e-16 3.0390e-16 5.5185e-17 9.5847e-17 1.1412e-17 2.1402e-16 1.0141e-15 5.0452e-17 2.2575e-17 4.8093e-17 2.7599e-16 1.2344e-15 4.1663e-16 6.1384e-17 9.3397e-18 1.8796e-17 1.0905e-17 1.9666e-18 4.0282e-16 5.1494e-18 7.4937e-18 1.8616e-17 3.1388e-17 6.1119e-17 1.0991e-16 2.8499e-16 1.1510e-16 1.2943e-16 3.8978e-17 3.0449e-16 8.1586e-16 1.1480e-16 1.1769e-17 1.4620e-15 1.1429e-16 2.7111e-16 1.8649e-16 7.3615e-17 3.2947e-16 5.4901e-16 8.7615e-17 1.0110e-16 1.0734e-16 5.4791e-16 1.8657e-16 8.7975e-17 2.8758e-17 2.8960e-16 4.3122e-17 1.3640e-16 1.9031e-22 4.9510e-17 3.0787e-16 5.2561e-16 2.8470e-16 1.2748e-15 5.0322e-16 1.1629e-16 4.7487e-17 7.7642e-16 3.3532e-22 4.6097e-16 2.4414e-17 2.0688e-16 2.2493e-16 5.5932e-17 1.5838e-15 5.2007e-16 1.9182e-16 6.4525e-17 6.4858e-17 1.0332e-16 4.5220e-16 5.9836e-17 8.2618e-17 5.6458e-17 1.9952e-16 4.0828e-16 4.6132e-16 7.6749e-17 4.2365e-16 5.6073e-17 2.1076e-17 6.0768e-16 1.5488e-16 8.9662e-17 1.6657e-17 3.8443e-17 2.4393e-16 2.9692e-18 5.5257e-17 1.1815e-16 2.8016e-16 4.1496e-16 1.1290e-17 6.3463e-16 8.0729e-17 2.8750e-18 3.8688e-17 6.1612e-17 4.7943e-18 2.3438e-16 4.2533e-18 7.5072e-17 2.7168e-16 1.5760e-17 7.8544e-17 1.3046e-16 7.5150e-17 1.5012e-16 2.2621e-16 9.4320e-19 8.4265e-17 2.4153e-17 1.3101e-16 2.3714e-17 6.0592e-17 5.4790e-18 4.7507e-18 1.3525e-16 5.3686e-17 8.8913e-17 8.1411e-17 6.1947e-17 1.0610e-17 7.2454e-17 3.7680e-17 6.9875e-17 1.3879e-16 9.9562e-17 3.1383e-17 7.0087e-18 7.3089e-17 8.8512e-18 8.3263e-24 2.5180e-17 4.0449e-17 3.7873e-18 3.9116e-17 1.4774e-16 2.7191e-17 3.5356e-17 4.8426e-17 2.7354e-17 4.7507e-18 1.9835e-17 1.3957e-17 8.2264e-17 4.2131e-19 3.0682e-17 3.1831e-17 3.4392e-23 7.6165e-18 2.9085e-18 3.1461e-16 4.2612e-16 6.9640e-17 1.6082e-16 2.8306e-17 3.8765e-17 2.5173e-17 2.0959e-17 2.9071e-16 2.0036e-17 2.4626e-17 4.4533e-17 1.8368e-16 1.4089e-16 4.6280e-17 4.3850e-17 4.2759e-17 1.4759e-15 9.0965e-16 8.3706e-18 4.8729e-18 1.9650e-17 3.2716e-18 1.5733e-17 9.7045e-17 8.3248e-17 8.4304e-18 3.7231e-17 3.2509e-17 1.0426e-16 1.5128e-16 4.6141e-17 2.7000e-16 1.1420e-16 5.0346e-17 2.8213e-16 4.2138e-16 2.4465e-16 6.4143e-16 1.3712e-16 8.4657e-18 1.8226e-17 3.6553e-16 6.7890e-16 3.2947e-16 3.0397e-16 6.7059e-16 3.7913e-16 2.6835e-17 8.1778e-18 3.9980e-17 1.1576e-16 3.5947e-16 1.0343e-17 4.8512e-17 3.4100e-16 4.3847e-16 5.5699e-17 2.6771e-17 9.6012e-16 2.6222e-16 1.2437e-16 3.3548e-17 2.6836e-17 4.7487e-17 5.1425e-16 6.0089e-16 9.3375e-16 2.4414e-17 1.8102e-16 1.7201e-16 5.5932e-17 1.0559e-15 2.3966e-17 2.2835e-17 1.5056e-16 1.9667e-16 4.4568e-17 1.9268e-16 2.1232e-17 1.6331e-16 1.6937e-17 3.7294e-17 2.7586e-17 6.2974e-16 6.0685e-17 4.6087e-17 1.1390e-16 6.3228e-17 1.2674e-16 1.5662e-16 6.7246e-17 1.0661e-16 6.5673e-17 4.9403e-17 4.5577e-16 4.7986e-17 2.8816e-18 9.9644e-17 8.4422e-17 6.0684e-17 4.1661e-18 2.0878e-16 1.4375e-18 1.4880e-18 7.2394e-17 3.5158e-16 2.8700e-17 9.7826e-17 8.6926e-17 3.2828e-16 5.9402e-17 1.3399e-16 2.4324e-17 5.1472e-17 3.2593e-17 8.7226e-17 1.2545e-16 2.3150e-17 5.6357e-17 1.8838e-17 5.2334e-17 2.5513e-17 1.0723e-16 1.8211e-17 5.4413e-18 7.9395e-17 1.8220e-17 1.4409e-17 1.6398e-16 7.5789e-18 6.2460e-17 1.2745e-17 3.1622e-17 7.4770e-18 2.9611e-17 3.0991e-17 7.3591e-18 2.8061e-17 1.1873e-16 2.3181e-17 8.3139e-17 2.5757e-17 5.5492e-17 8.9938e-17 5.3047e-17 1.8620e-17 1.7052e-16 1.8988e-17 3.8856e-24 2.9395e-17 8.8585e-18 3.4893e-18 1.6827e-17 4.8451e-17 2.5472e-17 1.3642e-17 3.3016e-18 5.3315e-17 6.5440e-18 7.0317e-17 1.7198e-16 1.6273e-16 1.9166e-16 3.4541e-16 3.2743e-17 1.2999e-16 2.3419e-16 1.7098e-16 2.8104e-16 1.6217e-17 8.9730e-17 1.3569e-15 3.8077e-18 2.8219e-17 1.8954e-16 2.7793e-16 1.9623e-15 5.9718e-16 2.2322e-17 1.9085e-17 1.7087e-18 4.3621e-18 5.7688e-17 3.5429e-16 3.0896e-17 2.2481e-17 2.7923e-17 2.3541e-17 4.6738e-17 2.1981e-17 1.0178e-16 6.8636e-16 2.8474e-16 2.3874e-16 5.5050e-16 4.2855e-16 2.0701e-17 3.6485e-16 3.2264e-16 1.7355e-16 2.5289e-16 9.6977e-17 2.3993e-16 3.7654e-16 4.0943e-16 1.7523e-16 2.8886e-17 2.5685e-16 1.0631e-16 3.0207e-16 2.3151e-17 1.4858e-16 7.2399e-17 6.6838e-16 1.5345e-16 6.0898e-18 9.9639e-16 6.0235e-17 3.9246e-16 5.9937e-17 3.1093e-17 3.4386e-16 4.1149e-16 1.8995e-17 1.1092e-16 1.1267e-15 3.6936e-22 1.2207e-16 2.1981e-16 1.7201e-16 2.6568e-16 1.7853e-16 1.9173e-17 5.7088e-17 2.6025e-16 1.3390e-16 1.0940e-16 6.7044e-16 5.7134e-16 3.9195e-16 2.2207e-16 3.1513e-16 4.7817e-17 8.7871e-17 1.2316e-16 1.6130e-16 4.2055e-17 6.0593e-16 1.8057e-16 5.2207e-18 5.6556e-16 5.5635e-16 1.5537e-16 2.6245e-16 1.1580e-16 2.8210e-16 2.0315e-16 9.8200e-17 9.0146e-17 5.9273e-17 1.0554e-16 1.5728e-16 2.8750e-18 4.6500e-23 1.2476e-16 2.2373e-17 3.0294e-17 2.0132e-16 9.4828e-17 9.4333e-17 1.2971e-16 1.8481e-17 1.3157e-16 1.6677e-16 1.3235e-16 3.5466e-17 3.5370e-16 3.7039e-18 8.0509e-18 5.0519e-17 6.5417e-18 1.0364e-17 1.3071e-16 5.6216e-17 2.7984e-17 1.8147e-17 5.1016e-18 2.2334e-17 7.6523e-17 1.5309e-16 5.6214e-18 6.4278e-17 2.5502e-17 1.5421e-17 2.9182e-17 2.5891e-17 2.3479e-17 8.6793e-17 6.5011e-17 4.2364e-17 6.7727e-17 9.9944e-17 8.4144e-17 4.9252e-17 1.0875e-17 7.0341e-17 7.6860e-18 4.7190e-18 1.0569e-17 5.9383e-19 4.8144e-17 5.7323e-18 1.6515e-17 2.5279e-18 2.0840e-17 1.4400e-17 5.5027e-18 3.9669e-23 1.4542e-18 2.2732e-16 2.3269e-17 3.3399e-17 3.2894e-16 2.9991e-17 1.6560e-17 2.5833e-16 2.1278e-16 6.9474e-17 1.1372e-16 1.4355e-16 7.7101e-17 1.1148e-15 1.6183e-16 1.0610e-16 4.1021e-17 3.9649e-16 7.1447e-16 9.7215e-17 2.5112e-17 8.1215e-18 2.0077e-17 2.1810e-18 3.2122e-17 1.6559e-16 1.4590e-16 1.3114e-17 8.2736e-18 1.4573e-17 9.5873e-18 2.4309e-16 2.4292e-16 5.9683e-17 5.3750e-16 5.5868e-16 2.0472e-16 2.3490e-16 2.0701e-17 1.6242e-15 1.5729e-16 2.1588e-16 2.5517e-16 1.8649e-16 2.7538e-16 1.4709e-16 1.7060e-16 7.6157e-16 1.4082e-16 9.9673e-17 1.7991e-16 1.0084e-15 7.0380e-16 1.6775e-16 1.0860e-16 1.8866e-16 1.0230e-16 4.5065e-16 1.3615e-16 9.3698e-17 3.9246e-16 8.2413e-17 6.9959e-16 1.6774e-17 8.5877e-16 1.8995e-17 1.9158e-16 1.0730e-16 3.9005e-16 5.6152e-16 1.1637e-16 3.0432e-16 6.9916e-17 1.8771e-15 3.6669e-16 1.5071e-16 2.8176e-16 2.1131e-16 3.0793e-16 6.1440e-23 9.6510e-18 1.8253e-16 1.6373e-16 4.4752e-17 7.7242e-17 8.9335e-16 2.8558e-17 4.7860e-17 1.5771e-17 2.5818e-16 1.9098e-17 1.6341e-15 8.9662e-17 7.6624e-17 2.8672e-16 1.0498e-16 4.1568e-17 6.1074e-17 4.9131e-16 1.9062e-16 1.9174e-16 1.8205e-16 3.8883e-17 1.9765e-16 4.4921e-23 1.4880e-17 4.7749e-17 4.7943e-18 1.7539e-16 1.8714e-16 1.1854e-17 2.1131e-16 8.9709e-17 7.2769e-17 7.2971e-17 6.1767e-18 3.7531e-17 1.8691e-16 9.4320e-18 1.4908e-16 1.0287e-16 9.6757e-17 1.3002e-16 3.1891e-17 2.4812e-16 2.6604e-16 2.2542e-17 3.7807e-17 1.3628e-16 8.4293e-17 1.9459e-16 8.3368e-18 1.2492e-17 9.5863e-17 1.3771e-17 6.5423e-17 1.1587e-17 8.2380e-18 2.4285e-16 1.7293e-17 1.8618e-17 1.5187e-17 1.4761e-17 1.1300e-16 1.5973e-17 7.2807e-18 1.7240e-17 3.4284e-17 7.5872e-17 7.8089e-17 8.7037e-19 1.0541e-17 2.2724e-17 2.2431e-17 8.1017e-18 1.3166e-23 4.0523e-17 1.8947e-17 3.3016e-18 6.3471e-18 1.3088e-17 2.0428e-16 3.6104e-16 4.5479e-17 1.2700e-16 6.5711e-17 1.8442e-16 7.5931e-17 5.3763e-17 1.2121e-16 6.0649e-17 1.4415e-17 2.0771e-23 2.4463e-16 2.0181e-16 5.6438e-18 6.7896e-17 1.9630e-16 1.9220e-15 3.8192e-16 5.3014e-17 2.4364e-18 2.9902e-17 1.3086e-17 1.3111e-17 1.7252e-16 2.5747e-17 1.5924e-17 6.2052e-18 4.1477e-17 7.5500e-17 1.9395e-16 1.0857e-16 1.6484e-16 7.5981e-16 9.7444e-18 2.4944e-16 1.3628e-16 5.0812e-17 1.8635e-16 1.3712e-16 2.8995e-16 1.8226e-17 6.9625e-17 2.5902e-16 4.7068e-17 2.2022e-16 3.8416e-16 1.0832e-16 3.4502e-17 4.0889e-17 9.3287e-17 3.7042e-17 2.5403e-16 2.5857e-17 2.1022e-16 2.8417e-17 3.5930e-16 4.0846e-16 1.4724e-16 3.2938e-16 4.4203e-16 2.3320e-17 4.7806e-16 3.5782e-17 1.9945e-16 3.1258e-16 1.7168e-16 5.4370e-16 3.6621e-17 4.0084e-16 6.6157e-17 5.5932e-17 1.6756e-15 3.4991e-16 1.0733e-16 3.6564e-17 5.8582e-17 4.2543e-17 6.4291e-16 3.8604e-18 3.9772e-16 4.3284e-17 2.3681e-16 1.4529e-16 4.7231e-16 6.5147e-16 6.7358e-17 2.9088e-16 4.3908e-17 1.2154e-17 2.0709e-16 3.9658e-17 1.6990e-16 1.0412e-16 1.2351e-17 3.7115e-17 7.4161e-17 6.3395e-17 6.2964e-16 1.2449e-16 5.5039e-17 8.3321e-17 1.4476e-16 1.4375e-17 1.9344e-17 1.0166e-16 2.0616e-16 2.1844e-16 1.8998e-16 2.0414e-16 7.9240e-17 8.2435e-17 7.5079e-17 1.6584e-16 1.2456e-16 1.9457e-16 1.1694e-16 1.1413e-16 2.8243e-16 5.4568e-17 4.4525e-17 1.4065e-16 1.5547e-16 3.9136e-18 1.5044e-17 1.3603e-16 1.5123e-16 5.6846e-17 4.1786e-17 1.6033e-16 4.6989e-17 1.4428e-16 1.6125e-16 9.9458e-17 1.7664e-16 6.8234e-17 1.6868e-17 1.0723e-16 1.1616e-16 5.2497e-17 2.1049e-16 4.8190e-17 1.0666e-16 3.5733e-17 2.3841e-17 1.4986e-17 3.2067e-17 1.3615e-17 5.7303e-18 2.6857e-17 3.8599e-18 2.1183e-18 3.9877e-18 2.2436e-17 3.7918e-18 3.4734e-18 1.5158e-17 4.4021e-18 2.0311e-17 7.0530e-17 2.0913e-16 3.0141e-16 2.7323e-16 2.8219e-16 3.3698e-17 3.7260e-17 1.3866e-16 5.6953e-16 6.2576e-17 2.9675e-16 5.2855e-17 6.7131e-17 2.0112e-15 2.9748e-23 5.5310e-17 4.6679e-17 1.5354e-16 1.0063e-15 9.2354e-16 4.1853e-18 5.2383e-17 2.7339e-17 1.2541e-17 1.9666e-17 4.4672e-17 1.7165e-17 5.1519e-17 4.2402e-17 4.4840e-18 5.1532e-17 9.6976e-17 8.8210e-17 4.0215e-16 1.6140e-16 2.2575e-16 6.3823e-16 2.3848e-16 4.1967e-16 2.2990e-15 7.1385e-16 9.1006e-17 3.5313e-16 6.0673e-16 1.5814e-16 7.0602e-17 6.2035e-17 3.3024e-16 1.2999e-16 3.8336e-18 1.2778e-22 1.9990e-16 2.3151e-17 9.5859e-18 6.9813e-16 1.5632e-16 2.1597e-16 3.0449e-17 1.4234e-16 4.4172e-16 2.8033e-16 6.7429e-17 2.3320e-17 1.6774e-16 3.8466e-16 9.1175e-16 2.5208e-16 3.9701e-16 1.1465e-15 1.8310e-16 5.1721e-16 2.3816e-16 7.1314e-16 9.9210e-16 4.0743e-17 3.4709e-16 2.0648e-16 2.1131e-16 1.3371e-16 3.1261e-16 2.8760e-16 2.0174e-16 2.4465e-17 2.9835e-17 2.3908e-17 9.7024e-17 2.4988e-16 2.3043e-16 1.1390e-16 1.2646e-16 3.1078e-16 1.6184e-16 1.1208e-16 5.1638e-17 3.2676e-16 4.8245e-23 8.7590e-17 1.9340e-16 1.0230e-16 1.7329e-16 9.3007e-17 1.6935e-17 1.4303e-16 4.0782e-16 4.4921e-23 2.3808e-17 4.4669e-17 7.6709e-17 1.8176e-16 2.1692e-16 3.4243e-17 6.2889e-17 8.2435e-17 1.0973e-16 4.4225e-17 3.0883e-17 5.8271e-17 1.5049e-16 2.5466e-17 7.8709e-17 6.7091e-17 2.3975e-17 5.7240e-18 3.5080e-17 1.5654e-17 2.1378e-16 2.4291e-23 2.2684e-17 6.6320e-17 3.6527e-16 5.5388e-17 3.2589e-17 5.6839e-17 2.1057e-17 4.8454e-17 5.3741e-17 1.5278e-16 1.8555e-16 1.2265e-16 8.4835e-17 6.6231e-17 3.1973e-17 1.6932e-17 6.2760e-17 1.1527e-16 1.8416e-17 3.7531e-17 3.7092e-17 4.4140e-17 1.2359e-18 4.1280e-17 1.0095e-17 3.4664e-17 1.2462e-17 2.6486e-17 8.0471e-17 1.2736e-17 4.8505e-17 8.8043e-18 1.3964e-17 2.3268e-17 1.1760e-16 7.7661e-16 6.1468e-17 1.1573e-16 2.2342e-16 1.8065e-16 2.3522e-17 3.2805e-17 2.0842e-16 1.9494e-16 7.4478e-17 1.8877e-16 1.1351e-15 8.0914e-17 2.9348e-17 5.3751e-17 4.2759e-17 4.3942e-16 2.2915e-16 1.2556e-17 4.2232e-17 1.7514e-17 3.8168e-18 2.0978e-17 4.0821e-17 3.9479e-17 7.4937e-18 2.0684e-18 2.1299e-17 1.4381e-17 9.6976e-17 7.3282e-17 4.9452e-16 2.3144e-16 1.9002e-16 7.5693e-17 4.9310e-16 1.8067e-16 6.2770e-17 2.7223e-16 3.8096e-17 3.4630e-16 2.7104e-16 6.0255e-16 1.1767e-17 1.0546e-16 4.8862e-16 3.9719e-17 1.8401e-16 1.4311e-16 2.5765e-16 4.6302e-17 9.5859e-17 4.6542e-17 1.4554e-16 9.0933e-17 2.6795e-16 4.3940e-16 1.0039e-16 2.4529e-16 2.2476e-16 1.9433e-15 8.3869e-18 6.2619e-17 3.4191e-16 6.0500e-17 4.2920e-17 3.3095e-16 1.2207e-17 1.9395e-16 1.9847e-16 1.1186e-16 6.8860e-16 7.4895e-23 2.8087e-16 9.8938e-17 9.6241e-17 2.4715e-16 6.0949e-17 1.5056e-16 6.2636e-16 2.5782e-16 3.1700e-16 6.4368e-17 8.9885e-16 7.6749e-17 1.4535e-16 1.6822e-16 4.3030e-16 4.5142e-17 2.9410e-16 1.7760e-16 1.3159e-16 3.6841e-17 1.3895e-17 4.6022e-17 1.4541e-18 1.8154e-16 1.0542e-16 2.9762e-16 1.2419e-16 3.1940e-17 2.7838e-18 4.4921e-23 2.3808e-17 1.6789e-16 7.6709e-17 7.6532e-17 1.0208e-16 3.0292e-17 6.5405e-17 1.8063e-16 1.2937e-16 1.2936e-16 1.1221e-16 3.4568e-17 1.8116e-16 3.1974e-16 8.0561e-17 1.4402e-16 2.7400e-17 7.3595e-17 1.0843e-16 4.7746e-17 5.8592e-17 5.5968e-17 1.8677e-16 1.7637e-16 8.1411e-17 3.2796e-17 5.6084e-17 9.8687e-17 1.5127e-16 5.1004e-19 1.2991e-16 2.5749e-18 4.1582e-17 2.4530e-18 9.7887e-18 2.1273e-16 3.7568e-17 6.5122e-17 3.9905e-17 6.6031e-17 7.4235e-17 6.8962e-18 2.8077e-18 2.1960e-17 1.0112e-18 1.5667e-17 7.7198e-18 6.3550e-18 2.0936e-17 3.7393e-18 4.2131e-18 1.5630e-17 2.3684e-23 3.4392e-23 7.3626e-17 3.6356e-18 8.7896e-17 2.1451e-17 1.0304e-17 3.0308e-16 9.0648e-17 1.7200e-16 9.0788e-17 9.4314e-17 1.4535e-16 2.0415e-16 1.2613e-17 3.4230e-16 1.5998e-16 9.6145e-17 3.0477e-17 1.5984e-16 1.0690e-16 1.0734e-15 1.4582e-16 1.1161e-17 3.2892e-17 4.2717e-18 5.9979e-18 6.5555e-17 2.0795e-17 7.7241e-18 7.4937e-18 4.1368e-18 3.2509e-17 1.5939e-16 5.0428e-17 5.8354e-17 3.7373e-16 1.0659e-16 2.7609e-17 1.0769e-15 6.9931e-17 1.4867e-16 1.3770e-15 2.2182e-16 1.5450e-16 6.6070e-17 1.5417e-16 4.4442e-16 7.6485e-17 7.1340e-17 4.8525e-16 5.7773e-17 3.2202e-16 1.2267e-16 3.1096e-17 1.3891e-17 2.9716e-16 1.7583e-16 6.0370e-16 1.2503e-16 1.0353e-16 1.9804e-16 3.3464e-17 2.4529e-16 3.6711e-16 4.6640e-16 1.7613e-16 7.1564e-17 3.5140e-16 3.7308e-16 6.4381e-17 2.0093e-16 3.8146e-22 3.2325e-16 5.2925e-17 3.4958e-16 9.1814e-16 1.4140e-16 5.4804e-17 4.1081e-16 8.1596e-17 3.6870e-16 5.8983e-17 2.6058e-16 4.2462e-16 3.9332e-16 5.9670e-17 7.7242e-17 8.5674e-16 8.9243e-18 1.5421e-16 1.6647e-16 2.9858e-17 1.1841e-15 3.4804e-17 5.1383e-16 4.0644e-16 1.1052e-16 2.7326e-16 3.5185e-16 1.4687e-16 4.1783e-17 4.5129e-23 4.2927e-18 1.6088e-16 1.5414e-16 3.1457e-16 4.4921e-23 1.9344e-17 1.1706e-16 5.1139e-17 2.9337e-16 5.6711e-18 2.1468e-16 1.8867e-17 5.4553e-17 2.8876e-17 5.5281e-18 6.2590e-16 5.3333e-17 6.3263e-17 5.9422e-17 1.2038e-17 1.1271e-16 2.0550e-16 2.0443e-17 6.7768e-17 2.3482e-17 1.0214e-16 1.1427e-16 1.4367e-17 2.5508e-17 1.0879e-16 6.9235e-17 3.1073e-17 1.2617e-16 1.1359e-16 1.4842e-16 2.4300e-17 3.2486e-16 1.1769e-17 1.0951e-23 3.2629e-17 4.3646e-17 8.9258e-17 2.0188e-17 1.0303e-16 8.2333e-18 2.0700e-17 1.0159e-16 3.9900e-18 3.7662e-17 5.5055e-18 6.2169e-18 1.6330e-18 3.8708e-17 1.4206e-17 9.3481e-19 8.0049e-18 4.0523e-18 2.3494e-17 2.0910e-17 1.7772e-17 1.8905e-17 2.8006e-16 2.4833e-16 1.1015e-16 2.2150e-16 3.3125e-16 2.6345e-18 3.4252e-17 1.6767e-16 5.3214e-17 1.5108e-16 1.1112e-16 3.3632e-16 1.8165e-15 2.0276e-16 1.3545e-17 2.9705e-17 7.7744e-17 5.1656e-16 2.0832e-17 5.3014e-17 2.5989e-17 1.7087e-18 4.9073e-18 1.3701e-16 5.2374e-17 1.0041e-16 1.0304e-17 1.5513e-17 1.1210e-18 2.3968e-18 2.8058e-16 1.6692e-16 3.9363e-16 2.4363e-17 2.3549e-16 4.7308e-16 2.8690e-17 4.5166e-17 1.2750e-16 2.4602e-16 5.5027e-17 8.6574e-17 2.6109e-16 3.9534e-16 2.6476e-17 6.2035e-17 6.7396e-17 1.1284e-22 6.9004e-17 3.6800e-16 3.1096e-17 4.1672e-17 1.7734e-16 1.3963e-16 1.4554e-16 1.7760e-22 2.7404e-16 3.7133e-17 5.3542e-16 2.8033e-17 5.0946e-16 3.1093e-17 4.1935e-17 1.7891e-17 2.8492e-17 1.8150e-15 3.1117e-16 5.9098e-17 4.8827e-17 2.0688e-16 6.6157e-17 1.3983e-16 8.0847e-16 4.0024e-16 3.2426e-16 9.6787e-17 9.8334e-17 1.3978e-16 1.7498e-16 4.6132e-16 6.3404e-17 8.0923e-17 5.2211e-17 6.6575e-16 4.5583e-16 8.9243e-18 1.7726e-18 1.4369e-16 1.5807e-17 5.1739e-16 2.1753e-16 1.8967e-16 2.8317e-16 8.9700e-17 8.0280e-17 7.4229e-18 2.5011e-16 3.3138e-16 9.3868e-17 4.4357e-17 4.6571e-17 2.4996e-17 2.6167e-16 4.4921e-23 1.4880e-18 7.7015e-18 2.8766e-17 6.8560e-17 6.9470e-17 5.2682e-18 4.3142e-16 1.1517e-16 8.2009e-17 7.9604e-17 3.0369e-16 2.5679e-17 9.4894e-17 3.5842e-17 4.2595e-17 1.2524e-17 4.9663e-17 2.1342e-16 1.9374e-16 3.4440e-17 1.0531e-16 7.7733e-19 1.7013e-16 2.7694e-17 6.4841e-18 3.1338e-17 1.8189e-17 4.9219e-16 2.8260e-17 3.9273e-17 1.9160e-17 1.1458e-16 2.3537e-17 7.0087e-19 1.1094e-17 5.8296e-17 4.9558e-17 3.2952e-16 3.5588e-16 1.0028e-16 1.0421e-17 9.8138e-17 7.1080e-17 1.5372e-18 1.9663e-17 2.2008e-17 6.9627e-17 5.3922e-18 2.7416e-18 1.5580e-18 5.0558e-18 1.1578e-18 2.2737e-17 5.5027e-17 1.3964e-17 6.3259e-17 4.3282e-16 5.2574e-16 1.7765e-18 1.7110e-16 1.8197e-17 5.1938e-17 1.9313e-16 1.7496e-16 3.5131e-16 6.4981e-17 2.8830e-17 2.3263e-16 1.4559e-15 3.7125e-17 3.3863e-18 1.0467e-16 1.1467e-16 4.2600e-16 2.1526e-16 3.2087e-17 8.5275e-18 3.4174e-18 2.0175e-17 1.4815e-16 2.1566e-16 2.9180e-17 2.0608e-17 1.9650e-17 1.1770e-16 2.1571e-17 1.7326e-16 7.0568e-17 9.9472e-18 1.2029e-16 1.4779e-16 5.1953e-16 4.7696e-16 2.2019e-16 7.4344e-16 2.8433e-16 1.2275e-16 6.3791e-17 2.7601e-16 6.2164e-16 3.5007e-16 5.5831e-17 2.3926e-16 1.4804e-16 1.1884e-16 1.5129e-16 5.3751e-16 2.7781e-16 5.2723e-17 9.8256e-17 3.7731e-17 4.5467e-17 7.3078e-17 8.6643e-17 1.4055e-16 2.1024e-17 1.4984e-17 1.5547e-17 1.6774e-16 5.3673e-17 9.2125e-16 1.3108e-16 1.3949e-16 1.1820e-17 1.2207e-17 1.8102e-16 7.9388e-17 7.2712e-16 6.5545e-16 3.0437e-16 2.0095e-16 1.2905e-17 4.7912e-16 6.8878e-17 4.5613e-16 1.4091e-16 7.8775e-17 2.9735e-16 1.1188e-17 9.9311e-17 3.4050e-16 8.3888e-16 3.5451e-17 2.5759e-16 2.1076e-16 1.9967e-16 1.9142e-17 4.4486e-16 1.9989e-16 3.2036e-18 1.0035e-16 4.4537e-18 3.6353e-17 9.6534e-17 4.4768e-17 2.6901e-16 5.0805e-17 9.7208e-18 9.7432e-17 2.8750e-18 4.6500e-23 9.2418e-18 9.1092e-17 3.0294e-17 1.1059e-16 1.5805e-17 7.5467e-17 1.2123e-18 3.0032e-17 2.5429e-17 7.5150e-17 3.8518e-17 6.8055e-17 1.0375e-17 2.0464e-16 2.0485e-16 3.0825e-17 8.1772e-19 2.3918e-18 8.5316e-17 5.0674e-17 4.1198e-17 3.1758e-17 2.9152e-18 6.3400e-17 1.1151e-16 1.2505e-16 2.3735e-16 4.3775e-17 1.2751e-17 2.3833e-17 8.4113e-17 5.8059e-17 1.0793e-16 4.3397e-17 1.9839e-17 1.0844e-16 5.6222e-17 5.6230e-18 3.3098e-17 2.7124e-17 1.2864e-17 7.4331e-17 1.6470e-17 1.9887e-17 9.9471e-18 1.0837e-17 3.7938e-17 6.0563e-17 1.1218e-17 1.5589e-17 1.0999e-17 6.0631e-18 8.8043e-18 5.0777e-18 4.2900e-17 3.6310e-16 5.1920e-16 3.5318e-16 2.4869e-17 9.2333e-17 1.9194e-17 1.7497e-16 3.8227e-16 3.9418e-18 5.6858e-17 5.8861e-17 1.0568e-16 1.4457e-15 3.5221e-17 1.3207e-16 4.2435e-18 3.4985e-16 1.5933e-15 1.0416e-16 4.7433e-17 2.2334e-17 2.3495e-17 2.8354e-17 3.1466e-17 1.8485e-17 2.8322e-17 1.5924e-17 8.2736e-18 1.1210e-17 9.5873e-18 9.9562e-17 1.3571e-18 3.4105e-16 4.7812e-16 8.2828e-17 1.7375e-16 1.1655e-16 3.0111e-17 2.0989e-16 6.1706e-16 4.6561e-16 1.1391e-17 5.3462e-16 1.1724e-15 3.8243e-16 1.7680e-16 6.1330e-16 5.7773e-17 4.9836e-17 1.4311e-16 1.8080e-15 3.1486e-16 4.3137e-17 2.7925e-16 1.8866e-16 7.9567e-17 4.2629e-17 8.6024e-16 3.0787e-16 4.2049e-17 8.2413e-17 4.6640e-16 5.8709e-17 1.7891e-16 2.6593e-16 1.0587e-15 2.1460e-17 7.8010e-16 2.5634e-16 1.4223e-16 7.9388e-17 1.3983e-17 1.5659e-15 5.9437e-16 3.2198e-16 3.1617e-16 3.8497e-16 2.2284e-17 1.3763e-17 7.7208e-17 1.9982e-16 1.0162e-16 4.2142e-16 2.6115e-16 2.7460e-17 7.8534e-17 8.8629e-17 1.9275e-17 1.2646e-16 9.7228e-17 3.3064e-17 1.0001e-16 1.8156e-16 2.7551e-16 1.0961e-16 4.7655e-16 1.0470e-16 7.1464e-16 2.2384e-16 2.1463e-17 1.5665e-16 2.7774e-17 1.0857e-16 5.7500e-18 1.4880e-17 7.7015e-18 6.7120e-17 9.7260e-17 5.9546e-17 7.1121e-17 1.3836e-17 6.0614e-18 2.7721e-17 5.6386e-17 2.1104e-16 2.6173e-16 3.9300e-17 2.8296e-17 3.1484e-17 2.7731e-16 3.2538e-17 2.3305e-16 7.9727e-18 1.6828e-16 8.7096e-17 7.0737e-17 3.0246e-18 1.6033e-17 1.9596e-16 4.2999e-17 1.5537e-16 5.6839e-17 1.0473e-16 5.5084e-17 3.4581e-17 2.2316e-17 3.2168e-17 9.6018e-17 6.9826e-17 8.6681e-17 5.1690e-17 1.6932e-17 1.0158e-17 9.5836e-17 2.4740e-16 5.4904e-17 2.6600e-17 1.1529e-17 1.2696e-17 2.9841e-18 8.3137e-17 5.7773e-18 7.2277e-18 3.2095e-17 2.9492e-18 5.2101e-18 1.5158e-17 4.4021e-18 2.5388e-17 5.7442e-17 2.3035e-16 3.7667e-16 2.0004e-16 2.8517e-17 3.5720e-17 9.2208e-17 3.2890e-16 2.4695e-16 1.3254e-16 1.5595e-16 1.4715e-16 3.0575e-17 1.9528e-15 1.0757e-16 9.2559e-17 8.9114e-17 1.8075e-16 1.3048e-15 6.3884e-16 5.0223e-17 7.3093e-18 2.8193e-17 2.1810e-18 4.9166e-17 1.1399e-16 2.5747e-18 2.8101e-18 4.1368e-17 2.3541e-17 1.1984e-18 1.2801e-16 4.3426e-17 6.8210e-17 1.0659e-16 5.6842e-17 5.2469e-16 4.4110e-16 1.6749e-16 5.2374e-16 8.1064e-16 4.2329e-17 1.2986e-16 8.2058e-17 5.9710e-16 8.8252e-18 9.2742e-16 3.6394e-16 2.3109e-16 1.5718e-16 1.1040e-16 6.0415e-16 8.0103e-16 9.5859e-18 5.0162e-16 1.1858e-16 2.3302e-16 2.0096e-16 4.3321e-17 8.0313e-17 4.2049e-16 4.1207e-16 1.3992e-16 2.0967e-16 2.0575e-16 3.7990e-17 4.0333e-17 2.0387e-16 5.0825e-16 3.8146e-22 1.5516e-16 1.8524e-16 4.8941e-16 2.0276e-15 4.0743e-17 2.0552e-16 1.5916e-16 2.3014e-17 5.0241e-16 3.2637e-16 1.5442e-17 4.6112e-17 1.5055e-17 1.7901e-16 3.6046e-16 1.1075e-15 5.4795e-16 1.4181e-16 2.1203e-16 2.0373e-16 4.6878e-17 5.5687e-17 2.5174e-16 2.8984e-16 1.3295e-16 1.3123e-16 1.7667e-16 4.5442e-23 8.7889e-17 2.1662e-16 8.5853e-17 1.6935e-16 6.6657e-17 4.1757e-18 1.5812e-17 1.4880e-18 6.1612e-17 3.6756e-17 8.9288e-17 2.3535e-16 7.1121e-17 1.2452e-16 3.7581e-17 7.7389e-17 2.8857e-16 7.5150e-17 1.2839e-17 3.4507e-17 1.9807e-17 1.3427e-16 9.3033e-17 1.3015e-16 1.9625e-17 7.9727e-17 1.7220e-16 9.7389e-17 6.6850e-17 2.4953e-16 3.7897e-17 1.4049e-16 1.5305e-17 1.8189e-17 4.6221e-17 7.3144e-17 2.0402e-17 9.8135e-18 4.8064e-17 2.2557e-16 2.6703e-16 6.8521e-18 3.8152e-17 1.5694e-16 1.5195e-17 9.4321e-18 7.2782e-17 2.1557e-17 5.4241e-17 4.8766e-18 3.9967e-17 9.4381e-18 2.1386e-17 2.1378e-17 3.5049e-17 5.0096e-17 2.8356e-17 5.5192e-17 1.6209e-17 1.3642e-17 7.0434e-17 1.2694e-17 3.9264e-17 5.3465e-16 5.1993e-17 1.9897e-17 2.3211e-17 8.4245e-18 2.2092e-16 8.5423e-17 1.5947e-16 3.0105e-16 2.0361e-16 1.9220e-17 1.0635e-16 1.4923e-15 8.3770e-17 2.2575e-17 2.4047e-17 2.9543e-16 1.3216e-15 4.6524e-16 2.3717e-17 1.2588e-17 1.2388e-17 9.8147e-18 3.0155e-17 9.9356e-17 3.5188e-17 2.8101e-18 1.3445e-17 2.9146e-17 5.9920e-18 1.8102e-17 2.9991e-16 1.9610e-16 1.9186e-16 3.0857e-16 7.7758e-16 1.4345e-17 1.5620e-16 3.2170e-16 1.3511e-16 1.8625e-16 3.8730e-17 1.7406e-17 2.4266e-16 2.4711e-16 9.9256e-17 5.3917e-16 7.5827e-17 3.4502e-17 6.1333e-17 2.6654e-16 9.7235e-17 6.7101e-17 2.2237e-16 7.5463e-17 2.3302e-16 1.9487e-16 9.9020e-17 6.0235e-17 2.1024e-17 1.5733e-16 2.6429e-16 1.2580e-16 5.3673e-17 2.0894e-16 2.8233e-16 3.2190e-17 5.7916e-16 2.5634e-16 2.8446e-16 2.2493e-16 2.7966e-17 1.7088e-16 7.9089e-17 8.5404e-16 1.1830e-16 3.4940e-16 1.4181e-17 3.1261e-16 1.1581e-17 1.3641e-16 9.4097e-18 1.0629e-16 6.9886e-17 5.1990e-16 2.8379e-16 3.8110e-16 6.0103e-16 1.5807e-16 4.2711e-16 7.1349e-17 1.6725e-16 1.0494e-16 5.5902e-16 2.9333e-17 1.2322e-16 1.4541e-16 3.0257e-17 3.5525e-16 3.4198e-16 1.2419e-16 8.7904e-16 4.0365e-17 2.8750e-18 1.4880e-18 1.1552e-16 5.5934e-17 5.2616e-17 9.6408e-17 7.2438e-17 2.8929e-17 9.8195e-17 2.2293e-16 1.1056e-18 7.4120e-17 7.8025e-17 1.8212e-17 2.7353e-17 4.6299e-17 1.2434e-16 6.8501e-18 2.3141e-16 8.2119e-17 7.7489e-17 1.9557e-16 5.0526e-17 1.5123e-18 2.1135e-17 2.0893e-17 1.4576e-16 5.3052e-18 7.1205e-17 3.2693e-17 1.0507e-16 1.4487e-16 1.0214e-16 7.5319e-17 2.4180e-17 2.0883e-17 6.7147e-18 3.7302e-17 1.2916e-16 6.0220e-17 5.8457e-17 1.4561e-17 1.4389e-16 2.9555e-17 6.2586e-18 1.5618e-17 1.2434e-18 1.1431e-17 5.3922e-18 5.9816e-18 1.9631e-17 2.6543e-17 2.8945e-18 1.5158e-17 2.0910e-17 5.0777e-18 7.8529e-17 3.1703e-16 7.1990e-17 4.6901e-17 3.4154e-17 1.9781e-16 9.7854e-18 1.0977e-16 3.2805e-16 3.7447e-17 2.8646e-16 4.8050e-18 6.1149e-17 9.7935e-16 5.7116e-18 4.4022e-17 9.1943e-17 1.9047e-16 2.6231e-15 1.1110e-16 4.0458e-17 2.9643e-17 3.4174e-18 1.0905e-18 1.5733e-17 1.3170e-16 2.4889e-17 1.8734e-18 1.8616e-17 2.9146e-17 9.5873e-18 6.2065e-17 4.3019e-16 3.1263e-16 2.7560e-16 1.5753e-16 2.0128e-16 2.3310e-17 7.7159e-17 6.3947e-16 3.6701e-16 1.3968e-16 2.6428e-16 8.2058e-17 7.1707e-16 1.7945e-16 2.4814e-17 8.0875e-17 1.8415e-16 1.0351e-16 9.8133e-17 1.1683e-15 1.2965e-16 3.8344e-16 1.2928e-16 1.0780e-17 5.6833e-17 3.9584e-16 2.0423e-16 9.3698e-17 4.5553e-16 3.0718e-16 6.2186e-17 1.6774e-16 7.1564e-17 1.8995e-17 1.0083e-16 6.0089e-16 4.0187e-16 2.6611e-15 1.5516e-16 9.2620e-17 2.7966e-17 1.2803e-15 1.9653e-16 1.6670e-16 1.5486e-16 7.4692e-16 1.3776e-16 2.3790e-16 6.1767e-17 1.7292e-17 4.3473e-16 1.9393e-16 2.2621e-16 3.8444e-17 2.8022e-16 2.6589e-16 1.8574e-16 2.2657e-16 1.5695e-15 2.6103e-16 3.1554e-16 5.4969e-17 5.6383e-16 1.5438e-18 3.9638e-16 7.9977e-17 2.8816e-18 2.2384e-16 2.2894e-17 3.2459e-17 1.6942e-16 1.7538e-16 4.3125e-18 9.6720e-17 4.6209e-18 3.1962e-17 8.9288e-17 1.5879e-16 3.8195e-17 3.3834e-16 3.7884e-23 4.1582e-17 4.4225e-18 4.6325e-17 6.9136e-18 9.3936e-17 9.4320e-19 1.7594e-17 2.0575e-17 1.6183e-16 1.9625e-17 3.1891e-18 3.6005e-17 8.5512e-17 9.4057e-17 9.6786e-17 6.5591e-18 1.0086e-17 9.4743e-18 2.1145e-16 1.2617e-16 8.3672e-17 2.9072e-17 1.8225e-17 1.6908e-16 2.7460e-18 6.0274e-17 2.9366e-17 7.6609e-17 5.7285e-17 6.3168e-17 2.8296e-17 2.4041e-17 4.1543e-17 6.5116e-17 1.2709e-17 9.8820e-18 7.1909e-18 3.8856e-24 3.6521e-17 5.7773e-19 1.9939e-18 4.9857e-18 2.4436e-17 5.2101e-18 3.5621e-17 4.4021e-17 2.5388e-18 2.2722e-23 7.0317e-17 4.6648e-16 2.1318e-17 9.9478e-19 6.1667e-17 1.4114e-16 4.4569e-17 2.0503e-17 1.9955e-16 7.6353e-17 6.3066e-17 2.1070e-16 1.1199e-15 2.7606e-17 7.9014e-18 1.8954e-16 1.5160e-16 2.7237e-15 3.2636e-16 1.3951e-18 7.3093e-18 1.8368e-17 2.1810e-18 1.3111e-17 1.7098e-16 1.9739e-16 9.3671e-19 5.6881e-17 4.2598e-17 9.5873e-17 1.5516e-17 3.7727e-16 2.2737e-17 1.4161e-16 9.4196e-17 3.4406e-17 3.6579e-16 6.3986e-17 8.6309e-17 9.0744e-17 7.4075e-17 6.8348e-18 4.4759e-17 2.4811e-16 2.9417e-17 2.8536e-16 4.7177e-16 1.0471e-16 5.8270e-16 8.5866e-17 4.8865e-17 3.7042e-17 1.8693e-16 1.6161e-22 4.8512e-17 1.2503e-16 4.9936e-16 2.2280e-16 1.4724e-16 2.1024e-17 7.4921e-18 4.6640e-17 1.1742e-16 4.4727e-17 1.7095e-16 8.0667e-17 3.8628e-16 9.2193e-16 4.2724e-16 1.5516e-16 1.3231e-16 1.5381e-16 2.6014e-16 3.7867e-16 1.7583e-16 9.0334e-17 5.1259e-16 2.5120e-16 6.6847e-17 2.1232e-17 2.9589e-16 4.3284e-17 2.1071e-16 2.1885e-16 9.5010e-16 1.4279e-17 1.3826e-16 7.0091e-18 3.1614e-17 6.5976e-17 2.3145e-16 4.0693e-16 5.2054e-23 7.0479e-17 1.3123e-16 5.9383e-18 3.3445e-17 1.8730e-17 7.2206e-17 5.7235e-18 2.3991e-17 8.1932e-17 4.1757e-17 8.6249e-18 1.9344e-17 1.3863e-17 1.1187e-17 1.4350e-17 2.1408e-16 1.5410e-16 1.2578e-16 1.6972e-17 8.8940e-17 1.3267e-17 2.1618e-17 2.5975e-16 1.0927e-16 4.3387e-17 1.6668e-17 1.4760e-16 4.1100e-17 1.0630e-17 8.7699e-17 4.4615e-17 1.7419e-17 1.1194e-16 1.7618e-16 3.3524e-17 1.6210e-16 4.9558e-17 1.1975e-16 9.6814e-17 3.6018e-17 1.7851e-17 2.8973e-17 3.9911e-17 1.3848e-16 6.2377e-17 1.2725e-17 1.3887e-16 1.3136e-16 5.1663e-17 1.0883e-18 3.1632e-16 5.4248e-18 3.0502e-17 7.9503e-17 3.8650e-17 4.2359e-17 1.2434e-19 1.0392e-18 5.7773e-18 2.0686e-17 1.0906e-17 1.3166e-23 2.3156e-17 2.5010e-17 2.4212e-17 3.5544e-17 2.3849e-16 2.8006e-16 7.5625e-17 2.5582e-16 1.4093e-16 2.0825e-16 1.2194e-16 8.7899e-17 1.1072e-16 2.5622e-17 9.9096e-17 2.8830e-17 1.5952e-17 7.3726e-16 4.7596e-18 8.0142e-17 8.7699e-17 7.3856e-17 1.7912e-15 9.0965e-16 1.3951e-17 8.5275e-18 1.4951e-17 2.1810e-18 5.2444e-18 1.1091e-16 1.0299e-17 3.9342e-17 2.0684e-17 1.7936e-17 2.3968e-18 2.3274e-17 8.6853e-17 4.5473e-17 6.6388e-16 2.7609e-17 7.0016e-16 5.8096e-16 1.6937e-17 7.8071e-16 2.5005e-16 6.8361e-16 2.4833e-16 1.5666e-16 4.6350e-16 9.7077e-17 3.1017e-17 5.7961e-16 6.4995e-17 6.9004e-17 1.1858e-16 2.0434e-16 4.6302e-18 1.6775e-16 8.1708e-16 1.2397e-16 3.5237e-16 7.9168e-17 1.2378e-17 6.0904e-16 9.1106e-17 2.5473e-16 4.9749e-16 2.5161e-16 3.5782e-17 8.5477e-17 3.0250e-17 9.6571e-17 1.8911e-16 8.5448e-17 4.1377e-16 8.6004e-16 9.0890e-16 2.8564e-16 3.3553e-16 6.6907e-16 5.0544e-16 4.5192e-16 3.4237e-16 4.3254e-17 2.9146e-16 5.2453e-16 5.0812e-17 5.7992e-16 1.8023e-16 1.1167e-16 3.3912e-17 1.5776e-16 3.3293e-17 3.2668e-16 3.0731e-16 1.7402e-18 3.0347e-16 3.4980e-17 4.8054e-18 1.2351e-16 1.9300e-17 5.8165e-17 9.7975e-17 9.6756e-17 1.1876e-16 3.9515e-17 1.5831e-16 1.1135e-16 1.4375e-18 1.4880e-17 2.4645e-17 4.7943e-17 1.4828e-16 1.2760e-17 9.7462e-17 7.1693e-17 2.4246e-18 6.0063e-17 5.5281e-17 9.0591e-17 6.6173e-17 1.0544e-17 5.5649e-17 1.6668e-17 1.2524e-17 2.2948e-16 1.6354e-18 1.5706e-16 2.4460e-23 4.6715e-17 1.0649e-16 1.7391e-17 4.0812e-17 1.3977e-16 2.2775e-23 1.1368e-17 3.4353e-17 8.3672e-17 1.0354e-16 2.8506e-17 7.7246e-18 3.2560e-17 9.0412e-17 1.6902e-16 6.8978e-17 8.5528e-17 7.9883e-17 9.0149e-17 2.4700e-18 4.6111e-17 1.1975e-16 1.7733e-17 5.1606e-18 8.1572e-17 8.7037e-19 2.3753e-17 4.7952e-17 4.9846e-18 9.6597e-18 1.3061e-17 2.4893e-17 2.1221e-17 3.3016e-18 7.6165e-18 3.7083e-17 2.7096e-16 4.7157e-16 1.6664e-16 1.1672e-16 7.6495e-17 1.3173e-17 7.3455e-17 4.0414e-16 1.2466e-16 1.2021e-16 2.2824e-17 2.3130e-16 9.0740e-16 2.8558e-17 9.1430e-17 3.5363e-17 9.7180e-17 2.0495e-15 1.8054e-16 1.3951e-17 6.4972e-18 5.2115e-17 6.5431e-18 2.6877e-17 8.9343e-17 1.2015e-17 2.7165e-17 1.3445e-17 2.6904e-17 2.1571e-17 2.9610e-16 2.0356e-17 3.5242e-16 5.7404e-16 2.1113e-17 2.0128e-16 4.8593e-16 3.4628e-16 2.0793e-16 1.2099e-17 1.6931e-17 3.9642e-16 3.2326e-17 2.5629e-16 1.7650e-17 2.7295e-16 1.4490e-16 2.7081e-16 6.5171e-17 4.0889e-16 4.5755e-16 2.9171e-16 9.7297e-16 3.6199e-17 3.4497e-16 4.5467e-17 4.8719e-17 6.1888e-18 2.9448e-16 2.1024e-17 5.5442e-16 6.1409e-16 5.8709e-17 2.6836e-17 4.7487e-17 4.0333e-17 9.4425e-16 3.5459e-17 1.0986e-15 1.0344e-16 3.4402e-16 6.9916e-17 1.9383e-16 5.1528e-16 7.8553e-16 5.3771e-17 1.2553e-17 6.8878e-17 5.9376e-16 3.0883e-16 1.9213e-17 1.0915e-16 3.3191e-16 2.0230e-17 1.2430e-15 6.6397e-16 2.6589e-17 1.7348e-16 2.8979e-16 2.5522e-16 2.1231e-16 1.9312e-16 1.5491e-16 1.6018e-17 2.6091e-16 1.2916e-16 1.5268e-16 1.4408e-17 4.9100e-17 7.1544e-17 1.5383e-16 1.6664e-17 2.3940e-16 8.6249e-18 2.3808e-17 7.7015e-18 1.4862e-16 2.1046e-16 8.9319e-17 5.2682e-18 8.6787e-17 1.5517e-16 2.6566e-17 8.4027e-17 3.8090e-17 3.6543e-17 9.5853e-18 3.3955e-17 5.8337e-17 1.0108e-16 4.9663e-17 3.2709e-18 7.4943e-17 1.9333e-16 9.0263e-17 8.5506e-18 1.0057e-16 3.3524e-17 8.4293e-17 1.7491e-17 2.6526e-17 1.0618e-17 4.5438e-17 1.9892e-17 1.0748e-17 2.8753e-17 5.4528e-17 3.5043e-17 3.2629e-18 2.7774e-17 2.9042e-17 9.7682e-18 2.7752e-17 9.1390e-17 3.9259e-17 5.8219e-17 1.0226e-16 1.6470e-18 2.2022e-17 9.6984e-18 1.7370e-17 3.1968e-17 9.7201e-18 1.2153e-17 8.4262e-18 1.5051e-17 1.5158e-18 2.4212e-17 3.3005e-17 7.9983e-18 3.2128e-16 2.4215e-16 2.0963e-17 3.4253e-16 5.1221e-17 1.2796e-17 9.4502e-17 5.2396e-17 3.4146e-16 1.1480e-16 4.1443e-17 1.1333e-15 2.7848e-16 1.0090e-16 3.3863e-17 1.8530e-16 1.7298e-16 1.1941e-15 2.6387e-16 3.2087e-17 5.2789e-18 3.0329e-17 2.7808e-17 9.8332e-18 1.2554e-16 5.8360e-17 2.9272e-23 5.8949e-17 2.1299e-17 2.0373e-17 9.1804e-17 2.1985e-16 6.6789e-17 2.0860e-16 2.6635e-16 3.0965e-16 8.4993e-16 1.8067e-16 1.7517e-15 6.2512e-16 6.3493e-17 1.5264e-16 4.7991e-16 1.0088e-16 1.5297e-16 1.7370e-16 3.1676e-16 3.2497e-17 1.1539e-15 1.0631e-16 2.2656e-16 1.9447e-16 2.9716e-16 1.6161e-22 7.0073e-17 4.8877e-16 4.6892e-16 1.2996e-16 4.5511e-16 7.0082e-17 1.8730e-16 4.6640e-17 2.9354e-16 8.0509e-16 4.7487e-17 2.3192e-16 4.6139e-16 6.7372e-16 6.5917e-16 1.2930e-17 2.9109e-16 3.6356e-16 1.1783e-15 1.8934e-16 4.5670e-16 5.8072e-17 6.8206e-16 1.4789e-16 3.7749e-16 1.0616e-16 2.1519e-16 1.6185e-16 7.4587e-18 8.4598e-17 4.5766e-17 6.6040e-17 6.3813e-17 8.1131e-16 2.4588e-16 1.5800e-16 1.8794e-16 2.6036e-16 1.0661e-16 1.8100e-16 1.1888e-16 2.9692e-17 2.7047e-16 1.3976e-16 4.4768e-17 2.2179e-16 4.0926e-16 6.9434e-18 6.4027e-17 1.4375e-18 2.3808e-17 3.1268e-16 4.6345e-17 2.5511e-17 4.2249e-16 1.0405e-16 1.4464e-16 1.3214e-16 3.6096e-23 1.0282e-16 2.9545e-16 5.7284e-17 3.5466e-17 1.2545e-16 1.0186e-17 1.6728e-16 2.0550e-17 2.3877e-16 7.4146e-17 5.5573e-17 1.8290e-16 2.2542e-17 9.7543e-17 4.5185e-17 5.3313e-17 1.2171e-16 3.1073e-17 1.9238e-16 6.0953e-18 1.8208e-16 2.8039e-17 2.4461e-17 1.6829e-16 3.8548e-17 3.2955e-17 4.8834e-18 2.0783e-17 4.2980e-17 1.4330e-17 9.5342e-17 1.5703e-18 9.3761e-17 8.7040e-17 4.3261e-17 3.5955e-18 7.6841e-17 1.0837e-17 2.0991e-17 6.7293e-18 2.9602e-17 4.2131e-19 1.1578e-17 9.8525e-18 1.1005e-17 3.1735e-17 9.3798e-17 8.6078e-17 2.8796e-16 1.7907e-16 1.8967e-16 1.0109e-17 4.5163e-18 2.0551e-16 2.8157e-16 1.3304e-17 3.1137e-16 2.0421e-17 6.5270e-16 1.1258e-16 3.6173e-17 4.5151e-17 1.4004e-16 1.0690e-16 3.9916e-16 3.6803e-16 9.7657e-18 3.2080e-17 1.4951e-17 4.5802e-17 7.8666e-18 1.9486e-16 4.1195e-17 1.2084e-16 5.1710e-18 1.6815e-17 2.8762e-17 7.4995e-17 2.9856e-17 3.9789e-16 6.1516e-16 1.6241e-18 4.0083e-16 7.6386e-16 3.3122e-16 5.4924e-16 1.4116e-17 3.8096e-17 3.1896e-17 3.2326e-16 2.1812e-16 9.1194e-17 1.8921e-16 3.2350e-16 2.6359e-16 5.7504e-17 2.2080e-16 2.1323e-16 1.7595e-16 4.7930e-18 1.5514e-17 3.1802e-16 9.6617e-17 2.4359e-17 1.7329e-16 2.0078e-16 7.7090e-17 4.4953e-16 4.3530e-16 1.4258e-16 3.5782e-17 2.9679e-22 3.9325e-16 4.2920e-16 7.2100e-16 3.1738e-16 4.5256e-16 4.1348e-22 2.2653e-15 3.0605e-16 2.7082e-16 1.3701e-17 4.3662e-16 9.2475e-16 2.9780e-16 7.6678e-17 4.4588e-16 1.9598e-16 8.8451e-17 1.2493e-16 2.6299e-16 3.0206e-16 1.6778e-16 1.7726e-17 2.9789e-17 1.7739e-16 4.0627e-16 4.0025e-17 2.9313e-17 6.2298e-16 1.2174e-16 3.0877e-18 3.7115e-17 5.2349e-17 5.1869e-17 1.3142e-16 4.0494e-16 6.3506e-17 1.7359e-16 5.9851e-17 4.4921e-23 2.2320e-17 1.1860e-16 1.5182e-16 1.4669e-16 3.5444e-17 1.3171e-17 1.6351e-17 2.3397e-16 6.0063e-17 3.3169e-17 5.0443e-17 9.9753e-17 9.5853e-18 1.0941e-16 2.8937e-23 7.5142e-17 5.1376e-18 2.2896e-17 1.1640e-16 1.2758e-16 2.6050e-16 9.3279e-18 5.2930e-18 2.7694e-17 1.7651e-16 4.5185e-17 2.2737e-17 1.1368e-16 9.2538e-17 7.0386e-17 7.8975e-17 1.5492e-16 3.4914e-17 4.7308e-17 4.8617e-17 9.7974e-17 4.3164e-17 6.2300e-17 2.5213e-17 4.1331e-17 3.7546e-17 7.0288e-18 3.0442e-17 5.1057e-17 5.2471e-17 4.1032e-18 2.2269e-18 2.8116e-17 1.2960e-17 4.9857e-18 1.8959e-17 4.6312e-17 1.2884e-17 1.1005e-17 1.2694e-17 8.7254e-18 1.0063e-16 4.6902e-17 1.1103e-23 1.2634e-16 9.7724e-17 1.2420e-16 1.8777e-16 1.0434e-16 4.2966e-16 1.0126e-16 9.9103e-17 1.9940e-16 7.9990e-16 4.3789e-17 6.2082e-17 1.5560e-17 3.6928e-17 7.6478e-16 9.0271e-17 7.5335e-17 2.3958e-17 1.2815e-18 2.6718e-17 4.1300e-17 1.1399e-16 2.3172e-17 2.2481e-17 3.1026e-18 3.9235e-17 2.2770e-17 1.3318e-16 1.0721e-16 2.6715e-16 2.2383e-16 1.8352e-16 6.8812e-18 2.0979e-16 1.8631e-16 1.4319e-16 2.1174e-16 3.6403e-16 4.1009e-17 3.6802e-16 1.7177e-16 3.8243e-17 3.7221e-17 2.8643e-16 1.0832e-16 1.1501e-17 2.8213e-16 1.2438e-16 1.3428e-16 5.2723e-17 3.1028e-16 5.3902e-17 4.8308e-16 6.0898e-17 1.2378e-17 2.1417e-16 2.1725e-16 2.1727e-16 5.5968e-16 2.5161e-16 1.6907e-15 5.2236e-16 2.0167e-17 9.6571e-16 3.4277e-16 1.4648e-16 1.0344e-16 3.8371e-16 4.3697e-22 7.9062e-17 3.5470e-16 1.1349e-15 5.8072e-17 2.1341e-16 1.7625e-16 1.0617e-16 4.8255e-17 7.4932e-17 2.0701e-17 6.7128e-17 5.2782e-16 5.8581e-16 1.9633e-16 7.7993e-17 4.7312e-17 4.2854e-16 1.2154e-17 8.5967e-16 1.1553e-16 4.1643e-17 2.5949e-16 6.1754e-18 5.1960e-17 2.6320e-16 4.4665e-17 5.7765e-17 1.1733e-16 4.7983e-17 2.7774e-18 3.7581e-17 4.3125e-18 2.9760e-18 4.6209e-18 4.3149e-17 2.4395e-16 2.9773e-17 3.9512e-17 2.4778e-16 6.1826e-17 3.6096e-23 9.1766e-17 9.8827e-17 9.3827e-17 3.2590e-17 1.6223e-16 1.3519e-16 1.1629e-17 7.9632e-17 4.6610e-17 3.8269e-17 1.2837e-16 8.0762e-17 2.4291e-23 8.3176e-18 5.1016e-17 1.1095e-16 4.9558e-17 2.5389e-16 6.2460e-18 1.2745e-17 2.3462e-17 7.2900e-17 8.7116e-17 6.5904e-17 2.4180e-17 1.5662e-17 4.1509e-17 1.5187e-17 4.3197e-17 2.8478e-17 3.8203e-17 1.9415e-17 7.9704e-17 4.4333e-18 4.8422e-17 1.6292e-17 3.4815e-18 2.8652e-17 9.8214e-18 1.7446e-18 1.8696e-18 1.3482e-17 5.2101e-18 1.3642e-17 7.7037e-18 3.9669e-23 6.9076e-17 2.2247e-16 4.1812e-17 8.0299e-17 1.6215e-16 1.6613e-16 2.6722e-17 3.3261e-16 1.3486e-16 1.2072e-16 1.5595e-16 7.6880e-17 1.1366e-16 8.2191e-16 1.1709e-16 5.1923e-17 1.3579e-16 9.7180e-17 2.6164e-16 3.5414e-16 2.3717e-17 1.4213e-17 1.6233e-17 1.9084e-17 2.8189e-17 1.1476e-16 2.8322e-17 4.0278e-17 5.3778e-17 5.3808e-17 2.0373e-17 1.5258e-16 6.5140e-17 1.8473e-17 9.1360e-17 2.0788e-16 1.6859e-16 2.1338e-16 2.2771e-16 7.9247e-16 7.8644e-17 7.4075e-17 5.4906e-16 6.2911e-16 5.2349e-16 2.5887e-16 1.9541e-16 3.7068e-17 1.8054e-16 3.2585e-16 3.3529e-16 5.5084e-16 1.6669e-16 7.2853e-16 9.3084e-17 5.3902e-18 1.1367e-17 3.6539e-17 4.5797e-16 1.7401e-16 2.8733e-16 4.5702e-16 1.5547e-17 2.8516e-16 1.8786e-16 6.2683e-16 8.0667e-17 1.5022e-16 2.2457e-16 1.3428e-16 7.7581e-17 2.9109e-16 1.6780e-16 9.3344e-16 6.4470e-16 4.8182e-16 2.1508e-16 1.0670e-16 2.0258e-18 2.3986e-16 2.2969e-16 2.8820e-17 2.8417e-16 1.1934e-16 1.8759e-16 3.1487e-16 1.1869e-15 1.5421e-16 5.2568e-18 6.4984e-17 1.6668e-16 8.8751e-17 7.3109e-16 1.3326e-16 3.8443e-17 1.3740e-16 3.4294e-16 1.7159e-16 4.3224e-17 2.2095e-16 2.6042e-16 4.6571e-17 1.2498e-17 2.4080e-16 4.3125e-18 1.3392e-17 2.1564e-17 2.6528e-16 6.5372e-17 1.3327e-16 1.0536e-17 1.3836e-17 1.2244e-16 1.0165e-16 1.6584e-17 8.0297e-17 1.9457e-16 7.6682e-18 1.9430e-16 8.7969e-17 1.0108e-16 5.3088e-17 5.5605e-17 1.7699e-16 1.4950e-16 1.1006e-16 5.7522e-17 1.1342e-17 3.3524e-17 9.8702e-17 9.2557e-17 1.0762e-16 6.3085e-17 5.5412e-19 1.6321e-17 5.4208e-17 3.4332e-18 3.7267e-17 1.2616e-16 9.7887e-18 1.3460e-16 6.2348e-17 1.7366e-17 8.4345e-17 7.7393e-18 1.7988e-17 2.4932e-17 2.7486e-17 3.2940e-17 1.5505e-17 7.3359e-18 3.8302e-17 4.5256e-17 1.0717e-17 4.1443e-17 1.7695e-17 5.7890e-18 3.1831e-17 1.1005e-18 3.9669e-23 4.3627e-18 2.5399e-16 2.7123e-16 7.3193e-17 1.9564e-16 2.0859e-16 2.6345e-17 2.4017e-16 3.2121e-16 8.9183e-17 1.5162e-16 7.6280e-17 6.2545e-16 6.0098e-17 7.6154e-18 3.3863e-18 3.1119e-17 4.0815e-16 1.1606e-15 4.6524e-16 4.1853e-18 3.2486e-18 1.0252e-17 2.8899e-17 7.5388e-17 1.9332e-16 1.2873e-16 6.3696e-17 4.1368e-18 3.5031e-23 2.3968e-18 2.4309e-16 6.2425e-17 1.2789e-16 2.3906e-16 4.5474e-17 1.4967e-16 2.6896e-16 4.7425e-16 3.3151e-16 7.9653e-16 2.5397e-17 6.8348e-18 1.5168e-16 5.7256e-17 3.9713e-16 1.6129e-16 5.0547e-17 1.2277e-16 1.4568e-16 1.7582e-16 8.1738e-16 6.4824e-17 6.0391e-16 2.5857e-17 8.6243e-17 2.1597e-16 5.3590e-16 2.4755e-16 1.3385e-17 3.1537e-16 1.7232e-16 2.0988e-16 5.8709e-17 2.3258e-16 1.0447e-16 2.0167e-17 1.0730e-16 9.1011e-16 4.2724e-16 1.4223e-16 6.6157e-16 9.2289e-16 8.4672e-16 2.5404e-16 6.1883e-16 2.3444e-16 1.8830e-16 1.6207e-16 1.3763e-17 3.8604e-17 3.0934e-16 2.0137e-16 9.5099e-17 3.6782e-18 1.7574e-16 2.0704e-16 1.0281e-16 3.2242e-16 3.8639e-17 5.8163e-16 9.5712e-17 2.9830e-16 7.8289e-17 2.5308e-16 1.0961e-16 9.6498e-17 6.9798e-17 7.2040e-18 1.4441e-17 1.2878e-17 7.7619e-17 2.9579e-16 1.9486e-17 4.3125e-18 1.4880e-18 2.3412e-16 6.3924e-18 1.0364e-16 1.4178e-18 2.6341e-18 6.7920e-17 1.7336e-16 3.2342e-17 3.8697e-17 1.2353e-17 2.3704e-17 3.0673e-17 6.3194e-17 9.0747e-17 8.0509e-18 1.0618e-16 1.0957e-16 8.2916e-17 2.3716e-16 1.9003e-16 8.0065e-17 7.8639e-17 1.9677e-17 1.1671e-16 9.9845e-17 6.8210e-18 6.6833e-17 1.7898e-16 1.0048e-16 7.3368e-17 4.5919e-17 1.6476e-17 5.2565e-18 2.9692e-17 2.3807e-17 3.4105e-17 6.5122e-19 6.0220e-17 6.0927e-18 8.5656e-19 2.8380e-17 1.7896e-16 1.7239e-17 1.5056e-17 3.8794e-17 2.9692e-19 5.7773e-19 9.7201e-18 7.7901e-18 1.3903e-17 1.7367e-18 3.0315e-17 3.0815e-17 1.2694e-18 5.7442e-17 6.2376e-16 5.5592e-16 2.8780e-17 5.4050e-17 3.3698e-17 2.3937e-16 5.8187e-17 1.0160e-16 1.6063e-16 1.8086e-16 1.9160e-16 1.6883e-16 7.6858e-16 7.1395e-17 1.0723e-16 8.4870e-18 4.8590e-17 1.1673e-15 6.9439e-18 2.7902e-18 1.4213e-17 1.0679e-17 1.7039e-23 7.4732e-17 1.9255e-16 4.8919e-17 2.8101e-18 1.0342e-18 7.9591e-17 4.1944e-17 3.6851e-16 3.5284e-17 1.2789e-16 8.2224e-17 1.1044e-16 9.6337e-17 3.9448e-17 5.7775e-16 1.4947e-15 1.4116e-17 2.4974e-16 2.9617e-17 5.6694e-16 2.9991e-16 9.4136e-17 1.2407e-17 3.4372e-16 6.4995e-17 9.9673e-17 2.2080e-16 1.1106e-16 2.1299e-16 1.1024e-16 1.6031e-16 9.1633e-17 3.9783e-16 1.4007e-16 2.1661e-16 4.6849e-17 9.8114e-17 2.7721e-16 2.4291e-22 1.8451e-16 4.8306e-16 8.9276e-16 4.1342e-16 9.6571e-17 4.6097e-16 6.8358e-16 1.4223e-16 3.5725e-16 2.7966e-16 2.3974e-16 5.6082e-16 4.2473e-16 7.7430e-17 1.1716e-16 5.5710e-16 7.3925e-16 6.7171e-16 2.4977e-17 3.1993e-16 4.5125e-16 3.8989e-16 4.7414e-16 1.1602e-16 9.9264e-17 4.9239e-16 2.6345e-17 1.1112e-16 4.0547e-16 2.0001e-16 1.1827e-16 2.4027e-16 1.4975e-16 1.3213e-16 4.0716e-17 2.0892e-16 5.9209e-17 4.4357e-17 2.8225e-17 8.7487e-17 1.4476e-16 4.3125e-18 5.9520e-18 5.0830e-17 1.4063e-16 6.5372e-17 7.7977e-17 4.3463e-17 1.2955e-16 1.0304e-16 8.6629e-17 1.1056e-17 2.9854e-17 7.6049e-17 1.5336e-17 5.1876e-17 1.2964e-16 3.3098e-17 2.4831e-17 2.0443e-17 1.6583e-16 1.2837e-16 2.0982e-16 1.7879e-17 8.3176e-18 1.3847e-17 1.0014e-16 5.1016e-18 2.4252e-17 3.8101e-17 1.7676e-16 1.5301e-17 3.2712e-17 6.0939e-17 3.1383e-17 6.0625e-17 5.7753e-17 3.9678e-18 8.9258e-17 4.9710e-17 2.8659e-17 4.2813e-18 6.2814e-18 1.6843e-17 1.1527e-17 7.4445e-17 3.4157e-17 1.1066e-17 2.3753e-17 1.4251e-17 1.6449e-17 3.1161e-19 2.7807e-17 5.2101e-18 3.7136e-17 2.5312e-17 3.9352e-17 2.2722e-23 1.1578e-16 1.5161e-16 2.0181e-16 2.4438e-16 1.4119e-16 6.5487e-17 2.4224e-16 3.0618e-16 2.5129e-17 1.2617e-16 5.4657e-17 2.0771e-23 6.2553e-16 7.5202e-17 8.0142e-17 9.3357e-17 2.5267e-17 1.0834e-15 7.0828e-16 2.7902e-18 2.4364e-17 2.9475e-17 1.4177e-17 4.0644e-17 3.7740e-17 1.7165e-18 5.6203e-18 1.0342e-18 6.7260e-18 4.5539e-17 1.4223e-17 2.2120e-16 7.4178e-16 3.4260e-16 3.0857e-16 3.6298e-16 2.6896e-16 1.6937e-17 2.3147e-16 4.6985e-16 6.3493e-18 5.0122e-17 1.7903e-16 3.5172e-16 4.7068e-17 1.1476e-16 1.5838e-16 9.3881e-17 7.2838e-17 2.8213e-16 7.9072e-16 2.7781e-17 7.6688e-17 4.8094e-16 5.3902e-17 3.2395e-16 1.8269e-17 3.0944e-16 5.2873e-16 3.5742e-16 1.2737e-16 9.3279e-17 2.6838e-16 1.4939e-15 5.6984e-17 7.0583e-16 1.2876e-16 4.6097e-16 1.2207e-17 6.4651e-17 1.0585e-16 5.5932e-17 5.8914e-16 7.8370e-16 7.0789e-17 3.1402e-16 1.8411e-16 7.7792e-16 1.0696e-15 1.5442e-16 7.1090e-17 1.4679e-16 2.7784e-16 2.0966e-16 9.8855e-17 1.7849e-18 3.0134e-16 3.6448e-16 2.9858e-17 1.0938e-16 2.6973e-16 1.6725e-16 2.7318e-16 1.4096e-16 7.8736e-17 3.1176e-17 5.6566e-16 2.1612e-17 2.8016e-16 8.4422e-17 2.9636e-16 1.1804e-16 1.7259e-16 5.7500e-18 7.4400e-18 1.1398e-16 4.9941e-23 7.9721e-18 3.7713e-16 1.2512e-16 1.2200e-16 1.0183e-16 2.3101e-18 7.7393e-17 4.1178e-18 3.7926e-16 1.3036e-16 1.2262e-17 5.0003e-17 5.7251e-17 2.8257e-17 8.9949e-18 2.5991e-16 5.6356e-17 1.8211e-17 6.2186e-18 3.6295e-17 1.4576e-18 2.0461e-16 1.4649e-16 2.1979e-17 1.2492e-17 1.0639e-16 2.9072e-17 1.9627e-17 7.8534e-17 8.0811e-17 1.2791e-16 3.3184e-16 2.3501e-17 3.3305e-17 6.5122e-18 2.5938e-17 4.1167e-17 4.4541e-17 4.7610e-17 2.1575e-17 8.2350e-17 9.6628e-18 1.2309e-17 3.8451e-17 3.4664e-18 6.8539e-17 1.2464e-18 2.5279e-18 7.5836e-17 1.4400e-17 3.4117e-17 1.9041e-17 5.5988e-17 4.5767e-16 2.8723e-16 2.5582e-17 3.3822e-17 2.9317e-17 1.0086e-16 3.6934e-16 1.5947e-16 2.4488e-16 1.0830e-17 1.4896e-16 7.5373e-16 8.9724e-17 9.4241e-17 2.9348e-17 1.6408e-16 1.5354e-16 1.6604e-15 3.4720e-17 4.3248e-17 2.3552e-17 2.0932e-17 2.2356e-17 8.1288e-17 6.3157e-17 2.2314e-17 3.8405e-17 9.3078e-18 3.5872e-17 5.9920e-18 1.0344e-17 1.0449e-16 4.5899e-16 2.9692e-16 9.5820e-17 2.6837e-16 1.7393e-16 2.0701e-17 1.6281e-15 2.0165e-18 1.2487e-16 2.2783e-18 1.2930e-16 3.3536e-16 1.1179e-16 1.1476e-16 7.8179e-16 1.4443e-16 4.6003e-17 1.3902e-16 6.2192e-17 5.5100e-16 3.3551e-17 3.2062e-16 5.7675e-16 2.8417e-17 6.0898e-17 1.8566e-17 6.6927e-17 8.4098e-17 2.0229e-16 2.4291e-22 1.9290e-16 5.3673e-17 1.5196e-16 3.8317e-16 6.4381e-17 2.3639e-16 2.6855e-16 2.9739e-16 2.2493e-16 3.7754e-16 1.6552e-15 1.6777e-17 2.9001e-16 1.0109e-16 6.2766e-18 2.4107e-16 2.7919e-16 6.0222e-16 2.0750e-16 3.8580e-16 1.3426e-16 2.5196e-16 7.4690e-16 6.8717e-16 1.0104e-16 2.3130e-16 3.8815e-16 1.2154e-17 2.3493e-16 1.1897e-16 3.0983e-16 3.2036e-18 7.5649e-17 8.9075e-17 4.3624e-17 9.2355e-16 2.0218e-16 7.7268e-17 4.4596e-16 9.7208e-18 1.0300e-16 4.4921e-23 8.9280e-18 4.3128e-17 1.5981e-18 2.0728e-17 4.4305e-23 6.7170e-17 7.7982e-17 4.7279e-17 1.0511e-16 6.6337e-18 6.4855e-17 3.7531e-16 1.9171e-17 9.3377e-17 3.7965e-17 1.2703e-16 5.2232e-17 9.8126e-18 3.0296e-17 2.4264e-17 7.9178e-18 2.1454e-16 1.5123e-18 3.6440e-18 5.1872e-17 8.1625e-17 9.9283e-17 7.4952e-18 5.8183e-17 4.6924e-17 2.3365e-18 1.7166e-18 1.7653e-17 2.6633e-17 1.3378e-17 5.8906e-17 2.6644e-18 1.4110e-17 3.2650e-17 3.1287e-17 1.3848e-17 3.2624e-17 4.4185e-17 2.8548e-18 5.4157e-17 6.2169e-19 9.0560e-18 4.4293e-18 1.5702e-17 2.3994e-17 4.8872e-17 2.8945e-17 2.1221e-17 2.0910e-17 4.5699e-17 2.2722e-23 6.8923e-16 6.1809e-18 1.4212e-18 8.4888e-17 5.7287e-17 3.2819e-16 1.9313e-16 9.5680e-18 1.4930e-16 4.7653e-17 1.5016e-16 4.5995e-16 5.6459e-16 4.8548e-17 6.0953e-17 1.3296e-16 1.5160e-16 1.3652e-15 5.9023e-16 1.2416e-16 2.6395e-17 7.2620e-18 4.3621e-18 1.3570e-16 7.7020e-19 2.4889e-17 1.1241e-17 4.7573e-17 7.8470e-18 5.1532e-17 1.1637e-16 7.3689e-16 2.7000e-17 8.9837e-17 4.2226e-17 7.4661e-16 1.2014e-16 5.6458e-18 4.7078e-17 3.7104e-16 2.9842e-16 2.2783e-17 3.9785e-16 2.9446e-16 3.5889e-16 3.1017e-18 1.7860e-16 3.6108e-18 3.0669e-17 1.8400e-16 4.5755e-16 2.5466e-16 9.5859e-18 2.6374e-16 3.3419e-16 4.5467e-17 2.0096e-16 2.4755e-17 3.0787e-16 9.8114e-17 3.1467e-16 1.1660e-16 2.5161e-16 1.3418e-16 3.7990e-17 9.6800e-16 1.8241e-16 1.0638e-16 1.5869e-16 1.0215e-15 1.8524e-16 8.8094e-16 7.9062e-17 1.1744e-16 2.6032e-16 1.8497e-16 8.3688e-18 1.1547e-16 1.3566e-16 2.2197e-16 3.6505e-16 2.7664e-16 7.4587e-17 2.6851e-16 1.6750e-15 2.5167e-16 7.2675e-17 6.4834e-17 3.5302e-16 2.5002e-16 1.7402e-17 9.4835e-17 3.8978e-16 5.9266e-17 3.6589e-16 2.5238e-17 9.1610e-17 9.5093e-17 7.0762e-17 1.1590e-16 7.3385e-17 8.0544e-17 1.5311e-17 1.4375e-18 4.6500e-23 6.0071e-17 6.0728e-17 2.0728e-17 2.3393e-16 1.5805e-17 6.7920e-17 5.3340e-17 2.2986e-16 8.8449e-18 1.1324e-17 1.6790e-17 1.6583e-16 5.0933e-17 1.8427e-16 4.2938e-17 1.7125e-17 5.8222e-16 2.1526e-17 2.0351e-17 1.3460e-17 8.3174e-17 9.9811e-17 3.5711e-17 2.5216e-17 1.8949e-17 1.0838e-16 1.3117e-17 1.7316e-23 2.6522e-17 6.5423e-18 1.2874e-18 3.6483e-17 3.1539e-18 1.1746e-17 1.2209e-17 7.7801e-17 3.5817e-17 7.0922e-17 2.1571e-17 1.4990e-17 4.4692e-17 1.0492e-17 4.4140e-17 1.1573e-17 1.4796e-17 1.9300e-18 1.9258e-17 2.1185e-17 1.9943e-17 2.5279e-18 5.2101e-18 1.5158e-17 2.9714e-17 2.0311e-17 2.0287e-16 9.2746e-17 4.2867e-16 1.2969e-16 6.0350e-17 1.1828e-16 1.8065e-17 2.3729e-16 2.8249e-16 1.7738e-17 2.8700e-17 6.6069e-17 2.5789e-16 1.1469e-15 1.8087e-17 6.8855e-17 4.9508e-17 4.5091e-16 1.0566e-15 9.3048e-16 4.4643e-17 3.4110e-17 1.2388e-17 9.2694e-18 7.2766e-17 6.7007e-17 1.3732e-17 3.3722e-17 3.8265e-17 5.6050e-18 1.1984e-18 1.8102e-17 6.5140e-17 2.3305e-16 7.1565e-17 1.1206e-16 3.1826e-16 1.7572e-16 1.8631e-16 8.9055e-16 9.6793e-17 8.7197e-16 8.4524e-16 5.7192e-17 1.0633e-16 4.4126e-17 1.1787e-16 3.4035e-16 1.4082e-16 1.3418e-16 3.0258e-16 1.0217e-16 1.5743e-16 4.4095e-16 4.7059e-16 1.6844e-22 1.8187e-16 1.4616e-16 2.7231e-16 2.8779e-16 4.2049e-17 3.0718e-16 4.6640e-17 3.1870e-16 8.9455e-18 8.5477e-17 3.1258e-16 1.9314e-16 3.0731e-16 1.2207e-16 9.0511e-17 8.8650e-16 1.8178e-16 1.8465e-15 9.1073e-17 2.8087e-16 2.3659e-17 5.1050e-16 1.7017e-16 8.0020e-16 6.2153e-16 3.6698e-16 2.0701e-17 2.0511e-17 1.1035e-16 2.1968e-16 6.4255e-17 1.2408e-17 3.9952e-16 1.6334e-16 1.5279e-16 2.5929e-16 1.4656e-16 4.6640e-17 1.3615e-16 1.6519e-16 1.2025e-16 4.7986e-17 5.6624e-16 9.5312e-17 5.4374e-17 1.2842e-16 5.3603e-16 6.9594e-18 4.4921e-23 4.6500e-23 8.0095e-17 2.2373e-17 1.2755e-16 4.2533e-18 1.1722e-16 1.9999e-16 5.0916e-17 7.5079e-17 5.8598e-17 4.5296e-17 4.7605e-16 7.4765e-17 1.0658e-16 1.7594e-17 4.6517e-17 3.8532e-17 5.2334e-17 6.3781e-18 9.5491e-17 4.8299e-17 1.7101e-17 1.2098e-17 1.3045e-16 4.1066e-17 1.3045e-16 4.9263e-17 6.2460e-19 6.6495e-18 1.6474e-16 1.6870e-16 3.0469e-17 1.0984e-17 2.6983e-17 8.4835e-17 5.0971e-17 4.1299e-17 2.9023e-16 2.4850e-17 2.9755e-16 1.0464e-16 6.8962e-18 9.3838e-17 8.1582e-17 3.5280e-17 3.1831e-17 4.6022e-18 2.3687e-17 2.7665e-17 2.4928e-17 2.1908e-17 2.3735e-17 2.0463e-17 1.1005e-18 5.0777e-17 7.2712e-19 3.1522e-16 5.4974e-16 1.0304e-17 2.3211e-18 2.8980e-17 1.1705e-16 2.0138e-16 5.1941e-17 3.3308e-16 4.8736e-17 6.1264e-17 1.9541e-16 2.8780e-16 9.9001e-17 1.6932e-17 1.6550e-16 2.3323e-16 2.4487e-15 5.2774e-16 1.9531e-17 1.1370e-17 4.2717e-18 2.2356e-17 1.3766e-17 2.0025e-17 4.8061e-17 1.0304e-17 6.2052e-18 2.1299e-17 5.2730e-17 4.4350e-16 3.3384e-16 2.4868e-16 1.5988e-16 1.2993e-17 7.2425e-16 7.7103e-17 4.7613e-16 2.9424e-17 1.1696e-16 7.1959e-17 2.0504e-16 1.6412e-16 2.5084e-16 1.0884e-16 2.7605e-16 1.0109e-16 1.2638e-16 3.7186e-16 1.3084e-16 1.2438e-16 3.7042e-17 7.1895e-17 2.7925e-16 9.1633e-17 2.2733e-17 1.2180e-17 1.8566e-17 5.9565e-16 2.1024e-17 2.7721e-16 5.3636e-16 2.8516e-16 1.0735e-16 2.5643e-16 3.0250e-17 5.7943e-16 1.5366e-16 2.1972e-16 4.9135e-16 1.9847e-16 3.3560e-16 5.6363e-16 1.1983e-17 1.6441e-16 1.8712e-16 4.8330e-16 1.1142e-16 2.6542e-16 3.4551e-16 8.2618e-17 3.2369e-16 1.1375e-16 3.1081e-16 1.2815e-16 1.2673e-16 5.4950e-17 1.7523e-18 5.6202e-17 2.0835e-17 1.7228e-16 9.3110e-17 1.2326e-16 3.8923e-16 2.3312e-16 7.4229e-18 3.3445e-17 9.9415e-17 2.1517e-16 9.5869e-17 9.1731e-17 1.5831e-16 2.7838e-16 7.1874e-18 1.3392e-17 1.5403e-18 3.5158e-17 2.6786e-16 1.6162e-16 1.1590e-16 1.9496e-16 2.3640e-16 8.7784e-17 4.0908e-17 9.1621e-17 3.9506e-18 8.7226e-17 2.9475e-23 9.2599e-19 7.6931e-17 1.0361e-16 2.2896e-17 5.8998e-17 2.9352e-16 8.3929e-17 3.8866e-18 4.8393e-17 1.5888e-16 1.0807e-17 3.2067e-17 3.2589e-17 6.8706e-18 1.8286e-17 1.3108e-16 5.8414e-17 1.1158e-17 3.7267e-17 2.0325e-16 4.2418e-18 1.7092e-17 9.1923e-17 5.5353e-17 1.0448e-16 1.0275e-16 1.0707e-17 4.0714e-17 1.6108e-17 2.1960e-19 9.9999e-18 2.5241e-17 4.7507e-18 1.1555e-18 7.7885e-24 5.5466e-17 1.2639e-18 4.4575e-17 2.7284e-17 1.2106e-17 3.8082e-17 1.2361e-17 2.5157e-16 1.7234e-16 1.6593e-16 1.3960e-16 1.9107e-16 1.0538e-17 4.3991e-16 3.4263e-16 6.0605e-17 7.9060e-17 2.7689e-16 5.3506e-16 3.4620e-16 4.3789e-17 3.5274e-23 1.1033e-16 2.3323e-17 1.2981e-15 4.7913e-16 9.7657e-18 4.0607e-18 3.3747e-17 1.4177e-17 1.3111e-17 1.0706e-16 2.5747e-18 2.3418e-17 6.1018e-17 6.7260e-18 2.7563e-17 6.5944e-17 2.7277e-16 2.3873e-16 1.8272e-17 5.0752e-23 5.8662e-16 1.3448e-16 1.1856e-16 1.0102e-15 8.8727e-17 4.2329e-18 2.3466e-16 2.1136e-16 4.4987e-16 3.5301e-17 9.3052e-18 6.9755e-16 7.2216e-17 1.6484e-16 4.0889e-18 6.2192e-17 2.6392e-16 1.7734e-16 2.4305e-16 4.3661e-16 2.9553e-16 6.0898e-17 8.6643e-17 2.6771e-17 1.3316e-16 2.8470e-16 5.4413e-17 5.7870e-16 2.7955e-22 1.8995e-16 3.7308e-16 2.5752e-16 1.3002e-16 1.0986e-16 6.4651e-17 7.9388e-17 1.1186e-16 1.5047e-16 2.0851e-16 2.9914e-16 1.0410e-15 3.4940e-16 1.7442e-15 2.7525e-16 1.4477e-16 9.9910e-17 2.3148e-16 6.4331e-16 4.7817e-17 4.2105e-17 1.3922e-16 2.1271e-17 1.1127e-15 1.9320e-16 6.5976e-17 5.2207e-16 4.4831e-17 2.8817e-16 1.2814e-17 4.1066e-16 2.4941e-16 5.3803e-17 1.7578e-16 3.0471e-16 2.0032e-17 3.3164e-16 3.3328e-17 9.7432e-18 8.6249e-18 7.4400e-18 6.1612e-17 9.1092e-17 3.9861e-17 5.5293e-17 4.6097e-17 3.3960e-17 3.7581e-17 1.4207e-16 4.5330e-17 1.3280e-16 1.8765e-16 2.8756e-18 1.7166e-16 9.5377e-17 1.6012e-16 2.4146e-16 2.2078e-17 4.1458e-17 8.1403e-17 1.5044e-16 1.7879e-17 6.4272e-17 7.9438e-17 1.3689e-17 4.5185e-17 2.7284e-17 1.1555e-16 5.2641e-17 7.2936e-17 2.7571e-17 9.5270e-17 5.8059e-17 4.0300e-17 3.2955e-17 6.1653e-17 4.5828e-17 9.7682e-18 7.4368e-17 4.5612e-17 5.6675e-17 2.3871e-17 1.6255e-17 1.8666e-18 2.4831e-17 8.1566e-17 3.7115e-18 7.7031e-18 6.7293e-17 1.2464e-18 2.6121e-17 3.4155e-17 2.3494e-17 1.7609e-17 1.0155e-17 1.8178e-17 3.6613e-16 3.4904e-16 1.2258e-16 4.2444e-17 2.3589e-18 1.0425e-16 8.9550e-17 3.2076e-16 9.0661e-17 2.0848e-16 2.0421e-16 2.2599e-17 1.3323e-15 9.3289e-17 5.3052e-17 6.2238e-17 2.9348e-16 5.7023e-16 1.3471e-15 1.3951e-17 1.3806e-17 7.2620e-18 1.5813e-17 1.9666e-18 1.9255e-17 4.6344e-17 5.6203e-18 2.3787e-17 1.0089e-17 2.5167e-17 1.2930e-17 1.4928e-17 3.1263e-16 1.0506e-15 8.4452e-17 2.8385e-16 3.8193e-16 3.7262e-16 2.6285e-16 2.2787e-16 2.1164e-18 3.4174e-16 9.9464e-18 8.0704e-16 3.2065e-16 2.4814e-17 1.6512e-16 2.1304e-16 5.3670e-17 8.1778e-16 1.2883e-16 2.7781e-17 1.6296e-16 3.1028e-17 1.6844e-22 2.8417e-17 1.5225e-16 7.4265e-17 1.4055e-16 4.6955e-16 2.9968e-17 8.8615e-16 7.5483e-17 4.0255e-16 1.5196e-16 4.0333e-17 1.3949e-16 3.5459e-17 1.5869e-16 2.3274e-16 8.2034e-16 1.1746e-15 5.2538e-16 2.4446e-16 3.2654e-16 1.5916e-16 3.5777e-16 7.0904e-17 3.5390e-17 4.4395e-17 2.0943e-16 2.1266e-16 7.2163e-16 1.8391e-17 5.3455e-16 2.0526e-16 1.1699e-16 6.3783e-16 1.0714e-16 3.9933e-17 3.1498e-16 9.1386e-17 6.6629e-18 8.8098e-17 1.5438e-18 3.0434e-16 1.4541e-16 7.0599e-17 7.4228e-16 8.8715e-17 1.2701e-17 2.9718e-16 1.3501e-16 1.5812e-17 4.6500e-23 4.1588e-17 3.8354e-17 2.2322e-17 4.6786e-17 7.2438e-17 1.1823e-16 2.4246e-18 3.4652e-18 3.4550e-23 3.8090e-17 4.7407e-17 9.5853e-18 2.6410e-17 6.7597e-17 3.0415e-17 1.2587e-16 2.6985e-17 4.6241e-17 2.9743e-17 4.9090e-17 1.0883e-17 2.2684e-17 3.6440e-17 3.7968e-16 2.9152e-17 1.8947e-17 1.8113e-17 2.1057e-17 1.5301e-18 9.3462e-18 3.6906e-17 2.3145e-17 1.2616e-17 5.7753e-17 1.5261e-18 1.1723e-16 2.9739e-17 1.4112e-16 1.7109e-16 5.9959e-18 8.4478e-17 8.4232e-18 4.2822e-18 6.1797e-18 3.7301e-18 1.9300e-18 1.4058e-17 4.9846e-19 3.7393e-17 4.5502e-17 1.1578e-17 8.1094e-17 7.7037e-18 3.8082e-18 5.8169e-18 3.4795e-16 1.4652e-16 2.8069e-17 6.3003e-17 1.0649e-16 3.3496e-17 1.2586e-16 2.8249e-17 3.3505e-16 1.6895e-16 2.7028e-17 1.4357e-16 1.3823e-15 8.5674e-17 5.4181e-17 4.6679e-17 2.0213e-16 6.5074e-16 1.2430e-15 7.2545e-17 8.9336e-18 3.4174e-18 5.1255e-17 1.8355e-17 7.9331e-17 3.9479e-17 4.2152e-17 2.8958e-17 1.1210e-17 4.7936e-17 1.1637e-17 2.7006e-16 2.1031e-16 5.5729e-16 3.4268e-16 2.0472e-16 8.2483e-17 1.8255e-16 6.4732e-16 2.5005e-16 3.8942e-16 1.7998e-16 8.7279e-16 1.3632e-16 4.4126e-17 4.0323e-17 9.7724e-17 2.0221e-16 4.2169e-16 7.3600e-17 3.9980e-17 4.9081e-16 5.3681e-16 4.1888e-16 1.3475e-16 2.1028e-16 6.5161e-16 1.4234e-16 2.7440e-16 1.1914e-16 2.9219e-16 6.3741e-16 9.2256e-17 5.6357e-16 9.4974e-18 9.0750e-17 2.1460e-17 5.4370e-16 1.8310e-16 4.0084e-16 1.5878e-16 1.6780e-16 1.5863e-15 1.1504e-16 6.6222e-16 2.3014e-16 4.2681e-16 2.3297e-16 3.1458e-17 1.9495e-16 9.7988e-17 5.6458e-18 2.3495e-16 2.5012e-16 5.5285e-16 8.3888e-17 9.2174e-17 2.8913e-16 6.7443e-16 7.1185e-17 1.2356e-16 1.1897e-16 5.2470e-16 2.0823e-17 8.7999e-17 2.6871e-16 1.2942e-16 4.0342e-17 2.5994e-16 3.4341e-17 4.5160e-17 3.9439e-16 5.7067e-17 4.4921e-23 2.9760e-17 1.4325e-16 1.4543e-16 1.6582e-16 2.5520e-17 6.5853e-17 3.8991e-17 3.5156e-17 5.4288e-17 1.4594e-16 2.9854e-17 1.3136e-16 1.4186e-16 1.7072e-16 3.7039e-18 8.9455e-17 4.2813e-17 4.4157e-17 3.9863e-18 3.3657e-16 1.3460e-17 1.2437e-16 2.5482e-16 1.3847e-17 1.7291e-17 2.5508e-17 4.5473e-18 3.1230e-18 2.7706e-17 7.7016e-17 1.4603e-23 1.9741e-17 6.0804e-17 4.2753e-17 5.2533e-17 2.0755e-17 5.0624e-18 1.3241e-17 5.8044e-17 9.3860e-18 2.2841e-18 6.7238e-17 7.0489e-17 5.3363e-17 1.1573e-17 3.2452e-17 1.9300e-18 6.7402e-18 3.2151e-17 2.1189e-17 1.6010e-17 1.7367e-17 9.0947e-18 9.9048e-18 1.2694e-17 3.8537e-17 4.2069e-16 6.0355e-17 5.3296e-18 2.6096e-16 2.1196e-16 5.4196e-17 9.4914e-17 1.7405e-16 2.4636e-18 1.6408e-16 1.3995e-16 5.0914e-16 2.1500e-16 6.5683e-17 5.8696e-17 7.3554e-17 1.8853e-16 3.0860e-16 4.7219e-16 3.9063e-17 8.9336e-18 2.3922e-17 1.7994e-17 7.2110e-18 1.5943e-16 1.7165e-17 5.8076e-17 6.2052e-17 2.2420e-18 4.3143e-17 7.7581e-17 2.0899e-16 1.7763e-16 1.2638e-16 5.5218e-17 6.2275e-16 2.6000e-16 4.2344e-16 6.1299e-23 9.2760e-17 1.1217e-16 1.3670e-16 5.8684e-16 5.7256e-17 1.5591e-16 1.6129e-16 4.9536e-16 3.9358e-16 3.9102e-16 2.1262e-16 1.7325e-16 1.1113e-16 7.6688e-17 1.1377e-16 5.3902e-17 1.4208e-16 7.9168e-17 4.1465e-16 1.6063e-16 1.4016e-17 5.2445e-16 2.3320e-16 5.0322e-17 1.0735e-16 3.7990e-17 7.0583e-17 2.7898e-16 2.0803e-15 1.2207e-17 9.0511e-17 6.6157e-17 2.0975e-16 9.1304e-16 5.5123e-16 1.8725e-16 2.5810e-17 4.1216e-16 5.0646e-17 1.9661e-18 1.7372e-17 1.6524e-16 5.1377e-16 1.8647e-17 8.4598e-17 2.2700e-16 2.1418e-17 5.4950e-16 1.6822e-16 8.2547e-17 1.7362e-16 8.0050e-17 3.7934e-17 1.2826e-16 7.6886e-17 2.6554e-16 3.1770e-16 1.8904e-17 1.9163e-16 1.0975e-16 2.3323e-16 1.5524e-17 7.0823e-17 5.1917e-16 1.4375e-18 2.3808e-17 9.2418e-18 1.5981e-17 2.7105e-17 1.9849e-17 1.7122e-17 1.4339e-16 1.8669e-16 5.5443e-17 2.4324e-17 1.5133e-16 7.3086e-17 4.0162e-16 1.5280e-16 2.6205e-16 3.7571e-17 2.6544e-17 9.2402e-17 7.9727e-19 2.1133e-16 1.2668e-17 1.6324e-17 4.5369e-18 2.2593e-17 2.7809e-16 4.7372e-17 4.0926e-17 6.3085e-17 1.5626e-16 2.8052e-17 1.0655e-16 1.2145e-16 1.8438e-16 2.5932e-17 2.9366e-18 1.8038e-16 3.0641e-17 4.1678e-17 5.4416e-19 9.8800e-18 1.9558e-17 9.8138e-18 6.2066e-17 6.6978e-18 1.2135e-17 1.0444e-17 1.7815e-18 1.6369e-17 2.0686e-17 1.5269e-17 8.4262e-19 1.1578e-18 7.5789e-18 6.6032e-18 1.0155e-17 1.3088e-17 1.1275e-16 1.5052e-16 8.2076e-17 4.4069e-16 7.0766e-17 6.8874e-17 2.0922e-16 5.1941e-17 1.3205e-16 1.8411e-17 2.7509e-16 2.5058e-16 2.0569e-16 1.0852e-16 2.4833e-17 1.0750e-16 2.0408e-16 8.2516e-16 9.7215e-17 2.7902e-17 6.0911e-18 3.0756e-17 4.9619e-17 1.7700e-17 8.3182e-17 1.0213e-16 4.6835e-18 4.2402e-17 4.5961e-17 5.9920e-18 9.0511e-18 1.4656e-16 8.0999e-17 3.5021e-16 3.5730e-17 4.0771e-16 1.6676e-16 4.5166e-17 9.1802e-16 8.4694e-17 4.8890e-16 9.1130e-17 5.9927e-16 1.0906e-17 3.2359e-17 3.0087e-16 6.0656e-16 4.0441e-16 1.0351e-16 1.9627e-16 5.1974e-16 1.2039e-16 1.6775e-16 2.2237e-16 1.9405e-16 4.5467e-17 1.1571e-16 1.1759e-16 6.3581e-16 2.8033e-17 3.7461e-17 9.3279e-17 6.7096e-17 3.1309e-16 9.8773e-16 1.0083e-17 8.5841e-16 1.5720e-15 4.8827e-17 5.0428e-16 1.5878e-16 3.6356e-16 2.6524e-16 1.1744e-16 8.6774e-17 3.6564e-17 1.8830e-17 4.2340e-16 7.0779e-17 5.7906e-18 7.1666e-16 7.7159e-17 2.2563e-16 1.3977e-16 3.8444e-17 2.7308e-16 1.2231e-16 2.9438e-16 3.1965e-16 2.5870e-16 4.1765e-17 2.9485e-16 1.9989e-17 9.2904e-17 1.2505e-16 7.4229e-17 2.9083e-17 1.8874e-16 1.2997e-16 2.8618e-17 4.0926e-17 1.2082e-16 5.5676e-18 7.1874e-18 8.9280e-18 3.2346e-17 4.7943e-18 7.9243e-16 3.2609e-17 1.1195e-16 6.2889e-18 1.7457e-16 9.2405e-17 8.6238e-17 3.2170e-23 9.2839e-17 3.3261e-16 2.4523e-17 7.3153e-17 1.7891e-18 7.7063e-18 1.2429e-16 1.2437e-16 2.4460e-23 4.0064e-16 9.0947e-17 5.2930e-17 5.8303e-17 3.7463e-17 1.9167e-16 9.6252e-17 6.2460e-19 3.9897e-17 6.7325e-17 1.9393e-16 1.0729e-17 1.7261e-17 4.2052e-18 1.4683e-17 4.8834e-18 2.9309e-18 5.9044e-17 9.1056e-17 7.5417e-17 4.2114e-17 1.3832e-16 3.3545e-17 7.3566e-18 1.5505e-17 4.0286e-17 1.4697e-17 3.0812e-18 5.3834e-17 6.8553e-18 2.2330e-17 2.7208e-17 2.5768e-17 1.1005e-18 1.1425e-17 8.0710e-17 6.2740e-16 3.2868e-16 1.1690e-16 4.3306e-16 1.5602e-16 1.3060e-16 1.2174e-16 5.2396e-17 6.1098e-17 1.0072e-16 2.2884e-16 3.3233e-16 8.9724e-17 2.5702e-17 2.3704e-17 5.2337e-17 1.4771e-16 4.0252e-16 1.3888e-16 1.2556e-17 3.9795e-17 1.0936e-16 3.4897e-17 4.5233e-17 4.0050e-17 1.7165e-18 3.7468e-18 9.5146e-17 1.3452e-17 4.7936e-18 6.4651e-17 1.7371e-16 4.8315e-17 6.4713e-16 6.4476e-16 1.2507e-15 4.9131e-16 1.0162e-16 2.1381e-16 3.5491e-16 3.3440e-16 6.1513e-17 3.1580e-16 5.4802e-16 7.0602e-17 6.1104e-16 3.4372e-16 4.0080e-16 8.3955e-16 1.2267e-17 4.8865e-17 6.9454e-17 7.6688e-17 2.5340e-16 5.3902e-16 3.0122e-16 1.6443e-16 3.7133e-17 2.6771e-16 6.3073e-16 2.6222e-16 3.4202e-16 1.4258e-16 4.0255e-16 3.7990e-17 1.3108e-16 1.8241e-16 4.6097e-16 8.5448e-17 6.2065e-16 1.4554e-15 1.1186e-16 1.1706e-15 1.1696e-15 1.0733e-16 5.1620e-17 4.8748e-16 4.3758e-16 2.1234e-16 4.3816e-16 1.3257e-16 7.9041e-17 1.8833e-16 1.3609e-16 5.2539e-16 3.7482e-17 2.8361e-17 1.2266e-17 9.4841e-17 6.9275e-16 1.0441e-17 1.7588e-16 2.3820e-16 7.2080e-17 3.0877e-17 4.8991e-17 2.4139e-16 2.6655e-16 7.0618e-16 1.3307e-16 4.6571e-16 2.7496e-16 6.5419e-17 1.4375e-18 3.2736e-17 1.1090e-16 2.8446e-16 1.5944e-17 3.9697e-17 1.6331e-16 1.2075e-16 2.9095e-17 5.4288e-17 3.6485e-17 1.5442e-17 6.0247e-17 1.1886e-16 1.7261e-16 2.5465e-16 1.2524e-17 3.4250e-17 2.2078e-17 1.5945e-18 4.0701e-17 7.9178e-18 7.5401e-17 1.5123e-18 1.9240e-16 2.1614e-18 1.9677e-17 1.3415e-16 1.0119e-16 1.8286e-17 4.0803e-18 2.3365e-16 3.4761e-17 4.8644e-17 3.6445e-17 6.3627e-17 1.6176e-17 9.0591e-18 3.6468e-17 2.8840e-17 4.7424e-17 1.1678e-16 1.7240e-17 2.8816e-17 2.0137e-16 3.4943e-17 5.7196e-18 2.8207e-18 4.0441e-18 1.6948e-17 2.9602e-17 6.3197e-18 9.2624e-18 5.3052e-18 1.6508e-17 1.2694e-18 6.8349e-17 2.2974e-16 6.6681e-16 1.8440e-16 1.3562e-16 1.4558e-16 5.4572e-17 1.5888e-16 2.8795e-16 3.9911e-17 3.2490e-18 8.0484e-17 7.8697e-16 4.4778e-16 1.8467e-16 2.5962e-17 4.1021e-17 1.5549e-17 9.7611e-16 2.7776e-16 8.2311e-17 1.7461e-17 1.2388e-17 5.4526e-19 5.5722e-17 1.2323e-17 4.5486e-17 2.8101e-18 9.3078e-18 4.2598e-17 9.5873e-18 9.3097e-17 2.7141e-17 7.9010e-16 3.8219e-16 6.8211e-17 9.7369e-16 4.5186e-16 2.5218e-16 5.3355e-16 2.0367e-16 3.4709e-16 3.8730e-17 1.1389e-15 3.2718e-16 8.7075e-16 1.2407e-17 1.0109e-16 2.0943e-16 2.2618e-16 1.5538e-16 1.8657e-16 1.8521e-17 3.6906e-16 3.6199e-17 9.7024e-17 1.1935e-16 1.5225e-16 1.6091e-16 1.0039e-16 2.9434e-16 1.2737e-16 1.9433e-16 2.5161e-17 2.6836e-16 5.6984e-17 1.0083e-16 3.6482e-16 1.5366e-16 4.8827e-17 5.6893e-16 5.2925e-17 4.3697e-22 8.0082e-16 1.3661e-16 6.3710e-16 1.6776e-16 3.3685e-16 3.2616e-16 1.9661e-17 4.8255e-17 2.6899e-17 8.0923e-17 2.0511e-17 8.0920e-17 2.9840e-16 6.2470e-17 3.3679e-17 1.3843e-16 5.2690e-18 1.4584e-16 9.3972e-17 8.9662e-17 4.8306e-17 9.7709e-17 4.8245e-23 2.5089e-16 3.0973e-16 2.7375e-17 5.2422e-16 9.7300e-17 2.8225e-18 1.1526e-16 2.3105e-16 1.4375e-18 5.9520e-18 1.2014e-16 1.5342e-16 4.7354e-16 2.8355e-18 3.8195e-17 5.2827e-17 5.2128e-17 3.8348e-16 9.7294e-17 1.6780e-16 4.3457e-17 1.6103e-16 1.7921e-17 2.8613e-16 1.3060e-16 1.8752e-16 2.1751e-16 2.3121e-17 6.2617e-18 3.4838e-17 2.4253e-16 7.5614e-18 1.6325e-16 5.7636e-18 2.3321e-17 8.7915e-17 4.1224e-17 6.0953e-18 9.0787e-17 3.4581e-17 1.2874e-17 2.0713e-16 3.9248e-17 4.5681e-18 3.5100e-17 1.1484e-16 4.2546e-17 1.6488e-16 1.4359e-16 1.7131e-17 7.5460e-17 3.1476e-17 1.8227e-17 7.0111e-17 7.8333e-18 3.2809e-17 4.6218e-18 2.2431e-18 4.3313e-17 5.4771e-18 1.5630e-17 8.3368e-18 1.4307e-17 3.8082e-18 7.2712e-19 3.4977e-16 2.3488e-16 3.8728e-17 2.1023e-16 3.6394e-17 5.0809e-17 1.8116e-16 8.4746e-17 2.3109e-16 1.1263e-16 1.0331e-16 5.3705e-16 1.2358e-16 1.2090e-16 7.9014e-18 1.5135e-16 3.6345e-16 1.8080e-15 1.8749e-16 8.3706e-17 1.2182e-17 4.6989e-18 8.7242e-18 7.8666e-18 1.0475e-16 1.7165e-18 1.3114e-17 1.7581e-17 4.3719e-17 4.7936e-17 4.6549e-17 2.0628e-16 5.6841e-18 5.5882e-16 5.6193e-16 1.2558e-16 8.6607e-16 1.8255e-16 2.0400e-16 3.2869e-16 1.0582e-17 1.4353e-16 7.7084e-17 1.2542e-16 5.8835e-18 2.4814e-17 3.6731e-16 2.9970e-16 1.3418e-16 2.0853e-16 7.9961e-17 8.3345e-17 1.2462e-16 3.1545e-16 2.9107e-16 4.0920e-16 5.4199e-16 1.8566e-16 2.1417e-16 1.4016e-17 3.7461e-17 2.0211e-16 1.0903e-16 7.1564e-17 1.8995e-17 2.0167e-17 3.5409e-16 1.5366e-16 2.1972e-16 3.1032e-16 4.1017e-16 4.0551e-16 6.3249e-16 2.6363e-16 6.5080e-16 5.8072e-17 3.2429e-16 6.4827e-17 1.8285e-16 2.1039e-16 3.5929e-16 3.7639e-17 3.2632e-16 4.5977e-17 1.2815e-17 2.7844e-16 7.9766e-17 7.0617e-16 9.3085e-17 2.1876e-16 9.5712e-17 1.6208e-16 1.0178e-15 1.7620e-17 1.1579e-16 1.7667e-16 1.9195e-16 4.3224e-18 4.3324e-18 1.4309e-18 1.0443e-16 4.3396e-23 2.7420e-16 4.4921e-23 1.6368e-17 2.0024e-17 1.5981e-17 5.2616e-17 1.0066e-16 1.3434e-16 5.0311e-18 1.4305e-16 7.2769e-17 1.3820e-16 5.1472e-17 1.4815e-17 6.5180e-17 3.1126e-17 2.3150e-17 3.7661e-16 3.3394e-17 2.9438e-17 2.4715e-17 7.0445e-17 3.1671e-18 9.7166e-17 5.6711e-17 7.2879e-18 9.0056e-17 3.7168e-17 9.1704e-17 3.1855e-17 1.7732e-16 4.1466e-16 2.0562e-17 1.4162e-17 1.1729e-16 7.8497e-17 2.1861e-16 1.4955e-16 1.8758e-16 4.1027e-17 9.3051e-17 4.7095e-17 6.2671e-17 1.3275e-16 4.4333e-18 1.3505e-17 1.5955e-17 6.0926e-18 6.2352e-18 1.2517e-17 9.9693e-19 4.3625e-18 2.3172e-17 1.4473e-17 2.8800e-17 1.6508e-17 3.8082e-17 1.4542e-17 3.0309e-18 3.8904e-17 6.3955e-17 2.2913e-16 1.6512e-17 5.3820e-17 2.1211e-16 3.4673e-16 1.3846e-16 1.4512e-16 2.0481e-16 1.7015e-16 1.7522e-16 6.4731e-17 1.9189e-16 1.5560e-16 9.9123e-17 9.6940e-16 3.4720e-17 2.7902e-17 4.8729e-18 1.1107e-17 4.1440e-17 6.5555e-19 2.2336e-17 1.3732e-17 2.9975e-17 1.6547e-17 1.2331e-17 1.3782e-16 4.0601e-16 1.0273e-15 2.8421e-18 1.7358e-16 7.6331e-17 2.1504e-16 1.5600e-16 5.1000e-16 1.8439e-16 2.0770e-16 3.9366e-16 5.0122e-17 1.9893e-17 3.8444e-16 3.3536e-16 4.2804e-16 4.1112e-16 5.0551e-17 1.9935e-16 2.5351e-16 3.1984e-16 1.4470e-22 5.2723e-17 3.4648e-16 4.8512e-17 3.4100e-17 3.6539e-17 1.9340e-22 6.6927e-18 2.8033e-17 1.8730e-16 1.1660e-16 2.0129e-16 1.7891e-17 1.6146e-16 5.9492e-16 3.2190e-17 2.1275e-16 6.2255e-16 1.2930e-17 3.9694e-17 1.9576e-16 2.9584e-15 9.5866e-18 1.7126e-16 1.0539e-16 2.7408e-16 2.1271e-16 3.8142e-16 7.7208e-17 3.6313e-16 1.2609e-16 1.1002e-16 4.4138e-16 9.6475e-16 1.2673e-16 1.1522e-16 7.8853e-17 1.4051e-17 3.2815e-16 4.1765e-17 1.7243e-18 4.6640e-17 8.3293e-17 1.9607e-16 6.0868e-16 1.7450e-17 8.5007e-17 3.3504e-16 5.1512e-17 2.8225e-18 3.8883e-17 1.3919e-18 4.4921e-23 8.9280e-18 8.7797e-17 1.5981e-18 4.7354e-16 9.9244e-18 7.5072e-17 2.0753e-16 2.4367e-16 3.0032e-17 6.8548e-17 1.2250e-16 3.2593e-17 5.5595e-17 1.0375e-17 1.5742e-17 1.7891e-18 9.2476e-17 4.9063e-18 3.2688e-17 1.9803e-16 1.2431e-16 1.2981e-16 2.8733e-17 2.4050e-17 2.8746e-16 1.7710e-16 3.7136e-17 9.9936e-18 8.2564e-17 1.1782e-16 2.9908e-17 7.2955e-18 2.5106e-17 3.9599e-17 4.2418e-17 7.2946e-17 7.6203e-17 1.9536e-18 4.6979e-17 1.8278e-17 3.4690e-17 3.2094e-17 3.9161e-17 3.4313e-24 3.1685e-17 4.4389e-17 1.7221e-17 2.2917e-17 2.2680e-17 8.4133e-18 2.5279e-17 4.0523e-18 9.0947e-18 1.1005e-18 1.7772e-17 6.2532e-17 3.0491e-16 7.7807e-17 4.3703e-17 1.4491e-16 1.2468e-16 2.5969e-17 3.3715e-16 2.1779e-16 4.7302e-17 1.2076e-16 2.0902e-16 1.1100e-16 2.3193e-16 1.6849e-16 1.1739e-16 2.1925e-16 1.6521e-16 1.4491e-15 2.1526e-16 1.1161e-17 2.0304e-18 5.1261e-18 5.4526e-18 6.2277e-17 2.0025e-16 6.8659e-18 5.6203e-18 1.2410e-17 1.0089e-17 3.2357e-17 1.5516e-17 4.3698e-16 5.9968e-16 2.4515e-16 2.0951e-16 2.1160e-16 5.9531e-16 1.8443e-16 1.1377e-16 7.5418e-16 1.0794e-16 1.2986e-16 4.8986e-16 9.8154e-17 1.2061e-16 4.9628e-17 4.4818e-16 2.3109e-16 4.2169e-17 8.5866e-17 2.2211e-16 7.8714e-17 1.0065e-16 2.2754e-16 1.0888e-15 2.5575e-16 4.8719e-17 4.0846e-16 2.6771e-17 3.5041e-17 8.9905e-17 2.0988e-16 3.0193e-16 3.5782e-17 5.6984e-17 3.9325e-16 4.1847e-16 5.4370e-16 3.7841e-16 4.3963e-16 7.9388e-17 1.3983e-17 1.8924e-15 4.9371e-16 3.4938e-16 1.3120e-16 3.3057e-16 9.1163e-17 5.3871e-16 4.5746e-16 1.0125e-15 6.0222e-17 7.6452e-17 8.2759e-17 1.4645e-16 1.1780e-16 1.4358e-16 2.1378e-16 3.5126e-17 5.4865e-16 1.7402e-17 3.8624e-16 6.9961e-17 4.7893e-16 9.7262e-17 2.9692e-17 2.9519e-16 2.4494e-17 5.3433e-16 7.2975e-17 1.0020e-16 6.9434e-17 2.6585e-16 1.5812e-17 5.9520e-18 7.8555e-17 8.3101e-17 2.0728e-17 8.3648e-17 2.3707e-17 3.0941e-16 1.2123e-18 1.5131e-16 4.3119e-17 4.5296e-17 5.7284e-17 6.9972e-17 1.6978e-17 9.4451e-17 8.9455e-18 1.4385e-16 3.7615e-17 6.3781e-17 3.9136e-18 2.8504e-17 7.2291e-17 9.3762e-17 2.4706e-16 1.0086e-17 2.7694e-17 1.2050e-16 1.0681e-16 6.6495e-17 1.2904e-16 7.6171e-17 2.4890e-17 8.4342e-17 2.4425e-16 2.5777e-17 3.1132e-17 1.4548e-16 1.2243e-16 2.4850e-17 6.7513e-18 2.8552e-17 2.4190e-16 1.5960e-17 4.3920e-18 4.5280e-17 1.5542e-17 8.9075e-19 5.7773e-19 4.4114e-17 3.4277e-18 3.3705e-18 3.5313e-17 1.3642e-17 2.8614e-17 1.0155e-17 1.2361e-16 3.3764e-16 2.9741e-16 3.1978e-17 1.6447e-16 8.3908e-17 1.4603e-16 1.0110e-16 2.0503e-17 2.7396e-16 2.7021e-16 1.0691e-16 6.8461e-17 1.1850e-16 2.7606e-17 6.7726e-18 2.2491e-16 1.3799e-16 2.2206e-15 3.4720e-16 1.2556e-17 1.2182e-18 2.8193e-17 1.0360e-17 9.1777e-17 1.7330e-16 6.8659e-18 1.8734e-17 1.4479e-17 7.8470e-18 2.7563e-17 9.0511e-18 4.0712e-16 7.3894e-17 3.7914e-16 1.1693e-16 1.2730e-16 2.5462e-16 2.6347e-17 4.7862e-16 1.0688e-16 1.7990e-16 2.0049e-16 5.1721e-16 7.9068e-16 1.7356e-16 8.9950e-17 4.2123e-16 2.8886e-16 6.5171e-17 2.8622e-17 8.8845e-18 4.6302e-18 6.2309e-17 8.4293e-16 3.7192e-16 1.7760e-22 4.1411e-16 4.3321e-17 6.6927e-18 2.2426e-16 2.6222e-16 7.3846e-16 3.1032e-16 9.8400e-17 1.8995e-17 2.0167e-17 6.0089e-16 2.1275e-16 8.6669e-16 4.1377e-16 4.1348e-22 4.3697e-22 1.1732e-16 2.6603e-16 3.2654e-16 3.7855e-16 6.2766e-16 1.1952e-16 1.1403e-16 1.7372e-16 2.3440e-16 1.7314e-16 1.9952e-16 1.6552e-17 6.0777e-16 1.5885e-16 3.0134e-17 8.7614e-18 1.7563e-16 2.3092e-16 1.3574e-16 9.1386e-17 2.6152e-16 2.8992e-16 2.7789e-17 3.7115e-17 9.0156e-17 3.5588e-16 1.0253e-16 2.2465e-16 1.9758e-17 1.4303e-16 6.2635e-17 4.3125e-18 1.3392e-17 7.8555e-17 4.4747e-17 7.9721e-18 1.1342e-17 5.2682e-18 5.0311e-18 1.1759e-16 2.6566e-17 2.5319e-16 1.1118e-16 1.9753e-18 8.2433e-17 9.9036e-17 7.4079e-18 5.8146e-17 4.0244e-17 4.0068e-17 5.8679e-16 2.5517e-16 9.2638e-17 1.7879e-16 1.1871e-16 1.7491e-17 3.6743e-17 5.8303e-17 1.6674e-17 2.2673e-16 1.9948e-17 3.5703e-17 1.7711e-16 1.9312e-17 2.3694e-16 6.9035e-17 6.6890e-17 2.0449e-17 6.5545e-17 9.1387e-17 8.1080e-17 7.2453e-18 5.3249e-17 8.6467e-17 1.7290e-17 1.1858e-17 3.6741e-17 1.8651e-18 7.3042e-17 3.8323e-17 1.3708e-17 1.2464e-18 1.0112e-17 1.5051e-17 8.3368e-18 8.8043e-18 1.2694e-17 1.8178e-17 6.2437e-17 5.1956e-16 1.2045e-16 4.3107e-18 3.7472e-16 2.7474e-17 3.2106e-16 2.9023e-16 1.0347e-17 1.6841e-16 2.7809e-16 5.5167e-17 5.4935e-16 8.1866e-17 9.7074e-17 1.6974e-17 8.3574e-17 8.0839e-16 3.1942e-16 7.8125e-17 2.8831e-17 1.7087e-18 1.0360e-17 2.9500e-17 1.8485e-17 5.0636e-17 2.2481e-17 1.8616e-17 4.4840e-18 1.4381e-17 2.4567e-17 2.9720e-16 4.9736e-16 7.0042e-17 8.1204e-18 1.7203e-18 2.9228e-16 5.8810e-23 1.5693e-16 5.1623e-16 2.6244e-16 4.7844e-16 3.5061e-16 5.0168e-16 3.5301e-17 5.8313e-16 4.2796e-16 2.8886e-16 2.1085e-16 6.9511e-17 2.0434e-16 4.5839e-16 1.5817e-16 7.2399e-17 5.9292e-16 1.5345e-16 6.0898e-18 1.2378e-16 4.0156e-17 2.0324e-16 7.2674e-16 1.2437e-16 4.4451e-16 2.4153e-16 1.1112e-15 1.4117e-16 4.8285e-16 3.6641e-16 1.0986e-16 5.9479e-16 1.0717e-15 1.6780e-16 6.2484e-16 5.7520e-17 3.5851e-16 3.6564e-17 4.6865e-16 1.3573e-16 9.3586e-16 3.6095e-16 3.0549e-16 3.7639e-16 5.8271e-23 1.5448e-16 5.1990e-16 7.4964e-17 1.4890e-16 7.5348e-17 5.4885e-23 1.1980e-16 1.0615e-16 2.2415e-17 2.0655e-16 1.0892e-16 6.4842e-17 3.2661e-17 1.4541e-18 6.9158e-17 5.7765e-18 1.6884e-16 4.3749e-17 1.5276e-17 2.2270e-16 4.4921e-23 3.7200e-17 7.7015e-18 1.3264e-16 5.5805e-17 6.2382e-17 2.1073e-17 1.7609e-17 4.4855e-17 2.5411e-17 3.3168e-18 3.5001e-17 5.5309e-17 2.8756e-17 5.9422e-17 5.5559e-18 3.0504e-16 2.3975e-17 4.3339e-17 8.7699e-18 1.0175e-17 1.8211e-17 1.7801e-16 2.2684e-17 2.1135e-17 1.4841e-16 9.6201e-17 1.4400e-17 4.2473e-17 5.2641e-17 1.5301e-18 2.3833e-17 1.3411e-23 3.9229e-19 8.7608e-18 1.2954e-16 3.8793e-16 2.3713e-17 2.8871e-17 1.7395e-16 1.0703e-16 1.3134e-17 2.9972e-17 1.8029e-17 4.5897e-17 1.4157e-17 1.0817e-17 3.8005e-17 4.0634e-17 1.7695e-17 6.2321e-18 8.0049e-18 2.8945e-17 2.2737e-17 2.2011e-18 3.9669e-23 2.8358e-17 6.0376e-16 3.3595e-16 9.6999e-17 3.9791e-17 4.7177e-18 1.0538e-17 9.0788e-17 2.3692e-17 1.8329e-16 2.5451e-17 1.5076e-16 3.5028e-16 2.2431e-16 1.1423e-16 2.2575e-18 1.4994e-16 7.9687e-17 3.7904e-16 1.3193e-16 2.0926e-17 2.6801e-17 1.1534e-17 9.2694e-18 7.3421e-17 8.0871e-17 7.7241e-18 1.6861e-17 1.8616e-17 8.0712e-17 3.8349e-17 1.2413e-16 2.2527e-16 3.9789e-17 1.8272e-17 8.1204e-18 1.3934e-16 2.3669e-16 1.2985e-16 6.4732e-17 2.2585e-16 2.1164e-18 1.1163e-16 8.9517e-17 2.0176e-16 2.3534e-17 1.7680e-16 4.9536e-16 1.6971e-16 3.8336e-18 2.2080e-16 1.3882e-22 1.8058e-16 5.3202e-16 3.4131e-16 7.5463e-17 2.2733e-17 5.9680e-16 5.6318e-16 1.1378e-16 2.1901e-22 1.4984e-17 1.0883e-16 2.6209e-22 7.1564e-17 7.5979e-17 1.3108e-16 4.3994e-16 4.6097e-16 5.0048e-16 1.4223e-16 8.9973e-16 4.0551e-16 1.8108e-16 6.2313e-16 4.8182e-16 9.8938e-17 1.2762e-16 1.0534e-16 3.8339e-16 5.9450e-16 7.6277e-16 2.2583e-17 3.1700e-17 7.1725e-17 4.6132e-16 1.2494e-16 3.8997e-17 6.8339e-17 4.2152e-17 1.4931e-16 3.7241e-16 8.7938e-17 3.6979e-16 2.8832e-17 2.9333e-17 6.8291e-17 2.9083e-18 3.0257e-17 1.9496e-16 5.1512e-17 2.4415e-16 2.1108e-16 8.3513e-17 2.8750e-18 1.4880e-18 1.5403e-17 1.7899e-16 5.4211e-17 4.2533e-17 3.2926e-17 2.2640e-17 7.0312e-17 3.6096e-23 2.5429e-17 3.7060e-17 1.7778e-16 2.4347e-16 1.1884e-16 3.7965e-17 1.6996e-17 1.3272e-16 2.5513e-16 3.1891e-17 1.1115e-16 3.4047e-16 1.1504e-16 2.1928e-17 1.4576e-17 7.2045e-18 2.1864e-18 6.5936e-17 1.1243e-17 2.0502e-17 2.8205e-16 1.6356e-16 2.3603e-17 3.1383e-18 3.5043e-18 3.4587e-17 8.4239e-17 6.3946e-18 2.8654e-17 1.7014e-16 3.6556e-17 5.2535e-17 6.1005e-18 4.6402e-17 1.9874e-17 9.2134e-18 2.6111e-17 6.5322e-17 4.2174e-17 3.9877e-18 1.0595e-17 4.6344e-18 2.2577e-17 2.0463e-17 1.1005e-17 7.6165e-18 3.1993e-17 1.3033e-16 1.7925e-16 6.0402e-17 2.9180e-17 2.7969e-16 2.8603e-17 1.4939e-16 3.8136e-16 1.2811e-16 8.7724e-17 1.5977e-16 2.3928e-17 1.0835e-16 3.6173e-17 1.4561e-16 4.5264e-17 2.0408e-16 9.3921e-16 1.6665e-16 1.3951e-18 1.6649e-17 2.1786e-17 6.5431e-18 2.8844e-17 6.9318e-18 7.7241e-18 4.1215e-17 3.9300e-17 1.1210e-18 3.7151e-17 4.0084e-17 4.6141e-17 2.4300e-16 6.0145e-16 1.6241e-18 8.7735e-17 2.8869e-16 5.1377e-16 9.8079e-17 2.6820e-16 1.0159e-16 1.1847e-16 4.2023e-16 2.4538e-16 3.4124e-16 2.5124e-16 1.3479e-17 3.0692e-16 1.4184e-16 1.5947e-16 3.9980e-16 3.2412e-17 1.4379e-16 5.8953e-16 6.4682e-17 2.5007e-16 3.6539e-17 2.4755e-17 3.3464e-17 7.0082e-17 1.3486e-16 3.7312e-16 1.2580e-16 6.5302e-16 2.2794e-16 1.8150e-16 7.5111e-17 2.0093e-16 2.3193e-16 3.4911e-16 5.2925e-17 3.0763e-16 8.9008e-16 2.1091e-16 2.0552e-17 1.5701e-16 4.1844e-18 2.3905e-16 4.6203e-16 4.4395e-17 2.2480e-16 3.0864e-16 1.4358e-16 4.2483e-16 1.7391e-16 2.5880e-16 3.8997e-17 1.1740e-16 7.7278e-17 3.2815e-16 1.0789e-16 7.0695e-16 3.4980e-17 1.1533e-16 2.3467e-16 4.8991e-17 5.0604e-16 3.5300e-16 1.2997e-16 1.8601e-17 2.3850e-16 1.8886e-16 7.0986e-17 1.4375e-18 4.4640e-18 4.6209e-18 8.6297e-17 3.1889e-17 1.9849e-17 1.0405e-16 3.9306e-23 8.4860e-18 9.4715e-17 3.4274e-17 9.9856e-17 1.3827e-17 4.8885e-17 3.4898e-17 1.2964e-17 7.1564e-18 4.1100e-17 8.9949e-17 2.4715e-17 2.9743e-17 2.3753e-18 1.6324e-17 1.7694e-16 3.6440e-18 9.2218e-17 9.6929e-17 3.7894e-17 1.5990e-16 3.8788e-18 6.4265e-17 1.2243e-16 2.2316e-17 7.1004e-17 9.8472e-17 4.8291e-17 1.2178e-16 1.5560e-16 5.7958e-17 6.4755e-17 4.5777e-17 8.2800e-18 3.5409e-17 1.6773e-16 4.3920e-19 1.2359e-17 7.8333e-18 2.9692e-19 3.9863e-17 6.5797e-17 2.2436e-17 1.9380e-17 8.6835e-18 2.2737e-18 1.4307e-17 5.0777e-17 1.6724e-17 1.0366e-16 3.3777e-16 1.0482e-16 3.4817e-17 1.0682e-16 1.6560e-17 8.3772e-17 2.4922e-16 6.8982e-17 5.1985e-17 1.4715e-16 1.7281e-16 3.5043e-16 9.6145e-17 1.1175e-16 1.4145e-17 1.3605e-16 7.7149e-16 2.2915e-16 6.9755e-18 3.2486e-18 4.6989e-18 3.3261e-17 3.4744e-17 1.5404e-18 1.6306e-17 9.3671e-19 2.1718e-17 1.2331e-17 6.2317e-17 1.0086e-16 8.4139e-17 1.2931e-16 5.2380e-16 2.4361e-16 2.5805e-17 8.7683e-16 9.0333e-17 1.1377e-16 3.5088e-16 5.2911e-17 1.5264e-16 5.9678e-17 3.5717e-16 1.7650e-17 1.2407e-16 3.2350e-16 3.6108e-18 2.8368e-16 4.7022e-16 2.6654e-17 2.7781e-17 3.3551e-17 3.6199e-17 1.1319e-16 2.8417e-16 3.9584e-16 3.7133e-17 2.4094e-16 6.3073e-17 2.1727e-16 2.1765e-16 5.8709e-16 1.2524e-16 6.1733e-16 2.1175e-16 5.0432e-16 3.3095e-16 3.6621e-16 1.2930e-17 2.9109e-16 4.1949e-17 4.7947e-16 4.9611e-16 3.6765e-16 1.9357e-16 1.0252e-16 3.4642e-16 2.5363e-16 2.1618e-16 9.9910e-17 7.3207e-16 1.9579e-16 1.4713e-17 1.3547e-16 7.8534e-17 5.9381e-16 6.1330e-17 3.9342e-16 9.2020e-17 3.6545e-17 2.7933e-16 8.6618e-17 1.1213e-17 4.1375e-16 1.1877e-17 1.6141e-16 4.8843e-16 4.2024e-16 1.1161e-16 4.3749e-17 9.7208e-18 5.5676e-18 4.4921e-23 1.1904e-17 2.3104e-17 1.2625e-16 1.4350e-17 1.3752e-16 5.3999e-17 1.5345e-16 6.5463e-17 1.5247e-16 4.5330e-17 3.2942e-17 1.1852e-16 9.5853e-18 1.0375e-17 9.3525e-17 8.9455e-18 3.3394e-17 3.5980e-17 1.3793e-16 8.3751e-17 5.5425e-17 2.0988e-17 8.8469e-17 2.5508e-17 1.0807e-17 8.7455e-18 5.8357e-17 3.9350e-17 6.7603e-17 1.9075e-16 5.3741e-17 9.3983e-17 1.5731e-16 1.0127e-16 1.4030e-17 6.4400e-17 2.3447e-17 2.3010e-17 5.4234e-17 1.5215e-16 6.0815e-17 3.8857e-17 4.5515e-17 3.0744e-18 1.4607e-18 5.5952e-18 1.5588e-17 1.4251e-17 4.9846e-18 3.1161e-19 8.4262e-18 2.4314e-17 1.0610e-17 1.1005e-18 1.2694e-17 3.1266e-17 2.7581e-16 3.3013e-16 1.6344e-17 7.3945e-17 6.2678e-17 1.0538e-17 2.1253e-16 8.2923e-17 1.3895e-16 2.3501e-16 1.9580e-16 7.1784e-17 3.3350e-16 1.3708e-16 1.6141e-16 1.0184e-16 2.5072e-16 3.1195e-16 5.3468e-16 4.4643e-17 2.0304e-18 5.5533e-18 5.7252e-17 5.3099e-17 2.3106e-18 6.8659e-17 1.8734e-17 3.5163e-17 7.8470e-18 1.4381e-17 4.2411e-16 4.7498e-17 7.1052e-18 2.1165e-16 6.6587e-17 4.1287e-17 1.2552e-16 1.5620e-16 4.8843e-16 1.4721e-16 2.2434e-16 5.2400e-17 1.7903e-16 7.2525e-16 2.9417e-18 1.4268e-16 4.0775e-16 3.5386e-16 4.9836e-17 8.1778e-18 1.9990e-16 1.3891e-17 1.2462e-16 4.1888e-16 2.9107e-16 2.2165e-16 9.1347e-17 2.0423e-16 7.4289e-16 1.1914e-16 1.1238e-16 3.3425e-16 4.1935e-17 9.8400e-17 2.4693e-16 2.5208e-16 7.0819e-16 2.2457e-16 3.6621e-17 1.2930e-17 3.0432e-16 2.7966e-17 7.4216e-16 1.2942e-16 7.7640e-17 1.9142e-16 8.9965e-17 1.6207e-17 2.2610e-16 6.6399e-16 2.0174e-16 5.5141e-16 7.4587e-18 1.9678e-16 2.5812e-16 1.7866e-15 7.5334e-16 2.4882e-16 1.8793e-16 6.9449e-17 2.3841e-16 1.5001e-16 4.9972e-18 7.0479e-17 3.8596e-17 2.0636e-16 1.9631e-16 6.4836e-16 1.7907e-16 9.7300e-17 9.3143e-17 9.4431e-17 5.7763e-16 8.6249e-18 4.6500e-23 8.3176e-17 4.7943e-17 3.6672e-17 8.7901e-17 1.0273e-16 2.1382e-17 1.6851e-16 1.3861e-17 1.1056e-16 2.1618e-17 1.0864e-17 7.8599e-17 3.3012e-17 4.2595e-17 6.1724e-17 4.1957e-17 2.3714e-17 3.5877e-17 2.4460e-23 5.4633e-17 2.4874e-17 3.0246e-18 1.2608e-16 4.8991e-17 6.5591e-18 1.8871e-16 3.1230e-18 2.2165e-17 2.0555e-16 9.3462e-19 3.2186e-17 1.0317e-16 1.7522e-18 2.8387e-16 3.1742e-17 2.4859e-16 1.6237e-16 5.8950e-17 6.2738e-17 4.4255e-18 4.5621e-17 1.0640e-17 8.1252e-18 3.1460e-18 1.3553e-17 2.5238e-18 7.7031e-18 1.9939e-18 7.7901e-18 2.4436e-17 8.1046e-18 3.7894e-18 9.9048e-18 8.8859e-18 8.2891e-17 5.5163e-17 2.2397e-16 2.5937e-16 1.2700e-16 8.4919e-17 3.0109e-18 2.6411e-17 1.7359e-16 7.5387e-17 1.7545e-16 3.1293e-16 3.7820e-16 1.0479e-15 2.2846e-17 7.9014e-18 4.1021e-17 1.2633e-16 2.2138e-16 2.9164e-16 2.0926e-17 2.8425e-18 1.0252e-17 9.8147e-18 3.8022e-17 3.4659e-17 3.2613e-17 1.8734e-17 1.4479e-17 2.3541e-17 1.9175e-17 1.4223e-17 9.4995e-17 1.1795e-16 7.8417e-16 3.9302e-16 1.8579e-16 1.4345e-16 7.9041e-17 1.4712e-16 8.8727e-17 1.3334e-16 1.0708e-16 3.2574e-16 2.7265e-18 2.6476e-17 1.7060e-16 1.0446e-16 1.0941e-15 7.6672e-18 6.2560e-16 2.6654e-16 3.2412e-17 3.5468e-16 3.4131e-16 3.2341e-17 3.9783e-17 9.7437e-17 1.4234e-16 2.0078e-16 1.4016e-17 7.4921e-18 7.7733e-17 5.8709e-17 8.9455e-18 7.5979e-17 1.6133e-16 1.9314e-16 2.1275e-16 1.8310e-16 2.8446e-16 3.0432e-16 7.2712e-16 7.9317e-16 8.8676e-17 2.2607e-16 1.0969e-16 1.4018e-16 1.6409e-16 8.6508e-17 9.8441e-17 1.9790e-16 1.0351e-16 7.4587e-18 9.7472e-17 8.6040e-16 9.4598e-17 2.5525e-16 2.9614e-16 1.6509e-16 6.2504e-17 3.4804e-18 7.2419e-17 2.1821e-16 2.5629e-17 1.0498e-16 8.0167e-17 3.7807e-17 8.3567e-17 3.8991e-16 1.4166e-16 2.1169e-17 3.8883e-17 3.6050e-16 4.4921e-23 1.1904e-17 1.3401e-16 8.3101e-17 3.3483e-17 1.4461e-16 2.1731e-16 2.7923e-16 8.4860e-18 1.2475e-16 8.8449e-18 9.2650e-18 1.3432e-16 2.7797e-17 8.0172e-17 1.2964e-17 5.3673e-18 6.8501e-17 1.5291e-16 2.5433e-16 7.0445e-18 7.9178e-19 4.1198e-17 5.0662e-17 4.2270e-17 4.8991e-17 2.4269e-16 3.4105e-17 1.2117e-16 8.3118e-18 3.3663e-17 8.5518e-17 1.2531e-16 4.7859e-17 1.3702e-16 3.2303e-17 1.3124e-16 3.6503e-17 7.5975e-18 5.2421e-17 9.8800e-19 1.2549e-16 7.4399e-17 4.6180e-24 3.1623e-17 1.0337e-17 3.5436e-17 6.6806e-18 2.3109e-18 7.1280e-17 1.5580e-18 2.2751e-17 6.1364e-17 4.0926e-17 3.3016e-18 8.8859e-18 2.5449e-17 6.4740e-16 3.0032e-16 3.1267e-17 1.3794e-16 8.9300e-17 4.5916e-17 2.0345e-16 2.5651e-16 8.2778e-17 5.0360e-17 6.7270e-17 2.9910e-16 1.6210e-15 3.3318e-17 1.3545e-17 1.6691e-16 3.2458e-16 6.3732e-17 2.0832e-17 4.3597e-23 1.9898e-17 8.1163e-18 4.2530e-17 5.2444e-18 3.0808e-17 4.2053e-17 2.0608e-17 8.7907e-17 1.1210e-17 3.2357e-17 1.6421e-16 1.2078e-16 1.8900e-16 4.7964e-16 4.8722e-18 3.3374e-16 1.6138e-16 8.8451e-17 2.8443e-16 8.0661e-18 6.3493e-18 5.0122e-17 3.9785e-17 2.1267e-16 4.7068e-17 1.8610e-17 3.3698e-18 2.0582e-16 3.8336e-18 6.5422e-17 1.5992e-16 1.4470e-22 1.4978e-22 8.7913e-17 1.6710e-16 1.5345e-16 1.2180e-17 2.1661e-16 2.5432e-16 7.7090e-17 2.9968e-16 7.7733e-18 5.0322e-16 1.6996e-16 2.8492e-17 1.6133e-16 1.5022e-16 1.8911e-16 1.2085e-15 1.9395e-16 1.5878e-16 8.3899e-17 2.3463e-16 6.9503e-17 5.1607e-16 1.8282e-16 1.0879e-16 4.0112e-16 1.5925e-16 1.0037e-16 4.9955e-16 5.4576e-17 1.2307e-16 1.4897e-16 6.5903e-17 8.7458e-17 1.7017e-16 1.9450e-16 2.0549e-16 1.6668e-16 9.2232e-17 7.4144e-17 2.3154e-16 1.1533e-16 6.0210e-17 8.9075e-17 1.6286e-16 7.2040e-18 6.6430e-17 8.1560e-17 1.5665e-16 1.3887e-18 1.5311e-17 1.4375e-18 1.0416e-17 2.8649e-16 1.8059e-16 1.2118e-16 2.2684e-17 6.0585e-17 1.1572e-16 2.0609e-17 4.3892e-17 2.7088e-16 8.3385e-17 1.0469e-16 9.1060e-17 9.3377e-17 7.5931e-17 6.6197e-17 8.5626e-18 8.3407e-17 3.3884e-16 3.2248e-16 4.7507e-18 9.3279e-18 4.0832e-17 1.5742e-16 6.4841e-18 4.4456e-17 2.1979e-17 6.8706e-17 6.4832e-17 3.7233e-17 2.8506e-17 2.1457e-17 1.2259e-23 3.0488e-17 1.0017e-16 3.0521e-17 2.1582e-17 7.0766e-17 2.6120e-17 1.8327e-16 2.7267e-17 6.7635e-18 5.4234e-17 8.8938e-18 2.2472e-17 3.1706e-17 4.8991e-18 3.0812e-18 4.9846e-19 4.2690e-17 6.3197e-18 1.5051e-17 7.7305e-17 3.3016e-18 3.0466e-17 4.9444e-17 3.0915e-16 8.0134e-16 1.6877e-16 9.7820e-17 1.3007e-16 8.1670e-17 7.5106e-17 1.1026e-16 8.5241e-17 8.8266e-17 8.2886e-17 2.2732e-16 4.5031e-16 6.2827e-17 1.6932e-17 9.1943e-17 1.6715e-16 7.6143e-16 2.1700e-22 2.6507e-17 2.7613e-17 1.7087e-18 2.1810e-18 9.1777e-18 5.8535e-17 2.9180e-17 2.2481e-17 4.6539e-17 1.9057e-17 3.3555e-17 2.0430e-16 1.5199e-16 4.1636e-16 4.9943e-16 2.7609e-17 5.9694e-16 1.2910e-16 9.4097e-17 2.0204e-16 4.4767e-16 4.6138e-16 4.1009e-17 4.7245e-16 8.5203e-23 2.9417e-18 1.1787e-16 5.0547e-16 6.1384e-16 6.1337e-17 3.2711e-16 1.6881e-16 6.0193e-17 7.6688e-17 1.0860e-16 1.6844e-22 1.1367e-17 5.4808e-17 1.5472e-16 5.3542e-17 2.3127e-16 4.7950e-16 3.2648e-16 8.3869e-18 1.0735e-16 2.4693e-16 7.0583e-17 7.5111e-17 3.1913e-16 4.5165e-16 1.2930e-17 1.0585e-16 6.9916e-17 2.4713e-15 2.0851e-16 1.0733e-16 3.5489e-16 3.9752e-17 6.0775e-17 6.6847e-17 3.4744e-17 1.8445e-16 8.0923e-17 7.8317e-17 1.7839e-16 1.0801e-16 1.1066e-16 3.5451e-18 3.5046e-17 1.9144e-16 1.0539e-15 1.5662e-16 2.0691e-17 5.2054e-23 3.0434e-17 9.5719e-17 9.2638e-16 1.1633e-17 3.0113e-16 5.3433e-17 8.4422e-17 1.8911e-16 4.9993e-17 1.5032e-16 4.4921e-23 2.9760e-17 6.3152e-17 6.3924e-17 1.8655e-16 1.2760e-17 1.6068e-16 3.7733e-17 7.0312e-17 9.3560e-17 8.8449e-18 3.0883e-18 6.9136e-18 1.8979e-16 2.4712e-16 1.4631e-16 2.2364e-17 3.2538e-17 7.3595e-18 1.6185e-16 1.3306e-17 2.6920e-17 1.6713e-16 6.0491e-18 1.0422e-16 1.0807e-17 1.0203e-17 7.1999e-17 1.2492e-18 2.6986e-16 1.3057e-16 1.0748e-17 1.2445e-17 6.7081e-17 5.7821e-17 4.8944e-18 1.3002e-16 4.2098e-17 4.9492e-17 1.5708e-16 5.4504e-17 2.1271e-17 1.3660e-17 5.4382e-17 1.1968e-17 1.7528e-17 1.1688e-17 4.3053e-18 4.7181e-17 2.2431e-18 4.9857e-18 1.0954e-17 2.0262e-17 2.1979e-17 1.1005e-17 2.5388e-17 2.9812e-17 6.2437e-17 1.6688e-16 6.5732e-17 1.5519e-16 6.6048e-17 2.2582e-18 2.4141e-16 2.8886e-16 1.6900e-16 2.0307e-16 6.4027e-16 1.4623e-16 1.7200e-15 7.7106e-17 5.6438e-18 2.9705e-17 1.3605e-17 4.1258e-16 7.0134e-16 2.9297e-17 5.6444e-17 1.3349e-23 2.3446e-17 1.9666e-18 2.6187e-17 2.1456e-17 9.3671e-18 2.1718e-17 2.4662e-17 4.3143e-17 6.2065e-17 4.2476e-16 2.6715e-16 5.1771e-17 2.2737e-16 1.1578e-15 3.6579e-16 1.0727e-16 3.6878e-16 1.3712e-16 5.7144e-17 3.0984e-16 5.9181e-16 1.9113e-15 7.5014e-16 1.5819e-16 3.1002e-16 7.6188e-16 2.4535e-16 6.9511e-17 1.0750e-15 6.4360e-16 1.9651e-16 7.7570e-17 9.5406e-16 1.3072e-16 8.5258e-16 3.0944e-16 2.0915e-22 1.4016e-17 1.1238e-16 4.3530e-16 3.4386e-16 1.0735e-16 2.7542e-16 1.1092e-16 1.0730e-17 1.1583e-15 2.4414e-17 3.1032e-16 5.9541e-16 8.3899e-17 2.3974e-16 9.5866e-18 2.1465e-16 1.9572e-16 2.3014e-17 2.5728e-16 7.8644e-17 4.2465e-17 1.3449e-16 7.9041e-17 2.1071e-16 3.3655e-16 1.6293e-16 1.6421e-16 2.8361e-17 1.7523e-17 2.8277e-16 2.0835e-16 3.6893e-16 9.3110e-17 6.9961e-17 3.8283e-16 1.8835e-16 2.9692e-18 1.6141e-16 7.0599e-17 8.6647e-18 1.0159e-16 1.3971e-16 7.9155e-17 3.2013e-17 4.4921e-23 3.1248e-17 6.4692e-17 1.7419e-16 1.5944e-17 1.3185e-16 7.1911e-16 1.8867e-17 5.0916e-17 9.2405e-17 1.1056e-18 2.1618e-17 2.5679e-17 9.2019e-17 1.3488e-16 9.4451e-17 1.8786e-17 1.6269e-17 1.3819e-16 1.0125e-16 1.4872e-17 2.1299e-16 6.7627e-17 2.3440e-17 1.8949e-17 3.8904e-17 1.1661e-16 1.5764e-16 4.9968e-17 1.2080e-16 4.8964e-17 4.4862e-17 5.4501e-17 1.3142e-16 5.8172e-17 2.4015e-16 7.7830e-17 5.2756e-17 9.9853e-17 1.8320e-17 6.7019e-17 4.9966e-18 1.5119e-17 3.8274e-17 9.4099e-17 2.5955e-17 3.1085e-18 1.3361e-18 5.5847e-18 1.4954e-18 1.5580e-18 3.5390e-17 2.8945e-17 5.3052e-18 7.7037e-18 8.8859e-18 3.6356e-18 5.4556e-18 4.6175e-17 8.8827e-18 1.8934e-16 1.2704e-16 8.4305e-17 4.7457e-17 3.2805e-17 4.2719e-16 1.7491e-16 2.3424e-16 5.3173e-18 1.5558e-15 1.4755e-16 2.7090e-17 8.2041e-17 7.1913e-17 1.0197e-15 5.9718e-16 1.6741e-17 5.2789e-18 2.4776e-17 1.6358e-18 3.0811e-17 5.2374e-17 1.8881e-17 9.3671e-19 1.5513e-17 3.8114e-17 1.1984e-17 2.9739e-17 1.0449e-16 1.3358e-16 3.8828e-16 1.2343e-16 4.2319e-16 7.3517e-17 9.5979e-17 2.7854e-16 4.2750e-16 6.3493e-18 1.3670e-16 1.7406e-17 3.8716e-16 4.8244e-16 1.0546e-16 7.0766e-17 3.2858e-16 2.2235e-16 2.4942e-16 2.1323e-16 3.9357e-16 1.1024e-16 7.7570e-17 1.6844e-22 5.6833e-18 5.4808e-17 3.5895e-16 3.3464e-17 3.5041e-17 1.1987e-16 2.0988e-16 3.2709e-16 2.4153e-16 6.5532e-16 3.1510e-22 2.7898e-16 4.0187e-16 3.6621e-17 3.7497e-16 5.9541e-16 1.5381e-16 3.4685e-16 7.7172e-16 1.2103e-16 3.9575e-16 2.3223e-16 5.6723e-17 1.4942e-16 4.2465e-17 3.0741e-17 5.7211e-16 1.8833e-16 1.4713e-17 1.0508e-15 1.0174e-16 2.6589e-17 3.1541e-16 5.2690e-18 3.7329e-16 2.7843e-17 8.5351e-16 3.3481e-16 1.1533e-16 3.5509e-17 1.8260e-16 3.1846e-16 5.9073e-17 6.9318e-17 2.4325e-16 1.5524e-17 1.4303e-16 1.6703e-17 4.3125e-18 1.7856e-17 3.0806e-18 5.5934e-17 6.0588e-16 2.3677e-16 3.0556e-16 2.2640e-17 2.6670e-17 1.4900e-16 3.6485e-17 3.0883e-17 2.2914e-16 1.3419e-17 2.9475e-23 8.6117e-17 1.3597e-16 7.7063e-17 1.1448e-17 3.1173e-16 5.4790e-17 5.9383e-17 1.1815e-16 4.9905e-17 1.1515e-16 3.6023e-18 1.3847e-17 1.2657e-16 5.6214e-18 2.1057e-17 4.6924e-17 1.0047e-16 4.1627e-17 1.5691e-18 1.0951e-23 8.8098e-18 1.5871e-17 2.4246e-17 1.2937e-16 3.2649e-18 2.7664e-17 9.7647e-17 2.7054e-17 5.9110e-18 2.1521e-17 4.7190e-18 8.4550e-18 7.8534e-17 3.0812e-18 6.3803e-17 7.4785e-18 3.3705e-18 2.8366e-17 1.5158e-18 7.7037e-18 8.1243e-17 2.1814e-17 2.7157e-16 1.8216e-16 1.0446e-16 2.7986e-16 1.8534e-17 2.9356e-17 4.4569e-16 4.6519e-16 1.7738e-16 3.5306e-16 2.7569e-16 1.4955e-16 7.3980e-16 9.5193e-19 1.0046e-16 1.2731e-16 2.1963e-16 2.5057e-15 4.8607e-16 4.3597e-23 5.2789e-18 3.5883e-17 1.7039e-23 1.9666e-18 1.0167e-16 1.7165e-17 5.6203e-18 2.0684e-18 4.4840e-18 4.7936e-18 1.0344e-17 1.6013e-16 5.3999e-17 3.8067e-16 1.7865e-17 9.2036e-16 4.0345e-16 2.4465e-16 4.6685e-16 1.4721e-16 8.0424e-17 7.0626e-17 1.2930e-16 6.0801e-16 1.4709e-17 4.0323e-16 1.5501e-16 1.4804e-16 1.6101e-16 4.7431e-16 6.4857e-16 1.0650e-16 2.3006e-16 3.7234e-16 5.3902e-17 6.8200e-17 8.8911e-16 3.3419e-16 1.6732e-16 1.8221e-16 4.7950e-16 1.3992e-16 1.8451e-16 7.1564e-17 9.4974e-18 4.8400e-16 8.5841e-17 1.0283e-15 3.8146e-22 1.5516e-16 1.2570e-15 2.7966e-16 4.2591e-16 1.5099e-16 3.1284e-16 4.9254e-16 1.9667e-16 3.0995e-16 3.4210e-16 2.4514e-16 2.5938e-16 4.9118e-16 3.6548e-16 2.0046e-16 7.5972e-16 4.4621e-17 3.5451e-17 2.2780e-17 1.8968e-16 1.9446e-16 4.8726e-17 1.7243e-17 2.8817e-16 1.0732e-16 1.0807e-17 8.0167e-17 4.3624e-18 5.1869e-16 9.3868e-17 7.4549e-16 2.0463e-16 8.4710e-17 1.4893e-16 2.8750e-18 8.9280e-18 1.4479e-16 2.1095e-16 1.3553e-16 2.6938e-17 2.9239e-16 5.5342e-17 1.0911e-17 1.3861e-17 4.5330e-16 1.2559e-16 1.9852e-16 3.8341e-17 8.4888e-18 6.2967e-17 4.4727e-17 7.7063e-17 4.9063e-17 6.3781e-18 1.5341e-16 4.8299e-17 2.2931e-16 1.1645e-16 6.4863e-17 1.2464e-16 1.1151e-16 1.1141e-16 1.3679e-16 1.1637e-16 6.7325e-17 1.5889e-16 1.5878e-17 7.0612e-18 1.1915e-17 1.1420e-17 6.0738e-17 2.3713e-17 4.3197e-17 3.0291e-17 3.1781e-17 3.3263e-17 1.5782e-17 5.3347e-17 5.0508e-17 3.3707e-19 2.7852e-17 8.9075e-18 3.4279e-17 1.0966e-17 1.4957e-17 3.7918e-18 1.3315e-17 1.9705e-17 1.8709e-17 4.3160e-17 2.1814e-18 2.3641e-16 5.0465e-16 5.6849e-18 1.6546e-16 4.0000e-16 7.3390e-17 3.5490e-17 1.2803e-16 1.5028e-16 2.4314e-16 1.5917e-16 9.5712e-17 3.0557e-15 4.2837e-17 1.4674e-17 2.5461e-17 4.0815e-17 6.7757e-16 1.0416e-16 4.3597e-23 1.0558e-17 1.1107e-17 5.9979e-18 4.3266e-17 5.5454e-17 6.1793e-17 2.8101e-17 6.2052e-18 2.9146e-17 6.2317e-17 4.5256e-17 5.6047e-16 2.5579e-17 7.3849e-16 1.5591e-16 3.8363e-16 2.7255e-16 5.8810e-23 2.3539e-17 5.5454e-16 3.9154e-16 1.0024e-16 6.2165e-17 4.3351e-16 5.0010e-17 7.4442e-17 2.4937e-16 1.4082e-16 7.6672e-17 1.4720e-16 2.5321e-16 1.9910e-16 4.9368e-16 1.6161e-22 1.0780e-17 7.9567e-17 1.6443e-16 8.0454e-17 2.6771e-17 1.8922e-16 5.0946e-16 8.8615e-16 4.6967e-16 3.0415e-16 2.3744e-16 4.8400e-16 1.0730e-16 9.4557e-16 1.1719e-15 1.6809e-16 2.9109e-16 1.8178e-16 3.8001e-16 2.1570e-16 1.4843e-16 9.6787e-17 2.0922e-17 2.8362e-17 1.9661e-17 1.0230e-16 1.7292e-17 4.7801e-16 5.5940e-18 1.2506e-16 4.7414e-16 3.2484e-16 1.9321e-16 4.0653e-16 4.9177e-17 2.3092e-16 2.7843e-17 4.9314e-16 2.6985e-16 4.1646e-17 1.5902e-16 8.5512e-16 2.0067e-16 2.3629e-16 1.0687e-16 2.4325e-17 2.1169e-17 1.1109e-16 8.7689e-17 1.4375e-18 5.9520e-18 2.9266e-17 4.9941e-23 1.7539e-17 6.6635e-17 1.1722e-16 2.1885e-16 2.4246e-17 3.5691e-16 7.1865e-17 7.3091e-17 7.1111e-17 7.6682e-18 4.9990e-17 8.6117e-17 7.3353e-17 3.9645e-16 4.9063e-17 2.6310e-17 6.3400e-17 3.6422e-17 2.9538e-17 1.3459e-16 6.5591e-17 7.5647e-17 3.0609e-17 1.4400e-17 2.2736e-16 6.4832e-17 9.0787e-17 4.2058e-17 7.2525e-17 6.6689e-17 3.7496e-17 1.6543e-16 2.0053e-16 5.3901e-16 2.2358e-17 9.6135e-17 2.1242e-17 1.6417e-17 1.3660e-16 1.3300e-18 3.0744e-18 2.9213e-17 1.8526e-17 4.5428e-17 3.5627e-17 4.7105e-17 2.1812e-18 1.2639e-18 2.1419e-17 9.8525e-18 3.3016e-17 5.9663e-17 1.8905e-17 2.0974e-16 6.9699e-16 7.8168e-17 1.9829e-16 1.4692e-16 2.0700e-16 2.0138e-16 1.6904e-16 3.0943e-16 1.7274e-16 1.0871e-16 1.5287e-16 1.7792e-15 1.2565e-16 7.9014e-18 1.2589e-16 3.1097e-16 9.2914e-16 1.3680e-15 9.0681e-17 1.0964e-17 3.5455e-17 5.9433e-17 5.4411e-17 5.4684e-17 4.2912e-18 2.0608e-17 5.2744e-17 1.4573e-17 2.6365e-16 1.1766e-16 5.0212e-17 6.8210e-17 2.6951e-16 9.7444e-18 3.6126e-16 1.7931e-18 5.6458e-17 4.4724e-16 1.3511e-16 3.3440e-16 2.9617e-17 1.6660e-16 2.2903e-16 1.2061e-16 3.6290e-16 1.5164e-16 3.6108e-18 3.7569e-16 8.8320e-16 7.5519e-17 7.4084e-17 5.2723e-17 3.8268e-16 5.3902e-18 2.2733e-17 4.4456e-16 9.2832e-17 1.1378e-16 5.3963e-16 4.3454e-16 6.9959e-17 2.6000e-16 3.5782e-16 9.4974e-18 2.0167e-17 1.9314e-16 4.2551e-16 5.2490e-16 2.5860e-16 1.3231e-16 1.2585e-16 3.2390e-16 1.4380e-16 1.1418e-16 1.5486e-16 3.1383e-17 4.7405e-16 8.2576e-17 9.5352e-16 3.6505e-17 4.3284e-17 1.2493e-16 6.9886e-17 2.2700e-16 9.8167e-17 5.3177e-17 1.1916e-16 1.6158e-16 2.8648e-16 5.0466e-17 7.2419e-17 1.6657e-16 1.9862e-16 1.0498e-16 5.9383e-17 5.8165e-17 2.9248e-16 1.9207e-16 1.4309e-18 2.8225e-18 6.8046e-17 1.5311e-17 2.8750e-18 4.6500e-23 8.1636e-17 1.5981e-18 4.7833e-17 8.5066e-17 2.5024e-17 3.1444e-17 1.0183e-16 1.7326e-16 2.5319e-16 2.7795e-17 1.4815e-17 1.3803e-16 1.5091e-17 5.0003e-17 3.5782e-17 1.5498e-16 6.2147e-17 2.1526e-17 4.6963e-18 4.6240e-16 7.7733e-18 1.3611e-16 2.7694e-17 1.0374e-16 1.8949e-17 5.2294e-17 4.3098e-17 5.6520e-17 3.1112e-17 1.0514e-16 4.9352e-17 1.1455e-16 7.3591e-18 1.4030e-17 2.5943e-17 5.1956e-17 7.3153e-17 1.2443e-16 2.2164e-16 5.6818e-17 1.6179e-17 3.2511e-18 2.5144e-17 4.8988e-17 1.2931e-17 1.2174e-17 8.6660e-18 1.9939e-17 2.3682e-17 1.3061e-17 1.8525e-17 1.5158e-18 4.4021e-18 5.0777e-18 1.5778e-16 1.0487e-16 1.2035e-16 1.2116e-16 3.6144e-17 3.1811e-16 6.0218e-18 5.4019e-16 1.8316e-16 4.3360e-17 1.0180e-16 2.8710e-16 4.8521e-17 2.2431e-16 5.6164e-17 7.5627e-17 2.8290e-18 4.0038e-16 4.8302e-16 1.2568e-15 1.3951e-18 9.3397e-18 1.0252e-17 8.7242e-18 1.2455e-17 4.6982e-17 1.9739e-17 5.8076e-17 7.4463e-17 1.1210e-17 5.1532e-17 6.8530e-17 3.5013e-16 3.5668e-16 8.6792e-17 3.1669e-16 4.6276e-16 2.6717e-16 4.5543e-16 8.6309e-17 7.8040e-16 5.6297e-16 1.8454e-16 1.9395e-16 1.7204e-15 1.1767e-17 2.2022e-16 5.2569e-16 6.4995e-17 2.0318e-16 1.1899e-15 2.5765e-16 3.1949e-16 2.2527e-16 1.2411e-16 2.6951e-17 4.9445e-16 2.1923e-16 9.2832e-17 2.2755e-16 1.0512e-16 2.2476e-17 3.8866e-17 1.5097e-16 2.8626e-16 3.3241e-16 5.5458e-16 7.5111e-17 6.2644e-16 1.8310e-16 1.5516e-16 1.8524e-16 3.3560e-16 2.5759e-16 4.0743e-16 1.8268e-17 8.6033e-18 8.7873e-17 6.3307e-23 8.4542e-17 7.5278e-17 2.8244e-16 5.6458e-18 6.1534e-17 1.1568e-15 6.8832e-16 2.1775e-16 4.2719e-16 7.7101e-17 3.5126e-17 4.3405e-17 1.8098e-16 4.3107e-17 5.0638e-16 6.7275e-17 3.6898e-16 5.6414e-17 4.1879e-16 4.8987e-17 1.4441e-17 1.6169e-16 2.8931e-16 5.5547e-18 3.4797e-17 4.4921e-23 4.4640e-18 3.5427e-17 1.2945e-16 4.3049e-17 1.0633e-16 5.7950e-17 1.2704e-16 4.8491e-17 2.7721e-17 2.3218e-17 9.0591e-17 5.9259e-17 1.6295e-17 2.3580e-17 2.6854e-17 4.4727e-18 1.2844e-17 9.5673e-17 2.4915e-23 2.5595e-16 2.4545e-17 2.6585e-16 1.2930e-16 7.2879e-18 7.2766e-17 5.7575e-17 1.2884e-17 1.9175e-16 1.8951e-16 2.0402e-17 7.3835e-17 4.6348e-17 1.0513e-16 1.0951e-23 1.9577e-18 1.3918e-16 7.6203e-17 3.2344e-17 6.1671e-17 1.1115e-16 5.1679e-17 4.8008e-17 3.8865e-17 2.0533e-17 4.3932e-17 3.2701e-17 1.1877e-18 2.3109e-18 2.2431e-18 8.4133e-18 1.8538e-17 1.1578e-18 2.2737e-18 3.4392e-23 2.6658e-17 8.7254e-18 1.7640e-16 6.0718e-17 2.1318e-17 2.3510e-16 1.2670e-16 1.1027e-16 6.8091e-17 4.4195e-17 2.3355e-16 1.5812e-16 9.6701e-17 3.5227e-17 1.3069e-15 1.1138e-16 2.2575e-17 1.2165e-16 1.6132e-16 3.2201e-16 3.7497e-16 3.2087e-17 1.2690e-23 9.8250e-18 2.9989e-17 2.8844e-17 1.2708e-16 8.5823e-19 5.6203e-18 8.6873e-17 5.2687e-17 4.9135e-17 1.8102e-16 2.3749e-16 6.9631e-17 4.7203e-17 1.9489e-17 3.6470e-16 8.0690e-17 2.0137e-16 7.4540e-16 5.2430e-17 3.4498e-16 1.0480e-16 3.4812e-16 8.1795e-18 2.6770e-16 6.2035e-18 3.9764e-16 3.6108e-18 7.6672e-18 3.1075e-16 3.1096e-17 3.7042e-17 1.2941e-16 8.7913e-17 1.1858e-16 1.6482e-16 5.2372e-16 2.5993e-16 1.8070e-16 3.9947e-16 5.2445e-17 7.3846e-16 6.7096e-17 2.6836e-17 1.8995e-17 5.0417e-17 2.1460e-17 2.7185e-16 7.3241e-17 3.1032e-16 7.9388e-17 8.6695e-16 7.2686e-16 5.0330e-16 4.8867e-16 6.4525e-18 3.3475e-16 6.0775e-18 7.8644e-17 1.1388e-16 1.6524e-16 3.0111e-16 4.1023e-17 1.4897e-16 3.4782e-16 2.7665e-16 1.6308e-16 1.7873e-16 1.2821e-16 3.1078e-16 8.8055e-16 1.6381e-16 2.6652e-16 1.7620e-17 1.6674e-16 2.1972e-16 1.5705e-16 2.3485e-16 7.1051e-16 7.4406e-17 5.5039e-17 4.4438e-17 3.6189e-17 4.3125e-18 5.9520e-18 1.9716e-16 4.4747e-17 3.9223e-16 2.8355e-17 9.4828e-17 1.2704e-16 3.8793e-17 1.3514e-16 5.1964e-17 2.7177e-16 2.9630e-18 5.7512e-17 4.8292e-16 7.8709e-17 1.1092e-16 1.1131e-17 1.6354e-17 7.9727e-19 3.1309e-17 7.2844e-17 1.1738e-16 7.5614e-17 6.9964e-17 4.4668e-17 1.2462e-16 1.1368e-17 9.8063e-17 1.8286e-17 3.6213e-17 3.5983e-17 7.7246e-18 3.1383e-17 4.8009e-17 2.9366e-17 5.7075e-17 6.1282e-18 3.9073e-17 6.3304e-17 2.4041e-17 1.3134e-17 2.7850e-18 1.8176e-17 6.3684e-18 1.8876e-17 5.8563e-17 4.4538e-18 6.0180e-24 6.9785e-18 4.2690e-17 4.6344e-17 4.1102e-17 2.6526e-17 1.8709e-17 6.7279e-17 7.1257e-17 7.8198e-17 1.4543e-16 4.4769e-17 3.7470e-17 2.0185e-16 7.7154e-17 4.4857e-16 1.2849e-16 1.0199e-16 1.4567e-16 1.9100e-16 1.9009e-16 2.3430e-15 8.5674e-18 1.0498e-16 2.5461e-17 4.3342e-16 3.3543e-16 1.9235e-15 4.0458e-17 1.2588e-17 1.2815e-18 1.6903e-17 9.4399e-17 6.6237e-17 3.4329e-18 2.2481e-17 4.0334e-17 4.4840e-18 4.9135e-17 5.5600e-17 4.5869e-16 1.3074e-16 7.2783e-16 9.4196e-17 4.4728e-17 2.2772e-16 2.7100e-16 5.6493e-16 1.2422e-15 3.4075e-16 4.0553e-16 3.6304e-16 7.3615e-16 6.4718e-17 1.2097e-16 6.3015e-16 2.5276e-16 4.4470e-16 7.8506e-16 7.5519e-17 1.0187e-16 2.3965e-17 1.6031e-16 9.7024e-17 8.5250e-17 5.8462e-16 2.2898e-16 3.3464e-17 1.4717e-16 8.1664e-16 1.9433e-16 9.2256e-17 8.0509e-17 5.6984e-17 4.0333e-16 1.0730e-17 9.3375e-16 9.7655e-17 2.5860e-17 3.3078e-16 1.3983e-16 4.8202e-16 1.0066e-16 1.8496e-16 3.1187e-16 5.4397e-17 1.9853e-16 4.1485e-16 7.9139e-17 3.4008e-16 1.8067e-16 2.8530e-16 2.5747e-17 6.4073e-17 3.1771e-16 1.0104e-16 2.2780e-17 2.8979e-16 1.5279e-16 3.5152e-16 1.4311e-16 3.3315e-18 4.0365e-16 2.4702e-16 1.3807e-16 1.8613e-16 3.3138e-17 8.9536e-17 5.1512e-17 8.1852e-17 1.3470e-16 8.3513e-17 5.7500e-18 2.8272e-17 1.3863e-16 3.1962e-17 1.4350e-17 4.9622e-17 7.7706e-17 1.3836e-17 1.2850e-16 6.3528e-17 1.4705e-16 9.5739e-17 6.1234e-17 9.0101e-17 7.5456e-18 6.5745e-17 4.7411e-17 1.4556e-17 2.1261e-17 1.2756e-17 3.9919e-17 5.5425e-18 1.8267e-16 1.7618e-16 2.9152e-18 1.5634e-16 9.6929e-17 4.3957e-17 4.3722e-17 1.1692e-16 8.3137e-17 4.1591e-17 8.5829e-17 5.8843e-18 2.5932e-17 5.2207e-18 4.7308e-17 3.4638e-17 1.4110e-16 3.3375e-17 1.4062e-16 1.9487e-16 3.8990e-17 4.0638e-17 1.5701e-17 1.0225e-17 4.1032e-18 4.7507e-18 2.5420e-17 3.9877e-18 1.0595e-17 4.2131e-18 3.2418e-17 3.0315e-18 1.3206e-17 3.9669e-23 5.0898e-18 3.2128e-16 4.9375e-16 2.4516e-17 1.5253e-17 7.6157e-17 5.1185e-17 6.5615e-17 1.0570e-16 3.4491e-17 6.4981e-17 7.8202e-16 7.9760e-18 1.3366e-15 3.3889e-16 3.7249e-17 1.3862e-16 2.2157e-16 2.0797e-16 1.7360e-16 7.9521e-17 3.2486e-18 8.5435e-19 5.4526e-18 7.4732e-17 1.6174e-17 1.7165e-17 5.6203e-18 2.1718e-17 3.6993e-17 3.5952e-18 6.9823e-17 5.9711e-17 4.0499e-16 2.8931e-16 2.2737e-17 3.9567e-16 3.1200e-16 1.4867e-16 1.7066e-16 2.7626e-16 9.3123e-17 9.1130e-18 4.9732e-17 1.9358e-16 2.2946e-16 4.9628e-17 1.0531e-22 3.2497e-17 2.3385e-16 6.1742e-16 2.0879e-16 9.2605e-17 2.3965e-17 5.1714e-18 9.7024e-17 1.4208e-16 4.2629e-17 6.9314e-16 1.4055e-16 2.8033e-17 5.2445e-17 1.5547e-16 1.7613e-16 1.0735e-16 9.4974e-17 5.2433e-16 5.3651e-17 1.6548e-16 3.6621e-17 2.1981e-16 6.6157e-17 4.3697e-22 5.4068e-16 2.3966e-17 1.1646e-16 6.0438e-16 1.0461e-16 3.6465e-17 5.8983e-18 9.2650e-17 1.9790e-16 2.8229e-17 1.1188e-16 1.2138e-16 8.2379e-17 1.5707e-16 5.3354e-16 1.1390e-16 1.1240e-16 3.0384e-16 3.8285e-17 1.6898e-16 6.1632e-17 3.2036e-18 1.2351e-16 9.3529e-17 1.4251e-16 4.6106e-17 1.1120e-16 1.4166e-16 3.3870e-17 1.1943e-16 4.7324e-17 1.4375e-18 4.6500e-23 5.5451e-17 1.0867e-16 2.0568e-16 8.3648e-17 6.8487e-17 1.1949e-16 4.4855e-17 1.0280e-16 1.2825e-16 4.8384e-17 9.1852e-17 3.9300e-17 2.9239e-17 2.2872e-16 2.7955e-23 1.1131e-17 4.7428e-17 3.2688e-17 5.7921e-17 2.4743e-23 5.9077e-17 8.6957e-17 3.3452e-16 4.3227e-17 2.7694e-17 4.3200e-17 1.4366e-17 4.1559e-17 1.2751e-17 1.4019e-17 1.7166e-17 1.0278e-16 3.8898e-17 5.5796e-17 3.3573e-17 8.3930e-17 4.5585e-17 1.9952e-17 2.6017e-17 6.3813e-17 2.7651e-16 4.0195e-17 1.5592e-17 2.6966e-18 2.9841e-18 1.7963e-17 5.7966e-17 9.7201e-18 5.9205e-18 6.3197e-18 6.9468e-18 1.3642e-17 4.7323e-17 2.6658e-17 5.8169e-18 2.1156e-16 2.5487e-16 9.3090e-17 1.6248e-17 3.3024e-17 1.8329e-16 1.4196e-16 6.2420e-17 7.6865e-17 1.0451e-16 1.7478e-16 3.2768e-16 1.1630e-15 1.4279e-17 1.4674e-17 8.0627e-17 1.2828e-16 2.1803e-16 7.1522e-16 4.6038e-17 3.6547e-18 5.5533e-18 1.0905e-18 6.1622e-17 1.1553e-17 5.1494e-18 7.5873e-17 3.6197e-17 1.2331e-17 3.7151e-17 9.3097e-17 6.5954e-16 2.6147e-16 1.6749e-16 2.4686e-16 7.3973e-17 8.1945e-16 2.2583e-17 4.8647e-16 2.6618e-16 2.1164e-18 7.0626e-17 2.7850e-16 9.9790e-16 3.2653e-16 6.2035e-18 4.0101e-16 9.3881e-17 1.8785e-16 6.0107e-16 3.9980e-17 1.7595e-16 3.3551e-17 1.3446e-16 1.9944e-16 1.7050e-17 4.2629e-17 1.9340e-22 6.6927e-17 1.3316e-16 4.4203e-16 2.5652e-16 4.5290e-16 1.2524e-16 3.5140e-16 2.0167e-16 1.9314e-16 1.3002e-16 2.0752e-16 6.0772e-16 3.3078e-16 3.6356e-16 2.5045e-15 5.4644e-16 2.9229e-16 2.1508e-18 2.8872e-16 3.3832e-16 4.1681e-16 1.9881e-16 1.5179e-16 4.9683e-16 3.9158e-16 1.6000e-16 4.8878e-16 1.2494e-17 6.1154e-16 2.5058e-16 1.6334e-16 1.9446e-16 3.7415e-16 1.5518e-17 5.9300e-16 1.0892e-16 1.5438e-17 6.5322e-17 1.0179e-17 4.4953e-16 1.5885e-16 1.1447e-16 4.4102e-23 3.1940e-17 5.1500e-17 1.4375e-18 1.4880e-17 1.2014e-16 4.1551e-17 4.3049e-16 4.2533e-17 7.0726e-16 9.9364e-17 4.1218e-17 1.2475e-16 1.4594e-16 8.8532e-17 1.6790e-17 7.9558e-17 4.5274e-17 4.5373e-17 7.6037e-17 1.0960e-16 1.7172e-17 6.3781e-18 1.7220e-17 2.4545e-17 2.1765e-17 1.1342e-17 4.2999e-17 7.7809e-17 1.8949e-17 1.4551e-16 3.4166e-16 6.8157e-17 6.7835e-17 9.3462e-19 1.7166e-17 3.6875e-17 2.1026e-18 9.3972e-17 1.3948e-16 1.0151e-16 1.3111e-16 5.9676e-17 3.6227e-17 4.4612e-24 1.0556e-16 2.8816e-17 1.3429e-16 2.5842e-18 5.4709e-18 3.7115e-18 1.9258e-19 1.4206e-17 1.1654e-16 3.7918e-17 4.6312e-18 1.1368e-17 3.4392e-23 8.8859e-18 4.3627e-18 1.2487e-16 4.8575e-16 1.8263e-16 3.6475e-17 1.1120e-16 2.6345e-17 4.0029e-17 2.3191e-16 3.5476e-17 1.3646e-16 1.4175e-16 3.6224e-16 1.2595e-15 4.7596e-18 2.2575e-18 1.7115e-16 1.9825e-16 3.4214e-16 1.5277e-16 8.3706e-18 1.4213e-17 1.9223e-17 1.7039e-23 5.9655e-17 6.9318e-18 1.7508e-16 4.1215e-17 6.3086e-17 2.2420e-17 2.7563e-17 1.2930e-17 2.9856e-17 2.1316e-17 2.2231e-16 3.4105e-16 8.0854e-17 8.9296e-16 1.7126e-16 5.2570e-16 3.6096e-16 1.5027e-16 5.4678e-17 1.5417e-16 3.8716e-16 4.4126e-16 1.4268e-16 1.5939e-15 4.8024e-16 3.2969e-16 2.7804e-16 2.8430e-16 2.1299e-16 8.6273e-17 1.0291e-15 1.2397e-16 1.8187e-16 2.0096e-16 5.3223e-16 4.6849e-17 3.9947e-16 5.0197e-16 4.6640e-17 2.0967e-16 2.6836e-16 1.8995e-16 1.9158e-16 1.0730e-17 4.9642e-16 3.5400e-16 5.3014e-16 4.1348e-22 3.3560e-16 9.0538e-16 3.4991e-16 7.0789e-17 8.6033e-18 2.7199e-17 8.3059e-17 5.6034e-16 2.8760e-16 1.9213e-18 3.0111e-17 2.3495e-16 7.5403e-17 2.3432e-16 4.6942e-16 1.2940e-16 1.2266e-16 4.1274e-16 5.8684e-16 2.4363e-17 1.0001e-16 1.8323e-17 2.0182e-16 3.3193e-16 1.7667e-16 7.2707e-18 9.3652e-17 8.6647e-17 2.5756e-17 4.3749e-17 2.3885e-16 3.4101e-16 1.4375e-18 2.9760e-18 1.5403e-18 2.4930e-16 7.4938e-17 8.5066e-18 5.2682e-18 7.5467e-17 5.9402e-17 1.3514e-16 2.3881e-16 4.7355e-17 6.2222e-17 3.7383e-17 1.1413e-16 7.9635e-17 9.3928e-17 3.6819e-17 1.0467e-16 3.5080e-17 5.4007e-17 3.7214e-17 1.3759e-16 1.7921e-16 3.6440e-18 1.7291e-17 2.1864e-18 2.3684e-23 3.1667e-16 4.0672e-16 5.1004e-18 1.4393e-16 1.7166e-18 7.0612e-18 1.7872e-17 5.3838e-17 3.2353e-17 3.7302e-18 4.4283e-17 2.0315e-17 1.6467e-17 4.9823e-17 1.3792e-17 2.9703e-17 1.1858e-17 6.0673e-18 1.5045e-17 9.2044e-18 4.2367e-18 2.6668e-17 4.1132e-17 1.6431e-17 2.2577e-17 1.0610e-17 6.6032e-18 7.6165e-18 4.9444e-17 5.1465e-16 3.2723e-16 2.2384e-17 5.2060e-17 1.9814e-16 1.0613e-16 9.2438e-17 1.9637e-16 3.2126e-16 3.0920e-16 3.1293e-16 3.6756e-16 3.0566e-15 1.2470e-16 2.7090e-17 3.0270e-16 2.8765e-16 3.4549e-16 1.3888e-16 4.3597e-23 3.9389e-17 9.8250e-18 6.5431e-18 6.5555e-19 1.0629e-16 9.4405e-18 3.7468e-18 4.6539e-17 2.9146e-17 8.9880e-17 4.1377e-17 3.0399e-16 1.5631e-17 1.5227e-18 2.2412e-16 7.5349e-16 7.6028e-16 1.5996e-16 5.0609e-16 5.0212e-16 2.9630e-17 1.7315e-16 1.1687e-16 2.5629e-16 4.7068e-17 4.6526e-16 3.3698e-17 1.3721e-16 5.2520e-16 1.2267e-16 4.4423e-18 9.2605e-18 2.7320e-16 7.2399e-17 5.6058e-16 3.0690e-16 2.3141e-16 8.0454e-17 2.0915e-22 4.4151e-16 5.9937e-17 7.7733e-17 1.1742e-16 5.3673e-16 6.6482e-17 3.3275e-16 2.2533e-16 9.8103e-16 1.3550e-15 1.1637e-16 5.6895e-16 3.3560e-16 4.2336e-16 1.0785e-16 6.0742e-16 2.5810e-17 6.6951e-17 3.3021e-16 1.7420e-15 1.2546e-16 2.9589e-16 2.1642e-16 9.1369e-17 1.0851e-16 2.0137e-16 1.9633e-17 9.0401e-17 2.3305e-16 2.5994e-16 1.8404e-16 9.0491e-17 1.1035e-16 1.9656e-16 1.9382e-16 2.0070e-17 6.1462e-16 1.8613e-16 1.5128e-16 1.9207e-16 2.0032e-17 4.9394e-17 5.9714e-17 1.2805e-16 1.0062e-17 4.4640e-18 1.5403e-17 1.1187e-16 1.3393e-16 1.0775e-16 1.1854e-17 3.9117e-16 2.4246e-18 3.0032e-17 7.2971e-17 2.2648e-17 2.9630e-18 3.8341e-18 3.3012e-17 1.4816e-17 1.7891e-17 1.5755e-16 7.1142e-17 3.3485e-17 9.8622e-17 1.2668e-17 7.3846e-17 2.0870e-16 4.7372e-17 1.4769e-16 3.6440e-17 1.1293e-16 1.2617e-16 2.3827e-17 7.0896e-17 9.8135e-18 8.5829e-18 3.2952e-17 4.7659e-17 2.8061e-17 2.0449e-17 3.8634e-17 3.3646e-17 1.6941e-16 2.7993e-17 3.4833e-17 1.1193e-16 3.6944e-18 6.1598e-17 3.2471e-17 1.0071e-17 2.2269e-17 1.0014e-17 4.9846e-18 1.4334e-17 2.7807e-17 5.2101e-18 1.0610e-17 3.4392e-23 2.7927e-17 1.8760e-16 1.9519e-16 2.7814e-16 8.5984e-17 3.5116e-16 2.9654e-16 7.0003e-17 2.1624e-16 3.5949e-16 1.0446e-16 9.3681e-17 3.1052e-16 4.2539e-17 3.0752e-15 6.0923e-17 4.5151e-17 2.1076e-16 1.8464e-16 2.3816e-16 4.4441e-16 7.2545e-17 4.1826e-17 1.7514e-17 4.8528e-17 1.9470e-16 2.4069e-23 1.1157e-17 7.8683e-17 2.2752e-17 6.3897e-17 1.4381e-17 2.4567e-17 1.9542e-16 1.6342e-16 1.8120e-16 1.4617e-17 5.7458e-16 2.4745e-16 1.3174e-17 6.1005e-16 8.0661e-18 4.0001e-16 6.8348e-18 2.4866e-16 6.4618e-16 2.3534e-17 1.0856e-16 6.0319e-16 1.2638e-16 1.1117e-16 4.7431e-16 8.4403e-17 5.5563e-17 2.3486e-16 3.8785e-16 1.6171e-17 1.8755e-16 5.4808e-17 9.9020e-17 6.0235e-17 7.0082e-18 4.4953e-17 7.7733e-17 5.8709e-17 1.8786e-16 2.8492e-17 7.0583e-17 2.4679e-16 5.9098e-17 4.5165e-16 5.1721e-17 2.6463e-16 5.4534e-16 1.1604e-15 3.2834e-16 1.9182e-16 3.2047e-16 4.1426e-16 4.0112e-16 2.5166e-16 1.4091e-16 2.3440e-16 6.0222e-16 1.3053e-16 6.6023e-16 4.0823e-16 7.4964e-17 2.6589e-17 2.4532e-17 1.4402e-16 9.9312e-16 6.6128e-17 8.1041e-17 7.8289e-17 1.1853e-16 5.8666e-17 1.1580e-16 1.5995e-17 1.3976e-16 4.1880e-17 3.3912e-16 5.6450e-18 2.7774e-18 6.6811e-17 4.4921e-23 1.3392e-17 4.0048e-17 3.0364e-17 7.6532e-17 1.3469e-16 4.2146e-17 3.0187e-17 3.6369e-18 1.0165e-16 6.6337e-17 2.2030e-16 2.9037e-16 1.0736e-16 8.4888e-18 7.4079e-18 1.3418e-17 4.1100e-17 3.5980e-17 7.1754e-18 4.6963e-17 1.8211e-17 1.1660e-17 3.4026e-17 3.2796e-17 4.9711e-17 7.2879e-19 4.5473e-17 6.2460e-17 7.7023e-17 1.1221e-17 1.1823e-16 7.7675e-17 5.8843e-18 2.4215e-16 7.5047e-18 2.1060e-17 1.9184e-17 1.4348e-16 9.4865e-17 1.3042e-16 1.7302e-16 4.0183e-17 1.2709e-17 1.4494e-17 2.2135e-17 5.4709e-18 1.1877e-18 2.4842e-17 1.4705e-17 1.6515e-17 2.1487e-17 3.3576e-17 1.8189e-17 1.3206e-17 3.0466e-17 2.2541e-17 6.7286e-17 7.9988e-17 3.5531e-19 2.1985e-16 3.8079e-17 5.4196e-17 1.3701e-16 1.1026e-16 3.1042e-17 4.3321e-17 3.2794e-16 2.1735e-16 8.6846e-16 2.0942e-17 1.5916e-16 4.1021e-17 4.1593e-16 2.4487e-16 2.0137e-16 2.7902e-17 1.2588e-17 2.1359e-18 9.2694e-18 5.7033e-17 2.7727e-17 1.7165e-18 2.7165e-17 7.5497e-17 3.2509e-17 7.1904e-18 7.4995e-17 4.0712e-18 2.0605e-16 2.5885e-17 2.5011e-16 2.9073e-16 4.2855e-16 3.5569e-16 2.5500e-17 1.1131e-15 1.3545e-16 2.4377e-16 2.8347e-16 2.5629e-16 4.1479e-16 5.8002e-16 1.3479e-17 4.0080e-16 2.1085e-16 4.7022e-16 6.7522e-16 2.3151e-17 1.4379e-17 3.8268e-16 2.0483e-16 2.9553e-16 1.9031e-22 9.9020e-17 1.8740e-16 2.1024e-17 4.4203e-16 4.5862e-16 1.5935e-16 1.7891e-16 3.7990e-16 1.2100e-16 4.1847e-16 1.1820e-16 1.7090e-16 4.0407e-22 2.6463e-17 9.7882e-17 1.7623e-15 2.5404e-16 5.4804e-17 6.4525e-18 4.1216e-16 3.8491e-17 2.7329e-16 9.2650e-17 6.7247e-17 3.7639e-17 1.6782e-16 9.0116e-16 3.5331e-16 2.3203e-17 2.2334e-16 1.5420e-16 7.3765e-17 3.6113e-16 8.0050e-17 1.0346e-17 7.9955e-17 5.7664e-17 1.1888e-16 8.6106e-17 3.0246e-16 1.8730e-16 3.0327e-16 2.2465e-16 1.3548e-16 3.4162e-16 1.8095e-17 1.5812e-17 5.9520e-18 5.3910e-17 5.2737e-17 4.2571e-16 1.0208e-16 3.0687e-16 1.5722e-16 1.6002e-16 3.6096e-23 4.5330e-17 4.5296e-17 6.5185e-17 2.7797e-17 2.2637e-17 1.2038e-17 2.7955e-23 1.1131e-17 2.7312e-16 9.5672e-17 2.3481e-18 4.7507e-18 2.4874e-17 3.2514e-17 2.2593e-17 4.6829e-17 2.3321e-17 6.8210e-18 5.8088e-17 2.4381e-17 1.0354e-16 4.4862e-17 2.2015e-16 7.6888e-17 2.5126e-16 1.7032e-16 2.2311e-16 3.8634e-17 1.9536e-16 2.7208e-18 3.6721e-17 2.4697e-17 7.9571e-17 4.0047e-17 5.4790e-17 2.5842e-18 3.7301e-19 2.3160e-17 4.2367e-18 2.4923e-17 2.7421e-17 1.2639e-17 1.1578e-17 1.3642e-17 5.1725e-17 2.0311e-17 3.1993e-17 3.2734e-16 3.1923e-16 1.0304e-17 2.2449e-16 1.4524e-16 5.7583e-17 6.3964e-17 4.9663e-17 4.4148e-16 9.1515e-17 3.1833e-17 5.9820e-17 1.5939e-15 1.2090e-16 3.3863e-18 2.6876e-17 2.5461e-16 2.6499e-16 4.5135e-16 9.0681e-17 1.4619e-17 1.9650e-17 5.5071e-17 5.1788e-17 2.5417e-17 3.3471e-17 1.4987e-17 2.6889e-17 4.0356e-17 1.0786e-17 4.0407e-23 5.5640e-17 2.8421e-18 1.5074e-16 2.2737e-16 3.6986e-16 3.8910e-16 1.0162e-16 5.7474e-16 8.0661e-16 2.6667e-16 1.8226e-17 1.0941e-16 7.3615e-16 3.8831e-16 1.5509e-17 1.8197e-16 2.6359e-16 2.0701e-16 1.3493e-16 1.0217e-16 3.3338e-16 1.7255e-16 6.7228e-17 2.3717e-16 1.0798e-16 2.4359e-16 2.4755e-17 1.6063e-16 4.2049e-17 3.1467e-16 4.2753e-16 2.3483e-16 2.7955e-22 1.8995e-17 3.6300e-16 1.6095e-16 4.1369e-16 1.2207e-17 1.0344e-16 5.5572e-16 1.8178e-16 3.4685e-16 6.7106e-17 3.7906e-16 1.2690e-16 3.3057e-16 9.1163e-17 2.2413e-16 2.7023e-17 5.5142e-16 2.5594e-16 2.2936e-16 2.2069e-16 9.3363e-17 8.2104e-17 2.8361e-17 3.2067e-16 3.9869e-16 6.8581e-16 2.5581e-16 1.9139e-16 1.5658e-16 1.2334e-16 1.2351e-16 2.9692e-17 4.3624e-18 1.6137e-16 2.8882e-18 3.0049e-17 2.3286e-16 1.3887e-18 4.5236e-16 4.4921e-23 4.4640e-18 8.6257e-17 3.9953e-17 5.1181e-16 1.4178e-17 9.4828e-17 1.1320e-17 1.2123e-18 1.9058e-16 3.6485e-17 1.0294e-18 3.3580e-17 2.8756e-18 1.0187e-16 1.0464e-16 1.0645e-16 2.9969e-17 1.6354e-17 2.9977e-16 8.6099e-18 1.0451e-16 5.1304e-17 1.3081e-16 7.0693e-17 9.1497e-17 1.4576e-18 9.8525e-18 8.3697e-17 1.5017e-16 1.1731e-17 1.3412e-16 4.2915e-19 3.9621e-17 3.8548e-18 8.3204e-17 9.0038e-17 1.1324e-16 3.5817e-17 7.7452e-17 1.1000e-16 3.7117e-18 1.4018e-16 2.9851e-17 8.3448e-18 1.7078e-17 8.4301e-17 2.0339e-17 1.2517e-17 2.3677e-17 4.0509e-18 3.3284e-17 1.3315e-17 7.2757e-17 1.7609e-17 3.8082e-18 1.0180e-16 3.7280e-16 2.6723e-16 2.3735e-16 1.3662e-16 1.4153e-17 4.2529e-17 2.3564e-16 2.3966e-16 9.0169e-17 2.6047e-16 2.8410e-16 4.1874e-17 1.0276e-15 3.7125e-17 5.4181e-17 2.1642e-16 3.7900e-16 1.2746e-16 8.1244e-16 4.1853e-17 1.6243e-18 1.4524e-17 5.3436e-17 1.6389e-17 5.3914e-17 6.0076e-18 1.4051e-17 5.5847e-17 1.1210e-17 9.1079e-17 7.1116e-17 1.5973e-15 7.1052e-17 3.2433e-16 1.3155e-16 5.5738e-16 3.1379e-16 4.2155e-16 8.8271e-17 8.7114e-16 2.0953e-16 1.5492e-16 1.7406e-16 5.4530e-18 7.8839e-16 3.4429e-16 4.4144e-16 1.6971e-16 2.0701e-16 2.2898e-16 2.5765e-16 2.3151e-16 8.6273e-17 1.5514e-16 5.1207e-16 1.2503e-16 7.3078e-17 1.2378e-17 2.5432e-16 2.7332e-16 2.9968e-17 4.6640e-17 3.5225e-16 3.0415e-16 1.0447e-16 3.4283e-16 3.1117e-16 8.1556e-16 9.7655e-17 1.6809e-16 2.5140e-16 6.2924e-16 1.8822e-15 2.7801e-16 6.7592e-16 8.1731e-17 6.6951e-17 1.1750e-16 3.0868e-16 2.9725e-16 3.2086e-16 1.9196e-16 3.7294e-17 9.1955e-18 8.3294e-16 5.7294e-16 4.5201e-16 7.3596e-17 5.6378e-16 2.7779e-16 1.6532e-16 1.6553e-16 3.7146e-16 2.8352e-16 9.7262e-17 7.8980e-16 2.2830e-16 5.0428e-17 7.0762e-17 3.2910e-17 2.5544e-16 1.0137e-16 2.5193e-16 1.5812e-17 8.9280e-18 1.1860e-16 1.3104e-16 1.7698e-16 1.3894e-16 5.5316e-17 3.3960e-17 1.5032e-16 6.2373e-17 3.4274e-17 1.6574e-16 3.1605e-17 6.7097e-18 2.0185e-16 3.0558e-17 1.6102e-17 9.4188e-18 2.4777e-16 4.7039e-17 9.3926e-18 3.9589e-18 2.3320e-18 3.8563e-17 1.0203e-17 7.2045e-18 6.5591e-18 5.3052e-18 6.2460e-18 4.1005e-17 2.5502e-18 6.5423e-18 8.2825e-17 1.8084e-16 9.5318e-17 7.1458e-17 1.5047e-16 1.2603e-16 4.2112e-17 6.1127e-17 2.3218e-17 6.5669e-17 1.7506e-17 1.5531e-16 1.7568e-18 4.7190e-18 2.4992e-17 2.3605e-17 2.6961e-17 1.4705e-17 9.3481e-19 1.8538e-17 1.0420e-17 3.7894e-18 2.2011e-18 3.8082e-18 2.0359e-17 1.8186e-16 9.4350e-16 2.2740e-17 3.3889e-16 3.7641e-16 9.5219e-17 1.2421e-16 3.2805e-17 2.5720e-16 1.4675e-16 1.3694e-16 4.4799e-16 8.0413e-16 1.1709e-16 1.1513e-16 3.3948e-17 1.2653e-15 1.6772e-16 5.5551e-16 8.7891e-17 3.2486e-18 2.1359e-18 4.3621e-18 1.3111e-18 7.9331e-17 3.3471e-17 9.3671e-18 7.2394e-18 3.3630e-17 8.3889e-18 8.0167e-17 2.3342e-16 1.0800e-16 1.4968e-15 6.4638e-16 8.5843e-16 3.3531e-16 1.5808e-16 1.9223e-16 5.4648e-16 4.9736e-16 1.4125e-16 7.8079e-16 8.8066e-16 1.8239e-16 1.5509e-17 2.5947e-16 6.1384e-17 4.3319e-16 1.0222e-16 4.8865e-17 1.2965e-16 4.7450e-16 2.0168e-16 1.9405e-16 2.2733e-16 7.9168e-17 3.7752e-16 2.6102e-16 3.3639e-16 3.4464e-16 3.2648e-16 8.3869e-18 9.8400e-17 1.5196e-16 5.0417e-17 5.3651e-16 5.0825e-16 9.7655e-17 3.3618e-16 3.0432e-16 2.2373e-16 1.1145e-15 2.3008e-16 2.1237e-16 4.9039e-16 1.7156e-16 2.8362e-16 1.2583e-16 7.5471e-16 6.0042e-23 1.4491e-16 2.7038e-16 7.7242e-17 3.6796e-16 3.0343e-17 2.1271e-17 3.7499e-16 2.0725e-16 8.6811e-17 6.0560e-16 5.2245e-16 4.3642e-16 1.6178e-16 3.0259e-16 2.8949e-16 1.3087e-17 1.2823e-16 4.3324e-18 4.1496e-17 5.6450e-17 3.6106e-17 4.7324e-17 7.1874e-18 1.4880e-18 9.2418e-17 1.0388e-16 7.8127e-17 1.1200e-16 3.1609e-17 2.6665e-16 1.4790e-16 8.5474e-17 1.7358e-16 1.0809e-16 1.9457e-16 3.4507e-17 1.1318e-17 4.2595e-17 1.7891e-18 4.1100e-17 3.1891e-17 1.3554e-17 7.8272e-19 1.5044e-17 1.6713e-16 4.6881e-17 3.5711e-17 4.8270e-17 1.1661e-17 2.4177e-16 1.0056e-16 1.7178e-16 7.6506e-17 2.0094e-17 5.5789e-18 7.0612e-18 5.0112e-17 2.3167e-17 8.7596e-17 1.2709e-16 8.3790e-17 7.9084e-17 1.1197e-17 9.5649e-18 1.7771e-17 1.7142e-17 6.6978e-18 7.3033e-18 6.7143e-18 6.0868e-18 1.3673e-17 7.7885e-24 3.0226e-17 2.5279e-17 1.9683e-17 9.0947e-18 1.2106e-17 1.2694e-17 7.2712e-19 3.8796e-17 9.1987e-17 2.6293e-17 3.3060e-16 1.1053e-16 8.9574e-17 8.8724e-17 6.7432e-17 4.0551e-16 3.9530e-17 2.6428e-17 8.4413e-17 1.2544e-15 1.2375e-17 5.5310e-17 1.0892e-16 2.5461e-16 9.0566e-17 7.0828e-16 4.1853e-18 1.6649e-17 5.1261e-18 3.8168e-18 3.8022e-17 1.2092e-16 1.4590e-17 3.9342e-17 5.5847e-17 3.3630e-18 2.2770e-17 3.2325e-17 2.7141e-17 3.1973e-16 2.4972e-16 2.2737e-17 2.5116e-16 3.2276e-17 1.2609e-16 2.1185e-16 3.3474e-16 4.9948e-16 6.3791e-17 2.6358e-16 1.7177e-16 9.1929e-23 9.0571e-16 2.7295e-16 1.8054e-17 4.9836e-17 2.7804e-16 5.7749e-17 6.9454e-17 4.3137e-17 1.1894e-16 1.2936e-16 1.3640e-16 3.6539e-17 8.0454e-17 2.4763e-16 2.8033e-17 1.3486e-16 5.4413e-17 2.2645e-16 2.6836e-16 1.6146e-16 1.2100e-16 2.5752e-16 6.1462e-16 3.7841e-16 4.6549e-16 3.9694e-17 1.5381e-16 1.3109e-15 1.3901e-16 1.3929e-16 1.2088e-15 4.5401e-16 1.4181e-17 3.6176e-16 7.7208e-18 1.9213e-17 5.8340e-17 2.9089e-16 6.6759e-16 4.1922e-16 3.5697e-18 2.1271e-17 8.7614e-17 2.1076e-16 6.2678e-16 2.6799e-16 1.3277e-16 9.4947e-17 3.2036e-16 2.3158e-17 1.6627e-16 7.4161e-17 1.0806e-16 5.0544e-17 2.8618e-16 1.4254e-16 2.9162e-17 1.8095e-17 4.4921e-23 3.2736e-17 3.0806e-18 9.9082e-17 3.5077e-17 9.3572e-17 3.6219e-16 7.9240e-17 8.0011e-17 5.7753e-18 3.6485e-17 5.1472e-17 8.2963e-17 1.8691e-16 1.7166e-16 2.4724e-16 1.4223e-16 2.6758e-23 2.5554e-23 1.1241e-16 1.1506e-16 8.7096e-17 3.0316e-17 3.3270e-17 6.8506e-17 2.0893e-17 7.6523e-17 1.2884e-17 8.7445e-18 6.5940e-17 8.6707e-18 4.4862e-17 2.8753e-17 4.5113e-17 1.8888e-16 1.1257e-16 9.9194e-17 2.5392e-16 4.5802e-17 1.0121e-16 1.1197e-17 1.7988e-17 1.8036e-17 1.5960e-17 1.4823e-17 2.2247e-17 2.2008e-17 6.0868e-18 3.6590e-18 4.8351e-17 1.8696e-17 8.4262e-19 8.1046e-18 5.3052e-18 5.5027e-18 2.5388e-17 4.2900e-17 1.3882e-16 5.3810e-17 9.8775e-17 2.9412e-16 1.3243e-16 4.8927e-18 1.2834e-16 4.9891e-16 1.2811e-17 5.3609e-17 1.9701e-16 1.6018e-16 6.2976e-16 3.4269e-17 1.0159e-16 2.9705e-17 4.8784e-16 9.7275e-17 2.0832e-16 1.5346e-17 1.2994e-17 2.1359e-17 2.1810e-18 1.0489e-17 1.2169e-16 8.5823e-19 3.3722e-17 3.2319e-23 3.3630e-17 2.3968e-18 7.4995e-17 9.9067e-17 1.4352e-16 4.8725e-17 1.7865e-17 2.9073e-16 5.3793e-17 2.0137e-16 7.7286e-16 6.2916e-16 1.7990e-16 3.7136e-16 3.5310e-16 4.7714e-16 6.7660e-17 5.2419e-16 3.9427e-16 3.2497e-17 7.6672e-18 1.0631e-16 5.8194e-16 9.2605e-18 4.7930e-18 4.1888e-16 5.9292e-17 1.3640e-16 2.8013e-16 3.7133e-17 4.8857e-16 6.3073e-17 5.6940e-16 2.4097e-16 3.1870e-16 8.9455e-17 6.1733e-16 5.4450e-16 8.5841e-17 3.3095e-16 1.2207e-16 6.4651e-17 2.6463e-17 1.9576e-16 1.1298e-15 6.8544e-16 1.6670e-16 3.8500e-16 1.0879e-16 1.2763e-16 3.6373e-16 8.4929e-17 1.1912e-16 7.5277e-18 1.0256e-16 4.4138e-16 1.0984e-17 1.0531e-16 6.7358e-17 3.6448e-16 7.3765e-17 8.5075e-17 2.6973e-16 1.1035e-16 4.4975e-17 2.8832e-17 8.7999e-17 2.0784e-17 4.9440e-17 1.7866e-16 1.3575e-16 1.1590e-16 1.8346e-16 7.9155e-17 1.1553e-16 1.4375e-18 1.6368e-17 5.8531e-17 1.9177e-17 6.3777e-18 8.2230e-17 1.6595e-16 1.0440e-16 1.1032e-16 1.7326e-17 4.7541e-17 3.0883e-18 1.4815e-17 1.2940e-16 3.8011e-16 2.0372e-17 4.3833e-17 8.2201e-17 4.5792e-17 3.9066e-17 1.3306e-17 7.1260e-18 1.1194e-16 4.4612e-17 2.6965e-17 6.3400e-17 2.1864e-18 1.5158e-17 2.0300e-16 3.2139e-17 7.6506e-18 2.8553e-16 1.2231e-16 8.6303e-17 6.4830e-17 4.2418e-17 2.2281e-17 8.3130e-17 2.5832e-17 4.5165e-17 4.4295e-17 4.7396e-17 5.4374e-18 4.6180e-24 4.6006e-17 1.1461e-17 5.6574e-17 1.0095e-17 6.9328e-18 3.1154e-17 3.0849e-17 1.7274e-17 6.9468e-18 1.8189e-17 3.6318e-17 8.8859e-18 1.9632e-17 9.4564e-17 6.6536e-17 5.6849e-18 4.2809e-16 3.6394e-17 7.5272e-18 1.7621e-16 3.0071e-17 3.0894e-16 2.3935e-16 7.3877e-17 1.3460e-15 7.1272e-16 3.3318e-16 1.1175e-16 8.4870e-17 3.7511e-16 1.0063e-17 1.2082e-15 1.9252e-16 3.9389e-17 4.6989e-18 2.3446e-17 6.8832e-17 1.3247e-16 5.4069e-17 6.5570e-18 7.2394e-18 6.9502e-17 2.7563e-17 1.1766e-16 3.9219e-16 4.2915e-16 8.2224e-17 2.0626e-16 3.7847e-17 2.5103e-17 9.0333e-17 2.0597e-16 1.2099e-16 1.4815e-16 1.0024e-16 3.6553e-16 5.4530e-18 4.4420e-16 1.0236e-16 1.5501e-16 5.4162e-17 1.3034e-16 2.6987e-16 4.0425e-16 4.7692e-16 3.3071e-16 4.1371e-17 9.1633e-17 5.1150e-17 1.5225e-16 9.9020e-17 8.7006e-17 9.1106e-17 2.9968e-16 1.5547e-17 4.1935e-17 2.7731e-16 1.8995e-16 2.0167e-17 3.3263e-16 9.4557e-17 6.1034e-17 4.9135e-16 1.8524e-16 2.3771e-16 1.0712e-15 1.0545e-15 3.3568e-16 5.3986e-16 2.7199e-17 5.1456e-16 4.4827e-16 1.0037e-16 1.7676e-16 1.8819e-18 1.7528e-16 1.8023e-16 3.9542e-16 1.7313e-16 4.9632e-17 2.0677e-16 7.8508e-16 1.3022e-16 7.1523e-16 4.5176e-16 2.1321e-16 5.7664e-17 2.6863e-16 4.1568e-17 7.2707e-18 1.1815e-16 2.1373e-16 1.9174e-16 1.5383e-16 6.3880e-17 8.6297e-17 8.6249e-18 7.4400e-18 3.0806e-18 3.1962e-18 2.0249e-16 5.6711e-17 2.7000e-16 1.0062e-16 3.8793e-17 9.0095e-17 5.0858e-17 7.2061e-18 7.9012e-17 4.5051e-17 9.9979e-17 9.2599e-19 5.0095e-17 3.8532e-17 9.8126e-18 1.2118e-16 4.3832e-17 3.2146e-16 1.1038e-16 1.9660e-16 1.7491e-17 3.0979e-17 5.1016e-18 9.0947e-18 4.3722e-18 2.8260e-17 1.4281e-17 4.6731e-18 2.3174e-17 1.6476e-17 1.5769e-17 8.4183e-17 3.6717e-16 5.0624e-17 8.2487e-18 2.7571e-17 1.5956e-16 1.7716e-16 6.7503e-17 1.2709e-17 1.5482e-17 1.5505e-17 3.8856e-24 3.1176e-18 2.5613e-17 5.2339e-18 8.4133e-18 1.0112e-17 7.5257e-18 2.7284e-17 3.3016e-18 2.5388e-18 1.3815e-17 4.5827e-16 3.9485e-16 1.7410e-16 6.6318e-18 1.5029e-16 1.3361e-16 3.1487e-16 7.1533e-17 9.1154e-17 5.8483e-17 2.7148e-16 7.0255e-16 7.9059e-16 1.9800e-16 8.2400e-17 2.5461e-17 3.2264e-16 1.1740e-16 3.6108e-16 2.5112e-17 5.3602e-17 3.7164e-17 1.0360e-17 3.4744e-17 1.3479e-16 6.0076e-18 1.4987e-17 2.7923e-17 5.1566e-17 5.1532e-17 2.3016e-16 9.6352e-17 5.2436e-16 1.4770e-16 3.2644e-16 1.8579e-16 1.7931e-17 3.7639e-17 6.4732e-16 4.3154e-16 5.5027e-17 1.7998e-16 4.4013e-16 5.4530e-18 2.0592e-16 1.4578e-16 5.7624e-16 1.1555e-16 4.2169e-17 1.5129e-16 4.2646e-16 2.4540e-16 7.1895e-17 1.7583e-16 7.2229e-16 1.7050e-17 6.6988e-17 4.0846e-16 1.8070e-16 1.5418e-16 5.2445e-17 3.9644e-16 5.8709e-17 8.9455e-18 9.4974e-17 7.0583e-17 3.7555e-16 3.7823e-16 9.6434e-16 1.0732e-15 3.1755e-16 5.5932e-17 6.6820e-16 5.9916e-17 1.3016e-16 1.9357e-17 1.4645e-17 1.2155e-17 4.4827e-16 4.2465e-17 2.6899e-17 7.9041e-17 5.5567e-16 3.4943e-17 5.2539e-16 1.2494e-17 1.4535e-16 9.8128e-17 9.4841e-17 1.8578e-16 1.7750e-16 8.1041e-17 6.8295e-17 2.4027e-17 1.3277e-16 9.5013e-17 1.1051e-16 3.7461e-17 1.1264e-16 1.2592e-16 2.2157e-16 2.7079e-16 4.1757e-17 1.4375e-18 1.9344e-17 7.3934e-17 8.4699e-17 6.5372e-17 2.5520e-17 1.8439e-17 2.3772e-16 1.9033e-16 1.1089e-16 9.8400e-17 1.9559e-17 2.4691e-17 1.5720e-16 2.8296e-17 1.3612e-16 5.9040e-17 6.8501e-18 1.1857e-16 1.0364e-17 1.5028e-16 3.8005e-17 1.5547e-17 1.4594e-16 2.6382e-16 4.1066e-17 3.9355e-17 5.4568e-17 4.3722e-17 1.9948e-17 3.7743e-17 6.8694e-17 4.9352e-17 2.2360e-17 5.6069e-18 2.3167e-17 7.9356e-17 8.4995e-17 4.0810e-17 1.2588e-16 7.9863e-17 4.5683e-18 4.6416e-17 2.8077e-17 9.8820e-19 4.2696e-18 6.4904e-17 4.8991e-18 5.7773e-19 2.0686e-17 8.7249e-18 7.5836e-18 3.2997e-17 8.8673e-17 3.3016e-18 3.8082e-18 2.7630e-17 3.0552e-16 5.1483e-16 1.4248e-16 1.1805e-16 6.5037e-17 5.3820e-17 7.0154e-17 2.2918e-16 1.9167e-16 8.0143e-17 3.5437e-16 1.5753e-16 7.1949e-17 5.7116e-18 2.7090e-17 1.1316e-17 1.8853e-16 6.0378e-17 3.1248e-16 2.3717e-17 4.4668e-18 1.6233e-17 4.6892e-17 6.5555e-19 1.0013e-17 2.5747e-18 2.7165e-17 9.3078e-18 2.0178e-17 3.7450e-23 5.1721e-18 5.9711e-17 2.9415e-16 1.1572e-16 3.9302e-16 5.3329e-17 9.3241e-17 5.8810e-23 2.2754e-16 7.6628e-16 4.2329e-18 2.2783e-17 1.1115e-15 7.4161e-16 5.0010e-17 1.9851e-16 1.0446e-16 1.0471e-16 1.1501e-17 4.1707e-16 5.3307e-17 9.2605e-17 7.1895e-16 2.0168e-16 8.0853e-17 4.3762e-16 4.4456e-16 1.2378e-17 2.6771e-17 1.7520e-16 1.5509e-15 3.1093e-16 1.1155e-15 7.1564e-17 2.6593e-16 1.4117e-16 2.6825e-16 1.8911e-16 5.4931e-16 1.2930e-16 1.0585e-16 9.7882e-17 1.8618e-16 9.8263e-17 9.1341e-18 1.4841e-16 1.8830e-17 4.2543e-16 6.4291e-16 8.6859e-16 3.9388e-16 7.5277e-17 4.9041e-16 5.7012e-17 8.7871e-17 3.6054e-16 7.2675e-17 1.9275e-17 3.3370e-16 9.2020e-17 5.0466e-17 2.9140e-16 1.4992e-17 1.6498e-16 3.6435e-16 3.5630e-17 2.4429e-16 2.8960e-16 1.6463e-16 1.6598e-16 9.3143e-17 4.1661e-17 2.3105e-16 1.4375e-18 1.4880e-18 3.0806e-18 6.0728e-17 1.8655e-16 3.2609e-17 1.0536e-17 1.7609e-17 1.5638e-16 3.6096e-23 1.2272e-16 4.1178e-18 1.7185e-16 2.9714e-17 1.5091e-16 5.0003e-17 9.4822e-17 2.6287e-16 3.1891e-17 4.7836e-18 2.9743e-17 3.5630e-17 4.2753e-17 6.4272e-17 7.2879e-19 6.8443e-17 2.3321e-17 1.6143e-16 2.1861e-17 2.8260e-17 7.1916e-17 7.4770e-17 5.6647e-17 1.3338e-16 3.5043e-19 1.4030e-17 6.1958e-17 1.9557e-16 3.4732e-18 9.6135e-18 3.4119e-16 1.6417e-17 5.5567e-17 9.1326e-17 5.8963e-17 5.9550e-18 4.8741e-17 3.8154e-17 3.8708e-17 7.9754e-18 1.1529e-17 2.9492e-18 1.9683e-17 1.2126e-17 1.1005e-17 1.5233e-17 4.2173e-17 2.7703e-16 1.6616e-16 3.2688e-17 2.6527e-17 8.1549e-17 2.1151e-16 1.6342e-16 6.9255e-17 2.5375e-16 1.7816e-16 9.0094e-17 2.3263e-17 3.6059e-16 5.9020e-17 1.4787e-16 4.8093e-17 1.3605e-16 1.1405e-16 3.1942e-16 3.9063e-17 1.6243e-17 1.2388e-17 2.4537e-17 7.2110e-17 2.6033e-16 5.1494e-18 4.6835e-18 4.5505e-17 1.7936e-17 2.8762e-17 1.2930e-18 3.7048e-16 1.7905e-16 6.8672e-16 4.0602e-17 5.2985e-16 5.8814e-16 1.1480e-16 4.2174e-16 5.0413e-16 3.3863e-17 1.0480e-16 7.7830e-16 2.7538e-16 3.5301e-17 2.6675e-16 2.9654e-16 3.3580e-16 3.0669e-16 1.7582e-16 3.9980e-16 1.2039e-16 1.1503e-16 1.0343e-16 2.3717e-16 2.7280e-16 4.2629e-17 1.3615e-16 2.0915e-22 7.4987e-16 1.8730e-16 1.9433e-16 2.6000e-16 3.3098e-16 7.1230e-16 1.6133e-16 1.8241e-16 1.4420e-15 1.4648e-16 6.0772e-16 1.5878e-16 1.9576e-16 2.5835e-15 2.9958e-16 9.8648e-16 1.0539e-16 3.0755e-16 9.3188e-17 5.8590e-16 3.0883e-17 4.6112e-16 4.7989e-16 1.8647e-17 1.0667e-16 3.4050e-16 3.3555e-16 1.7726e-16 2.1378e-16 7.0253e-18 2.1703e-16 8.7011e-18 9.8283e-17 1.3659e-16 9.6107e-18 1.1579e-16 5.7156e-16 7.2707e-18 1.0086e-17 6.2386e-16 1.1876e-16 6.4918e-17 5.5547e-17 1.2805e-16 1.4375e-18 1.4880e-18 1.6327e-16 1.5981e-18 1.2755e-17 1.7013e-17 3.0556e-16 2.5156e-17 1.2729e-16 3.4652e-17 2.2665e-16 4.0148e-17 2.6667e-17 1.1886e-16 1.2167e-16 3.0835e-16 6.0829e-17 4.7950e-17 1.0303e-16 1.1241e-16 8.6099e-17 7.2844e-17 1.4769e-16 7.6370e-17 1.4503e-16 5.7636e-18 2.4779e-17 2.2737e-17 4.4347e-17 2.0780e-16 1.1170e-16 2.3833e-17 1.5621e-16 3.7660e-17 5.2214e-17 1.4487e-16 3.6321e-17 1.4148e-16 4.5585e-18 4.1719e-17 1.1527e-17 2.9979e-18 1.4548e-16 1.6846e-17 2.0862e-17 2.2472e-19 1.7407e-17 1.1877e-18 2.8887e-18 9.4708e-18 3.1161e-18 5.0979e-17 1.8091e-23 2.4252e-17 4.4021e-18 6.3471e-18 2.9812e-17 4.5524e-16 1.8070e-16 6.1468e-17 6.1013e-17 3.0935e-16 4.1776e-17 1.1514e-16 3.7042e-16 2.7100e-17 8.1226e-18 2.9551e-16 6.7397e-16 4.9941e-16 6.6635e-18 6.8855e-17 8.0627e-17 1.1467e-16 2.8847e-16 2.3609e-16 2.7902e-18 1.2994e-17 2.8621e-17 2.6173e-17 1.1734e-16 8.9343e-17 2.6820e-23 1.8734e-18 3.1026e-17 1.9057e-17 4.3143e-17 2.8446e-17 6.6497e-17 3.2684e-16 1.6292e-16 1.6728e-16 1.1870e-16 5.6034e-23 5.4576e-17 5.6886e-17 3.3474e-16 8.0424e-17 2.4833e-16 1.4174e-16 6.5709e-16 1.8533e-16 1.7370e-16 7.5821e-16 6.8605e-17 2.2618e-16 2.1262e-16 6.1303e-16 5.0933e-17 2.5882e-16 2.0685e-17 8.6243e-17 1.7050e-17 1.4007e-16 1.9340e-22 3.3464e-17 9.1106e-17 2.3975e-16 1.1660e-16 6.2063e-16 6.2619e-17 4.5587e-16 4.1342e-16 1.0730e-17 3.7823e-16 1.5503e-15 7.2409e-16 2.6463e-16 1.3983e-16 6.9115e-16 1.2942e-16 4.1103e-17 9.4636e-17 1.0670e-16 6.0573e-16 1.7498e-16 3.9569e-16 3.6698e-16 2.8229e-17 5.5940e-17 3.7150e-16 1.1716e-16 5.1761e-17 4.0769e-17 1.3493e-16 8.7816e-18 1.5626e-17 3.2368e-16 4.3107e-17 2.8817e-16 6.8877e-17 4.9712e-16 5.3890e-16 1.1633e-17 8.3567e-17 1.6896e-16 3.2338e-16 1.8346e-16 8.4710e-17 9.7432e-18 1.4375e-18 1.4880e-18 1.6943e-17 1.2785e-17 1.3234e-16 3.8280e-17 4.1158e-23 1.0188e-16 4.4855e-17 1.6171e-16 1.5479e-16 1.4412e-17 1.1160e-16 1.1502e-17 1.4808e-16 5.0929e-17 4.6517e-17 1.8153e-16 3.5162e-17 2.3918e-18 5.7921e-17 1.7419e-17 1.5391e-16 2.3629e-23 4.5914e-17 2.2118e-16 6.5591e-18 1.3111e-16 7.6826e-17 4.9317e-17 5.4574e-17 4.6731e-18 1.2016e-17 1.8045e-17 6.6232e-17 3.9155e-18 1.5261e-18 8.5262e-17 9.3992e-17 3.9905e-18 3.7873e-18 5.0394e-17 3.6735e-17 3.8570e-17 3.4313e-24 4.3145e-17 7.7090e-18 5.0773e-17 3.0235e-17 1.7446e-18 2.9914e-17 2.9492e-18 5.2101e-18 5.3052e-18 3.4392e-23 3.0466e-17 3.8537e-17 1.1033e-16 9.7440e-17 4.4058e-17 4.3107e-18 1.0581e-16 1.0952e-16 7.3043e-17 5.6497e-17 1.9463e-16 5.0360e-17 1.4595e-16 4.2539e-17 2.1161e-17 7.9962e-17 6.5469e-17 3.1119e-17 6.4333e-16 2.9853e-16 7.4300e-16 3.6273e-17 1.1370e-17 5.1261e-18 5.0709e-17 6.0310e-17 5.9305e-17 2.1456e-17 3.4658e-17 8.2736e-18 1.3452e-17 7.1904e-18 5.9479e-17 2.7141e-18 2.8421e-18 5.0705e-16 9.0948e-17 1.5483e-16 3.4607e-16 3.1993e-17 2.8639e-16 1.1656e-15 1.2699e-16 1.7770e-16 4.6002e-16 2.4538e-17 1.5003e-16 2.0161e-16 4.4144e-16 2.2387e-16 3.2585e-16 4.2933e-16 1.1106e-16 3.2412e-17 4.3137e-17 2.7925e-16 1.6171e-17 3.9215e-16 2.9840e-16 2.1661e-16 1.0039e-16 2.1901e-22 2.1727e-16 3.4980e-16 5.0322e-17 1.6102e-16 3.8939e-16 1.1293e-15 7.5111e-17 7.0918e-17 2.4414e-17 2.4567e-16 9.1296e-16 1.5381e-16 2.4994e-16 1.1983e-17 5.0466e-16 3.9575e-16 1.7993e-16 3.0995e-16 2.5559e-17 1.7951e-16 3.2279e-16 1.6937e-17 3.1700e-16 6.6207e-17 5.1258e-17 2.3203e-16 3.2615e-16 7.0091e-17 8.9572e-17 1.3404e-15 6.9609e-18 1.0173e-16 4.9972e-17 1.2654e-16 1.4667e-16 6.3392e-16 4.0134e-16 2.9104e-16 2.6427e-16 4.8650e-17 4.2338e-17 1.3331e-16 9.7432e-17 4.3125e-18 1.4880e-17 5.6991e-17 1.4703e-16 7.3344e-17 2.0558e-16 1.8439e-16 1.2578e-18 4.8491e-18 4.9668e-17 1.8795e-17 5.1472e-17 2.8642e-17 5.7512e-17 1.0187e-16 9.2599e-18 2.6836e-18 9.7613e-17 1.6273e-16 2.8702e-17 1.1741e-17 9.5014e-18 4.5862e-17 7.5614e-19 7.2879e-17 6.4841e-18 5.1744e-17 7.0484e-17 2.5609e-17 1.7732e-17 7.1406e-18 2.1029e-17 2.3603e-17 2.1968e-17 9.5668e-17 1.5662e-17 1.4315e-16 3.0108e-17 2.6700e-17 1.0956e-16 8.3486e-17 5.0822e-17 3.8857e-17 9.1473e-17 7.9496e-17 2.2809e-17 4.9362e-17 1.9300e-18 5.3922e-18 8.7231e-18 3.7704e-17 3.3705e-18 6.3679e-18 1.3642e-17 8.8043e-18 5.0777e-18 1.9632e-17 2.4793e-16 1.5634e-16 4.7256e-17 2.1355e-16 7.9864e-17 2.0323e-17 9.3676e-17 2.6517e-16 7.1938e-17 3.4819e-16 1.2073e-16 1.5287e-17 3.1827e-16 1.7135e-17 5.6438e-18 4.5264e-16 5.5587e-16 4.6960e-16 2.5692e-16 1.5346e-17 8.9336e-18 1.5378e-17 2.4537e-17 2.7533e-17 1.8485e-17 3.2613e-17 4.6835e-18 4.7573e-17 1.0089e-17 3.2357e-17 3.6204e-17 1.7099e-16 2.9131e-16 2.6494e-16 3.2481e-17 1.7203e-16 3.0841e-16 8.4122e-16 2.3931e-16 7.4612e-17 1.2487e-16 5.6957e-17 1.4174e-16 7.0071e-16 6.4718e-17 1.5509e-16 9.4354e-17 1.6610e-16 5.3670e-17 2.4124e-16 1.3327e-17 3.0097e-16 2.3965e-17 1.3239e-15 1.8866e-16 1.7760e-22 4.2629e-16 3.4038e-16 1.0708e-16 7.0082e-17 1.2737e-16 3.4980e-16 2.5161e-17 2.5942e-16 1.0447e-16 6.0500e-17 3.0044e-16 2.3048e-15 1.3428e-16 1.0344e-16 3.4402e-16 6.9916e-17 1.8261e-15 5.0330e-17 2.0552e-16 5.8072e-17 8.3688e-17 1.0129e-17 2.6346e-16 6.3697e-17 2.4593e-16 7.9041e-17 1.7714e-16 5.7472e-23 1.8673e-16 2.1418e-17 6.9130e-17 1.0689e-16 1.3348e-16 2.9516e-17 4.5246e-17 1.8967e-17 2.6652e-17 1.6018e-16 6.0210e-17 5.9383e-18 1.6868e-16 8.2126e-17 8.9536e-17 2.8618e-17 8.4675e-18 2.1247e-16 5.9851e-17 2.8750e-18 2.9760e-18 1.2476e-16 2.2373e-17 7.4938e-17 1.1059e-16 4.1158e-23 1.9747e-16 1.7578e-16 2.4025e-16 1.5589e-16 1.0192e-16 2.4494e-16 1.4570e-16 1.4148e-17 2.2224e-17 1.4492e-16 3.8532e-17 9.2402e-17 9.1686e-17 9.1578e-17 2.3753e-18 7.7733e-17 1.7694e-16 2.2775e-23 1.0086e-17 2.9152e-18 2.4252e-17 1.2492e-18 1.7455e-16 1.3261e-17 1.4019e-17 1.9826e-16 1.0356e-16 2.8035e-18 5.9385e-17 1.0042e-16 7.5670e-17 1.5412e-17 4.3351e-17 1.4820e-17 6.8524e-17 2.6656e-17 2.8964e-17 1.4274e-17 7.1010e-17 5.8190e-17 2.5683e-17 2.9849e-17 1.1465e-17 2.0878e-17 3.3705e-18 3.8786e-17 4.0168e-17 1.9810e-17 3.3005e-17 2.3268e-17 8.6684e-17 7.0244e-16 9.0248e-17 1.0644e-16 9.1322e-17 9.0327e-18 3.0208e-16 1.8225e-16 1.6014e-16 9.7471e-18 2.1683e-16 2.9511e-16 8.8032e-17 1.1423e-16 6.5469e-17 1.4004e-16 3.2069e-16 1.3082e-16 4.8607e-16 2.3717e-17 4.0607e-18 4.6989e-18 2.8899e-17 9.7021e-17 1.3864e-16 7.7241e-18 4.6835e-18 1.4479e-17 3.5031e-23 3.8349e-17 6.3358e-17 1.4249e-16 5.8262e-17 6.2429e-16 1.2343e-16 4.7136e-16 4.7338e-16 2.8229e-17 4.4528e-16 1.2059e-15 1.4815e-17 2.6656e-16 1.5019e-15 1.3632e-16 5.8835e-17 9.3052e-17 4.7177e-17 3.9719e-17 1.2267e-16 4.7840e-16 3.0652e-16 1.2039e-16 1.9172e-17 1.7065e-16 7.0073e-17 5.1150e-17 1.7052e-16 2.5993e-16 3.0117e-16 2.1901e-22 5.6191e-16 1.0105e-16 5.0322e-17 6.2619e-17 6.2683e-16 3.5292e-16 2.0387e-16 2.8367e-16 3.4179e-16 1.2930e-16 9.2620e-17 4.0551e-16 5.2793e-16 6.5429e-16 4.5670e-17 5.3771e-17 6.4021e-16 8.1033e-18 7.8644e-17 5.5976e-17 4.9955e-16 1.0727e-16 1.1561e-16 3.3104e-17 1.1350e-15 4.2837e-17 1.3649e-16 6.6587e-17 6.4984e-17 1.4411e-16 8.7011e-18 1.0173e-16 4.9972e-17 3.3637e-17 3.6280e-16 2.3753e-17 3.9262e-17 2.7952e-16 4.3468e-16 1.1447e-16 1.6512e-16 3.4717e-17 1.5589e-16 4.4921e-23 1.0416e-17 8.6257e-17 8.1503e-17 1.8814e-16 9.0737e-17 1.2249e-16 1.3332e-16 5.9402e-17 1.2706e-17 2.6977e-16 4.6325e-17 4.1481e-17 5.7512e-17 1.1979e-16 8.4265e-17 5.9040e-17 1.4300e-16 4.0886e-18 2.8702e-17 7.3575e-17 1.0927e-16 1.7879e-17 2.0340e-16 2.9880e-17 1.6787e-16 3.7897e-17 1.5158e-17 1.9300e-16 3.9897e-17 8.1606e-18 6.1217e-17 2.1457e-18 2.7460e-17 1.6295e-16 4.5028e-17 1.0042e-16 2.5285e-16 5.4919e-17 5.0788e-18 3.6885e-17 2.8837e-17 1.5384e-17 5.3199e-17 2.6572e-17 4.0674e-17 7.8333e-18 1.6330e-18 2.6961e-18 4.9099e-17 6.2321e-19 1.8116e-17 5.2101e-18 3.5621e-17 1.1005e-17 6.3471e-18 4.4354e-17 3.4431e-16 1.7016e-16 1.0766e-16 2.5632e-16 1.3109e-16 3.3120e-17 1.3618e-16 2.3237e-17 2.6016e-16 2.4151e-16 1.3874e-16 2.6387e-16 6.1368e-16 1.1423e-16 9.4816e-17 1.0750e-16 7.0164e-16 2.5157e-16 7.4300e-16 7.8125e-17 4.3856e-17 1.2815e-18 1.0905e-17 3.4089e-17 1.5404e-16 5.7501e-17 2.9272e-23 1.2410e-17 6.6139e-17 1.6778e-17 9.4390e-17 9.6352e-17 7.1052e-18 1.6902e-16 1.0556e-16 4.4384e-16 3.9628e-16 1.6561e-16 8.8271e-17 6.0496e-18 2.6032e-16 1.0708e-16 3.1580e-16 3.0809e-16 2.3240e-16 3.1638e-16 1.4490e-16 3.3580e-16 1.1501e-17 2.6169e-16 1.2438e-16 1.3891e-16 2.2048e-16 2.2237e-16 3.4497e-16 1.8755e-16 1.9031e-22 9.0975e-16 3.1456e-16 1.4016e-17 1.6483e-16 5.0526e-16 6.7096e-17 8.9455e-17 1.7095e-16 1.1092e-16 2.2533e-16 1.1820e-17 1.0986e-16 1.2930e-17 2.6463e-16 3.9153e-16 6.6310e-17 4.0743e-16 7.5356e-17 2.8821e-16 2.0922e-18 4.4568e-16 1.9661e-18 1.9302e-17 7.8775e-17 1.5055e-17 2.4241e-17 4.7817e-17 9.9221e-16 1.1423e-16 8.8629e-17 7.1668e-16 8.6060e-17 1.6147e-16 3.6545e-17 1.4484e-16 2.6652e-16 2.8832e-17 1.3740e-16 2.3902e-16 3.0537e-17 1.6713e-16 1.9207e-16 7.1544e-18 2.7237e-16 5.9714e-17 1.5032e-16 4.3125e-18 1.3392e-17 7.7015e-18 4.9941e-23 2.1525e-16 1.2760e-17 1.1195e-16 2.6413e-16 5.6977e-17 1.8365e-16 8.8449e-18 1.7501e-17 2.9630e-18 1.1311e-16 4.7160e-18 1.0741e-16 8.0509e-17 3.9388e-17 8.4225e-17 6.3781e-18 4.6963e-17 3.8005e-17 1.7101e-17 1.8147e-17 1.0276e-16 9.1497e-17 8.0167e-18 2.2737e-17 2.1861e-17 3.2194e-16 3.0602e-18 1.4533e-16 1.8453e-17 7.4535e-17 3.3992e-17 2.9692e-17 1.0377e-17 4.7693e-17 1.9102e-17 1.1790e-17 1.7784e-17 1.3134e-17 1.1737e-16 6.9455e-18 1.2737e-17 4.7190e-18 1.2434e-19 1.0021e-16 2.3109e-18 6.4800e-18 9.3481e-19 1.8538e-17 3.7629e-17 5.3052e-18 6.6032e-18 1.2694e-18 2.6903e-17 2.5096e-16 6.9590e-16 2.7003e-17 4.7550e-16 7.6495e-17 1.6936e-17 1.4237e-16 1.3486e-16 3.3998e-17 1.5433e-16 3.9581e-16 3.7886e-17 1.1927e-15 3.6173e-17 6.8855e-17 9.0528e-17 2.0796e-16 2.6835e-17 1.0624e-15 1.3951e-18 2.0304e-17 4.4853e-17 1.4177e-17 6.8177e-17 5.0063e-17 1.2015e-17 2.8101e-18 1.6547e-17 1.1210e-18 4.6738e-17 1.6421e-16 6.7854e-17 1.5631e-16 8.1310e-16 8.1204e-18 4.0599e-16 4.9310e-16 7.1514e-17 7.6894e-16 9.1752e-16 1.2699e-16 1.5492e-16 3.7299e-16 8.0977e-16 7.0602e-17 2.3883e-16 3.6731e-16 2.1665e-16 7.6672e-17 2.4533e-17 3.2429e-16 5.6026e-16 1.2462e-16 9.3084e-17 2.5334e-16 8.5250e-17 3.8366e-16 1.5472e-16 1.1378e-16 4.6254e-16 2.5473e-16 9.3279e-17 4.1935e-17 2.6836e-17 9.4974e-18 4.0333e-17 1.3305e-15 5.4370e-16 4.1503e-16 1.6809e-16 3.1755e-16 7.4111e-16 1.1324e-15 3.1636e-16 4.1332e-16 5.3771e-17 1.6738e-17 4.8417e-16 6.4488e-16 1.7758e-16 2.6899e-17 2.4465e-17 7.2722e-17 9.7472e-17 7.9999e-16 9.2813e-17 2.6589e-17 2.9614e-16 2.6345e-17 2.7432e-16 5.9167e-17 2.4829e-16 3.0816e-16 3.3637e-17 8.6919e-16 2.9692e-18 8.4340e-17 3.8902e-17 1.9062e-16 2.5899e-16 5.5039e-17 3.0829e-16 2.0739e-16 2.8750e-18 8.9280e-18 7.7015e-18 3.0364e-17 3.1889e-17 1.6730e-16 1.4488e-16 1.6351e-17 6.7888e-17 1.0511e-16 7.1865e-17 4.6325e-17 3.4568e-17 6.2304e-17 7.3570e-17 2.9632e-17 3.0415e-17 6.7644e-17 5.1516e-17 9.1686e-17 6.5748e-17 1.8924e-16 6.2964e-17 1.3611e-17 8.0167e-18 1.2968e-17 2.9880e-17 1.4855e-16 1.6989e-16 5.9291e-17 1.0201e-18 2.2431e-17 3.1757e-17 1.2259e-23 6.6582e-18 9.0709e-17 1.8710e-16 1.0871e-16 1.2959e-16 2.7027e-17 5.1376e-17 2.1842e-17 6.2331e-17 8.4676e-17 7.3566e-18 8.1010e-17 1.1439e-17 8.7590e-18 1.8873e-17 5.2339e-18 8.0394e-17 8.9318e-17 2.3156e-18 1.2884e-17 1.4307e-17 3.8082e-17 diff --git a/test/tag_test.dNt b/test/tag_test.dNt new file mode 100644 index 0000000..e7e85dd --- /dev/null +++ b/test/tag_test.dNt @@ -0,0 +1,71 @@ +|Sx||328| + + + +|Hx|1|749| + + + + + + + + + + + + + + + + +|Pd|1|69|2014-04-08T00:15:05.046 6.662e-01 -1.372e+00 -3.632e-01 1.569e+00 +|Pd|1|69|2014-04-08T00:15:15.046 6.785e-01 -1.368e+00 -3.464e-01 1.568e+00 +|Pd|1|69|2014-04-08T00:15:25.046 6.581e-01 -1.349e+00 -4.111e-01 1.558e+00 +|Pd|1|69|2014-04-08T00:15:35.046 6.743e-01 -1.404e+00 -4.286e-01 1.616e+00 +|Pd|1|69|2014-04-08T00:15:45.046 7.001e-01 -1.396e+00 -3.858e-01 1.610e+00 +|Pd|1|69|2014-04-08T00:15:55.046 7.166e-01 -1.383e+00 -3.897e-01 1.607e+00 +|Pd|1|69|2014-04-08T00:16:05.046 7.088e-01 -1.378e+00 -3.946e-01 1.601e+00 +|Pd|1|69|2014-04-08T00:16:15.046 7.086e-01 -1.380e+00 -3.908e-01 1.602e+00 +|Pd|1|69|2014-04-08T00:16:25.046 6.845e-01 -1.328e+00 -3.663e-01 1.539e+00 +|Pd|1|69|2014-04-08T00:16:35.046 7.198e-01 -1.320e+00 -4.269e-01 1.564e+00 +|Pd|1|69|2014-04-08T00:16:45.046 6.848e-01 -1.366e+00 -4.117e-01 1.584e+00 +|Pd|1|69|2014-04-08T00:16:55.046 6.342e-01 -1.423e+00 -3.764e-01 1.605e+00 +|Pd|1|69|2014-04-08T00:17:05.046 6.199e-01 -1.397e+00 -3.747e-01 1.575e+00 +|Pd|1|69|2014-04-08T00:17:15.046 6.101e-01 -1.381e+00 -3.831e-01 1.559e+00 +|Pd|1|69|2014-04-08T00:17:25.046 6.301e-01 -1.377e+00 -4.228e-01 1.573e+00 +|Pd|1|69|2014-04-08T00:17:35.046 5.852e-01 -1.380e+00 -4.431e-01 1.564e+00 +|Pd|1|69|2014-04-08T00:17:45.046 5.548e-01 -1.418e+00 -4.323e-01 1.584e+00 +|Pd|1|69|2014-04-08T00:17:55.046 5.543e-01 -1.427e+00 -3.958e-01 1.583e+00 +|Pd|1|69|2014-04-08T00:18:05.046 5.556e-01 -1.396e+00 -3.708e-01 1.549e+00 +|Pd|1|69|2014-04-08T00:18:15.046 5.859e-01 -1.380e+00 -3.824e-01 1.549e+00 +|Pd|1|69|2014-04-08T00:18:25.046 5.649e-01 -1.392e+00 -3.951e-01 1.555e+00 +|Pd|1|69|2014-04-08T00:18:35.046 5.777e-01 -1.388e+00 -4.038e-01 1.558e+00 +|Pd|1|69|2014-04-08T00:18:45.046 5.642e-01 -1.438e+00 -4.283e-01 1.605e+00 +|Pd|1|69|2014-04-08T00:18:55.046 5.884e-01 -1.426e+00 -3.865e-01 1.591e+00 +|Pd|1|69|2014-04-08T00:19:05.046 5.966e-01 -1.416e+00 -3.732e-01 1.583e+00 +|Pd|1|69|2014-04-08T00:19:15.046 5.865e-01 -1.410e+00 -3.636e-01 1.571e+00 +|Pd|1|69|2014-04-08T00:19:25.046 5.974e-01 -1.407e+00 -4.134e-01 1.585e+00 +|Pd|1|69|2014-04-08T00:19:35.046 5.935e-01 -1.413e+00 -3.938e-01 1.584e+00 +|Pd|1|69|2014-04-08T00:19:45.046 5.521e-01 -1.424e+00 -3.326e-01 1.565e+00 +|Pd|1|69|2014-04-08T00:19:55.046 5.568e-01 -1.401e+00 -3.478e-01 1.549e+00 diff --git a/utilities/das2_ascii.c b/utilities/das2_ascii.c index 18a1c04..3c3e082 100644 --- a/utilities/das2_ascii.c +++ b/utilities/das2_ascii.c @@ -61,7 +61,7 @@ DasErrCode OnPktHdr(StreamDesc* pSdIn, PktDesc* pPdIn, void* vpOut) /* Handle packet re-definitions */ if(StreamDesc_isValidId(g_pSdOut, nPktId)) - StreamDesc_freePktDesc(g_pSdOut, nPktId); + StreamDesc_freeDesc(g_pSdOut, nPktId); pPdOut = StreamDesc_clonePktDescById(g_pSdOut, pSdIn, nPktId); diff --git a/utilities/das2_bin_avg.c b/utilities/das2_bin_avg.c index 4613bc3..cbe4f45 100644 --- a/utilities/das2_bin_avg.c +++ b/utilities/das2_bin_avg.c @@ -90,10 +90,9 @@ DasErrCode onStreamHdr( StreamDesc* sd, void* ud) { g_pOutSd = StreamDesc_copy(sd); - for(i=0; i<100; i++){ + for(i=0; i<100; i++) ibin[i]= -99999; - g_pOutSd->pktDesc[i]= NULL; /* Probably not needed */ - } + g_pOutSd->bDescriptorSent = false; return DasIO_writeStreamDesc(pOut, g_pOutSd); @@ -108,7 +107,7 @@ DasErrCode onPktHdr(StreamDesc* pSdIn, PktDesc* pPdIn, void* vpOut) * with the same id */ if(StreamDesc_isValidId(g_pOutSd, nPktId) ){ sendData(pOut, g_pOutSd, nPktId); - StreamDesc_freePktDesc(g_pOutSd, nPktId); + StreamDesc_freeDesc(g_pOutSd, nPktId); } /* Deep copy the input pkt */ diff --git a/utilities/das2_bin_avgsec.c b/utilities/das2_bin_avgsec.c index 7495989..0d38be0 100644 --- a/utilities/das2_bin_avgsec.c +++ b/utilities/das2_bin_avgsec.c @@ -211,7 +211,7 @@ DasErrCode onPktHdr(StreamDesc* pSdIn, PktDesc* pPdIn, void* v) with it and delete it */ if(StreamDesc_isValidId(g_pSdOut, nPktId)){ sendData(nPktId); - StreamDesc_freePktDesc(g_pSdOut, nPktId); + StreamDesc_freeDesc(g_pSdOut, nPktId); } /* Deepcopy's the packet descriptor preserving the ID */ diff --git a/utilities/das2_bin_peakavgsec.c b/utilities/das2_bin_peakavgsec.c index 26f2450..1a9482b 100644 --- a/utilities/das2_bin_peakavgsec.c +++ b/utilities/das2_bin_peakavgsec.c @@ -197,7 +197,7 @@ DasErrCode onPktHdr(StreamDesc* pSdIn, PktDesc* pPdIn, void* v) with it and delete it */ if(StreamDesc_isValidId(g_pSdOut, nPktId)){ sendData(nPktId); - StreamDesc_freePktDesc(g_pSdOut, nPktId); + StreamDesc_freeDesc(g_pSdOut, nPktId); } /* Deepcopy's the packet descriptor preserving the ID */ diff --git a/utilities/das2_binary.c b/utilities/das2_binary.c index 2294d9d..650c633 100644 --- a/utilities/das2_binary.c +++ b/utilities/das2_binary.c @@ -41,7 +41,7 @@ void packetDescriptorHandler( PktDesc* pd, void* ex ) { DasEncoding outDataType; if ( pdout[pd->id] != NULL ) { - StreamDesc_freePktDesc( sdout, pdout[pd->id] ); + StreamDesc_freeDesc( sdout, pdout[pd->id] ); } pdout[pd->id]= StreamDesc_clonePktDesc( sdout, pd ); diff --git a/utilities/das2_cache_rdr.c b/utilities/das2_cache_rdr.c index f185c5a..0e1e132 100644 --- a/utilities/das2_cache_rdr.c +++ b/utilities/das2_cache_rdr.c @@ -509,7 +509,7 @@ DasErrCode onPktHdr(StreamDesc* pSdIn, PktDesc* pPdIn, void* vpHDat) /* Not a repeat, but a reuse of the same ID, this is going to squash the stream efficiency */ - StreamDesc_freePktDesc(pSdOut, nPktId); + StreamDesc_freeDesc(pSdOut, nPktId); } /* Attach the packet definitions to the output stream descriptor that */ diff --git a/utilities/das2_deflate.c b/utilities/das2_deflate.c index 3bdaec9..936876e 100644 --- a/utilities/das2_deflate.c +++ b/utilities/das2_deflate.c @@ -36,7 +36,7 @@ void packetDescriptorHandler( PktDesc* pd, void* ex ) { PlaneDesc* plane; if ( pdout[pd->id] != NULL ) { - StreamDesc_freePktDesc( sdout, pdout[pd->id] ); + StreamDesc_freeDesc( sdout, pdout[pd->id] ); } pdout[pd->id]= StreamDesc_createPktDesc( sdout, PlaneDesc_getEncoding( PktDesc_getXPlane(pd) ), PlaneDesc_getUnits( PktDesc_getXPlane(pd)) ); diff --git a/utilities/das2_inflate.c b/utilities/das2_inflate.c index 947bde5..bc580a3 100644 --- a/utilities/das2_inflate.c +++ b/utilities/das2_inflate.c @@ -44,7 +44,7 @@ void packetDescriptorHandler( PktDesc pd ) { PlaneDesc plane; if ( pdout[pd->id] != NULL ) { - StreamDesc_freePktDesc( sdout, pdout[pd->id] ); + StreamDesc_freeDesc( sdout, pdout[pd->id] ); } pdout[pd->id]= StreamDesc_createPktDesc( sdout, PlaneDesc_getEncoding( PktDesc_getXPlane(pd) ), PlaneDesc_getUnits( PktDesc_getXPlane(pd)) ); diff --git a/utilities/das2_psd.c b/utilities/das2_psd.c index c2da3dc..a95c8ea 100644 --- a/utilities/das2_psd.c +++ b/utilities/das2_psd.c @@ -1620,7 +1620,7 @@ int main(int argc, char** argv) { pXOut = PktDesc_getXPlane(pPdIn); if(pXOut->pUser) del_Accum((Accum*)(pXOut->pUser)); - StreamDesc_freePktDesc(g_pSdOut, nPktId); + StreamDesc_freeDesc(g_pSdOut, nPktId); }*/ return nRet; From 45c902f88c6b7a02a298b6096c6c5f789dcbb3e2 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Tue, 23 Jan 2024 23:50:05 -0600 Subject: [PATCH 08/40] das3 stream properties parsing works --- das2/array.c | 5 +- das2/array.h | 2 +- das2/dataset.c | 5 ++ das2/dataset.h | 15 ++++++ das2/descriptor.c | 2 +- das2/io.c | 7 ++- das2/packet.c | 2 +- das2/stream.c | 122 ++++++++++++++++++++++++++++++++++++++++------ das2/stream.h | 4 +- test/TestV3Read.c | 4 +- test/tag_test.dNt | 22 ++++----- 11 files changed, 155 insertions(+), 35 deletions(-) diff --git a/das2/array.c b/das2/array.c index e8f2e79..9b5139e 100644 --- a/das2/array.c +++ b/das2/array.c @@ -1041,7 +1041,10 @@ bool DasAry_init( strncpy(pThis->sId, id, 63); pThis->nRank = rank; - pThis->units = units; + if(units != NULL) + pThis->units = units; + else + pThis->units = UNIT_DIMENSIONLESS; /* Not a sub-array of any other array, owns all buffers*/ pThis->pIdx0 = &pThis->index0; diff --git a/das2/array.h b/das2/array.h index f198972..15254de 100644 --- a/das2/array.h +++ b/das2/array.h @@ -855,7 +855,7 @@ DAS_API bool DasAry_putAt(DasAry* pThis, ptrdiff_t* pStart, const byte* pVals, s * @code * // Print all the magnetic amplitudes for a single time slice at index 117 * size_t uVals; - * float* pAmp = DasAry_getFloatsIn(pAry, DIM2_AT(117), &uVals); + * cost float* pAmp = DasAry_getFloatsIn(pAry, DIM2_AT(117), &uVals); * for(size_t u = 0; u < uVals; ++u) * printf("Amp at freq %03zu: %s nT**2/Hz \n", u, events[u]); * diff --git a/das2/dataset.c b/das2/dataset.c index 9536c6a..23cd451 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -497,3 +497,8 @@ DasDs* new_DasDs( return pThis; } + +DAS_API DasDs* new_DasDs_xml(DasBuf* pBuf, DasDesc* pParent, int nPktId) +{ + return NULL; +} \ No newline at end of file diff --git a/das2/dataset.h b/das2/dataset.h index 6530fea..7bb94fb 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -208,6 +208,21 @@ DAS_API DasDs* new_DasDs( const char* sId, const char* sGroupId, int nRank ); +/** Create a Das Dataset from XML data + * + * @param pBuf The buffer to read. Reading will start with the read point + * and will run until DasBuf_remaining() is 0 or the end tag + * is found, which ever comes first. + * + * @param pParent The parent packet descriptor, this may be NULL + * @param nPktId The packet's ID within it's parent's array. My be 0 if + * and only if pParent is NULL + * @return A pointer to a new DasDs and all if it's children allocated + * on the heap, or NULL on an error. + * @memberof DasDs + */ +DAS_API DasDs* new_DasDs_xml(DasBuf* pBuf, DasDesc* pParent, int nPktId); + /** Delete a Data object, cleaning up it's memory * * If the underlying arrays and property values are needed else where diff --git a/das2/descriptor.c b/das2/descriptor.c index b15615f..abe25a5 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -64,7 +64,7 @@ void DasDesc_init(DasDesc* pThis, desc_type_t dt){ default: sId = "desciptor_properties"; break; } - DasAry_init(&(pThis->properties), sId, vtByte, 0, NULL, RANK_2(0,0), UNIT_DIMENSIONLESS); + DasAry_init(&(pThis->properties), sId, vtByte, 0, NULL, RANK_2(0,0), NULL); DasAry_setUsage(&(pThis->properties), D2ARY_AS_SUBSEQ); pThis->parent = NULL; diff --git a/das2/io.c b/das2/io.c index 12f3b11..792a026 100644 --- a/das2/io.c +++ b/das2/io.c @@ -1027,11 +1027,13 @@ int _DasIO_dataTypeOrErr(DasIO* pThis, DasBuf* pBuf, bool bFirstRead, int* pPktI break; case 'H': + case 'P': case 'X': nContent |= IO_USAGE_CNT; break; + case 'C': case 'E': nContent |= IO_USAGE_OOB; break; default: - return -1 * das_error(DASERR_IO, ""); + goto TAG_ERROR; } if(sTag[2] == 'x') nContent |= IO_ENC_XML; @@ -1045,6 +1047,7 @@ int _DasIO_dataTypeOrErr(DasIO* pThis, DasBuf* pBuf, bool bFirstRead, int* pPktI break; } +TAG_ERROR: return -1 * das_error(DASERR_IO, "Unknown bytes %02X %02X %02X %02X (%c%c%c%c) at input offset %ld\n", (unsigned int)sTag[0], (unsigned int)sTag[1], (unsigned int)sTag[2], @@ -1122,7 +1125,7 @@ DasErrCode _DasIO_handleDesc( StreamHandler* pHndlr = NULL; DasErrCode nRet = 0; - if( (pDesc = Das2Desc_decode(pBuf)) == NULL) return 17; + if( (pDesc = DasDesc_decode(pBuf)) == NULL) return DASERR_IO; if(pDesc->type == STREAM){ if(*ppSd != NULL) diff --git a/das2/packet.c b/das2/packet.c index d0ab3b8..944969e 100644 --- a/das2/packet.c +++ b/das2/packet.c @@ -55,7 +55,7 @@ struct parse_pktdesc_stack{ }; /* Formerly nested function "start" in parsePktDesc */ -void PktDesc_parseStart(void *data, const char *el, const char **attr) { +void PktDesc_parseStart(void* data, const char* el, const char** attr) { int i = 0; struct parse_pktdesc_stack* pStack = (struct parse_pktdesc_stack*)data; diff --git a/das2/stream.c b/das2/stream.c index 8547777..1b9079d 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -289,13 +289,22 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) /* ************************************************************************* */ /* Serializing */ +#define _UNIT_BUF_SZ 127 +#define _NAME_BUF_SZ 63 +#define _TYPE_BUF_SZ 23 + typedef struct parse_stream_desc{ StreamDesc* pDesc; DasErrCode nRet; + bool bInProp; + char sPropUnits[_UNIT_BUF_SZ+1]; + char sPropName[_NAME_BUF_SZ+1]; + char sPropType[_TYPE_BUF_SZ+1]; + DasAry aPropVal; }parse_stream_desc_t; /* Formerly nested function "start" in parseStreamDescriptor */ -void parseStreamDesc_start( void *data, const char *el, const char **attr) +void parseStreamDesc_start(void* data, const char* el, const char** attr) { int i; parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; @@ -303,6 +312,8 @@ void parseStreamDesc_start( void *data, const char *el, const char **attr) char sType[64] = {'\0'}; char sName[64] = {'\0'}; const char* pColon = NULL; + + pPsd->bInProp = (strcmp(el, "p") == 0); for(i=0; attr[i]; i+=2) { if (strcmp(el, "stream")==0) { @@ -313,10 +324,13 @@ void parseStreamDesc_start( void *data, const char *el, const char **attr) if ( strcmp(attr[i], "version")== 0 ) { strncpy( pSd->version, (char*)attr[i+1], STREAMDESC_VER_SZ-1); - if(strcmp(pSd->version, DAS_22_STREAM_VER) > 0){ - fprintf(stderr, "Warning: Stream is version %s, expected %s, " - "some features might not be supported", pSd->version, - DAS_22_STREAM_VER); + if((strcmp(pSd->version, DAS_22_STREAM_VER) > 0) && + (strcmp(pSd->version, DAS_30_STREAM_VER) > 0) + ){ + fprintf(stderr, "Warning: Stream is version %s, expected %s " + "or %s. Some features might not be supported\n", pSd->version, + DAS_22_STREAM_VER, DAS_30_STREAM_VER + ); } continue; } @@ -337,29 +351,97 @@ void parseStreamDesc_start( void *data, const char *el, const char **attr) } continue; - } + } + + if(strcmp(el, "p") == 0){ + if(strcmp(attr[i], "name") == 0) + strncpy(pPsd->sPropName, attr[i+1], _NAME_BUF_SZ); + else if(strcmp(attr[i], "type") == 0) + strncpy(pPsd->sPropType, attr[i+1], _TYPE_BUF_SZ); + else if (strcmp(attr[i], "units") == 0) + strncpy(pPsd->sPropUnits, attr[i+1], _UNIT_BUF_SZ); + + continue; + } - pPsd->nRet = das_error(DASERR_STREAM, "Invalid element <%s> in section", el); + pPsd->nRet = das_error(DASERR_STREAM, "Invalid element <%s> under section", el); break; } } +void parseStreamDesc_chardata(void* data, const char* sChars, int len) +{ + parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; + + if(!pPsd->bInProp) + return; + + DasAry* pAry = &(pPsd->aPropVal); + + DasAry_append(pAry, (byte*) sChars, len); +} + /* Formerly nested function "end" in parseStreamDescriptor */ -void parseStreamDesc_end(void *data, const char *el) { +void parseStreamDesc_end(void* data, const char* el) +{ + if(strcmp(el, "p") != 0) + return; + + parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; + pPsd->bInProp = false; + + DasAry* pAry = &(pPsd->aPropVal); + DasAry_append(pAry, NULL, 1); // Null terminate the value string + size_t uValLen = 0; + const char* sValue = DasAry_getCharsIn(pAry, DIM0, &uValLen); + + DasDesc_flexSet( + (DasDesc*)pPsd->pDesc, + pPsd->sPropType[0] == '\0' ? "string" : pPsd->sPropType, + 0, + pPsd->sPropName, + sValue, + '\0', + pPsd->sPropUnits[0] == '\0' ? NULL : Units_fromStr(pPsd->sPropUnits), + 3 /* Das3 */ + ); + + memset(&(pPsd->sPropType), 0, _TYPE_BUF_SZ); + memset(&(pPsd->sPropName), 0, _NAME_BUF_SZ); + memset(&(pPsd->sPropUnits), 0, _UNIT_BUF_SZ); + DasAry_clear(pAry); } StreamDesc* new_StreamDesc_str(DasBuf* pBuf) { StreamDesc* pThis = new_StreamDesc(); - parse_stream_desc_t psd = {pThis, 0}; - + + /*StreamDesc* pDesc; + DasErrCode nRet; + char sPropUnits[_UNIT_BUF_SZ+1]; + char sPropName[_NAME_BUF_SZ+1]; + char sPropType[_TYPE_BUF_SZ+1]; + DasAry aPropVal; + */ + + parse_stream_desc_t psd; + memset(&psd, 0, sizeof(psd)); + psd.pDesc = pThis; + XML_Parser p = XML_ParserCreate("UTF-8"); if(!p){ das_error(DASERR_STREAM, "couldn't create xml parser\n"); return NULL; } + + // Make a 1-D dynamic array to hold the current property value so that + // it has no up-front limits, but doesn't require a huge heap buffer + // for what are typically very small strings. + DasAry_init(&(psd.aPropVal), "streamprops", vtByte, 0, NULL, RANK_1(0), NULL); + XML_SetUserData(p, (void*) &psd); XML_SetElementHandler(p, parseStreamDesc_start, parseStreamDesc_end); + XML_SetCharacterDataHandler(p, parseStreamDesc_chardata); int nParRet = XML_Parse(p, pBuf->pReadBeg, DasBuf_unread(pBuf), true); XML_ParserFree(p); @@ -368,12 +450,17 @@ StreamDesc* new_StreamDesc_str(DasBuf* pBuf) das_error(DASERR_STREAM, "Parse error at line %d:\n%s\n", XML_GetCurrentLineNumber(p), XML_ErrorString(XML_GetErrorCode(p)) ); + del_StreamDesc(pThis); // Don't leak on fail + DasAry_deInit(&(psd.aPropVal)); return NULL; } - if(psd.nRet != 0) + if(psd.nRet != 0){ + del_StreamDesc(pThis); // Don't leak on fail + DasAry_deInit(&(psd.aPropVal)); return NULL; - else - return pThis; + } + + return pThis; } DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf) @@ -398,7 +485,7 @@ DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf) } /* Factory function */ -DasDesc* Das2Desc_decode(DasBuf* pBuf) +DasDesc* DasDesc_decode(DasBuf* pBuf) { char sName[DAS_XML_NODE_NAME_LEN] = {'\0'}; @@ -457,13 +544,18 @@ DasDesc* Das2Desc_decode(DasBuf* pBuf) i++; } - DasBuf_setReadOffset(pBuf, uPos); + /* TODO: Use read with buf save point in DasIO for faster tag parsing */ + + DasBuf_setReadOffset(pBuf, uPos); /* <-- the key call, back up the buffer */ if(strcmp(sName, "stream") == 0) return (DasDesc*) new_StreamDesc_str(pBuf); if(strcmp(sName, "packet") == 0) return (DasDesc*) new_PktDesc_xml(pBuf, NULL, 0); + + if(strcmp(sName, "dataset") == 0) + return (DasDesc*) new_DasDs_xml(pBuf, NULL, 0); das_error(DASERR_STREAM, "Unknown top-level descriptor object: %s", sName); return NULL; diff --git a/das2/stream.h b/das2/stream.h index 1badb2c..027d6fd 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -282,12 +282,12 @@ DAS_API int StreamDesc_getOffset(StreamDesc* pThis); */ DAS_API DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf); -/** Das2 Stream Descriptor Factory Function +/** Packtized Stream Descriptor Factory Function * * @returns Either a StreamDesc or a PktDesc object depending on the data * received, or NULL if the input could not be parsed. */ -DAS_API DasDesc* Das2Desc_decode(DasBuf* pBuf); +DAS_API DasDesc* DasDesc_decode(DasBuf* pBuf); #ifdef __cplusplus } diff --git a/test/TestV3Read.c b/test/TestV3Read.c index 1d5290d..6a1be33 100644 --- a/test/TestV3Read.c +++ b/test/TestV3Read.c @@ -18,7 +18,9 @@ #include #include -const char* g_sTestFile1 = "./test/ex12_sounder_xyz.d3t"; +StreamDesc* g_pSdOut = NULL; + +/* const char* g_sTestFile1 = "./test/ex12_sounder_xyz.d3t"; */ const char* g_sTestFile1 = "./test/tag_test.dNt"; int main(int argc, char** argv) diff --git a/test/tag_test.dNt b/test/tag_test.dNt index e7e85dd..a0b2739 100644 --- a/test/tag_test.dNt +++ b/test/tag_test.dNt @@ -1,14 +1,14 @@ -|Sx||328| - - +|Sx||454| + + +

Magnetic Field Components in the SCSE Frame from FGM

+

SCET (UTC)

+

60

+

linear

+

60.000000

+

(1.0 minute Averages)

+

das2_bin_avgsec

+
|Hx|1|749| From 98647fe446b027102484b4e6bea71dfd1982102f Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sun, 28 Jan 2024 14:52:57 -0600 Subject: [PATCH 09/40] Var internal comp. defined, frame definitions added --- buildfiles/Darwin.arm64.mak | 8 +- buildfiles/Darwin.mak | 6 +- buildfiles/Linux.mak | 4 +- buildfiles/Windows.mak | 35 +-- das2/array.c | 4 +- das2/array.h | 7 +- das2/dataset.c | 45 ++++ das2/dataset.h | 20 +- das2/defs.h | 3 +- das2/descriptor.c | 1 + das2/descriptor.h | 3 +- das2/dimension.h | 16 +- das2/frame.c | 138 +++++++++++ das2/frame.h | 136 +++++++++++ das2/io.c | 3 +- das2/packet.h | 8 +- das2/stream.c | 142 ++++++++++-- das2/stream.h | 54 ++++- das2/variable.c | 442 +++++++++++++++++++++++++++++++----- das2/variable.h | 170 +++++++++++--- das2/variable.md | 2 +- test/TestV3Read.c | 4 +- test/TestVariable.c | 4 + test/ex15_vector_frame.d3b | 42 ++++ test/ex16_mag_grid_doc.d3x | 168 ++++++++++++++ 25 files changed, 1311 insertions(+), 154 deletions(-) create mode 100644 das2/frame.c create mode 100644 das2/frame.h create mode 100644 test/ex15_vector_frame.d3b create mode 100644 test/ex16_mag_grid_doc.d3x diff --git a/buildfiles/Darwin.arm64.mak b/buildfiles/Darwin.arm64.mak index 4210a30..2265bcd 100644 --- a/buildfiles/Darwin.arm64.mak +++ b/buildfiles/Darwin.arm64.mak @@ -12,10 +12,10 @@ export DIFFCMD := diff TARG=libdas3.0.a SRCS:=das1.c array.c buffer.c builder.c cli.c credentials.c dataset.c datum.c \ -descriptor.c dft.c dimension.c dsdf.c encoding.c http.c io.c json.c log.c \ -node.c oob.c operator.c packet.c plane.c processor.c property.c send.c stream.c \ -time.c tt2000.c units.c utf8.c util.c value.c variable.c - +descriptor.c dft.c dimension.c dsdf.c encoding.c frame.c http.c io.c json.c \ +log.c node.c oob.c operator.c packet.c plane.c processor.c property.c send.c \ +stream.c time.c tt2000.c units.c utf8.c util.c value.c variable.c + HDRS:=defs.h time.h das1.h util.h log.h buffer.h utf8.h value.h units.h \ tt2000.h operator.h datum.h array.h encoding.h variable.h descriptor.h \ dimension.h dataset.h plane.h packet.h stream.h processor.h property.h oob.h \ diff --git a/buildfiles/Darwin.mak b/buildfiles/Darwin.mak index 9f3db45..40b5291 100644 --- a/buildfiles/Darwin.mak +++ b/buildfiles/Darwin.mak @@ -9,9 +9,9 @@ export DIFFCMD := diff TARG=libdas3.0.a SRCS:=das1.c array.c buffer.c builder.c cli.c credentials.c dataset.c datum.c \ -descriptor.c dft.c dimension.c dsdf.c encoding.c http.c io.c json.c log.c \ -node.c oob.c operator.c packet.c plane.c processor.c property.c send.c stream.c \ -time.c tt2000.c units.c utf8.c util.c value.c variable.c +descriptor.c dft.c dimension.c dsdf.c encoding.c frame.c http.c io.c json.c \ +log.c node.c oob.c operator.c packet.c plane.c processor.c property.c send.c \ +stream.c time.c tt2000.c units.c utf8.c util.c value.c variable.c HDRS:=defs.h time.h das1.h util.h log.h buffer.h utf8.h value.h units.h \ tt2000.h operator.h datum.h array.h encoding.h variable.h descriptor.h \ diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index 3724c9b..3f6834b 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -10,8 +10,8 @@ export MD5SUM TARG=libdas3.0 SRCS:=das1.c array.c buffer.c builder.c cli.c credentials.c dataset.c datum.c \ -descriptor.c dft.c dimension.c dsdf.c encoding.c http.c io.c json.c log.c \ -node.c oob.c operator.c packet.c plane.c processor.c property.c send.c \ +descriptor.c dft.c dimension.c dsdf.c encoding.c frame.c http.c io.c json.c \ +log.c node.c oob.c operator.c packet.c plane.c processor.c property.c send.c \ stream.c time.c tt2000.c units.c utf8.c util.c value.c variable.c HDRS:=defs.h time.h das1.h util.h log.h buffer.h utf8.h value.h units.h \ diff --git a/buildfiles/Windows.mak b/buildfiles/Windows.mak index 29c2181..2280b18 100644 --- a/buildfiles/Windows.mak +++ b/buildfiles/Windows.mak @@ -29,19 +29,19 @@ BD=build.windows SRCS=$(SD)\das1.c $(SD)\array.c $(SD)\buffer.c $(SD)\builder.c $(SD)\cli.c \ $(SD)\credentials.c $(SD)\dataset.c $(SD)\datum.c $(SD)\descriptor.c \ - $(SD)\dft.c $(SD)\dimension.c $(SD)\dsdf.c $(SD)\encoding.c $(SD)\http.c \ - $(SD)\io.c $(SD)\json.c $(SD)\log.c $(SD)\node.c $(SD)\oob.c $(SD)\operator.c \ - $(SD)\packet.c $(SD)\plane.c $(SD)\processor.c $(SD)\property.c $(SD)\send.c \ - $(SD)\stream.c $(SD)\time.c $(SD)\tt2000.c $(SD)\units.c $(SD)\utf8.c \ - $(SD)\util.c $(SD)\value.c $(SD)\variable.c + $(SD)\dft.c $(SD)\dimension.c $(SD)\dsdf.c $(SD)\encoding.c $(SD)\frame.c \ + $(SD)\http.c $(SD)\io.c $(SD)\json.c $(SD)\log.c $(SD)\node.c $(SD)\oob.c \ + $(SD)\operator.c $(SD)\packet.c $(SD)\plane.c $(SD)\processor.c $(SD)\property.c \ + $(SD)\send.c $(SD)\stream.c $(SD)\time.c $(SD)\tt2000.c $(SD)\units.c \ + $(SD)\utf8.c $(SD)\util.c $(SD)\value.c $(SD)\variable.c LD=$(BD)\static STATIC_OBJS=$(LD)\das1.obj $(LD)\array.obj $(LD)\buffer.obj $(LD)\builder.obj \ $(LD)\cli.obj $(LD)\credentials.obj $(LD)\dataset.obj $(LD)\datum.obj \ $(LD)\descriptor.obj $(LD)\dft.obj $(LD)\dimension.obj $(LD)\dsdf.obj \ - $(LD)\encoding.obj $(LD)\http.obj $(LD)\io.obj $(LD)\json.obj $(LD)\log.obj \ - $(LD)\node.obj $(LD)\oob.obj $(LD)\operator.obj $(LD)\packet.obj \ + $(LD)\encoding.obj $(LD)\frame.obj $(LD)\http.obj $(LD)\io.obj $(LD)\json.obj \ + $(LD)\log.obj $(LD)\node.obj $(LD)\oob.obj $(LD)\operator.obj $(LD)\packet.obj \ $(LD)\plane.obj $(LD)\processor.obj $(LD)\property.obj $(LD)\send.obj \ $(LD)\stream.obj $(LD)\time.obj $(LD)\tt2000.obj $(LD)\units.obj \ $(LD)\utf8.obj $(LD)\util.obj $(LD)\value.obj $(LD)\variable.obj @@ -50,30 +50,30 @@ DD=$(BD)\shared DLL_OBJS=$(DD)\das1.obj $(DD)\array.obj $(DD)\buffer.obj $(DD)\builder.obj \ $(DD)\cli.obj $(DD)\credentials.obj $(DD)\dataset.obj $(DD)\datum.obj \ $(DD)\descriptor.obj $(DD)\dft.obj $(DD)\dimension.obj $(DD)\dsdf.obj \ - $(DD)\encoding.obj $(DD)\http.obj $(DD)\io.obj $(DD)\json.obj $(DD)\log.obj \ - $(DD)\node.obj $(DD)\oob.obj $(DD)\operator.obj $(DD)\packet.obj \ + $(DD)\encoding.obj $(DD)\frame.obj $(DD)\http.obj $(DD)\io.obj $(DD)\json.obj \ + $(DD)\log.obj $(DD)\node.obj $(DD)\oob.obj $(DD)\operator.obj $(DD)\packet.obj \ $(DD)\plane.obj $(DD)\processor.obj $(DD)\property.obj $(DD)\send.obj \ $(DD)\stream.obj $(DD)\time.obj $(DD)\tt2000.obj $(DD)\units.obj \ $(DD)\utf8.obj $(DD)\util.obj $(DD)\value.obj $(DD)\variable.obj HDRS=$(SD)\das1.h $(SD)\array.h $(SD)\buffer.h $(SD)\builder.h $(SD)\core.h \ $(SD)\cli.h $(SD)\credentials.h $(SD)\dataset.h $(SD)\datum.h $(SD)\descriptor.h \ - $(SD)\defs.h $(SD)\dft.h $(SD)\dimension.h $(SD)\dsdf.h $(SD)\encoding.h $(SD)\http.h \ - $(SD)\io.h $(SD)\json.h $(SD)\log.h $(SD)\node.h $(SD)\oob.h $(SD)\operator.h \ - $(SD)\packet.h $(SD)\plane.h $(SD)\processor.h $(SD)\property.h $(SD)\send.h \ - $(SD)\stream.h $(SD)\time.h $(SD)\tt2000.h $(SD)\units.h $(SD)\utf8.h $(SD)\util.h \ - $(SD)\value.h $(SD)\variable.h + $(SD)\defs.h $(SD)\dft.h $(SD)\dimension.h $(SD)\dsdf.h $(SD)\encoding.h \ + $(SD)\frame.h $(SD)\http.h $(SD)\io.h $(SD)\json.h $(SD)\log.h $(SD)\node.h \ + $(SD)\oob.h $(SD)\operator.h $(SD)\packet.h $(SD)\plane.h $(SD)\processor.h \ + $(SD)\property.h $(SD)\send.h $(SD)\stream.h $(SD)\time.h $(SD)\tt2000.h \ + $(SD)\units.h $(SD)\utf8.h $(SD)\util.h $(SD)\value.h $(SD)\variable.h UTIL_PROGS=$(BD)\das1_inctime.exe $(BD)\das2_prtime.exe $(BD)\das1_fxtime.exe \ $(BD)\das2_ascii.exe $(BD)\das2_bin_avg.exe $(BD)\das2_bin_avgsec.exe \ $(BD)\das2_bin_peakavgsec.exe $(BD)\das2_cache_rdr.exe $(BD)\das2_from_das1.exe \ $(BD)\das2_from_tagged_das1.exe $(BD)\das1_ascii.exe $(BD)\das1_bin_avg.exe \ $(BD)\das2_bin_ratesec.exe $(BD)\das2_psd.exe $(BD)\das2_hapi.exe \ - $(BD)\das2_histo.exe $(BD)\das_node.exe + $(BD)\das2_histo.exe $(BD)\das_node.exe TEST_PROGS=$(BD)\TestUnits.exe $(BD)\TestArray.exe $(BD)\LoadStream.exe \ $(BD)\TestBuilder.exe $(BD)\TestAuth.exe $(BD)\TestCatalog.exe $(BD)\TestTT2000.exe \ - $(BD)\TestVariable.exe $(BD)\TestCredMngr.exe + $(BD)\TestVariable.exe $(BD)\TestCredMngr.exe $(BD)\TestV3Read.exe # Add in cspice error handling functions if SPICE = yes !if defined(SPICE) @@ -115,6 +115,9 @@ run_test: run_test_spice: run_test $(BD)\TestSpice.exe +run_test3: + $(BD)\TestV3Read + $(LD): if not exist "$(LD)" mkdir "$(LD)" diff --git a/das2/array.c b/das2/array.c index 9b5139e..5ece7e0 100644 --- a/das2/array.c +++ b/das2/array.c @@ -34,10 +34,10 @@ const ptrdiff_t g_aShapeUnused[DASIDX_MAX] = DASIDX_INIT_UNUSED; const ptrdiff_t g_aShapeZeros[DASIDX_MAX] = DASIDX_INIT_BEGIN; const char g_sIdxLower[DASIDX_MAX] = { - 'i','j','k','l','m','n','p','q','r','s','t','u','v','w','x','y' + 'i','j','k','l','m','n','p','q'/*,'r','s','t','u','v','w','x','y'*/ }; const char g_sIdxUpper[DASIDX_MAX] = { - 'I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y' + 'I','J','K','L','M','N','P','Q'/*,'R','S','T','U','V','W','X','Y'*/ }; /* ************************************************************************* */ diff --git a/das2/array.h b/das2/array.h index 15254de..cf798a5 100644 --- a/das2/array.h +++ b/das2/array.h @@ -44,7 +44,7 @@ extern "C" { */ /** The maximum number of array indices in das2 */ -#define DASIDX_MAX 16 +#define DASIDX_MAX 8 /* WARNING! If the values below change, update das_varindex_merge */ /* and update das_varlength_merge */ @@ -56,8 +56,13 @@ extern "C" { /** Used to indicate degenerate axis in das variables */ #define DEGEN -3 +/* #define DASIDX_INIT_UNUSED {-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3} #define DASIDX_INIT_BEGIN { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +*/ +#define DASIDX_INIT_UNUSED {-3,-3,-3,-3,-3,-3,-3,-3} +#define DASIDX_INIT_BEGIN { 0, 0, 0, 0, 0, 0, 0, 0} + /** Global instance of unused array, suitable for memcpy */ #ifndef _das_array_c_ diff --git a/das2/dataset.c b/das2/dataset.c index 23cd451..0e51cd8 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -498,7 +498,52 @@ DasDs* new_DasDs( return pThis; } +/* ************************************************************************* */ +/* XML Serialization */ + +#define ELT_NONE 0 + +#define ELT_DS 1 // Opens on -> becomes DasDs + // * on open: create DasDs, set DasDs ptr, set Prop Dest ptr + +#define ELT_PDIM 2 // Opens on or -> becomes DasDim + // * on open: create DasDim, set cur DasDim ptr, take prop dest ptr + // * on close: set prop dest ptr back to the ds. + +#define ELT_PSET 3 // Opens on (no actions) + // (could parse for das2 style props, but don't those are + // invalide XML and should not be encouraged) + +#define ELT_PROP 4 // Opens on

-> becomes DasProp + // * on open: save attribs to parser vars + // * on data: append char_data buffer + // * on close: add prop to current prop dest + +#define ELT_VAR 5 // Opens on , -> becomes DasVar + // * on open: save attribs to parser vars + // * on close: unset current var ptr + +// When opening a vector, set the number of internal dimensions as 1. +// then + +#define ELT_VSEQ 6 // Atomic on -> part of DasVar + // * on open: + +#define ELT_VVAL 7 +#define ELT_VPKT 8 + +typedef struct ds_xml_parser { + int eltCur; + DasDs* pDs; + DasDim* pDim; + DasVar* pVar; + + +} ds_xml_parser_t; + DAS_API DasDs* new_DasDs_xml(DasBuf* pBuf, DasDesc* pParent, int nPktId) { + + return NULL; } \ No newline at end of file diff --git a/das2/dataset.h b/das2/dataset.h index 7bb94fb..2af2863 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -150,8 +150,8 @@ typedef struct dataset { /* A text identifier for this instance of a data set */ char sId[DAS_MAX_ID_BUFSZ]; - /* A text identifier for the join group for this dataset. Das2 datasets - * with the same groupID should be joined automatically by display clients. + /* A text identifier for the join group for this dataset. Datasets with + * the same groupID should be joined automatically by display clients. */ char sGroupId[DAS_MAX_ID_BUFSZ]; @@ -214,9 +214,13 @@ DAS_API DasDs* new_DasDs( * and will run until DasBuf_remaining() is 0 or the end tag * is found, which ever comes first. * - * @param pParent The parent packet descriptor, this may be NULL + * @param pParent The parent packet descriptor. Building a dataset may + * trigger a frame definition, so the stream discriptor may + * NOT be null. + * * @param nPktId The packet's ID within it's parent's array. My be 0 if * and only if pParent is NULL + * * @return A pointer to a new DasDs and all if it's children allocated * on the heap, or NULL on an error. * @memberof DasDs @@ -345,13 +349,13 @@ DAS_API ptrdiff_t DasDs_lengthIn(const DasDs* pThis, int nIdx, ptrdiff_t* pLoc); * * for(dasds_iter_init(&iter, pDs); !iter.done; dasds_iter_next(&iter)){ * - * DasVar_getDatum(pVarTime, iter.index, set); - * DasVar_getDatum(pVarFreq, iter.index, set + 1); - * DasVar_getDatum(pVarAmp, iter.index, set + 2); + * DasVar_getDatum(pVarTime, iter.index, set); + * DasVar_getDatum(pVarFreq, iter.index, set + 1); + * DasVar_getDatum(pVarAmp, iter.index, set + 2); * - * // Plot, or bin, or what-have-you, the triplet here. + * // Plot, or bin, or what-have-you, the triplet here. * // Plot() is not a real function in the libdas2 C API - * Plot(set); + * Plot(set); * } * * @endcode diff --git a/das2/defs.h b/das2/defs.h index 1404f95..22a365e 100644 --- a/das2/defs.h +++ b/das2/defs.h @@ -171,7 +171,8 @@ typedef int DasErrCode; #define DASERR_NODE 36 #define DASERR_TIME 37 #define DASERR_PROP 38 -#define DASERR_MAX 38 +#define DASERR_FRM 39 +#define DASERR_MAX 39 #ifdef __cplusplus } diff --git a/das2/descriptor.c b/das2/descriptor.c index abe25a5..b93e879 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -61,6 +61,7 @@ void DasDesc_init(DasDesc* pThis, desc_type_t dt){ case PACKET: sId = "packet_properties"; break; case PHYSDIM: sId = "physdim_properties"; break; case DATASET: sId = "dataset_properties"; break; + case FRAME: sId = "frame_properties"; break; default: sId = "desciptor_properties"; break; } diff --git a/das2/descriptor.h b/das2/descriptor.h index 72b2de5..edf6c2d 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -43,7 +43,8 @@ extern "C" { typedef enum DescriptorType { UNK_DESC=0, STREAM=14000, PLANE=14001, PACKET=14002, - PHYSDIM=15001, DATASET=15002 + PHYSDIM=15001, DATASET=15002, + FRAME=15003 } desc_type_t; diff --git a/das2/dimension.h b/das2/dimension.h index b255ae0..16ea775 100644 --- a/das2/dimension.h +++ b/das2/dimension.h @@ -19,6 +19,7 @@ #define _das_dimension_h_ #include +#include #include #ifdef __cplusplus @@ -27,6 +28,8 @@ extern "C" { #define DASDIM_MAXDEP 16 // Arbitrary decision, can be changed #define DASDIM_MAXVAR 16 // Another arbitrary changable descision +#define DASDIM_MAX_VEC_AXES 4 // Can change later +#define DASDIM_AXES_SZ 3 // Instead of single character so we can handle utf-8 /* OFFSET and REFERENCE variable roles were a tough call. In the end you only @@ -94,7 +97,6 @@ extern const char* DASVAR_WEIGHT; * @{ */ - enum dim_type { DASDIM_UNK = 0, DASDIM_COORD, DASDIM_DATA }; /** Das2 Physical Dimensions @@ -122,7 +124,17 @@ typedef struct das_dim { DasDesc base; /* Attributes or properties for this variable */ enum dim_type dtype; /* Coordinate or Data flag */ char sId[DAS_MAX_ID_BUFSZ]; /* A name for this dimension */ - + + /* Plot axes afinity, if any. For variables that have no internal + * indicies, only the first axis make any sense. */ + byte axes[4][3]; + + /* A direction frame for muli-element vectors in this dimension. + * Not stored as a pointer so that memcpy of descriptions takes less + * postblit fix-ups. + */ + char frame[DASFRM_NAME_SZ]; + /* Holds the max index to report out of this dimension. * The dimension may have internal indices beyond these * but they are not correlated with the overall dataset diff --git a/das2/frame.c b/das2/frame.c new file mode 100644 index 0000000..1ec5fde --- /dev/null +++ b/das2/frame.c @@ -0,0 +1,138 @@ +/* Copyright (C) 2024 Chris Piker + * + * This file is part of das2C, the Core Das C Library. + * + * Das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with Das2C; if not, see . + */ + +#define _POSIX_C_SOURCE 200112L + +#include +#ifdef _WIN32 +#define strcasecmp _stricmp +#define strncasecmp _strnicmp +#else +#include +#endif + +#include "frame.h" + +DasFrame* new_DasFrame(DasDesc* pParent, const char* sName, const char* sType) +{ + DasFrame* pThis = (DasFrame*) calloc(1, sizeof(DasFrame)); + DasDesc_init(&(pThis->base), FRAME); + + if(sName != NULL) strncpy(pThis->name, sName, DASFRM_NAME_SZ-1); + + if( DasFrame_setType(pThis, sType) != DAS_OKAY) + goto ERROR; + + if( DasFrame_setName(pThis, sName) != DAS_OKAY) + goto ERROR; + + return pThis; +ERROR: + free(pThis); + return NULL; +} + +void DasFrame_inertial(DasFrame* pThis, bool bInertial) +{ + if(bInertial) + pThis->flags &= DASFRM_INERTIAL; + else + pThis->flags &= ~DASFRM_INERTIAL; +} + +DasErrCode DasFrame_setName(DasFrame* pThis, const char* sName) +{ + if((sName == NULL)||(sName[0] == '\0')) + return das_error(DASERR_FRM, "Null or empty name string"); + + strncpy(pThis->name, sName, DASFRM_NAME_SZ-1); + return DAS_OKAY; +} + +DAS_API DasErrCode DasFrame_setType(DasFrame* pThis, const char* sType) +{ + if((sType == NULL)||(sType[0] == '\0')) + return das_error(DASERR_FRM, "Empty coordinate frame type"); + + strncpy(pThis->type, sType, DASFRM_TYPE_SZ-1); + if( strcasecmp(pThis->type, "cartesian") == 0) + pThis->flags |= DASFRM_CARTESIAN; + else if( strcasecmp(pThis->type, "polar") == 0) + pThis->flags |= DASFRM_POLAR; + else if( strcasecmp(pThis->type, "sphere_surface") == 0) + pThis->flags |= DASFRM_SPHERE_SURFACE; + else if( strcasecmp(pThis->type, "cylindrical") == 0) + pThis->flags |= DASFRM_CYLINDRICAL; + else if( strcasecmp(pThis->type, "spherical") == 0) + pThis->flags |= DASFRM_CYLINDRICAL; + + return DAS_OKAY; +} + +DAS_API byte DasFrame_getType(const DasFrame* pThis){ + return (pThis->flags & DASFRM_TYPE_MASK); +} + +DasErrCode DasFrame_addDir(DasFrame* pThis, const char* sDir) +{ + if(pThis->ndirs >= DASFRM_MAX_DIRS) + return das_error(DASERR_FRM, + "Only %d coordinate directions supported without a recompile.", + DASFRM_MAX_DIRS + ); + + // Make sure we don't already have one with that name + for(int8_t i = 0; i < pThis->ndirs; ++i){ + if(strcasecmp(sDir, pThis->dirs[pThis->ndirs]) == 0) + return das_error(DASERR_FRM, "Directory %s already defined for frame %s", + sDir, pThis->name + ); + } + + strncpy(pThis->dirs[pThis->ndirs], sDir, DASFRM_DNAM_SZ-1); + pThis->ndirs += 1; + return DAS_OKAY; +} + +const char* DasFrame_dirByIdx(const DasFrame* pThis, int iIndex) +{ + if(iIndex >= pThis->ndirs){ + das_error(DASERR_FRM, "No coordinate direction defined at index %d", iIndex); + return NULL; + } + return pThis->dirs[iIndex]; +} + +int8_t DasFrame_idxByDir(const DasFrame* pThis, const char* sDir) +{ + for(int8_t i = 0; i < pThis->ndirs; ++i){ + if(strcasecmp(sDir, pThis->dirs[pThis->ndirs]) == 0){ + return i; + } + } + + return -1 * das_error(DASERR_FRM, "Direction %s not defined for frame %s", + sDir, pThis->name + ); +} + +void del_DasFrame(DasFrame* pThis) +{ + // We have no sub-pointers, so this is just a type safe wrapper on free + if(pThis != NULL) + free(pThis); +} diff --git a/das2/frame.h b/das2/frame.h new file mode 100644 index 0000000..3ffb8a6 --- /dev/null +++ b/das2/frame.h @@ -0,0 +1,136 @@ +/* Copyright (C) 2024 Chris Piker + * + * This file is part of das2C, the Core Das C Library. + * + * Das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with Das2C; if not, see . + */ + +/** @file frame.h */ + +#ifndef _frame_h_ +#define _frame_h_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define DASFRM_NAME_SZ 64 +#define DASFRM_DNAM_SZ 32 +#define DASFRM_TYPE_SZ 32 +#define DASFRM_MAX_DIRS 4 + +#define DASFRM_TYPE_MASK 0x0000000F +#define DASFRM_UNKNOWN 0x00000000 +#define DASFRM_CARTESIAN 0x00000001 +#define DASFRM_POLAR 0x00000003 +#define DASFRM_SPHERE_SURFACE 0x00000002 +#define DASFRM_CYLINDRICAL 0x00000004 +#define DASFRM_SPHERICAL 0x00000005 + +#define DASFRM_INERTIAL 0x00000010 + +/** Store the definitions for a directional coordinate frame + * + * These are little more then a basic definition to allow new das3 vector + * objects to be manipulated in a somewhat reasonable manner. Two vectors that + * hare the same coordinate system can be subject to cross-products and other + * useful manipulations. If the do not share a coordinate system then some + * out-of-band transformation will be needed. + */ +typedef struct frame_descriptor{ + + /** The base class */ + DasDesc base; + + /* Required properties */ + char name[DASFRM_NAME_SZ]; + char type[DASFRM_TYPE_SZ]; + uint32_t flags; /* Usually contains the type */ + + char dirs[DASFRM_MAX_DIRS][DASFRM_DNAM_SZ]; + uint32_t ndirs; + +} DasFrame; + +/** @{ */ + +/** Create a new empty frame definition + * @param A coordinate name type string, such as "cartesian" + * @memberof DasFrame + */ +DAS_API DasFrame* new_DasFrame(DasDesc* pParent, const char* sName, const char* sType); + +/** Change the frame name + * @memberof DasFrame + */ +DAS_API DasErrCode DasFrame_setName(DasFrame* pThis, const char* sName); + + +DAS_API void DasFrame_inertial(DasFrame* pThis, bool bInertial); + +#define DasFrame_isInertial(P) (P->flags & DASFRM_INERTIAL) + +/** Get the frame name + * @memberof DasFrame + */ +#define DasFrame_getName(P) (P->name) + +/** Set the type of the frame as a string + * This is almost always the constant string "cartesian" + * @memberof DasFrame + */ +DAS_API DasErrCode DasFrame_setType(DasFrame* pThis, const char* sType); + + +/** Get the type of the frame as a string + * This is almost always the constant string "cartesian" + * @memberof DasFrame + */ +DAS_API byte DasFrame_getType(const DasFrame* pThis); + + +/** Add a direction to a frame definition + * + * @memberof DasFrame + */ +DAS_API DasErrCode DasFrame_addDir(DasFrame* pThis, const char* sDir); + +/** Given the index of a frame direction, return it's name + * + * @memberof DasFrame + */ +DAS_API const char* DasFrame_dirByIdx(const DasFrame* pThis, int iIndex); + +/** Givin the name of a frame direction, return it's index + * + * @return A signed byte. If the value is less then 0 an error has occured. + * + * @memberof DasFrame + */ +DAS_API int8_t DasFrame_idxByDir(const DasFrame* pThis, const char* sDir); + +/** Free a frame definition that was allocated on the heap + * + * @memberof DasFrame + */ +DAS_API void del_DasFrame(DasFrame* pThis); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _frame_h_ */ \ No newline at end of file diff --git a/das2/io.c b/das2/io.c index 792a026..e892e8c 100644 --- a/das2/io.c +++ b/das2/io.c @@ -1125,7 +1125,8 @@ DasErrCode _DasIO_handleDesc( StreamHandler* pHndlr = NULL; DasErrCode nRet = 0; - if( (pDesc = DasDesc_decode(pBuf)) == NULL) return DASERR_IO; + // Supply the stream descriptor if it exits + if( (pDesc = DasDesc_decode(pBuf, pSd)) == NULL) return DASERR_IO; if(pDesc->type == STREAM){ if(*ppSd != NULL) diff --git a/das2/packet.h b/das2/packet.h index 27ae5b0..93b298b 100644 --- a/das2/packet.h +++ b/das2/packet.h @@ -1,19 +1,19 @@ /* Copyright (C) 2004-2017 Jeremy Faden * Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * Das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with Das2C; if not, see . */ diff --git a/das2/stream.c b/das2/stream.c index 1b9079d..c12121a 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -163,7 +163,11 @@ DasErrCode StreamDesc_freeDesc(StreamDesc* pThis, int nPktId) else del_DasDs((DasDs*)pDesc); pThis->descriptors[nPktId]= NULL; - return 0; + + for(size_t u = 0; (u < MAX_FRAMES) && (pThis->frames[u] != NULL); ++u) + del_DasFrame(pThis->frames[u]); + + return DAS_OKAY; } PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int nPacketId) @@ -286,6 +290,57 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) return 0; } +/* ************************************************************************* */ +/* Frame wrappers */ + +DasFrame* StreamDesc_createFrame( + StreamDesc* pThis, const char* sName, const char* sType +){ + // Find a slot for it. + size_t uIdx = 0; + while((pThis->frames[uIdx] != 0) && (uIdx < (MAX_FRAMES-1))){ + if(strcmp(sName, DasFrame_getName(pThis->frames[uIdx])) == 0){ + das_error(DASERR_STREAM, + "A vector direction frame named '%s' already exist for this stream", + sName + ); + return NULL; + } + ++uIdx; + } + + if(pThis->frames[uIdx] != NULL){ + das_error(DASERR_STREAM, + "Adding more then %d frame definitions will require a recompile", + MAX_FRAMES + ); + return NULL; + } + + DasFrame* pFrame = new_DasFrame((DasDesc*)pThis, sName, sType); + if(pFrame != NULL){ + pThis->frames[uIdx] = pFrame; + } + + return pFrame; +} + +const DasFrame* StreamDesc_getFrame(const StreamDesc* pThis, int idx) +{ + return (idx < 0 || idx > MAX_FRAMES) ? NULL : pThis->frames[idx]; +} + +const DasFrame* StreamDesc_getFrameByName( + const StreamDesc* pThis, const char* sFrame +){ + for(size_t u = 0; (u < MAX_FRAMES) && (pThis->frames[u] != NULL); ++u){ + if(strcmp(sFrame, DasFrame_getName(pThis->frames[u])) == 0) + return pThis->frames[u]; + } + return NULL; +} + + /* ************************************************************************* */ /* Serializing */ @@ -294,7 +349,8 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) #define _TYPE_BUF_SZ 23 typedef struct parse_stream_desc{ - StreamDesc* pDesc; + StreamDesc* pStream; + DasFrame* pFrame; // Only non-null when in a tag DasErrCode nRet; bool bInProp; char sPropUnits[_UNIT_BUF_SZ+1]; @@ -308,7 +364,7 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) { int i; parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; - StreamDesc* pSd = pPsd->pDesc; + StreamDesc* pSd = pPsd->pStream; char sType[64] = {'\0'}; char sName[64] = {'\0'}; const char* pColon = NULL; @@ -321,6 +377,11 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) strncpy( pSd->compression, (char*)attr[i+1], STREAMDESC_CMP_SZ-1); continue; } + + if(strcmp(attr[i],"type")==0){ + strncpy( pSd->type, (char*)attr[i+1], STREAMDESC_TYPE_SZ-1); + continue; + } if ( strcmp(attr[i], "version")== 0 ) { strncpy( pSd->version, (char*)attr[i+1], STREAMDESC_VER_SZ-1); @@ -335,21 +396,23 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) continue; } - fprintf( stderr, "ignoring attribute of stream tag: %s\n", attr[i]); + fprintf(stderr, "ignoring attribute of stream tag: %s\n", attr[i]); continue; } if(strcmp( el, "properties" ) == 0){ + + DasDesc* pCurDesc = pPsd->pFrame ? (DasDesc*)(pPsd->pFrame) : (DasDesc*)(pPsd->pStream); + if( (pColon = strchr(attr[i], ':')) != NULL){ memset(sType, '\0', 64); strncpy(sType, attr[i], pColon - attr[i]); strncpy(sName, pColon+1, 63); - DasDesc_set( (DasDesc*)pSd, sType, sName, attr[i+1] ); + DasDesc_set( pCurDesc, sType, sName, attr[i+1] ); } else{ - DasDesc_set( (DasDesc*)pSd, "String", attr[i], attr[i+1]); + DasDesc_set( pCurDesc, "String", attr[i], attr[i+1]); } - continue; } @@ -363,10 +426,48 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) continue; } + + // elements dir and frame have name in common + if((strcmp(el, "dir") == 0)||(strcmp(el, "frame") == 0)){ + if(strcmp(attr[i], "name") == 0){ + memset(sName, 0, 64); strncpy(sName, attr[i+1], 63); + continue; + } + } + + if(strcmp(el, "frame") == 0){ + if(strcmp(attr[i], "type") == 0){ + memset(sType, 0, 64); strncpy(sType, attr[i+1], 63); + continue; + } + } - pPsd->nRet = das_error(DASERR_STREAM, "Invalid element <%s> under section", el); + pPsd->nRet = das_error(DASERR_STREAM, + "Invalid element <%s> or attribute \"%s=\" under section", + el, attr[i] + ); break; } + + if(strcmp(el, "frame") == 0){ + pPsd->pFrame = StreamDesc_createFrame(pSd, sName, sType); + if(!pPsd->pFrame){ + pPsd->nRet = das_error(DASERR_STREAM, "Frame definition failed in header"); + } + return; + } + + if(strcmp(el, "dir") == 0){ + if(pPsd->pFrame == NULL){ + pPsd->nRet = das_error(DASERR_STREAM, "

element encountered outside a "); + } + else{ + int nTmp = DasFrame_addDir(pPsd->pFrame, sName); + if(nTmp > 0) + pPsd->nRet = nTmp; + } + return; + } } void parseStreamDesc_chardata(void* data, const char* sChars, int len) @@ -384,10 +485,17 @@ void parseStreamDesc_chardata(void* data, const char* sChars, int len) /* Formerly nested function "end" in parseStreamDescriptor */ void parseStreamDesc_end(void* data, const char* el) { + parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; + + if(strcmp(el, "frame") == 0){ + // Close the frame + pPsd->pFrame = NULL; + return; + } + if(strcmp(el, "p") != 0) return; - parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; pPsd->bInProp = false; DasAry* pAry = &(pPsd->aPropVal); @@ -395,8 +503,12 @@ void parseStreamDesc_end(void* data, const char* el) size_t uValLen = 0; const char* sValue = DasAry_getCharsIn(pAry, DIM0, &uValLen); + // Set attribute for stream itself or for coordinate frame depending + // on if a frame element is current in process. + DasDesc* pDest = pPsd->pFrame ? (DasDesc*)pPsd->pFrame : (DasDesc*)pPsd->pStream; + DasDesc_flexSet( - (DasDesc*)pPsd->pDesc, + pDest, pPsd->sPropType[0] == '\0' ? "string" : pPsd->sPropType, 0, pPsd->sPropName, @@ -426,7 +538,7 @@ StreamDesc* new_StreamDesc_str(DasBuf* pBuf) parse_stream_desc_t psd; memset(&psd, 0, sizeof(psd)); - psd.pDesc = pThis; + psd.pStream = pThis; XML_Parser p = XML_ParserCreate("UTF-8"); if(!p){ @@ -472,6 +584,11 @@ DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf) nRet = DasBuf_printf(pBuf, "compression=\"%s\" ", pThis->compression); if(nRet != 0) return nRet; } + + if(strcmp(pThis->version, DAS_22_STREAM_VER) != 0){ + if( (nRet = DasBuf_printf(pBuf, "type=\"%s\"", pThis->type)) != 0) + return nRet; + } if( (nRet = DasBuf_printf(pBuf, "version=\"%s\"", pThis->version)) != 0) return nRet; @@ -485,7 +602,7 @@ DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf) } /* Factory function */ -DasDesc* DasDesc_decode(DasBuf* pBuf) +DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd) { char sName[DAS_XML_NODE_NAME_LEN] = {'\0'}; @@ -560,4 +677,3 @@ DasDesc* DasDesc_decode(DasBuf* pBuf) das_error(DASERR_STREAM, "Unknown top-level descriptor object: %s", sName); return NULL; } - diff --git a/das2/stream.h b/das2/stream.h index 027d6fd..6912f6b 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -31,8 +31,10 @@ extern "C" { #define STREAMDESC_CMP_SZ 48 #define STREAMDESC_VER_SZ 48 +#define STREAMDESC_TYPE_SZ 48 #define MAX_PKTIDS 100 +#define MAX_FRAMES 12 /** @defgroup streams Streams * Classes for handling interleaved self-describing data streams @@ -90,8 +92,12 @@ typedef struct stream_descriptor{ */ DasDesc* descriptors[MAX_PKTIDS]; + /** List of defined coordinate frames */ + DasFrame* frames[MAX_FRAMES]; + /* Common properties */ char compression[STREAMDESC_CMP_SZ]; + char type[STREAMDESC_TYPE_SZ]; char version[STREAMDESC_VER_SZ]; bool bDescriptorSent; @@ -213,6 +219,19 @@ DAS_API PktDesc* StreamDesc_createPktDesc( StreamDesc* pThis, DasEncoding* pXEncoder, das_units xUnits ); +/** Define a new vector direction frame for the stream. + * @see new_DasFrame for arguments + * + * @returns The newly created frame, or null on a failure. + * Note that each coordinate frame in the same stream must have + * a different name + * + * @memberof StreamDesc + */ +DAS_API DasFrame* StreamDesc_createFrame( + StreamDesc* pThis, const char* sName, const char* sType +); + /** Make a deep copy of a PacketDescriptor on a new stream. * This function makes a deep copy of the given packet descriptor and * places it on the provided stream. Note, packet ID's are not preserved @@ -262,6 +281,31 @@ DAS_API bool StreamDesc_isValidId(const StreamDesc* pThis, int nPktId); */ DAS_API PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int id); + +/** Get a frame pointer by it's index + * + * @param pThis The stream object which contains the frame definitions + * + * @param id The numeric frame index, is not used outside the stream + * descriptor itself + * + * @returns NULL if there is no frame at the given index + * @memberof StreamDesc + */ +DAS_API const DasFrame* StreamDesc_getFrame(const StreamDesc* pThis, int idx); + + +/** Get a frame pointer by it's name + * + * @param sFrame the name of a frame pointer + * @returns NULL if there is no frame by that name + * + * @memberof StreamDesc + */ +DAS_API const DasFrame* StreamDesc_getFrameByName( + const StreamDesc* pThis, const char* sFrame +); + /** Free any resources associated with this PacketDescriptor, * and release it's id number for use with a new PacketDescriptor. * @memberof StreamDesc @@ -284,10 +328,14 @@ DAS_API DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf); /** Packtized Stream Descriptor Factory Function * - * @returns Either a StreamDesc or a PktDesc object depending on the data - * received, or NULL if the input could not be parsed. + * @param pBuf A buffer containing string data to decode. + * + * @param pSd - The Stream descriptor, if it exists. May be NULL. + * + * @returns Either a top level Descriptor object. The specific type dependings + * on the data received, or NULL if the input could not be parsed. */ -DAS_API DasDesc* DasDesc_decode(DasBuf* pBuf); +DAS_API DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd); #ifdef __cplusplus } diff --git a/das2/variable.c b/das2/variable.c index a9a5960..6abf033 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -1,18 +1,18 @@ -/* Copyright (C) 2017-2020 Chris Piker +/* Copyright (C) 2017-2024 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * Das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ #define _POSIX_C_SOURCE 200112L @@ -28,7 +28,9 @@ #include "array.h" #include "operator.h" #include "variable.h" +#include "frame.h" +/* This would be alot easier to implement in D using sumtype... oh well */ /* ************************************************************************* */ /* Set index printing direction... NOT thread safe */ @@ -136,6 +138,22 @@ int DasVar_shape(const DasVar* pThis, ptrdiff_t* pShape) return pThis->shape(pThis, pShape); } +int DasVar_intrShape(const DasVar* pThis, ptrdiff_t* pShape) +{ + return pThis->intrShape(pThis, pShape); +} + +// For all the items that don't currently support internal shapes +int _DasVar_noIntrShape(const DasVar* pBase, ptrdiff_t* pShape) +{ + return 0; +} + +component_t DasVar_intrType(const DasVar* pThis) +{ + return pThis->intrtype; +} + ptrdiff_t DasVar_lengthIn(const DasVar* pThis, int nIdx, ptrdiff_t* pLoc) { return pThis->lengthIn(pThis, nIdx, pLoc); @@ -162,6 +180,7 @@ bool DasVar_isNumeric(const DasVar* pThis) char* _DasVar_prnUnits(const DasVar* pThis, char* sBuf, int nLen) { + if(pThis->units == UNIT_DIMENSIONLESS) return sBuf; if(nLen < 3) return sBuf; @@ -205,12 +224,13 @@ char* das_shape_prnRng( memset(sBuf, 0, nBufLen); /* Insure null termination where ever I stop writing */ int nUsed = 0; - for(int i = 0; i < iFirstInternal; ++i) + int i; + for(i = 0; i < iFirstInternal; ++i) if(pShape[i] != DASIDX_UNUSED) ++nUsed; if(nUsed == 0) return sBuf; - /* If don't have the minimum min of bytes to print the range don't do it */ + /* If don't have the minimum num of bytes to print the range don't do it */ if(nBufLen < (3 + nUsed*6 + (nUsed - 1)*2)) return sBuf; char* pWrite = sBuf; @@ -222,7 +242,7 @@ char* das_shape_prnRng( int nNeedLen = 0; bool bAnyWritten = false; - int i = 0; + i = 0; int iEnd = iFirstInternal; int iLetter = 0; if(!g_bFastIdxLast){ @@ -288,6 +308,148 @@ char* _DasVar_prnRange(const DasVar* pThis, char* sBuf, int nLen) return das_shape_prnRng(aShape, iInternal, iInternal, sBuf, nLen); } +/* Printing internal structure information, here's some examples + * + * Variable: center | event[i] us2000 | i:0..4483 | k:0..* string + * Variable: center | event[i] us2000 | i:0..4483, j:- | k:0..3 vec:tscs(0,2,1) + */ +char* _DasVar_prnIntr( + const DasVar* pThis, const char* sFrame, byte* pFrmDirs, byte nFrmDirs, + char* sBuf, int nBufLen +){ + if(pThis->intrtype == D2V_CT_SCALAR) /* If I'm a scalar, print nothing extra */ + return sBuf; + + memset(sBuf, 0, nBufLen); /* Insure null termination where ever I stop writing */ + + ptrdiff_t aShape[DASIDX_MAX]; + pThis->shape(pThis, aShape); + + int iBeg = pThis->iFirstInternal; // First dir to write + int iEnd = iBeg; // one after (or before) first dir to write + while((iEnd < (DASIDX_MAX - 1))&&(aShape[iEnd] != DASIDX_UNUSED)) + ++iEnd; + + int nIntrRank = iEnd - iBeg; + + // Just return if no hope of enough room + if(nBufLen < (8 + nIntrRank*6 + (nIntrRank-1)*2)) + return sBuf; + + // Grap the array index letter before swapping around the iteration direction + int iLetter = iBeg; + if(!g_bFastIdxLast){ + int nTmp = iBeg; + iBeg = iEnd - 1; + iEnd = nTmp - 1; + } + + char sEnd[32] = {'\0'}; + char* pWrite = sBuf; // Save off the write point + int i = iBeg; + bool bAnyWritten = false; + while(i != iEnd){ + if((aShape[i] == DASIDX_RAGGED)||(aShape[i] == DASIDX_FUNC)){ + sEnd[0] = '*'; sEnd[1] = '\0'; + } + else{ + snprintf(sEnd, 31, "%zd", aShape[i]); + } + + size_t nNeedLen = 6 + strlen(sEnd) + ( bAnyWritten ? 1 : 0); + if(nBufLen < (nNeedLen + 1)){ + /* If I've run out of room close off the string at the original + * write point and exit */ + sBuf[0] = '\0'; + return sBuf; + } + + if(bAnyWritten) + snprintf(pWrite, nBufLen - 1, ", %c:0..%s", g_sIdxLower[iLetter], sEnd); + else + snprintf(pWrite, nBufLen - 1, " %c:0..%s", g_sIdxLower[iLetter], sEnd); + + pWrite += nNeedLen; + nBufLen -= nNeedLen; + bAnyWritten = true; + + if(g_bFastIdxLast) ++i; + else --i; + + ++iLetter; /* always report in order of I,J,K */ + } + + /* now add in the internal information: + * + * vec:tscs(0,2,1) + */ + + if(nBufLen < 8) + return pWrite; + + switch(pThis->intrtype){ + case D2V_CT_STRING: + strcpy(pWrite, " string"); + pWrite += 7; nBufLen -= 7; + break; + + case D2V_CT_VECTOR: + if(!sFrame){ + strcpy(pWrite, " vector"); + pWrite += 7; nBufLen -= 7; + } + else{ + int nTmp = strlen(sFrame); + if(nBufLen < 4+nTmp) // out of room + return pWrite; + strcpy(pWrite, " vec:"); + pWrite += 5; nBufLen -= 5; + strcpy(pWrite, sFrame); + pWrite += nTmp; nBufLen -= nTmp; + } + break; + + case D2V_CT_MATRIX: + strcpy(pWrite, "matrix"); + pWrite += 7; nBufLen -= 7; + break; + + case D2V_CT_UNKNOWN: + strcpy(pWrite, "unknown"); + pWrite += 8; nBufLen -= 8; + break; + + default: break; + } + + /* Finally, for vectors add the direction map if it's present and not too big, + * expert space for (999,999,999,... ) up n nFrmDirs + */ + if( !pFrmDirs || nFrmDirs == 0 || nBufLen < (nFrmDirs*4 + 3)) + return pWrite; + + for(int nDir = 0; nDir < nFrmDirs; ++nDir){ + if(pFrmDirs[nDir] > 99) + return pWrite; + } + + *pWrite = ' '; ++pWrite; --nBufLen; + *pWrite = '('; ++pWrite; --nBufLen; + + for(int nDir = 0; nDir < nFrmDirs; ++nDir){ + if(nDir > 0){ + *pWrite = ','; ++pWrite; --nBufLen; + } + int nWrote = snprintf(pWrite, nBufLen, "%d", pFrmDirs[nDir]); + pWrite += nWrote; + nBufLen -= nWrote; + } + + *pWrite = ')'; ++pWrite; --nBufLen; + + return pWrite; +} + /* ************************************************************************* */ /* Constants */ @@ -324,6 +486,9 @@ bool DasConstant_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) bool DasConstant_isNumeric(const DasVar* pBase) { + if(pBase->intrtype != D2V_CT_STRING) + return false; + return ((pBase->vt == vtFloat ) || (pBase->vt == vtDouble ) || (pBase->vt == vtInt ) || (pBase->vt == vtLong ) || (pBase->vt == vtUShort ) || (pBase->vt == vtShort ) || @@ -421,6 +586,7 @@ DasVar* new_DasConstant( pThis->base.id = DasConstant_id; pThis->base.shape = DasConstant_shape; + pThis->base.intrShape = _DasVar_noIntrShape; pThis->base.expression = DasConstant_expression; pThis->base.lengthIn = DasConstant_lengthIn; @@ -456,7 +622,7 @@ typedef struct das_var_array{ /* Array pointer and index map to support lookup variables */ DasAry* pAry; /* A pointer to the array containing the values */ - int idxmap[16]; /* i,j,k data set space to array space */ + int idxmap[DASIDX_MAX]; /* i,j,k data set space to array space */ } DasVarArray; @@ -523,7 +689,44 @@ int DasVarAry_shape(const DasVar* pBase, ptrdiff_t* pShape) return nRank; } -/* This one is tough what is my shape in a particular index given all +int DasVarAry_intrShape(const DasVar* pBase, ptrdiff_t* pShape) +{ + + assert(pBase->vartype == D2V_ARRAY); + DasVarArray* pThis = (DasVarArray*)pBase; + + for(int i = 0; i < DASIDX_MAX; ++i) pShape[i] = DASIDX_UNUSED; + + ptrdiff_t aShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + int nAryRank = DasAry_shape(pThis->pAry, aShape); + int iAryIdx = -1; + int nIntrRank = 0; + + // Gaps are not allowed after the first internal index, so the first + // unused item we see, stops iteration + int iInternal = 0; + for( + int iVarIdx = pBase->iFirstInternal; + (iVarIdx < DASIDX_MAX) && (pThis->idxmap[iVarIdx] != DASIDX_UNUSED); + ++iVarIdx + ){ + + iAryIdx = pThis->idxmap[iVarIdx]; + if(iAryIdx >= nAryRank){ + das_error(DASERR_VAR, "Invalid index map detected, max array index" + " is %d, lookup index is %d", nAryRank - 1, iAryIdx); + return -1; + } + + /* Any particular array point may be marked as ragged and that's okay */ + pShape[iInternal] = aShape[iAryIdx]; + ++nIntrRank; + ++iInternal; + } + return nIntrRank; +} + +/* This one is tough. What is my shape in a particular index given all * other indexes. This is different from the array version in that * * 1: I might not even depend on the previous indexes @@ -565,10 +768,10 @@ ptrdiff_t DasVarAry_lengthIn(const DasVar* pBase, int nIdx, ptrdiff_t* pLoc) DasVarArray* pThis = (DasVarArray*)pBase; /* Map the location, it should provide a partial map */ - ptrdiff_t aAryLoc[16] = DASIDX_INIT_UNUSED; /* we have to resolve all these - * to a positive number before - * asking the array for its - * size */ + ptrdiff_t aAryLoc[DASIDX_MAX] = DASIDX_INIT_UNUSED; /* we have to resolve all these + * to a positive number before + * asking the array for its + * size */ int i = 0; int nIndexes = 0; for(i = 0; i < nIdx; ++i){ @@ -647,7 +850,7 @@ int dec_DasVarAry(DasVar* pBase){ bool _DasVarAry_canStride( const DasVarArray* pThis, const ptrdiff_t* pMin, const ptrdiff_t* pMax ){ - /* You can't have more than ane increment (of a ragged rage) + /* You can't have more than one increment (of a ragged range) * So say J is ragged, and you only want one I then that's okay. * If you want more than one I then the stride equation no longer * works. @@ -1066,9 +1269,12 @@ DasAry* DasVarAry_subset( * */ -char* DasVarAry_expression( - const DasVar* pBase, char* sBuf, int nLen, unsigned int uFlags +// Combined expression printer for both regular & vector arrays +char* _DasVarAry_intrExpress( + const DasVar* pBase, char* sBuf, int nLen, unsigned int uExFlags, + const char* sFrame, byte* pDirs, byte nDirs ){ + if(nLen < 2) return sBuf; /* No where to write and remain null terminated */ memset(sBuf, 0, nLen); /* Insure null termination whereever I stop writing */ @@ -1081,47 +1287,59 @@ char* DasVarAry_expression( pWrite = sBuf + nWrite; nLen -= nWrite; if(nLen < 2) return pWrite; - - int i, nRank = 0; - for(i = 0; i < pBase->iFirstInternal; i++){ + + int nRank = 0; + for(int i = 0; i < pBase->iFirstInternal; i++){ if(pThis->idxmap[i] != DASIDX_UNUSED) ++nRank; } if(nLen < (nRank*3 + 1)) return pWrite; - for(i = 0; i < pBase->iFirstInternal; i++){ + for(int i = 0; i < pBase->iFirstInternal; i++){ if(pThis->idxmap[i] != DASIDX_UNUSED){ *pWrite = '['; ++pWrite; --nLen; *pWrite = g_sIdxLower[i]; ++pWrite; --nLen; *pWrite = ']'; ++pWrite; --nLen; } } + + // i now holds the first internal dimension char* pSubWrite = pWrite; - if((pBase->units != UNIT_DIMENSIONLESS) && (uFlags & D2V_EXP_UNITS)){ + if((pBase->units != UNIT_DIMENSIONLESS) && (uExFlags & D2V_EXP_UNITS)){ pSubWrite = _DasVar_prnUnits((DasVar*)pThis, pWrite, nLen); nLen -= (pSubWrite - pWrite); pWrite = pSubWrite; } - if(uFlags & D2V_EXP_RANGE){ - pWrite = _DasVar_prnRange(&(pThis->base), pWrite, nLen); + if(uExFlags & D2V_EXP_RANGE){ + pSubWrite = _DasVar_prnRange(&(pThis->base), pWrite, nLen); + nLen -= (pSubWrite - pWrite); + pWrite = pSubWrite; + } + + // Print interval object info if there is any + if((uExFlags & D2V_EXP_INTR) &&(pBase->intrtype != D2V_CT_SCALAR)){ + pWrite = _DasVar_prnIntr(pBase, sFrame, pDirs, nDirs, pWrite, nLen); } return pWrite; } -DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap) +char* DasVarAry_expression( + const DasVar* pBase, char* sBuf, int nLen, unsigned int uFlags +){ + return _DasVarAry_intrExpress(pBase, sBuf, nLen, uFlags, NULL, NULL, 0); +} + +DasErrCode init_DasVarArray(DasVarArray* pThis, DasAry* pAry, int iInternal, int8_t* pMap) { - - if((iInternal == 0)||(iInternal > 15)){ + if((iInternal == 0)||(iInternal > (DASIDX_MAX-1))){ das_error(DASERR_VAR, "Invalid start of internal indices: %d", iInternal); - return NULL; + return false; } - DasVarArray* pThis = (DasVarArray*)calloc(1, sizeof(DasVarArray)); - pThis->base.vartype = D2V_ARRAY; pThis->base.vt = DasAry_valType(pAry); pThis->base.vsize = DasAry_valSize(pAry); @@ -1132,16 +1350,15 @@ DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap) pThis->base.incRef = inc_DasVar; pThis->base.get = DasVarAry_get; pThis->base.shape = DasVarAry_shape; + pThis->base.intrShape = DasVarAry_intrShape; pThis->base.lengthIn = DasVarAry_lengthIn; pThis->base.isFill = DasVarAry_isFill; pThis->base.subset = DasVarAry_subset; /* Extra stuff for array variables */ - if(pAry == NULL){ - das_error(DASERR_VAR, "Null array pointer\n"); - return false; - } + if(pAry == NULL) + return das_error(DASERR_VAR, "Null array pointer\n"); pThis->pAry = pAry; @@ -1155,40 +1372,144 @@ DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap) for(int i = 0; i < DASIDX_MAX; ++i) pThis->idxmap[i] = DASIDX_UNUSED; - for(size_t u = 0; (u < iInternal) && (u < DASIDX_MAX); ++u){ + size_t u; + for(u = 0; u < DASIDX_MAX; ++u){ pThis->idxmap[u] = pMap[u]; /* Make sure that the map has the same number of non empty indexes */ /* as the rank of the array */ if(pMap[u] >= 0){ ++nValid; - if(pMap[u] >= pAry->nRank){ - das_error(DASERR_VAR, "Variable dimension %zu maps to non-existant " - "dimension %zu in array %s", u, pMap[u], - DasAry_toStr(pAry, sBuf, 127)); - free(pThis); - return NULL; - } + if(pMap[u] >= pAry->nRank) + return das_error(DASERR_VAR, + "Variable dimension %zu maps to non-existant dimension %zu in " + "array %s", u, pMap[u], DasAry_toStr(pAry, sBuf, 127) + ); } - + } + + /* get rank of the internal items */ + int nIntrRank = 0; + for(size_t u = iInternal; u < DASIDX_MAX; ++u){ + if(pMap[u] >= 0) + ++nIntrRank; + } + + /* Decide between unknown and string internal item disposition. + More specific internal composition needs to be handled by derived items + */ + if(nIntrRank > 0){ + if(((pAry->uFlags & D2ARY_AS_STRING) == D2ARY_AS_STRING)&&(nIntrRank == 1)) + pThis->base.intrtype = D2V_CT_STRING; + else + pThis->base.intrtype = D2V_CT_UNKNOWN; } - if(nValid == 0){ - das_error(DASERR_VAR, "Coordinate values are independent of dataset " - "indices"); + if(nValid == 0) + return das_error(DASERR_VAR, + "Coordinate values are independent of dataset indices" + ); + + if(nValid != pAry->nRank) + return das_error(DASERR_VAR, + "Variable index map does not have the same number of valid indices " + "as the array dimension. While partial array mapping may be useful, " + "it's not supported for now." + ); + + + inc_DasAry(pAry); /* Increment the reference count for this array */ + return DAS_OKAY; +} + +DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap) +{ + /* DasVarArray does not point outside of it's stack */ + DasVarArray* pThis = (DasVarArray*)calloc(1, sizeof(DasVarArray)); + + if(init_DasVarArray(pThis, pAry, iInternal, pMap) != DAS_OKAY){ + /* Don't decrement the array ownership on failure because it wasn't + incremented, free */ free(pThis); return NULL; } - if(nValid != pAry->nRank){ - das_error(DASERR_VAR, "Variable index map does not have the same number " - "of valid indices as the array dimension. While partial array " - "mapping may be useful, it's not supported for now."); + return (DasVar*)pThis; +} + +/* ************************************************************************* */ +/* A specific array var, internal structure is a cartesian vector */ + +typedef struct das_var_vecary{ + DasVarArray base; + + char sFrame[DASFRM_NAME_SZ]; // vector frame name + byte uFrameFlag; // Assume cartesian for now + + byte aDirs[D2V_MAX_VEC_LEN]; // vector frame directions, if empty assume + byte nDirs; + +} DasVarVecAry; + +char* DasVarVecAry_expression( + const DasVar* pBase, char* sBuf, int nLen, unsigned int uFlags +){ + DasVarVecAry* pThis = (DasVarVecAry*)pBase; + + return _DasVarAry_intrExpress( + pBase, sBuf, nLen, uFlags, pThis->sFrame, pThis->aDirs, pThis->nDirs + ); +} + +DasVar* new_DasVarVecAry( + DasAry* pAry, int8_t* pMap, const char* sFrame, byte* pDirs, byte nDirs +){ + + if((sFrame == NULL)||(sFrame[0] == '\0')){ + das_error(DASERR_VAR, "Vectors cannot have an empty frame name"); + return NULL; + } + /* For vectors, I internal is always the last item */ + int iFirstInternal = 0; + for(int iIdx = 0; iIdx < DASIDX_MAX; ++iIdx){ + if(pMap[iIdx] >= 0) /* unused indexes are less then 0 */ + ++iFirstInternal; + } + + /* If my first internal *is* my first item, is than an error ??? + * + * Variables with only internal shape *would* be handy for point spread + * functions and the like + */ + if(iFirstInternal == 0){ + das_error(DASERR_VAR, + "For now DasVar can't only have internal indicies. Maybe this " + "should change." + ); + return NULL; + } + + // Handle the base class + DasVarVecAry* pThis = (DasVarVecAry*) calloc(1, sizeof(DasVarVecAry)); + + if(init_DasVarArray((DasVarArray*) pThis, pAry, iFirstInternal, pMap) != DAS_OKAY){ + /* Don't decrement the array ownership on failure because it wasn't + incremented, free */ free(pThis); return NULL; } - - inc_DasAry(pAry); /* Increment the reference count for this array */ - return &(pThis->base); + + // Add in our changes + pThis->base.base.expression = DasVarVecAry_expression; + pThis->base.base.intrtype = D2V_CT_VECTOR; + + strncpy(pThis->sFrame, sFrame, DASFRM_NAME_SZ-1); + if((pDirs != NULL)&&(nDirs > 0)){ + for(int i = 0; (i < D2V_MAX_VEC_LEN)&&(i < nDirs); ++i){ + pThis->aDirs[i] = pDirs[i]; + } + } + + return (DasVar*) pThis; } /* ************************************************************************* */ @@ -1628,6 +1949,7 @@ DasVar* new_DasVarSeq( pThis->base.incRef = inc_DasVar; pThis->base.get = DasVarSeq_get; pThis->base.shape = DasVarSeq_shape; + pThis->base.intrShape = _DasVar_noIntrShape; pThis->base.lengthIn = DasVarSeq_lengthIn; pThis->base.isFill = DasVarSeq_isFill; pThis->base.subset = DasVarSeq_subset; @@ -2221,6 +2543,7 @@ DasVar* new_DasVarBinary_tok( pThis->base.id = DasVarBinary_id; pThis->base.shape = DasVarBinary_shape; + pThis->base.intrShape = _DasVar_noIntrShape; pThis->base.expression = DasVarBinary_expression; pThis->base.lengthIn = DasVarBinary_lengthIn; pThis->base.get = DasVarBinary_get; @@ -2312,12 +2635,11 @@ DasVar* new_DasVarBinary( { int nOp = das_op_binary(sOp); if(nOp == 0) return NULL; - return new_DasVarBinary_tok(sId, pLeft, nOp, pRight); -} - - - - - + if((pLeft->intrtype != D2V_CT_SCALAR)&&(pRight->intrtype != D2V_CT_SCALAR)){ + das_error(DASERR_VAR, "Vector & Matrix operations not yet implemented"); + return NULL; + } + return new_DasVarBinary_tok(sId, pLeft, nOp, pRight); +} diff --git a/das2/variable.h b/das2/variable.h index 4211f8d..d033ba6 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -33,6 +33,9 @@ extern "C" { * @{ */ +/* Current max length of a vector (internal index) can be changed */ +#define D2V_MAX_VEC_LEN 4 + enum var_type { D2V_DATUM, D2V_SEQUENCE, D2V_ARRAY, D2V_UNARY_OP, D2V_BINARY_OP }; @@ -65,7 +68,16 @@ DAS_API ptrdiff_t das_varlength_merge(ptrdiff_t nLeft, ptrdiff_t nRight); #define D2V_EXP_UNITS 0x02 #define D2V_EXP_RANGE 0x04 #define D2V_EXP_SUBEX 0x08 +#define D2V_EXP_INTR 0x10 +/** Enumeration of internal shape purposes. In the case below, vectors + * are simple cartesian vectors. Polar, cylindrical, dipole, etc. vectors + * are not considered + */ +typedef enum component_e { + D2V_CT_SCALAR=0, D2V_CT_STRING=1, D2V_CT_VECTOR=2, D2V_CT_MATRIX=3, + D2V_CT_UNKNOWN=9 +} component_t; /** Set index printing direction. * @@ -107,8 +119,8 @@ DAS_API void das_varindex_prndir(bool bFastLast); * this: * * @code - * DasVar* vTime = new_DasVarArry(time, MAP_2(0,DEGEN)); - * DasVar* vFrequency = new_DasVarArray(frequency, MAP_2(DEGEN, 0)); + * DasVar* vTime = new_DasVarArry(time, MAP_2(0,DASIDX_UNUSED)); + * DasVar* vFrequency = new_DasVarArray(frequency, MAP_2(DASIDX_UNUSED, 0)); * DasVar* vEnergy = new_DasVarArray(energy, MAP_2(0, 1)); * * // A correlated set is now: @@ -216,39 +228,53 @@ DAS_API void das_varindex_prndir(bool bFastLast); */ typedef struct das_variable{ enum var_type vartype; /* CONST, ARRAY, SEQUENCE, UNARY_OP, BINARY_OP ... */ - das_val_type vt; /* vtByte, vtText, vtTime ... */ - size_t vsize; /* The size in bytes of each value in the variable - * for strings this yields the unusual value of - * sizeof(void*) */ - - /* The units of this variable, since it is possible to create variables - * in all kinds of ways (not just backing arrays) we have to have our - * own units storage location. Transforming backing arrays such that they - * are no longer in the units they had when the variable was created will - * NOT automatically update this variable. */ - das_units units; + das_val_type vt; /* vtByte, vtText, vtTime ... */ + size_t vsize; /* The size in bytes of each value in the variable + * for strings this yields the unusual value of + * sizeof(void*) */ - /* Reference count on this variable. Needed to make sure it's not - * deleted out from under us. */ - int nRef; - - /* Position of the first internal index. Any array indices after - * this point will be considered to be internal indices and will not - * be reported in the shape function */ - int iFirstInternal; + /* Since it is possible to create variables in all kinds of ways (not just + * backing arrays) we have to have our own units storage location. + * Transforming backing arrays such that they are no longer in the units + * they had when the variable was created will NOT automatically update this + * variable. + */ + das_units units; + + /* Reference count on this variable. Needed to make sure it's not + * deleted out from under us. */ + int nRef; + + /* Position of the first internal index. Any array indices after + * this point will be considered to be internal indices and will not + * be reported in the shape function */ + int iFirstInternal; + + /* Internal Rank of each item, set automatically by array inspection */ + /* int nIntrRank;*/ + + /* The purpose of internal dimensions, if any */ + component_t intrtype; /* Get identifier for this variable, may be NULL for anoymous vars */ const char* (*id)(const struct das_variable* pThis); - /* Get the external shape of this variable */ + /* Get full shape of this variable */ int (*shape)(const struct das_variable* pThis, ptrdiff_t* pShape); + + /* Get the internal shape of this variable. + * + * Combine this with DasVar_intrType to get the purpose of the internal + * indicies. + */ + int (*intrShape)(const struct das_variable* pThis, ptrdiff_t* pComp); /* Write an expression (i.e. a representation) of this variable to a * buffer. - * - * - * @param uFlags - D2V_EXP_UNITS include units in the expression + * + * @param uFlags - D2V_EXP_UNITS include units in the expression * D2V_EXP_RANGE include the range in the expression + * D2V_EXP_INTER include internal component information * * @returns The write point to add more text to the buffer */ @@ -271,7 +297,7 @@ typedef struct das_variable{ /* Does this variable provide simple numbers */ bool (*isNumeric)(const struct das_variable* pThis); - + DasAry* (*subset)( const struct das_variable* pThis, int nRank, const ptrdiff_t* pMin, const ptrdiff_t* pMax @@ -296,7 +322,7 @@ typedef struct das_variable{ * by element basis, for example "Var1**-2", or "- Var1". For efficency, * simple powers are combined into the operator. * - * The new variable dose not allocate any storage, Getting elements from this + * The new variable does not allocate any storage, Getting elements from this * variable will result in a sub-variable lookup and a calculation based on * the given operator. * @@ -307,6 +333,7 @@ typedef struct das_variable{ * @param sOp a string of lowercase letters or numbers describing the operation * to apply. The following strings are understood: "-", "**2", "**3" * "**-2", "**-3", "ln", "log", "sqrt", "curt", "sin", "cos", "tan" + * For vectors the operation: "norm" is understood * * @param pVar The variable to modify * @@ -356,7 +383,8 @@ DAS_API DasVar* new_DasVarUnary_tok(int nOpTok, const DasVar* pVar); * @param pLeft the left index variable for the binary operation * * @param sOp the operation to preform, The following strings are understood - * "+","-","/","*","pow" + * "+","-","/","*","pow","dot","cross" + * The last two operations only work if the two variables are a vector. * * @param pRight the indexed variable in the binary operation * @@ -454,7 +482,7 @@ DAS_API DasVar* new_DasVarSeq( * internal items and will be accessed as a group. * * Having an array with an unmapped extra index is very useful - * for dealing with string data. + * for dealing with string data * * @param pMap The mapping from dataset index positions to array index positions * Any element in the map may be DASIDX_UNUSED to indicate that a @@ -467,6 +495,52 @@ DAS_API DasVar* new_DasVarSeq( */ DAS_API DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap); + +/** Create a vector backed by an array + * + * This variable must have one and only one internal index, and that index + * must be fixed. These conditions allow the variable to be a vector. This + * may be a the components of a geometric vector, or it could be a vector of + * coefficents from a mathematical operation, etc. + * + * Vectors can be operated on using the scalar binary operations: + * + * "+","-","/","*","pow" + * + * but be aware that these operate in a component wise manner. So: + * @code + * vA = new_DasVecArray(...); + * vB = new_DasVecArray(...); + * vC = new_DasVarBinary(NULl, vA, "+", vB); + * @endcode + * + * will produce a vector where each value is vC[index] = vA[index] * vB[index] + * + * Vector binary operations include: + * + * "cross", "dot" + * + * which only work if two vectors have the same frame. + * + * @param pAry The array which contains data values + * + * @param pMap The mappind from dataset index positions to array index positions. + * The last index of the map is automatically taken to be the vector + * index and must be of fixed positive length greater then 0. + * + * @param sFrame A named coordinate frame for the vector. If two vectors have + * different coordinate frames, they cannot be the subject of + * binary operations. Cannot be NULL. + * + * @param pDir A mapping between coordinate directions and the components + * of each vector, may be NULL. + * + * @param nDirs The number of directions in the vector direction map, can be 0 + */ +DAS_API DasVar* new_DasVarVecAry( + DasAry* pAry, int8_t* pMap, const char* sFrame, byte* pDir, byte nDirs +); + /** Increment the reference count on a variable */ DAS_API int inc_DasVar(DasVar* pThis); @@ -498,7 +572,11 @@ das_val_type DasVar_valType(const DasVar* pThis); /** Get the size in bytes of each value */ size_t DasVar_valSize(const DasVar* pThis); -/** Get the units for the values */ +/** Get the units for the values. + * + * @warning For some vectors, only the magnitude has these units. + * To determine if this is the case use + * */ das_units DasVar_units(const DasVar* pThis); @@ -558,6 +636,38 @@ DAS_API bool DasVar_orthoginal(const DasVar* pThis, const DasVar* pOther); */ DAS_API int DasVar_shape(const DasVar* pThis, ptrdiff_t* pShape); +/** Return the internal composition of this variable + * + * Variables may contain scalars, or they may contain items with internal + * structure. For example an array strings has an internal index on the + * byte number, geometric vectors have an internal index that represents + * the component in each direction. + * + * @param pThis The variable for which the shape is desired + * + * @param pShape a pointer to an array of size DASIDX_MAX - 1. Each element + * of the array will be filled in with either one of the following + * + * * An integer from 0 to LONG_MAX to indicate the valid index range. + * for a typicall geometric vector, this will be the number 3 + * + * * The value D2IDX_RAGGED to indicate that the valid index is variable + * and depends on the values of the external indicies. This is + * common for string data. + * + * @returns The rank of the interal components. In the case of scalars this + * will be 0, and pShape is not touched. + * + * @memberof DasVar + */ +DAS_API int DasVar_intrShape(const DasVar* pThis, ptrdiff_t* pShape); + +/** Get the internal type of a variable. + * + * @returns the internal type, which is D2V_CT_SCALAR (0) for scalars + */ +DAS_API component_t DasVar_intrType(const DasVar* pThis); + /** Return the current max value index value + 1 for any partial index * * This is a more general version of DasVar_shape that works for both cubic diff --git a/das2/variable.md b/das2/variable.md index f71c468..1878129 100644 --- a/das2/variable.md +++ b/das2/variable.md @@ -10,7 +10,7 @@ strided indexing applies. Since strided arrays are common, the `DasVar_subset()` function switches over to strided copies when the extraction region satisfies the strided condition. This allows for copy out in a loop that skips the slow top-down access function -`DasAry_getAt()`. In addition, of the requested subsection is actually a +`DasAry_getAt()`. In addition, if the requested subsection is actually a continous range of memory with no repeats, then a simple memcpy() is used to speed up the process further. diff --git a/test/TestV3Read.c b/test/TestV3Read.c index 6a1be33..bdf17a0 100644 --- a/test/TestV3Read.c +++ b/test/TestV3Read.c @@ -20,8 +20,8 @@ StreamDesc* g_pSdOut = NULL; -/* const char* g_sTestFile1 = "./test/ex12_sounder_xyz.d3t"; */ -const char* g_sTestFile1 = "./test/tag_test.dNt"; +const char* g_sTestFile1 = "./test/ex12_sounder_xyz.d3t"; +/* const char* g_sTestFile1 = "./test/tag_test.dNt"; */ int main(int argc, char** argv) { diff --git a/test/TestVariable.c b/test/TestVariable.c index 7645643..8dd843d 100644 --- a/test/TestVariable.c +++ b/test/TestVariable.c @@ -6146,6 +6146,10 @@ int main(int argc, char** argv) if(aSlice == NULL) return 7; /* Should work, array is first axis, sequence * is last, and no one cares about the middle */ dec_DasAry(aSlice); aSlice = NULL; + + + /* Test vector variables */ + printf("\nGood! All errors found and no false positives.\n"); diff --git a/test/ex15_vector_frame.d3b b/test/ex15_vector_frame.d3b new file mode 100644 index 0000000..22cf355 --- /dev/null +++ b/test/ex15_vector_frame.d3b @@ -0,0 +1,42 @@ +|Sx||597| + + +

EFI

+

Space Physics>Magnetospheric Science

+

The University of Iowa

+

TRACERS

+

fm2

+

FM-2

+

EFI FM2 - Level 1

+
+ + +

Tracers Spocecraft Coordinate Frame

+
+ + + + + +|Hx|80|830| + + +

Fluxgate Magnetic Field 3-Vectors sampled at 128 Hz

+

Magnetic Field, 128 Hz

+
+ + +

UTC

+ + + +
+ +

EFI SCI @ 128 Hz

+ + + + + +
+
diff --git a/test/ex16_mag_grid_doc.d3x b/test/ex16_mag_grid_doc.d3x new file mode 100644 index 0000000..c441942 --- /dev/null +++ b/test/ex16_mag_grid_doc.d3x @@ -0,0 +1,168 @@ + + + +

4x VMR Stream @ 400 Hz

+

+ In this dataset, 4 twinleaf VMRs are laid out in 1m x 1m grid that is + offset 1 m from the coordinate system origin. All sensors are synced + to an external trigger and thus record at the same time. The sensors + are not facing the same way, so the raw data had to be rotated into the + common room frame, which is the main (i.e. first) dataset. +

+
+ + + +

Room 601 Coordinates

+

+ For the 601 lab, Z is taken to be up, +X is towards the east wall and + +Y is towards the north wall. Zero is at the inner southwest corner. +

+
+ + + + + +

Intrinsic VMR sensor coords

+

+ These are the generic VMR sensor coordinates inside each sensor. The + rotation between this and the lab coordinates is a function of the + location index (2nd array shape parameter) +

+
+ + + + + + + + + + + + + + + + + 1;1;2;1;1;2;2;2 + + + + + +

Rotated and scaled data from the 4 sensors

+

Bx_cal;By_cal;Bz_cal

+
+ + + + + +
+ + + + +

Raw Measurements from the 4 sensors

+

Bx_raw;By_raw;Bz_raw

+

+ VMR0 R12 N261;VMR1 R12 N261;VMR2 R12 N261;VMR3 R12 N26 +

+
+ + + + + +
+
+1657223019.5375;4.953124E+04;-1.120886E+05;-3.530095E+04;-2.533876E+04;-5.227198E+04;-1.212970E+05;1.480172E+03;4.620956E+04;1.475458E+04;1.433644E+04;-5.087511E+04;6.930183E+03;-1.120886E+05;-3.530095E+04;-2.533876E+04;-5.227198E+04;-1.212970E+05;1.480172E+03;4.620956E+04;1.475458E+04;1.433644E+04;-5.087511E+04;6.930183E+03 +1657223019.5400;4.954014E+04;-1.120865E+05;-3.529543E+04;-2.534174E+04;-5.227079E+04;-1.212828E+05;1.470473E+03;4.620215E+04;1.475737E+04;1.434963E+04;-5.088306E+04;6.943523E+03;4.954014E+04;-1.120865E+05;-3.529543E+04;-2.534174E+04;-5.227079E+04;-1.212828E+05;1.470473E+03;4.620215E+04;1.475737E+04;1.434963E+04;-5.088306E+04;6.943523E+03 +1657223019.5425;4.953842E+04;-1.121039E+05;-3.529789E+04;-2.533422E+04;-5.229595E+04;-1.212895E+05;1.478799E+03;4.618652E+04;1.477262E+04;1.434640E+04;-5.089331E+04;6.933145E+03;4.953842E+04;-1.121039E+05;-3.529789E+04;-2.533422E+04;-5.229595E+04;-1.212895E+05;1.478799E+03;4.618652E+04;1.477262E+04;1.434640E+04;-5.089331E+04;6.933145E+03 +1657223019.5450;4.953184E+04;-1.121189E+05;-3.529036E+04;-2.534171E+04;-5.230769E+04;-1.213002E+05;1.482242E+03;4.618036E+04;1.475938E+04;1.433949E+04;-5.090488E+04;6.940134E+03;4.953184E+04;-1.121189E+05;-3.529036E+04;-2.534171E+04;-5.230769E+04;-1.213002E+05;1.482242E+03;4.618036E+04;1.475938E+04;1.433949E+04;-5.090488E+04;6.940134E+03 +1657223019.5475;4.952013E+04;-1.121244E+05;-3.529825E+04;-2.533525E+04;-5.230971E+04;-1.213184E+05;1.486034E+03;4.618797E+04;1.475231E+04;1.433455E+04;-5.090383E+04;6.935027E+03;4.952013E+04;-1.121244E+05;-3.529825E+04;-2.533525E+04;-5.230971E+04;-1.213184E+05;1.486034E+03;4.618797E+04;1.475231E+04;1.433455E+04;-5.090383E+04;6.935027E+03 +1657223019.5500;4.952340E+04;-1.121107E+05;-3.529482E+04;-2.534170E+04;-5.229790E+04;-1.213153E+05;1.487067E+03;4.620133E+04;1.474229E+04;1.433082E+04;-5.089130E+04;6.943555E+03;4.952340E+04;-1.121107E+05;-3.529482E+04;-2.534170E+04;-5.229790E+04;-1.213153E+05;1.487067E+03;4.620133E+04;1.474229E+04;1.433082E+04;-5.089130E+04;6.943555E+03 +1657223019.5525;4.952649E+04;-1.120981E+05;-3.528655E+04;-2.534243E+04;-5.228007E+04;-1.213093E+05;1.482786E+03;4.620632E+04;1.474392E+04;1.433243E+04;-5.087990E+04;6.937960E+03;4.952649E+04;-1.120981E+05;-3.528655E+04;-2.534243E+04;-5.228007E+04;-1.213093E+05;1.482786E+03;4.620632E+04;1.474392E+04;1.433243E+04;-5.087990E+04;6.937960E+03 +1657223019.5550;4.953808E+04;-1.120917E+05;-3.529111E+04;-2.534052E+04;-5.227200E+04;-1.212945E+05;1.478129E+03;4.620560E+04;1.475495E+04;1.434307E+04;-5.087852E+04;6.938169E+03;4.953808E+04;-1.120917E+05;-3.529111E+04;-2.534052E+04;-5.227200E+04;-1.212945E+05;1.478129E+03;4.620560E+04;1.475495E+04;1.434307E+04;-5.087852E+04;6.938169E+03 +1657223019.5575;4.952921E+04;-1.120998E+05;-3.529430E+04;-2.534020E+04;-5.228152E+04;-1.212770E+05;1.473958E+03;4.620066E+04;1.475964E+04;1.434952E+04;-5.087946E+04;6.937100E+03;4.952921E+04;-1.120998E+05;-3.529430E+04;-2.534020E+04;-5.228152E+04;-1.212770E+05;1.473958E+03;4.620066E+04;1.475964E+04;1.434952E+04;-5.087946E+04;6.937100E+03 +1657223019.5600;4.953392E+04;-1.121123E+05;-3.530050E+04;-2.533150E+04;-5.229636E+04;-1.212925E+05;1.479795E+03;4.618524E+04;1.476930E+04;1.435117E+04;-5.089362E+04;6.931910E+03;4.953392E+04;-1.121123E+05;-3.530050E+04;-2.533150E+04;-5.229636E+04;-1.212925E+05;1.479795E+03;4.618524E+04;1.476930E+04;1.435117E+04;-5.089362E+04;6.931910E+03 +1657223019.5625;4.952846E+04;-1.121188E+05;-3.529318E+04;-2.533808E+04;-5.230798E+04;-1.213075E+05;1.476930E+03;4.617845E+04;1.475868E+04;1.433805E+04;-5.090074E+04;6.941230E+03;4.952846E+04;-1.121188E+05;-3.529318E+04;-2.533808E+04;-5.230798E+04;-1.213075E+05;1.476930E+03;4.617845E+04;1.475868E+04;1.433805E+04;-5.090074E+04;6.941230E+03 +1657223019.5650;4.952144E+04;-1.121213E+05;-3.528923E+04;-2.533515E+04;-5.230616E+04;-1.213276E+05;1.493560E+03;4.618093E+04;1.475726E+04;1.433130E+04;-5.089781E+04;6.934936E+03;4.952144E+04;-1.121213E+05;-3.528923E+04;-2.533515E+04;-5.230616E+04;-1.213276E+05;1.493560E+03;4.618093E+04;1.475726E+04;1.433130E+04;-5.089781E+04;6.934936E+03 +1657223019.5675;4.952358E+04;-1.121037E+05;-3.529142E+04;-2.534937E+04;-5.229615E+04;-1.213185E+05;1.478121E+03;4.619760E+04;1.474629E+04;1.433243E+04;-5.089090E+04;6.942983E+03;4.952358E+04;-1.121037E+05;-3.529142E+04;-2.534937E+04;-5.229615E+04;-1.213185E+05;1.478121E+03;4.619760E+04;1.474629E+04;1.433243E+04;-5.089090E+04;6.942983E+03 +1657223019.5700;4.952463E+04;-1.120934E+05;-3.529503E+04;-2.534327E+04;-5.228288E+04;-1.213080E+05;1.485818E+03;4.620969E+04;1.474771E+04;1.433272E+04;-5.088444E+04;6.936185E+03;4.952463E+04;-1.120934E+05;-3.529503E+04;-2.534327E+04;-5.228288E+04;-1.213080E+05;1.485818E+03;4.620969E+04;1.474771E+04;1.433272E+04;-5.088444E+04;6.936185E+03 +1657223019.5725;4.953247E+04;-1.120878E+05;-3.529019E+04;-2.534428E+04;-5.227685E+04;-1.212840E+05;1.477907E+03;4.620839E+04;1.475710E+04;1.433798E+04;-5.087802E+04;6.935973E+03;4.953247E+04;-1.120878E+05;-3.529019E+04;-2.534428E+04;-5.227685E+04;-1.212840E+05;1.477907E+03;4.620839E+04;1.475710E+04;1.433798E+04;-5.087802E+04;6.935973E+03 +1657223019.5750;4.953881E+04;-1.120962E+05;-3.529813E+04;-2.534229E+04;-5.227962E+04;-1.212866E+05;1.481280E+03;4.619955E+04;1.476187E+04;1.434723E+04;-5.088570E+04;6.932828E+03;4.953881E+04;-1.120962E+05;-3.529813E+04;-2.534229E+04;-5.227962E+04;-1.212866E+05;1.481280E+03;4.619955E+04;1.476187E+04;1.434723E+04;-5.088570E+04;6.932828E+03 +1657223019.5775;4.954246E+04;-1.121191E+05;-3.529658E+04;-2.534454E+04;-5.230450E+04;-1.212981E+05;1.481401E+03;4.618898E+04;1.475961E+04;1.434859E+04;-5.090607E+04;6.938738E+03;4.954246E+04;-1.121191E+05;-3.529658E+04;-2.534454E+04;-5.230450E+04;-1.212981E+05;1.481401E+03;4.618898E+04;1.475961E+04;1.434859E+04;-5.090607E+04;6.938738E+03 +1657223019.5800;4.953792E+04;-1.121250E+05;-3.528808E+04;-2.534624E+04;-5.230579E+04;-1.213105E+05;1.480174E+03;4.618574E+04;1.475433E+04;1.434441E+04;-5.090871E+04;6.941939E+03;4.953792E+04;-1.121250E+05;-3.528808E+04;-2.534624E+04;-5.230579E+04;-1.213105E+05;1.480174E+03;4.618574E+04;1.475433E+04;1.434441E+04;-5.090871E+04;6.941939E+03 +1657223019.5825;4.953050E+04;-1.121087E+05;-3.529086E+04;-2.534293E+04;-5.230770E+04;-1.213245E+05;1.501673E+03;4.619761E+04;1.475129E+04;1.433219E+04;-5.089890E+04;6.932495E+03;4.953050E+04;-1.121087E+05;-3.529086E+04;-2.534293E+04;-5.230770E+04;-1.213245E+05;1.501673E+03;4.619761E+04;1.475129E+04;1.433219E+04;-5.089890E+04;6.932495E+03 +1657223019.5850;4.953725E+04;-1.120976E+05;-3.529018E+04;-2.533800E+04;-5.228902E+04;-1.213095E+05;1.488785E+03;4.621006E+04;1.473754E+04;1.433106E+04;-5.088552E+04;6.934317E+03;4.953725E+04;-1.120976E+05;-3.529018E+04;-2.533800E+04;-5.228902E+04;-1.213095E+05;1.488785E+03;4.621006E+04;1.473754E+04;1.433106E+04;-5.088552E+04;6.934317E+03 +1657223019.5875;4.952423E+04;-1.120940E+05;-3.529510E+04;-2.532763E+04;-5.227668E+04;-1.212980E+05;1.485574E+03;4.621457E+04;1.475005E+04;1.433520E+04;-5.087593E+04;6.932246E+03;4.952423E+04;-1.120940E+05;-3.529510E+04;-2.532763E+04;-5.227668E+04;-1.212980E+05;1.485574E+03;4.621457E+04;1.475005E+04;1.433520E+04;-5.087593E+04;6.932246E+03 +1657223019.5900;4.954510E+04;-1.120921E+05;-3.529512E+04;-2.534288E+04;-5.227003E+04;-1.212835E+05;1.474737E+03;4.621005E+04;1.475201E+04;1.434313E+04;-5.087791E+04;6.938495E+03;4.954510E+04;-1.120921E+05;-3.529512E+04;-2.534288E+04;-5.227003E+04;-1.212835E+05;1.474737E+03;4.621005E+04;1.475201E+04;1.434313E+04;-5.087791E+04;6.938495E+03 +1657223019.5925;4.953461E+04;-1.121023E+05;-3.529417E+04;-2.533920E+04;-5.228970E+04;-1.212840E+05;1.478378E+03;4.619278E+04;1.476511E+04;1.434689E+04;-5.088658E+04;6.935640E+03;4.953461E+04;-1.121023E+05;-3.529417E+04;-2.533920E+04;-5.228970E+04;-1.212840E+05;1.478378E+03;4.619278E+04;1.476511E+04;1.434689E+04;-5.088658E+04;6.935640E+03 +1657223019.5950;4.953463E+04;-1.121166E+05;-3.529061E+04;-2.534206E+04;-5.230721E+04;-1.213078E+05;1.475463E+03;4.618497E+04;1.475858E+04;1.433935E+04;-5.090337E+04;6.935788E+03;4.953463E+04;-1.121166E+05;-3.529061E+04;-2.534206E+04;-5.230721E+04;-1.213078E+05;1.475463E+03;4.618497E+04;1.475858E+04;1.433935E+04;-5.090337E+04;6.935788E+03 +1657223019.5975;4.953159E+04;-1.121216E+05;-3.528413E+04;-2.533879E+04;-5.231574E+04;-1.213222E+05;1.481314E+03;4.618057E+04;1.475161E+04;1.433486E+04;-5.090030E+04;6.924989E+03;4.953159E+04;-1.121216E+05;-3.528413E+04;-2.533879E+04;-5.231574E+04;-1.213222E+05;1.481314E+03;4.618057E+04;1.475161E+04;1.433486E+04;-5.090030E+04;6.924989E+03 +1657223019.6000;4.952566E+04;-1.121078E+05;-3.528655E+04;-2.534294E+04;-5.230177E+04;-1.213211E+05;1.477987E+03;4.619104E+04;1.475381E+04;1.432405E+04;-5.089429E+04;6.933330E+03;4.952566E+04;-1.121078E+05;-3.528655E+04;-2.534294E+04;-5.230177E+04;-1.213211E+05;1.477987E+03;4.619104E+04;1.475381E+04;1.432405E+04;-5.089429E+04;6.933330E+03 +1657223019.6025;4.953234E+04;-1.120959E+05;-3.529140E+04;-2.534552E+04;-5.228654E+04;-1.213046E+05;1.490306E+03;4.620421E+04;1.474541E+04;1.432670E+04;-5.087893E+04;6.938976E+03;4.953234E+04;-1.120959E+05;-3.529140E+04;-2.534552E+04;-5.228654E+04;-1.213046E+05;1.490306E+03;4.620421E+04;1.474541E+04;1.432670E+04;-5.087893E+04;6.938976E+03 +1657223019.6050;4.953041E+04;-1.120841E+05;-3.528695E+04;-2.534326E+04;-5.227320E+04;-1.212940E+05;1.476783E+03;4.620692E+04;1.474603E+04;1.433833E+04;-5.087160E+04;6.936640E+03;4.953041E+04;-1.120841E+05;-3.528695E+04;-2.534326E+04;-5.227320E+04;-1.212940E+05;1.476783E+03;4.620692E+04;1.474603E+04;1.433833E+04;-5.087160E+04;6.936640E+03 +1657223019.6075;4.953142E+04;-1.120977E+05;-3.529422E+04;-2.534954E+04;-5.227729E+04;-1.212844E+05;1.475380E+03;4.619693E+04;1.475289E+04;1.434644E+04;-5.088146E+04;6.942724E+03;4.953142E+04;-1.120977E+05;-3.529422E+04;-2.534954E+04;-5.227729E+04;-1.212844E+05;1.475380E+03;4.619693E+04;1.475289E+04;1.434644E+04;-5.088146E+04;6.942724E+03 +1657223019.6100;4.953349E+04;-1.121162E+05;-3.529570E+04;-2.534018E+04;-5.229246E+04;-1.212940E+05;1.484092E+03;4.619089E+04;1.476501E+04;1.434025E+04;-5.089536E+04;6.937893E+03;4.953349E+04;-1.121162E+05;-3.529570E+04;-2.534018E+04;-5.229246E+04;-1.212940E+05;1.484092E+03;4.619089E+04;1.476501E+04;1.434025E+04;-5.089536E+04;6.937893E+03 +1657223019.6125;4.952823E+04;-1.121216E+05;-3.529218E+04;-2.534114E+04;-5.230660E+04;-1.213090E+05;1.477799E+03;4.618151E+04;1.475830E+04;1.433639E+04;-5.091060E+04;6.942857E+03;4.952823E+04;-1.121216E+05;-3.529218E+04;-2.534114E+04;-5.230660E+04;-1.213090E+05;1.477799E+03;4.618151E+04;1.475830E+04;1.433639E+04;-5.091060E+04;6.942857E+03 +1657223019.6150;4.952483E+04;-1.121226E+05;-3.529270E+04;-2.533605E+04;-5.231204E+04;-1.213138E+05;1.482654E+03;4.618600E+04;1.475979E+04;1.432925E+04;-5.090217E+04;6.936130E+03;4.952483E+04;-1.121226E+05;-3.529270E+04;-2.533605E+04;-5.231204E+04;-1.213138E+05;1.482654E+03;4.618600E+04;1.475979E+04;1.432925E+04;-5.090217E+04;6.936130E+03 +1657223019.6175;4.953026E+04;-1.121075E+05;-3.529139E+04;-2.534529E+04;-5.229054E+04;-1.213180E+05;1.493603E+03;4.619473E+04;1.475217E+04;1.432453E+04;-5.089392E+04;6.935038E+03;4.953026E+04;-1.121075E+05;-3.529139E+04;-2.534529E+04;-5.229054E+04;-1.213180E+05;1.493603E+03;4.619473E+04;1.475217E+04;1.432453E+04;-5.089392E+04;6.935038E+03 +1657223019.6200;4.952571E+04;-1.120850E+05;-3.530064E+04;-2.533220E+04;-5.227839E+04;-1.213068E+05;1.486270E+03;4.620414E+04;1.475171E+04;1.432691E+04;-5.088057E+04;6.936800E+03;4.952571E+04;-1.120850E+05;-3.530064E+04;-2.533220E+04;-5.227839E+04;-1.213068E+05;1.486270E+03;4.620414E+04;1.475171E+04;1.432691E+04;-5.088057E+04;6.936800E+03 +1657223019.6225;4.953693E+04;-1.120875E+05;-3.529503E+04;-2.533802E+04;-5.227364E+04;-1.212849E+05;1.477501E+03;4.620320E+04;1.475548E+04;1.434342E+04;-5.087849E+04;6.941193E+03;4.953693E+04;-1.120875E+05;-3.529503E+04;-2.533802E+04;-5.227364E+04;-1.212849E+05;1.477501E+03;4.620320E+04;1.475548E+04;1.434342E+04;-5.087849E+04;6.941193E+03 +1657223019.6250;4.953768E+04;-1.120968E+05;-3.529581E+04;-2.534330E+04;-5.228641E+04;-1.212874E+05;1.474651E+03;4.619577E+04;1.475772E+04;1.435758E+04;-5.088289E+04;6.938144E+03;4.953768E+04;-1.120968E+05;-3.529581E+04;-2.534330E+04;-5.228641E+04;-1.212874E+05;1.474651E+03;4.619577E+04;1.475772E+04;1.435758E+04;-5.088289E+04;6.938144E+03 +1657223019.6275;4.953678E+04;-1.121210E+05;-3.529334E+04;-2.533828E+04;-5.230514E+04;-1.212992E+05;1.477709E+03;4.618675E+04;1.475779E+04;1.434580E+04;-5.089479E+04;6.939671E+03;4.953678E+04;-1.121210E+05;-3.529334E+04;-2.533828E+04;-5.230514E+04;-1.212992E+05;1.477709E+03;4.618675E+04;1.475779E+04;1.434580E+04;-5.089479E+04;6.939671E+03 +1657223019.6300;4.953252E+04;-1.121289E+05;-3.529361E+04;-2.534135E+04;-5.230809E+04;-1.213169E+05;1.480601E+03;4.618280E+04;1.476116E+04;1.433032E+04;-5.090057E+04;6.934931E+03;4.953252E+04;-1.121289E+05;-3.529361E+04;-2.534135E+04;-5.230809E+04;-1.213169E+05;1.480601E+03;4.618280E+04;1.476116E+04;1.433032E+04;-5.090057E+04;6.934931E+03 +1657223019.6325;4.952777E+04;-1.121185E+05;-3.529864E+04;-2.533721E+04;-5.230835E+04;-1.213234E+05;1.490774E+03;4.618468E+04;1.475399E+04;1.432706E+04;-5.090355E+04;6.935272E+03;4.952777E+04;-1.121185E+05;-3.529864E+04;-2.533721E+04;-5.230835E+04;-1.213234E+05;1.490774E+03;4.618468E+04;1.475399E+04;1.432706E+04;-5.090355E+04;6.935272E+03 +1657223019.6350;4.953545E+04;-1.121015E+05;-3.528713E+04;-2.534876E+04;-5.228098E+04;-1.213146E+05;1.482792E+03;4.619854E+04;1.474981E+04;1.432587E+04;-5.089344E+04;6.938489E+03;4.953545E+04;-1.121015E+05;-3.528713E+04;-2.534876E+04;-5.228098E+04;-1.213146E+05;1.482792E+03;4.619854E+04;1.474981E+04;1.432587E+04;-5.089344E+04;6.938489E+03 +1657223019.6375;4.952818E+04;-1.120881E+05;-3.529230E+04;-2.533619E+04;-5.227207E+04;-1.213010E+05;1.486375E+03;4.620634E+04;1.475163E+04;1.432901E+04;-5.088238E+04;6.929762E+03;4.952818E+04;-1.120881E+05;-3.529230E+04;-2.533619E+04;-5.227207E+04;-1.213010E+05;1.486375E+03;4.620634E+04;1.475163E+04;1.432901E+04;-5.088238E+04;6.929762E+03 +1657223019.6400;4.953286E+04;-1.120955E+05;-3.529661E+04;-2.534072E+04;-5.227220E+04;-1.212757E+05;1.473421E+03;4.619722E+04;1.475243E+04;1.434569E+04;-5.088253E+04;6.942093E+03;4.953286E+04;-1.120955E+05;-3.529661E+04;-2.534072E+04;-5.227220E+04;-1.212757E+05;1.473421E+03;4.619722E+04;1.475243E+04;1.434569E+04;-5.088253E+04;6.942093E+03 +1657223019.6425;4.953852E+04;-1.121092E+05;-3.529723E+04;-2.533834E+04;-5.229567E+04;-1.212890E+05;1.475488E+03;4.619418E+04;1.476406E+04;1.434609E+04;-5.089129E+04;6.930843E+03;4.953852E+04;-1.121092E+05;-3.529723E+04;-2.533834E+04;-5.229567E+04;-1.212890E+05;1.475488E+03;4.619418E+04;1.476406E+04;1.434609E+04;-5.089129E+04;6.930843E+03 +1657223019.6450;4.954211E+04;-1.121217E+05;-3.529152E+04;-2.534360E+04;-5.230809E+04;-1.213001E+05;1.479028E+03;4.618077E+04;1.476280E+04;1.434257E+04;-5.090817E+04;6.935967E+03;4.954211E+04;-1.121217E+05;-3.529152E+04;-2.534360E+04;-5.230809E+04;-1.213001E+05;1.479028E+03;4.618077E+04;1.476280E+04;1.434257E+04;-5.090817E+04;6.935967E+03 +1657223019.6475;4.952464E+04;-1.121237E+05;-3.529059E+04;-2.534101E+04;-5.231295E+04;-1.213222E+05;1.484202E+03;4.618964E+04;1.475892E+04;1.433311E+04;-5.090002E+04;6.938570E+03;4.952464E+04;-1.121237E+05;-3.529059E+04;-2.534101E+04;-5.231295E+04;-1.213222E+05;1.484202E+03;4.618964E+04;1.475892E+04;1.433311E+04;-5.090002E+04;6.938570E+03 +1657223019.6500;4.952487E+04;-1.121128E+05;-3.528736E+04;-2.533991E+04;-5.229809E+04;-1.213223E+05;1.491787E+03;4.619187E+04;1.475022E+04;1.433311E+04;-5.088940E+04;6.940499E+03;4.952487E+04;-1.121128E+05;-3.528736E+04;-2.533991E+04;-5.229809E+04;-1.213223E+05;1.491787E+03;4.619187E+04;1.475022E+04;1.433311E+04;-5.088940E+04;6.940499E+03 +1657223019.6525;4.953301E+04;-1.120966E+05;-3.529430E+04;-2.534971E+04;-5.228163E+04;-1.213049E+05;1.483476E+03;4.621079E+04;1.474957E+04;1.433505E+04;-5.088088E+04;6.933911E+03;4.953301E+04;-1.120966E+05;-3.529430E+04;-2.534971E+04;-5.228163E+04;-1.213049E+05;1.483476E+03;4.621079E+04;1.474957E+04;1.433505E+04;-5.088088E+04;6.933911E+03 +1657223019.6550;4.953508E+04;-1.120858E+05;-3.528949E+04;-2.534356E+04;-5.227150E+04;-1.212918E+05;1.483376E+03;4.621340E+04;1.475259E+04;1.433795E+04;-5.087403E+04;6.934091E+03;4.953508E+04;-1.120858E+05;-3.528949E+04;-2.534356E+04;-5.227150E+04;-1.212918E+05;1.483376E+03;4.621340E+04;1.475259E+04;1.433795E+04;-5.087403E+04;6.934091E+03 +1657223019.6575;4.954061E+04;-1.120919E+05;-3.529098E+04;-2.534209E+04;-5.227507E+04;-1.212755E+05;1.483619E+03;4.620602E+04;1.475428E+04;1.434412E+04;-5.088492E+04;6.937056E+03;4.954061E+04;-1.120919E+05;-3.529098E+04;-2.534209E+04;-5.227507E+04;-1.212755E+05;1.483619E+03;4.620602E+04;1.475428E+04;1.434412E+04;-5.088492E+04;6.937056E+03 +1657223019.6600;4.953586E+04;-1.121100E+05;-3.529929E+04;-2.533005E+04;-5.229602E+04;-1.212967E+05;1.481451E+03;4.619951E+04;1.476839E+04;1.435064E+04;-5.089702E+04;6.926460E+03;4.953586E+04;-1.121100E+05;-3.529929E+04;-2.533005E+04;-5.229602E+04;-1.212967E+05;1.481451E+03;4.619951E+04;1.476839E+04;1.435064E+04;-5.089702E+04;6.926460E+03 +1657223019.6625;4.953563E+04;-1.121258E+05;-3.529586E+04;-2.533995E+04;-5.230966E+04;-1.213112E+05;1.478854E+03;4.618983E+04;1.475872E+04;1.434146E+04;-5.090014E+04;6.934518E+03;4.953563E+04;-1.121258E+05;-3.529586E+04;-2.533995E+04;-5.230966E+04;-1.213112E+05;1.478854E+03;4.618983E+04;1.475872E+04;1.434146E+04;-5.090014E+04;6.934518E+03 +1657223019.6650;4.952613E+04;-1.121132E+05;-3.529661E+04;-2.533957E+04;-5.231154E+04;-1.213207E+05;1.493722E+03;4.619505E+04;1.475230E+04;1.433410E+04;-5.089653E+04;6.938017E+03;4.952613E+04;-1.121132E+05;-3.529661E+04;-2.533957E+04;-5.231154E+04;-1.213207E+05;1.493722E+03;4.619505E+04;1.475230E+04;1.433410E+04;-5.089653E+04;6.938017E+03 +1657223019.6675;4.953095E+04;-1.121077E+05;-3.529229E+04;-2.534423E+04;-5.229617E+04;-1.213120E+05;1.492549E+03;4.619686E+04;1.474616E+04;1.433251E+04;-5.088928E+04;6.939178E+03;4.953095E+04;-1.121077E+05;-3.529229E+04;-2.534423E+04;-5.229617E+04;-1.213120E+05;1.492549E+03;4.619686E+04;1.474616E+04;1.433251E+04;-5.088928E+04;6.939178E+03 +1657223019.6700;4.952840E+04;-1.120897E+05;-3.529616E+04;-2.533997E+04;-5.227835E+04;-1.213050E+05;1.490885E+03;4.621293E+04;1.475004E+04;1.433198E+04;-5.087168E+04;6.936903E+03;4.952840E+04;-1.120897E+05;-3.529616E+04;-2.533997E+04;-5.227835E+04;-1.213050E+05;1.490885E+03;4.621293E+04;1.475004E+04;1.433198E+04;-5.087168E+04;6.936903E+03 +1657223019.6725;4.954269E+04;-1.120846E+05;-3.529498E+04;-2.534547E+04;-5.226759E+04;-1.212854E+05;1.474975E+03;4.621234E+04;1.475892E+04;1.434735E+04;-5.087628E+04;6.942320E+03;4.954269E+04;-1.120846E+05;-3.529498E+04;-2.534547E+04;-5.226759E+04;-1.212854E+05;1.474975E+03;4.621234E+04;1.475892E+04;1.434735E+04;-5.087628E+04;6.942320E+03 +1657223019.6750;4.953671E+04;-1.120983E+05;-3.529156E+04;-2.533892E+04;-5.227923E+04;-1.212886E+05;1.484103E+03;4.619205E+04;1.475978E+04;1.434839E+04;-5.088646E+04;6.940183E+03;4.953671E+04;-1.120983E+05;-3.529156E+04;-2.533892E+04;-5.227923E+04;-1.212886E+05;1.484103E+03;4.619205E+04;1.475978E+04;1.434839E+04;-5.088646E+04;6.940183E+03 +1657223019.6775;4.953355E+04;-1.121212E+05;-3.529296E+04;-2.534205E+04;-5.230195E+04;-1.213027E+05;1.474530E+03;4.618437E+04;1.476690E+04;1.434199E+04;-5.089328E+04;6.937462E+03;4.953355E+04;-1.121212E+05;-3.529296E+04;-2.534205E+04;-5.230195E+04;-1.213027E+05;1.474530E+03;4.618437E+04;1.476690E+04;1.434199E+04;-5.089328E+04;6.937462E+03 +1657223019.6800;4.953266E+04;-1.121204E+05;-3.529616E+04;-2.533904E+04;-5.231126E+04;-1.213070E+05;1.483510E+03;4.618324E+04;1.476328E+04;1.434060E+04;-5.090672E+04;6.932730E+03;4.953266E+04;-1.121204E+05;-3.529616E+04;-2.533904E+04;-5.231126E+04;-1.213070E+05;1.483510E+03;4.618324E+04;1.476328E+04;1.434060E+04;-5.090672E+04;6.932730E+03 +1657223019.6825;4.952345E+04;-1.121135E+05;-3.529573E+04;-2.534075E+04;-5.230482E+04;-1.213236E+05;1.493627E+03;4.619093E+04;1.475722E+04;1.433392E+04;-5.090398E+04;6.935625E+03;4.952345E+04;-1.121135E+05;-3.529573E+04;-2.534075E+04;-5.230482E+04;-1.213236E+05;1.493627E+03;4.619093E+04;1.475722E+04;1.433392E+04;-5.090398E+04;6.935625E+03 +1657223019.6850;4.952349E+04;-1.120970E+05;-3.529512E+04;-2.533993E+04;-5.228162E+04;-1.213100E+05;1.487130E+03;4.620059E+04;1.475026E+04;1.433022E+04;-5.088424E+04;6.945201E+03;4.952349E+04;-1.120970E+05;-3.529512E+04;-2.533993E+04;-5.228162E+04;-1.213100E+05;1.487130E+03;4.620059E+04;1.475026E+04;1.433022E+04;-5.088424E+04;6.945201E+03 +1657223019.6875;4.952977E+04;-1.120942E+05;-3.529526E+04;-2.534389E+04;-5.227482E+04;-1.212968E+05;1.484907E+03;4.621418E+04;1.475987E+04;1.433036E+04;-5.087809E+04;6.936432E+03;4.952977E+04;-1.120942E+05;-3.529526E+04;-2.534389E+04;-5.227482E+04;-1.212968E+05;1.484907E+03;4.621418E+04;1.475987E+04;1.433036E+04;-5.087809E+04;6.936432E+03 +1657223019.6900;4.954012E+04;-1.120987E+05;-3.529386E+04;-2.533916E+04;-5.227019E+04;-1.212835E+05;1.476648E+03;4.620304E+04;1.475931E+04;1.433716E+04;-5.088011E+04;6.946201E+03;4.954012E+04;-1.120987E+05;-3.529386E+04;-2.533916E+04;-5.227019E+04;-1.212835E+05;1.476648E+03;4.620304E+04;1.475931E+04;1.433716E+04;-5.088011E+04;6.946201E+03 +1657223019.6925;4.953912E+04;-1.121156E+05;-3.530073E+04;-2.533939E+04;-5.228814E+04;-1.212889E+05;1.482409E+03;4.618817E+04;1.476286E+04;1.434695E+04;-5.089334E+04;6.936009E+03;4.953912E+04;-1.121156E+05;-3.530073E+04;-2.533939E+04;-5.228814E+04;-1.212889E+05;1.482409E+03;4.618817E+04;1.476286E+04;1.434695E+04;-5.089334E+04;6.936009E+03 +1657223019.6950;4.953838E+04;-1.121219E+05;-3.528887E+04;-2.534226E+04;-5.231168E+04;-1.213011E+05;1.478513E+03;4.618410E+04;1.475793E+04;1.434554E+04;-5.090568E+04;6.947024E+03;4.953838E+04;-1.121219E+05;-3.528887E+04;-2.534226E+04;-5.231168E+04;-1.213011E+05;1.478513E+03;4.618410E+04;1.475793E+04;1.434554E+04;-5.090568E+04;6.947024E+03 +1657223019.6975;4.952730E+04;-1.121190E+05;-3.529497E+04;-2.533915E+04;-5.231446E+04;-1.213156E+05;1.485653E+03;4.618627E+04;1.474917E+04;1.433214E+04;-5.090090E+04;6.937937E+03;4.952730E+04;-1.121190E+05;-3.529497E+04;-2.533915E+04;-5.231446E+04;-1.213156E+05;1.485653E+03;4.618627E+04;1.474917E+04;1.433214E+04;-5.090090E+04;6.937937E+03 +1657223019.7000;4.952526E+04;-1.121124E+05;-3.529023E+04;-2.533914E+04;-5.230487E+04;-1.213212E+05;1.481898E+03;4.619095E+04;1.474233E+04;1.433371E+04;-5.089284E+04;6.939181E+03;4.952526E+04;-1.121124E+05;-3.529023E+04;-2.533914E+04;-5.230487E+04;-1.213212E+05;1.481898E+03;4.619095E+04;1.474233E+04;1.433371E+04;-5.089284E+04;6.939181E+03 +1657223019.7025;4.952848E+04;-1.120971E+05;-3.529428E+04;-2.534124E+04;-5.227782E+04;-1.213081E+05;1.495113E+03;4.619939E+04;1.474357E+04;1.433391E+04;-5.088167E+04;6.934510E+03;4.952848E+04;-1.120971E+05;-3.529428E+04;-2.534124E+04;-5.227782E+04;-1.213081E+05;1.495113E+03;4.619939E+04;1.474357E+04;1.433391E+04;-5.088167E+04;6.934510E+03 +1657223019.7050;4.953256E+04;-1.120887E+05;-3.529300E+04;-2.534050E+04;-5.226237E+04;-1.212847E+05;1.482759E+03;4.620448E+04;1.475489E+04;1.433973E+04;-5.087636E+04;6.930577E+03;4.953256E+04;-1.120887E+05;-3.529300E+04;-2.534050E+04;-5.226237E+04;-1.212847E+05;1.482759E+03;4.620448E+04;1.475489E+04;1.433973E+04;-5.087636E+04;6.930577E+03 +1657223019.7075;4.953786E+04;-1.120939E+05;-3.529754E+04;-2.533873E+04;-5.227695E+04;-1.212777E+05;1.478895E+03;4.619432E+04;1.475988E+04;1.435447E+04;-5.088292E+04;6.939198E+03;4.953786E+04;-1.120939E+05;-3.529754E+04;-2.533873E+04;-5.227695E+04;-1.212777E+05;1.478895E+03;4.619432E+04;1.475988E+04;1.435447E+04;-5.088292E+04;6.939198E+03 +1657223019.7100;4.952961E+04;-1.121126E+05;-3.529657E+04;-2.533695E+04;-5.229307E+04;-1.212885E+05;1.478529E+03;4.618465E+04;1.476263E+04;1.435300E+04;-5.089664E+04;6.938734E+03;4.952961E+04;-1.121126E+05;-3.529657E+04;-2.533695E+04;-5.229307E+04;-1.212885E+05;1.478529E+03;4.618465E+04;1.476263E+04;1.435300E+04;-5.089664E+04;6.938734E+03 +1657223019.7125;4.953453E+04;-1.121185E+05;-3.528698E+04;-2.534396E+04;-5.230770E+04;-1.213046E+05;1.475352E+03;4.617841E+04;1.475601E+04;1.435035E+04;-5.091371E+04;6.946039E+03;4.953453E+04;-1.121185E+05;-3.528698E+04;-2.534396E+04;-5.230770E+04;-1.213046E+05;1.475352E+03;4.617841E+04;1.475601E+04;1.435035E+04;-5.091371E+04;6.946039E+03 +1657223019.7150;4.951984E+04;-1.121162E+05;-3.529020E+04;-2.533951E+04;-5.231055E+04;-1.213194E+05;1.484578E+03;4.617952E+04;1.474984E+04;1.433373E+04;-5.090115E+04;6.934693E+03;4.951984E+04;-1.121162E+05;-3.529020E+04;-2.533951E+04;-5.231055E+04;-1.213194E+05;1.484578E+03;4.617952E+04;1.474984E+04;1.433373E+04;-5.090115E+04;6.934693E+03 + From fa6d574112801de9fa083461174e1bd8ce31de04 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Tue, 30 Jan 2024 18:59:12 -0600 Subject: [PATCH 10/40] Purpose of interal indexes well defined. DasVar object with an interal index now have specific purposes for that index that is denoted by the value type. There are three defined: vtText - Internal rank is 1, denotes the byte offset in utf-8 string vtGeoVec - Internal rank is 1, denotes a geometric vector in a frame vtByteSeq - Internal rank is 1, denote byte sequences of unknown purpose --- .gitignore | 1 + buildfiles/Linux.mak | 6 +- das2/builder.c | 14 +- das2/core.h | 2 + das2/dataset.c | 2 +- das2/datum.c | 26 +++- das2/datum.h | 40 +++--- das2/defs.h | 3 +- das2/frame.c | 7 +- das2/frame.h | 11 +- das2/stream.c | 24 +++- das2/stream.h | 11 +- das2/time.c | 6 +- das2/time.h | 86 ++++++++---- das2/value.c | 22 ++- das2/value.h | 89 +++++++----- das2/variable.c | 321 ++++++++++++++++++++++++++++++------------- das2/variable.h | 116 ++++++++-------- das2/vector.c | 87 ++++++++++++ das2/vector.h | 72 ++++++++++ test/TestAuth.c | 10 +- test/TestVariable.c | 127 ++++++++++++----- test/sizeof.c | 128 +++++++++++++++++ test/tag_test.dNt | 12 +- 24 files changed, 927 insertions(+), 296 deletions(-) create mode 100644 das2/vector.c create mode 100644 das2/vector.h create mode 100644 test/sizeof.c diff --git a/.gitignore b/.gitignore index 326967f..5474511 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ subprojects/fftw-* subprojects/zlib-* .xmake/ .DS_Store +test/sizeof diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index 3f6834b..f9bb456 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -12,13 +12,13 @@ TARG=libdas3.0 SRCS:=das1.c array.c buffer.c builder.c cli.c credentials.c dataset.c datum.c \ descriptor.c dft.c dimension.c dsdf.c encoding.c frame.c http.c io.c json.c \ log.c node.c oob.c operator.c packet.c plane.c processor.c property.c send.c \ -stream.c time.c tt2000.c units.c utf8.c util.c value.c variable.c +stream.c time.c tt2000.c units.c utf8.c util.c value.c variable.c vector.c \ HDRS:=defs.h time.h das1.h util.h log.h buffer.h utf8.h value.h units.h \ - tt2000.h operator.h datum.h array.h encoding.h variable.h descriptor.h \ + tt2000.h operator.h datum.h frame.h array.h encoding.h variable.h descriptor.h \ dimension.h dataset.h plane.h packet.h stream.h processor.h property.h oob.h \ io.h builder.h dsdf.h credentials.h http.h dft.h json.h node.h cli.h send.h \ - core.h + vector.h core.h ifeq ($(SPICE),yes) SRCS:=$(SRCS) spice.c diff --git a/das2/builder.c b/das2/builder.c index e4d35fa..ca5e11f 100644 --- a/das2/builder.c +++ b/das2/builder.c @@ -506,7 +506,7 @@ DasDs* _DasDsBldr_initXY(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) ); if(pDim == NULL) return NULL; - pVar = new_DasVarArray(pAry, MAP_1(0)); + pVar = new_DasVarArray(pAry, SCALAR_1(0)); if( pVar == NULL) return NULL; sRole = _DasDsBldr_role(pPlane); if(! DasDim_addVar(pDim, sRole, pVar)) return NULL; @@ -629,7 +629,7 @@ DasDs* _DasDsBldr_initXYZ(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) ); if(pDim == NULL) return NULL; - pVar = new_DasVarArray(pAry, MAP_1(0)); + pVar = new_DasVarArray(pAry, SCALAR_1(0)); if( pVar == NULL) return NULL; /* Assume these are center values unless there is a property stating @@ -829,7 +829,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) /* Map index 0 to time array 0, ignore index 1 */ - pVar = new_DasVarArray(pAry, MAP_2(0, DASIDX_UNUSED)); + pVar = new_DasVarArray(pAry, SCALAR_2(0, DASIDX_UNUSED)); if(pVar == NULL) return NULL; if(! DasDim_addVar(pXDim, sRole, pVar)) return NULL; break; @@ -859,7 +859,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) if(pDim == NULL) return NULL; /* Map index 0 to this array, ignore index 1 */ - pVar = new_DasVarArray(pAry, MAP_2(0, DASIDX_UNUSED)); + pVar = new_DasVarArray(pAry, SCALAR_2(0, DASIDX_UNUSED)); if(pVar == NULL) return NULL; if(! DasDim_addVar(pDim, sRole, pVar)) return NULL; @@ -899,7 +899,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) * dimension, otherwise we'll add in the REF and OFFSET variables */ if( _DasDsBldr_isWaveform(pPlane) ){ /* ignore first index, map second index to array */ - pOffset = new_DasVarArray(pAry, MAP_2(DASIDX_UNUSED, 0)); + pOffset = new_DasVarArray(pAry, SCALAR_2(DASIDX_UNUSED, 0)); DasDim_addVar(pXDim, DASVAR_OFFSET, pOffset); /* Convert the old CENTER variable to a Reference variable */ @@ -920,7 +920,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) /* Map index 1 to this array's index 0, ignore 0, always assume */ /* center values */ - pVar = new_DasVarArray(pAry, MAP_2(DASIDX_UNUSED, 0)); + pVar = new_DasVarArray(pAry, SCALAR_2(DASIDX_UNUSED, 0)); if(pVar == NULL) return NULL; if(! DasDim_addVar(pDim, DASVAR_CENTER, pVar)) return NULL; } @@ -962,7 +962,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) if(pDim == NULL) return NULL; /* Map index 0 to 0 and 1 to 1 */ - pVar = new_DasVarArray(pAry, MAP_2(0, 1)); + pVar = new_DasVarArray(pAry, SCALAR_2(0, 1)); if(pVar == NULL) return NULL; if(! DasDim_addVar(pDim, sRole, pVar)) return NULL; break; diff --git a/das2/core.h b/das2/core.h index c4968cd..35edb6f 100644 --- a/das2/core.h +++ b/das2/core.h @@ -180,6 +180,8 @@ #include #include #include +#include +#include /* Add a utility for handling UTF-8 as an internal string format, though almost all string manipulation algorithms get by without this even when diff --git a/das2/dataset.c b/das2/dataset.c index 0e51cd8..00d7194 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -544,6 +544,6 @@ typedef struct ds_xml_parser { DAS_API DasDs* new_DasDs_xml(DasBuf* pBuf, DasDesc* pParent, int nPktId) { - + return NULL; } \ No newline at end of file diff --git a/das2/datum.c b/das2/datum.c index 37c124d..03a6698 100644 --- a/das2/datum.c +++ b/das2/datum.c @@ -1,18 +1,18 @@ /* Copyright (C) 2017 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ #define _POSIX_C_SOURCE 200112L @@ -26,6 +26,7 @@ #include "datum.h" #include "array.h" #include "util.h" +#include "vector.h" /* ************************************************************************* */ /* Datum functions and structures */ @@ -88,7 +89,7 @@ bool das_datum_fromStr(das_datum* pDatum, const char* sStr) sBuf[ pRead - sStr] = '\0'; if(dt_parsetime(sBuf, &dt) ){ pDatum->units = UNIT_UTC; - memcpy(pDatum->bytes, &dt, sizeof(das_time)); + memcpy(pDatum->bytes, &dt, DATUM_BUF_SZ); pDatum->vt = vtTime; return true; } @@ -116,6 +117,21 @@ bool das_datum_fromStr(das_datum* pDatum, const char* sStr) return true; } + +ptrdiff_t das_datum_shape0(const das_datum* pThis) +{ + switch(pThis->vt){ + case vtText: + return strlen((const char*)pThis) + 1; + case vtGeoVec: + return ((das_geovec*)pThis)->ncomp; + case vtByteSeq: + return ((das_byteseq*)pThis)->sz; + default: + return 0; + } +} + /* This one is simple */ bool das_datum_wrapStr(das_datum* pDatum, das_units units, const char* sStr) { diff --git a/das2/datum.h b/das2/datum.h index 52d025e..0650d6c 100644 --- a/das2/datum.h +++ b/das2/datum.h @@ -1,18 +1,18 @@ /* Copyright (C) 2017 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * Das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ /** @file datum.h */ @@ -26,16 +26,17 @@ #ifdef __cplusplus extern "C" { #endif + +#define DATUM_BUF_SZ 32 // big enough to hold a das_vector and das_time /** @addtogroup values * @{ */ - -/** A value and it's units. +/** An atomic data processing unit, and it's units. * * Datum objects can be created as stack variables. For any object up to - * sizeof(das_time) all memory is internal and the plain old C equals (=) + * DATUM_BUF_SZ all memory is internal and the plain old C equals (=) * operator can be used to assign the contents of one datum to another. * * For larger objects an external constant pointer is used to denote the @@ -48,22 +49,26 @@ extern "C" { * type is known. For example: * * @code - * das_datum dd; - * das_datum_fromStr("2017-01-02T12:14"); + * das_datum dm; + * das_datum_fromStr(&dm, "2017-01-02T12:14"); * - * int year = ((*das_time)(&dd))->year; + * int year = ((*das_time)(&dm))->year; * * // This works - * das_datum_Double(&dd, "2.145 meters"); - * double length = *((*double)dd); + * das_datum_Double(&dm, "2.145 meters"); + * double length = *((*double)dm); * * @endcode + * + * The datum class is made to work with Variable, to provide a single + * "value" of a variable, however these values may contain internal + * structure. Two prime examples are geometric vectors and strings. */ typedef struct datum_t { - byte bytes[sizeof(das_time)]; - das_val_type vt; - size_t vsize; - das_units units; + byte bytes[DATUM_BUF_SZ]; /* 32 bytes of space */ + das_val_type vt; + uint32_t vsize; + das_units units; } das_datum; /** Check to seef if a datum has been initialized. @@ -78,6 +83,7 @@ typedef struct datum_t { */ #define das_datum_valid(p) ((p)->vsize > 0) +ptrdiff_t das_datum_shape0(const das_datum* pThis); /** Initialize a numeric datum from a value and units string. * @@ -126,7 +132,7 @@ DAS_API bool das_datum_wrapStr(das_datum* pTHis, const char* sStr, das_units uni /** Wrap an external unknown type pointer as a datum. * - * This is for special user defined data types unknown to libdas2. The type + * This is for special user defined data types unknown to das2C. The type * of the datum will be vtByteSeq (a byte sequence) */ DAS_API bool das_datum_byteSeq( diff --git a/das2/defs.h b/das2/defs.h index 22a365e..46c2f7b 100644 --- a/das2/defs.h +++ b/das2/defs.h @@ -172,7 +172,8 @@ typedef int DasErrCode; #define DASERR_TIME 37 #define DASERR_PROP 38 #define DASERR_FRM 39 -#define DASERR_MAX 39 +#define DASERR_VEC 40 +#define DASERR_MAX 40 #ifdef __cplusplus } diff --git a/das2/frame.c b/das2/frame.c index 1ec5fde..73f2835 100644 --- a/das2/frame.c +++ b/das2/frame.c @@ -27,12 +27,17 @@ #include "frame.h" -DasFrame* new_DasFrame(DasDesc* pParent, const char* sName, const char* sType) +DasFrame* new_DasFrame(DasDesc* pParent, byte id, const char* sName, const char* sType) { DasFrame* pThis = (DasFrame*) calloc(1, sizeof(DasFrame)); DasDesc_init(&(pThis->base), FRAME); if(sName != NULL) strncpy(pThis->name, sName, DASFRM_NAME_SZ-1); + + if(id == 0){ + das_error(DASERR_FRM, "Frame IDs must be in the range 1 to 255"); + goto ERROR; + } if( DasFrame_setType(pThis, sType) != DAS_OKAY) goto ERROR; diff --git a/das2/frame.h b/das2/frame.h index 3ffb8a6..2d07b06 100644 --- a/das2/frame.h +++ b/das2/frame.h @@ -55,6 +55,7 @@ typedef struct frame_descriptor{ DasDesc base; /* Required properties */ + byte id; // The frame ID, used in vectors, quaternions etr char name[DASFRM_NAME_SZ]; char type[DASFRM_TYPE_SZ]; uint32_t flags; /* Usually contains the type */ @@ -70,12 +71,18 @@ typedef struct frame_descriptor{ * @param A coordinate name type string, such as "cartesian" * @memberof DasFrame */ -DAS_API DasFrame* new_DasFrame(DasDesc* pParent, const char* sName, const char* sType); +DAS_API DasFrame* new_DasFrame( + DasDesc* pParent, byte id, const char* sName, const char* sType +); /** Change the frame name * @memberof DasFrame */ -DAS_API DasErrCode DasFrame_setName(DasFrame* pThis, const char* sName); +DAS_API DasErrCode DasFrame_setName( + DasFrame* pThis, const char* sName +); + +#define DasFrame_id(p) ((p)->id) DAS_API void DasFrame_inertial(DasFrame* pThis, bool bInertial); diff --git a/das2/stream.c b/das2/stream.c index c12121a..85ec1e8 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -294,7 +294,7 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) /* Frame wrappers */ DasFrame* StreamDesc_createFrame( - StreamDesc* pThis, const char* sName, const char* sType + StreamDesc* pThis, byte id, const char* sName, const char* sType ){ // Find a slot for it. size_t uIdx = 0; @@ -317,7 +317,7 @@ DasFrame* StreamDesc_createFrame( return NULL; } - DasFrame* pFrame = new_DasFrame((DasDesc*)pThis, sName, sType); + DasFrame* pFrame = new_DasFrame((DasDesc*)pThis, id, sName, sType); if(pFrame != NULL){ pThis->frames[uIdx] = pFrame; } @@ -340,6 +340,15 @@ const DasFrame* StreamDesc_getFrameByName( return NULL; } +const DasFrame* StreamDesc_getFrameById(const StreamDesc* pThis, byte id) +{ + for(size_t u = 0; (u < MAX_FRAMES) && (pThis->frames[u] != NULL); ++u){ + if(pThis->frames[u]->id == id) + return pThis->frames[u]; + } + return NULL; +} + /* ************************************************************************* */ /* Serializing */ @@ -367,6 +376,7 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) StreamDesc* pSd = pPsd->pStream; char sType[64] = {'\0'}; char sName[64] = {'\0'}; + byte nFrameId = 0; const char* pColon = NULL; pPsd->bInProp = (strcmp(el, "p") == 0); @@ -439,7 +449,13 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) if(strcmp(attr[i], "type") == 0){ memset(sType, 0, 64); strncpy(sType, attr[i+1], 63); continue; - } + } + if(strcmp(attr[i], "id") == 0){ + if((sscanf(attr[i+1], "%hhd", &nFrameId) != 1)||(nFrameId == 0)){ + pPsd->nRet = das_error(DASERR_STREAM, "Invalid frame ID, %hhd", nFrameId); + } + continue; + } } pPsd->nRet = das_error(DASERR_STREAM, @@ -450,7 +466,7 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) } if(strcmp(el, "frame") == 0){ - pPsd->pFrame = StreamDesc_createFrame(pSd, sName, sType); + pPsd->pFrame = StreamDesc_createFrame(pSd, nFrameId, sName, sType); if(!pPsd->pFrame){ pPsd->nRet = das_error(DASERR_STREAM, "Frame definition failed in header"); } diff --git a/das2/stream.h b/das2/stream.h index 6912f6b..95c50d6 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -229,7 +229,7 @@ DAS_API PktDesc* StreamDesc_createPktDesc( * @memberof StreamDesc */ DAS_API DasFrame* StreamDesc_createFrame( - StreamDesc* pThis, const char* sName, const char* sType + StreamDesc* pThis, byte id, const char* sName, const char* sType ); /** Make a deep copy of a PacketDescriptor on a new stream. @@ -306,6 +306,15 @@ DAS_API const DasFrame* StreamDesc_getFrameByName( const StreamDesc* pThis, const char* sFrame ); +/** Get a frame pointer by it's id + * + * @param id the numeric ID of a frame as stored in das_vector + * @returns NULL if there is no frame by that name + * + * @memberof StreamDesc + */ +const DasFrame* StreamDesc_getFrameById(const StreamDesc* pThis, byte id); + /** Free any resources associated with this PacketDescriptor, * and release it's id number for use with a new PacketDescriptor. * @memberof StreamDesc diff --git a/das2/time.c b/das2/time.c index 731d2f3..436102c 100644 --- a/das2/time.c +++ b/das2/time.c @@ -1,14 +1,14 @@ /* Copyright (C) 1993-2019 Larry Granroth * Chris Piker * - * This file used to be named parsetime.c. It is part of libdas2, the Core + * This file used to be named parsetime.c. It is part of das2C, the Core * Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. diff --git a/das2/time.h b/das2/time.h index 3d92c52..c1fee88 100644 --- a/das2/time.h +++ b/das2/time.h @@ -42,36 +42,72 @@ extern "C" { * In all das rountines, times are assumed to be UTC. Since we are * dealing with spacecraft far from Earth, local time zones are of no * consideration in almost all cases. + * + * On 64-bit machines sizeof(das_time) == 24+8 = 32 bytes. */ typedef struct das_time_t{ - /** Calendar year number, cannot hold years before 1 AD */ - int year; - - /** Calendar month number, 1 = January */ - int month; - - /** Calender Day of month, starts at 1 */ - int mday; - - /** Integer Day of year, Jan. 1st = 1. - * This field is output only for most Das1 functions see the - * warning in dt_tnorm() */ - int yday; - - /** Hour of day, range is 0 to 23 */ + /** Calendar year number, cannot hold years before 1 AD */ + int year; + + /** Calendar month number, 1 = January */ + int month; + + /** Calender Day of month, starts at 1 */ + int mday; + + /** Integer Day of year, Jan. 1st = 1. + * This field is output only for most Das1 functions see the + * warning in dt_tnorm() */ + int yday; + + /** Hour of day, range is 0 to 23 */ int hour; - - /** Minute of the hour, range 0 to 59 */ - int minute; - - /** Second of the minute, range 0.0 to 60.0 - epsilon. - * Note, there is no provision for leap seconds in the library. All - * minutes are assumed to have 60 seconds. - */ - double second; - + + /** Minute of the hour, range 0 to 59 */ + int minute; + + /** Second of the minute, range 0.0 to 60.0 - epsilon. + * Note, there is no provision for leap seconds in the library. All + * minutes are assumed to have 60 seconds. + */ + double second; + +} das_time; + + +/* A version of above that would only use 16 bytes instead of 32 .... + to implement and test later + +typedef struct das_time_t{ + / ** Calendar month number, 1 = January * / + int8_t month; + + / ** Calender Day of month, starts at 1 * / + int8_t mday; + + / ** Hour of day, range is 0 to 23 * / + int8_t hour; + + / ** Minute of the hour, range 0 to 59 * / + int8_t minute; + + / ** Calendar year number, cannot hold years before 1 AD * / + int16_t year; + + / ** Integer Day of year, Jan. 1st = 1. + * This field is output only for most Das1 functions see the + * warning in dt_tnorm() * / + int16_t yday; + + / ** Second of the minute, range 0.0 to 60.0 - epsilon. + * Note, there is no provision for leap seconds in the library. All + * minutes are assumed to have 60 seconds. + * / + double second; + } das_time; +*/ #define DAS_TIME_NULL {0, 0, 0, 0, 0, 0, 0.0} diff --git a/das2/value.c b/das2/value.c index 47aeecf..77df3e1 100644 --- a/das2/value.c +++ b/das2/value.c @@ -36,6 +36,7 @@ #include "operator.h" #include "datum.h" #include "util.h" +#include "vector.h" /* ************************************************************************* */ /* value type functions */ @@ -49,6 +50,7 @@ static const int64_t g_longFill = -9223372036854775807L; static const float g_floatFill = DAS_FILL_VALUE; static const double g_doubleFill = DAS_FILL_VALUE; static const das_time g_timeFill = {0, 0, 0, 0, 0, 0, 0.0}; +static const das_geovec g_geovecFill = {{0,0,0}, 0, 0, 0, 0, 0, {0,0,0}}; const void* das_vt_fill(das_val_type et) { @@ -62,6 +64,7 @@ const void* das_vt_fill(das_val_type et) case vtFloat: return &(g_floatFill); case vtDouble: return &(g_doubleFill); case vtTime: return &(g_timeFill); + case vtGeoVec: return &(g_geovecFill); default: return NULL; } } @@ -79,6 +82,7 @@ size_t das_vt_size(das_val_type et) case vtDouble: return sizeof(g_doubleFill); case vtTime: return sizeof(g_timeFill); case vtText: return sizeof(char*); + case vtGeoVec: return sizeof(das_geovec); default: das_error(DASERR_ARRAY, "Program logic error"); return 0; @@ -178,6 +182,21 @@ int vt_cmp_byteseq(const byte* vpA, const byte* vpB) return ( (pA->sz > pB->sz) ? 1 : ((pA->sz == pB->sz) ? 0 : -1) ); } +int vt_cmp_geovec(const byte* vpA, const byte* vpB) +{ + //const das_geovec* pA = (const das_vector*)vpA; + //const das_geovec* pB = (const das_vector*)vpB; + + //das_val_type etA = das_vec_eltype(pA); + //das_val_type etB = das_vec_eltype(pB); + + das_error(DASERR_VALUE, + "Vector comparison not yet implemented, infact, I'm not sure" + " what it should do" + ); + return 0; +} + das_valcmp_func das_vt_getcmp(das_val_type et) { switch(et){ @@ -191,6 +210,7 @@ das_valcmp_func das_vt_getcmp(das_val_type et) case vtTime: return vt_cmp_time; case vtText: return vt_cmp_text; case vtByteSeq: return vt_cmp_byteseq; + case vtGeoVec: return vt_cmp_geovec; default: return NULL; } } @@ -332,7 +352,7 @@ int das_vt_cmpAny( /* Crap, now we have to compare longs to doubles, this is a pain */ - fprintf(stderr, "TODO: Long to double comparison needed in libdas2\n"); + fprintf(stderr, "TODO: Long to double comparison needed in das2C\n"); return -2; } diff --git a/das2/value.h b/das2/value.h index b3aadf3..ba0c0d4 100644 --- a/das2/value.h +++ b/das2/value.h @@ -50,62 +50,89 @@ typedef struct das_byteseq_t{ } das_byteseq; +#define VT_MIN_SIMPLE vtByte +#define VT_MAX_SIMPLE vtDouble + /** Enumeration of types stored in Das Array (DasAry) objects - * Not that any kind of value may be stored in a Das Array, but most of these + * Note that any kind of value may be stored in a Das Array, but most of these * types have runtime type safty checks. */ typedef enum das_val_type_e { - /** For generic storage, designates elements as unknown, you have to cast + + /** For generic storage, designates elements as unknown, you have to cast * the array return values yourself.*/ vtUnknown = 0, - /* The following type is not used by datums, but by array indexing elements - * that track the size and location of child dimensions */ - vtIndex, - + /** The basic types */ + + /* VT_MIN_SIMPLE = vtByte */ + /** Indicates array values are unsigned 8-bit unsigned integers (bytes) */ - vtByte, - /** Indicates array values are unsigned 16-bit integers (shorts) */ - vtUShort, - /** Indicates array values are signed 16-bit integers (shorts)*/ - vtShort, - /** Indicates array values are signed 32-bit integers (ints) */ - vtInt, - /** Indicates array values are signed 64-bit integers (longs) */ - vtLong, - /** Indicates array values are 32-bit floating point values (floats) */ - vtFloat, - /** Indicates array values are 64-bit floating point values (doubles) */ - vtDouble, + vtByte = 1, + + /** Indicates array values are unsigned 16-bit integers (shorts) */ + vtUShort = 2, + + /** Indicates array values are signed 16-bit integers (shorts)*/ + vtShort = 3, + + /** Indicates array values are signed 32-bit integers (ints) */ + vtInt = 4, + + /** Indicates array values are signed 64-bit integers (longs) */ + vtLong = 5, + + /** Indicates array values are 32-bit floating point values (floats) */ + vtFloat = 6, + + /** Indicates array values are 64-bit floating point values (doubles) */ + vtDouble = 7, + + /* VT_MAX_SIMPLE = vtDouble */ + + /* The following type is not used by datums, but by array indexing elements + * that track the size and location of child dimensions */ + vtIndex = 8, + /** Indicates array values are das_time_t structures */ - vtTime, + vtTime = 9, - /* The following two types are only used by datums, not arrays. + /* The following two types are only used by variables and datums * * When generating Datums from Arrays: * - * - If the array element type is etUnknown then etByteSeq is used, size + * - If the array element type is etUnknown then vtByteSeq is used, size * is element size. * * - If the array element type is etByte and the D2ARY_AS_STRING flag is - * set then etText is used. + * set then vtText is used. * * - If the array element type is anything else and D2ARY_AS_SUBSEQ is - * set then etByteSeq is used, size is element size times the size of - * the fastest moving index the location read. + * set then vtByteSeq is used, size is element size times the size of + * the fastest moving index the location read. */ /** Indicates datum values are const char* pointers to null terminated * UTF-8 strings */ - vtText, - - /** Indicates values are size_t plus const byte* pairs, no more is - * known about the bytes */ - vtByteSeq - + vtText = 10, + + /** Value are a vector struct as defined by vector.h */ + vtGeoVec = 11, + + /** Indicates values are size_t plus const byte* pairs, no more is + * known about the bytes */ + vtByteSeq = 12, + } das_val_type; +/** Get the rank of a value type + * + * Most items are scalars (rank 0), but strings and vectors are rank 1 + */ +#define das_vt_rank(VT) ( ((VT==vtGeoVec)||(VT==vtText)||(VT==vtByteSeq)) ? 1:0) + + /** Get the default fill value for a given element type * @return a pointer to the default fill value, will have to cast to the * appropriate type. diff --git a/das2/variable.c b/das2/variable.c index 6abf033..3dcd472 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -29,6 +29,7 @@ #include "operator.h" #include "variable.h" #include "frame.h" +#include "vector.h" /* This would be alot easier to implement in D using sumtype... oh well */ @@ -118,7 +119,7 @@ size_t DasVar_valSize(const DasVar* pThis){return pThis->vsize;} das_units DasVar_units(const DasVar* pThis){ return pThis->units;} -bool DasVar_getDatum(const DasVar* pThis, ptrdiff_t* pLoc, das_datum* pDatum) +bool DasVar_get(const DasVar* pThis, ptrdiff_t* pLoc, das_datum* pDatum) { return pThis->get(pThis, pLoc, pDatum); } @@ -149,10 +150,12 @@ int _DasVar_noIntrShape(const DasVar* pBase, ptrdiff_t* pShape) return 0; } +/* component_t DasVar_intrType(const DasVar* pThis) { return pThis->intrtype; } +*/ ptrdiff_t DasVar_lengthIn(const DasVar* pThis, int nIdx, ptrdiff_t* pLoc) { @@ -317,7 +320,8 @@ char* _DasVar_prnIntr( const DasVar* pThis, const char* sFrame, byte* pFrmDirs, byte nFrmDirs, char* sBuf, int nBufLen ){ - if(pThis->intrtype == D2V_CT_SCALAR) /* If I'm a scalar, print nothing extra */ + /* If my first internal index is > last index, print nothing */ + if(pThis->iLastIndex < pThis->iFirstInternal) return sBuf; memset(sBuf, 0, nBufLen); /* Insure null termination where ever I stop writing */ @@ -387,13 +391,13 @@ char* _DasVar_prnIntr( if(nBufLen < 8) return pWrite; - switch(pThis->intrtype){ - case D2V_CT_STRING: + switch(pThis->vt){ + case vtText: strcpy(pWrite, " string"); pWrite += 7; nBufLen -= 7; break; - case D2V_CT_VECTOR: + case vtGeoVec: if(!sFrame){ strcpy(pWrite, " vector"); pWrite += 7; nBufLen -= 7; @@ -409,14 +413,9 @@ char* _DasVar_prnIntr( } break; - case D2V_CT_MATRIX: - strcpy(pWrite, "matrix"); - pWrite += 7; nBufLen -= 7; - break; - - case D2V_CT_UNKNOWN: - strcpy(pWrite, "unknown"); - pWrite += 8; nBufLen -= 8; + case vtByteSeq: + strcpy(pWrite, " bytes"); + pWrite += 6; nBufLen -= 6; break; default: break; @@ -457,8 +456,8 @@ typedef struct das_var_const{ DasVar base; char sId[DAS_MAX_ID_BUFSZ]; - /* Buffer and possible pointer for constant value 'variables' */ - byte constant[sizeof(das_time)]; + /* A constant holds a single datum */ + das_datum datum; } DasConstant; const char* DasConstant_id(const DasVar* pBase) @@ -477,18 +476,12 @@ int dec_DasConstant(DasVar* pBase){ bool DasConstant_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) { const DasConstant* pThis = (const DasConstant*)pBase; - memcpy(pDatum, pThis->constant, pBase->vsize); - pDatum->vt = pBase->vt; - pDatum->vsize = pBase->vsize; - pDatum->units = pBase->units; + memcpy(pDatum, &(pThis->datum), pBase->vsize); return true; } bool DasConstant_isNumeric(const DasVar* pBase) { - if(pBase->intrtype != D2V_CT_STRING) - return false; - return ((pBase->vt == vtFloat ) || (pBase->vt == vtDouble ) || (pBase->vt == vtInt ) || (pBase->vt == vtLong ) || (pBase->vt == vtUShort ) || (pBase->vt == vtShort ) || @@ -520,13 +513,32 @@ char* DasConstant_expression( int DasConstant_shape(const DasVar* pBase, ptrdiff_t* pShape) { - for(int i = 0; i < DASIDX_MAX; ++i) pShape[i] = DASIDX_FUNC; + const das_datum* pDm = &( ((DasConstant*)pBase)->datum); + + int i = 0, nMax = DASIDX_MAX - das_vt_rank(pDm->vt); + for(i = 0; i < nMax; ++i) pShape[i] = DASIDX_FUNC; + if(i < DASIDX_MAX){ + pShape[i] = das_datum_shape0(pDm); + } return 0; } +int DasConstant_interShape(const DasVar* pBase, ptrdiff_t* pShape) +{ + for(int i = 0; i < DASIDX_MAX;++i) pShape[i] = DASIDX_UNUSED; + pShape[0] = das_datum_shape0(&( ((DasConstant*)pBase)->datum)); + if(pShape[0] == 0) + return 0; + else + return 1; +} + ptrdiff_t DasConstant_lengthIn(const DasVar* pBase, int nIdx , ptrdiff_t* pLoc) { - return DASIDX_FUNC; + if(nIdx < (DASIDX_MAX - 1)) + return DASIDX_FUNC; + else + return das_datum_shape0(&( ((DasConstant*)pBase)->datum)); } @@ -555,11 +567,15 @@ DasAry* DasConstant_subset( return NULL; } + if((pBase->vt == vtText)||(pBase->vt == vtGeoVec)||(pBase->vt == vtGeoVec)){ + das_error(DASERR_VAR, "Subsetting constant vectors and text strings is not yet implemented"); + } + /* The trick here is to use the fact that the das ary constructor fills * memory with the fill value, so we give it our constant value as the * fill value. */ DasAry* pAry = new_DasAry( - pThis->sId, pBase->vt, pBase->vsize, pThis->constant, + pThis->sId, pBase->vt, das_vt_size(pThis->datum.vt), (const byte*) &(pThis->datum), nSliceRank, shape, pBase->units ); @@ -571,18 +587,28 @@ DasAry* DasConstant_subset( } -DasVar* new_DasConstant( - const char* sId, das_val_type vt, size_t sz, const void* val, int nDsRank, - das_units units -){ +DasVar* new_DasConstant(const char* sId, const das_datum* pDm) +{ + + if(pDm->vt == vtUnknown){ + das_error(DASERR_VAR, "Can't make a constant out of unknown bytes"); + return NULL; + } + DasConstant* pThis = (DasConstant*)calloc(1, sizeof(DasConstant)); - pThis->base.vartype = D2V_DATUM; - pThis->base.vt = vt; + pThis->base.vartype = D2V_CONST; + + pThis->base.vt = pDm->vt; /* vsize set below */ - pThis->base.units = units; + pThis->base.units = pDm->units; pThis->base.nRef = 1; - pThis->base.iFirstInternal = nDsRank; + + pThis->base.iLastIndex = DASIDX_MAX - 1; + if((pDm->vt == vtText)||(pDm->vt == vtGeoVec)||(pDm->vt == vtByteSeq)) + pThis->base.iFirstInternal = DASIDX_MAX; + else + pThis->base.iFirstInternal = DASIDX_MAX - 1; pThis->base.id = DasConstant_id; pThis->base.shape = DasConstant_shape; @@ -598,18 +624,12 @@ DasVar* new_DasConstant( pThis->base.decRef = dec_DasConstant; /* Vsize setting */ - if(vt == vtUnknown) pThis->base.vsize = sz; - else pThis->base.vsize = das_vt_size(vt); + pThis->base.vsize = das_vt_size(pDm->vt); strncpy(pThis->sId, sId, DAS_MAX_ID_BUFSZ - 1); /* Copy in the value */ - if(vt == vtText){ - memcpy(pThis->constant, &val, sizeof(const char*)); - } - else{ - memcpy(pThis->constant, &val, pThis->base.vsize); - } + memcpy(&(pThis->datum), pDm, sizeof(das_datum)); return (DasVar*)pThis; } @@ -809,22 +829,59 @@ bool DasVarAry_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) /* I need a way to make this code fast, maybe the loop should be unrolled? */ ptrdiff_t pAryLoc[DASIDX_MAX] = DASIDX_INIT_BEGIN; - + int nDim = 0; for(int i = 0; i < pBase->iFirstInternal; ++i){ - if(pThis->idxmap[i] >= 0) /* all the wierd flags are less than 0 */ + if(pThis->idxmap[i] >= 0){ /* all the wierd flags are less than 0 */ pAryLoc[ pThis->idxmap[i] ] = pLoc[i]; + ++nDim; + } } + + das_val_type vtAry = DasAry_valType(pThis->pAry); + + int nIntrRank = (pBase->iLastIndex - pBase->iFirstInternal) + 1; - /* No way to know if this is a full or partial lookup unless we - * check it. Do we want to check it? Not for now */ - const void* ptr = DasAry_getAt(pThis->pAry, pBase->vt, pAryLoc); - if(ptr == NULL) return false; - if(pBase->vsize > sizeof(das_time)) return false; - - memcpy(pDatum, ptr, pBase->vsize); - pDatum->vt = pBase->vt; - pDatum->vsize = pBase->vsize; - pDatum->units = pBase->units; + /* If my last index >= first internal, use getIn*/ + if(nIntrRank == 0){ + const byte* ptr = DasAry_getAt(pThis->pAry, pBase->vt, pAryLoc); + if(pBase->vsize > DATUM_BUF_SZ) return false; + assert(pBase->vsize <= DATUM_BUF_SZ); + memcpy(pDatum, ptr, pBase->vsize); + } + else if(nIntrRank == 1){ + size_t uCount = 1; + const byte* ptr = DasAry_getIn(pThis->pAry, vtByte, nDim, pAryLoc, &uCount); + if(ptr == NULL) return false; + + if(vtAry == vtByte){ // Make a datum + + if(pBase->vt == vtText){ + pDatum->vt = vtText; + pDatum->vsize = das_vt_size(vtText); + pDatum->units = pBase->units; + memcpy(pDatum->bytes, &ptr, sizeof(const byte*)); + } + else{ + das_byteseq bs; + pDatum->vt = vtByteSeq; + pDatum->vsize = sizeof(das_byteseq); + bs.ptr = ptr; + bs.sz = uCount; + memcpy(pDatum->bytes, &bs, sizeof(das_byteseq)); + } + } + else{ + das_error(DASERR_VAR, + "Don't know how represent value type %s using a single datum. " + "(Hint: did you mean to make a GeoVector ?)", das_vt_toStr(vtAry) + ); + return false; + } + } + else{ + das_error(DASERR_VAR, "Handling for internal types larger then rank 1 not implemented"); + return false; + } return true; } @@ -1226,8 +1283,8 @@ DasAry* DasVarAry_subset( int nSliceRank = das_rng2shape(nRank, pMin, pMax, aSliceShape); if(nSliceRank < 0) return NULL; if(nSliceRank == 0){ - das_error(DASERR_VAR, "Can't output a rank 0 array, use DasVar_get() for " - "single points"); + das_error(DASERR_VAR, "Can't output a rank 0 array, use DasVar_get() " + "for single items"); return NULL; } @@ -1320,7 +1377,7 @@ char* _DasVarAry_intrExpress( } // Print interval object info if there is any - if((uExFlags & D2V_EXP_INTR) &&(pBase->intrtype != D2V_CT_SCALAR)){ + if((uExFlags & D2V_EXP_INTR) && (das_vt_rank(pBase->vt) > 0)){ pWrite = _DasVar_prnIntr(pBase, sFrame, pDirs, nDirs, pWrite, nLen); } @@ -1341,8 +1398,8 @@ DasErrCode init_DasVarArray(DasVarArray* pThis, DasAry* pAry, int iInternal, int } pThis->base.vartype = D2V_ARRAY; - pThis->base.vt = DasAry_valType(pAry); - pThis->base.vsize = DasAry_valSize(pAry); + pThis->base.vt = DasAry_valType(pAry); + pThis->base.vsize = DasAry_valSize(pAry); pThis->base.nRef = 1; pThis->base.decRef = dec_DasVarAry; pThis->base.isNumeric = DasVarAry_isNumeric; @@ -1380,34 +1437,45 @@ DasErrCode init_DasVarArray(DasVarArray* pThis, DasAry* pAry, int iInternal, int /* as the rank of the array */ if(pMap[u] >= 0){ ++nValid; - if(pMap[u] >= pAry->nRank) + if(pMap[u] >= pAry->nRank){ return das_error(DASERR_VAR, "Variable dimension %zu maps to non-existant dimension %zu in " "array %s", u, pMap[u], DasAry_toStr(pAry, sBuf, 127) ); + } + pThis->base.iLastIndex = u; } } - /* get rank of the internal items */ - int nIntrRank = 0; - for(size_t u = iInternal; u < DASIDX_MAX; ++u){ - if(pMap[u] >= 0) - ++nIntrRank; - } + /* Here's the score. We're putting a template on top of simple das arrays + * that allows composite datums such as strings and GeoVec to be stored with + * dense packing. + * + * vtByte w/string -> vtText and needs one internal index + * vtGeoVec needs one internal index and it's equal to the number of components + * It also needs the value type set to the index vector type + * vtByteSeq needs one internal index, and it's ragged. + */ + das_val_type ary_vt = DasAry_valType(pAry); - /* Decide between unknown and string internal item disposition. - More specific internal composition needs to be handled by derived items - */ - if(nIntrRank > 0){ - if(((pAry->uFlags & D2ARY_AS_STRING) == D2ARY_AS_STRING)&&(nIntrRank == 1)) - pThis->base.intrtype = D2V_CT_STRING; - else - pThis->base.intrtype = D2V_CT_UNKNOWN; + /* Make sure that the last index < the first internal for scalar types, + and that last index == first internal for rank 1 types */ + int nIntrRank = (pThis->base.iLastIndex - pThis->base.iFirstInternal + 1); + + if((pAry->uFlags & D2ARY_AS_STRING) == D2ARY_AS_STRING){ + if(nIntrRank != 1){ + return das_error(DASERR_VAR, "Dense text needs an internal rank of 1"); + } + pThis->base.vt = vtText; } - + else{ + pThis->base.vt = ary_vt; + } + + if(nValid == 0) return das_error(DASERR_VAR, - "Coordinate values are independent of dataset indices" + "No valid indicies provided, use datum for true scalars" ); if(nValid != pAry->nRank) @@ -1442,11 +1510,8 @@ DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap) typedef struct das_var_vecary{ DasVarArray base; - char sFrame[DASFRM_NAME_SZ]; // vector frame name - byte uFrameFlag; // Assume cartesian for now - - byte aDirs[D2V_MAX_VEC_LEN]; // vector frame directions, if empty assume - byte nDirs; + das_geovec tplt; + char fname[DASFRM_NAME_SZ]; // frame name for printing info } DasVarVecAry; @@ -1456,23 +1521,71 @@ char* DasVarVecAry_expression( DasVarVecAry* pThis = (DasVarVecAry*)pBase; return _DasVarAry_intrExpress( - pBase, sBuf, nLen, uFlags, pThis->sFrame, pThis->aDirs, pThis->nDirs + pBase, sBuf, nLen, uFlags, pThis->fname, pThis->tplt.dirs, pThis->tplt.ncomp + ); +} + +bool DasVarVecAry_get(const DasVar* pAncestor, ptrdiff_t* pLoc, das_datum* pDm) +{ + const DasVarArray* pBase = (const DasVarArray*)pAncestor; + const DasVarVecAry* pThis = (const DasVarVecAry*)pAncestor; + + /* Ignore indices you don't understand, that's what makes this work */ + /* I need a way to make this code fast, maybe the loop should be unrolled? */ + ptrdiff_t pAryLoc[DASIDX_MAX] = DASIDX_INIT_BEGIN; + + int nDim = 0; + for(int i = 0; i < pAncestor->iFirstInternal; ++i){ + if(pBase->idxmap[i] >= 0){ /* all the wierd flags are less than 0 */ + pAryLoc[ pBase->idxmap[i] ] = pLoc[i]; + ++nDim; + } + } + + int nIntrRank = (pAncestor->iLastIndex - pAncestor->iFirstInternal) + 1; + + if(nIntrRank != 1){ + das_error(DASERR_VAR, "Logic error in vector access"); + return false; + } + + size_t uCount = 1; + const byte* ptr = DasAry_getIn( + pBase->pAry, pThis->tplt.et, nDim, pAryLoc, &uCount ); + + memcpy(pDm, &(pThis->tplt), sizeof(das_geovec)); + das_geovec* pVec = (das_geovec*)pDm; + + memcpy(pDm, ptr, pVec->esize * pVec->ncomp); + pDm->units = pAncestor->units; + pDm->vsize = sizeof(das_geovec); + pDm->vt = vtGeoVec; + + return true; } DasVar* new_DasVarVecAry( - DasAry* pAry, int8_t* pMap, const char* sFrame, byte* pDirs, byte nDirs + DasAry* pAry, int iFirstInternal, int8_t* pMap, const char* sFrame, + byte nFrameId, byte frameType, byte nDirs, const byte* pDirs ){ if((sFrame == NULL)||(sFrame[0] == '\0')){ das_error(DASERR_VAR, "Vectors cannot have an empty frame name"); return NULL; } - /* For vectors, I internal is always the last item */ - int iFirstInternal = 0; + /* For vectors, 1st internal is always the last item */ + int iFirstCheck = -1; for(int iIdx = 0; iIdx < DASIDX_MAX; ++iIdx){ if(pMap[iIdx] >= 0) /* unused indexes are less then 0 */ - ++iFirstInternal; + ++iFirstCheck; + } + + if(iFirstInternal != iFirstCheck){ + das_error(DASERR_VAR, "First internal index expected to be %d, was %d", + iFirstCheck, iFirstInternal + ); + return NULL; } /* If my first internal *is* my first item, is than an error ??? @@ -1490,6 +1603,12 @@ DasVar* new_DasVarVecAry( // Handle the base class DasVarVecAry* pThis = (DasVarVecAry*) calloc(1, sizeof(DasVarVecAry)); + DasVar* pAncestor = (DasVar*)pThis; + + if((sFrame != NULL)&&(sFrame[0] != '\0')) + strncpy(pThis->fname, sFrame, DASFRM_NAME_SZ-1); + else + strncpy(pThis->fname, "vecframe", DASFRM_NAME_SZ-1); if(init_DasVarArray((DasVarArray*) pThis, pAry, iFirstInternal, pMap) != DAS_OKAY){ /* Don't decrement the array ownership on failure because it wasn't @@ -1498,15 +1617,21 @@ DasVar* new_DasVarVecAry( return NULL; } - // Add in our changes - pThis->base.base.expression = DasVarVecAry_expression; - pThis->base.base.intrtype = D2V_CT_VECTOR; + /* Add in our changes */ + pAncestor->get = DasVarVecAry_get; + pAncestor->expression = DasVarVecAry_expression; + + byte nodata[24] = {0}; + + /* Now save a template for datums returned via get() */ + DasErrCode nRet = das_geovec_init(&(pThis->tplt), nodata, + nFrameId, frameType, pAncestor->vt, das_vt_size(pAncestor->vt), + nDirs, pDirs + ); - strncpy(pThis->sFrame, sFrame, DASFRM_NAME_SZ-1); - if((pDirs != NULL)&&(nDirs > 0)){ - for(int i = 0; (i < D2V_MAX_VEC_LEN)&&(i < nDirs); ++i){ - pThis->aDirs[i] = pDirs[i]; - } + if(nRet != DAS_OKAY){ + free(pThis); + return NULL; } return (DasVar*) pThis; @@ -1520,10 +1645,10 @@ typedef struct das_var_seq{ int iDep; /* The one and only index I depend on */ char sId[DAS_MAX_ID_BUFSZ]; /* Since we can't just use our array ID */ - byte B[sizeof(das_time)]; /* Intercept */ + byte B[DATUM_BUF_SZ]; /* Intercept */ byte* pB; - byte M[sizeof(das_time)]; /* Slope */ + byte M[DATUM_BUF_SZ]; /* Slope */ byte* pM; } DasVarSeq; @@ -1790,7 +1915,7 @@ DasAry* DasVarSeq_subset( for(int d = 0; d < pThis->iDep; ++d) uRepBlk *= (pMax[d] - pMin[d]); - byte value[sizeof(das_time)]; + byte value[DATUM_BUF_SZ]; byte* pVal = value; size_t uTotalLen; /* Used to check */ byte* pWrite = DasAry_getBuf(pAry, pBase->vt, DIM0, &uTotalLen); @@ -2636,7 +2761,9 @@ DasVar* new_DasVarBinary( int nOp = das_op_binary(sOp); if(nOp == 0) return NULL; - if((pLeft->intrtype != D2V_CT_SCALAR)&&(pRight->intrtype != D2V_CT_SCALAR)){ + if((pLeft->vt < VT_MIN_SIMPLE)||(pLeft->vt > VT_MAX_SIMPLE)|| + (pRight->vt < VT_MIN_SIMPLE)||(pRight->vt > VT_MAX_SIMPLE) + ){ das_error(DASERR_VAR, "Vector & Matrix operations not yet implemented"); return NULL; } diff --git a/das2/variable.h b/das2/variable.h index d033ba6..fc7bff7 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -37,17 +37,33 @@ extern "C" { #define D2V_MAX_VEC_LEN 4 enum var_type { - D2V_DATUM, D2V_SEQUENCE, D2V_ARRAY, D2V_UNARY_OP, D2V_BINARY_OP + D2V_CONST, D2V_SEQUENCE, D2V_ARRAY, D2V_UNARY_OP, D2V_BINARY_OP }; -#define MAP_0 0, (NULL) -#define MAP_1(I) 1, (int8_t[1]){I} -#define MAP_2(I,J) 2, (int8_t[2]){I,J} -#define MAP_3(I,J,K) 3, (int8_t[3]){I,J,K} -#define MAP_4(I,J,K,L) 4, (int8_t[4]){I,J,K,L} -#define MAP_5(I,J,K,L,M) 5, (int8_t[5]){I,J,K,L,M} -#define MAP_6(I,J,K,L,M,N) 6, (int8_t[6]){I,J,K,L,M,N} -#define MAP_7(I,J,K,L,M,N,O) 7, (int8_t[7]){I,J,K,L,M,N,O} +#ifdef _D +#error macro _D already defined, pick something else +#else +#define _D DEGEN +#endif + + +#define SCALAR_0 0, (NULL) +#define SCALAR_1(I) 1, (int8_t[DASIDX_MAX]){I,_D,_D,_D,_D,_D,_D,_D} +#define SCALAR_2(I,J) 2, (int8_t[DASIDX_MAX]){I,J,_D,_D,_D,_D,_D,_D} +#define SCALAR_3(I,J,K) 3, (int8_t[DASIDX_MAX]){I,J,K,_D,_D,_D,_D,_D} +#define SCALAR_4(I,J,K,L) 4, (int8_t[DASIDX_MAX]){I,J,K,L,_D,_D,_D,_D} +#define SCALAR_5(I,J,K,L,M) 5, (int8_t[DASIDX_MAX]){I,J,K,L,M,_D,_D,_D} +#define SCALAR_6(I,J,K,L,M,N) 6, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,_D,_D} +#define SCALAR_7(I,J,K,L,M,N,O) 7, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,O,_D} + +#define VEC_0(I) 0, (int8_t[DASIDX_MAX]){I,_D,_D,_D,_D,_D,_D,_D} +#define VEC_1(I,J) 1, (int8_t[DASIDX_MAX]){I,J,_D,_D,_D,_D,_D,_D} +#define VEC_2(I,J,K) 2, (int8_t[DASIDX_MAX]){I,J,K,_D,_D,_D,_D,_D} +#define VEC_3(I,J,K,L) 3, (int8_t[DASIDX_MAX]){I,J,K,L,_D,_D,_D,_D} +#define VEC_4(I,J,K,L,M) 4, (int8_t[DASIDX_MAX]){I,J,K,L,M,_D,_D,_D} +#define VEC_5(I,J,K,L,M,N) 5, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,_D,_D} +#define VEC_6(I,J,K,L,M,N,O) 6, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,O,_D} + /* Internal function for merging variable, and dimension shapes. Different * rules apply for arrays to variable shape merges. @@ -70,15 +86,6 @@ DAS_API ptrdiff_t das_varlength_merge(ptrdiff_t nLeft, ptrdiff_t nRight); #define D2V_EXP_SUBEX 0x08 #define D2V_EXP_INTR 0x10 -/** Enumeration of internal shape purposes. In the case below, vectors - * are simple cartesian vectors. Polar, cylindrical, dipole, etc. vectors - * are not considered - */ -typedef enum component_e { - D2V_CT_SCALAR=0, D2V_CT_STRING=1, D2V_CT_VECTOR=2, D2V_CT_MATRIX=3, - D2V_CT_UNKNOWN=9 -} component_t; - /** Set index printing direction. * * Switch printing of variable index order in _toStr() calls. Does not affect @@ -228,10 +235,20 @@ DAS_API void das_varindex_prndir(bool bFastLast); */ typedef struct das_variable{ enum var_type vartype; /* CONST, ARRAY, SEQUENCE, UNARY_OP, BINARY_OP ... */ - das_val_type vt; /* vtByte, vtText, vtTime ... */ - size_t vsize; /* The size in bytes of each value in the variable - * for strings this yields the unusual value of - * sizeof(void*) */ + das_val_type vt; /* vtByte, vtText, vtTime, vtVector ... */ + + size_t vsize; /* The size in bytes of each value in the variable + * for non-scalar items, this yields the unusual value + * of sizeof(void*) */ + + /* Position of the first internal index. Any array indices after + * this point will be considered to be internal indices and will not + * be reported in the shape function */ + int iFirstInternal; + + /* Position of the last index. All array indicies after this point + will be ignored, short circuiting loops */ + int iLastIndex; /* Since it is possible to create variables in all kinds of ways (not just * backing arrays) we have to have our own units storage location. @@ -245,16 +262,6 @@ typedef struct das_variable{ * deleted out from under us. */ int nRef; - /* Position of the first internal index. Any array indices after - * this point will be considered to be internal indices and will not - * be reported in the shape function */ - int iFirstInternal; - - /* Internal Rank of each item, set automatically by array inspection */ - /* int nIntrRank;*/ - - /* The purpose of internal dimensions, if any */ - component_t intrtype; /* Get identifier for this variable, may be NULL for anoymous vars */ const char* (*id)(const struct das_variable* pThis); @@ -400,30 +407,19 @@ DAS_API DasVar* new_DasVarBinary( /** Create a constant value on the heap * - * Constant variables ignore the given index value and always return the - * supplied constant. + * Wrap a constant value as a variable allowing for binary operations. + * + * When asked for it's length in an index dimension, constant variables + * report as "Function" of every index position if they are scalars. Otherwise + * the last index reports as the length of the vector or text string as appropriate. * * @param sId A short name for this constant, ex: 'c' for the speed of light * - * @param vt The element type for the constant, must a type with a known - * width. See new_DasVar_custConst() - * - * @param sz The size of the data value in bytes. This is ignored for types - * with a known size and can just be set to 0. If using the value - * type vtUnknown you will need to provide the value size - * - * @param val A pointer to the value which will be copied internally. This - * is efficient for items less than 32 bytes long, otherwise a - * malloc is issued. - * - * @param units The singleton unit string for this variable. + * @param pDatum A pointer to a datum to wrap. * * @memberof DasVar */ -DAS_API DasVar* new_DasConstant( - const char* sId, das_val_type vt, size_t sz, const void* val, int nDsRank, - das_units units -); +DAS_API DasVar* new_DasConstant(const char* sId, const das_datum* pDm); /** Create a simple linear sequence variable @@ -524,21 +520,26 @@ DAS_API DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap); * * @param pAry The array which contains data values * - * @param pMap The mappind from dataset index positions to array index positions. - * The last index of the map is automatically taken to be the vector - * index and must be of fixed positive length greater then 0. + * @param iInternal,pMap use VEC_1(I,J), VEC_2(I,J,K) etc. macros to assign the + * mapping of the backing array to vector values * * @param sFrame A named coordinate frame for the vector. If two vectors have * different coordinate frames, they cannot be the subject of * binary operations. Cannot be NULL. * + * @param nFrameId The integer id of this frame. GeoVec datums only store + * the frame ID, not the name for faster comparisons + * + * @param frametype The lower byte of DasFrame.flags + * * @param pDir A mapping between coordinate directions and the components * of each vector, may be NULL. * * @param nDirs The number of directions in the vector direction map, can be 0 */ DAS_API DasVar* new_DasVarVecAry( - DasAry* pAry, int8_t* pMap, const char* sFrame, byte* pDir, byte nDirs + DasAry* pAry, int iFirstInternal, int8_t* pMap, const char* sFrame, + byte nFrameId, byte frametype, byte nDirs, const byte* pDir ); /** Increment the reference count on a variable */ @@ -662,11 +663,6 @@ DAS_API int DasVar_shape(const DasVar* pThis, ptrdiff_t* pShape); */ DAS_API int DasVar_intrShape(const DasVar* pThis, ptrdiff_t* pShape); -/** Get the internal type of a variable. - * - * @returns the internal type, which is D2V_CT_SCALAR (0) for scalars - */ -DAS_API component_t DasVar_intrType(const DasVar* pThis); /** Return the current max value index value + 1 for any partial index * @@ -748,7 +744,7 @@ DAS_API bool DasVar_isNumeric(const DasVar* pThis); * pointer to the appropriate type and difference it to get the value. * @memberof DasVar */ -DAS_API bool DasVar_getDatum( +DAS_API bool DasVar_get( const DasVar* pThis, ptrdiff_t* pIdx, das_datum* pDatum ); diff --git a/das2/vector.c b/das2/vector.c new file mode 100644 index 0000000..05178f0 --- /dev/null +++ b/das2/vector.c @@ -0,0 +1,87 @@ +/* Copyright (C) 2024 Chris Piker + * + * This file used to be named parsetime.c. It is part of das2C, the Core + * Das2 C Library. + * + * das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with libdas2; if not, see . + */ + +#define _POSIX_C_SOURCE 200112L + +#include "vector.h" + + +DasErrCode das_geovec_init( + das_geovec* pVec, const byte* pData, byte frame, byte ftype, + byte et, byte esize, byte ncomp, const byte* pDirs +){ + + pVec->frame = frame; + pVec->ftype = ftype; + pVec->esize = das_vt_size(et); + pVec->ncomp = ncomp; + + if((ncomp < 1)||(ncomp > 3)) + return das_error(DASERR_VEC, "Geometric vectors must have 1 to 3 components"); + + // Set the data + switch(et){ + case vtByte: + for(int i = 0; (i < ncomp)&&(i<3); ++i){ + ((byte*)(pVec->comp))[i] = pData[i]; + pVec->dirs[i] = pDirs[i]; + } + break; + case vtUShort: + for(int i = 0; (i < ncomp)&&(i<3); ++i){ + ((uint16_t*)(pVec->comp))[i] = ((uint16_t*)pData)[i]; + pVec->dirs[i] = pDirs[i]; + } + break; + case vtShort: + for(int i = 0; (i < ncomp)&&(i<3); ++i){ + ((int16_t*)(pVec->comp))[i] = ((int16_t*)pData)[i]; + pVec->dirs[i] = pDirs[i]; + } + break; + case vtInt: + for(int i = 0; (i < ncomp)&&(i<3); ++i){ + ((int32_t*)(pVec->comp))[i] = ((int32_t*)pData)[i]; + pVec->dirs[i] = pDirs[i]; + } + break; + case vtLong: + for(int i = 0; (i < ncomp)&&(i<3); ++i){ + ((int64_t*)(pVec->comp))[i] = ((int64_t*)pData)[i]; + pVec->dirs[i] = pDirs[i]; + } + break; + case vtFloat: + for(int i = 0; (i < ncomp)&&(i<3); ++i){ + ((float*)(pVec->comp))[i] = ((float*)pData)[i]; + pVec->dirs[i] = pDirs[i]; + } + break; + case vtDouble: + for(int i = 0; (i < ncomp)&&(i<3); ++i){ + ((double*)(pVec->comp))[i] = ((double*)pData)[i]; + pVec->dirs[i] = pDirs[i]; + } + break; + default: + return das_error(DASERR_VEC, "Invalid element type for vector %d", et); + } + pVec->et = et; + + return DASERR_VEC; +} diff --git a/das2/vector.h b/das2/vector.h new file mode 100644 index 0000000..b740735 --- /dev/null +++ b/das2/vector.h @@ -0,0 +1,72 @@ +/* Copyright (C) 2024 Chris Piker + * + * This file is part of das2C, the Core Das C Library. + * + * Das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with Das2C; if not, see . + */ + +/** @file vector.h Geometric vectors, other vector types may be added */ + +#ifndef _vector_h_ +#define _vector_h_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** Holds a geometric vector of some sort + * + * This structure is tied in with DasFrame an is ment to hold one vector + * from a frame, with components in the same order as provided in the + * backing DasAry that is managed by a DasVarVecAry. + */ +typedef struct das_geovec_t{ + + /* The vector values if local */ + double comp[3]; + + /* The ID of the vector frame, or 0 if unknown */ + byte frame; + + /* Frame type copied from Frame Descrptor */ + byte ftype; + + /* the element value type, taken from das_val_type */ + byte et; + + /* the size of each element, in bytes, copied in from das_vt_size */ + byte esize; + + /* Number of valid components */ + byte ncomp; + + /* Direction for each component, storred in nibbles */ + byte dirs[3]; + +} das_geovec; + +DasErrCode das_geovec_init( + das_geovec* pVec, const byte* pData, byte frame, byte ftype, + byte et, byte esize, byte ncomp, const byte* pDirs +); + +#define das_geovec_eltype(p) (p->vt & 0x0F) + + +#ifdef __cplusplus +} +#endif + +#endif /* _vector_h_ */ \ No newline at end of file diff --git a/test/TestAuth.c b/test/TestAuth.c index 6a1479c..08632be 100644 --- a/test/TestAuth.c +++ b/test/TestAuth.c @@ -51,8 +51,8 @@ void sim_plot_1d(const DasDs* pDs) for(dasds_iter_init(&iter, pDs); !iter.done; dasds_iter_next(&iter)) { - DasVar_getDatum(pVarX, iter.index, pair); - DasVar_getDatum(pVarY, iter.index, pair + 1); + DasVar_get(pVarX, iter.index, pair); + DasVar_get(pVarY, iter.index, pair + 1); das_datum_toStr(pair, sBufX, 128, 3); das_datum_toStr(pair + 1, sBufY, 128, 3); @@ -99,9 +99,9 @@ void sim_plot_2d(const DasDs* pDs) for(dasds_iter_init(&iter, pDs); !iter.done; dasds_iter_next(&iter)) { - DasVar_getDatum(pVarX, iter.index, set); - DasVar_getDatum(pVarY, iter.index, set + 1); - DasVar_getDatum(pVarZ, iter.index, set + 2); + DasVar_get(pVarX, iter.index, set); + DasVar_get(pVarY, iter.index, set + 1); + DasVar_get(pVarZ, iter.index, set + 2); das_datum_toStr(set, sBufX, 128, 3); das_datum_toStr(set + 1, sBufY, 128, 3); diff --git a/test/TestVariable.c b/test/TestVariable.c index 8dd843d..5e8957b 100644 --- a/test/TestVariable.c +++ b/test/TestVariable.c @@ -5987,7 +5987,7 @@ int main(int argc, char** argv) /* Exit on errors, log info messages and above */ das_init(argv[0], DASERR_DIS_EXIT, 0, DASLOG_INFO, NULL); - printf("Test 0: Setup Variables...\n"); + fprintf(stderr, "Test 0: Setup Variables...\n"); /* Define all the variables in a rank 3 index space with shape (3, 160, 80). * @@ -6007,8 +6007,8 @@ int main(int argc, char** argv) DasAry_append(aTime, (const byte*)(&dt), 1); } - DasVar* vTime = new_DasVarArray(aTime, MAP_3(0, DEGEN, DEGEN)); - printf(" %s\n\n", DasVar_toStr(vTime, sBuf, 511)); + DasVar* vTime = new_DasVarArray(aTime, SCALAR_3(0, DEGEN, DEGEN)); + fprintf(stderr, " %s\n\n", DasVar_toStr(vTime, sBuf, 511)); /* Axis 1: Corresponds to each radar pulse */ /* - Pulse Frequency */ @@ -6017,17 +6017,17 @@ int main(int argc, char** argv) ); DasAry_append(aFreq, (const byte*)g_aFreq, 160); - DasVar* vFreq = new_DasVarArray(aFreq, MAP_3(DEGEN, 0, DEGEN)); - printf(" %s\n\n", DasVar_toStr(vFreq, sBuf, 511)); + DasVar* vFreq = new_DasVarArray(aFreq, SCALAR_3(DEGEN, 0, DEGEN)); + fprintf(stderr, " %s\n\n", DasVar_toStr(vFreq, sBuf, 511)); /* - Pulse repetition times */ double rMin = 0.0; double rDelta = 7.86; units = Units_fromStr("ms"); DasVar* vPulseOffset = new_DasVarSeq( - "pulse_offest", vtDouble, 0, &rMin, &rDelta, MAP_3(DEGEN,0,DEGEN), units + "pulse_offest", vtDouble, 0, &rMin, &rDelta, SCALAR_3(DEGEN,0,DEGEN), units ); - printf(" %s\n\n", DasVar_toStr(vPulseOffset, sBuf, 511)); + fprintf(stderr, " %s\n\n", DasVar_toStr(vPulseOffset, sBuf, 511)); /* Axis 3: Corresponds to each echo sample */ /* - Delay time calculation from AISDS.CAT */ @@ -6035,9 +6035,9 @@ int main(int argc, char** argv) rDelta = 91.4286; units = Units_fromStr("microsecond"); DasVar* vDelay = new_DasVarSeq( - "echo_delay", vtDouble, 0, &rMin, &rDelta, MAP_3(DEGEN, DEGEN, 0), units + "echo_delay", vtDouble, 0, &rMin, &rDelta, SCALAR_3(DEGEN, DEGEN, 0), units ); - printf(" %s\n\n", DasVar_toStr(vDelay, sBuf, 511)); + fprintf(stderr, " %s\n\n", DasVar_toStr(vDelay, sBuf, 511)); /* - Apparent range, calculated from above + speed of light */ const double C = 299792458.0 * 1.0e-9; /* in km/microsecond */ @@ -6045,9 +6045,9 @@ int main(int argc, char** argv) rDelta = 91.4286 * 0.5 * C; units = Units_fromStr("km"); DasVar* vRange = new_DasVarSeq( - "range", vtDouble, 0, &rMin, &rDelta, MAP_3(DEGEN,DEGEN,0), units + "range", vtDouble, 0, &rMin, &rDelta, SCALAR_3(DEGEN,DEGEN,0), units ); - printf(" %s\n\n", DasVar_toStr(vRange, sBuf, 511)); + fprintf(stderr, " %s\n\n", DasVar_toStr(vRange, sBuf, 511)); /* Axis 0,1,2: Echo returns */ units = Units_fromStr("V**2 m**-2 Hz**-1"); @@ -6056,72 +6056,72 @@ int main(int argc, char** argv) DasAry* aEcho = new_DasAry("echo",vtFloat,0, pFill, RANK_3(0,160,80), units); DasAry_append(aEcho, (const byte*)g_aAmp, 3*160*80); - DasVar* vEcho = new_DasVarArray(aEcho, MAP_3(0, 1, 2)); - printf(" %s\n\n", DasVar_toStr(vEcho, sBuf, 511)); + DasVar* vEcho = new_DasVarArray(aEcho, SCALAR_3(0, 1, 2)); + fprintf(stderr, " %s\n\n", DasVar_toStr(vEcho, sBuf, 511)); /* Axis 0,2: Pulse time, via variable math. Mapping handled automatially */ DasVar* vPulseTime = new_DasVarBinary("pulse_time", vTime, "+", vPulseOffset); - printf(" %s\n\n", DasVar_toStr(vPulseTime, sBuf, 511)); + fprintf(stderr, " %s\n\n", DasVar_toStr(vPulseTime, sBuf, 511)); /* Axis 0,2: Apparent altitude of echo via variable math */ units = Units_fromStr(g_sMexAlt); DasAry* aMexAlt = new_DasAry("mex_alt",vtFloat,0, pFill, RANK_1(0), units); DasAry_append(aMexAlt, (const byte*)g_aMexAlt, 3); - DasVar* vMexAlt = new_DasVarArray(aMexAlt, MAP_3(0, DEGEN, DEGEN)); + DasVar* vMexAlt = new_DasVarArray(aMexAlt, SCALAR_3(0, DEGEN, DEGEN)); DasVar* vAppAlt = new_DasVarBinary("app_alt", vMexAlt, "-", vRange); - printf(" %s\n\n", DasVar_toStr(vAppAlt, sBuf, 511)); + fprintf(stderr, " %s\n\n", DasVar_toStr(vAppAlt, sBuf, 511)); /* slice testing ..... */ /* Get all the apparent echo values for a since frequency from a single */ /* Pulse */ - printf("Test 1: (SeqVar) Slice apparent altitude on Freq 0...\n"); + fprintf(stderr, "Test 1: (SeqVar) Slice apparent altitude on Freq 0...\n"); DasAry* aSlice = DasVar_subset(vAppAlt, RNG_3(0,3, 0,1, 0,80)); print_reals(aSlice,stdout,20,"%4.0f"); dec_DasAry(aSlice); aSlice = NULL; /* Done with array, dec reference count */ - printf("Test 2: (SeqVar) Slice apparent altitude on Range 79\n"); + fprintf(stderr, "Test 2: (SeqVar) Slice apparent altitude on Range 79\n"); aSlice = DasVar_subset(vAppAlt, RNG_3(0,3, 0,160, 79,80)); print_reals(aSlice,stdout,20,"%4.0f"); dec_DasAry(aSlice); aSlice = NULL; - printf("Test 3: (SeqVar) Slice apparent altitude on Range 79, Freq 159\n"); + fprintf(stderr, "Test 3: (SeqVar) Slice apparent altitude on Range 79, Freq 159\n"); aSlice = DasVar_subset(vAppAlt, RNG_3(0,3, 159,160, 79,80)); print_reals(aSlice,stdout,20,"%4.0f"); dec_DasAry(aSlice); aSlice = NULL; - printf("Test 4: (BinaryOpVar) First 4 pulse times for each ionogram\n"); + fprintf(stderr, "Test 4: (BinaryOpVar) First 4 pulse times for each ionogram\n"); aSlice = DasVar_subset(vPulseTime, RNG_3(0,3, 0,4, 0,1 )); print_times(aSlice, stdout, 4, 6); dec_DasAry(aSlice); aSlice = NULL; - printf("Test 5: (AryVar) Direct subset test, 1 set of echos\n"); + fprintf(stderr, "Test 5: (AryVar) Direct subset test, 1 set of echos\n"); aSlice = DasVar_subset(vEcho, RNG_3(1,2, 1,2, 0,80)); print_reals(aSlice,stdout,10,"%0.2e"); dec_DasAry(aSlice); aSlice = NULL; - printf("\n"); + fprintf(stderr, "\n"); - printf("Test 6: (AryVar) Strided subset test, last echo from each pulse\n"); + fprintf(stderr, "Test 6: (AryVar) Strided subset test, last echo from each pulse\n"); aSlice = DasVar_subset(vEcho, RNG_3(0,3, 0,160, 79,80)); print_reals(aSlice,stdout,10,"%0.2e"); dec_DasAry(aSlice); aSlice = NULL; /* Failure mode tests */ - printf("\n\n**** Error disposition to 'continue', checking error handling ****\n\n"); + fprintf(stderr, "\n\n**** Error disposition to 'continue', checking error handling ****\n\n"); das_return_on_error(); - printf("Test 7: Bad ranks\n"); + fprintf(stderr, "Test 7: Bad ranks\n"); aSlice = DasVar_subset(vEcho, RNG_1(0,3)); if(aSlice != NULL) return 7; aSlice = DasVar_subset(vDelay, RNG_1(0,3)); if(aSlice != NULL) return 7; aSlice = DasVar_subset(vAppAlt, RNG_1(0,3)); if(aSlice != NULL) return 7; - printf("\n"); + fprintf(stderr, "\n"); - printf("Test8: Try for single value output\n"); + fprintf(stderr, "Test8: Try for single value output\n"); aSlice = DasVar_subset(vEcho, RNG_3(0,1, 0,1, 0,1)); if(aSlice != NULL) return 7; aSlice = DasVar_subset(vDelay, RNG_3(0,1, 0,1, 0,1)); @@ -6129,11 +6129,11 @@ int main(int argc, char** argv) aSlice = DasVar_subset(vAppAlt, RNG_3(0,1, 0,1, 0,1)); if(aSlice != NULL) return 7; - printf("Test8: Bad ranges\n"); + fprintf(stderr, "Test9: Bad ranges\n"); aSlice = DasVar_subset(vEcho, RNG_3(0,1, 0,1000, 0,1)); if(aSlice != NULL) return 7; /* should not work, runs off end of array */ - printf("\n**** Error disposition reverting to 'fail immediately' ****\n"); + fprintf(stderr, "\n**** Error disposition reverting to 'fail immediately' ****\n"); das_exit_on_error(); aSlice = DasVar_subset(vDelay, RNG_3(0,1, 0,1000, 0,1)); @@ -6148,10 +6148,75 @@ int main(int argc, char** argv) dec_DasAry(aSlice); aSlice = NULL; - /* Test vector variables */ + /* Test text variables */ + fprintf(stderr, "Test10: String variables\n" ); + DasAry* aEvents = new_DasAry("events", vtByte, 0, NULL, RANK_2(0,0), NULL); + DasAry_setUsage(aEvents, D2ARY_AS_STRING); + + DasVar* vEvents = new_DasVarArray(aEvents, VEC_1(0, 1)); + + if(DasVar_isNumeric(vEvents)){ + fprintf(stderr, "Error, string array taken a numeric"); + return 10; + } + + const char* s[4] = { + "something happened", + "then something else", + "now it causes trouble", + "now it doesn't" + }; + + for(int i = 0; i < 4; ++i){ + DasAry_append(aEvents, (const byte*)s, strlen(s[i]) + 1); + DasAry_markEnd(aEvents, DIM1); + } + + das_datum dm; + DasVar_get(vEvents, IDX0(1), &dm); + const char* sLine = (const char*)&dm; + if(strcmp(sLine, s[1]) != 0){ + fprintf(stderr, "Error, input line didn't equal output line"); + return 10; + } + + /* Test 11: Vector variables */ + uint16_t level1Vecs[][4] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; + + DasAry* aVecs = new_DasAry("level1", vtUShort, 0, NULL, RANK_2(0,3), NULL); + DasAry_append(aVecs, (const byte*)level1Vecs, 12); + + DasVar* vL1Vecs = new_DasVarVecAry( + aVecs, VEC_1(0, 1), "gsm", 99, DASFRM_CARTESIAN, 3, (const byte*)(byte[3]){0,2,1} + ); + + DasVar_get(vL1Vecs, IDX0(2), &dm); + + if(dm.vt != vtGeoVec){ + fprintf(stderr, "Error, output is not a geometric vector"); + return 11; + } + if(dm.vsize != das_vt_size(vtGeoVec)){ + fprintf(stderr, "Error, vector datum value size error"); + return 11; + } + das_geovec* pVec = (das_geovec*)&dm; + if((pVec->ncomp != 3)||(pVec->frame != 99)||(pVec->et != vtUShort) + ||(pVec->esize != 2) /* Known size for ushort */ + ||(pVec->dirs[0] != 0)||(pVec->dirs[1] != 2)||(pVec->dirs[2] != 1) + ||(pVec->ftype != DASFRM_CARTESIAN)){ + fprintf(stderr, "Error, vector metadata failure"); + return 11; + } + + uint16_t* pVal = (uint16_t*)&dm; // notice values are always at the base of datum! + if((pVal[0] != 7)||(pVal[1] != 8)||(pVal[0] != 9)){ + fprintf(stderr, "Error, vector value failure"); + return 11; + } - printf("\nGood! All errors found and no false positives.\n"); + fprintf(stderr, "\nGood! All errors found and no false positives.\n"); return 0; } diff --git a/test/sizeof.c b/test/sizeof.c new file mode 100644 index 0000000..f356f9c --- /dev/null +++ b/test/sizeof.c @@ -0,0 +1,128 @@ +/* Test structure padding */ + +#include +#include + +typedef uint8_t byte; +typedef uint16_t ushort; + +typedef struct das_time_new_t{ + + /** Calendar month number, 1 = January */ + int8_t month; + + /** Hour of day, range is 0 to 23 */ + int8_t hour; + + /** Minute of the hour, range 0 to 59 */ + int8_t minute; + + /** Calender Day of month, starts at 1 */ + int8_t mday; + + /** Calendar year number, cannot hold years before 1 AD */ + int16_t year; + + /** Integer Day of year, Jan. 1st = 1. + * This field is output only for most Das1 functions see the + * warning in dt_tnorm() */ + int16_t yday; + + /** Second of the minute, range 0.0 to 60.0 - epsilon. + * Note, there is no provision for leap seconds in the library. All + * minutes are assumed to have 60 seconds. + */ + double second; + +} das_time_new; + +typedef struct das_time_t{ + + /** Calendar year number, cannot hold years before 1 AD */ + int year; + + /** Calendar month number, 1 = January */ + int month; + + /** Calender Day of month, starts at 1 */ + int mday; + + /** Integer Day of year, Jan. 1st = 1. + * This field is output only for most Das1 functions see the + * warning in dt_tnorm() */ + int yday; + + /** Hour of day, range is 0 to 23 */ + int hour; + + /** Minute of the hour, range 0 to 59 */ + int minute; + + /** Second of the minute, range 0.0 to 60.0 - epsilon. + * Note, there is no provision for leap seconds in the library. All + * minutes are assumed to have 60 seconds. + */ + double second; + +} das_time; + + +/* +typedef struct quantity_s { + byte value[32]; / * 32 bytes * / + ushort qinfo[4]; / * 8 bytes (40) * / + void* units; / * 4 or 8 bytes (44, 48) * / +} quantity; +*/ + +typedef struct datum_t { + byte bytes[32]; /* 32 bytes of space */ + byte vt; + byte vsize; + const char* units; +} das_datum; + +typedef struct das_vector_t{ + + /* The vector values if local */ + double comp[3]; + + /* The ID of the vector frame, or 0 if unknown */ + byte frame; + + /* Frame type copied from Frame Descrptor */ + byte ft; + + /* the element type, taken from das_val_type */ + byte et; + + /* the size of each elemnt, in bytes, copied from das_vt_size */ + byte elsz; + + /* Number of valid components */ + byte ncomp; + + /* Direction for each component */ + byte dirs[3]; + +} das_vector; + +// Little endian +// 01234567 01234567 +// +--------+--------+ +// |[vt][ct]|[esz]rrp| +// +--------+--------+ +// vt = Element type --> 4 bits 21 ~ 3 bytes +// ct = Composite type --> 4 bits +// element size --> 5 bits +// RR = Rank (up to 3-D) --> 2 bits +// P = Value contains pointer. -> 1 bit + +int main(int argc, char** argv) +{ + printf("sizeof(das_datum) = %zu\n", sizeof(das_datum)); + printf("sizeof(das_vector) = %zu\n", sizeof(das_vector)); + printf("sizeof(das_time) = %zu\n", sizeof(das_time)); + printf("sizeof(das_time) = %zu\n", sizeof(das_time_new)); + return 0; +} \ No newline at end of file diff --git a/test/tag_test.dNt b/test/tag_test.dNt index a0b2739..dd1c0e8 100644 --- a/test/tag_test.dNt +++ b/test/tag_test.dNt @@ -1,7 +1,7 @@ |Sx||454| -

Magnetic Field Components in the SCSE Frame from FGM

+

Magnetic Field Components in the Lab Frame from VMRS

SCET (UTC)

60

linear

@@ -9,6 +9,16 @@

(1.0 minute Averages)

das2_bin_avgsec

+ + +

Room 601 Coordinates

+

+ For the 601 lab, Z is taken to be up, +X is towards the east wall and + +Y is towards the north wall. Zero is at the inner southwest corner. +

+
+ + |Hx|1|749| From 78f83895b0f19d540b3504e82fe828e39a93a30f Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Wed, 31 Jan 2024 00:22:57 -0600 Subject: [PATCH 11/40] Variables with internal structure pass unit tests --- das2/datum.c | 2 +- das2/datum.h | 2 + das2/value.h | 12 +- das2/variable.c | 285 ++++++++++++++++++++------------------------ das2/variable.h | 123 ++++++++++++------- das2/vector.c | 2 +- test/TestVariable.c | 42 ++++--- 7 files changed, 240 insertions(+), 228 deletions(-) diff --git a/das2/datum.c b/das2/datum.c index 03a6698..34ab56b 100644 --- a/das2/datum.c +++ b/das2/datum.c @@ -89,7 +89,7 @@ bool das_datum_fromStr(das_datum* pDatum, const char* sStr) sBuf[ pRead - sStr] = '\0'; if(dt_parsetime(sBuf, &dt) ){ pDatum->units = UNIT_UTC; - memcpy(pDatum->bytes, &dt, DATUM_BUF_SZ); + memcpy(pDatum->bytes, &dt, sizeof(das_time)); pDatum->vt = vtTime; return true; } diff --git a/das2/datum.h b/das2/datum.h index 0650d6c..d1bbd78 100644 --- a/das2/datum.h +++ b/das2/datum.h @@ -201,6 +201,8 @@ DAS_API bool das_datum_toEpoch( const das_datum* pThis, das_units epoch, double* pResult ); +#define das_datum_asStr(dm) *((char**)&dm) + /** @} */ #ifdef __cplusplus diff --git a/das2/value.h b/das2/value.h index ba0c0d4..8b61eea 100644 --- a/das2/value.h +++ b/das2/value.h @@ -51,7 +51,7 @@ typedef struct das_byteseq_t{ #define VT_MIN_SIMPLE vtByte -#define VT_MAX_SIMPLE vtDouble +#define VT_MAX_SIMPLE vtTime /** Enumeration of types stored in Das Array (DasAry) objects * Note that any kind of value may be stored in a Das Array, but most of these @@ -88,14 +88,14 @@ typedef enum das_val_type_e { /** Indicates array values are 64-bit floating point values (doubles) */ vtDouble = 7, - /* VT_MAX_SIMPLE = vtDouble */ + /** Indicates array values are das_time_t structures */ + vtTime = 8, + + /* VT_MAX_SIMPLE = vtTime */ /* The following type is not used by datums, but by array indexing elements * that track the size and location of child dimensions */ - vtIndex = 8, - - /** Indicates array values are das_time_t structures */ - vtTime = 9, + vtIndex = 9, /* The following two types are only used by variables and datums * diff --git a/das2/variable.c b/das2/variable.c index 3dcd472..9b30b08 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -221,14 +221,14 @@ iLetter = iFirst - i - 1 (first fastest) */ char* das_shape_prnRng( - ptrdiff_t* pShape, int iFirstInternal, int nShapeLen, char* sBuf, int nBufLen + ptrdiff_t* pShape, int nExtRank, int nShapeLen, char* sBuf, int nBufLen ){ memset(sBuf, 0, nBufLen); /* Insure null termination where ever I stop writing */ int nUsed = 0; int i; - for(i = 0; i < iFirstInternal; ++i) + for(i = 0; i < nExtRank; ++i) if(pShape[i] != DASIDX_UNUSED) ++nUsed; if(nUsed == 0) return sBuf; @@ -246,10 +246,10 @@ char* das_shape_prnRng( bool bAnyWritten = false; i = 0; - int iEnd = iFirstInternal; + int iEnd = nExtRank; int iLetter = 0; if(!g_bFastIdxLast){ - i = iFirstInternal - 1; + i = nExtRank - 1; iEnd = -1; } @@ -307,8 +307,8 @@ char* _DasVar_prnRange(const DasVar* pThis, char* sBuf, int nLen) ptrdiff_t aShape[DASIDX_MAX]; pThis->shape(pThis, aShape); - int iInternal = pThis->iFirstInternal; - return das_shape_prnRng(aShape, iInternal, iInternal, sBuf, nLen); + int nExtRank = pThis->nExtRank; + return das_shape_prnRng(aShape, nExtRank, nExtRank, sBuf, nLen); } /* Printing internal structure information, here's some examples @@ -320,8 +320,8 @@ char* _DasVar_prnIntr( const DasVar* pThis, const char* sFrame, byte* pFrmDirs, byte nFrmDirs, char* sBuf, int nBufLen ){ - /* If my first internal index is > last index, print nothing */ - if(pThis->iLastIndex < pThis->iFirstInternal) + /* If I have no internal structure, print nothing */ + if(pThis->nIntRank == 0) return sBuf; memset(sBuf, 0, nBufLen); /* Insure null termination where ever I stop writing */ @@ -329,7 +329,7 @@ char* _DasVar_prnIntr( ptrdiff_t aShape[DASIDX_MAX]; pThis->shape(pThis, aShape); - int iBeg = pThis->iFirstInternal; // First dir to write + int iBeg = pThis->nExtRank; // First dir to write int iEnd = iBeg; // one after (or before) first dir to write while((iEnd < (DASIDX_MAX - 1))&&(aShape[iEnd] != DASIDX_UNUSED)) ++iEnd; @@ -550,10 +550,10 @@ bool DasConstant_isFill(const DasVar* pBase, const byte* pCheck, das_val_type vt DasAry* DasConstant_subset( const DasVar* pBase, int nRank, const ptrdiff_t* pMin, const ptrdiff_t* pMax ){ - if(nRank != pBase->iFirstInternal){ + if(nRank != pBase->nExtRank){ das_error( DASERR_VAR, "External variable is rank %d, but subset specification " - "is rank %d", pBase->iFirstInternal, nRank + "is rank %d", pBase->nExtRank, nRank ); return NULL; } @@ -604,11 +604,12 @@ DasVar* new_DasConstant(const char* sId, const das_datum* pDm) pThis->base.units = pDm->units; pThis->base.nRef = 1; - pThis->base.iLastIndex = DASIDX_MAX - 1; - if((pDm->vt == vtText)||(pDm->vt == vtGeoVec)||(pDm->vt == vtByteSeq)) - pThis->base.iFirstInternal = DASIDX_MAX; - else - pThis->base.iFirstInternal = DASIDX_MAX - 1; + pThis->base.nIntRank = 0; + if((pDm->vt == vtText)||(pDm->vt == vtGeoVec)||(pDm->vt == vtByteSeq)){ + pThis->base.nIntRank = 1; + } + + pThis->base.nExtRank = DASIDX_MAX - pThis->base.nIntRank; pThis->base.id = DasConstant_id; pThis->base.shape = DasConstant_shape; @@ -691,7 +692,7 @@ int DasVarAry_shape(const DasVar* pBase, ptrdiff_t* pShape) int iAryIdx = -1; int nRank = 0; - for(int iVarIdx = 0; iVarIdx < pBase->iFirstInternal; ++iVarIdx){ + for(int iVarIdx = 0; iVarIdx < pBase->nExtRank; ++iVarIdx){ if(pThis->idxmap[iVarIdx] == DASIDX_UNUSED) continue; @@ -715,35 +716,23 @@ int DasVarAry_intrShape(const DasVar* pBase, ptrdiff_t* pShape) assert(pBase->vartype == D2V_ARRAY); DasVarArray* pThis = (DasVarArray*)pBase; - for(int i = 0; i < DASIDX_MAX; ++i) pShape[i] = DASIDX_UNUSED; + int i; + for(i = 0; i < DASIDX_MAX; ++i) + pShape[i] = DASIDX_UNUSED; ptrdiff_t aShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; int nAryRank = DasAry_shape(pThis->pAry, aShape); - int iAryIdx = -1; - int nIntrRank = 0; - - // Gaps are not allowed after the first internal index, so the first - // unused item we see, stops iteration - int iInternal = 0; - for( - int iVarIdx = pBase->iFirstInternal; - (iVarIdx < DASIDX_MAX) && (pThis->idxmap[iVarIdx] != DASIDX_UNUSED); - ++iVarIdx - ){ - - iAryIdx = pThis->idxmap[iVarIdx]; - if(iAryIdx >= nAryRank){ - das_error(DASERR_VAR, "Invalid index map detected, max array index" - " is %d, lookup index is %d", nAryRank - 1, iAryIdx); - return -1; - } + + int j = 0; + for(i = pBase->nExtRank; i < (pBase->nExtRank + pBase->nIntRank); ++i){ - /* Any particular array point may be marked as ragged and that's okay */ - pShape[iInternal] = aShape[iAryIdx]; - ++nIntrRank; - ++iInternal; + assert(j < nAryRank); + + pShape[j] = pThis->idxmap[i]; + ++j; } - return nIntrRank; + + return pBase->nIntRank; } /* This one is tough. What is my shape in a particular index given all @@ -830,7 +819,7 @@ bool DasVarAry_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) ptrdiff_t pAryLoc[DASIDX_MAX] = DASIDX_INIT_BEGIN; int nDim = 0; - for(int i = 0; i < pBase->iFirstInternal; ++i){ + for(int i = 0; i < pBase->nExtRank; ++i){ if(pThis->idxmap[i] >= 0){ /* all the wierd flags are less than 0 */ pAryLoc[ pThis->idxmap[i] ] = pLoc[i]; ++nDim; @@ -838,17 +827,18 @@ bool DasVarAry_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) } das_val_type vtAry = DasAry_valType(pThis->pAry); - - int nIntrRank = (pBase->iLastIndex - pBase->iFirstInternal) + 1; /* If my last index >= first internal, use getIn*/ - if(nIntrRank == 0){ + if(pBase->nIntRank == 0){ const byte* ptr = DasAry_getAt(pThis->pAry, pBase->vt, pAryLoc); if(pBase->vsize > DATUM_BUF_SZ) return false; assert(pBase->vsize <= DATUM_BUF_SZ); memcpy(pDatum, ptr, pBase->vsize); + pDatum->vt = vtAry; + pDatum->vsize = das_vt_size(vtAry); + pDatum->units = pBase->units; } - else if(nIntrRank == 1){ + else if(pBase->nIntRank == 1){ size_t uCount = 1; const byte* ptr = DasAry_getIn(pThis->pAry, vtByte, nDim, pAryLoc, &uCount); if(ptr == NULL) return false; @@ -859,7 +849,7 @@ bool DasVarAry_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) pDatum->vt = vtText; pDatum->vsize = das_vt_size(vtText); pDatum->units = pBase->units; - memcpy(pDatum->bytes, &ptr, sizeof(const byte*)); + memcpy(pDatum, &ptr, sizeof(const byte*)); } else{ das_byteseq bs; @@ -867,7 +857,7 @@ bool DasVarAry_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) pDatum->vsize = sizeof(das_byteseq); bs.ptr = ptr; bs.sz = uCount; - memcpy(pDatum->bytes, &bs, sizeof(das_byteseq)); + memcpy(pDatum, &bs, sizeof(das_byteseq)); } } else{ @@ -922,7 +912,7 @@ bool _DasVarAry_canStride( int iFirstRagged = -1; int iLoc; - int nVarRank = pThis->base.iFirstInternal; + int nVarRank = pThis->base.nExtRank; for(d = 0; d < nVarRank; ++d){ if(pThis->idxmap[d] == DASIDX_UNUSED) continue; @@ -954,7 +944,7 @@ DasAry* _DasVarAry_strideSubset( if(!_DasVarAry_canStride(pThis, pMin, pMax)) return NULL; - int nVarRank = pThis->base.iFirstInternal; + int nVarRank = pThis->base.nExtRank; size_t elSz = pThis->base.vsize; /* Allocate the output array and get a pointer to the memory */ @@ -1145,7 +1135,7 @@ DasAry* _DasVarAry_directSubset( ptrdiff_t aAryMax[DASIDX_MAX]; ptrdiff_t nSz; int iDim; - for(iDim = 0; iDim < pThis->base.iFirstInternal; ++iDim){ + for(iDim = 0; iDim < pThis->base.nExtRank; ++iDim){ nSz = pMax[iDim] - pMin[iDim]; if(pThis->idxmap[iDim] == DASIDX_UNUSED){ if(nSz != 1) @@ -1209,7 +1199,7 @@ DasAry* _DasVarAry_slowSubset( /* Allocate the output array and get a pointer to the memory */ size_t aSliceShape[DASIDX_MAX] = DASIDX_INIT_BEGIN; - int nVarRank = pThis->base.iFirstInternal; + int nVarRank = pThis->base.nExtRank; das_val_type vtEl = pThis->base.vt; size_t uSzEl = pThis->base.vsize; const byte* pFill = DasAry_getFill(pThis->pAry); @@ -1271,10 +1261,10 @@ DasAry* DasVarAry_subset( ){ const DasVarArray* pThis = (DasVarArray*)pBase; - if(nRank != pBase->iFirstInternal){ + if(nRank != pBase->nExtRank){ das_error( DASERR_VAR, "External variable is rank %d, but subset specification " - "is rank %d", pBase->iFirstInternal, nRank + "is rank %d", pBase->nExtRank, nRank ); return NULL; } @@ -1346,13 +1336,13 @@ char* _DasVarAry_intrExpress( if(nLen < 2) return pWrite; int nRank = 0; - for(int i = 0; i < pBase->iFirstInternal; i++){ + for(int i = 0; i < pBase->nExtRank; i++){ if(pThis->idxmap[i] != DASIDX_UNUSED) ++nRank; } if(nLen < (nRank*3 + 1)) return pWrite; - for(int i = 0; i < pBase->iFirstInternal; i++){ + for(int i = 0; i < pBase->nExtRank; i++){ if(pThis->idxmap[i] != DASIDX_UNUSED){ *pWrite = '['; ++pWrite; --nLen; *pWrite = g_sIdxLower[i]; ++pWrite; --nLen; @@ -1390,16 +1380,15 @@ char* DasVarAry_expression( return _DasVarAry_intrExpress(pBase, sBuf, nLen, uFlags, NULL, NULL, 0); } -DasErrCode init_DasVarArray(DasVarArray* pThis, DasAry* pAry, int iInternal, int8_t* pMap) -{ - if((iInternal == 0)||(iInternal > (DASIDX_MAX-1))){ - das_error(DASERR_VAR, "Invalid start of internal indices: %d", iInternal); +DasErrCode init_DasVarArray( + DasVarArray* pThis, DasAry* pAry, int nExtRank, int8_t* pExtMap, int nIntRank +){ + if((nExtRank == 0)||(nExtRank > (DASIDX_MAX-1))){ + das_error(DASERR_VAR, "Invalid start of internal indices: %d", nExtRank); return false; } pThis->base.vartype = D2V_ARRAY; - pThis->base.vt = DasAry_valType(pAry); - pThis->base.vsize = DasAry_valSize(pAry); pThis->base.nRef = 1; pThis->base.decRef = dec_DasVarAry; pThis->base.isNumeric = DasVarAry_isNumeric; @@ -1411,7 +1400,8 @@ DasErrCode init_DasVarArray(DasVarArray* pThis, DasAry* pAry, int iInternal, int pThis->base.lengthIn = DasVarAry_lengthIn; pThis->base.isFill = DasVarAry_isFill; pThis->base.subset = DasVarAry_subset; - + pThis->base.nExtRank = nExtRank; + pThis->base.nIntRank = nIntRank; /* Extra stuff for array variables */ if(pAry == NULL) @@ -1425,28 +1415,35 @@ DasErrCode init_DasVarArray(DasVarArray* pThis, DasAry* pAry, int iInternal, int int nValid = 0; char sBuf[128] = {'\0'}; - pThis->base.iFirstInternal = iInternal; + pThis->base.nExtRank = nExtRank; for(int i = 0; i < DASIDX_MAX; ++i) pThis->idxmap[i] = DASIDX_UNUSED; size_t u; - for(u = 0; u < DASIDX_MAX; ++u){ - pThis->idxmap[u] = pMap[u]; + for(u = 0; u < nExtRank; ++u){ + pThis->idxmap[u] = pExtMap[u]; /* Make sure that the map has the same number of non empty indexes */ /* as the rank of the array */ - if(pMap[u] >= 0){ + if(pExtMap[u] >= 0){ ++nValid; - if(pMap[u] >= pAry->nRank){ + if(pExtMap[u] >= pAry->nRank){ return das_error(DASERR_VAR, "Variable dimension %zu maps to non-existant dimension %zu in " - "array %s", u, pMap[u], DasAry_toStr(pAry, sBuf, 127) + "array %s", u, pExtMap[u], DasAry_toStr(pAry, sBuf, 127) ); } - pThis->base.iLastIndex = u; } } + /* Now make sure that we have enough extra array indicies for the internal + structure */ + if((nValid + nIntRank) != DasAry_rank(pAry)) + return das_error(DASERR_VAR, + "Expected a backing array is rank %d, expected %d external plus " + "%d internal indicies", DasAry_rank(pAry), nExtRank, nIntRank + ); + /* Here's the score. We're putting a template on top of simple das arrays * that allows composite datums such as strings and GeoVec to be stored with * dense packing. @@ -1456,46 +1453,48 @@ DasErrCode init_DasVarArray(DasVarArray* pThis, DasAry* pAry, int iInternal, int * It also needs the value type set to the index vector type * vtByteSeq needs one internal index, and it's ragged. */ - das_val_type ary_vt = DasAry_valType(pAry); + das_val_type vtAry = DasAry_valType(pAry); + + if(nIntRank > 1) + return das_error(DASERR_VAR, + "Internal rank = %d, ranks > 1 are not yet supported", nIntRank + ); /* Make sure that the last index < the first internal for scalar types, and that last index == first internal for rank 1 types */ - int nIntrRank = (pThis->base.iLastIndex - pThis->base.iFirstInternal + 1); - - if((pAry->uFlags & D2ARY_AS_STRING) == D2ARY_AS_STRING){ - if(nIntrRank != 1){ - return das_error(DASERR_VAR, "Dense text needs an internal rank of 1"); + if(vtAry == vtByte){ + if((pAry->uFlags & D2ARY_AS_STRING) == D2ARY_AS_STRING){ + if(nIntRank != 1) + return das_error(DASERR_VAR, "Dense text needs an internal rank of 1"); + pThis->base.vt = vtText; + } + else{ + if(nIntRank > 0) + pThis->base.vt = vtByteSeq; + else + pThis->base.vt = vtByte; } - pThis->base.vt = vtText; } - else{ - pThis->base.vt = ary_vt; + else { + if((vtAry < VT_MIN_SIMPLE)||(vtAry > VT_MAX_SIMPLE)) + return das_error(DASERR_VAR, + "Only simple types understood by DasVarAry, not vt = %d", vtAry + ); + pThis->base.vt = vtAry; } - - - if(nValid == 0) - return das_error(DASERR_VAR, - "No valid indicies provided, use datum for true scalars" - ); - - if(nValid != pAry->nRank) - return das_error(DASERR_VAR, - "Variable index map does not have the same number of valid indices " - "as the array dimension. While partial array mapping may be useful, " - "it's not supported for now." - ); - + pThis->base.vsize = das_vt_size(pThis->base.vt); + inc_DasAry(pAry); /* Increment the reference count for this array */ return DAS_OKAY; } -DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap) +DasVar* new_DasVarArray(DasAry* pAry, int nExtRank, int8_t* pExtMap, int nIntIdx) { /* DasVarArray does not point outside of it's stack */ DasVarArray* pThis = (DasVarArray*)calloc(1, sizeof(DasVarArray)); - if(init_DasVarArray(pThis, pAry, iInternal, pMap) != DAS_OKAY){ + if(init_DasVarArray(pThis, pAry, nExtRank, pExtMap, nIntIdx) != DAS_OKAY){ /* Don't decrement the array ownership on failure because it wasn't incremented, free */ free(pThis); @@ -1535,16 +1534,14 @@ bool DasVarVecAry_get(const DasVar* pAncestor, ptrdiff_t* pLoc, das_datum* pDm) ptrdiff_t pAryLoc[DASIDX_MAX] = DASIDX_INIT_BEGIN; int nDim = 0; - for(int i = 0; i < pAncestor->iFirstInternal; ++i){ + for(int i = 0; i < pAncestor->nExtRank; ++i){ if(pBase->idxmap[i] >= 0){ /* all the wierd flags are less than 0 */ pAryLoc[ pBase->idxmap[i] ] = pLoc[i]; ++nDim; } } - int nIntrRank = (pAncestor->iLastIndex - pAncestor->iFirstInternal) + 1; - - if(nIntrRank != 1){ + if(pAncestor->nIntRank != 1){ das_error(DASERR_VAR, "Logic error in vector access"); return false; } @@ -1566,51 +1563,20 @@ bool DasVarVecAry_get(const DasVar* pAncestor, ptrdiff_t* pLoc, das_datum* pDm) } DasVar* new_DasVarVecAry( - DasAry* pAry, int iFirstInternal, int8_t* pMap, const char* sFrame, - byte nFrameId, byte frameType, byte nDirs, const byte* pDirs + DasAry* pAry, int nExtRank, int8_t* pExtMap, int nIntRank, + const char* sFrame, byte nFrameId, byte frameType, byte nDirs, const byte* pDirs ){ if((sFrame == NULL)||(sFrame[0] == '\0')){ das_error(DASERR_VAR, "Vectors cannot have an empty frame name"); return NULL; } - /* For vectors, 1st internal is always the last item */ - int iFirstCheck = -1; - for(int iIdx = 0; iIdx < DASIDX_MAX; ++iIdx){ - if(pMap[iIdx] >= 0) /* unused indexes are less then 0 */ - ++iFirstCheck; - } - - if(iFirstInternal != iFirstCheck){ - das_error(DASERR_VAR, "First internal index expected to be %d, was %d", - iFirstCheck, iFirstInternal - ); - return NULL; - } - - /* If my first internal *is* my first item, is than an error ??? - * - * Variables with only internal shape *would* be handy for point spread - * functions and the like - */ - if(iFirstInternal == 0){ - das_error(DASERR_VAR, - "For now DasVar can't only have internal indicies. Maybe this " - "should change." - ); - return NULL; - } - + // Handle the base class DasVarVecAry* pThis = (DasVarVecAry*) calloc(1, sizeof(DasVarVecAry)); DasVar* pAncestor = (DasVar*)pThis; - if((sFrame != NULL)&&(sFrame[0] != '\0')) - strncpy(pThis->fname, sFrame, DASFRM_NAME_SZ-1); - else - strncpy(pThis->fname, "vecframe", DASFRM_NAME_SZ-1); - - if(init_DasVarArray((DasVarArray*) pThis, pAry, iFirstInternal, pMap) != DAS_OKAY){ + if(init_DasVarArray((DasVarArray*)pThis, pAry, nExtRank, pExtMap, nIntRank) != DAS_OKAY){ /* Don't decrement the array ownership on failure because it wasn't incremented, free */ free(pThis); @@ -1621,9 +1587,11 @@ DasVar* new_DasVarVecAry( pAncestor->get = DasVarVecAry_get; pAncestor->expression = DasVarVecAry_expression; + /* And now our derived class data including the vector template*/ + strncpy(pThis->fname, sFrame, DASFRM_NAME_SZ-1); + byte nodata[24] = {0}; - /* Now save a template for datums returned via get() */ DasErrCode nRet = das_geovec_init(&(pThis->tplt), nodata, nFrameId, frameType, pAncestor->vt, das_vt_size(pAncestor->vt), nDirs, pDirs @@ -1868,10 +1836,10 @@ bool DasVarSeq_isFill(const DasVar* pBase, const byte* pCheck, das_val_type vt) DasAry* DasVarSeq_subset( const DasVar* pBase, int nRank, const ptrdiff_t* pMin, const ptrdiff_t* pMax ){ - if(nRank != pBase->iFirstInternal){ + if(nRank != pBase->nExtRank){ das_error( DASERR_VAR, "External variable is rank %d, but subset specification " - "is rank %d", pBase->iFirstInternal, nRank + "is rank %d", pBase->nExtRank, nRank ); return NULL; } @@ -1905,7 +1873,7 @@ DasAry* DasVarSeq_subset( size_t u, uSzElm = pBase->vsize; size_t uRepEach = 1; - for(int d = pThis->iDep + 1; d < pBase->iFirstInternal; ++d) + for(int d = pThis->iDep + 1; d < pBase->nExtRank; ++d) uRepEach *= (pMax[d] - pMin[d]); size_t uBlkCount = (pMax[pThis->iDep] - pMin[pThis->iDep]) * uRepEach; @@ -2040,16 +2008,18 @@ DasAry* DasVarSeq_subset( DasVar* new_DasVarSeq( const char* sId, das_val_type vt, size_t vSz, const void* pMin, - const void* pInterval, int nDsRank, int8_t* pMap, das_units units + const void* pInterval, int nExtRank, int8_t* pMap, int nIntRank, + das_units units ){ if((sId == NULL)||((vt == vtUnknown)&&(vSz == 0))||(pMin == NULL)|| - (pInterval == NULL)||(pMap == NULL)||(nDsRank < 1)){ + (pInterval == NULL)||(pMap == NULL)||(nExtRank < 1)||(nIntRank > 0) + ){ das_error(DASERR_VAR, "Invalid argument"); return NULL; } - if(vt == vtText){ - das_error(DASERR_VAR, "Text based sequences are not implemented"); + if((vt < VT_MIN_SIMPLE)||(vt > VT_MAX_SIMPLE)||(vt == vtTime)){ + das_error(DASERR_VAR, "Only simple types allowed for sequences"); return NULL; } @@ -2060,12 +2030,9 @@ DasVar* new_DasVarSeq( pThis->base.vartype = D2V_SEQUENCE; pThis->base.vt = vt; - if(vt == vtUnknown) - pThis->base.vsize = vSz; - else - pThis->base.vsize = das_vt_size(vt); + pThis->base.vsize = das_vt_size(vt); - pThis->base.iFirstInternal = nDsRank; + pThis->base.nExtRank = nExtRank; pThis->base.nRef = 1; pThis->base.units = units; pThis->base.decRef = dec_DasVarSeq; @@ -2081,7 +2048,7 @@ DasVar* new_DasVarSeq( pThis->iDep = -1; - for(int i = 0; i < nDsRank; ++i){ + for(int i = 0; i < nExtRank; ++i){ if(pMap[i] == 0){ if(pThis->iDep != -1){ das_error(DASERR_VAR, "Simple sequence can only depend on one axis"); @@ -2232,10 +2199,10 @@ int DasVarBinary_shape(const DasVar* pBase, ptrdiff_t* pShape) ptrdiff_t aRight[DASIDX_MAX] = DASIDX_INIT_UNUSED; pThis->pRight->shape(pThis->pRight, aRight); - das_varindex_merge(pBase->iFirstInternal, pShape, aRight); + das_varindex_merge(pBase->nExtRank, pShape, aRight); int nRank = 0; - for(i = 0; i < pBase->iFirstInternal; ++i) + for(i = 0; i < pBase->nExtRank; ++i) if(pShape[i] != DASIDX_UNUSED) ++nRank; @@ -2268,7 +2235,7 @@ char* DasVarBinary_expression( pWrite = sBuf + nWrite; nLen -= nWrite; DasVarBinary_shape(pBase, aShape); - for(d = 0; d < pBase->iFirstInternal; ++d){ + for(d = 0; d < pBase->nExtRank; ++d){ if(aShape[d] == DASIDX_UNUSED) continue; if(nLen < 3) return pWrite; @@ -2529,10 +2496,10 @@ bool DasVarBinary_get(const DasVar* pBase, ptrdiff_t* pIdx, das_datum* pDatum) DasAry* DasVarBinary_subset( const DasVar* pBase, int nRank, const ptrdiff_t* pMin, const ptrdiff_t* pMax ){ - if(nRank != pBase->iFirstInternal){ + if(nRank != pBase->nExtRank){ das_error( DASERR_VAR, "External variable is rank %d, but subset specification " - "is rank %d", pBase->iFirstInternal, nRank + "is rank %d", pBase->nExtRank, nRank ); return NULL; } @@ -2556,7 +2523,7 @@ DasAry* DasVarBinary_subset( * invoke the get function */ ptrdiff_t pIdx[DASIDX_MAX] = DASIDX_INIT_UNUSED; - memcpy(pIdx, pMin, pBase->iFirstInternal * sizeof(ptrdiff_t)); + memcpy(pIdx, pMin, pBase->nExtRank * sizeof(ptrdiff_t)); size_t uTotCount; byte* pWrite = DasAry_getBuf(pAry, pBase->vt, DIM0, &uTotCount); @@ -2577,7 +2544,7 @@ DasAry* DasVarBinary_subset( assert(dm.vsize == vSzChk); /* Roll the index */ - for(d = pBase->iFirstInternal - 1; d > -1; --d){ + for(d = pBase->nExtRank - 1; d > -1; --d){ pIdx[d] += 1; if((d > 0) && (pIdx[d] == pMax[d])) pIdx[d] = pMin[d]; /* next higher index will roll on loop iter */ @@ -2637,11 +2604,11 @@ DasVar* new_DasVarBinary_tok( return NULL; } - if(pLeft->iFirstInternal != pRight->iFirstInternal){ + if(pLeft->nExtRank != pRight->nExtRank){ das_error(DASERR_VAR, "Sub variables appear to be from different datasets, on with %d " - "indices, the other with %d.", pLeft->iFirstInternal, - pRight->iFirstInternal + "indices, the other with %d.", pLeft->nExtRank, + pRight->nExtRank ); return NULL; } @@ -2664,7 +2631,7 @@ DasVar* new_DasVarBinary_tok( pThis->base.vt = vt; pThis->base.vsize = das_vt_size(vt); pThis->base.nRef = 1; - pThis->base.iFirstInternal = pRight->iFirstInternal; + pThis->base.nExtRank = pRight->nExtRank; pThis->base.id = DasVarBinary_id; pThis->base.shape = DasVarBinary_shape; diff --git a/das2/variable.h b/das2/variable.h index fc7bff7..4ed1f6a 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -47,22 +47,33 @@ enum var_type { #endif -#define SCALAR_0 0, (NULL) -#define SCALAR_1(I) 1, (int8_t[DASIDX_MAX]){I,_D,_D,_D,_D,_D,_D,_D} -#define SCALAR_2(I,J) 2, (int8_t[DASIDX_MAX]){I,J,_D,_D,_D,_D,_D,_D} -#define SCALAR_3(I,J,K) 3, (int8_t[DASIDX_MAX]){I,J,K,_D,_D,_D,_D,_D} -#define SCALAR_4(I,J,K,L) 4, (int8_t[DASIDX_MAX]){I,J,K,L,_D,_D,_D,_D} -#define SCALAR_5(I,J,K,L,M) 5, (int8_t[DASIDX_MAX]){I,J,K,L,M,_D,_D,_D} -#define SCALAR_6(I,J,K,L,M,N) 6, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,_D,_D} -#define SCALAR_7(I,J,K,L,M,N,O) 7, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,O,_D} - -#define VEC_0(I) 0, (int8_t[DASIDX_MAX]){I,_D,_D,_D,_D,_D,_D,_D} -#define VEC_1(I,J) 1, (int8_t[DASIDX_MAX]){I,J,_D,_D,_D,_D,_D,_D} -#define VEC_2(I,J,K) 2, (int8_t[DASIDX_MAX]){I,J,K,_D,_D,_D,_D,_D} -#define VEC_3(I,J,K,L) 3, (int8_t[DASIDX_MAX]){I,J,K,L,_D,_D,_D,_D} -#define VEC_4(I,J,K,L,M) 4, (int8_t[DASIDX_MAX]){I,J,K,L,M,_D,_D,_D} -#define VEC_5(I,J,K,L,M,N) 5, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,_D,_D} -#define VEC_6(I,J,K,L,M,N,O) 6, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,O,_D} +/** Dataset index to array index mapping macros. + * + * The scalar macros map the locations of atomic items to a an external + * index allowing some indexes to be degenerate. + * + * The vector macros do the same but they also assume check the array to + * make sure that there is one extra index right after all the ones + * that are mentioned. + */ +#define SCALAR_0 0, (NULL), 0 +#define SCALAR_1(I) 1, (int8_t[DASIDX_MAX]){I,_D,_D,_D,_D,_D,_D,_D}, 0 +#define SCALAR_2(I,J) 2, (int8_t[DASIDX_MAX]){I,J,_D,_D,_D,_D,_D,_D}, 0 +#define SCALAR_3(I,J,K) 3, (int8_t[DASIDX_MAX]){I,J,K,_D,_D,_D,_D,_D}, 0 +#define SCALAR_4(I,J,K,L) 4, (int8_t[DASIDX_MAX]){I,J,K,L,_D,_D,_D,_D}, 0 +#define SCALAR_5(I,J,K,L,M) 5, (int8_t[DASIDX_MAX]){I,J,K,L,M,_D,_D,_D}, 0 +#define SCALAR_6(I,J,K,L,M,N) 6, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,_D,_D}, 0 +#define SCALAR_7(I,J,K,L,M,N,O) 7, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,O,_D}, 0 +#define SCALAR_8(I,J,K,L,M,N,O,P) 8, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,O,P}, 0 + +#define VEC_0 0, (int8_t[DASIDX_MAX]){_D,_D,_D,_D,_D,_D,_D,_D}, 1 +#define VEC_1(I) 1, (int8_t[DASIDX_MAX]){I,_D,_D,_D,_D,_D,_D,_D}, 1 +#define VEC_2(I,J) 2, (int8_t[DASIDX_MAX]){I,J,_D,_D,_D,_D,_D,_D}, 1 +#define VEC_3(I,J,K) 3, (int8_t[DASIDX_MAX]){I,J,K,_D,_D,_D,_D,_D}, 1 +#define VEC_4(I,J,K,L) 4, (int8_t[DASIDX_MAX]){I,J,K,L,_D,_D,_D,_D}, 1 +#define VEC_5(I,J,K,L,M) 5, (int8_t[DASIDX_MAX]){I,J,K,L,M,_D,_D,_D}, 1 +#define VEC_6(I,J,K,L,M,N) 6, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,_D,_D}, 1 +#define VEC_7(I,J,K,L,M,N,O) 7, (int8_t[DASIDX_MAX]){I,J,K,L,M,N,O,_D}, 1 /* Internal function for merging variable, and dimension shapes. Different @@ -241,14 +252,13 @@ typedef struct das_variable{ * for non-scalar items, this yields the unusual value * of sizeof(void*) */ - /* Position of the first internal index. Any array indices after - * this point will be considered to be internal indices and will not - * be reported in the shape function */ - int iFirstInternal; - - /* Position of the last index. All array indicies after this point - will be ignored, short circuiting loops */ - int iLastIndex; + /* Number of external indexes. Many of these may not be used and are + * thus marked as degenerate */ + int nExtRank; + + /* Number of internal indexes, essentially the item rank. Is zero except + for text strings and geometric vectors */ + int nIntRank; /* Since it is possible to create variables in all kinds of ways (not just * backing arrays) we have to have our own units storage location. @@ -456,7 +466,8 @@ DAS_API DasVar* new_DasConstant(const char* sId, const das_datum* pDm); */ DAS_API DasVar* new_DasVarSeq( const char* sId, das_val_type vt, size_t vSz, const void* pMin, - const void* pInterval, int nDsRank, int8_t* pMap, das_units units + const void* pInterval, int nExtRank, int8_t* pMap, int nIntRank, + das_units units ); /** Create a variable backed by an Array @@ -469,35 +480,37 @@ DAS_API DasVar* new_DasVarSeq( * * @param pAry The array which contains coordinate values * - * @param iInternal The number of indicies that are global to the dataset. - * Alternatively the position in the map that corresponds to the - * first internal index (if any). + * @param nExtRank The external rank of the variable. This should match + * it's enclosing dataset, though some indicies can be marked as + * degenerate and are thus not mapped to the backing array. * - * After mapping everything in pMap upto (but not including) - * iInternal, any remaining DasAry indices will be considered - * internal items and will be accessed as a group. + * Don't set this directly if you can avoid it. Use the + * SCALAR_N and VECTOR_N macros instead. * - * Having an array with an unmapped extra index is very useful - * for dealing with string data + * @param pMap The mapping of external indexs to DasAry indexes. Not every + * external index needs to be mapped. + * + * Don't set this directly if you can avoid it. Use the + * SCALAR_N and VECTOR_N macros instead. * - * @param pMap The mapping from dataset index positions to array index positions - * Any element in the map may be DASIDX_UNUSED to indicate that a - * particular dataset index is not used, or some value equal to or - * greater than 0 to indicate which array index corresponds to the - * i-th variable index. + * @param nIntRank The number of additional array indexes used to make + * the internal structure of Rank 1 items such as strings or + * Geometric Vectors. + * + * Don't set this directly if you can avoid it. Use the + * SCALAR_N and VECTOR_N macros instead. * * @return A pointer to the new variable object allocated on the heap + * * @memberof DasVar */ -DAS_API DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap); +DAS_API DasVar* new_DasVarArray(DasAry* pAry, int nExtRank, int8_t* pMap, int nIntRank); /** Create a vector backed by an array * * This variable must have one and only one internal index, and that index - * must be fixed. These conditions allow the variable to be a vector. This - * may be a the components of a geometric vector, or it could be a vector of - * coefficents from a mathematical operation, etc. + * must be fixed. These conditions allow the variable to be a vector. * * Vectors can be operated on using the scalar binary operations: * @@ -520,8 +533,25 @@ DAS_API DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap); * * @param pAry The array which contains data values * - * @param iInternal,pMap use VEC_1(I,J), VEC_2(I,J,K) etc. macros to assign the - * mapping of the backing array to vector values +* @param nExtRank The external rank of the variable. This should match + * it's enclosing dataset, though some indicies can be marked as + * degenerate and are thus not mapped to the backing array. + * + * Don't set this directly if you can avoid it. Use the + * SCALAR_N and VECTOR_N macros instead. + * + * @param pMap The mapping of external indexs to DasAry indexes. Not every + * external index needs to be mapped. + * + * Don't set this directly if you can avoid it. Use the + * SCALAR_N and VECTOR_N macros instead. + * + * @param nIntRank The number of additional array indexes used to make + * the internal structure of Rank 1 items such as strings or + * Geometric Vectors. + * + * Don't set this directly if you can avoid it. Use the + * SCALAR_N and VECTOR_N macros instead. * * @param sFrame A named coordinate frame for the vector. If two vectors have * different coordinate frames, they cannot be the subject of @@ -538,8 +568,9 @@ DAS_API DasVar* new_DasVarArray(DasAry* pAry, int iInternal, int8_t* pMap); * @param nDirs The number of directions in the vector direction map, can be 0 */ DAS_API DasVar* new_DasVarVecAry( - DasAry* pAry, int iFirstInternal, int8_t* pMap, const char* sFrame, - byte nFrameId, byte frametype, byte nDirs, const byte* pDir + DasAry* pAry, int nExtRank, int8_t* pMap, int nIntRank, + const char* sFrame, byte nFrameId, byte frametype, byte nDirs, + const byte* pDir ); /** Increment the reference count on a variable */ diff --git a/das2/vector.c b/das2/vector.c index 05178f0..4512e79 100644 --- a/das2/vector.c +++ b/das2/vector.c @@ -83,5 +83,5 @@ DasErrCode das_geovec_init( } pVec->et = et; - return DASERR_VEC; + return DAS_OKAY; } diff --git a/test/TestVariable.c b/test/TestVariable.c index 5e8957b..940d1e7 100644 --- a/test/TestVariable.c +++ b/test/TestVariable.c @@ -6149,11 +6149,11 @@ int main(int argc, char** argv) /* Test text variables */ - fprintf(stderr, "Test10: String variables\n" ); + fprintf(stderr, "\nTest10: String variables\n" ); DasAry* aEvents = new_DasAry("events", vtByte, 0, NULL, RANK_2(0,0), NULL); DasAry_setUsage(aEvents, D2ARY_AS_STRING); - DasVar* vEvents = new_DasVarArray(aEvents, VEC_1(0, 1)); + DasVar* vEvents = new_DasVarArray(aEvents, VEC_1(0)); if(DasVar_isNumeric(vEvents)){ fprintf(stderr, "Error, string array taken a numeric"); @@ -6168,53 +6168,65 @@ int main(int argc, char** argv) }; for(int i = 0; i < 4; ++i){ - DasAry_append(aEvents, (const byte*)s, strlen(s[i]) + 1); + DasAry_append(aEvents, (const byte*)(s[i]), strlen(s[i]) + 1); DasAry_markEnd(aEvents, DIM1); } das_datum dm; DasVar_get(vEvents, IDX0(1), &dm); - const char* sLine = (const char*)&dm; + const char* sLine = das_datum_asStr(dm); + if(strcmp(sLine, s[1]) != 0){ - fprintf(stderr, "Error, input line didn't equal output line"); + fprintf(stderr, "Error, input line \"%s\" didn't equal output line \"%s\"\n", + sLine, s[1] + ); return 10; } + else{ + fprintf(stderr, "Output was correct: \"%s\"\n", sLine); + } /* Test 11: Vector variables */ - uint16_t level1Vecs[][4] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; + fprintf(stderr, "\nTest 11: Vector variables\n"); + int16_t level1Vecs[][3] = {{1,-2,3},{4,-5,6},{7,-8,9},{10,-11,12}}; - DasAry* aVecs = new_DasAry("level1", vtUShort, 0, NULL, RANK_2(0,3), NULL); + DasAry* aVecs = new_DasAry("level1", vtShort, 0, NULL, RANK_2(0,3), NULL); DasAry_append(aVecs, (const byte*)level1Vecs, 12); DasVar* vL1Vecs = new_DasVarVecAry( - aVecs, VEC_1(0, 1), "gsm", 99, DASFRM_CARTESIAN, 3, (const byte*)(byte[3]){0,2,1} + aVecs, VEC_1(0), "gsm", 99, DASFRM_CARTESIAN, 3, (const byte*)(byte[3]){0,2,1} ); DasVar_get(vL1Vecs, IDX0(2), &dm); if(dm.vt != vtGeoVec){ - fprintf(stderr, "Error, output is not a geometric vector"); + fprintf(stderr, "Error, output is not a geometric vector\n"); return 11; } if(dm.vsize != das_vt_size(vtGeoVec)){ - fprintf(stderr, "Error, vector datum value size error"); + fprintf(stderr, "Error, vector datum value size error\n"); return 11; } das_geovec* pVec = (das_geovec*)&dm; - if((pVec->ncomp != 3)||(pVec->frame != 99)||(pVec->et != vtUShort) + if((pVec->ncomp != 3)||(pVec->frame != 99)||(pVec->et != vtShort) ||(pVec->esize != 2) /* Known size for ushort */ ||(pVec->dirs[0] != 0)||(pVec->dirs[1] != 2)||(pVec->dirs[2] != 1) ||(pVec->ftype != DASFRM_CARTESIAN)){ - fprintf(stderr, "Error, vector metadata failure"); + fprintf(stderr, "Error, vector metadata failure\n"); return 11; } - uint16_t* pVal = (uint16_t*)&dm; // notice values are always at the base of datum! - if((pVal[0] != 7)||(pVal[1] != 8)||(pVal[0] != 9)){ - fprintf(stderr, "Error, vector value failure"); + int16_t* pVal = (int16_t*)&dm; // notice values are always at the base of datum! + if((pVal[0] != 7)||(pVal[1] != -8)||(pVal[2] != 9)){ + fprintf(stderr, "Error, vector value failure: @(0,1,2) -> (%hd,%hd,%hd) \n", + pVal[0], pVal[1], pVal[2] + ); return 11; } + else{ + fprintf(stderr, "Output was correct: (%hd,%hd,%hd)\n", pVal[0], pVal[1], pVal[2]); + } fprintf(stderr, "\nGood! All errors found and no false positives.\n"); From b0ec2540fa6476c353f78adb7e8369bc7a5736be Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Tue, 13 Feb 2024 21:17:22 -0600 Subject: [PATCH 12/40] First draft code for das3 parser --- das2/array.c | 87 +- das2/array.h | 56 +- das2/aryenc.c | 584 +++++++++++++ das2/aryenc.h | 144 ++++ das2/buffer.h | 8 +- das2/builder.c | 18 +- das2/credentials.c | 12 +- das2/das1.c | 6 +- das2/das1.h | 6 +- das2/dataset.c | 77 +- das2/dataset.h | 150 +++- das2/datum.c | 8 +- das2/datum.h | 2 +- das2/defs.h | 5 +- das2/descriptor.c | 30 +- das2/descriptor.h | 4 +- das2/dimension.c | 26 +- das2/dimension.h | 31 +- das2/encoding.c | 10 +- das2/encoding.h | 14 +- das2/frame.c | 8 +- das2/frame.h | 10 +- das2/http.c | 14 +- das2/http.h | 2 +- das2/io.c | 34 +- das2/io.h | 2 +- das2/node.c | 18 +- das2/packet.c | 20 +- das2/plane.h | 12 +- das2/property.c | 20 +- das2/property.h | 6 +- das2/serial.c | 1222 +++++++++++++++++++++++++++ das2/serial.h | 58 ++ das2/stream.c | 31 +- das2/stream.h | 20 +- das2/util.h | 3 - das2/value.c | 298 ++++++- das2/value.h | 98 ++- das2/variable.c | 213 +++-- das2/variable.h | 17 +- das2/vector.c | 22 +- das2/vector.h | 18 +- schema/das-basic-doc-ns-v3.0.xsd | 626 ++++++++++++++ schema/das-basic-stream-ns-v3.0.xsd | 593 +++++++++++++ schema/das-basic-stream-v2.2.xsd | 207 +++++ schema/das-basic-stream-v3.0.xsd | 649 ++++++++++++++ test/TestArray.c | 2 +- test/TestVariable.c | 2 +- test/ex12_sounder_xyz.d3t | 50 +- test/ex16_mag_grid_doc.d3x | 8 +- test/sizeof.c | 24 +- 51 files changed, 5041 insertions(+), 544 deletions(-) create mode 100644 das2/aryenc.c create mode 100644 das2/aryenc.h create mode 100644 das2/serial.c create mode 100644 das2/serial.h create mode 100644 schema/das-basic-doc-ns-v3.0.xsd create mode 100644 schema/das-basic-stream-ns-v3.0.xsd create mode 100644 schema/das-basic-stream-v2.2.xsd create mode 100644 schema/das-basic-stream-v3.0.xsd diff --git a/das2/array.c b/das2/array.c index 5ece7e0..c977f61 100644 --- a/das2/array.c +++ b/das2/array.c @@ -1,18 +1,18 @@ -/* Copyright (C) 2017 Chris Piker +/* Copyright (C) 2017-2024 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * Das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ #define _POSIX_C_SOURCE 200112L @@ -115,7 +115,7 @@ bool DynaBuf_alloc(DynaBuf* pThis, size_t uMore) /* Just using malloc below since we are going to fill this space * anyway, though you might consider a debug build which uses calloc * so than empty expanses of memory are noticeable */ - byte* pNew = (byte*) malloc( uAlloc * pThis->uElemSz ); + ubyte* pNew = (ubyte*) malloc( uAlloc * pThis->uElemSz ); if(pNew == NULL){ das_error(DASERR_ARRAY, "Couldn't allocate for %zu items of size %zu", @@ -146,7 +146,7 @@ bool DynaBuf_appendFill(DynaBuf* pThis, size_t uCount) if(! DynaBuf_alloc(pThis, uCount)) return false; - byte* pWrite = pThis->pHead + (pThis->uValid * pThis->uElemSz); + ubyte* pWrite = pThis->pHead + (pThis->uValid * pThis->uElemSz); memcpy(pWrite, pThis->pFill, uElemSz); uDone = 1; @@ -171,7 +171,7 @@ bool DynaBuf_appendFill(DynaBuf* pThis, size_t uCount) /* uItems - make space for at least uItems worth of elements to start */ bool DynaBuf_init( DynaBuf* pThis, size_t uItems, das_val_type et, size_t uElemSz, - const byte* pFill, size_t uChunkSz, size_t uShape + const ubyte* pFill, size_t uChunkSz, size_t uShape ){ pThis->etype = et; if((uElemSz < 1)||(uElemSz > 2147483647)){ @@ -186,7 +186,7 @@ bool DynaBuf_init( /* Alloc space for fill IF it's bigger than the size of an index_info * object, just store it in the static fill buffer */ if(uElemSz > sizeof(das_idx_info)){ - if( (pThis->pFill = (byte*) calloc(1, uElemSz)) == NULL){ + if( (pThis->pFill = (ubyte*) calloc(1, uElemSz)) == NULL){ das_error(DASERR_ARRAY, "couldn't allocate %zu bytes for fill " "value.", uElemSz); return false; @@ -219,7 +219,7 @@ void DynaBuf_release(DynaBuf* pThis) /* Add values to the array, this just pours in data without regard to record * boundaries, higher level append tracks shape info */ -size_t DynaBuf_append(DynaBuf* pThis, const byte* pVals, size_t uCount) +size_t DynaBuf_append(DynaBuf* pThis, const ubyte* pVals, size_t uCount) { /* successfully do nothing*/ if(uCount == 0) return pThis->uValid; @@ -233,7 +233,7 @@ size_t DynaBuf_append(DynaBuf* pThis, const byte* pVals, size_t uCount) return 0; /* now for the new stuff... */ - byte* pWrite = pThis->pHead + (pThis->uValid * pThis->uElemSz); + ubyte* pWrite = pThis->pHead + (pThis->uValid * pThis->uElemSz); memcpy(pWrite, pVals, uCount * pThis->uElemSz); pThis->uValid += uCount; @@ -277,13 +277,13 @@ char* DasAry_toStr(const DasAry* pThis, char* sInfo, size_t uLen) return sInfo; } -const byte* DasAry_getFill(const DasAry* pThis){ +const ubyte* DasAry_getFill(const DasAry* pThis){ return pThis->pBufs[pThis->nRank - 1]->pFill; } -bool DasAry_setFill(DasAry* pThis, das_val_type vt, const byte* pFill) +bool DasAry_setFill(DasAry* pThis, das_val_type vt, const ubyte* pFill) { - if(pFill == NULL) pFill = (const byte*) das_vt_fill(DasAry_valType(pThis)); + if(pFill == NULL) pFill = (const ubyte*) das_vt_fill(DasAry_valType(pThis)); DynaBuf* pBuf = pThis->pBufs[pThis->nRank - 1]; if(vt != pBuf->etype){ @@ -320,12 +320,12 @@ das_idx_info* _Array_LastParentFor(const DasAry* pThis, int iDim) bool _Array_ParentAndItemAt( const DasAry* pThis, int nIndices, ptrdiff_t* pLoc, das_idx_info** ppParent, - byte** ppItem + ubyte** ppItem ){ /* Get index info item at this partial index, or the item pointer for * a complete index */ int d = 0; - byte* pItem = NULL; + ubyte* pItem = NULL; das_idx_info* pParent = pThis->pIdx0; ptrdiff_t iLoc, nOffset; DynaBuf* pBuf = NULL; @@ -515,7 +515,7 @@ size_t DasAry_lengthIn(const DasAry* pThis, int nIdx, ptrdiff_t* pLoc) /* Get the index_info item at this partial index. If null then it's * a complete index and the count is always 1 */ das_idx_info* pParent; - byte* pItem; + ubyte* pItem; if(! _Array_ParentAndItemAt(pThis, nIdx, pLoc, &pParent, &pItem)){ char sInfo[128] = {'\0'}; @@ -537,7 +537,7 @@ bool DasAry_validAt(const DasAry* pThis, ptrdiff_t* pLoc) { /* The general case, make fast later */ das_idx_info* pParent; - byte* pItem; + ubyte* pItem; if(! _Array_ParentAndItemAt(pThis, pThis->nRank, pLoc, &pParent, &pItem)) return false; @@ -545,7 +545,7 @@ bool DasAry_validAt(const DasAry* pThis, ptrdiff_t* pLoc) return (pItem != NULL); } -const byte* DasAry_getAt(const DasAry* pThis, das_val_type et, ptrdiff_t* pLoc) +const ubyte* DasAry_getAt(const DasAry* pThis, das_val_type et, ptrdiff_t* pLoc) { /* Type safety check */ das_val_type etype = pThis->pBufs[pThis->nRank-1]->etype; @@ -557,7 +557,7 @@ const byte* DasAry_getAt(const DasAry* pThis, das_val_type et, ptrdiff_t* pLoc) /* The general case, make fast later */ das_idx_info* pParent; - byte* pItem; + ubyte* pItem; if(! _Array_ParentAndItemAt(pThis, pThis->nRank, pLoc, &pParent, &pItem)){ char sInfo[128] = {'\0'}; @@ -575,13 +575,13 @@ const byte* DasAry_getAt(const DasAry* pThis, das_val_type et, ptrdiff_t* pLoc) /* if nIndices == rank, this should work just like get(i,j,k) with a count * of 1 */ -DAS_API byte* DasAry_getBuf( +DAS_API ubyte* DasAry_getBuf( DasAry* pThis, das_val_type et, int nDim, ptrdiff_t* pLoc, size_t* pCount ){ - return (byte*)DasAry_getIn(pThis, et, nDim, pLoc, pCount); + return (ubyte*)DasAry_getIn(pThis, et, nDim, pLoc, pCount); } -const byte* DasAry_getIn( +const ubyte* DasAry_getIn( const DasAry* pThis, das_val_type et, int nDim, ptrdiff_t* pLoc, size_t* pCount ){ @@ -601,7 +601,7 @@ const byte* DasAry_getIn( /* Get index info item at this partial index, or the item pointer for * a complete index */ das_idx_info* pParent = pThis->pIdx0; - byte* pItem = NULL; + ubyte* pItem = NULL; if(!_Array_ParentAndItemAt(pThis, nDim, pLoc, &pParent, &pItem)){ char sInfo[128] = {'\0'}; @@ -629,11 +629,11 @@ const byte* DasAry_getIn( *pCount = uLastOff - uFirstOff + 1; DynaBuf* pBuf = pThis->pBufs[pThis->nRank - 1]; - return (const byte*) pBuf->pHead + (uFirstOff * pBuf->uElemSz); + return (const ubyte*) pBuf->pHead + (uFirstOff * pBuf->uElemSz); } bool DasAry_putAt( - DasAry* pThis, ptrdiff_t* pStart, const byte* pVals, size_t uVals + DasAry* pThis, ptrdiff_t* pStart, const ubyte* pVals, size_t uVals ){ if(uVals == 0) return true; /* Successfully do nothing */ @@ -727,24 +727,27 @@ das_idx_info* _newIndexInfo(DasAry* pThis, int iDim) } pParent->uCount += 1; - DynaBuf_append(pMyBuf, (const byte*)&next, 1); + DynaBuf_append(pMyBuf, (const ubyte*)&next, 1); return ((das_idx_info*)(pMyBuf->pHead)) + pMyBuf->uValid - 1; } -bool DasAry_append(DasAry* pThis, const byte* pVals, size_t uCount) +ubyte* DasAry_append(DasAry* pThis, const ubyte* pVals, size_t uCount) { if(pThis->pIdx0 != &(pThis->index0)){ char sInfo[128] = {'\0'}; das_error(DASERR_ARRAY, "Write operation attempted on sub-array %s ", DasAry_toStr(pThis, sInfo, 128)); - return false; + return NULL; } /* Appending causes creation of new parents (which may trigger * creation of their own parents) for any non-ragged dimension */ DynaBuf* pElemBuf = pThis->pBufs[pThis->nRank - 1]; /*size_t uPreValid = pBuf->uValid;*/ - if(uCount == 0) return true; /* Successfully do nothing */ + if(uCount == 0) return NULL; /* No new stuff to point at */ + + /* Save off the old count of valid items in the element buffer */ + size_t uPrevCount = pElemBuf->uValid; /* First the easy part, store the new elements */ size_t uNewValid; @@ -752,8 +755,8 @@ bool DasAry_append(DasAry* pThis, const byte* pVals, size_t uCount) uNewValid = DynaBuf_appendFill(pElemBuf, uCount); else uNewValid = DynaBuf_append(pElemBuf, pVals, uCount); - if(uNewValid == 0) return false; - + if(uNewValid == 0) return NULL; + /* Get the last parent pointer in the highest index_info dimension, make * sure it exists if you have to */ das_idx_info* pParIdx = pThis->pIdx0; @@ -767,7 +770,7 @@ bool DasAry_append(DasAry* pThis, const byte* pVals, size_t uCount) pParIdx->uCount = 1; info.uCount = 0; info.nOffset = 0; - DynaBuf_append(pIdxBuf, (const byte*)&info, 1); + DynaBuf_append(pIdxBuf, (const ubyte*)&info, 1); } /* Cast it and let the compiler do the sizeof math for you */ pChildIdx = (das_idx_info*)(pIdxBuf->pHead); @@ -813,7 +816,9 @@ bool DasAry_append(DasAry* pThis, const byte* pVals, size_t uCount) } } - return true; + /* Return a pointer to the data that were inserted */ + + return pElemBuf->pHead + uPrevCount; } /* ************************************************************************* */ @@ -984,7 +989,7 @@ void DasAry_setSrc(DasAry* pThis, int nPktId, size_t uStartItem, size_t uItems) /* Construct, Destruct */ DasAry* new_DasAry( - const char* id, das_val_type et, size_t sz_each, const byte* fill, + const char* id, das_val_type et, size_t sz_each, const ubyte* fill, int rank, size_t* shape, das_units units ){ DasAry* pThis = (DasAry*) calloc(1, sizeof(DasAry)); @@ -996,7 +1001,7 @@ DasAry* new_DasAry( } bool DasAry_init( - DasAry* pThis, const char* id, das_val_type et, size_t sz_each, const byte* fill, + DasAry* pThis, const char* id, das_val_type et, size_t sz_each, const ubyte* fill, int rank, size_t* shape, das_units units ){ @@ -1055,7 +1060,7 @@ bool DasAry_init( size_t uElemSz = das_vt_size(vtIndex); size_t u; das_idx_info* pIdx = NULL; - const byte* pFill = (const byte*) das_vt_fill(vtIndex); + const ubyte* pFill = (const ubyte*) das_vt_fill(vtIndex); for(int d = 0; d < rank; ++d){ pThis->pBufs[d] = &(pThis->bufs[d]); pThis->pBufs[d]->uShape = shape[d]; @@ -1076,7 +1081,7 @@ bool DasAry_init( else { uElemSz = das_vt_size(et); if(fill != NULL) pFill = fill; - else pFill = (const byte*) das_vt_fill(et); + else pFill = (const ubyte*) das_vt_fill(et); pThis->compare = das_vt_getcmp(et); } } @@ -1119,12 +1124,12 @@ DasAry* new_DasPtrAry(const char* sType, int rank, size_t* shape) { void* p = NULL; return new_DasAry( - sType, vtUnknown, sizeof(void*), (byte*)&p, rank, shape, + sType, vtUnknown, sizeof(void*), (ubyte*)&p, rank, shape, UNIT_DIMENSIONLESS ); } -byte* DasAry_disownElements(DasAry* pThis, size_t* pLen, size_t* pOffset) +ubyte* DasAry_disownElements(DasAry* pThis, size_t* pLen, size_t* pOffset) { *pLen = 0; int iLast = pThis->nRank - 1; @@ -1223,7 +1228,7 @@ DasAry* DasAry_subSetIn( DasAry* pThis, const char* id, int nIndices, ptrdiff_t* pLoc ){ das_idx_info* pParent = NULL; - byte* pItem = NULL; + ubyte* pItem = NULL; if(!_Array_ParentAndItemAt(pThis, nIndices, pLoc, &pParent, &pItem)){ return NULL; } diff --git a/das2/array.h b/das2/array.h index cf798a5..527f953 100644 --- a/das2/array.h +++ b/das2/array.h @@ -1,18 +1,18 @@ /* Copyright (C) 2017-2020 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * Das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * Das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ /** @file array.h A dynamic buffer with multi-dimensional array style access */ @@ -174,15 +174,15 @@ typedef struct child_info_t{ typedef struct dyna_buf{ - byte* pBuf; /* The beginning a continuous buffer uSize long */ - byte* pHead; /* The beginning of valid values in the buffer */ - /*byte* pWrite;*/ /* The beginning of the append point for the buffer */ + ubyte* pBuf; /* The beginning a continuous buffer uSize long */ + ubyte* pHead; /* The beginning of valid values in the buffer */ + /*ubyte* pWrite;*/ /* The beginning of the append point for the buffer */ size_t uSize; /* The amount of space in the backing buffer */ size_t uValid; /* The number of valid elements in this buffer */ size_t uElemSz; /* The number of bytes occupied by each element */ - byte* pFill; /* Pointer to fill value buffer */ - byte fillBuf[sizeof(das_idx_info)]; /* Storage for short fill items */ + ubyte* pFill; /* Pointer to fill value buffer */ + ubyte fillBuf[sizeof(das_idx_info)]; /* Storage for short fill items */ size_t uChunkSz; /* Alloc helper, if set, allocate in even chunks * of this size. */ @@ -284,7 +284,7 @@ typedef struct das_array { /* Current compare function, set automatically if a known type is used, * otherwise user needs to supply their own */ - int (*compare)(const byte* vpFirst, const byte* vpSecond); + int (*compare)(const ubyte* vpFirst, const ubyte* vpSecond); /* Where to send/read data when streaming */ int nSrcPktId; @@ -340,7 +340,7 @@ typedef struct das_array { * * @param rank The number of dimensions in the array. This sets the number * of arguments needed in the get() function call. To make your code - * easier to read, the defines RANK_1, RANK_2, ... RANK_16 are provided. + * easier to read, the defines RANK_1, RANK_2, ... RANK_8 are provided. * * @param shape The initial shape of the array. One integer is needed here * for each dimension in the array. Use the value 0 to set a dimension @@ -379,7 +379,7 @@ typedef struct das_array { * @memberof DasAry */ DAS_API DasAry* new_DasAry( - const char* id, das_val_type et, size_t sz_each, const byte* fill, + const char* id, das_val_type et, size_t sz_each, const ubyte* fill, int rank, size_t* shape, das_units units ); @@ -391,7 +391,7 @@ DAS_API DasAry* new_DasAry( */ DAS_API bool DasAry_init( DasAry* pThis, const char* id, das_val_type et, size_t sz_each, - const byte* fill, int rank, size_t* shape, das_units units + const ubyte* fill, int rank, size_t* shape, das_units units ); /** A convenience wrapper for storing arrays of pointers @@ -404,7 +404,7 @@ DAS_API bool DasAry_init( * * @param rank The number of dimensions in the array. This sets the number * of arguments needed in the get() function call. To make your code - * easier to read, the defines RANK_1, RANK_2, ... RANK_16 are provided. + * easier to read, the defines RANK_1, RANK_2, ... RANK_8 are provided. * * @param shape The initial shape of the array. One integer is needed here * for each dimension in the array. Use the value 0 to set a dimension @@ -520,7 +520,7 @@ DAS_API void DasAry_deInit(DasAry* pThis); * * @memberof DasAry */ -DAS_API byte* DasAry_disownElements( +DAS_API ubyte* DasAry_disownElements( DasAry* pThis, size_t* pLen, size_t* pOffset ); @@ -557,7 +557,7 @@ DAS_API const char* DasAry_id(const DasAry* pThis); */ DAS_API das_units DasAry_units(const DasAry* pThis); -/** Get the type of value stored in the array if known +/** Get the type of value stored in the array if knownh * * This function is used by dataset objects to know how to cast pointers * to different data array values. @@ -698,7 +698,7 @@ DAS_API int DasAry_stride( * * The caller is responsible for casting to the proper type */ -DAS_API const byte* DasAry_getFill(const DasAry* pThis); +DAS_API const ubyte* DasAry_getFill(const DasAry* pThis); /** Change the fill value for this array * @@ -716,7 +716,7 @@ DAS_API const byte* DasAry_getFill(const DasAry* pThis); * @returns true if fill setting succeeded, false otherwise. * @memberof DasAry */ -DAS_API bool DasAry_setFill(DasAry* pThis, das_val_type vt, const byte* pFill); +DAS_API bool DasAry_setFill(DasAry* pThis, das_val_type vt, const ubyte* pFill); /** Is a valid item located at a complete index @@ -774,7 +774,7 @@ DAS_API bool DasAry_validAt(const DasAry* pThis, ptrdiff_t* pLoc); * overhead in tight loops. * @memberof DasAry */ -DAS_API const byte* DasAry_getAt(const DasAry* pThis, das_val_type et, ptrdiff_t* pLoc); +DAS_API const ubyte* DasAry_getAt(const DasAry* pThis, das_val_type et, ptrdiff_t* pLoc); /** Wrapper around DasAry_get for IEEE-754 binary32 (float) * @memberof DasAry */ @@ -784,7 +784,7 @@ DAS_API const byte* DasAry_getAt(const DasAry* pThis, das_val_type et, ptrdiff_t #define DasAry_getDoubleAt(pThis, pLoc) *((double*)(DasAry_getAt(pThis, vtDouble, pLoc))) /** Wrapper around DasAry_get for unsigned bytes * @memberof DasAry */ -#define DasAry_getByteAt(pThis, pLoc) *((byte*)(DasAry_getAt(pThis, vtByte, pLoc))) +#define DasAry_getByteAt(pThis, pLoc) *((ubyte*)(DasAry_getAt(pThis, vtUByte, pLoc))) /** Wrapper around DasAry_get for unsigned 16-bit integers * @memberof DasAry */ #define DasAry_getUShortAt(pThis, pLoc) *((uint16_t*)(DasAry_getAt(pThis, etUint16, pLoc))) @@ -823,7 +823,7 @@ DAS_API const byte* DasAry_getAt(const DasAry* pThis, das_val_type et, ptrdiff_t * enough to hold all the values or if any other error is encountered * @memberof DasAry */ -DAS_API bool DasAry_putAt(DasAry* pThis, ptrdiff_t* pStart, const byte* pVals, size_t uVals); +DAS_API bool DasAry_putAt(DasAry* pThis, ptrdiff_t* pStart, const ubyte* pVals, size_t uVals); /** Get a pointer to the elements contained by a partial index * @@ -867,7 +867,7 @@ DAS_API bool DasAry_putAt(DasAry* pThis, ptrdiff_t* pStart, const byte* pVals, s * @endcode * @memberof DasAry */ -DAS_API const byte* DasAry_getIn( +DAS_API const ubyte* DasAry_getIn( const DasAry* pThis, das_val_type et, int nDim, ptrdiff_t* pLoc, size_t* pCount ); @@ -878,7 +878,7 @@ DAS_API const byte* DasAry_getIn( * the amount of space for writing is *pCount times the element size * from DasAry_valSize(). */ -DAS_API byte* DasAry_getBuf( +DAS_API ubyte* DasAry_getBuf( DasAry* pThis, das_val_type et, int nDim, ptrdiff_t* pLoc, size_t* pCount ); @@ -892,11 +892,11 @@ DAS_API byte* DasAry_getBuf( /** A wrapper around DasAry_getIn that casts the output and preforms type checking * @memberof DasAry */ -#define DasAry_getCharsIn(T, ...) (const char*) DasAry_getIn(T, vtByte, __VA_ARGS__) +#define DasAry_getCharsIn(T, ...) (const char*) DasAry_getIn(T, vtUByte, __VA_ARGS__) /** A wrapper around DasAry_getIn that casts the output and preforms type checking * @memberof DasAry */ -#define DasAry_getBytesIn(T, ...) (const byte*) DasAry_getIn(T, vtByte, __VA_ARGS__) +#define DasAry_getBytesIn(T, ...) (const ubyte*) DasAry_getIn(T, vtUByte, __VA_ARGS__) /** A wrapper around DasAry_getIn that casts the output and preforms type checking * @memberof DasAry */ @@ -1004,11 +1004,11 @@ DAS_API size_t DasAry_qubeIn(DasAry* pThis, int iRecDim); * @param pVals A constant pointer to values to add MAY BE NULL! If NULL * uCount fill values are appended * @param uCount The number of values to add - * @returns true if uCount items were appended to the array, false otherwise + * @returns A pointer to the first value written or NULL if an error occurred * * @memberof DasAry */ -DAS_API bool DasAry_append(DasAry* pThis, const byte* pVals, size_t uCount); +DAS_API byte* DasAry_append(DasAry* pThis, const ubyte* pVals, size_t uCount); /** Mark a ragged dimension as finished * @@ -1091,7 +1091,7 @@ DAS_API size_t DasAry_clear(DasAry* pThis); * * @memberof DasAry */ -DAS_API int DasAry_cmp(DasAry* pThis, const byte* vpFirst, const byte* vpSecond ); +DAS_API int DasAry_cmp(DasAry* pThis, const ubyte* vpFirst, const ubyte* vpSecond ); /** Record which packets contain data destine for this array * diff --git a/das2/aryenc.c b/das2/aryenc.c new file mode 100644 index 0000000..2586c98 --- /dev/null +++ b/das2/aryenc.c @@ -0,0 +1,584 @@ +/* Copyright (C) 2024 Chris Piker + * + * This file is part of das2C, the Core Das C Library. + * + * das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with das2C; if not, see . + */ + + #define _POSIX_C_SOURCE 200112L + +#include "aryenc.h" +#include "value.h" + +/* Operations flags */ +#define DASENC_VALID 0x0001 /* If not 1, not a valid encoder */ +#define DASENC_SWAP 0x0002 /* If set bytes must be swapped prior to IO */ +#define DASENC_CAST 0x0004 /* If set bytes must be transformed prior to IO */ + +#define DASENC_TEXT 0x0010 /* Input is text */ +#define DASENC_PARSE 0x0020 /* Input is text that should be parsed to a value */ +#define DASENC_EPOCH 0x0040 /* Input is text time to convert to epoch time */ + +#define DASENC_NULLTERM 0x0100 /* Input is text that should be null terminated */ +#define DASENC_WRAP 0x0200 /* Wrap last dim reading a string value */ + + +#define ENCODER_SETUP_ERROR "Logic error in encoder setup" + +/* Perform various checks to see if this is even possible */ +DasErrCode DasAryEnc_init( + DasAryEnc* pThis, DasAry* pAry, const char* sSemantic, const char* sEncType, + uint16_t uSzEach, ubyte cSep, das_units epoch +){ + memset(pThis, 0, sizeof(DasAryEnc)); + pThis->cSep = cSep; + pThis->pAry = pAry; + assert(pAry != NULL); + + /* Don't let the array delete itself out from under us*/ + inc_DasAry(pThis->pAry); + + pThis->vtAry = DasAry_valType( pThis->vtAry ); /* Copy in the value type of the given array */ + + ptrdiff_t aShape[DASIDX_MAX] = {0}; + int nRank = DasAry_shape(pThis->pAry, aShape); + ptrdiff_t nLastIdxSz = aShape[nRank - 1]; + + /* Figure out the encoding of data in the external buffer + first handle the integral types */ + bool bIntegral = false; + if(strcmp(sEncType, "BEint") == 0){ + switch(uSzEach){ + case 8: pThis->vtBuf = vtLong; break; + case 4: pThis->vtBuf = vtInt; break; + case 2: pThis->vtBuf = vtShort; break; + case 1: pThis->vtBuf = vtByte; break; + default: goto UNSUPPORTED; + } +#ifdef HOST_IS_LSB_FIRST + pThis->uProc |= DASENC_SWAP; +#endif + bIntegral = true; + } + else if(strcmp(sEncType, "LEint") == 0){ + switch(uSzEach){ + case 8: pThis->vtBuf = vtLong; break; + case 4: pThis->vtBuf = vtInt; break; + case 2: pThis->vtBuf = vtShort; break; + case 1: pThis->vtBuf = vtByte; break; + default: goto UNSUPPORTED; + } + bIntegral = true; + } + else if(strcmp(sEncType, "BEuint") == 0){ + switch(uSzEach){ + case 8: pThis->vtBuf = vtULong; break; + case 4: pThis->vtBuf = vtUInt; break; + case 2: pThis->vtBuf = vtUShort; break; + case 1: pThis->vtBuf = vtUByte; break; + default: goto UNSUPPORTED; + } +#ifdef HOST_IS_LSB_FIRST + pThis->uProc |= DASENC_SWAP; +#endif + bIntegral = true; + } + else if(strcmp(sEncType, "LEuint") == 0){ + switch(uSzEach){ + case 8: pThis->vtBuf = vtULong; break; + case 4: pThis->vtBuf = vtUInt; break; + case 2: pThis->vtBuf = vtUShort; break; + case 1: pThis->vtBuf = vtUByte; break; + default: goto UNSUPPORTED; + } + bIntegral = true; + } + else if(strcmp(sEncType, "BEreal") == 0){ + switch(uSzEach){ + case 8: pThis->vtBuf = vtDouble; break; + case 4: pThis->vtBuf = vtFloat; break; + default: goto UNSUPPORTED; + } +#ifdef HOST_IS_LSB_FIRST + pThis->uProc |= DASENC_SWAP; +#endif + bIntegral = true; + } + else if(strcmp(sEncType, "LEreal") == 0){ + switch(uSzEach){ + case 8: pThis->vtBuf = vtDouble; break; + case 4: pThis->vtBuf = vtFloat; break; + default: goto UNSUPPORTED; + } + bIntegral = true; + } + else if(strcmp(sEncTyp, "byte") == 0){ + if(uSzEach != 1) goto UNSUPPORTED; + pThis->vtBuf = vtByte; + bIntegral = true; + } + else if(strcmp(sEncTyp, "ubyte") == 0){ + if(uSzEach != 1) goto UNSUPPORTED; + pThis->vtBuf = vtUByte; + bIntegral = true; + } + + if(bIntegral){ + if(das_vt_size(pThis->vtBuf) > das_vt_size(pThis->vtAry)) + goto UNSUPPORTED; + + /* If the array value type is floating point then it must + and the buffer type is integer, then it must be wider then + the integers */ + if(das_vt_isInt(pThis->vtBuf) && das_vt_isReal(pThis->vtAry)){ + if(das_vt_size(pThis->vtAry) == das_vt_size(pThis->vtBuf)) + goto UNSUPPORTED; + } + + /* I need to cast values up to a larger size, flag that */ + if(das_vt_size(pThis->vtBuf) != das_vt_size(pThis->vtAry)) + pThis->uFlags |= DASENC_CAST; + + /* Temporary: Remind myself to call DasAry_markEnd() when writing + non-string variable length items */ + if(nLastIdxSz == DASIDX_RAGGED){ + daslog_info("Hi Developer: Variable length last index detected, " + "make sure you call DasAry_markEnd() after packet reads."); + } + + return DAS_OKAY; + } + + if(strcmp(sEncType, 'utf8') != 0){ + goto UNSUPPORTED; + } + + pThis->uFlags |= DASENC_TEXT; + + // Deal with the text types + if(strcmp(sSemantic, "bool") == 0){ + return das_error(DASERR_NOTIMP, "TODO: Add parsing for 'true', 'false' etc."); + } + else if((strcmp(sSemantic, "int") == 0)||(strcmp(sSemantic, "real") == 0)){ + pThis->uFlags |= DASENC_PARSE; + } + else if((strcmp(sSemantic, "datetime") == 0)){ + /* If we're storing this as a datetime structure it's covered, if + we need to convert to something else the units are needed */ + if(pThis->vtAry != vtTime){ + pThis->uFlags |= DASENC_EPOCH; + if( (epoch == NULL) || !(Units_canConvert(epoch, UNIT_US2000)) ) + goto UNSUPPORTED; + + /* Check that the array element size is big enough for the units in + question */ + if((epoch == UNIT_TT2000)&&(pThis->vtAry != vtLong)&&(pThis->vtAry != vtULong)) + goto UNSUPPORTED; + } + } + else if(strcmp(sSemantic, "string") == 0){ + + if(pThis->vtAry != vtUByte) /* Expect uByte storage for strings not */ + goto UNSUPPORTED; /* vtText as there is no external place */ + /* to put the string data */ + + if(DasAry_getUsage(pThis->pAry) & D2ARY_AS_STRING){ + pThis->uProc |= DASENC_NULLTERM; + } + + /* If storing string data, we need to see if the last index of the array is + big enough */ + if((nLastIdxSz != DASIDX_RAGGED)&&(nLastIdxSz < uSzEach)) + goto UNSUPPORTED; + + if((nLastIdxSz == DASIDX_RAGGED)&&(nRank > 1)) + pThis->uProc |= DASENC_WRAP; /* Wrap last index for ragged strings */ + } + else{ + goto UNSUPPORTED; + } + + + SUPPORTED: + pThis->uProc |= DASENC_VALID; /* Set the valid encoding bit */ + return DAS_OKAY; + + UNSUPPORTED: + if(pThis->uFlags & DASENC_EPOCH) + return das_error(DASERR_ENC, "Can not encode/decode '%s' data from buffers " + "with encoding '%s' for items of %hs bytes each to/from an array of " + " '%s' type elements for time units of '%s'", sSemantic, sEncType, uSzEach, + das_vt_toStr(pThis->vtAry), epoch == NULL ? "none" : Units_toStr(epoch) + ); + else + return das_error(DASERR_ENC, "Can not encode/decode '%s' data from buffers " + "with encoding '%s' for items of %hs bytes each to/from an array of " + " '%s' type elements", sSemantic, sEncType, uSzEach, das_vt_toStr(pThis->vtAry) + ); +} + +/* ************************************************************************* */ +void DasAryEnc_deInit(DasAryEnc* pThis){ + /* No dynamic memory, just decrement the array usage count */ + if(pThis && pThis->pAry) + dec_DasAry(pThis->pAry); +} + +/* ************************************************************************* */ +/* Read helper */ + +static DasErrCode _swap_read(ubyte* pDest, const ubyte* pSrc, size_t uVals, int nSzEa){ + /* Now swap and write */ + ubyte uSwap[8]; + + switch(nSzEa){ + case 2: + for(size_t u = 0; u < (uVals*2); u += 2){ + uSwap[0] = pSrc[u+1]; + uSwap[1] = pSrc[u]; + *((uint16_t*)(pDest + u)) = *(uint16_t)uSwap; + } + case 4: + for(size_t u = 0; u < (nVals*4); u += 4){ + uSwap[0] = pSrc[u+3]; + uSwap[1] = pSrc[u+2]; + uSwap[2] = pSrc[u+1]; + uSwap[3] = pSrc[u]; + *((uint32_t*)(pDest + u)) = *(uint32_t)uSwap; + } + case 8: + for(size_t u = 0; u < (nVals*8); u += 8){ + uSwap[0] = pSrc[u+7]; + uSwap[1] = pSrc[u+6]; + uSwap[2] = pSrc[u+5]; + uSwap[3] = pSrc[u+4]; + uSwap[4] = pSrc[u+3]; + uSwap[5] = pSrc[u+2]; + uSwap[6] = pSrc[u+1]; + uSwap[7] = pSrc[u]; + *((uint64_t*)(pDest + u)) = *(uint64_t)uSwap; + } + default: + return das_error(DASERR_ENC, "Logic error"); + } + return DAS_OKAY; +} + +/* ************************************************************************* */ +/* Read helper */ + +static DasErrCode _cast_read( + ubyte* pDest, ubyte* pSrc, size_t uVals, das_val_type vtAry, das_val_type vtBuf +){ + size_t v; + switch(vtAry){ + case vtDouble: + switch(vtBuf){ + case vtUbyte: for(v=0; vuProc & DASENC_TEXT)){ /* .... Reading binary data */ + + uVals = uBufLen / pThis->nBufValSz; + if((nExpect > 0) && (uVals > nExpect)) + uVals = (size_t)nExpect; + + ubyte* pWrite = NULL; + + switch(pThis->uProc){ + + /* Easy mode, external data and internal array have the same value type */ + case DASENC_VALID: + assert(pThis->nBufValSz == pThis->nAryValSz); + if(DasAry_append(pThis->pAry, pBuf, uVals) == NULL) + return -1 * DASERR_ARRAY; + break; + + /* Almost easy, only need to swap to get into internal storage */ + case DASENC_VALID|DASENC_SWAP: + assert(pThis->nBufValSz == pThis->nAryValSz); + + /* Alloc space as fill, then write in swapped values */ + if((pWrite = DasAry_append(pThis->pAry, NULL, uVals)) == NULL) + return -1 * DASERR_ARY; + + if((nRet = _swap_read(pWrite, pBuf, uVals, pThis->nBufValSz)) != DAS_OKAY) + return -1 * nRet; + break; + + /* Need to cast values to a larger type for storage */ + case DASENC_VALID|DASENC_CAST: + + if((pWrite = DasAry_append(pThis->pAry, NULL, uVals)) == NULL) + return -1 * DASERR_ARY; + + if((nRet = _cast_read(pWrite, pBuf, uVals, pThis->vtAry, pThis->vtBuf)) != DAS_OKAY) + return -1 * nRet; + break + + /* Bigest binary change, swap and cast to a larger type for storage */ + case DASENC_VALID|DASENC_CAST|DASENC_SWAP: + + if((pWrite = DasAry_append(pThis->pAry, NULL, uVals)) == NULL) + return -1 * DASERR_ARY; + + if((nRet = _swap_cast_read(pWrite, pBuf, uVals, pThis->vtAry, pThis->vtBuf)) != DAS_OKAY) + return -1 * nRet; + break + + default: + return -1 * das_error(DASERR_ENC, ENCODER_SETUP_ERROR); + } + + if(pRead) + *pRead = uVals; + + return uBufLen - (uVals * (pThis->nBufValSz)); /* Return count of unused bytes */ + } + + if(pThis->vtBuf != vtText){ + return -1 * das_error(DASERR_ENC, "Expected a text type for the external buffer"); + } + + /* Text parsing */ + char sValue[1024] = {'\0'}; + size_t uValSz, uToWrite, uGot = 0; + ubyte aValue[sizeof(das_time)]; + uVals = 0; + + const char* pGet = pBuf; + while((uGot < uBufLen)){ + if((nExpect > 0) && (uVals == nExpect)) + break; + + /* Find a sep or the end of the buffer */ + while(*pGet == cSep || *pGet == '\0' || (!cSep && isspace(*pGet)) ){ + ++pGet; + ++uGot; + if(uGot == uBufLen) + goto PARSE_DONE; + } + + if(uValSz > 0) + memset(sValue, 0, uValSz); + uValSz = 0; + + while(*pGet != cSep && *pGet != '\0' && (cSep || !isspace(*pGet)) ){ + sValue[uValSz] = *pGet; + ++pGet; + ++uGot; + ++uValSz; + if((uGot == uBufLen)||(uValSz > 254)) + break; + } + + if(uValSz > 0){ + + if(pThis->uProc & DASENC_PARSE){ + nErr = das_value_fromStr(aValue, sizeof(das_time), pThis->vtAry, sValue); + if(nErr != DAS_OKAY) + return -1 * nErr; + if(!DasAry_append(pThis->pAry, aValue, 1)) + return -1 * DASERR_ARY; + } + else{ + /* No parsing needed, just run in the value. Typically there are + two versions of this. + + 1) We just append characters then call markEnd to roll the next + to last index. + + 2) We append exactly the number of characters to make up the + last index. + */ + if(pThis->uProc & DASENC_WRAP){ + uToWrite = pThis->uProc & DASENC_NULLTERM ? uValSz + 1 : uValSz; + + if(DasAry_append(pThis->pAry, sValue, uToWrite) == NULL); + return -1 * DASERR_ARY; + + DasAry_markEnd(pThis->pAry, DasAry_rank(pThis->pAry) - 1); + } + else{ + uToWrite = uValSz > pThis->uMaxString ? pThis->uMaxStr : uValSz; + + if( (pWrite = DasAry_append(pThis->pAry, sValue, uToWrite)) == NULL); + return -1 * DASERR_ARY; + + /* Fill pad if we need to */ + if(uValSz < pThis->uMaxString){ + uToWrite = pThis->uMaxString - uValSz; + if( DasAry_append(pThis->pAry, NULL, uToWrite) ); + return -1 * DASERR_ARY; + } + } + } + + ++uVals; + } + } + +PARSE_DONE: + if(pRead) + *pRead = uVals; + + return uBufLen - (pGet - pBuf); +} + diff --git a/das2/aryenc.h b/das2/aryenc.h new file mode 100644 index 0000000..31f2f7f --- /dev/null +++ b/das2/aryenc.h @@ -0,0 +1,144 @@ +/* Copyright (C) 2024 Chris Piker + * + * This file is part of das2C, the Core Das2 C Library. + * + * das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with das2C; if not, see . + */ + +/** @file aryenc.h Encoding/Decoding arrays to and from buffers */ + +#ifndef _das_aryenc_h_ +#define _das_aryenc_h_ + +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** Reading and writing array data to buffers */ +typedef struct das_aryenc { + + uint32_t uProc; /* Internal processing flags setup on the call to _init */ + + int nAryValSz; /* The size of each array value in internal buffer */ + + int nBufValSz; /* Width of a single value in the external buffer, ignored for vtText */ + + das_val_type vtBuf; /* The value type in the external buffer */ + + das_val_type vtAry; /* Cached here for rapid access */ + + DasAry* pAry; /* The array for which values are encoded/decoded */ + + ubyte cSep; /* Split strings on this byte value, in addition to null */ + + uint32_t uMaxString; /* If we are storing fixed strings, this is set */ + + das_units timeUnits; /* If ascii times are to be stored as an integral type + this is needed */ + +} DasAryEnc; + +/** Has the memory for this encoder been initialized? */ +DAS_API bool DasAryEnc_isValid(const DasAryEnc* pThis); + +/** Initialize a serial buffer decoder/encoder + * + * @param pThis A pointer to the memory area to initialize + * + * @param pAry A pointer to the array which either receive or supply values. + * Values will be encoded so that they match the value type of the + * array. + * @warning If the basic parameters of this array, such as it's value + * type or rank are changed, then DasAryEnc_init() must be re-called. + * + * @param sSemantic The purpose of the data to store in the buffer, should + * be one of 'bool','int','real','datatime','string'. This determines + * the kinds of calculations that may be performed on the data once + * in memory. + * + * @param sEncType The basic encoding type of data in the buffer, one of: + * - byte : 8-bit signed integer + * - ubyte : 8-bit un-signed integer + * - BEint : A signed integer 2+ bytes long, most significant byte first + * - BEuint : An un-signed integer 2+ bytes long MSB first + * - LEint : Little-endian version of BEint + * - LEuint : Little-endian version of BEuint + * - BEreal : An IEEE-754 floating point value, MSB first + * - LEreal : An IEEE-754 floating point value, LSB first + * - utf8 : A string of text bytes + * + * @param nSzEach the number of bytes in an item. For variable length + * items (which is common with the utf8 encoding) use -1. + * + * @param cSep A single byte used to mark the end of a byte sequence for + * string data. By default any space character marks the end of + * a string. Use 0 to ignore. + * + * @param epoch If time data needs to be converted from UTC strings an epoch + * will be needed. Otherwise this field can be NULL + * + * @returns DAS_OKAY if an decoder/encoder for can be created for the given + * arguments, an error code otherwise. + * + * @note For 'string' semantic data where the last index in the array is + * ragged DasAry_markEnd() will be called after each string is read. + * Otherwise, no string larger then the last index will be written + * and zeros will be appended to fill out the last index when reading + * data. + */ +DAS_API DasErrCode DasAryEnc_init( + DasAryEnc* pThis, DasAry* pAry, const char* sSemantic, const char* sEncType, + uint16_t uSzEach, ubyte cSep, das_units epoch +); + +/** Read values from a simple buffer into an array + * + * @param pThis An encoder + + * @param pBuf A pointer to the memory to read + + * @param nBufLen The length of the buffer parse into the array. Note that + * even for string data the function trys to read nLen bytes. Null + * values do not terminate parsing but do indicate the end of an + * individual utf-8 encoded item. + * + * @param nExpect The number of values to try and read. Reading less then + * this does not trigger an error return. If the caller considers + * reading less values then expect to be an error, compare *pRead + * with the number provided for nExpect. If any number of values + * can be read, set this to -1. + * + * @param pRead A pointer to a location to hold the number of values read + * or NULL. If NULL, the number of values read will not be returned + * + * @returns the number of unread bytes or a negative ERR code if a data conversion + * error occured. + * */ +DAS_API int DasAryEnc_read( + DasAryEnc* pThis, const ubyte* pBuf, size_t nBufLen, int nExpect, int* pRead +); + +/** Release the reference count on the array given to this encoder/decoder */ +DAS_API void DasAryEnc_deInit(DasAryEnc* pThis); + +#ifdef __cplusplus +} +#endif + + +#endif /* _das_aryenc_h_ */ diff --git a/das2/buffer.h b/das2/buffer.h index f388d23..6a1401a 100644 --- a/das2/buffer.h +++ b/das2/buffer.h @@ -1,18 +1,18 @@ /* Copyright (C) 2015-2017 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ /** @file buffer.h Utility to assist with encode and decode operations */ diff --git a/das2/builder.c b/das2/builder.c index ca5e11f..9874557 100644 --- a/das2/builder.c +++ b/das2/builder.c @@ -368,7 +368,7 @@ DasDim* _DasDsBldr_getDim( *p = '\0'; sDimId = sNewDimId; } - if((pDim = DasDs_makeDim(pDs, dType, sDimId)) == NULL) return NULL; + if((pDim = DasDs_makeDim(pDs, dType, sDimId, "")) == NULL) return NULL; if((*puDims) + 1 >= DASBLDR_MAX_DIMS){ das_error(DASERR_BLDR, "Too many dimensions in a single packet %d", @@ -383,7 +383,7 @@ DasDim* _DasDsBldr_getDim( *puDims = *puDims + 1; } else{ - if((pDim = DasDs_makeDim(pDs, dType, sDimId))==NULL) return NULL; + if((pDim = DasDs_makeDim(pDs, dType, sDimId, ""))==NULL) return NULL; } @@ -483,7 +483,7 @@ DasDs* _DasDsBldr_initXY(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) fill = PlaneDesc_getFill(pPlane); pAry = new_DasAry( - sAryId, vtDouble, 0, (const byte*)&fill, RANK_1(0), pPlane->units + sAryId, vtDouble, 0, (const ubyte*)&fill, RANK_1(0), pPlane->units ); } if(pAry == NULL) return NULL; @@ -599,7 +599,7 @@ DasDs* _DasDsBldr_initXYZ(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) fill = PlaneDesc_getFill(pPlane); pAry = new_DasAry( - sAryId, vtDouble, 0, (const byte*)&fill, RANK_1(0), pPlane->units + sAryId, vtDouble, 0, (const ubyte*)&fill, RANK_1(0), pPlane->units ); break; @@ -844,7 +844,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) fill = PlaneDesc_getFill(pPlane); pAry = new_DasAry( - sAryId, vtDouble, 0, (const byte*)&fill, RANK_1(0), pPlane->units + sAryId, vtDouble, 0, (const ubyte*)&fill, RANK_1(0), pPlane->units ); if(pAry == NULL) return NULL; DasAry_setSrc(pAry, PktDesc_getId(pPd), u, 1); @@ -892,7 +892,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) pYTags = _DasDsBldr_yTagVals(pPlane); /* Use put instead of append since we've already allocated the space */ - DasAry_putAt(pAry, IDX0(0), (const byte*)pYTags, uItems); + DasAry_putAt(pAry, IDX0(0), (const ubyte*)pYTags, uItems); free(pYTags); pYTags = NULL; /* If the data aren't waveforms we're going to need to add a new @@ -912,7 +912,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) DasDim_addVar(pXDim, DASVAR_CENTER, pVar); } else{ - pDim = DasDs_makeDim(pDs, DASDIM_COORD, pYTagId); + pDim = DasDs_makeDim(pDs, DASDIM_COORD, pYTagId, ""); if(pDim == NULL) return NULL; DasDim_copyInProps(pDim, 'y', (DasDesc*)pSd); DasDim_copyInProps(pDim, 'y', (DasDesc*)pPd); @@ -949,7 +949,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) fill = PlaneDesc_getFill(pPlane); pAry = new_DasAry( - sAryId, vtDouble, 0, (const byte*)&fill, RANK_2(0, uItems), Zunits + sAryId, vtDouble, 0, (const ubyte*)&fill, RANK_2(0, uItems), Zunits ); if(pAry == NULL) return NULL; if(!DasDs_addAry(pDs, pAry)) return NULL; @@ -1059,7 +1059,7 @@ DasErrCode DasDsBldr_onPktData(PktDesc* pPd, void* vpUd) } pPlane = PktDesc_getPlane(pPd, pAry->uStartItem); assert(pAry->uItems == pPlane->uItems); - DasAry_append(pAry, (const byte*) PlaneDesc_getValues(pPlane), pAry->uItems); + DasAry_append(pAry, (const ubyte*) PlaneDesc_getValues(pPlane), pAry->uItems); } return DAS_OKAY; diff --git a/das2/credentials.c b/das2/credentials.c index 69cd527..08a744e 100644 --- a/das2/credentials.c +++ b/das2/credentials.c @@ -190,7 +190,7 @@ DasCredMngr* new_CredMngr(const char* sKeyStore) memset(&fill, 0, sizeof(das_credential)); pThis->pCreds = new_DasAry( - "cashed_credentials",vtUnknown, sizeof(das_credential), (const byte*)(&fill), + "cashed_credentials",vtUnknown, sizeof(das_credential), (const ubyte*)(&fill), RANK_1(0), UNIT_DIMENSIONLESS ); pThis->prompt = das_term_prompt; @@ -244,7 +244,7 @@ int CredMngr_addCred(DasCredMngr* pThis, const das_credential* pCred) pOld = CredMngr_getCred(pThis, pCred->sServer, pCred->sRealm, pCred->sDataset, false); if(pOld == NULL) - DasAry_append(pThis->pCreds, (const byte*)pCred, 1); + DasAry_append(pThis->pCreds, (const ubyte*)pCred, 1); else memcpy(pOld->sHash, pCred->sHash, DASCRED_HASH_SZ); /* Get terminating null */ @@ -333,7 +333,7 @@ const char* CredMngr_getHttpAuth( if(sServer != NULL) strncpy(cred.sServer, sServer, 127); if(sRealm != NULL) strncpy(cred.sRealm, sRealm, 127); if(sDataset != NULL) strncpy(cred.sDataset, sDataset, 127); - DasAry_append(pThis->pCreds, (const byte*) &cred, 1); + DasAry_append(pThis->pCreds, (const ubyte*) &cred, 1); pCred = (das_credential*)DasAry_getAt(pThis->pCreds, vtUnknown, IDX0(-1)); } memcpy(pCred->sHash, sHash, uLen+1); /* Get terminating null */ @@ -446,7 +446,7 @@ int CredMngr_load(DasCredMngr* pThis, const char* sSymKey, const char* sFile) memset(&fill, 0, sizeof(das_credential)); DasAry* pTmpCreds = new_DasAry( - "temp_credentials",vtUnknown, sizeof(das_credential), (const byte*)(&fill), + "temp_credentials",vtUnknown, sizeof(das_credential), (const ubyte*)(&fill), RANK_1(0), UNIT_DIMENSIONLESS ); @@ -529,7 +529,7 @@ int CredMngr_load(DasCredMngr* pThis, const char* sSymKey, const char* sFile) } // Add the credential - DasAry_append(pTmpCreds, (const byte*)(&cred), 1); + DasAry_append(pTmpCreds, (const ubyte*)(&cred), 1); ++nCreds; } @@ -543,7 +543,7 @@ int CredMngr_load(DasCredMngr* pThis, const char* sSymKey, const char* sFile) pOld = CredMngr_getCred(pThis, pNew->sServer, pNew->sRealm, pNew->sDataset, false); if(pOld == NULL){ - DasAry_append(pThis->pCreds, (const byte*)pNew, 1); // append always copies + DasAry_append(pThis->pCreds, (const ubyte*)pNew, 1); // append always copies } else{ if(strcmp(pOld->sHash, pNew->sHash) != 0) diff --git a/das2/das1.c b/das2/das1.c index c284c87..7f7ef12 100644 --- a/das2/das1.c +++ b/das2/das1.c @@ -80,7 +80,7 @@ void fail (const char *msg) exit (D1ERR); } /* fail */ -int fgetpkt (FILE* fin, char *ph, byte *data, int max) +int fgetpkt (FILE* fin, char *ph, ubyte *data, int max) { int datsize; int mask = *(int *)":\0\0:"; @@ -113,7 +113,7 @@ int fgetpkt (FILE* fin, char *ph, byte *data, int max) } -int getpkt (char *ph, byte *data, int max) +int getpkt (char *ph, ubyte *data, int max) { int datsize; int mask = *(int *)":\0\0:"; @@ -143,7 +143,7 @@ int getpkt (char *ph, byte *data, int max) return datsize; } -int putpkt (const char *ph, const byte *data, const int bytes) +int putpkt (const char *ph, const ubyte *data, const int bytes) { char hex[5]; int mask = *(int *)":\0\0:"; diff --git a/das2/das1.h b/das2/das1.h index 51e3551..ca153dd 100644 --- a/das2/das1.h +++ b/das2/das1.h @@ -157,7 +157,7 @@ void fail (const char *message); * @param max number of bytes to read * @returns number of bytes read */ -int getpkt(char *ph, byte *data, int max); +int getpkt(char *ph, ubyte *data, int max); /** Read a Tagged Das 1 packet from a file object * @@ -167,7 +167,7 @@ int getpkt(char *ph, byte *data, int max); * @param [in] max number of bytes to read * @returns number of bytes read */ -int fgetpkt(FILE* fin, char* ph, byte* data, int max); +int fgetpkt(FILE* fin, char* ph, ubyte* data, int max); /** Write das packet to stdout @@ -177,7 +177,7 @@ int fgetpkt(FILE* fin, char* ph, byte* data, int max); * header I don't know) * @returns 1 on success and 0 on failure */ -int putpkt (const char *ph, const byte *data, const int bytes); +int putpkt (const char *ph, const ubyte *data, const int bytes); #ifdef __cplusplus } diff --git a/das2/dataset.c b/das2/dataset.c index 00d7194..290203b 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -105,8 +105,8 @@ int DasDs_shape(const DasDs* pThis, ptrdiff_t* pShape) if(nDimRank > pThis->nRank){ das_error( DASERR_DS, "Dimension rank consistancy check failure. Dimension " - "%s of dataset %s, is rank %d, must be at most rank %d for consistancy", - pDim->sId, pThis->sId, nDimRank, pThis->nRank + "%s (%s) of dataset %s, is rank %d, must be at most rank %d for consistancy", + pDim->sName, pDim->sDim, pThis->sId, nDimRank, pThis->nRank ); return 0; } @@ -223,7 +223,7 @@ bool DasDs_addAry(DasDs* pThis, DasAry* pAry) if(pThis->uSzArrays < (pThis->uArrays + 1)){ DasAry** pNew = NULL; size_t uNew = pThis->uSzArrays * 2; - if(uNew < 16) uNew = 16; + if(uNew < 6) uNew = 6; if( (pNew = (DasAry**)calloc(uNew, sizeof(void*))) == NULL) return false; @@ -254,12 +254,12 @@ bool DasDs_addDim(DasDs* pThis, DasDim* pDim) return false; } - /* Make sure that I don't already have a varible with this name */ + /* Make sure that I don't already have a dimesion with this name */ for(v = 0; v < pThis->uDims; ++v){ - if(strcmp(pThis->lDims[v]->sId, pDim->sId) == 0){ + if(strcmp(pThis->lDims[v]->sName, pDim->sName) == 0){ das_error( DASERR_DS, "A dimension named %s already exists in dataset %s", - pDim->sId, pThis->sId + pDim->sName, pThis->sId ); return false; } @@ -282,7 +282,7 @@ bool DasDs_addDim(DasDs* pThis, DasDim* pDim) if(!bInSet){ das_error( D2ERR_DS, "Data dimension %s depends on coordinate %s which " - "is not part of dataset %s", pDim->sId, pDim->aCoords[u]->sId, + "is not part of dataset %s", pDim->sDim, pDim->aCoords[u]->sId, pThis->sId ); return false; @@ -316,9 +316,10 @@ bool DasDs_addDim(DasDs* pThis, DasDim* pDim) return true; } -DasDim* DasDs_makeDim(DasDs* pThis, enum dim_type dType, const char* sId) -{ - DasDim* pDim = new_DasDim(sId, dType, pThis->nRank); +DAS_API DasDim* DasDs_makeDim( + DasDs* pThis, enum dim_type dType, const char* sDim, const char* sId +){ + DasDim* pDim = new_DasDim(sDim, sId, dType, pThis->nRank); if(! DasDs_addDim(pThis, pDim)){ del_DasDim(pDim); return NULL; @@ -475,9 +476,9 @@ DasDs* new_DasDs( das_error(DASERR_DS, "Datasets below rank 1 are not supported"); return NULL; } - if(nRank > 16){ - das_error(DASERR_DS, "Datasets above rank 16 are not currently " - "supported, but can be if needed."); + if(nRank > DASIDX_MAX ){ + das_error(DASERR_DS, "Datasets above rank %d are not currently " + "supported, but can be if needed.", DASERR_DS); return NULL; } @@ -497,53 +498,3 @@ DasDs* new_DasDs( return pThis; } - -/* ************************************************************************* */ -/* XML Serialization */ - -#define ELT_NONE 0 - -#define ELT_DS 1 // Opens on -> becomes DasDs - // * on open: create DasDs, set DasDs ptr, set Prop Dest ptr - -#define ELT_PDIM 2 // Opens on or -> becomes DasDim - // * on open: create DasDim, set cur DasDim ptr, take prop dest ptr - // * on close: set prop dest ptr back to the ds. - -#define ELT_PSET 3 // Opens on (no actions) - // (could parse for das2 style props, but don't those are - // invalide XML and should not be encouraged) - -#define ELT_PROP 4 // Opens on

-> becomes DasProp - // * on open: save attribs to parser vars - // * on data: append char_data buffer - // * on close: add prop to current prop dest - -#define ELT_VAR 5 // Opens on , -> becomes DasVar - // * on open: save attribs to parser vars - // * on close: unset current var ptr - -// When opening a vector, set the number of internal dimensions as 1. -// then - -#define ELT_VSEQ 6 // Atomic on -> part of DasVar - // * on open: - -#define ELT_VVAL 7 -#define ELT_VPKT 8 - -typedef struct ds_xml_parser { - int eltCur; - DasDs* pDs; - DasDim* pDim; - DasVar* pVar; - - -} ds_xml_parser_t; - -DAS_API DasDs* new_DasDs_xml(DasBuf* pBuf, DasDesc* pParent, int nPktId) -{ - - - return NULL; -} \ No newline at end of file diff --git a/das2/dataset.h b/das2/dataset.h index 2af2863..ef85014 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -1,18 +1,18 @@ /* Copyright (C) 2017-2018 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ @@ -22,6 +22,7 @@ #define _das_dataset_h_ #include +#include #ifdef __cplusplus extern "C" { @@ -58,7 +59,7 @@ extern "C" { * * 2016-01 2016-02 2016-03 2016-04 2016-05 2016-06 * Baltimore 2351 3789 4625 5525 6135 5902 - * Bogotaà 109065 110365 99625 98265 43850 33892 + * Bogotaà 109065 110365 99625 98265 43850 33892 * Chicago 4789 5764 8901 10145 13456 22678 * Des Moines 4 10 33 35 44 107 * @@ -94,13 +95,18 @@ extern "C" { * Classes and functions for storing and manipulating correlated data values */ +/* Number of encoders that can be stored internally, more then this and they + * have to be allocated on the heap. This is the common "small vector" + * optimization */ +#define DASDS_LOC_ENC_SZ 12 + /** @addtogroup datasets * @{ */ -/** Das2 Datasets +/** Das Datasets * - * Das2 Datasets provide storage for arrays that contains both data values and + * Das Datasets provide storage for arrays that contains both data values and * coordinate values. Each dataset corresponds to a single index space. * All variables in the dataset support the same bulk index range, though they * may not produce unique values for each distinct set of indices. @@ -172,6 +178,15 @@ typedef struct dataset { recalculated instead of using cached values. If false, cached values are expected to already be available */ + + /* dataset arrays can be written in chunks to output buffers. The number of + * elements in each chuck, the encoding of each element any separators are + * defined below. */ + DasAryEnc** lEncs; + size_t uSzEncs; + + DasAryEnc aPktEncs[DASDS_LOC_ENC_SZ]; + } DasDs; /** Create a new dataset object. @@ -208,25 +223,6 @@ DAS_API DasDs* new_DasDs( const char* sId, const char* sGroupId, int nRank ); -/** Create a Das Dataset from XML data - * - * @param pBuf The buffer to read. Reading will start with the read point - * and will run until DasBuf_remaining() is 0 or the end tag - * is found, which ever comes first. - * - * @param pParent The parent packet descriptor. Building a dataset may - * trigger a frame definition, so the stream discriptor may - * NOT be null. - * - * @param nPktId The packet's ID within it's parent's array. My be 0 if - * and only if pParent is NULL - * - * @return A pointer to a new DasDs and all if it's children allocated - * on the heap, or NULL on an error. - * @memberof DasDs - */ -DAS_API DasDs* new_DasDs_xml(DasBuf* pBuf, DasDesc* pParent, int nPktId); - /** Delete a Data object, cleaning up it's memory * * If the underlying arrays and property values are needed else where @@ -441,14 +437,95 @@ DAS_API const char* DasDs_id(const DasDs* pThis); * it's attached too is removed you'll have to call inc_DasAry() on * your own. * - * @returns Almost always returns true. The array list in the dataset - * requires a small malloc (array memory itself is *NOT* copied.) - * This function only returns false in the rare instance that a - * few dozen bytes can not be allocated. - * + * @returns Returns DAS_OKAY so long as no previous arrays have the same array id. + * * @memberof DasDs */ -DAS_API bool DasDs_addAry(DasDs* pThis, DasAry* pAry); +DAS_API DasErrCode DasDs_addAry(DasDs* pThis, DasAry* pAry); + + +/** Get a dataset array given it's identifier + * + * Every array must have a text ID, furthermore these must be unique within + * the dataset (enforced by DasDs_addAry). + * + * @param pThis a Dataset structure pointer + * + * @param sId A text string identifying one of the datasets arrays + * + * @returns A pointer to the array, or NULL if no array with the given ID + * could be found in the dataset. + */ +DAS_API DasAry* DasDs_getAryById(DasDs* pThis, const char* sId); + + +/** Define a packet data encoded/decoder for fixed length items and arrays + * + * @param pThis a Dataset structure pointer + * + * @param sAryId The array to encode to/decode from + * + * @param sEncType one of the following encoding types as taken from + * the das-basic-stream-v3.0.xsd schema: + * + * - byte : 8-bit signed integer + * - ubyte : 8-bit un-signed integer + * - utf8 : A string of text bytes + * - BEint : A signed integer 2+ bytes long, most significant byte first + * - BEuint : An un-signed integer 2+ bytes long MSB first + * - LEint : Little-endian version of BEint + * - LEuint : Little-endian version of BEuint + * - BEreal : An IEEE-754 floating point value, MSB first + * - LEreal : An IEEE-754 floating point value, LSB first + * + * @param nItemBytes The number of bytes in an item. For variable + * length items terminated by a separator, use -9 (DASENC_USE_SEP) + * and specify an item terminator. For variable length items + * with explicit lengths use -1 (DASENC_ITEM_LEN) + * + * @param nNumItems The number of items to read/write at a time. + * + * @returns DAS_OKAY if the array codec could be defined + */ +DAS_API DasErrCode DasDs_addFixedCodec( + DasDs* pThis, const char* sAryId, const char* sEncType, + int nItemBytes, int nNumItems +); + +/** Define a packet data encoder for variable length items and arrays + * + * @param pThis @see DasDs_addFixedCodec + * + * @param sAryId @see DasDs_addFixedCodec + * + * @param sEncType @see DasDs_addFixedCodec + * + * @param nItemBytes The number of bytes in an item. For variable + * length items terminated by a separator, use -9 (DASENC_USE_SEP) + * and specify an item terminator. For variable length items + * with explicit lengths use -1 (DASENC_ITEM_LEN) + * + * @param nSeps The number of separators for variable length items. + * + * For text items, item separator is first. Next are the separators + * that indicate the end of fastest moving dataset index, followed + * by the end of the next fastests an so on. The max number of + * separators must be 1 less then the rank of the dataset for not + * text encodings, and not greater then the rank of the dataset + * for non-text encodings. + * + * @param uSepLen The length in bytes of the variable length separators. + * Must be a value from 1 through 8, inclusive. + * + * @param pSepByIdx An array of pointers to separator values. + * + * @returns DAS_OKAY if the array codec could be defined + */ +DAS_API DasErrCode DasDs_addRaggedCodec( + DasDs* pThis, const char* sAryId, const char* sEncType, + int nItemBytes, int nSeps, ubyte uSepLen, const ubyte* pSepByIdx +); + /** Make a new dimension within this dataset * @@ -462,14 +539,19 @@ DAS_API bool DasDs_addAry(DasDs* pThis, DasAry* pAry); * all data dimensions that vary in any of the same indices as * this dimension will be set to depend on these coordinates. * - * @param sId A name for this dimension. Standard names such as 'time', + * @param sDim A name for this dimension. Standard names such as 'time', * 'frequence' 'range' 'altitude' etc. should be used if possible. * No standard list of dimension names are provided by this library, * it is left up to the application programmers to handle this. + * + * @param sId An identifier for this paritiular variable group in a dimension. + * For example 'Search_Coil', 'DC_MAG', etc. * * @memberof DasDs */ -DAS_API DasDim* DasDs_makeDim(DasDs* pThis, enum dim_type dType, const char* sId); +DAS_API DasDim* DasDs_makeDim( + DasDs* pThis, enum dim_type dType, const char* sDim, const char* sId +); /** Get the data set group id diff --git a/das2/datum.c b/das2/datum.c index 34ab56b..f0d084d 100644 --- a/das2/datum.c +++ b/das2/datum.c @@ -157,7 +157,7 @@ double das_datum_toDbl(const das_datum* pThis) { double rRet; switch(pThis->vt){ - case vtByte: rRet = *((byte*)pThis); break; + case vtUByte: rRet = *((ubyte*)pThis); break; case vtUShort: rRet = *((uint16_t*)pThis); break; case vtShort: rRet = *((int16_t*)pThis); break; case vtInt: rRet = *((int32_t*)pThis); break; @@ -220,7 +220,7 @@ bool das_datum_toEpoch( return false; switch(pThis->vt){ - case vtByte: rDbl = *((byte*)pThis); break; + case vtUByte: rDbl = *((ubyte*)pThis); break; case vtUShort: rDbl = *((uint16_t*)pThis); break; case vtShort: rDbl = *((int16_t*)pThis); break; case vtInt: rDbl = *((int32_t*)pThis); break; @@ -263,7 +263,7 @@ char* _das_datum_toStr( int nWrote = 0; switch(pThis->vt){ - case vtByte: + case vtUByte: nWrote = snprintf(sBuf, nLen - 1, "%hhu", *((uint8_t*)pThis)); break; @@ -314,7 +314,7 @@ char* _das_datum_toStr( while((u*3 < (nLen - 4))&&(u < pBs->sz)){ - snprintf(sBuf + u*3, 3, "%hhX ", ((byte*)pBs->ptr)[u]); + snprintf(sBuf + u*3, 3, "%hhX ", ((ubyte*)pBs->ptr)[u]); ++u; nWrote += 3; } diff --git a/das2/datum.h b/das2/datum.h index d1bbd78..2dd8058 100644 --- a/das2/datum.h +++ b/das2/datum.h @@ -65,7 +65,7 @@ extern "C" { * structure. Two prime examples are geometric vectors and strings. */ typedef struct datum_t { - byte bytes[DATUM_BUF_SZ]; /* 32 bytes of space */ + ubyte bytes[DATUM_BUF_SZ]; /* 32 bytes of space */ das_val_type vt; uint32_t vsize; das_units units; diff --git a/das2/defs.h b/das2/defs.h index 46c2f7b..0e02df8 100644 --- a/das2/defs.h +++ b/das2/defs.h @@ -132,7 +132,7 @@ extern "C" { #endif /* Make it obvious when we are just moving data as opposed to characters */ -typedef uint8_t byte; +typedef uint8_t ubyte; /** return code type * 0 indicates success, negative integer indicates failure @@ -173,7 +173,8 @@ typedef int DasErrCode; #define DASERR_PROP 38 #define DASERR_FRM 39 #define DASERR_VEC 40 -#define DASERR_MAX 40 +#define DASERR_SERIAL 41 +#define DASERR_MAX 41 #ifdef __cplusplus } diff --git a/das2/descriptor.c b/das2/descriptor.c index b93e879..11658a5 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -65,7 +65,7 @@ void DasDesc_init(DasDesc* pThis, desc_type_t dt){ default: sId = "desciptor_properties"; break; } - DasAry_init(&(pThis->properties), sId, vtByte, 0, NULL, RANK_2(0,0), NULL); + DasAry_init(&(pThis->properties), sId, vtUByte, 0, NULL, RANK_2(0,0), NULL); DasAry_setUsage(&(pThis->properties), D2ARY_AS_SUBSEQ); pThis->parent = NULL; @@ -77,7 +77,7 @@ DasDesc* new_Descriptor(){ DasDesc* pThis = (DasDesc*)calloc(1, sizeof(DasDesc)); pThis->type = UNK_DESC; DasAry_init( - &(pThis->properties), "descriptor_properties", vtByte, 0, NULL, RANK_2(0,0), + &(pThis->properties), "descriptor_properties", vtUByte, 0, NULL, RANK_2(0,0), UNIT_DIMENSIONLESS ); DasAry_setUsage(&(pThis->properties), D2ARY_AS_SUBSEQ); @@ -421,24 +421,24 @@ bool DasDesc_equals(const DasDesc* pThis, const DasDesc* pOther) /* Setting Properties */ /* Get pointer to property memory by name, even if it's invalid */ -static byte* _DasDesc_getPropBuf(DasDesc* pThis, const char* sName, size_t* pPropSz) +static ubyte* _DasDesc_getPropBuf(DasDesc* pThis, const char* sName, size_t* pPropSz) { DasAry* pProps = &(pThis->properties); size_t nProps = DasAry_lengthIn(pProps, DIM0); DasProp* pProp; for(size_t i = 0; i < nProps; ++i){ - pProp = (DasProp*) DasAry_getBuf(pProps, vtByte, DIM1_AT(i), pPropSz); + pProp = (DasProp*) DasAry_getBuf(pProps, vtUByte, DIM1_AT(i), pPropSz); if(strcmp(DasProp_name(pProp), sName) == 0) - return (byte*)pProp; + return (ubyte*)pProp; } return NULL; } -static byte* _DasDesc_getWriteBuf(DasDesc* pThis, const char* sName, size_t uNeedSz) +static ubyte* _DasDesc_getWriteBuf(DasDesc* pThis, const char* sName, size_t uNeedSz) { size_t uOldSz = 0; - byte* pBuf = _DasDesc_getPropBuf(pThis, sName, &uOldSz); + ubyte* pBuf = _DasDesc_getPropBuf(pThis, sName, &uOldSz); if(pBuf != NULL){ if(uNeedSz <= uOldSz) return pBuf; @@ -458,19 +458,19 @@ static byte* _DasDesc_getWriteBuf(DasDesc* pThis, const char* sName, size_t uNee DasAry_markEnd(pProps, DIM1); size_t uTmp = 0; - pBuf = DasAry_getBuf(pProps, vtByte, DIM1_AT(-1), &uTmp); + pBuf = DasAry_getBuf(pProps, vtUByte, DIM1_AT(-1), &uTmp); assert(uTmp == uNeedSz); return pBuf; } /* copies the property into the property array */ DasErrCode DasDesc_flexSet( - DasDesc* pThis, const char* sType, byte uType, const char* sName, + DasDesc* pThis, const char* sType, ubyte uType, const char* sName, const char* sVal, char cSep, das_units units, int nStandard ){ size_t uPropSz = dasprop_memsz(sName, sVal); - byte* pBuf = _DasDesc_getWriteBuf(pThis, sName, uPropSz); + ubyte* pBuf = _DasDesc_getWriteBuf(pThis, sName, uPropSz); if(pBuf == NULL){ return das_error(DASERR_DESC, "Couldn't get write buffer for property %s of size %zu", sName, @@ -488,7 +488,7 @@ DAS_API DasErrCode DasDesc_setProp(DasDesc* pThis, const DasProp* pProp) size_t uPropSz = DasProp_size(pProp); const char* sName = DasProp_name(pProp); - byte* pBuf = _DasDesc_getWriteBuf(pThis, sName, uPropSz); + ubyte* pBuf = _DasDesc_getWriteBuf(pThis, sName, uPropSz); if(pBuf == NULL){ return das_error(DASERR_DESC, "Couldn't get write buffer for property %s of size %zu", @@ -736,7 +736,7 @@ void DasDesc_copyIn(DasDesc* pThis, const DasDesc* pOther) continue; size_t uOldLen = 0; - byte* pBuf = _DasDesc_getPropBuf(pThis, DasProp_name(pProp), &uOldLen); + ubyte* pBuf = _DasDesc_getPropBuf(pThis, DasProp_name(pProp), &uOldLen); if(pBuf != NULL){ if(uNewLen <= uOldLen){ // Since properties self-null, it's okay to have extra cruft after one of them @@ -754,7 +754,7 @@ void DasDesc_copyIn(DasDesc* pThis, const DasDesc* pOther) DasAry_markEnd(&(pThis->properties), DIM1); size_t uTmp; - pBuf = DasAry_getBuf(&(pThis->properties), vtByte, DIM1_AT(-1), &uTmp); + pBuf = DasAry_getBuf(&(pThis->properties), vtUByte, DIM1_AT(-1), &uTmp); assert(uTmp >= uNewLen); memcpy(pBuf, pProp, uNewLen); } @@ -768,7 +768,7 @@ bool DasDesc_remove(DasDesc* pThis, const char* sName) { /* properties aren't removed, just marked invalid */ size_t uPropSz; - byte* pBuf = _DasDesc_getPropBuf(pThis, sName, &uPropSz); + ubyte* pBuf = _DasDesc_getPropBuf(pThis, sName, &uPropSz); if(pBuf == NULL) return false; @@ -818,7 +818,7 @@ DasErrCode _DasDesc_encode( if(!isalnum(sName[j]) && (sName[j] != '_') && (sName[j] != ':')) return das_error(DASERR_DESC, "Invalid property name '%s'", sName); - byte uType = DasProp_type(pProp); + ubyte uType = DasProp_type(pProp); //const char* sType = DasProp_type2(pProp); diff --git a/das2/descriptor.h b/das2/descriptor.h index edf6c2d..19dcd70 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -101,7 +101,7 @@ typedef struct das_descriptor { and there is no upper limit to the number of properties (yay!) */ - //char* properties[DAS_XML_MAXPROPS]; + //char* properties[400]; DasAry properties; //Number of invalid properites (saved to make length cals faster) @@ -263,7 +263,7 @@ DAS_API DasErrCode DasDesc_set( * See @DasProp_init for the argument description */ DAS_API DasErrCode DasDesc_flexSet( - DasDesc* pThis, const char* sType, byte uType, const char* sName, + DasDesc* pThis, const char* sType, ubyte uType, const char* sName, const char* sVal, char cSep, das_units units, int nStandard ); diff --git a/das2/dimension.c b/das2/dimension.c index 7bc26a8..5436262 100644 --- a/das2/dimension.c +++ b/das2/dimension.c @@ -1,18 +1,18 @@ -/* Copyright (C) 2018 - 2019 Chris Piker +/* Copyright (C) 2018 - 2024 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * Das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ #define _POSIX_C_SOURCE 200112L @@ -112,7 +112,7 @@ ptrdiff_t DasDim_lengthIn(const DasDim* pThis, int nIdx, ptrdiff_t* pLoc) return nLengthIn; } -const char* DasDim_id(const DasDim* pThis){ return pThis->sId; } +const char* DasDim_id(const DasDim* pThis){ return pThis->sDim; } int _DasDim_varOrder(const char* sRole){ if(strcmp(sRole, DASVAR_CENTER) == 0) return 0; @@ -142,7 +142,7 @@ char* DasDim_toStr(const DasDim* pThis, char* sBuf, int nLen) const char* sDimType = "Data"; if(pThis->dtype == DASDIM_COORD) sDimType = "Coordinate"; int nWritten = snprintf(sBuf, nLen - 1, "%s Dimension: %s\n", - sDimType, pThis->sId); + sDimType, pThis->sDim); pWrite += nWritten; nLen -= nWritten; if(nLen < 1) return sBuf; @@ -198,13 +198,13 @@ bool DasDim_addVar(DasDim* pThis, const char* role, DasVar* pVar) if(pThis->uVars == DASDIM_MAXVAR){ das_error( DASERR_DIM, "Maximum number of variables in a dimension %d exceeded. " - "The limit was chosen arbitrarily and can be changed or removed " - "altogether, contact a libdas2 maintainer", DASDIM_MAXVAR + "The limit was chosen arbitrarily and can be changed or even removed " + "altogether. Contact a das2C maintainer", DASDIM_MAXVAR ); return false; } - strncpy(pThis->aRoles[pThis->uVars], role, 31); + strncpy(pThis->aRoles[pThis->uVars], role, DASDIM_ROLE_SZ-1); pThis->aVars[pThis->uVars] = pVar; pThis->uVars += 1; return true; @@ -292,7 +292,7 @@ DasVar* DasDim_popVar(DasDim* pThis, const char* role){ /* Construction / Destruction ********************************************* */ -DasDim* new_DasDim(const char* sId, enum dim_type dtype, int nDsRank) +DasDim* new_DasDim(const char* sDim, const char* enum dim_type dtype, int nDsRank) { DasDim* pThis = (DasDim*)calloc(1, sizeof(DasDim)); if(pThis == NULL){ @@ -302,8 +302,8 @@ DasDim* new_DasDim(const char* sId, enum dim_type dtype, int nDsRank) DasDesc_init((DasDesc*)pThis, PHYSDIM); pThis->dtype = dtype; - das_assert_valid_id(sId); - strncpy(pThis->sId, sId, 63); + das_assert_valid_id(sDim); + strncpy(pThis->sDim, sDim, 63); pThis->iFirstInternal = nDsRank; return pThis; diff --git a/das2/dimension.h b/das2/dimension.h index 16ea775..d7fa5b7 100644 --- a/das2/dimension.h +++ b/das2/dimension.h @@ -93,6 +93,11 @@ extern const char* DASVAR_SPREAD; extern const char* DASVAR_WEIGHT; #endif + +#define DASDIM_AXES 4 + +#define DASDIM_ROLE_SZ 32 + /** @addtogroup datasets * @{ */ @@ -123,11 +128,19 @@ enum dim_type { DASDIM_UNK = 0, DASDIM_COORD, DASDIM_DATA }; typedef struct das_dim { DasDesc base; /* Attributes or properties for this variable */ enum dim_type dtype; /* Coordinate or Data flag */ - char sId[DAS_MAX_ID_BUFSZ]; /* A name for this dimension */ + char sDim[DAS_MAX_ID_BUFSZ]; /* A general dimension ID such as 'B', 'E', etc */ + + /* A name for this particular variable group, cannot repeat in the dataset */ + char sName[DAS_MAX_ID_BUFSZ]; /* Plot axes afinity, if any. For variables that have no internal - * indicies, only the first axis make any sense. */ - byte axes[4][3]; + * indicies, only the first axis make any sense. Multiple axis + * entries are possible because this dimension may contain a vector. + * + * A common example of a vector is a "space" dimension defined by a + * 3-vector. + */ + ubyte axes[DASDIM_AXES][3]; /* A direction frame for muli-element vectors in this dimension. * Not stored as a pointer so that memcpy of descriptions takes less @@ -143,7 +156,7 @@ typedef struct das_dim { /* The variables which supply data for this dimension */ DasVar* aVars[DASDIM_MAXVAR]; - char aRoles[DASDIM_MAXVAR][32]; + char aRoles[DASDIM_MAXVAR][DASDIM_ROLE_SZ]; size_t uVars; /* For dependent variables (i.e. data) pointers to relavent independent @@ -157,26 +170,32 @@ typedef struct das_dim { /** Create a new dimension (not as impressive as it sounds) * - * @param sId The id of the dimension, which should be a common name such as + * @param sDim The id of the dimension, which should be a common name such as * time, energy, frequency, latitude, longitude, solar_zenith_angle, * electric_spectral_density, netural_flux_density, etc. It's much * more important for coordinate dimensions to have common names than * data dimensions. * + * @param sName The name of this particular variable group in this dimension + * If NULL, defaults to sDim. This matters because sometimes we may + * have multiple things that take data in the same coordinates. + * * @param dtype One of DASDIM_COORD, DASDIM_DATA * * @param nRank * @memberof DasDim * @return */ -DAS_API DasDim* new_DasDim(const char* sId, enum dim_type dtype, int nRank); +DAS_API DasDim* new_DasDim(const char* sDim, const char* sName, enum dim_type dtype, int nRank); /** Get the dimension's id * * @param pThis a pointer to a das dimension structure. + * * @return The id of the dimension, which should be a common name such as * time, energy, frequency, electric_spectral_density, * netural_flux_density, etc. + * * @memberof DasDim */ DAS_API const char* DasDim_id(const DasDim* pThis); diff --git a/das2/encoding.c b/das2/encoding.c index 9b066bc..93b34f3 100644 --- a/das2/encoding.c +++ b/das2/encoding.c @@ -1,18 +1,18 @@ /* Copyright (C) 2015-2017 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ #define _POSIX_C_SOURCE 200112L @@ -600,7 +600,7 @@ DasErrCode DasEnc_read( /* String parsing can be persnicity, copy over to a null terminated buffer */ if(pThis->nWidth > 63) return das_error(14, "Time values wider than 63 bytes are not " - "handled by the libdas2"); + "handled by the das2C"); if(! dt_parsetime(sBuf, &dt)){ return das_error(14, "Error in parsetime for ACSII time type.\n" ); diff --git a/das2/encoding.h b/das2/encoding.h index 38ce0df..2e1648d 100644 --- a/das2/encoding.h +++ b/das2/encoding.h @@ -1,23 +1,23 @@ /* Copyright (C) 2015-2017 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ /** @file encoding.h Defines storage and access methods for values in a - * Das2 Stream + * das stream */ #ifndef _das_encoding_h_ @@ -84,9 +84,9 @@ DAS_API int isDas2Fill( double value ); * @{ */ -/** Reading and writing values on das2 streams. +/** Reading and writing values to buffers * - * Values in a Das2 Stream have can be encoded in a variety of ways. Values + * Values in a Das Stream have can be encoded in a variety of ways. Values * can be big-endian reals, little-endian floats, ASCII strings, etc. In * to it's basic category values can be represented on the stream using a * variable number of bytes. It is the job of this class to handle diff --git a/das2/frame.c b/das2/frame.c index 73f2835..22c445e 100644 --- a/das2/frame.c +++ b/das2/frame.c @@ -27,7 +27,7 @@ #include "frame.h" -DasFrame* new_DasFrame(DasDesc* pParent, byte id, const char* sName, const char* sType) +DasFrame* new_DasFrame(DasDesc* pParent, ubyte id, const char* sName, const char* sType) { DasFrame* pThis = (DasFrame*) calloc(1, sizeof(DasFrame)); DasDesc_init(&(pThis->base), FRAME); @@ -88,7 +88,7 @@ DAS_API DasErrCode DasFrame_setType(DasFrame* pThis, const char* sType) return DAS_OKAY; } -DAS_API byte DasFrame_getType(const DasFrame* pThis){ +DAS_API ubyte DasFrame_getType(const DasFrame* pThis){ return (pThis->flags & DASFRM_TYPE_MASK); } @@ -130,9 +130,7 @@ int8_t DasFrame_idxByDir(const DasFrame* pThis, const char* sDir) } } - return -1 * das_error(DASERR_FRM, "Direction %s not defined for frame %s", - sDir, pThis->name - ); + return -1; } void del_DasFrame(DasFrame* pThis) diff --git a/das2/frame.h b/das2/frame.h index 2d07b06..4fcad8a 100644 --- a/das2/frame.h +++ b/das2/frame.h @@ -55,7 +55,7 @@ typedef struct frame_descriptor{ DasDesc base; /* Required properties */ - byte id; // The frame ID, used in vectors, quaternions etr + ubyte id; /* The frame ID, used in vectors, quaternions etc. */ char name[DASFRM_NAME_SZ]; char type[DASFRM_TYPE_SZ]; uint32_t flags; /* Usually contains the type */ @@ -72,7 +72,7 @@ typedef struct frame_descriptor{ * @memberof DasFrame */ DAS_API DasFrame* new_DasFrame( - DasDesc* pParent, byte id, const char* sName, const char* sType + DasDesc* pParent, ubyte id, const char* sName, const char* sType ); /** Change the frame name @@ -105,7 +105,7 @@ DAS_API DasErrCode DasFrame_setType(DasFrame* pThis, const char* sType); * This is almost always the constant string "cartesian" * @memberof DasFrame */ -DAS_API byte DasFrame_getType(const DasFrame* pThis); +DAS_API ubyte DasFrame_getType(const DasFrame* pThis); /** Add a direction to a frame definition @@ -122,7 +122,7 @@ DAS_API const char* DasFrame_dirByIdx(const DasFrame* pThis, int iIndex); /** Givin the name of a frame direction, return it's index * - * @return A signed byte. If the value is less then 0 an error has occured. + * @return A signed byte. If the value is less then 0 then that direction is not defined * * @memberof DasFrame */ @@ -140,4 +140,4 @@ DAS_API void del_DasFrame(DasFrame* pThis); } #endif -#endif /* _frame_h_ */ \ No newline at end of file +#endif /* _frame_h_ */ diff --git a/das2/http.c b/das2/http.c index 70f7c03..16f871d 100644 --- a/das2/http.c +++ b/das2/http.c @@ -120,13 +120,13 @@ bool das_http_init(const char* sProgName){ /* After this point, don't alter or use this without owning the mutext */ g_pAddrAry = new_DasAry( - "addr_pointers", vtUnknown, sizeof(byte*), (const byte*) &fill, + "addr_pointers", vtUnknown, sizeof(ubyte*), (const ubyte*) &fill, RANK_1(0), UNIT_DIMENSIONLESS ); /* Setup a host name array as well, this as ragged in both dimensions */ g_pHostAry = new_DasAry( - "host_names", vtByte, 0, NULL, RANK_2(0,0), UNIT_DIMENSIONLESS + "host_names", vtUByte, 0, NULL, RANK_2(0,0), UNIT_DIMENSIONLESS ); /* Let customers know we're storing null terminated strings as the @@ -551,9 +551,9 @@ struct addrinfo* _das_http_getsrvaddr(DasHttpResp* pRes) /* Got an address, so save it */ pthread_mutex_lock(&g_mtxAddrArys); - DasAry_append(g_pAddrAry, (const byte*) &pAddr, 1); + DasAry_append(g_pAddrAry, (const ubyte*) &pAddr, 1); - DasAry_append(g_pHostAry, (byte*)(sHostAndPort), strlen(sHostAndPort) + 1); + DasAry_append(g_pHostAry, (ubyte*)(sHostAndPort), strlen(sHostAndPort) + 1); DasAry_markEnd(g_pHostAry, DIM1); /* Roll first index, last idx is ragged */ pthread_mutex_unlock(&g_mtxAddrArys); @@ -1224,7 +1224,7 @@ DasAry* das_http_readUrl( if(nLimit < 1) nLimit = -1; int64_t nTotal = 0; - DasAry* pAry = new_DasAry("http_body", vtByte, 1, NULL, RANK_1(0), UNIT_DIMENSIONLESS); + DasAry* pAry = new_DasAry("http_body", vtUByte, 1, NULL, RANK_1(0), UNIT_DIMENSIONLESS); SSL* pSsl = (SSL*)pRes->pSsl; char buf[D2CHAR_CHUNK_SZ]; @@ -1245,7 +1245,7 @@ DasAry* das_http_readUrl( } nTotal += nRead; - if(!DasAry_append(pAry, (const byte*) buf, nRead)) return false; /* Yay data! */ + if(!DasAry_append(pAry, (const ubyte*) buf, nRead)) return false; /* Yay data! */ } pRes->nSockFd = SSL_get_fd((SSL*)pRes->pSsl); @@ -1269,7 +1269,7 @@ DasAry* das_http_readUrl( } nTotal += nRead; - if(!DasAry_append(pAry, (const byte*) buf, nRead)) return false; /* Yay data! */ + if(!DasAry_append(pAry, (const ubyte*) buf, nRead)) return false; /* Yay data! */ } } if(nTotal > nLimit){ diff --git a/das2/http.h b/das2/http.h index 3341570..4894492 100644 --- a/das2/http.h +++ b/das2/http.h @@ -253,7 +253,7 @@ DAS_API bool das_http_getBody( * five minutes. This value only affects the initial connection * timeout and not the wait time for data to appear. * - * @return A 1-dimensional DasAry with element type vtByte allocated on + * @return A 1-dimensional DasAry with element type vtUByte allocated on * the heap, or NULL if the download failed. * * The ID member of the allocated array will correspond to the diff --git a/das2/io.c b/das2/io.c index e892e8c..a88cb07 100644 --- a/das2/io.c +++ b/das2/io.c @@ -1126,7 +1126,7 @@ DasErrCode _DasIO_handleDesc( DasErrCode nRet = 0; // Supply the stream descriptor if it exits - if( (pDesc = DasDesc_decode(pBuf, pSd)) == NULL) return DASERR_IO; + if( (pDesc = DasDesc_decode(pBuf, pSd, nPktId)) == NULL) return DASERR_IO; if(pDesc->type == STREAM){ if(*ppSd != NULL) @@ -1138,10 +1138,11 @@ DasErrCode _DasIO_handleDesc( _DasIO_enterDecompressMode(pThis); } else{ - if(pDesc->type == PACKET){ + if((pDesc->type == PACKET)||(pDesc->type == DATASET)){ if(pSd == NULL) - return das_error(DASERR_IO, "Streams must be defined before packets can be " - "defined"); + return das_error(DASERR_IO, + "Streams must be defined before datasets can be defined" + ); /* Handle packet redefinitions. */ if(pSd->descriptors[nPktId] != NULL){ @@ -1493,7 +1494,10 @@ DasErrCode DasIO_writeStreamDesc(DasIO* pThis, StreamDesc* pSd) int nRet; if( (nRet = StreamDesc_encode(pSd, pBuf)) != 0) return nRet; - DasIO_printf(pThis, "[00]%06zu%s", DasBuf_written(pBuf), pBuf->sBuf); + if(pThis->dasver == 2) + DasIO_printf(pThis, "[00]%06zu%s", DasBuf_written(pBuf), pBuf->sBuf); + else + DasIO_printf(pThis, "|Sx||%zu|%s", DasBuf_written(pBuf), pBuf->sBuf); if(strcmp( "deflate", pSd->compression ) == 0 ){ _DasIO_enterCompressMode(pThis); @@ -1519,9 +1523,17 @@ DasErrCode DasIO_writePktDesc(DasIO* pThis, PktDesc* pPd ) if( (nRet = PktDesc_encode(pPd, pBuf)) != 0) return nRet; size_t uToWrite = DasBuf_unread(pBuf) + 10; - if( DasIO_printf(pThis, "[%02d]%06d%s", pPd->id, DasBuf_unread(pBuf), - pBuf->pReadBeg) != uToWrite) - return das_error(DASERR_IO, "Partial packet descriptor written"); + + if(pThis->dasver == 2) + if( DasIO_printf( + pThis, "[%02d]%06d%s", pPd->id, DasBuf_unread(pBuf), pBuf->pReadBeg + ) != uToWrite) + return das_error(DASERR_IO, "Partial packet descriptor written"); + else + if( DasIO_printf( + pThis, "|Hx|%02d|%d|%s", pPd->id, DasBuf_unread(pBuf), pBuf->pReadBeg + ) != uToWrite) + pPd->bSentHdr = true; return DAS_OKAY; @@ -1541,7 +1553,11 @@ int DasIO_writePktData(DasIO* pThis, PktDesc* pPdOut ) { DasBuf_reinit(pBuf); if( (nRet = PktDesc_encodeData(pPdOut, pBuf)) != 0) return nRet; - DasIO_printf(pThis, ":%02d:", pPdOut->id); + + if(pThis->dasver == 2) + DasIO_printf(pThis, ":%02d:", pPdOut->id); + else + DasIO_printf(pThis, "|Pd|%d|%d|", pPdOut->id, DasBuf_unread(pBuf)); DasIO_write(pThis, pBuf->pReadBeg, DasBuf_unread(pBuf)); return 0; diff --git a/das2/io.h b/das2/io.h index 459ffe8..46c5bdd 100644 --- a/das2/io.h +++ b/das2/io.h @@ -24,7 +24,7 @@ #include #include -#include +/* #include */ #include #include diff --git a/das2/node.c b/das2/node.c index 897f2b8..9ed561c 100644 --- a/das2/node.c +++ b/das2/node.c @@ -224,8 +224,8 @@ DasNode* _DasNode_mkNode( pRoot = das_json_parse_ex(pBytes, uBytes, das_jparse_flags_allow_json5, NULL, NULL, &jsonRes); - dec_DasAry(pBytesAry); // Done with the byte array, data in json buffer now - DasHttpResp_freeFields(&httpRes); // Done with the headers etc. + dec_DasAry(pBytesAry); /* Done with the byte array, data in json buffer now */ + DasHttpResp_freeFields(&httpRes); /* Done with the headers etc. */ if(pRoot == NULL){ char sTmp[256] = {'\0'}; @@ -284,13 +284,13 @@ DasNode* _DasNode_mkNode( } pBase = (DasNode*)pThis; - const byte* pFill = NULL; + const ubyte* pFill = NULL; pThis->pSubNodes = new_DasAry( - "nodes", vtUnknown, sizeof(byte*), (const byte*)&pFill, + "nodes", vtUnknown, sizeof(ubyte*), (const ubyte*)&pFill, RANK_1(0), UNIT_DIMENSIONLESS ); pThis->pSubPaths = new_DasAry( - "paths", vtByte, 0, NULL, RANK_2(0,0), UNIT_DIMENSIONLESS + "paths", vtUByte, 0, NULL, RANK_2(0,0), UNIT_DIMENSIONLESS ); DasAry_setUsage(pThis->pSubPaths, D2ARY_AS_STRING); @@ -517,8 +517,8 @@ DasNode* _DasNode_loadSubNode_dasCat( sSubRelPath = sRelPath + uLen; if(sSubRelPath[0] == '\0'){ - DasAry_append(pThis->pSubNodes, (const byte*) &pNode, 1); - DasAry_append(pThis->pSubPaths, (const byte*) sChild, strlen(sChild)+1); + DasAry_append(pThis->pSubNodes, (const ubyte*) &pNode, 1); + DasAry_append(pThis->pSubPaths, (const ubyte*) sChild, strlen(sChild)+1); DasAry_markEnd(pThis->pSubPaths, DIM1); return pNode; } @@ -531,8 +531,8 @@ DasNode* _DasNode_loadSubNode_dasCat( if(pDecendent){ /* Worked okay, cache the child node, but return the decendent * node (however far down it came from */ - DasAry_append(pThis->pSubNodes, (const byte*) &pNode, 1); - DasAry_append(pThis->pSubPaths, (const byte*) sChild, strlen(sChild)+1); + DasAry_append(pThis->pSubNodes, (const ubyte*) &pNode, 1); + DasAry_append(pThis->pSubPaths, (const ubyte*) sChild, strlen(sChild)+1); DasAry_markEnd(pThis->pSubPaths, DIM1); return pDecendent; diff --git a/das2/packet.c b/das2/packet.c index 944969e..1dc4d3f 100644 --- a/das2/packet.c +++ b/das2/packet.c @@ -82,7 +82,7 @@ void PktDesc_parseStart(void* data, const char* el, const char** attr) { if ( strcmp( el, "packet" )==0 ) { pStack->currentDesc = (DasDesc*)(pStack->pd); - for (i=0; attr[i]; i+=2){ + for (i=0; attr[i] != NULL; i+=2){ if(strcmp(attr[i], "group") == 0){ PktDesc_setGroup(pStack->pd, (char*)attr[i+1]); } @@ -133,6 +133,7 @@ void PktDesc_parseEnd(void *data, const char *el) PktDesc* new_PktDesc_xml(DasBuf* pBuf, DasDesc* pParent, int nPktId) { PktDesc* pThis = new_PktDesc(); + if(nPktId > 0) pThis->id = nPktId; size_t uPos = DasBuf_readOffset(pBuf); struct parse_pktdesc_stack stack = {0}; @@ -149,17 +150,18 @@ PktDesc* new_PktDesc_xml(DasBuf* pBuf, DasDesc* pParent, int nPktId) XML_SetElementHandler(p, PktDesc_parseStart, PktDesc_parseEnd); int nParRet = XML_Parse( p, pBuf->pReadBeg, DasBuf_unread(pBuf), true ); - if ( !nParRet) { - das_error(DASERR_PKT, "Parse error at offset %ld:\n%s\n", - XML_GetCurrentByteIndex(p), - XML_ErrorString(XML_GetErrorCode(p)) ); + if(nParRet == 0){ + das_error(DASERR_PKT, "Parse error at offset %ld:\n%s\n", + XML_GetCurrentByteIndex(p), + XML_ErrorString(XML_GetErrorCode(p)) + ); } XML_ParserFree(p); - if ( stack.errorCode != 0 ) { - das_error( stack.errorCode, stack.errorMsg ); - del_PktDesc(pThis); - return NULL; + if(stack.errorCode != 0){ + das_error( stack.errorCode, stack.errorMsg ); + del_PktDesc(pThis); + return NULL; } if(pThis->uPlanes == 0){ diff --git a/das2/plane.h b/das2/plane.h index 4a91e1c..20fa926 100644 --- a/das2/plane.h +++ b/das2/plane.h @@ -1,19 +1,19 @@ -/* Copyright (C) 2004-2017 Jeremy Faden - * Chris Piker +/* Copyright (C) 2017-2024 Chris Piker + * 2004 Jeremy Faden * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ /** @file plane.h Header for Plane Descriptor Objects */ diff --git a/das2/property.c b/das2/property.c index c132fa2..5897c3f 100644 --- a/das2/property.c +++ b/das2/property.c @@ -84,7 +84,7 @@ size_t dasprop_memsz(const char* sName, const char* sValue) /* Initalization, alteration *********************************************** */ DasErrCode DasProp_init( - byte* pBuf, size_t uBufSz, const char* sType, byte uType, const char* sName, + ubyte* pBuf, size_t uBufSz, const char* sType, ubyte uType, const char* sName, const char* sValue, char cSep, das_units units, int nStandard ){ /* Check args */ @@ -184,7 +184,7 @@ DasErrCode DasProp_init( /* Explicit type and mulitplicity supplied (hurray!) */ if((uType & DASPROP_MULTI_MASK) == 0) return das_error(DASERR_PROP, "Invalid muliplicity flag"); - byte uTmp = (uType & DASPROP_TYPE_MASK) >> 4; + ubyte uTmp = (uType & DASPROP_TYPE_MASK) >> 4; if((uTmp < 1)||(uTmp > 5)) return das_error(DASERR_PROP, "Invalid type setting"); @@ -250,30 +250,30 @@ DasErrCode DasProp_init( cSep = '\0'; } - // Set the sizes in the flags + /* Set the sizes in the flags */ uFlags |= (uNameSz + 1) << DASPROP_NLEN_SHIFT; uint64_t uNamValSz = uValSz + uNameSz + 2; if(uNamValSz < 16) uNamValSz = 16; uFlags |= (uNamValSz << DASPROP_TLEN_SHIFT); - // and the stash away the separator + /* and the stash away the separator */ if(cSep != '\0') uFlags |= ((uint64_t)cSep) << DASPROP_SEP_SHIFT; - byte* pWrite = pBuf; + ubyte* pWrite = pBuf; memcpy(pWrite, &uFlags, sizeof(uint64_t)); pWrite += sizeof(uint64_t); - // Copy in the units + /* Copy in the units */ memcpy(pWrite, &units, sizeof(das_units)); pWrite += sizeof(das_units); - // Copy in the name, depend in null termination + /* Copy in the name, depend in null termination */ memcpy(pWrite, sName, uNameSz+1); pWrite += uNameSz+1; - // And finally the value, do NOT depend on null term, since we may have - // shaved off the UNITS from a datum value. + /* And finally the value, do NOT depend on null term, since we may have */ + /* shaved off the UNITS from a datum value. */ memcpy(pWrite, sValue, uValSz); pWrite[uValSz] = 0; @@ -378,7 +378,7 @@ const char* DasProp_typeStr3(const DasProp* pProp) } } -byte DasProp_type(const DasProp* pProp) +ubyte DasProp_type(const DasProp* pProp) { return (byte)(pProp->flags & (DASPROP_TYPE_MASK|DASPROP_MULTI_MASK)); } diff --git a/das2/property.h b/das2/property.h index f8558d8..ea39f30 100644 --- a/das2/property.h +++ b/das2/property.h @@ -102,7 +102,7 @@ size_t dasprop_memsz(const char* sName, const char* sValue); * [a-z][A-Z][0-9] and '_'. */ DasErrCode DasProp_init( - byte* pBuf, size_t uBufSz, const char* sType, byte uType, const char* sName, + ubyte* pBuf, size_t uBufSz, const char* sType, ubyte uType, const char* sName, const char* sValue, char cSep, das_units units, int nStandard ); @@ -131,7 +131,7 @@ const char* DasProp_typeStr3(const DasProp* pProp); * * Use the values: DASPROP_MULTI_MASK & DASPROP_TYPE_MASK to extract sections */ -byte DasProp_type(const DasProp* pProp); +ubyte DasProp_type(const DasProp* pProp); /** Mark this property as invalid, this erases the type information and * is thus a non-reversable operation */ @@ -177,4 +177,4 @@ bool DasProp_isValid(const DasProp* pProp); } #endif -#endif // _property_h_ \ No newline at end of file +#endif // _property_h_ diff --git a/das2/serial.c b/das2/serial.c new file mode 100644 index 0000000..81ceb11 --- /dev/null +++ b/das2/serial.c @@ -0,0 +1,1222 @@ +/* Copyright (C) 2017-2018 Chris Piker + * + * This file is part of das2C, the Core Das2 C Library. + * + * das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with das2C; if not, see . + */ + +#define _POSIX_C_SOURCE 200112L + +#include + +#include "dataset.h" + +#define DS_XML_MAXERR 512 + +#define _UNIT_BUF_SZ 127 +#define _NAME_BUF_SZ 63 +#define _TYPE_BUF_SZ 23 +#define _VAL_SEMANTIC_SZ 16; +#define _VAL_STOREAGE_SZ 12; + +#define _VAL_ENC_TYPE_SZ 8; +#define _VAL_FILL_SZ 48; +#define _VAL_TERM_SZ 48; +#define _VAL_SEQ_CONST_SZ sizeof(das_time); + + +/* **************************************************************************** + Our processing state structure, these are required for expat +*/ +typedef struct serial_xml_context { + StreamDesc* pSD; + int nPktId; + + DasDs* pDs; + ptrdiff_t aExtShape[DASIDX_MAX]; + DasDim* pCurDim; + + bool bInPropList; + bool bInProp; + char sPropUnits[_UNIT_BUF_SZ+1]; + char sPropName[_NAME_BUF_SZ+1]; + char sPropType[_TYPE_BUF_SZ+1]; + DasAry* pPropVal; + + /* saving attributes so they can be used when var creation is ready... */ + bool bInVar; + enum var_type varCategory; + das_val_type varItemType; // The type of values to store in the array + + int varIntRank; + int nVarComp; + das_units varUnits; + char varUse[DASDIM_ROLE_SZ] + char valSemantic[_VAL_SEMANTIC_SZ]; // "real", "int", "datetime", "string", etc. + char valStorage[_VAL] + char varCompDirs[DASFRM_NAME_SZ][DASFRM_MAX_DIRS]; + ptrdiff_t aVarMap[DASIDX_MAX]; + + /* Stuff needed for sequence vars */ + ubyte aSeqMin[_VAL_SEQ_CONST_SZ]; /* big enough to hold a double */ + ubyte aSeqInter[_VAL_SEQ_CONST_SZ]; + + /* Stuff needed for any array var */ + DasAry* pCurAry; + + /* Stuff needed only for packet data array vars */ + char sValEncType[_VAL_ENC_TYPE_SZ]; + int nPktItems; + int nPktItemBytes; + char sPktFillVal[_VAL_FILL_SZ]; + + char sValTerm[_VAL_TERM_SZ]; + char sItemsTerm[_VAL_TERM_SZ]; + + /* Stuff needed only for embedded values array vars */ + DasAryEnc codecHdrVals; + ubyte aValUnderFlow[_VAL_UNDER_SZ]; + int nValUnderFlowValid; + + /* ... when we hit the or we'll have enough info + stored above to create both the variable and it associated array */ + + bool bInValues; + char cValSep; + + DasErrCode nDasErr; + char sErrMsg[DS_XML_MAXERR]; +}; + +/* ************************************************************************* */ + +static void _serial_clear_var_section(struct serial_xml_context* pCtx) +{ + pCtx->bInVar = false; + + pCtx->varCategory = D2V_ARRAY; /* most common kind */ + pCtx->varItemType = vtUnknown; + + pCtx->varIntRank = 0; + pCtx->nVarComp = 0; + pCtx->varUnits = NULL; + + /* Hopefull compiler will reduce all this to a single op-code for memory erasure */ + memset(pCtx->varUse, 0, DASDIM_ROLE_SZ); + memset(pCtx->valSemantic, 0, _VAL_SEMANTIC_SZ); + memset(pCtx->valStorage, 0, _VAL_STOREAGE_SZ); + memset(pCtx->varCompDirs, 0,DASFRM_NAME_SZ*DASFRM_MAX_DIRS); + memset(pCtx->aVarMap, 0, DASIDX_MAX*sizeof(ptrdiff_t)); + memset(pCtx->nSeqMin, 0, 8); + memset(pCtx->nSeqInter, 0, 8); + + pCtx->pCurAry = NULL; /* No longer need the array */ + + memset(pCtx->sValEncType, 0, _VAL_ENC_TYPE_SZ); + pCtx->nPktItems = 0; + pCtx->nPktItemBytes = 0; + memset(pCtx->sPktFillVal, 0, _VAL_FILL_SZ); + memset(pCtx->sValTerm, 0, _VAL_TERM_SZ); + memset(pCtx->sItemsTerm, 0, _VAL_TERM_SZ); + if(DasAryEnc_isValid( &(pCtx->codecHdrVals)) ) + DasAryEnc_deInit( &(pCtx->codecHdrVals) ); + memset(&(pCtx->codecHdrVals), 0, sizeof(DasAryEnc)); + memset(aValUnderFlow, 0, sizeof(_VAL_UNDER_SZ)); + nValUnderFlowValid = 0; +} + +/* ************************************************************************* */ + +static bool _serial_parseIndex( + const char* sIndex, int nRank, ptrdiff_t* pMap, bool bUnusedOkay, + const char* sElement +){ + char* sBeg = sIndex; + char* sEnd = NULL; + int iExternIdx = 0; + while((*sBeg != '\0')&&(iExternIdx < DASIDX_MAX)){ + sEnd = strchr(sBeg, ';'); + if(sEnd == NULL) + sEnd = strchr(sBeg, '\0'); + else + *sEnd = '\0'; + if(sBeg == sEnd) + goto SHAPE_ERROR; + + if(sBeg[0] == '*') + pMap[iExternIdx] = DASIDX_RAGGED; + else{ + if(sBeg[0] == '-'){ + if(!bUnusedOkay){ + return das_error(DASERR_SERIAL, + "Unused array indexes are not allowed in element <%s>", sElement + ); + } + pMap[iExternIdx] = DASIDX_UNUSED; + } + else{ + if(sscanf(sBeg, "%td", pCtx->aExtShape + iExternIdx)!=1){ + return das_error(DASERR_SERIAL, + "Could not parse index shape of %s in element <%s>", + sIndex, sElement + ); + } + } + } + sBeg = sEnd + 1; + ++iExternIdx; + } + + if(iExternIdx != nRank){ + return das_error(DASERR_SERIAL, + "The rank of this dataset is %d, but %d index ranges were specified", + nRank, iExternIdx + ); + } + return DAS_OKAY; +} + +/* **************************************************************************** + Given a fill value as a string, make a fill value an a storable, + If the fill value string is NULL, just return a default fill from + value.c +*/ +static DasErrCode _serial_initfill(ubyte* pBuf, int nBufLen, das_val_type vt, const char* sFill){ + if((sFill == NULL)||(sFill[0] == '\0')){ + if(nBufLen >= das_vt_size(vt)){ + memcpy(pBuf, das_vt_fill, das_vt_size(vt)); + return DAS_OKAY; + } + else{ + return das_error(DASERR_SERIAL, "Logic error fill value buffer too small"); + } + } + + // Ugh, now we have to parse the damn thing. + return das_val_fromStr(pBuf, nBufLen, vt, sFill); +} + +/* **************************************************************************** + Create an empty dataset of known index shape */ + +static void _serial_onOpenDs(struct ds_xml_context* pCtx, const char** psAttr){ + const char* sRank = NULL; + const char* sName = NULL; + char sIndex[48] = {'\0'}; + const char* sPlot = NULL; + for(int i = 0; psAttr[i] != NULL; i+=2){ + if(strcmp(psAttr[i],"rank")==0) sRank=psAttr[i+1]; + else if(strcmp(psAttr[i],"name")==0) sName=psAttr[i+1]; + else if(strcmp(psAttr[i],"plot")==0) sPlot=psAttr[i+1]; + else if((strcmp(psAttr[i],"index")==0)&&(psAttr[i+1][0] != '\0')) + strncpy(sIndex, psAttr[i+1], 47); + else + daslog_warn_v("Unknown attribute %s in ID %02d", psAttr[i], pCtx->nPktId); + } + + char sId[12] = {'\0'}; + snprintf(sId, 63, "id%02d", pCtx->nPktId); + + int nRank = 0; + int id = pCtx->nPktId; + if((sRank!=NULL)||(sscanf(sRank, "%d", &nRank) != 1)){ + pCtx->nDasErr = das_error(DASERR_SERIAL, "Invalid or missing rank attribute for %02d", id); + return; + } + if((nRank <= 0)||(nRank >= DASIDX_MAX)){ + pCtx->nDasErr = das_error(DASERR_SERIAL, "Invalid rank (%d) for dataset ID %02d", id); + return; + } + if((sName == NULL)||(strlen(sName) < 1)){ + pCtx->nDasErr = das_error(DASERR_SERIAL, "Missing name attribute for dataset %02d", id); + return; + } + + // Save off the expected overall dataset shape + if(sIndex[0] == '\0'){ + pCtx->nDasErr = das_error(DASERR_SERIAL, "Missing index attribute for dataset %02d", id); + return; + } + + DasErrCode nRet; + if((nRet = _serial_parseIndex(sIndex, nRank, pCtx->aExtShape, false, "dataset")) != DAS_OKAY){ + pCtx->nDasErr = nRet + return; + } + + pCtx->pDs = new_DasDs(sId, sName, nRank); + + if((sPlot!=NULL)&&(sPlot[0]!='\0')) + DasDesc_setStr((DasDesc*)(pCtx->pDs), "plot", sPlot); + return; + + SHAPE_ERROR: + +} + +/* **************************************************************************** + Making a dimension inside a dataset +*/ +static void _serial_onOpenDim( + struct ds_xml_context* pCtx, const char* sDimType, const char** psAttr +){ + + enum dim_type dt = DASDIM_UNK; + + int id = pCtx->nPktId; + + if(strcmp(sDimType, "coord")) dt = DASDIM_COORD; + else if (strcmp(sDimType, "date")) dt = DASDIM_DATA; + else{ + pCtx->nDasErr = das_error(DASERR_SERIAL, "Unknown physical dimension type '%s'", sDimType); + return; + } + + const char* sName = NULL; + const char* sPhysDim = NULL; + const char* sFrame = NULL; + char sAxis[48] = {'\0'}; + + for(int i = 0; psAttr[i] != NULL; i+=2){ + if(strcmp(psAttr[i],"physDim")==0) sPhysDim = psAttr[i+1]; + else if(strcmp(psAttr[i],"name")==0) sName = psAttr[i+1]; + else if(strcmp(psAttr[i],"frame")==0) sFrame = psAttr[i+1]; + else if((strcmp(psAttr[i],"axis")==0) &&(psAttr[i+1][0] != '\0')) + strncpy(sAxis, psAttr[i+1], 47); + else + daslog_warn_v( + "Unknown attribute %s in <%s> for dataset ID %02d", psAttr[i], sDimType, id + ); + } + + /* freak about about missing items */ + if((sPhysDim == NULL)||(sPhysDim[0] = '\0')){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Attribute \"physDim\" missing for %s groups in dataset ID %d", + sDimType, id + ); + return; + } + if((dt == DASDIM_COORD) && ((sAxis == NULL)||(sAxis[0] == '\0')) ){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Attribute \"axis\" missing for physical dimension %s in dataset ID %d", + sPhysDim, id + ); + return; + } + + /* We have required items, make the dim */ + DasDim* pDim = new_DasDim(sPhysDim, sName, dt, DasDs_rank(pCtx->pDs)); + + /* Optional items */ + if((sAxis != NULL)&&(sAxis[0] != '\0')){ + char* sBeg = sAxis; + char* sEnd = NULL; + int iAxis = 0; + while((*sBeg != '\0')&&(iAxis < DASDIM_AXES)){ + sEnd = strchr(sBeg, ';'); + if(sEnd == NULL) + sEnd = strchr(sBeg, '\0'); + else + *sEnd = '\0'; + if(sBeg == sEnd) + goto AXIS_ERROR; + + pDim->axes[iAxis][0] = sBeg[0]; + if(sEnd - sBeg > 1) + pDim->axes[iAxis][1] = sBeg[1]; + + sBeg = sEnd + 1; + ++iAxis; + } + } + if((sFrame != NULL)&&(sFrame[0] != '\0')){ + strncpy(pDim->frame, sFrame, DASFRM_NAME_SZ-1); + } + + DasErrCode nRet = 0; + if((nRet = DasDs_addDim(pCtx->pDs, pDim)) != DAS_OKAY){ + pCtx->nDasErr = nRet; + del_DasDim(pDim); + return; + } + pCtx->pCurDim = pDim; +} + +/* ***************************************************************************** + Starting a new variable, either scalar or vector +*/ +static void _serial_onOpenVar( + struct ds_xml_context* pCtx, const char* sVarElType, const char** psAttr +){ + if(pCtx->bInVar){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Scalars and Vectors can not be nested inside other scalars and vectors" + ); + return; + } + + int id = pCtx->nPktId; + char sIndex[32] = {'\0'}; + + for(int i = 0; psAttr[i] != NULL; i+=2){ + if(strcmp(psAttr[i], "use") == 0) + strncpy(pCtx->varUse, psAttr[i+1], DASDIM_ROLE_SZ-1); + else if(strcmp(psAttr[i], "semantic") == 0) /* Partial value type, need pkt */ + strncpy(pCtx->valSemantic, psAttr[i+1], _VAL_SEMANTIC_SZ-1);/* encoding details to decide */ + else if(strcmp(psAttr[i], "storage") == 0) + strncpy(pCtx->valStorage, psAttr[i+1], _VAL_STOREAGE_SZ-1); + else if(strcmp(psAttr[i], "index") == 0) + strncpy(sIndex, psAttr[i+1], 31); + else if(strcmp(psAttr[i], "units") == 0) + pCtx->varUnits = Units_fromStr(psAttr[i+1]); + else + daslog_warn_v( + "Unknown attribute %s in <%s> for dataset ID %02d", psAttr[i], sVarElType, id + ); + } + + if(!_serial_parseIndex(sIndex, DasDs_rank(pCtx->pDs), pCtx->aExtShape, false, sVarElType)){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Invalid index space definition '%s' for dataset %02d of rank", sIndex, id, nRank + ); + return; + } + + if(pCtx->varUse[0] == '\0') /* Default to a usage of 'center' */ + strncpy(pCtx->varUse, "center", DASDIM_ROLE_SZ-1); + + if(pCtx->valSemantic[0] == '\0'){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Attribute 'semantic' not provided for <%s> in dataset ID %d", sVarElType, pCtx->nPktId + ); + return; + } + if(pCtx->varUnits == NULL){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Attribute 'units' not provided for <%s> in dataset ID %d", sVarElType, pCtx->nPktId + ); + return; + } + + pCtx->bInVar = true; +} + +/* ************************************************************************** */ + +static _serial_onComponent(struct ds_xml_context* pCtx, const char** psAttr) +{ + struct ds_xml_context* pCtx = (parse_stream_desc_t*)data; + + if(pCtx->nDasErr != DAS_OKAY) /* If an error condition is set, stop processing elements */ + return; + + DasErrCode nRet = DAS_OKAY; + + /* If not in a this makes no sense */ + if((!pCtx->bInVar)||(pCtx->varIntRank != 1)){ + pCtx->nDasErr = das_error(DASERR_SERIAL, " elements only allowed inside 's"); + return; + } + + const char* sDir; + for(int i = 0; psAttr[i] != NULL; i+=2){ + if(strcmp(psAttr[i+1], "dir") == 0){ + sDir = psAttr[i+1]; + if(sDir[0] == '\0'){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Empty direction name for of in phyDim %s of dataset ID %d" + DasDim_id(pCtx->pCurDim), pCtx->nPktId + ); + return; + } + } + else + daslog_warn_v( + "Unknown attribute %s in for dataset ID %02d", psAttr[i], id + ); + } + + /* Just save off the directions for now, make sure the same one isn't written twice */ + for(int i = 0; i < pCtx->nVarComp; ++i){ + if(strcmp(pCtx->varCompDirs[i], sDir) == 0){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + " has a repeated direction \"%s\" in the same frame." + ); + return; + } + } + strncpy(pCtx->varCompDirs[pCtx->nVarComp], sDir, DASFRM_NAME_SZ-1); + pCtx->nVarComp += 1; +} + +/* ************************************************************************** */ +/* Create a seequence item */ +static void _serial_onSequence(struct ds_xml_context* pCtx, const char** psAttr) +{ + const char* sMin = "0"; + const char* sInter = NULL; + + if(pCtx->nDasErr != DAS_OKAY) /* Stop parsing if hit an error */ + return; + + if(pCtx->varIntRank > 0){ + pCtx->nDasErr = das_error(DASERR_NOTIMP, "Sequences not yet supported for vectors"); + return; + } + + pCtx->varCategory = D2V_SEQUENCE; + + for(int i = 0; psAttr[i] != NULL; i+=2){ + if(strcmp("minval", psAttr[i]) == 0) + sMin = psAttr[i+1]; + else if(strcmp("interval", psAttr[i]) == 0) + sInter = psAttr[i+1]; + else if(strcmp("repeat", psAttr[i]) == 0) + pCtx->nDasErr == das_error(DASERR_NOTIMP, + "In for dataset ID %d, reapeated sequence items not yet supported", + pCtx->nPktId + ); + else if(strcmp("repetitions", psAttr[i]) == 0) + pCtx->nDasErr == das_error(DASERR_NOTIMP, + "In for dataset ID %d, reapeated sequence items not yet supported", + pCtx->nPktId + ); + else + daslog_warn_v( + "Unknown attribute %s in for dataset ID %02d", psAttr[i], id + ); + } + + if((sInter == NULL)||(sInter[0] == '\0')){ + pCtx->nDasErr = das_error(DASERR_SERIAL, "Interval not provided for in " + "dataset ID %d", pCtx->nPktId + ); + return; + } + + /* For sequences, expect them to tell me the storage type */ + if(pCtx->valStorage[0] == '\0'){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Attribute 'storage' needed for variable %s in dimension %s for dataset " + "ID %d since values are generated by a sequence.", pCtx->varUse, + DasDim_id(pCtx->pDim), pCtx->nPktId + ); + return; + } + + das_val_type vt = das_vt_fromStr(pCtx->valStorage); + + DasErrCode nRet; ; + if((nRet = das_value_fromStr(pCtx->aSeqMin, _VAL_SEQ_CONST_SZ, vt, sMin)) != 0){ + pCtx->nDasErr = nRet; + return; + } + if((nRet = das_value_fromStr(pCtx->aSeqInter, _VAL_SEQ_CONST_SZ, vt, sInter)) != 0){ + pCtx->nDasErr = nRet; + } +} + +/* ************************************************************************** */ +/* Assuming enough info about the variable is setup, make an array */ + +#define NO_FILL false +#define SET_FILL true + +static DasErrCode _serial_makeVarAry(struct ds_xml_context* pCtx, bool bHandleFill) +{ + /* Okay, make an array to hold the values since this is packet data */ + assert(pCtx->pCurAry == NULL); + char sAryId[64] = '{\0}'; + + snprintf(sAryId, 63, "%s_%s", pCtx->varUse, DasDim_id(pCtx->pCurDim)); + + /* Determine the array indexes from the variable indexes */ + ptrdiff_t aShape[DASIDX_MAX]; + int nAryRank = 0; /* <-- current array index then bumped to the rank */ + for(int i = 0; i < DASIDX_MAX; ++i){ + if(pCtx->aVarMap[i] == DASIDX_UNUSED) + continue; + + if(pCtx->aVarMap[i] == DASIDX_RAGGED){ + aShape[nAryRank] = 0; + } + else{ + if(pCtx->aVarMap[i] <= 0){ + return das_error(DASERR_SERIAL, + "Invalid array map for variable %s:%s in dataset id %d", + DasDim_id(pCtx->pCurDim), pCtx->varUse, pCtx->nPktId + ); + } + aShape[nAryRank] = pCtx->aVarMap[i]; + } + + ++nAryRank; + } + + /* Force first array index to "undefined" so that streaming always works */ + /* TODO: For speed we should use pre-allocated arrays, but that would + required DasAry_putIn to handle index rolling, which it doesn't + right now */ + aShape[0] = 0; + + das_val_type vt; + if(pCtx->valStorage[0] != '\0'){ + vt = das_vt_fromStr(pCtx->valStorage); + } + else{ + + if((strcmp(pCtx->sValEncType, "utf8") == 0)&& + (strcmp(pCtx->valSemantic, "string") != 0)){ + return das_error(DASERR_SERIAL, + "Attribute 'storage' missing for non-string values encoded " + "as text for variable %s:%s in dataset ID %d", + DasDim_id(pCtx->pCurDim), pCtx->varUse, pCtx->nPktId + ); + } + vt = das_vt_store_type(pCtx->sValEncType, pCtx->nPktItemBytes, pCtx->valSemantic); + } + + if(vt == vtUnknown){ + return das_error(DASERR_SERIAL, + "Could not determine the value type for new array in variable " + "%s:%s in dataset ID %d", DasDim_id(pCtx->pCurDim), pCtx->varUse, + pCtx->nPktId + ); + } + + /* If we get a vtText or a vtByteSeq just store as vtUByte and + set the array interpretation to indicate an extra dim that's + the length of each item value */ + + uint32_t uFlags; + + if(vt == vtByteSeq){ + vt = vtByte; + aShape[nAryRank] = 0; + ++nAryRank; + uFlags = D2ARY_AS_SUBSEQ; + } + else{ + if(vt == vtText){ + vt = vtByte; + aShape[nAryRank] = 0; + ++nAryRank; + uFlags = D2ARY_AS_STRING; + } + else{ + uFlags = 0; + } + } + + ubyte* pFill = NULL; + ubyte aFill[sizeof(DATUM_BUF_SZ)] = {0}; + + if(bHandleFill){ + int nRet = _serial_initfill(aFill, sizeof(DATUM_BUF_SZ), vt, pCtx->sPktFillVal) + if(nRet != DAS_OKAY) + return nRet; + pFill = aFill + } + + pCtx->pCurAry = new_DasAry( + sAryId, vt, 0, aFill, nAryRank, aShape, pCtx->varUnits + ); + + if(uFlags > 0) + DasAry_setUsage(pCtx->pCurAry, uFlags); + + return DAS_OKAY; +} + +/* ************************************************************************** */ +/* Save the info needed to make a packet data encoder/decoder */ +static void _serial_onPacket(struct ds_xml_context* pCtx, const char** psAttr) +{ + + if(pCtx->nDasErr != DAS_OKAY) /* If an error condition is set, stop processing elements */ + return; + + pCtx->varCategory = D2V_ARRAY; + + /* Only work with fixed types for now */ + int nReq = 0x0; + + int nValTermStat = 0x0; // 0x1 = needs a terminator + int nItemsTermStat = 0x0; // 0x2 = has the terminator array + + for(int i = 0; psAttr[i] != NULL; i+=2){ + + if(strcmp(psAttr[i], "numItems") == 0){ + if(psAttr[i+1][0] == "*"){ + pCtx->nPktItems = -1; + nValTermStat = 0x1; + } + else{ + if(sscanf(psAttr[i+1], "%d", &(pCtx->nPktItems)) != 1){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Error parsing 'numItems=\"%s\"' in for dataset ID %02d", + psAttr[i+1], pCtx->nPktId + ); + return; + } + } + nReq |= 0x1; + continue; + } + if(strcmp(psAttr[i], "encoding")==0){ + strncpy(pCtx->sValEncType, psAttr[i+1], _VAL_ENC_TYPE_SZ-1); + nReq |= 0x2; + continue; + } + if(strcmp(psAttr[i], "itemBytes") == 0){ + if(psAttr[i+1][0] == "*"){ + pCtx->nPktItemBytes = -1; + nItemsTermStat = 0x1; + } + if(sscanf(psAttr[i+1], "%d", &(pCtx->nPktItemBytes)) != 1){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Error parsing 'itemBytes=\"%s\"' in for dataset ID %02d", + psAttr[i+1], pCtx->nPktId + ); + return; + } + nReq |= 0x4; + continue; + } + if(strcmp(psAttr[i], "fill") == 0){ + strncpy(pCtx->sPktFillVal, psAttr[i+1], _VAL_FILL_SZ-1); + continue; + } + if(strcmp(psAttr[i], "valTerm") == 0){ + strncpy(pCtx->sValTerm, psAttr[i+1], _VAL_TERM_SZ-1); + nValTermStat |= 0x2; + continue; + } + if(strcmp(psAttr[i], "itemsTerm") == 0){ + strncpy(pCtx->sItemsTerm, psAttr[i+1], _VAL_TERM_SZ-1); + nItemsTermStat |= 0x2; + continue; + } + } + + /* Check to see if all needed attribtues were provided */ + if(nReq != 0x7){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Error parsing for dataset ID %02d, one of the required attributes" + " 'encoding', 'numItems', or 'itemBytes' is missing.", pCtx->nPktId; + ); + } + if(((nValTermStat & 0x1) != 0x1 )&&(nValTermStat != 0x7)){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Attribute 'valTerm' missing for variable length item in dataset " + "ID %02d", pCtx->nPktId + ); + } + if(((nItmesTermStat & 0x1) != 0x1 )&&(nItemsTermStat != 0x7)){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Attribute 'itemsTerm' missing for variable number of items per " + "packet in dataset ID %02d", pCtx->nPktId + ); + } + + DasErrCode nRet = _serial_makeVarAry(pCtx, SET_FILL); + if(nRet != DAS_OKAY) + pCtx->nDasErr = nRet; +} + +/* ************************************************************************** */ + +static void _serial_onOpenVals(struct ds_xml_context* pCtx, const char** psAttr) +{ + if(pCtx->nDasErr != DAS_OKAY) /* Error flag rasied, stop parsing */ + return; + + pCtx->varCategory = D2V_ARRAY; + + if(pCtx->bInValues){ // Can't nest values + pCtx->nDasErr = das_error(DASERR_SERIAL, + " element nested in dataset ID %d", pCtx->nPktId + ); + return; + } + pCtx->bInValues = true; + assert(pCtx->pCurAry == NULL); + + + for(int i = 0; psAttr[i] != NULL; i+=2){ + pCtx->nDasErr = das_error(DASERR_NOTIMP, + "Attributes of element not yet supported in dataset ID %d", pCtx->nPktId + ); + return; + } + + strncpy(pCtx->sValEncType, "utf8", _VAL_ENC_TYPE_SZ-1); + + DasErrCode nRet = _serial_makeVarAry(pCtx, NO_FILL); + if(nRet != DAS_OKAY){ + pCtx->nDasErr = nRet; + return; + } + + /* By default utf8 is whitespace separated, could provide a separator here... */ + nRet = DasAryEnc_init( + &(pCtx->codecHdrVals), pCtx->pCurAry, pCtx->valSemantic, "utf8", + DASIDX_RAGGED, 0, pCtx->varUnits + ); + if(nRet != DAS_OKAY) + pCtx->nDasErr = nRet; +} + +/* ************************************************************************** */ +/* Switch to various element initialization functions */ +static void _serial_xmlElementBeg(void* pCtx, const char* sElement, const char** psAttr) +{ + struct ds_xml_context* pCtx = (parse_stream_desc_t*)data; + + if(pCtx->nDasErr != DAS_OKAY) /* If an error condition is set, stop processing elements */ + return; + + if(strcmp(sElement, "dataset") == 0){ + if(pCtx->pDs != NULL){ + pCtx->nDasErr = das_error(DASERR_SERIAL, "Only one dataset definition allowed per header packet"); + return; + } + _serial_onOpenDs(pCtx, psAttr); + return; + } + + if(pCtx->pDs == NULL) /* If the dataset is not defined, nothing can be linked in */ + return; + + if((strcmp(sElement, "coord")==0)||(strcmp(sElement, "data")==0)){ + _serial_onOpenDim(pCtx, sElement, psAttr); + return; + } + if(strcmp(sElement, "properties") == 0){ + pCtx->bInPropList = true; + return; + } + if(strcmp(sElement, "p") == 0){ + if(pCtx->bInPropList) + pCtx->bInProp = true; + return; + } + if((strcmp(sElement, "scalar") == 0)||(strcmp(sElement, "vector") == 0)){ + _serial_onOpenVar(pCtx, sElement, psAttr); + return; + } + if(strcmp(sElement, "component") == 0){ + _serial_onComponent(pCtx, psAttr); + return; + } + if(strcmp(sElement, "values") == 0){ + _serial_onOpenVals(pCtx, psAttr); // Sets value type, starts an array + return; + } + if(strcmp(sElement, "sequence") == 0){ + _serial_onSequence(pCtx, psAttr); // sets value type, saves sequence constants + return; + } + if(strcmp(sElement, "packet") == 0){ + _serial_onPacket(pCtx, psAttr); // Setss value type, starts an array + return; + } + + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Unsupported element %s in the definition for dataset ID %02d." + sElement, pCtx->nPktId + ) + return; +} + +/* ************************************************************************** */ +/* Accumlating data between element tags */ + +static void _serial_xmlCharData(void* pCtx, const char* sChars, int nLen) +{ + struct ds_xml_context* pCtx = (parse_stream_desc_t*)data; + + if(pCtx->nDasErr != DAS_OKAY) /* Error, stop processing */ + return; + + if(pCtx->bInProp){ + DasAry* pAry = &(pCtx->pPropVal); + DasAry_append(pAry, (ubyte*) sChars, nLen); + return; + } + + /* The only other character data should come from embedded values */ + if(!pCtx->bInValues) + return; + + int nUnRead = 0; + + /* If I have underflow from the previous read, complete the one value + and append it. The previous buffer must have ended before a separator + or else we wouldn't be in an underflow condition. Finish out the + current value, read it then advace the read pointer. */ + if(pCtx->nValUnderFlowValid > 0){ + char* p = sChars; + int n = 0; + while(!isspace(*p) && (*p != '\0') && (n < nLen)){ + ++p; ++n; + } + + if(n > 0){ + if(nValUnderFlowValid + n >= (_VAL_UNDER_SZ-1)){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Parse error: Underflow buffer can't hold %d + %d bytes", + nValUnderFlowValid, n + ); + return; + memcpy(pCtx->aValUnderFlow + nValUnderFlowValid, n, sChars); + } + + /* Read the underflow buffer then clear it */ + /* TODO: make DasAry_putAt handle index rolling as well */ + nUnRead = DasAryEnc_read(pCtx->codecHdrVals, pCtx->aValUnderFlow, nLen, -1, NULL); + if(nUnRead < 0){ + pCtx->nDasErr = -1 * nUnRead; + return; + } + memset(pCtx->aValUnderFlow, 0, _VAL_TERM_SZ); + pCtx->nValUnderFlowValid = 0; + + nLen -= n; + sChars += n; + } + } + + /* Decode as many values as possible from the input */ + /* TODO: make DasAry_putAt handle index rolling as well */ + nUnRead = DasAryCodec_append(pCtx->codecHdrVals, sChars, nLen, -1, NULL); + if(nRead < 0){ + pCtx->nDasErr = -1*nRead; + return; + } + + if(nUnRead > 0){ + if(nUnRead > _VAL_UNDER_SZ){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Parse error: Unread bytes of character data (%d) too large to " + "fit in underflow buffer (%d)", nUnRead, _VAL_UNDER_SZ + ); + return; + } + + memcpy(pCtx->aValUnderFlow, pCtx->sChars+nBytesRead, nUnRead); + pCtx->nValUnderFlowValid = unRead; + } +} + +/* ************************************************************************** */ +/* Closing out properties */ + +static void _serial_onCloseProp(struct ds_xml_context* pCtx, DasDesc* pDest){ + + if(pCtx->nDasErr != DAS_OKAY) + return; + + DasAry* pAry = &(pCtx->aPropVal); + DasAry_append(pAry, NULL, 1); // Null terminate the value string + size_t uValLen = 0; + const char* sValue = DasAry_getCharsIn(pAry, DIM0, &uValLen); + + if(pDest == NULL){ + pCtx->nDasErr = das_error(DASERR_SERIAL, "Property element at improper location"); + return; + } + + DasDesc_flexSet( + pDest, // descriptor + pCtx->sPropType[0] == '\0' ? "string" : pCtx->sPropType, // prop type (string) + 0, // prop type (code) + pCtx->sPropName, // prop name + sValue, // prop value + '\0', // + pCtx->sPropUnits[0] == '\0' ? NULL : Units_fromStr(pCtx->sPropUnits), + 3 /* Das3 */ + ); + + memset(&(pCtx->sPropType), 0, _TYPE_BUF_SZ); + memset(&(pCtx->sPropName), 0, _NAME_BUF_SZ); + memset(&(pCtx->sPropUnits), 0, _UNIT_BUF_SZ); + DasAry_clear(pAry); +} + +/* ************************************************************************** */ + +static void _serial_onCloseVals(struct ds_xml_context* pCtx){ + if(pCtx->nDasErr != DAS_OKAY) + return; + + pCtx->bInValues = false; + + /* Cross check variable size against the array size, make sure they */ + /* match. */ + size_t uExpect = 0; + for(int i = 0; i < DASIDX_MAX; ++i){ + if(pCtx->aVarMap[i] > 0){ + if(uExpect == 0) uExpect = pCtx->aVarMap[i]; + else uExpect *= pCtx->aVarMap[i]; + } + } + + /* Now get the array size in any non-internal dimensions */ + ptrdiff_t aShape[DASIDX_MAX] = {0}; + DasAry_shape(pCtx->pCurAry, aShape); + size_t uHave = 0; + for(int i = 0; i < DASIDX_MAX; ++i){ + if(aShape[i] > 0){ + if(uHave == 0) + uHave = aShape[i]; + else + uHave *= aShape[i]; + } + } + + if(uHave != uExpect){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Expected %zu header values for variable %s:%s in dataset ID, read %zu", + uExpect, DasDim_id(pCtx->pCurDim), pCtx->varUse, uHave + ); + return; + } + + /* Looks good from here boss */ +} + +/* ************************************************************************** */ + +static void _serial_onCloseVar(struct das_xml_contex* pCtx) +{ + /* To assign directions, we'll need the frame from the stream header. If that's + not present then complain */ + const DasFrame* pFrame = StreamDesc_getFrameByName(pCtx->pSd, pCtx->pCurDim->frame); + + /* If this is a vector and we had no components, that's a problem */ + if((pCtx->varIntRank == 1)&&(pCtx->nVarComp == 0)){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "No components provided for vector %s of dimension %s for dataset ID %d", + pCtx->varUse, DasDim_id(pCtx->pCurDim), pCtx->nPktId + ); + goto NO_CUR_VAR; + } + + /* Create the variable, for vector variables, we may need to create an + implicit frame as well */ + DasVar* pVar = NULL; + + if(pCtx->varIntRank == 1){ + + if(pCtx->pCurDim->frame[0] == '\0'){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + " or holding must have a defined coordinate frame" + ); + goto NO_CUR_VAR; + } + + DasFrame* pFrame = StreamDesc_getFrameByName(pCtx->pSD, pCtx->pCurDim->frame); + if(pFrame == NULL){ + // If the stream had no frame, generate one for the given frame name + int iFrame = StreamDesc_nextFrameId(pCtx->pSd); + if(iFrame < 0){ + pCtx->nDasErr = -1*iFrame; + goto NO_CUR_VAR; + } + pFrame = StreamDesc_createFrame(pCtx->pSd, iFrame, pCtx->pCurDim->frame, "cartesian"); + DasDesc_setStr((DasDesc*)pFrame, "title", "Autogenerated Frame"); + + for(int i = 0; i < pCtx->nVarComp; ++i){ + if((nRet = DasFrame_addDir(pFrame, pCtx->varCompDirs[i])) != DAS_OKAY){ + pCtx->nDasErr = nRet; + goto NO_CUR_VAR; + } + } + } + + int8_t iFrame = StreamDesc_getFrameId(pCtx->pSd, pCtx->pCurDim->frame); + if(iFrame < 0){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "No frame named %s is defined for the stream", pCtx->pCurDim->frame + ); + goto NO_CUR_VAR; + } + + ubyte aDirs[DASFRM_MAX_DIRS]; + for(int i = 0; i < pCtx->nVarComp; ++i){ + assert(i < DASFRM_MAX_DIRS); + + aDirs[i] = DasFrame_idxByDir(pFrame, pCtx->varCompDirs[i]); + if(aDirs[i] < 0){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "No direction named %s in frame %s for the stream", + pCtx->varCompDirs[i], DasFrame_getName(pFrame) + ); + goto NO_CUR_VAR; + } + } + + // Get the array for this variable + if(!pCtx->pCurAry){ + pCtx->nDasErr = das_error(DASERR_SERIAL, "Vector sequences are not yet supported"); + goto NO_CUR_VAR; + } + + pVar = new_DasVarVecAry(pCtx->pCurAry, pCtx->nRank, + pCtx->aVarMap, 1, pFrame->name, pFrame->flags, pCtx->nVarComp, aDirs + ); + } + else{ + // Scalar variables (the more common case) + if(pCtx->pCurAry == NULL){ + pVar = new_DasVarSeq( + pCtx->varUse, pCtx->vtVarItemType, 0, pCtx->aSeqMin, pCtx->aSeqInter, + DasDs_rank(pCtx->pDs), pCtx->aVarMap, 0, pCtx->varUnits + ); + } + else{ + pVar = new_DasVarArray(pCtx->pCurAry, pCtx->nRank, pCtx->aVarMap, 0); + } + } + + /* If this is an array var type & it is record varying, add a packet decoder */ + if((pCtx->varCategory == D2V_ARRAY)&&(pCtx->aVarMap[0] != DASIDX_UNUSED)){ + + int nRet; + + if((pCtx->nPktItemBytes < 0)||(pCtx->nPktItems < 0)){ + nRet = das_error(DASERR_NOTIMP, "Setting up variable length decodings is not yet implemented"); + } + else{ + nRet = DasDs_addFixedCodec( + pCtx->pDs, DasAry_id(pCtx->pCurAry), pCtx->sValEncType, + pCtx->nPktItemBytes, pCtx->nPktItems + ); + } + if(nRet != DAS_OKAY){ + pCtx->nDasErr == nRet; + goto NO_CUR_VAR; + } + } + + if(pVar == NULL){ + pCtx->nDasErr = DASERR_VAR; + goto NO_CUR_VAR; + } + + if(!DasDim_addVar(pCtx->pCurDim, pCtx->varUse, pVar)){ + del_DasVar(pVar); + pCtx->nDasErr = DASERR_DIM; + } + +NO_CUR_VAR: /* No longer in a var, nor in an array */ + _serial_clear_var_section(pCtx); +} + +/* ************************************************************************** */ + +static void _serial_xmlElementEnd(void* pCtx, const char* sElement) +{ + struct ds_xml_context* pCtx = (parse_stream_desc_t*)data; + + /* If I've hit an error condition, stop processing stuff */ + if(pCtx->nDasErr != DAS_OKAY) + return; + + /* Closing properties */ + if(sElement[0] == "p" && sElement[1] == "\0"){ + + DasDesc* pDest = pCtx->pCurDim != NULL ? pCtx->pCurDim : pCtx->pDs; + _serial_onCloseProp(pCtx, pDest); + pCtx->bInProp = false; + return; + } + + /* Closing property blocks */ + if(strcmp(sElement, "properties") == 0){ + pCtx->bInPropList = false; + return; + } + + /* Closing values, not much to do here as values are converted to + array entries as character data are read */ + if(strcmp(sElement, "values") == 0){ + _serial_onCloseVals(pCtx); + return; + } + + if((strcmp(sElement, "coord")==0)||(strcmp(sElement, "data")==0)){ + pCtx->pCurDim = NULL; + return; + } + + if((strcmp(sElement, "vector")==0)||(strcmp(sElement, "scalar")==0)){ + _serial_onCloseVar(pCtx); + return; + } + /* Nothing to do on the other ones */ +} + +/* ************************************************************************** */ + +DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, DasDesc* pParent, int nPktId) +{ + if(nDasVer != 3){ + das_error(DASERR_NOTIMP, "Direct das v2.2 header format is not yet supported"); + return NULL; + } + + struct ds_xml_context context = {0}; // All object's initially null + context.pSD = (StreamDesc*)pParent; + + if((pParent == NULL)||(pParent->type != STREAM)){ + das_error(DASERR_SERIAL, "Stream descriptor must appear before a dataset descriptor"); + return NULL; + } + + context.nPktId = nPktId; + for(int i = 0; i < DASIDX_MAX; ++i) + context.aExtShape[i] = DASIDX_UNUSED; + + parser.nErr = DAS_OKAY; + + XML_Parser pParser = XML_ParserCreate("UTF-8"); + if(pParser == NULL){ + das_error(DASERR_SERIAL, "Couldn't create XML parser\n" ); + return NULL; + } + XML_SetUserData(pParser, (void*)&context); + XML_SetElementHandler(pParser, _DasDs_xmlElementStart, _DasDs_xmlElementEnd); + XML_SetCharacterDataHandler(p, _DasDs_xmlCharData); + + if(XML_Parse(pParser, pBuf->pReadBeg, DasBuf_unread(pBuf), true) == XML_STATUS_ERROR) + { + das_error(DASERR_PKT, "Parse error at line %d: %s\n", + XML_GetCurrentLineNumber(p), + XML_ErrorString(XML_GetErrorCode(p)) + ); + goto ERROR; + } + + if((context.nDasErr == DAS_OKAY)&&(context.pDs != NULL)) + return context.pDs; + +ERROR: + XML_ParserFree(pParser); + if(context.pDs) // Happens, for example, if vector has no components + del_DasDs(context.pDs) + das_error(context.nDasErr, context.sErrMsg); + return NULL; +} diff --git a/das2/serial.h b/das2/serial.h new file mode 100644 index 0000000..daca90d --- /dev/null +++ b/das2/serial.h @@ -0,0 +1,58 @@ +/* Copyright (C) 2024 Chris Piker + * + * This file is part of das2C, the Core Das2 C Library. + * + * das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with das2C; if not, see . + */ + +/** @file serial.h Creating, reading and writing datasets to and from buffers */ + +#ifndef _das_serial_h_ +#define _das_serial_h_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/** Define a das dataset and all it's constiutant parts from an XML header + * + * @param nDasVer The major version of the header format. If this is 2 + * then the top level element should be , if this is 3 + * then the top level element is expected to be + * + * @param pBuf The buffer to read. Reading will start with the read point + * and will run until DasBuf_remaining() is 0 or the end tag + * is found, which ever comes first. + * + * @param pParent The parent descriptor for this data set. This is assumed + * to be an object which can hold vector frame definitions. + * + * @param nPktId The packet's ID within it's parent's array. My be 0 if + * and only if pParent is NULL + * + * @return A pointer to a new DasDs and all if it's children allocated + * on the heap, or NULL on an error. + */ +DAS_API DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, DasDesc* pParent, int nPktId); + + + +#ifdef __cplusplus +} +#endif + + +#endif /* _serial */ \ No newline at end of file diff --git a/das2/stream.c b/das2/stream.c index 85ec1e8..7741f10 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -32,6 +32,7 @@ #include +#include "serial.h" #include "stream.h" @@ -294,7 +295,7 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) /* Frame wrappers */ DasFrame* StreamDesc_createFrame( - StreamDesc* pThis, byte id, const char* sName, const char* sType + StreamDesc* pThis, ubyte id, const char* sName, const char* sType ){ // Find a slot for it. size_t uIdx = 0; @@ -325,6 +326,14 @@ DasFrame* StreamDesc_createFrame( return pFrame; } +int StreamDesc_nextFrameId(const StreamDesc* pThis){ + for(int i = 0; i < MAX_FRAMES; ++i){ + if(pThis->frames[i] == NULL) + return i; + } + return -1; +} + const DasFrame* StreamDesc_getFrame(const StreamDesc* pThis, int idx) { return (idx < 0 || idx > MAX_FRAMES) ? NULL : pThis->frames[idx]; @@ -340,7 +349,7 @@ const DasFrame* StreamDesc_getFrameByName( return NULL; } -const DasFrame* StreamDesc_getFrameById(const StreamDesc* pThis, byte id) +const DasFrame* StreamDesc_getFrameById(const StreamDesc* pThis, ubyte id) { for(size_t u = 0; (u < MAX_FRAMES) && (pThis->frames[u] != NULL); ++u){ if(pThis->frames[u]->id == id) @@ -376,7 +385,7 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) StreamDesc* pSd = pPsd->pStream; char sType[64] = {'\0'}; char sName[64] = {'\0'}; - byte nFrameId = 0; + ubyte nFrameId = 0; const char* pColon = NULL; pPsd->bInProp = (strcmp(el, "p") == 0); @@ -495,7 +504,7 @@ void parseStreamDesc_chardata(void* data, const char* sChars, int len) DasAry* pAry = &(pPsd->aPropVal); - DasAry_append(pAry, (byte*) sChars, len); + DasAry_append(pAry, (ubyte*) sChars, len); } /* Formerly nested function "end" in parseStreamDescriptor */ @@ -562,10 +571,10 @@ StreamDesc* new_StreamDesc_str(DasBuf* pBuf) return NULL; } - // Make a 1-D dynamic array to hold the current property value so that - // it has no up-front limits, but doesn't require a huge heap buffer - // for what are typically very small strings. - DasAry_init(&(psd.aPropVal), "streamprops", vtByte, 0, NULL, RANK_1(0), NULL); + /* Make a 1-D dynamic array to hold the current property value so that + it has no up-front limits, but doesn't require a huge heap buffer + for what are typically very small strings.*/ + DasAry_init(&(psd.aPropVal), "streamprops", vtUByte, 0, NULL, RANK_1(0), NULL); XML_SetUserData(p, (void*) &psd); XML_SetElementHandler(p, parseStreamDesc_start, parseStreamDesc_end); @@ -618,7 +627,7 @@ DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf) } /* Factory function */ -DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd) +DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd, int nPktId) { char sName[DAS_XML_NODE_NAME_LEN] = {'\0'}; @@ -685,10 +694,10 @@ DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd) return (DasDesc*) new_StreamDesc_str(pBuf); if(strcmp(sName, "packet") == 0) - return (DasDesc*) new_PktDesc_xml(pBuf, NULL, 0); + return (DasDesc*) new_PktDesc_xml(pBuf, pSd, nPktId); if(strcmp(sName, "dataset") == 0) - return (DasDesc*) new_DasDs_xml(pBuf, NULL, 0); + return (DasDesc*) dasds_from_xmlheader(3, pBuf, pSd, nPktId); das_error(DASERR_STREAM, "Unknown top-level descriptor object: %s", sName); return NULL; diff --git a/das2/stream.h b/das2/stream.h index 95c50d6..baeebe9 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -229,9 +229,15 @@ DAS_API PktDesc* StreamDesc_createPktDesc( * @memberof StreamDesc */ DAS_API DasFrame* StreamDesc_createFrame( - StreamDesc* pThis, byte id, const char* sName, const char* sType + StreamDesc* pThis, ubyte id, const char* sName, const char* sType ); +/** Get the next open frame ID + * + * @returns then next valid frame ID or a negative DasErrCode if no more frames are allowed + */ +DAS_API int StreamDesc_nextFrameId(const StreamDesc* pThis); + /** Make a deep copy of a PacketDescriptor on a new stream. * This function makes a deep copy of the given packet descriptor and * places it on the provided stream. Note, packet ID's are not preserved @@ -294,6 +300,12 @@ DAS_API PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int id); */ DAS_API const DasFrame* StreamDesc_getFrame(const StreamDesc* pThis, int idx); +/** Get a frame index given it's name + * + * @returns negative DasErrCode if there's no frame for the given name + */ +DAS_API int8_t StreamDesc_getFrameId(const StreamDesc* pThis, const char* sFrame); + /** Get a frame pointer by it's name * @@ -313,7 +325,7 @@ DAS_API const DasFrame* StreamDesc_getFrameByName( * * @memberof StreamDesc */ -const DasFrame* StreamDesc_getFrameById(const StreamDesc* pThis, byte id); +const DasFrame* StreamDesc_getFrameById(const StreamDesc* pThis, ubyte id); /** Free any resources associated with this PacketDescriptor, * and release it's id number for use with a new PacketDescriptor. @@ -341,10 +353,12 @@ DAS_API DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf); * * @param pSd - The Stream descriptor, if it exists. May be NULL. * + * @param nPktId - The packet tag ID number corresponding to this top-level descriptor + * * @returns Either a top level Descriptor object. The specific type dependings * on the data received, or NULL if the input could not be parsed. */ -DAS_API DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd); +DAS_API DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd, int nPktId); #ifdef __cplusplus } diff --git a/das2/util.h b/das2/util.h index 652891a..86e107a 100644 --- a/das2/util.h +++ b/das2/util.h @@ -294,9 +294,6 @@ DAS_API void das_error_free(das_error_msg* pMsg); * other */ #define das_within(A, B, E) (fabs(A - B) < E ? true : false) -/** limit of number of properties per descriptor. */ -#define DAS_XML_MAXPROPS 400 - /** The limit on xml packet length, in bytes. (ascii encoding.) */ #define DAS_XML_BUF_LEN 1000000 diff --git a/das2/value.c b/das2/value.c index 77df3e1..4bef679 100644 --- a/das2/value.c +++ b/das2/value.c @@ -42,11 +42,14 @@ /* value type functions */ static const das_idx_info g_idxFill = {0, 0}; -static const byte g_byteFill = 0; +static const ubyte g_ubyteFill = 255; +static const int8_t g_byteFill = -128; static const uint16_t g_ushortFill = 65535; static const int16_t g_shortFill = -32767; +static const uint32_t g_uintFill = 4294967295; static const int32_t g_intFill = -2147483647; static const int64_t g_longFill = -9223372036854775807L; +static const uint64_t g_ulongFill = 18446744073709551615UL; static const float g_floatFill = DAS_FILL_VALUE; static const double g_doubleFill = DAS_FILL_VALUE; static const das_time g_timeFill = {0, 0, 0, 0, 0, 0, 0.0}; @@ -56,10 +59,13 @@ const void* das_vt_fill(das_val_type et) { switch(et){ case vtIndex: return &(g_idxFill); - case vtByte: return &(g_byteFill); - case vtShort: return &(g_shortFill); + case vtUByte: return &(g_ubyteFill); + case vtByte: return &(g_byteFill) case vtUShort: return &(g_ushortFill); + case vtShort: return &(g_shortFill); + case vtUInt: return &(g_uintFill); case vtInt: return &(g_intFill); + case vtULong: return &(g_ulongFill); case vtLong: return &(g_longFill); case vtFloat: return &(g_floatFill); case vtDouble: return &(g_doubleFill); @@ -73,13 +79,12 @@ size_t das_vt_size(das_val_type et) { switch(et){ case vtIndex: return sizeof(g_idxFill); - case vtByte: return sizeof(g_byteFill); - case vtShort: return sizeof(g_shortFill); - case vtUShort: return sizeof(g_ushortFill); - case vtInt: return sizeof(g_intFill); - case vtLong: return sizeof(g_longFill); - case vtFloat: return sizeof(g_floatFill); - case vtDouble: return sizeof(g_doubleFill); + + case vtByte: case vtUByte: return 1; + case vtShort: case vtUShort: return 2; + case vtUInt: case vtInt: case vtFloat: return 4; + case vtLong: case vtULong: case vtDouble: return 8; + case vtTime: return sizeof(g_timeFill); case vtText: return sizeof(char*); case vtGeoVec: return sizeof(das_geovec); @@ -93,81 +98,229 @@ const char* das_vt_toStr(das_val_type et) { switch(et){ case vtUnknown: return "unknown"; - case vtIndex: return "index_info"; - case vtByte: return "byte"; - case vtUShort: return "uint16_t"; - case vtInt: return "int32_t"; - case vtLong: return "int64_t"; - case vtFloat: return "float"; - case vtDouble: return "double"; - case vtTime: return "das_time_t"; - case vtText: return "const char*"; + case vtIndex: return "index_info"; + case vtUByte: return "ubyte"; + case vtUByte: return "byte"; + case vtUShort: return "ushort"; + case vtShort: return "short"; + case vtUInt: return "uint"; + case vtInt: return "int"; + case vtULong: return "ulong"; + case vtLong: return "long"; + case vtFloat: return "float"; + case vtDouble: return "double"; + case vtTime: return "das_time"; + case vtGeoVec: return "das_geovec"; + case vtText: return "char*"; + case vtByteSeq: return "ubyte*"; default: return NULL; } } +das_val_type das_vt_fromStr(const char* sStorage) +{ + if(strcasecmp(sStorage, "float") == 0) return vtFloat; + if(strcasecmp(sStorage, "double") == 0) return vtDouble; + if(strcasecmp(sStorage, "int") == 0) return vtInt; + if(strcasecmp(sStorage, "short") == 0) return vtShort; + if(strcasecmp(sStorage, "long") == 0) return vtLong; + if(strcasecmp(sStorage, "uint") == 0) return vtUInt; + if(strcasecmp(sStorage, "ushort") == 0) return vtUShort; + if(strcasecmp(sStorage, "ulong") == 0) return vtLong; + if(strcasecmp(sStorage, "byte") == 0) return vtByte; + if(strcasecmp(sStorage, "ubyte") == 0) return vtUByte; + if(strcasecmp(sStorage, "das_time") == 0) return vtTime; + if(strcasecmp(sStorage, "index_info") == 0) return vtIndex; + if(strcasecmp(sStorage, "utf8") == 0) return vtText; + if(strcasecmp(sStorage, "char*") == 0) return vtText; + if(strcasecmp(sStorage, "das_geovec") == 0) return vtGeoVec; + if(strcasecmp(sStorage, "ubyte*") == 0) return vtByteSeq; + return vtUnknown; +} + +/* Useful for picking a storage type when it's not explicity stated */ +das_val_type das_vt_store_type(const char* sEncType, int nItemBytes, const char* sInterp) +{ + if(strcmp(sEncType, "none") == 0){ + return vtByteSeq; + } + if(strcmp(sEncType, "byte") == 0){ + return vtByte; // promote to higher type to get sign bits + } + if(strcmp(sEncType, "ubyte") == 0){ + return vtUByte; + } + if((strcmp(sEncType, "BEint") == 0)||(strcmp(sEncType, "LEint") == 0)){ + if(nItemBytes == 2) return vtShort; + else if(nItemBytes == 4) return vtInt; + else if(nItemBytes == 8) return vtLong; + else{ + das_error(DASERR_VALUE, "Unsupported length %d for binary integers", nItemBytes); + return vtUnknown; + } + } + if((strcmp(sEncType, "BEuint") == 0)||(strcmp(sEncType, "LEuint") == 0)){ + if(nItemBytes == 2) return vtUShort; + else if(nItemBytes == 4) return vtUInt; + else if(nItemBytes == 8) return vtULong; + else{ + das_error(DASERR_VALUE, "Unsupported length %d for binary integers", nItemBytes); + return vtUnknown; + } + } + if((strcmp(sEncType, "BEreal") == 0)||(strcmp(sEncType, "LEreal") == 0)){ + if(nItemBytes == 4) return vtFloat; + else if (nItemBytes == 8) return vtDouble; + else{ + das_error(DASERR_VALUE, "Unsupported length %d for binary floating point values", nItemBytes); + return vtUnknown; + } + } + + /* Okay it's a text type, deal with that */ + if(strcmp(sEncType, "utf8") == 0){ + if(strcmp(sInterp, "bool") == 0) + return vtByte; /* signed range allows for a fill value */ + if(strcmp(sInterp, "datetime") == 0) + return vtTime; + if(strcmp(sInterp, "real") == 0){ + /* Can get hints from the length of the field, assume var-width items + * need the bigest available encoding */ + if((nItemBytes > 15)||(nItemBytes < 1)) + return vtDouble; + else + return vtFloat; + } + if(strcmp(sInterp, "int") == 0){ + /* can get hints from the length of the field */ + if((nItemBytes < 1)||(nItemBytes > 11)) + return vtLong; /* For var-length ints, return biggest storage for safety */ + if(nItemBytes > 5) + return vtInt; + if(nItemBytes > 4) + return vtShort; + return vtByte; + } + if(strcmp(sInterp, "string") == 0){ + return vtText; + } + } + if(strcmp(sEncType, "none") == 0){ + return vtByteSeq; + } + + das_error(DASERR_VALUE, "Unknown encoding type %s", sEncType); + return vtUnknown; +} + +/* +das_val_type das_vt_guess_store(const char* sInterp, const char* sValue) +{ + int nLen = strlen(sValue); + if((sValue == NULL)||(sValue[0] == '\0')){ + das_error(DASERR_VALUE, "Null value"); + return vtUnknown; + } + + if(strcmp(sInterp, "real") == 0){ + + // Cut down expected lengths by 4 if using scientific notation + char* pE = strchr(sValue, 'e'); + if(pE == NULL) + pE = strchr(sValue, 'E'); + if(pE != NULL) + uLen -= p; + if((sValue[0] == '+')||(sValue[0]=='-')) + uLen -= 1 + if((strchr(sValue, '.') != NULL)||(strchr(sValue, ',') != NULL)) + uLen -= 1 + + return uLen > 6 ? vtDouble, vtFloat; + } + + if(strcmp(sInterp, "int") == 0){ + // Just assume signed + if(nLen < 2) return vtByte; + if(nLen < 5) return vtShort; + if(nLen < 9) return vtInt; + return vtLong; + } + + if(strcmp(sInterp, "bool") == 0){ + return vtByte; + } + if(strcmp(sInterp, "datetime") == 0){ + return vtTime; + } + if(strcmp(sInterp, "string") == 0){ + return vtText; + } + return vtUnknown; +} +*/ + /* ************************************************************************* */ /* Default Comparison functions */ -int vt_cmp_byte(const byte* vpFirst, const byte* vpSecond){ - const byte* pFirst = (const byte*) vpFirst; - const byte* pSecond = (const byte*) vpSecond; +int vt_cmp_byte(const ubyte* vpFirst, const ubyte* vpSecond){ + const ubyte* pFirst = (const ubyte*) vpFirst; + const ubyte* pSecond = (const ubyte*) vpSecond; if(*pFirst < *pSecond) return -1; if(*pFirst > *pSecond) return 1; return 0; } -int vt_cmp_ushort(const byte* vpFirst, const byte* vpSecond){ +int vt_cmp_ushort(const ubyte* vpFirst, const ubyte* vpSecond){ const uint16_t* pFirst = (const uint16_t*) vpFirst; const uint16_t* pSecond = (const uint16_t*) vpSecond; if(*pFirst < *pSecond) return -1; if(*pFirst > *pSecond) return 1; return 0; } -int vt_cmp_short(const byte* vpFirst, const byte* vpSecond){ +int vt_cmp_short(const ubyte* vpFirst, const ubyte* vpSecond){ const int16_t* pFirst = (const int16_t*) vpFirst; const int16_t* pSecond = (const int16_t*) vpSecond; if(*pFirst < *pSecond) return -1; if(*pFirst > *pSecond) return 1; return 0; } -int vt_cmp_int(const byte* vpFirst, const byte* vpSecond){ +int vt_cmp_int(const ubyte* vpFirst, const ubyte* vpSecond){ const int32_t* pFirst = (const int32_t*) vpFirst; const int32_t* pSecond = (const int32_t*) vpSecond; if(*pFirst < *pSecond) return -1; if(*pFirst > *pSecond) return 1; return 0; } -int vt_cmp_long(const byte* vpFirst, const byte* vpSecond){ +int vt_cmp_long(const ubyte* vpFirst, const ubyte* vpSecond){ const int64_t* pFirst = (const int64_t*) vpFirst; const int64_t* pSecond = (const int64_t*) vpSecond; if(*pFirst < *pSecond) return -1; if(*pFirst > *pSecond) return 1; return 0; } -int vt_cmp_float(const byte* vpFirst, const byte* vpSecond){ +int vt_cmp_float(const ubyte* vpFirst, const ubyte* vpSecond){ const float* pFirst = (const float*) vpFirst; const float* pSecond = (const float*) vpSecond; if(*pFirst < *pSecond) return -1; if(*pFirst > *pSecond) return 1; return 0; } -int vt_cmp_double(const byte* vpFirst, const byte* vpSecond){ +int vt_cmp_double(const ubyte* vpFirst, const ubyte* vpSecond){ const double* pFirst = (const double*) vpFirst; const double* pSecond = (const double*) vpSecond; if(*pFirst < *pSecond) return -1; if(*pFirst > *pSecond) return 1; return 0; } -int vt_cmp_time(const byte* vpFirst, const byte* vpSecond){ +int vt_cmp_time(const ubyte* vpFirst, const ubyte* vpSecond){ return dt_compare((const das_time*)vpFirst, (const das_time*)vpSecond); } -int vt_cmp_text(const byte* vpFirst, const byte* vpSecond){ +int vt_cmp_text(const ubyte* vpFirst, const ubyte* vpSecond){ const char** pFirst = (const char**) vpFirst; const char** pSecond = (const char**) vpSecond; return strcmp(*pFirst, *pSecond); } -int vt_cmp_byteseq(const byte* vpA, const byte* vpB) +int vt_cmp_byteseq(const ubyte* vpA, const ubyte* vpB) { const das_byteseq* pA = (const das_byteseq*)vpA; const das_byteseq* pB = (const das_byteseq*)vpB; @@ -182,13 +335,13 @@ int vt_cmp_byteseq(const byte* vpA, const byte* vpB) return ( (pA->sz > pB->sz) ? 1 : ((pA->sz == pB->sz) ? 0 : -1) ); } -int vt_cmp_geovec(const byte* vpA, const byte* vpB) +int vt_cmp_geovec(const ubyte* vpA, const ubyte* vpB) { - //const das_geovec* pA = (const das_vector*)vpA; - //const das_geovec* pB = (const das_vector*)vpB; + /*const das_geovec* pA = (const das_vector*)vpA; */ + /*const das_geovec* pB = (const das_vector*)vpB; */ - //das_val_type etA = das_vec_eltype(pA); - //das_val_type etB = das_vec_eltype(pB); + /*das_val_type etA = das_vec_eltype(pA); */ + /*das_val_type etB = das_vec_eltype(pB); */ das_error(DASERR_VALUE, "Vector comparison not yet implemented, infact, I'm not sure" @@ -200,7 +353,7 @@ int vt_cmp_geovec(const byte* vpA, const byte* vpB) das_valcmp_func das_vt_getcmp(das_val_type et) { switch(et){ - case vtByte: return vt_cmp_byte; + case vtUByte: return vt_cmp_byte; case vtShort: return vt_cmp_short; case vtUShort: return vt_cmp_ushort; case vtInt: return vt_cmp_int; @@ -226,7 +379,7 @@ das_val_type das_vt_merge(das_val_type left, int op, das_val_type right) if(left == vtByteSeq || right == vtByteSeq) return vtUnknown; if(left == vtText || right == vtText) return vtUnknown; - bool bShortRight = (left == vtByte || left == vtShort || left == vtUShort + bool bShortRight = (left == vtUByte || left == vtShort || left == vtUShort || left == vtFloat); bool bShortLeft = (right == vtByte || right == vtShort || right == vtUShort || right == vtFloat); @@ -249,7 +402,7 @@ das_val_type das_vt_merge(das_val_type left, int op, das_val_type right) #define HAS_BOTH 0x3 int das_vt_cmpAny( - const byte* pA, das_val_type vtA, const byte* pB, das_val_type vtB + const ubyte* pA, das_val_type vtA, const ubyte* pB, das_val_type vtB ){ int nCmp = 0; double dA = 0.0, dB = 0.0; @@ -298,12 +451,12 @@ int das_vt_cmpAny( if(vtA == vtByteSeq){ bs.ptr = pB; bs.sz = das_vt_size(vtB); - return vt_cmp_byteseq(pA, (const byte*) &bs); + return vt_cmp_byteseq(pA, (const ubyte*) &bs); } else{ bs.ptr = pA; bs.sz = das_vt_size(vtA); - return vt_cmp_byteseq((const byte*)&bs, pB); + return vt_cmp_byteseq((const ubyte*)&bs, pB); } } @@ -319,7 +472,7 @@ int das_vt_cmpAny( byte uAHas = 0; /* float = 0x2 */ byte uBHas = 0; /* int = 0x1 */ switch(vtA){ - case vtByte: lA = *((const uint8_t*)pA); dA = *((const uint8_t*)pA); uAHas = HAS_BOTH; break; + case vtUByte: lA = *((const uint8_t*)pA); dA = *((const uint8_t*)pA); uAHas = HAS_BOTH; break; case vtShort: lA = *((const int16_t*)pA); dA = *((const int16_t*)pA); uAHas = HAS_BOTH; break; case vtUShort: lA = *((const uint16_t*)pA); dA = *((const uint16_t*)pA); uAHas = HAS_BOTH; break; case vtInt: lA = *((const int32_t*)pA); dA = *((const int32_t*)pA); uAHas = HAS_BOTH; break; @@ -332,7 +485,7 @@ int das_vt_cmpAny( } switch(vtB){ - case vtByte: lB = *((const uint8_t*)pB); dB = *((const uint8_t*)pB); uBHas = HAS_BOTH; break; + case vtUByte: lB = *((const uint8_t*)pB); dB = *((const uint8_t*)pB); uBHas = HAS_BOTH; break; case vtShort: lB = *((const int16_t*)pB); dB = *((const int16_t*)pB); uBHas = HAS_BOTH; break; case vtUShort: lB = *((const uint16_t*)pB); dB = *((const uint16_t*)pB); uBHas = HAS_BOTH; break; case vtInt: lB = *((const int32_t*)pB); dB = *((const int32_t*)pB); uBHas = HAS_BOTH; break; @@ -361,6 +514,65 @@ int das_vt_cmpAny( #undef HAS_FLT #undef HAS_BOTH +/* ************************************************************************** */ +/* Parse any string into a value */ + +DasErrCode das_value_fromStr( + ubyte* pBuf, int nBufLen, das_val_type vt, const char* sStr +){ + if(sStr == NULL){ + return das_error(DASERR_VALUE, "Empty string can't be converted to a value"); + } + /* See if the buffer is big enough for the binary size of this values type */ + if(nBufLen < das_vt_size(vt)){ + return das_error(DASERR_VALUE, + "Output buffer is too small %d bytes to hold a value of type %s", + nBufLen, das_vt_toStr(vt) + ); + } + + switch(vt){ + case vtUnknown: + return das_error(DASERR_VALUE, "Cannot determine fill values for unknown types"); + + case vtText: + size_t nLen = strlen(sStr); + if(nLen <= nBufLen){ + strncpy((char*)pBuf, sStr, nLen); + return DAS_OKAY; + } + daslog_error("string value '%s' can't fit into %d byte buffer", sStr, nBufLen); + return DASERR_VALUE; + + case vtUByte: + case vtByteSeq: + return sscanf(sStr, "%hhu", (uint8_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtByte: + return sscanf(sStr, "%hhd", (int8_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtUShort: + return sscanf(sStr, "%hu", (uint16_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtShort: + return sscanf(sStr, "%hd", (int16_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtUInt: + return sscanf(sStr, "%u", (uint32_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtInt: + return sscanf(sStr, "%d", (int32_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtULong: + return sscanf(sStr, "%Lu", (uint64_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtLong: + return sscanf(sStr, "%Ld", (int64_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtFloat: + return sscanf(sStr, "%f", (float*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtDouble: + return sscanf(sStr, "%lf", (double*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + case vtTime: + return dt_parsetime(sStr, (das_time*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + default: + return das_error(DASERR_VALUE, "Unknown value type code: %d", vt); + } +} + + /* ************************************************************************* */ /* String to Value utilities */ diff --git a/das2/value.h b/das2/value.h index 8b61eea..57a74c9 100644 --- a/das2/value.h +++ b/das2/value.h @@ -1,18 +1,18 @@ /* Copyright (C) 2018 Chris Piker * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ /** @file value.h A generic value type for use in arrays, datums and variables */ @@ -45,12 +45,12 @@ extern "C" { */ typedef struct das_byteseq_t{ - const byte* ptr; + const ubyte* ptr; size_t sz; } das_byteseq; -#define VT_MIN_SIMPLE vtByte +#define VT_MIN_SIMPLE vtUByte #define VT_MAX_SIMPLE vtTime /** Enumeration of types stored in Das Array (DasAry) objects @@ -65,37 +65,46 @@ typedef enum das_val_type_e { /** The basic types */ - /* VT_MIN_SIMPLE = vtByte */ + /* VT_MIN_SIMPLE = vtUByte */ - /** Indicates array values are unsigned 8-bit unsigned integers (bytes) */ - vtByte = 1, + /** Indicates array values are unsigned 8-bit integers (bytes) */ + vtUByte = 1, + + /** Indicates array values are signed 8-bit integers (signed bytes) */ + vtByte = 2; /** Indicates array values are unsigned 16-bit integers (shorts) */ - vtUShort = 2, + vtUShort = 3, /** Indicates array values are signed 16-bit integers (shorts)*/ - vtShort = 3, + vtShort = 4, + /** Indicates array values are unsigned 32-bit integers (uints) */ + vtUint = 5; + /** Indicates array values are signed 32-bit integers (ints) */ - vtInt = 4, + vtInt = 6, - /** Indicates array values are signed 64-bit integers (longs) */ - vtLong = 5, + /** Indicates array values are unsigned 64-bit unsigned integers (ulongs) */ + vtULong = 7, + + /** Indicates array values are unsigned 64-bit integers (longs) */ + vtLong = 8, /** Indicates array values are 32-bit floating point values (floats) */ - vtFloat = 6, + vtFloat = 9, /** Indicates array values are 64-bit floating point values (doubles) */ - vtDouble = 7, + vtDouble = 10, /** Indicates array values are das_time_t structures */ - vtTime = 8, + vtTime = 11, /* VT_MAX_SIMPLE = vtTime */ /* The following type is not used by datums, but by array indexing elements * that track the size and location of child dimensions */ - vtIndex = 9, + vtIndex = 11, /* The following two types are only used by variables and datums * @@ -114,18 +123,41 @@ typedef enum das_val_type_e { /** Indicates datum values are const char* pointers to null terminated * UTF-8 strings */ - vtText = 10, + vtText = 12, /** Value are a vector struct as defined by vector.h */ - vtGeoVec = 11, + vtGeoVec = 13, - /** Indicates values are size_t plus const byte* pairs, no more is + /** Indicates values are size_t plus const ubyte* pairs, no more is * known about the bytes */ - vtByteSeq = 12, + vtByteSeq = 14, } das_val_type; +/** Get a storage value type given the common packet encodings + * + * Storage types are values you can do calculations on. For binary + * encodings, these just represent the type minus any endian considerations + * + * For text types that have an intended use, this returns a suitable binary + * storage type. + * + * @param sEncType The storage type one of: + * byte, ubyte, BEint, BEuint, BEreal, LEint, LEuint, LEreal + * or: + * utf8, none + * + * @param nItemsBytes The number of bytes for each stored item + * + * @param sInterp - Ignored unless the encoding is utf8, otherwise one of + * the values: + * bool, datetime, int, real, string + * */ +DAS_API das_val_type das_vt_store_type( + const char* sEncType, int nItemBytes, const char* sInterp +); + /** Get the rank of a value type * * Most items are scalars (rank 0), but strings and vectors are rank 1 @@ -145,8 +177,26 @@ DAS_API size_t das_vt_size(das_val_type vt); /** Get a text string representation of an element type */ DAS_API const char* das_vt_toStr(das_val_type vt); +/** Convert a text string representation */ +DAS_API das_val_type das_vt_fromStr(const char* sType); + + +/** Get a das value from a null terminated string + * + * This function should not exit, instead erroreous parsing triggers log messages + * + * @returns DAS_OKAY if parsing was successful, an error return code otherwise. + */ +DAS_API DasErrCode das_value_fromStr( + ubyte* pBuf, int uBufLen, das_val_type vt, const char* sStr +); + +/* * Given a string and it's expected interpretation, return a suitable storage type + */ +/* DAS_API das_val_type das_vt_guess_store(const char* sInterp, const char* sValue); */ + /** Comparison functions look like this */ -typedef int (*das_valcmp_func)(const byte*, const byte*); +typedef int (*das_valcmp_func)(const ubyte*, const ubyte*); /** Get the comparison function for two values of this type */ DAS_API das_valcmp_func das_vt_getcmp(das_val_type vt); @@ -167,7 +217,7 @@ DAS_API das_valcmp_func das_vt_getcmp(das_val_type vt); * than B or -2 if A is not comparable to B. */ DAS_API int das_vt_cmpAny( - const byte* pA, das_val_type vtA, const byte* pB, das_val_type vtB + const ubyte* pA, das_val_type vtA, const ubyte* pB, das_val_type vtB ); /* In the future the token ID will come from the lexer, for now just make diff --git a/das2/variable.c b/das2/variable.c index 9b30b08..07f3864 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -124,7 +124,7 @@ bool DasVar_get(const DasVar* pThis, ptrdiff_t* pLoc, das_datum* pDatum) return pThis->get(pThis, pLoc, pDatum); } -bool DasVar_isFill(const DasVar* pThis, const byte* pCheck, das_val_type vt) +bool DasVar_isFill(const DasVar* pThis, const ubyte* pCheck, das_val_type vt) { return pThis->isFill(pThis, pCheck, vt); } @@ -317,7 +317,7 @@ char* _DasVar_prnRange(const DasVar* pThis, char* sBuf, int nLen) * Variable: center | event[i] us2000 | i:0..4483, j:- | k:0..3 vec:tscs(0,2,1) */ char* _DasVar_prnIntr( - const DasVar* pThis, const char* sFrame, byte* pFrmDirs, byte nFrmDirs, + const DasVar* pThis, const char* sFrame, ubyte* pFrmDirs, ubyte nFrmDirs, char* sBuf, int nBufLen ){ /* If I have no internal structure, print nothing */ @@ -336,11 +336,11 @@ char* _DasVar_prnIntr( int nIntrRank = iEnd - iBeg; - // Just return if no hope of enough room + /* Just return if no hope of enough room */ if(nBufLen < (8 + nIntrRank*6 + (nIntrRank-1)*2)) return sBuf; - // Grap the array index letter before swapping around the iteration direction + /* Grap the array index letter before swapping around the iteration direction */ int iLetter = iBeg; if(!g_bFastIdxLast){ int nTmp = iBeg; @@ -482,10 +482,7 @@ bool DasConstant_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) bool DasConstant_isNumeric(const DasVar* pBase) { - return ((pBase->vt == vtFloat ) || (pBase->vt == vtDouble ) || - (pBase->vt == vtInt ) || (pBase->vt == vtLong ) || - (pBase->vt == vtUShort ) || (pBase->vt == vtShort ) || - (pBase->vt == vtTime ) || (pBase->vt == vtByte ) ); + return ((pBase->vt >= VT_MIN_SIMPLE)&&(pBase->vt <= VT_MAX_SIMPLE)); } /* Returns the pointer an the next write point of the string */ @@ -542,7 +539,7 @@ ptrdiff_t DasConstant_lengthIn(const DasVar* pBase, int nIdx , ptrdiff_t* pLoc) } -bool DasConstant_isFill(const DasVar* pBase, const byte* pCheck, das_val_type vt) +bool DasConstant_isFill(const DasVar* pBase, const ubyte* pCheck, das_val_type vt) { return false; } @@ -575,7 +572,7 @@ DasAry* DasConstant_subset( * memory with the fill value, so we give it our constant value as the * fill value. */ DasAry* pAry = new_DasAry( - pThis->sId, pBase->vt, das_vt_size(pThis->datum.vt), (const byte*) &(pThis->datum), + pThis->sId, pBase->vt, das_vt_size(pThis->datum.vt), (const ubyte*) &(pThis->datum), nSliceRank, shape, pBase->units ); @@ -651,12 +648,14 @@ bool DasVarAry_isNumeric(const DasVar* pBase) { /* Put most common ones first for faster checks */ if((pBase->vt == vtFloat ) || (pBase->vt == vtDouble ) || - (pBase->vt == vtInt ) || (pBase->vt == vtLong ) || + (pBase->vt == vtInt ) || (pBase->vt == vtUInt ) || + (pBase->vt == vtLong ) || (pBase->vt == vtULong ) || (pBase->vt == vtUShort ) || (pBase->vt == vtShort ) || - (pBase->vt == vtTime ) ) return true; + (pBase->vt == vtByte) /* signed bytes considered numeric */ + ) return true; - /* All the rest but vtByte are not numeric */ - if(pBase->vt == vtByte){ + /* All the rest but vtUByte are not numeric */ + if(pBase->vt == vtUByte){ const DasVarArray* pThis = (const DasVarArray*) pBase; return ! (DasAry_getUsage(pThis->pAry) & D2ARY_AS_SUBSEQ); } @@ -830,7 +829,7 @@ bool DasVarAry_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) /* If my last index >= first internal, use getIn*/ if(pBase->nIntRank == 0){ - const byte* ptr = DasAry_getAt(pThis->pAry, pBase->vt, pAryLoc); + const ubyte* ptr = DasAry_getAt(pThis->pAry, pBase->vt, pAryLoc); if(pBase->vsize > DATUM_BUF_SZ) return false; assert(pBase->vsize <= DATUM_BUF_SZ); memcpy(pDatum, ptr, pBase->vsize); @@ -840,16 +839,16 @@ bool DasVarAry_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) } else if(pBase->nIntRank == 1){ size_t uCount = 1; - const byte* ptr = DasAry_getIn(pThis->pAry, vtByte, nDim, pAryLoc, &uCount); + const ubyte* ptr = DasAry_getIn(pThis->pAry, vtUByte, nDim, pAryLoc, &uCount); if(ptr == NULL) return false; - if(vtAry == vtByte){ // Make a datum + if(vtAry == vtUByte){ /* Make a datum */ if(pBase->vt == vtText){ pDatum->vt = vtText; pDatum->vsize = das_vt_size(vtText); pDatum->units = pBase->units; - memcpy(pDatum, &ptr, sizeof(const byte*)); + memcpy(pDatum, &ptr, sizeof(const ubyte*)); } else{ das_byteseq bs; @@ -875,10 +874,10 @@ bool DasVarAry_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) return true; } -bool DasVarAry_isFill(const DasVar* pBase, const byte* pCheck, das_val_type vt) +bool DasVarAry_isFill(const DasVar* pBase, const ubyte* pCheck, das_val_type vt) { const DasVarArray* pThis = (const DasVarArray*)pBase; - const byte* pFill = DasAry_getFill(pThis->pAry); + const ubyte* pFill = DasAry_getFill(pThis->pAry); return (das_vt_cmpAny(pFill, pBase->vt, pCheck, vt) == 0); } @@ -959,7 +958,7 @@ DasAry* _DasVarAry_strideSubset( ); size_t uWriteBufLen = 0; - byte* pWriteBuf = DasAry_getBuf(pSlice, pThis->base.vt, DIM0, &uWriteBufLen); + ubyte* pWriteBuf = DasAry_getBuf(pSlice, pThis->base.vt, DIM0, &uWriteBufLen); /* Get the base starting point pointer */ ptrdiff_t base_idx[DASIDX_MAX] = {0}; @@ -971,7 +970,7 @@ DasAry* _DasVarAry_strideSubset( base_idx[iLoc] = pMin[d]; } size_t uRemain = 0; - const byte* pBaseRead = DasAry_getIn( + const ubyte* pBaseRead = DasAry_getIn( pThis->pAry, pThis->base.vt, DasAry_rank(pThis->pAry), base_idx, &uRemain ); if(pBaseRead == NULL){ @@ -1010,8 +1009,8 @@ DasAry* _DasVarAry_strideSubset( /* Stride over the array copying values */ ptrdiff_t idx_cur[DASIDX_MAX]; memcpy(idx_cur, pMin, nVarRank * sizeof(ptrdiff_t)); - const byte* pRead = pBaseRead; - byte* pWrite = pWriteBuf; + const ubyte* pRead = pBaseRead; + ubyte* pWrite = pWriteBuf; /* Copy the data. Unroll the loop up to dimension 4. Unchecked there * are *all* kinds of security errors here: @@ -1202,7 +1201,7 @@ DasAry* _DasVarAry_slowSubset( int nVarRank = pThis->base.nExtRank; das_val_type vtEl = pThis->base.vt; size_t uSzEl = pThis->base.vsize; - const byte* pFill = DasAry_getFill(pThis->pAry); + const ubyte* pFill = DasAry_getFill(pThis->pAry); int nSliceRank = das_rng2shape(nVarRank, pMin, pMax, aSliceShape); @@ -1213,15 +1212,15 @@ DasAry* _DasVarAry_slowSubset( ); size_t uBufSz = 0; - byte* pBase = DasAry_getBuf(pSlice, vtEl, DIM0, &uBufSz); + ubyte* pBase = DasAry_getBuf(pSlice, vtEl, DIM0, &uBufSz); ptrdiff_t var_idx[DASIDX_MAX]; memcpy(var_idx, pMin, nVarRank*sizeof(ptrdiff_t)); ptrdiff_t read_idx[DASIDX_MAX]; /* Right pad for internal indexes */ - const byte* pValue = NULL; + const ubyte* pValue = NULL; int d; - byte* pWrite = pBase; + ubyte* pWrite = pBase; while(var_idx[0] < pMax[0]){ /* Get the real read and the real write locations */ @@ -1319,7 +1318,7 @@ DasAry* DasVarAry_subset( // Combined expression printer for both regular & vector arrays char* _DasVarAry_intrExpress( const DasVar* pBase, char* sBuf, int nLen, unsigned int uExFlags, - const char* sFrame, byte* pDirs, byte nDirs + const char* sFrame, ubyte* pDirs, ubyte nDirs ){ if(nLen < 2) return sBuf; /* No where to write and remain null terminated */ @@ -1448,7 +1447,7 @@ DasErrCode init_DasVarArray( * that allows composite datums such as strings and GeoVec to be stored with * dense packing. * - * vtByte w/string -> vtText and needs one internal index + * vtUByte w/string -> vtText and needs one internal index * vtGeoVec needs one internal index and it's equal to the number of components * It also needs the value type set to the index vector type * vtByteSeq needs one internal index, and it's ragged. @@ -1462,7 +1461,7 @@ DasErrCode init_DasVarArray( /* Make sure that the last index < the first internal for scalar types, and that last index == first internal for rank 1 types */ - if(vtAry == vtByte){ + if(vtAry == vtUByte){ if((pAry->uFlags & D2ARY_AS_STRING) == D2ARY_AS_STRING){ if(nIntRank != 1) return das_error(DASERR_VAR, "Dense text needs an internal rank of 1"); @@ -1472,7 +1471,7 @@ DasErrCode init_DasVarArray( if(nIntRank > 0) pThis->base.vt = vtByteSeq; else - pThis->base.vt = vtByte; + pThis->base.vt = vtUByte; } } else { @@ -1547,7 +1546,7 @@ bool DasVarVecAry_get(const DasVar* pAncestor, ptrdiff_t* pLoc, das_datum* pDm) } size_t uCount = 1; - const byte* ptr = DasAry_getIn( + const ubyte* ptr = DasAry_getIn( pBase->pAry, pThis->tplt.et, nDim, pAryLoc, &uCount ); @@ -1564,7 +1563,7 @@ bool DasVarVecAry_get(const DasVar* pAncestor, ptrdiff_t* pLoc, das_datum* pDm) DasVar* new_DasVarVecAry( DasAry* pAry, int nExtRank, int8_t* pExtMap, int nIntRank, - const char* sFrame, byte nFrameId, byte frameType, byte nDirs, const byte* pDirs + const char* sFrame, ubyte nFrameId, ubyte frameType, ubyte nDirs, const ubyte* pDirs ){ if((sFrame == NULL)||(sFrame[0] == '\0')){ @@ -1590,7 +1589,7 @@ DasVar* new_DasVarVecAry( /* And now our derived class data including the vector template*/ strncpy(pThis->fname, sFrame, DASFRM_NAME_SZ-1); - byte nodata[24] = {0}; + ubyte nodata[24] = {0}; DasErrCode nRet = das_geovec_init(&(pThis->tplt), nodata, nFrameId, frameType, pAncestor->vt, das_vt_size(pAncestor->vt), @@ -1613,11 +1612,11 @@ typedef struct das_var_seq{ int iDep; /* The one and only index I depend on */ char sId[DAS_MAX_ID_BUFSZ]; /* Since we can't just use our array ID */ - byte B[DATUM_BUF_SZ]; /* Intercept */ - byte* pB; + ubyte B[DATUM_BUF_SZ]; /* Intercept */ + ubyte* pB; - byte M[DATUM_BUF_SZ]; /* Slope */ - byte* pM; + ubyte M[DATUM_BUF_SZ]; /* Slope */ + ubyte* pM; } DasVarSeq; @@ -1656,29 +1655,41 @@ bool DasVarSeq_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) * (why have a standard and hide it behind a paywall?) */ switch(pThis->base.vt){ - case vtByte: - *((byte*)pDatum) = *(pThis->pM) * ((byte)u) + *(pThis->pB); + case vtUByte: + *((ubyte*)pDatum) = *(pThis->pM) * ((byte)u) + *(pThis->pB); return true; case vtUShort: *((uint16_t*)pDatum) = *( (uint16_t*)pThis->pM) * ((uint16_t)u) + *( (uint16_t*)pThis->pB); return true; case vtShort: - if(u > 32767){ + if(u > 32767ULL){ das_error(DASERR_VAR, "Range error, max index for vtShort sequence is 32,767"); return false; } *((int16_t*)pDatum) = *( (int16_t*)pThis->pM) * ((int16_t)u) + *( (int16_t*)pThis->pB); return true; + case vtUInt: + if(u > 4294967295LL){ + das_error(DASERR_VAR, "Range error max index for vtInt sequence is 2,147,483,647"); + return false; + } + *((uint32_t*)pDatum) = *( (uint32_t*)pThis->pM) * ((uint32_t)u) + + *( (uint32_t*)pThis->pB); + return true; case vtInt: - if(u > 2147483647){ + if(u > 2147483647LL){ das_error(DASERR_VAR, "Range error max index for vtInt sequence is 2,147,483,647"); return false; } *((int32_t*)pDatum) = *( (int32_t*)pThis->pM) * ((int32_t)u) + *( (int32_t*)pThis->pB); return true; + case vtULong: + *((uint64_t*)pDatum) = *( (uint64_t*)pThis->pM) * ((int64_t)u) + + *( (uint64_t*)pThis->pB); + return true; case vtLong: *((int64_t*)pDatum) = *( (int64_t*)pThis->pM) * ((int64_t)u) + *( (int64_t*)pThis->pB); @@ -1827,7 +1838,7 @@ ptrdiff_t DasVarSeq_lengthIn(const DasVar* pBase, int nIdx, ptrdiff_t* pLoc) } -bool DasVarSeq_isFill(const DasVar* pBase, const byte* pCheck, das_val_type vt) +bool DasVarSeq_isFill(const DasVar* pBase, const ubyte* pCheck, das_val_type vt) { return false; } @@ -1883,10 +1894,10 @@ DasAry* DasVarSeq_subset( for(int d = 0; d < pThis->iDep; ++d) uRepBlk *= (pMax[d] - pMin[d]); - byte value[DATUM_BUF_SZ]; - byte* pVal = value; + ubyte value[DATUM_BUF_SZ]; + ubyte* pVal = value; size_t uTotalLen; /* Used to check */ - byte* pWrite = DasAry_getBuf(pAry, pBase->vt, DIM0, &uTotalLen); + ubyte* pWrite = DasAry_getBuf(pAry, pBase->vt, DIM0, &uTotalLen); if(uTotalLen != uRepBlk * uBlkCount){ das_error(DASERR_VAR, "Logic error in sequence copy"); @@ -1901,7 +1912,7 @@ DasAry* DasVarSeq_subset( uWriteInc = uRepEach * uSzElm; switch(pThis->base.vt){ - case vtByte: + case vtUByte: for(u = uMin; u < uMax; ++u){ /* The Calc */ *pVal = *(pThis->pM) * ((byte)u) + *(pThis->pB); @@ -1924,7 +1935,7 @@ DasAry* DasVarSeq_subset( case vtShort: for(u = uMin; u < uMax; ++u){ - if(u > 32767){ + if(u > 32767UL){ das_error(DASERR_VAR, "Range error, max index for vtShort sequence is 32,767"); dec_DasAry(pAry); return false; @@ -1937,9 +1948,23 @@ DasAry* DasVarSeq_subset( } break; + case vtUInt: + for(u = uMin; u < uMax; ++u){ + if(u > 4294967295UL){ + das_error(DASERR_VAR, "Range error max index for vtInt sequence is 2,147,483,647"); + dec_DasAry(pAry); + return false; + } + /* The Calc */ + *((int32_t*)pVal) = *( (uint32_t*)pThis->pM) * ((uint32_t)u) + + *( (uint32_t*)pThis->pB); + das_memset(pWrite, pVal, uSzElm, uRepEach); + pWrite += uWriteInc; + } + break; case vtInt: for(u = uMin; u < uMax; ++u){ - if(u > 2147483647){ + if(u > 2147483647UL){ das_error(DASERR_VAR, "Range error max index for vtInt sequence is 2,147,483,647"); dec_DasAry(pAry); return false; @@ -1951,7 +1976,15 @@ DasAry* DasVarSeq_subset( pWrite += uWriteInc; } break; - + case vtULong: + for(u = uMin; u < uMax; ++u){ + /* The Calc */ + *((uint64_t*)pVal) = *( (uint64_t*)pThis->pM) * ((uint64_t)u) + + *( (uint64_t*)pThis->pB); + das_memset(pWrite, pVal, uSzElm, uRepEach); + pWrite += uWriteInc; + } + break; case vtLong: for(u = uMin; u < uMax; ++u){ /* The Calc */ @@ -2069,8 +2102,8 @@ DasVar* new_DasVarSeq( double rScale; switch(vt){ - case vtByte: - *(pThis->pB) = *((byte*)pMin); *(pThis->pM) = *((byte*)pInterval); + case vtUByte: + *(pThis->pB) = *((ubyte*)pMin); *(pThis->pM) = *((ubyte*)pInterval); break; case vtUShort: *((uint16_t*)(pThis->pB)) = *((uint16_t*)pMin); @@ -2080,10 +2113,18 @@ DasVar* new_DasVarSeq( *((int16_t*)(pThis->pB)) = *((int16_t*)pMin); *((int16_t*)(pThis->pM)) = *((int16_t*)pInterval); break; + case vtUInt: + *((uint32_t*)(pThis->pB)) = *((uint32_t*)pMin); + *((uint32_t*)(pThis->pM)) = *((uint32_t*)pInterval); + break; case vtInt: *((int32_t*)(pThis->pB)) = *((int32_t*)pMin); *((int32_t*)(pThis->pM)) = *((int32_t*)pInterval); break; + case vtULong: + *((uint64_t*)(pThis->pB)) = *((uint64_t*)pMin); + *((uint64_t*)(pThis->pM)) = *((uint64_t*)pInterval); + break; case vtLong: *((int64_t*)(pThis->pB)) = *((int64_t*)pMin); *((int64_t*)(pThis->pM)) = *((int64_t*)pInterval); @@ -2169,12 +2210,14 @@ bool DasVarBinary_isNumeric(const DasVar* pBase) { /* Put most common ones first for faster checks */ if((pBase->vt == vtFloat ) || (pBase->vt == vtDouble ) || - (pBase->vt == vtInt ) || (pBase->vt == vtLong ) || + (pBase->vt == vtInt ) || (pBase->vt == vtUInt ) || + (pBase->vt == vtLong ) || (pBase->vt == vtULong ) || (pBase->vt == vtUShort ) || (pBase->vt == vtShort ) || - (pBase->vt == vtTime ) ) return true; + (pBase->vt == vtByte) /* That's a signed byte, usually numeric */ + ) return true; - /* All the rest but vtByte are not numeric */ - if(pBase->vt != vtByte) return false; + /* All the rest but vtUByte are not numeric */ + if(pBase->vt != vtUByte) return false; const DasVarBinary* pThis = (const DasVarBinary*) pBase; @@ -2335,10 +2378,13 @@ bool DasVarBinary_get(const DasVar* pBase, ptrdiff_t* pIdx, das_datum* pDatum) if(pThis->rRightScale != 1.0){ switch(dmRight.vt){ - case vtByte: dTmp = *((uint8_t*)&dmRight); break; - case vtShort: dTmp = *((int16_t*)&dmRight); break; + case vtUByte: dTmp = *((uint8_t*)&dmRight); break; + case vtByte: dTmp = *((int8_t*)&dmRight); break; case vtUShort: dTmp = *((uint16_t*)&dmRight); break; + case vtShort: dTmp = *((int16_t*)&dmRight); break; + case vtUInt: dTmp = *((uint*)&dmRight); break; case vtInt: dTmp = *((int*)&dmRight); break; + case vtULong: dTmp = *((ulong*)&dmRight); break; case vtLong: dTmp = *((long*)&dmRight); break; case vtFloat: dTmp = *((float*)&dmRight); break; case vtDouble: dTmp = *((double*)&dmRight); break; @@ -2359,7 +2405,8 @@ bool DasVarBinary_get(const DasVar* pBase, ptrdiff_t* pIdx, das_datum* pDatum) /* Float promotions and calculation */ case vtFloat: switch(pDatum->vt){ - case vtByte: fTmp = *((uint8_t*)pDatum); *((float*)pDatum) = fTmp; break; + case vtUByte: fTmp = *((uint8_t*)pDatum); *((float*)pDatum) = fTmp; break; + case vtByte: fTmp = *((int8_t*)pDatum); *((float*)pDatum) = fTmp; break; case vtShort: fTmp = *((int16_t*)pDatum); *((float*)pDatum) = fTmp; break; case vtUShort: fTmp = *((uint16_t*)pDatum); *((float*)pDatum) = fTmp; break; case vtFloat: break; /* nothing to do */ @@ -2369,7 +2416,8 @@ bool DasVarBinary_get(const DasVar* pBase, ptrdiff_t* pIdx, das_datum* pDatum) } switch(dmRight.vt){ - case vtByte: fTmp = *((uint8_t*)&dmRight); *((float*)&dmRight) = fTmp; break; + case vtUByte: fTmp = *((uint8_t*)&dmRight); *((float*)&dmRight) = fTmp; break; + case vtByte: fTmp = *((int8_t*)&dmRight); *((float*)&dmRight) = fTmp; break; case vtShort: fTmp = *((int16_t*)&dmRight); *((float*)&dmRight) = fTmp; break; case vtUShort: fTmp = *((uint16_t*)&dmRight); *((float*)&dmRight) = fTmp; break; case vtFloat: break; /* nothing to do */ @@ -2396,12 +2444,15 @@ bool DasVarBinary_get(const DasVar* pBase, ptrdiff_t* pIdx, das_datum* pDatum) /* Promote left hand side to doubles... */ switch(pDatum->vt){ - case vtByte: dTmp = *((uint8_t*)pDatum); *((double*)pDatum) = dTmp; break; - case vtShort: dTmp = *((int16_t*)pDatum); *((double*)pDatum) = dTmp; break; - case vtUShort: dTmp = *((uint16_t*)pDatum); *((double*)pDatum) = dTmp; break; - case vtInt: dTmp = *((int32_t*)pDatum); *((double*)pDatum) = dTmp; break; - case vtLong: dTmp = *((int64_t*)pDatum); *((double*)pDatum) = dTmp; break; - case vtFloat: dTmp = *((float*)pDatum); *((double*)pDatum) = dTmp; break; + case vtUByte: dTmp = *((uint8_t*)pDatum); *((double*)pDatum) = dTmp; break; + case vtByte: dTmp = *((int8_t*)pDatum); *((double*)pDatum) = dTmp; break; + case vtUShort: dTmp = *((uint16_t*)pDatum); *((double*)pDatum) = dTmp; break; + case vtShort: dTmp = *((int16_t*)pDatum); *((double*)pDatum) = dTmp; break; + case vtUInt: dTmp = *((uint32_t*)pDatum); *((double*)pDatum) = dTmp; break; + case vtInt: dTmp = *((int32_t*)pDatum); *((double*)pDatum) = dTmp; break; + case vtULong: dTmp = *((uint64_t*)pDatum); *((double*)pDatum) = dTmp; break; + case vtLong: dTmp = *((int64_t*)pDatum); *((double*)pDatum) = dTmp; break; + case vtFloat: dTmp = *((float*)pDatum); *((double*)pDatum) = dTmp; break; case vtDouble: break; /* Nothing to do */ case vtTime: /* The only way the left input is a time and my output is a double is @@ -2424,10 +2475,13 @@ bool DasVarBinary_get(const DasVar* pBase, ptrdiff_t* pIdx, das_datum* pDatum) /* Promote right hand side to doubles... */ switch(dmRight.vt){ - case vtByte: dTmp = *((uint8_t*)&dmRight); *((double*)&dmRight) = dTmp; break; + case vtUByte: dTmp = *((uint8_t*)&dmRight); *((double*)&dmRight) = dTmp; break; + case vtByte: dTmp = *((int8_t*)&dmRight); *((double*)&dmRight) = dTmp; break; + case vtUShort: dTmp = *((uint16_t*)&dmRight); *((double*)&dmRight) = dTmp; break; case vtShort: dTmp = *((int16_t*)&dmRight); *((double*)&dmRight) = dTmp; break; - case vtUShort: dTmp = *((uint16_t*)&dmRight); *((double*)&dmRight) = dTmp; break; + case vtUInt: dTmp = *((uint32_t*)&dmRight); *((double*)&dmRight) = dTmp; break; case vtInt: dTmp = *((int32_t*)&dmRight); *((double*)&dmRight) = dTmp; break; + case vtULong: dTmp = *((uint64_t*)&dmRight); *((double*)&dmRight) = dTmp; break; case vtLong: dTmp = *((int64_t*)&dmRight); *((double*)&dmRight) = dTmp; break; case vtFloat: dTmp = *((float*)&dmRight); *((double*)&dmRight) = dTmp; break; case vtDouble: break; /* Nothing to do */ @@ -2460,13 +2514,16 @@ bool DasVarBinary_get(const DasVar* pBase, ptrdiff_t* pIdx, das_datum* pDatum) /* Promote right hand side to double */ switch(dmRight.vt){ - case vtByte: dTmp = *((uint8_t*)&dmRight); break; - case vtShort: dTmp = *((int16_t*)&dmRight); break; - case vtUShort: dTmp = *((uint16_t*)&dmRight);break; - case vtInt: dTmp = *((int32_t*)&dmRight); break; - case vtLong: dTmp = *((int64_t*)&dmRight); break; - case vtFloat: dTmp = *((float*)&dmRight); break; - case vtDouble: dTmp = *((double*)&dmRight); break; + case vtUByte: dTmp = *((uint8_t*)&dmRight); break; + case vtByte: dTmp = *((int8_t*)&dmRight); break; + case vtUShort: dTmp = *((uint16_t*)&dmRight); break; + case vtShort: dTmp = *((int16_t*)&dmRight); break; + case vtUInt: dTmp = *((uint32_t*)&dmRight); break; + case vtInt: dTmp = *((int32_t*)&dmRight); break; + case vtULong: dTmp = *((uint64_t*)&dmRight); break; + case vtLong: dTmp = *((int64_t*)&dmRight); break; + case vtFloat: dTmp = *((float*)&dmRight); break; + case vtDouble: dTmp = *((double*)&dmRight); break; default: das_error(DASERR_ASSERT, "Logic mismatch between das_vt_merge and DasVarBinary_get"); return false; @@ -2526,7 +2583,7 @@ DasAry* DasVarBinary_subset( memcpy(pIdx, pMin, pBase->nExtRank * sizeof(ptrdiff_t)); size_t uTotCount; - byte* pWrite = DasAry_getBuf(pAry, pBase->vt, DIM0, &uTotCount); + ubyte* pWrite = DasAry_getBuf(pAry, pBase->vt, DIM0, &uTotCount); das_datum dm; size_t vSzChk = DasAry_valSize(pAry); @@ -2564,7 +2621,7 @@ DasAry* DasVarBinary_subset( } /* Fill propogates, if either item is fill, the result is fill */ -bool DasVarBinary_isFill(const DasVar* pBase, const byte* pCheck, das_val_type vt) +bool DasVarBinary_isFill(const DasVar* pBase, const ubyte* pCheck, das_val_type vt) { DasVarBinary* pThis = (DasVarBinary*)pBase; diff --git a/das2/variable.h b/das2/variable.h index 4ed1f6a..54591f1 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -246,7 +246,7 @@ DAS_API void das_varindex_prndir(bool bFastLast); */ typedef struct das_variable{ enum var_type vartype; /* CONST, ARRAY, SEQUENCE, UNARY_OP, BINARY_OP ... */ - das_val_type vt; /* vtByte, vtText, vtTime, vtVector ... */ + das_val_type vt; /* vtUByte, vtText, vtTime, vtVector ... */ size_t vsize; /* The size in bytes of each value in the variable * for non-scalar items, this yields the unusual value @@ -309,7 +309,7 @@ typedef struct das_variable{ ); bool (*isFill)( - const struct das_variable* pThis, const byte* pCheck, das_val_type vt + const struct das_variable* pThis, const ubyte* pCheck, das_val_type vt ); /* Does this variable provide simple numbers */ @@ -329,6 +329,9 @@ typedef struct das_variable{ * which may trigger further deletions */ int (*decRef)(struct das_variable* pThis); + + + /** Encodes the header */ } DasVar; @@ -569,8 +572,8 @@ DAS_API DasVar* new_DasVarArray(DasAry* pAry, int nExtRank, int8_t* pMap, int nI */ DAS_API DasVar* new_DasVarVecAry( DasAry* pAry, int nExtRank, int8_t* pMap, int nIntRank, - const char* sFrame, byte nFrameId, byte frametype, byte nDirs, - const byte* pDir + const char* sFrame, ubyte nFrameId, ubyte frametype, ubyte nDirs, + const ubyte* pDir ); /** Increment the reference count on a variable */ @@ -738,8 +741,8 @@ DAS_API char* DasVar_toStr(const DasVar* pThis, char* sBuf, int nLen); * * if the array value type is: * - * vtByte - + * vtUByte + * * then values from this variable are considered to be convertable to * doubles if the underlying DasAry doesn't indicate that the values are * actually strings by way of the DasAry_getUsage() function. @@ -797,7 +800,7 @@ DAS_API bool DasVar_get( * @returns true if this is a fill value, false otherwise. */ DAS_API bool DasVar_isFill( - const DasVar* pThis, const byte* pCheck, das_val_type vt + const DasVar* pThis, const ubyte* pCheck, das_val_type vt ); /** Is this a simple variable or more than one variable combinded via operators? diff --git a/das2/vector.c b/das2/vector.c index 4512e79..cd01a50 100644 --- a/das2/vector.c +++ b/das2/vector.c @@ -22,8 +22,8 @@ DasErrCode das_geovec_init( - das_geovec* pVec, const byte* pData, byte frame, byte ftype, - byte et, byte esize, byte ncomp, const byte* pDirs + das_geovec* pVec, const ubyte* pData, ubyte frame, ubyte ftype, + ubyte et, ubyte esize, ubyte ncomp, const ubyte* pDirs ){ pVec->frame = frame; @@ -34,35 +34,33 @@ DasErrCode das_geovec_init( if((ncomp < 1)||(ncomp > 3)) return das_error(DASERR_VEC, "Geometric vectors must have 1 to 3 components"); - // Set the data + /* Set the data */ switch(et){ case vtByte: + case vtUByte: for(int i = 0; (i < ncomp)&&(i<3); ++i){ - ((byte*)(pVec->comp))[i] = pData[i]; + ((ubyte*)(pVec->comp))[i] = pData[i]; pVec->dirs[i] = pDirs[i]; } break; + case vtShort: case vtUShort: for(int i = 0; (i < ncomp)&&(i<3); ++i){ ((uint16_t*)(pVec->comp))[i] = ((uint16_t*)pData)[i]; pVec->dirs[i] = pDirs[i]; } break; - case vtShort: - for(int i = 0; (i < ncomp)&&(i<3); ++i){ - ((int16_t*)(pVec->comp))[i] = ((int16_t*)pData)[i]; - pVec->dirs[i] = pDirs[i]; - } - break; + case vtUint: case vtInt: for(int i = 0; (i < ncomp)&&(i<3); ++i){ - ((int32_t*)(pVec->comp))[i] = ((int32_t*)pData)[i]; + ((uint32_t*)(pVec->comp))[i] = ((uint32_t*)pData)[i]; pVec->dirs[i] = pDirs[i]; } break; + case vtULong: case vtLong: for(int i = 0; (i < ncomp)&&(i<3); ++i){ - ((int64_t*)(pVec->comp))[i] = ((int64_t*)pData)[i]; + ((uint64_t*)(pVec->comp))[i] = ((uint64_t*)pData)[i]; pVec->dirs[i] = pDirs[i]; } break; diff --git a/das2/vector.h b/das2/vector.h index b740735..9f7d437 100644 --- a/das2/vector.h +++ b/das2/vector.h @@ -38,28 +38,28 @@ typedef struct das_geovec_t{ double comp[3]; /* The ID of the vector frame, or 0 if unknown */ - byte frame; + ubyte frame; /* Frame type copied from Frame Descrptor */ - byte ftype; + ubyte ftype; /* the element value type, taken from das_val_type */ - byte et; + ubyte et; /* the size of each element, in bytes, copied in from das_vt_size */ - byte esize; + ubyte esize; /* Number of valid components */ - byte ncomp; + ubyte ncomp; /* Direction for each component, storred in nibbles */ - byte dirs[3]; + ubyte dirs[3]; } das_geovec; DasErrCode das_geovec_init( - das_geovec* pVec, const byte* pData, byte frame, byte ftype, - byte et, byte esize, byte ncomp, const byte* pDirs + das_geovec* pVec, const ubyte* pData, ubyte frame, ubyte ftype, + ubyte et, ubyte esize, ubyte ncomp, const ubyte* pDirs ); #define das_geovec_eltype(p) (p->vt & 0x0F) @@ -69,4 +69,4 @@ DasErrCode das_geovec_init( } #endif -#endif /* _vector_h_ */ \ No newline at end of file +#endif /* _vector_h_ */ diff --git a/schema/das-basic-doc-ns-v3.0.xsd b/schema/das-basic-doc-ns-v3.0.xsd new file mode 100644 index 0000000..679af26 --- /dev/null +++ b/schema/das-basic-doc-ns-v3.0.xsd @@ -0,0 +1,626 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/schema/das-basic-stream-ns-v3.0.xsd b/schema/das-basic-stream-ns-v3.0.xsd new file mode 100644 index 0000000..e13ae53 --- /dev/null +++ b/schema/das-basic-stream-ns-v3.0.xsd @@ -0,0 +1,593 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/schema/das-basic-stream-v2.2.xsd b/schema/das-basic-stream-v2.2.xsd new file mode 100644 index 0000000..035e670 --- /dev/null +++ b/schema/das-basic-stream-v2.2.xsd @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/schema/das-basic-stream-v3.0.xsd b/schema/das-basic-stream-v3.0.xsd new file mode 100644 index 0000000..5d515ce --- /dev/null +++ b/schema/das-basic-stream-v3.0.xsd @@ -0,0 +1,649 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/TestArray.c b/test/TestArray.c index a58df70..fa06496 100644 --- a/test/TestArray.c +++ b/test/TestArray.c @@ -501,7 +501,7 @@ int main(int argc, char** argv) /* Fully ragged array test, saving UTF-8 text */ int iPg = 0, nLine = 0, lLinesPerPg[4] = {4,7,3,6}; - DasAry* pBytes = new_DasAry("text", vtByte, 0, NULL, RANK_3(0,0,0), UNIT_DIMENSIONLESS); + DasAry* pBytes = new_DasAry("text", vtUByte, 0, NULL, RANK_3(0,0,0), UNIT_DIMENSIONLESS); /* Das2 arrays can store cooperative flags, these do not change the * array API but do flag how the array should be used. Here we are saying diff --git a/test/TestVariable.c b/test/TestVariable.c index 940d1e7..2f43abc 100644 --- a/test/TestVariable.c +++ b/test/TestVariable.c @@ -6150,7 +6150,7 @@ int main(int argc, char** argv) /* Test text variables */ fprintf(stderr, "\nTest10: String variables\n" ); - DasAry* aEvents = new_DasAry("events", vtByte, 0, NULL, RANK_2(0,0), NULL); + DasAry* aEvents = new_DasAry("events", vtUByte, 0, NULL, RANK_2(0,0), NULL); DasAry_setUsage(aEvents, D2ARY_AS_STRING); DasVar* vEvents = new_DasVarArray(aEvents, VEC_1(0)); diff --git a/test/ex12_sounder_xyz.d3t b/test/ex12_sounder_xyz.d3t index 6eee3b7..8ed4922 100644 --- a/test/ex12_sounder_xyz.d3t +++ b/test/ex12_sounder_xyz.d3t @@ -7,7 +7,7 @@

SCET %{RANGE}

- +
@@ -17,11 +17,11 @@

cΔt/2, Apparent altitude (km)

- + - + @@ -32,28 +32,28 @@

Frequency (MHz)

- + - 1.09400e-01; 1.20500e-01; 1.31200e-01; 1.42300e-01; 1.53000e-01; 1.75200e-01; 1.85900e-01; 1.97000e-01; - 2.07600e-01; 2.18800e-01; 2.29900e-01; 2.40500e-01; 2.51700e-01; 2.73400e-01; 2.84600e-01; 2.95200e-01; - 3.06300e-01; 3.17000e-01; 3.28100e-01; 3.39200e-01; 3.49900e-01; 3.61000e-01; 3.71700e-01; 3.82800e-01; - 3.93900e-01; 4.04600e-01; 4.15700e-01; 4.26400e-01; 4.37500e-01; 4.48600e-01; 4.59300e-01; 4.70400e-01; - 4.81100e-01; 4.92200e-01; 5.03300e-01; 5.14000e-01; 5.25100e-01; 5.35800e-01; 5.46900e-01; 5.58000e-01; - 5.68700e-01; 5.79800e-01; 6.01600e-01; 6.23400e-01; 6.45200e-01; 6.67400e-01; 6.89200e-01; 7.10900e-01; - 7.32700e-01; 7.54500e-01; 7.76300e-01; 8.08400e-01; 8.20300e-01; 8.42100e-01; 8.63900e-01; 8.85700e-01; - 9.07900e-01; 9.29700e-01; 9.51500e-01; 9.73300e-01; 9.95100e-01; 1.01730e+00; 1.03910e+00; 1.08270e+00; - 1.10440e+00; 1.12670e+00; 1.14850e+00; 1.17020e+00; 1.20230e+00; 1.21380e+00; 1.23600e+00; 1.25780e+00; - 1.27960e+00; 1.32320e+00; 1.34540e+00; 1.36720e+00; 1.38900e+00; 1.41080e+00; 1.43260e+00; 1.45480e+00; - 1.47660e+00; 1.49840e+00; 1.52020e+00; 1.54200e+00; 1.56420e+00; 1.58600e+00; 1.60780e+00; 1.62950e+00; - 1.65130e+00; 1.67350e+00; 1.71710e+00; 1.76070e+00; 1.80470e+00; 1.84830e+00; 1.89230e+00; 1.93590e+00; - 1.97950e+00; 2.02350e+00; 2.06700e+00; 2.11060e+00; 2.15460e+00; 2.19820e+00; 2.24220e+00; 2.28580e+00; - 2.32940e+00; 2.37340e+00; 2.41700e+00; 2.46100e+00; 2.50460e+00; 2.54810e+00; 2.59210e+00; 2.63570e+00; - 2.67970e+00; 2.72330e+00; 2.76690e+00; 2.81090e+00; 2.85450e+00; 2.89850e+00; 2.94210e+00; 2.98560e+00; - 3.02960e+00; 3.07320e+00; 3.11720e+00; 3.16080e+00; 3.20440e+00; 3.24840e+00; 3.29200e+00; 3.33600e+00; - 3.37960e+00; 3.42310e+00; 3.46720e+00; 3.51070e+00; 3.55430e+00; 3.59830e+00; 3.64190e+00; 3.68590e+00; - 3.72950e+00; 3.77310e+00; 3.81710e+00; 3.86070e+00; 3.90470e+00; 3.99180e+00; 4.07940e+00; 4.16700e+00; - 4.25460e+00; 4.34220e+00; 4.42930e+00; 4.51690e+00; 4.60450e+00; 4.69210e+00; 4.77970e+00; 4.86680e+00; - 4.95440e+00; 5.04200e+00; 5.12960e+00; 5.21680e+00; 5.30430e+00; 5.39190e+00; 5.47950e+00; 5.50130e+00 + 1.09400e-01 1.20500e-01 1.31200e-01 1.42300e-01 1.53000e-01 1.75200e-01 1.85900e-01 1.97000e-01 + 2.07600e-01 2.18800e-01 2.29900e-01 2.40500e-01 2.51700e-01 2.73400e-01 2.84600e-01 2.95200e-01 + 3.06300e-01 3.17000e-01 3.28100e-01 3.39200e-01 3.49900e-01 3.61000e-01 3.71700e-01 3.82800e-01 + 3.93900e-01 4.04600e-01 4.15700e-01 4.26400e-01 4.37500e-01 4.48600e-01 4.59300e-01 4.70400e-01 + 4.81100e-01 4.92200e-01 5.03300e-01 5.14000e-01 5.25100e-01 5.35800e-01 5.46900e-01 5.58000e-01 + 5.68700e-01 5.79800e-01 6.01600e-01 6.23400e-01 6.45200e-01 6.67400e-01 6.89200e-01 7.10900e-01 + 7.32700e-01 7.54500e-01 7.76300e-01 8.08400e-01 8.20300e-01 8.42100e-01 8.63900e-01 8.85700e-01 + 9.07900e-01 9.29700e-01 9.51500e-01 9.73300e-01 9.95100e-01 1.01730e+00 1.03910e+00 1.08270e+00 + 1.10440e+00 1.12670e+00 1.14850e+00 1.17020e+00 1.20230e+00 1.21380e+00 1.23600e+00 1.25780e+00 + 1.27960e+00 1.32320e+00 1.34540e+00 1.36720e+00 1.38900e+00 1.41080e+00 1.43260e+00 1.45480e+00 + 1.47660e+00 1.49840e+00 1.52020e+00 1.54200e+00 1.56420e+00 1.58600e+00 1.60780e+00 1.62950e+00 + 1.65130e+00 1.67350e+00 1.71710e+00 1.76070e+00 1.80470e+00 1.84830e+00 1.89230e+00 1.93590e+00 + 1.97950e+00 2.02350e+00 2.06700e+00 2.11060e+00 2.15460e+00 2.19820e+00 2.24220e+00 2.28580e+00 + 2.32940e+00 2.37340e+00 2.41700e+00 2.46100e+00 2.50460e+00 2.54810e+00 2.59210e+00 2.63570e+00 + 2.67970e+00 2.72330e+00 2.76690e+00 2.81090e+00 2.85450e+00 2.89850e+00 2.94210e+00 2.98560e+00 + 3.02960e+00 3.07320e+00 3.11720e+00 3.16080e+00 3.20440e+00 3.24840e+00 3.29200e+00 3.33600e+00 + 3.37960e+00 3.42310e+00 3.46720e+00 3.51070e+00 3.55430e+00 3.59830e+00 3.64190e+00 3.68590e+00 + 3.72950e+00 3.77310e+00 3.81710e+00 3.86070e+00 3.90470e+00 3.99180e+00 4.07940e+00 4.16700e+00 + 4.25460e+00 4.34220e+00 4.42930e+00 4.51690e+00 4.60450e+00 4.69210e+00 4.77970e+00 4.86680e+00 + 4.95440e+00 5.04200e+00 5.12960e+00 5.21680e+00 5.30430e+00 5.39190e+00 5.47950e+00 5.50130e+00 @@ -62,7 +62,7 @@

Spectral Density (V!a2!nm!a-2!nHz!a-1!n)

- + diff --git a/test/ex16_mag_grid_doc.d3x b/test/ex16_mag_grid_doc.d3x index c441942..9efd4df 100644 --- a/test/ex16_mag_grid_doc.d3x +++ b/test/ex16_mag_grid_doc.d3x @@ -47,7 +47,7 @@ is a movie. A plotter could put a time slider below a 3-D cube plot to allow for scrolling in time --> - + @@ -55,7 +55,7 @@ - + 1;1;2;1;1;2;2;2 @@ -67,7 +67,7 @@

Bx_cal;By_cal;Bz_cal

- + @@ -87,7 +87,7 @@

- + diff --git a/test/sizeof.c b/test/sizeof.c index f356f9c..77b4a2d 100644 --- a/test/sizeof.c +++ b/test/sizeof.c @@ -3,7 +3,7 @@ #include #include -typedef uint8_t byte; +typedef uint8_t ubyte; typedef uint16_t ushort; typedef struct das_time_new_t{ @@ -69,16 +69,16 @@ typedef struct das_time_t{ /* typedef struct quantity_s { - byte value[32]; / * 32 bytes * / + ubyte value[32]; / * 32 bytes * / ushort qinfo[4]; / * 8 bytes (40) * / void* units; / * 4 or 8 bytes (44, 48) * / } quantity; */ typedef struct datum_t { - byte bytes[32]; /* 32 bytes of space */ - byte vt; - byte vsize; + ubyte bytes[32]; /* 32 bytes of space */ + ubyte vt; + ubyte vsize; const char* units; } das_datum; @@ -88,22 +88,22 @@ typedef struct das_vector_t{ double comp[3]; /* The ID of the vector frame, or 0 if unknown */ - byte frame; + ubyte frame; /* Frame type copied from Frame Descrptor */ - byte ft; + ubyte ft; /* the element type, taken from das_val_type */ - byte et; + ubyte et; /* the size of each elemnt, in bytes, copied from das_vt_size */ - byte elsz; + ubyte elsz; /* Number of valid components */ - byte ncomp; + ubyte ncomp; /* Direction for each component */ - byte dirs[3]; + ubyte dirs[3]; } das_vector; @@ -125,4 +125,4 @@ int main(int argc, char** argv) printf("sizeof(das_time) = %zu\n", sizeof(das_time)); printf("sizeof(das_time) = %zu\n", sizeof(das_time_new)); return 0; -} \ No newline at end of file +} From 8542616191bd19b329a7b74ef61b0c7985325f56 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Wed, 14 Feb 2024 16:16:55 -0600 Subject: [PATCH 13/40] Draft das3 parser builds --- buildfiles/Linux.mak | 10 +- das2/array.h | 2 +- das2/{aryenc.c => codec.c} | 198 +++++++++++++++++--------------- das2/{aryenc.h => codec.h} | 29 ++--- das2/core.h | 4 +- das2/dataset.c | 74 +++++++++--- das2/dataset.h | 44 +++++-- das2/defs.h | 8 ++ das2/dimension.c | 10 +- das2/io.c | 15 ++- das2/property.c | 2 +- das2/serial.c | 229 +++++++++++++++++++------------------ das2/serial.h | 3 +- das2/stream.c | 12 +- das2/value.c | 43 ++++--- das2/value.h | 37 +++--- das2/variable.c | 18 +-- das2/variable.h | 11 +- das2/vector.c | 2 +- test/TestArray.c | 24 ++-- test/TestVariable.c | 18 +-- 21 files changed, 467 insertions(+), 326 deletions(-) rename das2/{aryenc.c => codec.c} (70%) rename das2/{aryenc.h => codec.h} (87%) diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index f9bb456..f39bf30 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -9,16 +9,16 @@ export MD5SUM TARG=libdas3.0 -SRCS:=das1.c array.c buffer.c builder.c cli.c credentials.c dataset.c datum.c \ -descriptor.c dft.c dimension.c dsdf.c encoding.c frame.c http.c io.c json.c \ -log.c node.c oob.c operator.c packet.c plane.c processor.c property.c send.c \ -stream.c time.c tt2000.c units.c utf8.c util.c value.c variable.c vector.c \ +SRCS:=das1.c array.c buffer.c builder.c cli.c codec.c credentials.c dataset.c \ +datum.c descriptor.c dft.c dimension.c dsdf.c encoding.c frame.c http.c io.c json.c \ +log.c node.c oob.c operator.c packet.c plane.c processor.c property.c serial.c \ +send.c stream.c time.c tt2000.c units.c utf8.c util.c value.c variable.c vector.c HDRS:=defs.h time.h das1.h util.h log.h buffer.h utf8.h value.h units.h \ tt2000.h operator.h datum.h frame.h array.h encoding.h variable.h descriptor.h \ dimension.h dataset.h plane.h packet.h stream.h processor.h property.h oob.h \ io.h builder.h dsdf.h credentials.h http.h dft.h json.h node.h cli.h send.h \ - vector.h core.h + vector.h serial.h codec.h core.h ifeq ($(SPICE),yes) SRCS:=$(SRCS) spice.c diff --git a/das2/array.h b/das2/array.h index 527f953..09a036d 100644 --- a/das2/array.h +++ b/das2/array.h @@ -1008,7 +1008,7 @@ DAS_API size_t DasAry_qubeIn(DasAry* pThis, int iRecDim); * * @memberof DasAry */ -DAS_API byte* DasAry_append(DasAry* pThis, const ubyte* pVals, size_t uCount); +DAS_API ubyte* DasAry_append(DasAry* pThis, const ubyte* pVals, size_t uCount); /** Mark a ragged dimension as finished * diff --git a/das2/aryenc.c b/das2/codec.c similarity index 70% rename from das2/aryenc.c rename to das2/codec.c index 2586c98..7fc9e00 100644 --- a/das2/aryenc.c +++ b/das2/codec.c @@ -15,13 +15,18 @@ * version 2.1 along with das2C; if not, see . */ - #define _POSIX_C_SOURCE 200112L +#define _POSIX_C_SOURCE 200112L -#include "aryenc.h" +#include +#include +#include + +#include "codec.h" #include "value.h" +#include "log.h" /* Operations flags */ -#define DASENC_VALID 0x0001 /* If not 1, not a valid encoder */ +/* (hdr) DASENC_VALID 0x0001 / * If not 1, not a valid encoder */ #define DASENC_SWAP 0x0002 /* If set bytes must be swapped prior to IO */ #define DASENC_CAST 0x0004 /* If set bytes must be transformed prior to IO */ @@ -36,11 +41,11 @@ #define ENCODER_SETUP_ERROR "Logic error in encoder setup" /* Perform various checks to see if this is even possible */ -DasErrCode DasAryEnc_init( - DasAryEnc* pThis, DasAry* pAry, const char* sSemantic, const char* sEncType, +DasErrCode DasCodec_init( + DasCodec* pThis, DasAry* pAry, const char* sSemantic, const char* sEncType, uint16_t uSzEach, ubyte cSep, das_units epoch ){ - memset(pThis, 0, sizeof(DasAryEnc)); + memset(pThis, 0, sizeof(DasCodec)); pThis->cSep = cSep; pThis->pAry = pAry; assert(pAry != NULL); @@ -48,7 +53,7 @@ DasErrCode DasAryEnc_init( /* Don't let the array delete itself out from under us*/ inc_DasAry(pThis->pAry); - pThis->vtAry = DasAry_valType( pThis->vtAry ); /* Copy in the value type of the given array */ + pThis->vtAry = DasAry_valType( pThis->pAry ); /* Copy in the value type of the given array */ ptrdiff_t aShape[DASIDX_MAX] = {0}; int nRank = DasAry_shape(pThis->pAry, aShape); @@ -122,12 +127,12 @@ DasErrCode DasAryEnc_init( } bIntegral = true; } - else if(strcmp(sEncTyp, "byte") == 0){ + else if(strcmp(sEncType, "byte") == 0){ if(uSzEach != 1) goto UNSUPPORTED; pThis->vtBuf = vtByte; bIntegral = true; } - else if(strcmp(sEncTyp, "ubyte") == 0){ + else if(strcmp(sEncType, "ubyte") == 0){ if(uSzEach != 1) goto UNSUPPORTED; pThis->vtBuf = vtUByte; bIntegral = true; @@ -140,14 +145,14 @@ DasErrCode DasAryEnc_init( /* If the array value type is floating point then it must and the buffer type is integer, then it must be wider then the integers */ - if(das_vt_isInt(pThis->vtBuf) && das_vt_isReal(pThis->vtAry)){ + if(das_vt_isint(pThis->vtBuf) && das_vt_isreal(pThis->vtAry)){ if(das_vt_size(pThis->vtAry) == das_vt_size(pThis->vtBuf)) goto UNSUPPORTED; } /* I need to cast values up to a larger size, flag that */ if(das_vt_size(pThis->vtBuf) != das_vt_size(pThis->vtAry)) - pThis->uFlags |= DASENC_CAST; + pThis->uProc |= DASENC_CAST; /* Temporary: Remind myself to call DasAry_markEnd() when writing non-string variable length items */ @@ -155,28 +160,27 @@ DasErrCode DasAryEnc_init( daslog_info("Hi Developer: Variable length last index detected, " "make sure you call DasAry_markEnd() after packet reads."); } - - return DAS_OKAY; + goto SUPPORTED; } - if(strcmp(sEncType, 'utf8') != 0){ + if(strcmp(sEncType, "utf8") != 0){ goto UNSUPPORTED; } - pThis->uFlags |= DASENC_TEXT; + pThis->uProc |= DASENC_TEXT; // Deal with the text types if(strcmp(sSemantic, "bool") == 0){ return das_error(DASERR_NOTIMP, "TODO: Add parsing for 'true', 'false' etc."); } else if((strcmp(sSemantic, "int") == 0)||(strcmp(sSemantic, "real") == 0)){ - pThis->uFlags |= DASENC_PARSE; + pThis->uProc |= DASENC_PARSE; } else if((strcmp(sSemantic, "datetime") == 0)){ /* If we're storing this as a datetime structure it's covered, if we need to convert to something else the units are needed */ if(pThis->vtAry != vtTime){ - pThis->uFlags |= DASENC_EPOCH; + pThis->uProc |= DASENC_EPOCH; if( (epoch == NULL) || !(Units_canConvert(epoch, UNIT_US2000)) ) goto UNSUPPORTED; @@ -214,7 +218,7 @@ DasErrCode DasAryEnc_init( return DAS_OKAY; UNSUPPORTED: - if(pThis->uFlags & DASENC_EPOCH) + if(pThis->uProc & DASENC_EPOCH) return das_error(DASERR_ENC, "Can not encode/decode '%s' data from buffers " "with encoding '%s' for items of %hs bytes each to/from an array of " " '%s' type elements for time units of '%s'", sSemantic, sEncType, uSzEach, @@ -228,7 +232,7 @@ DasErrCode DasAryEnc_init( } /* ************************************************************************* */ -void DasAryEnc_deInit(DasAryEnc* pThis){ +void DasCodec_deInit(DasCodec* pThis){ /* No dynamic memory, just decrement the array usage count */ if(pThis && pThis->pAry) dec_DasAry(pThis->pAry); @@ -246,18 +250,18 @@ static DasErrCode _swap_read(ubyte* pDest, const ubyte* pSrc, size_t uVals, int for(size_t u = 0; u < (uVals*2); u += 2){ uSwap[0] = pSrc[u+1]; uSwap[1] = pSrc[u]; - *((uint16_t*)(pDest + u)) = *(uint16_t)uSwap; + *((uint16_t*)(pDest + u)) = *((uint16_t*)uSwap); } case 4: - for(size_t u = 0; u < (nVals*4); u += 4){ + for(size_t u = 0; u < (uVals*4); u += 4){ uSwap[0] = pSrc[u+3]; uSwap[1] = pSrc[u+2]; uSwap[2] = pSrc[u+1]; uSwap[3] = pSrc[u]; - *((uint32_t*)(pDest + u)) = *(uint32_t)uSwap; + *((uint32_t*)(pDest + u)) = *((uint32_t*)uSwap); } case 8: - for(size_t u = 0; u < (nVals*8); u += 8){ + for(size_t u = 0; u < (uVals*8); u += 8){ uSwap[0] = pSrc[u+7]; uSwap[1] = pSrc[u+6]; uSwap[2] = pSrc[u+5]; @@ -266,7 +270,7 @@ static DasErrCode _swap_read(ubyte* pDest, const ubyte* pSrc, size_t uVals, int uSwap[5] = pSrc[u+2]; uSwap[6] = pSrc[u+1]; uSwap[7] = pSrc[u]; - *((uint64_t*)(pDest + u)) = *(uint64_t)uSwap; + *((uint64_t*)(pDest + u)) = *((uint64_t*)uSwap); } default: return das_error(DASERR_ENC, "Logic error"); @@ -278,79 +282,81 @@ static DasErrCode _swap_read(ubyte* pDest, const ubyte* pSrc, size_t uVals, int /* Read helper */ static DasErrCode _cast_read( - ubyte* pDest, ubyte* pSrc, size_t uVals, das_val_type vtAry, das_val_type vtBuf + ubyte* pDest, const ubyte* pSrc, size_t uVals, das_val_type vtAry, das_val_type vtBuf ){ size_t v; switch(vtAry){ case vtDouble: switch(vtBuf){ - case vtUbyte: for(v=0; vuProc & DASENC_VALID) != DASENC_VALID) return -1 * das_error(DASERR_ENC, "Encoder is not initialized"); if(uBufLen == 0) return DAS_OKAY; /* Successfully do nothing */ - DasErrCode nErr = DAS_OKAY; + DasErrCode nRet = DAS_OKAY; size_t uVals = 0; @@ -457,7 +465,7 @@ int DasAryEnc_read( /* Alloc space as fill, then write in swapped values */ if((pWrite = DasAry_append(pThis->pAry, NULL, uVals)) == NULL) - return -1 * DASERR_ARY; + return -1 * DASERR_ARRAY; if((nRet = _swap_read(pWrite, pBuf, uVals, pThis->nBufValSz)) != DAS_OKAY) return -1 * nRet; @@ -467,21 +475,21 @@ int DasAryEnc_read( case DASENC_VALID|DASENC_CAST: if((pWrite = DasAry_append(pThis->pAry, NULL, uVals)) == NULL) - return -1 * DASERR_ARY; + return -1 * DASERR_ARRAY; if((nRet = _cast_read(pWrite, pBuf, uVals, pThis->vtAry, pThis->vtBuf)) != DAS_OKAY) return -1 * nRet; - break + break; /* Bigest binary change, swap and cast to a larger type for storage */ case DASENC_VALID|DASENC_CAST|DASENC_SWAP: if((pWrite = DasAry_append(pThis->pAry, NULL, uVals)) == NULL) - return -1 * DASERR_ARY; + return -1 * DASERR_ARRAY; if((nRet = _swap_cast_read(pWrite, pBuf, uVals, pThis->vtAry, pThis->vtBuf)) != DAS_OKAY) return -1 * nRet; - break + break; default: return -1 * das_error(DASERR_ENC, ENCODER_SETUP_ERROR); @@ -503,13 +511,13 @@ int DasAryEnc_read( ubyte aValue[sizeof(das_time)]; uVals = 0; - const char* pGet = pBuf; + const char* pGet = (const char*)pBuf; while((uGot < uBufLen)){ if((nExpect > 0) && (uVals == nExpect)) break; /* Find a sep or the end of the buffer */ - while(*pGet == cSep || *pGet == '\0' || (!cSep && isspace(*pGet)) ){ + while(*pGet == pThis->cSep || *pGet == '\0' || (!(pThis->cSep) && isspace(*pGet)) ){ ++pGet; ++uGot; if(uGot == uBufLen) @@ -520,7 +528,7 @@ int DasAryEnc_read( memset(sValue, 0, uValSz); uValSz = 0; - while(*pGet != cSep && *pGet != '\0' && (cSep || !isspace(*pGet)) ){ + while(*pGet != pThis->cSep && *pGet != '\0' && (pThis->cSep || !isspace(*pGet)) ){ sValue[uValSz] = *pGet; ++pGet; ++uGot; @@ -532,11 +540,11 @@ int DasAryEnc_read( if(uValSz > 0){ if(pThis->uProc & DASENC_PARSE){ - nErr = das_value_fromStr(aValue, sizeof(das_time), pThis->vtAry, sValue); - if(nErr != DAS_OKAY) - return -1 * nErr; + nRet = das_value_fromStr(aValue, sizeof(das_time), pThis->vtAry, sValue); + if(nRet != DAS_OKAY) + return -1 * nRet; if(!DasAry_append(pThis->pAry, aValue, 1)) - return -1 * DASERR_ARY; + return -1 * DASERR_ARRAY; } else{ /* No parsing needed, just run in the value. Typically there are @@ -551,22 +559,22 @@ int DasAryEnc_read( if(pThis->uProc & DASENC_WRAP){ uToWrite = pThis->uProc & DASENC_NULLTERM ? uValSz + 1 : uValSz; - if(DasAry_append(pThis->pAry, sValue, uToWrite) == NULL); - return -1 * DASERR_ARY; + if(DasAry_append(pThis->pAry, (const ubyte*) sValue, uToWrite) == NULL) + return -1 * DASERR_ARRAY; DasAry_markEnd(pThis->pAry, DasAry_rank(pThis->pAry) - 1); } else{ - uToWrite = uValSz > pThis->uMaxString ? pThis->uMaxStr : uValSz; + uToWrite = uValSz > pThis->uMaxString ? pThis->uMaxString : uValSz; - if( (pWrite = DasAry_append(pThis->pAry, sValue, uToWrite)) == NULL); - return -1 * DASERR_ARY; + if(DasAry_append(pThis->pAry, (const ubyte*) sValue, uToWrite) == NULL) + return -1 * DASERR_ARRAY; /* Fill pad if we need to */ if(uValSz < pThis->uMaxString){ uToWrite = pThis->uMaxString - uValSz; - if( DasAry_append(pThis->pAry, NULL, uToWrite) ); - return -1 * DASERR_ARY; + if( DasAry_append(pThis->pAry, NULL, uToWrite) ) + return -1 * DASERR_ARRAY; } } } @@ -579,6 +587,6 @@ int DasAryEnc_read( if(pRead) *pRead = uVals; - return uBufLen - (pGet - pBuf); + return uBufLen - ((const ubyte*)pGet - pBuf); } diff --git a/das2/aryenc.h b/das2/codec.h similarity index 87% rename from das2/aryenc.h rename to das2/codec.h index 31f2f7f..d968842 100644 --- a/das2/aryenc.h +++ b/das2/codec.h @@ -15,10 +15,10 @@ * version 2.1 along with das2C; if not, see . */ -/** @file aryenc.h Encoding/Decoding arrays to and from buffers */ +/** @file codec.h Encoding/Decoding arrays to and from buffers */ -#ifndef _das_aryenc_h_ -#define _das_aryenc_h_ +#ifndef _das_codec_h_ +#define _das_codec_h_ #include @@ -29,8 +29,11 @@ extern "C" { #endif +/* Not public, only here because used in a macro */ +#define DASENC_VALID 0x0001 + /** Reading and writing array data to buffers */ -typedef struct das_aryenc { +typedef struct das_codec { uint32_t uProc; /* Internal processing flags setup on the call to _init */ @@ -51,10 +54,10 @@ typedef struct das_aryenc { das_units timeUnits; /* If ascii times are to be stored as an integral type this is needed */ -} DasAryEnc; +} DasCodec; /** Has the memory for this encoder been initialized? */ -DAS_API bool DasAryEnc_isValid(const DasAryEnc* pThis); +#define DasCodec_isValid(pCd) (((pCd)->uProc & DASENC_VALID)==(DASENC_VALID)) /** Initialize a serial buffer decoder/encoder * @@ -64,7 +67,7 @@ DAS_API bool DasAryEnc_isValid(const DasAryEnc* pThis); * Values will be encoded so that they match the value type of the * array. * @warning If the basic parameters of this array, such as it's value - * type or rank are changed, then DasAryEnc_init() must be re-called. + * type or rank are changed, then DasCodec_init() must be re-called. * * @param sSemantic The purpose of the data to store in the buffer, should * be one of 'bool','int','real','datatime','string'. This determines @@ -101,8 +104,8 @@ DAS_API bool DasAryEnc_isValid(const DasAryEnc* pThis); * and zeros will be appended to fill out the last index when reading * data. */ -DAS_API DasErrCode DasAryEnc_init( - DasAryEnc* pThis, DasAry* pAry, const char* sSemantic, const char* sEncType, +DAS_API DasErrCode DasCodec_init( + DasCodec* pThis, DasAry* pAry, const char* sSemantic, const char* sEncType, uint16_t uSzEach, ubyte cSep, das_units epoch ); @@ -129,16 +132,16 @@ DAS_API DasErrCode DasAryEnc_init( * @returns the number of unread bytes or a negative ERR code if a data conversion * error occured. * */ -DAS_API int DasAryEnc_read( - DasAryEnc* pThis, const ubyte* pBuf, size_t nBufLen, int nExpect, int* pRead +DAS_API int DasCodec_decode( + DasCodec* pThis, const ubyte* pBuf, size_t nBufLen, int nExpect, int* pRead ); /** Release the reference count on the array given to this encoder/decoder */ -DAS_API void DasAryEnc_deInit(DasAryEnc* pThis); +DAS_API void DasCodec_deInit(DasCodec* pThis); #ifdef __cplusplus } #endif -#endif /* _das_aryenc_h_ */ +#endif /* _das_codec_h_ */ diff --git a/das2/core.h b/das2/core.h index 35edb6f..35ab240 100644 --- a/das2/core.h +++ b/das2/core.h @@ -151,7 +151,7 @@ #ifndef _das_core_h_ #define _das_core_h_ -/* Das2 Libraries, use das2/das1.h to just use old packet and time handling */ +/* das 2/3 Libraries, use das2/das1.h to just use old packet and time handling */ #include #include #include @@ -182,6 +182,8 @@ #include #include #include +#include /* might not need to be exposed */ +#include /* might not need to be exposed */ /* Add a utility for handling UTF-8 as an internal string format, though almost all string manipulation algorithms get by without this even when diff --git a/das2/dataset.c b/das2/dataset.c index 290203b..e99fa31 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -214,7 +214,7 @@ bool dasds_iter_next(dasds_iterator* pIter){ /* ************************************************************************* */ /* Post-Construction sub-item addition */ -bool DasDs_addAry(DasDs* pThis, DasAry* pAry) +DasErrCode DasDs_addAry(DasDs* pThis, DasAry* pAry) { /* In python ABI language, this function steals a reference to the @@ -224,7 +224,7 @@ bool DasDs_addAry(DasDs* pThis, DasAry* pAry) DasAry** pNew = NULL; size_t uNew = pThis->uSzArrays * 2; if(uNew < 6) uNew = 6; - if( (pNew = (DasAry**)calloc(uNew, sizeof(void*))) == NULL) return false; + if( (pNew = (DasAry**)calloc(uNew, sizeof(void*))) == NULL) return DASERR_DS; if(pThis->uArrays > 0) @@ -234,11 +234,21 @@ bool DasDs_addAry(DasDs* pThis, DasAry* pAry) } pThis->lArrays[pThis->uArrays] = pAry; pThis->uArrays += 1; - return true; + return DAS_OKAY; +} + +DasAry* DasDs_getAryById(DasDs* pThis, const char* sAryId) +{ + for(size_t u = 0; u < pThis->uArrays; ++u){ + if(strcmp(pThis->lArrays[u]->sId, sAryId) == 0){ + return pThis->lArrays[u]; + } + } + return NULL; } -bool DasDs_addDim(DasDs* pThis, DasDim* pDim) +DasErrCode DasDs_addDim(DasDs* pThis, DasDim* pDim) { /* Since function maps mask off any un-used indices and since * Variables can have internal structure beyond those needed for @@ -249,20 +259,16 @@ bool DasDs_addDim(DasDs* pThis, DasDim* pDim) */ size_t v = 0; - if(pDim->dtype == DASDIM_UNK){ - das_error(DASERR_DS, "Can't add a dimension of type ANY to dataset %s", pThis->sId); - return false; - } + if(pDim->dtype == DASDIM_UNK) + return das_error(DASERR_DS, "Can't add a dimension of type ANY to dataset %s", pThis->sId); + /* Make sure that I don't already have a dimesion with this name */ for(v = 0; v < pThis->uDims; ++v){ - if(strcmp(pThis->lDims[v]->sName, pDim->sName) == 0){ - das_error( - DASERR_DS, "A dimension named %s already exists in dataset %s", - pDim->sName, pThis->sId + if(strcmp(pThis->lDims[v]->sName, pDim->sName) == 0) + return das_error(DASERR_DS, + "A dimension named %s already exists in dataset %s", pDim->sName, pThis->sId ); - return false; - } } /* Going to remove direct coordinate references for now */ @@ -313,20 +319,54 @@ bool DasDs_addDim(DasDs* pThis, DasDim* pDim) pDim->base.parent = &(pThis->base); - return true; + return DAS_OKAY; } -DAS_API DasDim* DasDs_makeDim( +DasDim* DasDs_makeDim( DasDs* pThis, enum dim_type dType, const char* sDim, const char* sId ){ DasDim* pDim = new_DasDim(sDim, sId, dType, pThis->nRank); - if(! DasDs_addDim(pThis, pDim)){ + if(DasDs_addDim(pThis, pDim) != DAS_OKAY){ del_DasDim(pDim); return NULL; } return pDim; } +/* ************************************************************************* */ + +DasErrCode DasDs_addFixedCodec( + DasDs* pThis, const char* sAryId, const char* sSemantic, + const char* sEncType, int nItemBytes, int nNumItems +){ + if(pThis->uSzEncs == DASDS_LOC_ENC_SZ) + return das_error(DASERR_NOTIMP, + "Adding more then %d array codecs per dataset is not yet implemented", + DASDS_LOC_ENC_SZ + ); + + /* Find the array with this ID */ + DasAry* pAry = DasDs_getAryById(pThis, sAryId); + if(pAry == NULL) + return das_error(DASERR_DS, "An array with id '%s' found", sAryId); + + DasCodec* pCodec = (DasCodec*) &(pThis->aPktEncs[pThis->uSzEncs]); + + DasErrCode nRet = DasCodec_init( + pCodec, pAry, sSemantic, sEncType, 0, nItemBytes, pAry->units + ); + + if(nRet != DAS_OKAY){ + free(pCodec); + return nRet; + } + + pThis->nPktItems[pThis->uSzEncs] = nNumItems; + pThis->uSzEncs += 1; + + return DAS_OKAY; +} + char* DasDs_toStr(const DasDs* pThis, char* sBuf, int nLen) { char sDimBuf[1024] = {'\0'}; diff --git a/das2/dataset.h b/das2/dataset.h index ef85014..e6cd5f6 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -22,7 +22,7 @@ #define _das_dataset_h_ #include -#include +#include #ifdef __cplusplus extern "C" { @@ -98,7 +98,7 @@ extern "C" { /* Number of encoders that can be stored internally, more then this and they * have to be allocated on the heap. This is the common "small vector" * optimization */ -#define DASDS_LOC_ENC_SZ 12 +#define DASDS_LOC_ENC_SZ 32 /** @addtogroup datasets * @{ @@ -182,10 +182,12 @@ typedef struct dataset { /* dataset arrays can be written in chunks to output buffers. The number of * elements in each chuck, the encoding of each element any separators are * defined below. */ - DasAryEnc** lEncs; - size_t uSzEncs; + /* DasCodec** lEncs; */ - DasAryEnc aPktEncs[DASDS_LOC_ENC_SZ]; + /* Use a fixed size for now */ + size_t uSzEncs; + DasCodec aPktEncs[DASDS_LOC_ENC_SZ]; + int nPktItems[DASDS_LOC_ENC_SZ]; } DasDs; @@ -456,7 +458,7 @@ DAS_API DasErrCode DasDs_addAry(DasDs* pThis, DasAry* pAry); * @returns A pointer to the array, or NULL if no array with the given ID * could be found in the dataset. */ -DAS_API DasAry* DasDs_getAryById(DasDs* pThis, const char* sId); +DAS_API DasAry* DasDs_getAryById(DasDs* pThis, const char* sAryId); /** Define a packet data encoded/decoder for fixed length items and arrays @@ -465,6 +467,10 @@ DAS_API DasAry* DasDs_getAryById(DasDs* pThis, const char* sId); * * @param sAryId The array to encode to/decode from * + * @param sSemantic How the values are to be used. This affects parsing. + * For example a string meant to represent a datatime is stored + * differently from one that represents an annotation. + * * @param sEncType one of the following encoding types as taken from * the das-basic-stream-v3.0.xsd schema: * @@ -488,8 +494,8 @@ DAS_API DasAry* DasDs_getAryById(DasDs* pThis, const char* sId); * @returns DAS_OKAY if the array codec could be defined */ DAS_API DasErrCode DasDs_addFixedCodec( - DasDs* pThis, const char* sAryId, const char* sEncType, - int nItemBytes, int nNumItems + DasDs* pThis, const char* sAryId, const char* sSemantic, + const char* sEncType, int nItemBytes, int nNumItems ); /** Define a packet data encoder for variable length items and arrays @@ -502,8 +508,10 @@ DAS_API DasErrCode DasDs_addFixedCodec( * * @param nItemBytes The number of bytes in an item. For variable * length items terminated by a separator, use -9 (DASENC_USE_SEP) - * and specify an item terminator. For variable length items - * with explicit lengths use -1 (DASENC_ITEM_LEN) + * and specify an item terminator. + * + * @note At present, variable length items with explicit length + * in packets are not yet supported * * @param nSeps The number of separators for variable length items. * @@ -553,6 +561,22 @@ DAS_API DasDim* DasDs_makeDim( DasDs* pThis, enum dim_type dType, const char* sDim, const char* sId ); +/** Add a physical dimension to the dataset + * + * @warning The dataset takes ownership of the dimesion object and will delete + * it when the dataset is deleted. It is important not to provide a pointer + * to a stack variable. + * + * @param pThis A pointer to a dataset structure + * + * @param pDim A existing dimension object created *on the heap*. + * + * @returns DAS_OKAY if the dimension + * + * @membefof DasDs + */ +DAS_API DasErrCode DasDs_addDim(DasDs* pThis, DasDim* pDim); + /** Get the data set group id * diff --git a/das2/defs.h b/das2/defs.h index 0e02df8..7f7dff6 100644 --- a/das2/defs.h +++ b/das2/defs.h @@ -55,6 +55,10 @@ #undef HOST_IS_LSB_FIRST #endif +#if defined __LP64__ +#define HOST_IS_64_BIT +#endif + #else /* End Linux Section */ #ifdef __sun @@ -75,6 +79,10 @@ */ #define HOST_IS_LSB_FIRST +#ifdef _WIN64 +#define HOST_IS_64_BIT +#endif + #else diff --git a/das2/dimension.c b/das2/dimension.c index 5436262..644ce5f 100644 --- a/das2/dimension.c +++ b/das2/dimension.c @@ -292,7 +292,7 @@ DasVar* DasDim_popVar(DasDim* pThis, const char* role){ /* Construction / Destruction ********************************************* */ -DasDim* new_DasDim(const char* sDim, const char* enum dim_type dtype, int nDsRank) +DasDim* new_DasDim(const char* sDim, const char* sName, enum dim_type dtype, int nDsRank) { DasDim* pThis = (DasDim*)calloc(1, sizeof(DasDim)); if(pThis == NULL){ @@ -303,7 +303,13 @@ DasDim* new_DasDim(const char* sDim, const char* enum dim_type dtype, int nDsRan pThis->dtype = dtype; das_assert_valid_id(sDim); - strncpy(pThis->sDim, sDim, 63); + strncpy(pThis->sDim, sDim, DAS_MAX_ID_BUFSZ-1); + + if(sName && sName[0] != '\0') /* Just repeat as dim name if no name given */ + strncpy(pThis->sName, sName, DAS_MAX_ID_BUFSZ-1); + else + strncpy(pThis->sName, sDim, DAS_MAX_ID_BUFSZ-1); + pThis->iFirstInternal = nDsRank; return pThis; diff --git a/das2/io.c b/das2/io.c index a88cb07..9bc289e 100644 --- a/das2/io.c +++ b/das2/io.c @@ -895,8 +895,8 @@ int _DasIO_dataTypeOrErr(DasIO* pThis, DasBuf* pBuf, bool bFirstRead, int* pPktI switch(sTag[0]){ case '<': // Save the first 4 bytes in pPktId so that they don't evaporate - uPack = ( (byte)sTag[0] )|( ((byte)sTag[1]) >> 8 )|( ((byte)sTag[2]) >> 16 )| - ( ((byte)sTag[3]) >> 24 ); + uPack = ( (ubyte)sTag[0] )|( ((ubyte)sTag[1]) >> 8 )|( ((ubyte)sTag[2]) >> 16 )| + ( ((ubyte)sTag[3]) >> 24 ); *pPktId = *((int*)(&uPack)); if(bFirstRead) return (IO_CHUNK_DOC | IO_ENC_XML); @@ -908,8 +908,8 @@ int _DasIO_dataTypeOrErr(DasIO* pThis, DasBuf* pBuf, bool bFirstRead, int* pPktI case '{': // Save the first 4 bytes in pPktId so that they don't evaporate - uPack = ( (byte)sTag[0] )|( ((byte)sTag[1]) >> 8 )|( ((byte)sTag[2]) >> 16 )| - ( ((byte)sTag[3]) >> 24 ); + uPack = ( (ubyte)sTag[0] )|( ((ubyte)sTag[1]) >> 8 )|( ((ubyte)sTag[2]) >> 16 )| + ( ((ubyte)sTag[3]) >> 24 ); *pPktId = *((int*)(&uPack)); if(bFirstRead) @@ -1524,15 +1524,18 @@ DasErrCode DasIO_writePktDesc(DasIO* pThis, PktDesc* pPd ) if( (nRet = PktDesc_encode(pPd, pBuf)) != 0) return nRet; size_t uToWrite = DasBuf_unread(pBuf) + 10; - if(pThis->dasver == 2) + if(pThis->dasver == 2){ if( DasIO_printf( pThis, "[%02d]%06d%s", pPd->id, DasBuf_unread(pBuf), pBuf->pReadBeg ) != uToWrite) return das_error(DASERR_IO, "Partial packet descriptor written"); - else + } + else{ if( DasIO_printf( pThis, "|Hx|%02d|%d|%s", pPd->id, DasBuf_unread(pBuf), pBuf->pReadBeg ) != uToWrite) + return das_error(DASERR_IO, "Partial packet descriptor written"); + } pPd->bSentHdr = true; diff --git a/das2/property.c b/das2/property.c index 5897c3f..cf1dc6b 100644 --- a/das2/property.c +++ b/das2/property.c @@ -380,7 +380,7 @@ const char* DasProp_typeStr3(const DasProp* pProp) ubyte DasProp_type(const DasProp* pProp) { - return (byte)(pProp->flags & (DASPROP_TYPE_MASK|DASPROP_MULTI_MASK)); + return (ubyte)(pProp->flags & (DASPROP_TYPE_MASK|DASPROP_MULTI_MASK)); } bool DasProp_equal(const DasProp* pOne, const DasProp* pTwo) diff --git a/das2/serial.c b/das2/serial.c index 81ceb11..8a45ccd 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -17,29 +17,35 @@ #define _POSIX_C_SOURCE 200112L +#include +#include #include +#include +#include "stream.h" #include "dataset.h" +#include "log.h" #define DS_XML_MAXERR 512 #define _UNIT_BUF_SZ 127 #define _NAME_BUF_SZ 63 #define _TYPE_BUF_SZ 23 -#define _VAL_SEMANTIC_SZ 16; -#define _VAL_STOREAGE_SZ 12; +#define _VAL_SEMANTIC_SZ 16 +#define _VAL_STOREAGE_SZ 12 +#define _VAL_UNDER_SZ 64 /* Should be enough room for most variables */ -#define _VAL_ENC_TYPE_SZ 8; -#define _VAL_FILL_SZ 48; -#define _VAL_TERM_SZ 48; -#define _VAL_SEQ_CONST_SZ sizeof(das_time); +#define _VAL_ENC_TYPE_SZ 8 +#define _VAL_FILL_SZ 48 +#define _VAL_TERM_SZ 48 +#define _VAL_SEQ_CONST_SZ sizeof(das_time) /* **************************************************************************** Our processing state structure, these are required for expat */ -typedef struct serial_xml_context { - StreamDesc* pSD; +struct serial_xml_context { + StreamDesc* pSd; int nPktId; DasDs* pDs; @@ -61,11 +67,11 @@ typedef struct serial_xml_context { int varIntRank; int nVarComp; das_units varUnits; - char varUse[DASDIM_ROLE_SZ] + char varUse[DASDIM_ROLE_SZ]; char valSemantic[_VAL_SEMANTIC_SZ]; // "real", "int", "datetime", "string", etc. - char valStorage[_VAL] + char valStorage[_VAL_STOREAGE_SZ]; char varCompDirs[DASFRM_NAME_SZ][DASFRM_MAX_DIRS]; - ptrdiff_t aVarMap[DASIDX_MAX]; + int8_t aVarMap[DASIDX_MAX]; /* Stuff needed for sequence vars */ ubyte aSeqMin[_VAL_SEQ_CONST_SZ]; /* big enough to hold a double */ @@ -84,7 +90,7 @@ typedef struct serial_xml_context { char sItemsTerm[_VAL_TERM_SZ]; /* Stuff needed only for embedded values array vars */ - DasAryEnc codecHdrVals; + DasCodec codecHdrVals; ubyte aValUnderFlow[_VAL_UNDER_SZ]; int nValUnderFlowValid; @@ -117,8 +123,8 @@ static void _serial_clear_var_section(struct serial_xml_context* pCtx) memset(pCtx->valStorage, 0, _VAL_STOREAGE_SZ); memset(pCtx->varCompDirs, 0,DASFRM_NAME_SZ*DASFRM_MAX_DIRS); memset(pCtx->aVarMap, 0, DASIDX_MAX*sizeof(ptrdiff_t)); - memset(pCtx->nSeqMin, 0, 8); - memset(pCtx->nSeqInter, 0, 8); + memset(pCtx->aSeqMin, 0, 8); + memset(pCtx->aSeqInter, 0, 8); pCtx->pCurAry = NULL; /* No longer need the array */ @@ -128,20 +134,20 @@ static void _serial_clear_var_section(struct serial_xml_context* pCtx) memset(pCtx->sPktFillVal, 0, _VAL_FILL_SZ); memset(pCtx->sValTerm, 0, _VAL_TERM_SZ); memset(pCtx->sItemsTerm, 0, _VAL_TERM_SZ); - if(DasAryEnc_isValid( &(pCtx->codecHdrVals)) ) - DasAryEnc_deInit( &(pCtx->codecHdrVals) ); - memset(&(pCtx->codecHdrVals), 0, sizeof(DasAryEnc)); - memset(aValUnderFlow, 0, sizeof(_VAL_UNDER_SZ)); - nValUnderFlowValid = 0; + if(DasCodec_isValid( &(pCtx->codecHdrVals)) ) + DasCodec_deInit( &(pCtx->codecHdrVals) ); + memset(&(pCtx->codecHdrVals), 0, sizeof(DasCodec)); + memset(&(pCtx->aValUnderFlow), 0, sizeof(_VAL_UNDER_SZ)); + pCtx->nValUnderFlowValid = 0; } /* ************************************************************************* */ -static bool _serial_parseIndex( +static DasErrCode _serial_parseIndex( const char* sIndex, int nRank, ptrdiff_t* pMap, bool bUnusedOkay, const char* sElement ){ - char* sBeg = sIndex; + const char* sBeg = sIndex; char* sEnd = NULL; int iExternIdx = 0; while((*sBeg != '\0')&&(iExternIdx < DASIDX_MAX)){ @@ -151,7 +157,7 @@ static bool _serial_parseIndex( else *sEnd = '\0'; if(sBeg == sEnd) - goto SHAPE_ERROR; + return das_error(DASERR_SERIAL, "Empty index shape entry in element <%s>", sElement); if(sBeg[0] == '*') pMap[iExternIdx] = DASIDX_RAGGED; @@ -165,7 +171,7 @@ static bool _serial_parseIndex( pMap[iExternIdx] = DASIDX_UNUSED; } else{ - if(sscanf(sBeg, "%td", pCtx->aExtShape + iExternIdx)!=1){ + if(sscanf(sBeg, "%td", pMap + iExternIdx)!=1){ return das_error(DASERR_SERIAL, "Could not parse index shape of %s in element <%s>", sIndex, sElement @@ -203,13 +209,14 @@ static DasErrCode _serial_initfill(ubyte* pBuf, int nBufLen, das_val_type vt, co } // Ugh, now we have to parse the damn thing. - return das_val_fromStr(pBuf, nBufLen, vt, sFill); + return das_value_fromStr(pBuf, nBufLen, vt, sFill); } /* **************************************************************************** Create an empty dataset of known index shape */ -static void _serial_onOpenDs(struct ds_xml_context* pCtx, const char** psAttr){ +static void _serial_onOpenDs(struct serial_xml_context* pCtx, const char** psAttr) +{ const char* sRank = NULL; const char* sName = NULL; char sIndex[48] = {'\0'}; @@ -250,7 +257,7 @@ static void _serial_onOpenDs(struct ds_xml_context* pCtx, const char** psAttr){ DasErrCode nRet; if((nRet = _serial_parseIndex(sIndex, nRank, pCtx->aExtShape, false, "dataset")) != DAS_OKAY){ - pCtx->nDasErr = nRet + pCtx->nDasErr = nRet; return; } @@ -260,15 +267,13 @@ static void _serial_onOpenDs(struct ds_xml_context* pCtx, const char** psAttr){ DasDesc_setStr((DasDesc*)(pCtx->pDs), "plot", sPlot); return; - SHAPE_ERROR: - } /* **************************************************************************** Making a dimension inside a dataset */ static void _serial_onOpenDim( - struct ds_xml_context* pCtx, const char* sDimType, const char** psAttr + struct serial_xml_context* pCtx, const char* sDimType, const char** psAttr ){ enum dim_type dt = DASDIM_UNK; @@ -300,7 +305,7 @@ static void _serial_onOpenDim( } /* freak about about missing items */ - if((sPhysDim == NULL)||(sPhysDim[0] = '\0')){ + if((sPhysDim == NULL)||(sPhysDim[0] == '\0')){ pCtx->nDasErr = das_error(DASERR_SERIAL, "Attribute \"physDim\" missing for %s groups in dataset ID %d", sDimType, id @@ -329,8 +334,12 @@ static void _serial_onOpenDim( sEnd = strchr(sBeg, '\0'); else *sEnd = '\0'; - if(sBeg == sEnd) - goto AXIS_ERROR; + if(sBeg == sEnd){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Empty axis entry in '%s' for element <%s>",sAxis, sDimType + ); + return; + } pDim->axes[iAxis][0] = sBeg[0]; if(sEnd - sBeg > 1) @@ -357,7 +366,7 @@ static void _serial_onOpenDim( Starting a new variable, either scalar or vector */ static void _serial_onOpenVar( - struct ds_xml_context* pCtx, const char* sVarElType, const char** psAttr + struct serial_xml_context* pCtx, const char* sVarElType, const char** psAttr ){ if(pCtx->bInVar){ pCtx->nDasErr = das_error(DASERR_SERIAL, @@ -388,7 +397,8 @@ static void _serial_onOpenVar( if(!_serial_parseIndex(sIndex, DasDs_rank(pCtx->pDs), pCtx->aExtShape, false, sVarElType)){ pCtx->nDasErr = das_error(DASERR_SERIAL, - "Invalid index space definition '%s' for dataset %02d of rank", sIndex, id, nRank + "Invalid index space definition '%s' for dataset %02d of rank", sIndex, id, + DasDs_rank(pCtx->pDs) ); return; } @@ -414,15 +424,11 @@ static void _serial_onOpenVar( /* ************************************************************************** */ -static _serial_onComponent(struct ds_xml_context* pCtx, const char** psAttr) +static void _serial_onComponent(struct serial_xml_context* pCtx, const char** psAttr) { - struct ds_xml_context* pCtx = (parse_stream_desc_t*)data; - if(pCtx->nDasErr != DAS_OKAY) /* If an error condition is set, stop processing elements */ return; - DasErrCode nRet = DAS_OKAY; - /* If not in a this makes no sense */ if((!pCtx->bInVar)||(pCtx->varIntRank != 1)){ pCtx->nDasErr = das_error(DASERR_SERIAL, " elements only allowed inside 's"); @@ -435,7 +441,7 @@ static _serial_onComponent(struct ds_xml_context* pCtx, const char** psAttr) sDir = psAttr[i+1]; if(sDir[0] == '\0'){ pCtx->nDasErr = das_error(DASERR_SERIAL, - "Empty direction name for of in phyDim %s of dataset ID %d" + "Empty direction name for of in phyDim %s of dataset ID %d", DasDim_id(pCtx->pCurDim), pCtx->nPktId ); return; @@ -443,7 +449,7 @@ static _serial_onComponent(struct ds_xml_context* pCtx, const char** psAttr) } else daslog_warn_v( - "Unknown attribute %s in for dataset ID %02d", psAttr[i], id + "Unknown attribute %s in for dataset ID %02d", psAttr[i], pCtx->nPktId ); } @@ -462,7 +468,7 @@ static _serial_onComponent(struct ds_xml_context* pCtx, const char** psAttr) /* ************************************************************************** */ /* Create a seequence item */ -static void _serial_onSequence(struct ds_xml_context* pCtx, const char** psAttr) +static void _serial_onSequence(struct serial_xml_context* pCtx, const char** psAttr) { const char* sMin = "0"; const char* sInter = NULL; @@ -483,18 +489,18 @@ static void _serial_onSequence(struct ds_xml_context* pCtx, const char** psAttr) else if(strcmp("interval", psAttr[i]) == 0) sInter = psAttr[i+1]; else if(strcmp("repeat", psAttr[i]) == 0) - pCtx->nDasErr == das_error(DASERR_NOTIMP, + pCtx->nDasErr = das_error(DASERR_NOTIMP, "In for dataset ID %d, reapeated sequence items not yet supported", pCtx->nPktId ); else if(strcmp("repetitions", psAttr[i]) == 0) - pCtx->nDasErr == das_error(DASERR_NOTIMP, + pCtx->nDasErr = das_error(DASERR_NOTIMP, "In for dataset ID %d, reapeated sequence items not yet supported", pCtx->nPktId ); else daslog_warn_v( - "Unknown attribute %s in for dataset ID %02d", psAttr[i], id + "Unknown attribute %s in for dataset ID %02d", psAttr[i], pCtx->nPktId ); } @@ -510,7 +516,7 @@ static void _serial_onSequence(struct ds_xml_context* pCtx, const char** psAttr) pCtx->nDasErr = das_error(DASERR_SERIAL, "Attribute 'storage' needed for variable %s in dimension %s for dataset " "ID %d since values are generated by a sequence.", pCtx->varUse, - DasDim_id(pCtx->pDim), pCtx->nPktId + DasDim_id(pCtx->pCurDim), pCtx->nPktId ); return; } @@ -533,16 +539,16 @@ static void _serial_onSequence(struct ds_xml_context* pCtx, const char** psAttr) #define NO_FILL false #define SET_FILL true -static DasErrCode _serial_makeVarAry(struct ds_xml_context* pCtx, bool bHandleFill) +static DasErrCode _serial_makeVarAry(struct serial_xml_context* pCtx, bool bHandleFill) { /* Okay, make an array to hold the values since this is packet data */ assert(pCtx->pCurAry == NULL); - char sAryId[64] = '{\0}'; + char sAryId[64] = {'\0'}; snprintf(sAryId, 63, "%s_%s", pCtx->varUse, DasDim_id(pCtx->pCurDim)); /* Determine the array indexes from the variable indexes */ - ptrdiff_t aShape[DASIDX_MAX]; + size_t aShape[DASIDX_MAX]; int nAryRank = 0; /* <-- current array index then bumped to the rank */ for(int i = 0; i < DASIDX_MAX; ++i){ if(pCtx->aVarMap[i] == DASIDX_UNUSED) @@ -619,14 +625,12 @@ static DasErrCode _serial_makeVarAry(struct ds_xml_context* pCtx, bool bHandleFi } } - ubyte* pFill = NULL; ubyte aFill[sizeof(DATUM_BUF_SZ)] = {0}; if(bHandleFill){ - int nRet = _serial_initfill(aFill, sizeof(DATUM_BUF_SZ), vt, pCtx->sPktFillVal) + int nRet = _serial_initfill(aFill, sizeof(DATUM_BUF_SZ), vt, pCtx->sPktFillVal); if(nRet != DAS_OKAY) return nRet; - pFill = aFill } pCtx->pCurAry = new_DasAry( @@ -641,7 +645,7 @@ static DasErrCode _serial_makeVarAry(struct ds_xml_context* pCtx, bool bHandleFi /* ************************************************************************** */ /* Save the info needed to make a packet data encoder/decoder */ -static void _serial_onPacket(struct ds_xml_context* pCtx, const char** psAttr) +static void _serial_onPacket(struct serial_xml_context* pCtx, const char** psAttr) { if(pCtx->nDasErr != DAS_OKAY) /* If an error condition is set, stop processing elements */ @@ -658,7 +662,7 @@ static void _serial_onPacket(struct ds_xml_context* pCtx, const char** psAttr) for(int i = 0; psAttr[i] != NULL; i+=2){ if(strcmp(psAttr[i], "numItems") == 0){ - if(psAttr[i+1][0] == "*"){ + if(psAttr[i+1][0] == '*'){ pCtx->nPktItems = -1; nValTermStat = 0x1; } @@ -680,7 +684,7 @@ static void _serial_onPacket(struct ds_xml_context* pCtx, const char** psAttr) continue; } if(strcmp(psAttr[i], "itemBytes") == 0){ - if(psAttr[i+1][0] == "*"){ + if(psAttr[i+1][0] == '*'){ pCtx->nPktItemBytes = -1; nItemsTermStat = 0x1; } @@ -714,7 +718,7 @@ static void _serial_onPacket(struct ds_xml_context* pCtx, const char** psAttr) if(nReq != 0x7){ pCtx->nDasErr = das_error(DASERR_SERIAL, "Error parsing for dataset ID %02d, one of the required attributes" - " 'encoding', 'numItems', or 'itemBytes' is missing.", pCtx->nPktId; + " 'encoding', 'numItems', or 'itemBytes' is missing.", pCtx->nPktId ); } if(((nValTermStat & 0x1) != 0x1 )&&(nValTermStat != 0x7)){ @@ -723,7 +727,7 @@ static void _serial_onPacket(struct ds_xml_context* pCtx, const char** psAttr) "ID %02d", pCtx->nPktId ); } - if(((nItmesTermStat & 0x1) != 0x1 )&&(nItemsTermStat != 0x7)){ + if(((nItemsTermStat & 0x1) != 0x1 )&&(nItemsTermStat != 0x7)){ pCtx->nDasErr = das_error(DASERR_SERIAL, "Attribute 'itemsTerm' missing for variable number of items per " "packet in dataset ID %02d", pCtx->nPktId @@ -737,7 +741,7 @@ static void _serial_onPacket(struct ds_xml_context* pCtx, const char** psAttr) /* ************************************************************************** */ -static void _serial_onOpenVals(struct ds_xml_context* pCtx, const char** psAttr) +static void _serial_onOpenVals(struct serial_xml_context* pCtx, const char** psAttr) { if(pCtx->nDasErr != DAS_OKAY) /* Error flag rasied, stop parsing */ return; @@ -770,7 +774,7 @@ static void _serial_onOpenVals(struct ds_xml_context* pCtx, const char** psAttr) } /* By default utf8 is whitespace separated, could provide a separator here... */ - nRet = DasAryEnc_init( + nRet = DasCodec_init( &(pCtx->codecHdrVals), pCtx->pCurAry, pCtx->valSemantic, "utf8", DASIDX_RAGGED, 0, pCtx->varUnits ); @@ -780,9 +784,9 @@ static void _serial_onOpenVals(struct ds_xml_context* pCtx, const char** psAttr) /* ************************************************************************** */ /* Switch to various element initialization functions */ -static void _serial_xmlElementBeg(void* pCtx, const char* sElement, const char** psAttr) +static void _serial_xmlElementBeg(void* pUserData, const char* sElement, const char** psAttr) { - struct ds_xml_context* pCtx = (parse_stream_desc_t*)data; + struct serial_xml_context* pCtx = (struct serial_xml_context*)pUserData; if(pCtx->nDasErr != DAS_OKAY) /* If an error condition is set, stop processing elements */ return; @@ -834,24 +838,24 @@ static void _serial_xmlElementBeg(void* pCtx, const char* sElement, const char** } pCtx->nDasErr = das_error(DASERR_SERIAL, - "Unsupported element %s in the definition for dataset ID %02d." + "Unsupported element %s in the definition for dataset ID %02d.", sElement, pCtx->nPktId - ) + ); return; } /* ************************************************************************** */ /* Accumlating data between element tags */ -static void _serial_xmlCharData(void* pCtx, const char* sChars, int nLen) +static void _serial_xmlCharData(void* pUserData, const char* sChars, int nLen) { - struct ds_xml_context* pCtx = (parse_stream_desc_t*)data; + struct serial_xml_context* pCtx = (struct serial_xml_context*)pUserData; if(pCtx->nDasErr != DAS_OKAY) /* Error, stop processing */ return; if(pCtx->bInProp){ - DasAry* pAry = &(pCtx->pPropVal); + DasAry* pAry = pCtx->pPropVal; DasAry_append(pAry, (ubyte*) sChars, nLen); return; } @@ -867,25 +871,25 @@ static void _serial_xmlCharData(void* pCtx, const char* sChars, int nLen) or else we wouldn't be in an underflow condition. Finish out the current value, read it then advace the read pointer. */ if(pCtx->nValUnderFlowValid > 0){ - char* p = sChars; + const char* p = sChars; int n = 0; while(!isspace(*p) && (*p != '\0') && (n < nLen)){ ++p; ++n; } if(n > 0){ - if(nValUnderFlowValid + n >= (_VAL_UNDER_SZ-1)){ + if(pCtx->nValUnderFlowValid + n >= (_VAL_UNDER_SZ-1)){ pCtx->nDasErr = das_error(DASERR_SERIAL, "Parse error: Underflow buffer can't hold %d + %d bytes", - nValUnderFlowValid, n + pCtx->nValUnderFlowValid, n ); return; - memcpy(pCtx->aValUnderFlow + nValUnderFlowValid, n, sChars); + memcpy(pCtx->aValUnderFlow + pCtx->nValUnderFlowValid, sChars, n); } /* Read the underflow buffer then clear it */ /* TODO: make DasAry_putAt handle index rolling as well */ - nUnRead = DasAryEnc_read(pCtx->codecHdrVals, pCtx->aValUnderFlow, nLen, -1, NULL); + nUnRead = DasCodec_decode(&(pCtx->codecHdrVals), pCtx->aValUnderFlow, nLen, -1, NULL); if(nUnRead < 0){ pCtx->nDasErr = -1 * nUnRead; return; @@ -900,12 +904,13 @@ static void _serial_xmlCharData(void* pCtx, const char* sChars, int nLen) /* Decode as many values as possible from the input */ /* TODO: make DasAry_putAt handle index rolling as well */ - nUnRead = DasAryCodec_append(pCtx->codecHdrVals, sChars, nLen, -1, NULL); - if(nRead < 0){ - pCtx->nDasErr = -1*nRead; + nUnRead = DasCodec_decode(&(pCtx->codecHdrVals), (const ubyte*) sChars, nLen, -1, NULL); + if(nUnRead < 0){ + pCtx->nDasErr = -1*nUnRead; return; } + /* Copy unread bytes into the underflow buffer */ if(nUnRead > 0){ if(nUnRead > _VAL_UNDER_SZ){ pCtx->nDasErr = das_error(DASERR_SERIAL, @@ -915,20 +920,20 @@ static void _serial_xmlCharData(void* pCtx, const char* sChars, int nLen) return; } - memcpy(pCtx->aValUnderFlow, pCtx->sChars+nBytesRead, nUnRead); - pCtx->nValUnderFlowValid = unRead; + memcpy(pCtx->aValUnderFlow, sChars + nLen - nUnRead, nUnRead); + pCtx->nValUnderFlowValid = nUnRead; } } /* ************************************************************************** */ /* Closing out properties */ -static void _serial_onCloseProp(struct ds_xml_context* pCtx, DasDesc* pDest){ +static void _serial_onCloseProp(struct serial_xml_context* pCtx, DasDesc* pDest){ if(pCtx->nDasErr != DAS_OKAY) return; - DasAry* pAry = &(pCtx->aPropVal); + DasAry* pAry = pCtx->pPropVal; DasAry_append(pAry, NULL, 1); // Null terminate the value string size_t uValLen = 0; const char* sValue = DasAry_getCharsIn(pAry, DIM0, &uValLen); @@ -957,7 +962,7 @@ static void _serial_onCloseProp(struct ds_xml_context* pCtx, DasDesc* pDest){ /* ************************************************************************** */ -static void _serial_onCloseVals(struct ds_xml_context* pCtx){ +static void _serial_onCloseVals(struct serial_xml_context* pCtx){ if(pCtx->nDasErr != DAS_OKAY) return; @@ -999,12 +1004,11 @@ static void _serial_onCloseVals(struct ds_xml_context* pCtx){ /* ************************************************************************** */ -static void _serial_onCloseVar(struct das_xml_contex* pCtx) +static void _serial_onCloseVar(struct serial_xml_context* pCtx) { - /* To assign directions, we'll need the frame from the stream header. If that's - not present then complain */ - const DasFrame* pFrame = StreamDesc_getFrameByName(pCtx->pSd, pCtx->pCurDim->frame); - + if(pCtx->nDasErr != DAS_OKAY) /* Stop processing on error */ + return; + /* If this is a vector and we had no components, that's a problem */ if((pCtx->varIntRank == 1)&&(pCtx->nVarComp == 0)){ pCtx->nDasErr = das_error(DASERR_SERIAL, @@ -1017,6 +1021,7 @@ static void _serial_onCloseVar(struct das_xml_contex* pCtx) /* Create the variable, for vector variables, we may need to create an implicit frame as well */ DasVar* pVar = NULL; + DasErrCode nRet = DAS_OKAY; if(pCtx->varIntRank == 1){ @@ -1027,7 +1032,7 @@ static void _serial_onCloseVar(struct das_xml_contex* pCtx) goto NO_CUR_VAR; } - DasFrame* pFrame = StreamDesc_getFrameByName(pCtx->pSD, pCtx->pCurDim->frame); + const DasFrame* pFrame = StreamDesc_getFrameByName(pCtx->pSd, pCtx->pCurDim->frame); if(pFrame == NULL){ // If the stream had no frame, generate one for the given frame name int iFrame = StreamDesc_nextFrameId(pCtx->pSd); @@ -1035,15 +1040,18 @@ static void _serial_onCloseVar(struct das_xml_contex* pCtx) pCtx->nDasErr = -1*iFrame; goto NO_CUR_VAR; } - pFrame = StreamDesc_createFrame(pCtx->pSd, iFrame, pCtx->pCurDim->frame, "cartesian"); - DasDesc_setStr((DasDesc*)pFrame, "title", "Autogenerated Frame"); + DasFrame* pMkFrame = StreamDesc_createFrame( + pCtx->pSd, iFrame, pCtx->pCurDim->frame, "cartesian" + ); + DasDesc_setStr((DasDesc*)pMkFrame, "title", "Autogenerated Frame"); for(int i = 0; i < pCtx->nVarComp; ++i){ - if((nRet = DasFrame_addDir(pFrame, pCtx->varCompDirs[i])) != DAS_OKAY){ + if((nRet = DasFrame_addDir(pMkFrame, pCtx->varCompDirs[i])) != DAS_OKAY){ pCtx->nDasErr = nRet; goto NO_CUR_VAR; } } + pFrame = pMkFrame; /* Make Frame Constant Again */ } int8_t iFrame = StreamDesc_getFrameId(pCtx->pSd, pCtx->pCurDim->frame); @@ -1074,20 +1082,21 @@ static void _serial_onCloseVar(struct das_xml_contex* pCtx) goto NO_CUR_VAR; } - pVar = new_DasVarVecAry(pCtx->pCurAry, pCtx->nRank, - pCtx->aVarMap, 1, pFrame->name, pFrame->flags, pCtx->nVarComp, aDirs + pVar = new_DasVarVecAry( + pCtx->pCurAry, DasDs_rank(pCtx->pDs), pCtx->aVarMap, 1, /* internal rank = 1 */ + pFrame->name, iFrame, pFrame->flags, pCtx->nVarComp, aDirs ); } else{ // Scalar variables (the more common case) if(pCtx->pCurAry == NULL){ pVar = new_DasVarSeq( - pCtx->varUse, pCtx->vtVarItemType, 0, pCtx->aSeqMin, pCtx->aSeqInter, + pCtx->varUse, pCtx->varItemType, 0, pCtx->aSeqMin, pCtx->aSeqInter, DasDs_rank(pCtx->pDs), pCtx->aVarMap, 0, pCtx->varUnits ); } else{ - pVar = new_DasVarArray(pCtx->pCurAry, pCtx->nRank, pCtx->aVarMap, 0); + pVar = new_DasVarArray(pCtx->pCurAry, DasDs_rank(pCtx->pDs), pCtx->aVarMap, 0); } } @@ -1101,12 +1110,12 @@ static void _serial_onCloseVar(struct das_xml_contex* pCtx) } else{ nRet = DasDs_addFixedCodec( - pCtx->pDs, DasAry_id(pCtx->pCurAry), pCtx->sValEncType, - pCtx->nPktItemBytes, pCtx->nPktItems + pCtx->pDs, DasAry_id(pCtx->pCurAry), pCtx->valSemantic, + pCtx->sValEncType, pCtx->nPktItemBytes, pCtx->nPktItems ); } if(nRet != DAS_OKAY){ - pCtx->nDasErr == nRet; + pCtx->nDasErr = nRet; goto NO_CUR_VAR; } } @@ -1117,7 +1126,7 @@ static void _serial_onCloseVar(struct das_xml_contex* pCtx) } if(!DasDim_addVar(pCtx->pCurDim, pCtx->varUse, pVar)){ - del_DasVar(pVar); + dec_DasVar(pVar); pCtx->nDasErr = DASERR_DIM; } @@ -1127,18 +1136,18 @@ static void _serial_onCloseVar(struct das_xml_contex* pCtx) /* ************************************************************************** */ -static void _serial_xmlElementEnd(void* pCtx, const char* sElement) +static void _serial_xmlElementEnd(void* pUserData, const char* sElement) { - struct ds_xml_context* pCtx = (parse_stream_desc_t*)data; + struct serial_xml_context* pCtx = (struct serial_xml_context*)pUserData; /* If I've hit an error condition, stop processing stuff */ if(pCtx->nDasErr != DAS_OKAY) return; /* Closing properties */ - if(sElement[0] == "p" && sElement[1] == "\0"){ + if(sElement[0] == 'p' && sElement[1] == '\0'){ - DasDesc* pDest = pCtx->pCurDim != NULL ? pCtx->pCurDim : pCtx->pDs; + DasDesc* pDest = pCtx->pCurDim != NULL ? (DasDesc*)pCtx->pCurDim : (DasDesc*)pCtx->pDs; _serial_onCloseProp(pCtx, pDest); pCtx->bInProp = false; return; @@ -1171,17 +1180,17 @@ static void _serial_xmlElementEnd(void* pCtx, const char* sElement) /* ************************************************************************** */ -DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, DasDesc* pParent, int nPktId) +DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId) { if(nDasVer != 3){ das_error(DASERR_NOTIMP, "Direct das v2.2 header format is not yet supported"); return NULL; } - struct ds_xml_context context = {0}; // All object's initially null - context.pSD = (StreamDesc*)pParent; + struct serial_xml_context context = {0}; // All object's initially null + context.pSd = pParent; - if((pParent == NULL)||(pParent->type != STREAM)){ + if((pParent == NULL)||(((DasDesc*)pParent)->type != STREAM)){ das_error(DASERR_SERIAL, "Stream descriptor must appear before a dataset descriptor"); return NULL; } @@ -1190,7 +1199,7 @@ DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, DasDesc* pParent, int nPk for(int i = 0; i < DASIDX_MAX; ++i) context.aExtShape[i] = DASIDX_UNUSED; - parser.nErr = DAS_OKAY; + context.nDasErr = DAS_OKAY; XML_Parser pParser = XML_ParserCreate("UTF-8"); if(pParser == NULL){ @@ -1198,14 +1207,14 @@ DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, DasDesc* pParent, int nPk return NULL; } XML_SetUserData(pParser, (void*)&context); - XML_SetElementHandler(pParser, _DasDs_xmlElementStart, _DasDs_xmlElementEnd); - XML_SetCharacterDataHandler(p, _DasDs_xmlCharData); + XML_SetElementHandler(pParser, _serial_xmlElementBeg, _serial_xmlElementEnd); + XML_SetCharacterDataHandler(pParser, _serial_xmlCharData); if(XML_Parse(pParser, pBuf->pReadBeg, DasBuf_unread(pBuf), true) == XML_STATUS_ERROR) { das_error(DASERR_PKT, "Parse error at line %d: %s\n", - XML_GetCurrentLineNumber(p), - XML_ErrorString(XML_GetErrorCode(p)) + XML_GetCurrentLineNumber(pParser), + XML_ErrorString(XML_GetErrorCode(pParser)) ); goto ERROR; } @@ -1216,7 +1225,7 @@ DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, DasDesc* pParent, int nPk ERROR: XML_ParserFree(pParser); if(context.pDs) // Happens, for example, if vector has no components - del_DasDs(context.pDs) + del_DasDs(context.pDs); das_error(context.nDasErr, context.sErrMsg); return NULL; } diff --git a/das2/serial.h b/das2/serial.h index daca90d..6550862 100644 --- a/das2/serial.h +++ b/das2/serial.h @@ -20,6 +20,7 @@ #ifndef _das_serial_h_ #define _das_serial_h_ +#include #include #ifdef __cplusplus @@ -46,7 +47,7 @@ extern "C" { * @return A pointer to a new DasDs and all if it's children allocated * on the heap, or NULL on an error. */ -DAS_API DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, DasDesc* pParent, int nPktId); +DAS_API DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId); diff --git a/das2/stream.c b/das2/stream.c index 7741f10..ab90101 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -326,6 +326,16 @@ DasFrame* StreamDesc_createFrame( return pFrame; } +int8_t StreamDesc_getFrameId(const StreamDesc* pThis, const char* sFrame){ + for(int i = 0; i < MAX_FRAMES; ++i){ + if(pThis->frames[i] == NULL) + continue; + if(strcmp(pThis->frames[i]->name, sFrame) == 0) + return i; + } + return -1 * DASERR_STREAM; +} + int StreamDesc_nextFrameId(const StreamDesc* pThis){ for(int i = 0; i < MAX_FRAMES; ++i){ if(pThis->frames[i] == NULL) @@ -694,7 +704,7 @@ DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd, int nPktId) return (DasDesc*) new_StreamDesc_str(pBuf); if(strcmp(sName, "packet") == 0) - return (DasDesc*) new_PktDesc_xml(pBuf, pSd, nPktId); + return (DasDesc*) new_PktDesc_xml(pBuf, (DasDesc*)pSd, nPktId); if(strcmp(sName, "dataset") == 0) return (DasDesc*) dasds_from_xmlheader(3, pBuf, pSd, nPktId); diff --git a/das2/value.c b/das2/value.c index 4bef679..d96179e 100644 --- a/das2/value.c +++ b/das2/value.c @@ -37,6 +37,7 @@ #include "datum.h" #include "util.h" #include "vector.h" +#include "log.h" /* ************************************************************************* */ /* value type functions */ @@ -60,7 +61,7 @@ const void* das_vt_fill(das_val_type et) switch(et){ case vtIndex: return &(g_idxFill); case vtUByte: return &(g_ubyteFill); - case vtByte: return &(g_byteFill) + case vtByte: return &(g_byteFill); case vtUShort: return &(g_ushortFill); case vtShort: return &(g_shortFill); case vtUInt: return &(g_uintFill); @@ -100,7 +101,7 @@ const char* das_vt_toStr(das_val_type et) case vtUnknown: return "unknown"; case vtIndex: return "index_info"; case vtUByte: return "ubyte"; - case vtUByte: return "byte"; + case vtByte: return "byte"; case vtUShort: return "ushort"; case vtShort: return "short"; case vtUInt: return "uint"; @@ -469,8 +470,8 @@ int das_vt_cmpAny( /* to do it manually for VC++ */ int64_t lA = 0, lB = 0; - byte uAHas = 0; /* float = 0x2 */ - byte uBHas = 0; /* int = 0x1 */ + ubyte uAHas = 0; /* float = 0x2 */ + ubyte uBHas = 0; /* int = 0x1 */ switch(vtA){ case vtUByte: lA = *((const uint8_t*)pA); dA = *((const uint8_t*)pA); uAHas = HAS_BOTH; break; case vtShort: lA = *((const int16_t*)pA); dA = *((const int16_t*)pA); uAHas = HAS_BOTH; break; @@ -541,32 +542,42 @@ DasErrCode das_value_fromStr( strncpy((char*)pBuf, sStr, nLen); return DAS_OKAY; } - daslog_error("string value '%s' can't fit into %d byte buffer", sStr, nBufLen); + daslog_error_v( + "string value '%s' can't fit into %d byte buffer", sStr, nBufLen + ); return DASERR_VALUE; case vtUByte: case vtByteSeq: - return sscanf(sStr, "%hhu", (uint8_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + return sscanf(sStr, "%hhu", (uint8_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; case vtByte: - return sscanf(sStr, "%hhd", (int8_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + return sscanf(sStr, "%hhd", (int8_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; case vtUShort: - return sscanf(sStr, "%hu", (uint16_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + return sscanf(sStr, "%hu", (uint16_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; case vtShort: - return sscanf(sStr, "%hd", (int16_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + return sscanf(sStr, "%hd", (int16_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; case vtUInt: - return sscanf(sStr, "%u", (uint32_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + return sscanf(sStr, "%u", (uint32_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; case vtInt: - return sscanf(sStr, "%d", (int32_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + return sscanf(sStr, "%d", (int32_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; case vtULong: - return sscanf(sStr, "%Lu", (uint64_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; +#ifdef HOST_IS_64_BIT + return sscanf(sStr, "%lu", (uint64_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; +#else + return sscanf(sStr, "%Lu", (uint64_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; +#endif case vtLong: - return sscanf(sStr, "%Ld", (int64_t*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; +#ifdef HOST_IS_64_BIT + return sscanf(sStr, "%ld", (int64_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; +#else + return sscanf(sStr, "%Ld", (int64_t*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; +#endif case vtFloat: - return sscanf(sStr, "%f", (float*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + return sscanf(sStr, "%f", (float*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; case vtDouble: - return sscanf(sStr, "%lf", (double*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + return sscanf(sStr, "%lf", (double*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; case vtTime: - return dt_parsetime(sStr, (das_time*)pBuf) == 1 ? DAS_OKAY, DASERR_VALUE; + return dt_parsetime(sStr, (das_time*)pBuf) == 1 ? DAS_OKAY : DASERR_VALUE; default: return das_error(DASERR_VALUE, "Unknown value type code: %d", vt); } diff --git a/das2/value.h b/das2/value.h index 57a74c9..2d980da 100644 --- a/das2/value.h +++ b/das2/value.h @@ -71,7 +71,7 @@ typedef enum das_val_type_e { vtUByte = 1, /** Indicates array values are signed 8-bit integers (signed bytes) */ - vtByte = 2; + vtByte = 2, /** Indicates array values are unsigned 16-bit integers (shorts) */ vtUShort = 3, @@ -80,7 +80,7 @@ typedef enum das_val_type_e { vtShort = 4, /** Indicates array values are unsigned 32-bit integers (uints) */ - vtUint = 5; + vtUInt = 5, /** Indicates array values are signed 32-bit integers (ints) */ vtInt = 6, @@ -104,7 +104,7 @@ typedef enum das_val_type_e { /* The following type is not used by datums, but by array indexing elements * that track the size and location of child dimensions */ - vtIndex = 11, + vtIndex = 12, /* The following two types are only used by variables and datums * @@ -123,14 +123,14 @@ typedef enum das_val_type_e { /** Indicates datum values are const char* pointers to null terminated * UTF-8 strings */ - vtText = 12, + vtText = 13, /** Value are a vector struct as defined by vector.h */ - vtGeoVec = 13, + vtGeoVec = 14, /** Indicates values are size_t plus const ubyte* pairs, no more is * known about the bytes */ - vtByteSeq = 14, + vtByteSeq = 15 } das_val_type; @@ -158,6 +158,10 @@ DAS_API das_val_type das_vt_store_type( const char* sEncType, int nItemBytes, const char* sInterp ); +#define das_vt_isint(VT) ( VT >= vtUByte && VT <= vtLong ) + +#define das_vt_isreal(VT) ( VT == vtFloat && VT == vtDouble ) + /** Get the rank of a value type * * Most items are scalars (rank 0), but strings and vectors are rank 1 @@ -181,16 +185,6 @@ DAS_API const char* das_vt_toStr(das_val_type vt); DAS_API das_val_type das_vt_fromStr(const char* sType); -/** Get a das value from a null terminated string - * - * This function should not exit, instead erroreous parsing triggers log messages - * - * @returns DAS_OKAY if parsing was successful, an error return code otherwise. - */ -DAS_API DasErrCode das_value_fromStr( - ubyte* pBuf, int uBufLen, das_val_type vt, const char* sStr -); - /* * Given a string and it's expected interpretation, return a suitable storage type */ /* DAS_API das_val_type das_vt_guess_store(const char* sInterp, const char* sValue); */ @@ -253,6 +247,17 @@ DAS_API int das_vt_cmpAny( DAS_API das_val_type das_vt_merge(das_val_type right, int op, das_val_type left); +/** Get a das value from a null terminated string + * + * This function should not exit, instead erroreous parsing triggers log messages + * + * @returns DAS_OKAY if parsing was successful, an error return code otherwise. + */ +DAS_API DasErrCode das_value_fromStr( + ubyte* pBuf, int uBufLen, das_val_type vt, const char* sStr +); + + /** Convert a string value to a 8-byte float, similar to strtod(3). * * @param str the string to convert. Conversion stops at the first improper diff --git a/das2/variable.c b/das2/variable.c index 07f3864..41d2f58 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -109,6 +109,10 @@ ptrdiff_t das_varlength_merge(ptrdiff_t nLeft, ptrdiff_t nRight) int inc_DasVar(DasVar* pThis){ pThis->nRef += 1; return pThis->nRef;} +int dec_DasVar(DasVar* pThis){ + return pThis->decRef(pThis); +}; + int ref_DasVar(const DasVar* pThis){ return pThis->nRef;} enum var_type DasVar_type(const DasVar* pThis){ return pThis->vartype; } @@ -1656,7 +1660,7 @@ bool DasVarSeq_get(const DasVar* pBase, ptrdiff_t* pLoc, das_datum* pDatum) switch(pThis->base.vt){ case vtUByte: - *((ubyte*)pDatum) = *(pThis->pM) * ((byte)u) + *(pThis->pB); + *((ubyte*)pDatum) = *(pThis->pM) * ((ubyte)u) + *(pThis->pB); return true; case vtUShort: *((uint16_t*)pDatum) = *( (uint16_t*)pThis->pM) * ((uint16_t)u) + @@ -1838,7 +1842,7 @@ ptrdiff_t DasVarSeq_lengthIn(const DasVar* pBase, int nIdx, ptrdiff_t* pLoc) } -bool DasVarSeq_isFill(const DasVar* pBase, const ubyte* pCheck, das_val_type vt) +bool DasVarSeq_isFill(const DasVar* pBase, const ubyte* pCheck, das_val_type vt) { return false; } @@ -1915,7 +1919,7 @@ DasAry* DasVarSeq_subset( case vtUByte: for(u = uMin; u < uMax; ++u){ /* The Calc */ - *pVal = *(pThis->pM) * ((byte)u) + *(pThis->pB); + *pVal = *(pThis->pM) * ((ubyte)u) + *(pThis->pB); das_memset(pWrite, pVal, uSzElm, uRepEach); pWrite += uWriteInc; @@ -2382,10 +2386,10 @@ bool DasVarBinary_get(const DasVar* pBase, ptrdiff_t* pIdx, das_datum* pDatum) case vtByte: dTmp = *((int8_t*)&dmRight); break; case vtUShort: dTmp = *((uint16_t*)&dmRight); break; case vtShort: dTmp = *((int16_t*)&dmRight); break; - case vtUInt: dTmp = *((uint*)&dmRight); break; - case vtInt: dTmp = *((int*)&dmRight); break; - case vtULong: dTmp = *((ulong*)&dmRight); break; - case vtLong: dTmp = *((long*)&dmRight); break; + case vtUInt: dTmp = *((uint32_t*)&dmRight); break; + case vtInt: dTmp = *((int32_t*)&dmRight); break; + case vtULong: dTmp = *((uint64_t*)&dmRight); break; + case vtLong: dTmp = *((int64_t*)&dmRight); break; case vtFloat: dTmp = *((float*)&dmRight); break; case vtDouble: dTmp = *((double*)&dmRight); break; default: diff --git a/das2/variable.h b/das2/variable.h index 54591f1..53c7a42 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -576,7 +576,11 @@ DAS_API DasVar* new_DasVarVecAry( const ubyte* pDir ); -/** Increment the reference count on a variable */ +/** Increment the reference count on a variable + * + * @returns the new number of references to this variable + * @memberof DasVar + */ DAS_API int inc_DasVar(DasVar* pThis); /** Decrement the reference count on a variable @@ -587,9 +591,12 @@ DAS_API int inc_DasVar(DasVar* pThis); * * You should set any local pointers refering to this variable to NULL after * calling dec_DasVar as it may no longer exist. + * + * @returns the number of remaining references + * * @memberof DasVar */ -DAS_API void dec_DasVar(DasVar* pThis); +DAS_API int dec_DasVar(DasVar* pThis); /** Get number of references */ diff --git a/das2/vector.c b/das2/vector.c index cd01a50..c14228f 100644 --- a/das2/vector.c +++ b/das2/vector.c @@ -50,7 +50,7 @@ DasErrCode das_geovec_init( pVec->dirs[i] = pDirs[i]; } break; - case vtUint: + case vtUInt: case vtInt: for(int i = 0; (i < ncomp)&&(i<3); ++i){ ((uint32_t*)(pVec->comp))[i] = ((uint32_t*)pData)[i]; diff --git a/test/TestArray.c b/test/TestArray.c index fa06496..834d9b2 100644 --- a/test/TestArray.c +++ b/test/TestArray.c @@ -330,7 +330,7 @@ int main(int argc, char** argv) size_t uVals; int rank; DasAry* pAmp = new_DasAry( - "amplitudes", vtFloat, 0, (const byte*)&fill, RANK_2(10, 152), + "amplitudes", vtFloat, 0, (const ubyte*)&fill, RANK_2(10, 152), UNIT_E_SPECDENS ); if(pAmp == NULL){ @@ -372,7 +372,7 @@ int main(int argc, char** argv) /* Put values for all j's at i = 1 */ - if(!DasAry_putAt(pAmp, IDX1(1,0), (const byte*) llAmp[1], 152)){ + if(!DasAry_putAt(pAmp, IDX1(1,0), (const ubyte*) llAmp[1], 152)){ printf("ERROR: Test 7 (static record set) failed\n"); return 107; } @@ -383,7 +383,7 @@ int main(int argc, char** argv) printf("ERROR: Test 8 (get many from static array) failed\n"); return 108; } - if(!DasAry_putAt(pAmp, IDX1(0,0), (const byte*)pVals, uVals)){ + if(!DasAry_putAt(pAmp, IDX1(0,0), (const ubyte*)pVals, uVals)){ printf("ERROR: Test 9 (static array record duplication) failed\n"); return 109; } @@ -407,7 +407,7 @@ int main(int argc, char** argv) } /* Append testing, put in too few values, then qube the record */ - DasAry_append(pAmp, (const byte*) llAmp[0], 140); + DasAry_append(pAmp, (const ubyte*) llAmp[0], 140); if( 140 != DasAry_lengthIn(pAmp, DIM1_AT(10)) ){ printf("ERROR: Test 13 (partial record append) failed\n"); return 113; @@ -428,11 +428,11 @@ int main(int argc, char** argv) /* Higher dimension test, should result in 5 records in dim0 */ pAmp = new_DasAry( - "hirank", vtFloat, 0, (const byte*) &fill, + "hirank", vtFloat, 0, (const ubyte*) &fill, RANK_6(0, 2, 19, 2, 2, 2), UNIT_DIMENSIONLESS ); printf("INFO: Created array '%s'\n", DasAry_toStr(pAmp, sInfo, 128)); - if(!DasAry_append(pAmp, (const byte*) llAmp, 1520)){ + if(!DasAry_append(pAmp, (const ubyte*) llAmp, 1520)){ printf("ERROR: Test 16 (high-dimensional append) failed\n"); return 116; } @@ -468,14 +468,14 @@ int main(int argc, char** argv) /* Test and memory preallocation using the frequency array, * append is faster, but let's loop just to test out the putAt() function */ DasAry* pFreq = new_DasAry( - "frequencies", vtDouble, 0, (const byte*) NULL, + "frequencies", vtDouble, 0, (const ubyte*) NULL, RANK_1(152), UNIT_HERTZ ); printf("INFO: Created array '%s'\n", DasAry_toStr(pFreq, sInfo, 128)); for(int i = 0; i < 152; i++) - DasAry_putAt(pFreq, IDX0(i), (const byte*) (lFreq +i), 1); + DasAry_putAt(pFreq, IDX0(i), (const ubyte*) (lFreq +i), 1); if(! das_within( DasAry_getDoubleAt(pFreq, IDX0(150)), 5.231e+06, 1e-4) ){ printf("ERROR: Test 21 (rank 1 double array get) failed\n"); @@ -485,12 +485,12 @@ int main(int argc, char** argv) das_time dt; DasAry* pTime = new_DasAry( - "starts", vtTime, 0, (const byte*)NULL, RANK_1(0), UNIT_UTC + "starts", vtTime, 0, (const ubyte*)NULL, RANK_1(0), UNIT_UTC ); printf("INFO: Created array '%s'\n", DasAry_toStr(pTime, sInfo, 128)); for(int i = 0; i < 10; ++i){ dt_parsetime(lTime[i], &dt); - DasAry_append(pTime, (const byte*)&dt, 1); + DasAry_append(pTime, (const ubyte*)&dt, 1); } dt = DasAry_getTimeAt(pTime, IDX0(5)); dt_isoc(sInfo, 127, &dt, 3); @@ -515,7 +515,7 @@ int main(int argc, char** argv) for(int i = 0; i < 20; ++i){ /* Save the null bytes in the array so that strlen etc. works */ - DasAry_append(pBytes, (const byte*)g_lsRandText[i], strlen(g_lsRandText[i]) + 1); + DasAry_append(pBytes, (const ubyte*)g_lsRandText[i], strlen(g_lsRandText[i]) + 1); ++nLine; if(nLine == lLinesPerPg[iPg]){ DasAry_markEnd(pBytes, DIM1); /* State that array of lines is full */ @@ -527,7 +527,7 @@ int main(int argc, char** argv) } } size_t uStrLen; - const byte* pLine = DasAry_getBytesIn(pBytes, DIM2_AT(-1,-2), &uStrLen); + const ubyte* pLine = DasAry_getBytesIn(pBytes, DIM2_AT(-1,-2), &uStrLen); if(strcmp(" /* Make sure the shape is what I think it is */\n", (const char*)pLine) != 0){ printf("ERROR: Test 23 (Ragged read) failed\n"); diff --git a/test/TestVariable.c b/test/TestVariable.c index 2f43abc..167f36a 100644 --- a/test/TestVariable.c +++ b/test/TestVariable.c @@ -5878,7 +5878,7 @@ void print_reals( /* Going to use byte pointers so that we can work with either floats or * doubles */ size_t uTotal; - const byte* pVal = DasAry_getIn(aSlice, vt, DIM0, &uTotal); + const ubyte* pVal = DasAry_getIn(aSlice, vt, DIM0, &uTotal); ptrdiff_t index[DASIDX_MAX] = DASIDX_INIT_BEGIN; int d, nOut = 0; @@ -6004,7 +6004,7 @@ int main(int argc, char** argv) das_time dt; for(int i = 0; i < NUM_RECS; ++i){ dt_parsetime(g_aTimes[i], &dt); - DasAry_append(aTime, (const byte*)(&dt), 1); + DasAry_append(aTime, (const ubyte*)(&dt), 1); } DasVar* vTime = new_DasVarArray(aTime, SCALAR_3(0, DEGEN, DEGEN)); @@ -6015,7 +6015,7 @@ int main(int argc, char** argv) DasAry* aFreq = new_DasAry( "pulse_freq", vtFloat, 0, NULL, RANK_1(0), UNIT_HERTZ ); - DasAry_append(aFreq, (const byte*)g_aFreq, 160); + DasAry_append(aFreq, (const ubyte*)g_aFreq, 160); DasVar* vFreq = new_DasVarArray(aFreq, SCALAR_3(DEGEN, 0, DEGEN)); fprintf(stderr, " %s\n\n", DasVar_toStr(vFreq, sBuf, 511)); @@ -6052,9 +6052,9 @@ int main(int argc, char** argv) /* Axis 0,1,2: Echo returns */ units = Units_fromStr("V**2 m**-2 Hz**-1"); const float rFill = DAS_FILL_VALUE; - const byte* pFill = (const byte*)&rFill; + const ubyte* pFill = (const ubyte*)&rFill; DasAry* aEcho = new_DasAry("echo",vtFloat,0, pFill, RANK_3(0,160,80), units); - DasAry_append(aEcho, (const byte*)g_aAmp, 3*160*80); + DasAry_append(aEcho, (const ubyte*)g_aAmp, 3*160*80); DasVar* vEcho = new_DasVarArray(aEcho, SCALAR_3(0, 1, 2)); fprintf(stderr, " %s\n\n", DasVar_toStr(vEcho, sBuf, 511)); @@ -6066,7 +6066,7 @@ int main(int argc, char** argv) /* Axis 0,2: Apparent altitude of echo via variable math */ units = Units_fromStr(g_sMexAlt); DasAry* aMexAlt = new_DasAry("mex_alt",vtFloat,0, pFill, RANK_1(0), units); - DasAry_append(aMexAlt, (const byte*)g_aMexAlt, 3); + DasAry_append(aMexAlt, (const ubyte*)g_aMexAlt, 3); DasVar* vMexAlt = new_DasVarArray(aMexAlt, SCALAR_3(0, DEGEN, DEGEN)); DasVar* vAppAlt = new_DasVarBinary("app_alt", vMexAlt, "-", vRange); @@ -6168,7 +6168,7 @@ int main(int argc, char** argv) }; for(int i = 0; i < 4; ++i){ - DasAry_append(aEvents, (const byte*)(s[i]), strlen(s[i]) + 1); + DasAry_append(aEvents, (const ubyte*)(s[i]), strlen(s[i]) + 1); DasAry_markEnd(aEvents, DIM1); } @@ -6192,10 +6192,10 @@ int main(int argc, char** argv) int16_t level1Vecs[][3] = {{1,-2,3},{4,-5,6},{7,-8,9},{10,-11,12}}; DasAry* aVecs = new_DasAry("level1", vtShort, 0, NULL, RANK_2(0,3), NULL); - DasAry_append(aVecs, (const byte*)level1Vecs, 12); + DasAry_append(aVecs, (const ubyte*)level1Vecs, 12); DasVar* vL1Vecs = new_DasVarVecAry( - aVecs, VEC_1(0), "gsm", 99, DASFRM_CARTESIAN, 3, (const byte*)(byte[3]){0,2,1} + aVecs, VEC_1(0), "gsm", 99, DASFRM_CARTESIAN, 3, (const ubyte*)(ubyte[3]){0,2,1} ); DasVar_get(vL1Vecs, IDX0(2), &dm); From 44ff7377e74371aeaa59174987726947c7d11be7 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Thu, 15 Feb 2024 15:15:03 -0600 Subject: [PATCH 14/40] Rank 3 header unittest passes --- das2/builder.c | 12 +-- das2/codec.c | 3 +- das2/dataset.c | 2 +- das2/serial.c | 146 +++++++++++++++++++++---------- das2/stream.c | 12 ++- das2/value.c | 7 +- schema/das-basic-stream-v3.0.xsd | 2 +- test/ex12_sounder_xyz.d3t | 2 +- 8 files changed, 124 insertions(+), 62 deletions(-) diff --git a/das2/builder.c b/das2/builder.c index 9874557..7534a07 100644 --- a/das2/builder.c +++ b/das2/builder.c @@ -490,7 +490,7 @@ DasDs* _DasDsBldr_initXY(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) /* add the new array to the DS so it has somewhere to put this item from * the packets */ - if(! DasDs_addAry(pDs, pAry) ) return NULL; + if(DasDs_addAry(pDs, pAry) != DAS_OKAY) return NULL; /* Remember how to fill this array. This will get more complicated * when variable length packets are introduced */ @@ -613,7 +613,7 @@ DasDs* _DasDsBldr_initXYZ(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) /* add the new array to the DS so it has somewhere to put this item from * the packets */ - if(! DasDs_addAry(pDs, pAry) ) return NULL; + if(DasDs_addAry(pDs, pAry) != DAS_OKAY) return NULL; /* Remember how to fill this array. This will get more complicated * when variable length packets are introduced. So this is item 'u' @@ -819,7 +819,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) pAry = new_DasAry(pPlaneId, vtDouble, 0, NULL, RANK_1(0), pPlane->units); if(pAry == NULL) return NULL; DasAry_setSrc(pAry, PktDesc_getId(pPd), u, 1); - if(!DasDs_addAry(pDs, pAry)) return NULL; + if(DasDs_addAry(pDs, pAry) != DAS_OKAY) return NULL; pXDim = _DasDsBldr_getDim( pPlane, pPd, pSd, 'x', pDs, DASDIM_COORD, pPlaneId, @@ -848,7 +848,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) ); if(pAry == NULL) return NULL; DasAry_setSrc(pAry, PktDesc_getId(pPd), u, 1); - if(!DasDs_addAry(pDs, pAry)) return NULL; + if(DasDs_addAry(pDs, pAry) != DAS_OKAY) return NULL; /* Assume that extra Y values are more coordinates unless told * otherwise by a setting of some sort that I don't yet know */ @@ -888,7 +888,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) } pAry = new_DasAry(pYTagId, vtDouble, 0, NULL, RANK_1(uItems), Yunits); if(pAry == NULL) return NULL; - if(!DasDs_addAry(pDs, pAry)) return NULL; + if(DasDs_addAry(pDs, pAry) != DAS_OKAY) return NULL; pYTags = _DasDsBldr_yTagVals(pPlane); /* Use put instead of append since we've already allocated the space */ @@ -952,7 +952,7 @@ DasDs* _DasDsBldr_initYScan(StreamDesc* pSd, PktDesc* pPd, const char* pGroup) sAryId, vtDouble, 0, (const ubyte*)&fill, RANK_2(0, uItems), Zunits ); if(pAry == NULL) return NULL; - if(!DasDs_addAry(pDs, pAry)) return NULL; + if(DasDs_addAry(pDs, pAry) != DAS_OKAY) return NULL; DasAry_setSrc(pAry, PktDesc_getId(pPd), u, uItems); pDim = _DasDsBldr_getDim( diff --git a/das2/codec.c b/das2/codec.c index 7fc9e00..38aafec 100644 --- a/das2/codec.c +++ b/das2/codec.c @@ -166,7 +166,8 @@ DasErrCode DasCodec_init( if(strcmp(sEncType, "utf8") != 0){ goto UNSUPPORTED; } - + + pThis->vtBuf = vtText; pThis->uProc |= DASENC_TEXT; // Deal with the text types diff --git a/das2/dataset.c b/das2/dataset.c index e99fa31..70ebb6a 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -348,7 +348,7 @@ DasErrCode DasDs_addFixedCodec( /* Find the array with this ID */ DasAry* pAry = DasDs_getAryById(pThis, sAryId); if(pAry == NULL) - return das_error(DASERR_DS, "An array with id '%s' found", sAryId); + return das_error(DASERR_DS, "An array with id '%s' was not found", sAryId); DasCodec* pCodec = (DasCodec*) &(pThis->aPktEncs[pThis->uSzEncs]); diff --git a/das2/serial.c b/das2/serial.c index 8a45ccd..3d11ec9 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -57,7 +57,7 @@ struct serial_xml_context { char sPropUnits[_UNIT_BUF_SZ+1]; char sPropName[_NAME_BUF_SZ+1]; char sPropType[_TYPE_BUF_SZ+1]; - DasAry* pPropVal; + DasAry aPropVal; /* saving attributes so they can be used when var creation is ready... */ bool bInVar; @@ -122,7 +122,7 @@ static void _serial_clear_var_section(struct serial_xml_context* pCtx) memset(pCtx->valSemantic, 0, _VAL_SEMANTIC_SZ); memset(pCtx->valStorage, 0, _VAL_STOREAGE_SZ); memset(pCtx->varCompDirs, 0,DASFRM_NAME_SZ*DASFRM_MAX_DIRS); - memset(pCtx->aVarMap, 0, DASIDX_MAX*sizeof(ptrdiff_t)); + for(int i = 0; i < DASIDX_MAX; ++i) pCtx->aVarMap[i] = DASIDX_UNUSED; memset(pCtx->aSeqMin, 0, 8); memset(pCtx->aSeqInter, 0, 8); @@ -143,8 +143,11 @@ static void _serial_clear_var_section(struct serial_xml_context* pCtx) /* ************************************************************************* */ +#define _IDX_FOR_DS false +#define _IDX_FOR_VAR true + static DasErrCode _serial_parseIndex( - const char* sIndex, int nRank, ptrdiff_t* pMap, bool bUnusedOkay, + const char* sIndex, int nRank, ptrdiff_t* pMap, bool bInVar, const char* sElement ){ const char* sBeg = sIndex; @@ -163,7 +166,7 @@ static DasErrCode _serial_parseIndex( pMap[iExternIdx] = DASIDX_RAGGED; else{ if(sBeg[0] == '-'){ - if(!bUnusedOkay){ + if(!bInVar){ return das_error(DASERR_SERIAL, "Unused array indexes are not allowed in element <%s>", sElement ); @@ -200,7 +203,7 @@ static DasErrCode _serial_parseIndex( static DasErrCode _serial_initfill(ubyte* pBuf, int nBufLen, das_val_type vt, const char* sFill){ if((sFill == NULL)||(sFill[0] == '\0')){ if(nBufLen >= das_vt_size(vt)){ - memcpy(pBuf, das_vt_fill, das_vt_size(vt)); + memcpy(pBuf, das_vt_fill(vt), das_vt_size(vt)); return DAS_OKAY; } else{ @@ -236,7 +239,7 @@ static void _serial_onOpenDs(struct serial_xml_context* pCtx, const char** psAtt int nRank = 0; int id = pCtx->nPktId; - if((sRank!=NULL)||(sscanf(sRank, "%d", &nRank) != 1)){ + if((sRank==NULL)||(sscanf(sRank, "%d", &nRank) != 1)){ pCtx->nDasErr = das_error(DASERR_SERIAL, "Invalid or missing rank attribute for %02d", id); return; } @@ -256,7 +259,7 @@ static void _serial_onOpenDs(struct serial_xml_context* pCtx, const char** psAtt } DasErrCode nRet; - if((nRet = _serial_parseIndex(sIndex, nRank, pCtx->aExtShape, false, "dataset")) != DAS_OKAY){ + if((nRet = _serial_parseIndex(sIndex, nRank, pCtx->aExtShape, _IDX_FOR_DS, "dataset")) != DAS_OKAY){ pCtx->nDasErr = nRet; return; } @@ -280,8 +283,8 @@ static void _serial_onOpenDim( int id = pCtx->nPktId; - if(strcmp(sDimType, "coord")) dt = DASDIM_COORD; - else if (strcmp(sDimType, "date")) dt = DASDIM_DATA; + if(strcmp(sDimType, "coord") == 0) dt = DASDIM_COORD; + else if (strcmp(sDimType, "data") == 0) dt = DASDIM_DATA; else{ pCtx->nDasErr = das_error(DASERR_SERIAL, "Unknown physical dimension type '%s'", sDimType); return; @@ -378,6 +381,9 @@ static void _serial_onOpenVar( int id = pCtx->nPktId; char sIndex[32] = {'\0'}; + /* Assume center until proven otherwise */ + strncpy(pCtx->varUse, "center", DASDIM_ROLE_SZ-1); + for(int i = 0; psAttr[i] != NULL; i+=2){ if(strcmp(psAttr[i], "use") == 0) strncpy(pCtx->varUse, psAttr[i+1], DASDIM_ROLE_SZ-1); @@ -395,14 +401,29 @@ static void _serial_onOpenVar( ); } - if(!_serial_parseIndex(sIndex, DasDs_rank(pCtx->pDs), pCtx->aExtShape, false, sVarElType)){ - pCtx->nDasErr = das_error(DASERR_SERIAL, - "Invalid index space definition '%s' for dataset %02d of rank", sIndex, id, - DasDs_rank(pCtx->pDs) - ); + /* Get the mapping from dataset space to array space */ + ptrdiff_t aVarExtShape[DASIDX_MAX]; + int nRet = _serial_parseIndex( + sIndex, DasDs_rank(pCtx->pDs), aVarExtShape, _IDX_FOR_VAR, sVarElType + ); + if(nRet != DAS_OKAY){ + pCtx->nDasErr = nRet; return; } + /* Make the var map, insure all unused index positions are set as unused */ + int j = 0; + int nDsRank = DasDs_rank(pCtx->pDs); + for(int i = 0; i < DASIDX_MAX; ++i){ + if((i < nDsRank) &&(aVarExtShape[i] != DASIDX_UNUSED)){ + pCtx->aVarMap[i] = j; + j++; + } + else{ + pCtx->aVarMap[i] = DASIDX_UNUSED; + } + } + if(pCtx->varUse[0] == '\0') /* Default to a usage of 'center' */ strncpy(pCtx->varUse, "center", DASDIM_ROLE_SZ-1); @@ -521,14 +542,16 @@ static void _serial_onSequence(struct serial_xml_context* pCtx, const char** psA return; } - das_val_type vt = das_vt_fromStr(pCtx->valStorage); + /* Item type can't be set when the variable opens because we could bubble it + * up from the packet description */ + pCtx->varItemType = das_vt_fromStr(pCtx->valStorage); DasErrCode nRet; ; - if((nRet = das_value_fromStr(pCtx->aSeqMin, _VAL_SEQ_CONST_SZ, vt, sMin)) != 0){ + if((nRet = das_value_fromStr(pCtx->aSeqMin, _VAL_SEQ_CONST_SZ, pCtx->varItemType, sMin)) != 0){ pCtx->nDasErr = nRet; return; } - if((nRet = das_value_fromStr(pCtx->aSeqInter, _VAL_SEQ_CONST_SZ, vt, sInter)) != 0){ + if((nRet = das_value_fromStr(pCtx->aSeqInter, _VAL_SEQ_CONST_SZ, pCtx->varItemType, sInter)) != 0){ pCtx->nDasErr = nRet; } } @@ -550,21 +573,22 @@ static DasErrCode _serial_makeVarAry(struct serial_xml_context* pCtx, bool bHand /* Determine the array indexes from the variable indexes */ size_t aShape[DASIDX_MAX]; int nAryRank = 0; /* <-- current array index then bumped to the rank */ - for(int i = 0; i < DASIDX_MAX; ++i){ + int nDsRank = DasDs_rank(pCtx->pDs); + for(int i = 0; i < nDsRank; ++i){ if(pCtx->aVarMap[i] == DASIDX_UNUSED) continue; - if(pCtx->aVarMap[i] == DASIDX_RAGGED){ + if(pCtx->aExtShape[pCtx->aVarMap[i]] == DASIDX_RAGGED){ aShape[nAryRank] = 0; } else{ - if(pCtx->aVarMap[i] <= 0){ + if(pCtx->aExtShape[pCtx->aVarMap[i]] <= 0){ return das_error(DASERR_SERIAL, "Invalid array map for variable %s:%s in dataset id %d", DasDim_id(pCtx->pCurDim), pCtx->varUse, pCtx->nPktId ); } - aShape[nAryRank] = pCtx->aVarMap[i]; + aShape[nAryRank] = pCtx->aExtShape[pCtx->aVarMap[i]]; } ++nAryRank; @@ -581,16 +605,15 @@ static DasErrCode _serial_makeVarAry(struct serial_xml_context* pCtx, bool bHand vt = das_vt_fromStr(pCtx->valStorage); } else{ - - if((strcmp(pCtx->sValEncType, "utf8") == 0)&& - (strcmp(pCtx->valSemantic, "string") != 0)){ + vt = das_vt_store_type(pCtx->sValEncType, pCtx->nPktItemBytes, pCtx->valSemantic); + + if(vt == vtUnknown){ return das_error(DASERR_SERIAL, "Attribute 'storage' missing for non-string values encoded " "as text for variable %s:%s in dataset ID %d", DasDim_id(pCtx->pCurDim), pCtx->varUse, pCtx->nPktId ); } - vt = das_vt_store_type(pCtx->sValEncType, pCtx->nPktItemBytes, pCtx->valSemantic); } if(vt == vtUnknown){ @@ -625,10 +648,10 @@ static DasErrCode _serial_makeVarAry(struct serial_xml_context* pCtx, bool bHand } } - ubyte aFill[sizeof(DATUM_BUF_SZ)] = {0}; + ubyte aFill[DATUM_BUF_SZ] = {0}; if(bHandleFill){ - int nRet = _serial_initfill(aFill, sizeof(DATUM_BUF_SZ), vt, pCtx->sPktFillVal); + int nRet = _serial_initfill(aFill, DATUM_BUF_SZ, vt, pCtx->sPktFillVal); if(nRet != DAS_OKAY) return nRet; } @@ -640,6 +663,9 @@ static DasErrCode _serial_makeVarAry(struct serial_xml_context* pCtx, bool bHand if(uFlags > 0) DasAry_setUsage(pCtx->pCurAry, uFlags); + /* Add it to the dataset */ + DasDs_addAry(pCtx->pDs, pCtx->pCurAry); + return DAS_OKAY; } @@ -654,17 +680,17 @@ static void _serial_onPacket(struct serial_xml_context* pCtx, const char** psAtt pCtx->varCategory = D2V_ARRAY; /* Only work with fixed types for now */ - int nReq = 0x0; + int nReq = 0x0; /* 1 = has num items, 2 = has encoding, 4 = has item bytes */ - int nValTermStat = 0x0; // 0x1 = needs a terminator - int nItemsTermStat = 0x0; // 0x2 = has the terminator array + int nValTermStat = 0x0; /* 0x1 = needs a terminator */ + int nItemsTermStat = 0x0; /* 0x2 = has the terminator array */ for(int i = 0; psAttr[i] != NULL; i+=2){ if(strcmp(psAttr[i], "numItems") == 0){ if(psAttr[i+1][0] == '*'){ pCtx->nPktItems = -1; - nValTermStat = 0x1; + nItemsTermStat = 0x1; } else{ if(sscanf(psAttr[i+1], "%d", &(pCtx->nPktItems)) != 1){ @@ -686,7 +712,7 @@ static void _serial_onPacket(struct serial_xml_context* pCtx, const char** psAtt if(strcmp(psAttr[i], "itemBytes") == 0){ if(psAttr[i+1][0] == '*'){ pCtx->nPktItemBytes = -1; - nItemsTermStat = 0x1; + nValTermStat = 0x1; } if(sscanf(psAttr[i+1], "%d", &(pCtx->nPktItemBytes)) != 1){ pCtx->nDasErr = das_error(DASERR_SERIAL, @@ -721,13 +747,16 @@ static void _serial_onPacket(struct serial_xml_context* pCtx, const char** psAtt " 'encoding', 'numItems', or 'itemBytes' is missing.", pCtx->nPktId ); } - if(((nValTermStat & 0x1) != 0x1 )&&(nValTermStat != 0x7)){ + + /* If the values aren't fixed length, I need a value terminator */ + if(((nValTermStat & 0x1) == 0x1 )&&(nValTermStat != 0x2)){ pCtx->nDasErr = das_error(DASERR_SERIAL, - "Attribute 'valTerm' missing for variable length item in dataset " - "ID %02d", pCtx->nPktId + "Attribute 'valTerm' missing for variable length values in for " + "%s:%s in dataset ID %02d", DasDim_id(pCtx->pCurDim), pCtx->varUse, + pCtx->nPktId ); } - if(((nItemsTermStat & 0x1) != 0x1 )&&(nItemsTermStat != 0x7)){ + if(((nItemsTermStat & 0x1) == 0x1 )&&(nItemsTermStat != 0x2)){ pCtx->nDasErr = das_error(DASERR_SERIAL, "Attribute 'itemsTerm' missing for variable number of items per " "packet in dataset ID %02d", pCtx->nPktId @@ -757,6 +786,23 @@ static void _serial_onOpenVals(struct serial_xml_context* pCtx, const char** psA pCtx->bInValues = true; assert(pCtx->pCurAry == NULL); + /* A fixed set of values can't map to a variable length index */ + int nDsRank = DasDs_rank(pCtx->pDs); + for(int i = 0; i < nDsRank; ++i){ + if(pCtx->aVarMap[i] != DASIDX_UNUSED){ + if(pCtx->aExtShape[i] == DASIDX_RAGGED){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "The external shape of variable %s:%s in dataset ID %02d is not " + "consistant with the shape of the overall dataset. A fixed set of " + "values in index %d, can't map to a dataset with a variable length " + "in index %d.", + DasDim_id(pCtx->pCurDim), pCtx->varUse, pCtx->nPktId, i, i + ); + return; + } + } + } + for(int i = 0; psAttr[i] != NULL; i+=2){ pCtx->nDasErr = das_error(DASERR_NOTIMP, @@ -855,7 +901,7 @@ static void _serial_xmlCharData(void* pUserData, const char* sChars, int nLen) return; if(pCtx->bInProp){ - DasAry* pAry = pCtx->pPropVal; + DasAry* pAry = &(pCtx->aPropVal); DasAry_append(pAry, (ubyte*) sChars, nLen); return; } @@ -933,7 +979,7 @@ static void _serial_onCloseProp(struct serial_xml_context* pCtx, DasDesc* pDest) if(pCtx->nDasErr != DAS_OKAY) return; - DasAry* pAry = pCtx->pPropVal; + DasAry* pAry = &(pCtx->aPropVal); DasAry_append(pAry, NULL, 1); // Null terminate the value string size_t uValLen = 0; const char* sValue = DasAry_getCharsIn(pAry, DIM0, &uValLen); @@ -971,10 +1017,11 @@ static void _serial_onCloseVals(struct serial_xml_context* pCtx){ /* Cross check variable size against the array size, make sure they */ /* match. */ size_t uExpect = 0; - for(int i = 0; i < DASIDX_MAX; ++i){ - if(pCtx->aVarMap[i] > 0){ - if(uExpect == 0) uExpect = pCtx->aVarMap[i]; - else uExpect *= pCtx->aVarMap[i]; + int nDsRank = DasDs_rank(pCtx->pDs); + for(int i = 0; i < nDsRank; ++i){ + if((pCtx->aVarMap[i] >= 0)&&(pCtx->aExtShape[pCtx->aVarMap[i]] > 0)){ + if(uExpect == 0) uExpect = pCtx->aExtShape[ pCtx->aVarMap[i] ]; + else uExpect *= pCtx->aExtShape[ pCtx->aVarMap[i] ]; } } @@ -982,7 +1029,7 @@ static void _serial_onCloseVals(struct serial_xml_context* pCtx){ ptrdiff_t aShape[DASIDX_MAX] = {0}; DasAry_shape(pCtx->pCurAry, aShape); size_t uHave = 0; - for(int i = 0; i < DASIDX_MAX; ++i){ + for(int i = 1; i < DASIDX_MAX; ++i){ if(aShape[i] > 0){ if(uHave == 0) uHave = aShape[i]; @@ -993,8 +1040,8 @@ static void _serial_onCloseVals(struct serial_xml_context* pCtx){ if(uHave != uExpect){ pCtx->nDasErr = das_error(DASERR_SERIAL, - "Expected %zu header values for variable %s:%s in dataset ID, read %zu", - uExpect, DasDim_id(pCtx->pCurDim), pCtx->varUse, uHave + "Expected %zu header values for variable %s:%s in dataset ID %02d, read %zu", + uExpect, DasDim_id(pCtx->pCurDim), pCtx->varUse, pCtx->nPktId, uHave ); return; } @@ -1206,6 +1253,10 @@ DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int das_error(DASERR_SERIAL, "Couldn't create XML parser\n" ); return NULL; } + + /* Make a 1-D array to hold the current property value during string accumulation */ + DasAry_init(&(context.aPropVal), "streamprops", vtUByte, 0, NULL, RANK_1(0), NULL); + XML_SetUserData(pParser, (void*)&context); XML_SetElementHandler(pParser, _serial_xmlElementBeg, _serial_xmlElementEnd); XML_SetCharacterDataHandler(pParser, _serial_xmlCharData); @@ -1219,10 +1270,13 @@ DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int goto ERROR; } - if((context.nDasErr == DAS_OKAY)&&(context.pDs != NULL)) + if((context.nDasErr == DAS_OKAY)&&(context.pDs != NULL)){ + DasAry_deInit(&(context.aPropVal)); /* Avoid memory leaks */ return context.pDs; + } ERROR: + DasAry_deInit(&(context.aPropVal)); /* Avoid memory leaks */ XML_ParserFree(pParser); if(context.pDs) // Happens, for example, if vector has no components del_DasDs(context.pDs); diff --git a/das2/stream.c b/das2/stream.c index ab90101..ccfd860 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -275,8 +275,16 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) return das_error(DASERR_STREAM, "Packet Descriptor already belongs to different " "stream"); - if(pPd->base.parent == (DasDesc*)pThis) - return das_error(DASERR_STREAM, "Packet Descriptor is already part of the stream"); + /* Check uniqueness */ + if(pPd->base.parent == (DasDesc*)pThis){ + for(int i = 0; i < MAX_PKTIDS; ++i) + if(pThis->descriptors[i] != NULL) + if(pThis->descriptors[i]->type == PACKET) + if(PktDesc_equalFormat(pPd, (PktDesc*)(pThis->descriptors[i]))) + return das_error(DASERR_STREAM, + "Packet Descriptor is already part of the stream" + ); + } if(nPktId < 1 || nPktId > 99) return das_error(DASERR_STREAM, "Illegal packet id in addPktDesc: %02d", nPktId); diff --git a/das2/value.c b/das2/value.c index d96179e..81049fc 100644 --- a/das2/value.c +++ b/das2/value.c @@ -130,18 +130,17 @@ das_val_type das_vt_fromStr(const char* sStorage) if(strcasecmp(sStorage, "ulong") == 0) return vtLong; if(strcasecmp(sStorage, "byte") == 0) return vtByte; if(strcasecmp(sStorage, "ubyte") == 0) return vtUByte; - if(strcasecmp(sStorage, "das_time") == 0) return vtTime; if(strcasecmp(sStorage, "index_info") == 0) return vtIndex; if(strcasecmp(sStorage, "utf8") == 0) return vtText; if(strcasecmp(sStorage, "char*") == 0) return vtText; - if(strcasecmp(sStorage, "das_geovec") == 0) return vtGeoVec; if(strcasecmp(sStorage, "ubyte*") == 0) return vtByteSeq; return vtUnknown; } /* Useful for picking a storage type when it's not explicity stated */ -das_val_type das_vt_store_type(const char* sEncType, int nItemBytes, const char* sInterp) -{ +das_val_type das_vt_store_type( + const char* sEncType, int nItemBytes, const char* sInterp +){ if(strcmp(sEncType, "none") == 0){ return vtByteSeq; } diff --git a/schema/das-basic-stream-v3.0.xsd b/schema/das-basic-stream-v3.0.xsd index 5d515ce..102666e 100644 --- a/schema/das-basic-stream-v3.0.xsd +++ b/schema/das-basic-stream-v3.0.xsd @@ -305,7 +305,7 @@ --> - + diff --git a/test/ex12_sounder_xyz.d3t b/test/ex12_sounder_xyz.d3t index 8ed4922..9a71e14 100644 --- a/test/ex12_sounder_xyz.d3t +++ b/test/ex12_sounder_xyz.d3t @@ -1,6 +1,6 @@ |Sx||50| -|Hx|1|3566| +|Hx|1|3459| From a173bf771aa285fedc611d5b995b7db373fbbed4 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Thu, 15 Feb 2024 21:39:14 -0600 Subject: [PATCH 15/40] All data structure creation and printing tests pass --- das2/dataset.c | 33 ++++---------- das2/descriptor.c | 75 ++++++++++++++++++++++++++++++ das2/descriptor.h | 18 +++++++- das2/dimension.c | 25 +++------- das2/frame.c | 63 ++++++++++++++++++++++++++ das2/frame.h | 6 +++ das2/io.c | 2 +- das2/processor.h | 2 +- das2/property.c | 5 +- das2/serial.c | 43 ++++++++++++++++-- das2/stream.c | 78 ++++++++++++++++++++++++++++---- das2/stream.h | 20 ++++++-- das2/variable.c | 62 ++++++++++++++++++++----- das2/variable.h | 1 + schema/das-basic-stream-v3.0.xsd | 7 +++ test/TestV3Read.c | 64 ++++++++++++++++++++------ test/ex15_vector_frame.d3b | 6 +-- test/tag_test.dNt | 4 +- utilities/das2_from_das1.c | 2 +- utilities/das2_histo.c | 2 +- utilities/das2_psd.c | 2 +- 21 files changed, 423 insertions(+), 97 deletions(-) diff --git a/das2/dataset.c b/das2/dataset.c index 70ebb6a..13c129a 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -371,8 +371,8 @@ char* DasDs_toStr(const DasDs* pThis, char* sBuf, int nLen) { char sDimBuf[1024] = {'\0'}; int nWritten = 0; /* Not necessarily the actual number of bytes written - * but good enough to know if we should exit due to - * running out of buffer space */ + * but good enough to know if we should exit due to + * running out of buffer space */ char* pWrite = sBuf; const char* pRead = NULL; @@ -388,9 +388,8 @@ char* DasDs_toStr(const DasDs* pThis, char* sBuf, int nLen) ptrdiff_t aShape[DASIDX_MAX]; DasDs_shape(pThis, aShape); - char* pSubWrite; - pSubWrite = das_shape_prnRng(aShape, pThis->nRank, pThis->nRank, pWrite, nLen); - nLen -= pSubWrite - pWrite; + char* pSubWrite = das_shape_prnRng(aShape, pThis->nRank, pThis->nRank, pWrite, nLen); + nLen -= (pSubWrite - pWrite); pWrite = pSubWrite; if(nLen < 20) return sBuf; @@ -398,30 +397,16 @@ char* DasDs_toStr(const DasDs* pThis, char* sBuf, int nLen) /*nWritten = snprintf(pWrite, nLen - 1, " | contains ...\n"); pWrite += nWritten; nLen -= nWritten;*/ - /* Larry wanted the properties printed as well */ - char sInfo[128] = {'\0'}; - size_t u = 0; - const char* sName = NULL; - const char* sType = NULL; - const char* sVal = NULL; - const DasDesc* pBase = (const DasDesc*)pThis; - size_t uProps = DasDesc_length(pBase); - for(u = 0; u < uProps; ++u){ - sName = DasDesc_getNameByIdx(pBase, u); - sType = DasDesc_getTypeByIdx(pBase, u); - sVal = DasDesc_getValByIdx(pBase, u); - strncpy(sInfo, sVal, 48); sInfo[48] = '\0'; - nWritten = snprintf(pWrite, nLen - 1, " Property: %s | %s | %s\n", - sType, sName, sVal); - pWrite += nWritten; nLen -= nWritten; - if(nLen < 4) return sBuf; - } + pSubWrite = DasDesc_info((DasDesc*)pThis, pWrite, nLen, " "); + nLen -= (pSubWrite - pWrite); + pWrite = pSubWrite; + /* *pWrite = '\n'; ++pWrite; --nLen; */ nWritten = snprintf(pWrite, nLen-1, "\n "); pWrite += nWritten; nLen -= nWritten; /* Do data first... */ - for(u = 0; u < pThis->uDims; ++u){ + for(uint32_t u = 0; u < pThis->uDims; ++u){ if(pThis->lDims[u]->dtype != DASDIM_DATA) continue; diff --git a/das2/descriptor.c b/das2/descriptor.c index 11658a5..051229a 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -88,6 +88,66 @@ void DasDesc_freeProps(DasDesc* pThis){ DasAry_deInit(&(pThis->properties)); } +/* ************************************************************************* */ +/* Property summaries */ + +char* DasDesc_info(const DasDesc* pThis, char* sBuf, int nLen, char* sIndent) +{ + char* pWrite = sBuf; + + const DasAry* pProps = &(pThis->properties); + size_t uProps = DasAry_lengthIn(pProps, DIM0); + + size_t uPropLen = 0; + for(size_t u = 0; u < uProps; ++u){ + if(nLen < 80) + return pWrite; + + const DasProp* pProp = (const DasProp*) DasAry_getBytesIn( + pProps, DIM1_AT(u), &uPropLen + ); + + if(!DasProp_isValid(pProp)) + continue; + + int nWritten = snprintf(pWrite, nLen - 1, + "%sProperty: %s | %s | ", sIndent, DasProp_name(pProp), + DasProp_typeStr3(pProp) + ); + pWrite += nWritten; nLen -= nWritten; + + if(nLen < 64) + return pWrite; + + size_t uToWrite = strlen(DasProp_value(pProp)); + bool bElipse = false; + if(uToWrite > 48){ + uToWrite = 48; + bElipse = true; + } + + strncpy(pWrite, DasProp_value(pProp), uToWrite); + pWrite += uToWrite; nLen -= uToWrite; + if(bElipse){ + strcpy(pWrite, "..."); + pWrite += 3; nLen -= 3; + } + + if((pProp->units != NULL)&&(pProp->units != UNIT_DIMENSIONLESS)){ + if(nLen < 32){ + return pWrite; + } + + nWritten = snprintf(pWrite, nLen - 1, " (%s)", Units_toStr(pProp->units)); + pWrite += nWritten; nLen -= nWritten; + } + + *pWrite = '\n'; ++pWrite; --nLen; + if(nLen < 40) return pWrite; + } + return pWrite; +} + /* ************************************************************************* */ /* Ownership */ @@ -291,6 +351,21 @@ const char* DasDesc_getTypeByIdx(const DasDesc* pThis, size_t uIdx) return DasProp_typeStr2(pProp); } +const char* DasDesc_getTypeByIdx3(const DasDesc* pThis, size_t uIdx) +{ + const DasAry* pProps = &(pThis->properties); + size_t uProps = DasAry_lengthIn(pProps, DIM0); + if(uIdx >= uProps) + return NULL; + + size_t uPropLen; + const DasProp* pProp = (const DasProp*) DasAry_getBytesIn( + pProps, DIM1_AT(uIdx), &uPropLen + ); + + return DasProp_typeStr3(pProp); +} + const char* DasDesc_getStr(const DasDesc* pThis, const char* sName) { return DasDesc_get(pThis, sName); diff --git a/das2/descriptor.h b/das2/descriptor.h index 19dcd70..44aea02 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -126,8 +126,19 @@ typedef struct das_descriptor { */ /** @{ */ +/** Initialize a memory location as a valid das descriptor + * + * @memberof DasDesc + */ DAS_API void DasDesc_init(DasDesc* pThis, desc_type_t type); + +/** Print 1-line versions of each property in a descriptor + * + * @memberof DasDesc + */ +DAS_API char* DasDesc_info(const DasDesc* pThis, char* sBuf, int nLen, char* sIndent); + /* Make an 'Unknown' type descriptor, incase you like using descriptor objects * to store things in your code, not used by the library * @memberof DasDesc @@ -220,7 +231,12 @@ DAS_API const char* DasDesc_getValByIdx(const DasDesc* pThis, size_t uIdx); */ DAS_API const char* DasDesc_getTypeByIdx(const DasDesc* pThis, size_t uIdx); - + +/** Get a data type of a property by an index, das3 covention + * @memberof DasDesc + */ +DAS_API const char* DasDesc_getTypeByIdx3(const DasDesc* pThis, size_t uIdx); + /** Determine if a property is present in a Descriptor or it's ancestors. * * @param pThis the descriptor object to query diff --git a/das2/dimension.c b/das2/dimension.c index 644ce5f..928e7a1 100644 --- a/das2/dimension.c +++ b/das2/dimension.c @@ -137,37 +137,26 @@ char* DasDim_toStr(const DasDim* pThis, char* sBuf, int nLen) { size_t u = 0; char* pWrite = sBuf; - char sInfo[256] = {'\0'}; const char* sDimType = "Data"; if(pThis->dtype == DASDIM_COORD) sDimType = "Coordinate"; int nWritten = snprintf(sBuf, nLen - 1, "%s Dimension: %s\n", sDimType, pThis->sDim); pWrite += nWritten; nLen -= nWritten; - if(nLen < 1) return sBuf; + if(nLen < 40) return sBuf; /* Larry wanted the properties printed as well */ - const char* sName = NULL; - const char* sType = NULL; - const char* sVal = NULL; - const DasDesc* pBase = (const DasDesc*)pThis; - size_t uProps = DasDesc_length(pBase); - for(u = 0; u < uProps; ++u){ - sName = DasDesc_getNameByIdx(pBase, u); - sType = DasDesc_getTypeByIdx(pBase, u); - sVal = DasDesc_getValByIdx(pBase, u); - strncpy(sInfo, sVal, 48); sInfo[48] = '\0'; - nWritten = snprintf(pWrite, nLen - 1, " Property: %s | %s | %s\n", - sType, sName, sVal); - pWrite += nWritten; nLen -= nWritten; - if(nLen < 1) return sBuf; - } + char* pSubWrite = DasDesc_info((DasDesc*)pThis, pWrite, nLen, " "); + bool bReturn = (pSubWrite != pWrite); + nLen -= (pSubWrite - pWrite); + pWrite = pSubWrite; if(nLen < 4) return sBuf; - if(uProps > 0){ *pWrite = '\n'; ++pWrite; --nLen; } + if(bReturn){ *pWrite = '\n'; ++pWrite; --nLen; } /* Yea this is order N^2, but we never have that many variables in a dim */ /* Do the recognized variables first */ + char sInfo[256] = {'\0'}; for(int nOrder = 0; nOrder < 16; ++nOrder){ for(u = 0; u < pThis->uVars; ++u){ diff --git a/das2/frame.c b/das2/frame.c index 22c445e..1ab6d66 100644 --- a/das2/frame.c +++ b/das2/frame.c @@ -51,6 +51,69 @@ DasFrame* new_DasFrame(DasDesc* pParent, ubyte id, const char* sName, const char return NULL; } +char* DasFrame_info(const DasFrame* pThis, char* sBuf, int nLen) +{ + if(nLen < 30) + return sBuf; + + char* pWrite = sBuf; + + int nWritten = snprintf(pWrite, nLen - 1, "\n Vector Frame %02hhu: %s |", + pThis->id, pThis->name + ); + + pWrite += nWritten; + nLen -= nWritten; + + /* The directions */ + for(uint32_t u = 0; u < pThis->ndirs; ++u){ + if(nLen < 40) return pWrite; + + if(u > 0){ + *pWrite = ','; ++pWrite; *pWrite = ' '; ++pWrite; + nLen -= 2; + } + else{ + *pWrite = ' '; ++pWrite; --nLen; + } + strncpy(pWrite, pThis->dirs[u], 40); + nWritten = strlen(pThis->dirs[u]); + pWrite += nWritten; nLen -= nWritten; + } + + /* Type and inertial */ + if(nLen < 40) return pWrite; + switch(pThis->flags & DASFRM_TYPE_MASK){ + case DASFRM_CARTESIAN : nWritten = snprintf(pWrite, nLen - 1, " | cartesian"); break; + case DASFRM_POLAR : nWritten = snprintf(pWrite, nLen - 1, " | polar"); break; + case DASFRM_SPHERE_SURFACE: nWritten = snprintf(pWrite, nLen - 1, " | sphere_surface"); break; + case DASFRM_CYLINDRICAL : nWritten = snprintf(pWrite, nLen - 1, " | cylindrical"); break; + case DASFRM_SPHERICAL : nWritten = snprintf(pWrite, nLen - 1, " | spherical"); break; + default: nWritten = 0; + } + + pWrite += nWritten; nLen -= nWritten; + if(nLen < 40) return pWrite; + + if(pThis->flags & DASFRM_INERTIAL) + nWritten = snprintf(pWrite, nLen - 1, " (inertial)\n"); + else + nWritten = snprintf(pWrite, nLen - 1, " (non-inertial)\n"); + + pWrite += nWritten; nLen -= nWritten; + if(nLen < 40) return pWrite; + + char* pSubWrite = DasDesc_info((DasDesc*)pThis, pWrite, nLen, " "); + nLen -= (pSubWrite - pWrite); + pWrite = pSubWrite; + + if(nLen > 4){ + nWritten = snprintf(pWrite, nLen-1, "\n"); + pWrite += nWritten; nLen -= nWritten; + } + return pWrite; +} + void DasFrame_inertial(DasFrame* pThis, bool bInertial) { if(bInertial) diff --git a/das2/frame.h b/das2/frame.h index 4fcad8a..602c1b4 100644 --- a/das2/frame.h +++ b/das2/frame.h @@ -75,6 +75,12 @@ DAS_API DasFrame* new_DasFrame( DasDesc* pParent, ubyte id, const char* sName, const char* sType ); +/** Print a 1-line summary of a frame and then it's properties + * + * @memberof DasFrame + */ +DAS_API char* DasFrame_info(const DasFrame* pThis, char* sBuf, int nLen); + /** Change the frame name * @memberof DasFrame */ diff --git a/das2/io.c b/das2/io.c index 9bc289e..8db3105 100644 --- a/das2/io.c +++ b/das2/io.c @@ -1162,7 +1162,7 @@ DasErrCode _DasIO_handleDesc( StreamDesc_freeDesc(pSd, nPktId); } - if((nRet = StreamDesc_addPktDesc(pSd, (PktDesc*)pDesc, nPktId)) != 0) + if((nRet = StreamDesc_addPktDesc(pSd, pDesc, nPktId)) != 0) return nRet; } else{ diff --git a/das2/processor.h b/das2/processor.h index bd36c70..d99f4cd 100644 --- a/das2/processor.h +++ b/das2/processor.h @@ -87,7 +87,7 @@ typedef DasErrCode (*DsDescHandler)(StreamDesc* sd, DasDs* dd, void* ud); * new data were added * @param ud A pointer to a user data structure, may be NULL */ -typedef DasErrCode (*DsDataHandler)(StreamDesc* sd, DasDs* dd, ptrdiff_t* pi, void* ud); +typedef DasErrCode (*DsDataHandler)(StreamDesc* sd, DasDs* dd, void* ud); /** Callback functions that are invoked on Stream Close * callback function that is called at the end of the stream diff --git a/das2/property.c b/das2/property.c index cf1dc6b..83fca17 100644 --- a/das2/property.c +++ b/das2/property.c @@ -360,7 +360,8 @@ const char* DasProp_typeStr2(const DasProp* pProp) const char* DasProp_typeStr3(const DasProp* pProp) { - switch(pProp->flags & DASPROP_MULTI_MASK){ + uint64_t uInfo = pProp->flags & (DASPROP_TYPE_MASK |DASPROP_MULTI_MASK) ; + switch(uInfo){ case DASPROP_STRING |DASPROP_SINGLE: return "string"; case DASPROP_STRING |DASPROP_SET: return "stringArray"; case DASPROP_BOOL |DASPROP_SINGLE: return "bool"; @@ -374,7 +375,7 @@ const char* DasProp_typeStr3(const DasProp* pProp) case DASPROP_DATETIME|DASPROP_SINGLE: return "datetime"; case DASPROP_DATETIME|DASPROP_RANGE: return "datetimeRange"; case DASPROP_DATETIME|DASPROP_SET: return "datetimeArray"; - default: return NULL; + default: return ""; } } diff --git a/das2/serial.c b/das2/serial.c index 3d11ec9..94559e1 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -272,6 +272,39 @@ static void _serial_onOpenDs(struct serial_xml_context* pCtx, const char** psAtt } +static void _serial_onOpenProp(struct serial_xml_context* pCtx, const char** psAttr){ + + if(pCtx->nDasErr != DAS_OKAY) + return; + + pCtx->bInProp = true; + + strncpy(pCtx->sPropType, "string", _NAME_BUF_SZ-1); + for(int i = 0; psAttr[i] != NULL; i+=2){ + if(strcmp(psAttr[i],"type") == 0) + strncpy(pCtx->sPropType, psAttr[i+1],_NAME_BUF_SZ-1); + else if(strcmp(psAttr[i],"name") == 0) + strncpy(pCtx->sPropName, psAttr[i+1],_NAME_BUF_SZ-1); + else if(strcmp(psAttr[i],"units") == 0) + strncpy(pCtx->sPropUnits, psAttr[i+1],_NAME_BUF_SZ-1); + else{ + const char* sEl = (pCtx->pCurDim == NULL) ? "dataset" : ( + (pCtx->pCurDim->dtype == DASDIM_DATA) ? "data" : "coord" + ); + char sBuf[64] = {'\0'}; + if(pCtx->pCurDim == NULL) + snprintf(sBuf, 63, " ID %02d", pCtx->nPktId); + else + snprintf(sBuf, 63, " '%s' in dataset ID %02d", DasDim_id(pCtx->pCurDim), pCtx->nPktId); + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Unknown property attribute '%s' in properties for <%s>%s", + psAttr[i], sEl, sBuf + ); + return; + } + } +} + /* **************************************************************************** Making a dimension inside a dataset */ @@ -279,6 +312,9 @@ static void _serial_onOpenDim( struct serial_xml_context* pCtx, const char* sDimType, const char** psAttr ){ + if(pCtx->nDasErr != DAS_OKAY) + return; + enum dim_type dt = DASDIM_UNK; int id = pCtx->nPktId; @@ -858,8 +894,8 @@ static void _serial_xmlElementBeg(void* pUserData, const char* sElement, const c return; } if(strcmp(sElement, "p") == 0){ - if(pCtx->bInPropList) - pCtx->bInProp = true; + if(pCtx->bInPropList) + _serial_onOpenProp(pCtx, psAttr); return; } if((strcmp(sElement, "scalar") == 0)||(strcmp(sElement, "vector") == 0)){ @@ -980,7 +1016,8 @@ static void _serial_onCloseProp(struct serial_xml_context* pCtx, DasDesc* pDest) return; DasAry* pAry = &(pCtx->aPropVal); - DasAry_append(pAry, NULL, 1); // Null terminate the value string + ubyte uTerm = 0; + DasAry_append(pAry, &uTerm, 1); // Null terminate the value string size_t uValLen = 0; const char* sValue = DasAry_getCharsIn(pAry, DIM0, &uValLen); diff --git a/das2/stream.c b/das2/stream.c index ccfd860..fe0fa55 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -29,6 +29,11 @@ #include #endif #include +#ifndef _WIN32 +#include +#else +#define strcasecmp _stricmp +#endif #include @@ -43,7 +48,7 @@ StreamDesc* new_StreamDesc() { StreamDesc* pThis; - pThis = ( StreamDesc* ) calloc(1, sizeof( StreamDesc ) ); + pThis = (StreamDesc*) calloc(1, sizeof( StreamDesc ) ); DasDesc_init((DasDesc*)pThis, STREAM); pThis->bDescriptorSent = false; @@ -85,6 +90,43 @@ void del_StreamDesc(StreamDesc* pThis){ free(pThis); } +/* ************************************************************************** */ +char* StreamDesc_info(const StreamDesc* pThis, char* sBuf, int nLen) +{ + if(nLen < 30) + return sBuf; + char* pWrite = sBuf; + + char sComp[32] = {'\0'}; + if(strcmp(pThis->compression, "none") != 0) + snprintf(sComp, 31, "(%s compression)", pThis->compression); + + int nWritten = snprintf(pWrite, nLen - 1, "Stream: das v%s%s\n", pThis->version, sComp); + pWrite += nWritten; nLen -= nWritten; + + if(DasDesc_length((DasDesc*)pThis) > 0){ + char* pSubWrite = DasDesc_info((DasDesc*)pThis, pWrite, nLen, " "); + nLen -= (pSubWrite - pWrite); + pWrite = pSubWrite; + } + else{ + nWritten = snprintf(pWrite, nLen - 1, " (no global properties)\n"); + pWrite += nWritten; nLen -= nWritten; + } + + /* Now print info on each defined frame */ + for(int i = 0; i < MAX_FRAMES; ++i){ + if(pThis->frames[i] != NULL){ + char* pSubWrite = DasFrame_info(pThis->frames[i], pWrite, nLen); + nLen -= (pSubWrite - pWrite); + pWrite = pSubWrite; + } + } + if(nLen < 2) return pWrite; + *pWrite = '\n'; ++pWrite; --nLen; + return pWrite; +} + /* ************************************************************************** */ /* Adding/Removing detail */ @@ -215,6 +257,7 @@ void StreamDesc_addCmdLineProp(StreamDesc* pThis, int argc, char * argv[] ) PktDesc* StreamDesc_clonePktDesc(StreamDesc* pThis, const PktDesc* pPdIn) { PktDesc* pPdOut; + pPdOut= (PktDesc*)calloc(1, sizeof(PktDesc)); pPdOut->base.type = pPdIn->base.type; @@ -266,9 +309,13 @@ PktDesc* StreamDesc_clonePktDescById( return pOut; } -DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) +DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, DasDesc* pDesc, int nPktId) { - if((pPd->base.parent != NULL)&&(pPd->base.parent != (DasDesc*)pThis)) + /* Only accept either das2 packet descriptors or das3 datasets */ + if((pDesc->type != PACKET)&&(pDesc->type != DATASET)) + return das_error(DASERR_STREAM, "Unexpected packet desciptor type"); + + if((pDesc->parent != NULL)&&(pDesc->parent != (DasDesc*)pThis)) /* Hint to random developer: If you are here because you wanted to copy * another stream's packet descriptor onto this stream use one of * StreamDesc_clonePktDesc() or StreamDesc_clonePktDescById() instead. */ @@ -276,11 +323,11 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) "stream"); /* Check uniqueness */ - if(pPd->base.parent == (DasDesc*)pThis){ + if(pDesc->parent == (DasDesc*)pThis){ for(int i = 0; i < MAX_PKTIDS; ++i) if(pThis->descriptors[i] != NULL) if(pThis->descriptors[i]->type == PACKET) - if(PktDesc_equalFormat(pPd, (PktDesc*)(pThis->descriptors[i]))) + if(PktDesc_equalFormat((PktDesc*)pDesc, (PktDesc*)(pThis->descriptors[i]))) return das_error(DASERR_STREAM, "Packet Descriptor is already part of the stream" ); @@ -293,9 +340,13 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId) return das_error(DASERR_STREAM, "StreamDesc already has a packet descriptor with ID" " %02d", nPktId); - pThis->descriptors[nPktId] = (DasDesc*)pPd; - pPd->id = nPktId; - pPd->base.parent = (DasDesc*)pThis; + pThis->descriptors[nPktId] = pDesc; + + /* If this is an old-sckool packet descriptor, set it's ID */ + if(pDesc->type == PACKET) + ((PktDesc*)pDesc)->id = nPktId; + + pDesc->parent = (DasDesc*)pThis; return 0; } @@ -405,6 +456,7 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) char sName[64] = {'\0'}; ubyte nFrameId = 0; const char* pColon = NULL; + bool bInertial = false; pPsd->bInProp = (strcmp(el, "p") == 0); @@ -483,6 +535,11 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) } continue; } + if(strcmp(attr[i], "inertial") == 0){ + if((attr[i+1][0] == 't')||(attr[i+1][0] == 'T')||(strcasecmp(attr[i+1], "true") == 0)) + bInertial = true; + continue; + } } pPsd->nRet = das_error(DASERR_STREAM, @@ -497,6 +554,8 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) if(!pPsd->pFrame){ pPsd->nRet = das_error(DASERR_STREAM, "Frame definition failed in header"); } + if(bInertial) + pPsd->pFrame->flags |= DASFRM_INERTIAL; return; } @@ -542,7 +601,8 @@ void parseStreamDesc_end(void* data, const char* el) pPsd->bInProp = false; DasAry* pAry = &(pPsd->aPropVal); - DasAry_append(pAry, NULL, 1); // Null terminate the value string + ubyte uTerm = 0; + DasAry_append(pAry, &uTerm, 1); // Null terminate the value string size_t uValLen = 0; const char* sValue = DasAry_getCharsIn(pAry, DIM0, &uValLen); diff --git a/das2/stream.h b/das2/stream.h index baeebe9..67da512 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -122,6 +122,13 @@ DAS_API StreamDesc* new_StreamDesc(void); DAS_API StreamDesc* new_StreamDesc_str(DasBuf* pBuf); +/** Print a short description of the stream to a string buffer, + * This is not a serialization, just an overview + * + * @memberof StreamDesc + */ +DAS_API char* StreamDesc_info(const StreamDesc* pSd, char* sBuf, int nLen); + /** Creates a deep-copy of an existing StreamDesc object. * * An existing stream descriptor, probably one initialized automatically by @@ -161,16 +168,23 @@ DAS_API void del_StreamDesc(StreamDesc* pThis); */ DAS_API size_t StreamDesc_getNPktDesc(const StreamDesc* pThis); -/** Attach a standalone packet descriptor to this stream. +/** Attach a packet descriptor to this stream. + * + * The stream takes ownership of the packet descriptor. It will be deleted when + * the stream is deleted. * * @param pThis The stream to receive the packet descriptor. The PkdDesc object * will have it's parent pointer set to this object. - * @param pPd The stand alone packet descriptor, it's parent pointer must be null + * + * @param pDesc Must be a pointer to a descriptor of type PktDesc or DasDs. If + * the descriptor has a parent and it's not this stream object, an error + * will be thrown. + * * @param nPktId The ID for the new packet descriptor. * @return 0 on success or a positive error code on failure. * @memberof StreamDesc */ -DAS_API DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, PktDesc* pPd, int nPktId); +DAS_API DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, DasDesc* pDesc, int nPktId); /** Indicates if the xtags on the stream are monotonic, in which diff --git a/das2/variable.c b/das2/variable.c index 41d2f58..58cb0e3 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -169,7 +169,7 @@ ptrdiff_t DasVar_lengthIn(const DasVar* pThis, int nIdx, ptrdiff_t* pLoc) char* DasVar_toStr(const DasVar* pThis, char* sBuf, int nLen) { char* sBeg = sBuf; - const unsigned int uFlags = D2V_EXP_RANGE | D2V_EXP_UNITS | D2V_EXP_SUBEX; + const unsigned int uFlags = D2V_EXP_RANGE | D2V_EXP_UNITS | D2V_EXP_SUBEX | D2V_EXP_TYPE; pThis->expression(pThis, sBuf, nLen, uFlags); return sBeg; } @@ -209,6 +209,24 @@ char* _DasVar_prnUnits(const DasVar* pThis, char* sBuf, int nLen) return pWrite; } + +/* Just outputs the base value type */ +char* _DasVar_prnType(const DasVar* pThis, char* pWrite, int nLen) +{ + + const char* sVt = das_vt_toStr(pThis->vt); + int nStrLen = strlen(sVt); + if((sVt == NULL)||(nLen < (nStrLen+4))) + return pWrite; + + *pWrite = ' '; ++pWrite; *pWrite = '['; ++pWrite; + strncpy(pWrite, das_vt_toStr(pThis->vt), nStrLen); + + pWrite += nStrLen; + *pWrite = ']'; ++pWrite; + + return pWrite; +} /* iFirst = 3 @@ -509,7 +527,14 @@ char* DasConstant_expression( if(pBase->units == UNIT_DIMENSIONLESS) return pWrite; if( (uFlags & D2V_EXP_UNITS) == 0) return pWrite; - return _DasVar_prnUnits((DasVar*)pThis, pWrite, nLen); + char* pSubWrite = _DasVar_prnUnits((DasVar*)pThis, pWrite, nLen); + nLen -= (pSubWrite - pWrite); + pWrite = pSubWrite; + + if(uFlags & D2V_EXP_TYPE) + return _DasVar_prnType((DasVar*)pThis, pWrite, nLen); + else + return pWrite; } int DasConstant_shape(const DasVar* pBase, ptrdiff_t* pShape) @@ -1369,12 +1394,17 @@ char* _DasVarAry_intrExpress( pWrite = pSubWrite; } - // Print interval object info if there is any + // Print internal object info if there is any if((uExFlags & D2V_EXP_INTR) && (das_vt_rank(pBase->vt) > 0)){ - pWrite = _DasVar_prnIntr(pBase, sFrame, pDirs, nDirs, pWrite, nLen); + pSubWrite = _DasVar_prnIntr(pBase, sFrame, pDirs, nDirs, pWrite, nLen); + nLen -= (pSubWrite - pWrite); + pWrite = pSubWrite; } - - return pWrite; + + if(uExFlags & D2V_EXP_TYPE) + return _DasVar_prnType((DasVar*)pThis, pWrite, nLen); + else + return pWrite; } char* DasVarAry_expression( @@ -1757,7 +1787,7 @@ char* DasVarSeq_expression( pWrite = pNewWrite; } - /* The rest is range printing... */ + /* Most of the rest is range printing... (with data type at the end) */ if(! (uFlags & D2V_EXP_RANGE)) return pWrite; if(nLen < 3) return pWrite; @@ -1816,8 +1846,11 @@ char* DasVarSeq_expression( *pWrite = ' '; pWrite += 1; nLen -= 1; - - return pWrite; + + if(uFlags & D2V_EXP_TYPE) + return _DasVar_prnType((DasVar*)pThis, pWrite, nLen); + else + return pWrite; } int DasVarSeq_shape(const DasVar* pBase, ptrdiff_t* pShape){ @@ -2349,10 +2382,15 @@ char* DasVarBinary_expression( } if(uFlags & D2V_EXP_RANGE){ - pWrite = _DasVar_prnRange(&(pThis->base), pWrite, nLen); + pSubWrite = _DasVar_prnRange(&(pThis->base), pWrite, nLen); + nLen -= pSubWrite - pWrite; + pWrite = pSubWrite; } - - return pWrite; + + if(uFlags & D2V_EXP_TYPE) + return _DasVar_prnType(&(pThis->base), pWrite, nLen); + else + return pWrite; DAS_VAR_BIN_EXP_PUNT: sBuf[0] = '\0'; diff --git a/das2/variable.h b/das2/variable.h index 53c7a42..f2c9be3 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -96,6 +96,7 @@ DAS_API ptrdiff_t das_varlength_merge(ptrdiff_t nLeft, ptrdiff_t nRight); #define D2V_EXP_RANGE 0x04 #define D2V_EXP_SUBEX 0x08 #define D2V_EXP_INTR 0x10 +#define D2V_EXP_TYPE 0x20 /** Set index printing direction. * diff --git a/schema/das-basic-stream-v3.0.xsd b/schema/das-basic-stream-v3.0.xsd index 102666e..3610e23 100644 --- a/schema/das-basic-stream-v3.0.xsd +++ b/schema/das-basic-stream-v3.0.xsd @@ -88,6 +88,12 @@ + + + + + + @@ -127,6 +133,7 @@ + diff --git a/test/TestV3Read.c b/test/TestV3Read.c index bdf17a0..fe2bdf2 100644 --- a/test/TestV3Read.c +++ b/test/TestV3Read.c @@ -16,32 +16,66 @@ #define _POSIX_C_SOURCE 200112L #include +#include + #include StreamDesc* g_pSdOut = NULL; -const char* g_sTestFile1 = "./test/ex12_sounder_xyz.d3t"; -/* const char* g_sTestFile1 = "./test/tag_test.dNt"; */ +const char* g_sTestFiles[] = { + "./test/tag_test.dNt", + "./test/ex12_sounder_xyz.d3t" +}; +const int g_nTestFiles = 2; + +DasErrCode onDataset(StreamDesc* pSd, DasDs* pDs, void* pUser) +{ + char sBuf[16000] = {'\0'}; + DasDs_toStr(pDs, sBuf, 15999); + fputs(sBuf, stdout); + return DAS_OKAY; +} + +DasErrCode onStream(StreamDesc* pSd, void* pUser){ + fputs("\n", stdout); + char sBuf[16000] = {'\0'}; + StreamDesc_info(pSd, sBuf, 15999); + fputs(sBuf, stdout); + return DAS_OKAY; +} int main(int argc, char** argv) { /* Exit on errors, log info messages and above */ - das_init(argv[0], DASERR_DIS_EXIT, 0, DASLOG_INFO, NULL); + das_init(argv[0], DASERR_DIS_EXIT, 0, DASLOG_INFO, NULL); + + for(int i = 0; i < g_nTestFiles; ++i){ + + printf("INFO: Reading %s\n", g_sTestFiles[i]); + FILE* pFile = fopen(g_sTestFiles[i], "r"); + + DasIO* pIn = new_DasIO_cfile("TestV3Read", pFile, "r"); + + StreamHandler handler; + memset(&handler, 0, sizeof(StreamHandler)); + handler.dsDescHandler = onDataset; + handler.streamDescHandler = onStream; + DasIO_addProcessor(pIn, &handler); + + /* Just read it parsing packets. Don't invoke any stream handlers to + do stuff with the packets */ + int nTest = 1; + if(DasIO_readAll(pIn) != 0){ + printf("ERROR: Test %d failed, couldn't parse %s\n", nTest, g_sTestFiles[i]); + return 64; + } - printf("INFO: Reading %s\n", g_sTestFile1); - FILE* pFile = fopen(g_sTestFile1, "r"); + del_DasIO(pIn); /* Should free all memory, check with valgrind*/ - DasIO* pIn = new_DasIO_cfile("TestV3Read", pFile, "r"); + printf("INFO: %s parsed without errors\n", g_sTestFiles[i]); + } - /* Just read it parsing packets. Don't invoke any stream handlers to - do stuff with the packets */ - int nTest = 1; - if(DasIO_readAll(pIn) != 0){ - printf("ERROR: Test %d failed, couldn't parse %s\n", nTest, g_sTestFile1); - return 64; - } - printf("INFO: %s parsed without errors\n", g_sTestFile1); - return 0; + return 0; } diff --git a/test/ex15_vector_frame.d3b b/test/ex15_vector_frame.d3b index 22cf355..1ae4148 100644 --- a/test/ex15_vector_frame.d3b +++ b/test/ex15_vector_frame.d3b @@ -11,7 +11,7 @@ -

Tracers Spocecraft Coordinate Frame

+

Tracers Spacecraft Coordinate Frame

@@ -27,13 +27,13 @@

UTC

- +

EFI SCI @ 128 Hz

- + diff --git a/test/tag_test.dNt b/test/tag_test.dNt index dd1c0e8..4ac8427 100644 --- a/test/tag_test.dNt +++ b/test/tag_test.dNt @@ -1,4 +1,4 @@ -|Sx||454| +|Sx||869|

Magnetic Field Components in the Lab Frame from VMRS

@@ -9,7 +9,7 @@

(1.0 minute Averages)

das2_bin_avgsec

- +

Room 601 Coordinates

diff --git a/utilities/das2_from_das1.c b/utilities/das2_from_das1.c index c663f5f..a861a71 100644 --- a/utilities/das2_from_das1.c +++ b/utilities/das2_from_das1.c @@ -664,7 +664,7 @@ int main(int argc, char** argv) if( (pPdOut = createPktDesc((DasDesc*)pSdOut, pDsdf, sDsdfFile)) == NULL) return 112; - StreamDesc_addPktDesc(pSdOut, pPdOut, 1); + StreamDesc_addPktDesc(pSdOut, (DasDesc*)pPdOut, 1); /* Add in stream properties from command line and DSDF */ DasDesc_set((DasDesc*)pSdOut, "Time", "start", pBeg); diff --git a/utilities/das2_histo.c b/utilities/das2_histo.c index 1427ef8..ce720a4 100644 --- a/utilities/das2_histo.c +++ b/utilities/das2_histo.c @@ -256,7 +256,7 @@ DasErrCode onPktHdr(StreamDesc* pSdIn, PktDesc* pPdIn, void* vpOut) PktDesc_addPlane(pPktOut, pXOut); PktDesc_addPlane(pPktOut, pPlOut); - StreamDesc_addPktDesc(pSdOut, pPktOut, *pNextId); + StreamDesc_addPktDesc(pSdOut, (DasDesc*)pPktOut, *pNextId); *pNextId += 1; } return DAS_OKAY; diff --git a/utilities/das2_psd.c b/utilities/das2_psd.c index a95c8ea..9924eab 100644 --- a/utilities/das2_psd.c +++ b/utilities/das2_psd.c @@ -694,7 +694,7 @@ DasErrCode onPktHdr(StreamDesc* pSdIn, PktDesc* pPdIn, void* vpIoOut) * the input packet descriptor */ pPdIn->pUser = (void*)pPdOut; - if( StreamDesc_addPktDesc(g_pSdOut, pPdOut, g_nNextPktId) == DAS_OKAY ){ + if( StreamDesc_addPktDesc(g_pSdOut, (DasDesc*)pPdOut, g_nNextPktId) == DAS_OKAY ){ ++g_nNextPktId; if(uTransAxis == TRANSFORM_IN_Y) From 0fa677716ccd7a8a375f1bda10b76bbc64d217dd Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Fri, 16 Feb 2024 00:30:44 -0600 Subject: [PATCH 16/40] Draft data packet reader, debug in progress --- das2/buffer.c | 11 ++++++ das2/buffer.h | 17 +++++++++ das2/codec.c | 6 ++-- das2/dataset.c | 4 ++- das2/io.c | 16 ++++++--- das2/serial.c | 75 +++++++++++++++++++++++++++++++++++++++ das2/serial.h | 18 ++++++++-- test/TestV3Read.c | 33 +++++++++++------ test/ex12_sounder_xyz.d3t | 2 +- 9 files changed, 160 insertions(+), 22 deletions(-) diff --git a/das2/buffer.c b/das2/buffer.c index 62571d0..42743ca 100644 --- a/das2/buffer.c +++ b/das2/buffer.c @@ -415,6 +415,17 @@ size_t DasBuf_unread(const DasBuf* pThis){ return pThis->pReadEnd - pThis->pReadBeg; } +const ubyte* DasBuf_direct(const DasBuf* pThis, size_t* pLength) +{ + /* Historical note: This was the last das3 function implimented */ + if(pThis->pReadBeg >= pThis->pReadEnd) + return NULL; + + *pLength = pThis->pReadEnd - pThis->pReadBeg; + + return (const ubyte*) pThis->pReadBeg; +} + size_t DasBuf_writeSpace(const DasBuf* pThis) { if(pThis->pWrite == NULL) return 0; /* This is a read-only buffer */ diff --git a/das2/buffer.h b/das2/buffer.h index 6a1401a..80399bc 100644 --- a/das2/buffer.h +++ b/das2/buffer.h @@ -227,6 +227,23 @@ DAS_API size_t DasBuf_strip(DasBuf* pThis); */ DAS_API size_t DasBuf_read(DasBuf* pThis, char* pOut, size_t uOut); +/** Get a constant point to un-read bytes in the buffer and the number un-read + * + * @note Unlike most read function calls this does *not* advance the read point + * You must do it manually using DasBuf_readOffset() and + * DasBuf_setReadOffset() + * + * @param pThis the buffer + * + * @param pLength A pointer to a size_t to receive the number of unread bytes + * + * @returns A contant unsigned byte pointer at the read location or NULL if + * there are no more bytes to read + * + * @memberof DasBuf + */ +DAS_API const ubyte* DasBuf_direct(const DasBuf* pThis, size_t* pLength); + /** Peak at bytes from a buffer * Copies bytes out of a buffer but does *not* increment the read point. * diff --git a/das2/codec.c b/das2/codec.c index 38aafec..af801d0 100644 --- a/das2/codec.c +++ b/das2/codec.c @@ -445,9 +445,9 @@ int DasCodec_decode( if(!(pThis->uProc & DASENC_TEXT)){ /* .... Reading binary data */ - uVals = uBufLen / pThis->nBufValSz; - if((nExpect > 0) && (uVals > nExpect)) - uVals = (size_t)nExpect; + uVals = uBufLen / pThis->nBufValSz; /* Max we could get */ + if((nExpect > 0) && (uVals > nExpect)) + uVals = (size_t)nExpect; /* Make we're gonna get */ ubyte* pWrite = NULL; diff --git a/das2/dataset.c b/das2/dataset.c index 13c129a..915c351 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -353,7 +353,7 @@ DasErrCode DasDs_addFixedCodec( DasCodec* pCodec = (DasCodec*) &(pThis->aPktEncs[pThis->uSzEncs]); DasErrCode nRet = DasCodec_init( - pCodec, pAry, sSemantic, sEncType, 0, nItemBytes, pAry->units + pCodec, pAry, sSemantic, sEncType, nItemBytes, 0, pAry->units ); if(nRet != DAS_OKAY){ @@ -523,3 +523,5 @@ DasDs* new_DasDs( return pThis; } + + diff --git a/das2/io.c b/das2/io.c index 8db3105..3b9cacb 100644 --- a/das2/io.c +++ b/das2/io.c @@ -42,6 +42,7 @@ #include "util.h" /* <-- Make sure endianess macros are present */ #include "http.h" /* Get ssl helpers */ +#include "serial.h" #include "io.h" #ifdef _WIN32 @@ -1204,16 +1205,23 @@ DasErrCode _DasIO_handleData( DasDesc* pDesc = pSd->descriptors[nPktId]; - assert(pDesc->type == PACKET); + if(pDesc->type == PACKET) + nRet = PktDesc_decodeData((PktDesc*)pDesc, pBuf); + else if(pDesc->type == DATASET) + nRet = dasds_decode_data((DasDs*)pDesc, pBuf); + else + assert(false); - nRet = PktDesc_decodeData((PktDesc*)pDesc, pBuf); if(nRet != 0) return nRet; for(size_t u = 0; pThis->pProcs[u] != NULL; u++){ pHndlr = pThis->pProcs[u]; - if(pHndlr->pktDataHandler != NULL) + if((pDesc->type == PACKET)&&(pHndlr->pktDataHandler != NULL)) nRet = pHndlr->pktDataHandler((PktDesc*)pDesc, pHndlr->userData); - if(nRet != 0) break; + else if((pDesc->type == DATASET)&&(pHndlr->dsDataHandler != NULL)) + nRet = pHndlr->dsDataHandler(pSd, (DasDs*)pDesc, pHndlr->userData); + + if(nRet != DAS_OKAY) break; } return nRet; } diff --git a/das2/serial.c b/das2/serial.c index 94559e1..cd9e3b8 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -937,6 +937,10 @@ static void _serial_xmlCharData(void* pUserData, const char* sChars, int nLen) return; if(pCtx->bInProp){ + /* TODO: Add stripping of beginning and ending whitespace, + * possibly at the line level for long properties + */ + DasAry* pAry = &(pCtx->aPropVal); DasAry_append(pAry, (ubyte*) sChars, nLen); return; @@ -1320,3 +1324,74 @@ DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int das_error(context.nDasErr, context.sErrMsg); return NULL; } + +/* ************************************************************************** */ +/* Decoding a data packet, using a dataset created above */ + +DasErrCode dasds_decode_data(DasDs* pDs, DasBuf* pBuf) +{ + if(pDs->uSzEncs == 0){ + return das_error(DASERR_SERIAL, + "No decoders are defined for dataset %02d in group %s", DasDs_id(pDs), DasDs_group(pDs) + ); + } + + int nUnReadBytes = 0; + int nSzEncs = (int)pDs->uSzEncs; + for(int i = 0; i < nSzEncs; ++i){ + DasCodec* pCodec = &(pDs->aPktEncs[i]); + size_t uBufLen = 0; + const ubyte* pRaw = DasBuf_direct(pBuf, &uBufLen); + + if(pRaw == NULL){ + return das_error(DASERR_SERIAL, + "Packet buffer is empty, there are no bytes to decode" + ); + } + if(uBufLen > 0xffffffff) + return das_error(DASERR_SERIAL, "Packet buffer > signed integer range, what are you doing?"); + + + /* Encoder returns the number of bytes it didn't read. Assuming we are + doing things right, the last return from the last encoder call will + be 0, AKA nothing will be unread in the packet. + */ + int nValsRead = 0; + int nValsExpect = pDs->nPktItems[i]; + + if((nValsExpect < 1)&&(i < (nSzEncs - 1))) + return das_error(DASERR_NOTIMP, + "To handle parsing ragged non-text arrays that's not at the end of " + "a packet, add searching for binary sentinals to DasCodec_decode" + ); + + + nUnReadBytes = DasCodec_decode(pCodec, pRaw, uBufLen, nValsExpect, &nValsRead); + if(nUnReadBytes < 0) + return -1 * nUnReadBytes; + + if(nValsExpect > 0){ + if(nValsExpect != nValsRead) + return das_error(DASERR_SERIAL, + "Expected to parse %d values from a packet for array %s in dataset %s " + "but received %d.", nValsExpect, DasAry_id(pCodec->pAry), DasDs_id(pDs), + nValsRead + ); + } + + /* Since we used direct (aka raw) access, we have to manually adjust the + read point of the buffer */ + int nReadBytes = (int)uBufLen - nUnReadBytes; + assert(nReadBytes > -1); + size_t uCurOffset = DasBuf_readOffset(pBuf); + DasBuf_setReadOffset(pBuf, uCurOffset + nReadBytes); + } + + if(nUnReadBytes > 0){ + daslog_warn_v("%d unread bytes at the end of the packet for dataset %s", + nUnReadBytes, DasDs_id(pDs) + ); + } + + return DAS_OKAY; +} \ No newline at end of file diff --git a/das2/serial.h b/das2/serial.h index 6550862..0dd4665 100644 --- a/das2/serial.h +++ b/das2/serial.h @@ -44,11 +44,25 @@ extern "C" { * @param nPktId The packet's ID within it's parent's array. My be 0 if * and only if pParent is NULL * - * @return A pointer to a new DasDs and all if it's children allocated - * on the heap, or NULL on an error. + * @returns A pointer to a new DasDs and all if it's children allocated + * on the heap, or NULL on an error. */ DAS_API DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId); +/** Given a das dataset decode it's packets + * + * @param pDs A pointer to a das dataset object that has defined encoders + * and arrays. This can be created via dasds_from_xmlheader() + * + * @param pBuf The buffer to read. Reading will start with the read point + * and will run until the end of the packet. Since reading from the + * buffer advances the read point, the caller can determine how many + * bytes were read. + * + * @returns DAS_OKAY if reading was successful or a error code if not. + */ +DAS_API DasErrCode dasds_decode_data(DasDs* pDs, DasBuf* pBuf); + #ifdef __cplusplus diff --git a/test/TestV3Read.c b/test/TestV3Read.c index fe2bdf2..6778d60 100644 --- a/test/TestV3Read.c +++ b/test/TestV3Read.c @@ -28,6 +28,14 @@ const char* g_sTestFiles[] = { }; const int g_nTestFiles = 2; +DasErrCode onStream(StreamDesc* pSd, void* pUser){ + fputs("\n", stdout); + char sBuf[16000] = {'\0'}; + StreamDesc_info(pSd, sBuf, 15999); + fputs(sBuf, stdout); + return DAS_OKAY; +} + DasErrCode onDataset(StreamDesc* pSd, DasDs* pDs, void* pUser) { char sBuf[16000] = {'\0'}; @@ -36,12 +44,17 @@ DasErrCode onDataset(StreamDesc* pSd, DasDs* pDs, void* pUser) return DAS_OKAY; } -DasErrCode onStream(StreamDesc* pSd, void* pUser){ - fputs("\n", stdout); - char sBuf[16000] = {'\0'}; - StreamDesc_info(pSd, sBuf, 15999); - fputs(sBuf, stdout); - return DAS_OKAY; +DasErrCode onData(StreamDesc* pSd, DasDs* pDs, void* pUser) +{ + char sBuf[128] = {'\0'}; + ptrdiff_t aShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + + int nRank = DasDs_shape(pDs, aShape); + das_shape_prnRng(aShape, nRank, nRank, sBuf, 127); + + printf("Dataset %s shape is now: %s\n", DasDs_id(pDs), sBuf); + + return DAS_OKAY; } int main(int argc, char** argv) @@ -58,15 +71,15 @@ int main(int argc, char** argv) StreamHandler handler; memset(&handler, 0, sizeof(StreamHandler)); - handler.dsDescHandler = onDataset; handler.streamDescHandler = onStream; + handler.dsDescHandler = onDataset; + handler.dsDataHandler = onData; DasIO_addProcessor(pIn, &handler); /* Just read it parsing packets. Don't invoke any stream handlers to do stuff with the packets */ - int nTest = 1; if(DasIO_readAll(pIn) != 0){ - printf("ERROR: Test %d failed, couldn't parse %s\n", nTest, g_sTestFiles[i]); + printf("ERROR: Test %d failed, couldn't parse %s\n", i, g_sTestFiles[i]); return 64; } @@ -75,7 +88,5 @@ int main(int argc, char** argv) printf("INFO: %s parsed without errors\n", g_sTestFiles[i]); } - - return 0; } diff --git a/test/ex12_sounder_xyz.d3t b/test/ex12_sounder_xyz.d3t index 9a71e14..756ca10 100644 --- a/test/ex12_sounder_xyz.d3t +++ b/test/ex12_sounder_xyz.d3t @@ -1,6 +1,6 @@ |Sx||50| -|Hx|1|3459| +|Hx|1|3460| From 2246a0903bcd1f3977a5fbf4751ffe8fe2018e71 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Fri, 16 Feb 2024 20:35:19 -0600 Subject: [PATCH 17/40] codec re-written to handle variable number of fixed length items per packet --- das2/codec.c | 562 ++++++++++++++++++++++++++++++++++++------------- das2/codec.h | 30 ++- das2/dataset.c | 18 +- das2/dataset.h | 17 +- das2/io.c | 19 +- das2/serial.c | 9 +- das2/time.c | 50 ++++- das2/time.h | 11 + 8 files changed, 544 insertions(+), 172 deletions(-) diff --git a/das2/codec.c b/das2/codec.c index af801d0..b09bf52 100644 --- a/das2/codec.c +++ b/das2/codec.c @@ -29,13 +29,17 @@ /* (hdr) DASENC_VALID 0x0001 / * If not 1, not a valid encoder */ #define DASENC_SWAP 0x0002 /* If set bytes must be swapped prior to IO */ #define DASENC_CAST 0x0004 /* If set bytes must be transformed prior to IO */ +#define DASENC_TEXT 0x0008 /* Input is text */ +#define DASENC_PARSE 0x0010 /* Input is text that should be parsed to a value */ +#define DASENC_VARSZ 0x0020 /* Input is varible size text items */ -#define DASENC_TEXT 0x0010 /* Input is text */ -#define DASENC_PARSE 0x0020 /* Input is text that should be parsed to a value */ -#define DASENC_EPOCH 0x0040 /* Input is text time to convert to epoch time */ +/* Used in the big switch, ignores the valid bit since that's assumed by then */ +#define DASENC_MAJ_MASK 0x00FE /* Everyting concerned with the input buffer */ -#define DASENC_NULLTERM 0x0100 /* Input is text that should be null terminated */ -#define DASENC_WRAP 0x0200 /* Wrap last dim reading a string value */ +/* Items used after the big switch */ + +#define DASENC_NULLTERM 0x0200 /* Input is text that should be null terminated */ +#define DASENC_WRAP 0x0400 /* Wrap last dim reading a string value */ #define ENCODER_SETUP_ERROR "Logic error in encoder setup" @@ -43,17 +47,21 @@ /* Perform various checks to see if this is even possible */ DasErrCode DasCodec_init( DasCodec* pThis, DasAry* pAry, const char* sSemantic, const char* sEncType, - uint16_t uSzEach, ubyte cSep, das_units epoch + int16_t nSzEach, ubyte cSep, das_units epoch ){ memset(pThis, 0, sizeof(DasCodec)); pThis->cSep = cSep; pThis->pAry = pAry; + pThis->nBufValSz = nSzEach; assert(pAry != NULL); + bool bDateTime = false; + /* Don't let the array delete itself out from under us*/ inc_DasAry(pThis->pAry); - pThis->vtAry = DasAry_valType( pThis->pAry ); /* Copy in the value type of the given array */ + /* Makes the code below shorter */ + das_val_type vtAry = DasAry_valType( pThis->pAry ); ptrdiff_t aShape[DASIDX_MAX] = {0}; int nRank = DasAry_shape(pThis->pAry, aShape); @@ -63,7 +71,7 @@ DasErrCode DasCodec_init( first handle the integral types */ bool bIntegral = false; if(strcmp(sEncType, "BEint") == 0){ - switch(uSzEach){ + switch(nSzEach){ case 8: pThis->vtBuf = vtLong; break; case 4: pThis->vtBuf = vtInt; break; case 2: pThis->vtBuf = vtShort; break; @@ -76,7 +84,7 @@ DasErrCode DasCodec_init( bIntegral = true; } else if(strcmp(sEncType, "LEint") == 0){ - switch(uSzEach){ + switch(nSzEach){ case 8: pThis->vtBuf = vtLong; break; case 4: pThis->vtBuf = vtInt; break; case 2: pThis->vtBuf = vtShort; break; @@ -86,7 +94,7 @@ DasErrCode DasCodec_init( bIntegral = true; } else if(strcmp(sEncType, "BEuint") == 0){ - switch(uSzEach){ + switch(nSzEach){ case 8: pThis->vtBuf = vtULong; break; case 4: pThis->vtBuf = vtUInt; break; case 2: pThis->vtBuf = vtUShort; break; @@ -99,7 +107,7 @@ DasErrCode DasCodec_init( bIntegral = true; } else if(strcmp(sEncType, "LEuint") == 0){ - switch(uSzEach){ + switch(nSzEach){ case 8: pThis->vtBuf = vtULong; break; case 4: pThis->vtBuf = vtUInt; break; case 2: pThis->vtBuf = vtUShort; break; @@ -109,7 +117,7 @@ DasErrCode DasCodec_init( bIntegral = true; } else if(strcmp(sEncType, "BEreal") == 0){ - switch(uSzEach){ + switch(nSzEach){ case 8: pThis->vtBuf = vtDouble; break; case 4: pThis->vtBuf = vtFloat; break; default: goto UNSUPPORTED; @@ -120,7 +128,7 @@ DasErrCode DasCodec_init( bIntegral = true; } else if(strcmp(sEncType, "LEreal") == 0){ - switch(uSzEach){ + switch(nSzEach){ case 8: pThis->vtBuf = vtDouble; break; case 4: pThis->vtBuf = vtFloat; break; default: goto UNSUPPORTED; @@ -128,30 +136,30 @@ DasErrCode DasCodec_init( bIntegral = true; } else if(strcmp(sEncType, "byte") == 0){ - if(uSzEach != 1) goto UNSUPPORTED; + if(nSzEach != 1) goto UNSUPPORTED; pThis->vtBuf = vtByte; bIntegral = true; } else if(strcmp(sEncType, "ubyte") == 0){ - if(uSzEach != 1) goto UNSUPPORTED; + if(nSzEach != 1) goto UNSUPPORTED; pThis->vtBuf = vtUByte; bIntegral = true; } if(bIntegral){ - if(das_vt_size(pThis->vtBuf) > das_vt_size(pThis->vtAry)) + if(das_vt_size(pThis->vtBuf) > das_vt_size(vtAry)) goto UNSUPPORTED; /* If the array value type is floating point then it must and the buffer type is integer, then it must be wider then the integers */ - if(das_vt_isint(pThis->vtBuf) && das_vt_isreal(pThis->vtAry)){ - if(das_vt_size(pThis->vtAry) == das_vt_size(pThis->vtBuf)) + if(das_vt_isint(pThis->vtBuf) && das_vt_isreal(vtAry)){ + if(das_vt_size(vtAry) == das_vt_size(pThis->vtBuf)) goto UNSUPPORTED; } /* I need to cast values up to a larger size, flag that */ - if(das_vt_size(pThis->vtBuf) != das_vt_size(pThis->vtAry)) + if(das_vt_size(pThis->vtBuf) != das_vt_size(vtAry)) pThis->uProc |= DASENC_CAST; /* Temporary: Remind myself to call DasAry_markEnd() when writing @@ -170,7 +178,7 @@ DasErrCode DasCodec_init( pThis->vtBuf = vtText; pThis->uProc |= DASENC_TEXT; - // Deal with the text types + /* Deal with the text types */ if(strcmp(sSemantic, "bool") == 0){ return das_error(DASERR_NOTIMP, "TODO: Add parsing for 'true', 'false' etc."); } @@ -178,22 +186,30 @@ DasErrCode DasCodec_init( pThis->uProc |= DASENC_PARSE; } else if((strcmp(sSemantic, "datetime") == 0)){ + bDateTime = true; + pThis->uProc |= DASENC_PARSE; + /* If we're storing this as a datetime structure it's covered, if we need to convert to something else the units are needed */ - if(pThis->vtAry != vtTime){ - pThis->uProc |= DASENC_EPOCH; - if( (epoch == NULL) || !(Units_canConvert(epoch, UNIT_US2000)) ) + if(vtAry != vtTime){ + + if( (epoch == NULL) || (! Units_haveCalRep(epoch) ) ) goto UNSUPPORTED; /* Check that the array element size is big enough for the units in question */ - if((epoch == UNIT_TT2000)&&(pThis->vtAry != vtLong)&&(pThis->vtAry != vtULong)) + if((epoch == UNIT_TT2000)&&(vtAry != vtLong)&&(vtAry != vtDouble)) goto UNSUPPORTED; + else + if((vtAry != vtDouble)&&(vtAry != vtFloat)) + goto UNSUPPORTED; + + pThis->timeUnits = epoch; /* In addition to parsing, we have to convert */ } } else if(strcmp(sSemantic, "string") == 0){ - if(pThis->vtAry != vtUByte) /* Expect uByte storage for strings not */ + if(vtAry != vtUByte) /* Expect uByte storage for strings not */ goto UNSUPPORTED; /* vtText as there is no external place */ /* to put the string data */ @@ -203,7 +219,7 @@ DasErrCode DasCodec_init( /* If storing string data, we need to see if the last index of the array is big enough */ - if((nLastIdxSz != DASIDX_RAGGED)&&(nLastIdxSz < uSzEach)) + if((nLastIdxSz != DASIDX_RAGGED)&&(nLastIdxSz < nSzEach)) goto UNSUPPORTED; if((nLastIdxSz == DASIDX_RAGGED)&&(nRank > 1)) @@ -219,24 +235,28 @@ DasErrCode DasCodec_init( return DAS_OKAY; UNSUPPORTED: - if(pThis->uProc & DASENC_EPOCH) - return das_error(DASERR_ENC, "Can not encode/decode '%s' data from buffers " + if(bDateTime) + return das_error(DASERR_ENC, "Can not encode/decode datetime data from buffers " "with encoding '%s' for items of %hs bytes each to/from an array of " - " '%s' type elements for time units of '%s'", sSemantic, sEncType, uSzEach, - das_vt_toStr(pThis->vtAry), epoch == NULL ? "none" : Units_toStr(epoch) + " '%s' type elements with time units of '%s'", sEncType, nSzEach, + das_vt_toStr(vtAry), epoch == NULL ? "none" : Units_toStr(epoch) ); else return das_error(DASERR_ENC, "Can not encode/decode '%s' data from buffers " "with encoding '%s' for items of %hs bytes each to/from an array of " - " '%s' type elements", sSemantic, sEncType, uSzEach, das_vt_toStr(pThis->vtAry) + " '%s' type elements", sSemantic, sEncType, nSzEach, das_vt_toStr(vtAry) ); } /* ************************************************************************* */ void DasCodec_deInit(DasCodec* pThis){ - /* No dynamic memory, just decrement the array usage count */ + if(pThis->pOverflow) + free(pThis->pOverflow); + if(pThis && pThis->pAry) dec_DasAry(pThis->pAry); + + memset(pThis, 0, sizeof(DasCodec)); } /* ************************************************************************* */ @@ -429,165 +449,403 @@ static DasErrCode _swap_cast_read( return das_error(DASERR_ENC, ENCODER_SETUP_ERROR); } -/* The goal of this function is to read the expected number of values from - * an upstream source */ -int DasCodec_decode( - DasCodec* pThis, const ubyte* pBuf, size_t uBufLen, int nExpect, int* pRead -){ - if((pThis->uProc & DASENC_VALID) != DASENC_VALID) - return -1 * das_error(DASERR_ENC, "Encoder is not initialized"); +/* ************************************************************************ */ +/* Helper for helpers */ - if(uBufLen == 0) return DAS_OKAY; /* Successfully do nothing */ +static int _convert_n_store_text(DasCodec* pThis, const char* sValue) +{ + ubyte aValue[sizeof(das_time)]; - DasErrCode nRet = DAS_OKAY; + das_val_type vtAry = DasAry_valType(pThis->pAry); + int nRet = das_value_fromStr(aValue, sizeof(das_time), vtAry, sValue); + if(nRet != DAS_OKAY) + return -1 * nRet; - size_t uVals = 0; + /* Simple conversion, either not a time, or stored as time structure */ + if((pThis->timeUnits == NULL)||(vtAry == vtTime)){ + + DasAry_append(pThis->pAry, aValue, 1); + return DAS_OKAY; + } - if(!(pThis->uProc & DASENC_TEXT)){ /* .... Reading binary data */ + /* TT2000 time conversion */ + if(pThis->timeUnits == UNIT_TT2000){ + int64_t nTime = dt_to_tt2k((das_time*)aValue); + + if(vtAry != vtLong){ + if(vtAry == vtDouble){ + if(! pThis->bResLossWarn ){ + daslog_warn_v( + "Resolution loss detected while converting TT2000 values " + "to %s. Hint: Use the 'storage' attribute in your streams " + "to fix this.", das_vt_toStr(vtAry) + ); + pThis->bResLossWarn = true; + } + double rTime = (double)nTime; + memcpy(&nTime, &rTime, 8); + } + else{ + return das_error(DASERR_ENC, + "Refusing to store TT2000 values in a %s", das_vt_toStr(vtAry) + ); + } + } + + DasAry_append(pThis->pAry, (const ubyte*) &nTime, 1); + return DAS_OKAY; + } - uVals = uBufLen / pThis->nBufValSz; /* Max we could get */ - if((nExpect > 0) && (uVals > nExpect)) - uVals = (size_t)nExpect; /* Make we're gonna get */ + /* Any other time conversion */ + double rTime = Units_convertFromDt(pThis->timeUnits, (das_time*)aValue); + if(vtAry != vtDouble){ + if(vtAry == vtFloat){ + if(! pThis->bResLossWarn){ + daslog_warn_v( + "Resolution loss detected while converting %s values " + "to %s. Hint: Use the 'storage' attribute in you're streams " + "to fix this.", Units_toStr(pThis->timeUnits), das_vt_toStr(vtAry) + ); + pThis->bResLossWarn = true; + } + float rTime2 = (float)rTime; + DasAry_append(pThis->pAry, (const ubyte*) &rTime2, 1); + return DAS_OKAY; + } + else{ + return das_error(DASERR_ENC,"Refusing to store %s values in a %s", + Units_toStr(pThis->timeUnits), das_vt_toStr(vtAry) + ); + } + } + DasAry_append(pThis->pAry, (const ubyte*) &rTime, 1); + return DAS_OKAY; +} - ubyte* pWrite = NULL; +/* Helper ***************************************************************** */ - switch(pThis->uProc){ +static int _fixed_text_convert( + DasCodec* pThis, const ubyte* pBuf, int nSzEach, int nNumToRead +){ + + if(nSzEach > 127){ + return -1 * das_error(DASERR_NOTIMP, + "Handling fixed text values larger then 127 bytes is not yet implemented" + ); + } - /* Easy mode, external data and internal array have the same value type */ - case DASENC_VALID: - assert(pThis->nBufValSz == pThis->nAryValSz); - if(DasAry_append(pThis->pAry, pBuf, uVals) == NULL) - return -1 * DASERR_ARRAY; - break; + const char* pRead = (const char*) pBuf; + char* pWrite = NULL; + int nRet; + + char sValue[128] = {'\0'}; + int nBytesRead; + + for(int i = 0; i < nNumToRead; ++i){ + memset(sValue, 0, 128); + /* Copy in the non whitespace text */ + pWrite = sValue; + for(int j = 0; j < nSzEach; ++j){ + if((*pRead != '\0')&&(!isspace(*pRead))){ + *pWrite = *pRead; + ++pWrite; + } + ++pRead; + ++nBytesRead; + } + // Store fill or an actual value + if(sValue[0] == '\0') + DasAry_append(pThis->pAry, NULL, 1); + else + if((nRet = _convert_n_store_text(pThis, sValue)) != DAS_OKAY) + return -1 * nRet; + } - /* Almost easy, only need to swap to get into internal storage */ - case DASENC_VALID|DASENC_SWAP: - assert(pThis->nBufValSz == pThis->nAryValSz); + return nBytesRead; +} - /* Alloc space as fill, then write in swapped values */ - if((pWrite = DasAry_append(pThis->pAry, NULL, uVals)) == NULL) - return -1 * DASERR_ARRAY; +/* Helper's helper ******************************************************** */ + +static int _var_text_item_sz(const char* pBuf, int nBufLen, char cSep) +{ + /* Break the value on a null, a seperator, or if the separator is + null, then on space characters */ + int nSize = 0; + while( + (nBufLen > 0)&& + ( *pBuf == cSep||*pBuf == '\0'||(!cSep && isspace(*pBuf)) ) + ){ + --nBufLen; + ++nSize; + ++pBuf; + } + return nSize; +} - if((nRet = _swap_read(pWrite, pBuf, uVals, pThis->nBufValSz)) != DAS_OKAY) - return -1 * nRet; - break; +/* Helper ***************************************************************** */ + +/* Returns bytes actually read, or negative error */ +static int _var_text_read( + DasCodec* pThis, const ubyte* pBuf, int nBufLen, int nValsToRead, int* pValsDidRead +){ + /* Make into fuctions */ + if(pThis->vtBuf != vtText){ + return -1 * das_error(DASERR_ENC, "Expected a text type for the external buffer"); + } - /* Need to cast values to a larger type for storage */ - case DASENC_VALID|DASENC_CAST: + das_val_type vtAry = DasAry_valType( pThis->pAry ); + bool bParse = ((pThis->uProc & DASENC_PARSE) != 0); + int nRet; + char cSep = pThis->cSep; + const char* pRead = (const char*)pBuf; + int nLeft = nBufLen; - if((pWrite = DasAry_append(pThis->pAry, NULL, uVals)) == NULL) - return -1 * DASERR_ARRAY; + char sValue[128] = {'\0'}; // small vector assumption, use pThis->pOverflow if needed + char* pValue = NULL; + + int nValSz = 0; + *pValsDidRead = 0; - if((nRet = _cast_read(pWrite, pBuf, uVals, pThis->vtAry, pThis->vtBuf)) != DAS_OKAY) - return -1 * nRet; + /* The value reading loop */ + while( (nLeft > 0)&&( (nValsToRead < 0) || (*pValsDidRead < nValsToRead) ) ){ + + /* 1. Eat any proceeding separators */ + while( (nLeft > 0)&&( *pRead == cSep||*pRead == '\0'||(!cSep && isspace(*pRead)) ) ){ + ++pRead; + --nLeft; + if(nLeft == 0) + goto PARSE_DONE; + } + + /* 2. Get the size of the value */ + nValSz = _var_text_item_sz(pRead, nLeft, cSep); + if(nValSz == 0) break; - /* Bigest binary change, swap and cast to a larger type for storage */ - case DASENC_VALID|DASENC_CAST|DASENC_SWAP: + /* 3. Copy it over into or local area, or to the overflow */ + if(nValSz > 127){ + if(nValSz > pThis->uOverflow){ + if(pThis->pOverflow) free(pThis->pOverflow); + pThis->uOverflow = nValSz*2; + pThis->pOverflow = (char*)calloc(pThis->uOverflow, sizeof(char)); + } + else{ + memset(pThis->pOverflow, 0, pThis->uOverflow); /* Just clear it */ + } + pValue = pThis->pOverflow; + } + else{ + memset(sValue, 0, 128); + pValue = sValue; + } + strncpy(pValue, pRead, nValSz); + pRead += nValSz; + nLeft -= nValSz; + + /* 4. Convert and save, or just save, with optional null and wrap */ + if(bParse){ + nRet = _convert_n_store_text(pThis, pValue); + ubyte aValue[sizeof(das_time)]; + nRet = das_value_fromStr(aValue, sizeof(das_time), vtAry, pValue); + if(nRet != DAS_OKAY) + return -1 * nRet; + if(!DasAry_append(pThis->pAry, aValue, 1)) + return -1 * DASERR_ARRAY; + } + else{ + assert(vtAry == vtUByte); - if((pWrite = DasAry_append(pThis->pAry, NULL, uVals)) == NULL) + /* Just assume it's a variable length text string */ + if(!DasAry_append(pThis->pAry, (const ubyte*) pValue, nValSz)) return -1 * DASERR_ARRAY; - if((nRet = _swap_cast_read(pWrite, pBuf, uVals, pThis->vtAry, pThis->vtBuf)) != DAS_OKAY) - return -1 * nRet; - break; + if(pThis->uProc & DASENC_NULLTERM){ + ubyte uNull = 0; + if(!DasAry_append(pThis->pAry, &uNull, 1)) + return -1 * DASERR_ARRAY; + } - default: - return -1 * das_error(DASERR_ENC, ENCODER_SETUP_ERROR); + if(pThis->uProc & DASENC_WRAP){ + DasAry_markEnd(pThis->pAry, DasAry_rank(pThis->pAry) - 1); + } } - if(pRead) - *pRead = uVals; - - return uBufLen - (uVals * (pThis->nBufValSz)); /* Return count of unused bytes */ + /* 5. Record that a value was written */ + ++(*pValsDidRead); } - if(pThis->vtBuf != vtText){ - return -1 * das_error(DASERR_ENC, "Expected a text type for the external buffer"); - } +PARSE_DONE: + return nBufLen - nLeft; +} - /* Text parsing */ - char sValue[1024] = {'\0'}; - size_t uValSz, uToWrite, uGot = 0; - ubyte aValue[sizeof(das_time)]; - uVals = 0; +/* ************************************************************************* */ +/* Main decoder */ - const char* pGet = (const char*)pBuf; - while((uGot < uBufLen)){ - if((nExpect > 0) && (uVals == nExpect)) - break; +/* The goal of this function is to read the expected number of values from + * an upstream source */ +int DasCodec_decode( + DasCodec* pThis, const ubyte* pBuf, int nBufLen, int nExpect, int* pValsRead +){ + assert(pThis->uProc & DASENC_VALID); + + if(nExpect == 0) return nBufLen; /* Successfully do nothing */ + if(nBufLen == 0) return 0; - /* Find a sep or the end of the buffer */ - while(*pGet == pThis->cSep || *pGet == '\0' || (!(pThis->cSep) && isspace(*pGet)) ){ - ++pGet; - ++uGot; - if(uGot == uBufLen) - goto PARSE_DONE; + das_val_type vtAry = DasAry_valType( pThis->pAry ); + + DasErrCode nRet = DAS_OKAY; + ubyte uNull = 0; + + int nValsToRead = -1; /* Becomes vals we did read before return */ + int nBytesRead = 0; /* Used to get the return value */ + + /* Know how many I want, know how big each one is (common das2 case) */ + if((pThis->nBufValSz > 0)&&(nExpect > 0)){ + if(nBufLen < (nExpect * pThis->nBufValSz)){ + return -1 * das_error(DASERR_ENC, + "Remaining read bytes, %d, too small to supply %d %d byte values", + nBufLen, nExpect, pThis->nBufValSz + ); } + nValsToRead = nExpect; + } + /* Know how many I want, don't know how big each one is (voyager events list) */ + else if((pThis->nBufValSz < 1)&&(nExpect > 0)){ + nValsToRead = nExpect; + assert(pThis->uProc & DASENC_VARSZ); + } + /* Know how big each one is, don't know how many I want (decompressed cassini waveforms) */ + else if((pThis->nBufValSz > 0)&&(nExpect < 0)){ + nValsToRead = nBufLen / pThis->nBufValSz; + if(nBufLen < pThis->nBufValSz){ + return -1 * das_error(DASERR_ENC, + "Remaining read bytes, %zu, are too small to supply a single %d byte value", + nBufLen, pThis->nBufValSz + ); + } + } + /* Don't know how big each one is, don't know how many I want (header value parsing)*/ + else{ + assert((pThis->uProc & (DASENC_TEXT|DASENC_VARSZ)) == (DASENC_TEXT|DASENC_VARSZ)); + } - if(uValSz > 0) - memset(sValue, 0, uValSz); - uValSz = 0; + /* The BIG switch one case = one decoding method */ + ubyte* pWrite = NULL; + switch(pThis->uProc & DASENC_MAJ_MASK){ - while(*pGet != pThis->cSep && *pGet != '\0' && (pThis->cSep || !isspace(*pGet)) ){ - sValue[uValSz] = *pGet; - ++pGet; - ++uGot; - ++uValSz; - if((uGot == uBufLen)||(uValSz > 254)) - break; - } + /* Easy mode, external data and internal array have the same value type */ + case 0: + assert(pThis->nBufValSz == pThis->nAryValSz); + assert(pThis->nBufValSz > 0); + assert(nValsToRead > 0); - if(uValSz > 0){ + if((pWrite = DasAry_append(pThis->pAry, pBuf, nValsToRead)) == NULL) + return -1 * DASERR_ARRAY; + + nBytesRead = nValsToRead * (pThis->nBufValSz); + break; - if(pThis->uProc & DASENC_PARSE){ - nRet = das_value_fromStr(aValue, sizeof(das_time), pThis->vtAry, sValue); - if(nRet != DAS_OKAY) - return -1 * nRet; - if(!DasAry_append(pThis->pAry, aValue, 1)) - return -1 * DASERR_ARRAY; - } - else{ - /* No parsing needed, just run in the value. Typically there are - two versions of this. - 1) We just append characters then call markEnd to roll the next - to last index. + /* Almost easy, only need to swap to get into internal storage */ + case DASENC_SWAP: + assert(pThis->nBufValSz == pThis->nAryValSz); + assert(nValsToRead > 0); + assert(pThis->nBufValSz > 0); - 2) We append exactly the number of characters to make up the - last index. - */ - if(pThis->uProc & DASENC_WRAP){ - uToWrite = pThis->uProc & DASENC_NULLTERM ? uValSz + 1 : uValSz; + /* Alloc space as fill, then write in swapped values */ + if((pWrite = DasAry_append(pThis->pAry, NULL, nValsToRead)) == NULL) + return -1 * DASERR_ARRAY; - if(DasAry_append(pThis->pAry, (const ubyte*) sValue, uToWrite) == NULL) - return -1 * DASERR_ARRAY; + if((nRet = _swap_read(pWrite, pBuf, nValsToRead, pThis->nBufValSz)) != DAS_OKAY) + return -1 * nRet; - DasAry_markEnd(pThis->pAry, DasAry_rank(pThis->pAry) - 1); - } - else{ - uToWrite = uValSz > pThis->uMaxString ? pThis->uMaxString : uValSz; - - if(DasAry_append(pThis->pAry, (const ubyte*) sValue, uToWrite) == NULL) - return -1 * DASERR_ARRAY; - - /* Fill pad if we need to */ - if(uValSz < pThis->uMaxString){ - uToWrite = pThis->uMaxString - uValSz; - if( DasAry_append(pThis->pAry, NULL, uToWrite) ) - return -1 * DASERR_ARRAY; - } - } + nBytesRead = nValsToRead * (pThis->nBufValSz); + break; + + + /* Need to cast values to a larger type for storage */ + case DASENC_CAST: + assert(nValsToRead > 0); + assert(pThis->nBufValSz > 0); + + ubyte* pWrite = NULL; + if((pWrite = DasAry_append(pThis->pAry, NULL, nValsToRead)) == NULL) + return -1 * DASERR_ARRAY; + + if((nRet = _cast_read(pWrite, pBuf, nValsToRead, vtAry, pThis->vtBuf)) != DAS_OKAY) + return -1 * nRet; + + nBytesRead = nValsToRead * (pThis->nBufValSz); + break; + + + /* Bigest binary change, swap and cast to a larger type for storage */ + case DASENC_CAST|DASENC_SWAP: + assert(nValsToRead > 0); + assert(pThis->nBufValSz > 0); + + if((pWrite = DasAry_append(pThis->pAry, NULL, nValsToRead)) == NULL) + return -1 * DASERR_ARRAY; + + if((nRet = _swap_cast_read(pWrite, pBuf, nValsToRead, vtAry, pThis->vtBuf)) != DAS_OKAY) + return -1 * nRet; + + nBytesRead = nValsToRead * (pThis->nBufValSz); + break; + + + /* Easy, just run in the text, don't markEnd */ + case DASENC_TEXT: + assert(nValsToRead > 0); + assert(pThis->nBufValSz > 0); + assert((pThis->uProc & DASENC_WRAP) == 0); + + if(pThis->uProc & DASENC_NULLTERM){ + for(int i = 0; i < nValsToRead; ++i){ + DasAry_append(pThis->pAry, pBuf+((pThis->nBufValSz+1)*i), pThis->nBufValSz); + DasAry_append(pThis->pAry, &uNull, 1); } - - ++uVals; } + else{ + DasAry_append(pThis->pAry, pBuf, (pThis->nBufValSz)*nValsToRead); + } + + nBytesRead = nValsToRead * (pThis->nBufValSz); + break; + + + /* Fixed length text to parse, then run in, also common in das2 */ + case DASENC_TEXT|DASENC_PARSE: + assert(nValsToRead > 0); + assert(pThis->nBufValSz > 0); + + nBytesRead = _fixed_text_convert(pThis, pBuf, pThis->nBufValSz, nValsToRead); + if(nBytesRead < 0 ) + return nBytesRead; + + break; + + /* ************** End of Fixed Length Item Cases ********************* */ + + /* Search for the end, run and data, markEnd if array is variable size */ + /* or search of the end, parse, then run in the data */ + case DASENC_TEXT|DASENC_VARSZ: + case DASENC_TEXT|DASENC_PARSE|DASENC_VARSZ: + int nValsDidRead = 0; + nBytesRead = _var_text_read(pThis, pBuf, nBufLen, nValsToRead, &nValsDidRead); + nValsToRead = nValsDidRead; + + if(nBytesRead < 0 ) + return nBytesRead; + break; + + /* Must have forgot one... */ + default: + return -1 * das_error(DASERR_ENC, ENCODER_SETUP_ERROR); } -PARSE_DONE: - if(pRead) - *pRead = uVals; + if(pValsRead) + *pValsRead = nValsToRead; - return uBufLen - ((const ubyte*)pGet - pBuf); + return nBufLen - nBytesRead; /* Return number of unread bytes */ } - diff --git a/das2/codec.h b/das2/codec.h index d968842..c4e7c05 100644 --- a/das2/codec.h +++ b/das2/codec.h @@ -35,16 +35,16 @@ extern "C" { /** Reading and writing array data to buffers */ typedef struct das_codec { + bool bResLossWarn; /* If true, the resolution loss warning has already been emitted */ + uint32_t uProc; /* Internal processing flags setup on the call to _init */ int nAryValSz; /* The size of each array value in internal buffer */ - int nBufValSz; /* Width of a single value in the external buffer, ignored for vtText */ + int16_t nBufValSz; /* Width of a single value in the external buffer */ das_val_type vtBuf; /* The value type in the external buffer */ - das_val_type vtAry; /* Cached here for rapid access */ - DasAry* pAry; /* The array for which values are encoded/decoded */ ubyte cSep; /* Split strings on this byte value, in addition to null */ @@ -54,6 +54,9 @@ typedef struct das_codec { das_units timeUnits; /* If ascii times are to be stored as an integral type this is needed */ + char* pOverflow; /* If the size of a variable length value breaks */ + size_t uOverflow; /* the small vector assumption, extra space is here */ + } DasCodec; /** Has the memory for this encoder been initialized? */ @@ -106,15 +109,24 @@ typedef struct das_codec { */ DAS_API DasErrCode DasCodec_init( DasCodec* pThis, DasAry* pAry, const char* sSemantic, const char* sEncType, - uint16_t uSzEach, ubyte cSep, das_units epoch + int16_t uSzEach, ubyte cSep, das_units epoch ); /** Read values from a simple buffer into an array * - * @param pThis An encoder - + * Unlike the old das2 version, this encoder doesn't have a built-in number + * of values it will always expect to read. If no pre-determined number + * of values is given in nExpect, then it will read until the buffer is + * exhausted. + * + * To control the number of bytes read control nBufLen + * + * @param pThis An encoder. The pointer isn't constant because the + * encoder may have to allocate some memory for long, variable length + * text values. + * * @param pBuf A pointer to the memory to read - + * * @param nBufLen The length of the buffer parse into the array. Note that * even for string data the function trys to read nLen bytes. Null * values do not terminate parsing but do indicate the end of an @@ -126,14 +138,14 @@ DAS_API DasErrCode DasCodec_init( * with the number provided for nExpect. If any number of values * can be read, set this to -1. * - * @param pRead A pointer to a location to hold the number of values read + * @param pValsRead A pointer to a location to hold the number of values read * or NULL. If NULL, the number of values read will not be returned * * @returns the number of unread bytes or a negative ERR code if a data conversion * error occured. * */ DAS_API int DasCodec_decode( - DasCodec* pThis, const ubyte* pBuf, size_t nBufLen, int nExpect, int* pRead + DasCodec* pThis, const ubyte* pBuf, int nBufLen, int nExpect, int* pValsRead ); /** Release the reference count on the array given to this encoder/decoder */ diff --git a/das2/dataset.c b/das2/dataset.c index 915c351..f19bfc5 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -469,7 +469,7 @@ char* DasDs_toStr(const DasDs* pThis, char* sBuf, int nLen) } /* ************************************************************************* */ -/* Construction, Destruction */ +/* Construction, Destruction, Clearing */ void del_DasDs(DasDs* pThis){ size_t u; @@ -492,6 +492,22 @@ void del_DasDs(DasDs* pThis){ free(pThis); } +size_t DasDs_clearRagged0Arrays(DasDs* pThis) +{ + size_t uBytesCleared = 0; + + int nRank; + ptrdiff_t aShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + for(int i = 0; i < pThis->uArrays; ++i){ + nRank = DasAry_shape(pThis->lArrays[i], aShape); + + if((nRank >= 1)&&(aShape[0] == DASIDX_RAGGED)) + uBytesCleared += DasAry_clear(pThis->lArrays[i]); + } + + return uBytesCleared; +} + DasDs* new_DasDs( const char* sId, const char* sGroupId, int nRank ){ diff --git a/das2/dataset.h b/das2/dataset.h index e6cd5f6..d357adc 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -534,6 +534,21 @@ DAS_API DasErrCode DasDs_addRaggedCodec( int nItemBytes, int nSeps, ubyte uSepLen, const ubyte* pSepByIdx ); +/** Clear any arrays that are ragged in index l + * + * This function is handy when reading data to insure that memory usage + * does not grow without limit. Any memory allocated is not freed, but + * the write points are reset so that the same buffers can be used over + * and over again. + * + * @param pThis A dataset + * + * @returns The number of bytes cleared. + * + * @memberof DasAry + */ +DAS_API size_t DasDs_clearRagged0Arrays(DasDs* pThis); + /** Make a new dimension within this dataset * @@ -625,7 +640,7 @@ DAS_API const DasDim* DasDs_getDim( */ DAS_API const DasDim* DasDs_getDimById(const DasDs* pThis, const char* sId); -/** Print a string reprenestation of this dataset. +/** Print a string representation of this dataset. * * Note: Datasets can be complicated items provide a good sized buffer * (~1024 bytes), when calling this function as it triggers subcalls for diff --git a/das2/io.c b/das2/io.c index 3b9cacb..73e1979 100644 --- a/das2/io.c +++ b/das2/io.c @@ -1213,16 +1213,29 @@ DasErrCode _DasIO_handleData( assert(false); if(nRet != 0) return nRet; - + + bool bClearDs = false; for(size_t u = 0; pThis->pProcs[u] != NULL; u++){ pHndlr = pThis->pProcs[u]; + if((pDesc->type == PACKET)&&(pHndlr->pktDataHandler != NULL)) nRet = pHndlr->pktDataHandler((PktDesc*)pDesc, pHndlr->userData); - else if((pDesc->type == DATASET)&&(pHndlr->dsDataHandler != NULL)) - nRet = pHndlr->dsDataHandler(pSd, (DasDs*)pDesc, pHndlr->userData); + + else if(pDesc->type == DATASET){ + if(pHndlr->dsDataHandler == NULL) + bClearDs = true; + else + nRet = pHndlr->dsDataHandler(pSd, (DasDs*)pDesc, pHndlr->userData); + } if(nRet != DAS_OKAY) break; } + + /* Since data sets can hold an arbitrary number of packets, clear + * them if no handler */ + if(bClearDs) + DasDs_clearRagged0Arrays((DasDs*)pDesc); + return nRet; } diff --git a/das2/serial.c b/das2/serial.c index cd9e3b8..2e26cf2 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -975,7 +975,8 @@ static void _serial_xmlCharData(void* pUserData, const char* sChars, int nLen) /* Read the underflow buffer then clear it */ /* TODO: make DasAry_putAt handle index rolling as well */ - nUnRead = DasCodec_decode(&(pCtx->codecHdrVals), pCtx->aValUnderFlow, nLen, -1, NULL); + int nValsRead = 0; + nUnRead = DasCodec_decode(&(pCtx->codecHdrVals), pCtx->aValUnderFlow, nLen, -1, &nValsRead); if(nUnRead < 0){ pCtx->nDasErr = -1 * nUnRead; return; @@ -1350,7 +1351,7 @@ DasErrCode dasds_decode_data(DasDs* pDs, DasBuf* pBuf) } if(uBufLen > 0xffffffff) return das_error(DASERR_SERIAL, "Packet buffer > signed integer range, what are you doing?"); - + int nBufLen = (int)uBufLen; /* Encoder returns the number of bytes it didn't read. Assuming we are doing things right, the last return from the last encoder call will @@ -1366,7 +1367,7 @@ DasErrCode dasds_decode_data(DasDs* pDs, DasBuf* pBuf) ); - nUnReadBytes = DasCodec_decode(pCodec, pRaw, uBufLen, nValsExpect, &nValsRead); + nUnReadBytes = DasCodec_decode(pCodec, pRaw, nBufLen, nValsExpect, &nValsRead); if(nUnReadBytes < 0) return -1 * nUnReadBytes; @@ -1381,7 +1382,7 @@ DasErrCode dasds_decode_data(DasDs* pDs, DasBuf* pBuf) /* Since we used direct (aka raw) access, we have to manually adjust the read point of the buffer */ - int nReadBytes = (int)uBufLen - nUnReadBytes; + int nReadBytes = nBufLen - nUnReadBytes; assert(nReadBytes > -1); size_t uCurOffset = DasBuf_readOffset(pBuf); DasBuf_setReadOffset(pBuf, uCurOffset + nReadBytes); diff --git a/das2/time.c b/das2/time.c index 436102c..35e59db 100644 --- a/das2/time.c +++ b/das2/time.c @@ -1,5 +1,5 @@ -/* Copyright (C) 1993-2019 Larry Granroth - * Chris Piker +/* Copyright (C) 2015-2024 Chris Piker + * Copyright (C) 1993-1998 Larry Granroth * * This file used to be named parsetime.c. It is part of das2C, the Core * Das2 C Library. @@ -47,6 +47,7 @@ #include "das1.h" #include "time.h" #include "util.h" +#include "tt2000.h" #ifdef _WIN32 #pragma warning(disable : 4706) @@ -833,6 +834,51 @@ int64_t dt_nano_1970(const das_time* pThis) return epoch; } +/* ************************************************************************ */ +int64_t dt_to_tt2k(const das_time* pThis){ + + das_time dt = *(pThis); /* avoid constant pointer indirections */ + + double yr = dt.year; + double mt = dt.month; + double dy = dt.mday; + double hr = dt.hour; + double mn = dt.minute; + + double sc = (double) ((int)(dt.second)); + double sec_frac = dt.second - sc; + + double ms = (double) ((int)(sec_frac * 1000.0)); + double ms_frac = (sec_frac * 1000.0) - ms; + + double us = (double) ((int)(ms_frac * 1000.0)); + double us_frac = (ms_frac * 1000.0) - us; + + double ns = (double) ((int)(us_frac * 1000.0)); + + return das_utc_to_tt2K(yr, mt, dy, hr, mn, sc, ms, us, ns); +} + +void dt_from_tt2k(das_time* pThis, int64_t nTime) +{ + double yr, mt, dy, hr, mn, sc, ms, us, ns; + + das_tt2K_to_utc(nTime, &yr, &mt, &dy, &hr, &mn, &sc, &ms, &us, &ns); + pThis->year = (int)yr; + pThis->month = (int)mt; + pThis->mday = (int)dy; + + pThis->hour = (int)hr; + pThis->minute = (int)mn; + + /* Drop the leap second, das_time can't handle it */ + if(sc > 59.0) + sc = 59.0; + + pThis->second = sc + ms*1.0e-33 + us*1.0e-6 + ns*1.0e-9; + + dt_tnorm(pThis); +} /* ************************************************************************* */ diff --git a/das2/time.h b/das2/time.h index c1fee88..a23649f 100644 --- a/das2/time.h +++ b/das2/time.h @@ -310,6 +310,17 @@ DAS_API double dt_ttime(const das_time* dt); */ DAS_API void dt_emitt (double tt, das_time* dt); +/** Convert a time structure to a TT2000 time + * + * @memberof das_time + */ +DAS_API int64_t dt_to_tt2k(const das_time* dt); + +/** Convert a TT2000 time to a time structure + * + * @memberof das_time + */ +DAS_API void dt_from_tt2k(das_time* dt, int64_t nTime); /** Normalize date and time components * From 75b6df495f0f096e91904c6c5a35ea0996d079ba Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Fri, 16 Feb 2024 21:59:58 -0600 Subject: [PATCH 18/40] das3 parser passes first full stream unit test --- das2/codec.c | 24 +++++++++++++----------- das2/dataset.c | 2 +- das2/serial.c | 42 ++++++++++++++++++++++++++++++++---------- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/das2/codec.c b/das2/codec.c index b09bf52..843b84a 100644 --- a/das2/codec.c +++ b/das2/codec.c @@ -55,6 +55,9 @@ DasErrCode DasCodec_init( pThis->nBufValSz = nSzEach; assert(pAry != NULL); + if(nSzEach == 0) + return das_error(DASERR_ENC, "Invalid item size in buffer: 0"); + bool bDateTime = false; /* Don't let the array delete itself out from under us*/ @@ -178,6 +181,9 @@ DasErrCode DasCodec_init( pThis->vtBuf = vtText; pThis->uProc |= DASENC_TEXT; + if(pThis->nBufValSz < 1) + pThis->uProc |= DASENC_VARSZ; + /* Deal with the text types */ if(strcmp(sSemantic, "bool") == 0){ return das_error(DASERR_NOTIMP, "TODO: Add parsing for 'true', 'false' etc."); @@ -524,6 +530,7 @@ static int _convert_n_store_text(DasCodec* pThis, const char* sValue) /* Helper ***************************************************************** */ +/* Returns the number of bytes read, or a negative error code */ static int _fixed_text_convert( DasCodec* pThis, const ubyte* pBuf, int nSzEach, int nNumToRead ){ @@ -539,7 +546,7 @@ static int _fixed_text_convert( int nRet; char sValue[128] = {'\0'}; - int nBytesRead; + int nBytesRead = 0; for(int i = 0; i < nNumToRead; ++i){ memset(sValue, 0, 128); @@ -568,12 +575,12 @@ static int _fixed_text_convert( static int _var_text_item_sz(const char* pBuf, int nBufLen, char cSep) { - /* Break the value on a null, a seperator, or if the separator is - null, then on space characters */ + /* Break the value on a null, or a seperator. + If the separator is null, then break on space characters */ int nSize = 0; while( - (nBufLen > 0)&& - ( *pBuf == cSep||*pBuf == '\0'||(!cSep && isspace(*pBuf)) ) + (nBufLen > 0)&&(*pBuf != cSep)&&(*pBuf != '\0')&& + (cSep || !(isspace(*pBuf)) ) ){ --nBufLen; ++nSize; @@ -644,13 +651,8 @@ static int _var_text_read( /* 4. Convert and save, or just save, with optional null and wrap */ if(bParse){ - nRet = _convert_n_store_text(pThis, pValue); - ubyte aValue[sizeof(das_time)]; - nRet = das_value_fromStr(aValue, sizeof(das_time), vtAry, pValue); - if(nRet != DAS_OKAY) + if((nRet = _convert_n_store_text(pThis, pValue)) != DAS_OKAY) return -1 * nRet; - if(!DasAry_append(pThis->pAry, aValue, 1)) - return -1 * DASERR_ARRAY; } else{ assert(vtAry == vtUByte); diff --git a/das2/dataset.c b/das2/dataset.c index f19bfc5..3361f1a 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -458,7 +458,7 @@ char* DasDs_toStr(const DasDs* pThis, char* sBuf, int nLen) } ++pRead; } - nWritten = snprintf(pWrite, nLen-1, "\n "); + nWritten = snprintf(pWrite, nLen-1, "\n"); pWrite += nWritten; nLen -= nWritten; } diff --git a/das2/serial.c b/das2/serial.c index 2e26cf2..51163ba 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -1056,22 +1056,44 @@ static void _serial_onCloseVals(struct serial_xml_context* pCtx){ pCtx->bInValues = false; - /* Cross check variable size against the array size, make sure they */ - /* match. */ + /* Cross check dataset size against the array size, make sure they match. */ + + /* Look over external dimensions. The var map is hard to keep straight. + * + * - The index you on while looping over the var map is the external + * index. + * + * - The value in the map is what array index maps to the external + * index + * + * - We don't care about mappings to non-fixed external indicies + */ size_t uExpect = 0; - int nDsRank = DasDs_rank(pCtx->pDs); - for(int i = 0; i < nDsRank; ++i){ - if((pCtx->aVarMap[i] >= 0)&&(pCtx->aExtShape[pCtx->aVarMap[i]] > 0)){ - if(uExpect == 0) uExpect = pCtx->aExtShape[ pCtx->aVarMap[i] ]; - else uExpect *= pCtx->aExtShape[ pCtx->aVarMap[i] ]; - } + + for(int iExt = 0; iExt < DASIDX_MAX; ++iExt){ + + if(pCtx->aExtShape[iExt] == DASIDX_UNUSED) + break; + + if(pCtx->aExtShape[iExt] < 1) continue; /* this external index is variable length */ + + if(pCtx->aVarMap[iExt] < 0) continue; /* Array doesn't map to this external index */ + + /* Array does map to this external index, get the number of items in this external + index */ + + if(uExpect == 0) + uExpect = pCtx->aExtShape[ iExt ]; + else + uExpect *= pCtx->aExtShape[ iExt ]; } /* Now get the array size in any non-internal dimensions */ ptrdiff_t aShape[DASIDX_MAX] = {0}; - DasAry_shape(pCtx->pCurAry, aShape); + int nExtAryRank = DasAry_shape(pCtx->pCurAry, aShape) - pCtx->varIntRank; + size_t uHave = 0; - for(int i = 1; i < DASIDX_MAX; ++i){ + for(int i = 0; i < nExtAryRank; ++i){ if(aShape[i] > 0){ if(uHave == 0) uHave = aShape[i]; From 1019c15722a545754ba5d8b3de8141ab6fa0bf55 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sat, 17 Feb 2024 15:44:12 -0600 Subject: [PATCH 19/40] Started cdf writer, explicit stream model selection --- buildfiles/Linux.mak | 8 +- das2/io.c | 22 ++- das2/io.h | 49 +++-- das2/stream.c | 79 +++++++- das2/stream.h | 13 +- utilities/das3_cdf.c | 266 ++++++++++++++++++++++++++ utilities/{das_node.c => das3_node.c} | 0 7 files changed, 413 insertions(+), 24 deletions(-) create mode 100644 utilities/das3_cdf.c rename utilities/{das_node.c => das3_node.c} (100%) diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index f39bf30..d090068 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -28,11 +28,13 @@ endif UTIL_PROGS=das1_inctime das2_prtime das1_fxtime das2_ascii das2_bin_avg \ das2_bin_avgsec das2_bin_peakavgsec das2_from_das1 das2_from_tagged_das1 \ das1_ascii das1_bin_avg das2_bin_ratesec das2_psd das2_hapi das2_histo \ - das2_cache_rdr das_node + das2_cache_rdr das3_node TEST_PROGS:=TestUnits TestArray TestVariable LoadStream TestBuilder \ TestAuth TestCatalog TestTT2000 ex_das_cli ex_das_ephem TestCredMngr \ TestV3Read + +CDF_PROGS:=das3_cdf ifeq ($(SPICE),yes) TEST_PROGS:=$(TEST_PROGS) TestSpice @@ -164,6 +166,10 @@ $(BD)/das2_bin_ratesec:$(BD)/das2_bin_ratesec.o $(BD)/via.o $(BD)/$(TARG).a $(BD)/das2_psd:$(BD)/das2_psd.o $(BD)/send.o $(BD)/$(TARG).a $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@ +cdf:$(BD)/das3_cdf + +$(BD)/das3_cdf:$(BD)/das3_cdf.o + $(CC) $(CFLAGS) -o $@ $< $(BD)/$(TARG).a $(LFLAGS) # Run tests test: $(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) diff --git a/das2/io.c b/das2/io.c index 73e1979..1cc03aa 100644 --- a/das2/io.c +++ b/das2/io.c @@ -71,7 +71,6 @@ typedef ptrdiff_t ssize_t; /* stream is coming from a sub command */ #define STREAM_MODE_CMD 4 - /* ************************************************************************** */ /* Constructors/Destructors */ @@ -113,6 +112,7 @@ DasIO* new_DasIO_cfile(const char* sProg, FILE * file, const char* mode ) DasIO* pThis = (DasIO*)calloc(1, sizeof( DasIO ) ); pThis->mode = STREAM_MODE_FILE; + pThis->model = STREAM_MODEL_V2; pThis->file = file; pThis->nSockFd = -1; pThis->taskSize = -1; /* for progress indication */ @@ -166,6 +166,7 @@ DasIO* new_DasIO_file(const char* sProg, const char* sFile, const char* mode) { DasIO* pThis = (DasIO*)calloc(1, sizeof( DasIO ) ); pThis->mode= STREAM_MODE_FILE; + pThis->model = STREAM_MODEL_V2; pThis->taskSize= -1; /* for progress indication */ pThis->logLevel=LOGLVL_WARNING; pThis->nSockFd = -1; @@ -197,6 +198,7 @@ DasIO* new_DasIO_socket(const char* sProg, int nSockFd, const char* mode) { DasIO* pThis = (DasIO*)calloc(1, sizeof( DasIO ) ); pThis->mode = STREAM_MODE_SOCKET; + pThis->model = STREAM_MODEL_V2; pThis->nSockFd = nSockFd; pThis->taskSize= -1; /* for progress indication */ pThis->logLevel=LOGLVL_WARNING; @@ -221,6 +223,7 @@ DasIO* new_DasIO_ssl(const char* sProg, void* pSsl, const char* mode) { DasIO* pThis = (DasIO*)calloc(1, sizeof( DasIO ) ); pThis->mode = STREAM_MODE_SSL; + pThis->model = STREAM_MODEL_V2; pThis->nSockFd = SSL_get_fd((SSL*)pSsl); pThis->pSsl = pSsl; pThis->taskSize= -1; /* for progress indication */ @@ -247,6 +250,7 @@ DasIO* new_DasIO_str( ){ DasIO* pThis = (DasIO*)calloc(1, sizeof( DasIO ) ); pThis->mode = STREAM_MODE_STRING; + pThis->model = STREAM_MODEL_V2; pThis->sBuffer = sbuf; pThis->nLength = length; pThis->taskSize= -1; /* for progress indication */ @@ -263,6 +267,19 @@ DasIO* new_DasIO_str( return pThis; } +DasErrCode DasIO_model(DasIO* pThis, int nModel){ + if(nModel == 2) + pThis->model = STREAM_MODEL_V2; + else if(nModel == 3) + pThis->model = STREAM_MODEL_V2; + else if(nModel == -1) + pThis->model = STREAM_MODEL_MIXED; + else + return das_error(DASERR_IO, "Invalid stream model: %d", nModel); + + return DAS_OKAY; +} + /* ************************************************************************** */ /* Socket Assistance */ @@ -1127,7 +1144,8 @@ DasErrCode _DasIO_handleDesc( DasErrCode nRet = 0; // Supply the stream descriptor if it exits - if( (pDesc = DasDesc_decode(pBuf, pSd, nPktId)) == NULL) return DASERR_IO; + if( (pDesc = DasDesc_decode(pBuf, pSd, nPktId, pThis->model)) == NULL) + return DASERR_IO; if(pDesc->type == STREAM){ if(*ppSd != NULL) diff --git a/das2/io.h b/das2/io.h index 46c5bdd..16a58b1 100644 --- a/das2/io.h +++ b/das2/io.h @@ -1,19 +1,19 @@ -/* Copyright (C) 2004-2017 Jeremy Faden - * Chris Piker +/* Copyright (C) 2015-2024 Chris Piker + * Copyright (C) 2004-2006 Jeremy Faden * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ /** @file io.h Reading and writing Das2 Stream objects to standard I/O. @@ -37,6 +37,7 @@ extern "C" { #define DASIO_NAME_SZ 128 + /** Tracks input and output operations for das2 stream headers and data. * * Members of this class handle overall stream operations reading writing @@ -46,11 +47,14 @@ extern "C" { * @ingroup streams */ typedef struct das_io_struct { - char rw; /* w' for write, 'r' for read */ + char rw; /* w' for write, 'r' for read, plus the tag style */ + int model; /* Expected datastructure types in the stream */ + bool compressed; /* 1 if stream is compressed or should be compressed */ int mode; /* STREAM_MODE_STRING, STREAM_MODE_FILE, * STREAM_MODE_SOCKET, STREAM_MODE_SSL */ + char sName[DASIO_NAME_SZ]; /* A human readable name for data source or sink */ long int offset; /* current offset for file reads */ @@ -108,10 +112,10 @@ typedef struct das_io_struct { * * @param file a C standard IO file object. * - * @param mode A string containing the mode, one of: - * - 'r' read (any) - * - 'r2' read only das v2 streams (error on anything else) - * - 'r3' read only das v3 streams (error on anything else) + * @param mode A string containing the packet tag mode, one of: + * - 'r' read either tag type + * - 'r2' read only das v2 packet tags (error on anything else) + * - 'r3' read only das v3 packet tags (error on anything else) * - 'w','w2' write das v2 stream uncompressed * - 'w3' write das v3 stream uncompressed * - 'wc','wc2' write das v2 stream compressed @@ -121,6 +125,27 @@ typedef struct das_io_struct { */ DAS_API DasIO* new_DasIO_cfile(const char* sProg, FILE* file, const char* mode); +/** Set the parsed stream data model + * + * When set to false either das2 or das3 data structs are gerenated + * depending on the stream content. When set to true, das2 + * data structures encountered in the stream are up-converted to das3. + * + * @param pThis The DasIO object to configure, must be in read mode + * + * @param nModel The internal data sturcture version to use. If set + * to 2 any das3 structures encountered will trigger a + * failure. If set to 3 then any das2 structures will be + * upgraded to das3. Use -1 to indicate mixed model streams + * (not recommened) + * + * @returns DAS_OKAY if successful or an error code if not. + * + * @memberof DasIO + */ +DAS_API DasErrCode DasIO_model(DasIO* pThis, int nModel); + + /** Create a new DasIO object from a shell command * * Create a DasIO object that reads from a sub command. The sub command is @@ -222,6 +247,7 @@ DAS_API DasIO* new_DasIO_ssl(const char* sProg, void* pSsl, const char* mode); DAS_API void del_DasIO(DasIO* pThis); + /** Add a packet processor to be invoked during I/O operations * * A DasIO object may have 0 - DAS2_MAX_PROCESSORS packet processors attached @@ -241,7 +267,6 @@ DAS_API void del_DasIO(DasIO* pThis); */ DAS_API int DasIO_addProcessor(DasIO* pThis, StreamHandler* pProc); - /** Starts the processing of the stream read from FILE* infile. * * This function does not return until all input has been read or an exception diff --git a/das2/stream.c b/das2/stream.c index fe0fa55..42f88cb 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -440,6 +440,8 @@ typedef struct parse_stream_desc{ DasFrame* pFrame; // Only non-null when in a tag DasErrCode nRet; bool bInProp; + bool bV3Okay; + bool bV2Okay; char sPropUnits[_UNIT_BUF_SZ+1]; char sPropName[_NAME_BUF_SZ+1]; char sPropType[_TYPE_BUF_SZ+1]; @@ -451,6 +453,10 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) { int i; parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; + + if(pPsd->nRet != DAS_OKAY) /* Processing halt */ + return; + StreamDesc* pSd = pPsd->pStream; char sType[64] = {'\0'}; char sName[64] = {'\0'}; @@ -490,6 +496,13 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) } if(strcmp( el, "properties" ) == 0){ + if(!(pPsd->bV2Okay)){ + /* Properties don't have attributes in das3 streams */ + pPsd->nRet = das_error(DASERR_STREAM, + "properties attribute %s invalid in das3 stream headers", attr[i] + ); + return; + } DasDesc* pCurDesc = pPsd->pFrame ? (DasDesc*)(pPsd->pFrame) : (DasDesc*)(pPsd->pStream); @@ -506,6 +519,12 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) } if(strcmp(el, "p") == 0){ + if(!(pPsd->bV3Okay)){ + pPsd->nRet = das_error(DASERR_STREAM, + "Element

is invalid in das2 stream headers" + ); + return; + } if(strcmp(attr[i], "name") == 0) strncpy(pPsd->sPropName, attr[i+1], _NAME_BUF_SZ); else if(strcmp(attr[i], "type") == 0) @@ -518,6 +537,12 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) // elements dir and frame have name in common if((strcmp(el, "dir") == 0)||(strcmp(el, "frame") == 0)){ + if(!(pPsd->bV3Okay)){ + pPsd->nRet = das_error(DASERR_STREAM, + "Element <%s> is invalid in das2 stream headers", el + ); + return; + } if(strcmp(attr[i], "name") == 0){ memset(sName, 0, 64); strncpy(sName, attr[i+1], 63); continue; @@ -525,6 +550,12 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) } if(strcmp(el, "frame") == 0){ + if(!(pPsd->bV3Okay)){ + pPsd->nRet = das_error(DASERR_STREAM, + "Element <%s> is invalid in das2 stream headers", el + ); + return; + } if(strcmp(attr[i], "type") == 0){ memset(sType, 0, 64); strncpy(sType, attr[i+1], 63); continue; @@ -550,6 +581,13 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) } if(strcmp(el, "frame") == 0){ + if(!(pPsd->bV3Okay)){ + pPsd->nRet = das_error(DASERR_STREAM, + "Element <%s> is invalid in das2 stream headers", el + ); + return; + } + pPsd->pFrame = StreamDesc_createFrame(pSd, nFrameId, sName, sType); if(!pPsd->pFrame){ pPsd->nRet = das_error(DASERR_STREAM, "Frame definition failed in header"); @@ -560,6 +598,13 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) } if(strcmp(el, "dir") == 0){ + if(!(pPsd->bV3Okay)){ + pPsd->nRet = das_error(DASERR_STREAM, + "Element <%s> is invalid in das2 stream headers", el + ); + return; + } + if(pPsd->pFrame == NULL){ pPsd->nRet = das_error(DASERR_STREAM, "

element encountered outside a "); } @@ -576,6 +621,9 @@ void parseStreamDesc_chardata(void* data, const char* sChars, int len) { parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; + if(pPsd->nRet != DAS_OKAY) /* Processing halt */ + return; + if(!pPsd->bInProp) return; @@ -589,6 +637,9 @@ void parseStreamDesc_end(void* data, const char* el) { parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; + if(pPsd->nRet != DAS_OKAY) /* Processing halt */ + return; + if(strcmp(el, "frame") == 0){ // Close the frame pPsd->pFrame = NULL; @@ -627,7 +678,7 @@ void parseStreamDesc_end(void* data, const char* el) DasAry_clear(pAry); } -StreamDesc* new_StreamDesc_str(DasBuf* pBuf) +StreamDesc* new_StreamDesc_str(DasBuf* pBuf, int nModel) { StreamDesc* pThis = new_StreamDesc(); @@ -642,6 +693,8 @@ StreamDesc* new_StreamDesc_str(DasBuf* pBuf) parse_stream_desc_t psd; memset(&psd, 0, sizeof(psd)); psd.pStream = pThis; + psd.bV3Okay = (nModel == STREAM_MODEL_MIXED || nModel == STREAM_MODEL_V3); + psd.bV2Okay = (nModel == STREAM_MODEL_MIXED || nModel == STREAM_MODEL_V2); XML_Parser p = XML_ParserCreate("UTF-8"); if(!p){ @@ -705,8 +758,9 @@ DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf) } /* Factory function */ -DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd, int nPktId) -{ +DasDesc* DasDesc_decode( + DasBuf* pBuf, StreamDesc* pSd, int nPktId, int nModel +){ char sName[DAS_XML_NODE_NAME_LEN] = {'\0'}; /* Eat the whitespace on either end */ @@ -768,14 +822,25 @@ DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd, int nPktId) DasBuf_setReadOffset(pBuf, uPos); /* <-- the key call, back up the buffer */ - if(strcmp(sName, "stream") == 0) - return (DasDesc*) new_StreamDesc_str(pBuf); + if(strcmp(sName, "stream") == 0){ + return (DasDesc*) new_StreamDesc_str(pBuf, nModel); + } - if(strcmp(sName, "packet") == 0) + if(strcmp(sName, "packet") == 0){ + if((nModel != STREAM_MODEL_MIXED)&&(nModel != STREAM_MODEL_V2)){ + das_error(DASERR_STREAM, "das2 element found, expected das3 headers"); + return NULL; + } return (DasDesc*) new_PktDesc_xml(pBuf, (DasDesc*)pSd, nPktId); + } - if(strcmp(sName, "dataset") == 0) + if(strcmp(sName, "dataset") == 0){ + if((nModel != STREAM_MODEL_MIXED)&&(nModel != STREAM_MODEL_V3)){ + das_error(DASERR_STREAM, "das3 element found, expected das2 headers"); + return NULL; + } return (DasDesc*) dasds_from_xmlheader(3, pBuf, pSd, nPktId); + } das_error(DASERR_STREAM, "Unknown top-level descriptor object: %s", sName); return NULL; diff --git a/das2/stream.h b/das2/stream.h index 67da512..5877953 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -29,6 +29,10 @@ extern "C" { #endif +#define STREAM_MODEL_MIXED -1 +#define STREAM_MODEL_V2 2 +#define STREAM_MODEL_V3 3 + #define STREAMDESC_CMP_SZ 48 #define STREAMDESC_VER_SZ 48 #define STREAMDESC_TYPE_SZ 48 @@ -120,7 +124,7 @@ typedef struct stream_descriptor{ */ DAS_API StreamDesc* new_StreamDesc(void); -DAS_API StreamDesc* new_StreamDesc_str(DasBuf* pBuf); +DAS_API StreamDesc* new_StreamDesc_str(DasBuf* pBuf, int nModel); /** Print a short description of the stream to a string buffer, * This is not a serialization, just an overview @@ -369,10 +373,15 @@ DAS_API DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf); * * @param nPktId - The packet tag ID number corresponding to this top-level descriptor * + * @param nModel - The expected data model to parse into, one of + * STREAM_MODEL_MIXED, STREAM_MODEL_V2, or STREAM_MODEL_V3 + * * @returns Either a top level Descriptor object. The specific type dependings * on the data received, or NULL if the input could not be parsed. */ -DAS_API DasDesc* DasDesc_decode(DasBuf* pBuf, StreamDesc* pSd, int nPktId); +DAS_API DasDesc* DasDesc_decode( + DasBuf* pBuf, StreamDesc* pSd, int nPktId, int nModel +); #ifdef __cplusplus } diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c new file mode 100644 index 0000000..66acd1d --- /dev/null +++ b/utilities/das3_cdf.c @@ -0,0 +1,266 @@ +/* Copyright (C) 2024 Chris Piker + * + * This file is part of das2C, the Core Das2 C Library. + * + * das2C is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License version 2.1 as published + * by the Free Software Foundation. + * + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * version 2.1 along with das2C; if not, see . + */ + +/* **************************************************************************** + das3_cdf: Convert incomming das2 or das3 stream to a CDF file + + Can also issue a query to download data from a server + +**************************************************************************** */ + +#define _POSIX_C_SOURCE 200112L + +#include +#include +#include +#include + +#include + +#define PROG "das3_cdf" +#define PROGERR 63 + +/* ************************************************************************* */ +void prnHelp() +{ + printf( +"SYNOPSIS\n" +" " PROG " - Output das v2 and v3 streams as a CDF (Common Data Format) file\n" +"\n"); + + printf( +"USAGE\n" +" " PROG " [options] [< DAS_STREAM]\n" +"\n"); + + printf( +"DESCRIPTION\n" +" By default " PROG " reads a das2 or das3 stream from standard input and\n" +" writes a CDF file to standard output. Unlike other das stream processors\n" +" " PROG " is *not* a good filter. It does not start writing ANY output\n" +" until ALL input is consumed. This is unavoidable as the CDF format is\n" +" not a streaming format. Thus a temporary file must be created whose\n" +" bytes are then feed to standard output. If the end result is just to\n" +" generate a local file anyway use the '--output' option below to avoid the\n" +" default behavior.\n" +"\n" +" Data values are written to CDF variables and metadata are written to CDF\n" +" attributes. The mapping of stream properties to CDF attributes follows.\n" +"\n" +" Properties -> CDF Global Attributes\n" +" Properties -> CDF Global Attributes (prefix as needed)\n" +" , Properties -> CDF Variable Attributes\n" +"\n" +" During the metadata mapping, common das3 property names are converted\n" +" to equivalent ISTP metadata names. A few of the mappings are:\n" +"\n" +" title -> TITLE\n" +" label -> LABLAXIS (with units stripped)\n" +" label -> FIELDNAM\n" +" description -> CATDESC\n" +" summary -> VAR_NOTES\n" +"\n" +" Other CDF attributes are also set based on the data structure type. Some " +" examples are:\n" +"\n" +" DasVar.units -> UNITS\n" +" DasAry.fill -> FILLVAL\n" +" (algorithm) -> DEPEND_N\n" +"\n" +" Note that if the input is a legacy das2 stream, it is upgraded internally\n" +" to a das3 stream priror to writing the CDF file.\n" +"\n"); + + printf( +"OPTIONS\n" +" -h,--help Write this text to standard output and exit.\n" +"\n" +" -i URL,--input=URL\n" +" Instead of reading from standard input, read from this URL.\n" +" To read from a local file prefix it with 'file://'. Only\n" +" file://, http:// and https:// are supported.\n" +"\n" +" -o DEST,--output=DEST\n" +" Instead of acting as a poorly performing filter, write data\n" +" to this location. If DEST is a file then data will be written\n" +" directly to that file, and no temporary file will be created.\n" +" If DEST is a directory then an output file will be created\n" +" in the directory with an auto-generate filename. This is\n" +" useful when reading from das servers.\n" +"\n" +" -t DIR,--temp=DIR\n" +" CDF files are NOT a streaming format. In order for " PROG "\n" +" to act as a filter it must actually create a file and then\n" +" turn around and stream it's contents to stdout. Use this \n" +" specify the directory where the temporary file is created.\n" +"\n" +" -s FILE,--skeleton=FILE\n" +" Initialize the output CDF with a skeleton file first.\n" +" (experimental)\n" +"\n"); + + printf( +"EXAMPLES\n" +" 1. Convert a local das stream file to a CDF file:\n" +"\n" +" cat my_data.d3b | " PROG " -o my_data.cdf\n" +"\n" +" 2. Read from a remote das server and write data to the current directory,\n" +" auto-generating the CDF file name:\n" +"\n" +" " PROG " -i https://college.edu/mission/inst?beg=2014&end=2015 -o ./\n" +"\n"); + + printf( +"AUTHOR\n" +" chris-piker@uiowa.edu\n" +"\n"); + + printf( +"SEE ALSO\n" +" * das3_node\n" +" * Wiki page https://github.com/das-developers/das2C/wiki/das3_cdf\n" +" * ISTP CDF guidelines: https://spdf.gsfc.nasa.gov/istp_guide/istp_guide.html\n" +"\n"); + +} + +/* ************************************************************************* */ + +/* Return 0 or 1 on success, -1 on failure */ +static int _isArg( + const char* sArg, const char* sShort, const char* sLong, bool* pLong +){ + if(strcmp(sArg, sShort) == 0){ + *pLong = false; + return true; + } + + size_t uLen = strlen(sLong) + 1; /* Include the '=' */ + + if(strncmp(sArg, sLong, uLen) == 0){ + *pLong = true; + return true; + } + + return false; +} + +int parseArgs( + int argc, char** argv, char* sInFile, size_t nInFile, char* sOutFile, + size_t nOutFile, char* sTmpDir, size_t nTmpDir, char* sSkelFile, size_t nSkelFile +){ + int i = 0; + bool bIsLong = false; + + while(i < (argc-1)){ + ++i; /* 1st time, skip past the program name */ + + if(argv[i][0] == '-'){ + if(_isArg(argv[i], "-h", "--help", &bIsLong)){ + prnHelp(); + exit(0); + } + + if(_isArg(argv[i], "-i", "--input", &bIsLong)){ + if(!bIsLong && (i > argc-2)) goto NO_ARG; + else if(argv[i][8] == '\0') goto NO_ARG; + strncpy(sInFile, bIsLong ? argv[i] + 8 : argv[i+1], nInFile - 1); + } + + if(_isArg(argv[i], "-o", "--output", &bIsLong)){ + if(!bIsLong && (i > argc-2)) goto NO_ARG; + else if(argv[i][9] == '\0') goto NO_ARG; + strncpy(sOutFile, bIsLong ? argv[i] + 9 : argv[i+1], nOutFile - 1); + } + + if(_isArg(argv[i], "-t", "--temp", &bIsLong)){ + if(!bIsLong && (i > argc-2)) goto NO_ARG; + else if(argv[i][7] == '\0') goto NO_ARG; + strncpy(sTmpDir, bIsLong ? argv[i] + 7 : argv[i+1], nTmpDir - 1); + } + + if(_isArg(argv[i], "-s", "--skeleton", &bIsLong)){ + if(!bIsLong && (i > argc-2)) goto NO_ARG; + else if(argv[i][11] == '\0') goto NO_ARG; + strncpy(sSkelFile, bIsLong ? argv[i] + 11 : argv[i+1], nSkelFile - 1); + } + } + + return das_error(PROGERR, "Unknown command line argument %s", argv[i]); + } + + return DAS_OKAY; +NO_ARG: + return das_error(PROGERR, "Missing option after argument %s", argv[i]); +} + +/* ************************************************************************* */ + +#define IN_FILE_SZ 1024 /* das URLs can get long */ +#define OUT_FILE_SZ 256 +#define TMP_DIR_SZ 256 +#define SKEL_FILE_SZ 256 + +int main(int argc, char** argv) { + + /* Exit on errors, log info messages and above */ + das_init(argv[0], DASERR_DIS_EXIT, 0, DASLOG_INFO, NULL); + + char sInFile[IN_FILE_SZ] = {'\0'}; + char sOutFile[OUT_FILE_SZ] = {'\0'}; + char sTmpDir[TMP_DIR_SZ] = {'\0'}; + char sSkelFile[SKEL_FILE_SZ] = {'\0'}; + FILE* pFile = NULL; + + DasErrCode nRet = parseArgs( + argc, argv, sInFile, IN_FILE_SZ, sOutFile, OUT_FILE_SZ, sTmpDir, TMP_DIR_SZ, + sSkelFile, SKEL_FILE_SZ + ); + if(nRet != DAS_OKAY) + return 13; + + /* Build one of 4 types of stream readers */ + DasIO* pIn = NULL; + + if(sInFile[0] == '\0'){ /* Reading from standard input */ + pIn = new_DasIO_cfile(PROG, stdin, "r"); + } + else if(strncmp(sInFile, "https://", 8) == 0){ + TODO; + } + else if(strncmp(sInFile, "http://", 7) == 0){ + TODO; + } + else{ + // Just a file + const char* sTmp = sInFile; + if(strncmp(sInFile, "file://", 7) == 0) + pTmp = sInFile + 7; + pInFile = fopen(sTmp, "rb"); + if(pFile == NULL) + return das_error(PROGERR, "Couldn't open file %s", sTmp); + pIn = new_DasIO_cfile(PROG, pInFile, "rb"); + } + + DasIO_model(pIn, 3); /* Upgrade any das2 s to das3 s */ + + if(pInFile) + fclose(pInFile); + + return 0; +}; \ No newline at end of file diff --git a/utilities/das_node.c b/utilities/das3_node.c similarity index 100% rename from utilities/das_node.c rename to utilities/das3_node.c From 9bac525334ec5fd07d2d149dc8c2f432840ad266 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sat, 17 Feb 2024 15:52:37 -0600 Subject: [PATCH 20/40] Allow das2 streams into das3 data models --- das2/io.c | 2 +- das2/stream.c | 14 ++------------ test/TestV3Read.c | 1 + 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/das2/io.c b/das2/io.c index 1cc03aa..c4787c5 100644 --- a/das2/io.c +++ b/das2/io.c @@ -271,7 +271,7 @@ DasErrCode DasIO_model(DasIO* pThis, int nModel){ if(nModel == 2) pThis->model = STREAM_MODEL_V2; else if(nModel == 3) - pThis->model = STREAM_MODEL_V2; + pThis->model = STREAM_MODEL_V3; else if(nModel == -1) pThis->model = STREAM_MODEL_MIXED; else diff --git a/das2/stream.c b/das2/stream.c index 42f88cb..1d29576 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -441,7 +441,6 @@ typedef struct parse_stream_desc{ DasErrCode nRet; bool bInProp; bool bV3Okay; - bool bV2Okay; char sPropUnits[_UNIT_BUF_SZ+1]; char sPropName[_NAME_BUF_SZ+1]; char sPropType[_TYPE_BUF_SZ+1]; @@ -496,14 +495,6 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) } if(strcmp( el, "properties" ) == 0){ - if(!(pPsd->bV2Okay)){ - /* Properties don't have attributes in das3 streams */ - pPsd->nRet = das_error(DASERR_STREAM, - "properties attribute %s invalid in das3 stream headers", attr[i] - ); - return; - } - DasDesc* pCurDesc = pPsd->pFrame ? (DasDesc*)(pPsd->pFrame) : (DasDesc*)(pPsd->pStream); if( (pColon = strchr(attr[i], ':')) != NULL){ @@ -693,9 +684,8 @@ StreamDesc* new_StreamDesc_str(DasBuf* pBuf, int nModel) parse_stream_desc_t psd; memset(&psd, 0, sizeof(psd)); psd.pStream = pThis; - psd.bV3Okay = (nModel == STREAM_MODEL_MIXED || nModel == STREAM_MODEL_V3); - psd.bV2Okay = (nModel == STREAM_MODEL_MIXED || nModel == STREAM_MODEL_V2); - + psd.bV3Okay = (nModel == STREAM_MODEL_MIXED) || (nModel == STREAM_MODEL_V3); + XML_Parser p = XML_ParserCreate("UTF-8"); if(!p){ das_error(DASERR_STREAM, "couldn't create xml parser\n"); diff --git a/test/TestV3Read.c b/test/TestV3Read.c index 6778d60..ce8c755 100644 --- a/test/TestV3Read.c +++ b/test/TestV3Read.c @@ -68,6 +68,7 @@ int main(int argc, char** argv) FILE* pFile = fopen(g_sTestFiles[i], "r"); DasIO* pIn = new_DasIO_cfile("TestV3Read", pFile, "r"); + DasIO_model(pIn, STREAM_MODEL_MIXED); /* */ StreamHandler handler; memset(&handler, 0, sizeof(StreamHandler)); From c47e7bb96d8806245071ea0bf75c006b9d635cd5 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sat, 17 Feb 2024 23:37:45 -0600 Subject: [PATCH 21/40] checkpoint: cdf writer devel --- das2/descriptor.c | 23 ++++- das2/descriptor.h | 26 +++++- das2/serial.c | 10 ++- das2/serial.h | 26 +++++- das2/stream.c | 12 +-- utilities/das3_cdf.c | 205 +++++++++++++++++++++++++++++++++++++++---- 6 files changed, 275 insertions(+), 27 deletions(-) diff --git a/das2/descriptor.c b/das2/descriptor.c index 051229a..1c7b247 100644 --- a/das2/descriptor.c +++ b/das2/descriptor.c @@ -172,7 +172,7 @@ const DasProp* DasDesc_getLocal(const DasDesc* pThis, const char* sName) if((pProp->flags & DASPROP_VALID_MASK) && (strcmp(DasProp_name(pProp), sName) == 0) ) - return pProp; + return pProp; } return NULL; } @@ -191,6 +191,27 @@ const DasProp* DasDesc_getProp(const DasDesc* pThis, const char* sName) return NULL; } +const DasProp* DasDesc_getPropByIdx(const DasDesc* pThis, size_t uIdx) +{ + // Still a linear search, with two loops, but over a continuous block + // of memory at least + const DasAry* pProps = &(pThis->properties); + size_t uProps = DasAry_lengthIn(pProps, DIM0); + if(uIdx >= uProps) + return NULL; + + size_t uPropLen; + const DasProp* pProp = (const DasProp*) DasAry_getBytesIn( + pProps, DIM1_AT(uIdx), &uPropLen + ); + + if(pProp->flags & DASPROP_VALID_MASK) + return pProp; + else + return NULL; +} + + /* returns NULL if property does not exist, pointer to string value */ /* otherwise. Recursively searches up the parent hierarchy if the given */ diff --git a/das2/descriptor.h b/das2/descriptor.h index 44aea02..bd081fb 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -194,6 +194,28 @@ DAS_API const DasDesc* DasDesc_parent(DasDesc* pThis); */ DAS_API size_t DasDesc_length(const DasDesc* pThis); +/** Get a property name by an index + * + * This is useful when iterating over all properties in a Descriptor. Only + * valid properties owed by a descriptor are queried in this manner. Parent + * descriptors are not consulted. + * + * @see DasDesc_length() + * @param pThis A pointer to the descriptor to query + * + * @param uIdx The index of the property, will be a value between 0 and + * the return value from Desc_length(). For efficient storage + * properties that have been erased or over-written are left in + * place internally and just marked as invalid. + * + * @return A pointer the requested property, or NULL if the property is + * not valid. A NULL return does not mean than the next higher + * index has an invalid property + * + * @memberof DasDesc + */ +DAS_API const DasProp* DasDesc_getPropByIdx(const DasDesc* pThis, size_t uIdx); + /** Get a property name by an index * * This is useful when iterating over all properties in a Descriptor. Only @@ -203,7 +225,7 @@ DAS_API size_t DasDesc_length(const DasDesc* pThis); * @see DasDesc_length() * @param pThis A pointer to the descriptor to query * @param uIdx The index of the property, will be a value between 0 and - * the return value from Desc_getNProps() + * the return value from Desc_length() * @return A pointer the requested property name or NULL if there is no * property at the given index. * @memberof DasDesc @@ -219,7 +241,7 @@ DAS_API const char* DasDesc_getNameByIdx(const DasDesc* pThis, size_t uIdx); * @see DasDesc_length() * @param pThis A pointer to the descriptor to query * @param uIdx The number of the property, will be a value from 0 and 1 less - * than the return value from Desc_getNProps() + * than the return value from Desc_length() * @return A pointer the requested property value or NULL if there is no * property at the given index. * @memberof DasDesc diff --git a/das2/serial.c b/das2/serial.c index 51163ba..2c0f2e4 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -1291,7 +1291,7 @@ static void _serial_xmlElementEnd(void* pUserData, const char* sElement) /* ************************************************************************** */ -DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId) +DasDs* dasds_from_xmlheader3(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId) { if(nDasVer != 3){ das_error(DASERR_NOTIMP, "Direct das v2.2 header format is not yet supported"); @@ -1348,6 +1348,14 @@ DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int return NULL; } +/* ************************************************************************** */ + +DasDs* dasds_from_xmlheader2(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId) +{ + das_error(DASERR_NOTIMP, "Building datasets from das2 headers is not yet implemented"); + return NULL; +} + /* ************************************************************************** */ /* Decoding a data packet, using a dataset created above */ diff --git a/das2/serial.h b/das2/serial.h index 0dd4665..2453a68 100644 --- a/das2/serial.h +++ b/das2/serial.h @@ -28,7 +28,7 @@ extern "C" { #endif -/** Define a das dataset and all it's constiutant parts from an XML header +/** Define a das dataset and all it's constiutant parts from a das3 XML header * * @param nDasVer The major version of the header format. If this is 2 * then the top level element should be , if this is 3 @@ -47,7 +47,29 @@ extern "C" { * @returns A pointer to a new DasDs and all if it's children allocated * on the heap, or NULL on an error. */ -DAS_API DasDs* dasds_from_xmlheader(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId); +DAS_API DasDs* dasds_from_xmlheader3(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId); + +/** Define a das dataset and all it's constiutant parts from a legacy das2 XML header + * + * @param nDasVer The major version of the header format. If this is 2 + * then the top level element should be , if this is 3 + * then the top level element is expected to be + * + * @param pBuf The buffer to read. Reading will start with the read point + * and will run until DasBuf_remaining() is 0 or the end tag + * is found, which ever comes first. + * + * @param pParent The parent descriptor for this data set. This is assumed + * to be an object which can hold vector frame definitions. + * + * @param nPktId The packet's ID within it's parent's array. My be 0 if + * and only if pParent is NULL + * + * @returns A pointer to a new DasDs and all if it's children allocated + * on the heap, or NULL on an error. + */ +DAS_API DasDs* dasds_from_xmlheader2(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId); + /** Given a das dataset decode it's packets * diff --git a/das2/stream.c b/das2/stream.c index 1d29576..52af2c0 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -817,11 +817,13 @@ DasDesc* DasDesc_decode( } if(strcmp(sName, "packet") == 0){ - if((nModel != STREAM_MODEL_MIXED)&&(nModel != STREAM_MODEL_V2)){ - das_error(DASERR_STREAM, "das2 element found, expected das3 headers"); - return NULL; + if((nModel == STREAM_MODEL_MIXED)||(nModel == STREAM_MODEL_V2)){ + return (DasDesc*) new_PktDesc_xml(pBuf, (DasDesc*)pSd, nPktId); + } + else{ + /* Upgrade to v3 internals for this type */ + return (DasDesc*) dasds_from_xmlheader2(pBuf, pSd, nPktId); } - return (DasDesc*) new_PktDesc_xml(pBuf, (DasDesc*)pSd, nPktId); } if(strcmp(sName, "dataset") == 0){ @@ -829,7 +831,7 @@ DasDesc* DasDesc_decode( das_error(DASERR_STREAM, "das3 element found, expected das2 headers"); return NULL; } - return (DasDesc*) dasds_from_xmlheader(3, pBuf, pSd, nPktId); + return (DasDesc*) dasds_from_xmlheader3(3, pBuf, pSd, nPktId); } das_error(DASERR_STREAM, "Unknown top-level descriptor object: %s", sName); diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index 66acd1d..5a9bebe 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -32,7 +32,12 @@ #include #define PROG "das3_cdf" -#define PROGERR 63 +#define PERR 63 + +/* Handle lack of const qualifier on CDFvarNum */ +#define CDFvarId(id, str) CDFgetVarNum((id), (char*) (str)) + +#define NEW_FILE_MODE S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH /* ************************************************************************* */ void prnHelp() @@ -108,8 +113,9 @@ void prnHelp() " turn around and stream it's contents to stdout. Use this \n" " specify the directory where the temporary file is created.\n" "\n" -" -s FILE,--skeleton=FILE\n" -" Initialize the output CDF with a skeleton file first.\n" +" -e FILE,--empty=FILE\n" +" Initialize the output CDF with an CDF file first. Typically\n" +" this would be an empty CDF generated from a skeleton file\n" " (experimental)\n" "\n"); @@ -136,7 +142,6 @@ void prnHelp() " * Wiki page https://github.com/das-developers/das2C/wiki/das3_cdf\n" " * ISTP CDF guidelines: https://spdf.gsfc.nasa.gov/istp_guide/istp_guide.html\n" "\n"); - } /* ************************************************************************* */ @@ -149,14 +154,12 @@ static int _isArg( *pLong = false; return true; } - size_t uLen = strlen(sLong) + 1; /* Include the '=' */ if(strncmp(sArg, sLong, uLen) == 0){ *pLong = true; return true; } - return false; } @@ -194,19 +197,137 @@ int parseArgs( strncpy(sTmpDir, bIsLong ? argv[i] + 7 : argv[i+1], nTmpDir - 1); } - if(_isArg(argv[i], "-s", "--skeleton", &bIsLong)){ + if(_isArg(argv[i], "-e", "--empty", &bIsLong)){ if(!bIsLong && (i > argc-2)) goto NO_ARG; else if(argv[i][11] == '\0') goto NO_ARG; strncpy(sSkelFile, bIsLong ? argv[i] + 11 : argv[i+1], nSkelFile - 1); } } - return das_error(PROGERR, "Unknown command line argument %s", argv[i]); + return das_error(PERR, "Unknown command line argument %s", argv[i]); } return DAS_OKAY; NO_ARG: - return das_error(PROGERR, "Missing option after argument %s", argv[i]); + return das_error(PERR, "Missing option after argument %s", argv[i]); +} + +/* ************************************************************************* */ + +struct context { + CDFid nCdfId; + char sCdfStatus[CDF_STATUSTEXT_LEN+1]; + const char* sOutFile; + const char* sInFile; /* Not same as main infile, that might be a URL */ + const char* sTpltFile; /* An empty template CDF to put data in */ + DasTime dtBeg; /* Start point for initial query, if known */ + double rInterval; /* Size of original query, if known */ + uint32_t uFlushSz; /* How big to let internal memory grow before a CDF flush */ +}; + +/* helper ****************************************************************** */ + +DasErrCode writeProp(CDFid nFile, const DasProp* pProp, long nScope, long* pAttrNum) + + CDFstatus status = CDF_OK; + + status = CDFcreateAttr (id, "TITLE".ptr, nScope, pAttrNum); + if(status != CDF_OK) StatusHandler (status); + + return PERR; +} + +/* ************************************************************************* */ + +DasErrCode onStream(StreamDesc* pSd, void* pUser){ + struct context pCtx* = (struct context pCtx*)pUser; + + CDFstatus nCdfRet = CDF_OK; + + /* CDF oddity, halt the file name at the dot */ + char* pDot = strrchr(pCtx->sOutFile, '.') + if(pDot != NULL) *pDot = '\0'; + + /* Open the file since we have something to write */ + if(pCtx->sTpltFile){ + /* Copy in skeleton and open that or... */ + if(!das_copyfile(sSkelCdf, pCtx->sOutFile, NEW_FILE_MODE)){ + das_error(PERR, "Couldn't open copy '%s' --to--> '%s'", sSkelCdf, sDest); + return PERR; + } + if(CDF_OK != CDFopenCDF(sDest, &(pCtx->nCdfId))){ + const char* sTmp = ""; + if(pDot != NULL) *pDot = '.'; + else sTmp = ".cdf"; + return das_error(PERR, "Couldn't open CDF file '%s%s'", pCtx->sOutFile, sTmp); + } + } + else{ + /* Create a new file */ + if( CDF_OK != CDFcreateCDF(pCtx->sOutFile, &(pCtx->nCdfId)) ){ + const char* sTmp = ""; + if(pDot != NULL) *pDot = '.'; + else sTmp = ".cdf"; + return das_error(PERR, "Couldn't open CDF file '%s%S'", pCtx->sOutFile, sTmp) + } + } + + if(pDot != NULL) *pDot = '.'; /* But our dot back damnit */ + + /* We have the file, run in our properties */ + size_t uProps = DasDesc_lengthIn((DasDesc*)pSd); + for(size_t u = 0; u < uProps; ++u){ + const DasProp* pProp = DasDesc_getPropByIdx((DasDesc*)pSd, u); + if(pProp == NULL) continue; + + long nAttrNum = 0; + if(writeProp(pCtx->nCdfId, pProp, GLOBAL_SCOPE, &nAttrNum) != DAS_OKAY) + return PERR; + } + + /* If there are any coordinate frames defined in this stream, say + something about them here */ + + return DAS_OKAY; +} + +/* ************************************************************************* */ +DasErrCode onDataSet(StreamDesc* pSd, DasDs* dd, void* pUser) +{ + struct context pCtx* = (struct context pCtx*)pUser; + + /* Inspect the dataset and create any associated CDF variables */ + /* For data that has values in the header, write the values to CDF now */ + +} + +/* ************************************************************************* */ +DasErrCode onData(StreamDesc* pSd, DasDs* dd, void* pUser) +{ + struct context pCtx* = (struct context pCtx*)pUser; + + /* Just let the data accumlate in the arrays unless we've hit + our memory limit, then hyperput it */ + + +} + +/* ************************************************************************* */ +DasErrCode onExcept(OobExcept* pExcept, void* pUser) +{ + struct context pCtx* = (struct context pCtx*)pUser; + + /* If this is a no-data-in range message set the no-data flag */ + +} + +/* ************************************************************************* */ +DasErrCode onClose(StreamDesc* pSd, void* pUser) +{ + struct context pCtx* = (struct context pCtx*)pUser; + + /* Flush all data to the CDF */ + } /* ************************************************************************* */ @@ -225,6 +346,7 @@ int main(int argc, char** argv) { char sOutFile[OUT_FILE_SZ] = {'\0'}; char sTmpDir[TMP_DIR_SZ] = {'\0'}; char sSkelFile[SKEL_FILE_SZ] = {'\0'}; + char sCredFile[CRED_FILE_SZ] = {'\0'}; FILE* pFile = NULL; DasErrCode nRet = parseArgs( @@ -234,17 +356,44 @@ int main(int argc, char** argv) { if(nRet != DAS_OKAY) return 13; + struct context ctx; + memset(&ctx, 0, sizeof(struct context)); + + /* Figure out where we're gonna write before potentially contacting servers */ + + /* Build one of 4 types of stream readers */ + DasCredMngr* pCreds; + DasHttpResp res; DasIO* pIn = NULL; if(sInFile[0] == '\0'){ /* Reading from standard input */ pIn = new_DasIO_cfile(PROG, stdin, "r"); } - else if(strncmp(sInFile, "https://", 8) == 0){ - TODO; - } - else if(strncmp(sInFile, "http://", 7) == 0){ - TODO; + else if((strncmp(sInFile, "http://", 7) == 0)||(strncmp(sInFile, "https://", 8) == 0)){ + + pCreds = new_CredMngr(credFileName(sCredFile)); + + /* Give it a connection time out of 6 seconds */ + if(!das_http_getBody(sInFile, "das3_cdf", pCreds, &res, 6.0)){ + + if((res.nCode == 401)||(res.nCode == 403)) + return das_error(DASERR_HTTP, "Authorization failure: %s", res.sError); + + if((res.nCode == 400)||(res.nCode == 404)) + return das_error(DASERR_HTTP, "Query error: %s", res.sError); + + return das_error(DASERR_HTTP, "Uncatorize error: %s", res.sError); + } + + das_url_toStr(&(res.url), sInFile, IN_FILE_SZ - 1); + if(strcmp(sUrl, sInFile) != 0) + daslog_info_v("Redirected to %s", sUrl); + + if(DasHttpResp_useSsl(&res)) + pIn = new_DasIO_ssl("das3_cdf", res.pSsl, "r"); + else + pIn = new_DasIO_socket("das3_cdf", res.nSockFd, "r"); } else{ // Just a file @@ -253,14 +402,38 @@ int main(int argc, char** argv) { pTmp = sInFile + 7; pInFile = fopen(sTmp, "rb"); if(pFile == NULL) - return das_error(PROGERR, "Couldn't open file %s", sTmp); + return das_error(PERR, "Couldn't open file %s", sTmp); + pIn = new_DasIO_cfile(PROG, pInFile, "rb"); } DasIO_model(pIn, 3); /* Upgrade any das2 s to das3 s */ + /* Install our handlers */ + StreamHandler handler; + memset(&handler, 0, sizeof(StreamHandler)); + handler.streamDescHandler = onStream; + handler.dsDescHandler = onDataSet; + handler.dsDataHandler = onData; + handler.exceptionHandler = onExcept; + handler.closeHandler = onClose; + handler.userData = &ctx; + + DasIO_addProcessor(pIn, &handler); + + nRet = DasIO_readAll(pIn); + if(pInFile) fclose(pInFile); - return 0; + if(pCreds){ + del_CredMngr(pCreds); + DasHttpResp_clear(&res); + } + + if((nRet == DAS_OKAY)&&(bSendStdout)){ + nRet = sendCdf(); + } + + return nRet; }; \ No newline at end of file From b125eae665812205a0671fab8b294528d5fbc77e Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sun, 18 Feb 2024 22:49:35 -0600 Subject: [PATCH 22/40] Further work stream to CDF conversion --- das2/defs.h | 16 ++ das2/property.c | 5 + das2/property.h | 33 +++ das2/serial.c | 9 +- das2/serial.h | 12 +- das2/stream.c | 2 +- das2/stream.h | 3 + das2/util.c | 30 ++- das2/util.h | 22 +- utilities/das3_cdf.c | 565 +++++++++++++++++++++++++++++++++++++------ 10 files changed, 593 insertions(+), 104 deletions(-) diff --git a/das2/defs.h b/das2/defs.h index 7f7dff6..cbd2969 100644 --- a/das2/defs.h +++ b/das2/defs.h @@ -110,6 +110,22 @@ #define DAS_API #endif +#ifdef _WIN32 +/** The directory separator for this OS as a character */ +#define DAS_DSEPC '\\' + +/** The directory separator for this OS as a string */ +#define DAS_DSEPS "\\" + +#else + +/** The directory separator for this OS as a character */ +#define DAS_DSEPC '/' + +/** The directory separator for this OS as a string */ +#define DAS_DSEPS "/" +#endif + #ifdef __cplusplus extern "C" { #endif diff --git a/das2/property.c b/das2/property.c index 83fca17..61b2a08 100644 --- a/das2/property.c +++ b/das2/property.c @@ -408,3 +408,8 @@ char DasProp_sep(const DasProp* pProp) { return (char)(pProp->flags >> DASPROP_SEP_SHIFT & 0xFF); } + +int DasProp_items(const DasProp* pProp) +{ + return -1 * das_error(DASERR_NOTIMP, "Not Yet Implemented"); +} \ No newline at end of file diff --git a/das2/property.h b/das2/property.h index ea39f30..06343ab 100644 --- a/das2/property.h +++ b/das2/property.h @@ -127,6 +127,36 @@ const char* DasProp_typeStr2(const DasProp* pProp); /** Get a das3 type string for this property */ const char* DasProp_typeStr3(const DasProp* pProp); +/** Convert integer property values to 64-bit ints + * + * Returns the number of conversions, or a negative error value + */ +int DasProp_convertInt(const DasProp* pProp, int64_t* pBuf, size_t uBufLen); + +/** Convert real-value properties to double + * + * Returns the number of conversions, or a negative error value + */ +int DasProp_convertReal(const DasProp* pProp, double* pBuf, size_t uBufLen); + +/** Convert boolean property values to bytes + * + * Returns the number of conversions, or a negative error value + */ +int DasProp_convertBool(const DasProp* pProp, uint8_t* pBuf, size_t uBufLen); + +/** Convert datatime properties to either double or 64-bit integers depending + * on the given units + */ +int DasProp_convertTT2K(const DasProp* pProp, int64_t* pBuf, size_t uBufLen); + +/** Convert datatime properties to either double or 64-bit integers depending + * on the given units + */ +int DasProp_convertTT2k( + const DasProp* pProp, uint64_t* pBuf, size_t uBufLen +); + /** Get a property type code. * * Use the values: DASPROP_MULTI_MASK & DASPROP_TYPE_MASK to extract sections @@ -140,6 +170,9 @@ void DasProp_invalidate(DasProp* pProp); /** Determine if this property has a valid type definition */ bool DasProp_isValid(const DasProp* pProp); +/** Determine the number of items in a multi valued property */ +int DasProp_items(const DasProp* pProp); + /** A mask to select a property's multiplicity setting. * This is useful when interpreting the results of DasProp_type() */ diff --git a/das2/serial.c b/das2/serial.c index 2c0f2e4..f350a34 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -1291,13 +1291,8 @@ static void _serial_xmlElementEnd(void* pUserData, const char* sElement) /* ************************************************************************** */ -DasDs* dasds_from_xmlheader3(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId) +DasDs* dasds_from_xmlheader3(DasBuf* pBuf, StreamDesc* pParent, int nPktId) { - if(nDasVer != 3){ - das_error(DASERR_NOTIMP, "Direct das v2.2 header format is not yet supported"); - return NULL; - } - struct serial_xml_context context = {0}; // All object's initially null context.pSd = pParent; @@ -1350,7 +1345,7 @@ DasDs* dasds_from_xmlheader3(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int /* ************************************************************************** */ -DasDs* dasds_from_xmlheader2(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId) +DasDs* dasds_from_xmlheader2(DasBuf* pBuf, StreamDesc* pParent, int nPktId) { das_error(DASERR_NOTIMP, "Building datasets from das2 headers is not yet implemented"); return NULL; diff --git a/das2/serial.h b/das2/serial.h index 2453a68..8ffd02a 100644 --- a/das2/serial.h +++ b/das2/serial.h @@ -29,10 +29,6 @@ extern "C" { /** Define a das dataset and all it's constiutant parts from a das3 XML header - * - * @param nDasVer The major version of the header format. If this is 2 - * then the top level element should be , if this is 3 - * then the top level element is expected to be * * @param pBuf The buffer to read. Reading will start with the read point * and will run until DasBuf_remaining() is 0 or the end tag @@ -47,13 +43,9 @@ extern "C" { * @returns A pointer to a new DasDs and all if it's children allocated * on the heap, or NULL on an error. */ -DAS_API DasDs* dasds_from_xmlheader3(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId); +DAS_API DasDs* dasds_from_xmlheader3(DasBuf* pBuf, StreamDesc* pParent, int nPktId); /** Define a das dataset and all it's constiutant parts from a legacy das2 XML header - * - * @param nDasVer The major version of the header format. If this is 2 - * then the top level element should be , if this is 3 - * then the top level element is expected to be * * @param pBuf The buffer to read. Reading will start with the read point * and will run until DasBuf_remaining() is 0 or the end tag @@ -68,7 +60,7 @@ DAS_API DasDs* dasds_from_xmlheader3(int nDasVer, DasBuf* pBuf, StreamDesc* pPar * @returns A pointer to a new DasDs and all if it's children allocated * on the heap, or NULL on an error. */ -DAS_API DasDs* dasds_from_xmlheader2(int nDasVer, DasBuf* pBuf, StreamDesc* pParent, int nPktId); +DAS_API DasDs* dasds_from_xmlheader2(DasBuf* pBuf, StreamDesc* pParent, int nPktId); /** Given a das dataset decode it's packets diff --git a/das2/stream.c b/das2/stream.c index 52af2c0..6af4116 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -831,7 +831,7 @@ DasDesc* DasDesc_decode( das_error(DASERR_STREAM, "das3 element found, expected das2 headers"); return NULL; } - return (DasDesc*) dasds_from_xmlheader3(3, pBuf, pSd, nPktId); + return (DasDesc*) dasds_from_xmlheader3(pBuf, pSd, nPktId); } das_error(DASERR_STREAM, "Unknown top-level descriptor object: %s", sName); diff --git a/das2/stream.h b/das2/stream.h index 5877953..ddaeb4d 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -318,6 +318,9 @@ DAS_API PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int id); */ DAS_API const DasFrame* StreamDesc_getFrame(const StreamDesc* pThis, int idx); +/** Return the number of frames defined in the stream */ +DAS_API int8_t StreamDesc_getNumFrames(const StreamDesc* pThis); + /** Get a frame index given it's name * * @returns negative DasErrCode if there's no frame for the given name diff --git a/das2/util.c b/das2/util.c index 130bb6d..be63ef3 100644 --- a/das2/util.c +++ b/das2/util.c @@ -61,6 +61,9 @@ int g_nMsgDisposition = DAS2_MSGDIS_STDERR; pthread_mutex_t g_mtxErrBuf = PTHREAD_MUTEX_INITIALIZER; das_error_msg* g_msgBuf = NULL; +#define HOME_DIR_SZ 256 +static char g_sHome[HOME_DIR_SZ] = {'\0'}; + /* Locale handling */ #ifdef _WIN32 static bool g_bCLocalInit = false; /* set by windows das_strtod_c, if needed */ @@ -155,6 +158,20 @@ void das_init( /* Default to fast index last printing */ das_varindex_prndir(true); + + /* Save off the current account's home directory. If a home directory + * is not available return some system directory that is likely writable */ +#ifndef _WIN32 + if(getenv("USERPROFILE")) + strncpy(g_sHome, getenv("USERPROFILE"), HOME_DIR_SZ - 1); + else + strcpy(g_sHome, "C:\\"); +#else + if(getenv("HOME")) + strncpy(g_sHome, getenv("HOME"), HOME_DIR_SZ - 1); + else + strcpy(g_sHome, "/tmp"); +#endif } void das_finish(){ @@ -614,10 +631,10 @@ const char* das_xml_escape(char* dest, const char* src, size_t uOutLen) /* ************************************************************************* */ /* Version Control Info (Broken!) */ -const char * das_lib_version( ) { - const char* sRev = "$Revision$"; - if(strcmp(sRev, "$" "Revision" "$") == 0) return "untagged"; - else return sRev; +const char* das_lib_version( ) { + /* Until git hash and tags etc. can be copied into the source, just + return something generic for now */ + return "3.0"; } /* ************************************************************************* */ @@ -631,6 +648,11 @@ bool das_isdir(const char* path) else return false; } +const char* das_userhome(void) +{ + return g_sHome; +} + bool das_isfile(const char* path) { struct stat stbuf; diff --git a/das2/util.h b/das2/util.h index 86e107a..a80208b 100644 --- a/das2/util.h +++ b/das2/util.h @@ -305,7 +305,7 @@ DAS_API void das_error_free(das_error_msg* pMsg); * @returns the version tag string for the das2 core library, or * the string "untagged" if the version is unknown */ -DAS_API const char* das_lib_version( void ); +DAS_API const char* das_lib_version(void); /** The size of an char buffer large enough to hold valid object IDs */ #define DAS_MAX_ID_BUFSZ 64 @@ -422,13 +422,31 @@ DAS_API uint8_t* das_memset( DAS_API char* das_vstring(const char* fmt, va_list ap); - /** Is the path a directory. * @param path The directory in question, passed to stat(2) * @return true if @b path can be determined to be a directory, false otherwise */ DAS_API bool das_isdir(const char* path); +/** Insure directories to a specific location exist + * + * @param sPath a full path to a file. If this string contains no + * path separators, the function does nothing. + * + * @return true if directories up to the final location either exist, or + * could be generated, false otherwise. + */ +DAS_API bool das_mkdirsto(const char* path); + + +/** Get the home directory for the current account + * + * @return A pointer to a global string that is the current user's + * home directory, or other likely writable location if + * the home directory could not be determined. + */ +DAS_API const char* das_userhome(void); + /** Copy a file to a distination creating directories as needed. * * If the files exists at the destination it in overwritten. Directories are diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index 5a9bebe..bb81ea9 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -37,7 +37,12 @@ /* Handle lack of const qualifier on CDFvarNum */ #define CDFvarId(id, str) CDFgetVarNum((id), (char*) (str)) -#define NEW_FILE_MODE S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH +#define NEW_FILE_MODE S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH + +#define DEF_AUTH_FILE ".dasauth" +#define DEF_TEMP_DIR ".dastmp" + +#define LOC_PATH_LEN 256 /* ************************************************************************* */ void prnHelp() @@ -94,6 +99,11 @@ void prnHelp() "OPTIONS\n" " -h,--help Write this text to standard output and exit.\n" "\n" +" -t FILE,--template=FILE\n" +" Initialize the output CDF with an empty template CDF file first.\n" +" FILE is not a CDF skeleton, but could be an empty CDF generated\n" +" from a skeleton file. (experimental)\n" +"\n" " -i URL,--input=URL\n" " Instead of reading from standard input, read from this URL.\n" " To read from a local file prefix it with 'file://'. Only\n" @@ -102,21 +112,22 @@ void prnHelp() " -o DEST,--output=DEST\n" " Instead of acting as a poorly performing filter, write data\n" " to this location. If DEST is a file then data will be written\n" -" directly to that file, and no temporary file will be created.\n" -" If DEST is a directory then an output file will be created\n" -" in the directory with an auto-generate filename. This is\n" -" useful when reading from das servers.\n" +" directly to that file. If DEST is a directory then an auto-\n" +" generated file name will be used. This is useful when reading\n" +" das servers since they provide default filenames.\n" "\n" -" -t DIR,--temp=DIR\n" -" CDF files are NOT a streaming format. In order for " PROG "\n" -" to act as a filter it must actually create a file and then\n" -" turn around and stream it's contents to stdout. Use this \n" -" specify the directory where the temporary file is created.\n" +" -s DIR,--scratch=DIR\n" +" Scratch space directory for writing temporary files when run\n" +" as a data stream filter. Ignored if -o is given.\n" "\n" -" -e FILE,--empty=FILE\n" -" Initialize the output CDF with an CDF file first. Typically\n" -" this would be an empty CDF generated from a skeleton file\n" -" (experimental)\n" +" -l LEVEL,--log=LEVEL\n" +" Set the logging level, where LEVEL is one of 'debug', 'info',\n" +" 'warning', 'error' in order of decreasing verbosity. All log\n" +" messages go to the standard error channel, the default is 'info\n" +"\n" +" -c FILE,--credentials=FILE\n" +" Set the location where server authentication tokens (if any)\n" +" are saved. Defaults to " HOME_STR DAS_DSEPS DEF_AUTH_FILE "\n" "\n"); printf( @@ -146,7 +157,7 @@ void prnHelp() /* ************************************************************************* */ -/* Return 0 or 1 on success, -1 on failure */ +/* See a given string matches the short or long form of an argument */ static int _isArg( const char* sArg, const char* sShort, const char* sLong, bool* pLong ){ @@ -154,7 +165,7 @@ static int _isArg( *pLong = false; return true; } - size_t uLen = strlen(sLong) + 1; /* Include the '=' */ + size_t uLen = strlen(sLong); /* Include the '=' */ if(strncmp(sArg, sLong, uLen) == 0){ *pLong = true; @@ -163,13 +174,72 @@ static int _isArg( return false; } -int parseArgs( - int argc, char** argv, char* sInFile, size_t nInFile, char* sOutFile, - size_t nOutFile, char* sTmpDir, size_t nTmpDir, char* sSkelFile, size_t nSkelFile +/* Get the value of an argument if the current entry in argv matches + * either the short or long form + */ +static bool _getArgVal( + char* sDest, size_t uDest, char** argv, int argc, int* pArgIdx, + const char* sShort, const char* sLong ){ - int i = 0; bool bIsLong = false; + if(! _isArg(argv[*pArgIdx], sShort, sLong, &bIsLong)) + return false; + + else if(argv[*pArgIdx][11] == '\0') + goto NO_ARG; + + const char* sVal; + if(bIsLong){ + size_t uLongSz = strlen(sLong) + if(argv[*pArgIdx][uLongSz] == '\0') /* Nothing in str after prefix */ + goto NO_ARG; + + sVal = argv[*pArgIdx] + uLongSz; + } + else{ + if(*pArgIdx > argc-2) /* Ain't no subsequent arg */ + goto NO_ARG; + + sVal = argv[*pArgIdx+1]; + ++(*pArgIdx); + } + + strncpy(sDest, sVal, uDest - 1); + return true; + +NO_ARG: + das_error(PERR, "Missing option after argument %s", argv[i]); + return false; +} + +typedef struct program_optitons{ + char aTpltFile[256]; /* Template CDF */ + char aSource[1024]; /* Input source, http://, file:// etc. */ + char aOutFile[256]; /* Non-filter: output */ + char aTmpDir[256]; /* Filter mode: temp dir */ + char aLevel[32]; + char aCredFile[256]; +} popts_t; + +int parseArgs(int argc, char** argv, popts_t* pOpts) +{ + memset(pOpts, 0, sizeof(popts_t)); + + /* Set a few defaults */ + snprintf( + pOpts->aCredFile, sizeof(popts_t.aCreds) - 1, "%s" DAS_DSEPS DEF_AUTH_FILE, + das_userhome() + ); + + strcpy(pOpts->sLevel, "info"); + + snprintf( + pOpts->aTmpDir, sizeof(popts_t.aTmpDir) - 1, "%s" DAS_DSEPS ".cdftmp", + das_userhome() + ); + + int i = 0; while(i < (argc-1)){ ++i; /* 1st time, skip past the program name */ @@ -178,38 +248,22 @@ int parseArgs( prnHelp(); exit(0); } - - if(_isArg(argv[i], "-i", "--input", &bIsLong)){ - if(!bIsLong && (i > argc-2)) goto NO_ARG; - else if(argv[i][8] == '\0') goto NO_ARG; - strncpy(sInFile, bIsLong ? argv[i] + 8 : argv[i+1], nInFile - 1); - } - - if(_isArg(argv[i], "-o", "--output", &bIsLong)){ - if(!bIsLong && (i > argc-2)) goto NO_ARG; - else if(argv[i][9] == '\0') goto NO_ARG; - strncpy(sOutFile, bIsLong ? argv[i] + 9 : argv[i+1], nOutFile - 1); - } - - if(_isArg(argv[i], "-t", "--temp", &bIsLong)){ - if(!bIsLong && (i > argc-2)) goto NO_ARG; - else if(argv[i][7] == '\0') goto NO_ARG; - strncpy(sTmpDir, bIsLong ? argv[i] + 7 : argv[i+1], nTmpDir - 1); - } - - if(_isArg(argv[i], "-e", "--empty", &bIsLong)){ - if(!bIsLong && (i > argc-2)) goto NO_ARG; - else if(argv[i][11] == '\0') goto NO_ARG; - strncpy(sSkelFile, bIsLong ? argv[i] + 11 : argv[i+1], nSkelFile - 1); - } + if(_getArg(pOpts->aTpltFile, sizeof(popts_t.aTpltFile), argv, argc, &i, "-t", "--template=")) + continue; + if(_getArg(pOpts->aSource, sizeof(popts_t.aSource), argv, argc, &i, "-i", "--input=")) + continue; + if(_getArg(pOpts->aWriteTo, sizeof(popts_t.aWriteTo), argv, argc, &i, "-o", "--output=")) + continue; + if(_getArg(pOpts->aTmpDir, sizeof(popts_t.aTmpDir), argv, argc, &i, "-s", "--scratch=")) + continue; + if(_getArg(pOpts->aLevel, sizeof(popts_t.aLevel), argv, argc, &i, "-l", "--log=")) + continue; + if(_getArg(pOpts->aCredFile, sizeof(popts_t.aCredFile), argv, argc, &i, "-c", "--credentials=")) + continue; } - return das_error(PERR, "Unknown command line argument %s", argv[i]); } - return DAS_OKAY; -NO_ARG: - return das_error(PERR, "Missing option after argument %s", argv[i]); } /* ************************************************************************* */ @@ -217,24 +271,268 @@ int parseArgs( struct context { CDFid nCdfId; char sCdfStatus[CDF_STATUSTEXT_LEN+1]; - const char* sOutFile; - const char* sInFile; /* Not same as main infile, that might be a URL */ const char* sTpltFile; /* An empty template CDF to put data in */ - DasTime dtBeg; /* Start point for initial query, if known */ - double rInterval; /* Size of original query, if known */ + const char* sWriteTo; + /* DasTime dtBeg; */ /* Start point for initial query, if known */ + /* double rInterval; */ /* Size of original query, if known */ + uint32_t uFlushSz; /* How big to let internal memory grow before a CDF flush */ }; -/* helper ****************************************************************** */ +/* sending CDF message to the log ****************************************** */ -DasErrCode writeProp(CDFid nFile, const DasProp* pProp, long nScope, long* pAttrNum) +bool _cdfOkayish(CDFstatus iStatus){ + char[CDF_ERRTEXT_LEN+1] sMsg; + + /* Wrapper should have prevented this, but in case it's called directly */ + if(iStatus == CDF_OK) + return true; + + CDFgetStatusText(iStatus, sMsg); + + if(status < CDF_WARN){ + daslog_error_v("from cdflib, %s", sMsg); + return false; + } + + if(status < CDF_OK) + daslog_warn_v("from cdflib, %s", sMsg); + + else if(status > CDF_OK) + daslog_info_v("from cdflib, %s", sMsg); + + return true; +} + +/* Use a macro to avoid unneccessary functions calls that slow the program */ +#define _OK( SOME_CDF_FUNC ) ( ((status = (SOME_CDF_FUNC) ) == CDF_OK) || (_cdfOkayish(status)) ) + + +/* ************************************************************************* */ +/* Converting Das Properties to CDF properties */ + +/* Buffers for property conversion */ + +#define PROP_XFORM_SZ 65536 /* 64K */ + +const ubyte g_propBuf[PROP_XFORM_SZ]; + +const char* DasProp_cdfName(const DasProp* pProp) +{ + /* Translate some of the common das property names to CDF names */ + const char* sName = DasProp_name(pProp); + if(strcmp(sName, "label") == 0) return "FIELDNAM"; + if(strcmp(sName, "description") == 0) return "CATDESC"; + if(strcmp(sName, "title") == 0) return "TITLE"; + if(strcmp(sName, "summary") == 0) return "VAR_NOTES"; + if(strcmp(sName, "info") == 0) return "VAR_NOTES"; + + return sName; +} + +/* Get the number of entries for a property. Only global properties are + allowed to have multiple entries. Typically only string data are + allowed to have entries. We'll interpret this to be 1 except for long + string values. In that case each blank line will be interpreted to + start a new entry. + */ +long DasProp_cdfEntries(const DasProp* pProp) +{ + if(!(DasProp_type(pProp) & DASPROP_STRING)) + return 1; + + /* Count seperators. If sep is just '\0' then return 1. */ + cSep = DasProp_sep(pProp); + if(cSep == '\0') + return 1; + long nEntries = 1; + + const char* pRead = DasProp_value(pProp); + while(*pRead != '\0'){ + if(*pRead == cSep) ++nEntries; + ++pRead; + } + return nEntries; +} + +long DasProp_cdfType(const DasProp* pProp) +{ + ubyte uType = DasProp_type(pProp) & DASPROP_TYPE_MASK; + switch(uType){ + case DASPROP_STRING: return CDF_UCHAR; + + /* Properties don't have fill, so an unsigned byte works */ + case DASPROP_BOOL: return CDF_UINT1; + + case DASPROP_INT: return CDF_INT8; /* just to be safe */ + case DASPROP_REAL: return CDF_DOUBLE; + case DASPROP_DATETIME: return CDF_TIME_TT2000; + default: + assert(false, "das2C library change detected"); + } + return 0; +} + +long DasProp_cdfEntLen(const DasProp* pProp, long iEntry) +{ + /* Non-strings only have one entry */ + if(!(DasProp_type(pProp) & DASPROP_STRING)){ + if(iEntry == 0) + return DasProp_items(pProp); + else + return 0; + } + + /* Strings that don't have a special separator only have one entry */ + char cSep = DasProp_value(pProp); + if(cSep == '\0'){ + if(iEntry == 0) + return strlen(pRead); + else + return 0; + } + + /* Get the length between separators */ + /* I am a multi-entry string, get the length form seperator + iEntry, until iEntry + 1 */ + const char* pRead = DasProp_value(pProp); + int iSep = 0; + int iLastSepPos = -1; + int i = 0; + while(*pRead != '\0'){ + if(*pRead == cSep){ + if(iSep == iEntry){ + return i - iLastSepPos - 1; + } + ++iSep; + iLastSepPos = i; + } + ++pRead; + ++i; + } + return 0; +} + +void* DasProp_cdfValues(const DasProp* pProp){ + /* For strings this is easy, others have to be parsed */ + if(DasProp_type(pProp) & DASPROP_STRING) + return DasProp_value(pProp); + + size_t uBufLen = 0; + + ubyte uType = DasProp_type(pProp) & DASPROP_TYPE_MASK; + switch(uType){ + + /* Properties don't have fill, so an unsigned byte works */ + case DASPROP_BOOL: + uBufLen = PROP_XFORM_SZ; + if(DasProp_convertBool(pProp, g_propBuf, uBufLen) != DAS_OKAY) + return NULL; + else + return g_propBuf; + + case DASPROP_INT: + uBufLen = PROP_XFORM_SZ / sizeof(int64_t); + if(DasProp_convertInt(pProp, g_propBuf, uBufLen) != DAS_OKAY) + return NULL; + else + return g_propBuf; + + case DASPROP_REAL: + uBufLen = PROP_XFORM_SZ / sizeof(double); + if(DasProp_convertReal(pProp, g_propBuf, uBufLen) != DAS_OKAY) + return NULL; + else + return g_propBuf; + + case DASPROP_DATETIME: + uBufLen = PROP_XFORM_SZ / sizeof(int64_t); + if(DasProp_convertTt2k(pProp, g_propBuf, uBufLen) != DAS_OKAY) + return NULL; + else + return g_propBuf; + default: + assert(false, "das2C library change detected"); + } + return NULL; +} + +void* DasProp_cdfEntValues(const DasProp* pProp, long iEntry){ + if(!(DasProp_type(pProp) & DASPROP_STRING)){ + if(iEntry == 0) + return DasProp_cdfValues(pProp); + else + return NULL; + } + + char cSep = DasProp_sep(pProp); + if(cSep == '\0'){ + if(iEntry == 0) + return DasProp_value(pProp); + else + return NULL; + } + + /* Get the length between separators */ + /* I am a multi-entry string, get the length form seperator + iEntry, until iEntry + 1 */ + const char* pRead = DasProp_value(pProp); + const char* pEntry = NULL; + int iSep = 0; + int iLastSepPos = -1; + int i = 0; + while(*pRead != '\0'){ + if(*pRead == cSep){ + if(iSep == iEntry){ + pEntry = DasProp_value(pProp) + iLastSepPos + 1; + return pEntry; + } + ++iSep; + iLastSepPos = i; + } + ++pRead; + ++i; + } + return NULL; +} + +DasErrCode writeGlobalProp(CDFid iCdf, const DasProp* pProp) +{ CDFstatus status = CDF_OK; - status = CDFcreateAttr (id, "TITLE".ptr, nScope, pAttrNum); - if(status != CDF_OK) StatusHandler (status); + long n = DasProp_cdfEntries(pProp); + for(long iEntry = 0; iEntry < n; ++iEntry){ + + status = CDFputAttrgEntry( + iCdf, + CDFgetAttrNum(iCdf, DasProp_cdfName(pProp)), + iEntry, + DasProp_cdfType(pProp), + DasProp_cdfEntLen(pProp, iEntry), + DasProp_cdfEntValues(pProp, iEntry) + ); + if(!_cdfOkayish(status)) + return PERR + } - return PERR; + return DAS_OKAY; +} + +DasErrCode writeVarProp(CDFid iCdf, long iVarNum, const DasProp* pProp) +{ + status = CDFput/AttrzEntry( + iCdf, + CDFgetAttrNum(iCdf, DasProp_cdfName(pProp)), + iVarNum, + DasProp_cdfType(pProp), + (long) DasProp_items(pProp), + DasProp_cdfValues(pProp, iEntry) + ); + if(!_cdfOkayish(status)) + return PERR; + + return DAS_OKAY; } /* ************************************************************************* */ @@ -280,13 +578,15 @@ DasErrCode onStream(StreamDesc* pSd, void* pUser){ const DasProp* pProp = DasDesc_getPropByIdx((DasDesc*)pSd, u); if(pProp == NULL) continue; - long nAttrNum = 0; - if(writeProp(pCtx->nCdfId, pProp, GLOBAL_SCOPE, &nAttrNum) != DAS_OKAY) + if(writeGlobalProp(pCtx->nCdfId, pProp) != DAS_OKAY) return PERR; } /* If there are any coordinate frames defined in this stream, say something about them here */ + if(StreamDesc_getNumFrames(pSd) > 0){ + daslog_error("TODO: Write stream vector frame info to CDF attributes."); + } return DAS_OKAY; } @@ -298,7 +598,7 @@ DasErrCode onDataSet(StreamDesc* pSd, DasDs* dd, void* pUser) /* Inspect the dataset and create any associated CDF variables */ /* For data that has values in the header, write the values to CDF now */ - + return PERR; } /* ************************************************************************* */ @@ -309,7 +609,7 @@ DasErrCode onData(StreamDesc* pSd, DasDs* dd, void* pUser) /* Just let the data accumlate in the arrays unless we've hit our memory limit, then hyperput it */ - + return PERR; } /* ************************************************************************* */ @@ -318,7 +618,7 @@ DasErrCode onExcept(OobExcept* pExcept, void* pUser) struct context pCtx* = (struct context pCtx*)pUser; /* If this is a no-data-in range message set the no-data flag */ - + return PERR; } /* ************************************************************************* */ @@ -327,40 +627,129 @@ DasErrCode onClose(StreamDesc* pSd, void* pUser) struct context pCtx* = (struct context pCtx*)pUser; /* Flush all data to the CDF */ + return PERR; +} + +/* helper ****************************************************************** */ +/* autogenerate a CDF file name from just the download time */ + +void _addTimeStampName(char* sDest, size_t uDest) +{ + char sTmp[LOC_PATH_LEN] = {'\0'}; + das_time dt; dt_now(&dt); + snprintf(sTmp, LOC_PATH_LEN - 1, "%s%cparsed_at_%04d-%02d-%02dT%02d-%02d-%06.3f.cdf", + sWriteTo, DAS_DSEPC, dt.year, dt.month, dt.mday, dt.hour, dt.minute, dt.second + ); + strncpy(sWriteTo, sTmp, uDest - 1); +} +DasErrCode _addSourceName(char* sDest, size_t uDest, const char* sInFile) +{ + char* pSep = strrchr(sInFile, DAS_DSEPC); + if(pSep != NULL) + sInFile = pSep + 1; + + if(sInFile[0] == '\0') + return das_error(PERR, "Input filename was empty (or was just a directory part)"); + + /* If ends in some other extension, change it to .cdf */ + char* pDot = strrchr(sInFile, '.'); + char sTmp1[LOC_PATH_LEN] = {'\0'}; + if(pDot != NULL){ + strncpy(sTmp1, sInFile, LOC_PATH_LEN-1); + pDot = strrchr(sTmp1, '.'); + *pDot = '\0'; + sInFile = sTmp1; + } + + char sTmp2[LOC_PATH_LEN] = {'\0'}; + snprintf(sTmp2, LOC_PATH_LEN - 1, "%s%c%s.cdf", sInFile); + + strncpy(sWriteTo, sTmp2, uDest - 1); + + return DAS_OKAY; } /* ************************************************************************* */ -#define IN_FILE_SZ 1024 /* das URLs can get long */ -#define OUT_FILE_SZ 256 -#define TMP_DIR_SZ 256 -#define SKEL_FILE_SZ 256 +DasErrCode writeFileToStdout(const char* sFile) +{ + FILE* pIn = fopen(sFile, "rb"); + if(pIn == NULL) + return das_error(PERR, "Can not read source file %s.", sFile); + + char buffer[65536] + size_t uRead = 0; + + while( (uRead = fread(buffer, sizeof(char), 65536, pIn)) > 0){ + if(uRead != fwrite(buffer, sizeof(char), uRead, stdout)){ + das_error(PERR, "Error writing %s to stdout", sFile); + fclose(pIn); + fclose(pOut); + return PERR; + } + } + + fclose(pIn); + + return DAS_OKAY; +} + +/* ************************************************************************* */ int main(int argc, char** argv) { /* Exit on errors, log info messages and above */ das_init(argv[0], DASERR_DIS_EXIT, 0, DASLOG_INFO, NULL); + char sWriteTo[LOC_PATH_LEN] = {'\0'}; - char sInFile[IN_FILE_SZ] = {'\0'}; - char sOutFile[OUT_FILE_SZ] = {'\0'}; - char sTmpDir[TMP_DIR_SZ] = {'\0'}; - char sSkelFile[SKEL_FILE_SZ] = {'\0'}; - char sCredFile[CRED_FILE_SZ] = {'\0'}; FILE* pFile = NULL; - DasErrCode nRet = parseArgs( - argc, argv, sInFile, IN_FILE_SZ, sOutFile, OUT_FILE_SZ, sTmpDir, TMP_DIR_SZ, - sSkelFile, SKEL_FILE_SZ - ); - if(nRet != DAS_OKAY) + my_opts opts; + + if(parseArgs(argc, argv, &opts) != DAS_OKAY) return 13; struct context ctx; memset(&ctx, 0, sizeof(struct context)); + ctx.sWriteTo = sWriteTo; + ctx.sTpltFile = opts.aTpltFile; /* Figure out where we're gonna write before potentially contacting servers */ - + bool bReStream = false; + bool bAddFileName = false; + + if(opts.aOutFile[0] != '\0'){ + /* Writing to a specific final location */ + if(das_isdir(opts.aOutFile)){ + strncpy(ctx.sWriteTo, 128, opts.aOutFile); + bAddFileName = true; + } + else{ + strncpy(ctx.sWriteTo, LOC_PATH_LEN-1, opts.aOutFile); + if(!das_mkdirsto(ctx.sWriteTo)) + return das_error(PERR, "Couldn't make directories to %s", ctx.sWriteTo); + } + } + else{ + /* Just writing to a temporary location */ + /* Temporary write and stream. Would love to use tmpfile here, but + libcdf doesn't support it */ + if(opts.aTmpDir[0] == '\0'){ + snprintf(ctx.sWriteTo, LOC_PATH_LEN-1, "%s%c%s%cd3cdf-tmp-%d.cdf", + das_userhome(), DAS_DSEPC, DEF_TEMP_DIR, DAS_DSEPC, getpid() + ); + } + else{ + snprintf(ctx.sWriteTo, LOC_PATH_LEN-1, "%s%cd3cdf-tmp-%d.cdf", + opts.sTmpDir, DAS_SEPC, getpid() + ); + } + bReStream = true; + if(!das_mkdirsto(ctx.sWriteTo)){ + return das_error(PERR, "Couldn't make directories to %s", ctx.sWriteTo); + } + } /* Build one of 4 types of stream readers */ DasCredMngr* pCreds; @@ -369,6 +758,10 @@ int main(int argc, char** argv) { if(sInFile[0] == '\0'){ /* Reading from standard input */ pIn = new_DasIO_cfile(PROG, stdin, "r"); + + /* If writing from standard input, an we need a name, just use the current time */ + if(bAddFileName) + _addTimeStampName(ctx.sWriteTo, LOC_PATH_LEN-1); } else if((strncmp(sInFile, "http://", 7) == 0)||(strncmp(sInFile, "https://", 8) == 0)){ @@ -394,6 +787,14 @@ int main(int argc, char** argv) { pIn = new_DasIO_ssl("das3_cdf", res.pSsl, "r"); else pIn = new_DasIO_socket("das3_cdf", res.nSockFd, "r"); + + /* If we need a filename, try to get it from the response header */ + if(bAddFileName){ + if(res.sFilename) + _addSourceName(ctx.sWriteTo, LOC_PATH_LEN-1, res.sFileName); + else + _addTimeStampName(ctx.sWriteTo, LOC_PATH_LEN-1); + } } else{ // Just a file @@ -405,6 +806,9 @@ int main(int argc, char** argv) { return das_error(PERR, "Couldn't open file %s", sTmp); pIn = new_DasIO_cfile(PROG, pInFile, "rb"); + + if(bAddFileName) + _addSourceName(ctx.sWriteTo, LOC_PATH_LEN-1, sInFile); } DasIO_model(pIn, 3); /* Upgrade any das2 s to das3 s */ @@ -421,7 +825,7 @@ int main(int argc, char** argv) { DasIO_addProcessor(pIn, &handler); - nRet = DasIO_readAll(pIn); + nRet = DasIO_readAll(pIn); /* <---- RUNS ALL PROCESSING -----<<< */ if(pInFile) fclose(pInFile); @@ -431,8 +835,9 @@ int main(int argc, char** argv) { DasHttpResp_clear(&res); } - if((nRet == DAS_OKAY)&&(bSendStdout)){ - nRet = sendCdf(); + if((nRet == DAS_OKAY)&&(bReStream)){ + nRet = writeFileToStdout(ctx.sWriteTo); + remove(ctx.sWriteTo); } return nRet; From 0e0d752cb8767c839e176c14ff770f1a6174d6db Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Mon, 19 Feb 2024 03:04:42 -0600 Subject: [PATCH 23/40] Can create headers and read data --- buildfiles/Linux.mak | 2 +- das2/codec.c | 3 + das2/dataset.c | 6 +- das2/dataset.h | 2 +- das2/dimension.c | 35 ++++- das2/dimension.h | 8 +- das2/http.c | 7 +- das2/property.c | 71 +++++++++- das2/property.h | 14 +- das2/serial.c | 6 +- das2/stream.c | 11 ++ das2/util.c | 44 +++++- das2/util.h | 2 +- utilities/das3_cdf.c | 322 ++++++++++++++++++++++++++++--------------- 14 files changed, 389 insertions(+), 144 deletions(-) diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index d090068..520dffb 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -169,7 +169,7 @@ $(BD)/das2_psd:$(BD)/das2_psd.o $(BD)/send.o $(BD)/$(TARG).a cdf:$(BD)/das3_cdf $(BD)/das3_cdf:$(BD)/das3_cdf.o - $(CC) $(CFLAGS) -o $@ $< $(BD)/$(TARG).a $(LFLAGS) + $(CC) $(CFLAGS) -o $@ $< $(BD)/$(TARG).a /usr/local/lib/libcdf.a $(LFLAGS) # Run tests test: $(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) diff --git a/das2/codec.c b/das2/codec.c index 843b84a..a6f629f 100644 --- a/das2/codec.c +++ b/das2/codec.c @@ -66,6 +66,9 @@ DasErrCode DasCodec_init( /* Makes the code below shorter */ das_val_type vtAry = DasAry_valType( pThis->pAry ); + /* Save off the value size for the array */ + pThis->nAryValSz = das_vt_size(vtAry); + ptrdiff_t aShape[DASIDX_MAX] = {0}; int nRank = DasAry_shape(pThis->pAry, aShape); ptrdiff_t nLastIdxSz = aShape[nRank - 1]; diff --git a/das2/dataset.c b/das2/dataset.c index 3361f1a..db4e7a4 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -106,7 +106,7 @@ int DasDs_shape(const DasDs* pThis, ptrdiff_t* pShape) das_error( DASERR_DS, "Dimension rank consistancy check failure. Dimension " "%s (%s) of dataset %s, is rank %d, must be at most rank %d for consistancy", - pDim->sName, pDim->sDim, pThis->sId, nDimRank, pThis->nRank + pDim->sId, pDim->sDim, pThis->sId, nDimRank, pThis->nRank ); return 0; } @@ -265,9 +265,9 @@ DasErrCode DasDs_addDim(DasDs* pThis, DasDim* pDim) /* Make sure that I don't already have a dimesion with this name */ for(v = 0; v < pThis->uDims; ++v){ - if(strcmp(pThis->lDims[v]->sName, pDim->sName) == 0) + if(strcmp(pThis->lDims[v]->sId, pDim->sId) == 0) return das_error(DASERR_DS, - "A dimension named %s already exists in dataset %s", pDim->sName, pThis->sId + "A dimension named %s already exists in dataset %s", pDim->sId, pThis->sId ); } diff --git a/das2/dataset.h b/das2/dataset.h index d357adc..4ff9d99 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -161,7 +161,7 @@ typedef struct dataset { */ char sGroupId[DAS_MAX_ID_BUFSZ]; - size_t uDims; /* Number of dimensions, das2 datasets are + size_t uDims; /* Number of dimensions, das datasets are * implicitly bundles in qdataset terms. */ DasDim** lDims; /* The data variable object arrays */ diff --git a/das2/dimension.c b/das2/dimension.c index 928e7a1..4d3b739 100644 --- a/das2/dimension.c +++ b/das2/dimension.c @@ -112,7 +112,7 @@ ptrdiff_t DasDim_lengthIn(const DasDim* pThis, int nIdx, ptrdiff_t* pLoc) return nLengthIn; } -const char* DasDim_id(const DasDim* pThis){ return pThis->sDim; } +const char* DasDim_id(const DasDim* pThis){ return pThis->sId; } int _DasDim_varOrder(const char* sRole){ if(strcmp(sRole, DASVAR_CENTER) == 0) return 0; @@ -140,10 +140,31 @@ char* DasDim_toStr(const DasDim* pThis, char* sBuf, int nLen) const char* sDimType = "Data"; if(pThis->dtype == DASDIM_COORD) sDimType = "Coordinate"; - int nWritten = snprintf(sBuf, nLen - 1, "%s Dimension: %s\n", - sDimType, pThis->sDim); + int nWritten = snprintf(sBuf, nLen - 1, "%s Dimension: %s (%s)", + sDimType, pThis->sId, pThis->sDim); pWrite += nWritten; nLen -= nWritten; if(nLen < 40) return sBuf; + + if(pThis->axes[0][0] != '\0'){ + + for(int iAxis = 0; iAxis < DASDIM_AXES; ++iAxis){ + if(pThis->axes[iAxis][0] != '\0'){ + if(iAxis == 0){ + strcpy(pWrite, " | axis: "); + *pWrite += 9; nLen -= 9; + } + else{ + *pWrite = ','; ++pWrite; --nLen; + } + *pWrite = pThis->axes[iAxis][0]; ++pWrite; --nLen; + if(pThis->axes[iAxis][1] != '\0'){ + *pWrite = pThis->axes[iAxis][1]; ++pWrite; --nLen; + } + } + } + } + + *pWrite = '\n'; ++pWrite; --nLen; /* Larry wanted the properties printed as well */ char* pSubWrite = DasDesc_info((DasDesc*)pThis, pWrite, nLen, " "); @@ -281,7 +302,7 @@ DasVar* DasDim_popVar(DasDim* pThis, const char* role){ /* Construction / Destruction ********************************************* */ -DasDim* new_DasDim(const char* sDim, const char* sName, enum dim_type dtype, int nDsRank) +DasDim* new_DasDim(const char* sDim, const char* sId, enum dim_type dtype, int nDsRank) { DasDim* pThis = (DasDim*)calloc(1, sizeof(DasDim)); if(pThis == NULL){ @@ -294,10 +315,10 @@ DasDim* new_DasDim(const char* sDim, const char* sName, enum dim_type dtype, int das_assert_valid_id(sDim); strncpy(pThis->sDim, sDim, DAS_MAX_ID_BUFSZ-1); - if(sName && sName[0] != '\0') /* Just repeat as dim name if no name given */ - strncpy(pThis->sName, sName, DAS_MAX_ID_BUFSZ-1); + if(sId && sId[0] != '\0') /* Just repeat as dim name if no name given */ + strncpy(pThis->sId, sId, DAS_MAX_ID_BUFSZ-1); else - strncpy(pThis->sName, sDim, DAS_MAX_ID_BUFSZ-1); + strncpy(pThis->sId, sDim, DAS_MAX_ID_BUFSZ-1); pThis->iFirstInternal = nDsRank; diff --git a/das2/dimension.h b/das2/dimension.h index d7fa5b7..dd4433d 100644 --- a/das2/dimension.h +++ b/das2/dimension.h @@ -128,10 +128,12 @@ enum dim_type { DASDIM_UNK = 0, DASDIM_COORD, DASDIM_DATA }; typedef struct das_dim { DasDesc base; /* Attributes or properties for this variable */ enum dim_type dtype; /* Coordinate or Data flag */ - char sDim[DAS_MAX_ID_BUFSZ]; /* A general dimension ID such as 'B', 'E', etc */ - + /* A name for this particular variable group, cannot repeat in the dataset */ - char sName[DAS_MAX_ID_BUFSZ]; + char sId[DAS_MAX_ID_BUFSZ]; + + /* A general dimension category such as 'B', 'E', etc */ + char sDim[DAS_MAX_ID_BUFSZ]; /* Plot axes afinity, if any. For variables that have no internal * indicies, only the first axis make any sense. Multiple axis diff --git a/das2/http.c b/das2/http.c index 16f871d..9a555c7 100644 --- a/das2/http.c +++ b/das2/http.c @@ -859,7 +859,12 @@ bool _das_http_setFileName(DasBuf* pBuf, DasHttpResp* pRes) char* pRead = NULL; if( (pRead = strstr(sDis, "filename=")) == NULL) return false; if(strlen(pRead + 9) == 0) return false; - pRes->sFilename = das_strdup(pRead); + + /* Temporary workaround for bug in das-flex server */ + if(pRead[9] == '"') + pRes->sFilename = das_strdup(pRead + 10); + else + pRes->sFilename = das_strdup(pRead + 9); return true; } diff --git a/das2/property.c b/das2/property.c index 61b2a08..213ce07 100644 --- a/das2/property.c +++ b/das2/property.c @@ -411,5 +411,72 @@ char DasProp_sep(const DasProp* pProp) int DasProp_items(const DasProp* pProp) { - return -1 * das_error(DASERR_NOTIMP, "Not Yet Implemented"); -} \ No newline at end of file + /* Just count seperators */ + char cSep = DasProp_sep(pProp); + const char* sValue = DasProp_value(pProp); + int nItems = 1; + while(*sValue != '\0'){ + if(*sValue == cSep){ + ++nItems; + } + ++sValue; + } + return nItems; +} + +/* Converting values here. Note this is repeated in Descriptor and shouldn't be */ + +/** Convert integer property values to 64-bit ints + * + * Returns the number of conversions, or a negative error value + */ +int DasProp_convertInt(const DasProp* pProp, int64_t* pBuf, size_t uBufLen) +{ + /* Walk the string, every time you hit a seperator convert back to + the last one */ + /* int64_t nItem; + char sItem[32] = {'\0'}; + + size_t uLeft = uBufLen; + const char* sValue = DasProp_value(pProp); + const char* sItem = sValue; + char cSep = DasProp_sep(pProp); + + while((*sValue != '\0')&&(uLeft > 0)){ + if(*sValue == cSep){ + + } + } + / * Tail convert * / + sscanf */ + return -1 * das_error(DASERR_NOTIMP, "Integer property conversion not yet implemented"); +} + +/** Convert real-value properties to double + * + * Returns the number of conversions, or a negative error value + */ +int DasProp_convertReal(const DasProp* pProp, double* pBuf, size_t uBufLen) +{ + return -1 * das_error(DASERR_NOTIMP, "Real property conversion not yet implemented"); +} + +/** Convert boolean property values to bytes + * + * Returns the number of conversions, or a negative error value + */ +int DasProp_convertBool(const DasProp* pProp, uint8_t* pBuf, size_t uBufLen) +{ + return -1 * das_error(DASERR_NOTIMP, "Boolean property conversion not yet implemented"); +} + +/** Convert datatime properties TT2K long integers */ +int DasProp_convertTt2k(const DasProp* pProp, int64_t* pBuf, size_t uBufLen) +{ + return -1 * das_error(DASERR_NOTIMP, "Tt2k property conversion not yet implemented"); +} + +/** Convert datatime properties to a double based value of units */ +int DasProp_convertTime(const DasProp* pProp, uint64_t* pBuf, size_t uBufLen){ + return -1 * das_error(DASERR_NOTIMP, "Time property conversion not yet implemented"); +} diff --git a/das2/property.h b/das2/property.h index 06343ab..6c67ef2 100644 --- a/das2/property.h +++ b/das2/property.h @@ -145,17 +145,11 @@ int DasProp_convertReal(const DasProp* pProp, double* pBuf, size_t uBufLen); */ int DasProp_convertBool(const DasProp* pProp, uint8_t* pBuf, size_t uBufLen); -/** Convert datatime properties to either double or 64-bit integers depending - * on the given units - */ -int DasProp_convertTT2K(const DasProp* pProp, int64_t* pBuf, size_t uBufLen); +/** Convert datatime properties TT2K long integers */ +int DasProp_convertTt2k(const DasProp* pProp, int64_t* pBuf, size_t uBufLen); -/** Convert datatime properties to either double or 64-bit integers depending - * on the given units - */ -int DasProp_convertTT2k( - const DasProp* pProp, uint64_t* pBuf, size_t uBufLen -); +/** Convert datatime properties to a double based value of units */ +int DasProp_convertTime(const DasProp* pProp, uint64_t* pBuf, size_t uBufLen); /** Get a property type code. * diff --git a/das2/serial.c b/das2/serial.c index f350a34..bb4f614 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -423,7 +423,11 @@ static void _serial_onOpenVar( for(int i = 0; psAttr[i] != NULL; i+=2){ if(strcmp(psAttr[i], "use") == 0) strncpy(pCtx->varUse, psAttr[i+1], DASDIM_ROLE_SZ-1); - else if(strcmp(psAttr[i], "semantic") == 0) /* Partial value type, need pkt */ + + /* For now allow both semantic and valType, but valType doesn't validate */ + else if( + (strcmp(psAttr[i], "semantic") == 0)||(strcmp(psAttr[i], "valType") == 0) + ) /* Partial value type, need pkt */ strncpy(pCtx->valSemantic, psAttr[i+1], _VAL_SEMANTIC_SZ-1);/* encoding details to decide */ else if(strcmp(psAttr[i], "storage") == 0) strncpy(pCtx->valStorage, psAttr[i+1], _VAL_STOREAGE_SZ-1); diff --git a/das2/stream.c b/das2/stream.c index 6af4116..89be22a 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -403,6 +403,17 @@ int StreamDesc_nextFrameId(const StreamDesc* pThis){ return -1; } +int8_t StreamDesc_getNumFrames(const StreamDesc* pThis) +{ + /* Return the ID of the last defined frame */ + int8_t iLastGood = -1; + for(int8_t i = 0; i < MAX_FRAMES; ++i){ + if(pThis->frames[i] != NULL) + iLastGood = i; + } + return iLastGood + 1; +} + const DasFrame* StreamDesc_getFrame(const StreamDesc* pThis, int idx) { return (idx < 0 || idx > MAX_FRAMES) ? NULL : pThis->frames[idx]; diff --git a/das2/util.c b/das2/util.c index be63ef3..44e24e6 100644 --- a/das2/util.c +++ b/das2/util.c @@ -161,7 +161,7 @@ void das_init( /* Save off the current account's home directory. If a home directory * is not available return some system directory that is likely writable */ -#ifndef _WIN32 +#ifdef _WIN32 if(getenv("USERPROFILE")) strncpy(g_sHome, getenv("USERPROFILE"), HOME_DIR_SZ - 1); else @@ -705,7 +705,7 @@ bool das_copyfile(const char* src, const char* dest) uLen = strlen(sPath); for(u = 0; u0) && (u < uLen-1)){ + if((sPath[u] == DAS_DSEPC) && (u>0) && (u < uLen-1)){ sPath[u] = '\0'; if(! das_isdir(sPath) ){ @@ -760,6 +760,46 @@ bool das_copyfile(const char* src, const char* dest) return true; } +DasErrCode das_mkdirsto(const char* path) +{ + /* Walk the set of items, make directories for everything upto the last */ + + /* Make directories to output file */ + char sPath[256] = {'\0'}; + strncpy(sPath, path, 255); + +#ifndef WIN32 + mode_t dirmode = S_IRUSR|S_IWUSR|S_IRWXU|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IXOTH; +#endif + + size_t uLen = strlen(sPath); + int nErr; + + for(size_t u = 0; u < uLen; u++){ + if((sPath[u] == DAS_DSEPC) && (u>0) && (u < uLen-1)){ + sPath[u] = '\0'; + + if(! das_isdir(sPath) ){ +#ifndef WIN32 + if(mkdir(sPath, dirmode) != 0) +#else + if(mkdir(sPath) != 0) +#endif + { + nErr = errno; + return das_error( + DASERR_UTIL, "Cannot make directory '%s' because '%s'.", + sPath, strerror(nErr) + ); + } + } + + sPath[u] = '/'; + } + } + return DAS_OKAY; +} + int _wrap_strcmp(const void* vp1, const void* vp2){ const char* p1 = (const char*)vp1; diff --git a/das2/util.h b/das2/util.h index a80208b..ddb02a0 100644 --- a/das2/util.h +++ b/das2/util.h @@ -436,7 +436,7 @@ DAS_API bool das_isdir(const char* path); * @return true if directories up to the final location either exist, or * could be generated, false otherwise. */ -DAS_API bool das_mkdirsto(const char* path); +DAS_API DasErrCode das_mkdirsto(const char* path); /** Get the home directory for the current account diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index bb81ea9..fcf5022 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -28,6 +28,9 @@ #include #include #include +#include + +#include #include @@ -44,6 +47,16 @@ #define LOC_PATH_LEN 256 +#ifdef _WIN32 +#define HOME_VAR_STR "USERPROFILE" +#else +#define HOME_VAR_STR "HOME" +#endif + +/* Handle lack of const qualifier in cdf lib that should really be there */ +#define CDFvarId(id, str) CDFgetVarNum((id), (char*) (str)) +#define CDFattrId(id, str) CDFgetAttrNum((id), (char*) (str)) + /* ************************************************************************* */ void prnHelp() { @@ -84,7 +97,7 @@ void prnHelp() " description -> CATDESC\n" " summary -> VAR_NOTES\n" "\n" -" Other CDF attributes are also set based on the data structure type. Some " +" Other CDF attributes are also set based on the data structure type. Some\n" " examples are:\n" "\n" " DasVar.units -> UNITS\n" @@ -95,6 +108,7 @@ void prnHelp() " to a das3 stream priror to writing the CDF file.\n" "\n"); + printf( "OPTIONS\n" " -h,--help Write this text to standard output and exit.\n" @@ -116,6 +130,9 @@ void prnHelp() " generated file name will be used. This is useful when reading\n" " das servers since they provide default filenames.\n" "\n" +" -r,--remove Tired of libcdf refusing to overwrite a file? Use this option\n" +" with '-o'\n" +"\n" " -s DIR,--scratch=DIR\n" " Scratch space directory for writing temporary files when run\n" " as a data stream filter. Ignored if -o is given.\n" @@ -127,8 +144,9 @@ void prnHelp() "\n" " -c FILE,--credentials=FILE\n" " Set the location where server authentication tokens (if any)\n" -" are saved. Defaults to " HOME_STR DAS_DSEPS DEF_AUTH_FILE "\n" -"\n"); +" are saved. Defaults to %s%s%s\n" +"\n", HOME_VAR_STR, DAS_DSEPS, DEF_AUTH_FILE); + printf( "EXAMPLES\n" @@ -162,13 +180,13 @@ static int _isArg( const char* sArg, const char* sShort, const char* sLong, bool* pLong ){ if(strcmp(sArg, sShort) == 0){ - *pLong = false; + if(pLong) *pLong = false; return true; } size_t uLen = strlen(sLong); /* Include the '=' */ if(strncmp(sArg, sLong, uLen) == 0){ - *pLong = true; + if(pLong) *pLong = true; return true; } return false; @@ -185,13 +203,10 @@ static bool _getArgVal( if(! _isArg(argv[*pArgIdx], sShort, sLong, &bIsLong)) return false; - - else if(argv[*pArgIdx][11] == '\0') - goto NO_ARG; - + const char* sVal; if(bIsLong){ - size_t uLongSz = strlen(sLong) + size_t uLongSz = strlen(sLong); if(argv[*pArgIdx][uLongSz] == '\0') /* Nothing in str after prefix */ goto NO_ARG; @@ -209,33 +224,38 @@ static bool _getArgVal( return true; NO_ARG: - das_error(PERR, "Missing option after argument %s", argv[i]); + das_error(PERR, "Missing option after argument %s", argv[*pArgIdx]); return false; } typedef struct program_optitons{ + bool bRmFirst; char aTpltFile[256]; /* Template CDF */ char aSource[1024]; /* Input source, http://, file:// etc. */ char aOutFile[256]; /* Non-filter: output */ char aTmpDir[256]; /* Filter mode: temp dir */ char aLevel[32]; - char aCredFile[256]; + char aCredFile[256]; } popts_t; + +#define FIELD_SZ(type, field) (sizeof(((type*)NULL)->field)) + int parseArgs(int argc, char** argv, popts_t* pOpts) { memset(pOpts, 0, sizeof(popts_t)); + pOpts->bRmFirst = false; /* Set a few defaults */ snprintf( - pOpts->aCredFile, sizeof(popts_t.aCreds) - 1, "%s" DAS_DSEPS DEF_AUTH_FILE, + pOpts->aCredFile, FIELD_SZ(popts_t, aCredFile) - 1, "%s" DAS_DSEPS DEF_AUTH_FILE, das_userhome() ); - strcpy(pOpts->sLevel, "info"); + strcpy(pOpts->aLevel, "info"); snprintf( - pOpts->aTmpDir, sizeof(popts_t.aTmpDir) - 1, "%s" DAS_DSEPS ".cdftmp", + pOpts->aTmpDir, FIELD_SZ(popts_t, aTmpDir) - 1, "%s" DAS_DSEPS ".cdftmp", das_userhome() ); @@ -244,24 +264,41 @@ int parseArgs(int argc, char** argv, popts_t* pOpts) ++i; /* 1st time, skip past the program name */ if(argv[i][0] == '-'){ - if(_isArg(argv[i], "-h", "--help", &bIsLong)){ + if(_isArg(argv[i], "-h", "--help", NULL)){ prnHelp(); exit(0); } - if(_getArg(pOpts->aTpltFile, sizeof(popts_t.aTpltFile), argv, argc, &i, "-t", "--template=")) + if(_isArg(argv[i], "-r", "--remove", NULL)){ + pOpts->bRmFirst = true; continue; - if(_getArg(pOpts->aSource, sizeof(popts_t.aSource), argv, argc, &i, "-i", "--input=")) + } + if(_getArgVal( + pOpts->aTpltFile, FIELD_SZ(popts_t,aTpltFile), argv, argc, &i, "-t", "--template=" + )) + continue; + if(_getArgVal( + pOpts->aSource, FIELD_SZ(popts_t,aSource), argv, argc, &i, "-i", "--input=" + )) continue; - if(_getArg(pOpts->aWriteTo, sizeof(popts_t.aWriteTo), argv, argc, &i, "-o", "--output=")) + if(_getArgVal( + pOpts->aOutFile, FIELD_SZ(popts_t,aOutFile), argv, argc, &i, "-o", "--output=" + )) continue; - if(_getArg(pOpts->aTmpDir, sizeof(popts_t.aTmpDir), argv, argc, &i, "-s", "--scratch=")) + if(_getArgVal( + pOpts->aTmpDir, FIELD_SZ(popts_t,aTmpDir), argv, argc, &i, "-s", "--scratch=" + )) continue; - if(_getArg(pOpts->aLevel, sizeof(popts_t.aLevel), argv, argc, &i, "-l", "--log=")) + if(_getArgVal( + pOpts->aLevel, FIELD_SZ(popts_t,aLevel), argv, argc, &i, "-l", "--log=" + )) continue; - if(_getArg(pOpts->aCredFile, sizeof(popts_t.aCredFile), argv, argc, &i, "-c", "--credentials=")) + if(_getArgVal( + pOpts->aCredFile, FIELD_SZ(popts_t,aCredFile), argv, argc, &i, "-c", "--credentials=" + )) continue; + return das_error(PERR, "Unknown command line argument %s", argv[i]); } - return das_error(PERR, "Unknown command line argument %s", argv[i]); + return das_error(PERR, "Malformed command line argument %s", argv[i]); } return DAS_OKAY; } @@ -270,9 +307,8 @@ int parseArgs(int argc, char** argv, popts_t* pOpts) struct context { CDFid nCdfId; - char sCdfStatus[CDF_STATUSTEXT_LEN+1]; - const char* sTpltFile; /* An empty template CDF to put data in */ - const char* sWriteTo; + char* sTpltFile; /* An empty template CDF to put data in */ + char* sWriteTo; /* DasTime dtBeg; */ /* Start point for initial query, if known */ /* double rInterval; */ /* Size of original query, if known */ @@ -282,7 +318,7 @@ struct context { /* sending CDF message to the log ****************************************** */ bool _cdfOkayish(CDFstatus iStatus){ - char[CDF_ERRTEXT_LEN+1] sMsg; + char sMsg[CDF_ERRTEXT_LEN+1]; /* Wrapper should have prevented this, but in case it's called directly */ if(iStatus == CDF_OK) @@ -290,22 +326,22 @@ bool _cdfOkayish(CDFstatus iStatus){ CDFgetStatusText(iStatus, sMsg); - if(status < CDF_WARN){ + if(iStatus < CDF_WARN){ daslog_error_v("from cdflib, %s", sMsg); return false; } - if(status < CDF_OK) + if(iStatus < CDF_OK) daslog_warn_v("from cdflib, %s", sMsg); - else if(status > CDF_OK) + else if(iStatus > CDF_OK) daslog_info_v("from cdflib, %s", sMsg); return true; } /* Use a macro to avoid unneccessary functions calls that slow the program */ -#define _OK( SOME_CDF_FUNC ) ( ((status = (SOME_CDF_FUNC) ) == CDF_OK) || (_cdfOkayish(status)) ) +#define _OK( SOME_CDF_FUNC ) ( ((iStatus = (SOME_CDF_FUNC) ) == CDF_OK) || (_cdfOkayish(iStatus)) ) /* ************************************************************************* */ @@ -315,7 +351,7 @@ bool _cdfOkayish(CDFstatus iStatus){ #define PROP_XFORM_SZ 65536 /* 64K */ -const ubyte g_propBuf[PROP_XFORM_SZ]; +ubyte g_propBuf[PROP_XFORM_SZ]; const char* DasProp_cdfName(const DasProp* pProp) { @@ -342,7 +378,7 @@ long DasProp_cdfEntries(const DasProp* pProp) return 1; /* Count seperators. If sep is just '\0' then return 1. */ - cSep = DasProp_sep(pProp); + char cSep = DasProp_sep(pProp); if(cSep == '\0') return 1; @@ -369,7 +405,7 @@ long DasProp_cdfType(const DasProp* pProp) case DASPROP_REAL: return CDF_DOUBLE; case DASPROP_DATETIME: return CDF_TIME_TT2000; default: - assert(false, "das2C library change detected"); + assert(false); /* Dectects das2C lib changes */ } return 0; } @@ -384,8 +420,10 @@ long DasProp_cdfEntLen(const DasProp* pProp, long iEntry) return 0; } + const char* pRead = DasProp_value(pProp); + /* Strings that don't have a special separator only have one entry */ - char cSep = DasProp_value(pProp); + char cSep = DasProp_sep(pProp); if(cSep == '\0'){ if(iEntry == 0) return strlen(pRead); @@ -396,7 +434,6 @@ long DasProp_cdfEntLen(const DasProp* pProp, long iEntry) /* Get the length between separators */ /* I am a multi-entry string, get the length form seperator iEntry, until iEntry + 1 */ - const char* pRead = DasProp_value(pProp); int iSep = 0; int iLastSepPos = -1; int i = 0; @@ -417,7 +454,7 @@ long DasProp_cdfEntLen(const DasProp* pProp, long iEntry) void* DasProp_cdfValues(const DasProp* pProp){ /* For strings this is easy, others have to be parsed */ if(DasProp_type(pProp) & DASPROP_STRING) - return DasProp_value(pProp); + return (void*) DasProp_value(pProp); size_t uBufLen = 0; @@ -434,26 +471,26 @@ void* DasProp_cdfValues(const DasProp* pProp){ case DASPROP_INT: uBufLen = PROP_XFORM_SZ / sizeof(int64_t); - if(DasProp_convertInt(pProp, g_propBuf, uBufLen) != DAS_OKAY) + if(DasProp_convertInt(pProp, (int64_t*)g_propBuf, uBufLen) != DAS_OKAY) return NULL; else return g_propBuf; case DASPROP_REAL: uBufLen = PROP_XFORM_SZ / sizeof(double); - if(DasProp_convertReal(pProp, g_propBuf, uBufLen) != DAS_OKAY) + if(DasProp_convertReal(pProp, (double*)g_propBuf, uBufLen) != DAS_OKAY) return NULL; else return g_propBuf; case DASPROP_DATETIME: uBufLen = PROP_XFORM_SZ / sizeof(int64_t); - if(DasProp_convertTt2k(pProp, g_propBuf, uBufLen) != DAS_OKAY) + if(DasProp_convertTt2k(pProp, (int64_t*)g_propBuf, uBufLen) != DAS_OKAY) return NULL; else return g_propBuf; default: - assert(false, "das2C library change detected"); + assert(false); /* detect das2C library changes */ } return NULL; } @@ -469,7 +506,7 @@ void* DasProp_cdfEntValues(const DasProp* pProp, long iEntry){ char cSep = DasProp_sep(pProp); if(cSep == '\0'){ if(iEntry == 0) - return DasProp_value(pProp); + return (void*)DasProp_value(pProp); else return NULL; } @@ -486,7 +523,7 @@ void* DasProp_cdfEntValues(const DasProp* pProp, long iEntry){ if(*pRead == cSep){ if(iSep == iEntry){ pEntry = DasProp_value(pProp) + iLastSepPos + 1; - return pEntry; + return (void*)pEntry; } ++iSep; iLastSepPos = i; @@ -499,21 +536,33 @@ void* DasProp_cdfEntValues(const DasProp* pProp, long iEntry){ DasErrCode writeGlobalProp(CDFid iCdf, const DasProp* pProp) { - CDFstatus status = CDF_OK; + CDFstatus iStatus = CDF_OK; /* Also used by _OK macro */ + + const char* sName = NULL; + long iAttr = 0; long n = DasProp_cdfEntries(pProp); for(long iEntry = 0; iEntry < n; ++iEntry){ - status = CDFputAttrgEntry( + sName = DasProp_cdfName(pProp); + + /* Get attribute number or make a new (why can't CDFlib use "const", + is it really so hard? */ + if((iAttr = CDFgetAttrNum(iCdf, (char*)sName)) <= 0){ + if(!_OK(CDFcreateAttr(iCdf, sName, GLOBAL_SCOPE, &iAttr))) + return PERR; + } + + iStatus = CDFputAttrgEntry( iCdf, - CDFgetAttrNum(iCdf, DasProp_cdfName(pProp)), + iAttr, iEntry, DasProp_cdfType(pProp), DasProp_cdfEntLen(pProp, iEntry), DasProp_cdfEntValues(pProp, iEntry) ); - if(!_cdfOkayish(status)) - return PERR + if(!_cdfOkayish(iStatus)) + return PERR; } return DAS_OKAY; @@ -521,14 +570,15 @@ DasErrCode writeGlobalProp(CDFid iCdf, const DasProp* pProp) DasErrCode writeVarProp(CDFid iCdf, long iVarNum, const DasProp* pProp) { - status = CDFput/AttrzEntry( + CDFstatus status = CDFputAttrzEntry( iCdf, - CDFgetAttrNum(iCdf, DasProp_cdfName(pProp)), + CDFattrId(iCdf, DasProp_cdfName(pProp)), iVarNum, DasProp_cdfType(pProp), (long) DasProp_items(pProp), - DasProp_cdfValues(pProp, iEntry) + DasProp_cdfValues(pProp) ); + if(!_cdfOkayish(status)) return PERR; @@ -538,42 +588,46 @@ DasErrCode writeVarProp(CDFid iCdf, long iVarNum, const DasProp* pProp) /* ************************************************************************* */ DasErrCode onStream(StreamDesc* pSd, void* pUser){ - struct context pCtx* = (struct context pCtx*)pUser; + struct context* pCtx = (struct context*)pUser; - CDFstatus nCdfRet = CDF_OK; + daslog_info_v("Writing to: %s", pCtx->sWriteTo); - /* CDF oddity, halt the file name at the dot */ - char* pDot = strrchr(pCtx->sOutFile, '.') - if(pDot != NULL) *pDot = '\0'; + CDFstatus iStatus = CDF_OK; /* needed by the _OK() macro */ + /* CDF irritating oddity, halt the file name at the dot */ + char* pDot = strrchr(pCtx->sWriteTo, '.'); + /* Open the file since we have something to write */ - if(pCtx->sTpltFile){ + if(pCtx->sTpltFile[0] != '\0'){ /* Copy in skeleton and open that or... */ - if(!das_copyfile(sSkelCdf, pCtx->sOutFile, NEW_FILE_MODE)){ - das_error(PERR, "Couldn't open copy '%s' --to--> '%s'", sSkelCdf, sDest); + if(!das_copyfile(pCtx->sTpltFile, pCtx->sWriteTo, NEW_FILE_MODE)){ + das_error(PERR, "Couldn't open copy '%s' --to--> '%s'", + pCtx->sTpltFile, pCtx->sWriteTo + ); return PERR; } - if(CDF_OK != CDFopenCDF(sDest, &(pCtx->nCdfId))){ - const char* sTmp = ""; - if(pDot != NULL) *pDot = '.'; - else sTmp = ".cdf"; - return das_error(PERR, "Couldn't open CDF file '%s%s'", pCtx->sOutFile, sTmp); + + if(pDot != NULL) *pDot = '\0'; + + if(!_OK( CDFopenCDF(pCtx->sWriteTo, &(pCtx->nCdfId))) ){ + *pDot = '.'; /* Convert back */ + return das_error(PERR, "Couldn't open CDF file '%s'", pCtx->sWriteTo); } } else{ /* Create a new file */ - if( CDF_OK != CDFcreateCDF(pCtx->sOutFile, &(pCtx->nCdfId)) ){ - const char* sTmp = ""; - if(pDot != NULL) *pDot = '.'; - else sTmp = ".cdf"; - return das_error(PERR, "Couldn't open CDF file '%s%S'", pCtx->sOutFile, sTmp) + if(pDot != NULL) *pDot = '\0'; + + if(!_OK( CDFcreateCDF(pCtx->sWriteTo, &(pCtx->nCdfId)) ) ){ + *pDot = '.'; /* Convert back */ + return das_error(PERR, "Couldn't open CDF file '%s'", pCtx->sWriteTo); } } - if(pDot != NULL) *pDot = '.'; /* But our dot back damnit */ + if(pDot != NULL) *pDot = '.'; /* But our damn dot back */ /* We have the file, run in our properties */ - size_t uProps = DasDesc_lengthIn((DasDesc*)pSd); + size_t uProps = DasDesc_length((DasDesc*)pSd); for(size_t u = 0; u < uProps; ++u){ const DasProp* pProp = DasDesc_getPropByIdx((DasDesc*)pSd, u); if(pProp == NULL) continue; @@ -592,42 +646,68 @@ DasErrCode onStream(StreamDesc* pSd, void* pUser){ } /* ************************************************************************* */ -DasErrCode onDataSet(StreamDesc* pSd, DasDs* dd, void* pUser) +DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) { - struct context pCtx* = (struct context pCtx*)pUser; + /* struct context* pCtx = (struct context*)pUser; */ + char sBuf[16000] = {'\0'}; + DasDs_toStr(pDs, sBuf, 15999); + fputs(sBuf, stderr); /* Inspect the dataset and create any associated CDF variables */ /* For data that has values in the header, write the values to CDF now */ - return PERR; + + for(uint32_t uDim = 0; uDim < pDs->uDims; ++uDim){ + DasDim* pDim = pDs->lDims[u]; + + for(uint32_t uVar = 0; uVar < pDim->uVars; ++uVar){ + + } + } + + return DAS_OKAY; } /* ************************************************************************* */ -DasErrCode onData(StreamDesc* pSd, DasDs* dd, void* pUser) +DasErrCode onData(StreamDesc* pSd, DasDs* pDs, void* pUser) { - struct context pCtx* = (struct context pCtx*)pUser; + /* struct context* pCtx = (struct context*)pUser; */ /* Just let the data accumlate in the arrays unless we've hit our memory limit, then hyperput it */ - return PERR; + if(daslog_level() <= DASLOG_DEBUG){ + + char sBuf[128] = {'\0'}; + ptrdiff_t aShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + + int nRank = DasDs_shape(pDs, aShape); + das_shape_prnRng(aShape, nRank, nRank, sBuf, 127); + + daslog_debug_v("Dataset %s shape is now: %s\n", DasDs_id(pDs), sBuf); + } + + return DAS_OKAY; } /* ************************************************************************* */ DasErrCode onExcept(OobExcept* pExcept, void* pUser) { - struct context pCtx* = (struct context pCtx*)pUser; + /* struct context* pCtx = (struct context*)pUser; */ /* If this is a no-data-in range message set the no-data flag */ - return PERR; + return DAS_OKAY; } /* ************************************************************************* */ DasErrCode onClose(StreamDesc* pSd, void* pUser) { - struct context pCtx* = (struct context pCtx*)pUser; + /* struct context* pCtx = (struct context*)pUser; */ /* Flush all data to the CDF */ - return PERR; + + + + return DAS_OKAY; } /* helper ****************************************************************** */ @@ -638,9 +718,9 @@ void _addTimeStampName(char* sDest, size_t uDest) char sTmp[LOC_PATH_LEN] = {'\0'}; das_time dt; dt_now(&dt); snprintf(sTmp, LOC_PATH_LEN - 1, "%s%cparsed_at_%04d-%02d-%02dT%02d-%02d-%06.3f.cdf", - sWriteTo, DAS_DSEPC, dt.year, dt.month, dt.mday, dt.hour, dt.minute, dt.second + sDest, DAS_DSEPC, dt.year, dt.month, dt.mday, dt.hour, dt.minute, dt.second ); - strncpy(sWriteTo, sTmp, uDest - 1); + strncpy(sDest, sTmp, uDest - 1); } DasErrCode _addSourceName(char* sDest, size_t uDest, const char* sInFile) @@ -663,9 +743,9 @@ DasErrCode _addSourceName(char* sDest, size_t uDest, const char* sInFile) } char sTmp2[LOC_PATH_LEN] = {'\0'}; - snprintf(sTmp2, LOC_PATH_LEN - 1, "%s%c%s.cdf", sInFile); + snprintf(sTmp2, LOC_PATH_LEN - 1, "%s%c%s.cdf", sDest, DAS_DSEPC, sInFile); - strncpy(sWriteTo, sTmp2, uDest - 1); + strncpy(sDest, sTmp2, uDest - 1); return DAS_OKAY; } @@ -678,34 +758,35 @@ DasErrCode writeFileToStdout(const char* sFile) if(pIn == NULL) return das_error(PERR, "Can not read source file %s.", sFile); - char buffer[65536] + char buffer[65536]; size_t uRead = 0; while( (uRead = fread(buffer, sizeof(char), 65536, pIn)) > 0){ if(uRead != fwrite(buffer, sizeof(char), uRead, stdout)){ das_error(PERR, "Error writing %s to stdout", sFile); fclose(pIn); - fclose(pOut); return PERR; } } fclose(pIn); - return DAS_OKAY; } /* ************************************************************************* */ -int main(int argc, char** argv) { +int main(int argc, char** argv) +{ + + DasErrCode nRet = DAS_OKAY; /* Exit on errors, log info messages and above */ das_init(argv[0], DASERR_DIS_EXIT, 0, DASLOG_INFO, NULL); char sWriteTo[LOC_PATH_LEN] = {'\0'}; - FILE* pFile = NULL; + FILE* pInFile = NULL; - my_opts opts; + popts_t opts; if(parseArgs(argc, argv, &opts) != DAS_OKAY) return 13; @@ -722,13 +803,13 @@ int main(int argc, char** argv) { if(opts.aOutFile[0] != '\0'){ /* Writing to a specific final location */ if(das_isdir(opts.aOutFile)){ - strncpy(ctx.sWriteTo, 128, opts.aOutFile); + strncpy(ctx.sWriteTo, opts.aOutFile, 127); bAddFileName = true; } else{ - strncpy(ctx.sWriteTo, LOC_PATH_LEN-1, opts.aOutFile); - if(!das_mkdirsto(ctx.sWriteTo)) - return das_error(PERR, "Couldn't make directories to %s", ctx.sWriteTo); + strncpy(ctx.sWriteTo, opts.aOutFile, LOC_PATH_LEN-1); + if((nRet = das_mkdirsto(ctx.sWriteTo)) != DAS_OKAY) + return nRet; } } else{ @@ -742,33 +823,36 @@ int main(int argc, char** argv) { } else{ snprintf(ctx.sWriteTo, LOC_PATH_LEN-1, "%s%cd3cdf-tmp-%d.cdf", - opts.sTmpDir, DAS_SEPC, getpid() + opts.aTmpDir, DAS_DSEPC, getpid() ); } bReStream = true; - if(!das_mkdirsto(ctx.sWriteTo)){ + if(das_mkdirsto(ctx.sWriteTo) != DAS_OKAY){ return das_error(PERR, "Couldn't make directories to %s", ctx.sWriteTo); } } /* Build one of 4 types of stream readers */ - DasCredMngr* pCreds; - DasHttpResp res; + DasCredMngr* pCreds = NULL; + DasHttpResp res; memset(&res, 0, sizeof(DasHttpResp)); DasIO* pIn = NULL; - if(sInFile[0] == '\0'){ /* Reading from standard input */ + if(opts.aSource[0] == '\0'){ /* Reading from standard input */ pIn = new_DasIO_cfile(PROG, stdin, "r"); /* If writing from standard input, an we need a name, just use the current time */ if(bAddFileName) _addTimeStampName(ctx.sWriteTo, LOC_PATH_LEN-1); } - else if((strncmp(sInFile, "http://", 7) == 0)||(strncmp(sInFile, "https://", 8) == 0)){ + else if( + (strncmp(opts.aSource, "http://", 7) == 0)|| + (strncmp(opts.aSource, "https://", 8) == 0) + ){ - pCreds = new_CredMngr(credFileName(sCredFile)); + pCreds = new_CredMngr(opts.aCredFile); /* Give it a connection time out of 6 seconds */ - if(!das_http_getBody(sInFile, "das3_cdf", pCreds, &res, 6.0)){ + if(!das_http_getBody(opts.aSource, "das3_cdf", pCreds, &res, 6.0)){ if((res.nCode == 401)||(res.nCode == 403)) return das_error(DASERR_HTTP, "Authorization failure: %s", res.sError); @@ -779,8 +863,10 @@ int main(int argc, char** argv) { return das_error(DASERR_HTTP, "Uncatorize error: %s", res.sError); } - das_url_toStr(&(res.url), sInFile, IN_FILE_SZ - 1); - if(strcmp(sUrl, sInFile) != 0) + char sUrl[ FIELD_SZ(popts_t,aSource) ] = {'\0'}; + das_url_toStr(&(res.url), sUrl, sizeof(sUrl) - 1); + + if(strcmp(sUrl, opts.aSource) != 0) daslog_info_v("Redirected to %s", sUrl); if(DasHttpResp_useSsl(&res)) @@ -791,19 +877,22 @@ int main(int argc, char** argv) { /* If we need a filename, try to get it from the response header */ if(bAddFileName){ if(res.sFilename) - _addSourceName(ctx.sWriteTo, LOC_PATH_LEN-1, res.sFileName); + _addSourceName(ctx.sWriteTo, LOC_PATH_LEN-1, res.sFilename); else _addTimeStampName(ctx.sWriteTo, LOC_PATH_LEN-1); } } else{ // Just a file - const char* sTmp = sInFile; - if(strncmp(sInFile, "file://", 7) == 0) - pTmp = sInFile + 7; - pInFile = fopen(sTmp, "rb"); - if(pFile == NULL) - return das_error(PERR, "Couldn't open file %s", sTmp); + const char* sInFile = opts.aSource; + + if(strncmp(opts.aSource, "file://", 7) == 0) + sInFile = opts.aSource + 7; + + pInFile = fopen(sInFile, "rb"); + + if(pInFile == NULL) + return das_error(PERR, "Couldn't open file %s", sInFile); pIn = new_DasIO_cfile(PROG, pInFile, "rb"); @@ -813,6 +902,12 @@ int main(int argc, char** argv) { DasIO_model(pIn, 3); /* Upgrade any das2 s to das3 s */ + /* If remove was selected try to delete the output location */ + if( opts.bRmFirst && das_isfile(ctx.sWriteTo) ){ + if(remove(ctx.sWriteTo) != 0) + return das_error(PERR, "Could not clear destination file %s first", ctx.sWriteTo); + } + /* Install our handlers */ StreamHandler handler; memset(&handler, 0, sizeof(StreamHandler)); @@ -827,6 +922,9 @@ int main(int argc, char** argv) { nRet = DasIO_readAll(pIn); /* <---- RUNS ALL PROCESSING -----<<< */ + if(ctx.nCdfId != 0) + CDFclose(ctx.nCdfId); + if(pInFile) fclose(pInFile); From 4b29ddcb83cd907a19bf1fe7268a2b571fb0e076 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Wed, 21 Feb 2024 18:09:27 -0600 Subject: [PATCH 24/40] Draft CDF Writer variable output In addition (1) user data points were added to the dataset,dimension,variable hierarchy. (2) Accessing dimensions and variables by index or by generala type was standardized. This may break so old apps, but should be a quick fix. --- das2/array.h | 10 + das2/dataset.c | 2 +- das2/dataset.h | 21 +- das2/descriptor.h | 6 +- das2/dimension.c | 4 +- das2/dimension.h | 46 ++- das2/variable.c | 50 ++- das2/variable.h | 29 +- test/TestAuth.c | 10 +- test/ex12_sounder_xyz.d3t | 4 +- utilities/das3_cdf.c | 659 +++++++++++++++++++++++++++++++++++++- 11 files changed, 808 insertions(+), 33 deletions(-) diff --git a/das2/array.h b/das2/array.h index 09a036d..281a207 100644 --- a/das2/array.h +++ b/das2/array.h @@ -197,6 +197,16 @@ typedef struct dyna_buf{ bool bKeepMem; /* If true memory will not be deleted when the * buffer is deleted */ + + /** User data pointer + * + * The stream -> dataset -> array hierarchy provides a goood organizational + * structure for application data, especially applications that filter + * streams. It is initialized to NULL when a variable is created but + * otherwise the library dosen't deal with it. + */ + void* pUser; + } DynaBuf; /** Dynamic recursive ragged arrays diff --git a/das2/dataset.c b/das2/dataset.c index db4e7a4..a635784 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -47,7 +47,7 @@ size_t DasDs_numDims(const DasDs* pThis, enum dim_type vt){ return uVars; } -const DasDim* DasDs_getDim(const DasDs* pThis, size_t idx, enum dim_type vt) +const DasDim* DasDs_getDimByIdx(const DasDs* pThis, size_t idx, enum dim_type vt) { size_t uTypeIdx = 0; for(size_t u = 0; u < pThis->uDims; ++u){ diff --git a/das2/dataset.h b/das2/dataset.h index 4ff9d99..ace5144 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -189,6 +189,15 @@ typedef struct dataset { DasCodec aPktEncs[DASDS_LOC_ENC_SZ]; int nPktItems[DASDS_LOC_ENC_SZ]; + /** User data pointer + * + * The stream -> dataset hierarchy provides a goood organizational structure + * for application data, especially applications that filter streams. It is + * initialized to NULL when a variable is created but otherwise the library + * dosen't deal with it. + */ + void* pUser; + } DasDs; /** Create a new dataset object. @@ -620,6 +629,15 @@ DAS_API const char* DasDs_group(const DasDs* pThis); */ DAS_API size_t DasDs_numDims(const DasDs* pThis, enum dim_type vt); + +/** Get a dimension by it's basic kind + * + * @param sDim The general dimension type, like time, position, voltage, etc. + * + * @memberof DasDs + */ +DAS_API const DasDim* DasDs_getDim(const DasDs* pThis, const char* sDim); + /** Get a dimension by index * @param pThis a pointer to a dataset structure * @param idx the index of the variable in question @@ -627,7 +645,7 @@ DAS_API size_t DasDs_numDims(const DasDs* pThis, enum dim_type vt); * @returns A Variable pointer or NULL if idx is invalid * @memberof DasDs */ -DAS_API const DasDim* DasDs_getDim( +DAS_API const DasDim* DasDs_getDimByIdx( const DasDs* pThis, size_t idx, enum dim_type vt ); @@ -640,6 +658,7 @@ DAS_API const DasDim* DasDs_getDim( */ DAS_API const DasDim* DasDs_getDimById(const DasDs* pThis, const char* sId); + /** Print a string representation of this dataset. * * Note: Datasets can be complicated items provide a good sized buffer diff --git a/das2/descriptor.h b/das2/descriptor.h index bd081fb..d497152 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -120,7 +120,7 @@ typedef struct das_descriptor { * when using these functions. For example: * @code * PktDesc* pPktDesc; - * hasProperty((Descriptor*)pPktDesc, "SomePropName"); + * DasDesc_has((Descriptor*)pPktDesc, "SomePropName"); * @endcode * @memberof DasDesc */ @@ -500,7 +500,7 @@ DAS_API DasErrCode DasDesc_setDatum( * longer needed. If the named property doesn't exist * the program exits. * - * @see hasProperty() + * @see DasDesc_has() * * @memberof DasDesc */ @@ -522,7 +522,7 @@ DAS_API DasErrCode DasDesc_setDoubleArray( * @returns The value of the named property or exits the program if the * named proprety doesn't exist in this descriptor. * - * @see hasProperty() + * @see DasDesc_has() * @memberof DasDesc */ DAS_API int DasDesc_getInt(const DasDesc* pThis, const char* sName); diff --git a/das2/dimension.c b/das2/dimension.c index 4d3b739..c3a5c65 100644 --- a/das2/dimension.c +++ b/das2/dimension.c @@ -112,8 +112,6 @@ ptrdiff_t DasDim_lengthIn(const DasDim* pThis, int nIdx, ptrdiff_t* pLoc) return nLengthIn; } -const char* DasDim_id(const DasDim* pThis){ return pThis->sId; } - int _DasDim_varOrder(const char* sRole){ if(strcmp(sRole, DASVAR_CENTER) == 0) return 0; if(strcmp(sRole, DASVAR_MEAN) == 0) return 1; @@ -254,7 +252,7 @@ const DasVar* DasDim_getPointVar(const DasDim* pThis) /* We can't make new vars here since we are a constant pointer, but * a function to do this could be added...*/ - return pVar; + return pVar; /* can be null */ } diff --git a/das2/dimension.h b/das2/dimension.h index dd4433d..a4356ce 100644 --- a/das2/dimension.h +++ b/das2/dimension.h @@ -167,6 +167,15 @@ typedef struct das_dim { * DasVar_orthoginalTo() when printing coordinate information */ /* struct das_dim* aCoords[DASDIM_MAXDEP]; size_t uCoords;*/ + + /** User data pointer + * + * The stream -> dataset -> dimension hierarchy provides a goood + * organizational structure for application data, especially applications + * that filter streams. It is initialized to NULL when a variable is + * created but otherwise the library dosen't deal with it. + */ + void* pUser; } DasDim; @@ -200,7 +209,20 @@ DAS_API DasDim* new_DasDim(const char* sDim, const char* sName, enum dim_type dt * * @memberof DasDim */ -DAS_API const char* DasDim_id(const DasDim* pThis); +#define DasDim_id(P) ((const char*)(P->sId)) + + +/** Get the dimension's category + * + * @param pThis a pointer to a das dimension structure. + * + * @return The category of the dimension, which should be a common name + * physical thing such as time, energy, frequency, voltage, + * electric_spectral_density, netural_flux_density, etc. + * + * @memberof DasDim + */ +#define DasDim_dim(P) ((const char*)(P->sDim)) /** Print an information string describing a dimension. @@ -246,12 +268,32 @@ DAS_API bool DasDim_addVar(DasDim* pThis, const char* sRole, DasVar* pVar); * DASVAR_MEAN, DASVAR_MEDIAN, DASVAR_MODE, DASVAR_MAX_ERR, DASVAR_MIN_ERR, * DASVAR_UNCERT, DASVAR_STD_DEV, DASVAR_SPREAD, and DASVAR_WEIGHT. * - * @return A pointer to a DasVar or NULL if no variable exists within this + * @returns A pointer to a DasVar or NULL if no variable exists within this * dimension for the given role. * @memberof DasDim */ DAS_API const DasVar* DasDim_getVar(const DasDim* pThis, const char* sRole); + +/** Get the number of vars in a dimension + * + * @param P A pointer to a dimension + * + * @returns The number of defined variables + * @memberof DasDim + */ +#define DasDim_numVars(P) ((P)->uVars); + +/** Get a variable by index + * + * @param pThis A pointer to a dimension + * + * @returns a constant pointer to the variable at the given index or NULL + * if no variable is defined at that index + * @memberof DasDim + */ +#define DasDim_getVarByIdx(P, I) ( (I)<((P)->uVars) ? ((const DasVar*)((P)->aVars[(I)])) : NULL ) + /** Get a variable poviding single point values in a dimension * * The most common variable role, DASVAR_CENTER, is typically present in a diff --git a/das2/variable.c b/das2/variable.c index 58cb0e3..336b455 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -123,6 +123,7 @@ size_t DasVar_valSize(const DasVar* pThis){return pThis->vsize;} das_units DasVar_units(const DasVar* pThis){ return pThis->units;} + bool DasVar_get(const DasVar* pThis, ptrdiff_t* pLoc, das_datum* pDatum) { return pThis->get(pThis, pLoc, pDatum); @@ -154,6 +155,10 @@ int _DasVar_noIntrShape(const DasVar* pBase, ptrdiff_t* pShape) return 0; } +bool DasVar_degenerate(const DasVar* pBase, int iIndex){ + return pBase->degenerate(pBase, iIndex); +} + /* component_t DasVar_intrType(const DasVar* pThis) { @@ -612,6 +617,11 @@ DasAry* DasConstant_subset( return pAry; } +bool DasConstant_degenerate(const DasVar* pBase, int) +{ + return true; +} + DasVar* new_DasConstant(const char* sId, const das_datum* pDm) { @@ -649,6 +659,7 @@ DasVar* new_DasConstant(const char* sId, const das_datum* pDm) pThis->base.subset = DasConstant_subset; pThis->base.incRef = inc_DasVar; pThis->base.decRef = dec_DasConstant; + pThis->base.degenerate = DasConstant_degenerate; /* Vsize setting */ pThis->base.vsize = das_vt_size(pDm->vt); @@ -673,6 +684,17 @@ typedef struct das_var_array{ } DasVarArray; +bool DasVarAry_degenerate(const DasVar* pBase, int iIndex) +{ + DasVarArray* pThis = (DasVarArray*)pBase; + + if((iIndex >= 0)&&(iIndex < DASIDX_MAX)){ + if(pThis->idxmap[iIndex] != DASIDX_UNUSED) + return false; + } + return true; +} + bool DasVarAry_isNumeric(const DasVar* pBase) { /* Put most common ones first for faster checks */ @@ -1192,7 +1214,7 @@ DasAry* _DasVarAry_directSubset( } if((aAryMax[iDim] - aAryMin[iDim]) == 1){ - /* Going full range locks, can't go back to singel items after */ + /* Going full range locks, can't go back to single items after */ if(iBegFullRng != -1) return NULL; @@ -1435,6 +1457,7 @@ DasErrCode init_DasVarArray( pThis->base.subset = DasVarAry_subset; pThis->base.nExtRank = nExtRank; pThis->base.nIntRank = nIntRank; + pThis->base.degenerate = DasVarAry_degenerate; /* Extra stuff for array variables */ if(pAry == NULL) @@ -2076,6 +2099,16 @@ DasAry* DasVarSeq_subset( return pAry; } +bool DasVarSeq_degenerate(const DasVar* pBase, int iIndex) +{ + DasVarSeq* pThis = (DasVarSeq*)pBase; + if(pThis->iDep == iIndex) + return false; + else + return true; +} + + DasVar* new_DasVarSeq( const char* sId, das_val_type vt, size_t vSz, const void* pMin, const void* pInterval, int nExtRank, int8_t* pMap, int nIntRank, @@ -2114,7 +2147,8 @@ DasVar* new_DasVarSeq( pThis->base.intrShape = _DasVar_noIntrShape; pThis->base.lengthIn = DasVarSeq_lengthIn; pThis->base.isFill = DasVarSeq_isFill; - pThis->base.subset = DasVarSeq_subset; + pThis->base.subset = DasVarSeq_subset; + pThis->base.degenerate = DasVarSeq_degenerate; pThis->iDep = -1; @@ -2237,6 +2271,17 @@ typedef struct das_var_binary{ double rRightScale; /* Scaling factor for right hand values */ } DasVarBinary; + +bool DasVarBinary_degenerate(const DasVar* pBase, int iIndex) +{ + const DasVarBinary* pThis = (const DasVarBinary*) pBase; + + return ( + pThis->pLeft->degenerate(pThis->pLeft, iIndex) && + pThis->pRight->degenerate(pThis->pRight, iIndex) + ); +} + const char* DasVarBinary_id(const DasVar* pBase) { const DasVarBinary* pThis = (const DasVarBinary*) pBase; @@ -2744,6 +2789,7 @@ DasVar* new_DasVarBinary_tok( pThis->base.incRef = inc_DasVar; pThis->base.decRef = dec_DasVarBinary; + pThis->base.degenerate = DasVarBinary_degenerate; if(sId != NULL) strncpy(pThis->sId, sId, 63); diff --git a/das2/variable.h b/das2/variable.h index f2c9be3..69a97a1 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -331,8 +331,18 @@ typedef struct das_variable{ */ int (*decRef)(struct das_variable* pThis); + /** Returns true if a variable is a function of a given index */ + bool (*degenerate)(const struct das_variable* pThis, int iIndex); - /** Encodes the header */ + + /** User data pointer + * + * The stream -> dataset -> dimension -> variable hierarchy provides a goood + * organizational structure for application data, especially applications + * that filter streams. It is initialized to NULL when a variable is + * created but otherwise the library dosen't deal with it. + */ + void* pUser; } DasVar; @@ -648,6 +658,19 @@ DAS_API DasVar* new_DasVarEval(const DasVar* pVar); */ DAS_API bool DasVar_orthoginal(const DasVar* pThis, const DasVar* pOther); +/** Does a given extern index even matter the this variable? + * + * @param pThis A pointer to a variable + * + * @param int nIdx - The index in question, form 0 to DASIDX_MAX - 1 + * + * @return true if varying this index could cause the variable's output + * to change, false if it would have no effect. + * + * @membefof DasVar + */ +DAS_API bool DasVar_degenerate(const DasVar* pThis, int iIndex); + /** Return the current shape of this variable. * @@ -850,8 +873,8 @@ DAS_API bool DasVar_isComposite(const DasVar* pVar); * @returns A pointer to a DasAry containing the selected range, or NULL if * there is a problem. The output DasAry may or may not own it's * own memory. The output DasAry *will* always be rectangular, - * reguardless of any underlying raggedness. Calling DasAry_shape() - * on the return value will give non-zeor, non-negative values. + * regardless of any underlying raggedness. Calling DasAry_shape() + * on the return value will give non-zero, non-negative values. * * @memberof DasVar */ diff --git a/test/TestAuth.c b/test/TestAuth.c index 08632be..004288f 100644 --- a/test/TestAuth.c +++ b/test/TestAuth.c @@ -26,10 +26,10 @@ void sim_plot_1d(const DasDs* pDs) { /* The one and only coordinate dimension */ - const DasDim* pDimX = DasDs_getDim(pDs, 0, DASDIM_COORD); + const DasDim* pDimX = DasDs_getDimByIdx(pDs, 0, DASDIM_COORD); /* Just take the first data dimension, whatever it is */ - const DasDim* pDimY = DasDs_getDim(pDs, 0, DASDIM_DATA); + const DasDim* pDimY = DasDs_getDimByIdx(pDs, 0, DASDIM_DATA); const DasVar* pVarX = DasDim_getPointVar(pDimX); const DasVar* pVarY = DasDim_getPointVar(pDimY); @@ -66,8 +66,8 @@ void sim_plot_1d(const DasDs* pDs) void sim_plot_2d(const DasDs* pDs) { - const DasDim* pDimX = DasDs_getDim(pDs, 0, DASDIM_COORD); - const DasDim* pDimY = DasDs_getDim(pDs, 1, DASDIM_COORD); + const DasDim* pDimX = DasDs_getDimByIdx(pDs, 0, DASDIM_COORD); + const DasDim* pDimY = DasDs_getDimByIdx(pDs, 1, DASDIM_COORD); const DasDim* pTmp = NULL; /* Put time or longitude on bottom if they are present */ @@ -77,7 +77,7 @@ void sim_plot_2d(const DasDs* pDs) } /* Just pick the first one */ - const DasDim* pDimZ = DasDs_getDim(pDs, 0, DASDIM_DATA); + const DasDim* pDimZ = DasDs_getDimByIdx(pDs, 0, DASDIM_DATA); /* Get center points for each dimension, skip width's std_dev or what * ever else might be present */ diff --git a/test/ex12_sounder_xyz.d3t b/test/ex12_sounder_xyz.d3t index 756ca10..ee38d5e 100644 --- a/test/ex12_sounder_xyz.d3t +++ b/test/ex12_sounder_xyz.d3t @@ -1,6 +1,6 @@ |Sx||50| -|Hx|1|3460| +|Hx|1|3455| @@ -14,7 +14,7 @@ -

cΔt/2, Apparent altitude (km)

+

cΔt/2, Apparent altitude

diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index fcf5022..325393f 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -27,8 +27,9 @@ #include #include #include -#include #include +#include + #include @@ -97,6 +98,9 @@ void prnHelp() " description -> CATDESC\n" " summary -> VAR_NOTES\n" "\n" +" Note that if a property is named 'CDF_NAME' it is not written to the CDF\n" +" but instead changes the name of a CDF variable.\n" +"\n" " Other CDF attributes are also set based on the data structure type. Some\n" " examples are:\n" "\n" @@ -585,6 +589,25 @@ DasErrCode writeVarProp(CDFid iCdf, long iVarNum, const DasProp* pProp) return DAS_OKAY; } +DasErrCode writeVarStrAttr( + CDFid iCdf, long iVarNum, const char* sName, const char* sValue +){ + CDFstatus iStatus; + if(! _OK( + CDFputAttrzEntry( + iCdf, + CDFattrId(iCdf, sName), + iVarNum, + CDF_CHAR, + (long) strlen(sValue), + (void*)sValue + ) + )) + return PERR; + else + return DAS_OKAY; +} + /* ************************************************************************* */ DasErrCode onStream(StreamDesc* pSd, void* pUser){ @@ -632,6 +655,10 @@ DasErrCode onStream(StreamDesc* pSd, void* pUser){ const DasProp* pProp = DasDesc_getPropByIdx((DasDesc*)pSd, u); if(pProp == NULL) continue; + /* Some properties are meta-data controllers */ + if(strcmp(DasProp_name(pProp), "CDF_NAME") == 0) + continue; + if(writeGlobalProp(pCtx->nCdfId, pProp) != DAS_OKAY) return PERR; } @@ -646,27 +673,637 @@ DasErrCode onStream(StreamDesc* pSd, void* pUser){ } /* ************************************************************************* */ -DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) +/* Dependency Solver: + + ISTP CDFs like to associate one physical dimension with one array index, and + even one plot axis. In fact it's one of thier definining limitations. Das3 + datasets do not fall into this trap, and instead de-couple array indexes from + both physical dimensions and plotting axes. But CDFs are the "law of the land". + So, to try and fit into ISTP constraints we have... The Dependency Solver. + --cwp + + Guiding principles: + + 1. There must be one dependency for each index (aka array dimension) + + 2. Associate a different physDim with each dependency. + + 3. Choose time before other physDims if it's an option. + + 4. Only point variables and offsets may be selected as dependencies. + + Example, Rank 3 MARSIS Sounder Data (ignoring light time for signal bounce): + + Dimension Role Index Map Type + --------- --------- --------- ---- + time reference 0 - - Ary + time offset - 0 Seq + altitude reference 0 - - Ary + altitude offset - - 0 Seq + frequency center - 0 - Seq + + Now sort the data from lowest used index to highest. When two variables + have the same sort order, decide based on the dimension name, but don't + reuse a dimension name unless there is no other choice. + + Dimension Role Index Map Type + --------- --------- --------- ---- + time reference 0 - - Ary --> Depend 0 + altitude reference 0 - - Ary + frequency center - 0 - Seq --> Depend 1 + time offset - 0 - Seq + altitude offset - - 0 Seq --> Depend 2 + + Next, check for variable un-rolling. Variables can only be unrolled if: + + 1. It is a depend > 0 + 2. You find a reference and offset pair in the same dimension. + 3. It's partner is not already marked as a depend + + After collapse we get this: + + Dimension Role Index Map Type + --------- --------- --------- ---- + time reference 0 - - Ary --> Depend 0 + frequency center - 0 - Seq --> Depend 1 + time offset - 0 - Seq + altitude center 0 - 0 BinOp --> Depend 2 (has Depend 0) + + After collapse, generate the corresponding CDF variables. +*/ + +/* Default sort order for dimensions */ + +struct dep_dim_weight { + const char* sDim; + bool bUsed; +}; + +struct dep_dim_weight g_weights[] = { + {"time", false}, {"altitude", false}, + {"frequency", false}, {"energy", false}, + {"", false} +}; + +void _resetWeights(){ + struct dep_dim_weight* pWeight = g_weights; + + while(pWeight->sDim[0] != '\0'){ + pWeight->bUsed = false; + ++pWeight; + } +} + +typedef struct cdf_var_info { + bool bCoord; /* True if this is a coordinate */ + int iDep; /* The dependency this satisfies (if any) */ + char sDim[DAS_MAX_ID_BUFSZ]; /* The generic name of the dim */ + DasDim* pDim; /* the associated physical dimension */ + char sRole[DASDIM_ROLE_SZ]; /* It's role in the physical dimension */ + DasVar* pVar; /* The actual dasvar */ + int iMaxIdx; /* The maximum valid external index for this var */ + ptrdiff_t aVarShape[DASIDX_MAX]; /* This var's overall dataset shape */ + char sCdfName[DAS_MAX_ID_BUFSZ]; /* The name this variable has in the CDF */ +} VarInfo; + +/* The CDFid of the variable is saved as the value of DasVar->pUser + (basically an integer is saved in a pointer) +*/ + +VarInfo* VarInfoAry_getDepN(VarInfo* pList, size_t uLen, int iDep) { - /* struct context* pCtx = (struct context*)pUser; */ - char sBuf[16000] = {'\0'}; - DasDs_toStr(pDs, sBuf, 15999); - fputs(sBuf, stderr); + for(size_t u = 0; u < uLen; ++u){ + if((pList + u)->iDep == iDep) + return (pList + u); + } + return NULL; +} - /* Inspect the dataset and create any associated CDF variables */ - /* For data that has values in the header, write the values to CDF now */ +VarInfo* VarInfoAry_getByRole( + VarInfo* pList, size_t uLen, const DasDim* pDim, const char* sRole +){ + for(size_t u = 0; u < uLen; ++u){ + if(((pList+u)->pDim == pDim) && (strcmp((pList+u)->sRole, sRole) == 0)) + return (pList + u); + } + return NULL; +} + +int _maxIndex(const ptrdiff_t* pShape){ /* Implicit length DASIDX_MAX */ + int iMaxIndex = -1; + for(int i = 0; i < DASIDX_MAX; ++i) + if(pShape[i] >= 0) iMaxIndex = i; + assert(iMaxIndex >= 0); + return iMaxIndex; +} + +int _usedIndexes(const ptrdiff_t* pShape){ /* Implicit length DASIDX_MAX */ + int nUsed = 0; + for(int i = 0; i < DASIDX_MAX; ++i) + if(pShape[i] >= 0) ++nUsed; + return nUsed; +} + +int cdf_var_info_cmp(const void* vpVi1, const void* vpVi2) +{ + const VarInfo* pVi1 = (const VarInfo*)vpVi1; + const VarInfo* pVi2 = (const VarInfo*)vpVi2; + + int nMax1 = _maxIndex(pVi1->aVarShape); + int nMax2 = _maxIndex(pVi2->aVarShape); - for(uint32_t uDim = 0; uDim < pDs->uDims; ++uDim){ - DasDim* pDim = pDs->lDims[u]; + if(nMax1 != nMax2) + return (nMax1 > nMax2) ? 1 : -1; /* lowest max index is first */ + + /* Have to resolve two matching at once */ + const char* sDim1 = pVi1->sDim; + const char* sDim2 = pVi1->sDim; + + struct dep_dim_weight* pWeight = g_weights; + + while(pWeight->sDim[0] != '\0'){ + if(pWeight->bUsed){ + ++pWeight; + continue; + } - for(uint32_t uVar = 0; uVar < pDim->uVars; ++uVar){ + bool bDim1Match = (strcmp(sDim1, pWeight->sDim) == 0); + bool bDim2Match = (strcmp(sDim2, pWeight->sDim) == 0); + if(bDim1Match != bDim2Match){ + if(bDim1Match) return -1; /* Put matches first */ + else return 1; + pWeight->bUsed = true; } + ++pWeight; + } + + /* Same max index and both (or neither) match a prefered axis + go with the one with the fewest number of used indexes */ + int nUsed1 = _usedIndexes(pVi1->aVarShape); + int nUsed2 = _usedIndexes(pVi2->aVarShape); + + if( nUsed1 != nUsed2) + return (nUsed1 > nUsed2) ? 1 : -1; /* lest number of used indexes is first */ + + return 0; /* Heck I don't know at this point */ +} + +VarInfo* solveDepends(DasDs* pDs, size_t* pNumCoords) +{ + ptrdiff_t aDsShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + int nDsRank = DasDs_shape(pDs, aDsShape); + + /* (1) Gather the array shapes ************* */ + + size_t uC, uCoords = DasDs_numDims(pDs, DASDIM_COORD); + size_t uExtra = 0; + for(uC = 0; uC < uCoords; ++uC){ + const DasDim* pDim = DasDs_getDimByIdx(pDs, uC, DASDIM_COORD); + uCoords += DasDim_numVars(pDim); + if(DasDim_getVar(pDim, DASVAR_REF) && + DasDim_getVar(pDim, DASVAR_OFFSET) && + ! DasDim_getVar(pDim, DASVAR_CENTER) + ) + ++uExtra; /* Make space for binary vars we might create */ } + VarInfo* aVarInfo = (VarInfo*) calloc(uCoords + uExtra, sizeof(VarInfo)); + + size_t uInfos = 0; + for(uC = 0; uC < uCoords; ++uC){ + DasDim* pDim = (DasDim*)DasDs_getDimByIdx(pDs, uC, DASDIM_COORD); + + size_t uVars = DasDim_numVars(pDim); + for(size_t uV = 0; uV < uVars; ++uV){ + + VarInfo* pVi = aVarInfo + uInfos; + pVi->bCoord = true; + pVi->iDep = -1; /* not assigned to a dim yet */ + pVi->pDim = pDim; + pVi->pVar = (DasVar*)DasDim_getVarByIdx(pDim, uV); + + DasVar_shape(pVi->pVar, pVi->aVarShape); + pVi->iMaxIdx = _maxIndex(pVi->aVarShape); + + ++uInfos; + } + } + + /* (2) sort them by least to highest max index then by named dimensions */ + _resetWeights(); + qsort(aVarInfo, uInfos, sizeof(VarInfo), cdf_var_info_cmp); + + + /* (3) Assign variables as dependencies */ + int iDep = 0; + int nAssigned = 0; + for(size_t u = 0; u < uInfos; ++u){ + if(aVarInfo[u].iMaxIdx == iDep){ + aVarInfo[u].iDep = iDep; /* This var is now a dependency */ + ++nAssigned; + continue; + } + ++iDep; + } + + if(nAssigned != nDsRank){ + das_error(PERR, "Dataset not convertable to CDF. The dataset " + "is rank %d, but it only has %d unique coordinate variables.", + nDsRank, nAssigned + ); + return NULL; + } + + /* (4) Substitute unrolled reference + offset variables */ + + for(int iDep = 1; iDep < nDsRank; ++iDep){ + VarInfo* pViOff = VarInfoAry_getDepN(aVarInfo, uInfos, iDep); + assert(pViOff != NULL); + + if(strcmp(pViOff->sRole, DASVAR_OFFSET) != 0) + continue; + + /* We want the associated reference... */ + VarInfo* pViRef = VarInfoAry_getByRole(aVarInfo, uInfos, pViOff->pDim, DASVAR_REF); + + /* ... but skip creation if a center var already exists */ + VarInfo* pViCent = VarInfoAry_getByRole(aVarInfo, uInfos, pViOff->pDim, DASVAR_CENTER); + + if((pViRef == NULL)||(pViCent != NULL)) + continue; + + /* Make a new variable combining the reference and the offest and + substitue this in for the dependency. */ + VarInfo* pViNew = (aVarInfo + uInfos); + pViNew->bCoord = true; + pViNew->pVar = new_DasVarBinary(DASVAR_CENTER, pViRef->pVar, "+", pViOff->pVar); + + /* Give the new var to the dimension */ + DasDim_addVar(pViOff->pDim, DASVAR_CENTER, pViNew->pVar); + pViNew->pDim = pViOff->pDim; + + strncpy(pViNew->sDim, pViOff->sDim, DAS_MAX_ID_BUFSZ - 1); + strncpy(pViNew->sRole, DASVAR_CENTER, DAS_MAX_ID_BUFSZ - 1); + + pViNew->iDep = pViOff->iDep; /* Give dep role to new variable */ + pViOff->iDep = -1; + ++uInfos; + } + + *pNumCoords = uInfos; + return aVarInfo; +} + +/* ************************************************************************* */ +/* Converting DasVars to CDF Vars */ + +long DasVar_cdfType(const DasVar* pVar) +{ + + /* WARNING: Update if das_val_type_e changes */ + static const long aCdfType[] = { + 0, /* vtUnknown = 0 */ + CDF_UINT1, /* vtUByte = 1 */ + CDF_INT1, /* vtByte = 2 */ + CDF_UINT2, /* vtUShort = 3 */ + CDF_INT2, /* vtShort = 4 */ + CDF_UINT4, /* vtUInt = 5 */ + CDF_INT4, /* vtInt = 6 */ + 0, /* vtULong = 7 */ /* CDF doesn't have this */ + CDF_INT8, /* vtLong = 8 */ + CDF_REAL4, /* vtFloat = 9 */ + CDF_REAL8, /* vtDouble = 10 */ + CDF_TIME_TT2000, /* vtTime = 11 */ + 0, /* vtIndex = 12 */ + CDF_UCHAR, /* vtText = 13 */ + 0, /* vtGeoVec = 14 */ + CDF_UINT1, /* vtByteSeq = 15 */ + }; + + /* If the units of the variable are any time units, return a type of tt2k */ + return aCdfType[DasVar_valType(pVar)]; +} + +const char* DasVar_cdfName( + const DasDim* pDim, const DasVar* pVar, char* sBuf, size_t uBufLen +){ + assert(uBufLen > 8); + + const char* sRole = NULL; + for(size_t u = 0; u < pDim->uVars; ++u){ + if(pDim->aVars[u] == pVar){ + sRole = pDim->aRoles[u]; + break; + } + } + + if(sRole == NULL){ + das_error(PERR, "Couldn't find var 0x%zx in dimension %s", pVar, DasDim_id(pDim)); + return NULL; + } + + /* If this dim has a CDF_NAME property, then use it for the role */ + const DasProp* pOverride = DasDesc_getLocal((DasDesc*)pDim, "CDF_NAME"); + if(pOverride){ + sRole = DasProp_value(pOverride); + } + + /* If I'm the point var, don't adorn the name with the role */ + const DasVar* pPtVar = DasDim_getPointVar(pDim); + if(pPtVar == pVar){ + if((pDim->dtype == DASDIM_COORD)&&(strcmp(DasDim_dim(pDim), "time") == 0)) + strncpy(sBuf, "Epoch", uBufLen - 1); + else + snprintf(sBuf, uBufLen - 1, "%s", DasDim_id(pDim)); + } + else + snprintf(sBuf, uBufLen - 1, "%s_%s", DasDim_id(pDim), sRole); + + return sBuf; +} + +long DasVar_cdfNonRecDims(int nDsRank, const DasVar* pVar, long* pNonRecDims) +{ + ptrdiff_t aShape[DASIDX_MAX] = {0}; + + DasVar_shape(pVar, aShape); + long nUsed = 0; + for(int i = 1; i < nDsRank; ++i){ + if(aShape[i] == DASIDX_RAGGED) + return -1 * das_error(PERR, + "Ragged indexes in non-record indexes are not supported by CDFs" + ); + + if(aShape[i] > 0){ + pNonRecDims[nUsed] = aShape[i]; + ++nUsed; + } + } + return nUsed; +} + +#define DasVar_cdfId(P) *(long*)( &((P)->pUser) ) +#define DasVar_cdfIdPtr(P) (long*)( &((P)->pUser) ) + +DasErrCode makeCdfVar( + CDFid nCdfId, DasDim* pDim, DasVar* pVar, int nDsRank, ptrdiff_t* pDsShape, + char* sNameBuf +){ + ptrdiff_t aMin[DASIDX_MAX] = {0}; + ptrdiff_t aMax[DASIDX_MAX] = {0}; + + ptrdiff_t aIntr[DASIDX_MAX] = {0}; + int nIntrRank = DasVar_intrShape(pVar, aIntr); + + long aNonRecDims[DASIDX_MAX] = {0}; + long nNonRecDims = DasVar_cdfNonRecDims(nDsRank, pVar, aNonRecDims); + if(nNonRecDims < 0) + return PERR; + + /* add the variables name */ + DasVar_cdfName(pDim, pVar, sNameBuf, DAS_MAX_ID_BUFSZ - 1), + + /* If this fails, you'll have to architect some other storage for the variable + ID because the size of long integers on this system are larger then the + size of pointers */ + assert(sizeof(long) <= sizeof(void*)); + + CDFstatus iStatus = CDFcreatezVar( + nCdfId, /* CDF File ID */ + sNameBuf, /* Varible's name */ + DasVar_cdfType(pVar), /* CDF Data type of variable */ + (nIntrRank > 0) ? (long) aIntr[0] : 1L, /* Character length, if needed */ + nNonRecDims, /* collapsed rank after index 0 */ + aNonRecDims, /* collapsed size in each index, after 0 */ + DasVar_degenerate(pVar, 0) ? NOVARY : VARY, /* True if varies in index 0 */ + (nNonRecDims > 0) ? VARY : NOVARY, /* True if varies in index other then 0 */ + DasVar_cdfIdPtr(pVar) /* The ID of the variable created */ + ); + if(!_cdfOkayish(iStatus)) + return PERR; + + /* If the is not a record varying varible, write it out now */ + if(nNonRecDims == 0){ + + aMax[0] = 1; /* We don't care about the 0-th index, we're not record varying */ + + /* We have a bit of a problem here. DasVar works hard to make sure + you never have to care about the internal data storage and degenerate + indicies, but CDF *wants* to know this information. What we have to + do is ask for a subset that ONLY contains non-degenerate information. + + Using the varible's index map, "punch-out" overall dataset indexes that + don't apply. */ + + for(int r = 1; r < nDsRank; ++r){ + if(pDsShape[r] > 0){ + if(DasVar_degenerate(pVar, r)) + aMax[r] = 1; + else{ + if(pDsShape[r] == DASIDX_RAGGED) + return das_error(PERR, "CDF does not allow ragged array lengths " + "after the zeroth index. We could get around using by loading " + "all data in RAM and using fill values when writing the CDF " + "but have chosen not to do so at this time." + ); + else + aMax[r] = pDsShape[r]; + } + } + else + aMax[r] = 1; + } + + /* Force all sequences and binary variables to take on concrete values */ + DasAry* pAry = DasVar_subset(pVar, nDsRank, aMin, aMax); + + ptrdiff_t aAryShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + int nAryRank = DasAry_shape(pAry, aAryShape); + + size_t uLen = 0; + das_val_type vt = DasAry_valType(pAry); + const ubyte* pVals = DasAry_getIn(pAry, vt, DIM0, &uLen); + + /* Put index information into data types needed for function call */ + long indicies[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; + long counts[DASIDX_MAX] = {0}; + long intervals[DASIDX_MAX] = {1,1,1,1, 1,1,1,1}; + + for(int r = 0; r < nAryRank; ++r) + counts[r] = aAryShape[r]; + + iStatus = CDFhyperPutzVarData( + nCdfId, /* CDF File ID */ + DasVar_cdfId(pVar), /* Shamelessly use point as an long int storage */ + 0, /* record start */ + 1, /* number for records to write */ + 1, /* record interval */ + indicies, /* Dimensional index start posititions */ + counts, /* Number of intervals along each array dimension */ + intervals, /* Writing intervals along each array dimension */ + pVals + ); + + dec_DasAry(pAry); + + if(!_cdfOkayish(iStatus)) + return PERR; + } + return DAS_OKAY; +} + +DasErrCode writeVarProps( + CDFid nCdfId, DasDim* pDim, DasVar* pVar, VarInfo* pCoords, size_t uCoords +){ + char sAttrName[64] = {'\0'}; + + /* Find and set my dependencies. The rules + * + * Start at the variable's highest used index. + * If the varible provides a dependency, skip this one. + */ + + /* Find out if I happen to also be a coordinate */ + int iAmDep = -1; + if(pDim->dtype == DASDIM_COORD){ + for(size_t u = 0; u < uCoords; ++u){ + if((pCoords + u)->pVar == pVar){ + iAmDep = (pCoords + u)->iDep; + break; + } + } + } + + ptrdiff_t aVarShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + DasVar_shape(pVar, aVarShape); + int iIdxMax = _maxIndex(aVarShape); + + for(int iIdx = iIdxMax > -1; iIdx >= 0; --iIdx){ + if(iIdx == iAmDep) + continue; + + /* Find the dependency for my current index */ + for(size_t u = 0; u < uCoords; ++u){ + if((pCoords + u)->iDep == iIdx){ + snprintf(sAttrName, 15, "DEPEND_%d", iIdx); + writeVarStrAttr( + nCdfId, + DasVar_cdfId(pVar), + sAttrName, + (pCoords+u)->sCdfName /* CDF name of the coordinate */ + ); + } + } + } + + writeVarStrAttr(nCdfId, DasVar_cdfId(pVar), "UNITS", + pVar->units == NULL ? "" : pVar->units + ); + + if(pDim->dtype == DASDIM_COORD) + writeVarStrAttr(nCdfId, DasVar_cdfId(pVar), "VAR_TYPE", "support_data"); + else + writeVarStrAttr(nCdfId, DasVar_cdfId(pVar), "VAR_TYPE", "data"); + return DAS_OKAY; } +/* ************************************************************************* */ +/* This is the key function of the program: + + Property Handling: + + Dataset Props -> Global Area + + Dim Props -> Go to Variable area and are replicated for each variable + In addition a suffix is added to indicate the type + + If a skeleton is supplied that has the relavent property + already defined, it is not changed. + + The following auto generated by the structure of the dataset items: + + DasVar.units -> CDFvar UNITS + Index Map inspection -> Triggers DEPEND_0, _1, etc. + + For the center items, if widths etc. are divided by two and stored + as: + DELTA_PLUS_VAR & DELTA_MINUS_VAR + +*/ + +DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) +{ + struct context* pCtx = (struct context*)pUser; + + + ptrdiff_t aDsShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + int nDsRank = DasDs_shape(pDs, aDsShape); + + if(daslog_level() <= DASLOG_INFO){ + char sBuf[16000] = {'\0'}; + DasDs_toStr(pDs, sBuf, 15999); + daslog_info(sBuf); + } + + /* Send Data set properties to the global attribute space */ + size_t uProps = DasDesc_length((DasDesc*)pDs); + for(size_t u = 0; u < uProps; ++u){ + const DasProp* pProp = DasDesc_getPropByIdx((DasDesc*)pDs, u); + if(pProp == NULL) continue; + + if(strcmp(DasProp_name(pProp), "CDF_NAME") == 0) + continue; + + if(writeGlobalProp(pCtx->nCdfId, pProp) != DAS_OKAY) + return PERR; + } + + /* Gather all coordinates and determine dependencies */ + size_t u, uCoords = 0; + VarInfo* pCdfCoords = solveDepends(pDs, &uCoords); /* <-- Heavy lifter */ + if(pCdfCoords == NULL) + return PERR; + + /* Create variables for each of the dependencies */ + int nRet = DAS_OKAY; + for(u = 0; u < uCoords; ++u){ + VarInfo* pVi = (pCdfCoords + u); + + if((nRet = makeCdfVar( + pCtx->nCdfId, pVi->pDim, pVi->pVar, nDsRank, aDsShape, pVi->sCdfName + )) != DAS_OKAY) + return nRet; + + nRet = writeVarProps(pCtx->nCdfId, pVi->pDim, pVi->pVar, pCdfCoords, uCoords); + if(nRet != DAS_OKAY) + return nRet; + } + + /* Now for the data variables... */ + size_t uDims = DasDs_numDims(pDs, DASDIM_DATA); + char sNameBuf[DAS_MAX_ID_BUFSZ] = {'\0'}; + + for(size_t d = 0; d < uDims; ++d) + { + DasDim* pDim = (DasDim*) DasDs_getDimByIdx(pDs, d, DASDIM_DATA); + size_t uVars = DasDim_numVars(pDim) + for(size_t v = 0; v < uVars; ++v){ + DasVar* pVar = (DasVar*) DasDim_getVarByIdx(pDim, v); + + nRet = makeCdfVar(pCtx->nCdfId, pDim, pVar, nDsRank, aDsShape, sNameBuf); + if(nRet != DAS_OKAY) + return nRet; + + nRet = writeVarProps(pCtx->nCdfId, pDim, pVar, pCdfCoords, uCoords); + if(nRet != DAS_OKAY) + return nRet; + } + } + + return DAS_OKAY; +} /* ************************************************************************* */ DasErrCode onData(StreamDesc* pSd, DasDs* pDs, void* pUser) { From 2d9a65eb3b10ca006a92855efe6175b7fa91eb87 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Wed, 21 Feb 2024 21:42:21 -0600 Subject: [PATCH 25/40] CDF creator can make vars, but dosen't fill them yet --- das2/dataset.c | 12 ++------ das2/dataset.h | 66 +++++++++++++++++++++++++----------------- utilities/das3_cdf.c | 69 ++++++++++++++++++++++++++++++-------------- 3 files changed, 91 insertions(+), 56 deletions(-) diff --git a/das2/dataset.c b/das2/dataset.c index a635784..5cf7e84 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -33,18 +33,12 @@ /* ************************************************************************* */ /* Dataset Inspection Functions */ -const char* DasDs_id(const DasDs* pThis){return pThis->sId;} - -const char* DasDs_group(const DasDs* pThis){return pThis->sGroupId;} - -int Dataset_rank(const DasDs* pThis){return pThis->nRank;} - size_t DasDs_numDims(const DasDs* pThis, enum dim_type vt){ - size_t uVars = 0; + size_t uDims = 0; for(size_t u = 0; u < pThis->uDims; ++u){ - if(pThis->lDims[u]->dtype == vt) ++uVars; + if(pThis->lDims[u]->dtype == vt) ++uDims; } - return uVars; + return uDims; } const DasDim* DasDs_getDimByIdx(const DasDs* pThis, size_t idx, enum dim_type vt) diff --git a/das2/dataset.h b/das2/dataset.h index ace5144..3937cea 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -165,7 +165,7 @@ typedef struct dataset { * implicitly bundles in qdataset terms. */ DasDim** lDims; /* The data variable object arrays */ - size_t uSzDims; /* Current size of variable array */ + size_t uSzDims; /* Current size of dimension array */ size_t uArrays; /* The number of low-level arrays */ DasAry** lArrays; /* An array of array objects */ @@ -420,17 +420,50 @@ DAS_API void dasds_iter_init(dasds_iterator* pIter, const DasDs* pDs); DAS_API bool dasds_iter_next(dasds_iterator* pIter); +/** Get the data set group id + * + * Datasets with the same group ID are representable in the same coordinate + * and data types (for example time, frequency, and power), but have different + * locations in the coordinate space. Another way of saying this is all + * datasets with have the same physical units for thier coordinates and data + * but not the same coordinate values. + * + * Since a dataset is defined in this library to include all items in as single + * index space more than one dataset may encountered in a stream. All datasets + * with the same groupID should be plottable on the same set of axis. + * + * @param pThis A pointer to a dataset sturcture + * @returns a string pointer than is never null + * @memberof DasDs + */ +#define DasDs_group(P) ((const char*)(P)->sGroupId) /** Get the data set string id * - * @param pThis - * @return a string pointer than is never null - * @memberof CorDs + * @param pThis A pointer to a dataset sturcture + * @returns a string pointer than is never null + * @memberof DasDs */ -DAS_API const char* DasDs_id(const DasDs* pThis); +#define DasDs_id(P) ((const char*)(P)->sId) + -/** Get the rank of a dataset */ -#define DasDs_rank(P) P->nRank +/** Get the rank of a dataset + * + * A dataset's rank is one of it's key immutable properties. It defines the + * maximum number of valid external indicies for all included variables. + * Any physical dimension included in the dataset will have the same rank + * as the dataset. Any variable includid in those physical dimensions will + * present the same rank as well, even if the underlying storage areas are + * composed of smaller rank arrays. + * + * @param pThis A pointer to a dataset sturcture + * + * @returns The rank, which defines the number of valid external index + * positions for sub items. + * + * @memberof DasDs + */ +#define DasDs_rank(P) ((P)->nRank) /** Add an array to the dataset, stealing it's reference. * @@ -601,25 +634,6 @@ DAS_API DasDim* DasDs_makeDim( */ DAS_API DasErrCode DasDs_addDim(DasDs* pThis, DasDim* pDim); - -/** Get the data set group id - * - * Datasets with the same group ID are representable in the same coordinate - * and data types (for example time, frequency, and power), but have different - * locations in the coordinate space. Another way of saying this is all - * datasets with have the same physical units for thier coordinates and data - * but not the same coordinate values. - * - * Since a dataset is defined in this library to include all items in as single - * index space more than one dataset may encountered in a stream. All datasets - * with the same groupID should be plottable on the same set of axis. - * - * @param pThis The dataset sturcture - * @returns a string pointer than is never null - * @memberof DasDs - */ -DAS_API const char* DasDs_group(const DasDs* pThis); - /** Get the number of physical dimensions in this dataset * * @param pThis The dataset object diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index 325393f..e60db95 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -457,8 +457,12 @@ long DasProp_cdfEntLen(const DasProp* pProp, long iEntry) void* DasProp_cdfValues(const DasProp* pProp){ /* For strings this is easy, others have to be parsed */ - if(DasProp_type(pProp) & DASPROP_STRING) - return (void*) DasProp_value(pProp); + if(DasProp_type(pProp) & DASPROP_STRING){ + const char* sValue = DasProp_value(pProp); + if((sValue == NULL)||(sValue[0] == '\0')) + sValue = " "; + return (void*) sValue; + } size_t uBufLen = 0; @@ -574,16 +578,26 @@ DasErrCode writeGlobalProp(CDFid iCdf, const DasProp* pProp) DasErrCode writeVarProp(CDFid iCdf, long iVarNum, const DasProp* pProp) { - CDFstatus status = CDFputAttrzEntry( + CDFstatus iStatus; /* Used by _OK macro */ + + /* If the attribute doesn't exist, we'll need to create it first */ + long iAttr; + + const char* sName = DasProp_cdfName(pProp); + + if((iAttr = CDFattrId(iCdf, sName)) < 0){ + if(! _OK(CDFcreateAttr(iCdf,sName,VARIABLE_SCOPE,&iAttr))) + return PERR; + } + + if(!_OK(CDFputAttrzEntry( iCdf, - CDFattrId(iCdf, DasProp_cdfName(pProp)), + iAttr, iVarNum, DasProp_cdfType(pProp), (long) DasProp_items(pProp), DasProp_cdfValues(pProp) - ); - - if(!_cdfOkayish(status)) + ))) return PERR; return DAS_OKAY; @@ -592,17 +606,29 @@ DasErrCode writeVarProp(CDFid iCdf, long iVarNum, const DasProp* pProp) DasErrCode writeVarStrAttr( CDFid iCdf, long iVarNum, const char* sName, const char* sValue ){ - CDFstatus iStatus; - if(! _OK( - CDFputAttrzEntry( - iCdf, - CDFattrId(iCdf, sName), - iVarNum, - CDF_CHAR, - (long) strlen(sValue), - (void*)sValue - ) - )) + CDFstatus iStatus; /* Used by _OK macro */ + + /* CDF doesn't like empty strings, and prefers a single space + instead of a zero length string */ + if((sValue == NULL)||(sValue[0] == '\0')) + sValue = " "; + + /* If the attribute doesn't exist, we'll need to create it first */ + long iAttr; + + if((iAttr = CDFattrId(iCdf, sName)) < 0){ + if(! _OK(CDFcreateAttr(iCdf, sName, VARIABLE_SCOPE, &iAttr ))) + return PERR; + } + + if(! _OK(CDFputAttrzEntry( + iCdf, + iAttr, + iVarNum, + CDF_CHAR, + (long) strlen(sValue), + (void*)sValue + ))) return PERR; else return DAS_OKAY; @@ -856,9 +882,10 @@ VarInfo* solveDepends(DasDs* pDs, size_t* pNumCoords) /* (1) Gather the array shapes ************* */ - size_t uC, uCoords = DasDs_numDims(pDs, DASDIM_COORD); + size_t uC, uCoordDims = DasDs_numDims(pDs, DASDIM_COORD); size_t uExtra = 0; - for(uC = 0; uC < uCoords; ++uC){ + size_t uCoords = 0; + for(uC = 0; uC < uCoordDims; ++uC){ const DasDim* pDim = DasDs_getDimByIdx(pDs, uC, DASDIM_COORD); uCoords += DasDim_numVars(pDim); if(DasDim_getVar(pDim, DASVAR_REF) && @@ -1084,7 +1111,7 @@ DasErrCode makeCdfVar( return PERR; /* If the is not a record varying varible, write it out now */ - if(nNonRecDims == 0){ + if(DasVar_degenerate(pVar, 0)){ aMax[0] = 1; /* We don't care about the 0-th index, we're not record varying */ From c5dc423e5583997ff2014bc32530a78100506868 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Thu, 22 Feb 2024 16:06:51 -0600 Subject: [PATCH 26/40] CDF generator runs for rank 1 case --- das2/array.c | 101 +++++++++++++++++++++- das2/array.h | 99 +++++++++++++++++++--- das2/dataset.c | 29 +++++++ das2/dataset.h | 48 ++++++++++- das2/descriptor.h | 9 ++ das2/stream.c | 16 ++++ das2/stream.h | 29 +++++++ utilities/das3_cdf.c | 195 +++++++++++++++++++++++++++++++++++++++---- 8 files changed, 498 insertions(+), 28 deletions(-) diff --git a/das2/array.c b/das2/array.c index c977f61..e60cc1d 100644 --- a/das2/array.c +++ b/das2/array.c @@ -133,7 +133,7 @@ bool DynaBuf_alloc(DynaBuf* pThis, size_t uMore) if(pThis->pBuf != NULL) free(pThis->pBuf); pThis->pBuf = pNew; - pThis->pHead = pNew; + pThis->pHead = pNew; /* <-- TODO: this feel like a bug, check it */ return true; } @@ -355,7 +355,17 @@ bool _Array_ParentAndItemAt( return true; } -/* Upper bound in return values is *INCLUSIVE* */ +/* Get the absolute offsets for the first contained element item and + the last contained element item given a index element. + + If the provided index element is pIdx0, then this is the whole array. + + NOTE: pIdx0 might not have a base offset of 0! This is true for + sub-set arrays that don't own thier own memory + + WARNING: Upper bound in return values is *INCLUSIVE* + + */ bool _Array_elemOffsets( const DasAry* pThis, int iDim, das_idx_info* pParent, size_t* pFirstOff, size_t* pLastOff @@ -504,6 +514,27 @@ size_t DasAry_size(const DasAry* pThis) return 0; } +/* We have to make this work for sub-arrays, not just the simple case + * Where we own all the memory + */ +const ubyte* DasAry_getAllVals( + const DasAry* pThis, size_t* pElSize, size_t* pElements +){ + + size_t uFirstOff, uLastOff; + if(!_Array_elemOffsets(pThis, 0, pThis->pIdx0, &uFirstOff, &uLastOff)) + return NULL; + + *pElements = uLastOff - uFirstOff + 1; + + DynaBuf* pElBuf = pThis->pBufs[pThis->nRank - 1]; + + *pElSize = pElBuf->uElemSz; + + return (const ubyte*) pElBuf->pHead + (uFirstOff * pElBuf->uElemSz); +} + + size_t DasAry_lengthIn(const DasAry* pThis, int nIdx, ptrdiff_t* pLoc) { if((nIdx < 0)||(nIdx > pThis->nRank)){ @@ -530,6 +561,69 @@ size_t DasAry_lengthIn(const DasAry* pThis, int nIdx, ptrdiff_t* pLoc) else return pParent->uCount; } +/* Amount of memoory owned */ +size_t DasAry_memOwned(const DasAry* pThis) +{ + /* Maybe I don't own the memory */ + if(pThis->pMemOwner != NULL) + return 0; + + DynaBuf* pBuf; + size_t uSize = 0; + for(int d = 0; d < pThis->nRank; ++d){ + pBuf = pThis->pBufs[d]; + uSize += pBuf->uSize * pBuf->uElemSz; /* use total size here... */ + } + return uSize; +} + + +/* Memory needed to store these values and thier indexes */ +size_t DasAry_memUsed(const DasAry* pThis) +{ + /* Maybe I don't own the memory */ + if(pThis->pMemOwner != NULL) + return 0; + + size_t uSize = 0; + DynaBuf* pBuf; + for(int d = 0; d < pThis->nRank; ++d){ + pBuf = pThis->pBufs[d]; + + if(pBuf->uValid == 0) break; /* sub indexes no longer matter */ + + uSize += pBuf->uValid * pBuf->uElemSz; /* ... but only valid number here */ + } + return uSize; +} + +size_t DasAry_memIndexed(const DasAry* pThis) +{ + DynaBuf* pBuf = NULL; + das_idx_info* pIiFirst = pThis->pIdx0; + + size_t uSize = 0; + int d = 0; + while(true){ + if(pIiFirst->uCount == 0) break; /* Get the count in the associated dynabuf */ + + /* Get the element size from the actual dynabuf */ + pBuf = pThis->pBufs[d]; + uSize += (pBuf->uElemSz * pIiFirst->uCount); + + /* Get next index down if there is one */ + if(d == pThis->nRank - 1) + break; + + /* This dyna-buf was acutally an index buffer, so get the index for the + subtended items */ + size_t uFirstOff = pIiFirst->nOffset; + pIiFirst = ((das_idx_info*)pBuf->pHead) + uFirstOff; + ++d; + } + return uSize; +} + /* ************************************************************************* */ /* Getting/Setting values from the array without changing it's size */ @@ -1198,7 +1292,8 @@ void DasAry_deInit(DasAry* pThis) pThis->refcount -= 1; if(pThis->refcount < 1){ if(pThis->pMemOwner != NULL){ - DasAry_deInit(pThis->pMemOwner); + /* Tell the owner I'm no longer referencing it */ + dec_DasAry(pThis->pMemOwner); } else{ for(int d = 0; d < pThis->nRank; ++d){ diff --git a/das2/array.h b/das2/array.h index 281a207..5f114aa 100644 --- a/das2/array.h +++ b/das2/array.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Chris Piker +/* Copyright (C) 2017-2024 Chris Piker * * This file is part of das2C, the Core Das2 C Library. * @@ -198,15 +198,6 @@ typedef struct dyna_buf{ bool bKeepMem; /* If true memory will not be deleted when the * buffer is deleted */ - /** User data pointer - * - * The stream -> dataset -> array hierarchy provides a goood organizational - * structure for application data, especially applications that filter - * streams. It is initialized to NULL when a variable is created but - * otherwise the library dosen't deal with it. - */ - void* pUser; - } DynaBuf; /** Dynamic recursive ragged arrays @@ -313,6 +304,15 @@ typedef struct das_array { das_units units; + /** User data pointer + * + * The stream -> dataset -> array hierarchy provides a goood organizational + * structure for application data, especially applications that filter + * streams. It is initialized to NULL when a variable is created but + * otherwise the library dosen't deal with it. + */ + void* pUser; + } DasAry; @@ -612,6 +612,61 @@ DAS_API size_t DasAry_size(const DasAry* pThis); DAS_API size_t DasAry_valSize(const DasAry* pThis); +/** Get number of bytes currently used for data values and associated indexes + * by this dynamic array. + * + * This is not the number of bytes allocated for dynamic storage. It + * represents how much of the allocated memory is currently in use. Memory is + * used for the actual data values themselves, as well as the index arrays + * that point to index roll-over points. + * + * This is the number of bytes of dynamic storage used. For sub-arrays + * the value is zero, since they don't use any dynamic memory. + * + * @param pThis a DasAry structure + * + * @returns The sum of heap bytes currently holding data values and array + * indexes by this array. + * + * @see DasAry_memOwned() for the number of bytes allocated + * @see DasAry_memIndexed() for the number of bytes indexed, even if it's + * owned by some other array. + */ +DAS_API size_t DasAry_memUsed(const DasAry* pThis); + +/** Get the number of bytes currently owned for use in storing data values and + * indexes. + * + * This is the number of bytes allocated for dynamic storage. For sub-arrays + * the value is zero, since they don't own thier own memory. + * + * @note Arrays allocated more memory then is needed during append opperations + * to avoid frequent (and time expensive) malloc calls. Calling DasAry_clear() + * does not actually free memory, it only marks it available for reuse. + * + * @param pThis a DasAry structure + * + * @returns The sum of heap bytes currently allocated for data values and + * array indexes, even if those bytes are not currently in use. + */ +DAS_API size_t DasAry_memOwned(const DasAry* pThis); + + +/** Get the number of bytes needed to store these values and thier associated + * indexes. + * + * Even if the array doesn't own it's own memory, this function will not + * return unless there are no values accessable by this array. + * + * @param pThis a DasAry structure + * + * @returns The sum of heap bytes currently holding data values and array + * indexes accessible from this DasAry structure, even if the memory is + * owned by some other array. + */ +DAS_API size_t DasAry_memIndexed(const DasAry* pThis); + + /** Return the current max value + 1 for any index * * This is a more general version of DasAry_shape that works for both cubic arrays @@ -932,6 +987,30 @@ DAS_API ubyte* DasAry_getBuf( * @memberof DasAry */ #define DasAry_getTextIn(T, ...) (const char**) DasAry_getIn(T, vtText, __VA_ARGS__) +/** Forget all the fancy indexing, just get a pointer to all the elements + * + * This can be handy for just writing array data to disk, be warned that + * it is not sufficent. In addition the stride coefficents will need to + * be saved if the array is a qubic. If not, all the indexes will also + * need to be saved. + * + * @see DasAry_getAllIdx for a raw return of the associated index buffers. + * + * @param pThis A pointer to an array structure + * + * @param pElSize A pointer to a location to receive the element size + * + * @param pElements A pointer to a location to receive the number of valid + * elements + * + * @returns A pointer to the first valid element, or NULL if no elements + * are valid. Note that DasAry storage is *always* dense. There + * is no reason to believe that the returned pointer can be strided. + */ +DAS_API const ubyte* DasAry_getAllVals( + const DasAry* pThis, size_t* pElSize, size_t* pElements +); + /** Get a lower rank array that is a sub-set of the current array. * * For some given number of indices, produce a sub-array. This is similar to diff --git a/das2/dataset.c b/das2/dataset.c index 5cf7e84..31e7b44 100644 --- a/das2/dataset.c +++ b/das2/dataset.c @@ -241,6 +241,35 @@ DasAry* DasDs_getAryById(DasDs* pThis, const char* sAryId) return NULL; } +size_t DasDs_memOwned(const DasDs* pThis) +{ + size_t uSize = 0; + for(size_t u = 0; u < pThis->uArrays; ++u){ + uSize += DasAry_memOwned(pThis->lArrays[u]); + } + return uSize; +} + + +size_t DasDs_memUsed(const DasDs* pThis) +{ + size_t uSize = 0; + for(size_t u = 0; u < pThis->uArrays; ++u){ + uSize += DasAry_memUsed(pThis->lArrays[u]); + } + return uSize; +} + +size_t DasDs_memIndexed(const DasDs* pThis) +{ + size_t uSize = 0; + for(size_t u = 0; u < pThis->uArrays; ++u){ + uSize += DasAry_memIndexed(pThis->lArrays[u]); + } + return uSize; +} + + DasErrCode DasDs_addDim(DasDs* pThis, DasDim* pDim) { diff --git a/das2/dataset.h b/das2/dataset.h index 3937cea..41b89f5 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -493,7 +493,7 @@ DAS_API DasErrCode DasDs_addAry(DasDs* pThis, DasAry* pAry); * Every array must have a text ID, furthermore these must be unique within * the dataset (enforced by DasDs_addAry). * - * @param pThis a Dataset structure pointer + * @param pThis a dataset structure pointer * * @param sId A text string identifying one of the datasets arrays * @@ -502,6 +502,52 @@ DAS_API DasErrCode DasDs_addAry(DasDs* pThis, DasAry* pAry); */ DAS_API DasAry* DasDs_getAryById(DasDs* pThis, const char* sAryId); +/** Get the currently used memory of all arrays in the dataset + * + * Note that this is not the memory footprint, as DasAry's will allocate + * more space then needed during append operations. This is done to + * reduce the number of allocations. + * + * @note Static structures such as DasDims and DasVars also require some + * space. Static memory usage is not returned, only array dynamic + * memory usage. + * + * @param pThis a dataset structure pointer + * + * @returns The sum of used heap bytes in all the arrays in the dataset. + * These are the bytes that contain usable data values as well as + * the bytes used by index arrays. + * + * @see DasDs_memOwned() to get the allocated heap bytes for all + * arrays in the dataset. + */ +DAS_API size_t DasDs_memUsed(const DasDs* pThis); + +/** The apparent memory usage of all arrays in the dataset. Note that + * this is less the the apparent memory usage of all variables in the + * dataset. + */ +DAS_API size_t DasDs_memIndexed(const DasDs* pThis); + +/** Get the currently allocated memory of all arrays in the dataset + * + * @note The allocated memory may not be indexed yet, especally after + * DasAry_clear() has been called. + * + * @note Static structures such as DasDims and DasVars also require some + * space. Static memory usage is not returned, only array dynamic + * memory usage. + * + * @param pThis a dataset structure pointer + * + * @returns The sum of used heap bytes in all the arrays in the dataset. + * These are the bytes that contain usable data values. + * + * @see DasDs_memUse() to get the bytes currently used for dynamic + * storage + */ +DAS_API size_t DasDs_memOwned(const DasDs* pThis); + /** Define a packet data encoded/decoder for fixed length items and arrays * diff --git a/das2/descriptor.h b/das2/descriptor.h index d497152..271560a 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -111,6 +111,15 @@ typedef struct das_descriptor { bool bLooseParsing; } DasDesc; +/** Get the type of this descriptor + * + * @param A pointer to a descriptor structure + * + * @returns One of the valuse for the enumeration desc_type_t + * + * @memberof DasDesc + */ +#define DasDesc_type(P) ((P)->type) /** @name DasDesc Functions * These work for any type of Descriptor, including ::PlaneDesc , diff --git a/das2/stream.c b/das2/stream.c index 89be22a..3b8c5fe 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -225,6 +225,22 @@ PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int nPacketId) return (pDesc == NULL)||(pDesc->type != PACKET) ? NULL : (PktDesc*)pDesc; } +DasDesc* StreamDesc_nextPktDesc(const StreamDesc* pThis, int* pPrevPktId) +{ + int nBeg = *pPrevPktId + 1; + if(nBeg < 1){ + das_error(DASERR_STREAM, "Illegal descriptor value %d", nBeg); + return NULL; + } + for(int i = nBeg; i < 100; ++i){ + if(pThis->descriptors[i] != NULL){ + *pPrevPktId = i; + return pThis->descriptors[i]; + } + } + return NULL; +} + void StreamDesc_addCmdLineProp(StreamDesc* pThis, int argc, char * argv[] ) { diff --git a/das2/stream.h b/das2/stream.h index ddaeb4d..4c66adc 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -153,6 +153,8 @@ DAS_API StreamDesc* StreamDesc_copy(const StreamDesc* pThis); * * @param pThis The stream descriptor to erase, the pointer should be set * to NULL by the caller. + * + * @memberof StreamDesc */ DAS_API void del_StreamDesc(StreamDesc* pThis); @@ -169,9 +171,36 @@ DAS_API void del_StreamDesc(StreamDesc* pThis); * descriptor. For better performance the caller should reused the * return value as all possible packet ID's are tested to see home many * are defined. + * + * @memberof StreamDesc */ DAS_API size_t StreamDesc_getNPktDesc(const StreamDesc* pThis); +/** Iterate over packet descriptiors + * + * Here's one way to use this function in a loop: + * + * @code + * int nPktId = 0; + * DasDesc* pDesc = NULL; + * while((pDesc = StreamDesc_nextPktDesc(pSd, &nPktId)) != NULL){ + * // Do stuff + * // call DasDesc_type() to further sub-divide actions + * } + * @endcode + * + * @param pThis A stream descriptor structure + * + * @param pPrevPktId A pointer to the ID of a previous packet descriptor. + * Will be incremented to the next valid packet ID + * + * @returns The packet descriptor for the next valid packet ID, or NULL if + * there was no next valid packet descriptor. + * + * @memberof StreamDesc + */ +DAS_API DasDesc* StreamDesc_nextPktDesc(const StreamDesc* pThis, int* pPrevPktId); + /** Attach a packet descriptor to this stream. * * The stream takes ownership of the packet descriptor. It will be deleted when diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index e60db95..a91e143 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -58,6 +58,43 @@ #define CDFvarId(id, str) CDFgetVarNum((id), (char*) (str)) #define CDFattrId(id, str) CDFgetAttrNum((id), (char*) (str)) +/* ************************************************************************* */ +/* Globals */ + +/* The default memory threshold, don't write data to disk until a dateset is + bigger then this (except onClose) */ +size_t g_nMemBufThreshold = 16777216; /* 16 MBytes */ + +#define THRESH "16 MB" + +typedef struct var_cdf_info{ + long iCdfId; + long nRecsWritten; +} var_cdf_info_t; + +var_cdf_info_t* g_pVarCdfInfo; +size_t g_uMaxVars = 0; +size_t g_uNextVar = 0; + +var_cdf_info_t* nextVarInfo(){ + if(g_uNextVar >= g_uMaxVars){ + das_error(PERR, "At present only %zu variables are supported in a CDF" + " but that's easy to change.", g_uMaxVars + ); + return NULL; + } + var_cdf_info_t* pRet = g_pVarCdfInfo + g_uNextVar; + ++g_uNextVar; + return pRet; +} + +#define DasVar_addCdfInfo(P) ( (P)->pUser = nextVarInfo() ) +#define DasVar_cdfId(P) ( ( (var_cdf_info_t*)((P)->pUser) )->iCdfId) +#define DasVar_cdfIdPtr(P) &( ( (var_cdf_info_t*)((P)->pUser) )->iCdfId) +#define DasVar_cdfStart(P) ( ( (var_cdf_info_t*)((P)->pUser) )->nRecsWritten) +#define DasVar_cdfIncStart(P, S) ( ( (var_cdf_info_t*)((P)->pUser) )->nRecsWritten += S) + + /* ************************************************************************* */ void prnHelp() { @@ -149,6 +186,12 @@ void prnHelp() " -c FILE,--credentials=FILE\n" " Set the location where server authentication tokens (if any)\n" " are saved. Defaults to %s%s%s\n" +"\n" +" -U MEGS,--mem-use=MEGS\n" +" To avoid constant writes, " PROG " buffers datasets in memory\n" +" until they are " THRESH " or larger and then they are written\n" +" to disk. Use this parameter to change the threshold. Using\n" +" a large value can increase performance for large datasets.\n" "\n", HOME_VAR_STR, DAS_DSEPS, DEF_AUTH_FILE); @@ -250,6 +293,8 @@ int parseArgs(int argc, char** argv, popts_t* pOpts) memset(pOpts, 0, sizeof(popts_t)); pOpts->bRmFirst = false; + char sMemThresh[32] = {'\0'}; + /* Set a few defaults */ snprintf( pOpts->aCredFile, FIELD_SZ(popts_t, aCredFile) - 1, "%s" DAS_DSEPS DEF_AUTH_FILE, @@ -276,6 +321,10 @@ int parseArgs(int argc, char** argv, popts_t* pOpts) pOpts->bRmFirst = true; continue; } + if(_getArgVal( + sMemThresh, 32, argv, argc, &i, "-U", "--mem-use=" + )) + continue; if(_getArgVal( pOpts->aTpltFile, FIELD_SZ(popts_t,aTpltFile), argv, argc, &i, "-t", "--template=" )) @@ -304,6 +353,17 @@ int parseArgs(int argc, char** argv, popts_t* pOpts) } return das_error(PERR, "Malformed command line argument %s", argv[i]); } + + float fMemUse; + if(sMemThresh[0] != '\0'){ + if((sscanf(sMemThresh, "%f", &fMemUse) != 1)||(fMemUse < 1)){ + return das_error(PERR, "Invalid memory usage argument, '%s' MB", sMemThresh); + } + else{ + g_nMemBufThreshold = (size_t)fMemUse; + } + } + return DAS_OKAY; } @@ -1009,7 +1069,10 @@ long DasVar_cdfType(const DasVar* pVar) }; /* If the units of the variable are any time units, return a type of tt2k */ - return aCdfType[DasVar_valType(pVar)]; + if((DasVar_units(pVar) == UNIT_TT2000)&&(DasVar_valType(pVar) == vtLong)) + return CDF_TIME_TT2000; + else + return aCdfType[DasVar_valType(pVar)]; } const char* DasVar_cdfName( @@ -1070,9 +1133,6 @@ long DasVar_cdfNonRecDims(int nDsRank, const DasVar* pVar, long* pNonRecDims) return nUsed; } -#define DasVar_cdfId(P) *(long*)( &((P)->pUser) ) -#define DasVar_cdfIdPtr(P) (long*)( &((P)->pUser) ) - DasErrCode makeCdfVar( CDFid nCdfId, DasDim* pDim, DasVar* pVar, int nDsRank, ptrdiff_t* pDsShape, char* sNameBuf @@ -1088,6 +1148,8 @@ DasErrCode makeCdfVar( if(nNonRecDims < 0) return PERR; + DasVar_addCdfInfo(pVar); /* attache a small var_cdf_info_t struct to the variable */ + /* add the variables name */ DasVar_cdfName(pDim, pVar, sNameBuf, DAS_MAX_ID_BUFSZ - 1), @@ -1153,9 +1215,9 @@ DasErrCode makeCdfVar( const ubyte* pVals = DasAry_getIn(pAry, vt, DIM0, &uLen); /* Put index information into data types needed for function call */ - long indicies[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; - long counts[DASIDX_MAX] = {0}; - long intervals[DASIDX_MAX] = {1,1,1,1, 1,1,1,1}; + static const long indicies[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; + long counts[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; + static const long intervals[DASIDX_MAX] = {1,1,1,1, 1,1,1,1}; for(int r = 0; r < nAryRank; ++r) counts[r] = aAryShape[r]; @@ -1331,10 +1393,97 @@ DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) return DAS_OKAY; } + +/* ************************************************************************* */ +/* Writing data to the CDF */ + +DasErrCode putAllData(CDFid nCdfId, DasVar* pVar) +{ + CDFstatus iStatus; /* Used by the _OK macro */ + + static const long indicies[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; + static const long intervals[DASIDX_MAX] = {1,1,1,1, 1,1,1,1}; + long counts[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; + ptrdiff_t aShape[DASIDX_MAX] = DASIDX_INIT_BEGIN; + + /* Take a short cut for array variables */ + if(DasVar_type(pVar) == D2V_ARRAY){ + + DasAry* pAry = DasVarAry_getArray(pVar); + assert(pAry != NULL); + + size_t uElSize = 0; + size_t uElements = 0; + size_t uTotal = 0; + const ubyte* pData = DasAry_getAllVals(pAry, &uElSize, &uElements); + if(pData != NULL){ + int nRank = DasAry_shape(pAry, aShape); + + uTotal = aShape[0]; + for(int r = 1; r < nRank; ++r){ + counts[r-1] = aShape[r]; + uTotal *= aShape[r]; + } + + assert(uTotal == uElements); + + if(!_OK(CDFhyperPutzVarData( + nCdfId, + DasVar_cdfId(pVar), + DasVar_cdfStart(pVar), /* record start */ + (long) aShape[0], + 1, + indicies, + counts, + intervals, + pData + ))) + return PERR; + + DasVar_cdfIncStart(pVar, aShape[0]); + } + + /* Now make space for more */ + DasAry_clear(pAry); + } + else{ + return das_error(DASERR_NOTIMP, "Storing binaryOp & Sequence data not yet implemented"); + } + return DAS_OKAY; +} + +/* Assuming all varibles were setup above, now write a bunch of data to the CDF */ +DasErrCode writeAndClearData(DasDs* pDs, struct context* pCtx) +{ + + for(int iType = DASDIM_COORD; iType <= DASDIM_DATA; ++iType){ /* Coord & Data */ + + size_t uDims = DasDs_numDims(pDs, iType); /* All Dimensions */ + for(size_t uD = 0; uD < uDims; ++uD){ + + DasDim* pDim = (DasDim*)DasDs_getDimByIdx(pDs, uD, iType); /* All Variables */ + size_t uVars = DasDim_numVars(pDim); + + for(size_t uV = 0; uV < uVars; ++uV){ + DasVar* pVar = (DasVar*) DasDim_getVarByIdx(pDim, uV); + + if(DasVar_degenerate(pVar, 0)) /* var is not record varying */ + continue; + + if(putAllData(pCtx->nCdfId, pVar) != DAS_OKAY) + return PERR; + } + } + } + + return DAS_OKAY; +} + /* ************************************************************************* */ + DasErrCode onData(StreamDesc* pSd, DasDs* pDs, void* pUser) { - /* struct context* pCtx = (struct context*)pUser; */ + struct context* pCtx = (struct context*)pUser; /* Just let the data accumlate in the arrays unless we've hit our memory limit, then hyperput it */ @@ -1347,9 +1496,15 @@ DasErrCode onData(StreamDesc* pSd, DasDs* pDs, void* pUser) int nRank = DasDs_shape(pDs, aShape); das_shape_prnRng(aShape, nRank, nRank, sBuf, 127); - daslog_debug_v("Dataset %s shape is now: %s\n", DasDs_id(pDs), sBuf); + daslog_debug_v("Dataset %s shape is now: %s", DasDs_id(pDs), sBuf); + daslog_debug_v("Dataset memory alloc: %zu bytes", DasDs_memOwned(pDs)); + daslog_debug_v("Dataset memory used: %zu bytes", DasDs_memUsed(pDs)); + daslog_debug_v("Dataset memory indexed: %zu bytes", DasDs_memIndexed(pDs)); } + if(DasDs_memUsed(pDs) > g_nMemBufThreshold) + return writeAndClearData(pDs, pCtx); + return DAS_OKAY; } @@ -1365,12 +1520,18 @@ DasErrCode onExcept(OobExcept* pExcept, void* pUser) /* ************************************************************************* */ DasErrCode onClose(StreamDesc* pSd, void* pUser) { - /* struct context* pCtx = (struct context*)pUser; */ - - /* Flush all data to the CDF */ - - + struct context* pCtx = (struct context*)pUser; + /* Loop over all the datasets in the stream and make sure they are flushed */ + int nPktId = 0; + DasDesc* pDesc = NULL; + while((pDesc = StreamDesc_nextPktDesc(pSd, &nPktId)) != NULL){ + if(DasDesc_type(pDesc) == DATASET){ + if(writeAndClearData((DasDs*)pDesc, pCtx) != DAS_OKAY) + return PERR; + } + } + return DAS_OKAY; } @@ -1455,6 +1616,12 @@ int main(int argc, char** argv) if(parseArgs(argc, argv, &opts) != DAS_OKAY) return 13; + daslog_setlevel(daslog_strlevel(opts.aLevel)); + + /* Make room for storing the var context info */ + g_uMaxVars = 512; + g_pVarCdfInfo = (var_cdf_info_t*) calloc(g_uMaxVars, sizeof(var_cdf_info_t)); + struct context ctx; memset(&ctx, 0, sizeof(struct context)); ctx.sWriteTo = sWriteTo; From ef9c3e9a24cd3e59ca8320ad5728647e1194777f Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Fri, 23 Feb 2024 17:46:20 -0600 Subject: [PATCH 27/40] Complex CDF conversion, partial pass, needs work --- buildfiles/Linux.mak | 5 +++-- das2/array.c | 37 ++++++++++++++++++++++++++++++++----- das2/array.h | 3 --- das2/variable.h | 6 +++--- test/TestVariable.c | 2 ++ utilities/das3_cdf.c | 32 +++++++++++++++++++++----------- 6 files changed, 61 insertions(+), 24 deletions(-) diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index 520dffb..dc859cd 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -201,9 +201,10 @@ test: $(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) @echo "INFO: All test programs completed without errors" -test3:$(BD) $(BD)/$(TARG).a +test3:$(BD) $(BD)/das3_cdf $(BD)/$(TARG).a @echo "INFO: Running unit test for basic das v3.0 stream parsing, $(BD)/TestV3Read..." - @$(BD)/TestV3Read + $(BD)/TestV3Read + $(BD)/das3_cdf -i test/ex12_sounder_xyz.d3t -o $(BD) -r test_spice:$(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) @echo "INFO: Running unit test for spice error redirect, $(BD)/TestSpice..." diff --git a/das2/array.c b/das2/array.c index e60cc1d..d147b6b 100644 --- a/das2/array.c +++ b/das2/array.c @@ -28,6 +28,21 @@ #include "units.h" #include "log.h" + +/* ************************************************************************* */ +/* Was used to catch a bug, removed for now + +static das_idx_info* _debug_idx_off(das_idx_info* pIdx){ + if(pIdx->nOffset > (3*4*160*80)){ + das_error(DASERR_ARRAY, "Gotcha"); + } + return pIdx; +} + +#define DEBUG_IDX_OFF(P) _debug_idx_off(P) + +*/ + /* ************************************************************************* */ /* Global index initialization memory */ const ptrdiff_t g_aShapeUnused[DASIDX_MAX] = DASIDX_INIT_UNUSED; @@ -797,11 +812,14 @@ das_idx_info* _newIndexInfo(DasAry* pThis, int iDim) /* only works if each DynaBuf has at least one element, append handles this */ DynaBuf* pMyBuf = pThis->pBufs[iDim]; das_idx_info* pLast = (das_idx_info*)pMyBuf->pHead; + /* DEBUG_IDX_OFF(pLast); */ pLast += pMyBuf->uValid - 1; + /* DEBUG_IDX_OFF(pLast); */ das_idx_info next; next.uCount = 0; next.nOffset = pLast->nOffset + pLast->uCount; + /* DEBUG_IDX_OFF(&next); */ /* Get a parent that has room for a new index entry */ das_idx_info* pParent; @@ -810,7 +828,8 @@ das_idx_info* _newIndexInfo(DasAry* pThis, int iDim) } else{ DynaBuf* pParentBuf = pThis->pBufs[iDim - 1]; - pParent = (das_idx_info*)pParentBuf->pHead; + pParent = (das_idx_info*)pParentBuf->pHead ; + /* DEBUG_IDX_OFF(pParent); */ assert(pParentBuf->uValid > 0); pParent += pParentBuf->uValid - 1; @@ -822,7 +841,8 @@ das_idx_info* _newIndexInfo(DasAry* pThis, int iDim) pParent->uCount += 1; DynaBuf_append(pMyBuf, (const ubyte*)&next, 1); - return ((das_idx_info*)(pMyBuf->pHead)) + pMyBuf->uValid - 1; + /* return DEBUG_IDX_OFF( ((das_idx_info*)(pMyBuf->pHead)) + pMyBuf->uValid - 1 ); */ + return ((das_idx_info*)(pMyBuf->pHead)) + pMyBuf->uValid - 1 ; } ubyte* DasAry_append(DasAry* pThis, const ubyte* pVals, size_t uCount) @@ -864,11 +884,17 @@ ubyte* DasAry_append(DasAry* pThis, const ubyte* pVals, size_t uCount) pParIdx->uCount = 1; info.uCount = 0; info.nOffset = 0; + /* DEBUG_IDX_OFF(&info); */ DynaBuf_append(pIdxBuf, (const ubyte*)&info, 1); } /* Cast it and let the compiler do the sizeof math for you */ pChildIdx = (das_idx_info*)(pIdxBuf->pHead); - pChildIdx += pParIdx->nOffset + pIdxBuf->uValid - 1; + + /* Bug fix, last child location is always offset + valid count */ + /* pChildIdx += pParIdx->nOffset + pIdxBuf->uValid - 1; */ + pChildIdx += pParIdx->nOffset + pParIdx->uCount - 1; + + /* DEBUG_IDX_OFF(pChildIdx); */ pParIdx = pChildIdx; } @@ -890,6 +916,7 @@ ubyte* DasAry_append(DasAry* pThis, const ubyte* pVals, size_t uCount) if((iParentDim == -1)||(!pElemBuf->bRollParent && (pElemBuf->uShape == 0))){ pParIdx->uCount += uCount; uMarked = uCount; + /* DEBUG_IDX_OFF(pParIdx); */ } else{ /* Does the parent have room for anything? */ @@ -897,6 +924,7 @@ ubyte* DasAry_append(DasAry* pThis, const ubyte* pVals, size_t uCount) uRoom = pElemBuf->uShape - pParIdx->uCount; uAdded = (uRoom > uCount) ? uCount : uRoom; pParIdx->uCount += uAdded; + /* DEBUG_IDX_OFF(pParIdx); */ uMarked += uAdded; } else{ @@ -911,8 +939,7 @@ ubyte* DasAry_append(DasAry* pThis, const ubyte* pVals, size_t uCount) } /* Return a pointer to the data that were inserted */ - - return pElemBuf->pHead + uPrevCount; + return pElemBuf->pHead + uPrevCount*(pElemBuf->uElemSz); } /* ************************************************************************* */ diff --git a/das2/array.h b/das2/array.h index 5f114aa..c8cfab3 100644 --- a/das2/array.h +++ b/das2/array.h @@ -53,9 +53,6 @@ extern "C" { #define DASIDX_FUNC -2 #define DASIDX_UNUSED -3 -/** Used to indicate degenerate axis in das variables */ -#define DEGEN -3 - /* #define DASIDX_INIT_UNUSED {-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3} #define DASIDX_INIT_BEGIN { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} diff --git a/das2/variable.h b/das2/variable.h index 69a97a1..12199a5 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -43,7 +43,7 @@ enum var_type { #ifdef _D #error macro _D already defined, pick something else #else -#define _D DEGEN +#define _D DASIDX_UNUSED #endif @@ -186,10 +186,10 @@ DAS_API void das_varindex_prndir(bool bFastLast); * // virtual indexes. * * // Map index 0 pAlt to index 0 of a Rank 2 index space - * DasVar* pAlt = new_DasVar_array(pAltAry, MAP_2(0, DEGEN), Units_fromStr("km")); + * DasVar* pAlt = new_DasVar_array(pAltAry, MAP_2(0, DASIDX_UNUSED), Units_fromStr("km")); * * // Map index 0 of pDelay to index 1 of a Rank 2 index space - * DasVar* pDelay = new_DasVar_array(pDelayAry, MAP_2(DEGEN, 0), "μs"); + * DasVar* pDelay = new_DasVar_array(pDelayAry, MAP_2(DASIDX_UNUSED, 0), "μs"); * * // We need a constant. (Memory note, Variables copy the contents of the * // constant internally so it's okay to initialize constants with stack diff --git a/test/TestVariable.c b/test/TestVariable.c index 167f36a..42c653c 100644 --- a/test/TestVariable.c +++ b/test/TestVariable.c @@ -6007,6 +6007,8 @@ int main(int argc, char** argv) DasAry_append(aTime, (const ubyte*)(&dt), 1); } +#define DEGEN DASIDX_UNUSED + DasVar* vTime = new_DasVarArray(aTime, SCALAR_3(0, DEGEN, DEGEN)); fprintf(stderr, " %s\n\n", DasVar_toStr(vTime, sBuf, 511)); diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index a91e143..0f454d8 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -878,7 +878,7 @@ VarInfo* VarInfoAry_getByRole( int _maxIndex(const ptrdiff_t* pShape){ /* Implicit length DASIDX_MAX */ int iMaxIndex = -1; for(int i = 0; i < DASIDX_MAX; ++i) - if(pShape[i] >= 0) iMaxIndex = i; + if(pShape[i] != DASIDX_UNUSED) iMaxIndex = i; assert(iMaxIndex >= 0); return iMaxIndex; } @@ -942,11 +942,11 @@ VarInfo* solveDepends(DasDs* pDs, size_t* pNumCoords) /* (1) Gather the array shapes ************* */ - size_t uC, uCoordDims = DasDs_numDims(pDs, DASDIM_COORD); + size_t uD, uCoordDims = DasDs_numDims(pDs, DASDIM_COORD); size_t uExtra = 0; size_t uCoords = 0; - for(uC = 0; uC < uCoordDims; ++uC){ - const DasDim* pDim = DasDs_getDimByIdx(pDs, uC, DASDIM_COORD); + for(uD = 0; uD < uCoordDims; ++uD){ + const DasDim* pDim = DasDs_getDimByIdx(pDs, uD, DASDIM_COORD); uCoords += DasDim_numVars(pDim); if(DasDim_getVar(pDim, DASVAR_REF) && DasDim_getVar(pDim, DASVAR_OFFSET) && @@ -958,8 +958,8 @@ VarInfo* solveDepends(DasDs* pDs, size_t* pNumCoords) VarInfo* aVarInfo = (VarInfo*) calloc(uCoords + uExtra, sizeof(VarInfo)); size_t uInfos = 0; - for(uC = 0; uC < uCoords; ++uC){ - DasDim* pDim = (DasDim*)DasDs_getDimByIdx(pDs, uC, DASDIM_COORD); + for(uD = 0; uD < uCoordDims; ++uD){ + DasDim* pDim = (DasDim*)DasDs_getDimByIdx(pDs, uD, DASDIM_COORD); size_t uVars = DasDim_numVars(pDim); for(size_t uV = 0; uV < uVars; ++uV){ @@ -989,9 +989,8 @@ VarInfo* solveDepends(DasDs* pDs, size_t* pNumCoords) if(aVarInfo[u].iMaxIdx == iDep){ aVarInfo[u].iDep = iDep; /* This var is now a dependency */ ++nAssigned; - continue; + ++iDep; } - ++iDep; } if(nAssigned != nDsRank){ @@ -1148,7 +1147,18 @@ DasErrCode makeCdfVar( if(nNonRecDims < 0) return PERR; - DasVar_addCdfInfo(pVar); /* attache a small var_cdf_info_t struct to the variable */ + /* Create the varyances array */ + long aVaries[DASIDX_MAX] = { + NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY + }; + for(int i = 0; i < DASIDX_MAX; ++i){ + if(!DasVar_degenerate(pVar,i)) + aVaries[i] = VARY; + } + + /* Attach a small var_cdf_info_t struct to the variable to track the + variable ID as well as the last written record index */ + DasVar_addCdfInfo(pVar); /* add the variables name */ DasVar_cdfName(pDim, pVar, sNameBuf, DAS_MAX_ID_BUFSZ - 1), @@ -1165,8 +1175,8 @@ DasErrCode makeCdfVar( (nIntrRank > 0) ? (long) aIntr[0] : 1L, /* Character length, if needed */ nNonRecDims, /* collapsed rank after index 0 */ aNonRecDims, /* collapsed size in each index, after 0 */ - DasVar_degenerate(pVar, 0) ? NOVARY : VARY, /* True if varies in index 0 */ - (nNonRecDims > 0) ? VARY : NOVARY, /* True if varies in index other then 0 */ + aVaries[0], /* True if varies in index 0 */ + (aVaries + 1), /* Array of varies for index > 0 */ DasVar_cdfIdPtr(pVar) /* The ID of the variable created */ ); if(!_cdfOkayish(iStatus)) From 4e509e21bd6d0e8ed1ea180689c233d40513b776 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Fri, 23 Feb 2024 23:27:03 -0600 Subject: [PATCH 28/40] Write rank-3 cdfs but dependences not assigned correctly --- das2/array.h | 13 +- das2/dataset.h | 4 + das2/dimension.h | 16 +++ utilities/das3_cdf.c | 326 +++++++++++++++++++++++++++++-------------- 4 files changed, 252 insertions(+), 107 deletions(-) diff --git a/das2/array.h b/das2/array.h index c8cfab3..461723e 100644 --- a/das2/array.h +++ b/das2/array.h @@ -444,7 +444,7 @@ DAS_API DasAry* new_DasPtrAry(const char* sType, int rank, size_t* shape); /** Set usage flags to assist arbitrary consumers understand how to use this * array. * - * Das2 arrays can store co-opertive flags, these do not change the array API + * das arrays can store co-opertive flags, these do not change the array API * but do indicate how the array should be used. The following two usage flags * are currently defined: * @@ -452,9 +452,18 @@ DAS_API DasAry* new_DasPtrAry(const char* sType, int rank, size_t* shape); * - D2ARY_FILL_TERM : Contains FILL terminated sub-sequences * - D2ARY_AS_STRING : Contains FILL terminated sub-sequences and FILL is 0 * + * You can add your own flags as well so long as they have the value: + * + * - 0x0001000 + * + * or higher they will be preserved through calls to setUsage and getUsage + * * @param pThis - * @param uFlags A flag value to set + * + * @param uFlags All the flag values to set at once. + * * @return The old flag setting + * * @memberof DasAry */ DAS_API unsigned int DasAry_setUsage(DasAry* pThis, unsigned int uFlags); diff --git a/das2/dataset.h b/das2/dataset.h index 41b89f5..6baa9c6 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -487,6 +487,10 @@ DAS_API bool dasds_iter_next(dasds_iterator* pIter); */ DAS_API DasErrCode DasDs_addAry(DasDs* pThis, DasAry* pAry); +#define DasDs_numAry(P) ((P)->uArrays) + +#define DasDs_getAry(P, I) ((P)->lArrays[(I)]) + /** Get a dataset array given it's identifier * diff --git a/das2/dimension.h b/das2/dimension.h index a4356ce..687bf1c 100644 --- a/das2/dimension.h +++ b/das2/dimension.h @@ -285,6 +285,8 @@ DAS_API const DasVar* DasDim_getVar(const DasDim* pThis, const char* sRole); #define DasDim_numVars(P) ((P)->uVars); /** Get a variable by index + * + * The range of valid indicies is providid by DasDim_numVars(); * * @param pThis A pointer to a dimension * @@ -294,6 +296,20 @@ DAS_API const DasVar* DasDim_getVar(const DasDim* pThis, const char* sRole); */ #define DasDim_getVarByIdx(P, I) ( (I)<((P)->uVars) ? ((const DasVar*)((P)->aVars[(I)])) : NULL ) +/** Get a variable's role by index + * + * The range of valid indicies is providid by DasDim_numVars(); + * + * @param pThis A pointer to a dimension + * + * @returns a constant pointer to the variable's role for a index or NULL + * if no variable is defined at that index + * @memberof DasDim + */ +#define DasDim_getRoleByIdx(P, I) ( (I)<((P)->uVars) ? ((const char*)((P)->aRoles[(I)])) : NULL ) + + + /** Get a variable poviding single point values in a dimension * * The most common variable role, DASVAR_CENTER, is typically present in a diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index 0f454d8..4bcc9f3 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -54,6 +54,10 @@ #define HOME_VAR_STR "HOME" #endif +/* Add a littel user-flag for arrays so we know which ones to clear after + a batch write */ +#define DASARY_REC_VARY 0x00010000 + /* Handle lack of const qualifier in cdf lib that should really be there */ #define CDFvarId(id, str) CDFgetVarNum((id), (char*) (str)) #define CDFattrId(id, str) CDFgetAttrNum((id), (char*) (str)) @@ -969,6 +973,10 @@ VarInfo* solveDepends(DasDs* pDs, size_t* pNumCoords) pVi->iDep = -1; /* not assigned to a dim yet */ pVi->pDim = pDim; pVi->pVar = (DasVar*)DasDim_getVarByIdx(pDim, uV); + strncpy(pVi->sDim, DasDim_id(pDim), DAS_MAX_ID_BUFSZ-1); + const char* sRole = DasDim_getRoleByIdx(pDim, uV); + if(sRole!=NULL) + strncpy(pVi->sRole, sRole, DASDIM_ROLE_SZ-1); DasVar_shape(pVi->pVar, pVi->aVarShape); pVi->iMaxIdx = _maxIndex(pVi->aVarShape); @@ -1030,7 +1038,11 @@ VarInfo* solveDepends(DasDs* pDs, size_t* pNumCoords) pViNew->pDim = pViOff->pDim; strncpy(pViNew->sDim, pViOff->sDim, DAS_MAX_ID_BUFSZ - 1); - strncpy(pViNew->sRole, DASVAR_CENTER, DAS_MAX_ID_BUFSZ - 1); + strncpy(pViNew->sRole, DASVAR_CENTER, DASDIM_ROLE_SZ - 1); + + DasVar_shape(pViNew->pVar, pViNew->aVarShape); + pViNew->iMaxIdx = _maxIndex(pViNew->aVarShape); + pViNew->iDep = pViOff->iDep; /* Give dep role to new variable */ pViOff->iDep = -1; @@ -1112,8 +1124,11 @@ const char* DasVar_cdfName( return sBuf; } -long DasVar_cdfNonRecDims(int nDsRank, const DasVar* pVar, long* pNonRecDims) -{ +/* Sequences pour themselves into the shape of the containing dataset + so that's needed as well */ +long DasVar_cdfNonRecDims( + int nDsRank, ptrdiff_t* pDsShape, const DasVar* pVar, long* pNonRecDims +){ ptrdiff_t aShape[DASIDX_MAX] = {0}; DasVar_shape(pVar, aShape); @@ -1124,8 +1139,17 @@ long DasVar_cdfNonRecDims(int nDsRank, const DasVar* pVar, long* pNonRecDims) "Ragged indexes in non-record indexes are not supported by CDFs" ); - if(aShape[i] > 0){ - pNonRecDims[nUsed] = aShape[i]; + if(aShape[i] != DASIDX_UNUSED){ + if(aShape[i] < 1){ + if(pDsShape[i] < 1){ + return -1 * das_error( + PERR, "Ragged datasets with sequences are not yet supported" + ); + } + pNonRecDims[nUsed] = pDsShape[i]; + } + else + pNonRecDims[nUsed] = aShape[i]; ++nUsed; } } @@ -1143,11 +1167,24 @@ DasErrCode makeCdfVar( int nIntrRank = DasVar_intrShape(pVar, aIntr); long aNonRecDims[DASIDX_MAX] = {0}; - long nNonRecDims = DasVar_cdfNonRecDims(nDsRank, pVar, aNonRecDims); + /* Sequence variables mold themselvse to the shape of the containing dataset so + the dataset shape has to be passed in a well */ + long nNonRecDims = DasVar_cdfNonRecDims(nDsRank, pDsShape, pVar, aNonRecDims); if(nNonRecDims < 0) return PERR; - /* Create the varyances array */ + /* Create the varyances array. + * + * The way CDFs were meant to be used, (see sec. 2.3.11 in the CDF Users Guide) + * the VARY flags would would map 1-to-1 to DasVar_degenerat() calls. However + * the people who invented the ISTP standards took a different route with the + * "DEPEND_N" concept, which isn't as fexible. In that concept, all non-varying + * variables were kinda expected to be 1-D and 'data' variables are expected to + * be cubic, So the VARY's collapse. This is unfortunate as DEPEND_N is not as + * flexible. -cwp + + // What the code should be... + long aVaries[DASIDX_MAX] = { NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY }; @@ -1156,6 +1193,24 @@ DasErrCode makeCdfVar( aVaries[i] = VARY; } + // but what it is... */ + + long nRecVary = NOVARY; + long aDimVary[DASIDX_MAX - 1] = {NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY}; + + int j = 0; + for(int i = 0; i < DASIDX_MAX; ++i){ + if(DasVar_degenerate(pVar, i)) + continue; + if(i == 0){ + nRecVary = VARY; + } + else{ + aDimVary[j] = VARY; + ++j; + } + } + /* Attach a small var_cdf_info_t struct to the variable to track the variable ID as well as the last written record index */ DasVar_addCdfInfo(pVar); @@ -1175,80 +1230,93 @@ DasErrCode makeCdfVar( (nIntrRank > 0) ? (long) aIntr[0] : 1L, /* Character length, if needed */ nNonRecDims, /* collapsed rank after index 0 */ aNonRecDims, /* collapsed size in each index, after 0 */ - aVaries[0], /* True if varies in index 0 */ - (aVaries + 1), /* Array of varies for index > 0 */ + nRecVary, /* True if varies in index 0 */ + aDimVary, /* Array of varies for index > 0 */ DasVar_cdfIdPtr(pVar) /* The ID of the variable created */ ); if(!_cdfOkayish(iStatus)) return PERR; - /* If the is not a record varying varible, write it out now */ - if(DasVar_degenerate(pVar, 0)){ - - aMax[0] = 1; /* We don't care about the 0-th index, we're not record varying */ - - /* We have a bit of a problem here. DasVar works hard to make sure - you never have to care about the internal data storage and degenerate - indicies, but CDF *wants* to know this information. What we have to - do is ask for a subset that ONLY contains non-degenerate information. - - Using the varible's index map, "punch-out" overall dataset indexes that - don't apply. */ - - for(int r = 1; r < nDsRank; ++r){ - if(pDsShape[r] > 0){ - if(DasVar_degenerate(pVar, r)) - aMax[r] = 1; - else{ - if(pDsShape[r] == DASIDX_RAGGED) - return das_error(PERR, "CDF does not allow ragged array lengths " - "after the zeroth index. We could get around using by loading " - "all data in RAM and using fill values when writing the CDF " - "but have chosen not to do so at this time." - ); - else - aMax[r] = pDsShape[r]; - } - } - else + /* If the is a record varying varible and it has an array, mark that + array as one we'll clear after each batch of data is written */ + if(nRecVary == VARY){ + if(DasVar_type(pVar) == D2V_ARRAY){ + DasAry* pAry = DasVarAry_getArray(pVar); + DasAry_setUsage(pAry, DasAry_getUsage(pAry) | DASARY_REC_VARY ); + } + + return DAS_OKAY; /* Done with rec-varying variables */ + } + + + /* Looks like it's not record varying, go ahead and write it now.... */ + + /* We have a bit of a problem here. DasVar works hard to make sure + you never have to care about the internal data storage and degenerate + indicies, but ISTP CDF *wants* to know this information. (back in the old + days the rVariables didn't, grrr). So what we have to do is ask for a + subset that ONLY contains non-degenerate information. + + To be ISTP compliant, use the varible's index map, "punch-out" overall + dataset indexes that don't apply. */ + + aMax[0] = 1; /* We don't care about the 0-th index, we're not record varying */ + + for(int r = 1; r < nDsRank; ++r){ + if(pDsShape[r] > 0){ + if(DasVar_degenerate(pVar, r)) aMax[r] = 1; - } + else{ + if(pDsShape[r] == DASIDX_RAGGED) + return das_error(PERR, "CDF does not allow ragged array lengths " + "after the zeroth index. We could get around using by loading " + "all data in RAM and using fill values when writing the CDF " + "but have chosen not to do so at this time." + ); + else + aMax[r] = pDsShape[r]; + } + } + else + aMax[r] = 1; + } - /* Force all sequences and binary variables to take on concrete values */ - DasAry* pAry = DasVar_subset(pVar, nDsRank, aMin, aMax); + /* Force all sequences and binary variables to take on concrete values */ + DasAry* pAry = DasVar_subset(pVar, nDsRank, aMin, aMax); - ptrdiff_t aAryShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; - int nAryRank = DasAry_shape(pAry, aAryShape); - - size_t uLen = 0; - das_val_type vt = DasAry_valType(pAry); - const ubyte* pVals = DasAry_getIn(pAry, vt, DIM0, &uLen); - - /* Put index information into data types needed for function call */ - static const long indicies[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; - long counts[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; - static const long intervals[DASIDX_MAX] = {1,1,1,1, 1,1,1,1}; - - for(int r = 0; r < nAryRank; ++r) - counts[r] = aAryShape[r]; - - iStatus = CDFhyperPutzVarData( - nCdfId, /* CDF File ID */ - DasVar_cdfId(pVar), /* Shamelessly use point as an long int storage */ - 0, /* record start */ - 1, /* number for records to write */ - 1, /* record interval */ - indicies, /* Dimensional index start posititions */ - counts, /* Number of intervals along each array dimension */ - intervals, /* Writing intervals along each array dimension */ - pVals - ); + ptrdiff_t aAryShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + int nAryRank = DasAry_shape(pAry, aAryShape); - dec_DasAry(pAry); + size_t uLen = 0; + das_val_type vt = DasAry_valType(pAry); + const ubyte* pVals = DasAry_getIn(pAry, vt, DIM0, &uLen); - if(!_cdfOkayish(iStatus)) - return PERR; + /* Put index information into data types needed for function call */ + static const long indicies[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; + long counts[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; + static const long intervals[DASIDX_MAX] = {1,1,1,1, 1,1,1,1}; + + for(int r = 0; r < nAryRank; ++r){ + counts[r] = aAryShape[r]; } + + iStatus = CDFhyperPutzVarData( + nCdfId, /* CDF File ID */ + DasVar_cdfId(pVar), /* Shamelessly use point as an long int storage */ + 0, /* record start */ + 1, /* number for records to write */ + 1, /* record interval */ + indicies, /* Dimensional index start posititions */ + counts, /* Number of intervals along each array dimension */ + intervals, /* Writing intervals along each array dimension */ + pVals + ); + + dec_DasAry(pAry); + + if(!_cdfOkayish(iStatus)) + return PERR; + return DAS_OKAY; } @@ -1407,7 +1475,7 @@ DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) /* ************************************************************************* */ /* Writing data to the CDF */ -DasErrCode putAllData(CDFid nCdfId, DasVar* pVar) +DasErrCode _writeRecVaryAry(CDFid nCdfId, DasVar* pVar, DasAry* pAry) { CDFstatus iStatus; /* Used by the _OK macro */ @@ -1416,48 +1484,81 @@ DasErrCode putAllData(CDFid nCdfId, DasVar* pVar) long counts[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; ptrdiff_t aShape[DASIDX_MAX] = DASIDX_INIT_BEGIN; + size_t uElSize = 0; + size_t uElements = 0; + size_t uTotal = 0; + const ubyte* pData = DasAry_getAllVals(pAry, &uElSize, &uElements); + + if(pData == NULL) + return PERR; + + int nRank = DasAry_shape(pAry, aShape); + + uTotal = aShape[0]; + for(int r = 1; r < nRank; ++r){ + counts[r-1] = aShape[r]; + uTotal *= aShape[r]; + } + + assert(uTotal == uElements); + + if(!_OK(CDFhyperPutzVarData( + nCdfId, + DasVar_cdfId(pVar), + DasVar_cdfStart(pVar), /* record start */ + (long) aShape[0], + 1, + indicies, + counts, + intervals, + pData + ))) + return PERR; + + DasVar_cdfIncStart(pVar, aShape[0]); + + return DAS_OKAY; +} + +DasErrCode putAllData(CDFid nCdfId, int nDsRank, ptrdiff_t* pDsShape, DasVar* pVar) +{ /* Take a short cut for array variables */ if(DasVar_type(pVar) == D2V_ARRAY){ - DasAry* pAry = DasVarAry_getArray(pVar); + DasAry* pAry = DasVarAry_getArray(pVar); /* Does not copy data */ assert(pAry != NULL); - size_t uElSize = 0; - size_t uElements = 0; - size_t uTotal = 0; - const ubyte* pData = DasAry_getAllVals(pAry, &uElSize, &uElements); - if(pData != NULL){ - int nRank = DasAry_shape(pAry, aShape); - - uTotal = aShape[0]; - for(int r = 1; r < nRank; ++r){ - counts[r-1] = aShape[r]; - uTotal *= aShape[r]; - } + if(_writeRecVaryAry(nCdfId, pVar, pAry) != DAS_OKAY) + return PERR; + } + else{ - assert(uTotal == uElements); - - if(!_OK(CDFhyperPutzVarData( - nCdfId, - DasVar_cdfId(pVar), - DasVar_cdfStart(pVar), /* record start */ - (long) aShape[0], - 1, - indicies, - counts, - intervals, - pData - ))) - return PERR; + /* For binaryOps and Sequences, calculate the values now. Since none of the + degenerate indexes are saved to CDF "punch out" the degenerate indexes + with a max range of just 1 */ + + ptrdiff_t aMin[DASIDX_MAX] = DASIDX_INIT_BEGIN; + ptrdiff_t aMax[DASIDX_MAX] = DASIDX_INIT_BEGIN; - DasVar_cdfIncStart(pVar, aShape[0]); + for(int r = 0; r < nDsRank; ++r){ + if(pDsShape[r] <= 0) + return das_error(PERR, "Ragged datasets are not yet supported"); + + if(DasVar_degenerate(pVar, r)){ + aMax[r] = 1; + assert(r > 0); /* Can't be degenerate in the streaming index at this point */ + } + else + aMax[r] = pDsShape[r]; } - /* Now make space for more */ - DasAry_clear(pAry); - } - else{ - return das_error(DASERR_NOTIMP, "Storing binaryOp & Sequence data not yet implemented"); + /* A potentially long calculation.... */ + DasAry* pAry = DasVar_subset(pVar, nDsRank, aMin, aMax); + + if(_writeRecVaryAry(nCdfId, pVar, pAry) != DAS_OKAY) + return PERR; + + dec_DasAry(pAry); /* Delete the temporary array */ } return DAS_OKAY; } @@ -1465,6 +1566,11 @@ DasErrCode putAllData(CDFid nCdfId, DasVar* pVar) /* Assuming all varibles were setup above, now write a bunch of data to the CDF */ DasErrCode writeAndClearData(DasDs* pDs, struct context* pCtx) { + ptrdiff_t aDsShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; + int nDsRank = DasDs_shape(pDs, aDsShape); + + /* Write all the data first. Don't clear arrays as you go because + binary-op variables might depend on them! */ for(int iType = DASDIM_COORD; iType <= DASDIM_DATA; ++iType){ /* Coord & Data */ @@ -1480,12 +1586,22 @@ DasErrCode writeAndClearData(DasDs* pDs, struct context* pCtx) if(DasVar_degenerate(pVar, 0)) /* var is not record varying */ continue; - if(putAllData(pCtx->nCdfId, pVar) != DAS_OKAY) + if(putAllData(pCtx->nCdfId, nDsRank, aDsShape, pVar) != DAS_OKAY) return PERR; } } } + /* Now clear all the record-varying arrays in the dataset. Only the variables + * know if the arrays are record varying. Maybe I should add a */ + size_t uArrays = DasDs_numAry(pDs); + for(size_t uAry = 0; uAry < uArrays; ++uAry){ + DasAry* pAry = DasDs_getAry(pDs, uAry); + + if(DasAry_getUsage(pAry) & DASARY_REC_VARY) + DasAry_clear(pAry); + } + return DAS_OKAY; } From 7378413681c79862f71b00f6470d6d18ed6dca03 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sat, 24 Feb 2024 00:20:25 -0600 Subject: [PATCH 29/40] Dependencies fixed, time values are wrong --- utilities/das3_cdf.c | 52 ++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index 4bcc9f3..0b8cc67 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -1125,7 +1125,7 @@ const char* DasVar_cdfName( } /* Sequences pour themselves into the shape of the containing dataset - so that's needed as well */ + so the dataset shape is needed here */ long DasVar_cdfNonRecDims( int nDsRank, ptrdiff_t* pDsShape, const DasVar* pVar, long* pNonRecDims ){ @@ -1175,15 +1175,15 @@ DasErrCode makeCdfVar( /* Create the varyances array. * - * The way CDFs were meant to be used, (see sec. 2.3.11 in the CDF Users Guide) - * the VARY flags would would map 1-to-1 to DasVar_degenerat() calls. However - * the people who invented the ISTP standards took a different route with the - * "DEPEND_N" concept, which isn't as fexible. In that concept, all non-varying - * variables were kinda expected to be 1-D and 'data' variables are expected to - * be cubic, So the VARY's collapse. This is unfortunate as DEPEND_N is not as - * flexible. -cwp + * The way CDFs were meant to be used (see sec. 2.3.11 in the CDF Users Guide) + * the VARY flags would would have mapped 1-to-1 to DasVar_degenerate() calls. + * However the people who invented the ISTP standards took a different route + * with the "DEPEND_N" concept, which isn't as fexible. In that concept, all + * non-varying variables were kinda expected to be 1-D, and "data" variables are + * expected to be cubic, So the VARY's collapse. This is unfortunate as DEPEND_N + * is not as flexible. -cwp - // What the code should be... + // What the code should be ... long aVaries[DASIDX_MAX] = { NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY @@ -1193,7 +1193,7 @@ DasErrCode makeCdfVar( aVaries[i] = VARY; } - // but what it is... */ + // ... but what it is */ long nRecVary = NOVARY; long aDimVary[DASIDX_MAX - 1] = {NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY}; @@ -1215,13 +1215,8 @@ DasErrCode makeCdfVar( variable ID as well as the last written record index */ DasVar_addCdfInfo(pVar); - /* add the variables name */ - DasVar_cdfName(pDim, pVar, sNameBuf, DAS_MAX_ID_BUFSZ - 1), - - /* If this fails, you'll have to architect some other storage for the variable - ID because the size of long integers on this system are larger then the - size of pointers */ - assert(sizeof(long) <= sizeof(void*)); + /* add the variable's name */ + DasVar_cdfName(pDim, pVar, sNameBuf, DAS_MAX_ID_BUFSZ - 1); CDFstatus iStatus = CDFcreatezVar( nCdfId, /* CDF File ID */ @@ -1253,12 +1248,12 @@ DasErrCode makeCdfVar( /* We have a bit of a problem here. DasVar works hard to make sure you never have to care about the internal data storage and degenerate - indicies, but ISTP CDF *wants* to know this information. (back in the old - days the rVariables didn't, grrr). So what we have to do is ask for a - subset that ONLY contains non-degenerate information. + indicies, but ISTP CDF *wants* to know this information (back in the + old days the rVariables this worked, grrr). So what we have to do + is ask for a subset that ONLY contains non-degenerate information. - To be ISTP compliant, use the varible's index map, "punch-out" overall - dataset indexes that don't apply. */ + To be ISTP compliant, use the varible's index map and "punch out" + overall dataset indexes that don't apply. */ aMax[0] = 1; /* We don't care about the 0-th index, we're not record varying */ @@ -1325,10 +1320,10 @@ DasErrCode writeVarProps( ){ char sAttrName[64] = {'\0'}; - /* Find and set my dependencies. The rules + /* Find and set my dependencies. The rules: * - * Start at the variable's highest used index. - * If the varible provides a dependency, skip this one. + * 1) Start at the variable's highest used index. + * 2) If the varible provides a dependency, it can't have that dependency */ /* Find out if I happen to also be a coordinate */ @@ -1346,7 +1341,12 @@ DasErrCode writeVarProps( DasVar_shape(pVar, aVarShape); int iIdxMax = _maxIndex(aVarShape); - for(int iIdx = iIdxMax > -1; iIdx >= 0; --iIdx){ + for(int iIdx = iIdxMax; iIdx >= 0; --iIdx){ + + /* Either not record varying, or not affected by this index */ + if(DasVar_degenerate(pVar, 0)||DasVar_degenerate(pVar, iIdx)) + continue; + if(iIdx == iAmDep) continue; From e4224a84404bbe5453364bd040b28e546310f408 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sat, 24 Feb 2024 00:57:22 -0600 Subject: [PATCH 30/40] time struct->TT2k conversion, units improvements --- utilities/das3_cdf.c | 62 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index 0b8cc67..dd11c35 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -1364,9 +1364,39 @@ DasErrCode writeVarProps( } } - writeVarStrAttr(nCdfId, DasVar_cdfId(pVar), "UNITS", - pVar->units == NULL ? "" : pVar->units - ); + /* Intercept vtTime structure variables and save the units at ns */ + char sConvert[128] = {'\0'}; + const char* sUnits = " "; + if(DasVar_valType(pVar) == vtTime) + sUnits = "ns"; + else if (pVar->units != NULL){ + if(Units_haveCalRep(pVar->units)) + sUnits = Units_interval(pVar->units); + else{ + sUnits = pVar->units; + /* Convert all instances of ** to ^ follow the CDF convention */ + bool bLastStar = false; + char* pWrite = sConvert; + for(int i = 0; (i < strlen(sUnits))&&(i < 127); ++i){ + if(sUnits[i] == '*'){ + if(bLastStar){ + *pWrite = '^'; ++pWrite; + bLastStar = false; + } + else{ + bLastStar = true; + } + } + else{ + if(bLastStar){ *pWrite = '*'; ++pWrite; bLastStar = false; } + *pWrite = sUnits[i]; ++pWrite; + } + } + sUnits = sConvert; + } + } + + writeVarStrAttr(nCdfId, DasVar_cdfId(pVar), "UNITS", sUnits); if(pDim->dtype == DASDIM_COORD) writeVarStrAttr(nCdfId, DasVar_cdfId(pVar), "VAR_TYPE", "support_data"); @@ -1475,6 +1505,25 @@ DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) /* ************************************************************************* */ /* Writing data to the CDF */ +int64_t* g_pTimeValBuf = NULL; +size_t g_uTimeBufLen = 0; + +const ubyte* _structToTT2k(const ubyte* pData, size_t uTimes) +{ + if(g_uTimeBufLen < uTimes){ + if(g_pTimeValBuf != NULL){ + free(g_pTimeValBuf); + } + g_pTimeValBuf = (int64_t*)calloc(uTimes, sizeof(int64_t)); + } + + const das_time* pTimes = (const das_time*)pData; + for(size_t u = 0; u < uTimes; ++u){ + g_pTimeValBuf[u] = dt_to_tt2k(pTimes + u); + } + return (const ubyte*)g_pTimeValBuf; +} + DasErrCode _writeRecVaryAry(CDFid nCdfId, DasVar* pVar, DasAry* pAry) { CDFstatus iStatus; /* Used by the _OK macro */ @@ -1492,6 +1541,13 @@ DasErrCode _writeRecVaryAry(CDFid nCdfId, DasVar* pVar, DasAry* pAry) if(pData == NULL) return PERR; + /* Hook in data conversion. If we see vtTime, that's a structure, and + it needs to be re-written to TT2K */ + + if(DasAry_valType(pAry) == vtTime){ + pData = _structToTT2k(pData, uElements); + } + int nRank = DasAry_shape(pAry, aShape); uTotal = aShape[0]; From 72e2d8083c228670f9fa7dbc48a5051b07ac0bc0 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sun, 25 Feb 2024 17:30:32 -0600 Subject: [PATCH 31/40] Added CDF compression & CDF unittest --- buildfiles/Linux.mak | 12 ++-- test/ex12_sounder_xyz.cdf | Bin 0 -> 144630 bytes utilities/das3_cdf.c | 127 +++++++++++++++++++++++++------------- 3 files changed, 92 insertions(+), 47 deletions(-) create mode 100644 test/ex12_sounder_xyz.cdf diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index dc859cd..b854d75 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -198,13 +198,15 @@ test: $(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) @$(BD)/LoadStream @echo "INFO: Running unit test for credentials manager, $(BD)/TestCredMngr..." @$(BD)/TestCredMngr $(BD) - @echo "INFO: All test programs completed without errors" - - -test3:$(BD) $(BD)/das3_cdf $(BD)/$(TARG).a @echo "INFO: Running unit test for basic das v3.0 stream parsing, $(BD)/TestV3Read..." $(BD)/TestV3Read - $(BD)/das3_cdf -i test/ex12_sounder_xyz.d3t -o $(BD) -r + @echo "INFO: All test programs completed without errors" + +test_cdf:$(BD) $(BD)/das3_cdf $(BD)/$(TARG).a + @echo "INFO: Testing CDF creation" + $(BD)/das3_cdf -l warning -i test/ex12_sounder_xyz.d3t -o $(BD) -r + cmp $(BD)/ex12_sounder_xyz.cdf test/ex12_sounder_xyz.cdf + @echo "INFO: Good, CDF matches expected output." test_spice:$(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) @echo "INFO: Running unit test for spice error redirect, $(BD)/TestSpice..." diff --git a/test/ex12_sounder_xyz.cdf b/test/ex12_sounder_xyz.cdf new file mode 100644 index 0000000000000000000000000000000000000000..35632888c353860b664214945fe5ebeb18d7214d GIT binary patch literal 144630 zcmeFYbyOYAvNw#o6C^mnodChzU4kdL1b4S=T!KT8-~>%@2*KSYXmEE8?ripcH%Xpz zo_o)^Yu)$#{`uBA>9wY-x~qC-x~lqDJ+o(jJBNaXf&zn~eimq62!XU83$!Stf`uH2 zkOSd242~-!)oF3 z#+23G*u|LD!oeLy-O?PXbH)s}24BCxzj<`YlIz zG~HkPZ~Bu!bN0CXQwA*w>4f_whx7SGVP+xpw}1XYe~EtAzuf|Mv~_U(FM|Kfh6H5V z@c(VfA9axZl=c0uI4UQ#`c_Mzr@f+5Q_ARM+|^aO33ls)%gCu`hU{LrSh}< zbt*{Xr>p+fhLUo0Ftz-x_n%6B$FKjd`Tsr4;cx$DlSdo>!+!tlhi`-Mk8lM4Xje^T zISuuH3jb3%e#pd;e@!068$uuL#`&xLGgg0_{1NDX6?>Oo(!X0D>Aze5XOutc|2`9h zAPPaMe^_5j?4_ZGuBy~O<^Pe~BT)Zk{Vx#y(QbcP9}U9)i}inJBSSMt(uBw#RrDa$ zZS@(AoTr zxwE;wsrj!l|4H@WncV5``I12BBiR3y2p(#Kap=j&~Kd0o!lU+&Fg31e`NJ&lbpvT^S@huPy!JB-=Txy0pTCVKl<>m z<@Yb%SCW0qZ;$0~?#HNtwEuGdBmIAHKgK0w+~3?EDhO#qZs;fdpWOd@&xi5)QS%?D z>+t4{i}`=#?)%YQs{a@6|J&lns(!Q~(Ie}1d&JW$Iy8k`M(VvTZr!OyaD0<9y(Awgg<+J(f=uQes4u^G9bDz zE)H(?X6DY2-I}YLv;D8p|6%o`4{{*KPw@EP1IXXEZ%=*!_AkRdp6}70KOcC0bv@R& zKuGl%DSzL-aXd=?gNrC+?!R;JPb)my?QuOk#^_^=KicbOdGyO;`L9s-cOU$v`IA2S z;Afmaj`^nq&mY47cON|er~E&X6NAk9?>>06+h0C-?Ee=Z{P(@)->~$j0sq3%#}hps z|8j!A@4=-Z3V*-)qw-%@$M|=HwG22Y>FX zAX)LL7iO7vOk5e8eut5lv=^~41zf}Zal=8nv#Y^l$lq|yY{;_D4#sg?YctR*Z=-%r zcB}|4IKCbp%-PGy6npJL0?;lb?Tu#1tJ#n~Ay3jhjr{`La7ZDNX(1mOKmL|7p@PSd z$Ml)&W>ls3bd<0DyvT~Q$oK$bbppo;wEYmGBPf$`|G{Wf8^oUsus?H1E5#MdmV7^v zFVuBAZAi5%|C$A~yoTW$xoE=tu4Xe5zO5jcps_e96*{x=0Pg5Qd-MMGM-Hw2hGp=P z+q|_?l(70+=^-}1+L#j5-J^@ z=9stE6HrWBEaDUN3nqKA?TY!&T_PY50k~MO&m%Hsm000uji(rWBYR(ewC?P51Cu3s zHFn5xN92nh&5e)wxs8J0&DzG-a{{iU$%WC_$)c@}hCsK(`r zj=<%%`d|@gf~O;!?oz}4D96v~U)d<28rT-Z9A{5-ak7meFT@0vYoUGMa=`4}F|d6QUq8Z)nA#>F znbB#IE;Xb)c9kZvXviJk(dIRl%oad%9fKRc%Y{=_9`Cx3TV2?cuo=M3FE7772V_r8 zoKX76TF^e#eOf6!j57a`G{@}~bc8%PY>G`=oX@gFJr1hW<{M$kmG|NSBe($_A?BMZ z70SV*qqf9 zaxmQaSpf=J51S=GUY(lrgn7nVs^EL9o~_gmi9$T4{mCP~%e}Ansm)pXZjXh!mjKg9 z_8g=)-?+j*U~Cd<)0MBHYm9m+RAk1X}OChU&h*3T#aw9 z91Zhywl&*V>n-%t1I#h{Xq|As@nA#urXZbn+$r3H?|_4V;Rx+wv34Pgi789Tua|Ax z85%Dr&oMf`hw_J?UiH-(bE?^WqiF5F-tnbf=^GjNNI1zLbr@6;^wAvptDcq2XMB~z zY2@V|A`kCzAQN(golH$0_xEaJIuiQbu*F%UVNE$nr%dA$E+I5LaHgnXV*rMrwdfYk zi^i*MG$db^kQTt3brMohazqJNHiwY6 p&%8OH&#aLW3cjx9-jBa>rE;vX6O7t9% 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
M?3Y?kUf#mMl5Sg-(_wm5&$YpTL26Clo0d_lP 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 literal 0 HcmV?d00001 diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index dd11c35..467c32e 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -29,7 +29,12 @@ #include #include #include - +#ifdef _WIN32 +#define strcasecmp _stricmp +#define strncasecmp _strnicmp +#else +#include +#endif #include @@ -67,7 +72,7 @@ /* The default memory threshold, don't write data to disk until a dateset is bigger then this (except onClose) */ -size_t g_nMemBufThreshold = 16777216; /* 16 MBytes */ +#define DEF_FLUSH_BYTES 16777216; /* 16 MBytes */ #define THRESH "16 MB" @@ -191,25 +196,37 @@ void prnHelp() " Set the location where server authentication tokens (if any)\n" " are saved. Defaults to %s%s%s\n" "\n" -" -U MEGS,--mem-use=MEGS\n" +" -u,-uncompressed\n" +" Disables zlib compression. All variables are written uncompressed\n" +" This is needed for any CDF files submitted to the Planetary Data\n" +" system. Per ISTP rules, Epoch variables are not compressed.\n" +"\n" +" -m MEGS,--memory=MEGS\n" " To avoid constant writes, " PROG " buffers datasets in memory\n" " until they are " THRESH " or larger and then they are written\n" " to disk. Use this parameter to change the threshold. Using\n" -" a large value can increase performance for large datasets.\n" +" a large value can increase performance for large datasets. The\n" +" special values 'inf', 'infinite' or '∞' can be used to only write\n" +" record data after the stream completes." "\n", HOME_VAR_STR, DAS_DSEPS, DEF_AUTH_FILE); printf( "EXAMPLES\n" -" 1. Convert a local das stream file to a CDF file:\n" +" 1. Convert a local das stream file to a CDF file.\n" "\n" " cat my_data.d3b | " PROG " -o my_data.cdf\n" "\n" " 2. Read from a remote das server and write data to the current directory,\n" -" auto-generating the CDF file name:\n" +" auto-generating the CDF file name.\n" "\n" " " PROG " -i https://college.edu/mission/inst?beg=2014&end=2015 -o ./\n" -"\n"); +"\n" +" 3. Create a PDS archive file. Compression is disabled and records are\n" +" buffered in RAM before writing a single continuous block per variable.\n" +"\n" +" cat my_pds_data.d3b " PROG " -o my_pds_data.cdf -u -m infinite\n" +); printf( "AUTHOR\n" @@ -280,7 +297,9 @@ static bool _getArgVal( } typedef struct program_optitons{ - bool bRmFirst; + bool bRmFirst; /* remove output before writing */ + bool bUncompressed; /* don't compress data */ + size_t uMemThreshold; char aTpltFile[256]; /* Template CDF */ char aSource[1024]; /* Input source, http://, file:// etc. */ char aOutFile[256]; /* Non-filter: output */ @@ -289,13 +308,14 @@ typedef struct program_optitons{ char aCredFile[256]; } popts_t; - #define FIELD_SZ(type, field) (sizeof(((type*)NULL)->field)) int parseArgs(int argc, char** argv, popts_t* pOpts) { memset(pOpts, 0, sizeof(popts_t)); pOpts->bRmFirst = false; + pOpts->bUncompressed = false; + pOpts->uMemThreshold = DEF_FLUSH_BYTES; char sMemThresh[32] = {'\0'}; @@ -325,8 +345,12 @@ int parseArgs(int argc, char** argv, popts_t* pOpts) pOpts->bRmFirst = true; continue; } + if(_isArg(argv[i], "-u", "--uncompressed", NULL)){ + pOpts->bUncompressed = true; + continue; + } if(_getArgVal( - sMemThresh, 32, argv, argc, &i, "-U", "--mem-use=" + sMemThresh, 32, argv, argc, &i, "-m", "--memory=" )) continue; if(_getArgVal( @@ -360,11 +384,14 @@ int parseArgs(int argc, char** argv, popts_t* pOpts) float fMemUse; if(sMemThresh[0] != '\0'){ - if((sscanf(sMemThresh, "%f", &fMemUse) != 1)||(fMemUse < 1)){ - return das_error(PERR, "Invalid memory usage argument, '%s' MB", sMemThresh); + if((strncmp(sMemThresh, "inf", 3)==0)||(strcmp(sMemThresh, "∞") == 0)){ + pOpts->uMemThreshold = (sizeof(size_t) == 4 ? 0xFFFFFFFF : 0xFFFFFFFFFFFFFFuLL); } else{ - g_nMemBufThreshold = (size_t)fMemUse; + if((sscanf(sMemThresh, "%f", &fMemUse) != 1)||(fMemUse < 1)) + return das_error(PERR, "Invalid memory usage argument, '%s' MB", sMemThresh); + else + pOpts->uMemThreshold = ((size_t)fMemUse) * 1048576ull ; } } @@ -374,13 +401,13 @@ int parseArgs(int argc, char** argv, popts_t* pOpts) /* ************************************************************************* */ struct context { + bool bCompress; + size_t uFlushSz; /* How big to let internal memory grow before a CDF flush */ CDFid nCdfId; char* sTpltFile; /* An empty template CDF to put data in */ char* sWriteTo; /* DasTime dtBeg; */ /* Start point for initial query, if known */ /* double rInterval; */ /* Size of original query, if known */ - - uint32_t uFlushSz; /* How big to let internal memory grow before a CDF flush */ }; /* sending CDF message to the log ****************************************** */ @@ -606,7 +633,7 @@ void* DasProp_cdfEntValues(const DasProp* pProp, long iEntry){ return NULL; } -DasErrCode writeGlobalProp(CDFid iCdf, const DasProp* pProp) +DasErrCode writeGlobalProp(struct context* pCtx, const DasProp* pProp) { CDFstatus iStatus = CDF_OK; /* Also used by _OK macro */ @@ -620,13 +647,13 @@ DasErrCode writeGlobalProp(CDFid iCdf, const DasProp* pProp) /* Get attribute number or make a new (why can't CDFlib use "const", is it really so hard? */ - if((iAttr = CDFgetAttrNum(iCdf, (char*)sName)) <= 0){ - if(!_OK(CDFcreateAttr(iCdf, sName, GLOBAL_SCOPE, &iAttr))) + if((iAttr = CDFgetAttrNum(pCtx->nCdfId, (char*)sName)) <= 0){ + if(!_OK(CDFcreateAttr(pCtx->nCdfId, sName, GLOBAL_SCOPE, &iAttr))) return PERR; } iStatus = CDFputAttrgEntry( - iCdf, + pCtx->nCdfId, iAttr, iEntry, DasProp_cdfType(pProp), @@ -640,7 +667,7 @@ DasErrCode writeGlobalProp(CDFid iCdf, const DasProp* pProp) return DAS_OKAY; } -DasErrCode writeVarProp(CDFid iCdf, long iVarNum, const DasProp* pProp) +DasErrCode writeVarProp(struct context* pCtx, long iVarNum, const DasProp* pProp) { CDFstatus iStatus; /* Used by _OK macro */ @@ -649,13 +676,13 @@ DasErrCode writeVarProp(CDFid iCdf, long iVarNum, const DasProp* pProp) const char* sName = DasProp_cdfName(pProp); - if((iAttr = CDFattrId(iCdf, sName)) < 0){ - if(! _OK(CDFcreateAttr(iCdf,sName,VARIABLE_SCOPE,&iAttr))) + if((iAttr = CDFattrId(pCtx->nCdfId, sName)) < 0){ + if(! _OK(CDFcreateAttr(pCtx->nCdfId,sName,VARIABLE_SCOPE,&iAttr))) return PERR; } if(!_OK(CDFputAttrzEntry( - iCdf, + pCtx->nCdfId, iAttr, iVarNum, DasProp_cdfType(pProp), @@ -668,7 +695,7 @@ DasErrCode writeVarProp(CDFid iCdf, long iVarNum, const DasProp* pProp) } DasErrCode writeVarStrAttr( - CDFid iCdf, long iVarNum, const char* sName, const char* sValue + struct context* pCtx, long iVarNum, const char* sName, const char* sValue ){ CDFstatus iStatus; /* Used by _OK macro */ @@ -680,13 +707,13 @@ DasErrCode writeVarStrAttr( /* If the attribute doesn't exist, we'll need to create it first */ long iAttr; - if((iAttr = CDFattrId(iCdf, sName)) < 0){ - if(! _OK(CDFcreateAttr(iCdf, sName, VARIABLE_SCOPE, &iAttr ))) + if((iAttr = CDFattrId(pCtx->nCdfId, sName)) < 0){ + if(! _OK(CDFcreateAttr(pCtx->nCdfId, sName, VARIABLE_SCOPE, &iAttr ))) return PERR; } if(! _OK(CDFputAttrzEntry( - iCdf, + pCtx->nCdfId, iAttr, iVarNum, CDF_CHAR, @@ -749,7 +776,7 @@ DasErrCode onStream(StreamDesc* pSd, void* pUser){ if(strcmp(DasProp_name(pProp), "CDF_NAME") == 0) continue; - if(writeGlobalProp(pCtx->nCdfId, pProp) != DAS_OKAY) + if(writeGlobalProp(pCtx, pProp) != DAS_OKAY) return PERR; } @@ -1157,7 +1184,7 @@ long DasVar_cdfNonRecDims( } DasErrCode makeCdfVar( - CDFid nCdfId, DasDim* pDim, DasVar* pVar, int nDsRank, ptrdiff_t* pDsShape, + struct context* pCtx, DasDim* pDim, DasVar* pVar, int nDsRank, ptrdiff_t* pDsShape, char* sNameBuf ){ ptrdiff_t aMin[DASIDX_MAX] = {0}; @@ -1219,7 +1246,7 @@ DasErrCode makeCdfVar( DasVar_cdfName(pDim, pVar, sNameBuf, DAS_MAX_ID_BUFSZ - 1); CDFstatus iStatus = CDFcreatezVar( - nCdfId, /* CDF File ID */ + pCtx->nCdfId, /* CDF File ID */ sNameBuf, /* Varible's name */ DasVar_cdfType(pVar), /* CDF Data type of variable */ (nIntrRank > 0) ? (long) aIntr[0] : 1L, /* Character length, if needed */ @@ -1232,6 +1259,20 @@ DasErrCode makeCdfVar( if(!_cdfOkayish(iStatus)) return PERR; + /* If the data types is not TT2000 or doesn't start with 'Epoch' go ahead + and compress it if we're able */ + if( (pCtx->bCompress) && (DasVar_cdfType(pVar) != CDF_TIME_TT2000) + && ( strncasecmp(sNameBuf, "epoch", 5) != 0) + ){ + long cType = GZIP_COMPRESSION; + long cParams[CDF_MAX_PARMS]; + cParams[0] = 6L; + if(!_OK(CDFsetzVarCompression( + pCtx->nCdfId, DasVar_cdfId(pVar), cType, cParams + ))) + return PERR; + } + /* If the is a record varying varible and it has an array, mark that array as one we'll clear after each batch of data is written */ if(nRecVary == VARY){ @@ -1296,7 +1337,7 @@ DasErrCode makeCdfVar( } iStatus = CDFhyperPutzVarData( - nCdfId, /* CDF File ID */ + pCtx->nCdfId, /* CDF File ID */ DasVar_cdfId(pVar), /* Shamelessly use point as an long int storage */ 0, /* record start */ 1, /* number for records to write */ @@ -1316,7 +1357,7 @@ DasErrCode makeCdfVar( } DasErrCode writeVarProps( - CDFid nCdfId, DasDim* pDim, DasVar* pVar, VarInfo* pCoords, size_t uCoords + struct context* pCtx, DasDim* pDim, DasVar* pVar, VarInfo* pCoords, size_t uCoords ){ char sAttrName[64] = {'\0'}; @@ -1355,7 +1396,7 @@ DasErrCode writeVarProps( if((pCoords + u)->iDep == iIdx){ snprintf(sAttrName, 15, "DEPEND_%d", iIdx); writeVarStrAttr( - nCdfId, + pCtx, DasVar_cdfId(pVar), sAttrName, (pCoords+u)->sCdfName /* CDF name of the coordinate */ @@ -1396,12 +1437,12 @@ DasErrCode writeVarProps( } } - writeVarStrAttr(nCdfId, DasVar_cdfId(pVar), "UNITS", sUnits); + writeVarStrAttr(pCtx, DasVar_cdfId(pVar), "UNITS", sUnits); if(pDim->dtype == DASDIM_COORD) - writeVarStrAttr(nCdfId, DasVar_cdfId(pVar), "VAR_TYPE", "support_data"); + writeVarStrAttr(pCtx, DasVar_cdfId(pVar), "VAR_TYPE", "support_data"); else - writeVarStrAttr(nCdfId, DasVar_cdfId(pVar), "VAR_TYPE", "data"); + writeVarStrAttr(pCtx, DasVar_cdfId(pVar), "VAR_TYPE", "data"); return DAS_OKAY; } @@ -1453,7 +1494,7 @@ DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) if(strcmp(DasProp_name(pProp), "CDF_NAME") == 0) continue; - if(writeGlobalProp(pCtx->nCdfId, pProp) != DAS_OKAY) + if(writeGlobalProp(pCtx, pProp) != DAS_OKAY) return PERR; } @@ -1469,11 +1510,11 @@ DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) VarInfo* pVi = (pCdfCoords + u); if((nRet = makeCdfVar( - pCtx->nCdfId, pVi->pDim, pVi->pVar, nDsRank, aDsShape, pVi->sCdfName + pCtx, pVi->pDim, pVi->pVar, nDsRank, aDsShape, pVi->sCdfName )) != DAS_OKAY) return nRet; - nRet = writeVarProps(pCtx->nCdfId, pVi->pDim, pVi->pVar, pCdfCoords, uCoords); + nRet = writeVarProps(pCtx, pVi->pDim, pVi->pVar, pCdfCoords, uCoords); if(nRet != DAS_OKAY) return nRet; } @@ -1489,11 +1530,11 @@ DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) for(size_t v = 0; v < uVars; ++v){ DasVar* pVar = (DasVar*) DasDim_getVarByIdx(pDim, v); - nRet = makeCdfVar(pCtx->nCdfId, pDim, pVar, nDsRank, aDsShape, sNameBuf); + nRet = makeCdfVar(pCtx, pDim, pVar, nDsRank, aDsShape, sNameBuf); if(nRet != DAS_OKAY) return nRet; - nRet = writeVarProps(pCtx->nCdfId, pDim, pVar, pCdfCoords, uCoords); + nRet = writeVarProps(pCtx, pDim, pVar, pCdfCoords, uCoords); if(nRet != DAS_OKAY) return nRet; } @@ -1684,7 +1725,7 @@ DasErrCode onData(StreamDesc* pSd, DasDs* pDs, void* pUser) daslog_debug_v("Dataset memory indexed: %zu bytes", DasDs_memIndexed(pDs)); } - if(DasDs_memUsed(pDs) > g_nMemBufThreshold) + if(DasDs_memUsed(pDs) > pCtx->uFlushSz) return writeAndClearData(pDs, pCtx); return DAS_OKAY; @@ -1808,6 +1849,8 @@ int main(int argc, char** argv) memset(&ctx, 0, sizeof(struct context)); ctx.sWriteTo = sWriteTo; ctx.sTpltFile = opts.aTpltFile; + ctx.bCompress = !opts.bUncompressed; + ctx.uFlushSz = opts.uMemThreshold; /* Figure out where we're gonna write before potentially contacting servers */ bool bReStream = false; From 91dc116d48c6f120956c701b716a1eb105f70698 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Sun, 25 Feb 2024 20:39:38 -0600 Subject: [PATCH 32/40] Added make install target for das3_cdf --- buildfiles/Linux.mak | 2 ++ 1 file changed, 2 insertions(+) diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index b854d75..467e06f 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -216,6 +216,8 @@ test_spice:$(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) # Install everything install:lib_install $(INST_UTIL_PROGS) +install_cdf:$(DESTDIR)$(INST_NAT_BIN)/das3_cdf + lib_install:$(DESTDIR)$(INST_NAT_LIB)/$(TARG).a $(DESTDIR)$(INST_NAT_LIB)/$(TARG).so $(INST_HDRS) # Does not install static object that that it can be used with proprietary From 7f1c7b21d46b55f6270ce21495e6cbc7feb54113 Mon Sep 17 00:00:00 2001 From: C Piker Date: Mon, 26 Feb 2024 04:12:59 +0000 Subject: [PATCH 33/40] Finding libcdf via ENV vars --- buildfiles/Linux.mak | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index 467e06f..c44335d 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -167,9 +167,13 @@ $(BD)/das2_psd:$(BD)/das2_psd.o $(BD)/send.o $(BD)/$(TARG).a $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@ cdf:$(BD)/das3_cdf - + $(BD)/das3_cdf:$(BD)/das3_cdf.o - $(CC) $(CFLAGS) -o $@ $< $(BD)/$(TARG).a /usr/local/lib/libcdf.a $(LFLAGS) + @echo "An example CDF_INC value would be: /usr/local/include" + @echo "An example CDF_LIB value would be: /usr/local/lib/libcdf.a" + @if [ "$(CDF_INC)" = "" ] ; then echo "CDF_INC not set"; exit 3; fi + @if [ "$(CDF_LIB)" = "" ] ; then echo "CDF_LIB not set"; exit 3; fi + $(CC) $(CFLAGS) -I$(CDF_INC) -o $@ $< $(BD)/$(TARG).a $(CDF_LIB) $(LFLAGS) # Run tests test: $(BD) $(BD)/$(TARG).a $(BUILD_TEST_PROGS) $(BULID_UTIL_PROGS) From b9eaadb6b1e74898475d852623f96becd3392941 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Tue, 27 Feb 2024 16:28:48 -0600 Subject: [PATCH 34/40] Doxygen updates, still working on function groups --- Doxyfile | 4 +- buildfiles/Linux.mak | 3 + das2/array.h | 14 ++- das2/buffer.h | 6 +- das2/codec.h | 20 ++- das2/core.h | 263 +++++++++++++++++++++++---------------- das2/credentials.h | 2 +- das2/dataset.h | 45 +++++-- das2/datum.h | 18 ++- das2/descriptor.h | 32 ++--- das2/dimension.h | 18 +-- das2/encoding.h | 5 +- das2/frame.h | 11 +- das2/http.h | 11 +- das2/io.h | 28 ++++- das2/operator.h | 10 +- das2/property.h | 94 +++++++++----- das2/stream.c | 72 +++++------ das2/stream.h | 213 ++++++++++++++++++++----------- das2/time.h | 11 +- das2/units.h | 69 +++++----- das2/value.h | 36 ++++-- das2/variable.h | 48 ++++--- notes/das_containers.odg | Bin 0 -> 29268 bytes notes/das_containers.png | Bin 0 -> 92963 bytes 25 files changed, 644 insertions(+), 389 deletions(-) create mode 100644 notes/das_containers.odg create mode 100644 notes/das_containers.png diff --git a/Doxyfile b/Doxyfile index f880961..6aab74d 100644 --- a/Doxyfile +++ b/Doxyfile @@ -44,7 +44,7 @@ PROJECT_NUMBER = # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = "das2 core C utilities" +PROJECT_BRIEF = "das core C utilities (v3)" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 @@ -914,7 +914,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = notes # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index c44335d..f1d0a47 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -238,6 +238,9 @@ $(BD)/html:$(BD) $(BD)/$(TARG).a install_doc:$(INST_DOC)/libdas2 +clean_doc: + -rm -r $(BD)/html + $(INST_DOC)/libdas2:$(BD)/html -mkdir -p $(INST_DOC) @if [ -e "$(INST_DOC)/libdas2" ]; then rm -r $(INST_DOC)/libdas2; fi diff --git a/das2/array.h b/das2/array.h index 461723e..beceb12 100644 --- a/das2/array.h +++ b/das2/array.h @@ -39,10 +39,6 @@ extern "C" { #endif -/** @addtogroup datasets - * @{ - */ - /** The maximum number of array indices in das2 */ #define DASIDX_MAX 8 @@ -133,6 +129,9 @@ char* das_idx_prn(int nRank, ptrdiff_t* pIdx, size_t uLen, char* sBuf); #define RNG_6(i,I,j,J,k,K,l,L,m,M,n,N) 6, (ptrdiff_t[6]){i,j,k,l,m,n}, (ptrdiff_t[6]){I,J,K,L,M,N} #define RNG_7(i,I,j,J,k,K,l,L,m,M,n,N,o,O) 7, (ptrdiff_t[7]){i,j,k,l,m,n,o}, (ptrdiff_t[7]){I,J,K,L,M,N,O} +/** @addtogroup DM + * @{ + */ /** Calculate a strided array shape from a min/max range. * @@ -197,6 +196,10 @@ typedef struct dyna_buf{ } DynaBuf; +/** @addtogroup DM + * @{ + */ + /** Dynamic recursive ragged arrays * * This class maps any number of indices, (i,j,k...) to elements stored into a @@ -263,7 +266,6 @@ typedef struct dyna_buf{ * printf("\n"); * } * @endcode - * @ingroup datasets */ typedef struct das_array { char sId[DAS_MAX_ID_BUFSZ]; /* A text identifier of this instance of the array */ @@ -312,6 +314,8 @@ typedef struct das_array { } DasAry; +/** @} */ + /** Creates a new dynamic array buffer * diff --git a/das2/buffer.h b/das2/buffer.h index 80399bc..a14a66a 100644 --- a/das2/buffer.h +++ b/das2/buffer.h @@ -30,11 +30,11 @@ extern "C" { #endif -/** @addtogroup utilities +/** @addtogroup IO * @{ */ -/** Little buffer class to handle accumulating string data. +/** Buffer class to handle accumulating byte streams * * DasBuf objects maintain a data buffer with a current write point, a current * read point and an end read point. As data are written to the buffer the @@ -43,8 +43,6 @@ extern "C" { * memory buffer, or when multiple functions need to read from a buffer without * memory re-allocations or placing null values to stop parsing. * - * It is hoped that the use of this class cuts down on alot of data copies and - * sub-string allocations. */ typedef struct das_buffer{ char* sBuf; diff --git a/das2/codec.h b/das2/codec.h index c4e7c05..c614415 100644 --- a/das2/codec.h +++ b/das2/codec.h @@ -32,6 +32,10 @@ extern "C" { /* Not public, only here because used in a macro */ #define DASENC_VALID 0x0001 +/** @addtogroup IO + * @{ + */ + /** Reading and writing array data to buffers */ typedef struct das_codec { @@ -59,7 +63,11 @@ typedef struct das_codec { } DasCodec; -/** Has the memory for this encoder been initialized? */ + +/** Has the memory for this encoder been initialized? + * + * @memberof DasCodec + */ #define DasCodec_isValid(pCd) (((pCd)->uProc & DASENC_VALID)==(DASENC_VALID)) /** Initialize a serial buffer decoder/encoder @@ -106,6 +114,8 @@ typedef struct das_codec { * Otherwise, no string larger then the last index will be written * and zeros will be appended to fill out the last index when reading * data. + * + * @memberof DasCodec */ DAS_API DasErrCode DasCodec_init( DasCodec* pThis, DasAry* pAry, const char* sSemantic, const char* sEncType, @@ -143,12 +153,16 @@ DAS_API DasErrCode DasCodec_init( * * @returns the number of unread bytes or a negative ERR code if a data conversion * error occured. - * */ + * @memberof DasCodec + */ DAS_API int DasCodec_decode( DasCodec* pThis, const ubyte* pBuf, int nBufLen, int nExpect, int* pValsRead ); -/** Release the reference count on the array given to this encoder/decoder */ +/** Release the reference count on the array given to this encoder/decoder + * + * @memberof DasCodec + */ DAS_API void DasCodec_deInit(DasCodec* pThis); #ifdef __cplusplus diff --git a/das2/core.h b/das2/core.h index 35ab240..00698cd 100644 --- a/das2/core.h +++ b/das2/core.h @@ -21,131 +21,178 @@ /** * \mainpage * - *

Das2 streams are a self-describing, streamable format that allows for the - * transmission of large and complex data sets between different systems and - * programming environments. A precise description of the Das Stream - * specification 2.2 is found elsewhere in the das2 Interface Reference at - * https://github.com/das-developers/das2docs/tree/properties. + *

Das streams are a self-describing, streamable format that allows + * for the transmission of large and complex data sets between different systems + * and programming environments. Unlike common file formats, streaming data + * formats do not provide total lengths embedded in array headers, and they + * do not provide arrays as a single continuous block of memory, instead everything + * is record oriented, including the number of records! Stream processors are + * able to perform calculations on data as it passes from input to output. + * Handling data as streams allows for processing effectively infinite datasets + * on modest hardware. Stream data processing is the heart of Das. *

- *

This library of C functions provides utilities for more easily producing - * das2 streams that are correctly formatted and will be compatible with future - * versions of the Das2 Stream specification. + * + *

+ * Das systems have been around for a while. This + * a short video provides a historical overview of das processing. *

- * - *

Writing Streams

- *

A das2 stream is created by first opening the stream and getting a handle - * to it, then calling functions of this library that create and send out the - * various entities that live in das2 streams. There are functions for creating - * a packetDescriptor and then specifying what data will be in each packet, - * functions for populating the fields of the packet and sending out the packet - * onto the stream. Also there are functions for indicating progress and - * sending out messages on the stream for human consumption. The top level - * stream writing functions are defined in output.h. + *

+ * The initial version, now called das1 was designed by Larry Granroth at + * U. Iowa in 1996 and provided web forms for driving server-side processing + * that creating static plots which were then displayed in a browser. Processing + * was broken in to readers which generated data streams and plotters + * which provided graphical output. Readers were space-mission specific, but plotters + * were not. This basic division continues through das3. + *

+ *

Work on the now widely deployed das2 system began in 2002 with the goal + * of bringing mission agnostic interactive display and analysis tools to the + * desktop. A precise description of das v2.2 streams can be found in the + * + * das v2.2.2 Iterface Control Document on github. The most successful + * outgrowth of das2 is the feature-rich Autoplot + * Java application. + *

+ * + *

This Version

+ * + *

This edition of das2C kicks off support for das3 streams + * via the new serial.c and codec.c modules. It also provides support for the + * fault-tolerant das federated catalog via node.c, and many more new features. + * Supporting more complex datasets and reduction algorithms required a new data + * which is depicted in the diagram below. Keeping the following container + * hierarchy in mind will help while buired deep in code. *

+ * + * \image html das_containers.png + * * - *

Here is an illustration of a typical use of the library: + *

External projects providing other new das3 tools include: *

    - *
  • Declare an output ::DasIO structure using new_DasIO_file() or - * new_DasIO_cfile(). - *
  • - *
  • Call new_StreamDesc() to create a ::StreamDesc structure. - *
  • - *
  • Set global properties of the stream with the various ::DasDesc - * functions such as Desc_setPropString() and similar calls - *
  • - *
  • Write out the stream descriptor using DasIO_writeStreamDesc() - *
  • - *
  • Call new_PktDesc() to create a type of packet that will be found on the - * stream. Attach it to the stream using StreamDesc_addPktDesc() - *
  • - *
  • Create the data planes for the packet using new_PlaneDesc() and - * new_PlaneDesc_yscan(). Attach them to the packet using PktDesc_addPlane(). - *
  • - *
  • Set extra properties such as labels for the data planes using - * DasDesc_setString() and similar functions. - *
  • - *
  • Call DasIO_writePktDesc() to send the packet descriptor out onto the - * stream. - *
  • - *
  • While reading through the records of input data do the following: - *
      - *
    • Call PlaneDesc_setValue() current values for each plane such as the - * current time and amplitudes. - *
    • - *
    • Call DasIO_writePktData() to encode and output the current plane - * values - *
    • - *
    - *
  • close the stream using DasIO_close() - *
  • + *
  • dasFlex for streaming data in multiple formats via self-advertised APIs
  • + *
  • dasTelem for auto-parsing raw CCSDS instrument packets from PostgreSQL, and eventially
  • + *
  • dasView which will bring rich interactions back to the browser.
  • *
*

- * - *

Reading Streams

- *

A das2 stream is consumed by defining a set of callback functions that - * are invoked as the stream is read. Once the functions are set, program - * control is handed over to the library, and the callbacks are invoked until - * the entire stream is read. The top level stream reading functions are - * defined in input.h. + * + *

+ * In addition to the C library, a small collection of stream processing programs + * are included in the utilities folder. These are: + *

    + *
  • das1_ascii - Convert das1 binary streams to text
  • + *
  • das1_bin_avg - Reduce the size of das1 streams by averaging data in the X direction
  • + *
  • das2_ascii - Convert das2 binary streams to text
  • + *
  • das1_bin_avg - Reduce the size of das2 streams by averaging data in the X direction
  • + *
  • das2_bin_avgsec - Reduce the size of das2 streams by averaging data in time bins
  • + *
  • das2_bin_peakavgsec - Another reducer, this one produces both averages and max values in time
  • + *
  • das2_bin_ratesec - Provide a das2 stream data rate per event second summary
  • + *
  • das2_cache_rdr - Read from "database" of pre-reduced das2 streams
  • + *
  • das2_from_das1 - Upconvert das 1.0 streams to das 2.2 format
  • + *
  • das2_from_tagged_das1 - Upconvert das v1.1 streams to das 2.2 format.
  • + *
  • das2_hapi - Convert a das2 stream to a Heliphysics API stream.
  • + *
  • das2_histo - Covert a das2 stream to a stream of histograms
  • + *
  • das2_psd - Convert a das2 amplitude stream to a das2 Power Spectral Density stream
  • + *
  • das3_cdf - Write das v2 & v3 streams as CDF files.
  • + *
  • das3_node - Get the location and REST API of a das3 data source
  • + *
*

* - *

Here is an illustration of a typical use of the library to read a stream: + *

Reading Streams

+ *

A das stream is typically read by: *

    - *
  1. Declare an input ::DasIO structure using new_DasIO_file() or - * new_DasIO_cfile(). - *
  2. - *
  3. Declare a callback function of type ::StreamDescHandler to be triggered - * when a new das2 stream header is read in. - *
  4. - *
  5. Declare a callback function of type ::PktDescHandler for handling - * packet headers. - *
  6. - *
  7. Declare a callback function of type ::PktDataHandler for handling the - * incoming data packets. - *
  8. - * - *
  9. Optionally declare functions for handling comments and exceptions. - * Often these are simply forwarded onto the output stream. - *
  10. - *
  11. Fill out a ::StreamHandler structure to tie together your callbacks. - * If your callback functions need to maintain non-global state information - * use the StreamHandler::userData pointer to address a structure of your - * own design. - *
  12. - *
  13. Call DasIO_readAll() to have the library read in the stream. - *
  14. - *
  15. Exit after the DasIO_readAll() is completed. - *
  16. + *
  17. Making an HTTP request via das_http_getBody() (optional)
  18. + *
  19. Creating a ::DasIO object
  20. + *
  21. Registering your stream handling callbacks via DasIO_addProcessor()
  22. + *
  23. Calling DasIO_readAll() read the stream an invoke your callbacks
  24. *
- * - *

Example Program

+ * or, if you want to break with the stream processing mentality and just spool + * all data in RAM: + *
    + *
  1. Making an HTTP request via das_http_getBody() (optional)
  2. + *
  3. Creating a ::DasIO object
  4. + *
  5. Creating a ::DasDsBldr object and passing it into DasIO_addProcessor()
  6. + *
  7. Calling DasIO_readAll() to process your input.
  8. + *
  9. Calling DasDsBldr_getDataSets() to get a list of ::DasDs (das dataset) objects.
  10. + *
+ *

* - * The program: + *

+ * The following example is a minimal stream reader that prints information + * about all datasets found in a das stream file. + * @code + * #include * - * @b das2_bin_avg.c + * #define PROG_ERR 63 // be nice to the shell, don't use 0 here * - * is a small filter for averaging das2 stream data into fixed size bins. - * Since it has to handle both input and output and does some minimal - * data processing, this short program provides a good example of using - * this library to read and write das2 streams. + * int main(int argc, char** argv) + * { + * das_init(argv[0], DASERR_DIS_EXIT, 0, DASLOG_INFO, NULL); + * if(argc < 2) + * return das_error(ERR_RET, "Input file name missing"); + * + * DasIO* pIn = new_DasIO_file("das_example", argv[1], "r"); + * DasDsBldr* pBldr = new_DasDsBldr(); + * DasIO_addProcessor(pIn, (StreamHandler*)pBldr); + * + * DasIO_readAll(pIn); * - *

Compiling and Linking

- * - * There are about a half-dozen or so library headers, but you don't need to - * worry about finding the right ones if you don't want to. A roll-up header - * is included with the library that will grab all definitions. So including - * the header: - * @code - * #include + * size_t uDataSets = 0; + * DasDs** pDataSets = DasDsBldr_getDataSets(pBldr, &uDataSets); + * + * if(uDataSets == 0) + * daslog_info_v("No datasets found in %s", argv[1]); + * + * char sBuf[2048] = {'\0'}; + * for(size_t u = 0; u < uDataSets; ++u){ + * DasDs_toStr(pDataSets[u], sBuf, 2047); // one less insures null termination + * daslog_info(sBuf); + * } + * return 0; + * } * @endcode - * in your application source files will define everything you need. + * + * @note This example doesn't bother to free unneeded memory since it's + * built as a standalone program and the OS will free it on exit. + * When working in long running environments del_DasDs() and related + * functions should be called to free memory when it's no longer needed. * - * Linking is handled by command line options similar to: - * @code - * -L /YOUR/LIB/INSTALL/PATH -ldas2.3 -lfftw -lssl -lcrypto -lexpat -lpthread -lz -lm // GCC - * /LIBPATH C:\YOUR\LIB\INSTALL\PATH das2.3.lib ssl.lib crypto.lib expat.lib libz.lib // link.exe - * @endcode - * The exact details depend on your C tool-chain and installation locations. + *

+ * Here's an example of building the program via gcc: + *

+ * gcc -o test_prog test_prog.c libdas3.0.a -lfftw -lssl -lcrypto -lexpat -lpthread -lz -lm
+ * 
+ * cl.exe /nologo /Fe:test_prog.exe test_prog.c das3.0.lib fftw3.lib zlib.lib libssl.lib \
+ *                                  libcrypto.lib expatMD.lib Advapi32.lib User32.lib \
+ *                                  Crypt32.lib ws2_32.lib pthreadVC3.lib
+ * 
+ * In all likelyhood you'll need to use "-L" or "/LIBPATH" to provide the location + * of the libraries above unless you've copied them to the current directory. + * + * Here's an example for reading one of the das2 streams out of the included test + * directory: + * + *
+ * ./test_prog test/das2_ascii_output1.d2t
+ * 
+ *

+ * + *

Relationship to other das Libraries

+ * + * Das2C is used by the following external projects: + * + * + * Hopefully das2C is useful for your projects as well. */ #ifndef _das_core_h_ diff --git a/das2/credentials.h b/das2/credentials.h index 4418a9e..4939e18 100644 --- a/das2/credentials.h +++ b/das2/credentials.h @@ -29,7 +29,7 @@ extern "C" { /** @file credentials.h Handle storing credentials during a Das2 session and * optionally save them to a file */ -/** @addtogroup network +/** @addtogroup IO * @{ */ diff --git a/das2/dataset.h b/das2/dataset.h index 6baa9c6..092f959 100644 --- a/das2/dataset.h +++ b/das2/dataset.h @@ -91,16 +91,12 @@ extern "C" { * -cwp 2017-??-?? */ -/** @defgroup datasets Datasets - * Classes and functions for storing and manipulating correlated data values - */ - /* Number of encoders that can be stored internally, more then this and they * have to be allocated on the heap. This is the common "small vector" * optimization */ #define DASDS_LOC_ENC_SZ 32 -/** @addtogroup datasets +/** @addtogroup DM * @{ */ @@ -198,7 +194,11 @@ typedef struct dataset { */ void* pUser; -} DasDs; +} DasDs; + +/** + * @} + */ /** Create a new dataset object. * @@ -259,11 +259,15 @@ DAS_API void del_DasDs(DasDs* pThis); * it is possible to change a dataset in an external manner that is * not visible using the DasDim_, DasVar_ and DasAry_ functions * directly. + * @memberof DasDs */ DAS_API void DasDs_setMutable(DasDs* pThis, bool bChangeAllowed); -/** Get the lock state of the dataset */ +/** Get the lock state of the dataset + * + * @memberof DasDs + */ #define DasDs_mutable(P) P->_mutable /** Return current valid ranges for whole data set iteration @@ -326,6 +330,7 @@ DAS_API int DasDs_shape(const DasDs* pThis, ptrdiff_t* pShape); * if this variable returns computed results for this location * * @see DasAry_lengthIn + * @memberof DasDs */ DAS_API ptrdiff_t DasDs_lengthIn(const DasDs* pThis, int nIdx, ptrdiff_t* pLoc); @@ -487,8 +492,20 @@ DAS_API bool dasds_iter_next(dasds_iterator* pIter); */ DAS_API DasErrCode DasDs_addAry(DasDs* pThis, DasAry* pAry); + +/** Get the number of arrays in the dataset + * + * @memberof DasDs + */ #define DasDs_numAry(P) ((P)->uArrays) +/** Get the a specific array in the dataset, buy index. + * + * @param I The index of the array to access. The valid range of this + * value is determined by the return of DasDs_numAry() + * + * @memberof DasDs + */ #define DasDs_getAry(P, I) ((P)->lArrays[(I)]) @@ -503,6 +520,8 @@ DAS_API DasErrCode DasDs_addAry(DasDs* pThis, DasAry* pAry); * * @returns A pointer to the array, or NULL if no array with the given ID * could be found in the dataset. + * + * @memberof DasDs */ DAS_API DasAry* DasDs_getAryById(DasDs* pThis, const char* sAryId); @@ -524,6 +543,8 @@ DAS_API DasAry* DasDs_getAryById(DasDs* pThis, const char* sAryId); * * @see DasDs_memOwned() to get the allocated heap bytes for all * arrays in the dataset. + * + * @memberof DasDs */ DAS_API size_t DasDs_memUsed(const DasDs* pThis); @@ -549,6 +570,8 @@ DAS_API size_t DasDs_memIndexed(const DasDs* pThis); * * @see DasDs_memUse() to get the bytes currently used for dynamic * storage + * + * @memberof DasDs */ DAS_API size_t DasDs_memOwned(const DasDs* pThis); @@ -584,6 +607,8 @@ DAS_API size_t DasDs_memOwned(const DasDs* pThis); * @param nNumItems The number of items to read/write at a time. * * @returns DAS_OKAY if the array codec could be defined + * + * @memberof DasDs */ DAS_API DasErrCode DasDs_addFixedCodec( DasDs* pThis, const char* sAryId, const char* sSemantic, @@ -620,6 +645,8 @@ DAS_API DasErrCode DasDs_addFixedCodec( * @param pSepByIdx An array of pointers to separator values. * * @returns DAS_OKAY if the array codec could be defined + * + * @memberof DasDs */ DAS_API DasErrCode DasDs_addRaggedCodec( DasDs* pThis, const char* sAryId, const char* sEncType, @@ -728,6 +755,8 @@ DAS_API const DasDim* DasDs_getDimById(const DasDs* pThis, const char* sId); * Note: Datasets can be complicated items provide a good sized buffer * (~1024 bytes), when calling this function as it triggers subcalls for * all the compontent toStr as well + * + * @memberof DasDs */ DAS_API char* DasDs_toStr(const DasDs* pThis, char* sBuf, int nLen); @@ -818,8 +847,6 @@ void DataSpace_incAryRef(Dataset* pThis); int DataSpace_addSpan(const char* sDsId, const char** lCoords, size_t nCoords); */ -/** @} */ - #ifdef __cplusplus } #endif diff --git a/das2/datum.h b/das2/datum.h index 2dd8058..a9382b5 100644 --- a/das2/datum.h +++ b/das2/datum.h @@ -71,6 +71,8 @@ typedef struct datum_t { das_units units; } das_datum; +/** @} */ + /** Check to seef if a datum has been initialized. * * Note that a datum containing a fill value is still a valid datum for the @@ -80,6 +82,8 @@ typedef struct datum_t { % * @effect An expression that evaluates to logical true if pThis->vsize > 0, * logical false expression otherwise + * + * @memberof das_datum */ #define das_datum_valid(p) ((p)->vsize > 0) @@ -94,6 +98,7 @@ ptrdiff_t das_datum_shape0(const das_datum* pThis); * @param pThis pointer to the datum structure to initialize * @param sStr the value plus it's units. * @return true if the string was parseable as a datum, false otherwise. + * @memberof das_datum */ DAS_API bool das_datum_fromStr(das_datum* pThis, const char* sStr); @@ -105,6 +110,7 @@ DAS_API bool das_datum_fromStr(das_datum* pThis, const char* sStr); * @param value * @param units * @return Always returns true. + * @memberof das_datum */ DAS_API bool das_datum_fromDbl(das_datum* pThis, double value, das_units units); @@ -126,6 +132,7 @@ DAS_API bool das_datum_fromDbl(das_datum* pThis, double value, das_units units); * das_datum_initStr(locations + i, "city", cities[i]); * * @endcode + * @memberof das_datum */ DAS_API bool das_datum_wrapStr(das_datum* pTHis, const char* sStr, das_units units); @@ -134,6 +141,7 @@ DAS_API bool das_datum_wrapStr(das_datum* pTHis, const char* sStr, das_units uni * * This is for special user defined data types unknown to das2C. The type * of the datum will be vtByteSeq (a byte sequence) + * @memberof das_datum */ DAS_API bool das_datum_byteSeq( das_datum* pThis, das_byteseq seq, das_units units @@ -161,6 +169,7 @@ DAS_API bool das_datum_byteSeq( * @return The write point for adding more text to the buffer. To see * how much text was written subtract the initial buffer (sBuf) from * this return value. + * @memberof das_datum */ DAS_API char* das_datum_toStr( const das_datum* pThis, char* sStr, size_t uLen, int nFracDigits @@ -169,6 +178,7 @@ DAS_API char* das_datum_toStr( /** Same as das_datum_toStr, but never print the units * * @see das_datum_toStr + * @memberof das_datum */ DAS_API char* das_datum_toStrValOnly( const das_datum* pThis, char* sStr, size_t uLen, int nFracDigits @@ -182,6 +192,7 @@ DAS_API char* das_datum_toStrValOnly( * * @param pThis * @return The double value + * @memberof das_datum */ DAS_API double das_datum_toDbl(const das_datum* pThis); @@ -196,15 +207,18 @@ DAS_API double das_datum_toDbl(const das_datum* pThis); * * @returns true if the conversion was successful, false otherwise * and das_error is called. + * @memberof das_datum */ DAS_API bool das_datum_toEpoch( const das_datum* pThis, das_units epoch, double* pResult ); +/** Get the value form a string datum + * + * @memberof das_datum + */ #define das_datum_asStr(dm) *((char**)&dm) -/** @} */ - #ifdef __cplusplus } #endif diff --git a/das2/descriptor.h b/das2/descriptor.h index 271560a..303bbb6 100644 --- a/das2/descriptor.h +++ b/das2/descriptor.h @@ -59,29 +59,17 @@ const char* das_desc_type_str(desc_type_t dt); * * Note: Properties Cascade * - * Properties @e cascade in Das2 Streams. Thus if a particular descriptor + * Properties @e cascade in das streams. Thus if a particular descriptor * does not have a particular property then the various getProperty() functions * will search parent descriptors for requested property. The descriptor - * ownership hierarchy for Das2 Streams is: + * ownership hierarchy for das stream is: * - * - ::StreamDesc's have 1-N ::PktDesc's + * - ::StreamDesc's have 1-N ::FramePktDesc's * - ::PktDesc's have 1-N ::PlaneDesc's - * + * - :: + * * @todo Move child relationship into the descriptor base class, parent is there * but the other direction is missing - * - * @todo This implementation is very inefficient requring many small malloc's - * and order(N) object lookups. It also has types, keys and values all - * mixed together in the same array or the same value. This makes object - * lookup a wierd i+=2 iteration with ":" searches. We only get away with - * this because not much is stored in the properies arrays. - * - * This class this is just a hobbled dictionary of objects plus some - * string conversion functions. Using an actual C dictionary - * implementation would improve code quite a bit. If I were going to go - * to the trouble to do that I would make it multi-lingual as well. -cwp - * - * @nosubgrouping */ typedef struct das_descriptor { desc_type_t type; @@ -121,9 +109,9 @@ typedef struct das_descriptor { */ #define DasDesc_type(P) ((P)->type) -/** @name DasDesc Functions +/* @name DasDesc Functions * These work for any type of Descriptor, including ::PlaneDesc , - * ::PktDesc, ::StreamDesc, ::DasDs and ::DasVar. + * ::PktDesc, ::StreamDesc, ::DasDs and ::DasDim. * To make your compiler happy you will need to cast Plane, Packet and * Stream Descriptor pointers to just the generic type of Descriptor pointer * when using these functions. For example: @@ -133,8 +121,10 @@ typedef struct das_descriptor { * @endcode * @memberof DasDesc */ +/* @{ */ + + -/** @{ */ /** Initialize a memory location as a valid das descriptor * * @memberof DasDesc @@ -617,7 +607,7 @@ DAS_API DasErrCode DasDesc_encode3( -/** @} */ +/* * @} */ #ifdef __cplusplus } diff --git a/das2/dimension.h b/das2/dimension.h index 687bf1c..33f1e3d 100644 --- a/das2/dimension.h +++ b/das2/dimension.h @@ -98,15 +98,15 @@ extern const char* DASVAR_WEIGHT; #define DASDIM_ROLE_SZ 32 -/** @addtogroup datasets +enum dim_type { DASDIM_UNK = 0, DASDIM_COORD, DASDIM_DATA }; + +/** @addtogroup DM * @{ */ -enum dim_type { DASDIM_UNK = 0, DASDIM_COORD, DASDIM_DATA }; - -/** Das2 Physical Dimensions +/** Das Physical Dimensions * - * Das2 dimensions are groups of variables within a single dataset that describe + * Das dimensions are groups of variables within a single dataset that describe * the same physical thing. For example the "Time" coordinate dimension would * groups all variables that locate data in time. An "Ex" dimension would * provide a group of variables describing the electric field in a spacecraft X @@ -123,7 +123,7 @@ enum dim_type { DASDIM_UNK = 0, DASDIM_COORD, DASDIM_DATA }; * these are typically the X-axis values (or X and Y for spectrograms). Data * dimensions typically group together related measurements. * - * @extends Descriptor + * @extends DasDesc */ typedef struct das_dim { DasDesc base; /* Attributes or properties for this variable */ @@ -178,6 +178,8 @@ typedef struct das_dim { void* pUser; } DasDim; +/** @} */ + /** Create a new dimension (not as impressive as it sounds) * @@ -419,12 +421,12 @@ DAS_API int DasDim_shape(const DasDim* pThis, ptrdiff_t* pShape); * if this variable returns computed results for this location * * @see DasAry_lengthIn + * + * @memberof DasDim */ DAS_API ptrdiff_t DasDim_lengthIn(const DasDim* pThis, int nIdx, ptrdiff_t* pLoc); -/** @} */ - #ifdef __cplusplus } #endif diff --git a/das2/encoding.h b/das2/encoding.h index 2e1648d..5a05b52 100644 --- a/das2/encoding.h +++ b/das2/encoding.h @@ -80,7 +80,7 @@ DAS_API int isDas2Fill( double value ); #define DASENC_TYPE_LEN 48 -/** @addtogroup streams +/** @addtogroup IO * @{ */ @@ -141,6 +141,9 @@ typedef struct das_encoding{ } DasEncoding; +/** @} */ + + /** Make a new data encoder/decoder * * There is no corresponding destructor for DasEncoding structures, since these diff --git a/das2/frame.h b/das2/frame.h index 602c1b4..e0fc74f 100644 --- a/das2/frame.h +++ b/das2/frame.h @@ -41,7 +41,12 @@ extern "C" { #define DASFRM_INERTIAL 0x00000010 -/** Store the definitions for a directional coordinate frame + +/** @addtogroup DM + * @{ + */ + +/** Stores the definitions for a directional coordinate frame * * These are little more then a basic definition to allow new das3 vector * objects to be manipulated in a somewhat reasonable manner. Two vectors that @@ -65,7 +70,7 @@ typedef struct frame_descriptor{ } DasFrame; -/** @{ */ +/** @} */ /** Create a new empty frame definition * @param A coordinate name type string, such as "cartesian" @@ -140,8 +145,6 @@ DAS_API int8_t DasFrame_idxByDir(const DasFrame* pThis, const char* sDir); */ DAS_API void del_DasFrame(DasFrame* pThis); -/** @} */ - #ifdef __cplusplus } #endif diff --git a/das2/http.h b/das2/http.h index 4894492..a031c7d 100644 --- a/das2/http.h +++ b/das2/http.h @@ -29,15 +29,10 @@ extern "C" { /** @file http.h functions for reading and writing http messages */ -/** @defgroup network Network - * HTTP and HTTPs network operations and authentication - */ - -/** @addtogroup network +/** @addtogroup IO * @{ */ - #define DASURL_SZ_SCHEME 31 #define DASURL_SZ_HOST 63 #define DASURL_SZ_PATH 127 @@ -158,10 +153,6 @@ DAS_API bool DasHttpResp_init(DasHttpResp* pRes, const char* sUrl); */ DAS_API bool DasHttpResp_useSsl(DasHttpResp* pRes); -/** @addtogroup network - * @{ - */ - /** Get a socket positioned at the start of a remote resource * * This function makes a connection to a remote HTTP or HTTPS server, reads diff --git a/das2/io.h b/das2/io.h index 16a58b1..d2cf4d4 100644 --- a/das2/io.h +++ b/das2/io.h @@ -37,6 +37,13 @@ extern "C" { #define DASIO_NAME_SZ 128 +/** @defgroup IO Input/Output + * Classes and functions reading and writing byte streams + */ + +/** @addtogroup IO + * @{ + */ /** Tracks input and output operations for das2 stream headers and data. * @@ -44,7 +51,6 @@ extern "C" { * packets, checking packet lengths, passing XML string data off to descriptor * object constructors, triggering processing callbacks and most other general * Das2 Stream IO tasks. - * @ingroup streams */ typedef struct das_io_struct { char rw; /* w' for write, 'r' for read, plus the tag style */ @@ -96,6 +102,9 @@ typedef struct das_io_struct { OobComment cmt; /* Hold buffers for comments and logs */ } DasIO; +/** @} */ + + /** Create a new DasIO object from a standard C FILE. * * Create a DasIO object that reads or writes to C standard IO files. The @@ -197,10 +206,27 @@ DAS_API DasIO* new_DasIO_file(const char* sProg, const char* sFile, const char* * - 'wc' write compressed * * @return A new DasIO object allocated on the heap + * * @memberof DasIO */ DAS_API DasIO* new_DasIO_socket(const char* sProg, int nSockFd, const char* mode); +/** Create a new DasIO object for reading/writing to memory buffer + * + * @param sProg A spot to store the name of the program creating the file + * this is useful for automatically generated error and log messages + * + * @param nSockFd The socket file descriptor used for recv/write calls + * + * @param mode A string containing the mode, one of: + * - 'r' read (reads compressed and uncompressed files) + * - 'w' write uncompressed + * - 'wc' write compressed + * + * @return A new DasIO object allocated on the heap + * + * @memberof DasIO + */ DAS_API DasIO* new_DasIO_str(const char* sProg, char* sbuf, size_t len, const char* mode); /** Create a new DasIO object using an encripted connection diff --git a/das2/operator.h b/das2/operator.h index 0605bf4..372f93c 100644 --- a/das2/operator.h +++ b/das2/operator.h @@ -23,10 +23,6 @@ #ifdef __cplusplus extern "C" { #endif - -/** @addtogroup datasets - * @{ - */ /* Invalid Operator */ #define D2OP_INVALID 0 @@ -60,6 +56,11 @@ extern "C" { #define D2OP_BETWEEN 2 #define D2OP_AFTER 3 + +/** @addtogroup Utilities + * @{ + */ + /** Convert a string into a unary operator token * * @param sOp a string such as "-", "sqrt", etc. @@ -100,7 +101,6 @@ DAS_API bool das_op_isUnary(int nOp); /** @} */ - #ifdef __cplusplus } #endif diff --git a/das2/property.h b/das2/property.h index 6c67ef2..0f8e4a9 100644 --- a/das2/property.h +++ b/das2/property.h @@ -27,14 +27,24 @@ extern "C" { #endif +/** @addtogroup DM + * @{ + */ + /** Individual properties of a desciptor. * - * These are designed to fit into continuous DasAry structures. Each property - * has: - * A name, a datatype code, a multiplicity flag, a validity state, units - * and the property buffer. + * DasProp objects assume that some other object, such as a DasAry + * the storage buffer and that these functions configure and read that + * storage. Thus there are no "new_" or "del_" function for properties. + * + * Each property has: + * - A name + * - A UTF-8 encoded value + * - A datatype code + * - A multiplicity flag + * - A validity state + * - Associated units * - * These are put into continuous arrays by over stating the bytes on purpose */ typedef struct das_prop { uint64_t flags; // property type, validity, value offset @@ -43,15 +53,8 @@ typedef struct das_prop { // typically over-malloc'ed. } DasProp; +/** @} */ -/** @name DasProp Functions - * - * DasProp objects assume that some other object, such as a DasAry handle - * the storage buffer and that these functions configure and read that - * storage. Thus there are no "new_" or "del_" function for properties. - */ - -/** @{ */ /** Get required storage space for a property given a name and value. * Note the space is requirements are not sum of the string lengths. @@ -100,71 +103,105 @@ size_t dasprop_memsz(const char* sName, const char* sValue); * @param nStandard. One of 1, 2 or 3 for das1, das2, or das3. For * das2 & 3, property names may only consist of the characters * [a-z][A-Z][0-9] and '_'. + * + * @memberof DasProp */ DasErrCode DasProp_init( ubyte* pBuf, size_t uBufSz, const char* sType, ubyte uType, const char* sName, const char* sValue, char cSep, das_units units, int nStandard ); -/** Return the memory footprint of a property */ +/** Return the memory footprint of a property + * @memberof DasProp + */ size_t DasProp_size(const DasProp* pProp); -/** Get name of a property */ +/** Get name of a property + * @memberof DasProp + */ const char* DasProp_name(const DasProp* pProp); -/** Get the string value for a property */ +/** Get the string value for a property + * @memberof DasProp + */ const char* DasProp_value(const DasProp* pProp); -/** Get the value separator character for array-style properties */ +/** Get the value separator character for array-style properties + * @memberof DasProp + */ char DasProp_sep(const DasProp* pProp); -/** Determine if two properties contain equal content */ +/** Determine if two properties contain equal content + * @memberof DasProp + */ bool DasProp_equal(const DasProp* pOne, const DasProp* pTwo); -/** Get a das2 type string for this property */ +/** Get a das2 type string for this property + * @memberof DasProp + */ const char* DasProp_typeStr2(const DasProp* pProp); -/** Get a das3 type string for this property */ +/** Get a das3 type string for this property + * @memberof DasProp + */ const char* DasProp_typeStr3(const DasProp* pProp); /** Convert integer property values to 64-bit ints * * Returns the number of conversions, or a negative error value + * + * @memberof DasProp */ int DasProp_convertInt(const DasProp* pProp, int64_t* pBuf, size_t uBufLen); /** Convert real-value properties to double * * Returns the number of conversions, or a negative error value + * + * @memberof DasProp */ int DasProp_convertReal(const DasProp* pProp, double* pBuf, size_t uBufLen); /** Convert boolean property values to bytes * * Returns the number of conversions, or a negative error value + * + * @memberof DasProp */ int DasProp_convertBool(const DasProp* pProp, uint8_t* pBuf, size_t uBufLen); -/** Convert datatime properties TT2K long integers */ +/** Convert datatime properties TT2K long integers + * @memberof DasProp + */ int DasProp_convertTt2k(const DasProp* pProp, int64_t* pBuf, size_t uBufLen); -/** Convert datatime properties to a double based value of units */ +/** Convert datatime properties to a double based value of units + * @memberof DasProp + */ int DasProp_convertTime(const DasProp* pProp, uint64_t* pBuf, size_t uBufLen); /** Get a property type code. * * Use the values: DASPROP_MULTI_MASK & DASPROP_TYPE_MASK to extract sections + * + * @memberof DasProp */ ubyte DasProp_type(const DasProp* pProp); /** Mark this property as invalid, this erases the type information and - * is thus a non-reversable operation */ + * is thus a non-reversable operation + * @memberof DasProp + */ void DasProp_invalidate(DasProp* pProp); -/** Determine if this property has a valid type definition */ +/** Determine if this property has a valid type definition + * @memberof DasProp + */ bool DasProp_isValid(const DasProp* pProp); -/** Determine the number of items in a multi valued property */ +/** Determine the number of items in a multi valued property + * @memberof DasProp + */ int DasProp_items(const DasProp* pProp); /** A mask to select a property's multiplicity setting. @@ -194,12 +231,11 @@ int DasProp_items(const DasProp* pProp); #define DASPROP_DAS2 2 #define DASPROP_DAS3 3 -/** Returns true if this property has range multiplicity (aka 2 items) */ +/** Returns true if this property has range multiplicity (aka 2 items) + * @memberof DasProp + */ #define DasProp_isRange(P) (P->flags & DASPROP_RANGE) - -/** @} */ - #ifdef __cplusplus } #endif diff --git a/das2/stream.c b/das2/stream.c index 3b8c5fe..a5083f2 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -60,7 +60,7 @@ StreamDesc* new_StreamDesc() } /* Deep copy a stream descriptor */ -StreamDesc* StreamDesc_copy(const StreamDesc* pThis) +StreamDesc* DasStream_copy(const StreamDesc* pThis) { /* Since this is a deep copy do it by explicit assignment, less likely to * make a mistake that way */ @@ -91,7 +91,7 @@ void del_StreamDesc(StreamDesc* pThis){ } /* ************************************************************************** */ -char* StreamDesc_info(const StreamDesc* pThis, char* sBuf, int nLen) +char* DasStream_info(const StreamDesc* pThis, char* sBuf, int nLen) { if(nLen < 30) return sBuf; @@ -130,7 +130,7 @@ char* StreamDesc_info(const StreamDesc* pThis, char* sBuf, int nLen) /* ************************************************************************** */ /* Adding/Removing detail */ -void StreamDesc_addStdProps(StreamDesc* pThis) +void DasStream_addStdProps(StreamDesc* pThis) { time_t tCur; struct tm* pCur = NULL; @@ -154,7 +154,7 @@ void StreamDesc_addStdProps(StreamDesc* pThis) */ } -void StreamDesc_setMonotonic(StreamDesc* pThis, bool isMonotonic ) +void DasStream_setMonotonic(StreamDesc* pThis, bool isMonotonic ) { if(isMonotonic) DasDesc_setBool( (DasDesc*)pThis, "monotonicXTags", true ); @@ -162,14 +162,14 @@ void StreamDesc_setMonotonic(StreamDesc* pThis, bool isMonotonic ) DasDesc_setBool( (DasDesc*)pThis, "monotonicXTags", false ); } -size_t StreamDesc_getNPktDesc(const StreamDesc* pThis) +size_t DasStream_getNPktDesc(const StreamDesc* pThis) { size_t nRet = 0; for(size_t u = 1; u < MAX_PKTIDS; u++) if(pThis->descriptors[u]) nRet++; return nRet; } -int StreamDesc_nextPktId(StreamDesc* pThis) +int DasStream_nextPktId(StreamDesc* pThis) { for (int i = 1; i < MAX_PKTIDS; ++i){ /* 00 is reserved for stream descriptor */ if(pThis->descriptors[i] == NULL) @@ -178,13 +178,13 @@ int StreamDesc_nextPktId(StreamDesc* pThis) return -1 * das_error(DASERR_STREAM, "Ran out of Packet IDs only 99 allowed!" ); } -PktDesc* StreamDesc_createPktDesc( +PktDesc* DasStream_createPktDesc( StreamDesc* pThis, DasEncoding* pXEncoder, das_units xUnits ){ PktDesc* pPkt; pPkt= new_PktDesc(); - pPkt->id= StreamDesc_nextPktId(pThis); + pPkt->id= DasStream_nextPktId(pThis); pPkt->base.parent=(DasDesc*)pThis; PlaneDesc* pX = new_PlaneDesc(X, "", pXEncoder, xUnits); @@ -194,9 +194,9 @@ PktDesc* StreamDesc_createPktDesc( return pPkt; } -DasErrCode StreamDesc_freeDesc(StreamDesc* pThis, int nPktId) +DasErrCode DasStream_freeSubDesc(StreamDesc* pThis, int nPktId) { - if(!StreamDesc_isValidId(pThis, nPktId)) + if(!DasStream_isValidId(pThis, nPktId)) return das_error(DASERR_STREAM, "%s: stream contains no descriptor for packets " "with id %d", __func__, nPktId); @@ -213,7 +213,7 @@ DasErrCode StreamDesc_freeDesc(StreamDesc* pThis, int nPktId) return DAS_OKAY; } -PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int nPacketId) +PktDesc* DasStream_getPktDesc(const StreamDesc* pThis, int nPacketId) { if(nPacketId < 1 || nPacketId > 99){ das_error(DASERR_STREAM, @@ -225,7 +225,7 @@ PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int nPacketId) return (pDesc == NULL)||(pDesc->type != PACKET) ? NULL : (PktDesc*)pDesc; } -DasDesc* StreamDesc_nextPktDesc(const StreamDesc* pThis, int* pPrevPktId) +DasDesc* DasStream_nextPktDesc(const StreamDesc* pThis, int* pPrevPktId) { int nBeg = *pPrevPktId + 1; if(nBeg < 1){ @@ -242,7 +242,7 @@ DasDesc* StreamDesc_nextPktDesc(const StreamDesc* pThis, int* pPrevPktId) } -void StreamDesc_addCmdLineProp(StreamDesc* pThis, int argc, char * argv[] ) +void DasStream_addCmdLineProp(StreamDesc* pThis, int argc, char * argv[] ) { /* Save up to 1023 bytes of command line info */ char sCmd[1024] = {'\0'}; @@ -270,7 +270,7 @@ void StreamDesc_addCmdLineProp(StreamDesc* pThis, int argc, char * argv[] ) /* ************************************************************************* */ /* Copying stream objects */ -PktDesc* StreamDesc_clonePktDesc(StreamDesc* pThis, const PktDesc* pPdIn) +PktDesc* DasStream_clonePktDesc(StreamDesc* pThis, const PktDesc* pPdIn) { PktDesc* pPdOut; @@ -279,7 +279,7 @@ PktDesc* StreamDesc_clonePktDesc(StreamDesc* pThis, const PktDesc* pPdIn) DasDesc_copyIn((DasDesc*)pPdOut, (DasDesc*)pPdIn); - int id = StreamDesc_nextPktId( pThis ); + int id = DasStream_nextPktId( pThis ); pThis->descriptors[id] = (DasDesc*)pPdOut; pPdOut->id = id; @@ -289,7 +289,7 @@ PktDesc* StreamDesc_clonePktDesc(StreamDesc* pThis, const PktDesc* pPdIn) return pPdOut; } -bool StreamDesc_isValidId(const StreamDesc* pThis, int nPktId) +bool DasStream_isValidId(const StreamDesc* pThis, int nPktId) { if(nPktId > 0 && nPktId < MAX_PKTIDS){ if(pThis->descriptors[nPktId] != NULL) return true; @@ -297,12 +297,12 @@ bool StreamDesc_isValidId(const StreamDesc* pThis, int nPktId) return false; } -PktDesc* StreamDesc_clonePktDescById( +PktDesc* DasStream_clonePktDescById( StreamDesc* pThis, const StreamDesc* pOther, int nPacketId ){ PktDesc* pIn, *pOut; - pIn = StreamDesc_getPktDesc(pOther, nPacketId); + pIn = DasStream_getPktDesc(pOther, nPacketId); if(pThis->descriptors[pIn->id] != NULL){ das_error(DASERR_STREAM, "ERROR: Stream descriptor already has a packet " @@ -325,7 +325,7 @@ PktDesc* StreamDesc_clonePktDescById( return pOut; } -DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, DasDesc* pDesc, int nPktId) +DasErrCode DasStream_addPktDesc(StreamDesc* pThis, DasDesc* pDesc, int nPktId) { /* Only accept either das2 packet descriptors or das3 datasets */ if((pDesc->type != PACKET)&&(pDesc->type != DATASET)) @@ -334,7 +334,7 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, DasDesc* pDesc, int nPktId) if((pDesc->parent != NULL)&&(pDesc->parent != (DasDesc*)pThis)) /* Hint to random developer: If you are here because you wanted to copy * another stream's packet descriptor onto this stream use one of - * StreamDesc_clonePktDesc() or StreamDesc_clonePktDescById() instead. */ + * DasStream_clonePktDesc() or DasStream_clonePktDescById() instead. */ return das_error(DASERR_STREAM, "Packet Descriptor already belongs to different " "stream"); @@ -369,7 +369,7 @@ DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, DasDesc* pDesc, int nPktId) /* ************************************************************************* */ /* Frame wrappers */ -DasFrame* StreamDesc_createFrame( +DasFrame* DasStream_createFrame( StreamDesc* pThis, ubyte id, const char* sName, const char* sType ){ // Find a slot for it. @@ -401,7 +401,7 @@ DasFrame* StreamDesc_createFrame( return pFrame; } -int8_t StreamDesc_getFrameId(const StreamDesc* pThis, const char* sFrame){ +int8_t DasStream_getFrameId(const StreamDesc* pThis, const char* sFrame){ for(int i = 0; i < MAX_FRAMES; ++i){ if(pThis->frames[i] == NULL) continue; @@ -411,7 +411,7 @@ int8_t StreamDesc_getFrameId(const StreamDesc* pThis, const char* sFrame){ return -1 * DASERR_STREAM; } -int StreamDesc_nextFrameId(const StreamDesc* pThis){ +int DasStream_nextFrameId(const StreamDesc* pThis){ for(int i = 0; i < MAX_FRAMES; ++i){ if(pThis->frames[i] == NULL) return i; @@ -419,7 +419,7 @@ int StreamDesc_nextFrameId(const StreamDesc* pThis){ return -1; } -int8_t StreamDesc_getNumFrames(const StreamDesc* pThis) +int8_t DasStream_getNumFrames(const StreamDesc* pThis) { /* Return the ID of the last defined frame */ int8_t iLastGood = -1; @@ -430,12 +430,12 @@ int8_t StreamDesc_getNumFrames(const StreamDesc* pThis) return iLastGood + 1; } -const DasFrame* StreamDesc_getFrame(const StreamDesc* pThis, int idx) +const DasFrame* DasStream_getFrame(const StreamDesc* pThis, int idx) { return (idx < 0 || idx > MAX_FRAMES) ? NULL : pThis->frames[idx]; } -const DasFrame* StreamDesc_getFrameByName( +const DasFrame* DasStream_getFrameByName( const StreamDesc* pThis, const char* sFrame ){ for(size_t u = 0; (u < MAX_FRAMES) && (pThis->frames[u] != NULL); ++u){ @@ -445,7 +445,7 @@ const DasFrame* StreamDesc_getFrameByName( return NULL; } -const DasFrame* StreamDesc_getFrameById(const StreamDesc* pThis, ubyte id) +const DasFrame* DasStream_getFrameById(const StreamDesc* pThis, ubyte id) { for(size_t u = 0; (u < MAX_FRAMES) && (pThis->frames[u] != NULL); ++u){ if(pThis->frames[u]->id == id) @@ -475,7 +475,7 @@ typedef struct parse_stream_desc{ }parse_stream_desc_t; /* Formerly nested function "start" in parseStreamDescriptor */ -void parseStreamDesc_start(void* data, const char* el, const char** attr) +void parseDasStream_start(void* data, const char* el, const char** attr) { int i; parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; @@ -606,7 +606,7 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) return; } - pPsd->pFrame = StreamDesc_createFrame(pSd, nFrameId, sName, sType); + pPsd->pFrame = DasStream_createFrame(pSd, nFrameId, sName, sType); if(!pPsd->pFrame){ pPsd->nRet = das_error(DASERR_STREAM, "Frame definition failed in header"); } @@ -635,7 +635,7 @@ void parseStreamDesc_start(void* data, const char* el, const char** attr) } } -void parseStreamDesc_chardata(void* data, const char* sChars, int len) +void parseDasStream_chardata(void* data, const char* sChars, int len) { parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; @@ -651,7 +651,7 @@ void parseStreamDesc_chardata(void* data, const char* sChars, int len) } /* Formerly nested function "end" in parseStreamDescriptor */ -void parseStreamDesc_end(void* data, const char* el) +void parseDasStream_end(void* data, const char* el) { parse_stream_desc_t* pPsd = (parse_stream_desc_t*)data; @@ -696,7 +696,7 @@ void parseStreamDesc_end(void* data, const char* el) DasAry_clear(pAry); } -StreamDesc* new_StreamDesc_str(DasBuf* pBuf, int nModel) +StreamDesc* new_DasStream_str(DasBuf* pBuf, int nModel) { StreamDesc* pThis = new_StreamDesc(); @@ -725,8 +725,8 @@ StreamDesc* new_StreamDesc_str(DasBuf* pBuf, int nModel) DasAry_init(&(psd.aPropVal), "streamprops", vtUByte, 0, NULL, RANK_1(0), NULL); XML_SetUserData(p, (void*) &psd); - XML_SetElementHandler(p, parseStreamDesc_start, parseStreamDesc_end); - XML_SetCharacterDataHandler(p, parseStreamDesc_chardata); + XML_SetElementHandler(p, parseDasStream_start, parseDasStream_end); + XML_SetCharacterDataHandler(p, parseDasStream_chardata); int nParRet = XML_Parse(p, pBuf->pReadBeg, DasBuf_unread(pBuf), true); XML_ParserFree(p); @@ -748,7 +748,7 @@ StreamDesc* new_StreamDesc_str(DasBuf* pBuf, int nModel) return pThis; } -DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf) +DasErrCode DasStream_encode(StreamDesc* pThis, DasBuf* pBuf) { DasErrCode nRet = 0; if((nRet = DasBuf_printf(pBuf, " - * Chris Piker +/* Copyright (C) 2015-2024 Chris Piker + * + * Adapted from: + * Copyright (C) 2006 Jeremy Faden * - * This file is part of libdas2, the Core Das2 C Library. + * This file is part of das2C, the Core Das2 C Library. * - * Libdas2 is free software; you can redistribute it and/or modify it under + * das2C is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 2.1 as published * by the Free Software Foundation. * - * Libdas2 is distributed in the hope that it will be useful, but WITHOUT ANY + * das2C is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License - * version 2.1 along with libdas2; if not, see . + * version 2.1 along with das2C; if not, see . */ -/** @file stream.h Objects representing a Das2 Stream as a whole */ +/** @file stream.h Objects representing a single das stream */ #ifndef _das_stream_h_ #define _das_stream_h_ @@ -40,8 +42,14 @@ extern "C" { #define MAX_PKTIDS 100 #define MAX_FRAMES 12 -/** @defgroup streams Streams - * Classes for handling interleaved self-describing data streams + +/** @defgroup DM Data Model + * Classes and functions for storing and manipulating correlated data values + */ + + +/** @addtogroup DM + * @{ */ /** Describes the stream itself, in particular the compression used, @@ -50,11 +58,11 @@ extern "C" { * This is a container for top-level stream descriptor objects. The * data owner ship model for das2C is: * - * StreamDesc -> PktDesc -> PlaneDesc -> 1-row of data - * -> DasDs -> DasAry -> arbitrary rows of data + * DasStream -> PktDesc -> PlaneDesc -> 1-row of data + * -> DasDs -> DasAry -> arbitrary rows of data * -> DasDim -> DasVar (Structure access to DasDs Arrays) * - * Anything not owned by StreamDesc is considered OOB (Out Of Band) data. + * Anything not owned by DasStream is considered OOB (Out Of Band) data. * * All top level descriptors my be accessed by an integer ID. There is one * ID space for all desciptors, not a separate one for datasets (das3) @@ -81,7 +89,7 @@ extern "C" { * @nosubgrouping * @ingroup streams */ -typedef struct stream_descriptor{ +typedef struct das_stream{ /** The base structure */ DasDesc base; @@ -113,27 +121,40 @@ typedef struct stream_descriptor{ * to NULL when a PacketDescriptor is created otherwise the library * doesn't deal with it in any other way. */ void* pUser; -} StreamDesc; +} DasStream; + +/** @} */ +/** Compatability macro + * For backwards compatability, all functions with the name pattern + * *DasStream* are also have a macro alias to *StreamDesc*. + */ +#define StreamDesc DasStream /** Creates a new blank StreamDesc. * The returned structure has no packet descriptors, no properties are defined. * The compression attribute is set to 'none' and the version is set to 2.2 * - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API StreamDesc* new_StreamDesc(void); +DAS_API DasStream* new_DasStream(void); + +#define new_StreamDesc new_DasStream -DAS_API StreamDesc* new_StreamDesc_str(DasBuf* pBuf, int nModel); +DAS_API DasStream* new_DasStream_str(DasBuf* pBuf, int nModel); + +#define new_StreamDesc_str new_DasStream_str /** Print a short description of the stream to a string buffer, * This is not a serialization, just an overview * - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API char* StreamDesc_info(const StreamDesc* pSd, char* sBuf, int nLen); +DAS_API char* DasStream_info(const DasStream* pSd, char* sBuf, int nLen); + +#define StreamDesc_info DasStream_info -/** Creates a deep-copy of an existing StreamDesc object. +/** Creates a deep-copy of an existing DasStream object. * * An existing stream descriptor, probably one initialized automatically by * reading standard input, can be used as a template for generating a second @@ -144,25 +165,28 @@ DAS_API char* StreamDesc_info(const StreamDesc* pSd, char* sBuf, int nLen); * @return A new stream descriptor allocated on the heap with all associated * packet descriptors attached and also allocated on the heap * - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API StreamDesc* StreamDesc_copy(const StreamDesc* pThis); +DAS_API DasStream* DasStream_copy(const DasStream* pThis); +#define StreamDesc_copy DasStream_copy /** Delete a stream descriptor and all it's sub objects * * @param pThis The stream descriptor to erase, the pointer should be set * to NULL by the caller. * - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API void del_StreamDesc(StreamDesc* pThis); +DAS_API void del_DasStream(DasStream* pThis); + +#define del_StreamDesc del_DasStream /** Get the number of packet descriptors defined for this stream * * @warning It is possible to have a non-contiguous set of Packet IDs. Unless * the application insures by some mechanism that packet IDs are not - * skipped when calling functions like StreamDesc_addPktDesc() then + * skipped when calling functions like DasStream_addPktDesc() then * the results of this function will not useful for iteration. * * @param pThis The stream descriptor to query @@ -172,9 +196,11 @@ DAS_API void del_StreamDesc(StreamDesc* pThis); * return value as all possible packet ID's are tested to see home many * are defined. * - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API size_t StreamDesc_getNPktDesc(const StreamDesc* pThis); +DAS_API size_t DasStream_getNPktDesc(const DasStream* pThis); + +#define StreamDesc_getNPktDesc DasStream_getNPktDesc /** Iterate over packet descriptiors * @@ -183,7 +209,7 @@ DAS_API size_t StreamDesc_getNPktDesc(const StreamDesc* pThis); * @code * int nPktId = 0; * DasDesc* pDesc = NULL; - * while((pDesc = StreamDesc_nextPktDesc(pSd, &nPktId)) != NULL){ + * while((pDesc = DasStream_nextPktDesc(pSd, &nPktId)) != NULL){ * // Do stuff * // call DasDesc_type() to further sub-divide actions * } @@ -197,9 +223,11 @@ DAS_API size_t StreamDesc_getNPktDesc(const StreamDesc* pThis); * @returns The packet descriptor for the next valid packet ID, or NULL if * there was no next valid packet descriptor. * - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API DasDesc* StreamDesc_nextPktDesc(const StreamDesc* pThis, int* pPrevPktId); +DAS_API DasDesc* DasStream_nextPktDesc(const DasStream* pThis, int* pPrevPktId); + +#define StreamDesc_nextPktDesc DasStream_nextPktDesc /** Attach a packet descriptor to this stream. * @@ -215,29 +243,36 @@ DAS_API DasDesc* StreamDesc_nextPktDesc(const StreamDesc* pThis, int* pPrevPktId * * @param nPktId The ID for the new packet descriptor. * @return 0 on success or a positive error code on failure. - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API DasErrCode StreamDesc_addPktDesc(StreamDesc* pThis, DasDesc* pDesc, int nPktId); +DAS_API DasErrCode DasStream_addPktDesc(DasStream* pThis, DasDesc* pDesc, int nPktId); +#define StreamDesc_addPktDesc DasStream_addPktDesc /** Indicates if the xtags on the stream are monotonic, in which * case there might be optimal ways of processing the stream. - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API void StreamDesc_setMonotonic(StreamDesc* pThis, bool isMonotonic ); +DAS_API void DasStream_setMonotonic(DasStream* pThis, bool isMonotonic ); + +#define StreamDesc_setMonotonic DasStream_setMonotonic -/** Adds metadata into the property set of the StreamDesc. These include +/** Adds metadata into the property set of the DasStream. These include * the creation time, the source Id, the process id, the command line, and * hostname. - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API void StreamDesc_addStdProps(StreamDesc* pThis); +DAS_API void DasStream_addStdProps(DasStream* pThis); -/** Adds the command line into the property set of the StreamDesc. +#define StreamDesc_addStdProps DasStream_addStdProps + +/** Adds the command line into the property set of the DasStream. * This can be useful when debugging. - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API void StreamDesc_addCmdLineProp(StreamDesc* pThis, int argc, char* argv[] ); +DAS_API void DasStream_addCmdLineProp(DasStream* pThis, int argc, char* argv[] ); + +#define StreamDesc_addCmdLineProp DasStream_addCmdLineProp /** Creates a descriptor structure that for a stream packet type. * @@ -254,18 +289,20 @@ DAS_API void StreamDesc_addCmdLineProp(StreamDesc* pThis, int argc, char* argv[] * UNIT_HERTZ, UNIT_DB). * * @param pXEncoder The encoder for X-plane values on this stream. The - * StreamDesc object takes ownership of the encoder's memory. + * DasStream object takes ownership of the encoder's memory. * * @returns A pointer to new PacketDescriptor object allocated on the heap. * This pointer is also stored in the - * StreamDesc::packetDescriptors member variable of @a pThis. + * DasStream::packetDescriptors member variable of @a pThis. * - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API PktDesc* StreamDesc_createPktDesc( - StreamDesc* pThis, DasEncoding* pXEncoder, das_units xUnits +DAS_API PktDesc* DasStream_createPktDesc( + DasStream* pThis, DasEncoding* pXEncoder, das_units xUnits ); +#define StreamDesc_createPktDesc DasStream_createPktDesc + /** Define a new vector direction frame for the stream. * @see new_DasFrame for arguments * @@ -273,17 +310,21 @@ DAS_API PktDesc* StreamDesc_createPktDesc( * Note that each coordinate frame in the same stream must have * a different name * - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API DasFrame* StreamDesc_createFrame( - StreamDesc* pThis, ubyte id, const char* sName, const char* sType +DAS_API DasFrame* DasStream_createFrame( + DasStream* pThis, ubyte id, const char* sName, const char* sType ); +#define StreamDesc_createFrame DasStream_createFrame + /** Get the next open frame ID * * @returns then next valid frame ID or a negative DasErrCode if no more frames are allowed */ -DAS_API int StreamDesc_nextFrameId(const StreamDesc* pThis); +DAS_API int DasStream_nextFrameId(const DasStream* pThis); + +#define StreamDesc_nextFrameId DasStream_nextFrameId /** Make a deep copy of a PacketDescriptor on a new stream. * This function makes a deep copy of the given packet descriptor and @@ -294,9 +335,11 @@ DAS_API int StreamDesc_nextFrameId(const StreamDesc* pThis); * @param pThis the stream to get the new packet descriptor * @param pd The packet descriptor to clone onto the stream * @returns The newly created packet descriptor - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API PktDesc* StreamDesc_clonePktDesc(StreamDesc* pThis, const PktDesc* pd); +DAS_API PktDesc* DasStream_clonePktDesc(DasStream* pThis, const PktDesc* pd); + +#define StreamDesc_clonePktDesc DasStream_clonePktDesc /** Deepcopy a PacketDescriptor from one stream to another. * The copy made by this function handles recursing down to all the planes @@ -308,12 +351,14 @@ DAS_API PktDesc* StreamDesc_clonePktDesc(StreamDesc* pThis, const PktDesc* pd); * inclusive. * @returns The newly created packet descriptor, or NULL if there was no * packet descriptor with that ID in the source. - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API PktDesc* StreamDesc_clonePktDescById( - StreamDesc* pThis, const StreamDesc* pOther, int nPktId +DAS_API PktDesc* DasStream_clonePktDescById( + DasStream* pThis, const DasStream* pOther, int nPktId ); +#define StreamDesc_clonePktDescById DasStream_clonePktDescById + /** Check to see if an packet ID has been defined for the stream * * @param pThis The stream to check @@ -321,7 +366,9 @@ DAS_API PktDesc* StreamDesc_clonePktDescById( * @return true if a packet of that type is defined on the stream false * otherwise */ -DAS_API bool StreamDesc_isValidId(const StreamDesc* pThis, int nPktId); +DAS_API bool DasStream_isValidId(const DasStream* pThis, int nPktId); + +#define StreamDesc_isValidId DasStream_isValidId /** Get the packet descriptor associated with an ID. * @@ -330,9 +377,11 @@ DAS_API bool StreamDesc_isValidId(const StreamDesc* pThis, int nPktId); * * @returns NULL if there is no packet descriptor associated with the * given Packet ID - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int id); +DAS_API PktDesc* DasStream_getPktDesc(const DasStream* pThis, int id); + +#define StreamDesc_getPktDesc DasStream_getPktDesc /** Get a frame pointer by it's index @@ -343,59 +392,74 @@ DAS_API PktDesc* StreamDesc_getPktDesc(const StreamDesc* pThis, int id); * descriptor itself * * @returns NULL if there is no frame at the given index - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API const DasFrame* StreamDesc_getFrame(const StreamDesc* pThis, int idx); +DAS_API const DasFrame* DasStream_getFrame(const DasStream* pThis, int idx); + +#define StreamDesc_getFrame DasStream_getFrame /** Return the number of frames defined in the stream */ -DAS_API int8_t StreamDesc_getNumFrames(const StreamDesc* pThis); +DAS_API int8_t DasStream_getNumFrames(const DasStream* pThis); + +#define StreamDesc_getNumFrames DasStream_getNumFrames /** Get a frame index given it's name * * @returns negative DasErrCode if there's no frame for the given name */ -DAS_API int8_t StreamDesc_getFrameId(const StreamDesc* pThis, const char* sFrame); +DAS_API int8_t DasStream_getFrameId(const DasStream* pThis, const char* sFrame); +#define StreamDesc_getFrameId DasStream_getFrameId /** Get a frame pointer by it's name * * @param sFrame the name of a frame pointer * @returns NULL if there is no frame by that name * - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API const DasFrame* StreamDesc_getFrameByName( - const StreamDesc* pThis, const char* sFrame +DAS_API const DasFrame* DasStream_getFrameByName( + const DasStream* pThis, const char* sFrame ); +#define StreamDesc_getFrameByName DasStream_getFrameByName + /** Get a frame pointer by it's id * * @param id the numeric ID of a frame as stored in das_vector * @returns NULL if there is no frame by that name * - * @memberof StreamDesc + * @memberof DasStream */ -const DasFrame* StreamDesc_getFrameById(const StreamDesc* pThis, ubyte id); +const DasFrame* DasStream_getFrameById(const DasStream* pThis, ubyte id); + +#define StreamDesc_getFrameById DasStream_getFrameById /** Free any resources associated with this PacketDescriptor, * and release it's id number for use with a new PacketDescriptor. - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API DasErrCode StreamDesc_freeDesc(StreamDesc* pThis, int nPktId); +DAS_API DasErrCode DasStream_freeSubDesc(DasStream* pThis, int nPktId); + +#define StreamDesc_freeDesc DasStream_freeSubDesc /** An I/O function that makes sense to use for either operation - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API int StreamDesc_getOffset(StreamDesc* pThis); +DAS_API int DasStream_getOffset(DasStream* pThis); -/** Encode a StreamDesc to an XML string +#define StreamDesc_getOffset DasStream_getOffset + +/** Encode a DasStream to an XML string * * @param pThis The stream descriptor to encode * @param pBuf A DasBuffer item to receive the bytes * @return 0 if encoding succeeded, a non-zero error code otherwise - * @memberof StreamDesc + * @memberof DasStream */ -DAS_API DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf); +DAS_API DasErrCode DasStream_encode(DasStream* pThis, DasBuf* pBuf); + +#define StreamDesc_encode DasStream_encode /** Packtized Stream Descriptor Factory Function * @@ -412,9 +476,10 @@ DAS_API DasErrCode StreamDesc_encode(StreamDesc* pThis, DasBuf* pBuf); * on the data received, or NULL if the input could not be parsed. */ DAS_API DasDesc* DasDesc_decode( - DasBuf* pBuf, StreamDesc* pSd, int nPktId, int nModel + DasBuf* pBuf, DasStream* pSd, int nPktId, int nModel ); + #ifdef __cplusplus } #endif diff --git a/das2/time.h b/das2/time.h index a23649f..678918f 100644 --- a/das2/time.h +++ b/das2/time.h @@ -19,15 +19,10 @@ /** @file time.h Das Time Utilities */ -/** @defgroup time Time - * Parsing and converting calendar dates and times - */ - -/** @addtogroup time +/** @addtogroup values * @{ */ - #ifndef _das_time_h_ #define _das_time_h_ @@ -75,6 +70,8 @@ typedef struct das_time_t{ } das_time; +/** @} */ + /* A version of above that would only use 16 bytes instead of 32 .... to implement and test later @@ -338,8 +335,6 @@ DAS_API void dt_tnorm(das_time* dt); /* return Julian Day number given year, month, and day, not exported no purpose */ int jday (int year, int month, int day); -/** @} */ - #ifdef __cplusplus } #endif diff --git a/das2/units.h b/das2/units.h index c3ef5eb..63b6850 100644 --- a/das2/units.h +++ b/das2/units.h @@ -35,44 +35,44 @@ bool units_init(const char* sProgName); #ifndef _das_units_c_ -extern const char* UNIT_US2000; /* microseconds since midnight, Jan 1, 2000 */ -extern const char* UNIT_MJ1958; /* days since midnight, Jan 1, 1958 */ -extern const char* UNIT_T2000; /* seconds since midnight, Jan 1, 2000 */ -extern const char* UNIT_T1970; /* seconds since midnight, Jan 1, 1970 */ -extern const char* UNIT_NS1970; /* nanoseconds since midnight, Jan 1, 1970 */ -extern const char* UNIT_UTC; /* Time strings on the Gregorian Calendar */ - -/* nanoseconds since 2000-01-01T11:58:55.816, the only leap-second aware time +extern const char* UNIT_US2000; /** Units of microseconds since midnight, Jan 1, 2000 */ +extern const char* UNIT_MJ1958; /** Units of days since midnight, Jan 1, 1958 */ +extern const char* UNIT_T2000; /** Units of seconds since midnight, Jan 1, 2000 */ +extern const char* UNIT_T1970; /** Units of seconds since midnight, Jan 1, 1970 */ +extern const char* UNIT_NS1970; /** Units of nanoseconds since midnight, Jan 1, 1970 */ +extern const char* UNIT_UTC; /** Time strings on the Gregorian Calendar */ + +/** nanoseconds since 2000-01-01T11:58:55.816, the only leap-second aware time unit in the library. Uses the CDF_LEAPSECONDSTABLE environment variable to find new leap seconds. Not needed if library has been build since last know leapsecond in the data time. */ extern const char* UNIT_TT2000; /* Other common units */ -extern const char* UNIT_SECONDS; -extern const char* UNIT_HOURS; -extern const char* UNIT_DAYS; -extern const char* UNIT_MILLISECONDS; -extern const char* UNIT_MICROSECONDS; -extern const char* UNIT_NANOSECONDS; - -extern const char* UNIT_HERTZ; -extern const char* UNIT_KILO_HERTZ; -extern const char* UNIT_MEGA_HERTZ; -extern const char* UNIT_E_SPECDENS; -extern const char* UNIT_B_SPECDENS; -extern const char* UNIT_NT; - -extern const char* UNIT_NUMBER_DENS; +extern const char* UNIT_SECONDS; /** Units of SI Seconds */ +extern const char* UNIT_HOURS; /** Units of 3600 seconds */ +extern const char* UNIT_DAYS; /** Units of 86400 seconds */ +extern const char* UNIT_MILLISECONDS; /** Units of SI milliseconds */ +extern const char* UNIT_MICROSECONDS; /** Units of SI microseconds */ +extern const char* UNIT_NANOSECONDS; /** Units of SI nanoseconds */ + +extern const char* UNIT_HERTZ; /** Units of 1/seconds */ +extern const char* UNIT_KILO_HERTZ; /** Units of 1/milliseconds */ +extern const char* UNIT_MEGA_HERTZ; /** Units of 1/microseconds */ +extern const char* UNIT_E_SPECDENS; /** Volts squared per meter squared per hertz */ +extern const char* UNIT_B_SPECDENS; /** nanoTesla squared per hertz */ +extern const char* UNIT_NT; /** SI nanoTesla */ + +extern const char* UNIT_NUMBER_DENS; /** Number of items per centimeter cubed */ -extern const char* UNIT_DB; +extern const char* UNIT_DB; /** decibels (a ratio unit) */ -extern const char* UNIT_KM; +extern const char* UNIT_KM; /** SI kilometers */ -extern const char* UNIT_EV; +extern const char* UNIT_EV; /** electron volts */ -extern const char* UNIT_DEGREES; -extern const char* UNIT_DIMENSIONLESS; +extern const char* UNIT_DEGREES; /** degrees, 360 of them in a circle */ +extern const char* UNIT_DIMENSIONLESS; /** No units, a pure number such as a linear ratio */ /* color: Color should be handled as as vector, we don't have * support for vectors at this time. Also a datatype of @@ -83,15 +83,11 @@ extern const char* UNIT_DIMENSIONLESS; #endif -/** @defgroup units Units - * General unit normalization and manipulation with a focus on SI units - */ - -/** @addtogroup units +/** @addtogroup values * @{ */ -/** Enumeration of unit types, that correspond to physical unit types. +/** Handle SI and other units, with accommodations for Epoch systems, from units.h * * Note that although these are strings, Units_fromStr() should be be * used to get a reference to the enumerated string since *pointer equality* @@ -142,6 +138,7 @@ extern const char* UNIT_DIMENSIONLESS; */ typedef const char* das_units; +/** @} */ /** Basic constructor for das_unit's * @@ -151,6 +148,7 @@ typedef const char* das_units; * units are used, or that new unit types are created via this function. * * @returns a pointer to the singleton string representing these units. + * @memberof das_units */ DAS_API das_units Units_fromStr(const char* string); @@ -159,6 +157,7 @@ DAS_API das_units Units_fromStr(const char* string); * Even though das_unit is a const char*, this function should be used in case * the das_unit implementation is changed in the future. * @see Units_toLabel() + * @relates das_units */ DAS_API const char* Units_toStr(das_units unit); @@ -404,8 +403,6 @@ DAS_API int Units_getJulianDay( double timeDouble, das_units epoch_units ); */ DAS_API bool Units_canMerge(das_units left, int op, das_units right); -/** @} */ - #ifdef __cplusplus } #endif diff --git a/das2/value.h b/das2/value.h index 2d980da..9e3fe0b 100644 --- a/das2/value.h +++ b/das2/value.h @@ -29,7 +29,7 @@ extern "C" { #endif /** @defgroup values Values - * Basic data storage elements + * Physical data values, including time, and thier units */ /** Canonical fill value (*/ @@ -53,9 +53,13 @@ typedef struct das_byteseq_t{ #define VT_MIN_SIMPLE vtUByte #define VT_MAX_SIMPLE vtTime -/** Enumeration of types stored in Das Array (DasAry) objects +/** Enumeration of types stored in Das Array (DasAry) objects from value.h + * * Note that any kind of value may be stored in a Das Array, but most of these * types have runtime type safty checks. + * + * @see value.h for a list of functions for worknig with the the das_val_type + * enumeration */ typedef enum das_val_type_e { @@ -134,6 +138,8 @@ typedef enum das_val_type_e { } das_val_type; +/** @} */ + /** Get a storage value type given the common packet encodings * @@ -153,18 +159,25 @@ typedef enum das_val_type_e { * @param sInterp - Ignored unless the encoding is utf8, otherwise one of * the values: * bool, datetime, int, real, string - * */ + */ DAS_API das_val_type das_vt_store_type( const char* sEncType, int nItemBytes, const char* sInterp ); +/** Is this value type an integer of some sort + * @memberof das_val_type + */ #define das_vt_isint(VT) ( VT >= vtUByte && VT <= vtLong ) +/** Is this value type an real value of some sort + * @memberof das_val_type + */ #define das_vt_isreal(VT) ( VT == vtFloat && VT == vtDouble ) /** Get the rank of a value type * * Most items are scalars (rank 0), but strings and vectors are rank 1 + * @memberof das_val_type */ #define das_vt_rank(VT) ( ((VT==vtGeoVec)||(VT==vtText)||(VT==vtByteSeq)) ? 1:0) @@ -172,16 +185,25 @@ DAS_API das_val_type das_vt_store_type( /** Get the default fill value for a given element type * @return a pointer to the default fill value, will have to cast to the * appropriate type. + * + * @memberof das_val_type */ DAS_API const void* das_vt_fill(das_val_type vt); -/** Get the size in bytes for a given element type */ +/** Get the size in bytes for a given element type + * + * @memberof das_val_type + */ DAS_API size_t das_vt_size(das_val_type vt); -/** Get a text string representation of an element type */ +/** Get a text string representation of an element type + * @memberof das_val_type + */ DAS_API const char* das_vt_toStr(das_val_type vt); -/** Convert a text string representation */ +/** Convert a text string representation to a value type enumeration + * @memberof das_val_type + */ DAS_API das_val_type das_vt_fromStr(const char* sType); @@ -392,8 +414,6 @@ DAS_API char* das_doubles2csv(char* pBuf, size_t uBufSz, const double* pValues, /** Similar to das_doubles2csv, but for 32-bit floats */ DAS_API char* das_floats2csv(char* pBuf, size_t uBufSz, const float* pValues, int nValues); -/** @} */ - #ifdef __cplusplus } diff --git a/das2/variable.h b/das2/variable.h index 12199a5..c375c93 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -28,10 +28,6 @@ #ifdef __cplusplus extern "C" { #endif - -/** @addtogroup datasets - * @{ - */ /* Current max length of a vector (internal index) can be changed */ #define D2V_MAX_VEC_LEN 4 @@ -108,6 +104,10 @@ DAS_API ptrdiff_t das_varlength_merge(ptrdiff_t nLeft, ptrdiff_t nRight); */ DAS_API void das_varindex_prndir(bool bFastLast); +/** @addtogroup DM + * @{ + */ + /** Das2 fexible variables * * Like arrays, das2 variables are objects which produce values given a set @@ -243,7 +243,6 @@ DAS_API void das_varindex_prndir(bool bFastLast); * @see Dataset * @see Dimension * @see Array - * @extends DasDesc */ typedef struct das_variable{ enum var_type vartype; /* CONST, ARRAY, SEQUENCE, UNARY_OP, BINARY_OP ... */ @@ -346,6 +345,7 @@ typedef struct das_variable{ } DasVar; +/** @} */ /** Create a new variable from unary operation on an existing variable. * @@ -371,7 +371,7 @@ typedef struct das_variable{ * @returns A new DasVar allocated on the heap with it's reference count set * to one. * @memberof DasVar - * @see new_DasVarEval + * @see new_DasVarArray new_DasVarVecAry new_DasVarUnary */ DAS_API DasVar* new_DasVarUnary(const char* sOp, const DasVar* pVar); @@ -422,7 +422,7 @@ DAS_API DasVar* new_DasVarUnary_tok(int nOpTok, const DasVar* pVar); * @returns the new variable or NULL if an error occurred such as an unknown * operator string. * @memberof DasVar - * @see new_DasVarEval + * @see new_DasVarArray new_DasVarVecAry new_DasVarUnary */ DAS_API DasVar* new_DasVarBinary( const char* sId, DasVar* pLeft, const char* sOp, DasVar* pRight @@ -580,6 +580,8 @@ DAS_API DasVar* new_DasVarArray(DasAry* pAry, int nExtRank, int8_t* pMap, int nI * of each vector, may be NULL. * * @param nDirs The number of directions in the vector direction map, can be 0 + * + * @memberof DasVar */ DAS_API DasVar* new_DasVarVecAry( DasAry* pAry, int nExtRank, int8_t* pMap, int nIntRank, @@ -610,26 +612,37 @@ DAS_API int inc_DasVar(DasVar* pThis); DAS_API int dec_DasVar(DasVar* pThis); -/** Get number of references */ +/** Get number of references + * @memberof DasVar + */ int ref_DasVar(const DasVar* pThis); -/** Get id token for variable, may be NULL for anoymous vars */ +/** Get id token for variable, may be NULL for anoymous vars + * @memberof DasVar + */ const char* DasVar_id(const DasVar* pThis); -/** Get the type of variable */ +/** Get the type of variable + * @memberof DasVar + */ enum var_type DasVar_type(const DasVar* pThis); -/** Get the type of values held by the variable */ +/** Get the type of values held by the variable + * @memberof DasVar + */ das_val_type DasVar_valType(const DasVar* pThis); -/** Get the size in bytes of each value */ +/** Get the size in bytes of each value + * @memberof DasVar + */ size_t DasVar_valSize(const DasVar* pThis); /** Get the units for the values. * * @warning For some vectors, only the magnitude has these units. * To determine if this is the case use - * */ + * @memberof DasVar + */ das_units DasVar_units(const DasVar* pThis); @@ -641,7 +654,8 @@ das_units DasVar_units(const DasVar* pThis); */ DAS_API DasAry* DasVarAry_getArray(DasVar* pThis); -/** Evaluate all sub-variable expressions and a single array variable + +/* Evaluate all sub-variable expressions and a single array variable */ DAS_API DasVar* new_DasVarEval(const DasVar* pVar); @@ -744,6 +758,7 @@ DAS_API int DasVar_intrShape(const DasVar* pThis, ptrdiff_t* pShape); * if this variable returns computed results for this location. * * @see DasAry_lengthIn + * @memberof DasVar */ DAS_API ptrdiff_t DasVar_lengthIn(const DasVar* pThis, int nIdx, ptrdiff_t* pLoc); @@ -758,6 +773,7 @@ DAS_API ptrdiff_t DasVar_lengthIn(const DasVar* pThis, int nIdx, ptrdiff_t* pLoc * @param nLen the length of the string buffer. This function will * not write more than nLen - 1 bytes to the buffer and will * insure NULL termination + * @memberof DasVar */ DAS_API char* DasVar_toStr(const DasVar* pThis, char* sBuf, int nLen); @@ -787,6 +803,8 @@ DAS_API char* DasVar_toStr(const DasVar* pThis, char* sBuf, int nLen); * @return True if the output a DasVar_getDatum() call (or the use of * an iterator) will produce datums whose values are convertable * to doubles. False othewise. + * + * @memberof DasVar */ DAS_API bool DasVar_isNumeric(const DasVar* pThis); @@ -829,6 +847,8 @@ DAS_API bool DasVar_get( * @param vt The type of the value to check. * * @returns true if this is a fill value, false otherwise. + * + * @memberof DasVar */ DAS_API bool DasVar_isFill( const DasVar* pThis, const ubyte* pCheck, das_val_type vt diff --git a/notes/das_containers.odg b/notes/das_containers.odg new file mode 100644 index 0000000000000000000000000000000000000000..c44d4f8090ca38419eb1f203f48952aa44d8af4f GIT binary patch literal 29268 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 S_ioQ0KTMA)8prPU*8c;_q76O( literal 0 HcmV?d00001 diff --git a/notes/das_containers.png b/notes/das_containers.png new file mode 100644 index 0000000000000000000000000000000000000000..111289a3a0d51cdbe46bb3d359ee6200bfa7252f GIT binary patch literal 92963 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 Date: Wed, 28 Feb 2024 01:48:22 -0600 Subject: [PATCH 35/40] First vector CDF test passes --- buildfiles/Linux.mak | 2 +- das2/datum.c | 10 ++ das2/datum.h | 9 +- das2/defs.h | 3 + das2/dimension.c | 12 +- das2/dimension.h | 21 ++- das2/frame.c | 4 +- das2/frame.h | 4 + das2/property.c | 4 +- das2/serial.c | 235 +++++++++++++++++++++---------- das2/stream.c | 25 +++- das2/stream.h | 12 +- das2/time.h | 2 +- das2/variable.c | 59 ++++++-- das2/variable.h | 23 +-- das2/vector.h | 27 +++- schema/das-basic-stream-v3.0.xsd | 15 +- utilities/das3_cdf.c | 32 ++++- 18 files changed, 366 insertions(+), 133 deletions(-) diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index f1d0a47..79caf0b 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -168,7 +168,7 @@ $(BD)/das2_psd:$(BD)/das2_psd.o $(BD)/send.o $(BD)/$(TARG).a cdf:$(BD)/das3_cdf -$(BD)/das3_cdf:$(BD)/das3_cdf.o +$(BD)/das3_cdf:$(BD)/das3_cdf.o $(BD)/$(TARG).a @echo "An example CDF_INC value would be: /usr/local/include" @echo "An example CDF_LIB value would be: /usr/local/lib/libcdf.a" @if [ "$(CDF_INC)" = "" ] ; then echo "CDF_INC not set"; exit 3; fi diff --git a/das2/datum.c b/das2/datum.c index f0d084d..c5a1cd8 100644 --- a/das2/datum.c +++ b/das2/datum.c @@ -132,6 +132,16 @@ ptrdiff_t das_datum_shape0(const das_datum* pThis) } } +das_val_type das_datum_elemType(const das_datum* pThis) +{ + switch(pThis->vt){ + case vtText: return vtUByte; + case vtByteSeq: return vtUByte; + case vtGeoVec: return das_geovec_eltype( (das_geovec*)pThis ); + default: return pThis->vt; + } +} + /* This one is simple */ bool das_datum_wrapStr(das_datum* pDatum, das_units units, const char* sStr) { diff --git a/das2/datum.h b/das2/datum.h index a9382b5..413285e 100644 --- a/das2/datum.h +++ b/das2/datum.h @@ -73,7 +73,12 @@ typedef struct datum_t { /** @} */ -/** Check to seef if a datum has been initialized. +/** Same datums have extended storage such as byte strings + * and geovectors. Get the fundamental element type for a datum. + * @memberof das_datum*/ +DAS_API das_val_type das_datum_elemType(const das_datum* pThis); + +/** Check to see if a datum has been initialized. * * Note that a datum containing a fill value is still a valid datum for the * purposes of this macro. @@ -87,7 +92,7 @@ typedef struct datum_t { */ #define das_datum_valid(p) ((p)->vsize > 0) -ptrdiff_t das_datum_shape0(const das_datum* pThis); +DAS_API ptrdiff_t das_datum_shape0(const das_datum* pThis); /** Initialize a numeric datum from a value and units string. * diff --git a/das2/defs.h b/das2/defs.h index cbd2969..1f62d93 100644 --- a/das2/defs.h +++ b/das2/defs.h @@ -126,6 +126,9 @@ #define DAS_DSEPS "/" #endif +/** Returns the size of a structure field at compile time */ +#define DAS_FIELD_SZ(type, field) (sizeof(((type*)NULL)->field)) + #ifdef __cplusplus extern "C" { #endif diff --git a/das2/dimension.c b/das2/dimension.c index c3a5c65..2b4dd83 100644 --- a/das2/dimension.c +++ b/das2/dimension.c @@ -149,7 +149,7 @@ char* DasDim_toStr(const DasDim* pThis, char* sBuf, int nLen) if(pThis->axes[iAxis][0] != '\0'){ if(iAxis == 0){ strcpy(pWrite, " | axis: "); - *pWrite += 9; nLen -= 9; + pWrite += 9; nLen -= 9; } else{ *pWrite = ','; ++pWrite; --nLen; @@ -298,6 +298,16 @@ DasVar* DasDim_popVar(DasDim* pThis, const char* role){ return pRet; } +/* Vector frames ********************************************************** */ + +const char* DasDim_setFrame(DasDim* pThis, const char* sFrame){ + const char* sRet = pThis->frame; + + strncpy(pThis->frame, sFrame, DASFRM_NAME_SZ-1); + + return sRet; +} + /* Construction / Destruction ********************************************* */ DasDim* new_DasDim(const char* sDim, const char* sId, enum dim_type dtype, int nDsRank) diff --git a/das2/dimension.h b/das2/dimension.h index 33f1e3d..7b04d10 100644 --- a/das2/dimension.h +++ b/das2/dimension.h @@ -213,6 +213,26 @@ DAS_API DasDim* new_DasDim(const char* sDim, const char* sName, enum dim_type dt */ #define DasDim_id(P) ((const char*)(P->sId)) +/** Set the vector frame used for this instance of a dimension + * + * @param pThis a pointer to a das dimension structure + * + * @param sFrame The name of a frame, hopefully defined in the stream header + * + * @returns The name of the previously defined frame, or NULL if no frame was + * previously defined. + * + * @memberof DasDim + */ +DAS_API const char* DasDim_setFrame(DasDim* pThis, const char* sFrame); + +/** Get the frame defined for this dimension's vectors, if any + * + * @returns NULL if no vector frame is defined + * + * @memberof DasDim + */ +#define DasDim_getFrame(P) ( (P)->frame[0] == '\0' ? NULL : (P)->frame ) /** Get the dimension's category * @@ -226,7 +246,6 @@ DAS_API DasDim* new_DasDim(const char* sDim, const char* sName, enum dim_type dt */ #define DasDim_dim(P) ((const char*)(P->sDim)) - /** Print an information string describing a dimension. * * @param pThis A pointer to a dimension structure diff --git a/das2/frame.c b/das2/frame.c index 1ab6d66..254712e 100644 --- a/das2/frame.c +++ b/das2/frame.c @@ -166,7 +166,7 @@ DasErrCode DasFrame_addDir(DasFrame* pThis, const char* sDir) // Make sure we don't already have one with that name for(int8_t i = 0; i < pThis->ndirs; ++i){ if(strcasecmp(sDir, pThis->dirs[pThis->ndirs]) == 0) - return das_error(DASERR_FRM, "Directory %s already defined for frame %s", + return das_error(DASERR_FRM, "Direction %s already defined for frame %s", sDir, pThis->name ); } @@ -188,7 +188,7 @@ const char* DasFrame_dirByIdx(const DasFrame* pThis, int iIndex) int8_t DasFrame_idxByDir(const DasFrame* pThis, const char* sDir) { for(int8_t i = 0; i < pThis->ndirs; ++i){ - if(strcasecmp(sDir, pThis->dirs[pThis->ndirs]) == 0){ + if(strcasecmp(sDir, pThis->dirs[i]) == 0){ return i; } } diff --git a/das2/frame.h b/das2/frame.h index e0fc74f..c1ac975 100644 --- a/das2/frame.h +++ b/das2/frame.h @@ -41,6 +41,7 @@ extern "C" { #define DASFRM_INERTIAL 0x00000010 +#define DASFRM_NULLNAME "_UNDEFINED_SOURCE_FRAME_" /** @addtogroup DM * @{ @@ -61,6 +62,9 @@ typedef struct frame_descriptor{ /* Required properties */ ubyte id; /* The frame ID, used in vectors, quaternions etc. */ + /* WARNING: If this is changed to something bigger, like a ushort, + go remove the double loop from DasStream_getFrameId! */ + char name[DASFRM_NAME_SZ]; char type[DASFRM_TYPE_SZ]; uint32_t flags; /* Usually contains the type */ diff --git a/das2/property.c b/das2/property.c index 213ce07..b72e61a 100644 --- a/das2/property.c +++ b/das2/property.c @@ -144,7 +144,7 @@ DasErrCode DasProp_init( if((nAtWord == nUnitWord)&&(pRead != NULL)&&(*pRead != '\0')){ /* das2 had some things as units that were actually data display - preferences. (I'm looking at you log10Ration) If some of these + preferences. (I'm looking at you log10Ratio) If some of these poor choices show up, let them pass through as just string types */ int nErrDisp = -1; @@ -195,6 +195,8 @@ DasErrCode DasProp_init( if((sType == NULL)||(strcasecmp(sType,"string") == 0)) uFlags |= (DASPROP_STRING | DASPROP_SINGLE); + else if(strcasecmp(sType, "stringarray") == 0) + uFlags |= (DASPROP_STRING | DASPROP_SET); else if(strcasecmp(sType, "boolean") == 0) uFlags |= (DASPROP_BOOL | DASPROP_SINGLE); else if((strcasecmp(sType, "int") == 0)||(strcasecmp(sType, "integer") == 0)) diff --git a/das2/serial.c b/das2/serial.c index bb4f614..65c4b1f 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -33,6 +33,7 @@ #define _TYPE_BUF_SZ 23 #define _VAL_SEMANTIC_SZ 16 #define _VAL_STOREAGE_SZ 12 +#define _VAL_COMP_LBL_SZ ((DASFRM_NAME_SZ + 1) * 3) #define _VAL_UNDER_SZ 64 /* Should be enough room for most variables */ #define _VAL_ENC_TYPE_SZ 8 @@ -44,7 +45,7 @@ /* **************************************************************************** Our processing state structure, these are required for expat */ -struct serial_xml_context { +typedef struct serial_xml_context { StreamDesc* pSd; int nPktId; @@ -62,15 +63,19 @@ struct serial_xml_context { /* saving attributes so they can be used when var creation is ready... */ bool bInVar; enum var_type varCategory; - das_val_type varItemType; // The type of values to store in the array + das_val_type varItemType; /* The type of values to store in the array */ - int varIntRank; + int varIntRank; /* Only 0 or 1 are handled right now. Tensors & point spreads will need more */ int nVarComp; das_units varUnits; char varUse[DASDIM_ROLE_SZ]; - char valSemantic[_VAL_SEMANTIC_SZ]; // "real", "int", "datetime", "string", etc. + char valSemantic[_VAL_SEMANTIC_SZ]; /* "real", "int", "datetime", "string", etc. */ char valStorage[_VAL_STOREAGE_SZ]; - char varCompDirs[DASFRM_NAME_SZ][DASFRM_MAX_DIRS]; + char varFrameType[DASFRM_TYPE_SZ]; /* For in-promptu creation of frames */ + char varCompDirs[DASFRM_MAX_DIRS][DASFRM_NAME_SZ]; + + char varCompLbl[_VAL_COMP_LBL_SZ]; /* HACK ALERT: Temporary hack for dastelem output */ + int8_t aVarMap[DASIDX_MAX]; /* Stuff needed for sequence vars */ @@ -102,11 +107,11 @@ struct serial_xml_context { DasErrCode nDasErr; char sErrMsg[DS_XML_MAXERR]; -}; +} context_t; /* ************************************************************************* */ -static void _serial_clear_var_section(struct serial_xml_context* pCtx) +static void _serial_clear_var_section(context_t* pCtx) { pCtx->bInVar = false; @@ -118,26 +123,27 @@ static void _serial_clear_var_section(struct serial_xml_context* pCtx) pCtx->varUnits = NULL; /* Hopefull compiler will reduce all this to a single op-code for memory erasure */ - memset(pCtx->varUse, 0, DASDIM_ROLE_SZ); - memset(pCtx->valSemantic, 0, _VAL_SEMANTIC_SZ); - memset(pCtx->valStorage, 0, _VAL_STOREAGE_SZ); - memset(pCtx->varCompDirs, 0,DASFRM_NAME_SZ*DASFRM_MAX_DIRS); + memset(pCtx->varUse, 0, DAS_FIELD_SZ(context_t, varUse) ); + memset(pCtx->valSemantic, 0, DAS_FIELD_SZ(context_t, valSemantic) ); + memset(pCtx->valStorage, 0, DAS_FIELD_SZ(context_t, valStorage) ); + memset(pCtx->varCompDirs, 0, DAS_FIELD_SZ(context_t, varCompDirs) ); + memset(pCtx->varCompLbl, 0, DAS_FIELD_SZ(context_t, varCompLbl) ); /* HACK ALERT */ for(int i = 0; i < DASIDX_MAX; ++i) pCtx->aVarMap[i] = DASIDX_UNUSED; - memset(pCtx->aSeqMin, 0, 8); - memset(pCtx->aSeqInter, 0, 8); + memset(pCtx->aSeqMin, 0, DAS_FIELD_SZ(context_t, aSeqMin)); + memset(pCtx->aSeqInter, 0, DAS_FIELD_SZ(context_t, aSeqInter)); pCtx->pCurAry = NULL; /* No longer need the array */ - memset(pCtx->sValEncType, 0, _VAL_ENC_TYPE_SZ); + memset(pCtx->sValEncType, 0, DAS_FIELD_SZ(context_t, sValEncType)); pCtx->nPktItems = 0; pCtx->nPktItemBytes = 0; - memset(pCtx->sPktFillVal, 0, _VAL_FILL_SZ); - memset(pCtx->sValTerm, 0, _VAL_TERM_SZ); - memset(pCtx->sItemsTerm, 0, _VAL_TERM_SZ); + memset(pCtx->sPktFillVal, 0, DAS_FIELD_SZ(context_t, sPktFillVal)); + memset(pCtx->sValTerm, 0, DAS_FIELD_SZ(context_t, sValTerm)); + memset(pCtx->sItemsTerm, 0, DAS_FIELD_SZ(context_t, sItemsTerm)); if(DasCodec_isValid( &(pCtx->codecHdrVals)) ) DasCodec_deInit( &(pCtx->codecHdrVals) ); - memset(&(pCtx->codecHdrVals), 0, sizeof(DasCodec)); - memset(&(pCtx->aValUnderFlow), 0, sizeof(_VAL_UNDER_SZ)); + memset(&(pCtx->codecHdrVals), 0, DAS_FIELD_SZ(context_t, codecHdrVals)); + memset(&(pCtx->aValUnderFlow), 0, DAS_FIELD_SZ(context_t, aValUnderFlow)); pCtx->nValUnderFlowValid = 0; } @@ -218,7 +224,7 @@ static DasErrCode _serial_initfill(ubyte* pBuf, int nBufLen, das_val_type vt, co /* **************************************************************************** Create an empty dataset of known index shape */ -static void _serial_onOpenDs(struct serial_xml_context* pCtx, const char** psAttr) +static void _serial_onOpenDs(context_t* pCtx, const char** psAttr) { const char* sRank = NULL; const char* sName = NULL; @@ -272,7 +278,7 @@ static void _serial_onOpenDs(struct serial_xml_context* pCtx, const char** psAtt } -static void _serial_onOpenProp(struct serial_xml_context* pCtx, const char** psAttr){ +static void _serial_onOpenProp(context_t* pCtx, const char** psAttr){ if(pCtx->nDasErr != DAS_OKAY) return; @@ -309,7 +315,7 @@ static void _serial_onOpenProp(struct serial_xml_context* pCtx, const char** psA Making a dimension inside a dataset */ static void _serial_onOpenDim( - struct serial_xml_context* pCtx, const char* sDimType, const char** psAttr + context_t* pCtx, const char* sDimType, const char** psAttr ){ if(pCtx->nDasErr != DAS_OKAY) @@ -388,9 +394,8 @@ static void _serial_onOpenDim( ++iAxis; } } - if((sFrame != NULL)&&(sFrame[0] != '\0')){ - strncpy(pDim->frame, sFrame, DASFRM_NAME_SZ-1); - } + if((sFrame != NULL)&&(sFrame[0] != '\0')) + DasDim_setFrame(pDim, sFrame); DasErrCode nRet = 0; if((nRet = DasDs_addDim(pCtx->pDs, pDim)) != DAS_OKAY){ @@ -405,7 +410,7 @@ static void _serial_onOpenDim( Starting a new variable, either scalar or vector */ static void _serial_onOpenVar( - struct serial_xml_context* pCtx, const char* sVarElType, const char** psAttr + context_t* pCtx, const char* sVarElType, const char** psAttr ){ if(pCtx->bInVar){ pCtx->nDasErr = das_error(DASERR_SERIAL, @@ -435,6 +440,8 @@ static void _serial_onOpenVar( strncpy(sIndex, psAttr[i+1], 31); else if(strcmp(psAttr[i], "units") == 0) pCtx->varUnits = Units_fromStr(psAttr[i+1]); + + /* Temporarily ignore values that are running around in wild */ else daslog_warn_v( "Unknown attribute %s in <%s> for dataset ID %02d", psAttr[i], sVarElType, id @@ -464,6 +471,10 @@ static void _serial_onOpenVar( } } + /* If this is a vector, mention that we have 1 internal index */ + if(strcmp(sVarElType, "vector") == 0) + pCtx->varIntRank = 1; + if(pCtx->varUse[0] == '\0') /* Default to a usage of 'center' */ strncpy(pCtx->varUse, "center", DASDIM_ROLE_SZ-1); @@ -485,7 +496,7 @@ static void _serial_onOpenVar( /* ************************************************************************** */ -static void _serial_onComponent(struct serial_xml_context* pCtx, const char** psAttr) +static void _serial_onComponent(context_t* pCtx, const char** psAttr) { if(pCtx->nDasErr != DAS_OKAY) /* If an error condition is set, stop processing elements */ return; @@ -496,40 +507,88 @@ static void _serial_onComponent(struct serial_xml_context* pCtx, const char** ps return; } - const char* sDir; + const char* sDir = NULL; + const char* sName = NULL; for(int i = 0; psAttr[i] != NULL; i+=2){ - if(strcmp(psAttr[i+1], "dir") == 0){ + if(strcmp(psAttr[i], "dir") == 0){ sDir = psAttr[i+1]; if(sDir[0] == '\0'){ pCtx->nDasErr = das_error(DASERR_SERIAL, - "Empty direction name for of in phyDim %s of dataset ID %d", + "Empty direction attribute for of in phyDim %s of dataset ID %d", DasDim_id(pCtx->pCurDim), pCtx->nPktId ); return; } } - else + + /* HACK ALERT: Remove when dastelem is updated to new-style frames */ + else if(strcmp(psAttr[i], "name") == 0){ + sName = psAttr[i+1]; + if(sName[0] == '\0'){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + "Empty name attribute for of in physDim %s of dataset ID %d", + DasDim_id(pCtx->pCurDim), pCtx->nPktId + ); + } + } + /* End HACK ALERT */ + else daslog_warn_v( "Unknown attribute %s in for dataset ID %02d", psAttr[i], pCtx->nPktId ); } - /* Just save off the directions for now, make sure the same one isn't written twice */ - for(int i = 0; i < pCtx->nVarComp; ++i){ - if(strcmp(pCtx->varCompDirs[i], sDir) == 0){ - pCtx->nDasErr = das_error(DASERR_SERIAL, - " has a repeated direction \"%s\" in the same frame." - ); - return; + /* HACK ALERT: Just use name as a synonym for dir for now */ + if((sDir == NULL )&&(sName != NULL)){ + sDir = sName; + } + + if((sDir != NULL)&&(sDir[0] != '\0')){ /* Hack alert, remove 'if' check once dastelem is fixed */ + + /* HACK ALERT, reenable this once dastelem is fixed ... + pCtx->nDasErr = das_error(DASERR_SERIAL, "Attribute 'dir' missing from " + " of in phyDim %s of dataset ID %d", DasDim_id(pCtx->pCurDim), pCtx->nPktId + ); + */ + + /* Just save off the directions for now, make sure the same one isn't written twice */ + for(int i = 0; i < pCtx->nVarComp; ++i){ + if(strcmp(pCtx->varCompDirs[i], sDir) == 0){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + " has a repeated direction \"%s\" in the same frame." + ); + return; + } } + strncpy(pCtx->varCompDirs[pCtx->nVarComp], sDir, DASFRM_NAME_SZ-1); } - strncpy(pCtx->varCompDirs[pCtx->nVarComp], sDir, DASFRM_NAME_SZ-1); + + /* HACK ALERT: Remove when dastelem is updated to new-style frames */ + if((sName != NULL)&&(sName[0] != '\0')){ + for(int i = 0; i < pCtx->nVarComp; ++i){ + if(strstr(pCtx->varCompLbl, sName) != NULL){ + pCtx->nDasErr = das_error(DASERR_SERIAL, + " has a repeated name \"%s\" in the same frame." + ); + return; + } + } + if(pCtx->nVarComp > 0) + strncat(pCtx->varCompLbl, "|", _VAL_COMP_LBL_SZ - strlen(pCtx->varCompLbl)); + strncat(pCtx->varCompLbl, sName, _VAL_COMP_LBL_SZ - strlen(pCtx->varCompLbl)); + } + /* end HACK ALERT */ + pCtx->nVarComp += 1; + + pCtx->aVarMap[DasDs_rank(pCtx->pDs)] = pCtx->nVarComp; + + /* TODO: I need to increase the rank for strings too, not sure what to do there */ } /* ************************************************************************** */ /* Create a seequence item */ -static void _serial_onSequence(struct serial_xml_context* pCtx, const char** psAttr) +static void _serial_onSequence(context_t* pCtx, const char** psAttr) { const char* sMin = "0"; const char* sInter = NULL; @@ -602,7 +661,7 @@ static void _serial_onSequence(struct serial_xml_context* pCtx, const char** psA #define NO_FILL false #define SET_FILL true -static DasErrCode _serial_makeVarAry(struct serial_xml_context* pCtx, bool bHandleFill) +static DasErrCode _serial_makeVarAry(context_t* pCtx, bool bHandleFill) { /* Okay, make an array to hold the values since this is packet data */ assert(pCtx->pCurAry == NULL); @@ -664,27 +723,35 @@ static DasErrCode _serial_makeVarAry(struct serial_xml_context* pCtx, bool bHand ); } - /* If we get a vtText or a vtByteSeq just store as vtUByte and - set the array interpretation to indicate an extra dim that's - the length of each item value */ - - uint32_t uFlags; + /* Dealing with internal structure */ + uint32_t uFlags = 0; - if(vt == vtByteSeq){ - vt = vtByte; - aShape[nAryRank] = 0; - ++nAryRank; - uFlags = D2ARY_AS_SUBSEQ; - } - else{ - if(vt == vtText){ - vt = vtByte; - aShape[nAryRank] = 0; + if(pCtx->varIntRank > 0){ + /* Internal structure due to vectors */ + if(pCtx->nVarComp > 1){ + aShape[nAryRank] = pCtx->nVarComp; ++nAryRank; - uFlags = D2ARY_AS_STRING; } else{ - uFlags = 0; + /* Internal structure must be due to text or byte strings */ + if(vt == vtByteSeq){ + vt = vtByte; + aShape[nAryRank] = 0; + ++nAryRank; + uFlags = D2ARY_AS_SUBSEQ; + } + else if(vt == vtText){ + vt = vtByte; + aShape[nAryRank] = 0; + ++nAryRank; + uFlags = D2ARY_AS_STRING; + } + else{ + return das_error(DASERR_SERIAL, + "Unknown purpose for internal variable indicies, not a vector " + "nor a string nor a byte-string" + ); + } } } @@ -711,7 +778,8 @@ static DasErrCode _serial_makeVarAry(struct serial_xml_context* pCtx, bool bHand /* ************************************************************************** */ /* Save the info needed to make a packet data encoder/decoder */ -static void _serial_onPacket(struct serial_xml_context* pCtx, const char** psAttr) + +static void _serial_onPacket(context_t* pCtx, const char** psAttr) { if(pCtx->nDasErr != DAS_OKAY) /* If an error condition is set, stop processing elements */ @@ -810,7 +878,7 @@ static void _serial_onPacket(struct serial_xml_context* pCtx, const char** psAtt /* ************************************************************************** */ -static void _serial_onOpenVals(struct serial_xml_context* pCtx, const char** psAttr) +static void _serial_onOpenVals(context_t* pCtx, const char** psAttr) { if(pCtx->nDasErr != DAS_OKAY) /* Error flag rasied, stop parsing */ return; @@ -872,7 +940,7 @@ static void _serial_onOpenVals(struct serial_xml_context* pCtx, const char** psA /* Switch to various element initialization functions */ static void _serial_xmlElementBeg(void* pUserData, const char* sElement, const char** psAttr) { - struct serial_xml_context* pCtx = (struct serial_xml_context*)pUserData; + context_t* pCtx = (context_t*)pUserData; if(pCtx->nDasErr != DAS_OKAY) /* If an error condition is set, stop processing elements */ return; @@ -935,7 +1003,7 @@ static void _serial_xmlElementBeg(void* pUserData, const char* sElement, const c static void _serial_xmlCharData(void* pUserData, const char* sChars, int nLen) { - struct serial_xml_context* pCtx = (struct serial_xml_context*)pUserData; + context_t* pCtx = (context_t*)pUserData; if(pCtx->nDasErr != DAS_OKAY) /* Error, stop processing */ return; @@ -1019,7 +1087,7 @@ static void _serial_xmlCharData(void* pUserData, const char* sChars, int nLen) /* ************************************************************************** */ /* Closing out properties */ -static void _serial_onCloseProp(struct serial_xml_context* pCtx, DasDesc* pDest){ +static void _serial_onCloseProp(context_t* pCtx, DasDesc* pDest){ if(pCtx->nDasErr != DAS_OKAY) return; @@ -1054,7 +1122,7 @@ static void _serial_onCloseProp(struct serial_xml_context* pCtx, DasDesc* pDest) /* ************************************************************************** */ -static void _serial_onCloseVals(struct serial_xml_context* pCtx){ +static void _serial_onCloseVals(context_t* pCtx){ if(pCtx->nDasErr != DAS_OKAY) return; @@ -1119,7 +1187,7 @@ static void _serial_onCloseVals(struct serial_xml_context* pCtx){ /* ************************************************************************** */ -static void _serial_onCloseVar(struct serial_xml_context* pCtx) +static void _serial_onCloseVar(context_t* pCtx) { if(pCtx->nDasErr != DAS_OKAY) /* Stop processing on error */ return; @@ -1140,23 +1208,38 @@ static void _serial_onCloseVar(struct serial_xml_context* pCtx) if(pCtx->varIntRank == 1){ - if(pCtx->pCurDim->frame[0] == '\0'){ + /* HACK ALERT: Pick up names put in the wrong place and put them in a property instead */ + if(pCtx->varCompLbl[0] != '\0') + DasDesc_flexSet((DasDesc*)(pCtx->pCurDim), + "stringArray", 0, "compLabel", pCtx->varCompLbl, '|', NULL, DASPROP_DAS3 + ); + + /* end HACK ALERT */ + + if(DasDim_getFrame(pCtx->pCurDim) == NULL){ + + /* HACK ALERT */ + DasDim_setFrame(pCtx->pCurDim, DASFRM_NULLNAME); + /* pCtx->nDasErr = das_error(DASERR_SERIAL, " or holding must have a defined coordinate frame" ); goto NO_CUR_VAR; + + end HACK ALERT */ } - const DasFrame* pFrame = StreamDesc_getFrameByName(pCtx->pSd, pCtx->pCurDim->frame); + const DasFrame* pFrame = DasStream_getFrameByName(pCtx->pSd, DasDim_getFrame(pCtx->pCurDim)); if(pFrame == NULL){ - // If the stream had no frame, generate one for the given frame name - int iFrame = StreamDesc_nextFrameId(pCtx->pSd); + + /* If the stream had no frame, generate one for the given frame name */ + int iFrame = DasStream_newFrameId(pCtx->pSd); if(iFrame < 0){ pCtx->nDasErr = -1*iFrame; goto NO_CUR_VAR; } - DasFrame* pMkFrame = StreamDesc_createFrame( - pCtx->pSd, iFrame, pCtx->pCurDim->frame, "cartesian" + DasFrame* pMkFrame = DasStream_createFrame( + pCtx->pSd, iFrame, DasDim_getFrame(pCtx->pCurDim), "cartesian" ); DasDesc_setStr((DasDesc*)pMkFrame, "title", "Autogenerated Frame"); @@ -1169,10 +1252,10 @@ static void _serial_onCloseVar(struct serial_xml_context* pCtx) pFrame = pMkFrame; /* Make Frame Constant Again */ } - int8_t iFrame = StreamDesc_getFrameId(pCtx->pSd, pCtx->pCurDim->frame); + int8_t iFrame = DasStream_getFrameId(pCtx->pSd, DasDim_getFrame(pCtx->pCurDim)); if(iFrame < 0){ pCtx->nDasErr = das_error(DASERR_SERIAL, - "No frame named %s is defined for the stream", pCtx->pCurDim->frame + "No frame named %s is defined for the stream", DasDim_getFrame(pCtx->pCurDim) ); goto NO_CUR_VAR; } @@ -1191,7 +1274,7 @@ static void _serial_onCloseVar(struct serial_xml_context* pCtx) } } - // Get the array for this variable + /* Get the array for this variable */ if(!pCtx->pCurAry){ pCtx->nDasErr = das_error(DASERR_SERIAL, "Vector sequences are not yet supported"); goto NO_CUR_VAR; @@ -1253,7 +1336,7 @@ static void _serial_onCloseVar(struct serial_xml_context* pCtx) static void _serial_xmlElementEnd(void* pUserData, const char* sElement) { - struct serial_xml_context* pCtx = (struct serial_xml_context*)pUserData; + context_t* pCtx = (context_t*)pUserData; /* If I've hit an error condition, stop processing stuff */ if(pCtx->nDasErr != DAS_OKAY) @@ -1297,7 +1380,7 @@ static void _serial_xmlElementEnd(void* pUserData, const char* sElement) DasDs* dasds_from_xmlheader3(DasBuf* pBuf, StreamDesc* pParent, int nPktId) { - struct serial_xml_context context = {0}; // All object's initially null + context_t context = {0}; // All object's initially null context.pSd = pParent; if((pParent == NULL)||(((DasDesc*)pParent)->type != STREAM)){ diff --git a/das2/stream.c b/das2/stream.c index a5083f2..8cfd050 100644 --- a/das2/stream.c +++ b/das2/stream.c @@ -374,7 +374,7 @@ DasFrame* DasStream_createFrame( ){ // Find a slot for it. size_t uIdx = 0; - while((pThis->frames[uIdx] != 0) && (uIdx < (MAX_FRAMES-1))){ + while((pThis->frames[uIdx] != 0) && (uIdx < (MAX_FRAMES))){ if(strcmp(sName, DasFrame_getName(pThis->frames[uIdx])) == 0){ das_error(DASERR_STREAM, "A vector direction frame named '%s' already exist for this stream", @@ -402,21 +402,32 @@ DasFrame* DasStream_createFrame( } int8_t DasStream_getFrameId(const StreamDesc* pThis, const char* sFrame){ + for(int i = 0; i < MAX_FRAMES; ++i){ if(pThis->frames[i] == NULL) continue; if(strcmp(pThis->frames[i]->name, sFrame) == 0) - return i; + return pThis->frames[i]->id; } return -1 * DASERR_STREAM; } -int DasStream_nextFrameId(const StreamDesc* pThis){ - for(int i = 0; i < MAX_FRAMES; ++i){ - if(pThis->frames[i] == NULL) - return i; +int DasStream_newFrameId(const StreamDesc* pThis){ + + /* Since MAX_FRAMES is small and the size of the frame ID field + is small, we can get away with a double loop */ + for(ubyte i = 1; i < 256; ++i){ + bool bUsed = false; + for(int j = 0; j < MAX_FRAMES; ++j){ + if((pThis->frames[j] != NULL) && (pThis->frames[j]->id == i)){ + bUsed = true; + break; + } + } + if(!bUsed) return (int)i; } - return -1; + + return -1 * DASERR_STREAM; } int8_t DasStream_getNumFrames(const StreamDesc* pThis) diff --git a/das2/stream.h b/das2/stream.h index c639773..9ad1c06 100644 --- a/das2/stream.h +++ b/das2/stream.h @@ -40,7 +40,7 @@ extern "C" { #define STREAMDESC_TYPE_SZ 48 #define MAX_PKTIDS 100 -#define MAX_FRAMES 12 +#define MAX_FRAMES 12 /* <-- if drastically increased, update _newFrameId() */ /** @defgroup DM Data Model @@ -318,13 +318,15 @@ DAS_API DasFrame* DasStream_createFrame( #define StreamDesc_createFrame DasStream_createFrame -/** Get the next open frame ID +/** Get an open frame ID * - * @returns then next valid frame ID or a negative DasErrCode if no more frames are allowed + * @returns A frame ID that is not currently in use by any frame in + * the stream. Return a negative DasErrCode if no more + * frames are allowed in the stream */ -DAS_API int DasStream_nextFrameId(const DasStream* pThis); +DAS_API int DasStream_newFrameId(const DasStream* pThis); -#define StreamDesc_nextFrameId DasStream_nextFrameId +#define StreamDesc_newFrameId DasStream_nextFrameId /** Make a deep copy of a PacketDescriptor on a new stream. * This function makes a deep copy of the given packet descriptor and diff --git a/das2/time.h b/das2/time.h index 678918f..cb085f3 100644 --- a/das2/time.h +++ b/das2/time.h @@ -74,7 +74,7 @@ typedef struct das_time_t{ /* A version of above that would only use 16 bytes instead of 32 .... - to implement and test later + to enable and test later typedef struct das_time_t{ / ** Calendar month number, 1 = January * / diff --git a/das2/variable.c b/das2/variable.c index 336b455..bf64d88 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -121,6 +121,11 @@ das_val_type DasVar_valType(const DasVar* pThis){ return pThis->vt;} size_t DasVar_valSize(const DasVar* pThis){return pThis->vsize;} +/* Pure virtual */ +das_val_type DasVar_elemType(const DasVar* pThis){ + return pThis->elemType(pThis); +} + das_units DasVar_units(const DasVar* pThis){ return pThis->units;} @@ -174,7 +179,8 @@ ptrdiff_t DasVar_lengthIn(const DasVar* pThis, int nIdx, ptrdiff_t* pLoc) char* DasVar_toStr(const DasVar* pThis, char* sBuf, int nLen) { char* sBeg = sBuf; - const unsigned int uFlags = D2V_EXP_RANGE | D2V_EXP_UNITS | D2V_EXP_SUBEX | D2V_EXP_TYPE; + const unsigned int uFlags = + D2V_EXP_RANGE | D2V_EXP_UNITS | D2V_EXP_SUBEX | D2V_EXP_TYPE | D2V_EXP_INTR; pThis->expression(pThis, sBuf, nLen, uFlags); return sBeg; } @@ -487,6 +493,12 @@ typedef struct das_var_const{ das_datum datum; } DasConstant; +das_val_type DasConstant_elemType(const DasVar* pBase) +{ + const DasConstant* pThis = (const DasConstant*)pBase; + return das_datum_elemType(&(pThis->datum)); +} + const char* DasConstant_id(const DasVar* pBase) { return ((DasConstant*)pBase)->sId; @@ -660,6 +672,7 @@ DasVar* new_DasConstant(const char* sId, const das_datum* pDm) pThis->base.incRef = inc_DasVar; pThis->base.decRef = dec_DasConstant; pThis->base.degenerate = DasConstant_degenerate; + pThis->base.elemType = DasConstant_elemType; /* Vsize setting */ pThis->base.vsize = das_vt_size(pDm->vt); @@ -684,6 +697,12 @@ typedef struct das_var_array{ } DasVarArray; +das_val_type DasVarAry_elemType(const DasVar* pBase){ + DasVarArray* pThis = (DasVarArray*)pBase; + return DasAry_valType(pThis->pAry); +} + + bool DasVarAry_degenerate(const DasVar* pBase, int iIndex) { DasVarArray* pThis = (DasVarArray*)pBase; @@ -773,13 +792,14 @@ int DasVarAry_intrShape(const DasVar* pBase, ptrdiff_t* pShape) ptrdiff_t aShape[DASIDX_MAX] = DASIDX_INIT_UNUSED; int nAryRank = DasAry_shape(pThis->pAry, aShape); - int j = 0; - for(i = pBase->nExtRank; i < (pBase->nExtRank + pBase->nIntRank); ++i){ - - assert(j < nAryRank); - - pShape[j] = pThis->idxmap[i]; - ++j; + if(pBase->nIntRank > 0){ + /* Just copy out the last nIntRank indicies of the array + because all internal indicies are dense. */ + int j = 0; + for(i = (nAryRank - pBase->nIntRank); i < nAryRank; ++i){ + pShape[j] = aShape[i]; + ++j; + } } return pBase->nIntRank; @@ -1458,6 +1478,7 @@ DasErrCode init_DasVarArray( pThis->base.nExtRank = nExtRank; pThis->base.nIntRank = nIntRank; pThis->base.degenerate = DasVarAry_degenerate; + pThis->base.elemType = DasVarAry_elemType; /* Extra stuff for array variables */ if(pAry == NULL) @@ -1496,8 +1517,8 @@ DasErrCode init_DasVarArray( structure */ if((nValid + nIntRank) != DasAry_rank(pAry)) return das_error(DASERR_VAR, - "Expected a backing array is rank %d, expected %d external plus " - "%d internal indicies", DasAry_rank(pAry), nExtRank, nIntRank + "Backing array is rank %d. Expected %d external plus " + "%d internal indicies.", DasAry_rank(pAry), nExtRank, nIntRank ); /* Here's the score. We're putting a template on top of simple das arrays @@ -1653,6 +1674,9 @@ DasVar* new_DasVarVecAry( nDirs, pDirs ); + /* Now switch our value type to geovec */ + pAncestor->vt = vtGeoVec; + if(nRet != DAS_OKAY){ free(pThis); return NULL; @@ -2269,9 +2293,17 @@ typedef struct das_var_binary{ DasVar* pLeft; /* left hand sub-variable pointer */ int nOp; /* operator for unary and binary operations */ double rRightScale; /* Scaling factor for right hand values */ + + das_val_type et; /* Pre calculated element type, avoid sub-calls*/ } DasVarBinary; +das_val_type DasVarBinary_elemType(const DasVar* pBase) +{ + return ((const DasVarBinary*) pBase)->et; +} + + bool DasVarBinary_degenerate(const DasVar* pBase, int iIndex) { const DasVarBinary* pThis = (const DasVarBinary*) pBase; @@ -2790,12 +2822,17 @@ DasVar* new_DasVarBinary_tok( pThis->base.incRef = inc_DasVar; pThis->base.decRef = dec_DasVarBinary; pThis->base.degenerate = DasVarBinary_degenerate; - + pThis->base.elemType = DasVarBinary_elemType; + if(sId != NULL) strncpy(pThis->sId, sId, 63); /* Extra items for this derived class including any conversion factors that * must be applied to the pLeft hand values so that they are in the same * units as the pRight */ + pThis->et = das_vt_merge( + DasVar_elemType(pLeft), op, DasVar_elemType(pRight) + ); + pThis->nOp = op; pThis->pLeft = pLeft; pThis->pRight = pRight; diff --git a/das2/variable.h b/das2/variable.h index c375c93..ef511e7 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -249,8 +249,7 @@ typedef struct das_variable{ das_val_type vt; /* vtUByte, vtText, vtTime, vtVector ... */ size_t vsize; /* The size in bytes of each value in the variable - * for non-scalar items, this yields the unusual value - * of sizeof(void*) */ + * for non-scalar variables, this yields unusual values */ /* Number of external indexes. Many of these may not be used and are * thus marked as degenerate */ @@ -275,6 +274,8 @@ typedef struct das_variable{ /* Get identifier for this variable, may be NULL for anoymous vars */ const char* (*id)(const struct das_variable* pThis); + + das_val_type (*elemType)(const struct das_variable* pThis); /* Get full shape of this variable */ int (*shape)(const struct das_variable* pThis, ptrdiff_t* pShape); @@ -615,27 +616,33 @@ DAS_API int dec_DasVar(DasVar* pThis); /** Get number of references * @memberof DasVar */ -int ref_DasVar(const DasVar* pThis); +DAS_API int ref_DasVar(const DasVar* pThis); /** Get id token for variable, may be NULL for anoymous vars * @memberof DasVar */ -const char* DasVar_id(const DasVar* pThis); +DAS_API const char* DasVar_id(const DasVar* pThis); /** Get the type of variable * @memberof DasVar */ -enum var_type DasVar_type(const DasVar* pThis); +DAS_API enum var_type DasVar_type(const DasVar* pThis); /** Get the type of values held by the variable * @memberof DasVar */ -das_val_type DasVar_valType(const DasVar* pThis); +DAS_API das_val_type DasVar_valType(const DasVar* pThis); + +/** Get the elemental array type for a variable. + * Some variables provide complex types, such as geometric vectors or + * byte strings. Get the fundental value type for a variable + */ +DAS_API das_val_type DasVar_elemType(const DasVar* pThis); /** Get the size in bytes of each value * @memberof DasVar */ -size_t DasVar_valSize(const DasVar* pThis); +DAS_API size_t DasVar_valSize(const DasVar* pThis); /** Get the units for the values. * @@ -643,7 +650,7 @@ size_t DasVar_valSize(const DasVar* pThis); * To determine if this is the case use * @memberof DasVar */ -das_units DasVar_units(const DasVar* pThis); +DAS_API das_units DasVar_units(const DasVar* pThis); /** Get the backing array if present diff --git a/das2/vector.h b/das2/vector.h index 9f7d437..c7baa74 100644 --- a/das2/vector.h +++ b/das2/vector.h @@ -26,16 +26,31 @@ extern "C" { #endif +#define DASVEC_MAXCOMP 3 + +/** @addtogroup values + * @{ + */ + /** Holds a geometric vector of some sort * * This structure is tied in with DasFrame an is ment to hold one vector * from a frame, with components in the same order as provided in the * backing DasAry that is managed by a DasVarVecAry. + * + * @note Many data systems define a vector generically in the linear algebra + * sense. Though this is perfectably reasonable, in practice the data sets + * that are normally seen by das systems almost always have regular old 3-space + * vectors. Thus we have a class customized for this very common case. + * + * Longer algebraic vectors would normally be handled as single runs of a + * scalar index and wouldn't correspond to a das_datum compatible item. + * */ typedef struct das_geovec_t{ /* The vector values if local */ - double comp[3]; + double comp[DASVEC_MAXCOMP]; /* The ID of the vector frame, or 0 if unknown */ ubyte frame; @@ -53,16 +68,22 @@ typedef struct das_geovec_t{ ubyte ncomp; /* Direction for each component, storred in nibbles */ - ubyte dirs[3]; + ubyte dirs[DASVEC_MAXCOMP]; } das_geovec; +/** @} */ + +/** Initialize an memory area with information for a geometric vector + * + * @memberof das_geovec + */ DasErrCode das_geovec_init( das_geovec* pVec, const ubyte* pData, ubyte frame, ubyte ftype, ubyte et, ubyte esize, ubyte ncomp, const ubyte* pDirs ); -#define das_geovec_eltype(p) (p->vt & 0x0F) +#define das_geovec_eltype(p) ((p)->et & 0x0F) #ifdef __cplusplus diff --git a/schema/das-basic-stream-v3.0.xsd b/schema/das-basic-stream-v3.0.xsd index 3610e23..2650d2d 100644 --- a/schema/das-basic-stream-v3.0.xsd +++ b/schema/das-basic-stream-v3.0.xsd @@ -94,6 +94,13 @@ + + + + + + + @@ -102,6 +109,7 @@ + @@ -355,13 +363,6 @@ The special values \n, and NaN are understood. Note that for ragged arrays in more then one index a DIFFERENT terminator is needed for each array dimension. --> - - - - - - - diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index 467c32e..35db68d 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -1109,8 +1109,9 @@ long DasVar_cdfType(const DasVar* pVar) /* If the units of the variable are any time units, return a type of tt2k */ if((DasVar_units(pVar) == UNIT_TT2000)&&(DasVar_valType(pVar) == vtLong)) return CDF_TIME_TT2000; - else - return aCdfType[DasVar_valType(pVar)]; + + /* For other variables, we want the underlying type */ + return aCdfType[DasVar_elemType(pVar)]; } const char* DasVar_cdfName( @@ -1180,6 +1181,17 @@ long DasVar_cdfNonRecDims( ++nUsed; } } + + /* For vectors we need to add in the number of components */ + if(DasVar_valType(pVar) == vtGeoVec){ + ptrdiff_t aIntr[DASIDX_MAX] = {0}; + int nIntrRank = DasVar_intrShape(pVar, aIntr); + for(int i = 0; i < nIntrRank; ++i){ + pNonRecDims[nUsed] = aIntr[i]; + ++nUsed; + } + } + return nUsed; } @@ -1190,9 +1202,6 @@ DasErrCode makeCdfVar( ptrdiff_t aMin[DASIDX_MAX] = {0}; ptrdiff_t aMax[DASIDX_MAX] = {0}; - ptrdiff_t aIntr[DASIDX_MAX] = {0}; - int nIntrRank = DasVar_intrShape(pVar, aIntr); - long aNonRecDims[DASIDX_MAX] = {0}; /* Sequence variables mold themselvse to the shape of the containing dataset so the dataset shape has to be passed in a well */ @@ -1245,11 +1254,20 @@ DasErrCode makeCdfVar( /* add the variable's name */ DasVar_cdfName(pDim, pVar, sNameBuf, DAS_MAX_ID_BUFSZ - 1); + das_val_type vt = DasVar_valType(pVar); + long nCharLen = 1L; + if((vt == vtText)||(vt == vtByteSeq)){ + ptrdiff_t aIntr[DASIDX_MAX] = {0}; + DasVar_intrShape(pVar, aIntr); + nCharLen = aIntr[0]; + } + + CDFstatus iStatus = CDFcreatezVar( pCtx->nCdfId, /* CDF File ID */ sNameBuf, /* Varible's name */ DasVar_cdfType(pVar), /* CDF Data type of variable */ - (nIntrRank > 0) ? (long) aIntr[0] : 1L, /* Character length, if needed */ + nCharLen, /* Character length, if needed */ nNonRecDims, /* collapsed rank after index 0 */ aNonRecDims, /* collapsed size in each index, after 0 */ nRecVary, /* True if varies in index 0 */ @@ -1324,7 +1342,7 @@ DasErrCode makeCdfVar( int nAryRank = DasAry_shape(pAry, aAryShape); size_t uLen = 0; - das_val_type vt = DasAry_valType(pAry); + vt = DasAry_valType(pAry); const ubyte* pVals = DasAry_getIn(pAry, vt, DIM0, &uLen); /* Put index information into data types needed for function call */ From 1bbdbe8fdbc6448c8876f9db148f90b3f7c9cb8e Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Wed, 28 Feb 2024 19:05:32 -0600 Subject: [PATCH 36/40] First vector CDFs pass --- das2/frame.h | 9 +++ das2/variable.c | 32 ++++++++- das2/variable.h | 42 +++++++++++ test/ex15_vector_frame.d3b | 6 +- utilities/das3_cdf.c | 138 ++++++++++++++++++++++++++++++++----- 5 files changed, 208 insertions(+), 19 deletions(-) diff --git a/das2/frame.h b/das2/frame.h index c1ac975..6bb18a8 100644 --- a/das2/frame.h +++ b/das2/frame.h @@ -72,6 +72,15 @@ typedef struct frame_descriptor{ char dirs[DASFRM_MAX_DIRS][DASFRM_DNAM_SZ]; uint32_t ndirs; + /** User data pointer + * + * The stream -> frame hierarchy provides a goood organizational structure + * for application data, especially applications that filter streams. It + * is initialized to NULL when a variable is created but otherwise the + * library dosen't deal with it. + */ + void* pUser; + } DasFrame; /** @} */ diff --git a/das2/variable.c b/das2/variable.c index bf64d88..fbc0500 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -688,12 +688,16 @@ DasVar* new_DasConstant(const char* sId, const das_datum* pDm) /* ************************************************************************* */ /* Array mapping functions */ +enum var_subtype {D2V_STDARY=1, D2V_GEOVEC=2}; + typedef struct das_var_array{ DasVar base; /* Array pointer and index map to support lookup variables */ DasAry* pAry; /* A pointer to the array containing the values */ int idxmap[DASIDX_MAX]; /* i,j,k data set space to array space */ + + enum var_subtype varsubtype; /* Var sub type */ } DasVarArray; @@ -1485,6 +1489,7 @@ DasErrCode init_DasVarArray( return das_error(DASERR_VAR, "Null array pointer\n"); pThis->pAry = pAry; + pThis->varsubtype = D2V_STDARY; /* Connection between variable units and array units broken here, this * is intentional, but be aware of it! */ @@ -1591,6 +1596,29 @@ typedef struct das_var_vecary{ } DasVarVecAry; +int DasVarVecAry_getFrame(const DasVar* pBase) +{ + if(pBase->vartype != D2V_ARRAY) + return -1 * DASERR_VAR; + + if( ((const DasVarArray*)pBase)->varsubtype != D2V_GEOVEC) + return -1 * DASERR_VAR; + + return ((const DasVarVecAry*)pBase)->tplt.frame; +} + +const ubyte* DasVarVecAry_getDirs(const DasVar* pBase, ubyte* pNumComp) +{ + if(pBase->vartype != D2V_ARRAY) + return NULL; + + if( ((const DasVarArray*)pBase)->varsubtype != D2V_GEOVEC) + return NULL; + + *pNumComp = ((const DasVarVecAry*)pBase)->tplt.ncomp; + return ((const DasVarVecAry*)pBase)->tplt.dirs; +} + char* DasVarVecAry_expression( const DasVar* pBase, char* sBuf, int nLen, unsigned int uFlags ){ @@ -1651,9 +1679,10 @@ DasVar* new_DasVarVecAry( // Handle the base class DasVarVecAry* pThis = (DasVarVecAry*) calloc(1, sizeof(DasVarVecAry)); + DasVarArray* pBase = (DasVarArray*)pThis; DasVar* pAncestor = (DasVar*)pThis; - if(init_DasVarArray((DasVarArray*)pThis, pAry, nExtRank, pExtMap, nIntRank) != DAS_OKAY){ + if(init_DasVarArray(pBase, pAry, nExtRank, pExtMap, nIntRank) != DAS_OKAY){ /* Don't decrement the array ownership on failure because it wasn't incremented, free */ free(pThis); @@ -1676,6 +1705,7 @@ DasVar* new_DasVarVecAry( /* Now switch our value type to geovec */ pAncestor->vt = vtGeoVec; + pBase->varsubtype = D2V_GEOVEC; if(nRet != DAS_OKAY){ free(pThis); diff --git a/das2/variable.h b/das2/variable.h index ef511e7..41f7f6c 100644 --- a/das2/variable.h +++ b/das2/variable.h @@ -590,6 +590,48 @@ DAS_API DasVar* new_DasVarVecAry( const ubyte* pDir ); + +/** Get the ID of the vector frame (if any) associated with the variable + * + * @param pVar A variable created usind new_DasVarVecAry() + * + * @returns the frame ID which cat be used to access the frame in a DasStream + * or a negative error code if theres a problem. All frame IDs are + * greater than or equal to 0. + * + * @memberof DasVar + */ +DAS_API int DasVarVecAry_getFrame(const DasVar* pVar); + +/** Get the component directions in a vector frame + * + * Geometric vectors are defined interms of a coordinate frame. DasStream + * objects maintain a list of coordinate frames by ID. The ID itself can + * be found from calling DasVarVecAry_getFrame(). Each frame has a list + * of components but the order of components in the frame definition may not + * be the order of the components in this variable. The component map provides + * the match ups as depeicted below: + *
+ *    +-------+-------+-------+
+ *    | dir0  | dir1  | dir2<-|--- Internal value provides frame direction index
+ *    +-------+-------+-------+
+ *    ^
+ *    |
+ *    +-- Outer array index corresponds to components of the variable's vectors
+ * 
+ * + * @param pVar A variable created usind new_DasVarVecAry() + * + * @param pNumComp A pointer to a location to receive the number of components + * at each index of this array. There will be no more than DASVEC_MAXCOMP + * in any vector. + * + * @returns A pointer to the vector directions array, or NULL on an error. + * + * @memberof DasVar + */ +DAS_API const ubyte* DasVarVecAry_getDirs(const DasVar* pVar, ubyte* pNumComp); + /** Increment the reference count on a variable * * @returns the new number of references to this variable diff --git a/test/ex15_vector_frame.d3b b/test/ex15_vector_frame.d3b index 1ae4148..d9b65fc 100644 --- a/test/ex15_vector_frame.d3b +++ b/test/ex15_vector_frame.d3b @@ -31,8 +31,12 @@
+ -

EFI SCI @ 128 Hz

+ +

EFI SCI @ 128 Hz

+

Ex Ey

+
diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index 35db68d..c499409 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -436,7 +436,7 @@ bool _cdfOkayish(CDFstatus iStatus){ } /* Use a macro to avoid unneccessary functions calls that slow the program */ -#define _OK( SOME_CDF_FUNC ) ( ((iStatus = (SOME_CDF_FUNC) ) == CDF_OK) || (_cdfOkayish(iStatus)) ) +#define CDF_MAD( SOME_CDF_FUNC ) ( ((iStatus = (SOME_CDF_FUNC) ) != CDF_OK) && (!_cdfOkayish(iStatus)) ) /* ************************************************************************* */ @@ -635,7 +635,7 @@ void* DasProp_cdfEntValues(const DasProp* pProp, long iEntry){ DasErrCode writeGlobalProp(struct context* pCtx, const DasProp* pProp) { - CDFstatus iStatus = CDF_OK; /* Also used by _OK macro */ + CDFstatus iStatus = CDF_OK; /* Also used by CDF_MAD macro */ const char* sName = NULL; long iAttr = 0; @@ -648,7 +648,7 @@ DasErrCode writeGlobalProp(struct context* pCtx, const DasProp* pProp) /* Get attribute number or make a new (why can't CDFlib use "const", is it really so hard? */ if((iAttr = CDFgetAttrNum(pCtx->nCdfId, (char*)sName)) <= 0){ - if(!_OK(CDFcreateAttr(pCtx->nCdfId, sName, GLOBAL_SCOPE, &iAttr))) + if(CDF_MAD(CDFcreateAttr(pCtx->nCdfId, sName, GLOBAL_SCOPE, &iAttr))) return PERR; } @@ -669,7 +669,7 @@ DasErrCode writeGlobalProp(struct context* pCtx, const DasProp* pProp) DasErrCode writeVarProp(struct context* pCtx, long iVarNum, const DasProp* pProp) { - CDFstatus iStatus; /* Used by _OK macro */ + CDFstatus iStatus; /* Used by CDF_MAD macro */ /* If the attribute doesn't exist, we'll need to create it first */ long iAttr; @@ -677,11 +677,11 @@ DasErrCode writeVarProp(struct context* pCtx, long iVarNum, const DasProp* pProp const char* sName = DasProp_cdfName(pProp); if((iAttr = CDFattrId(pCtx->nCdfId, sName)) < 0){ - if(! _OK(CDFcreateAttr(pCtx->nCdfId,sName,VARIABLE_SCOPE,&iAttr))) + if(CDF_MAD(CDFcreateAttr(pCtx->nCdfId,sName,VARIABLE_SCOPE,&iAttr))) return PERR; } - if(!_OK(CDFputAttrzEntry( + if(CDF_MAD(CDFputAttrzEntry( pCtx->nCdfId, iAttr, iVarNum, @@ -697,7 +697,7 @@ DasErrCode writeVarProp(struct context* pCtx, long iVarNum, const DasProp* pProp DasErrCode writeVarStrAttr( struct context* pCtx, long iVarNum, const char* sName, const char* sValue ){ - CDFstatus iStatus; /* Used by _OK macro */ + CDFstatus iStatus; /* Used by CDF_MAD macro */ /* CDF doesn't like empty strings, and prefers a single space instead of a zero length string */ @@ -708,11 +708,11 @@ DasErrCode writeVarStrAttr( long iAttr; if((iAttr = CDFattrId(pCtx->nCdfId, sName)) < 0){ - if(! _OK(CDFcreateAttr(pCtx->nCdfId, sName, VARIABLE_SCOPE, &iAttr ))) + if(CDF_MAD(CDFcreateAttr(pCtx->nCdfId, sName, VARIABLE_SCOPE, &iAttr ))) return PERR; } - if(! _OK(CDFputAttrzEntry( + if(CDF_MAD(CDFputAttrzEntry( pCtx->nCdfId, iAttr, iVarNum, @@ -749,7 +749,7 @@ DasErrCode onStream(StreamDesc* pSd, void* pUser){ if(pDot != NULL) *pDot = '\0'; - if(!_OK( CDFopenCDF(pCtx->sWriteTo, &(pCtx->nCdfId))) ){ + if(CDF_MAD( CDFopenCDF(pCtx->sWriteTo, &(pCtx->nCdfId))) ){ *pDot = '.'; /* Convert back */ return das_error(PERR, "Couldn't open CDF file '%s'", pCtx->sWriteTo); } @@ -758,7 +758,7 @@ DasErrCode onStream(StreamDesc* pSd, void* pUser){ /* Create a new file */ if(pDot != NULL) *pDot = '\0'; - if(!_OK( CDFcreateCDF(pCtx->sWriteTo, &(pCtx->nCdfId)) ) ){ + if(CDF_MAD( CDFcreateCDF(pCtx->sWriteTo, &(pCtx->nCdfId)) ) ){ *pDot = '.'; /* Convert back */ return das_error(PERR, "Couldn't open CDF file '%s'", pCtx->sWriteTo); } @@ -1209,7 +1209,17 @@ DasErrCode makeCdfVar( if(nNonRecDims < 0) return PERR; - /* Create the varyances array. + /* Create the associated varyances array */ + long nRecVary = DasVar_degenerate(pVar, 0) ? NOVARY : VARY; + long aDimVary[DASIDX_MAX - 1] = {NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY}; + for(int i = 0; i < nNonRecDims; ++i){ + if(aNonRecDims[i] > 0) + aDimVary[i] = VARY; + } + + /* Cut out ... + + / * Create the varyances array. * * The way CDFs were meant to be used (see sec. 2.3.11 in the CDF Users Guide) * the VARY flags would would have mapped 1-to-1 to DasVar_degenerate() calls. @@ -1229,8 +1239,7 @@ DasErrCode makeCdfVar( aVaries[i] = VARY; } - // ... but what it is */ - + / * long nRecVary = NOVARY; long aDimVary[DASIDX_MAX - 1] = {NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY}; @@ -1246,6 +1255,7 @@ DasErrCode makeCdfVar( ++j; } } + ... */ /* Attach a small var_cdf_info_t struct to the variable to track the variable ID as well as the last written record index */ @@ -1285,7 +1295,7 @@ DasErrCode makeCdfVar( long cType = GZIP_COMPRESSION; long cParams[CDF_MAX_PARMS]; cParams[0] = 6L; - if(!_OK(CDFsetzVarCompression( + if(CDF_MAD(CDFsetzVarCompression( pCtx->nCdfId, DasVar_cdfId(pVar), cType, cParams ))) return PERR; @@ -1374,6 +1384,94 @@ DasErrCode makeCdfVar( return DAS_OKAY; } +/* ************************************************************************* */ +/* Writing Label Properties */ + +DasErrCode makeCompLabels(struct context* pCtx, DasDim* pDim, DasVar* pVar) +{ + DasStream* pSd = (DasStream*) DasDesc_parent((DasDesc*)DasDesc_parent((DasDesc*)pDim)); + + long iStatus; /* Used by CDF_MAD macro */ + DasErrCode nRet = DAS_OKAY; + + int nFrame = DasVarVecAry_getFrame(pVar); + if(nFrame < 0) + return -1 * nFrame; + + ubyte uNumComp = 0; + const ubyte* pDirs = DasVarVecAry_getDirs(pVar, &uNumComp); + if(pDirs == NULL) + return PERR; + + const DasFrame* pFrame = DasStream_getFrameById(pSd, nFrame); + + /* Figure out the length of the label names */ + long nMaxCompLen = 0; + for(int i = 0; i < uNumComp; ++i){ + const char* sDirName = DasFrame_dirByIdx(pFrame, pDirs[i]); + if(sDirName == NULL) + return das_error(PERR, "Frame direction %hhu is invalid", pDirs[i]); + + int nCompLen = strlen(sDirName); + if(nCompLen > nMaxCompLen) + nMaxCompLen = nCompLen; + } + + /* Get the primary variables name */ + char sVarName[CDF_VAR_NAME_LEN256] = {'\0'}; + if(CDF_MAD(CDFgetzVarName(pCtx->nCdfId, DasVar_cdfId(pVar), sVarName))) + return PERR; + + /* Make the pointer variable name */ + char sLblVarName[CDF_VAR_NAME_LEN256] = {'\0'}; + snprintf(sLblVarName, CDF_VAR_NAME_LEN256 - 1, "%s_comp_lbl", sVarName); + + long nLblVarId = 0; + long nDimVary = VARY; + long nNumComp = uNumComp; /* Store the byte in a long */ + if(CDF_MAD(CDFcreatezVar( + pCtx->nCdfId, /* CDF File ID */ + sLblVarName, /* label varible's name */ + CDF_CHAR, /* CDF type of variable data */ + nMaxCompLen, /* Character length */ + 1, /* We have 1 non-record dim */ + &nNumComp, /* Number of components in first non-record dim */ + NOVARY, /* Not a record varing variable */ + &nDimVary, /* Varys in non-record dim 1 */ + &nLblVarId /* Get the new var's ID */ + ))) + return PERR; + + /* Now write in the labels */ + long nDimIndices = 0; + if(CDF_MAD(CDFsetzVarSeqPos(pCtx->nCdfId, nLblVarId, 0, &nDimIndices))) + return PERR; + + char sCompBuf[DASFRM_DNAM_SZ]; + for(int i = 0; i < uNumComp; ++i){ + memset(sCompBuf, ' ', DASFRM_DNAM_SZ-1); + sCompBuf[DASFRM_DNAM_SZ-1] = '\0'; + const char* sDirName = DasFrame_dirByIdx(pFrame, pDirs[i]); + strncpy(sCompBuf, sDirName, strlen(sDirName)); + if(CDF_MAD(CDFputzVarSeqData(pCtx->nCdfId, nLblVarId, sCompBuf))) + return PERR; + } + + nRet = writeVarStrAttr(pCtx, nLblVarId, "VAR_TYPE", "metadata"); + if(nRet != DAS_OKAY) return nRet; + + /* and make labels for the label variable */ + char sBuf[128] = {'\0'}; + snprintf(sBuf, 127, "%s component labels", sVarName); + + nRet = writeVarStrAttr(pCtx, nLblVarId, "CATDESC", sBuf); + + /* And finally, set the lable pointer for the main variable */ + return writeVarStrAttr(pCtx, DasVar_cdfId(pVar), "LABL_PTR_1", sLblVarName); +} + +/* ************************************************************************ */ + DasErrCode writeVarProps( struct context* pCtx, DasDim* pDim, DasVar* pVar, VarInfo* pCoords, size_t uCoords ){ @@ -1462,6 +1560,12 @@ DasErrCode writeVarProps( else writeVarStrAttr(pCtx, DasVar_cdfId(pVar), "VAR_TYPE", "data"); + /* Handle the component labels for vectors */ + DasErrCode nRet; + if(DasVar_valType(pVar) == vtGeoVec) + if( (nRet = makeCompLabels(pCtx, pDim, pVar)) != DAS_OKAY) + return nRet; + return DAS_OKAY; } @@ -1585,7 +1689,7 @@ const ubyte* _structToTT2k(const ubyte* pData, size_t uTimes) DasErrCode _writeRecVaryAry(CDFid nCdfId, DasVar* pVar, DasAry* pAry) { - CDFstatus iStatus; /* Used by the _OK macro */ + CDFstatus iStatus; /* Used by the CDF_MAD macro */ static const long indicies[DASIDX_MAX] = {0,0,0,0, 0,0,0,0}; static const long intervals[DASIDX_MAX] = {1,1,1,1, 1,1,1,1}; @@ -1617,7 +1721,7 @@ DasErrCode _writeRecVaryAry(CDFid nCdfId, DasVar* pVar, DasAry* pAry) assert(uTotal == uElements); - if(!_OK(CDFhyperPutzVarData( + if(CDF_MAD(CDFhyperPutzVarData( nCdfId, DasVar_cdfId(pVar), DasVar_cdfStart(pVar), /* record start */ From 4a9bba1a0df672d3917efc5292240433916b9f90 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Thu, 29 Feb 2024 01:33:23 -0600 Subject: [PATCH 37/40] Better CDF label handling, release builds --- buildfiles/Linux.mak | 23 +++++-- das2/codec.c | 3 + das2/credentials.c | 20 ++++-- das2/serial.c | 8 +-- das2/tt2000.c | 4 +- das2/variable.c | 12 ++++ utilities/das3_cdf.c | 150 +++++++++++++++++++++++++++++-------------- 7 files changed, 153 insertions(+), 67 deletions(-) diff --git a/buildfiles/Linux.mak b/buildfiles/Linux.mak index 79caf0b..cc82249 100644 --- a/buildfiles/Linux.mak +++ b/buildfiles/Linux.mak @@ -48,9 +48,18 @@ BD=$(BUILD_DIR) LEX=flex YACC=bison -DEFINES:=-DWISDOM_FILE=/etc/fftw/wisdom -D_XOPEN_SOURCE=600 -WARNINGS:=-Wall -Werror -Wno-format-truncation -Wno-deprecated-declarations -#-Wno-format-security +# -Wno-deprecated needed for OpenSSL, removed when call to ERR_load_BIO_strings is fixed +WARNINGS:=-Wall -Werror -Wno-deprecated-declarations +#-Wno-format-security + +# I use string trucation all the time intentianally and make sure it's null +# terminated anyway, so this error doesn't apply + +DEFINES:=-DWISDOM_FILE=/etc/fftw/wisdom -D_XOPEN_SOURCE=600 -Wno-format-truncation + +DBG_DEFINES=-ggdb +O2_DEFINES=-DNDEBUG -O2 -Wno-unused-result -Wno-stringop-truncation + # Conda build does NOT set the include and lib directories within the # compiler script itself, it merely exports ENV vars. This is unfortunate @@ -58,9 +67,11 @@ WARNINGS:=-Wall -Werror -Wno-format-truncation -Wno-deprecated-declarations ifeq ($(CONDA_BUILD_STATE),) -CC=gcc -CFLAGS= $(WARNINGS) -fPIC -std=c99 -I. -ggdb $(DEFINES) -#CFLAGS=-Wall -DNDEBUG -O2 -fPIC -std=c99 -Wno-format-security -I. $(DEFINES) +CC=gcc + +CFLAGS= $(WARNINGS) $(DBG_DEFINES) $(DEFINES) -fPIC -std=c99 -I. +#CFLAGS=$(WARNINGS) $(O2_DEFINES) $(DEFINES) -fPIC -std=c99 -I. + #-fstack-protector-strong #CTESTFLAGS=-Wall -fPIC -std=c99 -ggdb -I. $(CFLAGS) diff --git a/das2/codec.c b/das2/codec.c index a6f629f..78e3fcb 100644 --- a/das2/codec.c +++ b/das2/codec.c @@ -603,7 +603,10 @@ static int _var_text_read( return -1 * das_error(DASERR_ENC, "Expected a text type for the external buffer"); } +#ifndef NDEBUG das_val_type vtAry = DasAry_valType( pThis->pAry ); +#endif + bool bParse = ((pThis->uProc & DASENC_PARSE) != 0); int nRet; char cSep = pThis->cSep; diff --git a/das2/credentials.c b/das2/credentials.c index 08a744e..40a06f7 100644 --- a/das2/credentials.c +++ b/das2/credentials.c @@ -77,13 +77,19 @@ bool das_term_prompt( if(sRealm != NULL) fprintf(stderr, " Realm: %s\n", sRealm); if(sDataset != NULL) fprintf(stderr, " Dataset: %s\n", sDataset); - fprintf(stderr, "Login Name > "); - scanf("%127s", sUser); - SetStdinEcho(false); - fprintf(stderr, "Password > "); - scanf("%127s", sPassword); - fprintf(stderr, "\n"); - SetStdinEcho(true); + int nConv = 0; + while(nConv == 0){ + fprintf(stderr, "Login Name > "); + nConv = scanf("%127s", sUser); + SetStdinEcho(false); + } + nConv = 0; + while(nConv == 0){ + fprintf(stderr, "Password > "); + nConv = scanf("%127s", sPassword); + fprintf(stderr, "\n"); + SetStdinEcho(true); + } return true; } diff --git a/das2/serial.c b/das2/serial.c index 65c4b1f..a9b5c11 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -241,7 +241,7 @@ static void _serial_onOpenDs(context_t* pCtx, const char** psAttr) } char sId[12] = {'\0'}; - snprintf(sId, 63, "id%02d", pCtx->nPktId); + snprintf(sId, 11, "id%02d", pCtx->nPktId); int nRank = 0; int id = pCtx->nPktId; @@ -285,14 +285,14 @@ static void _serial_onOpenProp(context_t* pCtx, const char** psAttr){ pCtx->bInProp = true; - strncpy(pCtx->sPropType, "string", _NAME_BUF_SZ-1); + strncpy(pCtx->sPropType, "string", _TYPE_BUF_SZ-1); for(int i = 0; psAttr[i] != NULL; i+=2){ if(strcmp(psAttr[i],"type") == 0) - strncpy(pCtx->sPropType, psAttr[i+1],_NAME_BUF_SZ-1); + strncpy(pCtx->sPropType, psAttr[i+1],_TYPE_BUF_SZ-1); else if(strcmp(psAttr[i],"name") == 0) strncpy(pCtx->sPropName, psAttr[i+1],_NAME_BUF_SZ-1); else if(strcmp(psAttr[i],"units") == 0) - strncpy(pCtx->sPropUnits, psAttr[i+1],_NAME_BUF_SZ-1); + strncpy(pCtx->sPropUnits, psAttr[i+1],_UNIT_BUF_SZ-1); else{ const char* sEl = (pCtx->pCurDim == NULL) ? "dataset" : ( (pCtx->pCurDim->dtype == DASDIM_DATA) ? "data" : "coord" diff --git a/das2/tt2000.c b/das2/tt2000.c index 104af35..7c004c9 100644 --- a/das2/tt2000.c +++ b/das2/tt2000.c @@ -576,7 +576,7 @@ long long das_utc_to_tt2K(double yy, double mm, double dd, ...) double jd; long long subDayinNanoSecs, nanoSecSinceJ2000; long long t2, iy; - double tmp, opt[6]; + double tmp, opt[6] = {0.0}; va_list ap; int ix; double ly, lm, ld, lh, ln, ls, ll, lu, la; @@ -1019,7 +1019,7 @@ void das_tt2K_to_utc( double epoch, *tmp, tmp1, dat0; long long t2, t3, secSinceJ2000; long nansec; - double *opt[6]; + double* opt[6] = {NULL}; long ye1, mo1, da1, ho1, mi1, se1, ml1, ma1, na1; int ix, leapSec; va_list ap; diff --git a/das2/variable.c b/das2/variable.c index fbc0500..adc0826 100644 --- a/das2/variable.c +++ b/das2/variable.c @@ -1731,6 +1731,15 @@ typedef struct das_var_seq{ } DasVarSeq; +das_val_type DasVarSeq_elemType(const DasVar* pBase) +{ + if(pBase->vartype != D2V_SEQUENCE){ + das_error(DASERR_VAR, "logic error, type not a sequence variable"); + return vtUnknown; + } + return pBase->vt; +} + int dec_DasVarSeq(DasVar* pBase){ pBase->nRef -= 1; if(pBase->nRef > 0) return pBase->nRef; @@ -2203,6 +2212,7 @@ DasVar* new_DasVarSeq( pThis->base.isFill = DasVarSeq_isFill; pThis->base.subset = DasVarSeq_subset; pThis->base.degenerate = DasVarSeq_degenerate; + pThis->base.elemType = DasVarSeq_elemType; pThis->iDep = -1; @@ -2734,7 +2744,9 @@ DasAry* DasVarBinary_subset( size_t uTotCount; ubyte* pWrite = DasAry_getBuf(pAry, pBase->vt, DIM0, &uTotCount); das_datum dm; +#ifndef NDEBUG size_t vSzChk = DasAry_valSize(pAry); +#endif int d = 0; size_t uWrote = 0; diff --git a/utilities/das3_cdf.c b/utilities/das3_cdf.c index c499409..b18bc08 100644 --- a/utilities/das3_cdf.c +++ b/utilities/das3_cdf.c @@ -29,6 +29,7 @@ #include #include #include +#include #ifdef _WIN32 #define strcasecmp _stricmp #define strncasecmp _strnicmp @@ -557,8 +558,9 @@ void* DasProp_cdfValues(const DasProp* pProp){ size_t uBufLen = 0; - ubyte uType = DasProp_type(pProp) & DASPROP_TYPE_MASK; - switch(uType){ + ubyte uType = DasProp_type(pProp); + + switch(uType & DASPROP_TYPE_MASK){ /* Properties don't have fill, so an unsigned byte works */ case DASPROP_BOOL: @@ -640,10 +642,39 @@ DasErrCode writeGlobalProp(struct context* pCtx, const DasProp* pProp) const char* sName = NULL; long iAttr = 0; + const char* sFilterOut[] = { + "LABEL", "VAR_NOTES", "FIELDNAM", "CATDESC", NULL + }; + long n = DasProp_cdfEntries(pProp); for(long iEntry = 0; iEntry < n; ++iEntry){ sName = DasProp_cdfName(pProp); + + /* Prop filtering, + 1. For global props that start with inst just skip past that part + 2. After that if a prop doesn't start with a papitol letter ignore it + 3. Some + */ + if((strncmp(sName, "inst", 4) == 0)&&(sName[4] != '\0')) + sName += 4; + + if(sName[0] != toupper(sName[0])){ + daslog_debug_v("Ignoring lower-case property '%s' in global area.", sName); + return DAS_OKAY; + } + + /* Some props just don't go in the global area */ + for(int j = 0; sFilterOut[j] != NULL; ++j){ + if(strcasecmp(sFilterOut[j], sName) == 0){ + daslog_debug_v("Ignoring property %s is the global area", sName); + return DAS_OKAY; + } + } + if((strstr(sName, "ContactEmail") != NULL)||(strstr(sName, "ContactName") != NULL)){ + daslog_debug_v("Ignoring property %s is the global area", sName); + return DAS_OKAY; + } /* Get attribute number or make a new (why can't CDFlib use "const", is it really so hard? */ @@ -681,12 +712,17 @@ DasErrCode writeVarProp(struct context* pCtx, long iVarNum, const DasProp* pProp return PERR; } + /* Handle an asymmetry in CDF attributes */ + long nElements = DasProp_items(pProp); + if(DasProp_cdfType(pProp) == CDF_UCHAR) + nElements = strlen(DasProp_value(pProp)); + if(CDF_MAD(CDFputAttrzEntry( pCtx->nCdfId, iAttr, iVarNum, DasProp_cdfType(pProp), - (long) DasProp_items(pProp), + nElements, DasProp_cdfValues(pProp) ))) return PERR; @@ -695,7 +731,7 @@ DasErrCode writeVarProp(struct context* pCtx, long iVarNum, const DasProp* pProp } DasErrCode writeVarStrAttr( - struct context* pCtx, long iVarNum, const char* sName, const char* sValue + struct context* pCtx, long iVarNum, const char* sAttrName, const char* sValue ){ CDFstatus iStatus; /* Used by CDF_MAD macro */ @@ -706,9 +742,8 @@ DasErrCode writeVarStrAttr( /* If the attribute doesn't exist, we'll need to create it first */ long iAttr; - - if((iAttr = CDFattrId(pCtx->nCdfId, sName)) < 0){ - if(CDF_MAD(CDFcreateAttr(pCtx->nCdfId, sName, VARIABLE_SCOPE, &iAttr ))) + if((iAttr = CDFattrId(pCtx->nCdfId, sAttrName)) < 0){ + if(CDF_MAD(CDFcreateAttr(pCtx->nCdfId, sAttrName, VARIABLE_SCOPE, &iAttr ))) return PERR; } @@ -725,6 +760,38 @@ DasErrCode writeVarStrAttr( return DAS_OKAY; } +DasErrCode writeVarAttr( + struct context* pCtx, long iVarNum, const char* sAttrName, long nCdfType, + const ubyte* pValue +){ + CDFstatus iStatus; /* Used by CDF_MAD macro */ + + if(pValue == NULL) + return das_error(PERR, "No fill value supplied"); + + if((nCdfType == CDF_CHAR)||(nCdfType == CDF_UCHAR)) + return das_error(PERR, "Call writeVarStrAttr for the string attribute '%s'", sAttrName); + + /* If the attribute doesn't exist, we'll need to create it first */ + long iAttr; + if((iAttr = CDFattrId(pCtx->nCdfId, sAttrName)) < 0){ + if(CDF_MAD(CDFcreateAttr(pCtx->nCdfId, sAttrName, VARIABLE_SCOPE, &iAttr ))) + return PERR; + } + + if(CDF_MAD(CDFputAttrzEntry( + pCtx->nCdfId, + iAttr, + iVarNum, + nCdfType, + 1L, + (void*)pValue + ))) + return PERR; + else + return DAS_OKAY; +} + /* ************************************************************************* */ DasErrCode onStream(StreamDesc* pSd, void* pUser){ @@ -1217,46 +1284,6 @@ DasErrCode makeCdfVar( aDimVary[i] = VARY; } - /* Cut out ... - - / * Create the varyances array. - * - * The way CDFs were meant to be used (see sec. 2.3.11 in the CDF Users Guide) - * the VARY flags would would have mapped 1-to-1 to DasVar_degenerate() calls. - * However the people who invented the ISTP standards took a different route - * with the "DEPEND_N" concept, which isn't as fexible. In that concept, all - * non-varying variables were kinda expected to be 1-D, and "data" variables are - * expected to be cubic, So the VARY's collapse. This is unfortunate as DEPEND_N - * is not as flexible. -cwp - - // What the code should be ... - - long aVaries[DASIDX_MAX] = { - NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY, NOVARY - }; - for(int i = 0; i < DASIDX_MAX; ++i){ - if(!DasVar_degenerate(pVar,i)) - aVaries[i] = VARY; - } - - / * - long nRecVary = NOVARY; - long aDimVary[DASIDX_MAX - 1] = {NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY,NOVARY}; - - int j = 0; - for(int i = 0; i < DASIDX_MAX; ++i){ - if(DasVar_degenerate(pVar, i)) - continue; - if(i == 0){ - nRecVary = VARY; - } - else{ - aDimVary[j] = VARY; - ++j; - } - } - ... */ - /* Attach a small var_cdf_info_t struct to the variable to track the variable ID as well as the last written record index */ DasVar_addCdfInfo(pVar); @@ -1566,6 +1593,33 @@ DasErrCode writeVarProps( if( (nRet = makeCompLabels(pCtx, pDim, pVar)) != DAS_OKAY) return nRet; + /* If I'm a point variable assign properties to me, worry about + * others later (this is going to be a problem) */ + if(DasDim_getPointVar(pDim) == pVar){ + + size_t uProps = DasDesc_length((DasDesc*)pDim); + for(size_t u = 0; u < uProps; ++u){ + const DasProp* pProp = DasDesc_getPropByIdx((DasDesc*)pDim, u); + if(pProp == NULL) continue; + + if(strcmp(DasProp_name(pProp), "cdfName") == 0) + continue; + + if(writeVarProp(pCtx, DasVar_cdfId(pVar), pProp) != DAS_OKAY) + return PERR; + } + } + + /* If this is an array var, get the fill value and make a property for it + but only if we're NOT a coordinate! */ + DasAry* pAry = DasVarAry_getArray(pVar); + if((pDim->dtype == DASDIM_DATA) && (pAry != NULL)){ + const ubyte* pFill = DasAry_getFill(pAry); + nRet = writeVarAttr(pCtx, DasVar_cdfId(pVar), "FILLVAL", DasVar_cdfType(pVar), pFill); + if(nRet != DAS_OKAY) + return nRet; + } + return DAS_OKAY; } @@ -1613,7 +1667,7 @@ DasErrCode onDataSet(StreamDesc* pSd, DasDs* pDs, void* pUser) const DasProp* pProp = DasDesc_getPropByIdx((DasDesc*)pDs, u); if(pProp == NULL) continue; - if(strcmp(DasProp_name(pProp), "CDF_NAME") == 0) + if(strcmp(DasProp_name(pProp), "cdfName") == 0) continue; if(writeGlobalProp(pCtx, pProp) != DAS_OKAY) From 0b2efc2e4ac504f4fba0e78ed5a34a0afd530a17 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Thu, 29 Feb 2024 03:37:42 -0600 Subject: [PATCH 38/40] Handling null phydims and real props --- das2/property.c | 6 +++++- das2/serial.c | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/das2/property.c b/das2/property.c index b72e61a..2a13cf8 100644 --- a/das2/property.c +++ b/das2/property.c @@ -460,7 +460,11 @@ int DasProp_convertInt(const DasProp* pProp, int64_t* pBuf, size_t uBufLen) */ int DasProp_convertReal(const DasProp* pProp, double* pBuf, size_t uBufLen) { - return -1 * das_error(DASERR_NOTIMP, "Real property conversion not yet implemented"); + if(sscanf(DasProp_value(pProp), "%lf", pBuf) != 1) + return -1 * das_error(DASERR_PROP, "Error converting '%s' to a double", + DasProp_value(pProp) + ); + return 1; } /** Convert boolean property values to bytes diff --git a/das2/serial.c b/das2/serial.c index a9b5c11..81f09c3 100644 --- a/das2/serial.c +++ b/das2/serial.c @@ -350,13 +350,18 @@ static void _serial_onOpenDim( } /* freak about about missing items */ - if((sPhysDim == NULL)||(sPhysDim[0] == '\0')){ + if(sPhysDim == NULL){ pCtx->nDasErr = das_error(DASERR_SERIAL, "Attribute \"physDim\" missing for %s groups in dataset ID %d", sDimType, id ); return; } + + /* Assign name to missing physDims */ + if(sPhysDim[0] == '\0') + sPhysDim = "none"; + if((dt == DASDIM_COORD) && ((sAxis == NULL)||(sAxis[0] == '\0')) ){ pCtx->nDasErr = das_error(DASERR_SERIAL, "Attribute \"axis\" missing for physical dimension %s in dataset ID %d", From 61fb576785cff21585a49956adb087b77304aa98 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Thu, 29 Feb 2024 16:02:18 -0600 Subject: [PATCH 39/40] Updated cdf unittest, stray void removal --- das2/property.c | 2 +- test/ex12_sounder_xyz.cdf | Bin 144630 -> 145264 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/das2/property.c b/das2/property.c index 2a13cf8..c253dd7 100644 --- a/das2/property.c +++ b/das2/property.c @@ -167,7 +167,7 @@ DasErrCode DasProp_init( if(nStandard == 2){ das_error_setdisp(nErrDisp); - void das_errdisp_release_lock(); /* LOCK RELEASED */ + das_errdisp_release_lock(); /* LOCK RELEASED */ } } } diff --git a/test/ex12_sounder_xyz.cdf b/test/ex12_sounder_xyz.cdf index 35632888c353860b664214945fe5ebeb18d7214d..6de9ffa5b2145e7670c6b73e9f644302327acad6 100644 GIT binary patch delta 1078 zcmY*XUr3Wt6#vfW{=08;IybjyZjNedVVb%$aZQ~XPDu>|3)#{=2)5Rm4=w{^IMhJJ zE3LQwP%jdceB|Dw*GvRo>MilHmyn1cjq055n`j5_J?H$+x##}Qx%cN+&E7Z7+d;6y zGA9ZDLss6H>~m_CfHUPG^fWS}PN8<;;$^>N|Cr8Wt7@xwE3XnxE8;RP?YUfz`-^gf zD=vznq7;;q1hLP`T3)%&78Gt+6RTCFAgmz_xGqTXZ9}EdhL(an z6k`j9T9v7eve*ZM&$fXURmhEMZXRun&CTPe-0(sS7+Zk1++ec>msFM~6k{6&b;1`) z!bOj&VB3ZY2iJ>ct{5s+2@klh`438y76XPQhcHUH` zYgocWl!hhgm6WnqR4-1Mx&S`0&B8L?{8-#890J~&WLM2)yu~gi%+CQhX0ZeS*iB32 z$q=5)(U2+}(x7@CqT%U}MTQgc@R+kL61_K?!08US!ZohwZCCgls?H?pYFD(JHJRNW z6&3ma!oE zpenPI0<~CZ4LNm<4k;7nU$I?_C$pFaRcghXUGYMwi=SRQO3$>UV2n=>N=Oz9WO;tJ Voj+!g=; delta 828 zcmY*XO=uHA6waI7&Ch1D&3~Ij($pX-EvQW(5Tc+_5sOmLi*3;qwI~EF8d3C84PBxJ z5ucEYhX|fTFm{A`5Y(F&MG&DEp;tkQ7o!2GzS$pX28QqFz4y%yJ3rRE-EZE`6eOjT z%Utl#1eWhw+U3R?Y#rH8O12#NhJ|c}5G?Kj1c+*X?KNM$Si`;2ItD>GSEd%lZgU`S z6Tf2!bf!JB}&F53TF z;`(v%UKkz;jpL`#Cbcj`l2&2JjI>`v_z_QrCjd$~7un1rfB2oqNx From 494081674490a9a2427700c56ffad8f06d27bb71 Mon Sep 17 00:00:00 2001 From: Chris Piker Date: Thu, 29 Feb 2024 16:07:45 -0600 Subject: [PATCH 40/40] Added test cmd --- test/cdf_dump.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100755 test/cdf_dump.py diff --git a/test/cdf_dump.py b/test/cdf_dump.py new file mode 100755 index 0000000..ae0076f --- /dev/null +++ b/test/cdf_dump.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import sys +import das2.pycdf + +f = das2.pycdf.CDF(sys.argv[1]) + +for k in f.attrs: + print(k, "=", f.attrs[k]) + +print() + +for k in f.keys(): + print(k) + print(f[k]) + print(f[k].attrs) + + # Now print the first record + print( f[k].shape) + if len(f[k].shape) == 1: + print( f[k][:] ) + else: + print( f[k][0,:] ) + + print() + +