From 22d62c114e7f750267fc72304306f8d94d80a1eb Mon Sep 17 00:00:00 2001 From: Ulrik Sandberg Date: Mon, 15 Nov 2010 16:35:50 +0000 Subject: [PATCH] Added docs from Keith. LDAP-220 --- src/docbkx/index.xml | 1 + src/docbkx/odm.xml | 259 ++++++++++++++++++ src/docbkx/overview.xml | 15 + .../resources/images/package-dependencies.png | Bin 25754 -> 25936 bytes 4 files changed, 275 insertions(+) create mode 100644 src/docbkx/odm.xml diff --git a/src/docbkx/index.xml b/src/docbkx/index.xml index 8f1f762e..02c50711 100644 --- a/src/docbkx/index.xml +++ b/src/docbkx/index.xml @@ -49,4 +49,5 @@ + diff --git a/src/docbkx/odm.xml b/src/docbkx/odm.xml new file mode 100644 index 00000000..1d8f48c2 --- /dev/null +++ b/src/docbkx/odm.xml @@ -0,0 +1,259 @@ + + + + Object-Directory Mapping (ODM) + +
+ Introduction + + Relational mapping frameworks like Hibernate and JPA have offered + developers the ability to use annotations to map database tables to Java + objects for some time. The Spring Framework LDAP project now offers the + same ability with respect to directories through the use of the + org.springframework.ldap.odm package. +
+ +
+ OdmManager + + The + org.springframework.ldap.odm.OdmManager + interface, and its implementation, is the central class in the ODM + package. The OdmManager orchestrates the + process of reading objects from the directory and mapping the data to + annotated Java object classes. This interface provides access to the + underlying directory instance through the following methods: + + + + <T> T read(Class<T> clazz, Name + dn) + + + + void create(Object entry) + + + + void update(Object entry) + + + + void delete(Object entry) + + + + <T> List<T> findAll(Class<T> clazz, Name + base, SearchControls searchControls) + + + + <T> List<T> search(Class<T> clazz, Name + base, String filter, SearchControls searchControls) + + + + A reference to an implementation of this interface can be obtained + through the + org.springframework.ldap.odm.core.impl.OdmManagerImplFactoryBean. + A basic configuration of this factory would be as follows: + + + Example 1.1 Configuring the OdmManager Factory + + <beans> ... <bean id="odmManager" + class="org.springframework.ldap.odm.core.impl.OdmManagerImplFactoryBean"> + <property name="converterManager" ref="converterManager" /> + <property name="contextSource" ref="contextSource" /> <property + name="managedClasses"> <set> + <value>com.ldap.dao.SimplePerson</value> </set> + </property> </bean> ... </beans> + + + The factory requires the list of entity classes to be managed by the + OdmManager to be explicitly declared. These + classes should be properly annotated as defined in the next setion. The + converterManager referenced in the above definition + is described in section 4: Type Conversion. +
+ +
+ Annotations + + Entity classes managed by the + OdmManager are required to be annotated + with the annotations in the + org.springframework.ldap.odm.annotations package. The + available annotations are: + + + + @Entry - Class level annotation indicating the + objectClass definitions to which the entity + maps. (required) + + + + @Id - Indicates the entity DN; the field declaring + this attribute must be a derivative of the + javax.naming.Name class. + (required) + + + + @Attribute - Indicates the mapping of a directory + attribute to the object class field. + + + + @Transient - Indicates the field is not persistent + and should be ignored by the + OdmManager. + + + + The @Entry and @Id attributes are + required to be declared on managed classes. @Entry is used to + specify which object classes the entity maps too. All object classes for + which fields are mapped are required to be declared. Also, in order for a + directory entry to be considered a match to the managed entity, all object + classes declared by the directory entry must match be declared by in the + @Entry annotation. + + The @Id annotation is used to map the distinguished + name of the entry to a field. The field must be an instance of + javax.naming.Name or a subclass of it. + + The @Attribute annotation is used to map object + class fields to entity fields. @Attribute is required to + declare the name of the object class property to which the field maps and + may optionally declare the syntax OID of the LDAP attribute, to guarantee + exact matching. @Attribute also provides the type declaration + which allows you to indicate whether the attribute is regarded as binary + based or string based by the LDAP JNDI provider. + + The @Transient annotation is used to indicate the + field should be ignored by the OdmManager + and not mapped to an underlying LDAP property. +
+ +
+ Type Conversion + + The OdmManager relies on the + org.springframework.ldap.odm.typeconversion package to + convert LDAP attributes to Java fields. The main interface in this class + is the + org.springframework.ldap.odm.typeconversion.ConverterManager. + The default ConverterManager implementation + uses the following algorithm when parsing objects to convert + fields: + + Try to find and use a Converter + registered for the fromClass, + syntax and toClass and use + it. + + + + If this fails, then if the toClass + isAssignableFrom the + fromClass then just assign it. + + + + If this fails try to find and use a + Converter registered for + the fromClass and the + toClass ignoring the syntax. + + + + If this fails then throw a + ConverterException. + + + + Implementations of the ConverterManager + interface can be obtained from the + org.springframework.ldap.odm.typeconversion.impl.ConvertManagerFactoryBean. + The factory bean requires converter configurations to be declared in the + bean configuration. + + The converterConfig property accepts a set of + ConverterConfig classes, each one defining some + conversion logic. A converter config is an instance of + org.springframework.ldap.odm.typeconversion.impl.ConverterManagerFactoryBean.ConverterConfig. + The config defines a set of source classes, the set of target classes, and + an implementation of the + com.springframework.ldap.odm.typeconversion.impl.Converter + interface which provides the logic to convert from the + fromClass to the toClass. A + sample configuration is provided in Example 1.3. + + + Example 1.3 Configuring the Converter Manager Factory + + <bean id="fromStringConverter" + class="org.springframework.ldap.odm.typeconversion.impl.converters.FromStringConverter" + /> <bean id="toStringConverter" + class="org.springframework.ldap.odm.typeconversion.impl.converters.ToStringConverter" + /> <bean id="converterManager" + class="org.springframework.ldap.odm.typeconversion.impl.ConverterManagerFactoryBean"> + <property name="converterConfig"> <set> <bean + class="org.springframework.ldap.odm.typeconversion.impl.ConverterManagerFactoryBean$ConverterConfig"> + <property name="fromClasses"> <set> + <value>java.lang.String</value> </set> + </property> <property name="toClasses"> <set> + <value>java.lang.Byte</value> + <value>java.lang.Short</value> + <value>java.lang.Integer</value> + <value>java.lang.Long</value> + <value>java.lang.Float</value> + <value>java.lang.Double</value> + <value>java.lang.Boolean</value> </set> + </property> <property name="converter" + ref="fromStringConverter" /> </bean> <bean + class="org.springframework.ldap.odm.typeconversion.impl.ConverterManagerFactoryBean$ConverterConfig"> + <property name="fromClasses"> <set> + <value>java.lang.Byte</value> + <value>java.lang.Short</value> + <value>java.lang.Integer</value> + <value>java.lang.Long</value> + <value>java.lang.Float</value> + <value>java.lang.Double</value> + <value>java.lang.Boolean</value> </set> + </property> <property name="toClasses"> <set> + <value>java.lang.String</value> </set> + </property> <property name="converter" ref="toStringConverter" + /> </bean> </set> </property> </bean> + + +
+ +
+ Execution + + After all components are configured, directory interaction can be + acheived through a reference to the + OdmManager as shown in Example 1.4: + + + Example 1.4 Execution + + public class App { private static Log log = + LogFactory.getLog(App.class); private static final SearchControls + searchControls = new SearchControls(SearchControls.SUBTREE_SCOPE, 100, + 10000, null, true, false); public static void main( String[] args ) { + try { ApplicationContext context = new + ClassPathXmlApplicationContext("applicationContext.xml"); OdmManager + manager = (OdmManager) context.getBean("odmManager"); + List<SimplePerson> people = manager.search(SimplePerson.class, new + DistinguishedName("dc=example,dc=com"), "uid=*", searchControls); + log.info("People found: " + people.size()); for (SimplePerson person : + people) { log.info( person ); } } catch (Exception e) { + e.printStackTrace(); } } } + +
+
diff --git a/src/docbkx/overview.xml b/src/docbkx/overview.xml index 4ba53e26..fd619324 100644 --- a/src/docbkx/overview.xml +++ b/src/docbkx/overview.xml @@ -513,6 +513,21 @@ public class PersonDaoImpl implements PersonDao { + + org.springframework.ldap.odm + + The ldap.odm package provides the classes and interfaces + enabling + annotation based object-directory mapping. + + + + Dependencies: ldap, ldap.core, ldap.core.simple, ldap.filter, spring-beans, + commons-cli, commons-logging, freemarker + + + + For the exact list of jar dependencies, see the Spring LDAP Maven2 Project Object Model (POM) files in the source tree. diff --git a/src/docbkx/resources/images/package-dependencies.png b/src/docbkx/resources/images/package-dependencies.png index eca8c1d4bb8e0df8fbc08a4be59e130d18dd1482..2f9eb8b1238d4106b8728bc84a2b40f10eb45b36 100644 GIT binary patch literal 25936 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 VWp_0;V3%|y(-Rg(Wd_&6{|6NOk;?!8 literal 25754 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%0A*nc%_Fu=XE7&%unOoH$ zEG$f!2WTH7$87BE4)^y-2npjz&>^`Hg19HNExiS!pabs;*g7}>nn!@XDi)jqdxQ*~ zvnptaG&Os@ff$h@no0tbqQH6x+MI$tdJ2T#Am4UNfkDv0!2v*WwzkZk$>jMt=|BPe zvZOv*FbN%^MKC0d4GDo~XJvh&jqD)*T~A-%yMPGrPqIP>q%KqAFMbK-C|r^TuV!f!zHoUmKl)BqoC@9pYWoPOZb!j{Swi2gU0%;=oQ8m79l2S zAaCcS8}$QWD)1D=06!ZH8;UGwMN{84Xfx}<^O>5;p#Nv}MUYWZFD@=16ssb_KzqoR z6|`U*tS9vv`1t^954bnUAl?B~`2W=hClALAprD`thXTl_s|N&rsKI%_K-JKY=E487 z*Rn4VWV#Y$1pgIJc=9+Hc;jJsaL(w!4v0HCJ@wab&TzgwvqfMgq_FxF~ zhX%T_u@@jg`vdG9u8x+$;{z3Ilv(E^kV)dlG&Kockb#hLc6GftKd0&h3jkfM(9Z>2 zf5c&zfl>glWr2Z#wF|CufE8D`$q^3*wvNjlB0Jh}f4NP7AQi3wX!wHj@(e0t4(?RZ z(Ln@je~^@9iwk*$?ASj!_@5xAL5}etPPv8pHi1}$`u;!6C}&lO3G3&qoOIxV0~`W( z&w|hp0B}afp$cDtZi)lJ$)lt4O-+m2Z`~CCJtgV*Z)W@Y45e|+|2Nmim$7jRO(3j3 zoUX_Nb~Q4vWsVELnxd>!TU&d1alx*a8PY=H{tl!{y zX?qG7dyDLJI8yhe^<+a*BBH9Rb21^1>ekj)Xd7IgN(c5G+#Ez0m;mM5HNiv-+=q6#cqfDJxwZEDJ(ldXLB`Rr`BtkpnGt!w`|5^jn&P%hN~|LJ-n zsBu5z|EtCUoYX$XzwRH0A-)bDFc^mCr~%kQO-)qEi9{^cnsng*#*yf-fT@zp_rYsD z1zIr^!QFCl%Zk#QpyBW4CeF!WECrUehDgx4XfrA*3P^i^4nFXA3<;5&w9DYnpFjKh zSnX&g%M5)%k4?S~B%mh!K!`C}s$Wd}H&7)12^1eT9N^$2A|l$|*?Il?_07#qj6X{H zkQpFAA`7$N;NZAgwB>)Bc!NWk?R64bDFbrzyMJ;sg~LZiGigWQR9LI*T<#kj+&efR zb!*KJwk<6!wY9R!^}vOIWJAu#0G$j&7(t3`Zf*wb5%7}y?jIcjTLq3Q01;LX{PeC| zfhR&wTN!GO9|K@^&aRTd_B=QUz<{QqA@zOFvA(jZ3Y-ow+TLa<)K&w#eV5d~*&Tp} zAmE=_rI@e+<1o;|BO)Q$a1+6qfb1#l_XtF+&Q-``1qDJpb5$;^67o2;oJVc}gBYZ^8~OGhT?1mokcK{J;q9LYko0!?RKS8f3%2GW=(&6VlTMDrCWv|8)<7 zrd&u!sGos6nkoQ2G;D(s@$ssMTydkXD;SOJV0U-dUi=(+A!7#^5B&u=xwwEg1|$Qk zj38)56k-x0QCz7ogd4jCnJoZ#Tch{uoi?dMzXUOYk_Cu(PzC|arLB!ViW>Zh#rbmz z+=~~$a09HrYP8}#IE$2uRlJDU^=wmi!aZT-(Hz`1pMrvdii(OrnE@a{zCh+MD3YM; z$jDFOKuG1_W36*3mZ3bH+S&a$FrPzb$=>tyeJ%ZnfpvhfrdNL<#m8rTPNKsHxVCth z)Uo+_V9K3bSor?6CNKsG50a=tV2lBUQM&9}QE$IE+_UXv^f=Yd?Std02hYkoU67ZT z_w8HgDyQh*>iGcnE%n)J9wg`*Nd&ULiU0`*9=`D_7~M@K`1T#^->9kr>OxSOp3LPF z%9dHw_(#1BO@K=QFb-@y2s95b2(%DMIFEWsU_=0;3+NyvTAk7s#sJweS7Vds0V1`h z7u1#nSk$|ZqnjPHI##-WLol?YV70-pptcszgTFs>9N02B=I?-R&7j_qYQ3_@5_*+~ z_B&_;0BY}wMMubhiW$gJU~q74^aes9@LbcA{Qi(W69n?JhClzdA%8$0ue)g+Q4S{X zs2&%1asldq348*ARPPKR!abO&l1@~a{Mi8Q#VP1N3q7*ud-_&)NWPZ;XBiTK`A4V8 z{djB3A}%~^O-&o%K=UMHjU>GfHHy89A|eg7wHi8-U`SZ22qqK829risZ{r|zA8vTJ zQrdX%h6}vE0z>!T6c-xyMIC%L##csC5)vU`S5G{zF8IhjCw6uQ1mLCh8)@T;0{cy; z!*jKEWLTSnsi$l4N{+XoG+8MEZp^j7e6I}9kP==nqp*OEAG`yB+x_O@{`MFLbA*4l zBqAaLP57#9uhqCaOfnpIxe2(}?}0QuB+}03G#&U7GpxhV9hV_p0s4)uL)juCJ}$a? zc~_)A&%Z$Rx4~pSyfieuRzl zQ9g@vllpP%!M!Az|H!NBU-9twsiXCm9yb76TE776pv1rZiW%X6rx}={i1G)n!CNA_ zfr6Oyz<183Hg((*Adx3pkXJbW3BWBj;1PG;9s>y_H zZMoh^WY7fNiI%F8XLL5IjWET#12B-wrv_yiR2V<61-PG2tH%w1eu9O4z`Hb_eLbA7 z$0ADSu`|2*=fw?-b-=FzPmY-ayf*+1kuhK01BgDb6RcgJ;Uq^(D)=9`tZ#n$Tw~0r`rOdH*h!7WVx^WR#iIxJr1VS zbKt0qA{DwB6-Ubi5_m9pAtwj}>i`)0^1psHA~FQ8pE#@>VD1d{IzI!_w^G2Q&KQDp zaV!Ho!k}n_HU)t73EIwGxi0wl_@bywX2r$Dbh4lq%ee$ShP?S5KoeeSrSdI5cdRcf zD{F4foNWfNm zVhP@>0w65UQrH$y_rc)4>6CptkHRy51SWNloo&#&Jm@aoOahoiz-E?n{F0cqxwsgK zkTC4-Kl5I-HjB{x?EA81c3|)j?RS#?M z48JHL_Jw_w^3OVN3ymEB-hgh_ViNQwGS0^FMb^DDmCUsD8}tUx7OM zRCd3<$_1zz?S#CKmc%%PG)uH9-u;XNDN5_k|6c0!Xh4jorF)7e2*KqDylMs{tC?|P z!A$U86_Esc+AEtcQ*JmASNYVJ5+NtCD|J79Ol&*PTGu2bB!J*?aI@nKFaey4Y>P&Y`yw(a=02hT=Q+~-qL=xfzJc_tDI1UH6Cu9($IZ(HdNpM4}Xri)` zxT4=fjlZS?Nu%IXaQE=gDN_9ygCxNBBy#J;f4lh}#E zM7Y+qv$AF0>mxHVvRz!oEkfDr>KfUzw0`HR-}m$T=lA>lbsrDz`|UXQob!IYp6f0{ z%P0nG4!bniaZo7}F?X|0pAM=unp3a@(oIlKB*0~ic+b)yWZEl3yUdKowSja|fRwup z|9FbhGjS~hlX6JOz~bj&%109((|A_rrLCHV#`E^XJUc;807K#BE~8i3-Lw-5=sIL& zjQ=Subs2GmVXdtYX7P>FaG82T;QYQwpJ68^FUEhBPdh0k<)+PfI_om*=Pu)X`n7vlQ&+%%J!Itf9>` zK}YM34Gukn_N2ImMCZ(UEH?ZkPwp`0h3@uopLR}vU1GLOMLJhcx4hLQ8uwoELo?9% zkctQo2|<)a+4&4iL~U&?$oEjrHvP(NWabKMa-Y!sC&VeZ&~b;wwg2ImtKy&xC|4Zz zCpfQ2deGnHGK#c;5F)VPKn332&k3`+2`@$jA=o3L(K$JxWW7k8W<)I7p{PUeTOEk`C+7(*{v9(;H)ry5SK7N?kg60 zE{X%m7!e6-K`?b2K|Pwqx3U;{cB+566=oLU&VCeieuNhP{5T0zt<^e@OL)ZAK?k!* zTEA-k5lAz+q|Uyb5i;54PSqh2Z$2^SQNGQj{+>lX!X%FzN7y`BJlx~bQibNt>*}ly zVsbc|!@0((DAx4g6~LgZjt-8}5*AJ}Q~%0vA1u|#WZg>sd1J%Pzaj_ZPPCse00Kqe z!p5%}yE7i$3RWXpc0YZ$kqP)2VA<9WSGi_Zz2g<5pk#Em@sgm6GF^Q^0qGs7(j=04 zxv1e%eZi@xiQLHp_fhucFPIvgsdGpw$_H8Z=~wUr3!CtYXWDasGVbFE2j^0)*vNa{ z)6QQw5(fqb%&)%UL@?gy8yiBs+PLvFL{F`*wzgx{rYWKrC}P+Csj5oI5d+=5ni?-( zRP*(nrjh#|V@Kk0G&;3rsAl^I+8kO>`18xF5bC&AbJ}{-fVsb3(1G29i#ohm=d*s} z(=YayJqsp0Px7yHs|3yQWw)~+MOYN-?wrBfq+flRzIjJp$$7LhOkDRD-XPsKePvkh zmuD7>ybqvYtPYOQ0%+ntwJbyAUr$$7Qj+kMYy-fcGOF%Kdr4LHWf{$*;9^v>{O47d z+q@9zRUGD3#`-4h`tQRIuyduEnVF+X3_qWyr!(DQQ*Lk2>*4pFa@1}o7vhqR4{;dW zud%ztQH;B!1W%*VjEjHV86y8(lUJ_Wgi|V>%4dWxh>WDo0s^y=%R~1~cY}Bx%fg$Z zqXo~@o4Sa403a>LT}iM7m*4a z`6lPK%GDJnEE(ydIYKRACe}%}y~>sBbyzU85Rs(%<1J=Ev=Qv_Z|c9*JN!{;MSX++ zr}+CEvr}V$Sd5t|92vfBYun4-v%!oMDI6|`lpi%^mFlAn0%}MSvu!n$Y3*MA_4D1C znQ8s~Z_Veys_kJvFc(9LIH^)mvoJ0#eGPf=wzy&RiSG4>D%riM(h&=!Oi?o;@e+HC zbNo+X6<6+44EfImHAXpDu0$c#bi`vAABvaLPRmWir#uwjhB$Gjn%u*%7#kY4H@9)i zJ%_N%+<)n3*Ok@d>pn7m@f(mYWFO2)YWt z&srm`gDS*{cht1gR%^7yDC}oUGktL;``DcK5-WslMKnY~Ls)hBgw86jK{GzYj2M2k zUj+}{)rp2d33o8NJc_R7beuv74i6+sp({MsPC8Vu77SVIsNp3&=Vh~)uXE8#r8X!M zI}9b&(b=;ls8(dB0F;A`x%$CX{&{ut`J}}+rx1QB1M*5NCJ!Gf;6o~l*e)@~UL@Y{ zer`^lyOxlqZY+#p4$%rN>V6daQ!W5+JZr1#{o3}H0aG&@lx2(t8XFSrGUVAfX{r(G z)#D~136npGIt`>)`zF(%paupE%Z5KI;q|uc|i} z@&44N))FAzwB;^qd318&9U`tRZ5jC*kEjRSCUn8>&R>;rgN6*j zUxM@YSc;)huNB(KBhS&QpUszccD%|N!#Qg?94;!*QAVeei^E0yr0urr=)@Hjxw{*c z*jib&G~wM=f*GU9iUoGQ_U}ituyrH%6wkWKKRLl+=8QI+9YYy<9cvPAnQ*BV@k$j2 z_LvT5bb7`WWGr^xDo(6I65}}=(bDd*Xvk18&Q) zy?b=tat}b(EJdj)DP1|o>=M&`ZhtI@dYRRwmVaetR5bXWEKD_>rru^HWH0FB+Y?EE zW1XY65l<6%*A`;=`85@3?agA6ebNIDy~v6&xB&Y&G4;D?=?mEkSMN zV53<6J^DEa6@Zy050gtNL40#pJYfd>ym~+m>#7v`0BB6Ez*j1)8{U?-Ds%;Nd@YN# zF*rXC0_7Au951TXavPI_RJn~tyZHc-V!mul+C>NbxdI#UMw00G4)bkc4FAW0$ zh+Kbve7R7F26`@nWxsb9Vwh zRmR-VYwF^hq-*d@ljVo{o8HX@Y7T3YLP_v210vGLPJ&iI7@@A z`#*U>P|NmWy$L8ym@$ZcD{El3%Ixbio?x`VzWkVb*i2mVgo!9N8pn{4N7bD&N!u}N zp{kCZYj3h^a5#d`8WvKmC9S)9k;prcb9Q@-a{=g4@b~AC#AZ)BlYoF`_jz&Ho1pH; zI;?Lk3RDxe?W~_lIO=j*-r|_UOX?$RK^4`thQds0?h(@1ti+`U+wB(s9pc}`8HuD! z2mE7euX`|QZR)140HaAkTzEmn4cJVeH)6-kXl(Z>#Xy}7+S+#85xb8tQK3_ z+trf}A?HwcHe6Pgkw#+I;i$)YYWN6n?76$vK+fKmSK=*ne>j`n;ykaK!3sZTx}eOM zi2swXo7zOB<>>sV_)8d8;N5r9OpWjGAD>i(} zh49sMn(ybXj|L^$bJ$E?wjDB}fG9+!i7r^sd%Qr-*FdU+r(b4{#$4MR-b5`Vt$mb} zWi8%vcVy8>eD(}9Q;KU(B#56U1Qdo|oX@9`U=;4GvXSLf%P6prjKVHI3X9d&)ja7u z0^bfN)V=i-VS3V)Akseyy%^4U)bI9fyISs|!;s4k`cL6ILldYeD6P{oGg!uWpZa{h zOt8FCOFmiAFQdv_08Mn&Eoji@uQ*}wsPbASOlwrU%_RLEIUs#^wv*GaW0S9#8oJ#- zISC9Qqx^k*PT@0czYY5iK3gI!*3JDIR8k(bhFbW70YS)S#W7WQ%d4j-I!+L<83FMn z)>k8AL?>DyDeW?%?6%NAG$;IFT(^s3*V+f*&&G80|0yos$VgQdtU})a zSu}FBr*{~*nJf{aXsXArsxk|`7e#*f>tLMsR`P2s%JT2)4M!ss8q80MIrq1SJ@7A} zMp<#{wyIiWcn&FuGnR1m%8W&oIvFqp+|)XZ%oTDA>Y14__4D(ee{mP%96pF%zs1F| zXmj^=F~?mu1BTX&Om`-MbH;7gy*;#}%{@I699QseO_4|4?C2lA8eNYIk?D}~x-dPN z88)qxzkG+&##G#4h`DBQbn%qGOq0+)=-cR%XQj^=%;f^jE_ zjYB`tvc}%f3L{l!P>UVL9skgPD?}|r#DnkYY5JQxk|Y>2C}t4u5>#9))@d)sv`tus zk1@XOn-yGCM743VkELuz?Q=^B<6OAf=1QJRg(9I`fG+hYBy=*-;x1vy_t@YR392=n z<}P+IkL76)o1#`~gT|Nxpxkn_QXwZ70M3YG>sIvE6J}MdiJvyI4|KsycEfSAK`|Kl)NuXG|+wFlJ(=96zJ1 z686O;M+PpysqqR336B$w%xvY(H0;n{ftTBjiPg^J6^QtDw+Bt>4i=Y|N+vtJ@kK** zsAhW;lR)=~4#wTEw||#_(4UauGX?g~?UFQ^kht-|k4@ zVbMz^VFCIG%2-nhM4rj{SM@HnTWF^Tb0eKubm{beeV_jQ3t)k$z&Izl^Hrcwl$oK= z@J4#Ki_ptgQ2M4;5Nl0=Zlm97h0D&KcxySr;!F*wiYeNeGF zUgz1&0%J~k%_iWv5LfoSdz(ECa9yrTXhb{hWjWq?O>B&YrsXYb6_sgD?+Rap?rarwIqXu#P z3cT=?`~uojq1^jG53%rTger__-i+U+l$`3}Exr2wZ`` zTWehA!=KJ@m`yU>r#%fjB=l}(u4<|Z2li8Mru3XOCeW`9%%bMWWDg~m)wgI$(&a+A0;cbrg*tkB0ht1qlh}{4A3E*B0sq-l-h2;a`}& z_z8t;4`ZKu?i*W-b;6R#rEdW)4A6}p)t)tgs=oq}sVc|DDXBh%u*-caA13(U9#hra zavQHLn`GTRQzOcT)^;=-d_Oq@-1iGgt>0o($GX+ovjNX0h<)6lPO+6UtY?)2QHk&F z>YTz-4^)vW*Dv8L;F&3?J%GDG0Nk$#^X{&+GnTpWqxqV`p&_KahHK?^OjHLTW+6Sq z1+dHbN))fwqO&PP$J<26m-!{wr&$^a{5KVYl@~p34C*DbbGO(Os{b@q{xz#I8 zA_01R4e%O__f{$auOep9eaZ#ORJ;c;Uua=z=}LUy58=);mI_150sE7L5P@v*A7Fh^ zSO$O9!o04kz}&dI-WRop=$Es)+wEnVlq7JvmG%ZGg8i04oPqA-kN-@jqSSB@U8 zdPFEcTQAlMJR700taSd{M5Squ-t*>Dwsmf0|NQd^1RnzWJi7j>O5CRaefD)Vt6LYbqz-bhUHN8i+hxxK z@(`#4i%UvC2Z|8-#5mudDz5}YVC(Bo_Ep&+fq*`%(&&_z3X1rA`%d{%_S5%1zP`Rd zydu7Ec;JO%&e*Z%Wbp8qzW}T`fXVx(!7KpQ9X6q9#-sZSB#nB5025JO8KeF6z~7Gz ztdiCq3Sn#tzZ=tTZ(P*_*rdjIbIdqCLDh{FJtY>I<*v3e;c`#kk()kn70Ps0!rr$#HU;bBXW)*aq8v=FC8S2N0X$*dKG!TgQSl5Ut!Y+P>{Ut9u=9z{g+^X;`3 zkKN&Gp1RtVKmZC910d8A5V`Lu(oKq@k|J6>{J-F*26H&rtJDJg=zl%_#mh0FwY&2k zXm0OSH17eK(Aw&1HkgWmK_DUR1CNz`K(qntKShj7jsW`1^1&q_4zsF9%|dQv$?j?j z9ZDZU*@d1Zjy)@uO1J*_UH`3HsbzLodkduF zzbY)$G1K}pJ3=kHHTz$eo-POj=@}(;UN)dl&&&t#zkAis!IBvPxez-qa3In@;I{jZ ze=oD&%npJNe8Z&L`z@jAm?`-ul+)<(^mo2p3R#|uYiw*3tY3Kl{DDf@CjLc5%K<1# zfR-=-sFB~nNihIHSw05{6`(&xbXEa+&j+FQ6U6uXf9t&g($SK@{-2}dsTnNrxYf^Y zgKr4{Y;iNtVJ{+04LgqklJDR_z!zIEp%exdWb>Bl3;bCE3GlD6WOu~h0Q%`25TD{{ zy%j&fC8(~bSPK-PKdyy?HA?xz7$)}Hf?R)Bxu9tuIO>4*HQyhwF%%6pc=@x0z&I%% zJ$RwCC5JB*y~^Pm4sS&H5v4q!yn#|CAO1$IOpwGW3(?RlO8@`>