ELF4N4 (44o((kk  `T  `o/usr/lib/ld.so.1       !#%')*+,-./1234568:;<=>?ABEHIJLNOQRUVWXYZ\]abcegijlmnopqrtuvwxz|~ "$&(079@CDFGKMPST[^_`dfhksy{}%+7HP$!Y8&( 4 4 o\ lHet8_| `,"hbk@ ibl`&T!3P9f@MtV[kq("zi`4f> m`ԹԺTp 4g`h k `` #+ 2 d>D XJ P dbd @o>y _`K  c`   o>  S  L^` ' رB I Za ]`w ` 8     n`  i` ^` lb>$ 4 \K lla g \ p x `^ t [5 { x" x h" m`    ( k> ԡ1 r("!B b`T Q` i q ,]` l_` gb ]`  e>   $   P" -D7D"?@l@Xgbhw(~<|",``jXb`Dj>`` " _`14 >U"^`qml@@n` c`f>Tf`0#0 8%o4L \h`.x,B0e>X`,d`{`$db_sql_codegencrti.scrt1.ocrt1.sfsr.svalues-Xa.cdb_sql_codegen.cparse.cyy_shiftyy_reduceyy_acceptpreparser.cparsefuncs.ctokenize.csqlprintf.cvxprintfbuildpt.cgeneration_utils.cgenerate.cpr_codepr_code_commentpr_headerpr_header_commentdb_create_enter_entopdb_remove_enter_entoparray_dim_attropstructs_enter_entopstructs_exit_entopstructs_attropserialized_length_enter_entopserialized_length_exit_entopserialized_length_attropdeserialize_function_enter_entopdeserialize_function_exit_entopdeserialize_function_attropinsert_struct_function_enter_entopinsert_fields_list_args_attropinsert_fields_declare_args_attropinsert_fields_function_enter_entopinsert_fields_function_exit_entopinsert_fields_function_attropfetch_function_enter_entopdeletion_function_enter_entopdeclare_extern_database_pointers_enter_entopdeclare_database_pointers_enter_entopdeclare_extern_secondary_pointers_idxopdeclare_secondary_pointers_idxopcreate_database_enter_entopcreate_secondary_idxopindex_function_idxopgenerate_iteration_callback_typedef_enter_entopgenerate_full_iteration_enter_entopcheck_pk_constraint_enter_entopgenerate_test.cpr_test_commentpr_testcallback_function_attropcallback_function_exit_entopcallback_function_enter_entopdeclare_record_instances_enter_entopinitialize_database_enter_entopinitialize_index_enter_entopinsertion_test_attropinsertion_test_exit_entopinsertion_test_enter_entopretrieval_test_attropretrieval_test_exit_entopretrieval_test_enter_entopinvoke_full_iteration_exit_entopinvoke_full_iteration_enter_entopinvoke_query_iteration_idxopdeletion_test_exit_entopdeletion_test_enter_entopclose_secondary_test_idxopclose_primary_test_enter_entopremove_secondary_test_idxopremove_primary_test_enter_entopgenerate_verification.cdefine_records_exit_entopdefine_records_enter_entopdefine_records_fields_attrophint_comment.chc_warncrtn.s_PROCEDURE_LINKAGE_TABLE_generate_verificationsqlite3StartTable__environ_locksqlite3RegisterExpr__urem64sqlite3TriggerDeleteStepsqlite3Selectsqlite3Updatesqlite3IsNaN_finisqlite3IdListAppendmaxbinszatoisqlite3StrAccumFinish_environsqlite3RollbackTransaction_initsqlite3ExprSpansqlite3Vacuumsqlite3Dequotesqlite3StrNICmpdo_parsesqlite3Insertis_string_etextsqlite3BeginTransactionsqlite3ParserAlloc_startsqlite3ExprDeletefgets_exitsqlite3ExprFunctionsqlite3DeleteTriggersqlite3Analyzesqlite3DropTriggeroptind__fpstartsqlite3DeleteTablememsetdecl_namesqlite3_snprintf__1cG__CrunMdo_exit_code6F_v_sqlite3AddNotNull_GLOBAL_OFFSET_TABLE_sqlite3ExprListCheckLengthgetoptiterate_over_attributessqlite3AddCollateTypesqlite3CreateForeignKeysqlite3StrAccumResetatexitstrchr_DYNAMICfopen64sqlite3VtabFinishParsestrlensqlite3Reindexsqlite3AlterBeginAddColumnsqlite3DeleteTriggerStepsqlite3_mprintfsqlite3DeferForeignKeysqlite3ExprListAppend__iobis_arraysqlite3StrAccumAppendsqlite3AddColumn_endpreparser__fsrtxnflagcalloc_get_exit_frame_monitorsqlite3VtabArgInitperrorsqlite3ErrStrvfprintfsqlite3SrcListShiftJoinTypesqlite3_vmprintf__fsr_init_valuesqlite3DeleteFromsqlite3IsAsciiIdCharstrncatsqlite3AddCheckConstraintsqlite3AlterRenameTablesqlite3PExprsqlite3AddDefaultValue__udiv64sqlite3ExprSetHeightstrrchrfreesqlite3VMPrintfmain__longdouble_usedsqlite3UpperToLowerstrtoulsqlite3TriggerUpdateStepsqlite3VtabArgExtendsqlite3CreateIndexsqlite3SrcListAppendFromTermsqlite3MPrintfsqlite3ErrorMsg__ctypesqlite3AddPrimaryKeysqlite3SrcListAppendmemcpysqlite3BeginParsecustom_comparator_for_typetoupperprepare_stringparse_hint_commentsqlite3ExprSetCollsqlite3DropTablegeneratereallociterate_over_indexesstrcatsqlite3CreateViewsqlite3ParserFreebdb_create_databasethe_parse_progressiterate_over_entitiessqlite3CommitTransactionthe_schemasqlite3SrcListDeletesetString___Argvsqlite3TriggerSelectStepsqlite3JoinTypearray_dim_namemallocsqlite3FinishCodingoptargdebugsqlite3Attachstrcmpgenerate_testsqlite3SelectNewsqlite3Detachsqlite3SelectDeletesqlite3BeginTriggerline_numbersqlite3AlterFinishAddColumn_lib_versionserialized_length_nameprognamesqlite3StrICmpsqlite3TriggerInsertStepsqlite3VtabBeginParsesqlite3DropIndexsqlite3IdListDeletesqlite3FinishTriggerupcase_env_namedata_setsqlite3EndTablesqlite3KeywordCodesqlite3Parsersqlite3Pragmasqlite3DbMallocZerosqlite3ExprListDeletetolowersqlite3ExprAssignVarNumber_edatasqlite3AddColumnTypelibc.so.1SUNW_1.1SUNW_0.7SYSVABI_1.3SUNWprivate_1.1'= (= 7qN q   | uxwysz !"#$%&'()*+,-./012345678;:?@AIHJDCB<>=GFELKNMPO rTSVUlZ[\dce_^]YXWba`gfihkjn{t }8 &L",$ A ^| jx (  ' $ 5  04 N< 8@ ]D :H L mP xX \ v` Id Vh ^l Lt )  [ 6    O  p c J    S44Pm2PrPP61-/.5]nl  $ kf !SZXthVdbBqs0WWWW:??:cccZ\cppx|_I3XYwzTNQPRVYopq[\]^_`agi{}mn#&"%)uvyzLNMOxw +,efghi'*( ;<@>=~sljbdR[WSTUe78Q^`ac|AjCDEFGJKHkortuvy{UOv",$&s[ WYMR%(NWZ]kr}"N(QRI!\^3TJPS|z!L1IIING`oB~IB:vIIIIII    -0/3568 ;<A !%'EJKF9=&('II{`5DXY=4?F/Q;M-hZ\_rq''eDEE$)*.+#44G7G7IIILI__III4444O4$4$444[ X[,+f"1?CMP|Tz{  !&")'89EFGHJKLMNOPQRSTNO*+IJKLMNOPQRST:<=>?@ABCDEFGHJKLMNOPQRSTXXn\JKLMNOPQRST*+.NOPQRSTXY|}~<=>?@ABCDEFGHJKLMNOPQRST*+,PQRSTT<=>?@ABCDEFGHnJKLMNOPQRST{:ӓ\ذNOg*+NOXY䴵XXbc\<=>?@ABCDEFGHJKLMNOPQRST*+N|}~ЩXY<=>?@ABCDEFGHJKLMNOPQRST*+STҡ<=>?@ABCDEFGHJKLMNOPQRSTȓXYZ]^_ܓhT*+Z[\]^_`g<=>?@ABCDEFGHJKLMNOPQRSTT [\]^_`Z]^_gԽ2*+h"+ʵ1<=>?@ABCDEFGHJKLMNOPQRSTӓ fؐ)bcdeg*+%n'1<=>?@ABCDEFGHJKLMNOPQRSTZ]^_;h*+*+jlm?@<=>?@ABCDEFGHJKLMNOPQRST\;7  jlm*+XYj\lm%'^<=>?@ABCDEFGHJKLMNOPQRST*+PXYXYXY<=>?@ABCDEFGHrJKLMNOPQRST*+ʓ46<=>?@ABCDEFGHJKLMNOPQRST*+jlmcde=>?@ABCDEFGHJKLMNOPQRST*+cde>?@ABCDEFGHJKLMNOPQRST+XYX0Y:0r46|}:NOrWXY\bNOP[WXY\nynDP|}~p{Щk0o|}~k:o [\NOWXY#\a/q158|}~Xcde;in驪ߡ’¬yvwtxpޘbsba(T⫭īūƳ<̘̘͘&˜¸!pppp\ k pruu,,`g,b$--3bzfqqsfz{DD9$|L====????@@AAABD????@@AAAB<;)>>====????@@AAAB$RCE????@@AAABCE>:@@AAAB$<;)>>=====????@@AAAB^AAAB"8*<;)>>====????@@AAAB$t '<q K=T;:)89$<;)>>=====????@@AAABMk+)n7$<;)>>====????@@AAAB, B <;)>>====????@@AAAB=M$,7#Y\]CES #^rCvWXBP<;)>>====????@@AAAB$&a=vWX=Y\]^" "R%C<;)>>====????@@AAAB$O<.K==Jj&u  ;M11/J~~<;)>>====????@@AAAB$=Y\]rG45L^N~?J}} @<;)>>====????@@AAAB$Gv] -CE@HPi@F#G>"$<;)>>====????@@AAAB99$<;)>>====????@@AAAB0$<F)>>===={????@@AAAB/12@01h$;)>>====s????@@AAABo7{)>>=====????@@AAABHD==(==AHD=w( AF54=b===Fz==`KJefpI;<r&KJ}=I;<HD=(=TUAc o|3!aF =h===KJII;<=6s=t%==u==H== $%=&'(====y I*%=`=+,!=)=-.=*=[4=[=E"e/0 mpq 23,6BE(3:TN[SL9O}UQV-i b ydfX$lx+w62?@ADdpqg GxQ \_~oVZjzkWlc_g8 m!'.5YZ=nKh&'*)"I$_,ZmY !nbY0l4`^wvd<Y8 ?B\*gT :c#re+/{7xy91=[a@ Y::]o>i%qY*uz.-fAt2YY 3js56(k !%(/7:=?AFGLUV[_cfkq{~ #(.49=@FJQSZ\^gkqw              $'+453.:B [U^J>#ei?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Usage: %s [-i inputFile] [-h outputHeaderFile] [-o outputFile] [-t testOutputFile] [-d] [-v verificationOutputFile] [-x] .parsing error at end of file: %s parsing error at line %d : %s %s: line %d is too longCan't produce verify when streaming to stdout Can't produce test when streaming to stdout hwcrextra argument %s after switch arguments i:t:o:h:dv:xdb_sqlnear "%T": syntax errorindextoo many arguments on function %Tset listparser stack overflownear "%T": syntax errorReindexAnalyzeVtabFinishParseAddDefaultValueDeleteTriggerDeleteTableVtabBeginParseVtabArgInitVtabArgExtendVacuumUpdateTriggerUpdateStepTriggerSelectStepTriggerInsertStepTriggerDeleteStepSrcListShiftJoinTypeSrcListDeleteSrcListAppendFromTermSelectDeleteSelectRollbackTransactionRegisterExprPragmaPExprJoinTypeInsertIdListDeleteIdListAppendFinishTriggerExprSpanExprSetHeightExprSetCollExprListDeleteExprFunctionExprDeleteExprAssignVarNumberDropTriggerDropTableDropIndexDetachDeleteTriggerStepDeleteFromCreateViewCommitTransactionBeginTriggerBeginTransactionAttachAlterRenameTableAlterFinishAddColumnAlterBeginAddColumnAddNotNullAddCollateTypeAddCheckConstraintUnsupported SQL syntax (%s) unrecognized token: "%T"InfNaN.(NULL)NULL+Inf-Inf%intbitbinnumericdecimalintegertinyintvarcharMalloc failure The index named %s on line %d has the same name as the table at line %d. This is not allowed.Found two declarations of an index named %s, at lines %d and %dIndex %s names unknown column %s in table %sIndex %s names unknown table %sForeign Key Constraint not implemented: FromTable %s FromCol %s ToTable %s ToCol %s Extracting name from a null or empty token Warning: dimension of string "%s %s" is too small to hold a null-terminated string.Zero dimension not allowed for %sUnsupported type %s numberdoublefloatreallongbigintshortsmallintvarchar2varbincharUnexpected value for second parameter in type expression %s Non-numeric or zero size parameter in type expression %s Missing right parenthesis in type expression %s The table %s contains two columns with the same name %s; this is not allowed.The entity named %s on line %d has the same name as the index at line %d. This is not allowed.Found two declarations of a table named %s, at lines %d and %dThe table name must be simple: %s.%sPlease specify CREATE DATABASE before CREATE TABLEEncountered two CREATE DATABASE statements; only one is allowedDB_BTREEMalloc failedExtracting name from a null or empty tokenunknown errorfile is encrypted or is not a databasebind or column index out of rangeauxiliary database format errorauthorization deniedlarge file support is disabledlibrary routine called out of sequencedatatype mismatchconstraint failedString or BLOB exceeded size limitdatabase schema has changedtable contains no dataunable to open database filedatabase or disk is fulldatabase disk image is malformeddisk I/O errorinterruptedattempt to write a readonly databaseout of memorydatabase table is lockeddatabase is lockedcallback requested query abortaccess permission deniedSQL logic error or missing databasenot an error} ); %s0) txn_txnp, %s %s%s%s %s; #include "%s" #include #include #include #include #include #include #include "db.h" Header file for a Berkeley DB implementation generated from SQL DDL by db_sqlThe table "%s" (defined near line %d) lacks a primary key, which is not allowed. All tables must have a designated primary key. fprintf(stderr, "Stopping initialization because of error\n"); return -1; exit_error: return 0; %s_envp->txn_begin(%s_envp, NULL, &%s_txnp, 0); int initialize_%s_environment() { if (create_%s_env(&%s_envp) != 0) goto exit_error; DB_TXN * %s_txnp = NULL; DB_ENV * %s_envp = NULL; extern DB_TXN * %s_txnp; extern DB_ENV * %s_envp; int initialize_%s_environment(); This convenience method invokes all of the environment and database creation methods necessary to initialize the complete BDB environment. It uses the global environment and database pointers declared below. You may bypass this function and use your own environment and database pointers, if you wish.Functions for doing iterations over an entire primary databaseint %s_full_iteration(DB *dbp, %s %s_iteration_callback user_func, void *user_data); assert(data_dbt.size == 0); deserialize_%s_data(data_dbt.data, &deserialized_data); (*user_func)(user_data, &deserialized_data); } if (ret != DB_NOTFOUND) { dbp->err(dbp, ret, "Full iteration"); cursorp->close(cursorp); return ret; } cursorp->close(cursorp); return 0; } int %s_full_iteration(DB *dbp, %s %s_iteration_callback user_func, void *user_data) { DBT key_dbt, data_dbt; DBC *cursorp; %s_data deserialized_data; int ret; memset(&key_dbt, 0, sizeof(key_dbt)); memset(&data_dbt, 0, sizeof(data_dbt)); if ((ret = dbp->cursor(dbp, %s, &cursorp, 0)) != 0) { dbp->err(dbp, ret, "creating cursor"); return ret; } while ((ret = cursorp->get(cursorp, &key_dbt, &data_dbt, DB_NEXT)) == 0) { memcpy(&deserialized_data.%s, key_dbt.data, sizeof(deserialized_data.%s)); These typedefs are prototypes for the user-written iteration callback functions, which are invoked during full iteration and secondary index queriestypedef void (*%s_iteration_callback)(void *, %s_data *); Index creation and removal functionsint %s_query_iteration(DB *secondary_dbp, %s %s %s%s_key, %s_iteration_callback user_func, void *user_data); int %s_query_iteration(DB *secondary_dbp, %s %s %s%s_key, %s_iteration_callback user_func, void *user_data) { DBT key_dbt, pkey_dbt, data_dbt; DBC *cursorp; %s_data deserialized_data; int flag = DB_SET; int ret; memset(&key_dbt, 0, sizeof(key_dbt)); memset(&pkey_dbt, 0, sizeof(pkey_dbt)); memset(&data_dbt, 0, sizeof(data_dbt)); if ((ret = secondary_dbp->cursor(secondary_dbp, %s, &cursorp, 0)) != 0) { secondary_dbp->err(secondary_dbp, ret, "creating cursor"); return ret; } key_dbt.data = %s%s_key; key_dbt.size = %s(%s_key)%s; while ((ret = cursorp->pget(cursorp, &key_dbt, &pkey_dbt, &data_dbt, flag)) == 0) { memcpy(&deserialized_data.%s, pkey_dbt.data, sizeof(deserialized_data.%s)); deserialize_%s_data(data_dbt.data, &deserialized_data); (*user_func)(user_data, &deserialized_data); if (flag == DB_SET) flag = DB_NEXT_DUP; } if (ret != DB_NOTFOUND) { secondary_dbp->err(secondary_dbp, ret, "Querying secondary"); return ret; } cursorp->close(cursorp); return 0; } int remove_%s_index(DB_ENV * envp%s); int remove_%s_index(DB_ENV *envp%s) { return envp->dbremove(envp, %s, "%s.db", NULL, 0); } int create_%s_secondary(DB_ENV *envp, %sDB *dbpp, DB **secondary_dbpp); int create_%s_secondary(DB_ENV *envp, %s DB *primary_dbp, DB **secondary_dbpp) { int ret; char * secondary_name = "%s.db"; if ((ret = create_database(envp, %s, secondary_name, secondary_dbpp, DB_CREATE, %s, DB_DUPSORT, %s)) != 0) return ret; if ((ret = primary_dbp->associate(primary_dbp, %s, *secondary_dbpp, &%s_callback, DB_CREATE)) != 0) { (*secondary_dbpp)->err(*secondary_dbpp, ret, "DB->associate: %%s.db", secondary_name); return ret; } return 0; } int %s_callback(DB *dbp, const DBT *key_dbt, const DBT *data_dbt, DBT *secondary_key_dbt) { int ret; %s_data deserialized_data; memcpy(&deserialized_data.%s, key_dbt->data, key_dbt->size); deserialize_%s_data(data_dbt->data, &deserialized_data); memset(secondary_key_dbt, 0, sizeof(DBT)); secondary_key_dbt->size = %s(deserialized_data.%s)%s; secondary_key_dbt->data = malloc(secondary_key_dbt->size); memcpy(secondary_key_dbt->data, %sdeserialized_data.%s, secondary_key_dbt->size); /* tell the caller to free memory referenced by secondary_key_dbt */ secondary_key_dbt->flags = DB_DBT_APPMALLOC; return 0; } if (create_%s_secondary(%s_envp, %s%s%s_dbp, &%s_dbp) != 0) goto exit_error; if (create_%s_database(%s_envp, %s%s&%s_dbp) != 0) goto exit_error; DB *%s_dbp = NULL; extern DB *%s_dbp; Functions for deleting records by keyint delete_%s_key(DB *dbp, %s%s %s%s_key); if ((ret = dbp->del(dbp, %s, &key_dbt, 0)) != 0) { dbp->err(dbp, ret, "deleting key %s", %s_key); return ret; } return 0; } int delete_%s_key(DB *dbp, %s%s %s%s_key) { DBT key_dbt; int ret; %s %scanonical_key = %s_key; memset(&key_dbt, 0, sizeof(key_dbt)); key_dbt.data = %scanonical_key; key_dbt.size = Functions for retrieving records by keyint get_%s_data(DB *dbp, %s%s %s%s_key, %s_data *data); return 0; } assert(data_dbt.size == 0); deserialize_%s_data(data_dbt.data, data); %s(canonical_key)%sDB_TXN *txn, if ((ret = dbp->get(dbp, %s, &key_dbt, &data_dbt, 0)) != 0) { dbp->err(dbp, ret, "Retrieving key %s", %s_key); return ret; } assert(data_dbt.size <= %s); memcpy(&data->%s, key_dbt.data, sizeof(data->%s)); int get_%s_data(DB *dbp, %s %s %s%s_key, %s_data *data) { DBT key_dbt, data_dbt; int ret; %s %scanonical_key = %s_key; memset(&key_dbt, 0, sizeof(key_dbt)); memset(&data_dbt, 0, sizeof(data_dbt)); memset(data, 0, sizeof(%s_data)); key_dbt.data = %scanonical_key; key_dbt.size = Functions for inserting records by providing each field value as a separate argumentFunctions for inserting records by providing the full corresponding data structuredata.%s = %s; memcpy(data.%s, %s, %s); strncpy(data.%s, %s, %s); assert(strlen(%s) < %s); txn, return %s_insert_struct(dbp, %s&data); %s_data data; { ); int %s_insert_fields(DB *dbp%s, int %s_insert_fields(DB * dbp%s, ) , int %s_insert_struct(DB *dbp, %s%s_data *%sp); %d%s, serialized_data, &data_dbt* char serialized_data[%s]; DB_TXN *txn, if ((ret = dbp->put(dbp, %s, &key_dbt, &data_dbt, 0)) != 0) { dbp->err(dbp, ret, "Inserting key %s", %s_key); return -1; } return 0; } int ret; %s %s%s_key = %sp->%s; memset(&key_dbt, 0, sizeof(key_dbt)); memset(&data_dbt, 0, sizeof(data_dbt)); serialize_%s_data(%sp, &key_dbt int %s_insert_struct( DB *dbp, %s%s_data *%sp) { DBT key_dbt, data_dbt; buffer += sizeof(%sp->%s); memcpy(%s%sp->%s, buffer, sizeof(%sp->%s)); len = strlen(buffer) + 1; assert(len <= %s); memcpy(%sp->%s, buffer, len); buffer += len; void deserialize_%s_data(char *buffer, %s_data *%sp) { size_t len; p += sizeof(%sp->%s); memcpy(p, %s%sp->%s, sizeof(%sp->%s)); len = strlen(%sp->%s) + 1; assert(len <= %s); memcpy(p, %sp->%s, len); p += len; } data_dbt->data = buffer; data_dbt->size = p - buffer; memset(buffer, 0, %s); p = buffer; ; + 1sizeofstrlen%s(%sp->%s)%s&) { , char *buffer, DBT *data_dbt) { size_t len; char *p; key_dbt->data = %s%sp->%s; key_dbt->size = int serialize_%s_data(%s_data *%sp, DBT *key_dbtMacros for the maximum length of the records after serialization. This is the maximum size of the data that is storedData structures representing the record layoutsArray size constants. + \ %ssizeof(%s_data_specimen.%s)#define %s (%s_data %s_data_specimen; } %s_data; typedef struct _%s_data { #define %s %d Database removal functionsint remove_%s_database(DB_ENV *envp%s); txn, DB_TXN *txn int remove_%s_database(DB_ENV *envp%s) { return envp->dbremove(envp,%s, "%s.db", NULL, 0); } Database creation/initialization functionsint create_database(DB_ENV *envp, DB_TXN *txn, char *db_name, DB **dbpp, int flags, DBTYPE type, int moreflags, int (*comparator)(DB *, const DBT *, const DBT *)) { int ret; FILE *errfilep; if ((ret = db_create(dbpp, envp, 0)) != 0) { envp->err(envp, ret, "db_create"); return ret; } if (moreflags != 0) (*dbpp)->set_flags(*dbpp, moreflags); if (comparator != NULL) (*dbpp)->set_bt_compare(*dbpp, comparator); envp->get_errfile(envp, &errfilep); (*dbpp)->set_errfile(*dbpp, errfilep); if ((ret = (*dbpp)->open(*dbpp, txn, db_name, NULL, type, flags, 0644)) != 0) (*dbpp)->err(*dbpp, ret, "DB->open: %%s", db_name); return ret; } A generic function for creating and opening a databasestatic int compare_int(DB *dbp, const DBT *a, const DBT *b) { int ai, bi; memcpy(&ai, a->data, sizeof(int)); memcpy(&bi, b->data, sizeof(int)); return (ai - bi); } int compare_long(DB *dbp, const DBT *a, const DBT *b) { long ai, bi; memcpy(&ai, a->data, sizeof(long)); memcpy(&bi, b->data, sizeof(long)); return (ai - bi); } These are custom comparator functions for integer keys. They are needed to make integers sort well on little-endian architectures, such as x86. cf. discussion of btree comparators in 'Getting Started with Data Storage' manual.int create_%s_database(DB_ENV *envp,%s DB **dbpp); DB_BTREENULL DB_TXN *txn,int create_%s_database(DB_ENV *envp,%s DB **dbpp) { return create_database(envp, %s, "%s.db", dbpp, DB_CREATE, %s, 0, %s); } int create_%s_env(DB_ENV **envpp); The environment creation/initialization function | DB_INIT_LOG | DB_INIT_TXN (*envpp)->set_cachesize(*envpp, %s_CACHE_SIZE_GIGA, %s_CACHE_SIZE_BYTES, 1); if ((ret = (*envpp)->open(*envpp, env_name, flags, 0)) != 0) { (*envpp)->err(*envpp, ret, "DB_ENV->open: %%s", env_name); return 1; } return 0; } int create_%s_env(DB_ENV **envpp) { int ret, flags; char *env_name = "./%s"; if ((ret = db_env_create(envpp, 0)) != 0) { fprintf(stderr, "db_env_create: %%s", db_strerror(ret)); return 1; } (*envpp)->set_errfile(*envpp, stderr); flags = DB_CREATE | DB_INIT_MPOOL %s; #define %s_CACHE_SIZE_BYTES %lu #define %s_CACHE_SIZE_GIGA %lu Cache size constants, specified in a hint comment in the original DDL} ); "n"%lf%ldint_txnp, printf("%s.%s: %s_dbp = NULL; remove_%s_index(%s_envp%s%s%s); _txnpremove_%s_database(%s_envp%s%s%s); if (%s_dbp != NULL) %s_dbp->close(%s_dbp, 0); if (%s_dbp != NULL) %s_dbp->close(%s_dbp, 0); if (ret != 0) { printf("Delete error\n"); goto exit_error; } ret = delete_%s_key( %s_dbp, %s%s%s); \n", %s_record.%s); \n", compare_binary(%s_record.%s, %s)); if (ret != 0) { printf("Retrieve error\n"); goto exit_error; } ret = get_%s_data( %s_dbp, %s%s%s, &%s_record); printf("Retrieval of %s record by key\n"); void %s_iteration_callback_test(void *msg, %s_data *%s_record) { printf("In iteration callback, message is: %%s\n", (char *)msg); \n", %s_record->%s); \n", compare_binary(%s_record->%s, %s)); printf("%s->%s: , if (ret != 0) { printf("Insert error\n"); goto exit_error; } ret = %s_insert_fields(%s_dbp, %s%s, &%s_iteration_callback_test, "retrieval of %s record through %s query"); %s_query_iteration(%s_dbp, %s%sif (ret != 0) { printf("Full Iteration Error\n"); goto exit_error; } ret = %s_full_iteration(%s_dbp, %s%s&%s_iteration_callback_test, "retrieval of %s record through full iteration"); %s_data %s_record; 99.599binary_data"ninety-nine"Unexpected C type in schema: %sdouble%ffloatlong%dshortchar%s} return ret; %s_envp->close(%s_envp, 0); Finally, close the environment if (ret != 0) %s_txnp->abort(%s_txnp); else %s_txnp->commit(%s_txnp, 0); Delete the primary databasesDelete the secondary index databasesClose the primary databasesClose the secondary index databasesexit_error: Now delete a record from each database using its primary key.For the secondary indexes, query for the known keys. This also results in the ...iteration_callback_test function's being called for each record found.Now try iterating over every record, using the ...full_iteration functions for each database. For each record found, the appropriate ...iteration_callback_test function will be invoked (these are defined above).Next, retrieve the records just inserted, looking them up by their key valuesNow that everything is initialized, insert a single record into each database, using the ...insert_fields functions. These functions take each field of the record as a separate argumentret = initialize_%s_environment(); if (ret != 0) { printf("Initialize error"); goto exit_error; } Use the convenience method to initialize the environment. The initializations for each entity and environment can be done discretely if you prefer, but this is the easy way.for (i = 0; i < MAXBINSZ; i++) binary_data[i] = rand(); Fill the binary test data with random values main(int argc, char **argv) { int i; int ret; These are the iteration callback functions. One is defined per database(table). They are used for both full iterations and for secondary index queries. When a retrieval returns multiple records, as in full iteration over an entire database, one of these functions is called for each record foundchar * compare_binary(char *p, int len) { if (memcmp(p, binary_data, len) == 0) return "*binary values match*"; return "*binary values don't match*"; } A very simple binary comparison functionchar binary_data[MAXBINSZ]; #define MAXBINSZ %d Test data for raw binary types #include "%s" Simple test for a Berkeley DB implementation generated from SQL DDL by db_sql int%s_data_serialized_length%s[%s]%s_data_%s_lengthNULL&compare_longlong&compare_int&& ); , } {0}int"I""H""G""F""E""D""C""B""A"9.9"9"8.8"8"7.7"7"6.6"6"5.5"5"4.4"4"3.3"3"2.2"2"1.1"1""0"assert(_txnp, "eight""seven""three"occurence = 0; %s_dbp = NULL; "seventy-seven"remove_%s_index(%s_envp%s%s%s); _txnpremove_%s_database(%s_envp%s%s%s); if (%s_dbp != NULL) %s_dbp->close(%s_dbp, 0); if (ret == %s) ret = 0; else { printf("ERROR IN DELETE NO.%d record in %s_dbp\n"); goto exit_error; } DB_NOTFOUNDret = delete_%s_key( %s_dbp, %s%s%s); %s_record.%s == %s_record_array[i].%s); (fabs(%s_record.%s - %s_record_array[i].%s) <= 0.00001)); strcmp(%s_record.%s, %s_record_array[i].%s) == 0); compare_binary(%s_record.%s, %s, i) == 0); if (ret != 0) { printf("ERROR IN RETRIEVE NO.%%d record in %s_dbp\n", i); goto exit_error; } &%s_record); %s_record_array[i].%s, binary_data[i], %s_txnp, ret = get_%s_data( %s_dbp, (%s_record->%s == %s_record_array[i].%s) (fabs(%s_record->%s - %s_record_array[i].%s) <= 0.00001) (strcmp(%s_record->%s, %s_record_array[i].%s) == 0) (compare_binary(%s_record->%s, %s, i) == 0) if (if (same == 0) assert(0); else count_iteration++; same = 1; break; ) { int i; int same = 0; for (i = 0; i < %d; i++) { void %s_iteration_callback_test(void *msg, %s_data *%s_record) { binary_data[i]if (ret != 0) { printf("ERROR IN INSERT NO.%%d record in %s_dbp\n", i); goto exit_error; } ret = %s_insert_fields( %s_dbp, %s%sassert(count_iteration == occurence); occurence++; if (%s_record_array[j].%s == %s_record_array[i].%s) { if (fabs(%s_record_array[j].%s - %s_record_array[i].%s) <= 0.00001) { if (strcmp(%s_record_array[j].%s, %s_record_array[i].%s) == 0) { for (j = 0; j < %d; j++) { assert(count_iteration == 1); printf("%s_record_array[%%d].%s: %%d\n", i, count_iteration); , &%s_iteration_callback_test, "retrieval of %s record through %s query"); %s_record_array[i].%s%s_query_iteration(%s_dbp, %s%sif (ret != 0) { printf("Full Iteration Error\n"); goto exit_error; } printf("%s full iteration: %%d\n", count_iteration); assert(count_iteration == %d); ret = %s_full_iteration(%s_dbp, %s%s&%s_iteration_callback_test, "retrieval of %s record through full iteration"); count_iteration = 0; %s_data %s_record; , }; ,}{%s_data %s_record_array[] = { Unexpected C type in schema: %sdoublefloatlongshortchar%s%d%cbinary_data[return ret; if (ret == 0) printf("*****WELL DONE!*****\n"); if (ret = %s_envp->close(%s_envp, 0)) return ret; Finally, close the environment if (ret != 0) %s_txnp->abort(%s_txnp); else %s_txnp->commit(%s_txnp, 0); Delete the primary databasesDelete the secondary index databasesClose the primary databasesClose the secondary index databasesexit_error: Now delete a record from each database using its primary key.For the secondary indexes, query for the known keys. This also results in the ...iteration_callback_test function's being called for each record found.Now try iterating over every record, using the ...full_iteration functions for each database. For each record found, the appropriate ...iteration_callback_test function will be invoked (these are defined above).} Next, retrieve the records just inserted, looking them up by their key valuesFirst, insert some records into each database using the ...insert_fields functions. These functions take each field of the record as a separate argumentfor (i = 0; i < %d; i++) { Now that everything is initialized, insert some records into each database, retrieve and verify themret = initialize_%s_environment(); if (ret != 0) { printf("Initialize error"); return ret; } Use the convenience method to initialize the environment. The initializations for each entity and environment can be done discretely if you prefer, but this is the easy way.for (i = 0; i < %d; i++) for (j = 0; j < MAXBINSZ; j++) binary_data[i][j] = rand(); Fill the binary test data with random values main(int argc, char **argv) { int i; int j; int ret; int occurence; These are the iteration callback functions. One is defined per database(table). They are used for both full iterations and for secondary index queries. When a retrieval returns multiple records, as in full iteration over an entire database, one of these functions is called for each record foundint compare_binary(char *p, int len, int dem) { if (memcmp(p, binary_data[dem], len) == 0) { return 0; } else { return 1; } } A very simple binary comparison functionTest data for input recordint count_iteration; char binary_data[%d][MAXBINSZ]; #define MAXBINSZ %d Test data for raw binary types #include "%s" #include #include Simple test for a Berkeley DB implementation generated from SQL DDL by db_sql 99.999"ninety-nine"88.888"eighty-eight"77.77766.666"sixty-six"55.555"fifty-five"44.444"forty-four"33.333"thirty-three"22.222"twenty-two"11.111"eleven"9"nine"876"six"5"five"4"four"32"two"1"one"0"zero"DB_HASH, near line %d Warning: incorrect hint comment syntax with property %sNo value specified for property %s Property setting (%s) with no antecedent SQL statementUnrecognized index property %sUnrecognized entity property %sDBTYPEUnrecognized entity value %sWrong entity value %sunknown DBTYPE %s for antecedent %s, using default of DB_BTREEhashDB_BTREEbtreeUnrecognized environment property %sUnrecognized environment value %sNONTRANSACTIONALTRANSACTIONALMODECACHESIZEunrecognized characters in integer string %scannot parse integer string %sWarning: 5 % % h% h% h% h% h %4 h(%< h0%@ h8p%D h@`%H hHP%L hP@%P hX0%X h` %\ hh%` hp%d hx%h h%l h%t h% h% h% h% h% hp% h`% hP% h@% h0% h % hjjR t#hPH"tL"t PE("u T("RU D"RP<PjURQt`|$уT" D$td$у`tƒ 3fd$f T$tfd$f L$l$YZ]ÐUSVW\[`U :PREPDžDžDžDžDž$ <9(,0u :H4pዅ\L>.WV_)0E8 +u::QPt 3$j/zuj\ct@8t@j.PBtj.++  :P DPVP09QP:Pj!$G3|:PAft 3/j/uj\t@8t@j.Ptj.+  x:PDPVP09QPx:P,3$3|:Pt"|:QPu 3|:QPs3t>:P$p V 0<9PV$Dž3DžThP3R$ :t93 Pg PO=83 -u3< 3/u3*n*uV3F*u.-u/uu <;uB+xDtPVPjWPVPVW+@PV PVeYDtPVljePVZhPDM0i00@[ta V^vPVVu V,9P$ P j 谺 t Ft ,3zH:P$p V\ 0<9PVD?E 4:P$p V 0<9PVe_^[à 0<9P$ P뿃 l 0<9P$ P놃 3 0<9P$ PRJ 0<9P$ P 0<9P$ Pd6_}mOAU hUtÐUSV[Guk QeS tG tOE t[Gz tIf tER tG> tG* tF tF tsG t_G tI t7G t#G tkF tFv tHb tKN tH: tF& tL tL toF t[F tE t3F t{E tL tEu tJd tKS tEB tE1 tD tD tJH VU e^[Ð{jYE1 }iUA-yeQ=)USVW[UH diuFEH4k yeS tB t@ tB tE t}@ tB} tCg t[BQ tEB; tB% tB tkD tB t{B tA tOB tC t7Gu tC_ tSAI tG3 tG tA tA t@ tsA t@ tWG t1A t/Fp tG] t@J t@7 t+@$ t@ tEH;PuהE@F&kEM H MH$MYP(X,IH0e_^[ÐmZG4! q[E/iS='USVWL[÷}kEljE`JEȉM̋BEЋu 8^"EPwF9 w*G&EHQHQPwkGEPwGjwGEpw7EPw7EHQpw8EHQPw]8mjjwF8VEHQPwA;jjwhA$Epw: Ep0pw@8E0pw;EE ujjj0w? EȅMQ؉P(APQu=w jjjj0wx? EȅV@(EHQPui=1GMq0zCEGMqQ0BEOEppj0P1B EOEpj0păP1B EO Epp0P1"C E{EoEHt I(A$ EMDEPJ(@E9E@E+EEdE@E E@EEE)EEEtLpppppHQPw60MAtAI MAIEȉMuE@؉EEĉEEPH+P؋E EăEPE0W;, jjEHQPw=  jEPHQPwl=  jEHQHQPwH=  jEHQHQPw$=  jEHQHQPw=  wAmE0pw7REeBE@3E* jjjhW,< EuPW9EPujWxEȃ:QPWͅUȅE@ k J AE@3E* jjjhW; EuPW9EHQupWEȃ:QPW?Uȅ=E@ k J A'EEjEPj7MqjQRLR`1PAPAPWM0jEpjW:EjMqPW%EjEppWEjMqPWE^ jE0phwX: EȅtMIH u8 Et^7EHQPu)8 jjjjw9 Eȅt,MP8QRQP7u7 E4;EHMQPj7wE jjEpj@Wt9 Eȅt5jjjjjjjujW;0MȉA8 u7 ur<Ext jjujW 9 EȋExuEEE@uPu6 jjEpj@W8 EȅtM H8 u~6 E0:Ext jjujWr8 EȃEH@QPuo67 jjjjnw88 EȅtM H8 u5 E4T:EHQPu 6 jjEpj@W7 EȅtM H u5 E04Ext jjujW7 EȃEH@QPu5GjEpjWjMqPWE jjEpj?W7 EȅtMH u64Ext jjujW6 EȃMAIăPQu4 jjEpjVw6 EȃUJQRP4i jjEpjUwf6 EȃUJQRPh40 jjEppw,6 EȃUJQRP.4 jjEpjBw5 EȃMQIRQP3 jjEpjBw5 EȃMQIRQP3~ jjEpjAw{5 EȃMQIRQPz3B jjE0pw?5 EȃMQ RQP?3jE0jW}}jMqPWk}MytjqPWS}MQPW1EȋExt jjujW4 EȃMI؃PQu2MȅgA fAUEH@MȉEE:EH@MȉEE jEpppw4 E EPjw0Eȅ EȋMQIPH E؉EPjw0EȃMQuP1 GEEĉEt 9d uE0u>0EȃMQuPm1E|, Mȅ! AfA EPjpjw3 EȃMQRQP1 EHQpwP0E  EPjjhW2 EȃPW. EPwK3Eh  EPjjjWc2 E EPjjjWG2 E EPjjjW+2jPujpW2jPujpW 2 E  EPjjjW1 E EPjjjW1jPujpW1 E EPjjjw1 Ev EHQjjpwq1 ER EMȃPRPQi/1 OEPj1/E GMQRq0/E jEpjwdyE jEppwFyE Eppjjpw/ Ep0pjpw/ m Eppj0pw/ J EHQpjwxE+ EHQppwxE ;PE0WyEpp0pW4 Ep0w) EHM̋@E EHMȋ@E E@EE| 3EȉEo Ec EW jE0jwwEȅ8 H - E@A jE0pwwЉUȅE@ k J AE@EEEEEE@EEPHQPwB.EjEPPw%.Ejjjuw .EPEDGMQRQj0,xE%Ee Ep1jjjjjjjEpjW00EEp0pčHQjjpw0 EMq1jAPAPAPqw0 EEyEUȅi ^@k,D OE@Eȃ P05Gj00躀Ee jjjjkW- E EPjjjW,juPjpW, jPEpWGuE jjjjkW, jPE0WuEOE@u3EPE0pQtEQEEEE8Eppp0pppppw.0EEkUJtABJA  Et0.E@EE@EGEQE؉U܋AI EMjjjjEPEpum-Et-ZE0jpw&@EpppHQHQPw$ E0jpw&EEEc E0pHQpW8vEpW%wEpwjjjjEppjjjwv0b jEpppwr AE@MȉE.eEE@EEE EEE@EEE@EEE@EE3EȉEM#A AE{EoEPwUEpwu< Ep0Pjwt E0wSjjjjEpjjjjwbu0 Epp0jw"q Epw EPjjjXW(PWv jjEpjUWr(PW\LE0wD4Epw+EMȋ}̋PH+ ωMUBEȋM̋BB+B EUB؉EȋM̋BB+B EEH@MȉEEPw_i{EH@MȉEgEPwgEH@MȉE>G}OMȋM̋lp+W E Epjjw+vEtL)jEHQPwvEEEpjjpčHQPwd w(} wmE@EbEYE0wDjwb2jwb jwb w[ussuk+щUU+ЋB CC$'=M}=t(UBkU+щB z$EȋM̉B(J,EЉB0MQWPV V e_^[ÃP:PuvTTTFTT4"TTTTpGTTT_9TTTTTT  TzQ9th\PD66&TTTT}6q6q66eY?[OB9z?/{m5mI) 6Yf{D#j{CY55555555M^$$ cmfE9-hG(TTwk_wJJ5TT)`A#9dI0)TT|TTgM.TTTTUSVW[{uFE4kxeS* t t t t tA tK} tg tQ t ; t% t t/ tU t? t t t t u t_ tI t!3 t! ty tc t t7 t} t! t tp t ] tJ t7 t$ t tJEMHe_^[taK5 oYC-}gQ;%USVW<[ûu>}3FF FMEMȉE̋EFE E=kL  EEāKtuKMȍ< >s :;!tIv8s";u S'"E{$' E=M=} PV>(W } kL  EEāKtuKMȍ< >s :;!tIv8s";u S'"E{$' E=M=} ~{ FMčeST9 u| ui uV u>C u0 u uA  u uw u u u u u ur u_ uGL u9 u!& u uG u4 u u uG u u! u~ un u^ uN ur> ub. u u uF~k QeS: tB t tz tnf tR t> tn* t t t2 t t t t t* tv tjb tN tB: t& tf tR t. t tb t t: t tu td tS tB tr1 t t tSH~PV QdfFEċH4k yeS8 t t  t t= t  t} t7g t}Q tg; t% t t t t t tq t tYu t_ tuI t3 t t t t t t  ty tS tQp t:] tJ t7 tM $ t:  tH;PuaE@F#kD E D$EȋỦD(T,EЉD0Ne_^[ÍM؋EȋỦE؉U܋EЉEFEQ:QPaE@FGUfffffffffffffB/ffffffffff fffffffu_fIf3ffmfWA+ffffffffffff{feo_O?/ taN;(}jWD1APPPPPPPPPPPPP0PPPPPPPPPPPPPPPPPzfPRP>*PPPvbNP:PP&PPPPPPPPPPUSV[u7E u  MQplPu uTu !uz EPplj uEPplVu 6u } u2EuPGu } u/e^[ÃEP4;Pu\E@׃EP4;Puc\E@뵐US[Mu(P>P$ P耰e[ÃP>PQ[US[eMu(@>P$ P e[Ã@>PQ[US[Mu(l;P$ Pe[Ãl;PQ9[US[åMu(4>P$ P`e[Ã4>PQZUS[EMu( >P$ Pe[à >PQyZUS[Mu(>P$ P蠮e[Ã>PQZUS[ÅMu(=P$ P@e[Ã=PQYUS[%Mu(T;P$ Pe[ÃT;PQYYUS[ſMu(=P$ P耭e[Ã=PQXUS[eMu(=P$ P e[Ã=PQXUS[Mu(=P$ Pe[Ã=PQ9XUS[åMu(=P$ P`e[Ã=PQWUS[EMu(=P$ Pe[Ã=PQyWUS[Mu(=P$ P蠫e[Ã=PQWUS[Å=P$ PGe[ÐUS[EMu(=P$ Pe[Ã=PQyVUS[Mu(t=P$ P蠪e[Ãt=PQVUS[ÅMu(h=P$ P@e[Ãh=PQUUS[%Mu(\=P$ Pe[Ã\=PQYUUS[ŻMu(H=P$ P耩e[ÃH=PQTUS[e<=P$ P'e[ÐUS[%Mu*,=P$ P3e[Ã,=PQWTݐUS[=P$ P胨e[ÐUS[ÁMu*=P$ P<3e[Ã=PQSݐUS[=P$ Pߧe[ÐUS[ݹ(Dž}~wtEMHG=t7>t# j@PQC=@t$M t 9u PqFƍe_^[T~!&5555555555x0USVW[ôMEd >h6l7p7t7xE|>E >>݃7ݝ݃7ݝ>۫7۽۫7۽۫7۽۫8۽۫8۽۫ 8۽۫08۽>>> 33ҍ>$|%taH%t'cA@%t uDQ| F4333xtlDžXDž\DžDAwb{D\?X2l%tx DFu*t3AЃ DžpwQpk FDЉpAЃ v0dp}؉pDdF.t @hF*t;AЃ w)3@@k FDЉ@AЃ v.3@$dd3+ȉ@Flt33҉`d6Flt3`DždF`Džd3p:;@z;@z ;@z;tN@|:;t@|*kph@kph@t|kphu_@tTkphu7@t,~kphu@WhHT@6~@u 6@Tw |{pȁTH#T3x?dHk,dA8jP|F|BJ fBJ x;zRx׃x|9x|}F|xQ ;‹||/ ||@x|H x蚋t>|ppW茋|2|x@Dž|<|@ PT|B+I|~= ||$|AP ||Ajp|33ɉ|DžxC3d;t ;tBPQ|cd33ɉ|DžxpȁTH#Tdt!Tt 3x"x3hx@|x~^9t=Dž||@|;@}A9u僅d>d2dDž|dDž|d J|pȁTH#TT tFdd@} |+@~IGB;~@|Džx?pȁTH#Tƅ%3|x|Hd d333҉|x3ɋpЁTH#Td۽(d9@} @@ЁH#pۭ(w49xt +`89tt `#3`ۭ(۽(-`Tu9p݅ݝH5p݅ݝHp;~݅܍HHݝH能Tuۭ(݅H۽(ۭ($3)ۭ(w 3tۭۭ(tr<ۭ(ۭ۽(tH tۭr^~ۭۭ(rHt^<ۭ(ۭ۽(tHtۭr^~ۭۭ(rHt^<ۭ(ۭ۽(tHtۭr^~ۭ(ۭvFt|:ۭ(ۭ۽(tHtۭv}ۭ(ۭvFt|:ۭ(ۭ۽(tHtۭv}Ƌt^=T|t?ۭ(݅H۽(ۭrۭ(ۭ۽(tTt 3Glt|;p~ Tt)pTTtep l Xx`tu`t}S0Bl3dp l Xx`3ɄtAdD l3}O<$$ fD$l$ۭ(T$,$D$XۅX0ۭ۽(0BGI}xtl.@lAy-p~$l0@lpHpAy܋pH|~l‰ld}O<$$ fD$l$ۭ(T$,$D$XۅX0ۭ۽(0BdI}dPd|0M<$$ fD$l$ۭ(T$,$D$XۅX0ۭ۽(lABlɋtaxtXl@0ulHl@0t.u+XulHll0@l|uTth@7tl| A+lA-ttd|7Qt+ǃ0+kdA)tgffftt++k 0t+ƒ0All+|\DtDžx9||Džxs+|;| +JOI;}񋅀t`H}#`0Q@ɋu5+|Jx"` +0J}􋅄|DžxDžx`<-t <+t   ~|Džx3|Džx pЁTIh@#ʁTul9pЁTIh@#ʁT`td8H|dD39dtd8|dd8|d||?xu&tt p3p+pߋ|؉|-pl39`td8H|d>39dtd8d3|d8d3|3p3ɋ| #ld9\t0p;+ȋ@+H#)@TtE剅 |ȃr3u3ҋǹ 񉕀jj ||}\|u3ҹ 3jj |W| ʃr!ʃu3ҹ 3 jj RPY| u3K6E㊄K6EE㉅hAIlxtlx;lx|ыr, u3ҋNjlxl|R{Ћt| xu3ɋNjыl| xl|Wm{|| OE動+@~+B0HIptIdtAh@t3t ;ttIBu鍅+]|DžxTt>dtҸ'luJ u9t7dtɸ"lu tt833t%l|t;|u@B:Auu T D=^8pȁTH#T3xD PxЉpTH#Tx3|3D=^8pȁTH#T3xD PCxЉhpTH#Txl|tt=|l|;u A|t@tAuօtl| A|d|D +||BJ BJ P;N|z%|R\t`;t`}F|\Q ;‹|5 |E|@t\|A \LvtD|qqP:v||AADž<|@ PT|B+I~= l|APu|AD~Wl|J|4P|$|~P|+||BJ BJ P;N|z%|R\t`;t`}F|\Q ;‹|5 ||@t\|A \ ttD|qqPs||AADž<|@ PjT|B+I~= l|APos|AD~Wl|xt PsFp3Q|j|dEEe_^[ÐoQRR``6oUSVW,[u}OG ?} u q#GO 0;UVUUM؉M܋MUʉM؋OMԋU;M܋MU}?UԉW MƉE؋E9U؋E|! WE@E܉EԉG u(qt.EEppWquEx@"E@ P)G+N~Vu MAPpEpue_^[USV[suFtFFF~t7;u3 F@PjpFtNAQ6P`pFFe^[ÐUSV[uF;t PpFe^[US[ʁUxx|3Dž^BPƅƅƅuu jQ|tf|tN;xuF @PMo|t"AQxP9o|ƅMAxx|3Dž^Džʚ;ƅƅƅuu jQ|tf|tN;xuF @Pjn|t"AQxPVn|ƅe[ÐUSV[uU x|3Dž^FPƅƅEƅPRjxP|tf|tN;xuF @Prm|t"AQxP^m|ƅFxx|3ɉDž^Džʚ;ƅƅMƅQRjP|tf|tN;xuF @Pl|t"AQxPl|ƅe^[ÐUS[~xx|3ɉDž^Džʚ;ƅƅƅu ujP|tf|tN;xuF @Pk|t"AQxPk|ƅe[ÐUS[.}xx|3ɉDž^Džʚ;ƅƅM ƅQujP|tf|tN;xuF @Pj|t"AQxPj|ƅe[ÐUS$[E|UE E M؉E؉E3EUEEEEEPujQ5E܅tHEE܀}t9;Eu4 E@PiE܅tMAQuPiEEe[ÐUÐUSVW[Ë{>EE@@PjitqMAP1WiiW>t)TFF 0Fe_^[ÃxCPu \_CPu BCPu +USVW[ÏzE8} EEG@PjhGP7VfhV{MMAUU@PjUhuMAP1WgWWVCPuV.h WhExtwVt ?u3hxtwVt ?u3}j$jgpT HCHIH t-AQtAAA V:ge_^[ÃCPu3WCPu39CPu3CPu3sCPW3- wT0V|BPuk 8 T0wVBPuE DCPu+USVW[ÏwE $@@PjeM AP1V{eV@ExtwVpt ?u3upjjgetFpt+AMQ tA MA A VEee_^[ÃCPuVEp,BPu뺃CPu믃CPu또USVW,[/vE D@7@Pj|dEU JQ2PduEdII M̋MMЃ Pcp VcEԅVuPcEt#||>u@B uj(u*dpj)Vdj,Vc VcE؅tiGtb?u3j,Wcu%|Dt Wcdu䍃|APu3 3A3 VlcE؅t3&3u䍃APu 33E؋}t P2cGu>Pu#ctlAPu cu;E؅tAM܋+H#+ȉE3tAEPubt2?Pubt`APubuyE؅~S|Eu䋃@@ p@P$ PaE`u䍃@Pus 3p>Puau 33E>Puau 33ETAPuauLAE33E>Puwau>E33E>EPuFau 33EsDAPu!auPuj`u3}E>Pu>`u3}EgAPu`t'}}3EEE/3}E} } 33E?P$ PZ3?P$ PZ3u e_^[USVW[Ïl,8}EEG@PjZtmGP7VmZVtDE@ pVE @ p@p@P$ PYV|Ze_^[ÃCPuG3뗃CPu.3{UÐUSVW[ËkE s@fMI IMMq@PjYE܅ U JQ2PdYu}O@Et$EpVUtEEu3EExtwut ?u3Fptvut 6u3ptvut 6u3jjXtjM܉HMHx T HCHt-A Q tA AA  u`Xe_^[ÃCPu+Ӄ vT0u܍?Pu 뮃 T0vu܍x?Pu 뉃 Vuu܍?Pu hVu܍?PuMCPuACPut'US[he[ÐUÐUSVW[ëhM t} QVu }7 WVV7tB} t5EE W\VEPWVkVuE8Eue_^[ÐUS[hMD8D\D|DDDDDE(EDEx\Ep|EhE`EXEPEHF@F8,F0@F(`F |FdteuFDe[ÐyncXMB7,! USV[sfuF< vT EPu 6nMAyuAe^[ÐUSVW[f]teE"t't[u ]E}`u@Ct8K3Ҿ;}tB9E;uBAFAF3ue_^[ÐUSVW[ÒeU} E䋳p }t/;u+BGt ;tp +e_^[ÐUSVW[euU MAE~0pEt M }:uFEHBMك}|p +3e_^[UEUE ÐUS[ydju Re[USV[Od u3jPu1 E PVl:SV!R|  e^[ÐUS[cju0 M QPlRe[ÐUSV[×cu3jPuO0 E PVpRViQ| e^[ÐUS[%cju/ M QPp Re[ÐUSVW[bu~ uE䍻E䍻FPvQt Fp3NPvQWuQ p;lt*~ uDPvHPe_^[ÐUSV[ bu~ uD Hu [E pE̋Fx u E FE F pu |E [EЃ F pu \E dEԃ F pu[TV~G@ WPPQRuRuuWWRF ű@puRPE؋M9tbFx uZ F puZpNVrQV PBpWQZP e_^[ÐUS[mLE@PPYPe[ÐUSVW [3Lu~ utP `{F~F@PPQWWRW F;F u9Ftv8PPp PP\ Kp;lt)~ udO`{NQPQhOPe_^[ÐUS[UKExte[ppxIP$ P 9j8USVW[KMpE䉋pE lljjP 9pt } M9tuFP& vl 1EP MI QPdPEP MI ?QP@Pf @P xPjj%P \P PОPHPv PPPXPJ jjPG8uPPP v7 E  Pu M9t# PP7(P$ M1PJ jjPP( jjP P0PPl PP`POM9t PjjФPM9t PШPlPPPM9t yPTjjPM9t tP#jjHPM9t NPjjPPM9t YP PM9t# LMP7(MP7 MPt7LPjjP7LPt7LPjjPrPC P4PPP4KPtPPPKPjjTPPJPN JP: IP& PEtuP$EtuPRe_^[ÐUSVW [#EEt Pu P>tP P6PTxPELPtP' P P PPPjjHPw jjPdP5P>t! PXPp P6PGP PpPPP Pm PP@PPP2 jDPPZPܺPtP PnP jlPPP8 P$ hPPLPb jjPP$P1pPBPP jjP1~t PPPPܸPc PQP PPP/P  P e_^[ÐUSV[cAu3jPu E PVtN0V5/| e^[ÐUS[@ju M QPt/e[ÐUS[é@E@PPPe[ÐUS[q@Ep$Pe[US[=@Ep$Pe[US[ @Uz upl RRRPQRRtPU e[US[í? ,P'e[ÐUSVW [{?UJ Byx u R PQRR PwWt } $ WT|PV-tPV-PV-tnhPV-tW`PV-t8TPVz-t!V4P$ P),3 PPEHIpQQPe_^[US[=Uz u`\ R PQRRdP+ e[ÐUS[Á= P Pe[ÐUSVW [?=E xw Wt } $ WV|PV+tPV+PV+tnhPV+tW`PV+t8TPV|+t!V4P$ P+*3 PP}u Pe_^[ÐUSVW[;u v}wPMFHM P |Pu*tPu*Pui*hPuL*te`Pu3*tDTPu*t#u䍃4P$ P(3&\pPP2v t= v u+VWP PE pEpܳPvwijPe_^[ÐUS[!:E@PPPPe[ÐUS[9 PYe[USVW[ï9EphP#Ex u0,M1 M@xGE W t } $ W |Pu(tPu(Pu'tvhPu't]`Pu't<TPu't#u4P$ PG&3 MIQPuVQQ4P e_^[ÐUS[ 8 Pe[ÐUSVW[7u v}wPEFHM P|Pu&tPu~&Pua&hPuD&te`Pu+&tDTPu&t#u䍃4P$ P$3&\pPP*vt= vu+VWHPE pEptPvw\Pe_^[ÐUSVW[6u~ u0E䍻,E䍻 F@E܋HM P5tE܃x } $ u|Pu$tPuz$Pu]$tvhPuD$t]`Pu+$t<TPu$t#u4P$ P"3 NPWuQQ4P1 e_^[ÐUS[Å4 Pe[ÐUS[U4E@PPPDPe[US[!4E@PPPPe[USV[3Uz utdphVPQ0rxP* e^[USV[Ã3uFx u<48h PQR0v@P e^[ÐUSVW[3E 3Ʌ~EJxy3|( F F F F F ;~;  FA;~EEtx/@*Ƅ z (axE؋EE3U UЋEà t utu zZ t t4r}t% t u GFu ]3]3 tt2]؀| t(E0օt]؀| E;}HXu+;~3|( F F F F F ;~;  FA;~}u|] u]A;}Hu;ɋ~3|(G F F F F F ;~;  FA;~CB; tE]؈ BA2]؍ @*@ ED Bt* ]؈ BtA(N}AQ~E؀| tD ыE;}HH];~3u}|( C C C C C ;~;  CB;~E D*D/D D3E؋E؍e_^[USVW [ 0]st0} t#>P;sPVS׃6u6ue_^[ÐUSVW[ï/p}t\EEE EEt VЃ^t!;P;^PSV׃uߋEt VЃ6uL] t/}t V׃VӃ6u' VӃ6u]t VӃ6ue_^[USV[.Xtu Sփue^[ÐUE@ ÐUE@ÐUSV[.Puv{u'PvZte^[ÐUSVW[.} w PEEpE wƋMDE PwEpPuV wt PFuE pƍe_^[ÐUSVW[O-M My Ax  q P(EEpEpƍ|8 WEpEpPWV Ept PFuE p PE EpE VwNjMDE PoVEpPuWc Ex ExxǍe_^[ÐUSVW[+}wup PwDE PwPuVwt PFuEpƍe_^[USVW [_+}wuT 7\p V]GV7P[wt PUFuEpƍe_^[USVW [*Ex, @P(PyPju PX>t4 P6P*jP PpPh jPPPX>t! DP9P xP LPPXPLP|$$jjtP jjPPHP)>t# Pj P LP_0PHV@P*j$P XP PtPPVoP PPP P/V&P jPPwV@PWP0VP0(ǃ(j(PP @~ۃ HPy$$ P[$ P(PHP%P jjP{HPPUP.HPhP( jj\Pt PPPP@P HPo P PPPMHP>,P/P  P e_^[ÐUSV[+& u3$jPu E PVx,V|  e^[ÐUS[ù%j$u M QPx,e[ÐUSVW[o%EE@PPP$(ǃ(E؍E܍EH uPuu>} u W@~$e_^[ÐUS[á$ PSe[ÐUSVW [o$E} 9xt( ~( wt w_ w|tAGx } 6; t0OPqOPqOPqOPqotvOPqSt@OPq7t$GpP$ PF t0 , t0 Py}u Pae_^[ÐUS[}"E@PPpP'e[ÐUS[E"EpPe[US["EpPe[US[! XPEx u|@PPQRPPPO e[ÐUS[m!jEpPe[ÐUSVW[3!u~ j$P$E XPFx u|V PQRRPwFpPjF@vPPDPPFO@QPQPP4wt w) PjPE wyuzOPq t=OPqt!FO@ QPQPP~ @FO@ QPQPpEE܍| E\E,EEMMEEE0EE EEEE ELE4EčEȍE̍EЍ8E,t(tF,t%u=t3,3;u33u3F=tt@=t?@xE܋uW|C@FuWNuW7tWuux uEuxuEMxujEPxE؋E䋍x;uQu[EttWue_^[ivivUWVS[ [^_UWVS[å [^_     " |"x"  .>N"^n~N0#^n 4 P < `< ```@0`po8o.o33(o8oo`(o``>#` hZd^fixps({hH@pH0hhX8@p   l  hd  `\ XT  PL  HD  @< 84 0,  ($       | x p ` \ T D @ 8 , (           .interp.SUNW_cap.SUNW_syminfo.hash.SUNW_ldynsym.dynsym.dynstr.SUNW_version.SUNW_versym.SUNW_dynsymsort.SUNW_reloc.rel.plt.rodata.rodata1.text.init.fini.got.dynamic.data.bss.shstrtab.annotate.SUNW_signatureanotate anotate0 ,( PH"L"anotate    qC(\s4 N^>.4Tanotate  h4anotatel? # Px $!$ 8&(xbL6  pZD.X*XpNTYscSC3#~kXE2 taN;(XGJjT>(xbL6  pZD.&BUUUGUU5#UUUUqHUUU`:UUUUUU! !U{R:ui]QE77'UUUU~7r7r77fZ@\PC: {@0|n6nJ* 7Zg|E$k|D Z 6 6 6 6 6 6 6 6   N  _ % %    dngF:.iH)UUxl`xKK6UU*aB$:eJ1*UU}UUhN/UUUUX!$jT>(xbL6  pZD.XveTC2 ~jVB.zfR>*TXPZPTYPJPB$PP(6!0!J&D&GGFL@Lanotate@ < 8~!$&BGJeNTY1QZ\TXanotate([5 [5 \[anotate anotateL,]R,]` ]` ]` L^` ^` _` l_` _` ,`` `` `` La` a` b` lb> b` c` lc` c` ,d` d> db 0e> peb e> f> Tf` f@ f> 4g` gb gb \h` hb i` i` ib Dj> jX jb @k> k> k@ l@ @l@ l@ l` m` m` m` @n` n` o> @o> <]6]]]]]\^V^^^__|_v___<`6`````\aVaaabb|bvbbbcc|cvcccggghhlhfhhh0i*iiiiiTjNjjjjjPkJkkkkkl lPlJlllll0m*mmmmmPnJnnno oPoJoanotate anotate\o  o Tp  (  4 ( 4 \ l o "HB`Z~$("~hb^X: 4   8 2 j d   anotate P%L,3Xdtw8?tFmt{"( )(   \ anotate8 8_  ''''''''''''''''''''''''''''''''' F@anotate U]O=Oracle Corporation, OU=Corporate Object Signing, OU=Solaris Signed Execution, CN=Solaris 11RA@,W4c:;,0:ie%kx]SwACЅ+ qG TfOv=G6` J]4vvZ-aUvME[rbK=3V,/z"c[4h8Cu+0~<)ZjWcݠ ]|SuB! wCKt7bzfk`/PL^]դ{K"Na6Y 1.2.840.113549.1.1.11 o((oB88!`'o< < p5 << ="Eo..PSo..R`o@0@0pq 338} B3344\$