From 52bbec97eae35ac830edcf70ab4970629e19e2b6 Mon Sep 17 00:00:00 2001 From: alegrand Date: Thu, 27 Jan 2005 22:22:06 +0000 Subject: [PATCH] updating the doc git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@796 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- doc/Doxyfile.API | 2 +- doc/Doxyfile.Examples | 4 +- doc/Makefile.am | 2 +- doc/index.doc | 6 +++ doc/simgrid_modules.fig | 79 ++++++++++++++++++++++++++++++++++++++++ doc/simgrid_modules.jpg | Bin 0 -> 31776 bytes examples/msg/messages.h | 22 +++++++++++ examples/msg/msg_test.c | 62 ++++++++++++++++++++++++++++++- 8 files changed, 171 insertions(+), 6 deletions(-) create mode 100644 doc/simgrid_modules.fig create mode 100644 doc/simgrid_modules.jpg diff --git a/doc/Doxyfile.API b/doc/Doxyfile.API index 73e9d18cbc..95d6a8c2ed 100644 --- a/doc/Doxyfile.API +++ b/doc/Doxyfile.API @@ -203,7 +203,7 @@ EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. -EXTRACT_STATIC = NO +EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. diff --git a/doc/Doxyfile.Examples b/doc/Doxyfile.Examples index 743cb578a0..4059256b2f 100644 --- a/doc/Doxyfile.Examples +++ b/doc/Doxyfile.Examples @@ -203,7 +203,7 @@ EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. -EXTRACT_STATIC = NO +EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. @@ -391,7 +391,7 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = ../examples/msg \ +INPUT = ../examples/msg/ \ ../examples/modules.doc # If the value of the INPUT tag contains directories, you can use the diff --git a/doc/Makefile.am b/doc/Makefile.am index b530bdcf54..2b2f423c92 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -8,7 +8,7 @@ html: $(DOCSOURCES) Doxyfile.API Doxyfile.Examples Doxyfile.main @doxygen Doxyfile.API @doxygen Doxyfile.Examples @@top_srcdir@/tools/doxygen/index_create.pl html/API/API.tag @top_srcdir@/src/api_index.doc - @cp simgrid_logo.png html/ + @cp simgrid_logo.png simgrid_modules.jpg html/ @doxygen Doxyfile.API @doxygen Doxyfile.Examples @doxygen Doxyfile.main diff --git a/doc/index.doc b/doc/index.doc index 82bdf72296..c72b61e3c1 100644 --- a/doc/index.doc +++ b/doc/index.doc @@ -53,6 +53,12 @@ The SimGrid toolkit is composed of different modules : virtual platform through SURF. It follows the same principle as the ones used in GRAS but is specific to MPI applications. +Here is a figure the depicts the relation between those different modules. +
+\image html simgrid_modules.jpg +
+ + The section \ref publications contains links to papers that provide additional details on the project as well as validation and experimental results. diff --git a/doc/simgrid_modules.fig b/doc/simgrid_modules.fig new file mode 100644 index 0000000000..edc78c63ff --- /dev/null +++ b/doc/simgrid_modules.fig @@ -0,0 +1,79 @@ +#FIG 3.2 Produced by xfig version 3.2.5-alpha5 +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +0 32 #86e371 +0 33 #ffcb86 +0 34 #aebeff +0 35 #ff4951 +0 36 #a6a6a6 +6 810 4815 3915 5490 +6 832 4905 3892 5400 +4 1 0 50 -1 0 12 0.0000 2 150 2250 2362 5085 eXtensive Bundle of Tools\001 +4 1 0 50 -1 0 12 0.0000 2 195 3060 2362 5340 (lists, sets, dictionnaries, context...)\001 +-6 +2 2 0 1 0 33 60 -1 20 0.000 0 0 -1 0 0 5 + 810 4815 3915 4815 3915 5490 810 5490 810 4815 +-6 +6 -495 2520 1485 3465 +6 -405 2632 1395 3352 +4 1 0 50 -1 0 12 0.0000 2 150 480 495 2812 MSG\001 +4 1 0 50 -1 0 12 0.0000 2 150 1245 495 3322 level simulator\001 +4 1 0 50 -1 0 12 0.0000 2 195 1740 495 3067 a simple application-\001 +-6 +2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 + -495 2520 1485 2520 1485 3465 -495 3465 -495 2520 +-6 +6 1845 765 4410 1935 +6 1957 855 4297 1845 +4 1 0 50 -1 0 12 0.0000 2 150 585 3127 1035 GRAS\001 +4 1 0 50 -1 0 12 0.0000 2 195 1890 3127 1290 framework to develop\001 +4 1 0 50 -1 0 12 0.0000 2 195 2220 3127 1545 distributed applications on\001 +4 1 0 50 -1 0 12 0.0000 2 195 2340 3127 1800 top of a virtual environment\001 +-6 +2 2 0 1 0 35 60 -1 20 0.000 0 0 -1 0 0 5 + 1845 765 4410 765 4410 1935 1845 1935 1845 765 +-6 +6 5130 1530 7920 2475 +6 5220 1620 7830 2385 +4 1 0 50 -1 0 12 0.0000 2 150 510 6525 1800 SMPI\001 +4 1 0 50 -1 0 12 0.0000 2 195 2595 6525 2055 library to run MPI applications\001 +4 1 0 50 -1 0 12 0.0000 2 195 2595 6525 2310 on top of a virtual environment\001 +-6 +2 2 0 1 0 36 60 -1 20 0.000 0 0 -1 0 0 5 + 5130 1530 7920 1530 7920 2475 5130 2475 5130 1530 +-6 +6 4995 4140 7245 4815 +6 5040 4230 7200 4725 +4 1 0 50 -1 0 12 0.0000 2 150 525 6120 4410 SURF\001 +4 1 0 50 -1 0 12 0.0000 2 195 2145 6120 4665 virtual platform simulator\001 +-6 +2 2 0 1 0 34 60 -1 20 0.000 0 0 -1 0 0 5 + 4995 4140 7245 4140 7245 4815 4995 4815 4995 4140 +-6 +2 1 0 1 0 7 70 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 405 2970 2160 4815 +2 1 0 1 0 7 70 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3060 1305 2430 4815 +2 1 0 1 0 7 70 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3060 1305 5715 4140 +2 1 0 1 0 7 70 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 450 2970 5265 4140 +2 1 0 1 0 7 70 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6480 1935 3015 4815 +2 1 0 1 0 7 70 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6480 1935 6795 4140 +2 1 0 1 0 7 70 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6120 4455 3915 5130 diff --git a/doc/simgrid_modules.jpg b/doc/simgrid_modules.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5459dcfded39a041f8e14267183a7ebf8553d3be GIT binary patch literal 31776 zcmeFZ1yo&4lQz0>*WgZo;7)K&f`tHq;2MIv69^g-+z%E!xI=Ka5Zr>hySu~T?#zF` znKyaAZ)X1guDNU7wJuo=Ij4K?)787Gy6UN?&%@Ni5`g_uN>&Phfq?;Dga3esS>QQ< zjEIPYh=7cQgoJ{EjEatjfsTfTPK^5q3y++Hl7gIsjEstwjh^Z;3k?|=10N#`2PY2? z4<)^T2tSuF8#fQvubaT2prD|mp%YRnQ6B`%*B_S~*Gb=kM zH!r`SyrQzIx~8_S{(Jk6j?S*`p5BqsvGIw?sp*;JmDRQNjm@p?o#T_!v-69~tLvLz za=`#_|4XcYm+TL@a6q|W;o;%nk$%Yq1N$Cqa5(S?)SQU85=ux0_KzNOeMH847L{Js zhC;)we1!kbVHlNwmS>sn_?Kw^CfR>aFyH?p$^Koi|B!12K!<|?A08YIAO>9CFl6|k z{x_O%;mUe;)keee)Isq|3PRN`LM$BcUiIT1hhb$$D^`%jqi0IUiv9JYlzzL2`C0x>{2MI|;ka$m!NI6bT3WVEJD+4n zA8j!|p0)XsSKCUTb&}OmUwBUmirvFnc^{FBeUI29r-Xjw6}!SrTYg=dfS46$Tc{^< zD!#6||8q6!G(ZKFbIb8EpxW%p@l9<@0-V0AQ;U&wo#tDdO0H^TRB@d`*!hTgvQt%a ztxJy0uQ^|rN*;iAsF!z1XYRjTB2~PJHBlyBQR|ACTF%E^Ts$F6VI2t)y}o?xUay^o zSesfJBD8o1gfG%lM0;PEU$|YtX9^(1P6dz|`XIxfvx=@bbIg^zBo(r%;Su}h7x{}-N@dd<}%sO+YH%O1Yv z1CSBd=-cGons%Zn{1lvDq5eHy)wG}W!sdWI9u1ahZ*j|(6P}W!a~c=;8~C4WZUG%) z*F+v74}e~L%ME#z{rS}24Zwx|Dqwa^?7(u|4^K&hqFYJxa;B0u-d>Zr?V=~L(wyh} zQ!x&rL6n}JPME>bH*)z?;@LS()uC{e@v%~vGF|lJ8s4pn*`jKu`vxwhWfsA?Y{fZk z6@z1}G^f~twh2<}BFH^!?xXQ^e&6gCmQ?L_^7!2XO)zF*ku2OX- z7sYs^nAp3<8LafFaw(L|SM)QSg7z)n=U4G|Jd(uiK`_dN?PNEYn^nBJ3g3w)WNoc8 zrBHhZn0%g_nj?uE+3$XOCNF{@@FqqpTFpC34}pWvAptRl z^$LaR5$ejs2^o`=R|LCO>UOhC?DKP+V-6BTJMQ*s&6C#EytgkjVh}?QDfwvu=~9-= zV~Q#a|4fYiriz0w`qX(g;jpFhLYP6psOZp@lr@udNm;h$=CmVZZArh%ZmUFdjrPaA z(UJb*%QZHGbEX14oeBz$(a*MqSq{E$Y<9are_DqyMtD6p!sWyIV$;e$WJRWuHY;eF zU{5^88oNJ8he1Uui0OFHYC0KSWr4C>=VwwAC-Ba;{`i}*NbTd4HD8W&db8=O&0+Hg z0P6~(q-nof?Pwup>c26ffzU8`Ds4wNXGQ817{rQL-Wy)gR%5;k1XTR>*tO?x`#- zNxauE|AP(b%ioMa_iqNX`OZ7gv-vr6qe(+aQoXLpcX&niRZ{l+H~9=l=ia49q%K$c=lcN zx~W;8RR4b1GRpJ#wl1sCQ|&QTMjk_9VUt-~?<>l+a2Iltd#CArqgxIxb92)=Bf|jk zCCY}M0Z3zpL?UL*!&RhXX;^rYhtv&I(Y1?J_?l=42yQz5#QUwq9rZz3!5kXGWeG}} zs41B?4#=yA>`18=79}nz{muC=mDWL3eE>EbPhDLH4AJc$fK0h&39kDb+2_*ixWK^N zQ9BK3K;2XFnt+4K>teRIW^B1Nr;lORmI4*v4RqLhpXGJ8^}IhXfuuLo2lr0MCG@c< zg$=5rz5TERYtGpBHV!xVav^TFdfwfM+sY}w$h6!@170b+H3~11=9F9qo@fo-8cHE> zk#{GOy=V?A=N5`()kDh65Hpc7m@Ub($IG95BG!#= ztfI3zqWVIpHtwC>RG^f^>N*YSN8(K~mEmo+8<$-8R28f|LKBT<!9-i4P7=U=@&M`@IiH7cSt_Xx89expActUzHNtMO9+EXqO?ys zM}QgQMJ~2{c>MsV33$`&k@)$ikhyTl(KQWQYSK-8G>RfMBUKQ;_E|Dw6gI^FsiAcr zqEKDA*wP(DGaqU*0}Ki|72+w!l<2Yu=FHwU#zO94gBkJ#VgKB;*6??s@DBjQZMpOo zK?@9bvP=5u->hFnLv_7p7t?<#N#aj=)GA5h0sn&yW`h#%0a!CQy1f6O2hPD|ylc|n zSP?2kiRC?+eFzP(*70Lv{mL)GiFH`O!x{l6LLt5n>#04d6*RR~|m4rJo%1uNE z7*+nmzJhNm%_xYR%w8_iTAM9c)WxGQU27nTIeC$}ewMg@?HpwHu|@ED&A7d!rui{`->R0TQDv0}?bcBb#Amg@GVJB5s^54|a3bEGZFdtdR? zy;C*&f{>yn((nl#Q}vtnr>lwcrWk?>9Xaesk@mxAr=r%>1OS3W1V)M?2pXBm1Oy8E z4Sb$WwwDipE~aV-2FdQ8TybTyZVRD2hfvLFIGT4$g)e8QbAgN6rKnmV`<*<-R7K=- z8nn-IZ8>N@U1_nIRJbxjWNVYwl49oR?6Ao(Nz>Z4y55iCTll!=76nBM$=hkIbBSVq z=sRH(!T89n@qH1*87b0zE;h?XKX93FpKcTR8KRr2_n7_UQ;qFSKZJ9#$q7&8G|^M- zvSAU5b-lgSKz8VlyTiziyP@6VgR>vE)QjJIbgd?dpa8J?w$mDtGmF_|IPDLMmOQ0~ zU)iTytSpmiQ{c6yl5f@=#F`|J#k2v>t%oglOVqc%6l}D%}p?7=>pTGzrNf}&hQZw`|YCt z{}%rn%em8;w7Tp0T(f*s|HZg9#qkV(c3L-MouN60%ge5VOqUYnl-viPdviJB1{(hW z$g(lOjc;WH17L9WU$#@MVDA%-D|cuUyZ4!p#p>?2EAU=4SOG1&BcSm;uPza7+*3Tp zs_FKgn=IsX4%wY09fuIVyA^hE)DdPSrn@UoMjRr>@UgQWlvu^?0r%Iqlcsi!p$0|B z0WoVk!kmv0S#+Jkc^kZwu-a-HdbBim2dNx^M~yK;v@jXPbO9g9)3Q;UeHMf23O=PT z^Q%5iRN>;CuJmNbiGB=Q3A1Xkmc6gzbDH&CTKrdwY}hf*$5WO+&d`Rxh{I`NcRG{b1PwVI5LFrPhWo=^}O$^l=!ni4hP_Bj~q>b~t zFrDDsvTGhJSy2&W`GbX+d_JKZ{s%9~4LB)X2Fvor}KfOoDPw*+# za!HVd!Q9S=7`6IP!q-}IboKHyl#GovpCx0vX;1p?!#~r6uBjHkySX4be_9#G5LTQx zhh)|loyJGyfON!$g4BXom5OY1%GW{a7F2f0AQYd9mA7_$U?KKR^8pyjqTFeWI5)i4 zzZ9Fl*j7w%q5GL{5>xX4e0l)j4!G7^#)@rHiH$3x4QC)~h&n~(l}4VY-K|v67;>#6 z*BA}IuwswlM;w7+S>N?Z`yA#>VPt@C2YW5tZ9%JB;eF8&MON4+S1S8TKheXHsszsZ zP}uy&;?xH0kZqr4C|{Ff+NW|bYy=8Et*oriZJ5;+qdVbJSB7>Ukyjn*4&cXVBXaTK zzph)ehj8yJ$nBe5a}2?&oeVgxXO+J|jX6nx?)19#;#`*bieY@NtPUTW>9WP0ja2Vd zf#LWN>a_VJ3BfO=ykK@l0=Mu`iOfLU%8-WqxYLtiLu-rTd-m#~8AR<4`T)d+@}FB9 z7(JG(j5R(@_vw06dI-^HvAK@u3$5$oSA!n%rCu*vZiF*@l)Iwp)^8+xh9a7aDK6SR zQu(;D+Lu2wc!6Q$vDVWU0JT65T+N&7M5{OgN4EvzEUeA_)Av$X2{k!~IxYijW{U;| zPgSf3O7DPq+4i7>(> zXA;S^ZwBiu*|OGmn|;Jf&c#FDH18|+(~Lgt>z~f{k=_^{I&XJi8JMyO_sLM&+}VVZ z+1@??mlFz}jsv1*7j!?1EghlW-t(h|Pb~Ma;X6XIO^Pq`8Gm&@7>w76zWo3)E-sQgRjA^`lOk$ zaExu;-NMdzFq`k|aY280VXq~by<@+_N{Xgjh^tUN^tgusq3goq zaVOI2;&uNS(oF2?1P!k{31$ImpZT&_Rc*i@*Iiwu-Xt~dNV_5=JvmZSSKX|jM7k$@^!CQ9zKXQrcR!JsghdF_S1?|eq`iyk%FBvy zt_`wZ`!Ph(T5D|AkEu;5go`OKbJSGaR1(Xj-G;|tThgrYlVRn((&$e>)CY4s+t$$3 zoMmKI3v}Go+o}BD6R_x6q~G-H?wD1SRgA81YHGDv6I*vshf>k!*a;npF#%? zHfN&IB7z!FKWjaddH_-_N6B}wp!gyY_vl)io7N9NC-YB+e7lhG%nz;wXOk>XMoz3L zyg>jrwF~Oc>UdiH0IcG9f6oPR-SiNhyZx4{jt>ZUP02!!p-sULKpNzBdh-D|%HQ+e zdN(O1WDDh#zGHHyydkO@8k~IqLe;-2Nmm3IQR;Pg5A}HNojw3pDi>mBoR(=RpgSeX z{BtUq)9vM0rSDoc*P1Wf9)REOrS$u>@VD^ON_M=bQYpsHZRrPZF|ukz)%F`MsIBYT zI_*Q3hWD1IktWOZPfzsSg%8^oF|E(TaLJ|gu`Q|D^ki9kJ-;B;ur0_fwMS~PhDx-- zry@z@|M3Y^W?H5f^Z}Iv^n<6(?dJG3Ni{b2frKtx_Q|HiPt*VBB*Rns>*PySuN-Z& zb+qRORxpgrVaRj`prKlby?c(g$;dtnM5i@O3V1>oiodOFsd$MuR8sMl5JctYAAq?B z;D#Am_W%@#Bnwg9TrfkuAfRbcVs$_RV%0L1`S59 z8+_V3td~GR;_0j_rpC?w!Ja<}p` z8RAe5*32)#5i}nl&_{dch?#zz8PHU z6yh>$!&828t&YMZ_eAP~%c#Mrm9|V69sP*21CYqG+|D6>aX}c+R~@&>xSrBO>SyI~ zZ`V7w`f0c0(e5_F-ZxL*ezNykD1C4|j5esZ~l@=dhEy|>#^%tc2tm!Hv zDB}~9U3!oiNWfer7lsTQ)$9>irMYuDNMCu>mg~;FW~}=b-(^4#3zo?akO( zv8jCO#3li11nU_F!SOnCXVI?Td?ekRTj!(P*VZ}N@87Q?@4t&TNy2+%#Pn(Nr9a19 zq?hU`XB*OoS`p@#yRZCDF3=J*1H%~&%w&`ySxN7iVKJq9n>eq+nTjIu!buSlnspB7R3OM}?#VvywnujfYeL{ZG=JS;voWYMEf0HP7T!iqd-9#2 zmnrJh)SV2Yj#Nu>5A?BtGZuubB5V65HMmxii`2}u1qD9bgTRfag*yhz_QfNu?DKwq zX@~@mugKP*94<$?*D-zMhZ}qO2uVL-ekZ9^H&$rBbz>)UBeim7B+yNUDdd<4WLvNF zS@x;MO$=_lch58{lcZ&l3%vXO9EI1=40@@@II!ZXH8EppE%dt1d?oG;x_usm^AUox zu?do$NhhK#)#}q{-dH-*IvR9-o#~ICE+uM4YO_zbeoRMDDF}W0we`*SpLs~l^$>(3JgW$WeG4s@S z0bV9J(wCU8Q)-=_YRy50>O^R)`i5j?F)7gYFz%7i9H}DbEA2V#d36^Qy6S_@1AB4e z!d3oUU$yFyL)t`Q>s1H=1iNRWP9j-grqvg<8kyD zPbsjtiH^;b%pg?m&?Ng5q4bk=(SBH?VAx4lIi5HHPDO8Y|1(ZXdV8zr(xcsBB?kBaPJ&oPGKH`cDvBHA}lp?my*MU)l}ZXgIjN2CvS z8!=l+fqb!0ep;AC~LzhpxIV6IlohH!Yi<4Z4G^cG_tad) z_u>+e^Mbi?iErJ#{ylRCl&t)=S$f8q_5Qt^eIT!4wbx{W*q$LJuQ(D|68Wtdf+S}8 z0N~9pm&LD-u+gc0v%h2|^2q=S0l;_>Ox#E2T4FO>V)-9MS^;<>7Tkk2+dFzYC>&sL1{_V7e z!@b$!x7*FB9FxDW{=j^wy(}Z(~^JY%)^pwiSXoV%s z`!l`O9BYTs6tAMnp^sryQ}7bivH7@uq4iu z*?L2=jXI(3wGmsVOXl1TchAD7-)EA-qSj`4OtC6xqd%pjxwRffd+B3#d(hsf$eBQh z<-fl;KJcLw8pOfrd~?P9v5S9SoX|#CHcNX7?QkE>+&XmIc0-zrE8ra>cd{Mk>K4pX zrk&~|^GH1lbza_lHs0ELj7O$)E)59tk=&zqmTaD+uWK!57b~XP-GyfOVxl>vPv{ow zvZgR)guJ#phkLeIEfc-c^EIYfU>P>To#TwO<05>DP_xp}*lE#yP;}cve6-F zzliU0axfc9J<8gLVr z`iu*k_kEv?ELsctc-Z!-&;ZxQgjIG@_lR~<0_%^YXfx|A6a=qie;S%vgzNM9$FqI6 zQiX)?pXg1xF8%o#8)M9;reroSh9+o87o2j4WlwSa{W` zHt#3o*Z@abZ#q-BqeYPG?C4~j?Ta6GIuvfej3hphgUF9|8M7Q9d{e3gOh)LA(A6Za zh^Tce2iPV(o}<<{vEw6KGCCWOqz|fOfDl^0>*`CG;jtHtWkFow!bC(Ay!kk1O8Dxi zYM>+qUAYTaSMuToSIBjaCN87uPgo4WfqHDbMfOp%9%ne{3l}B6`869AjthLbG_fE<) z?4Mw?rq1^O&?=qxiVa)`Ol)1=4L!?fy!^BKzG)Tf2HDK}ia7}^GBVt(Q*PX~?>f0d zP1BY1-2do>E*uBk!}EyU;SW3jJ$RlD5vN`T=k*}9h5Kh-smLGQ-nOpoP+t;CDC!1? zECh?zNnf{c+{{xv00~Zu^f;J5zqqtu2X3&GC(+?^4Pz6(otw@k>${PF{!G0F(f z6OrupJV!9G_8sGxN7;v1)U%C!0_RF4Nh_;AxjXnn?a-)W%*%o6=8kNM3$Iz>Ym-y2 zhUOtGomEq!o*@aaR_FHsc#F2=m0~Ygl)G7Y9i1o(nGB6DIfzX&|6BtweS;akg4Njn zXqlTM-FNq4R&~dOaod zi4VWUe|K1V^UdAOXin*Gep!W+*quD(5xDb1 z{p5ey7^u$2JTUG5$D<6cTH3tuD~>wG??g$4GYHu6_d11;V-tytG>s+v)+)_*KlwQN ziqrl?#K#B2x9=!RAXtG9Dmo!Jn;*ju05bh2uGuzud%iBGiY4wXGJfv}yEHQ<}6y0tp>aN`mJ2E0)kv?p@Ff{rx9!Nro-8&ZCwU zuOC$^-Xei|lrd4YyJ>pN-J15}J4jxj{RQ1JRmG(n=RY&~)>u;?q;2j>r~Z15%!r~f zVz6j3$vodaXD5Et9EL>K;s&e`U>80u?p0)F2_-K3h$dt;I~3QlIAD&<_~ci6ue|%= z6?WsOMVwLxStru_TJb`LwRGB}g?S5eXEX*Ygu9x!96kw2OpD%vZG$4@!+sWEy78U%fn3s;(W~ z(<652+=HrS{|HV}J@o<95&#-hl-Ae$HBy5MEtBUC^Q1!L&i_)d3BmwptbOKU6SESY z>wV=TX}oIt)&BbtUddD^ZY!8w?11ZxcaWD6e4+Sn(D<)4{zqd@I}$q-Cd^)- zJdZ#2HhYOA30X>*W51=&dJEIjN=$ny9q#1~XQ|fLKN%Nc4Eq3hnFqv@Y*y=z869y$ z#CuA7|2ea_)YH&5Z@S0QnKA)wDUv839$PimAN3m*cB?NkJhr4ph7aeN&Tb#J0*H7^ra1MAc8j8$fsMDK?XijX%0^LuUeXi~Hqi~?I6HAqA7SgCuMylyNj(Jzg|s#9 zYTwYpb_CHv`uiO;gJ|PuA+od(i;lk}fSNZ43HLS2`--xsjcGMna@HIB^A#WP=R-qR z1v(|ol*EZ|2y%Z7;8r{F00&4quG@eE5NDIoSNR7K%+$q}O6RZCX8OGgzr}fqKK@YY zaw?3heV;`DDdpZj+i%%N_kyzCtg)ZzPqy27o{#wU22U&&cVr-a#4Rn z!f()o^X++f;Q<$j@TPJ^Ym}$Tg*|1x3n`QdwO@SnxG@@@deWjE&j$5d`_jkQwH9Mm zrzx*Nt!wfy{QflToe_EDnh~o+=8)~ZWpnmTmO`pIeO1k<-V{e86OAlDi@}2gX zn1c?_E}Bn_8cr_!aPB@ zda;0rcETLxGdKmTZ4%R`6v{ieM_}q&IBXx<+S`;z+X|Se1{-~9exbt*V6Fhfn~`Qt zSyiODboo`14lWezbz^(WkWqyi^PJ{e7K0KanQ5<~&49UK#5O%(dPrv_M;~{GkN3jc zU|8w!iU0a~b?Tm!(o&S6lNxGUkVz{&92`B~JYzADpt5$#Q~aJVdmDC=bA)y+9j$E# zNtBq**8}#C4}=u;)M+vi+EyxyoIRzW_l?Djh>11Iv!rqL6s8B4uu#1@>xFFTfz+!G zdiiugYf=?;9P3rj=St;qaw5Ea1L2l0gi7W!4R{7{U>d&>`786Wt*=FD+l*#B-5oCI z$(h+UXT5#3V4LvaJD!R!feE@wBsUX-s)CzgXrfK%M5s+nTg*ccbh!S$D=%D{RWo-5Qt8RXelflw8tg@-U)wb!8^p?ymHmR#wIEOV;z_+NN*E}(8wsF=y&}$%1dr3!|V7^9RW@n0Y)r!3MV>0%$ z^71@HkhU$3fT!k_n|~kBTT>ITFX-1P+4Rl2p)720;8Xe2?zt)cZh)Js5RlEch)a~O zA8EmQc;g@k>O!(m=VOo_xz*>r8uvx3Euu5ynVrK?akN(K*`-H?~gzD1A zCT^9|>!)tYWaLg_6U#%0;hnG3<(AJybT_raDUIibWMrlp>?_V9hx-FPnTcuVH>~O( zBwi%3<+OQy*YF-V;izrHXm$STfyMB?v`@?>Q*~QRAW)GEG5#8 z&kHMI@AsfO$gtTcm2vCZPAgEIij|vwCPTQpI zQ>cGA(d$3Ft!De;upW;tyA(WGbcn4hZ@Ao~b})URh>%>~IfZ1&go}xV6!k17Y0*CS z$tA+i%Jb=J0qJbMeIy6|tX!#QbWrryE38k1Ip)?ZMKXDczs#7gG#G!qWzglo(US;*2V z?}w{PkangkWui*QJk~M0C+h@sQ`zXlNjX1UE_=GV z0)XS_5t0EMWC2)t+^`p8ddm!B@{$Sa3y<`xG)WQSdv4#>Ho7^>ePsM0PsA{7m@Fn- z@(e-PDRH+w$J$WgB=h8K*3vE0B>2Y6gq?=@QOx@FE67lfgCb3Q*NVz?6H66iPU1F| zwwg@Ts-aDV^>u<}BokOC?_S<%}z>hYZ|Jf!G4Iw) zmNGVC(C-@@=#Yh96~39UYNjWQQ)-G)C)gXveMO=AN|^5v)3L8xtFu5SmO^LIoNLCy zqCN>{dA)niP^^ETTWx61iNDq`HcL{j*%nEtVEiG@=U zC(-ILT{~%oBU{{qr^;F?#`ablzcu(COuX7lM1c>Sq9x;4TJjY`1;f?f5>^m8M-t2O z&US72@xJAK_bqQyMadx>x9Hu)(9Ff^edy*!>lPT#1{|LC4M;YdKgD>q;mzZe$VnZJ zq&NEtr`?zTEu4ca{Xcg;|DLRupL_CJ=2kYBnT@_KcX9Rju1cq-BdpMBL}TYVNQ@I) zJ&>y$4CLnQyxwuyr?sS2mf8^5Uk7C2ePESZX~7*qg36azRvD#E^Fv$`_Z(YxPNltt z($`lqGT|E>vL{)s^u)AwnUwA0KBl=T~H&_%tzIXpsG|;>q*jzE}z6`(UYUpERc%QffiF+$)u?Q7dkW= z+_LT(0QDnR2alkzfCP+tSI72o2e0i_IV{zl+pKZz*X0q)qc%lPOf^ajTy@f6e7{kx zid^Sj>rsP{fV3(|xeXD6ib=<=P~PA<>)#<)fTWPKIEwPg81N2GT+2r*+7>4kE;nI& z>V#;>4P7y6Yn>cuumR>&OM5dS92WgI%z;(gJ*#HzA%>rt zPCoZO{zVsEU*N3CoWkrW{<3Rv+}G8-1Vrns29M&Xrp&E*ce2%4RY!E5I`{!b2 zZB4qT3#z7WB?brl=gXdVQ>DL7zjN*#llXgdThaK(11k1LG`}elyeRd~Ggl|^cr!E8 zj-9HJkP?;43N4<6y9}AcAOD=GjL%N%v}`u`l%3WkHo|jR7wvT;BN}yr!uo#l7xb7>#?Me zH!K!ui*D&$FMQrA1ndg4p z5OG_lccAk;rQXqaM|FI`)DHH*dsAcA>Ub3P1Jl}YdS#WAhNxuIPh-Bw1AvXIrF@dq zQAt$x9FMg~Yz*%Sk5Md3AYN1?CYK0;#eY#p#wR;%x3p#L_)*plFQX?*`?eq$QI_@y zAlm@TA2EW)^*xV!SRnl2Xs$k7iq!C*#bt}*J(El<#egA?5SSqbfxt6yJP&sZFk}zF&66u@`gY_049~G zEPrb5d0t1c`S5j((hGysF%JEz7cy^Q_$l6DzqAqZdjF=z&3P)rhk0sIdxzJ4UaM#0 z*)zdD=kZ^(iGl%(NXnARR*Do0%e)7^U0i^YH{5&FRsuX%G;kih0Lu%+(8 z#T~jyjAy2m26k2sX!rc;#2<=n06R%-?6^Z$`SD=V|ERbBBZv8Ce-ZVvbNVmQ^399M zv|`L2;o{QNh2nbTbD(s}GA-eLhQJ^U@0r)f2&Od1lJww3)rGseiGz?75Mzfz+y;*= zL*=im;%lS!U*DzmDMP^ry==_lw>5S}foP4kWIl-DFC4-H;6n?U*(9h|siHoq|MSGP zM6u(8LQ;uqNISv%de7|LE_;!_E_>8kf?YV8v@eDfR&fsiyRu8NM^<=w-Pr^1@+yEA zDppaMcURofagm_!b*SSB5jG^(7U*t;0kPcDX|S+DT51_5)H30n<5}vRd*>14vYOUV zBe2O&B%DT|0kZAtN2<)ay36LIE*uOi8uK@p`N;f&VCZSgNEIa{0Y?zghRkW%7hJik zRww|){XC1RGK9t1G z12y$ro%#1a{0(SjGDEE;d^nJa;cxjuSVhgM$eESG_%&=;^%i8M#r2F_UeEVv*vYh_ zVgcj`{}z-=WNgHG4!s<8M z8wzmDg~Gb|9aAmYthlQJVCH^U% z>Z}#LL#6A#5y6$1*INl1H%ODpvOokN?m;r3PXGuV0OD4#ya6D*#sdK6?fU0hb5GCD z*WzzJr7H>yE4_Or!TICU0rgufx-ZMmxvh2n;gj$K+~8-V@VDOtVPwibf@-PX|CdY?*9%y=b_ObnV)b4DH-_ck$0G~%8K=ZbDM@j0h+w?(euln+D)_&vh;vBSgSL_L?|&Lj{;T)9n#;h-ShVU$CRiCGZQy7FD`P;f z0$3RXI9uPsaso76>4u&lT;1htNuPkW2CI?}k4vnn0K(P2S+K}dK9U+m?z^NR%so$a znZ&qE+Zrm+@pOFv^sFV8RsfC+5um|_6@E*Kr|M3+>nSxTRH!N3txtuUEkhOA+iR!# z5gwlkTLK=IspD@kHb^OQyr+M2jG1}4n)LdFbzS6@U1wA|`U$?Nb|_{7OS^y1uarjd zP?*}#ee_nkf2`VjNUXAZbZ^MB*<|iG*%Xfd>+i+J!bJ_u9Tx}9#TkkBmQVQFh2Oof z!j@7wvJ)5c17UXoFm`@^w(FfFn|do_3?4nLCS>{60Uq+Lkr)!_H-%^)I!c4zE@0kK zU1R8u?opsW6`QEHuBDNp-@h9rW32Lo=f*1NnO7G5MNF&+cF2@dg`8SiPu z;+Z+xgp_%^JNX_}$|8mGpp-nW@_Z>ISC>qyRjmvfsw*&+KIBw$d5`_yQ?RoYK~8v8WSrm?QDJfm_98^##g zJH(y#?n-S!xHH`3+;Oqo5P&X$C!B-r1ULoYqfgNpfT^;wn$e=ws;Y=SKQ3_=4TvmD ze;3^si0nHMx0iiVq%L+}y27k~b$`?{!{<4)S9rBCyW28^y;{wCaF}c#4Si&b36^0f z>jN%Kyf!b2xHPU)8-&m0uU3T|K}7$t&#$w2|4}a4T!b=)^c8~1L?r86j@y(SixCx~ zhtr8hSpSE@3L#_7L{VQ*(fZUZN8#igA3Sd!|NYh>=abgfzDuhGDY1 zpOt>1f|}HPzZg*|tG^z0cDsc?1e3*XwG0D2)>wNhxJ-10_{RkQI@$l^{~U))NiWC6 zs;yQaa&Fiqnbxq76VIQ~1)&E{s!S>vgIS)dB-B&Bt~SLhwcytue2sr!5%+zrgH9CG#*o+z~g5*F7o0gf1gRB5M(d}IM-EAC5VPoQ__upAy4skO~ zM0qXjAk`K-7V3+<4q?y>e`< zd;JweuN<|pB`}H`)h>>u(Q&9`R>PhZFc1MSt$=-S`?2Za(umXgisgXXWS`-sG~@v= zx4KtGg1gUXLX`O@OP&$jH&&HhQLBxnLEAXCCO$m-)w%$Mil-cSA=~aSml6t6+ACoU zmB-RYStn!(WR0SJ*lGWOfw&>lK86(^grS81Kn3>Ks5Ha~-fVmP2O#imCB#)nq&V5i z#CQB-H;B*2$3&&9OAVjoQ3{EK@kwe6`M1=k$_*&IV5V!2oB0~~vV)lRMKU{D&s28E zw|T9Ye;nfeWuo67ErWHy)jmaN|Ii||H&Kp~d(=C!r-f|Q#XdUJX!t(rmp-2yON06h z2A0~$8?)OL-5jgU?``%&9aBN|+k613?j*r)L!oRYyp=kvyN~rIoArEuy+Y>FIX{0I z&gK2xG*hB8m*wU;Cee<|p*4}$))TwOF1wfH>u20E7^hISC+umk}4v&-bx*_r5Blztmh=#98ehI zG{)IICuoiKFnTHOc*;R9d|s@I8m9Z$E$S=A0M#u^v`S$L}#-lY#wY})EcuTTc&E=L6NM4&gP(I#R$ zNqF)&&_~&Z5=HJmeuK?0+bOFaI<>Xnue2lles^1id-i98T-8AX1W4d07Pz0YUVp?cj`ZtQ1W@>K}#B*p- z%d9m_%&*Nt#A&rY`e6R#Yz1736|dwP!P8C8E@HuRdv0RaBoT$<(AS$0jx`yz5r6CZ z+Z+G$gG(P>T`e$Ic_Qvgwlv5Iu)#B8WcbCh_0~QsX=$Vzo_7fs)mOux0d-M#Me&BP zvh`6?W zM2sIL+U)G3MxxV|m@CPSg%TMu${GGu6!FjA|9=!BW&I1!{(FG4c}}@_wJA{@z2VO+ z*Egp3B>|n2*>svd#xQpv*$7q;b@Qy{ERDp~_n1GNsF>#hDL)E68X`75>r8}H^4#7B zPf+qr~8i!eF@EI8sL);cvWMzYEB1{=2En0M3h~lf;|w2@Nv8ZAB>Y-TnHkyw7OCv+laylX`}tf&>@PeYX3C7f$MkjKGzDk_jAU&XO636 z7L$GeRP(&2)L%aUBXyR~n(Fo2BQgYx8~(5Mt}`gAW=)ThgDB{b^B_5cAaOu)lAME* zBn}w_5eGqX27!+(Q6y&uBnU{(3~>O-IfJ0&J>I%^cdy@9>#g0|+S)3A%}m#s)2H9_ zzTIy>{q)noKw9-Tt_X8h=10W&{kPx5l`Fk?s?xRC>gLcyw4O7)qprdaoYO%%>{(XU zjB+s62Z>t{_7!dT`^RHJu%e229`w^I;czXDu_q5OPTg;vp^Ko1#Ipi0NgkupHw+4%s1u+gyVjyqe9w zi0)*ds2z4Pys4iIrkXp72^Gc5j&+*94>KBJY8D{0P0%pGv=G>E3Y6$gYjbdo@y}4! zP_DYa3*fR!y9B3QG%XGbE%$X!LGsS;IMd93>;YPB1|K)PJ zadD9<|6o;G{=0;Sl&PQ>YM9VB04oo(IKTF;iEXWkSya7f;yLfqW;7jihj^VEOH%LZ zZaD%eN|8BfBDXSYuyL~Am+~65MIJ~-NqOgm&VS_RV3V_}LFLNW!>e69CB1_tn`OeR zWnbRT*Rc{8wqi;efaB{k=mU;V*y4EShvP>F|9k8cB>c-Va`+M1o)ntsOPq?RoH3ClH5U=E#6JT;M;E0OIfq0^LDd)Qnbl zr7KRP&jwIt`O}QyA6!MR$f&DAAS}vCGOt0oF5>}KfEL4M_3d-qO`0=Z4)uv@6(zZ* ziaPnM3tO>PCd4Jfd5&jyJ(#rzNHWn3qV)0ZV*(0Q?$TwT&mTk`gJyC@O_`y3<@%qz(dm!MWK z#h<3-{}y1}hK!apJUX;B(+!xtMJZgk=rLEl=C|zy_Gh))2@|70Z**mEjtYn%0}7QVX;iB8_gsSYHkk5B0yOzV8K%-iq@Qh@znR`b3nQQ3oxR zliSBtHO-n>xPa}Ci3e#`j}NFbVCVuHxdTImGb)adhAblO4 zSX3BX)@lB4H}gwwerq?_5Z+dM(4anTFsB4_JrO{2Bk;#HP)+q+zFWrZ+_6vKU~Kn= zwuXE<2PN7jt>v|FxU9fQ@-#m9bnvYJRbkqxrGvk3V*!DVhkHg5ya4D+w%OiagEow` zX2}oN)cm|d`Xq@LJqZc1A-(C+-3+NK+Mb`5Y1GiFqmB*WmjQ0qpi8#U(8#aThu9bL zf9rfSf6@8W!HG7{+Vkr2Z0eQAxi9lji(U*LYrLArs#rmI^ycC=%W*?mJ&J6}h6Fq= z9&+k3&QM2ynv4PPM(_QgCiD9=11xCp54xu24;J(Ubb=W!IN#q?tXmGec-83(Q-Hqx zgUN}(2R~Gy`RUItK}WCf#s4?2)pBjQHP%q`jZluCC{qCvBgOWCl-9om-8ppW)f~Xc z#$AVhXZgX%wmydgRCG3=o0!jYyix$j-_VqO(_`DlNZF%BlWJh8HiWo|a-5yPzwNg3 ziRS~nuZ&iYvTv=COm-D*B?vvufO93EC?3t~(A?QdHttCJF#G-0>cE14(%lU{)1WK# zGo5I`TaN%~YqN1$$rqvE*fDtnjgDOFlXYEG8#2#9r$2lCYgCZh#bD5(JRqlbTN% zD~}Du;D+ZUClRYbf|CwQjkUnTTWnQW42&(;En<^M}BQaABJ@`ub1HawL75>0soUcHyo zX7ng_A#h*Xxn!ubkIC+7RK4tt*?81Hznv0z+bgos3yxK#_eSe59|4v2%Z^0;TE6m* z#Y2kJi*~6y+;wX=qe|4S99x3M3QolEREBj17D{*D#~x|M;C4H$)Z{Y|mCGs+GU2rz zda#&n3+m+l!nKEwduaNOvRoZeF900W&q-M^#vKd|4Vb>u;wl6XmH0DzOubUdjb zizbb!_xWaY6Ni>^_$2Dyrs%Z3-uiyJ_Fi{=N+fQTI&aqUA*u4rjreX62_Y()OC2Bx zOpSrXOvRPLine>}M0z7K_$6rhw7k(;my)2UN32SYH@9lo_&u)fSHub;lAR_D^t}{f zWutdlcv*zZhqb(MQ?3YUh~PtQx$yZc)hmV4$LXxeeyZjE?-_TW8QTcMzDC_&&9HIW zBMnKm*6yW+wE(e+K#NRT4J&3+X^L5HK<;o-EfMmm;MQ5(La;En2!foEqT?AC^x_P_ zN_CJTKwg*5xQLVcxj=PGOJ;l79NsFH4do0lbtGlN@ux~?P?b{Z>6v&2r-hAbl6^#?y@P|C=Igl8d7Z(ZAO26R zksG((7FQsHPQH)~w0@juxuTpO`+f>(AL@@yY95Us9aMIf7N(AI^rD&(Hh%k@Cto^= zV@NpP_#Gx1EymJDyB)k00!%1L-AXU+0TbkI{-1yQ*amwGkwxTel){|t&wR2aUFi}$ z!&!B78HoCL0);@!N1w7(m{by0N-U5&)E+VSd8=6U>hU2~WIcWoVzQpa(C^YOfjdhP z08?+j5a=mm)Sn89)k!L2lALokYM+;z7;T)y8B0ZRdeP~)wRE)+#`q782fL*S%x!;> z&9EVvdhU~9!P@kAudxzsW$>l@zjpuIRuD#x+w!k*Wpbxv^N4HdIEK*f66p*3j3_X; zF(7I8PeNc(5IN-H=P>5OofxOBwBk>jyiPB|lYxbuH*x?x!M*Y1J2L=J#9IHU;B1U$ zReU?3O1K{k2oeTT0rPtdB49w}|ITEH_%Ug}O5c}yj?v2?Y?v(=&)Rj5C(XB8 zg3o_E&$GaRfEg@gvgQiNj3zt$BQgG~PjDx2Z#kdaS1q-3XT0MdahHBb#z2~Yapmds z-X)oxo>{X$#DM0r^jmcqPppz3_u#eB!DdKmi;qyc6KoueCd!N+w~eXdI`sX#O_yBj z#anX!Uc38~6|zeD`pGUI{V?zlv0~+V!fpnagOMexO$`l|ht*7n98JCM_Z!BuXbX=* zL<72dT?Dac_R0MOM|VVZn%Fax8{!lj>%2|P@%b8tz&H6Dtdl&S$xl57%ga7#P{7L6 zh#WjSLAy+e8coz?0cOH{(kI6IX380x&m9JYqq9Rz+Vw?tq1MMkUs-bX zXk)DibRMujqVu4|-+xD>T1Liyb_BgARV=sY^H_-@!qzf-EoZvzsjTEPv92xI}2 z33JKxM1$zccp3|BPyrp~jy`!Nn+lEv(-aEXHkR5o1LH^W*q6xQ5pDF>A^2XD4@SEt%q@0Tl9eJA!6T)wApQ1zI5@`{wj<7mi4om!$*daOrdK=(k$oP%3K$#&V0A z;8K@hj-KhNlq_^+Bd_T&E-c!kc7oVlYGl_|$pbt)!)XzPq;b0r3xC3L9ZQYR#Avu4 zz$PIpEV6d-f!$k=I=-BYUG#bfkLzWiJLmvgm}6S@j0l4859d6c_aFyoTRg@+XJIBq ztLTpO?qOUTUtv zZEdLGC(S2vdrip8#8rnQkJ9*6uP2RDQGB}xA00f4qHrfwZ5H8z8ZcY^+$xzGMCyQ! zw7$cmQ^aS}h79H%CxTU`8&j3I$t$b&wSxT?ZnaHpBW~v(cGkRG_vNFz%*xWWbe(c_ zUFeKEUp%#fau?r%s@06KC+rTVWj=E|U9z6!E!V-&yNPWHLH8(XCXqKEo~Or4ikjY` zEN=YR*P`JT6M5&ZZ+<5dr!zXD+WvbPy$a<0a+PKnS%zVEtMts3wR zs(xq(lvtEwK4q|MZcwcMJIZ8afP0U;jDeUTfC`Ij_K2l}zzzlM;6Xp)fqxbWWdnej zH~#7kOA7ldUjf$F=C0$E{ldeoIzztFN0_F|OWz-FLMz;7<>Eh~md$Edh)D`|-Jh!m?2X zo8^(p#>m0JrYL%m-fojs&lYsBz9su6 zf@uYdhR?Zsp#29a!0O;}c6?ev3h-Kbh)&fpd3}uc_5A9>BfVS|-W~4o4 zIrb1O8{MT|<-MGFwEQ_@VwZlN2n1TJ$Nfu)@L!RS`paudpr11iMb_abx0-;h2np4b zx-@`LHPu(>Ip!REz1N@(d_hJ&bVUy=T(^u4mt5#)p%mD{wEPwi-hp5V@+feWha8=9 zfbY^OF8qzIKiK0%|Kyh}gb)4U;cbHNE>z+pDDTz%(Ky2--Bn(C!vK{jQXO_d{O}zU zSyntM_~-hZ7Y>};987UqvEzEn$Y(lQ=WNPh3=Z>!&avR&6{pWPDO4@aV|EDVhK=6) zS2wz9r(ew(2cl4`vu04MNR(b04ku}Bd(3DBRZ+Mk8WZ|FwZQmsKLMUy1Sf@KB{+I! z#>h~K_mLKh#v-Iq*E)_J>`N#4Nho)F4$7oaH^Id-Hf&-=5`Ljx=;^3FUSvNqr!0^d zXE6Jq{uzXVDkUggiKyVyg)i208>gM4*7!@MoUMA}oaU$AWGIH@qisI)XEutwH%qPz zO|$SCU}lD^q|++Hu^vr11s^s&_yO&-V;eWs+cQrjPaK5|9>$d9un_UbvYVzxhUV7N zJbmF_;&8+L{e?8ni+Wgp``(mP|E;7j2l^(uK;y^@SrQLG?SR$%@qzt^#{-?uWt^}+ zr_(m);uZHT+ zDQO&HF+(s<>g~Z_luXS~9}t!^M+2;lVI);@b}}w(#an#`8+|By1K+XamR)p$174q` z67Xm5(LyjP$AOme&@&6EKT(ZSWWR_&nj+w}r%17sdcmn(VlXP*nk{-t$b2NR!gL_A zK6IWRN@gdVUY#q&F3>TsV|rIqrzA_zn@@ZgqR?yUS_J`x*TFi$rIv-pCX?TFPIlRZ zXf$Ie&4@%J#$Dt+Vmnu7iuf+aAynP08j?-yw|mgfsNpHg~eiZj$<*y{tx`l)wP2=1&g z-BVfQ@K!EIBpj;HAH50_&xJjRMTCn=DrhE%44no`-OTazB)fO{)*l6_&O#JxY8`Oo zOb|<{A*Bx#-t!J55Zut;rDoK~)4UvVjcK8M8r_;0B&xdz^JsBr3LThMOb|+P$AM`> zf_h(Kx}U3?&LQSqDGDey0c!#0bP@S3TM)xy9svE67)d)B6=}*q}d)wWMp>U;* zFwsMzlVGh9Fi?rhfm}n_5N{OAWSQK&{Cu~Awe`!pL2<9sr=Xge%nx_9EON`v*wPO~ zxo&mD6d86`ERLKolTuAv1TIR44EcU?w*XEnFsIa&(ijhk5VL<~d#8Ayc_E*&i%98I zJ=}$t8?$HGsYgc(WF_@1v4ot(j0yXeS}Ht%m$aSQS#lw$R-a zJbLmCBV8oSqtB&70+tielCj6R$y$y5adM?qX2b-C0ckY-~DT8v$x%JbD?LsW^K(+O`1Fd2S|J_d$NCckAQ( za_HnLZ`3*;BIHM=z&dK&3?Ks1+lyN!B)_Ue^W=d@7)q*qN3PWX`w*SnIIW=Fm1>-$ zctmWE+JorPnxAV6R_!eNtyw9#kz+uLK}n^u;jnV$G7lr}nRBWG7TKqZ!dB>lw`a!H zOa7?yBd%)@W%d#9ph$CIiqoIP-e5t6nXhQ_?3-F(;1IYdTv-!Bp zH4)zO9%4wTIU*2I!xj{invg-?n}J%cdy3TSvZAs7k@PCsDItGKEdZf?s|p zzD|3m@y5*tu3uG=`}Zmu4L53tqYYbNmN0yQZ4>OJ5N$Iv?E4awL}Ya|U&O1rzWQ)d zXjez6R4TbgED*Be-ho6LJBP!}Za^|SA1wUrP=7KRb*oPss;zt%t<3>x>ZTRcQjB2klSZcG~)JX;}hNFnp>|D%|dCd#W zyOP7%>8oxd_QZC%Zir|@TATPtJ)zD%oXy(?`_11?zAypmn71HT7rnqX0A@h+VrLP4 zx<3Nl>ubJniTdHmdLCjUOOnGSYl!qUg|cM3036X+LkNEXHZ2b%8n+bdJbNUAF)Fv; zZ9>DQ#?fhnp+o1jQli8o0q3+H9MCb@Vguw?ZkGMSV&ha%ZYo5rBxS_=_Zx`W4<#LM zvO5=+u^NKh+a7kRrpDs5kb{rreqns6Ou>)jh2WuYhClV)r=1JmJ{MbcK#3Ye-ft3* z6G~AYJtqGms58TnXR__tMt&yTs7y&|qo4kYQBe~}O|$C5|1*vGzw`a}_0;w6gV=r_ z#P(Mw%>5r9#P&}-#s7l(_xrm4#OM5Nr~lx#{\n"); } +/** Emitter function + * This function has to be assigned to a m_process_t that will behave as the master. + It should not be called directly but either given as a parameter to + #MSG_process_create() or registered as a public function through + #MSG_function_register() and then automatically assigned to a process through + #MSG_launch_application(). + + C style arguments (argc/argv) are interpreted as + \li the number of tasks to distribute + \li the computation size of each task + \li the size of the files associated to each task + \li a list of host that will accept those tasks. + + Tasks are dumbly sent in a round-robin style. + */ int master(int argc, char *argv[]) { int slaves_count = 0; @@ -101,6 +127,12 @@ int master(int argc, char *argv[]) return 0; } +/** Receiver function + * This function has to be assigned to a #m_process_t that has to behave as a slave. + Just like #master(), it should not be called directly. + + This function keeps waiting for tasks and executes them as it receives them. + */ int slave(int argc, char *argv[]) { print_args(argc,argv); @@ -124,7 +156,15 @@ int slave(int argc, char *argv[]) return 0; } +/** Receiver function + * This function has to be assigned to a #m_process_t that has to behave as a forwarder. + Just like #master(), it should not be called directly. + C style arguments (argc/argv) are interpreted as a list of host + that will accept those tasks. + + This function keeps waiting for tasks and dispathes them to its slaves. + */ int forwarder(int argc, char *argv[]) { int i; @@ -169,6 +209,19 @@ int forwarder(int argc, char *argv[]) } +/** Test function + * This function is the core of the simulation and is divided only into 3 parts + * thanks to MSG_create_environment() and MSG_launch_application(). + * -# Simulation settings : MSG_create_environment() creates a realistic + * environment + * -# Application deployment : create the agents on the right locations with + * MSG_launch_application() + * -# The simulation is run with #MSG_main() + * @param platform_file the name of a file containing an valid surfxml platform + * description. + * @param application_file the name of a file containing a valid surfxml application + * description + */ void test_all(const char *platform_file,const char *application_file) { { /* Simulation setting */ @@ -185,6 +238,11 @@ void test_all(const char *platform_file,const char *application_file) printf("Simulation time %Lg\n",MSG_getClock()); } + +/** Main function + * This initializes MSG, runs a simulation, and free all data-structures created + * by MSG. + */ int main(int argc, char *argv[]) { MSG_global_init_args(&argc,argv); -- 2.20.1