ࡱ> S@ /bjbj "J'.@@@@ AT.JjAjAjAjAjAjABDEhHJJJJJJJJJJJJJ$KRNtnJFjAjAFFnJjAjAJGGGF jAjAHJGFHJG.GAGJ,JjA^A `Ll @F:JHJJ0J$JN GN,J..N,JvE0E"GEEvEvEvEnJnJ..$ G ..$Job and Job Collection Use CasesSubmit Jobs and Job CollectionsPrimary: Submit a jobSequence Diagram : Primary: Submit a jobObjectsMessages1. Submit(Job) : JobId [:User-->:DRM]1.1. validateSubmission(String) [:DRM-->:Security System]1.2. Schedule Job [:DRM-->:DRM]Make sure that all resource are available for this job.1.3. Run(Application) [:DRM-->theHost:Host]1.3.1. Start [theHost:Host-->:Application]1.3.1.1. Consume [:Application-->:Resource]1.3.2. Ack [theHost:Host-->:DRM]1.3.2.1. Ack(JobID) [:DRM-->:User]Submit a job for execution at a later time (Reservation)Sequence Diagram : Submit a job for execution at a later time (Reservation)ObjectsMessages1. Submit(Job) : JobId [:User-->:DRM]1.1. RequestValid(Make Reservation) :Boolean [:DRM-->:Security System]1.2. Make Reservation [:DRM-->:DRM]1.3. Ack(Reservation) [:DRM-->:User]This will let the User know that the Job has been scheduled with a reservation.1.4. Schedule Job [:DRM-->:DRM]1.5. validateSubmission(String) [:DRM-->:Security System]1.6. Run(Application) [:DRM-->theHost:Host]1.6.1. Start [theHost:Host-->:Application]1.6.2.1. Ack(JobID) [:DRM-->:User]This will let the User know that the Job has started.1.6.1.1. Consume [:Application-->:Resource]1.6.2. Ack [theHost:Host-->:DRM]1.6.2.2. Ack(JobID) [:DRM-->:User]This will notify the User that the job has finished.Submit a job when all resources are not availableSequence Diagram : Submit a job when all resources are not availableDIAGRAM CORRECTION: Reason should be Reasons.ObjectsMessages1. Submit(Job) : JobId [:User-->:DRM]1.1. validateSubmission(String) [:DRM-->:Security System]1.2. Schedule Job [:DRM-->:DRM]Make sure that all resources are available for this job.1.3. Ack(Job, ResourceList) [:DRM-->:User]This will be sent when the job has failed to get the resources needed to run the job.Query for Job InformationPrimary: Execute Select for information on jobsSequence Diagram : Primary: Execute Select for information on jobsThis use case covers all general purpose requests for job information. Actor requires DRM to collect and return job information (content yet to be determined) for zero, one or more jobs based on a select function against the data base of all job records. Selection is based on three classes of criteria:Job Attributes: Will not change during the life span of the job e.g. owner, name, other identifiers, executable, Job Execution Environment: Host, Process IDJob State: Expected to change during the life span of the job e.g. submitted, ready, active, complete. Job Resources: May change during the life span of the job e.g. software license, memory, bandwidthAdditional use case examples: Collect/Return information on job (my job identifier) Collect/Return information on currently active jobs by machine Collect/Return information on my currently active jobs Collect/Return information on jobs currently unable to run Collect/Return information on jobs waiting for resource(s) Collect/Return information on jobs currently unable to runCollect/Return information on jobs submitted by a particular user that are waiting for a specific resourceCollect/Return information on jobs that terminated abnormally (state) on a single machine (resource)Collect/Return information on jobs that terminated abnormally (state) from a single user (attribute)ObjectsMessages1. Request Info [:User-->:DRM]Requests information on jobs meeting attribute/state/ resource criteria.1.1. ValidRequest : Boolean [:DRM-->:Security System]Can User ask for this information?1.2. Form Response [:DRM-->:DRM]Form Response using current job database. This does not access external actors to get the information. It retrieves information from the internal repository. 1.3. ValidResponse: Boolean [:DRM-->:Security System]Can User see all of the information in the response?User can ask for information about all of the jobs, but cannot see the username and password for the users of all the jobs.1.4. Response [:DRM-->:User]Collect and report on all jobs in the queue in front of meSequence Diagram : Collect and report on all jobs in the queue in front of meThis is an advanced function and will be non-trivial to provide - all other queries are essentially database select statements. This will require the responder to extrapolate using a view of the incoming demand, current supply and the effect of resource usage policies. ObjectsMessages1. Request Info [:User-->:DRM]Requests information on jobs meeting attribute/state/ resource criteria1.1. ValidRequest : Boolean [:DRM-->:Security System]Can User ask for this information?1.2. Form Queue Response [:DRM-->:DRM]1.3. ValidResponse: Boolean [:DRM-->:Security System]Can User see all of the information in the response?1.4. Response [:DRM-->:User]Collect/Return historical dataSequence Diagram : Collect/Return historical dataQueries for historical data as opposed to current data.Use case examples: Collect job profile information Collect/Return information regards resource usage over time Collect Run-time job requirements (requested vs. received)ObjectsMessages1. Request Info [:User-->:DRM]Requests info on jobs meeting attribute/state/ resource criteria.1.1. ValidRequest : Boolean [:DRM-->:Security System]Can User ask for this information.1.2. Form Historical Response [:DRM-->:DRM]Form response using current job database. This does not access external actors to get the information. It retrieves information from the internal repository of information.1.3. ValidResponse: Boolean [:DRM-->:Security System]Can User see all of the information in the response.1.4. Response [:DRM-->:User]Why is a job not executing?Sequence Diagram : Why is a job in the pending stateDIAGRAM CORRECTION: Add ValidResponse interaction between DRM and Security System after 5. CheckPoliciesObjectsMessages1. RequestInfo [:User-->:DRM]Requests information on jobs meeting attribute/state/ resource criteria.1.1. ValidRequest : Boolean [:DRM-->:Security System]Can User ask for this information.1.2. JobsInfrontIntheQueue [:DRM-->:DRM]1.3. ResourceAvailablity [:DRM-->:DRM]1.4. CheckPolicies [:DRM-->:DRM]1.5. Response [:DRM-->:User]This will return why the job is in the pending state. The list of resources not available that are required, any policies that are "blocking" the job from running, or other jobs in front of the job in the queue.Control Jobs and Job CollectionsThis use case describes the dynamic control of jobs and job collections.Control functions include: cancel suspend/resume checkpoint/restart alter priority ...Primary: Signal JobSequence Diagram : Signal JobObjectsMessages1. signalJob(JobID) [:User-->:DRM]1.1. validateAction( ) [:DRM-->:Security System]1.2. signal(ProcessID, Signal) [:DRM-->:Host]Continue to send signal to the host if the signal fails.1.2.1. signal(Signal) [:Host-->:Application]Kill JobSequence Diagram : Kill JobObjectsMessages1. kill(JobID) [:User-->:DRM]1.1. validateAction( ) [:DRM-->:Security System]1.2. signal(ProcessID, Signal) [:DRM-->:Host]Continue to send signal to the host if the signal fails.1.2.1. signal(Signal) [:Host-->:Application]1.3. ps(ProcessID) [:DRM-->:Host]Does the process still exists.1.4. Ack [:DRM-->:User]Signal Job and VerifySequence Diagram : Signal Job and VerifySignal Job and Verify the signal results will rely on the Application Meta Data to tell DRM how to verify the signal was received and processed appropriately.ObjectsMessages1. signalAndVerify(JobID, timeout) [:User-->:DRM]1.1. validateAction( ) [:DRM-->:Security System]1.2. signal(ProcessID, Signal) [:DRM-->:Host]Continue to send signal to the host if the signal fails.1.2.1. signal(Signal) [:Host-->:Application]1.3. verifyAccordingMetaData(ProcessID, Signal) [:DRM-->:Host]Does the process still exist?1.4. Ack [:DRM-->:User]Alter prioritySequence Diagram : Alter priorityAltering the Priority of a job can occur with DRM by suspending jobs or moving their internal priority, or by asking the host's scheduler to change the priority of the processes cooresponding to the tasks of the job.ObjectsMessages1. alterPriority(JobID, Priority) [:System Administrator-->:DRM]1.1. validateAction( ) [:DRM-->:Security System]Can the User change the priority of the job?1.2. changePriority(JobID, Priority) [:DRM-->:DRM]1.3. changePriority(ProcessID) [:DRM-->:Host]1.4. SignalJob [:DRM-->:DRM]1.5. Ack [:DRM-->:System Administrator]Let the System Administrator know what has happend.Update the Job Proxy objectsObjectsMessagesAdminister Job and Job Collection DefinitionsThis use case describes the administration (add/change/delete) of job and job collection definitions. Job and job collection definitions can be maintained within DRM on behalf of one or more users.Primary: Update an existing Job DefinitionSequence Diagram : Primary: Update an existing Job DefinitionDIAGRAM CORRECTION: Need explicit ACK from DRM to User following 6.ObjectsMessages1. getJobDefinition(String) [:User-->:DRM]1.1. validateAction( ) [:DRM-->:Security System]1.2. Ack(JobDefinition) [:DRM-->:User]2. Modifies(JobDefinition) [:User-->:User]3. putJobDefinition(JobDefinition) [:User-->:DRM]3.1. validateAction( ) [:DRM-->:Security System]Create a new job definitionSequence Diagram : Create a new job definitionDIAGRAM CORRECION: Need final ACKObjectsMessages1. putJobDefinition(JobDefinition) [:User-->:DRM]1.1. validateAction( ) [:DRM-->:Security System]Delete an existing Job DefinitionSequence Diagram : Delete an existing Job DefinitionDIAGRAM CORRECTION: Need final ACK.ObjectsMessages1. deleteJobDefinition(JobDefinitionName) [:User-->:DRM]1.1. validateAction( ) [:DRM-->:Security System]AWX3 l m *YaCEs ?!""jZh@UmHnHujNh@UmHnHujBh@UmHnHuj6h@UmHnHuj=(h@UmHnHuj2h@UmHnHuh@h@mHnHujh@UmHnHu hIkh@ hGh@.!AWY X 3 l n gd@gd@gd@gd@gd@gd@gd@gd@gd@gd@/ A i  D t /T{*+Yajgd@gd@gd@gd@gd@gd@gd@gd@/^CDuv~8x(dgd@gd@gd@gd@gd@gd@gd@d5Qt8r$E[gd@gd@gd@gd@gd@gd@gd@gd@^gd@[Rs2o![~[gd@gd@gd@gd@gd@gd@gd@gd@ ?$ ^ !!"]"x"""""gd@gd@gd@gd@gd@gd@gd@gd@gd@gd@"""""""%#Z#####$$%$.$P$$$$!%G%f%%%gd@gd@gd@gd@gd@gd@gd@gd@""""##$$%$%%%%b&j&'((*() )****+++2,w,,---- .(...../!//׻׭ןב׃jh@UmHnHujƴh@UmHnHuj?h@UmHnHujyh@UmHnHujh@UmHnHujEth@UmHnHu hIkh@h@ hGh@h@mHnHujgh@UmHnHu+%%%b&j&s&&&'I'z''''((*() ))Y))))$*E*gd@gd@gd@gd@gd@gd@gd@gd@E*q*****++++2,w,,,,,-F-|----- .gd@gd@gd@gd@gd@gd@gd@gd@gd@gd@ .(.1.g...../!/*/g///gd@gd@gd@gd@gd@gd@gd@ 1h/ =!"#$%2Dd-"n  C JA2classDiagram3AF93DB70167"p<^)G.^iLDG@=D<^)G.^i|dq;x]p߻wBH "F!cTÇ(VPI ||P:~E(LU12L6`bV:@ Z2 M6wA^novvw4X%">Oc-c06" ~c[ j 2ǘca ,9]oE>P&(\cX#ܼܞ#! s乏Q-aQ']%Ҙ>HjF3aXbnͬ/C+B@A"rN~:Q6dشߦlCᮅZc -O:PWߵy;.涏bK7 [Aп`l ߈5W6 ^&}`Wj$&MmV72Ho\>@= 6$]nr|߁L'(~'3[Dpv! 1<8'<r?9^D>ޘ?E(Ц0oZug,87GR*x`v`VK5y\v[l>V}^n3QǗ|aDi~dxhjU/xwW샓v]J-g979rJ >lj[Mߴ }:[$nd-|_#8tೋ`-z[fWne,DOo!ءn?c邷fZt[Gy/ RJy+%o}cj,oY,oq|ҟ[s,9lcDyKZ,oxgO@9Ǡ`{aO܉NQ'z);ætXO:.uyO-x릠;ʙ8UBσ>24i[Do=ny!f[ l:K[gu1+VGʎ֤rUa1n'Y鱼㝡jPNTdlӁnWez2xSzkJo޻PKڞ[8c[?୿O5ÁV֩l> 2s<طS%7$c얧~$xjOH`N}TWKZjTGt}0Ɗ&c\@OW B<㝡r"#aؗWOz‡;qE 씾WT6d X'8oJj)} Z9:s9uƑW[s8l2D}@WxV_ԵO˔\&zFż6_ler9?9ߥ%?Sn=,QsYȃlht)+Xɵgytή:@h38CFв6.eĖRF1 #-mbu_GQ`|np={z|߸PiY%挖Bv-x<xl2C8A_) p;n`$>da֊[3x7 N'kXY\Q%7I# y68YNawZg+cتacϱ"c xE8|ZV⽼N3G5ĭ_b@>OZ'3識 %gi'9,Dk< yw\_ѝ]_. ?#/(0P|Qwwu2Ђas6u>K/U= sMi=KS}W n̵_+p76%3tf\;0Z-63 ;ǛObN%{9}r?vLasQ+txTs?(< l &^ | o˳׍pZ+ N7Yt@a8meS)vҦa{7(c{iy'Sszr2<|;R"538=ߍFhIq \]l_5GQ؏hfwcyOnx5H t7 B.$f7s7}5bcU{%guיMZ`w@;st0UsrO)5ۚ ' r/@Q.e.CboEK ߠw8^ƋƫX9/,oK#pknhgbFȾSwSrqi' "%–Gxd},z;ò?>?B|Yqt|=3 8Jؚ'WRsF,Br`!}9e9F@cB\oyV2,t^p/mCkP-bĎ 9%CWz.|ua~!u_[6oEM'n1W|2eVƴ r7ArIZWΗh{s-Zsgoa{,?̳z0@);ܝZ̝̝y*ܙ3sgֈ3XriMM9esgfY& sgv3w&$BC@ݮGJߡAҿ2x\>\'?ӝӗ+!63_k'7 n^{9m})~[Qm(%Z&74EB,3o34:<^d|Wyv<|\#cwCC o;_Rn_\Ҽ.Y{ `h ,yx5B-Z557 7)Hz_oCW\_ V4d U%+ׂ<ҾB]l_4+JFCQCVahr-'  vL 4v:W[qX 8K]o [2D\`Wc zoq{=„[Ҧ2-xfզ\hSYͺ.!u]jSrmR&A? Dd"=n  C JA2classDiagram3AF93DB701A2"Iْ8Iᢒ%vG@=ْ8IᢒlSJ`V Fx]p{w%!y!! D`Q`@ik@b 8"FA ?([iK%*T`͌80"A΄14dr^{Ynwoo(b! p i2O"$ٷ P#$H?FTBlF*_WI_8 ! B*jo$x#R,Y1ӏװ2Ap{aV'~\{+ J~ vsx5<~BiB]³)RLbiؖRP)W3IJ B&JnNڒiz5ʅE& 7sK( em'(33qLdF_wCffB/~Ž<^(L[Y\m8oXmd%[xl{촃ئĢM *z *SIy,#$ʝOZתGr!>z1 8b~<&=z~*ϯc?O,x^9)Aך8zv54 =m02qA6kͰ,R{FT&_n (iacwBzgȲuz2z"[;wa<$H--[+^)a|97BaocgG? Y>2Zo =2`q\f. rtAG4}l1 zn=Ñ'z!7~&==NN]y\ǏxԾMϵni.pdWra/6J!>!in'{^9JcW+JmW2̡mX#8 Ӄ 1!װm!lMzK̀V٘Ų `=!srGҺT\hxm=\4PS:D~KW%^ěl|6%\W%=2*UГupCҦ18!8T-]ڧP9En\qnNn:YI3icIZۣ'ٳgEm 7.^XU& ȡB{n_tQȽJ~ʽPbl/keyQzXgn!pZǗt|!P!/Bj=IxL(d ɳ#h½%~eGBxd2/Bh=,O3G\nǡ2 eɟ*JƟ 9>ii_ &9]b}Rx:8j[<+#[Nxk[Sɼ B㭸X&[e,D(ѽ}c钯BzWOOM6੟2پz@T,b\O]p;p%d4Wģ fS߁윰'=i,l`{ ,dw ;>AaDzSICYh7#>f9ob{dNpsX?oh7|\% QN|9Ŭe|f!3t6Iӵyͽ۳M%~KGiJJ*9MBX߄̭I9z^[uz:b7qW|v"w(pmސ6f?Xhl&Yf-|܌l1Fzqza6LOl>ϭAv!x.u}ZoW_ڏ+GGۤpȪ|ݩ,uhvYmXcew28J>xϟLOB#xR]xk)99󱄜8"c^Պ1k,]Nv^1{%DW=׿J&#jF[}vt |6+y- >!T+Lxf9 3D&U:Oe@3; fzfJh=3B`jgmG s[;z&G0z&ؙQ=3WAZ{S=ß< q\Jb;ꙝfzFKN ]azq=}PL_+ |7AHIOhMZ\EgzC( 3 IV>-3Z𝷑yDG{G*$BȂ0]s>iyMD_)t|'X|y Cs2~_01]\ AkmލvF/w91˻kw˳p\p!.ލE#(Mwy1 V}m+6gDmk߽-fzdMml5;GR}ޱͫqT`He{<7s*fXY^{O8;[K't>gwoxl^ ݗ9P!4jðչl=v-u/H6hf~vS[{)'t[{r06c󑍱ͭz3̹̯)6x>c fDڴw"6W61fq,u ݝ9+>7[c_B&> g@鳵}$A?!:O׭kH9YE>eE$g;\G! otC.]G0xlKۨqՆi4>T髥B>Ɲ=s⏹Y.}sxo4kI;k3]gϱxz!VX]/KC>\eLwW\sl ?&Ƨ&]qG_V{^0hߑG 16`3o#;kkֲO5̅/Q?!:Bx(b>j;5f|-{VG|.3>O'wuof/B}T^{-[fq|JtȔ{h2GeK&x^ B4z/&ytC2ۛW#D0؞;\UQ|pUuzUr7P7H7/Z-I$phOZE5O3Kf>ш-p" _ĸy>AY ~2'PYs"~Fcזn;yf~>\~I?;vY+L:]LO&S/bFzEvc׿)}0Ȥ8OX#D$nv{lI`"54WsԘeׯe׿T~-ߺ9LŬ+.T3Ǿ,f2Rd_:0vo2Zo ;z8|=c~y=ǡ) A{LzG}R'Ddn  C JA2classDiagram3AF93DB701A3"uCA Dyl(G@=uCA DylIGɲ@x[pw;dBl! jB+3)#1J[R 3xT--v? "k h}w/{X7k߾}}w`Rr`eV3b`g0Vc26i? $X=X!vDA )HG[J&ohw WH=L ?~bRYv_>JcT? Ny^Z:t)+S[r:/BIPhcr XkyU~f\ Ĺ?2C/^Wvꋿ=*Яȷ1Caͻ͸T2'g0?qg̓6c،̓Ls켖ꎦA&*|3:JQ`Qs..ckL25(321f1bGؕfS 5oR6{cCdЧ^Wׂ7߭"ˡ95eɏH#,t&ɯu%oI}b>;)g]on7AC{ER&\yUѼFa)(ȕlgv(g(7)WmDCae"ܩ#z(FZowiϹB3ȃT.Ib')]8=52kz l!Jړkp+HW m/:Waq佡op3v_#ed]czug;y|'V+uVOQooϭV,`iWv;i[տiz%[7.vibns)\c4}0_rh_aZQ%O?k }ÜQӸ:p|R:lYljy{7?,^KcIF^<߹!{~#їNyĴE57W1y)xWMC;a8c*!gL_RprfdqVn-oa|üoR[{ aAngXSإO߶pӦ®_7޵Dܩ̃s{"V9_5#VA\l}+ogCñ\thO.=\́K6ytLn[[scrrcr\z[~.wɸ.K3EN:(Q^r rm\.[ܭ\ *BkXi6.cʱ>!v@?~1a1zzظ^HvvฎW>BܸáHwf(j ?Scz H$>+ppgX8~g;OJQgZwgkDӹ~>bsNt% y 3 Oj(3'p%7xj0d%5lhg ghc GW䩜v2/FG' >_s"Wa/S{67_p+S!nwax7٦KTsS6jNxIpQJÚ,_AZ.Vlp=KoG+~ SwMei JuZ:%! YO?1󗙅R'7r=/\x"\pZ/EvNO2'_:ypH_HᴳV cW37mEAԧfzml/ 0;A}A&LqËx̖u!F %J$\1Bƕ= ȱ޽9#c F8XM!opoH:g޿B> <vh~|A=9Џ?gz)&VR`BZE+{v,Ǘ*>=T1`VF/?J'ĵ1M7l(16T;`C)< ^]cD=qi0VR!CAA֓靟t9~3b'aënذApy†Kl9 JlδBs{ AjذcGA,@f8Ī?*tʳ-=5\`qP7%k˻?8wb d7wߧohC{y=aPw'$}y7=/ׁ~X{BY+9y}oX۝X>5ĂdPD"ڭ\QeMlѳ;)RG13>v/ze_XˆTlBCO51dzqH_:ޜ0]pBÂ4oMގ>A+ᾛc>aGK%D,h1_GO^?qCO MRq[yXlj[]p p i$w_.g\TXl'h}2*Nv87jE7[Ewb:xKVp Vî5wy&wQ66{(Y6al3m`-ҥmƕ8]m۬ݒf͖i'~v:vZϯ1 "<*Zb+l52 %U<ʞTlNӘ_AyO|ۃ_6O7dP6HpQms׻Hm' `3Cm>5"*h/B:3Ͽ"O:,p5пvMpQmosοr-6:PF;U,O\BPwgnzg/~;+R;c/^6 ϻ0Y^"ڑPֵE 2zR}2(uV_BĖ8o~z̦[̘ ?3$ckvF Yƅ#kg"Ķ,v/DW^qtY̑{_҈ҌV=q+9  l/8WC;;jٴ_[Rjl!DGmIK8n02q|E ~轰_G|>uME)m}HFl:Ͻum'.̗s|<cl/à?n{UP{E0h_Bg[~zmY^[W3Fذ O'l;1Oe=5~fi.a9Aۻ鞏$>Ie?2:/}mj˘lB} I!X/Me¿.RO3|<_ k[JcpŰr{O&fM2n[k4:k<6?SLiZIo='qB| 'p .Z Sen&69p9phX;XaI&y.WhL/jt*7.ϥ)K;`|c_S 5rhMo#&g; FJ?1Ǹ'?dn:܃B^\1T%5W?w!iQ5hG:9!+1ῗQczĒ?ψӣvdƛ"48pRU%Hqq%SÕgtЂX5b|Ljxkz@"sxoѽ56Xd:#.+Qq'Ӂ8OƗx/'i:|zT[_/[qCF8~anlxf8t8| v:ѩv%"NoVlq]{q?ݟCJ}@xM>o [wd[dF@"|0F>`<xP> C?]ޜ\|@|NPR>K;/'@OE܅y,u@b~+BR):[iVN Cu|PHd܇63'yBRՇ,Qiw~s#ȇCbG ZJW9xz^p6=R}ͬ?7a"<_Jɾ{ij(O'NѣPכ޼AKFvȐCdQ.k]tBĄs_q/x˼P$ǘPQ }Og}%Nq<''}f} JX^YN]zqhoZ7x,HlBuX7c2gӟnx-ޙ r>'ٖ!8^wKc Ddn  C JA2classDiagram3AF93DB701AD"3 # )aS Hwmm( CG@= # )aS Hwmm(h=AA= x[L]g~9^"-9T-,v6lҦ^YK]-1f.̈thV;k2Ҙkeu5S~.=s7y9~yhwF{A15URnA3ޫּ=+1͏DD{m d p,ɪX"bh`8G/ 76(hh,vCE}NՁ%G.kph`mx\ڠhaġ?p|z:čl85گ4Wmn܁-V7c~mMU*GFaJ~9bf])J~Qum arNT_@P }8mEp-Z'$Hrg-[s}aEXoM J̽DyZ;e 2Ӫ g1[#ô;ihB"ڃܾ?mƝyײ6!؄VsXGcQcc +|sw 6՘h/e\1& ߗ1۠E|l+bmhx*N'·ֲe~P8u\x7KnRTb /v#{1NsL3Xys~[nVbT*qwhaõyr.f-„5=x|7fM.vV:np%*|qC#QkW|f_h>EmR1LS㡲hUa(g11LM=^ ?ԣt_t<ɏ! UYOry-k^^2\i~ZWe}:'amMKD:?A謯K_)X>2q?'^r^a+>٬f9e=IH˳W:ٻTZgZud+a|K2g(RLyOMVE@4[h'' ׁG?+-ףUy,V,A>uz~WM/֐CZ)xT!}>)gCMT5u~:\_h`¡8O ձxTu˒YߑH%2{9hꀃXtsU>ޏ^>>N!q{x>\qsjlǥNΰɏK 8M~ ^k7h)xϣU#7SSb҈g4B#w\?zI'؛N:Kl5s:97tX` :렙N\tdk~-Y Skamo4/iuvpk9ܢףG_~qUi{Q /jtpG3e~<ޡ/X)\p8P k~G0xL ȫ¾ҝΜsinԙ@ZW-K3tޥrʓ>+Yki+-MaO]>v0YK8i#'A ZtuZڟjZ:PZ7\ `f=W}suW-Λz!Qzf{\sgOv槚{{09P;˂I_޾#߆֠OʗNzW ;o%b-IWA`/ K3[rǵ3}0qr,m۠~>fF?6N+ZIVE*QzF;aJ1|I35V DBO!˙L9jǷƬvƵ Zӵ!26Za26sglihͼr~ :Jc{[kqmDv|k8̱ћm0s,]%J8YrH>x%,m,,{a}8Ҏ&Cz24y,b/X^v>(0?o@f^?(V 4M8-1:y<5)5xSjÝsW%Uo/h_ؚ8 d$s@Șz+fOx"-9qKuGΕ9[4}8?9`p>mZ-e yLp(2;>9ajS3- Ddn   C JA 2classDiagram3AF93DB701AE"P [S`ip, OG@=$ [S`ip=AA= x[lU={(=m0sa#uKQ% qDCLe#l.dUF*Y"ɘ\݊ow9N}|;|ιԢ܌2 QoC%K[X`AW6X~ ~/kP(IP:lBMQQ/_b_[Qnp P_6.6( (SPlGm|eYW*8ֆchamDڠ5(uC7q|zZoX`3+dxFXZ[%7P}M/]U]Ȗ`ɕ* )>^3ˋ'˯%=#:)NBc.57tE<P21aһ|[wzgHLOaֽsP?Q Ŵ)MmU/dv7Yi 6(w|0}Egʶn: `!R;h,jLb $3M6)*}:7cjLmϋ=Fv0>7+=gF(no2w#{UX OzHgSK/BYgKiK6WWe !7qNsL Xǫ7kVQ_+}-cQm8~e~܌YuWc]E>aݔBD|R:/&>zV4:]M;tlܫԖǦ& }r6x}ڤ]GkCy>Za(2xg|jTS#EiSXR̴/FrkY#Ep-ʰs,|g)jN@Gm|l/Y_R\Zڗz>0Q>Ia\cV"և K&bVZ-iI-rJ5}3]'p{E5zqۺh&3#ڜ!IYۖXbQȾ:̗di(lH[>\>K:=S^jޖ>:sH[=ϓ<χːSwy=6\NfO ֵJɓgZg;i:{E\\Wi0/q[/HN0pƛ;N{Qkx͇ďklAP<=&x&S1>#qw [GUhp0m_Wp.ܶs㱂>\3ʝ]΅Gp$>Xd>Ҥ+.M\.ks.:q훇IM&\\:j·˥.>sh.&b+Tτ}iy^77 3fEg1EVN!vfCk;&#E{/Y}=ns=t}]ZpjY|6Gb!;o%]-WxA#d;C5үǷNӱ#qgrcxwn/ǂ9wb{mJ0R+7Q̍Ҩq.TVY7q%Z۹+AN=J?J VtT)*T̞~x댺yg]7RsAoml@r>ܨ@r.vxΡYTO}XGYWmi ܨe7s:tp:;^"DaJ-'jW^<~ϕzXճvp~{0Cv.P.Sbӫq*KIh`?=pȇ(qBO4 l@~;^.Kfb 7Vv.+{p8R]~8`p&o gck8䯒hqD8 }6<`9:aV p-MSع95(fgms'4Yۄ'ÓR<؞w`<9)ݒ$m/ɡi xҺ#X!O4p}+q<_jy__rY NѺb_Q(F=)诟{7i.G|4fxJhP?r&Jont(u1񭘾sm1/6w~,qbc-y4ޒw@΅s!9{]CHr5k9;a@ŀ3< Or9n€Lc( 8a}/_0w'蝴Wƀy>Hb@1˹F˗LmVpVbKۛ@1s'9'?Ӹ Dd(n  C JA2classDiagram3B267D0902C0"$ $M(?&?HoU %[G@= $M(?&?HoUDAAi@ x[}lw16vlR$;RH]A[HDR&MPKCJӨT%L cJoci|RAGwl2{ oZ4θDk(R9|S*.K}v7c-=ׄJ-K8c c`cKf3`%9+{*}t河ra*g~o׉(M_/ZИms8OcEyٽ.ClZ g]6atPlPˉj,GۋҞ0JR/sE|^['@ ^5ߤb5Aby&XM )s'Ia2u ir̙Vv9'Fcۙ#g1dz,(pP8 n|g#?Hp~olFd(}=L/s9nl3vqOQޣvQyVjsI&G_Һ`./+p?M1r||z^Xae~*T技Ѡ&8_bh]gZ.JcɑGh6,.b D~6nt,Xpmk%|ə;NlN}l?{ҹ-x֋xs\E4!dĥJ\1gLV$LUF)o{ߛRZ~ z}+ӣh$:2yΠԧO2n[}4cRkTWֱ%.gj)!_Vzp2 Z-PĒa71~n|>ҵcaùKv6tEiYB^:5h+s?k9.O4HDA"'^C7(z}MXܭ'/\ g#R#31c#F#:syWD/"!uǧ5q uD}Mf:"@)2>tDT3o uDP#v">L}VzjZ2/ p|q^4D6K8:zxn7dj4777*b| ⏙[ɐOc0KG,F6+mOXAˉzhnV2xylbg6!F4ű\ey""il_q{EuC,2 9h;٦"ۤXd3`X=D݃}!Co!m?"cO!š=6sAy]1{X^TLjyc~{_OݻZtxM mnG6fFxmk^޾-`y|)^zI.kߒ^?խbxMx|zBoHFx ék]8}lWrEy;Q™k|^ZIwỈbA4jPǹf/t\/ xsoe_-[@&s@֡K046EJ^.Qk<)LVYL{!OaOq[sCYΎuaGpӑWZ1)^Vڙx6lޔN[ă\J컲kOR zOpȋ8 g8d {J,-䈥NfNV"wgB&Grf׉(?z͚;; \#Eӛ;;"w;w~ fw$ǁLCۇ#pCBR~JSS 735cv⾹ɫ掝׊;8#^GLuABMEkؗ0=6ܯ_RǿN+4BJsW&cd~,|!_<"߅/|q |!_t5ŁLdӍFE@kR^F{x3t/_L/}5v\5_4_{}hrZ~ ie;_(aL*!}q[*2b<{(\e ΘW!'w2 Ϳ~7~ Ddw(rBBn  C JA2classDiagram3AF987CC010C" Y+?z DJ5  hG@= Y+?z DJ5 K^d7^ x[pW&CMKmgjR$[tB'Ćhe90h 3Stbdltp*uR`~ a6pHc}FbE@ <)3Vb_]c,czEb%eb 1SXˇdykW~4Bߛ!=pv)=l^>,$.b"C!]Li~d<= kZn0|ҦPVڝ"oΑ,9]^^}#7ڔ+5C[*mSxLB[{I& T}2a3(}nO7#|m*&R6HʿuO/X=|mq^s6&y{YfMi5bGoxs5{=1_e&R@ym)`A3U HY`ݟ9UO+8TUFPi}]a! ~>ӛPԣfПSj+e(;ǣIEdn}^+^:ý_Wg{sIsQH{O֭lcږSLrS{G<V[$mILkXs%9XאSgcVj f3X1t G!64hՁ+#6}蘇khm@ļE|\F+žyx )ބMqWؤ ~F*pC+oÖm߰Ӽݒn= ?r9ä.a9>Z&sl 9lJ? ¡}P_@< vezEn>}0!&Am=|ah,8o՟Nǫ?v1ı)艨Zק[@E$i0^_6|zc§׀]ԏ祜:bN媉/q_+OGb>?1/G@9/EmHo])aC2pl{;AB}wrC_ 1̯;4|b|ir_M×Y>CT:RuKr.wE-5T<*{:ńDy6QNdG3OD:ǣe#QBnBU<*<Rǖ:)- zkfأڞgk9Fo[ƛy_{ >YY5M>,[>Bl ]!Wsl!6uĦ)RcSyScSTG>,lҗLYXdmiYtؔۂz,ӘMT>UmgU]c]^FVOgpl]"Nc][ޕ!GJ-壨 >i6MTG>ީj(b7ƻ҉_ݥQ# ESՏ~~'NNWѮ=;=:}҄>s6|tMV_{ZKn.6X~Q޷- SN7᭧8V<38C^P.@*o:SqlV3&b񈣞3AGݮQ"okXC=I$m.|+5#[a Th(`ChZ]WAcu<a;} H2~ N5q &@ǢRkgAC>p\b ~s![yc2nPHHƿnG+7q~ C`u1assxKD3^nVq5%ƾ$?k#I(y6y 0nl(s]gq,> m[3|myT|oD|EGwYgc8ql 5|{O{NyC|Y{ac]wi>ˠ]Imm?lt ϛOa(~"E&ϝyzxN`R&e1!\ 2]a40^J1~.ӝb':پ|̖ޯoVŗk_m&!#1]K:^1=˸Pn=qxtl#$t>Ddw((BBn   C JA 2classDiagram3AF98C6100C3"|׺W9cXtG@=P׺W9cd^di@x\prw$$IhK((h$j: PLF?828#Z VHimhj۴P(ȀSJ +߷w/{$|}o߮k A*,[b,vMpjcOZ^XA A200;!qa]!E_@^:.I [dz% Hʯ>fô)M⸆1?Hʅ_8/ ༆9tl([B:)%e$xiLi8뤴r)\D KiU 1/ew{[{1/vIץ1C]˼n<ԅ\-ԏӄ:K A.y/׃ K}EN9$[v1qJ ḱs ql=SL'8d HsGz(F[ iL[1zp^ͯ}ǐ@cŀ!+@K'`Rm̻UA϶)8_o5S.0ϖ8} 5O%}7Qr^ S@bO?DqN`-1~{V"ʋ̮>^e dWvށd'h2C^Q37n݅:7r\A? !xW> ȍ&z2DCOԁ^4KTp.G G>ymGlxD`tS"G+IJ(1uNmQ-BJtJ f=QByDxD'b)j<"0oa[lg+lӇb}/֧e0ٶٰN=eEv/]-v|pඔ_峍F&}bX~f8W:1>k)?w•S|Y?uS]lѳO_9}È\>,?8)5?iod-&{iErvM莀B(s%64|И5|Ď惏Fjg bLWzX#cj4MwpչT1<Ƒp%̑;PUK ,9#78\ 0`±ȗüeWGoW}•K\z>bC}Iɷ$ݤ4\z1n4b^vpi/]/PʥPʥ1%`^O,bh]1vL1vm|<XKD9K ➾Q>ʷ cX0Ƭob6?ky:EM5LHt$so?Gc ߉9xG¢s̕^ >g5R:]y Cu0C?.U?ff_q;e{)<9DG!+#i<Φy74I1R㊿.];?p1[M{^I;>*mX#{%QBG"l{3ʶKl1/Fuw; pz(p?o"(ga6;6b=)gL/>O෼ޟnX#)NcYunw;><{-jߊ~+CH@V۬D|TP?W|b/>{܇E>QnQoQY1u_1^a׆/k@Ă (ai9hSs߆O0X\cacz/|I}J&CZ}vt+MLoT<}k❰0#xxOXi\#>Dc7 ^~>_7t7 +7ގi- 2]?M&@0"*0axMgtW101yOӯXz+DM,^8j}vfId%- '*lgؓqw=[ϧzss6{r&wq|c< ?y\Ͼ=]˚c"'1[)Y/|eaN0($y|CʱmO6nz.}D1۰j߶;G/eMQBmCÛi۰e_~r{,e1sr1Wp-팙oLLXCE|w]췢ׇlWgݡyۘ&r1zFJw]o"p/E ς,> \t|1uv5.Y d2t30^&xIKG(qlϢ~^`=gcI~yC?we(T?WGγ'ZՅצˀ@;Q=\<70a6Q,}D9hhzn#exOп?~tʨ1s,`p+<}Z H˿7iw'Ιhc~n>'}*H+$[:jٿuyd2K1΂H􉾋'|2έ,7~ҋQBmV~"Aa!'Lb=lDdj-(n   C JA 2classDiagram3AF98D1F01AC "4G@"PjDŽG@=G@"Pjy!pi@x]p^{$|!j$(RM$((8PpJ-85ЉCqBmZC;t*R% ?54wo7ǜ޽ws=E!\2dJK imDHδY3K#d~:/kyEn*H$U[[_A,v*}PN{C ֈ5x<$DesaHV'dy]ʅ_O~!>N'qE1]eəC!}/.Fqp1g!?\:5ls<Q,ȘcY%;}#WU2I sL?֐%.1پ&!w~xHZZoJ1 24 @Rx?#ŏcrfJhc 2tH=>bi{co"5X?p7x4CᓟDSLo<]zӧѳ[ =J/=*?p?g5&D1hD踯?gGH~.#{"w /sQ1֖h1l2!;`/`À?f}6 kEC6[mw1]qGpnX]bql1uOO4öل2v{_,ދc뱼@?|.Up:'{xσЕD}跠`/퀨E}oRO_&qM3;Y'(1i_~Gfi|6geP6 p>N>:z[n>{wylI@Uگ.9l_8bN(n$ qsc5Ӷ|mt [=U*r>C^Q8)JB`5Bspj.ٰ}ȉ Zp3x>dL/FˬL+>O.fuٌ m*#&1BxL6<2)}. E!Z:ǐ &"q#.yDG!f-w#Br#|+h\"WP<֥k֜  ]63’ ;n?'"V6Xtiܙ;p[YlϺو|v/b;|_w_*}_g9qJ >"V6XKs>v~ꏼc{3EqJq} N* ;iy5O[wG)׃"4磸OF>:~j(3n >|_}*Y{j282֩PuZu}}=#gSy~28{s~#+ɈIo;A61߄#?By@#z|1ZVU|9-uCBvy`ޙc˥O1.=ЄKb≔Nvk$nۭk#\ZL#^M6Fcƫ߮.ķ*ri,TҘzɥ >R{Wlw0N d.$@2ZRM/5 `AhZU|:5RzKrnQjRtMq0 .D޶RK4Eİx|t|=n@@םExp|̲s"6 xS#Xo>A0'v7 Ӧc$ 0FrÝ1z<>M @A 2Qb 7H"6 iӤ1㊳'8pJ1kL; A151Te<_$:=4Vx}[+WcъZ]#%oi>SMgogIIfIIzc:k L0z ` iKb.N1[}!BPb.ӻ]~mװs~jίXOY̕5 <\ 7Ŕv[\D6R \xt_! <$q*z۸E~z#Lct- 5iTipY!o|)X/^GÜsI]QJ'y>r&5A~oYJb47VB_/.] %nI7;A )`&I;6?nJݸF]ٍncI+׹g.@'vC*8 --ߩ%^#{ZL .>$pY(Ә7Y'#EoǪK}8Ǫ},?Fq\Ofqn1Sv]?q{ Y}|C=c8%穐K}}_Z W{hqI|-f}z?[5=&vubZM6 ؄l6Am–yo h#>gM+.ۄVmBAmBhQh8hpo8>&ԡ/9bcx2rJ6[gV+w%76&Wb:t.Eds,mlXO=9h+3Sg황R8-A;=Eh{?ԷG&anm_?#sL8dȶ%lu]=}d4o[PwUDLGlHwy8yOztGs>VmbN>Lx8jAvR):e2NNP3N@a- m:a.E.oIy z]=.m( j,fp-_sލL3]UⷚqJd3zEnaJÛ#ޛΌtߛ06.q$t;&IE:~W*&V0t=;ewAmסcޮEÞ%\ [5*Qm߶YƌDkbz:7ʳFy+%J"Eהw~]DUCQcm6UFILN/OFJsһ}/u9cqDʰK9+ 7k ̈́ ?jF7GLPrkI8Ԝ|}t&ZZ}룢"e-9O/u*7gA_2j V5Ĺsѹ_p4lΙxw;Fgws^@$#.&y.ذ (bnO5R FJ=5>fOwN#u9NxA=PշVF_Dd!(n   C JA 2classDiagram3B253C34028B "3Qu}^0ozG@=3Qu}^0oz_BSi@x\pw;9IxG@5! :zDJ$Cqu8NfXJk5U #SIHV Zew`}Sc.Pa >c?XʅS؞[ᤇӘcpQ9OyDfCCBAx [>=&q]qOWB^g I kdwdz39!qlu7IxI,?QBW)%#ugM.yؖ를")=@@Ź^x>;+BzM&2W5W%B=D$ c>~<3<1]~Yfv!.G! v!O~z~6߫42e5Nځ)i 4(zEJV1ؼEݹpp.c~ Fzqy%;|2;+y_b1ПuE.vH_D_Go֓}q/ }- VC=$"{sE_mXwoSXݔ;1kflfw]N19!<%}#!Kjio|o%pB#[u9\YAZlC73_>/p= Xdk Ca1A9RbEP(>Dr L}_ gyZ%YܬcE=z,nd'6~;4GW=wcT5l0f=ZoG![Ơ^Mp啥 걫 xWkcWPEgvǍcpO/8x["ܗ饀^ Hȩi>D*ٱNгL+;l@\,yqq2h;a?D'6%mئmj̄K&oo,6=fmNl4Y_3W8L(Xd;ex㢪({qyz#s6m2n*6>Og `=bCD_"ο`MSj3=pN^[v WA~ ^ A 8eVj'U+`j%vYغpj֚JCSmLեFd1)N+3|nv>C gSLl09mWjҸ3Wڵq~2+[}~0\_n5kq%[%y#|wG}t3Ķ:[T1t|_6l_e,!$WY/WIӨZ-0ttwo߿ ӯgBz\lгY6zv]ٮsnNwsrs@ϝ5^QL =qm{;GihρS~LQ3m =z2w5h;X}ú:U+|]]XEt(Sx%}kTG9m1ǰtqLT^\V_ny'^s$e|jL+_Vwt-3d(%\ڵq/\m_>Y3ݩz:zusB0uE>p6mtrH,T d+Z >CkncVƮm̓GdP4;rȞ,o#Ւ#&@qz2qC,Jjy&h|<>&kyñ.euٯ/$0PSIR75k_Nlv_`Ðmrr`ڭrBzfϴS31T񤎂PRmh3Z?we36CK ov#.Pۀe}nmKqZ u{02{8 gMtQV)Oc;9m69c۽MNxӱ0@8q.XqǪ>Δ1ƝO}rHajS{]524>xBgE~t>6|0J7+ϩ|ݠ~i+>nNWZ:?7Z}- 4Jruhɺv1AvR  NjvXq"owǞ^)~ȺS; O:f(LJo~hPOIiɟnm ~Dߨ[4ڈ_7eǂ)/RO7xeՂ!h(aluDž FAw*B]Fv~X꠯ײ>~iTgzJ$3}=zT}=.}=_ 3 4tjnI|_pk7}{ j:nϠgWsܢJMb EYBa8E50ae7J^nupJ~V۔$c&vu2sPlba.Rr.`{u.50]$i-R-Թ3\c>gEEz\_%`ˆ"?Y"XK'dξR{lJ-/f{Voc!%PS>{b[1dpG|3*Tvu |y$p=\pbvoaŴgVVssA-51Ͱ{R7Cz^_NG 2)ӣ9܍mp7"]3cOD+p牍;88~q,_>+Ὕb7~npd7]\Y"9 'A8׊mՈ;G}#,}]"Y@w5p4$+GpZv?7MAaHSktli@Z[]OO>,ʣ|.q]y%|a!%}g] +Nڕ#}O1vǰ)Vު`A_OpD}#z<W%L. ߻ Z/j6G>C+`!yN 8s9Lp|q^[ 3 sBʘ/瘟`|g畀}xscWSUztx*TH6Yg@6 ҽܟ-9\`lS96z? >qi D{c]beoaߴ}_!c 30~7`cgq|F`Z LxYOb~k qJMZKMK+n6Bl*iBۼ/̚ߨߗ>?NE#}9j3G^cLG4c}koܾ.6potgH 1 Ddn  C JA2classDiagram3AF93DB701C1 " 2Z8V8+Kߏ G@= 2Z8V8+KߏDAA<g x[}l{k@.6&3AH㴔`J N\-iE()"&gH\ĢidH!Mh"BԤX¥Uc&Uqnt}ov~55'=|Ǜ73gB+E; P4|COHaK!ʀ;0xZ-Cl6&@ܴ*F7pPO6./.}Ek(c0\aw7Iu@;^mNDsRR9+Fs%.*,t[ 26 !;ni)yS&,E59 gsŲv˗2җtuhM'} 43\sa i">WfF*[Wlݨm5\N ?hm&(&7&NkmشmD 8U"*K cV[hϦτwR FsCφ i*2o^ҋ_pq¡O,=d(/.1CsYPny-k;g.i6.mxmxɰ)fXmzpn&V`~:WE/G(m;@[D}M*<Õ2|;9ޔo6cSdzcl:m̋ ͑`uFmyw K|plq޺a|G~6f(^aڅ:{+l nE:=,;Yֿm6繒*;Qyzšq{X1,֐ZDZ)3~˥7ֆ%Cڭ.jgQZG{|'=Sڔ^*>Kg{һQG\~EkG\vĦfў@M7oură80H;gH?kçU~堟U/{m[MTC(}1TՓISE)<=4)X^~u4~ϑ9zK?a+|˼E}gEKsx|zkV-W#Skdm4hSFt 9Augt^ZXnE>Euy[7oY[xrQͬ錕u]YZCoKQ69o"e3bD#UʴV7Ignil9S'y嚥tr`:񟘡\S\x :I7ϯ.>÷t<9i:̇{hz󝃛.:>;UfYw!ϕC}^ ~<{ jS6Cߡughgj>Jy` e,r0p=PW)7|1LғaVw'}TBhz 9nz¬sϢ$i޺Kx3.4Jlz0-_Z9NzO,^d׎J 2]4vYJWE$g*b+W.ӝxv4ԊƔzuVzwJwXGJ_uA+j}.JEQ[(|A[Gȸzc@cĉM_62w;`j?=7\|Eta%w*ꙎCwZ҉ZOz.">8_#9S]TΉB2__Ж;m|i:qFω^kո$2vcl<=G:nW%Əsz{kq1s ~.k1^.OZ~fŃb*xB;ۺa;/_3O]vl#ja|3 'L}]u~e/?X()//$c #[73 ^[-4++T9UO/?н_G~4qťK\W:|p` Ϗ멭'*?[Li~:OZ2+MrA//b?%6Gq&zpOukp!³yXsTQ=B {|}BrELo(-~yB_8ou2rRx=t_Pox4FF@Qn絖 > ޺Ot3' Dd<n  C JA2classDiagram3AF93DB701C3 "9 ~lQ%U  G@= ~lQ%UH*'AA *x}lSU}+m-`cT!$g q 8uiŐbC~Fj$&.?"$b"Dsw=}{s&Q^Qoy#IkpEw`Hp(s BQ(a(Jn|D7r*1>dRb2f_.Vm_>>}P(Ӄp|y64}=گ}=4.ԇ0H f`|%vBßolH(L~ :i3:i HLbr֧HCFNm4@*p3_$!LquRt$n6qJa5Jw`41vXTYx4vޅ\{Sփe(=n 6DJ(T%%h!P}wWV 'a&J3IosaKj>ԯp.vyIx/a-301b[ہ M!q?8̨WUZ_ 3ƞ#1պKKmNsuRfK816>:6_ص?^{9{2ko}d3Otn*ؐ]Y~"Z,E'Mk٤BYGidn{B]R_Zhw6rdwtkE!3ڻ CAOJ[iwz>T6|nP WþQz=K1?{cSG;KeQWc kBY@qZlf3yVڎsU<[;Qlc,o(V~_vIp #Geٮdq=1a|,Kv1L8?uM[g {>+9gSMamz1Wg;^\[Xu>lZ1UIA=ZN~:H)zwR|@c.Mur ]`ӗYyXswy)UgXȖxqkZ_F-Umv"V 6h(Qs/`Q˳ó1],#XrxPpYkpp^1ώgyx6<5dY [Ŷle <a[Τ^\H.@&^X"#e%݃ZjλGF,y&l83aK퓮f ܣמsϻoVv1c;sF5wڧPx?Q漭'${|my?3=lsw܃h{0>m)_Xt;S0R O>Oo|N~`Y~c$|t+EFPKR01D (ʣ(7=qq]otJA~A+a9> n >#~s=e5ow[ƿu= ջP۾Z_jaw4RmC 6CxQJo9wrRoW Dd<n  C JA2classDiagram3AF93DB701CA"J *jƋJYH6& G@= *jƋJYH6t*';B *xklUϝYv -nQ(*"P(/ A\ DW(?jDA!$S Q!HEbD%9wmNNwk5lrvy9D)GG8&+XCGЧʻ 3qzΗ/ ]x\''Cc2wegL]i-GK`']H|D}R#0W'O*pI&8u:{G>I'19 'S%nYg q_aJ:8 wPT8n6N90&m?:73Մm\b|/zuCk.;^ r.C%LF0m=([QPܡ4]&@ kp&4.M99vu.lҹ@(߅UBω =.6v¡RX4\Ov iW@!q'~uϧ&Td+UY* 4 ]GKT..YpBm[ HZFKLj7i)z\ؠaxUnH ju~sqфgxJe:[dfV5JuIdtlڴ,eywL' Ԣ*uPY/EލS?>)LskXz sLG;?xc˿XEy?&F,TwrײFf5˱R+ValDNs bs>sjDXdk||L:|kU9*vkQ)CYz9;DU^TܼJW|k3;_w봑_OO_t"Sm8eú@u5䣫V7};JO>|<[:IX|'ߧ|zqn71Wg;^\;smaքi(̨LVWKY VUr%(#jEf!u&(F\/e |.F]J11nF~qũ̦Ī[>D V]lRћUHA=zzOh BSΓ7ZNWt 2)|æYyXX5R Fϲ*-BY"V-Z VD 00m6ˣ<*_<>(xtptqJo4q*ӋG>,z3?ُ uBz_x4:w^<"NnͣBy& G雄Gf+Ѧnit><)˔h#1#WiԶ馻YZ}<6ڗgggK|@dc`lLoܱוIͲk|*| &:0Nt(+aSߵOpifG#}⌴pY#`cHEo7鴊kFtڧPQ}zpFZچa}mB}-`Oݙ}L!w&O8~R;,zqU|L_kϓ|c);Ri>}O6G/ |cmӜ#c"ʽdO\>fի¹w1fi9<%wz!4pg~{n QS]y-6^6~z.{𦀿WWk1 6 @oaE6r_L[L`L @Normal <<OJQJ_HaJmH sH tH R`R @ Heading 1$ & Fh@&5KH \^JaJ N`N @ Heading 2$ & F@&\]^JaJf`f @ Heading 3%$ & F8@&^OJQJ\^JaJH`H @ Heading 4$ & F@&\aJP`P @ Heading 5 & F@&56CJ\]aJR`R @ Heading 6 & F@&5CJOJQJ\aJH`H @ Heading 7 & F@& CJOJQJN`N @ Heading 8 & F@&6CJOJQJ]H `H @ Heading 9 & F@& CJ^JaJDAD Default Paragraph FontRiR  Table Normal4 l4a (k(No List~o~ @FigureW$$x$d%d&d'dNOPQa$o @Figure Headinge$$d%d&d'd-DM NOPQa$o@ ObjectTitlea$$d%d&d'd-DM NOPQa$ mHnHu4o"4@ MessageTitleTo!2T@MessageHeading^`6aJ^oB^@ MessageText`x^`OJQJ_HmHnHsH tH uboRb@FigureDocumentationOJQJ_HmHnHsH tH u'J!AWY X 3lnAiDt/T{*+Yaj/^CDu v   ~   8 x ( d 5Qt8r$E[Rs2o![~[ ?$^]x%Z%.P!GfbjsIz  * ! !!Y!!!!$"E"q"""""####2$w$$$$$%F%|%%%%% &(&1&g&&&&&'!'*'g''' 0( 08 0!!0A0A0A0A0A0A0A0A0A0A0A0A0A0A8 0!!03030303030303030303030303030303030303038 0!!000000000000( 08 00000000000000000000000000000000000008 00E0E0E0E0E0E0E0E0E0E0E0E0E8 00s0s0s0s0s0s0s0s0s0s0s0s0s0s0s0s0s0s0s8 000000000000000( 000000008 00000000008 00000000000008 000000000000008 000000000000008 00"0"( 00"8 0""0#0#0#0#0#0#0#0#0#0#0#8 0""0%0%0%0%0%0%0%8 0""@e0(@f0(@0(@0(@0(@0(@0(z00!AWY X 3lnAiDt/T{*+Yaj/^CDu v   ~   8 x ( d 5Qt8r$E[Rs2o![~[ ?$^]x%Z%.P!GfbjsIz  * ! !!Y!!!!$"E"q"""""####2$w$$$$$%F%|%%%%% &(&1&g&&&&&'!'*'g'''A 0*B 0:C 0@e0ԅ@f0ԅ@0ԅ@0ԅ@0ԅ@0ԅ@0ԅ@0ԅ@0ԅ@0ԅ@0ԅ@0ԅ@0ԅ@0ԅ:C 0@e0Ƈ@f0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ@0Ƈ:C 0@e0D@f0D@0D@0D@0D@0D@0D@0D@0D@0D@0D@0D*B 0:C 0GG@e0a@f0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a@0a:C 0GG@e0ؕ@f0ؕ@0ؕ@0ؕ@0ؕ@0ؕ@0ؕ@0ؕ@0ؕ@0ؕ@0ؕ@0ؕ@0ؕ:C 0GG@e0@f0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0:C 0GG@e0@f0@0@0@0@0@0@0@0@0@0@0@0@0*B 0@0@0@0@0@0@0@0:C 0@e0S@f0S@0S@0S@0S@0S@0S@0S@0S:C 0@e0@f0@0@0@0@0@0@0@0@0@0@0:C 0@e0@f0@0@0@0@0@0@0@0@0@0@0@0:C 0@e0@f0@0@0@0@0@0@0@0@0@0@0@0:C 0@0A@0A*B 0@0o:C 0oo@e0d@f0d@0d@0d@0d@0d@0d@0d@0d@0d@0d:C 0oo@e0N@f0N@0N@0N@0N@0N@0N:C 0oo@e09@f09@09@09@09@09@09 0tZ"/! d["%E* ./ "#$/_Toc517243523 _Toc21180167Rose3AF93DB700C8_Toc517243524_Toc517243525_Toc517243526_Toc517243527Rose3AF93DB700D0_Toc517243528_Toc517243529_Toc517243530_Toc517243531_Toc517243532Rose3AF93DB700DA_Toc517243533_Toc517243534_Toc517243535_Toc517243536_Toc517243537_Toc517243538Rose3AF93DB700DB_Toc517243539_Toc517243540_Toc517243541_Toc517243542!!A3Es"""#%&'  !@Vk ""##%&'?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry Fbl Data &1TableNWordDocument"JSummaryInformation(DocumentSummaryInformation8CompObjj  FMicrosoft Word Document MSWordDocWord.Document.89q