ELF>@@x@8@@@@@@@@@@ aaX aa@@DDPtd\\A\AQtd/lib64/ld-linux-x86-64.so.2GNUGNUtǀr5kraM3?%,$ !( '"%+  # &)*#2`#)*֟]۲tC,IT5׆]a*7V7C  KP(:LVt]z! le;Z bc Awaa@b @`aQ a``b@libdb-4.8.so__gmon_start___Jv_RegisterClasseslibpthread.so.0libc.so.6exitfopenoptindstrrchrperrorreallocstdinstrtolfgetscallocstrlenmemsetgetoptstdoutmemcpystrtoulmallocstrcat__ctype_b_locoptargstderrstrncatfwritestrchr__ctype_toupper_loc__ctype_tolower_locstrcmp__libc_start_mainvfprintfsnprintffreedata_setmaxbinszsqlite3UpperToLowerline_numberdebugthe_parse_progresssqlite3IsAsciiIdCharthe_schemaprognameGLIBC_2.3GLIBC_2.2.5Aii ui Pa*Xa#`aha$paxa%aaa&a'aaa(a+a)aa"aaaaaa a (a 0a 8a @a HaPaXa`ahapaxaaaaaaaaa a!H]H5"!%$!@%"!h%!h%!h% !h%!h%!h%!h%!hp%!h`%ڶ!h P%Ҷ!h @%ʶ!h 0%¶!h %!h %!h%!h%!h%!h%!h%!h%!h%z!h%r!h%j!hp%b!h`%Z!hP%R!h@1I^HHPTIp@H@H @HH!HtHÐUHSH=!uKaH!HaHHH9s$fDHHu!ŠaHg!H9rS!H[fff.UH=g!HtHtaÐLd$Ll$IH\$Hl$/H(IHHx?.HHtu.LHL)LH|8HHLHH+LHf.HHl$H\$Ld$Ll$ H(fDLPH\L[HKLGfHHtHK!H5HHB!H81HfDAWAVE1AUE1ATUSH8H!L|$ H|$HDŽ$(IwH$(Ht$HD$HT$LFH1LH!%tDHSHDHL)H1|$ I 2!HD$ pu@;t@tfHHHHxwH5GHcHP-91ɀ uDP/@uH !LeM)MOt&LL ILLLHt9Ht$LU6XLsLM)LK4'LHIqH5 !zf.P*IDP*01f.P-te/tP*ffDPf~LI@MtA}L#1H8[]A\A]A^A_HP!H5!HHG!H5-H81H֯!H$(H5/H!H81H$(L4iHޯ!H$(H5H81UJIff.AWE1AVE1AUL-ɺATAUHS1H(HHs!HD$H$HH`HDdv1H([]A\A]A^A_IcDL@H!HHD$Hٮ!L8@Hɮ!HH$H!L0iH!HYHy!FfDHY!A9MH5LHHD$L*H<$D$uH5LD$H$H<$hH<$H5EHIHD$uH<$H5D$HH2H5H4HIHM(H&H5LHHLZH|$JHH|$H5HI5H|$1.HILLL%T$D$tHH(1[]A\A]A^A_HH5_HTH!H81yH!D$HHD$Hɬ!D$L H!L(H<$Ic1H!H=,H1+H_!H=.H1E1H<$H|$IHH HtHfHcHDH8=HcgHPtW@΍==wL RLcC84tI@t4@wLwHcA40uK)ȃ;==wH H<;t HiP@HB@HB@Kff.e@SvDH@HcHH>`-H>-H>+H>+H>,H>-H~,H\$Hl$H1HxHHDHlHt;+H\$Hl$HUSHH?Gc~;Hk;xHyH5H1hEHkH[]fHHDH4THHTHQHTHQHTH[]ffff.UHSHHHu!DHyHHH[]H[]DAWAVAAUATUHSHDHT$pHL$xE+H$H$H$H$L=,H$ELEHD$HHT$PHt$@DDH =L~F=DEEVH$EDEt2H[]A\A]A^A_H$DHKmD}H]xDHuyH]MH5@!-PLU|$d~-H5HL1HL$0LT$ eIt$LT$ HL$0HLHL$0*HL$0HHHTH$H)A|$#MHcD$L11ҾLT$ !LT$ HT$XHHD$(LH!LT$ LD$(IL$L1LLT$ lRLT$ HnHH$L]IH$HHcHPHDHDHHkDMI|$E1H|$XAD$t>L11ҾLT$ X LT$ HT$XHHD$(LH LT$ LD$(It$IL$LLLT$ QLT$ HHH$LHH$HHcHPHDHDHHkDMDŽ$IT$It$L1LT$ H!QLT$ H$1HTHLQH$MbIL$IT$E1LHHH$^IT$HP H$HH$It$HTME111ҾLHH$IT$HIt$HHP`HTJH$MMI|$H1HLT$ HDHH|$`I:HHD$XUNLT$ HD$hE1IT$1ɾ@LTHH$LT$ HT$hLE1E111HD$HD$D$H$HD$0`L\$0IC`H$LT$ A|$aH$HHT$`HH|HET$XHT$XIt$H86MIT$E11L׾@LT$ HH$LT$ IT$HP`H$LT$ A|$H$It$HHHTH8ME111ҾnLHH$IT$HP`H$HH$It$HTUMIt$E$(IT$E$I:1LT$ HHt$X1DD$(DL$0_LDD$(HLLT$ DL$0I$hI$HHL$I$D$DD$LD$XLH $HGM%IT$E11L׾@LT$ HH$LT$ IT$HP H$}LT$ A|$H$It$HHHTH8:MIT$11LLT$ MHLT$ 1HHHTLLLT$ IT$E11ɾ?HD$0LMHH$LL$0LT$ LH A|$:H$HIt$HHTH8H8MDŽ$IT$L11LT$ HZLLT$ H$1HTHL;LH$MH1LH\+E1VHS|H$HSIt$HH8MWH1LH\+E1UHS8H$HSIt$HH8MHIt$1H\+LE1Ht$XAt$HSHt$XH$HHSHH8YMLMHLHtMLAMLAMn1LAM\L$BMKDŽ$;DŽ$+AL$AD$HHTIt$E1E1L׉$BFMLMLrMHDHD$DŽ$At$LTMHDAT$ED$1LHL@MsHDLHtnMVH1LLD1ҾXLT$ 7LT$ HLGMH1LHTE1ULT$ LT$ HLMIt$LMHLHtMIt$HTHH$DD$) ‰$}I$hHTHH$DD$) ‰$>It$HTHH$DD$) ‰$HDHHTH$HDH$HLHtIMHDHHTH$HDH$H\LHHt@HDH$HDH$MaIT$H$AA)Ћ$ ‰$(HL1H\+1HK>H{MHIt$1HTL>MDŽ$kHHHD(HPHBAL$JH@IT$HP8HHDH$MHHDH$qHƄ$Ƅ$H\+DŽ$DŽ$DŽ$H$1HT$PHsLE1E1H{MHAL$HtLMAD$HE$HIL$IT$I$(L׉$LD/MHAL$1HtLMDŽ$wDŽ$gDŽ$cWIL$I$HIT$ED$LLT$ cCHDLT$ HtL<MIt$LDMHDMD$111LHDLD$D$HD$H$>MHDAL$It$E1LHT<MID$H$ID$H$i$HDŽ$PHDHD$7DŽ$'DŽ$ DŽ$DŽ$HDHDDŽ$$HDHDDŽ$$HDHDDŽ$$DŽ$DŽ$jHTHD A#D$ D$HDŽ$8HLHtWMHDLHt:MHDIL$IT$1LHDDAMIt$L MHD1E111LHDLD$D$HD$H$s<M{IT$1LE1BH`H$It$HTHH8M:IT$1LE1BHH$It$HTHH8MIT$1LE1AHH$It$HTHH8PMH\IT$1LE1HtH$It$HTHH8 MsIT$11LLT$ HALT$ IT$1HLAHTLT$ HtL1HALT$ IT$LHLT$ H$A|$LT$  IT$It$HH8H8iH$H fHMHDHHTH$HDDŽ$H$HDHHTH$HDDŽ$H$THIT$At$HLE1L6H$M&H\1LHHTHH$ HTH$MHP8HTHP@IL$L1HHHL$0HL$0HTHH$H0MIT$MD$1L׾H{HTI$hHH$MVH1LLD1ҾLT$ 7LT$ HH$L/MHLHt H$MHIt$LHTH$MMD$L11ҾLT$ LT$ MD$11ҾHD$XHL LT$ LD11ҾHD$`Lq LT$ HT$`E1HpLT LT$ HT$XHE1pL7 H$M'MD$L11ҾLT$ LT$ H1LD1ҾHD$XL LT$ HT$XHE1pL H$MH11LDL H$MHD11LHtLDs H$McI|$HIt$HTH$ M;HI:1HT H$MHIt$I:HTb H$MH11HTLm=H$MHIt$1HTLE=H$MIt$E$h1MD$1L MHIt$EL$HLMD$1L MUIT$I$h1E$(MD$Lq M)HIL$1HTL<H$MHIt$IL$HTLv<H$MIt$HLLT$ HY3LT$ HLIT$It$ED$L( MHIt$LHT MrID$HH$HDH$OID$HH$HDH$,HHDHDŽ$H$ HDŽ$HDŽ$DŽ$DŽ$IT$11LL;HH$HPH#HDHDBMIT$It$1L;HH$3HcHPHDHDHHkDM9HHDH$#HHDH$ IL$IT$It$L $MIT$It$1L$MIt$11L$MID$H$HDŽ$HDŽ$pDŽ$`HI:IT$HL1(8H$M8HDŽ$$HH\+H{LT$ (LT$ HD$1HD$D$E1H$HSE11L+H$MHML$I$HHDMD$11LHD$ID$H$H$MvHI$hIL$HDIT$MD$E1LHD$ID$H$}H$M-HDŽ$ID$HH$fҍJHTHcHHkHTT1MHH|H$MI:P CH$M$LE111ҾkLT$ sLT$ MD$11ҾHLULT$ E1HH¾pL:LT$ It$1HL7H$MLE111ҾkLT$ LT$ It$1HLs7H$MHD1HDtHLIT$It$L77H$MHDŽ$ID$H$tH$HfHMVI$HH$I$PH$M.M&MMI|$&ME11H¾LH$I|$I|$@MH$E11ɾLH$TI|$LT$ LT$ 'H$E11ɾL^H$H|$hLT$ rLT$ SH$E11ɾLH$MI|$LT$ LT$ MMH$E11ɾLH$MMIT$ID$IT$ȋMLLT$ ]LT$ UM{MsI|$H\$Hl$LLd$H(!IH$HL$r3tFfDH\$Hl$Ld$ H(@ HHI؉LfH5HH1#?CD!tSII !quHL˄!+If!1!!!HtHH5y}!1z>f.Hq!HH5W}!H81DH5k11H5i11H5e1DH5e1DH5d1rfH5`1bfH5^1RfH5U1BfH5LH11,1HDH5>H11 1HDH50H111HDH5"H111HDH511H511H5H11HH11s1Hfff.H511PH5H1>1HH5Ѯ1"fH5ծ1fH5ͮH11HH51fH5H11HH5 H11HH5w1fH5n11H5kH11l1HDH5X1RfH5V11@H5O110H5MH11HH5911H58H11HH5%11H5 1fH5$1fH5 1fH51fH51fH5 11pH5 1bfH51RfH51BfH512fH51"fH51fH51fH51fH51fH51fH51fH51fH51fH51AWAVIAUATUSHH{! HcT1 @1)‰))HHctdL%L=L-DA\t:HcA9uHOL<@@@tGAt@1Ҁ{=DƒAWC=#>@@@4EA"fA AJAWACLc*H|$LcXv LcK4H$@Mt$I}bIH511IE-IH11.1fDH|$0H۸EI}@DMML|$DfDHcD$(I*@DrIcDOt HcHAHDOu}TLcBDOt.EAMcJ  fDMHMHDwu}AH AFApC A H tVCAuHCAfCHtA*uC 0 IA%uH|$xLD$`L|D$`AVI^Ƅ$Ƅ$1E1E1E1@J,*A/IWA HATTDN.H* J1 w4HtrJЃ vlHƄ$Ƅ$l L1DIEA9uHcHIH yLQ$u A@6AP~ A@6D1@Eu%D)ƅ~H|$xD$`HL$p_HL$pD$`~!H|$xHD$`HL$pHL$pD$`Et'A)E~H|$xDD$`HL$pHL$pD$`HtHωD$`D$`SLkH([]A\A]A^A_fDH ѣDNcI Ƅ$Ƅ$A@$u$ A/P IGAHH EA+DAA A/IWHA/HIWALc*KTHtHt > KLHtH|$xh1E11LA/VIGAHHtH0Ht̋PAAGD"/ IGAH0E1HAEtH5NHN HD11t!EHD9AHuA 1A!BlM|=H$^ E11Et DEAtHEVHt)Lc؃D9BTuHcT=VHuLcEt FDLcBD  H$ ~(H$NH$HL DHH9u1H$Ƅ$%1ɸH$A/'IGAH(H'1ɀHD̓' } H1fDzH@9 A/IGAH|$xH1E1W1AO.IGAO-&!A-ɀ$t $  f.Yu ݔ$T$Xt$@|$8L$`LD$|$@D\$pH-_$\$ #A1ɸl$@ET$Xt$|$8LD$D\$pL$`D$ r2Ԡf.r ʁ^~   frˁ^~fr-t).@ŕ^~v$ @vʁ} v)t+vʁ} ٍ^=A-H-"1A+H-HA+HDIc LDƄ$HE1Ƅ$Ƅ$4@AfƄ$fDAA눺H|$xLcfDIWHJIO 1A$$u$A/LIGAHE1HɸD$t1ED)9LH$H]EHEPHoIHf1HIAHUuꋄ$]))օ~)HUNII)LfHH90uHHEtHD]@tAAPt8H H 8Uu HHUufD)1HƄ$KA/%IWA2H1)IGHHIOEA+DAA IGHHIOH(H1ɃH-0 HHL$pΪHL$p IGHPIWIGHHIOIGHPIWIWHJIODIcH$)H$HcHH<H)2H@1HH9ut3H$H$1EHHLH0HH9uD11H$|A/IGHHIOE1aA/IGHHIOHcHPHA-/HIIHHLTMD)ЃAsHIHHHH)HtYCjH—HcHc(H$$$H[IWHJIO1HcHt$DD$DL$p觥HHHt$DD$DL$pHL$D$A/wIGA$)1ɸH$H|$xHD$`H|$xH5HD$`JH|$xH5 CIGHPIW|ȃIGA'ȃIGA819}:$Ƅ$DŽ$ A@ljA D!Ј$$)Ή$Ƅ$ A@ljA D!Ј$H$0$AA@D!E1$Ƅ$@ʼn$Ƅ$ AA lD) A@-Hp1$t0HG11:7DVDDHDA0Yټ$D$fA fD$٬$ۜ$٬$D$D$A0ۄ$ DMH9uDH|r1E1 D HLJrЃ vATTDNkffff.SHHL$XH H9LD$`LL$hH)H$)y)q)i)a)Y)Q)I)A~mH$HL$ H4$Ht$|$1HD$(HD$@HD$D$HD$0D$D$D$D$ D$$0dH HHH[ffff.SHH1HH$`H$`H$hDŽ$pDŽ$t^HDŽ$xʚ;Ƅ$}Ƅ$~Ƅ$|HHĀ[fDHHT$0HHDHt$(HL$8HH)H$LD$@LL$H)z)r)j)b)Z)R)J)BH$$D$0HD$HD$ HD$Hff.USHʚ;HHt{hH$`Hщ$xHH$`HH$hDŽ$pDŽ$t^Ƅ$}Ƅ$~Ƅ$|HOHt$|tC*HĈ[]fHHT$0HH<HL$8LD$@H)H$LL$H)z)r)j)b)Z)R)J)BH$H$D$0HD$HD$ HD$Hfffff.HU!H@(HPHP fff.fffff.fffff.HU!ffffff.Hl$Ld$HH\$HHItRwtKHc賟HHtKUHuHXHxHHl$H$Ld$HfH5L11 H5ݔL1DH\$Hl$HLd$HHT!IH;tH5cH11HLHHt!HUT!HCCHaT!H$Hl$Ld$HAU1ATUHHHSHHHH;T!Lh(MeMuL@M$$Mt?It$H uIUH5HH1HH[]A\A]餝@01Ht:HS!HXHBIUHtHIEH[]A\A]IEIEH5oH1AWAVAUATUHHHSHI@LaLh1HHH;S!Lp MuDM6MIvLuM~MufDM?MIwLuHR!Lb0MuM$$MIt$HuH[R!AL$ H5ǎHHD1HH[]A\A]A^A_)H59LHH1YH59MLHH16@H !R!La MuNfDM$$Mt?It$HuHQ!ED$0H5[HH1P0HtkHmQ!H HXLpLxHH(H Q!P HcQ!HBHQ8HuHA0HA8H[]A\A]A^A_HHOQ!HB8H5&H1@ff.AUATIUHHSHL-Q!I}31HqHHMtAD$Me MuVfDM$$MtGIt$H uHgP!AL$0H5#HHD1HH[]A\A]9Me0MufM$$MIt$HF uHP!ED$ H5HH10fDLH1H5lHIH1HH豙MHL[]A\A]閙fDHHH5[]A\A]1 D@HtNHUO!HXP0HwHP8HZO!HBIU(HtHIE(X[]A\A]IE IE(H5+H1E Hl$Ld$IH\$HHN!HuH$Hl$Ld$HH1HcHHtHUID$H5IHJHN!LHHN!HR(H81HRHHHl$H$Ld$HNfDH\$Ld$HHl$Ll$H(HICf9Hҹ HH,1MHUHHAt$HcnHIAT$I4$H LmHEH EfEHHl$H\$Ld$Ll$ H(f.HfCHHH4PHt[H'HM!H=+1HƗ@P街HHt8f@fDH1M!H=1Hv3H M!H=HQ@H\$Hl$HLd$Ll$H8HHIDkD;+~}Hu(Mu#HHl$ H\$Ld$(Ll$0H8HHHcЃL,R1ILkIEIEIEHIEMefGl-H{HL$IcH4@H芖HHL$tXHCDkNHL$蜑T$HH $HDP\ 1H袑D$H52HLE1|AH5ІHL1E1`%H50L1JH5L1E11H5DH߉T$QH H5*H3H "H5HH W T$F 9u(C:9 uC:. uC:# H5ΆHH QsH5H袐H UH5H脐H 7H5HfH uH5oHHH WH5YH*H 9H5CH u$|$u9H PH> A HL1H5HL1E1ZH مH̅AHL1sev HzDHHcHDHHنHHHiH1H·HHمHpHIHHHaHĆHH HzHQH.HHHaHȅHt#DA't'~A[tvA`DtfDfDA"uEWtHHHc7tADA)E9uT7D9uDA]McBffffff.HtRH B!DHHt!241@8t@)@4@)HRB!4 ːҍJ~Ct!H[ff.H=&1fSHwHH=1-hA!HsH=1[Hffff.HHwH=1#A!Hfffff.HwH=m1Hff.HwH=1nfffff.HwH=1Nfffff.SHHT$0HHCHL$8LD$@H)H$LL$HHt$(1)z)r)j)b)Z)R)J)B=!E5C@!1"HH$H=6@!HH$HD$HD$ D$0HD$蕅H轅|  =!H[ff.SHwHH=!9!1HH?!H9?!tHsH=D1[$@[fffff.HHwH=A1H=\-`?!1HH=B1-D?!ff.HHwH=8!1IIHH^ ?!HfH=1->!;ff.SHHHG HwH=y8!L@H1HH4$MH>!H9>!t!HsHH=r[1HH[f.HGHwH=HHHN:!IH1fH1:!HwH=HH1qHwH=1^fffff.HwH=1>fffff.H\$Ld$HHl$HHG HnAHxHu?HH5EH=H$Hl$HELd$1H f.HSH|H5oH=o6!EHHEH$Hl$Ld$1H@H#H=<HH1fSHG%HSH=%[HrH1}ffff.H\$Hl$Ld$HH~HLf"HHH=LHEHEHp1H=tH=vjH$Hl$1Ld$HH\$Hl$Ld$HHTH~Lf+"H;HLH=GLHEHEHp1tH$Hl$Ld$HH=H$Hl$Ld$1HPH\$Hl$HLd$Ll$L%Lt$HhHG H-Hx!HrLEHC HxLpg!HHHEHC H@Lh"HsH=4!IM1Ld$0Lt$H,$HHHt$8Ht$(Ht$ Ht$Ht$QH ;!H9:!t9HsH=FH\$@Hl$HLd$P1Ll$XLt$`HhHHL@H\$@Hl$HLd$PLl$XLt$`Hhf.H\$Ld$HHl$HH~In uH$Hl$Ld$HID$LHߋh!H=wHH$Ld$Hl$1HSLO8HH=u LzoL8t>HsH=33!1LHH9!H99!t.HsH=C1[;HC Hx"LK8If[fffff.UHSHHH~{u_H{^u"HsHH=[]H1HH HsHH=[]HH1_HHm HsH=BH18HHM HsHH=8[]HH1ffffff.H\$Hl$HLd$Ll$H(HG HHvHx~uH\$Hl$Ld$Ll$ H(@H{gusH{LkLeBH5HIH=~LMHEML1dHSHuH=H\$Hl$1Ld$Ll$ H(6fDLkLeHH=H=61!LLHH\$Hl$Ld$Ll$ 1H(fffff.H\$Hl$HLd$Ll$H(HG HHvHx}uH\$Hl$Ld$Ll$ H(@H{GusH{LkLe"H5H)H=~LMHEML1DHSHuH=H\$Hl$1Ld$Ll$ H(fDHH%HSHuHH=#0!H\$1Hl$Ld$Ll$ IIH(fffff.ATUH-SHHHG HxL`MH[HHEHsH=/!II1Ld$HHH4$aHC HxtHC HxtHC L%HxHLEHC H[HxHhH5HH=MHHEH1H=1}5!H[]A\Hs HH1AVAUL-vATL%SUH-MSHH0HG HxHC IEHx HC MEHxHC HsH=}.!LIEH@IIHP1Ht$Ht$Hl$ Lt$H$HC HxtHC Hx+HC H-HxHnHEHC HxmH5:H8H=KHHE1H=1zHC HLhIHC HkHxH5=H=-!H MMLHH,$HE1$H3!H93!tTHC HxH HHsH=zHEHC IIH@HPH01[]A\A]A^H0[]A\A]A^Hs HH1 DAVAUL-fATL%CUH-MSHH HG Hx HC IEHxHC MEHxHC HsH=},!LIEH@IHP1Ht$Hl$L4$IHC HxtHC HxHC H-HxHhHEHC HxgH54H2H=EHHE1H=|1tHC HkHxH5JH=+!H HHE1>H1!H91!tNHC HxH HHsH=yHEHC IH@HPH 1[]A\A]A^ H []A\A]A^Hs HH13DAWAVAUL-SATL%aUH-SHHhHGHx-HCIEHx*HCMDHxL`HCHsH=*!L HPH@ HHHILd$Hl$LD1Ll$L$$HCHxHsHK(IH=X*!1IHH0!H90!tHsH=w1HsH=.x1HH]0!H9N0!tHsH=y1HCH->L=L5L%CH@ L@HCHxLD$PHCL LDHxLL$XHLEHCHxHCLELhHCHxHCHsLD$PLL$XHH=N)!IEH@HP1LD$8LD$0LL$(IMLl$@Ht$ L|$Ht$Lt$L,$HJ/!H9;/!tQHCLhHCHxHCHIEHsMH=yxH@IHPHh1[]A\A]A^A_qHh[]A\A]A^A_ÐH.!H9.!SHtHwH=)y1:HsH=7y1H51H߃.!.!H.!H9u.!tH=,1H5vH߃-P.!-E.!PH=1-4.!{HsH=91[.!aAVH=.!H=H5 .!1AUATMUH1SHAH-!H9-!tH=&!1H=&!1EH-!H9-!tH=YL1L-)!I}H=1H11H=]x1H?H5H=H=ex1^HGH5H=tH=y16H=11VIuH=&!1H1I}H=%!1H,!H9,!t H=qy1IuH=y1(H=%!1jH=%!1H=%!1NH=%!1H=yy1H=;11H=y1dH=]11HH5H=jHSH5H=PH+!H9+!tH=)y1H= 11"H+!H9+!tH=sy1HH5H=H+!H9+!tH=y1H=11He+!H9V+!tH=y1nH=11H7+!H9(+!tH=y1@H=)11`H +!H9*!tH=y1H={H*!H9*!t H=y1IuH=}{16IuH=1$H=11IuH=1H=k11H=kH=/ IuH=7{1HHH=11$*!{H=H=1QH=1-)!!H$H=Z>!HH$D$0HL$HL$ HL$[HÐSHHT$0HHCHL$8LD$@H)H$LL$HHt$(1)z)r)j)b)Z)R)J)B!E5=!1HH$H==!HH$HD$HD$ D$0HD$ZHZ| X!H[ff.SH=@=!H=1HWH=1H=1H=~H1HK!3qH=1H=1H56H=O1 H=?1HH52H=H=w1XH=11fH=10H=1rH5H=1MH=1H=1AH=H=1H=x1:!H5 H= 1:!:!~H=11H=1-:!lH=M1|:!H=H=1=H=1H=11_H=1H=1SH=\H=1H=1+H=11 H=m1H=1H3H=1HH==1H=1H=1q[H=1-9![H=13H=)1:H=1'YfH=1bH=S1f.H=Y12H={1Affffff.H !HwH=H1@Hq !HwH=H1@HwH=1HHhHwH=1HHHHwH=1)fSHH=a1HsH=1[IHHfH=1fHwH=e1fffff.HwH=1Hff.HwH=v1fffff.HwH=V1nfffff.HwH=1HKff.H=H1.H=1->7!H=1-)7!H=ֲ1-7!H=1H=-6!1HHHwH=1HHH= 16!6!Hfffff.H=1bfSHwHH=1HGHC HxtHC HxtEHC HsH=HP1 HsH=1HsH=V1[fDH=\fH\$Hl$HLd$HHAt5!H}tH}tnHUHsH=H1xEt+H=1e-~5!H$Hl$Ld$HH= H$Hl$Ld$1H(H=fU1SHHHoH=%H=515!HsH=1HHCHUH=Hp1HCHKH=EHp1HHCHUH=HpI1HoH}FtH}IIH=-1CH=/10H}E4!HEH=7HH@HtH=&HHHCHUH=HpI1HH=13!H=31-3!H=1-3!H=1y-3!HH=@[]1^fDHCHUH=HpI1H8mHCHUH=)HpI1HEH=Yf.ATIUSH9w -2!E MI|$tI|$&I|$ft>ID$x H!HcHH|1u[]A\ID$H=AFHPHtTH=MFHtA:B:|B:mB:^fHcHV!HD-HH<1][]A\H=P1HcH!HH<1fDH=|H=SHiH=|EHtH=oEHu.Hc1HH-!H}D-.1!7H!H5H81eOsUHSHH_tJ} ~$Hc0!HH!HHH[]Hc0!H!HHHH[]HX 0!~%gfff)ʉukHcHgMH1HHMD<0!H 2H8HHA]1LHH[]DH=CHH=CH:tWH=HtlH=CHtH=CHukHc/!HH!HXC:uC:uC:u@HcM/!H!HDHHHH[]H!H5H1H81fM?fAVAUATUHSHLg I|$I|$HID$x D5.!E~cH!HE1L$AI E9~CI<$HLuH5HMHAV[]A\A]A^H=1:f.H5#I|$u*ID$H=AHPHu!M@D5.!H5ԩyH=AHt:u$B:uB:u B:tH=v HtH=AHu H5AHHT$gKHT$tH'!H5PH81K1SHG HHx/HsH=<H[1HfDUHH=&1SHHH{tH{H{HCH=@H@HtH=@Hu)HSHuH[]H=IH1WHSHuH[]H=IH1.fDHHmHSHuH[]H=H1fDHSHuH[]H=IH1fDH\$Hl$Ld$Ll$H(III|$|tI|$~I|$lID$H=?H@HtH=?HIT$IuH=a1IH$t@t5+!H\$Hl$Ld$Ll$ H(@H=:1?DH='1IT$IuH=1IH덐LLIT$IuH=]H1I_IT$IuH=1IHc:fffff.SHwHH=1H7P*!J*!&@H=¿10*!$*!NH=I1H5HH=1=)!H=1f.-)![ÐH\$Hl$Ld$HHh HT$0HHPLD$@LL$HHH)H$Ht$(HL$8H=)z)r)j)b)Z)R)J)BH$H $D$0HD$HD$ HD$1GH;HHSFHl H;H5k19GH$H$L$HÐAWAVAUATUSH(HtHH XH,uHh=DI @IA$<=uA$IH 8wXIcTL@H@H5HHD$谷 H5L虷HD$H:HP8<=t3H@t&H=uHtH=H1HMH,HHfH5H.1LLDHHD$I9l0N&w@LHHH@@HHHHHH HL$p@tH= L1H$H$Hs HP<=H@H@H5NHHD$8uH5=L%H|$H 9HG(H=IH1jf.1=IfH=|H1J5H=H14H=H1 H5LzH|$HHG8H5lLNHT$H=UHz(H=QH1H([]A\A]A^A_HHHHL$pjDwLbAAHHCHHHHL$p-H|$L1HWH=3 HD$H=rLHP1HT$H=r7Hz(H=S1LH$HD$H$qfffff.Hl$Ld$H- L% Ll$Lt$L|$H\$H8L)AIHI?Ht1@LLDAHH9rH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHSHHp HtaDHHHuH[ÐHAHUsage: %s [-i inputFile] [-h outputHeaderFile] [-o outputFile] [-t testOutputFile] [-d] [-v verificationOutputFile] parsing error at line %d : %s parsing error at end of file: %s extra argument %s after switch arguments Can't produce test when streaming to stdout Can't produce verify when streaming to stdout %s: line %d is too longi:t:o:h:dv:db_sqlCCCBBDFEEEFEEEEEEEEEEEEEEI9I9I9I9I9I9I9I9I9I9I9I9I9I`I`I9I9I9IXI9I9I9I9I9I9I9IXI9I9I9I9I9IpII9I9IXIpI`IXI`IXI9IXI9IpIpI9I`III9IIXI`IXIXI9IIXIXI9I`I9I9I`IXI`I9I9I9I9I9I9I9II9II9I`II9I`ID[KK2[[[[KKK[[[[[[[Ku[e[U[U[e[^x^KK?^^]]]]]K]]b]#]]\KKKKKK\\\\J\K-\\bbbbhbe[U[Xb6bbaaaaayaiaPaPae[U[e[7aaKKKK```I`e[Pa9`Pa9`PaPa)``_U[e[__/__^[^["MU[e[e[o onnn]]nmmmsm*ml_lhl]@l0lkkk}klkl ogkkj}kjjj ogkl}kjtjQj.jjl}kiiwiKi!ihPa`hhlkheh}k=hhggygfhhfJfffKezeLeLeLeLeLeLeLeLeeded}kl-dccfc%cZZIZZe[U[Xe[U[{XWWUU>UTY}kl}klgk ohhWYT ooTYS]@S]"SRRRRRXRSR]]]]]KKRtQdQTQDQdQQQPKKPPPPWP"POOOZOONYNNNNPPKKwNYNEN'N NMMKKMMMKKZKZZZKZ'II{`5DXY=4?F/Q;M-hZ\_rq''eDEE$)*.+#44G7G7IIILI__III4444O4$4$444[ X[,+f"1?CMP|Tz{  !&")'89S44Pm2PrPP61-/.5]nl  $ kf !SZXthVdbBqs0WWWW:??:cccZ\cppx|_I3XYwzTNQPRVYopq[\]^_`agi{}mn#&"%)uvyzLNMOxw +,efghi'*( ;<@>=~sljbdR[WSTUe78Q^`ac|AjCDEFGJKHkortuvy{UOEFGHJKLMNOPQRSTNO*+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=nK    v",$&s[ WYMR%(NWZ]kr}"N(QRI!\^3TJPS|z!L1IIING`oB~IB:vIIIIII    -0/3568 ;<A !%'EJKF9=&(parser stack overflowset listnear "%T": syntax errortoo many arguments on function %TDeleteTriggerDeleteTableVtabFinishParseVtabBeginParseVtabArgInitVtabArgExtendVacuumUpdateTriggerUpdateStepTriggerSelectStepTriggerInsertStepTriggerDeleteStepSrcListShiftJoinTypeSrcListDeleteSrcListAppendFromTermSelectDeleteSelectRollbackTransactionReindexRegisterExprPragmaPExprInsertIdListDeleteIdListAppendFinishTriggerExprSpanExprSetHeightExprSetCollExprListDeleteExprFunctionExprDeleteExprAssignVarNumberDropTriggerDropTableDropIndexDetachDeleteTriggerStepDeleteFromCreateViewCommitTransactionBeginTriggerBeginTransactionAttachAnalyzeAlterRenameTableAlterFinishAddColumnAlterBeginAddColumnAddNotNullAddDefaultValueAddCollateTypeAddCheckConstraintUnsupported SQL syntax (%s) unrecognized token: "%T"XXi%qY*uz.-fAt2YY 3js56(k !%(/7:=?AFGLUV[_cfkq{~ #(.49=@FJQSZ\^gkqw              $'+453.:B [U^J>#ei L AExtracting name from a null or empty tokenEncountered two CREATE DATABASE statements; only one is allowedThe table %s contains two columns with the same name %s; this is not allowed.Found two declarations of an index named %s, at lines %d and %dThe index named %s on line %d has the same name as the table at line %d. This is not allowed.Index %s names unknown table %sIndex %s names unknown column %s in table %sPlease specify CREATE DATABASE before CREATE TABLEThe table name must be simple: %s.%sFound two declarations of a table named %s, at lines %d and %dThe entity named %s on line %d has the same name as the index at line %d. This is not allowed.Foreign Key Constraint not implemented: FromTable %s FromCol %s ToTable %s ToCol %s Extracting name from a null or empty token Missing right parenthesis in type expression %s Non-numeric or zero size parameter in type expression %s Unexpected value for second parameter in type expression %s Zero dimension not allowed for %sWarning: dimension of string "%s %s" is too small to hold a null-terminated string.Malloc failedDB_BTREEMalloc failure varbinvarcharvarchar2bittinyintsmallintshortintegerbigintrealfloatdoubledecimalnumericnumberUnsupported type %s SQL logic error or missing databasecallback requested query abortattempt to write a readonly databasedatabase disk image is malformedString or BLOB exceeded size limitlibrary routine called out of sequencelarge file support is disabledauxiliary database format errorbind or column index out of rangefile is encrypted or is not a databasenot an erroraccess permission denieddatabase is lockeddatabase table is lockedout of memoryinterrupteddisk I/O errordatabase or disk is fullunable to open database filetable contains no datadatabase schema has changedconstraint faileddatatype mismatchauthorization deniedunknown errorxx[wxxxxxxpx`xPx[w@x0x[w xxxwwwwwwww[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[w[wxx  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~The table "%s" (defined near line %d) lacks a primary key, which is not allowed. All tables must have a designated primary key. typedef void (*%s_iteration_callback)(void *, %s_data *); int remove_%s_database(DB_ENV *envp); return %s_insert_struct(dbp, &data); data_dbt->data = buffer; data_dbt->size = p - buffer; } int %s_full_iteration(DB *dbp, %s_iteration_callback user_func, void *user_data); if (create_%s_secondary(%s_envp, %s_dbp, &%s_dbp) != 0) goto exit_error; if (create_%s_database(%s_envp, &%s_dbp) != 0) goto exit_error; int %s_insert_struct(DB *dbp, %s_data *%sp); int create_%s_database(DB_ENV *envp, DB **dbpp); memcpy(%s%sp->%s, buffer, sizeof(%sp->%s)); memcpy(p, %s%sp->%s, sizeof(%sp->%s)); int get_%s_data(DB *dbp, %s %s%s_key, %s_data *data); int delete_%s_key(DB *dbp, %s %s%s_key); int create_%s_secondary(DB_ENV *envp, DB *dbpp, DB **secondary_dbpp); int remove_%s_index(DB_ENV *envp) { return envp->dbremove(envp, NULL, "%s.db", NULL, 0); } int remove_%s_index(DB_ENV * envp); int %s_query_iteration(DB *secondary_dbp, %s %s%s_key, %s_iteration_callback user_func, void *user_data); int %s_insert_fields(DB * dbp, int %s_insert_fields(DB *dbp, #define %s_CACHE_SIZE_GIGA %lu #define %s_CACHE_SIZE_BYTES %lu Data structures representing the record layoutsMacros for the maximum length of the records after serialization. This is the maximum size of the data that is storedThese typedefs are prototypes for the user-written iteration callback functions, which are invoked during full iteration and secondary index queriesThe environment creation/initialization functionint create_%s_env(DB_ENV **envpp); Database creation/initialization functionsFunctions for inserting records by providing the full corresponding data structureFunctions for inserting records by providing each field value as a separate argumentFunctions for retrieving records by keyFunctions for deleting records by keyFunctions for doing iterations over an entire primary databaseIndex creation and removal functionsThis 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.int initialize_%s_environment(); int initialize_%s_environment() { if (create_%s_env(&%s_envp) != 0) goto exit_error; fprintf(stderr, "Stopping initialization because of error\n"); return -1; #include #include #include #include #include #include #include "db.h" Header file for a Berkeley DB implementation generated from SQL DDL by db_sqlCache size constants, specified in a hint comment in the original DDL (*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; int create_database(DB_ENV *envp, 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, NULL, db_name, NULL, type, flags, 0644)) != 0) { (*dbpp)->err(*dbpp, ret, "DB->open: %%s", db_name); return ret; } return 0; } 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, DB **dbpp) { return create_database(envp, "%s.db", dbpp, DB_CREATE, %s, 0, %s); } int remove_%s_database(DB_ENV *envp) { return envp->dbremove(envp, NULL, "%s.db", NULL, 0); } int %s_insert_struct( DB *dbp, %s_data *%sp) { DBT key_dbt, data_dbt; char serialized_data[%s]; 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, serialized_data, &key_dbt, &data_dbt); if ((ret = dbp->put(dbp, NULL, &key_dbt, &data_dbt, 0)) != 0) { dbp->err(dbp, ret, "Inserting key %s", %s_key); return -1; } return 0; } 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; len = strlen(%sp->%s) + 1; assert(len <= %s); memcpy(p, %sp->%s, len); p += len; int serialize_%s_data(%s_data *%sp, char *buffer, DBT *key_dbt, DBT *data_dbt) { size_t len; char *p; memset(buffer, 0, %s); p = buffer; key_dbt->data = %s%sp->%s; key_dbt->size = if ((ret = dbp->get(dbp, NULL, &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)); deserialize_%s_data(data_dbt.data, data); return 0; } int get_%s_data(DB *dbp, %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 = if ((ret = dbp->del(dbp, NULL, &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_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 = int %s_full_iteration(DB *dbp, %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, NULL, &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)); 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_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; } int create_%s_secondary(DB_ENV *envp, DB *primary_dbp, DB **secondary_dbpp) { int ret; char * secondary_name = "%s.db"; if ((ret = create_database(envp, secondary_name, secondary_dbpp, DB_CREATE, %s, DB_DUPSORT, %s)) != 0) return ret; if ((ret = primary_dbp->associate(primary_dbp, NULL, *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_query_iteration(DB *secondary_dbp, %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 ret; int flag = DB_SET; 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, NULL, &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; } ) } %s_data; %s_data %s_data_specimen; typedef struct _%s_data { extern DB *%s_dbp; } DB *%s_dbp = NULL; + \ %s0#define %s (%s %s; *%s %s%s, %d#define %s %d assert(strlen(%s) < %s); strncpy(data.%s, %s, %s); memcpy(data.%s, %s, %s); data.%s = %s; &buffer += sizeof(%sp->%s); p += sizeof(%sp->%s); sizeofstrlen%s(%sp->%s)%s + 1%s(canonical_key)%s%s_data data; Array size constants.Database removal functions extern DB_ENV * %s_envp; DB_ENV * %s_envp = NULL; return 0; exit_error: } %ssizeof(%s_data_specimen.%s)Simple test for a Berkeley DB implementation generated from SQL DDL by db_sql Test data for raw binary typesA very simple binary comparison functionchar * compare_binary(char *p, int len) { if (memcmp(p, binary_data, len) == 0) return "*binary values match*"; return "*binary values don't match*"; } 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 found main(int argc, char **argv) { int i; int ret; Fill the binary test data with random valuesfor (i = 0; i < MAXBINSZ; i++) binary_data[i] = rand(); 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.ret = initialize_%s_environment(); if (ret != 0){ printf("Initialize error"); return ret; } Now 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 argumentNext, retrieve the records just inserted, looking them up by their key valuesNow 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).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 delete a record from each database using its primary key.Close the secondary index databasesDelete the secondary index databasesFinally, close the environmentif (%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; } if (ret != 0){ printf("Full Iteration Error\n"); goto exit_error; } ret = %s_full_iteration(%s_dbp, &%s_iteration_callback_test, "retrieval of %s record through full iteration"); if (ret != 0) { printf("Retrieve error\n"); goto exit_error; } if (ret != 0){ printf("Insert error\n"); goto exit_error; } ret = %s_insert_fields( %s_dbp, void %s_iteration_callback_test(void *msg, %s_data *%s_record) { printf("In iteration callback, message is: %%s\n", (char *)msg); Unexpected C type in schema: %sret = delete_%s_key( %s_dbp, %s); , &%s_iteration_callback_test, "retrieval of %s record through %s query"); printf("Retrieval of %s record by key\n"); ret = get_%s_data( %s_dbp, %s, &%s_record); \n", compare_binary(%s_record.%s, %s)); \n", compare_binary(%s_record->%s, %s)); #include "%s" #define MAXBINSZ %d char binary_data[MAXBINSZ]; Close the primary databasesDelete the primary databases%s_envp->close(%s_envp, 0); return ret; remove_%s_database(%s_envp); remove_%s_index(%s_envp); %s_data %s_record; "ninety-nine""n"binary_data9999.5%s_query_iteration(%s_dbp, %ld%f%lfprintf("%s.%s: \n", %s_record.%s); printf("%s->%s: \n", %s_record->%s); %s_data_serialized_length%s_data_%s_length%s[%s]&compare_int&compare_longchar binary_data[%d][MAXBINSZ]; int compare_binary(char *p, int len, int dem) { if (memcmp(p, binary_data[dem], len) == 0) { return 0; } else { return 1; } } main(int argc, char **argv) { int i; int j; int ret; int occurence; for (i = 0; i < %d; i++) for (j = 0; j < MAXBINSZ; j++) binary_data[i][j] = rand(); ret = initialize_%s_environment(); if (ret != 0) { printf("Initialize error"); return ret; } Now that everything is initialized, insert some records into each database, retrieve and verify themFirst, insert some records into each database using the ...insert_fields functions. These functions take each field of the record as a separate argumentif (ret == 0) printf("*****WELL DONE!*****\n"); if (ret != 0) { printf("Full Iteration Error\n"); goto exit_error; } printf("%s full iteration: %%d\n", count_iteration); assert(count_iteration == %d); if (ret != 0) { printf("ERROR IN INSERT NO.%%d record in %s_dbp\n", i); goto exit_error; } ret = %s_insert_fields( %s_dbp, same = 1; break; if (same == 0) assert(0); else count_iteration++; void %s_iteration_callback_test(void *msg, %s_data *%s_record) { int i; int same = 0; for (i = 0; i < %d; i++) { if (ret != 0) { printf("ERROR IN RETRIEVE NO.%%d record in %s_dbp\n", i); goto exit_error; } , &%s_iteration_callback_test, "retrieval of %s record through %s query"); printf("%s_record_array[%%d].%s: %%d\n", i, count_iteration); assert(count_iteration == 1); if (strcmp(%s_record_array[j].%s, %s_record_array[i].%s) == 0) { if (fabs(%s_record_array[j].%s - %s_record_array[i].%s) <= 0.00001) { if (%s_record_array[j].%s == %s_record_array[i].%s) { assert(count_iteration == occurence); if (ret == %s) ret = 0; else { printf("ERROR IN DELETE NO.%d record in %s_dbp\n"); goto exit_error; } compare_binary(%s_record.%s, %s, i) == 0); strcmp(%s_record.%s, %s_record_array[i].%s) == 0); (fabs(%s_record.%s - %s_record_array[i].%s) <= 0.00001)); %s_record.%s == %s_record_array[i].%s); (compare_binary(%s_record->%s, %s, i) == 0) (strcmp(%s_record->%s, %s_record_array[i].%s) == 0) (fabs(%s_record->%s - %s_record_array[i].%s) <= 0.00001) (%s_record->%s == %s_record_array[i].%s) %s_data %s_record_array[] = { #include #include #define MAXBINSZ %d int count_iteration; Test data for input recordfor (i = 0; i < %d; i++) { count_iteration = 0; }; ret = get_%s_data( %s_dbp, binary_data[i], %s_record_array[i].%s, &%s_record); binary_data[i]%s_record_array[i].%s, occurence = 0; for (j = 0; j < %d; j++) { occurence++; {0}binary_data[%s%d%cDB_NOTFOUNDassert(if (&& {,"0""zero""1""one""2""two""3""three""4""four""5""five""6""six""7""seven""8""eight""9""nine""A""eleven"1111.1"B""twenty-two"2222.2"C""thirty-three"3333.3"D""forty-four"4444.4"E""fifty-five"5555.5"F""sixty-six"6666.6"G""seventy-seven"7777.7"H""eighty-eight"8888.8"I"99.9Warning: , near line %d CACHESIZEunparseable integer string %sDBTYPEbtreehashDB_HASHNo value specified for property %s Property setting (%s) with no antecedent SQL statementunrecognized characters in integer string %sUnrecognized environment property %sunknown DBTYPE %s for antecedent %s, using default of DB_BTREEUnrecognized entity property %sUnrecognized index property %sWarning: incorrect hint comment syntax with property %sh(X'&&(;mnDnq$Tu\tut4vvwww<Ԡ\t$4DTdt  4 L ԡd |  $ 4 T t $ < ĢT l  4 D T t  , D ģ\ ԣt   $ 4 D T d4 tL d | Ĥ Ԥ $ < $T 4l D 4 Ա $<\T|44 ,dDt\ttD4|$ D\Tt4Td$T$<DTl$Tt<Tl4d$Dd44TTlT $Dd$TTlt$Tt4Ld|$Tt $<$TdtDT4t \ $ d t  $ $ D ddd$4DLdd|$D $<$Tltd $ <!\4#|#$*$*zRx XfMS0C<(g:D4TPguBBCB CB(A0A8GF4jBCBCB GB(CA0CA8BD`mDmn oIN D,HoAACD Lo;ACACD 4lo'BBCB B(A0CA8GVP?MI0Ip;    $ <xTplh`XK`KhKpKxp,hKDpD\xtpKxphKphKpKx4pLhKdp|h`XK`XK` X$P<HT@l80( ,D\tؗЗȗ4BBCB B(A0BA8D@I4$p BICB CB(CA0BA8EG\أtУACأxAI@dMN0GWACABD 4ХBCBB CB(A0A8GWxAJO<8zAOH\Gt AACLG $ < MI H\ xMI J,| ؼBDA CG(D04 EBBB B(A0CG8D@N, BBCA CD(D0R pMI P4 MN0LT FMN@I4t BDB B(CG0A8D`  @ o 0i $ $< AFACG$d +BACA EDp (9D PG G AJh @ 83AG$ `"D< xT l  AJh PBAG /D  .D  fACD < 'T 0l 8 @ HMI H D #AC }LI K XLI S$,&MQIpOTxMI Gt@AGACACD hMN0OhMN0O$hBAGA CD04` BBGB GA(GD0CD`4L8BBGB GA(GD0CDP4BBB GB(GA0GA8CD8OC,BYB CA(CC0CGhAJh<(MAST`lhpxxpxp$K,D\t(D6N C*AGbAACD P?AG,x7AFD AD\ACCCD |8ACCCD $jBDA A(F$EBCACA D,8`BCBA CA(CD0h4ACAD K<TlxMI IMI IMN0D8MN0Di0GAJh<QASTl.AC,D \(t0xKBDAG@MI HAHCD $BCAA F<ACAD D,\BBB A(CA0D@I8*AGPACJCD PrLN0EAGHYG4($BBB B(A0A8D`ET $l Q_@F@(AHAAloA( A !AH#A&A/A/A4A5AH7A8A=A(?A0@AAADAhGAKAMAOA`XA^AcA1A @ H@`@o@@@  a @ @ oP @oo @a@@@@@@.@>@N@^@n@~@@@@@@@@@@@.@>@N@^@n@@6A:AmAmAAAEAnAAKAOAСAΡAUAYAAAaAeAAAlApAAAwA{A5A3AAAQAOAAAlAjAAAuAsAAAAAAAʡA͡AҡA֡AAAAAAAA AAAA#A/A2A7A;AKANASAWAfAiAnAnAArA.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.data.rel.ro.dynamic.got.got.plt.data.bss @@ !<@<$8`@`L4o@H> @ F@No @ X[oP @P 0j @ t @  ~@y@@ȾH@H`@` \A\AaaaaaPaPaa a Q