From 81c0c123c2b79293a343abd067c1c752f8f8416c Mon Sep 17 00:00:00 2001 From: juanf <juanf> Date: Mon, 26 Aug 2013 13:06:15 +0000 Subject: [PATCH] SP-823 / BIS-500: Stored cache per server and basic sync fix SVN: 29673 --- .../BisKit/Classes/CISDOBIpadServiceManager.h | 5 ++++- .../BisKit/Classes/CISDOBIpadServiceManager.m | 9 ++++++--- .../UserInterfaceState.xcuserstate | Bin 22937 -> 38480 bytes .../objc/openBIS/openBIS/CISDOBAppDelegate.m | 13 ++++++++++++- .../openBIS/CISDOBDetailViewController.m | 4 ++++ .../objc/openBIS/openBIS/CISDOBOpenBisModel.m | 2 +- 6 files changed, 27 insertions(+), 6 deletions(-) diff --git a/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.h b/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.h index 156816357d7..08cca814155 100644 --- a/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.h +++ b/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.h @@ -46,10 +46,12 @@ FOUNDATION_EXPORT NSString *const CISDOBIpadServiceDidRetrieveDetailsForEntityNo FOUNDATION_EXPORT NSString *const CISDOBIpadServiceWillSynchEntitiesNotification; FOUNDATION_EXPORT NSString *const CISDOBIpadServiceDidSynchEntitiesNotification; +FOUNDATION_EXPORT NSString *const CISDOBIpadServiceWillSynchPruningEntitiesNotification; +FOUNDATION_EXPORT NSString *const CISDOBIpadServiceDidSynchPruningEntitiesNotification; + FOUNDATION_EXPORT NSString *const CISDOBIpadServiceWillSearchForEntitiesNotification; FOUNDATION_EXPORT NSString *const CISDOBIpadServiceDidSearchForEntitiesNotification; - // // Errors that can happen in the service manager // @@ -88,6 +90,7 @@ typedef void (^MocSaveBlock)(CISDOBIpadServiceManager *serviceManager, NSArray * @property (readonly) NSOperationQueue *queue; @property (readonly) NSString *sessionToken; @property (nonatomic, getter=isOnline) BOOL online; +@property (nonatomic, getter=isSyncDone) BOOL syncDone; @property(strong, nonatomic) NSDate *lastRootSetUpdateDate; diff --git a/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.m b/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.m index 5f33869793d..fb6b3a3553f 100644 --- a/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.m +++ b/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.m @@ -39,6 +39,8 @@ NSString *const CISDOBIpadServiceWillRetrieveDetailsForEntityNotification = @"CI NSString *const CISDOBIpadServiceDidRetrieveDetailsForEntityNotification = @"CISDOBIpadServiceDidRetrieveDetailsForEntityNotification"; NSString *const CISDOBIpadServiceWillSynchEntitiesNotification = @"CISDOBIpadServiceWillSynchEntitiesNotification"; NSString *const CISDOBIpadServiceDidSynchEntitiesNotification = @"CISDOBIpadServiceDidSynchEntitiesNotification"; +NSString *const CISDOBIpadServiceWillSynchPruningEntitiesNotification = @"CISDOBIpadServiceWillSynchPruningEntitiesNotification"; +NSString *const CISDOBIpadServiceDidSynchPruningEntitiesNotification = @"CISDOBIpadServiceDidSynchPruningEntitiesNotification"; NSString *const CISDOBIpadServiceWillSearchForEntitiesNotification = @"CISDOBIpadServiceWillSearchForEntitiesNotification"; NSString *const CISDOBIpadServiceDidSearchForEntitiesNotification = @"CISDOBIpadServiceDidSearchForEntitiesNotification"; @@ -126,7 +128,7 @@ static NSManagedObjectContext* GetMainThreadManagedObjectContext(NSURL* storeUrl // Restrict this queue to processing operations serially [_queue setMaxConcurrentOperationCount: 1]; self.online = NO; - + self.syncDone = NO; return self; } @@ -644,7 +646,7 @@ static NSManagedObjectContext* GetMainThreadManagedObjectContext(NSURL* storeUrl - (void)run { if (!self.pruneCutoffDate) return; - + [[NSNotificationCenter defaultCenter] postNotificationName: CISDOBIpadServiceWillSynchPruningEntitiesNotification object: self]; BOOL success; NSError *error; // Remove entities that were not updated since the prune cutoff date @@ -655,7 +657,8 @@ static NSManagedObjectContext* GetMainThreadManagedObjectContext(NSURL* storeUrl [(NSMutableArray *)_deletedEntityPermIds addObject: entity.permId]; [self.managedObjectContext deleteObject: entity]; } - + self.serviceManager.syncDone = YES; + [[NSNotificationCenter defaultCenter] postNotificationName: CISDOBIpadServiceDidSynchPruningEntitiesNotification object: self]; success = [self.managedObjectContext save: &error]; if (!success) { self.error = error; diff --git a/openbis-ipad/source/objc/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/juanf.xcuserdatad/UserInterfaceState.xcuserstate b/openbis-ipad/source/objc/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/juanf.xcuserdatad/UserInterfaceState.xcuserstate index 3ebd4f609bca7d45d1b29939a76dc19b9dfe413d..0fe81a140016828bf27d26df9fa19bcf4b2c51ab 100644 GIT binary patch literal 38480 zcmdqK2Ygh;^8o&KU%PvkkW249q?gMjxg-!sxfBx86G8|jTymEXNHc{Z?JZSMlqPm1 z2_1XIE@DL#sfr4UU_(Sytcd>S-MhQw5Y+Gg^V9G5|0h81-rJp>otd4TnVsEj=xlB2 z?$KxtQ;5P8O)(TpajMr;uh)jnG<9{ibhOuobu>&jHTHB*2s3mwPHTb3)nPpyoh}qw zw($XHdNIXQ3d)soqui+|Dw>L+VyQSPo=TuJR3fFNlBiT_6g8Tvrp8e<)Of0vnn2Z2 z6RAnmWNHdkPnoDDY6jI!^-#UkOllT&EwzYROf92UP<K&xQ}<9CsXnTo8lW~&o2e(L zUDT7*Q`FPcGt{%xbJUB}9_l6PHR^Th6Y5jyGwO5d3+fE@C3TkiiaJMqO`WH{p}wbn zrY<3jXrw?Y<ci#oJMu>XC>TYc7!-@NNQctUC^Q;Xqj9JPjYqX;0;)q3(Ihk(O+f}^ zLetO;)Q+w}bJ09BA1y!&(e>yCv<lsbZbCPs4d`~X5p6=7(GzGFdJ;W_o<`50XVG)$ zdGs=R1MNdc(L3l}bPSzDAEVFFIdlR2f-Yi&S?q+>*crQEFYJx|aR3g((O8R<a5B!o zqwr{)j|=b^T!;<00XJeJHsL1RjHlriJRQ%#v+!&@2VaZlVuBap>yQSoz&GLb_)dHm zz8i1BTk$r0KYjo|h9Ac-;NAE|ya&IEkKy<5`}hNV9G}1+;*ao2{1rZjzsBeBH~0en z1z*I!(gLlb9cV{-80|!>X=mD<4x)qU5IU3&qleSsbOaqq$I?1Fl^#WB(|Pn5dMsT` zm(W#oHC;<jq9@Z+Xd^w1Zl&AkUV0`yi=Iy}ps%A>&@1Wd>6_?2x}P4PH_@BvE%a7; z8@-)=gnpEMjDDPcg5E_xN54qFOus_EO20wxqu-?8q7TwX>38Vk^a=VD{Uv>t{)+yd z{(=6H{+*#1#3&hoabw&W55|-6W#X84CV|l~iHw#>Vv?B@CY#A&^h_?3$K*2wObJuX zjAv?@iOeL%$e5TWrkR<>v@;z{C)309GBcTLnFY*3W(Bi~xrf=v+|N9~Jjgu6Jj^`8 zJjy)9Jk7koyvDrF>}B3y4l#$BBg`@8L*^sqB=ZGxhWU~?%Y4Or%lyFn%2F)NGAzp~ zS%FotPOK~I#(J?qY&5H3b!<AD!Dg~qY&M(67O|ylC0oOGve&R(Y&YA(_OdhCS?p|f z4tp&-m%X07fnCMk$lk=RW^ZNhWbb18*nak2_CEH0_5t=`_7V13_62q~`#Sq3`xbkU zJ;Z*<e#D++KW0y{U$AG`uh}2jpV*(-UpUOsoGa(XxpN+zC+Ed^bN*Za7s7>e(Of*I z<x;scE}heJxm+HX&lPZExiYSto5W4#rf~J#RIZ7e!F6*z+&peRw~D)wyNO%Pt>M;k z>$qFEJGgte0d6a|lY5YRh<loQhI^KKj(eWl!@bJA#=XTI<PLG4ai4QvaA&wLxwG6? z+&S)R?mO-x_bYdaM?B9fcn4n1`|!TJAMeix@PT{~AI3-X@w}EF!H?uK_%VDTU&N2) zi}`AP9ACrN@=bg*KaFqUr}H!T4!)D`;d}Wx{I&c-UgQbCj9<=Q$FJt^=I`M*@_qbf zemj33e?R{y{}}%`{{;Um{~Z53{{p|8f1Q7af0sYTzsH~8KjuH>KjY8xU-9So@AwP+ z_x#U_Bt@zsO_8A(rN~y~DDo8rim{4fMY*CvF-}pVs8dW-)GMYcj0%&YMKN8`uINy7 zD|!^O6>}8x6$=!L6pIzh71t?lP^?m{QLI&LP~4)pLvg2KqoPl-S+Pa2L$OowfZ{>L zql(8APb!{LyrOtj@tWdw#a_i5ihYVV6~`3sDc)Cnpg68Lq4-eorQ)pOE5*->UlbRW zyi%c5D&3VHN>8PiGE6yK8LreSla$HIEM>MbM_H;YQ<f_$l#`WHl=aFP%2s8Ya*py^ z<y_@*<#oyx%A1uNl(#4cl$(^Bl@BQ&Rz9M9UipG@xAH~hTgv^)x0MH!$CW3PA1c38 zo>hLO{8{;n@}lxrK_MswK~M>vf|uYe_z2-bgb*nt3n_w5$Px5Hu23YD3T47Lp+=|^ zrV0k3NoW;1g=>WQ!eU{GuvAzj+$h{6tQOV?cL;Y1cL{e3n}r922Ze`(hlNLkM}^0P z=Y<!9-NK8)KH*K_E#aVWRQOc*O!!>*LO3IQDSRz_D|{zh5PnjrRc<PGmAA@A6`%@K zg{s0-k*X+FoGM<WRVArXRcWdW)hJcADo0hM8mlT+m8eQpHLCHdTGa%VLDisYR2fyR zsy0=-szWtPHCr`Db**ZVYO!jGYN=|K>PFQ~s@1ABs@qhztL{+UsoJF4tlFZwU-f|M zLDfU5=TtAM_NZPR7uMd}+IommQUax-94IHsWqfH>{0!5a?mGBwnL}&B8e0wB-Tjm! zHB7`J-A}10XOSUjvlw2l4%6o5<fZ4PrN(K~^!ahgIoU~ZIr?OMoL-lzP0G(tPD@Nq zs#m)e=H`v>=$g^pX=pU%b~N_3nc91-EqhRbROB|wlk%dxDIdz0@}vBz0Ff0rkrx%B zQWQj$=&+3nqJpUqDwGNXRD7u*(NP>GI*HDr3!tThZ_)K?FR7iDc4Nn^YC}Vgp{uaF zrlq^3q180S_9DN_&}OPv2g8H1E~BZ-WV9g$b@UzWJzX8GtzbyhtG#WN3fuF6RNakT zCR2M!hY{+Jmfl%=WLL31MXS@KW+&?7G)cPLxMZC+H7+d=D3qF#ou8ef&&$>)>Fd?8 zLjlM*4>mroz2%x-Q=t*4)Y8;q>Z(@<Lh<az9<XJu(&`Xwt2;Vc8-{dVS+Dk(J697M zlsrE+Xl`P<7Ct5>rY6syf6&bOWJ=dZ`2r2q2dOkFof<)ntdqIk4z#M3KbpEhII_FC z40HOSKt^q8RhikyQdrrTNflC&+o>!no64c|R4$cA<x>UJ7|~U96Wv7*(Npviy+t3< zcRN)C%q*r#s8Xs77+OJ9ihjUAe=$Ie5jO)%9~2*w*y)ko-3_*$p}i;1*wWL{)m?0u z)6v^guT}#!s-|_!DmBb(X*R%{iSPipP;6*0wbrZShSJuKIpca-T3dSNWOtbiRbWT< z)U=pp$>40Dq<5FG#|}iUsk^1Q{R$8ygk<<Frfx~#pjv)QtEt@3Gi@?_mHQx7R8#fp zfD%JXdljHQr=i2pWvp*0HyGo)ZQrd_ok}%Ok$sdw4D6#C#UP0)&bc+!HslL?Ol{pV z8=I-={nRw7MGO`r#3(C(R;q(?>8IMLb}>W@?Wa1aYs4^dxEMYezzmfzHGG%IQDSIr zZ|UhZn#x177Hy=YKeAZNrshm4t;%fyDeP!Bbb%bqrZTL}%%v7w){F?vM2g{|SqscC zEI^h}OQ)1pmGt%)U{spLX@FWH36$K%a_YKzwX3bbU}FQ+@}bSGq}E9~<9g}_Y87=O zbrZFkT0^ZBW5qZzUQ7@*Vxp)OleSUoshg<{)GgGl)NR!5)E#27m@PJljbe{DM_eM_ zC6Uv=wh=~jJTPc%OHaH_4C1Tiv^8{qFa=%ZeU720aauko8{kNlsTKSUlhIcD>R=1I zyL(NbT>P#AHrLe9+gz^>xytJt5T6;H9WCuW0OM+?RrPfBHum&(fu8cc3Y_AO=58zR zwovy|kz1*))HZ56wS(G8-AmmkrieN*RZJ7p#S!Ajt<(cBVngBIBh;gydNW|OI>W!w zVy3Kkr2&~YyVKBaG#SkzDQhg5hBm55BV-JyGs!EP1Cs|-x<Uy_4Z_#}6<pTd3dJN< zeWha3v}CfB@flL4O&W1MrY;y=T`lcE%PRq}FieIEqzoMbz@k$mY;DR`LPZ{C&r{R; zs29XhVifeCaRf}0jggJrQToEF+_Ib!LpQW64WmJ2UM|;rS<<qvh*_e#US0He>P5D+ zMVW_*1a5?}#VAWzWyh@So<bn>Y)P?<urhHk^$rzzFZBksk9w1Oi`q}UO&x$ScZfPn z9ifhjIig<774yV=u|OOn7K%mUSg}|vxtDsEI!3(*tPQ1(!;hqxPf{OK$Hh{yQmg_d zJByRyM^evI#HsKJMvOFd*`(jb+)7htE6ncMJwWw_UKk8k@;eVLUe(yq31S&F^qCEW zG@AZcUt-@Mo0GWHUDhe-B55=YEmLKZ1k60q&yuES7>q+-+chW8<{m@emq-J<s%K6s z;3<j4720l;Y=rWT?iQ(en5Tx8Dr|1==rZXI-B3MZ=nGrBR&4>CH1knX2hv#hV?%mq z#?aYqG8S}o^malq$&j)YlgL#)r_*$h`W6hh@2CqfDa%9`%fyO<@azZbN9v~uV9a%! zhk{rRvM9~)zfc$J)lN1wD_0tT$G@6qcKN$p^f&5vu!L+yFK5pHq7b4o{;Wv7+663! z%fw=WnKP0(cu2w?F^HuuARZ<dTgh&*TC5PqS^9wlu^bG%7MPn_46QBKnyO4)Gg}%> zC5CoGv#HB643Gl?GqxW&qG4i<IKCgLk+WDUP87pyN~`igvA|?sT2*f7GBkG?I%O^& zMjpr$c>xmM$Ori%KPXxS4FENp@>>nf-SE8>4584haCs(kc2J8G#JWkvy^SqKLqV6M z^~}UVfhfq*PCp8S$q|JB)KC<LhNEz>slgzC8Nai8BJ{Eqj0njJ7AbL(nvttVBG4&+ zz^@-gO9cMIb2W7s#R2?ylz=oS5&mhQjpB|*gCvze$x1_evq|64+uj3RDK@n?_e@hG zv0iQ~2_-{mv;0+=diqfcl`-V|K@<<-Ga03d2Dx}T8Ugd1O$@B{2GB^9Az}B&S3{uv zjhV{Izf2@qkthpgqa371xhN0iqXINWG>Rs%No*FUi7n!EafaBsoeD)`Q86lk-({#A z{;vdO)h4!!o$&h_u?zn1meiHx6y$Yvb##F-2Fe+xguHgi`Y=j1n#Dh;gy|bP0S|0L zPBPtK#7WO=Gn;wtma3VxPtF`^^wq1~r3ZEv06@1?wSkk0!ZXRIfX0CFmtzCN1m4-o zTSvUR*>cxNmV0t?IvDPnM2*F8NA+mxMzKR?Py=cNmRk%f;OGEqKt?KK9LTb%$2<d} zCQET}_fQKpeWMs9KW`oKyu<w2%8f2GlZqTb-KYokioN1Yan=Bu1ye<lI2)+zXQggc zkD+mfzN4+P%LE2{M|+K-wHN3jX<dm>(%f0t4x~4A_W<>!nGyOA$}Bghpn4h@G{&;7 zie6K%Nm9mYY;9abOR30Bh@eGiF<K&CE6x??iSsw1Wx(p|&<b$@pg_dM5)zVHv{6p7 zh^xU<t5*+)$AbowP5;W2FKf4m0cb)AQ40g5nwJTN6`|E=E#=aO)`$!H&^l3+{9mc2 zxwqZf<~FTGZ$Y<GksCLP(bfldpu22!?-mz{;no*@s9!D#a`XpQCu!%;w-(%jBr6SV zMcdGJv;*x#_oDm6rQ$Mixp<wpLR=|czZE?oP2}id`1dG!OuPXI<Sed&e;dR*#OTX< z1vVxiKd!yoFw<nT`s9BUN@-@T(w6{>dwRS7_*$a8ZFme)UYfIIF~2(G%c(9K7B()~ zLCrBW!K7+yUS{u~)9VHFqK)Ev#2W`G{t9{xTq^XccvByGU0f|jj|Y>aJ*TkBO6fPz z0ZHoLLi^F%;u>+SxK8@=7CH=H)`;uH=yGd~nw*wy@EWWY-$Tc#$bR%bdP}@nT+=UA zGFOQnua}KgYr#|K6B}-yink2n_67RVhTB>3)<OCC8hs<Z*e|Z_L*I(G4Zipu{V2Wo zLA<@s+!~CAzvo(_U(s(iBz_m~v>|~prtO3mb65a^U>+;5QoLKdN8C6-g<=ORIRSm* zCTRpph7$M`Htr48agywq#+tyC55KIGb<oM7gzmwDl4uSEH$+Wa3t4E1U9mfK1G|a+ zeb_@B_>)nIeX#Ep##&OMPExBw#u^U9!9Y~A*NsEOEn>7;QR3m$^Z^`>BXFd+Roo%o zXY;ag42~b_{^A6z5x0rkC1fPm$VL{)`wz{U7i2ahtUXA<X?B&<@d$CJcrUo<P<1eB z5Sq2&C%bx?ILEG@9_Nbpiw{^EwZ$UjMrUs{SFTsjOBmM;&Q-$nUPF6Rf^~d$CrBPl zg3T;TkOoCVOLtsLr@<Hp4rTj{gzk>su0~UW<nowb!<e!CHnqpMc6N14PxxDL4P1oB zQIR|FSX_)ta49as<+uV@;woG%J}f>WJ}N#YJ}y2X?h>CApAw(mfot%1&}~6f5uS)A z;mLRkt{0yX-vR-26#WQtA}E=lQ3P!u=oU#HU4eADrY1vgYmeEZmS`Xw>M}vic0Y(x zyHN_hsMXRuWiAM|q*PWSz4S~jT{onXdAc9+y+&Si1WUnM-xi#aC#E4~3ry`Ty<i0d zSx_sN>Vn7E-UHqfOpoxvY`k^XwVESclAg0lNh`hvrbFC@+i?f(6rUBJ6Q37f*o3=q zH}1i`;%;$|__Fwl7(JoJ(A6RtINjr6s_pJ*HPy*+vq4{HkR&!-t<B8C3qbVoeDTFT znC8t>ypIi_<cV6xtl5*Z)>@2VuI|H2#FuQfoGp#ZN?U5%T6iVC!8W>9iLY8m*J_Ag z;Wc=z_?q~};K;fe-)bl1x8d8x*TuasIP9<r&ALIBZ)+p>;C{P$19+3TPkd7hpJ>5L z9u;Jac~n?yZO1#Me(VtU_u+fRw<Sp$F7wY4db}FPtN<Rw4@&?Z5)bs@N5q3-bhR`d ztZ$#dPg5=fco%*WKP4U#4~s_z@G~IO&xuDRDRz{GZj@bnW^GpmVb1nu^G91m3}TF6 zG1!;2m@t<=FEDkqnR>e9_yv9m;t=>{@f}fZ#p*TuHdq$;b-Wk9f%oAz@mqMm_^x<N zd{2B|{6IV|p4f^H;Dh)OK8$|ANAWx2hvG-#uLLQ@+X)f~Qi;)%fX${{LytkSb0^AZ znGpv2JKMYnFG-}mluKTNIe-gqq@a=HWPycj)ks%(=WBhJHyZ|xWNHpZFeh5yjjJrK zSEn>~w8a}bJ6j>LCz+m2;A!UcwzNXTKPg_{(b!?A?&xit7C#t)jjt`tu~Ot?{2Ar4 z37^8J@hA9G@uc{%cuG9I34e}1#b@xB;wR#1@l){&iCx~-@laxFYcO>U;v+c#@;gAY zysKko3$!gwlsSWKf}<@5>g*#%lA_Ad8`@_YVEtlfC`q1%zNK^<2f6n>mJ9&=gZNn= z{z?2?5?SwJ2t$o+@0itI*4xtxp)?7~_!eW&w9u^1kL(2g5)E_xX8areou+6+WATjm zrFd5SN<6ojW@wh?Xr5MxUyJ9(Z^UoKi(+(LT}MY-zM)YHy6Zt-nYzlQXe2~1ECk4{ z?yxm4_rV${DKT``t34&zFd3^mI*Uy+O|8~SK&>#@3Ml+j0HK-Z&G<tE-3gX5(sl7E zu&$v?i%+o{%CrmZD$nv}YSA8)ZX4}Md(qys5A93)(f)LR_?>t`{9gP){89W#{8{`( zR97TdB-Iu5Op7ZojWgyY))jS*i<?mvmt8lrGFe-ZQrDI;CT?0oT+aB$%EWYwn9xyl zwA|7WI*ta1nNFZJbRw;#ljvkR1!fhiNLropDTCr61@Fuy+CV=HK9)R0DYjSEWUV{+ zjv!Y2jUa`1i6Ew4onQ;?+KrUl4hdqsEplm-F_|1`lx~1dr$^8u#oq}6?+U}R4?P-O z!XN0Yy1~Yzp$+jvh!)W~G^|%ie!$>BmLo)FOv?=|UHx>f6a@IwGIAsP=`3-r1X*g5 zE~K*vqT#F6pmtsOyZq-6T?+5Z=yJLOg-tYCmJDHNPv~iB13%Kx)=3aY5HErx+|UHd zXGB6mE5trpr*(Aq{5LHenP%hY8Zbg&NyW-Ws|fVd<0VpE>6Kh_0$o?Hjs$AkadnXN z_Bynmo+yF)+vTC?pBrdFk$LUSkYP0qLQ(lP36qva2DPT7Q6YXNg_+`IRd4O(kV1o6 z?hsuMyqt={=mxr6T4HX1;3&kv;=4?(0A!{~qzG~VcFF`W(M=Gw09N<Y&E^0Ge3WIk z1*R@~I)T_8#L(p>O><x*F*#LQ($u8DlBRWRw$orP_0t_R$cdUD=YFb)?v^H57fD09 zTdcNj%S_eV&}LrN{f{PldNzG6s9t&wL9TuDT!P%}r+a!Kq?)-5&>~IfMFhDM<Ux?< z0KEiISw@hTgpKxJnDXfxB)Y94$lEq+(5q<(P;8~w&}->+^m_VcdINn6K|Tce5(H@Z z6BIyDAVEP}>D%br={x8<;pcAp9)f}i3Lz+xpak<@4MB<jd(*$?;PgM+yu2s5CJ^JZ zO2-cReu*<X>3iw>2nr=AjG*BI^aJqo5JBPQzY!8^hL?A>w83JhRlu#Yy?z?RkYUNM z%N%5d$?LLm7KionVqTXOtF|h$8fkrAGe0!@iJQ)b&HO2C=#26t{gin|d6u9!f}$)l zK&(6_o|kz00zuIhHBRr5bZX3>>D1RGok~!=MSFJq8`?A8%m%ZAXw~)g>U2B(a+xNn zGCP}k7?yEOT^((4=CVm(NSXOKM5VlDQ6KR#K@Ld-IZRNJq$J!1Lu%=%;O3_$B@U{H zcj@<};d_jrls@`>f^?E*xXS7}{ULZK^hfkbf>H?@Ve?Pu(=?chgX`<`=kyl@r4f`a zhED(`E_W(4YkAO6vx`1Qe`8ncTlzbKMiP`E$($4zv-*;<m(nZSJXY!biM}Z5wx1>4 zHd@kc^shA71epY7iP4kIE}hlp3K{+TTX$LNF_>YY9z#nSD;tznKf^IRK{*7?0Jkw) zijKEKsK#1c#lTw10OP<oGQ$Yc6O>C(-T<SfiWnDy@+I}v@-L__#tT+l8E=9LY*c6b zm@rUZj6V~=1TsNPFcZSSARa?dAwfk1jU}j<pb~;gw=%<-a3+F@gr8^zhD8}c<phl< zsLuSinV@O^d+N)nv$vtOr7^xSZW=_#ZL3?1ju{Dl36sjCG3m?*f+`5AB&dp@>P<`r zGl~kOA0TKPK{cW?s4$5)S5-KFQ)Nva(_%Dbx3*f-7XF?-1T}VR^~nd$&z>|lF);}& zbgeEaef|)g#*ASK=_C|J0kcd5)k->z68+30m?@=no0u}DoT*@-cM}MjNYG@08Y~)) ziIg-Pun#OhzpF31$4@icn9KyJ^rRvB&??@OnW@rfn8MT(G=-r0e#XEw5Hyt_gQN&N z+6?WzhE~~}9<+;LnWlZH(^@a(Nd4!=xK#;Sk!fLOfG%RdxM}QTS_v|Orv;R^<$u}d zgUE3tJ&e_6NFa)bHBi9RVlp$=$m+exqTb2Bq2A5G!z-sh#Dkj?{`VC95JQo<#-i1m zWSN*N>413zO_$Oxh6Mg~x+KZ+OV!!bIwLYmuB5h>g4$Y6P^+Z2){EgX*p)C@FxL~* zX0wc#8<`D%SGC;2+{)a>+zvl?GItTwPEZFy0Bw!=FSt4DBtiNMTZHLjwo)#enSN$~ z*~DySwh#nr{ThP02<j%NXEU>n+0N`>b~5)8)JxDzf))}a60}kp-}cj@Jlm9anP#?h z^mbe3O8KFA1p=&pyJ=K@6)(qiiy;yj-z{au&4h3Ptj1iSs1<azp{v<s$;z`pzEW|k zwPdxPtWFSk`!QF5UT^oTu)V26Mi6Ltl{ePm^BD7lG<+T>XjUJyi=f$mGL<vWz*NpW z%REOA%!Bg>CzajIOE4)jFEV=wx|X21{nR7OD<Vv=^ZrJ*TxgalYv>fu>|^%-0onlx z+5#ylZmpZSFhl_4o(*<Z7R;lPV7@~T5!Hv8_rMVbcbIvf`G7gjoS4vU4)lTdMbHw0 z7Q+fDK`ZLj|F$7#(ekI=tz7t+`9#vFr<l_OEhT7KKl3T`89^}Wu7g!Ji#XQEJhdvo ztMk_E4KnALudT^+R^#t-X&PY8Gv7#Fu$;<wwPIIxx~;f>$6WYBEQk4#`AM?8nTrIi zCg=u><$aUPqDvBsej{j=WnN;DG}GKTWTv@1n!y~GRWq;);ueDxNHxnqyq%0!^>%i4 zboE^BU)z-#sxOaQ^yMNma;zGVW5Ecx`Epk|Nt=3^!erf954r1yS#Q>d^`%s-9|~gw z*g%-<x;i>~<k+{g7*T5Wl0BQv>lhZrA}#07?vdYkb;|D2A6^mECn0z%L7R@U!7Sv( zu%T=iI~>~aV<VA<jiM&k!d|UbW0$GDrqclb_e^Y*GX>-<iy)&V2z0ej$i$AW7V83v z)K(us0|ebR#Oh#U*jS05EV!;43A)|F&wFH&B|>D3)v`$}tR&q*(47R`H6%19$HUBl zGP@WSJ4)jE-G9P$IfiA8R@wEQ&4>O+LY_?+1qM#Pg!O<3Q8&oYV8==v3;>b=5>gnB zEn^`8O3Em+h4vty2o^Ie3G4Pu>SrsY5%G76%Pmx~)$&U2U$xNBj+3BEi@twV)H1%< z@oXa%xs$DBC$M$wM0OH8nVrJcvr}0E3q}`AdRqzFM$mSGb`Z3aAeijHGryl8uxKCL zNd>Vcs)%i7r?D;Uban>Y3af#kq9Z{M!F*185!#o~L4?jEzztf;3~`ob0Jp*Hk8X4J zJXlPy+UH|gev_rtyiC!Z-_ZqeCYYE!W!DQ9T;#0$9Md$g_d2>J$?5l1jnhn$!RID_ zt?X@wgm6e}F-ODd)fy@GEv3S=nxLt{)grlC4g|i8=8BMn4uL!v;Nb3A^_korpx|$Z zpE;3HN=UPz=q0bN%jjEcTd>dW?97LO(p}hI0=aUwz5v2@-z|$^R_@GW7gLd2*!k=N zb|EXW1Ro{nVS*kZ=uv_mBM2r|VGFy2UCJ(Fm$TQgD+qdmpqB}DCAgc=Dndi-3&c%U zWFQt&z|bDQ_;P9Aru?j4{r^_w{Y4wKdT9+xT5N>O?Z0VtN+I{$yo%nI#u>#O9W!JM zEy!ExvxZ#{GaI{>T}Kd@7f<!GH?tcEdWN7EAr)gV7{T6QQNvHxs~7$&hBst)Nl8`R z@eRH0##U28CFtvT^A_2mXl=Bh^>n>@*1v+5C8Z`#vTH2pQ09$B>;StJl1bQ2>}D25 z{j&r;N6_;F_;YqUyF>hhpce?*Ey+><Fr~h{xUj0aJ}<Yhx~#IkDz7+CUtL&MT0b^# z!j%f-)s|;NPNTIz&>tYw6jl}H6z5d}7zu`~Xdg7Eyj?M%oRn&FE7(WbU025YDfVdz z?>z*)WLe5)pZj|tUu0jFq-qcQ5<#yJ^jbgr3i~QSdkOl+UaIz4*!OC^y6!(=pR}nY zp|=xa^+uB|dqYlkvL<c}3Cs-@m;;s;U;p>bO6!<A%pQY;2lfbilzoSNm!LNY+DFiv z1iiJ1eUE*g{eV4A(0+p86_EeDBs2ekck?Iyhk2d2d>ZI#%ksdLeW5>bZm#4DUDb86 z_V+aVDflof^yTe77R=@YQje|@j%2?CABH{4enrqhf{xmJ81_8-9e5q=H|)0r9U|y3 z_%Q7ElGkzM|Ai03USuIf%pMv?NzmSre3%s*hdMkQ!>M2n;aHC2cuv77If0;K1ieSl z`viSJ5OC|n7S4fl<c84?aB2>$(+>%Pfa=HQaQi8OPD?$uFy;?T$ZhFvZ0&&gQ%V!) zhIBG*yawW1NxJ;h#JtqRL|vjjDLXG+qtU0OYEx4OUqOD?<*&kL$aeG}8mY2m_QQ&{ zIbqETUh_v7)>qogUzxQE=Yyv9alQn7BzC|QFIfbzMj0drwXHjExIivQw!AGez=d)U z*Bp{J%0+OI_77sXSowk6OafSmoQ9xJhxmzH5|_-SFeeCtQ1s^nfh>V{_zx-$a0Fl4 zdh^V$ezSIC1UDLVC3Bj~;6{NTNYELAz8v5(xhxLi&Swb%xjiRF*T`W6YkGLnAJ{P@ zUSNp;{Go`|i;~GPMj{8qfWNlIbGTxzL?)Qc)BFPrE7}!Y4QL#$lB?pXIS8Y|82XN& z3j}??i5t(=auYa+I{rY=uLLUyHZLUpe_7*j1`cd;%K`{zB<M%W{KZLI3At%p3qd~- z^ovcqaIM^Bn+ZACOi0krk~Xjpe{j9rY)~CT_8oH9N<}Y9Mc0?xDUJo)Qb}<v<V22e zi@3$y5`r!f^cz9H6HF0|2*z8uW!!S^I#3)dx$6n031$dpCB=a`g8Ba+DUS7nio+_G zw{o}HD}g(?yX+rq<ofI%Y~nV{59D#NO&S;538e21hLgB^x%=1ypeC@2V9?dCgPMSm z{KkUwab<T}n|_#k97Zzt2=^%W7{Lw%I}$u>fO`V%=bj|k3355G8V0g#H2+_WXBpoY zBz$)h>^wM*U*f=6l2qegkK@<5H$bkry#%}Uar+3Q1rN2+Ig4$B-Rsrc{}XF!mUX|k z*>?Jq+*mm)Ji#0oHFYO++Oj<3jNqNbNvQ^{V0TGh%%6>aT_nNEki#70m~Z2ba7Vd! zxOcf@+<V;n+y?}E66{5=H^Dvx`x5L&us^{8+qe_daqc7TB=<3Q3O;>8aG*Gu;2?rS z2~H$fD}76nh^mp$F?&vu3t{ooY|p@7Y-(xlm6JZKPF$Gnwfw|t5lQK0Qqabn9|RuT zWyP|M#+=@s9>`7A_jXBv9&<VK?iecst5Z8<0!Xnzxe|Wz#43fb?K9?JW#&)o<(pu$ zU!@6l+YkDtW-gg2Vc#v=*44}Um-weG<iQ$F&m1XE13k4ElvZY*=OC+p=yZR9`w_Gz z_dWLm!NCNFK-P*m3)fGI^*b4iMj4t+KClkq34~Qaz<TD$&*b6r8?2UapghCGsKY## zqsKhWGu#25leU56mdJ#bLdY0Y=x~DF3D&^q-@0=g=w{e+$18b(SIL`_h7_05)(B1@ zIKtc#?+62xA4VV}-kMIzJM)l`Kft^2uDlz;Q3OX595cXs@SZ$KXe_~T1jmcvRdCQm zwX}FPp;6i#Az5{`Kq1)PCrN@@Uf3&y<a4>p;Mtd$d14M#@xgq^WgY3~L#d3*p2=m0 z^FTZ)H!asH;g^foCO(3X<fEjR)}NMxr6)7>F0cQmp=CaXx0q}ew(|+R#*XcL60ZYC zkWc1Q2u>zArJqmb(+JiP+$9aoWSfA=w6GVZdfVHaF4z-m>aq^czgsQ0McNJ7CRelK zIEv2!TZkXcXYyHmHo>U`14iitkJ!ZP`CLAa&nI{!!4(8I5ZoxCnSK>SY>x-Gc0%N` z6}Bc?W0&>n3|k@lPS_q-nsdcKXH0A9?EXXb7+X2J>T-;3upNs+%DQstK|-3f0)+46 zp#=hYS%X$0mGI>f-%9y1f-?vn)z4S(l?0C_I8!3XpduNBG>D9C2-?)&U@xvz-i(8! zddvY!>kiFCvEGW!1il_}dHFhiB0q_r%ugXWi(p_~4#9eYb2sx-c>~|TH}Xb;^9U{= zxRBtn1eZ#<x-@pQ_O`Vb=62V2Ls$~L9~gyR_78Jgx*&%Nl!g>0wSOgd29D^MV0%7E z{$$QOmXE05TR|`JZ3O3wQRbm9>yT@tr(Fb(5u>Um<W<QJXG#xe5nLoK_y*U{Ha3Dk zUf2#>B&1!}Gfky%hD=vWqvTk@V!;Tx608#U^Yi%m1Q!!rB1TQht`4#Z-FWyS%}R37 zMN-kl{1SqJcjaPKU7}VKuQC4_^3h7#6+CQNxQx*^ni*Yb+ls}n;ct=Xzm{Leub1gx zMQ}C2<E-?*mA{R@oxg*>li(VH#}iyja2>%@{x9h-_pX1C(DH*VgEW>O?2sPpBzVGq zLf;2q0~G%t{}BH$!4nCdMDS#(x>IF!(9rQY1-=i7ir2x{!glF!J`3%4NnoDjpW>e; zxSrst1RKl@NV72@Q8)N8)$(z0HBF8r@-OmI_{@Ivy=rC(WKUQ*x0i>_4V(El_<j7F zGE+<hHxb-yWy%5mAb*HI%pV~bX0{fBrxV;taL4~WQ{KOvDUefU6?~Z~r=$m`37+wv zFy(VelE2{35DX)$U8?DlUmj$y!sbkZM-YKBw!rRi3m3kY>YeAmA-I#^Yk&b-jdcV} zOoV}8A-k23Kk%^6V2G{4|Du3p!w1y9{6+p({u2Ki|GR=xAO%*?3P!;yI0dgzD3l68 zp;9;~92LV9P71ZcS>d8^Rk$g@+~^^ACc(1_zLwy51TP?1BzO_QFeH}|d>z3n3BG|~ z7-p*p20vpx!5av^mEhY6h7oi(!5azgCwLRVTL|6;m?%6IUJ7r8kHS~sr|?$<C;}Bh zieN>EB2*Ek7_JCcL?|K^QHp3qj3QPMr-)Z1C^QN%f_D%M0uBDmGXy_R@QVb$Lh$PZ z?<06W!H1;P5PXc_4+#E{;ExIZgy7E!K1=X<g1;m92ZDbg_%}jhLbC+6OAPfk6goMQ zihJwT|MgUywjm*2#YhWckm}L<Z@59SMVH+@r@c{cXl;$3HWZmG3o@`t^xs)GvF%rs zRw&F%Q<g(Ax`(2bXF+Rjy?W6<LL<vMi8UH;$)kd!%cQJjdsoJuU_}<p=GUvc{t?VB zb7E!gRYBUb$!L#BnFW)D|E_@Nn&6b6*2_p_C*ai<#7Mn*=D$ZGF!0)CE6JWr6D-&) z{#UUXbfDtxXfwrv&C+`H?0<wdR~Bqooz8{iB{;LqWKW$&3qH&Ld-&MVXPN~c2%P^{ zl%pLoZ5Cv%|EHAWmB+f23ixN^tILAcs(ST|e?^AO8{6zCGs}X)P5;!o_7y234Jym= zL-tZU&w|dH{~9`W)FBph*8SJz#%``(W<l%b|CT1S!{&MmHn-HP7yKhq{8u7mIl;<a zKd-i6b=!X%D?3`<Y{BY|e|M_C(y4m(1MhYVVt4&7*lBiS@E!|h_tdNB{3GIZ<%zaT z%JOLGHb+eDNwvv>P~U$MAv+3fw;(i7uYU9o6as?*Hp0k<Vpujj!>;}WDT)Tc;_if8 zX%jh+pevyq_L9OOL2ca$E#=cX+D&Cukar|M8d9n%ckEyRU3_AEw{b>7)f_m3qb;Gh zr2&qnoRctka$rI}oSp{3LTRIGlXP&fv;>qe#=Iw|JHfn3)t<QbTl%v3UsY{GOinw> zK4QUUYrT5eA1M2OaR|)cRBh%H7}^b&xqQ1U*ln*@oBm1c;4~Lwn<>7{Xo+Mfo>sg7 zp>4%8if0wiDZt-{DA>IO-$(HMn-sehFH)h3mk54<;0IwB6@EyH1O3-_QN2;V!{_Fl zNpn-uHITNgO;1akKVfcaQZjr=wr+J+yai`4Lx1)w-c}q?93=P=f*&RLF@hi8q&TcN zV%`;opCEXbyesU#+MfmAc4@AgAZ>QlCZ;6Wy6}<WldE>&Q^jX;7oH;cX-gNRb?U{( z<Cg`FH=k>5JN!X$PVwDUd3!<ey$tAC0w=CO`cb$TEdeS!aWJpG){Ik%#)i_bN^~`p zlvqj2kX|5o_Yg=6zAel7UG7~<YN8dCQcyZw4JoBs=}d(xT?yVp@Jj#+j%G0<RrPMy zF3se*iP|JhT5M2KdTQ$YiE|T^;Y@MqybBv>Z)Lz$u?$qgnZ2+h5JOP(H9IVypBgD+ znXb{=Kt(8Fnd-`7q>NL>%b@lW{KimF-{mCSAcN8-4uVQij<_nQk;)7i)SCpu`As%1 zh`&FWx56SB+H@OMdgYj_f+|!N0qu$jew*L}673Gkw7V|)oyw$1bJKK*lAKATtD6hw zCMIj8E!Gw-psZAmzbfEb<pdeW!vr50g5!d3?}`4%jALRFK(&IJsx(QUuB1?uP0D5& z)H?*fI|Nk8)On3{7EtMfqSCJHzA9Ed%3c}Ndj!8f1k{wzP7iE0%Wt}FP%`Ez$yFgO zQZAMu9Vht25J(Gty>xt|8L1>)l5J2aS1ND1DyY@UH8QA=2tGL!)TJ%ggv;zq(hm0T zRwZPvT!mD3EANp(og(=35KtvkpPZCq8J~kh-=c)0nyw<Q_bTs`A$>~lXG0(@_|Em0 z3o=qe$LFKUC$9?XDdp23W1um<AovV`g42J@<8#@l-hHpb_)JTYl(9BFB@u*7tI=xh zglvxz&KkT5lCLZG0%V9We?{;)3G&xg$OECrC(YIBB*00j>FEGCIWYyaK;j^G4=Ufe zDjnZd9+P|j4Z+_I>3#VV-^XiY?k2)^T&whcq%`Z^D@yODN{jBjK=AiNK$RH6M!Cs^ z)aeGfdroQAzE_%wloynseU(2F41a%;y8E---GxraS1z|;1=Aah)MSlx&Z%vFQ(hAA z)rct20z-ug9Kja}{#Al{Nro!^cCN8;(%jS(9q7xXWWaF(a3=+}BHJ{8;2=0(6|Rfm z3UFbS;&(z*0GCD<<~)DLwpYy9CTkKU&S=w;0q7t(1z!PjI<L%fAy^18bB2Z!L6{-r zT=4CwqU|y{HR-l-CqxPHR|S<IXk<_vq4^=8mVTgKd`Tv!W>6alsY1q8L5&hd%b=8m z7KVUY@NHmLoOyyxwW)R?Pbh%gDj}cH4t>HHLJzZB?GQ?2qmFj`r{ZRpyE~Wff3Qfk zP%czTcvcYFsZXdPG-Rm_IjrmQ1P*z9S{M)6EJ7`zA?@t2Fj3B%p^AjbLWxi>9m+Li zn@BmFIt^>k4W=$>1Ck4&9SQ9!n<bB(|HPblA~Xn%azcr1bIIlH4hTlUWKBD{YN<a> zFA<uB7OAJx2<_e{OeeIbJx4k$9P#)cJ15D?s4ig^NakOkwPsz>6&47h)Zc}K_U;o1 zp?%=Y3*d~DKqMbaWlagTwy;cC0qexVa^X5c1F!u1g_XkfgbpBdpd=L13D4k0!dc?h zY%@!mkNKH-w_y(i^v%~Pq#I}U7|qY&TujN!9FdZqW^B;F>7hxDO$`QJV-jpePixTW z(o8y&QJa(q50i8{tr1QuY@3<dWW{N%umSQag>}Mu;buYy6FP*@p##D#!mY5Sfes_| zXgGHkkkbHi_8Z15o6Eo@t?F%)j;4`2U1e&PjuV%XHvUk>c1*q`!S>LqTY6gM^<d#1 zYWgN&qtGYx3j>56PUu)dYY3fUOaB$N2s<RCw+h>Y?Su{|bOfQ{`%d9r;XXn~5jvXC zF%s6&Ij{EZ*dYmr;J{wZ9$4#(`SXG~aISQf2@*V{J6_~l1O5c8+=lr$=Flv2hA~A| z1dTJNdt2%LxbW1Ky708{jPNX>;|Lv3=mb#pS!x+T<%pom#c7Z5>XkseCcG}}C3GU8 zwS<O@O4~_wja1NZOa&bj_ERe1ZQ+1)0+y73ROXB)HJEp5!DWUB(+tav%=mkk7~aP# zoYX$PeqqC7;Or~QMNUdV<={BXb_amv;wJkO^|9z6(i5tB8yig~qse&48Rj_;?<-vU z)bHjlG9ugW=_PV-Gmy%1tUZ*}ceHkN9rh0h6oP_7LjUrtd`Go(ixZ5pp{M1?<#e<f z4~9oXMqTNmA?p$Pk<ri@`B1<^v2j9tf(Du&KMjr#gie{!sFE%a$k9-0S`+}BHpz-# zzcw1ar|6)d?ZnJE{VCGJv~)<27;?>kQ5Kv25g@l$cn;YurB#p(1^YHFcS#-?HM&~b z6)hsTMbeq_p+c!RxHU4B%A>|om2gjF16;Xt4b@HcQVZc$$Q$A6nLFWL$c@whwHYp1 z*-kx3?V@(W9gqj$@{N<!X}AaSbLv-w;O+u<<Og>MM4|+g3P;};ph7s|z8uxU&5l!1 z8|p;8XeHd?*bk?BKY^Z+1r#HTq-R=wTYkZ|IyzaNh7JjbC)<vO&jraF5Dp1Ps0^U9 z^vyan-Vshf8a|BfW5RpFcHslzxOt502%QSUoX}~6PTwMYh<k*S!pCsrY!9JFh%Xa* zB%w#a$+O_M%14U-$q1Eqa!ZFh|4AXh3HH}YJD2~WkmZh!zbGjkv1Kk9nx&9wb5J-7 zBk?QYoFw<sae~scy<+^S;iCyH-$Nvv7rv3HW9k>qOY^h3y2EIg6J+QKN*bZj29=kn z&zMtogzq6`hjN4~$gDRm2|ueCINDhFMYt&ZDqIqN6Mk1wDx|_HF#56yttWIIp$iCI zNa(SIE+KRop}|b4+M!}qoQhW|R7#bgQmGtNj;djV9!KapLQf%d1EHG;9Dhf*6B_p1 z&LZ@+b~C-o)iTrP{4WH-hpro_yeydI{=4f2f0-hn^0y$C|4#?Q>uO<>F6c6SLSw6R zN<l(ht=`Zn85MTxKB^E4LSz0n*1=T~7JQ2SX#!d8dO6R;Zuw$pOj{LeK?u(H75|Z_ zu@w>PZy6ytjJ~D)PZq;fi59#{|JTgy!OiI^ODY--=Sck5Q_<}7gC!M>uKXWB%ud=Y zX=yZ^i=mwzH(N@|ifip?hO=h1daX7)U7sA6o}@{ROHR$x$EBy|!abN;Z9aU{rfYLF zmYG$hSLMU54ppuS6n_n&$M>rWRNy*;qd7qgA2&-nn7L+}sik>ZPiWSn7tE6se2^_r zD~vK#r39l~f-%tyqe@jx=t+d0Y=tqTGMQ?IVy#@Knk-eGC{?aESDvDR-%|-~7_5A^ zxe67UwPuW6Ws_=}RJlp2+-R=cqJmk-NNCew<w3Mxu&dmu>Xs^BBUNrTSME{u5*nOU zI66@7`Vh1)>+@Wdbg7_fo>X~;x$;7lNa$8VxBYeHWvUfY<>e~y`Z@^R*{@ou0<Z5H zLU&m!+lYR(uCG<yEWubOApqtMFm8kD7D7V@W?Er{W(`)}XxH_-R2whrdY`JF(6b3W zN7@8=wQ5^cJEUscq&DZ8+uW(Tm(cSFJ%6yx%gJrFMN|({({~8dRF6WAt)uD*g`1Gi zUt-s>Yauc~=!NEF*;@%sq<mT0K}x+vPr-2(V7Uy@5xXsVO#C02fL^iSv*^E_2+?*0 zPe8R-^~N~!b_}yK;0^cF#!xA6on<Cm`CJCOFpO}$^Gtp&KOe4kUIG_8ui&reABJn2 zkHS^WU+`bTWzApn-@tXv-}660va|q+(!(H0+65A%Js_3YN0Fk)RZLSXQM|0U0GB08 zS0ooJ$0=)-b;?Ofld=;oMJCE+%A1s{m3Jv0go}_LRX(oVrF=^HjPg0S5cx&r5#>9| zW6Jm8I^++PCzYp^pC~_5ej#AN9YT>65PMn&KK*0D9^qxUruaMI2jM3$S}%dY>Z<Zn z1;e$(!&MQgWL3IqBwR+E0}3o(H3qIBhVifJhGDq^E*ic=wNcd%7YuJ#?Nr?d7Yy%G z?N+_5dPnt<>Ic;&2f@MD!QUa!A=n|*VYowtLzF{|Lx#g>hb)I2hg^qzhcOOC4#f_o z4($$W95y?=>~Pvq=@{!+<T&23$#I(FbjMc5cE?V~F2^3n#g0oImpiU-yxwt@<4ulh z9M?H+aeU43>tU|LG{dTgT{~>?uw}!p8@6)TL&F{(_VlplhP^QCMJFdGKc^I@RHt;O zkxrwWGM%!W^iFwB1x|%dW1UKznw+LNO?PT_YIo{%>T>FFn&~v#=~}0GP79nwrw5$& zIDM^lRcqCi>KW=a>K*FC>Wj`U&c4oJ&f(6H&WX+=okuy3b}n$9;5^m2#ktG*M(3NI zA98-h`EBRp&S#v@I-hes@BFj#MHdg3P?t!TXqQ-*M3*F&6qi(&(JmD(4K6J%T`qH6 z7P%~SS?;pJWrNE-E?Zo7y6ke<<Feo7fXgA5BQ7UgzH#}%Rq3j7^>dAIO?DmSn(3PD zTI4#;wa(S#+V0xvI>&XD>w4F1u8+7Lbv@<!gX>SOzqtPD`kNc&hTRx9&Q0Ow>*ntk z=oai2>Neah!Y#@z#x2e*!L7(`f?Jy#aa--S&FvYtcip~nXWfUnJGnc%`?yEA$Ga!H zk8&UFp5<QXUgTcvKF+<yz1H2}-r#O@zs7yG`?c=#+!wenbzknj!u@*pRqor|UvvM^ z{iORj_aEJVcE9L;$^CZ^g@@qb;4#cY?cw4P<x%0$=+Wh|&|{Iu5|8B`D?G0ExXWXQ z$4-xXJ?{5-+T%Ho7d-ZOyzKF+$6=2n9!EXi^*HZw$<x7en5Wv)#na8x!_&*t$1}<^ z#xu?{!86e_$uq?>)id35jAxtY4W0v@uX-NyQg{V<#d&GGv|cG*sb1+``Cf%yW4%hf z%DpPR>b#o0+Pylxy1aV4=6cQdTIfZ*7JDu6y1{Fm*G8|+UR%Akd)@E#px47*k9s}h z^}5$SueZDocpdUO;`OoDCtja<o$)&Bb<XRe*KgjGH|@=O^WJXWp5ETxe%=AzLEhQk zrQQ|ZRo*q;wcd5!&EC_zTfAp@&-PyEO}rO-FZI5``$q58-fO+rdq3rU%17bj?&Ia- z<KyoW=o9Rd<dfx-?UUn^>odux#i!M$-RBygZl7MC1wKoCmiw&mx!z}$&+R_<`1JV< z_-ymp;d8Ig{XV;W_WHcz^MTI^pO1V#@%hZ>3!g82e)h$_PQGrw9==|_{=R{}!M>rs zI^Rs+=X~Gr{mA!Y-_yRI`hM<v#`mo6Ip6cX-}+wgQ~Ig=9Q~a9oc&z=Jp8=<{QLs_ zLj1z~M)+0vHTm`UE%dv^Z>QgjexLZA_q*iJ`78Vde+U0z{+|Bc{=WYH{(=6%{xSYZ z{-gcJ`y2h6{agH7{oDOJ{a5+l?thp6J^uavoBX%<Kjr_b|6c!n{`>t8_#g8B!2hKG zDgRIWKl8uf|Fi!^|4RWlfC=CN6agLqfdR1ri2+FgDFGt_G6F^iWCaulj0<Q8Fa<OR zOb=)cXb;#BFc7dMU|Yb>fcpX-2zWGLcfe}_djs|bycKXH;GKYD0UrdM2owTC0!IYu z1M>sN1QrF34{QpY7C1eyHLyLfGq5YLCvb7#(!k|`D*|r_yfJW1;QGJ~fdhdL1nvzy z5%^1xS5R2cq@b3duArWvnL)FIt_@lov@~dW(2AhzgH{D?4|+D}RM4-%Y%mwB2zC$l z3ib*14-O0t4jvVpA6ykYC3tFZL$EQpDR^3NcW`g;tl&ApbA#sxFAQE8ydn76;CF(5 z3*ke&L&8HMLLx(=Ly|&rL-Iq$gcOAohm?kthg61Cht!1BhSY_aLOMgbLwZBRki{XZ zL)L_>4Ot(uJ>;2?H$qN?{1S30<o8e<%7pTv>7hBHg`s0ZOG7I{t3oG*Hix!^wubhG zt`EH}bXVx^&^@8AgzgVL7<wf1c<860--Z4jrVMika|&|~+ZeVz?D?>l!rluzHGJ4` z*Wsgww+w%H`18YG9e!x|k>T$Se}DMt;b(?_J^cIOzlEc4CY%co437;@3{MVE4bKQ4 z9iAPo51$ymIDB>Zy6_F*w}syses}ml_=Dk3gg+JjZ1@Y|uZHgp-xt0={6P4n2=|D% z2wg;aL`KBuh_MlM5tAdPMl?n=MYKe;Ms!3hh#(P5B9=$2j93-1I$~YK%@O?(_eZ=Q zaXjMZNYBX7$Wf6+krk2Ek>exlA`Owo$mYoDk*$&IBcF~u8hJeO)5wdFzeS-aCW?zv zM!7_}M|nm0M1@9$M@2;?MvaInh$@OIi7JcQ9rb!N8|@P97VR1B6CD~I9vu}O6P*)X z7F`)VF1j{)V)W$bYof1>UKqV7dTI3X==IUJMc)y9S9E{$=ICwFJE9+rel~h<^#14r z(TAenjebA+MD$0|-$q}IQN%dLsAF7XykdM~0%C$<;$xCxvSRXL#>9+`DUYd&sfnqL zX^82FnHe)DW?sy~m}N05Vy=(5F=lnlGcku_&c=Kn^Ha>lm`kxjtaq$mY+!6i?C{vg z*qGS(*io@rvHIBj*uvQ2*s|El*y>nAY+LMgv3JJqiai?paqNXS6eq+v#;N06<2>R5 z<3i$w$3?_N$Hm4K#I?uGi`x`;U))o1`{NGA9f^B4?!CAV;y#Hx7xzuvg}5K%eu?`v zo{d+;tKy^Mlj3#p>G9d|rSVnqHSrVTr^FlLjqy$K3**<vzY_me{QL1I;!nn(j{hwF zi}(u(-U;CeQ3<gL@d*znyr1xS!kL7x63!?5obYSH?{M{~w<cT@2fN0SG&;>FO_nA{ zlcy=rlxwOqHJVzDNz<d5rMXr!Un6Q3YnEwNXl~Wqp}AYrr`e?0s@b8rPxFB0b<I)D zNzG}^XPPsbuQca17d5{nqC_T<PZSaz5;GE;6E`HjocNvAQR}1i*9K`rwc*-GZH6{a zTcj<~mTN1u^;)C0Svy_Zp}j`iqn)W;qP<1CQG1{EVeMnuUD{{0&ud@QzNCFq`;qnw z?OE;D+HaC@l0%YHl1q|%l2_8oq;*LflQt)9OWK+AVA3N=k0<R)dLil6r2R=>Bz>Fg zlI)$Fo?MnZDS2}8l;o+&y~(qa=O!;m7Lykz-;jJ$^4jF}$#*4hOdd$ynfz$-?&Oz} zUrl~J`9O*)#Vf@p#Xlt|B`PI0B_Sm-r6^^5N^Q!7l!+;=DJ12Nl*dz^OnExxxs=^0 z@1>kdIg|2(&RaKJ7om&R#pyJ<Jlz=GSY4^ETvw%=q-)eQ=~{HHx^~?x-5lLK-BR6h z-Adg$-3Hxlx<1_w-4nW}bkFLZ*S)KIUw2&hk?v#Nm%4MhZ*<@3eoYNejY%DsIwf^U z>Wb6{QlCjZlzKGvSn3C<AEths`bp~Nsb8j^OZ_JGLYgYgF-@K3lIEV~mFAlkkQSU4 zmKL5CnHHUvoi-(HcG}XkJJa^3olHmRe(AdOlJvUt=Je_5ZRwrq-RU#a=cF%7Uy*)8 z`c3I;({E0{HU0MVm(qV55jmn_MB9jKM=Tt%XvESHD@Uvvv3kVX5%-Mf8?kA`){#*o zbtBV8jvP69<gSq~kK8wM|Hy+QkBt0a<cX0dN1h(}X$GGWnK3q_I%8bM_>9hs`58+x zmS?QYSe3CpV?)Mm8Fyyfov}4zTgHxzJsEFj9Lab$<Nb_}GEQZDn(=wY_ZdHC{E~5L zRNbiNQ7xldM|F%kIqKY~A4mN%>e6UxG(Fm3w9{yp(e9(YM*ED;8{Iv+fAoRTCq|zf zeR}j~qtA>!n@MFVGlyk5XS!v2WQJx&X2xX3XC`H)WTs_~$Q+Y7G1HiNP3FwZIhpe^ zN#^3rWtrDyuF1SRb7$uLnGa<?n)yWLQ<=|Z?#+BN^X<$-nMX5^Wqy!(BFiBwA}c3r zM%J>dzN{Tt_hmhp^>EfpSqHKXW*y2plJ#-csjSmkpJsiRbs_8ftRJ(PY&M(AR%AP8 zyJdT3duK;y$7O4>ld^T$>$306-k$wn_9NMkXFr+!LiV2QSF&Hvek1!}_V+nXIi5K| zIiWe>IgvRjIl7$Gob;TkoT)i2IjuPzIbAuuISX<~&XSzvIV*E+$ax~?6TO>WuP@hE z>1*^8^po^c^v(KKeTTkF-=in`W%}#%EA=<&*XY;lH|X!t->ZK}|A_uE{Zsm9^v~;e z>-Xy4(Vy0Traz<qN`GGeo&JYhI+x2;<~rm$<+|j$=X$~d>(t!2xtnsI&wVfVRPLv_ zU*vw7`%~`ExxeK8ny1VY@>F?_c|Li*d472Tc`<phd2x9Od1-kg^G4@o<yGWW=Z(*+ z%bT3nl-HeiZQlGmF>i6+%Dh#1H|4F(Tc3AFUVq-pc^~F|p7&+mxxDjvm-2qg`#m4! z`{qaH$K=Q7C*~*T>+<#adHG}V$L9Z7z!bO_cop~-1QY}pgcU>-L>I&rj4sG7&==$v z6c!X0loeDIR2S3~tSES};Jtz$#>9`AI%f5lm&P0zb8yU|F-OLHJm#}8XU2Rr=G!qB z#{4kmr$V7HpfI8^x-hOVp)jkktgy0hTw!hD#6n|XTj8R@rG?iOt|?q!cuV1Jg<A^m zD}1o<k;2CdpDlc$a8KbYg|8LvD?Cv6e&OlDAK{=6Wsz5re^G2vN>O#u<f3^+>x*_2 zJyEo)=*gm|i(V^wy=ZUIzM^AACyGuMoi6&K=xou~Mc<5#99uuOb!_k0*<<I9T`-o6 zT{(8u*wtg#jomQz*0G0+U5m4emlUrl-cWp7@twte#hZ$^7H=;;R>GI4OI%6<OQK8S zN;D-&CAyOIlH8JllA@B5lJb(Ol5r)|OO}@0Q?k9}@sj6DUMzXJ<kgaWB}Yo$EqTA> zc*)6<GbLY@oG<yd)T1=8G^{kDG`cjlG`%#tw5YVKw6b(u>G;xy(zeoTOBa?dDqUK- zvUFAH>e98P_mu7^y|47a(nm@kFMYD~rP5bR_m;j{`gZA|(j%p3%Gk2NvdFTSviLGh zS$bJUS!P*wSy5R@S$SDy+03$qWy{J|l-*EvQ`wrbfwG6oo-KQ&?9H;b%MO(tEqk}@ zRN1+*pUZK%Q@LBYXSq*#V0lRS@bZZA<nqk&obtT#G38^+OUoyePb#l3ZzwmFPb;5Z zzOelE@<+>`Eq|eWPx;H`Z<QY?KU{va{KN8(%RedqtU^`cR^eUYR}okdT%oJbR}@!N zR8&`tub5C_tmv$mU$LNKVFjtUvEtQ=y%ld(yj^jq;%LROiVrG2toXR%lZwwPzN|P` z@lC~riXSU}skl^0RnnDQrLxkY(y7v=(!J8FvZAuOa(rc7<>bn#m5r56l`WO6l^vB` zmA#d-E9X`&s3et3DwkKTtXx&Ox^i9RhRWM2@2tG1vcGau<wKQ^R6bt$WYwsuqN?Jm zvZ~6ey;bj29jp4F>ceV7b$fMZb$9j5>WkwP<AiaJ<J9Apj$1o!{kU7k-Ch$=6H^mc zqp3-%xwq!Ynx|`?tJyt%#Q1{oh2x9ImyO>${+;p1#(yyW!`iyq=GvCp*4mER&uTB! z{!sgK?XMFSOt^l+stKzntgAzH!|K#^u5})DtLyHnyQi+dZu7*ziLn#oCniozp7{90 zJriG^_}aubCgo15m{c{XX3~U7?@jt_(ifA?PWpOs=j8d57fxO@dFd486ptxhQ+%fc zOc|K+;FO1_JT_%leR6$vy}mxbzOeq~`h)d{>))w=Z|a(<cTe3obztfiL!cqn5N}8{ zBpaSJ>^1B&>^B^27|~GBP~K40P}4A>VN!#sVOqnChPH;zhOUNH4Uaaw*l?!dyGE)} zX!L9hY7A`*Z;Wb;ZA@uQYaH1)sxhlEr*U%QlE$@-Pc`moe6#Vr##4=-Hh$4~w(;x6 zpBgVV{$`|%w2?IqGkO?9jj_fAqt=*WOfzO1bBzVYLSwP9)HvQa)!1g7X`Ex6XIyAp zWW3&Zqj8OKopFQlR%4%Wr*W5YxA7(8tH!;?H;qS)$BZ8sPZ&=cPZ`e|e=%_;SCgM9 z&=g`CZi+M|nvzYargT$=X|$=pRAHK8YBo)WlZN5eaML`~LenDC64P?i3e#HCou=)k zhfR-}cA1_wJ!g8=wAb{eX}{^9>9Faz=`+&>)1@Y=iEiSWlua&8?oD1zK282jflZN3 zDNR{TB~3L=6PhM9)i*UX&1h<Gx~8eSX=c;xCen0$)2&T?O`DpwHtlG-uj%ooC!3yW zdah}A)1Ib%O-GwfHJxqxy6M}d@0)&VM$Jq!->htQXdc$=*&Ngy*Q{$!Z_a4WY|d#O z+g#dQ(OlJB(_GtZXr9qLyO}gEX<pvEvUyeWhUVLv?`*!ixvzPk`QGNooA)&DYu?{{ zu=)R~;oN_^tl|JnkR+3IIn?kH4DAP#G&Km!G*D+k-eNOL6H(}UF7LUpbKdv+ec$sr z-(otMC`w+@VriwhS}wEHbdscriW+GU>dd^CGsTD@sg=w1%k%sZ&-OHhT0-YTmqJ%V zzlE-cZiG5e40;sxM#-o@N<nF82pWopqmd{RWuY9Dk7lAGRE$E1Acj2TBS2A9h8Ccu zXg%75zCe3WEviEYP(5lyCs8wML1)lebOp7czi~I5g!|yWcmPhtgK;_@hKJ*4aV8#% zC*c{m5YNLU7-4$<FcQWA2K*K-!xeZH-iSZJpW)B(cDw_BgTKY!;d*=oAH_}h9KMD- zNDPT1@g#vHl3wI-(vJ)vsU(dIAz37sOeHhPEHZ}_kz&G#B#O8sLISdYRFZ14iEJg? z$d_a%*-iG7gXA!2Aje4~IYlm#R?<oCl7DC{?LxcL$7mAmO_OOqI*1OX&(raABF&?d z=`{KpolOgA5iO=~QbEIXAuXpBw31fQ74&_&k$yx!c2b;lXP7g>$#AlqQO*pf(7Au$ zaY9bSdB<7ltZ~*k?>U>Ct<Ev$N2iS?u-+`0^=Bz8jSXVM*+`bjve_Zl#C~SKunX)G zyTWd=Tda+>vkunD<9Py4<UM##p2XAmQ~WtTnvdnVd?L@|llfFWpBuiD*YXB_f;aIN zeuiJ*m-(;!8ow@5#3)f9W{VPm1QlGA3MJka<)T7ViYl>ItQR$6gZMx+h)(&W94eoY znR1-Wlau8%Ss-7RZ^*fFzATYkmP%hPl9jSbu9RzJjoctVl$+%ixlQhpb@H$ptkPA6 z8mIEqbTvm&#Z{@&Dy#x!RfVcl%hd|CTCG*<)Vpe*x~zNXY@Ms~b%CC(3pLV0YhA7v z>lJ#nUaQyX&3ccn)ph!SuGdHOG2N(7>SldP-_W=8pSnZ;rSG{hZk!wMCb)@icekHA zz)f`rx?9|@+@0=jcdwV@P4T9A1>Owrgm=z6?_Kh)hUbMvxHPQ8;c#0dCK4Oz66qRQ z5~+@?kJLmq_{03s{un>UAMYRXoBW^r)Bf3@DByt%RNw`l2D^g2!M<RBa42X9jt7lF zb8t4e65I^#nupB8<`I)<dYGOj$@Db?O}fc8V@!@2Zzh?S%~UhpylUneY&>I3)RdV; zX0cgnmYG$i#%wm*%`UUY)SCU~pgC+B%n#<YxoBEVySZ)dKn%n|JamQb&<9fCX&3<+ zkOeQmi!cr*Kt8+zv!EDC!2=%v%3vXs!(vzt)vyt^!gkmJUqda_!2vi3-$M&rhHLOU zv_d=FhC6W2#@R&M%RXU8+Dw~mN87PB*G{l6*?c?2PPYYiuAOH~EV37EtNp{a+uKn; Zx+Gc^UGra)iHVJU;BH4B_<u&L{{<L=%}oFR delta 12696 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 E52-I8;{X5v diff --git a/openbis-ipad/source/objc/openBIS/openBIS/CISDOBAppDelegate.m b/openbis-ipad/source/objc/openBIS/openBIS/CISDOBAppDelegate.m index b09f18db207..10e77f1eb6c 100644 --- a/openbis-ipad/source/objc/openBIS/openBIS/CISDOBAppDelegate.m +++ b/openbis-ipad/source/objc/openBIS/openBIS/CISDOBAppDelegate.m @@ -32,6 +32,16 @@ #import "CISDOBAuthenticationChallengeConfirmationDialog.h" #import "CISDOBIpadEntity.h" +NSURL *StoreUrlFromOpenbisUrl(NSURL *applicationDocumentsDirectory, NSURL *openbisUrl) +{ + NSString *host = [openbisUrl host]; + NSNumber *port = [openbisUrl port]; + + NSString *pathString = (port) ? [NSString stringWithFormat: @"%@_%@-data.sqlite", host, port] : [NSString stringWithFormat: @"%@-data.sqlite", host]; + NSURL *storeUrl = [applicationDocumentsDirectory URLByAppendingPathComponent: pathString]; + return storeUrl; +} + @implementation CISDOBAppDelegate @synthesize rootOpenBisModel = _rootOpenBisModel; @@ -67,6 +77,7 @@ - (void)verifyLoginURL:(NSURL *)openbisUrl username:(NSString *)username password:(NSString *)password sender:(CISDOBLoginViewController *)controller { + NSError *error; if (![self initializeServiceManager: openbisUrl error: &error]) { [controller showError: error]; @@ -247,7 +258,7 @@ - (BOOL)initializeServiceManager:(NSURL *)openbisUrl error:(NSError **)error { - NSURL *storeUrl = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"openBISData.sqlite"]; + NSURL *storeUrl = StoreUrlFromOpenbisUrl([self applicationDocumentsDirectory], openbisUrl); _serviceManager = [[CISDOBIpadServiceManager alloc] diff --git a/openbis-ipad/source/objc/openBIS/openBIS/CISDOBDetailViewController.m b/openbis-ipad/source/objc/openBIS/openBIS/CISDOBDetailViewController.m index bf7b8d8d8c0..a0831032f03 100644 --- a/openbis-ipad/source/objc/openBIS/openBIS/CISDOBDetailViewController.m +++ b/openbis-ipad/source/objc/openBIS/openBIS/CISDOBDetailViewController.m @@ -404,6 +404,10 @@ [self setStatusText: @"Synching entities with cache..."]; } else if ([CISDOBIpadServiceDidSynchEntitiesNotification isEqualToString: [note name]]) { [self clearStatusText]; + } else if ([CISDOBIpadServiceWillSynchPruningEntitiesNotification isEqualToString: [note name]]) { + [self setStatusText: @"Pruning entities from cache..."]; + } else if ([CISDOBIpadServiceDidSynchPruningEntitiesNotification isEqualToString: [note name]]) { + [self clearStatusText]; } else if ([CISDOBIpadServiceWillDrillOnEntityNotification isEqualToString: [note name]]) { [self setStatusText: @"Retrieving drill information..."]; } else if ([CISDOBIpadServiceDidDrillOnEntityNotification isEqualToString: [note name]]) { diff --git a/openbis-ipad/source/objc/openBIS/openBIS/CISDOBOpenBisModel.m b/openbis-ipad/source/objc/openBIS/openBIS/CISDOBOpenBisModel.m index 50b5ef986d6..0b277213868 100644 --- a/openbis-ipad/source/objc/openBIS/openBIS/CISDOBOpenBisModel.m +++ b/openbis-ipad/source/objc/openBIS/openBIS/CISDOBOpenBisModel.m @@ -66,7 +66,7 @@ NSString *filterScope = @"Filter"; // Search is only possible if we are online - if (self.isOnline) { + if (self.isOnline && self.serviceManager.isSyncDone) { NSArray *searchDomains = self.serviceManager.service.clientPreferences.searchDomains; for (NSDictionary *domain in searchDomains) { NSString *label = [domain objectForKey: @"label"]; -- GitLab