<div dir="ltr"><div>I am just sending a revised version with incorporations of your suggestions. I will create a fresh version 2 patch after everyone has reviewed.</div><div>Sorry for the spelling mistakes earlier!<br></div><div>---<br> images/user/ctf-stream-packet.png | Bin 0 -> 21843 bytes<br> images/user/ctf-trace.png         | Bin 0 -> 16038 bytes<br> user/index.rst                    |   2 +<br> user/tracing/captureengine.rst    |  10 ++++<br> user/tracing/development.rst      |  12 +++++<br> user/tracing/index.rst            |  25 +++++++++<br> user/tracing/introduction.rst     |  97 +++++++++++++++++++++++++++++++++<br> user/tracing/tracelinker.rst      |  10 ++++<br> user/tracing/usecases.rst         | 109 ++++++++++++++++++++++++++++++++++++++<br> 9 files changed, 265 insertions(+)<br> create mode 100644 images/user/ctf-stream-packet.png<br> create mode 100644 images/user/ctf-trace.png<br> create mode 100644 user/tracing/captureengine.rst<br> create mode 100644 user/tracing/development.rst<br> create mode 100644 user/tracing/index.rst<br> create mode 100644 user/tracing/introduction.rst<br> create mode 100644 user/tracing/tracelinker.rst<br> create mode 100644 user/tracing/usecases.rst<br><br>diff --git a/images/user/ctf-stream-packet.png b/images/user/ctf-stream-packet.png<br>new file mode 100644<br>index 0000000000000000000000000000000000000000..0c41fcfb015d5f7ad2afef0fcc09d07ea4a9b155<br>GIT binary patch<br>literal 21843<br>zcmag_1yCMaumuW#1cJLKSdak02?T<>B{&3kcL^c5B{&3km*DR17Tn!ExJ!b){hf2}<br>zz4ia~s$LcHF|%i8@9x#zYxQh`<Ygt$kY6H0AP_VuNl`@z<XJfQyo(4AetP9M8-rg+<br>zc9QB25C{qm^cx0}ltKuBAj_GHh{(&E*?zHgFtfFLB_$&A%I>qRiMbWH!g(Q8$y8Zs<br>z51;R5<x==#pm)qiTSYv?SBk<R-nfy}bmT~w9|FlU=kXLeu*AgRh<;@R!iI%;hvF$P<br>zpavt)A#9Ong?-Ns3?8^!cgwb%X};MReyo}0-z~mKtr|sWM?{U2WK($Ojanc~inaE=<br>zue*1Bi%HN2naU1=iCASs?(jef1G)9&<)x=+M`(q>I8UM=LfU1L+gXSMo-p=>6SZKx<br>zePP<aM85xs=#2{zbPW^Eg$Rnnc&8>%D?u{gAbNv_2AdFhMu;Ab*UluwJM}iv4F;ka<br>zLyiZN5ea#PV;m?7G2?+0kE#TVLDX0vxF#RFxgc|l5Edy_6G=#U9i)8(6QvS@hzem*<br>z2=sdcfpdfC{i39FhWI8zaK+D6dC%xeF?Z>Jr4lQ78>qO%d^8am?GaQ}nMi3zqzLG7<br>zIrN|DCkZljx+K1M>%)$*b}<BjWJKbD)m}U}kD!;1jBte2qU$p5x4}PA7#M6mZjTn(<br>z2|^(2Up&Vj8JMeHdh@`0TR&#KK87>XLCJ8u2{Ea}5Uhb@>@BEX*g<V0mKo77Kfk@T<br>zHTR)gSW|yM)#K5$Q@369!Rn7E@BPiyTI&Xt&s%LD3Ao#}&Y?@`9OBU^BwvH2op6c!<br>zI+Uk-l1YkgDT4+zI^0bKZ2K_Lq|l4EITS&{QEz%)PdpiItTNoe@~^&wlw0t_xJ5GN<br>zYa7B|f26@w`_jH~1A&}3*>+6PBEou`eP17SdO8t!kjQuq@ivi)vWGx)M5&mR2dV`6<br>z5FrrJ3?I63A)?C;LWXvD;*RG_9VqvD9KOO--JQai!pKJ6#Gm!v6n_(@^&c)Lq0?iY<br>z5+q@7S1|LBwnJy?{8W$5XNU1uA2F?iw%G>>PUsgRjz0N9AdEq<8f6$FL89L+d50t%<br>zb_mt0{y<y>ijR@+Bv}=Mm0x|5Bsu5%{ERC=OT00X=NIJdw|oC)3Dy{&N(H_t)Ebe7<br>ze9o7?;#nwTMqgNy!tpbb$39oT<O}7<+#M@2!&nIC7wKbZ|4oR%)@{YY)Y~Oo@ty%G<br>z+HkOfq8PQP_hq?CF>F)NmEmZG6CAdWSUVC2oRjb?eNrJwHEA{3Im!H2#8m893rL(u<br>zu)YeNG!)VKAFHVwvHo-u8oXr<P?Kb!oWTyqVa9X|6zS%q!VVI7OVbeXOse9i@&xvT<br>z_=Jrj<sL&pGP~qU%IN+DBg;wzt{8?_^uPSJQn$Lc*tUqa$j>#AQw;>|f8Hu>&?*jC<br>ze0Z^qxy`-}Z=CQ}=u>u*;&OhbGS<6r4dIf^TE#MjfP5Tw$0V-d@Ay(5b4s#eCtsQo<br>znBAC{{r=L3wH!+-8$YHxF}Nr3JN`H9r4uTeKi>DgKvUWm$%F`mrZ1cb%Mzq>UrdI)<br>z=u>9lWIagOO~gpF{iH@$OXrRkIe;AdA(lFph>lsgpfI;^r4Z%Q#iv2#@B$qrk5chZ<br>zY)YF2NK<h|p9)ju50r?MObdAO0}4&^ZIuOnda6GJ!K-&kcgczTRLH2%-E8iCg<|-k<br>z%9(-O60OMJ(dS(^b;a<!`&YWAga?wQ5Wd2KOfC_&4{WMciWe~^0tlN4_O~ftWRZ4h<br>z^WrZ&gI91*-fX-f%4L^sU^UjVER2hfQ!A1zQYex*XyGV5%1g~{5o=Pv^FbHt`#_^b<br>zBVigo@;r4{X<lhL4>=EChL8KIl&R1%hbXg2)TzxT?>Hf?RmVF`+BR>+rDgXou?O>m<br>z@`Lr?yekP*HTWu2D)>dz5klUcclNftB+Pw_X9^<PU4kMx`my@)>%Nf<<Gk6^;y=VO<br>zLd|=%HmNqPd#!u3so|-~sXxl>%N!>u$~5G@$>ovek?tEF8qOM?Nqm>g$2$9VH+eUC<br>zHhHy9Ps3S*p*Fv^-dL(~OCwkPxVG8GPlHQ6N9~h_c9nQZYRT)Frjn*Sth@%<XxXB)<br>z8Pl%vv)caJg1Q&w+jH=XrM1?z9{Q#R1g3R8rCrC-Ezus09zP!V5YPhV(ThklNIV^?<br>zKjU(%aIYkdq#O%)^jya6F`KH5Vvf$SZPwxpzUekkRZ5<eFeNZ;aQJ=^7!vgH+aOas<br>zKT|SM@A9vftq)(W?6ucjC$3VHtCBm9@)ygFIgZVb1D4W<*wf#nsk1qZb^Q`qQ`jCC<br>zKuM2fv0N?oloOHjF|FC9WHw}uR4th;ugh^NywN`);J@booW9Aw$;-L&c12xxh_k)!<br>zSKXjomu;G^->Qfg<&)8q>(e+S&-*ouDQu9BkdNlGyIWUx^0qJm?nUG4%K0Oq(2NEl<br>zJfZM!CEvC?O32NA9Y&Op-|QxgM2?uF`^kI$o*6^X-_Z~0@<gTa3-D9*7YMTpRC_tj<br>z8vo8|d`ZM%RrIfDoajojDXSb;8RLg{bo_-(7Q73bjqHsAy-X(RL(^)hYEo7oiMg2Q<br>zN;zz-T37FnE&?`EH&8a+2ojioY1_GEj&xr7<>41FVKZ>Y2}%dbzK=N-!lcW`4}E=(<br>z<McWV*`<@D)0BdFoMSw2PDG22RQ6nwPR2FrFtYib3snzW4#ReXFHJ#2voxCYax!-s<br>ze$v-h)^GW^TUftGMMl^Q7m~|F*P8B|?wEWXEH?J5eC)9asbeOMMd-JziYR`r&WKzq<br>zocmi@gLak<q0-b?)ue4WXn-rOD2;yjXsBvnF@iJYB>m|KyAyjosy4^}qbehb+D=Qc<br>z1y?1ny~`r<Cf;*;e--#*-umELI_qh<q9fJ#QqLA@R~btmosNNT9W^kP2PmJAxBWa0<br>zmS&H%<<ywfS8MeD`lk}{;{^qm;w}=z<9W@|E;(-#1=tR>B`(EO7Zi0j7>$}tnC$JW<br>zFs5mu#}&r!#G~7w%`a4=t*TTXU0sVUGRF_oE;fCy6=}$B<E?Kt&g&l;<`Gc-seGyY<br>zSDE8@V!1|t_SR<nn8>a9n*DHkQM38xfxo|X@e|A^nQ4=0<2$LlsvCjQpu)Y|xI1g@<br>z5?O2eqdwRP*arkk^xD~mscDi4K4r!58TtbW^ggoI$J7%iMl=qzPd`$6Hz@5yUAFda<br>zkXCO<(YP1BhPoB6BTSNgB{3yowh&G_PZCd7O1jfD&}@_&;vb*cUva&cSR}(pVdqtM<br>z`Ea4!Z@#eiZ8F;Qd^9vQHr2zE>CckhVpgr&uHne41%~ZOBj%U&39+Y;U7lv15v}w3<br>zFXxqu+c>KAs!3(sy4L$&_IV$pC*}H@Qks%V8?-DNj$K=7+)Qrvh|)MmmM>de&hVdR<br>zrqj6imRl}dZEt#Ru2%7vJwMYtj0`r-JJB4MG|M&XUJ4!w&5JAtObci}F3p`Rd0DhO<br>zWn7FeN!-BueII>{yb8w<c^;k^KIo6;e~|W`pNnfl;Pb=YeV)ju(I|Bq!DH6rU?~AU<br>zv*+#f!R*L*!gyx<d3<!6wR_IPe*3|Tvc=xcUeeZnXEs)yOO?B$4yPq2l9TLJ47n}$<br>zS6;MFW`8QKl*aPzqF+QuKf%E!T-+P7F)jkW`N~jIQ3e8WeGP$le}_Q+Jb~YP5QrlS<br>z1hTIOfp8~4AOyBix;^3$$Olg;Q6XjLg~JvXJFPyCle<(jHbRE)9pc|8AjnjR!Oz4Z<br>z^wg==6DXc*sBXk658yE_1{vJF5nHKeSd4v7o%*w~`9Mn{%yvLCisIs&VezDQMo~q|<br>zQ+a?~TK$bu);S^*1p}5ZViW`}V$KBq6+BzQ(SyA#*(LE1D*Ryat!JS;WM^pa_~L*+<br>zuWfg>?U>`ffA53>reuE<X^W<BYE^>3c?Ao?4EtL~<V7k39md(SVdD0Bg?U%zx#!XF<br>zNy*lA)7)1F#C9Rbol=5Vk*gQU^Rb2qoQnbvY+*@$18HF`lA+B5f(--m>Y}gal1eWy<br>zq$oI}&A0XkJ38=OZD|S}@)p9B7<Cq>SA8*s&k?Ks-eoMzLxMSv^63g+{tU|(dC>X(<br>zcM_&2+d*<aP^Y&zz7MHKWVZ0*Y>p>Wcd`<n+!qce+Lb7^m0-#!@9!G^yV1YoybgVn<br>z@^mDF@8$Bn$P`D9K3(j^cK;H(dRie&HEC`}m)b?SYxwEzYwd@oHBm#VAYdu~WD_y4<br>zK%PTBfjfKgIh6hUhtYy<*=6Ng%z_&CVi}vP=TX8{MB~rK&r&yYii>C)OLAF5%pZ@~<br>zbruO~`DufM8$1U4v{-c-4RYp5vvs&{&8U4N4tw&yax)iT9Lx3_j%RpMJIVG@jl)6u<br>zrbk_;M>guGDq4R&E*Fr-^O5&Wk&z#UeO$Fx9sRK@g>7Cx)fU|^$G@ZeWIK!0r!?Wz<br>z{ZtZV#-EqAScrq}y0Psj+9FFX8YVUCBLC3#iSHysnFdX9_dt2jQ66e8ucnwC*5#W^<br>z^DUzO+EtZ32UY(C+va<%!0RXu$t&8r<Pou2A}Y*q62-*Si)xQEzO(bWR}ai&(Ylop<br>z-48#@2!s*I)sJ1Q#$4EaIZH(LAz>d<#}uyIvcB`sxp2tpbBq+Ka_>yJeDj^%E}vQ_<br>ziRGmW@>k<wB`S)Q_RKPj4sZF1LzXwyc2l%RraD+5^053Ss3LoRwZfnQd;4{B-JRpJ<br>zN+Ikno-ZVBc^1)z`z`@fCnu_tpP$v|#vPO=ov=!+k%mQz^9T1CEtFyUr7MPWN?s*~<br>zT_;O>22jam|JsZxU9QI;x7j#*^X^FJ>ZQi?+g{7N&QdTC31;b4YMt)GGX4Cz{5ST@<br>zBIsJU)?5zd$#x`^$v-0oZN|7dre3o`u&(m7XA|pS301u`3<CuvSNx55&|T^qD1+`_<br>z8f?*Y6HsA%%DW^vo3D4(7S<XeXp5ySgBQi<bL{0pK;mVQmHHw&b>6Q-O)ji~<@K9=<br>z^;hgQkFF>4$7i3M<J@uxu<b`G#Hy1;YbVp=^N&K_23<R8IqBrZsF+5X8~EG^ko!iU<br>z8piRmF%9*Gk@PJkv^x|3AouOIQ^}(;h_meUXX{<<-=ax(lH4yA)tblZzo6u<>YCsx<br>zDU^AMuO`mLY>LWSLCF8waiS#Z!T3at=bWvTRflLO_L_)ZK+;;?883WaCt*u%$RD?j<br>zu-o#kkLBPE-dSDWP6OxeM~56)GYa2`6o5}P3er7VlK_!T;F4M4FLMU@r-&vr4uP^K<br>zE(|s*4!r34U*G;BPt6F4O{d+(>JM?y+OOu$Il#9!=~SXMs20^yx#RsR6*D`SkjgOb<br>zJ)hZZM1$}?=cM-IhEVrF5cy};CAtlUNKx&bw+$1XINLPcpYo=d<Rp#F;urRX3R0Oa<br>zjp^q<1Lsksow;bMlY87Cni#%|mWsv{mP8Nk!%6sY5u(Sz^zn;XiM&7Tri;SMsm<9b<br>zS&=Vmotik7`PSr}uduV(c=M3qRipm&Z}Yx(^nM$_%JXO4mx@}<^|LgIa^_cB@fVxh<br>zuT47A6vOvgKAvHc_Sz4P<nsM|WX@yeRSB4W^2^Kr6fZ84R<o{U(ROzJoeH<dR>Aah<br>z(~J1hGAEcL@$Rd%4-;u;3$1~Uq^g6=0sg$qsd;2Oaxv7viNsy67_nEF9P2;#QMvJT<br>zV-|d*+0n>3sW(WW?@J6)dm9<96kpnm8*$G$6(&J?J?VC|v7N`9cPq_Qce`4^!xTp{<br>z-e>o&yPrl!r{ZugSPA{XG34`aYpT4}Qu;hvkus{R6bN@)%gvw*ThS*CD)-jwMWXDq<br>ziDl2-K{;L1vxToG6bnCyDd#bFSH|l4MXkwLt;o}94*7JG9IU#<I+4h!oVpE}UUhF?<br>z6gT#CjU-}%cnIl9Fx<woHv}0Mk(>&akRlSXL=cf2{2A3Li32_8iy18O&oALK$$w6~<br>z4RFcPsju$-C|fyUD!uFaP!Wbi?z=@tzkG4q2RSxid!;Ul=Pi))0*sdDHL;a=VB~;}<br>z5+i<Io@DaM7c;6PLG||PiP4)L!jHbjX@yROqGQ63qDLen1ZJSAzL(a=18GHHyMsuB<br>zb6v#GPs<=S<G5f(w4_z>UZ2Fa*w~-<zv?`=bz*-Gon7DIt~$gEJtHCa)r)UB(7ED<<br>zb9IZ+vW9!fDn+0QmQnsQig@b)6s<Wyr3iMB|2;%Wo0fhuhD-Hh>;SsB4c34^ZV(v=<br>zIyfZrzlRcGPCr3b;o^_U3j+STze~Fmgp~Fy-1jH8D+zS<#3o6vsCA#8o<MZqSY#a{<br>zaNC!Szzw&kE_r)*D7;lOP<3&lkbgT;0Ru#jT@a?Xc~_oXA$^j@uGISHK~$!hyR7`1<br>zkVoWp2lnUcCjSf-K1;|;f!J}@f5A}af8Uh^{Ly1biu3H0MjjuXIfLuh+y7Y|?=F?M<br>z4a7@YDdM&8f2+gmRE4>J<K1M2TnYEz-RgyJF+bdIu8!dvMgF%ud%v?fdFqjBa0u()<br>zi7>Bmhxa=mv_ByMA9x1ryh8Cl;Kmk4>?iu|qD4pp!7UQ@jxfrcjRb+YA~?F)i3sD2<br>z-#!XyM(-h#lBD=|jjCf8^>&`HYmBs2Wk`t_{~8JJl9ws047MI(On66`^u62XA8WcG<br>z@P&tLQbL}dt!c79mx8o}LCZh7D=ER~>a+T1Yn$@^l}M5QK2Jw@baSHt*7)`>fCoFm<br>zxX{0Am3SNQA21@<Y~DgI$L}KZJZZplSr0S0`}}(P+1fkE4aJX-H_naC^o{FGh7UR4<br>zo^l=^ab{ShUO(L*D!lZ;jQR@J$4!vg&HKnDBlMqPC8FST5$q7#;gbw{y40ZHa{0k)<br>z<w4*r@a)v(%C-_x{0TqdNL+gPa*~k#%H%DPd}W7!KZZvj93?yOe}wxwC4?Dro9E?u<br>z{aZqqcLt{3yh2^S7PnoGeM}lf1>M`l5s|zOE7E+y_O$^W3M@p}hWio<D2zxuxQ=$z<br>zXZ!+?sSusxa0U)~1{He0%`C>EK=^1%Y0YBMQ15Y4akHpSs3Sb}SzhW@Xy{j{!>omi<br>z%H4!EWO&c07kZ{}K=j+yq+uE+SYrLLuE8>`p<yPVP_w}%%&YPO_3}Lv0(tzt$4^*`<br>z?SIxBf#+R_S2VZC$QJ1hqt6^rriy(Db-%ilJa4XdL?2={AL@5MHXGGW64C#xU&-DX<br>z?2TJxEA{vv_9QBK|DJ_mvB3HZyOLe}IsV6ah&`0*9Ktr!cfT4WU6B6qGA(I;C3YeQ<br>z1g2fBbN#@*+2KE&O2(x|EFvmN5yInGN6P(&)X1N{l4IVdB$T0AjWlJ)FaN=mJa1GC<br>zRuW66+2#b_pJ)HwRLUZV_SwYN&l^^<W5R!i6&nq)3%Me$vUaKwe;X$inj74kZ9r}b<br>z8<cRn;5f8tCct~01Mv>wEX&M3;QiYte){`bJHI49*ky%zqzxA0{N=7Rq3`Kz>Od+!<br>zvo;I42Je&e-Ts}6xuHI#ewE+UuwU{l3kO$+{|CfO=OHTcc&yxD%+5&@Z_2rbfPF{Q<br>zr5)=k;;h^j7owHczx+&T518P2;HFGg#p)qXXBSThhEBW*X=moEN2D*?r!zev-cG&Y<br>z0~?C$)5SfDs;hl-B%@J1pIU?aoS*Sx$-J{X1M~Y$MwIDH1x>L@fvetus}Ln~LUN1%<br>zJ_j^clK6n&D8*_{TM>y_KlSiAOfWeg=3_6^CQci1aER8&$uVDGziPl>z2qKqSp@cC<br>zXI`<5w25;CMX-ODV0Tr>S}Znh<oHMOI3K&W_0@rb!l9s;)SFWDtIeaL6T_R{;W;&><br>zqHP-A+?MuWgycHQXEHwzQqQtmT$1Tl3Ki7!dU}${I(77VdXqGyM{nO@6p`Ae{gP`v<br>z7X7mq-r{jpSMPkWKukWbT!p{#LI7%%B#Rk?n_f5QrE^<w+@5ZvhS4}?1*;hgR<PnH<br>z((;1X!Ulg7CApEBWLWSW_R_SPl?V^&d98|c%aB+Tk27K1xBH$5Ut`CAEcVnN6)7iB<br>z8yDdCwoJsiIeye6ub>z#T!iPRLQfY=lFy*hoX&VKWBF~bKpSHXoQ7Iw?}b3x!XIzy<br>zQ~tJHa$vbh-Y*o|<j!QvttdKe6o=p(gw$#!?6Cq1>N95djm!jNyj_^~%TV2mv61+6<br>z_aU%af@@yi+@u<X&a;p^vdMv0k7bNyoxq*d#hT$|B<~U3d_Li10Puj>&FdkNJ7ny#<br>z4vPv~+#9MRX0p=#((=*i+op-zwa#?6e=<~fdfF_Q-F2q$bE<GNgV^5O;{%isCZ`DA<br>zjCt=E-}U@)Vz0Ogxj0z^F0mBZYkU6`Ms3zs|HKLfG>J9=?&xa7XX!vDthR!{O-tvq<br>z!?JPUWZk)oh`8g+P-dIv-13mXMQQ4`U~FSV-Ixp2=PK@=qaq5k%!ilZc{&nLbBNGo<br>zH?w)V-)#+^j@&{m3Plkx-X;J^2f>Yizix_`srr5(CSV6~K4ZREJ4vrlXAmhoWz+gy<br>z2@evm51*?zo8Eu?Ai`{C5R?l1bQ%651Hfb__24%*8K=y;BW{+`HN1G<V)!!ANzeD;<br>z#djE~3|e=6{xGzpqFl>=BKRs*1OATx+#z8WP>{7hT6xh%%}-{vQi`OZk05x~yMR*c<br>zd^|ZiR1nR|Ap@<C_}B{mWilfy-|BvQ41N9WsHNlUZLVJDIU*X{=Du+QMKr<aBlli)<br>zRFDg9g%9HuQMucu32)7T4;QOXKcX^ucelJVSi9%zVN6|gWE3lhM_KANVe>#20Q)30<br>zJl3$I;YH{r!#e<?3SUc0@;gENv$K9cBu8?mqr&lRfq#Wc7}9WUSi4Fd3ZCB>01t)O<br>zwOgIUFubS5E^I#S8?mR`)5@LMm1dcslcM}ikY>IYiNGpUxSwtO1>@N}xLi%2Wjn>Z<br>zty^v4v*?tSn0;>DpT4aJ=CH682gP+3)o+7snt}OJ*B8kaGaCh|7-k~p4~CSt02pIn<br>zkrH($-#~O0i9A3bXDx;YZY!^;;0KNe2S+m)HB*vPp<nWvL_`cCDt$s+e?u96+^_iC<br>zQ5sF)K3sPLAh>H5op{P$hyKHdv+L=bc#rv%y0X^rxW8!5U=7f3h{-G;F#zOb@9^y)<br>zji*3v-31gE*^5r=%;~otkYIw79w*NdG?;^c>i8~8Q|9swO9XU_ZMTPe9sp#?g!I-F<br>zgX`*g9S9ViXYq3P{AmkU5FPj3S&(0dVs!x0@ehz70JE4nymtr9+P#68mCmSMw=KJn<br>zR|ZaY`4p5JKPlkg&_GEbVtp1jE%bUOa>IVU0)&61P0P-o5Kg#d<*KhEQLF}?l23Dz<br>z6ZX-aMY(bx-I+|t4<=(wUmb+^n<KN%^08xnGVxFcORYKC`*Td@&T5gM^_1%TXK(Ng<br>zfAk>ZV;zB7c38-q5|@s0OytKaOyNssJ{;We7pf=J?akbQYt}dvLICr0`ntKkxV}rc<br>z*HnCnXZ1^icv!-}J_k!&2fv`kekL3(E|VX@;8PJs1sixP1~`=o;YGr8Uz#5*rRW{<<br>zghED1D}7ep;4}_{k**CmkNc&_2o}rOY-%gxhE?+z`JZYA<-9ZDlVHu78BiJqEjmcT<br>zOrWxA^#3OLmlFZ%h$H$8-nWIgb%g4l0uH6cV!sT1$4UJ=IzM%>*>nC|Smk+l@b$$6<br>zKkubo{!5I(rOE$Sz9(I1{&yS$dELIpR%N*PzswEr<-8ziB5#Nu!}_Ts_wlp;nOzFa<br>z7DuNtwtt7H=6?h^VoUw>+IKw=X5|H2uBkMl#Ah$*X|uqL@>g(fLYU$rR8mB6tR$!H<br>z1PP+=v8B!bd_YNI!B1QxC6>uV8!A`-Aa7>hZYEhOr6$Zqo8I`NvH%NwYM>uuG+9#f<br>zVBTkL!EkuhPV<c1<wLtN#7P0KH$;V8kM7sO?$U=wl?A4jSvr>c^_w(U@4#gRZZ8QU<br>z4!tjhnAdM<tX{unN&4(%d1yzAxVlBvY(qd7lB@q#d<QRVb0wL!l;L|zF(I|Xano~=<br>z4$S6bo_e-@@rD*p9T;<@KNWj3V#S4}f-dTB7~+<!5eP~+Ac7&QeJimM?)cArUiB{H<br>z)bsKB(-&!CvZ!BNbJaza#@2pZtwC;1LrSO>SVD(*Syv2uMLG3;`xZqvH<-dgcwyMR<br>zsK?%EK<^6!5BD%h%R&>zdI_&ZTU?&`a{|UNZLZynz0;zuLytwT_dvp@KkfAHQ}lN=<br>zU6Y=|!p{lP4VJKN9o`qU!b>N~y#pS~*p+Wt5<_X3=zKf$+Ph;glsF_-_;*z%Y9_w!<br>zHL1va`TKwp;*yfa+M%Hs6_3`dq4;et@lQ)&YdhSbagU2RteZNkyHAiy+iuEBp@zxG<br>zi`hFNA3R4Nh!qx7km#=unM-@#4i-jYy#L;^piL$5c~GBSHzfOwfT=B^On;A^KV>Fw<br>zUB`Wu_|Q6Jh>KtAgp+X0v_fw(G+j<gSOwFh3Tfx`{%rWqX^N)Q?1#miM-2i-Qlx%@<br>ze~BPI0^p4H{{uhlDE9vWvM<&1f4Cmtl;l$XgIY;R#eat~kd*$ARzbbw&JEA1d^xpJ<br>z#k^DTh#_k@z*l{b!4`t{>1vVna(%HF0*xFhBXh*EO`5#pF+%fpql(PxeH+wOUW}(0<br>zo_#et>UWw#D$}+SM>`(4;XqfMN&cG1oMmMT#qjhFiac=OXD(?Z5(|47y2Kl<Cx{jO<br>zj_4~T?y3Imj*IfFt;C-sHwYvx@?hbn@Sv{CsG>td89sSANUuF06Ju4}t`|XKdRc=T<br>zHv(uvZo&)6bJAXJ6S7QijGE+|O!r|Ei1+ldD0ni9x>f#sInhBa|1(I!IcnzD3x2D)<br>zvsDOW+wxcloTvRfr8mIld;ac5uPbcTuR#zi2EvXd1!(@eG3Z@gN!a>wwc9v%tDf8+<br>zk`q2-beuS57J4Rcm}}Lcd2bXfRo_)55H^I-pWNF*23VZHEz1{D2cBTaJnzV!vT{_b<br>z^f_~vL<n2$VZhAHcd`C8TL;SwYt?0&*Gr|exoE>)1OdTe|7CC?t*%2jHEqdPn&PiC<br>z{MU23q8_@=_$?Dg$;v%)Kt}+J)8m3E4aS(#nha4wP*>}{lhB&pm2I5<m{jQe3~aYe<br>zZd}n};Upd;4)j*ych+z!Tm53gxY_Vozc)7#9IPgycp;nL$ug9GXkIo3$hVqQy~I#Y<br>zSR$(E5#I#8X5`G>$SuZ8Zj&@M*6@du^cfS8aNsWh1>m-f;YQNGr`EW!C1KokPY;u)<br>zZrVr}$OXH$UbmL@Q)d_#p6O7PO-cST)NzPG=SF@hi2l4WoRV|YaDWZ>YCgsdF`oNT<br>z=z{-m-cl0g;nUg|WeqSFGuGHH3k~WJw9IyPdLL-70!a#L_>U}WAw&lWhc^ZurK^d(<br>zCyrt+gn5Jnz&URMz`9QKilN;JfGf#~|ARU1|G^yX|6oqu9Cq`+W8RW=9+>6)m;9-y<br>zu>QSbkNouk?+jP)*==squDhqF8LsJH{5JH(svBE%<(GG}vm2dbh~h1+)i1tUOT9xc<br>zwoShHle12mLUO3_r7=J=O-=cw+kwW}%C7*z<m)YCk=%bC(64`{W>%3=FcHM&A(EuG<br>zsI2ZkYGn@REr#+d_XAC7Xd{99$Y%1fc>1oaMvr0Ue6YAF;|Tg!^KaIME+lDI3kZ-9<br>z{D>bT8d@YLnx|X{Gj;lUpWj<=oXOIL-sIjpdkuv1WZHeWc$*}hZ$sN@ck;@U1UZK)<br>z+#nh&Ii$G0>{qZsH0yy?d6b&8w(kShtw55G7p-@>z>O|Ts0wWHJAAbhI`44{wMY)N<br>zLO#%~rY3#98z4T;S9thnx33}a=z7vu-ja)L`qy86msVU;8;$OW1JWL=z$vSJfZ&~P<br>zxFU#|S9+B_iqkT@RGUPnykPzNVoB&GA4Mis*1g&0-61}kcng0@<4m|h8OEX|9Sj8g<br>zVBJZTE%JuLl`{<g*ig!O$9?uAHN9(QUmV!7b0Ny&P-`+YSQr7aw(m@~a(Dm-eU3MV<br>z?X{x;SUcTO$@CA}x>)d;kgwE}o!hd)L5A%RpQtyN&$+4$$8eI=s>EihRp2;TvcWqA<br>z)$hz}^*p1#5>>2-PQijBr)Q>!b0(MJNS?(PW6A0CY5DW!liHDBKX2A+B@Q(thH9qH<br>zRu<k9X9X3lP`UsdYNg{@F<RWttptMOWT&+`<ACwnbE|S(H%#HU+s?Qk=_7o$)-O*U<br>zb1F(XF4$zNUpN=`Ep~`43%_i9yjewPGFI8Got|DxJi5`-l)?MU7oG2byE%VXmocO8<br>zjXvAPs;HoIR-l#SYsib5Fl>lmNj4ST4{0T{+6}uwoH>o<d>3qtV%x5fcf$^0)(mA`<br>z>v1&lX0;Z(C%{B`Cmw{FMMSJDT%k3ur{6D~!_CAgZvvaus&H-;@$ml;uEMkYSolte<br>zE-#X9rD;<{>eGu4bR;a>L1u3gWoQe&Wc(~dJy||0ktEu((7xqI&M2;jGwylqLYX8@<br>z9sO0NHT)U<1pLPe1ac$upUN`UWd)+C*@WJ2t+dVS)@$fz_3IMG`Sv?)|Jr1_P5GgS<br>zP~IN2kbPe^=mkKSV>EGpS|0pO>X<p|AaOzaEV!>?L?M)al;nPG`DP6bZd^qb*7jAP<br>z?ZXalv(Kx)yiTWw51QpAxyWVO4PmAytKVizwbD0Rq!GXh-<{P~G^6ABp*N4;aR5)3<br>zhTW_m>JhkVJviHLiMSi??gE<_SUOT7533Nj-O_;*gbBnmyuqK7V57U<d!BugMtGQO<br>z0Gm&Q1X>-AO%u@n0;3fpjYZFntN}Z}cR3m&J~5{Iopj!%pcEU=847rdcD7A5*CG83<br>ze1i(XV+W*gaPVRR{`FU$rSH+@Wp$-$L=3&8z7Y)g;lOX!Y70b&8+q|=cKT*;kg?r{<br>z?{cNOAz&5Q%jEeK3aCy_;f>X8FlGjqAccVCLNX?7poXgBZ{RV}NHnsRs^MTbLc2Zv<br>zaAU6Z@)!n!DvfTa`+!bt<3h1dyiS7KwG5zsWE)AHff^)-5If%kjDed}a!c0c@ZLmY<br>z&xo7YXEG*zg(JJ)chAm9Z1L6XJ_UAQyV207zI60>proGhq8{t@D_^4uXZNFlE82A$<br>zv!bF7kav3hGO_M2KVyKrmO!BxD8j0#5jetnQvJ0xP@nkf@9E?qp8~}Nm^Iy@--~yr<br>z{g$R#zUg|qNhZW<tNtIm_?&a@*g@d2iv7e4FsQA@Oa<WwPT{}%?rOF0UA0k8B53GF<br>zoL{t|B!)2++7X{;Cfy|G{bryT(p(%)!Ew?HorI-osim+IVn4vp`$<k;kQn)^a<Ept<br>zZr*|fd3H-pvrpXf-m!!XBw>qPMEgXUvoK-8XJgbgzXtyzR=DVS5XtKBWFyItQ}rnF<br>z8C+kVg_Lc8H~=}i3#60g`PrZr$C3puVXa_&TQG-@dHKcgH8+PLF2zsZCqYeTbW1b&<br>zUuIK{WF5ttY$U3nP583o@v7$bZ(p5+hYrAe%x)MpWO3huUC1TZR#J1n4>%pf!C4~X<br>zkGZy1e2^r|3o22=Z5uUlvNniWtsaN2-GBvmUYD>nq%?D$lV4Atw5vL~bMIe(^ae89<br>z6x<q!?4%4{p1B;xD>jnL&8-?X=Sp+3>zNu0gY)*k95R8y4&CK{CU5vdg{vH;4x|AI<br>zPyn2U7Eq@y&e1M`?J#cq6sh3>Qozd;np|{ekY6tt8P8F@-l$k*3p#0Yd-0IgpU@}K<br>z!he62{8TXPdwe5pL4hIf-!yuOmf5KjxF;x>{QLaDiP><72Mx0DGHTKX0wCJ@bZk7u<br>z6|7)ZA(~2gURX|Gv6~Can)rGJF1ErP<8haV+3YL?L|4);*qHU>s_)t$C0pR=LDp`2<br>zR9TOcArNb{{=Ez`5OHC;?w^ts7}MD}jyfDny?j4w7JOv_-Q8_{_fuHuP_6U}7xU?5<br>zC=c7(ae;#kmW1*(K;*#kvKu{l24<IFA*Z2Qv#qMyZ6tss%w)ZtJCuck<wy0n<@m<N<br>z|Gw~eW};uELNs}+O-2!0=m;bizWoXRBpeS3_p(t38Viog{Mo$WTKq5Jjaf71Q)C2|<br>z{QIV#LaHYkdN;p}g_EkbaZIKB=Gkxq>rpUpuv*9lgD>m<X8+G%u_8%&U8e*vX)C}`<br>zp&T-%Y#tQ?_*(vQGX|Iwpst3?GZGMpQX2V`%}M|o&m$2e!+n?!dLB?*X%~O_)*Vv7<br>zJeybuXoX?CsnN}F7N~GISTC-r0foUI{eR_{LK;wx>9g?v!!b{d|GzlqICZrYwH1^X<br>z`RCJqS&Q^vUO*QFo&daJ9RO^>>D)u^TohDEU(U6V1`Q#)ijq?C>9pE}KJgW9*wvD4<br>zUHWOGs?PDs=bNUZ#@#cY+!pjSwMnk#L*1Tjo}`Jix763F&P;?x<%(an-R@V;$`tPF<br>zSNz9j&n}_t(xl5q?MODJtU&??S)~aFe37{wGH10i^NQ=3V~Z7TY=HIqZbU{9Z}#VU<br>zsA(#eFiuz3G-3e;RdYnkRzc&!adz2)(Wkvn7fWc(F*iHi;ZcDCBUimF!teFr{7bc!<br>z5SVaikOT-vwE<!~T}A52#NyxtMh(@Fl}%=b{;-04qRpmM^=XwnUJ+Kqd5GR^@AE0E<br>zxe}KUf7_HWY*YX*`qYXZ_@d<(ui-zxSfFaNj>0~>1y#t-(~LcbExD(7AJiaSERwy?<br>z&KW9|1oTAaUuG<Dvc2bDCvBzrcAwa<!W|baK$?2|LHS)sN;|t|BiIdcfEa(92D}gu<br>zlkBg2=kV_DL2&0#o>Y()4ON^kYR(4Rulm+P9zkLPLuzWIZa}QxRflND(jk-7msxyQ<br>zLD&20<y0}y-h0l?7{<9Q{q?5ZE!%cv_uA31yrk5Bcf(jlI__l2r+gIQriW>G6CR?(<br>zc~^51Tf^RER@Jd#myuD7OP)>!_0+Fj2?dXmIN4k{qxPeq0iLxpy=f7Q&el@&6(SGX<br>z)dmszJgw^}nIESszbAQpwt1YoFOe5!r!%cA*`zrRh|5g+bH!uW-*p-(#j!Z(?ssm*<br>zrg8NtzFtuZT0Q8Dag$6wWyuQmKI_1!eo?P;gE?c(=M7a-?x)|kxNSpZlC^}A$Ef#e<br>zr9N~UD&;6GR&jp{Of^vn{-sukV3FfiQ5gwx2}p`#aGK#oULzDI8%~+?g^V3k-MMq4<br>z?x28xyfUZS1`9YqjrzUZ>KzL_b%4Ejy~HAl_ThI=koTda4{(6P63ZUIA3@Bnquo|t<br>z30-~U9*$py=2qt=Q1`+0_Fv0UbeGS}=NLHv%M{M8!UvSS{VZfaKDVBFev+Hy(vlt{<br>zX7Pi9!tY;!&Y==>yCTzR95M_V1H=pR7Jo)a@)ss^g9-}ytZ56&z<#W<te*u~z$2&2<br>zFK4<FtR3IM>$<_lz1?;V*|%h)CdDBywLJfT@yrH;m{Ai1&kq2~jQdBD^7q82%YX4c<br>zaJ<X1kRt-u7>3yud+Z~@Es;v=?D=FHqkvNzf6vG|8(r~ccpnkn>-<^gm%mq*469w-<br>zQvPnadd6Ukew1)B!!n?eRCTTshBr9#^k{A!cW}FgKucHD0e)#n@B@WTOQ%WVX!CTJ<br>zw|>)zy@RJXy83uJYge#Iw)4PmEu8$blll!&Z7E=*fSb14ux86?H;oe^c7jhOrSQpg<br>zgOFDPBIb1o6<!`C)Tp3-G=JT0{F?TD2MsPeZbd3)2b9Kg%^^T%N9X;hr_+R6IA2HZ<br>zil3lG@rk)&OwCnG9HfZ-HAQIBtDCdao%W~27+Yyn0Ypq=;qyzXs{5_FCx0k|g+{z<<br>zBRil~vm<5)&igl10w7?JhG>$ndzMGFhDx98XNeXRW#u@ILV&uUX?x%V>?nI&z33>1<br>zX+g5sni1zHePwgM5BMLXwC?FMeyDzcB1dC6FjzRCR?ZE`DuKl-7pN{+_zgJBsfli0<br>zZHoyw{Le$<O)Ru07V^>(F4S)>R{c(9$|*8xZ4`KaXyOU6x#S?!$nn9P{NQICVcxpQ<br>zwvbDvMi=21uzCEQr;s(|WJ!4ZQ5%4xw)o5krAKi`5MTvj5>VndRs(|d&Vaz?>0A{O<br>zvu;SfMO}88QJnK4+x7we`Y-npTO>XN1ee7u>G>a4$0{=L7#|Re3HEXz-Z8$HwfIDg<br>zhL?{9e8S*E{Fo@hW4qRqPPuhKxpvn5Lt+>XDzA}{&RsqK|Kv4H&c2n}Q;g=p+MU3A<br>zlGqt2Ac~jDlj8afL}*!39Y^2&LlBHN>@{U#Yo9J3uLk4;)aKlPJQ=w}>#$+nWYc^J<br>zxV=5le`)ic7)f-gfP3lU_(J|+gMGEr%9#^3lih|{>^-Mnxd{*mnwkPf6r5E>P3d|0<br>zg(1kJKTaD{T3yiZ_MJpsf{id@By}139YC;h#Lcb)dQef(EK4+lo0bCT;i%Miqcop><br>zeO{+)2~evt#??cByaQZa9Y^!5Irf|AT_Os`1yDWJjp4BZ5E-oziLCqXXV=1k&jwhU<br>zF^m3|aBjbo+5T*V6GUx{Xm9k!A;U;1o0^u<7#)-aGw$<Pu1-|QeVxsyEByVuV~cpQ<br>z3{f0BWVB~c1NG;PIN89-s*itH`fRD#0io^n8<DHzmkN~y3Pd(>Z)oZLo@T7A=hS^+<br>zK?S<Cz0&LD^Qn=0I8Kq``Fl}m9)+4Q^yLRZSKPn-3Hxqne<Ccm@;!V6hx!W+sYK^P<br>zQpa`O5qiUO-6v;qKw<N%7yn1$D9y&`=bN6Wie}9fo(8)Pfv5w5@Iw<?>{lXS@C6s3<br>zsyEASJW(M#GD?VjUtEa&0&@GN!_)7tSF^Z#fQ=N=l8ZJyl6J*k;p3Ct$gJ(Tk%>2y<br>zd<jF?hkgn#(#0V($gjv6^C5F;@qwb>`mO)z5+XUdTgBTT%&GGs1M;`s*C7QX^wELw<br>zev_P|<_EUOFw`3lQRFM0JJ3c0VENW{S)Vn{r|=U(Uh8-oBxpLn^doSz)h^oEzAWsb<br>z1>&+Q3vDFew6Uktqu?XaKurwSn&*LZO!*Xb+FWsY3|E$@VeLknBTwnB!|-N!yIGa~<br>z{jvi{nc`APhB3RWml0&!Hz(fxCVn?2x?1*y1d|Z?hTTnCOY`2_c?UwTn-qL_%mZF5<br>z94W;9(?OF$>^MWxJXn~XMLlM?4C$|bI(+2T5D@r%azEtNHVuKU1jnbib<OmpAGRK!<br>z>p0vQM{q*C++c;QZ<78@z(vgTboi-m@82H6UdA3zLVE>3MS)ymX`t9`-=8KpUf_xY<br>zSC1?=U3cU8Vs+)tSOzz6*$k>IT*#`VSoV697{U_{8$LMdB#K_6h8!@mYl3Q#fTM_M<br>zD|Zfj0r0B_IzvExCcUx-RACPq1W-!JOdIlA!841GAgRRc%gjh3+|=*l>4j^bD{HBE<br>z8qFI+jC#J{z=f%Nmp$JIY_`ycI-BgDQb8~=&*dp9KM|`B5JSuJ25XPw;5T)|PPMeY<br>zg5(Fl1jPTyis{9zwuxK_;>X0&MLSaIbFaGiMhrzo=D6xKeb&bLCcO1&!P?p6j!(ng<br>zD1A4KV~ck&atL45N+f}HSenAgHH&Q)Ma<>5P3Er^F2G{|HJ{-M8PPia?GOo?2RyUv<br>zmaG})@4&o46&Atq6Q-3zcu?qThS8k@+-qV<bC%nb!=Vu9=`)~QdFQJ!ylM|FG@OM&<br>z72l>GV7R85jW!dw06GBF?$Z?Vot)|h(LYF<{9vS?NfCY}km0<h>0hx9==*egappiR<br>z$hL}-HR$0DYjzaJk&j;H1M5`bwcRh@zirxul2FIvUz(;n+Vrf4N;>$Q?%QqIH@7Gu<br>zI-0DXLeu#I&Qp2Ds?Cq>+}n>7s2i)<yPPcF?}VCxaEDfHP|$~q-g{oB;GZ<?oJo|g<br>z(?9X;r+lka1ebE|@(TY##tAo|7skRsqCE?)bUFpH7qq!%sr!Cu5+3X7hIo!rf!K5i<br>z>-oTzY9HpRUk4gbpckRP#OVX7m3it3@aTdlg!Sj_=Kd_4?%Qvd6LuKTqz9T6fVi9)<br>zP4a^h6dIh(>vDwpwbZ;fTITLF)j?qJgIw6DVvmT{?0g3kko8F{E&!ZfWA}(JQ)?DP<br>zQOE%`;3siBY%N3s7&8-QP)PbaKU5&jpiUWA)WE$$P!kj7Dfih$*MVGc^T^cGydD9n<br>z%mi_)rBj$Ohz?pN|GGzkeXy$CS_69_9t*~{KRMTutDc%tZk$FQP(c_^lA<J<-KyX_<br>zriH}Us7d$$df^)0mf=DMYZLy}eXE4cq1lnbe-u#gR?RM!1*@b8X_~*4J>2~B%h|Ea<br>zYuD|KuCXdAXKs~EG&@&*?w&vv&{-7~=~vHZ9lmwRkw{i&Y>otMX~F)%r2!jW5V2?T<br>zts4pGmet``{YHa318s(dv?-vRc?LFV{d2rr8xYdxC-PI{rIQjjhFfK=)p6zrzc@DA<br>zhVAY^|LnC~s`E@m_>kWEJHxN91SCe#MH~kt0I2JifGKnlwb)AJL>9a#e*4#Q%<Y#i<br>zB0k&n5q>g$A1BArxJd;-G|(JB06XCL$vnd2aY6iOHM<-AK?$+(i)(`~0n@m>x^ypv<br>z&V7b^DZ|30`QB*ys8TAe4(ohn;GJ-K{JmH4=H9EVi@qO@(${Vk{Ihb`5zm#uF{;Go<br>zt5vL7wN{4!4tfpL)xO47(LcZ2it5tcb!uIVkusgNsG-u@nz|a(=^JPX*R!yH(~t-{<br>zSJ_MS<-~-8xF2xtjw=@&&eDz$Y@7iEHcDvcJI08jsgB0ywleGq4rSqelMi!<;p04y<br>z;yU@^PB?vr4sw`I;$DWp0PJgCMGB9z!~_<~i5CgPy-@f1nH&%^t8l!M`-|o7b`l?p<br>zE_J2YFRbZx4CpZkYs#HN9T)hrTentr93*yONh=0)gid}kz*@9qnKon)`?1gF_+GXU<br>z<^+mOt<b@CaIFS8mGaKN9(Oql>$&r6>{h5;dC_7je&QIk-7ua<cEIylry|Uh=lswP<br>zt4vkl_gEY&HjeP6fjns%fk<)C1eGrXdc`#*xzV=XPb5i>3E;FZV`YpM{Kv^-_>=gg<br>z-Jq+qfZ3Yxo^k|das5bZl6P0Fm>ulu!i)m@1ig*uY06SNK%m|Bj*P-2{2+-Xkcj6C<br>z6IKpZAKGX(nxLw(BfH8`0`{+s)uo<PLk8j%^Zbt0^IB`la~UKQT62pOCr)B}+2WIV<br>z6;(@3?%t5^xNaJ&kK1MMiDjWLFU|-K<4hNWk6!rg%7>9Wj5MT+^|%jgoPl5l(cY6%<br>zkW4%5TotN{y(HnW2b5{1h1_CF;@qCBVZp5YKM&q03?QAlPD`_w)7#&<$4Lz3Nai@;<br>zU18m9I-?13vAqOW5CL6K`MJ&ZpO+nMXC~YGo9}Uk>wn-~Bn|<~ZtuG$KyM#&vXp5(<br>z%;{LAi$f3MhjwuRHF`Ms#SL8VDqn#2BJ5oww>3SVecGKO0brMAq>Vt6TjN(8HY7LB<br>zV}P^=VwHCOr@I70v39Ei)UU-wD#KEgsme>Mg^V?n*ZJso?yT`x!KRdaozZ5M>buU^<br>zhVuej7xX-TmfB!JHrVr^q6*O)q9o@Eo!ea^IyGNZJ}$8o%dS#coYgpFxtJzNpNV_N<br>zUEYcY=$;wr0-*G2n#!bsD-znpN_4`{A2a@7h03^<1J1VyuM{JaLZ26j(pdovAj~fS<br>zz6!6aGu?O5p=P`;paB`a<cM17sbRF;sLG<N6tIK#sbNnw)w0f{J~E%2q0FEUK=B)^<br>z#-#F;?`I;w(0&|IJ~HnDCxzONgcLj&RroG5YD0q65H-`qxhrD0^mJA8tl4NqQ*(x3<br>zLb@`wn`qO^$ESuLX^Hlp=a!F#x=~mJBvr=ka9zjO@w3ktJAAE%?!3ho#t&)^|10Nt<br>zXS?t>^_+hnin{Qo6~WATZd0-=kZo!b<SN3sS$HV5e|p_-6oDQxDwHZ5C0uTnazbcP<br>z%E;7KbC0r1<tP{50Ivc4fZBQu4^@fBA;D-p3x1qlmr9|{j_`o!vr7CzZN7B?Whig><br>zeQgX^_47J0-gL>fC(uhfpLqct1r`4>Tr9Uq23<f81Ogpur+fJA&R{l$eL`xSdm7eR<br>z<g7a+LF^`{lq)2Nr`BfNiXC8H8vN%1vGdt({llQHSPo^a&E?ABWLQwM-|Q!610?c!<br>zn1B+betpn+P(W!#A$P9d4l-VpXvrGOENOcK?dWL=gIdj8bfb`t@i7th_+u3Zu5dYU<br>z)LNUPCJ_@Jit6B<@*qz>)rVD}d?q6sH1Aw&omu|Q*h0O7Wk>I2x|E%vqx)85`?+xr<br>z3ovgj{?y5~w!F$q<B#f?ayolLe;$IJzJjKN0g%hhoPS@bT%gtS(bCdy5C0R4Mh$EH<br>z`ycy^Qfp#8v{R{7jIgL`M>SESRbAPAEGpHrYv-zFXU+FCRm(nDI3-(AtX;3oFq^6}<br>zVBUEgw1ihOZtEWb3FSlJRf-x928zsd(tkwk=YMY{BZ*FVtw4}<2KrBPnzMyHZvn2S<br>z4G4U;XrAxgC?Md<ZF_tovIDXOym5f`V;A|tWZbGfIt_ystW3aUK>$~0ZcSqxO&Yuq<br>zW60_^5&QEn&>d;ilZq(`rdO@r_o!K?Ffj%76$rzD8PDXGP;UaMU+ih78&m$lsW}_d<br>zp+9&V&^e8iyc_X!e2h2#t=lI(m9H~U=gU0yo!*UFg1$|o4HgYxz@)!jsHg(gfjLY8<br>zi(cr)5Pb2i75KFSs70}>8fb$;2J?l08#<`b_VF1oCIN1<po3tu==qMuLomn~mtp{n<br>z1T8)21y|{JsL)u!$Dy6Tv`^R*>?Xo5De}8B*vPa5dBeeKt7RP8Ub2p>El+-Qt9&>*<br>z*p~-!X?9KKc2iAF3<TD#twRARG=Gr~KD$xS<pz)a&G#rA<0Rj`bM=1&AZ`e2a1Iej<br>zuxtS58V9%VHV9PBO33QEQ&SHGu3N5_=r7%m%hfb*0Vua0`2bn=A?fA2@r9?2BGxj#<br>ztqX~H+QSR;zDtgYMMc!*0C!I<fkzRL6Os&{qGSd{i7H~S!1nV<%t~o!?#Hox&pl&h<br>z`mhi}o-VL|uV%@%KN)^S!c`_+e3C!C+LWp=h&$|L-9JY=bJbHt1}q(KZQTp#WqmIt<br>zxjMWdSdZ@zRwJ;}YvMGycmMWypj|f=@O~7Y54w|KCqs9Vbs4a-b-Q=u>d5~bgYJNb<br>zZYP3fk0|1dF*CvUxC4WhC;`H>>@QWS(LR?jq2j{|uiNP?yuwBA(o>)3PzwdGTyevx<br>z2F;i%I}ci;<7amqS37nn4uWfiN~irCe>{)YvDH~v8>uFkc{vzd+hK4h1l<Cl-s{oB<br>zAstq4Z|eSRUC+~bwX*~BI8;vWbN7!Dv06Oy?^-1&i`w}0C(@m4jx@H-wwZQ>X$3rX<br>zGP0dt<Bi1@^xlA1K@4akwbX;MLH&WFC3HP*N;;rB&WbniFjDx-NHn?ya#KPlRxqF7<br>z#KA&{N?WGwXUBp#yJn^{?Kf^Bx+lxiO!jB3^<B`ZG*!-ak#5UN*siWOc;>y&V3Acc<br>z<z352dOHuRd`dDPv0-mfLs9ekP$~t%D^prhDSSl}j&&S#9{%<6NqBXe?}*+`$S7F;<br>zFxKlY2xsDUwY3wFf0Wynceaw(xQP+LiWAxpt~qCz^(+Wh^*B<hO!HvTqMiFlN~U$F<br>zvJ0!c-?j2fU?nWKTtJb1r<Nsn@dB&ztuzee9*?a&j9?7&pHzMxbW^P294cNdBiAMB<br>z!0_O+&q-l~GKmR!mIFih4L+g8O8wt)-{`?EPNUj2r`(ouQ4027Z}rX-X-Qw3q`=^g<br>z-AVo$zz+wTt;%Lk*j`dd&9%quawM#N#AMgN+(O+*$(>d7PW$$ZcP;f>Y^VL7?riWz<br>z+x5)sI!Q03pHx7Mg;03x{Zr_nyYooNPs^MmMX!<&{BXbL<hL|57nPZ}C(>DCZ@pl_<br>zZmkPfG?C<-FDoYv!G$cx=cjv7*{BJOzbiE=W_kRCk^79hFge;WStzV>b`>yL#aWc_<br>zy&W0cn!`7bk?KPVRk|H)UTf1^$N#m|Zg#GQW8Eh0tL{tXT&c68^)(MCQYy8_#fOV7<br>z_n|DCWvNcwB?#Z_DYCP4My1SVg8QB#mH2UqBYE7sY8}{s7F}tJfrdIAOW&1bmqm#m<br>zcF^~Qzr0DF;q&i8p`nd-2iLS<tJwC{e@|?+{Nbwp*mc5(0Ksa?W-q`I)`x9oGr4_6<br>z?MqqUMwr0x+-|Da$1(#WQn@tVB(U8CsY3_Tx1UgI0v<*hf%g=F1}kjK(^Q{5LGN9B<br>z#@L4U8>v}Gp|ODTf<@Ykuufv+@_->2_Z~6A`aCSl#<C86R;lj{Y?i3gv>dn_7Pr(t<br>zGPC>Z(fNngOq^L9NOJn0)wN)6iWRXK*1mR>E&ZRZTP-S(Q&(zyCelf%`dg+~#J=Nh<br>z$#S~Fao!!+J`LQyWA#Yu=1jk$k*{5a3E7BFb+C5H_X|)(Pk%dO3KZ17`n4k=DZ6<k<br>zZFFO0ne9Y~rOBnY^;OB2LF0WACCev2%+Ct%bEAR<;VAJJIPtUbVZ|BXtx`<#;mH38<br>zer=-&fMvPu#i~`U%0*O1rEXWo6L;<mERXM`HhxAT=)&@iHMp<7S=Feswt$5oiw0~F<br>zM0=h>D%P#|ETOoVQ5fIZDY-~E&>0PJbzR<q?hT6g+Pjx5BF4D!{6#QAkSl&yG9WOd<br>z-$i1Ewkr4@6{%_ZQiTZNg?YjXlOp#iE4>KRi_z(GX;8E3u6+akF^QIRavVc8oZNs(<br>zwA;$`2Ub+5T`?*-Hk>dMa^DwutWdorX`Ug8@L@y=mT%K+TDmb2?wH|}k;OU;@3W-S<br>z-e?TJq%<Ox-X<5N5Hw41L(W5SC5@)Ef-vDF+oi{^NC<z%`a~awcy`O&k(gM_RNiqS<br>z-mNG6GsCw=LXvm=H)@yOGhst&?-7#VK8CITr-dtzhqC+P4^ku)Whz6Kv6Y>Q#y%6q<br>zzJz))!r0Pl9m^OZ*=Z~zJ7X!-;0-S#TlLzP$vQ+RW8cY|_&w_P*L|MP=YH<<oO{nX<br>z_j}Jh-&5l&xEN@w5c)VbjCS=yIsnvzTq{+^z$d4E$+e@|F{d=wB#_HwpqDC$Df7UF<br>z*}m004}ImKC$b~`kN|KBtE48`wgOh=+$VrFG72fcbl`M;eIJ-2A(IWRg|uEFt;J7m<br>z1#zjR5ZDcyD_Wz~Mq)nGq+N;UFS)+DBAm%cqy|QPE+Cq}(a?;$EDoxOa~w>OTV~2z<br>z<;KKW{5QF`4ID`f<Mbe*>S%#PQVy_QmL}F3{A0VTVYsglLZWj9-o7mN4PG02%!V2D<br>zlrIXhqt4L<ayGkd-<1~n&746u%}T`i%^T8<Gft5Y7$&O?2Q)YKuY_~~N4_$+Qu#5C<br>zit)p(N-ao`o1{U@A!~>MU}HPP8QKOYotYxOzDR)aOT1wcV41!gB1I>fE5_6z;pM{<<br>z?_TWwbEZV2B6Rf3R3yNAW?iKx(Rjl@(eb`Cgbs_?$l}!SVnP&(v<EKGg2i_Rk6D_d<br>zuEQWL>}-Ld5+UMn8~hf2p?%gKIAR6q$3+8)-@y16?k?38jD<hn_T&d{hsXlnt;U&z<br>z!0=l--E_bty~mn{p_NOu5G=EO=2F=4*=Byxa?P+3*ewQs)@De*5ES*XZcjSJ1BUW6<br>z;Yd88nI&&s2;l^dB8Ifh&->Bs`HAxGQe6mf1N3YUq+YCPFe3y&4_p}D^i0+^H`)wk<br>z4wwN?Sf|$L>eak4jFzIjsogA#a`oYbe4tJ6#F6PY70rb@yrD))gnx>^Ct}W&UX0gu<br>zJl)I=KwpW0TcjRjGF%q-5JD!>#KMj2ppzdsgrgFZ-!fViIw>m9O*H|<1;6`IEthQ6<br>z(#y598;t=6nVEP%N!J^5$q$h(>K$8nUse!!LSHti3ns>2-Dgg|c}>wip2n?ukC6re<br>z!kh^u`HVmANQz7{uAfUj&w7$R-^r|gr5Dc@5<R4|8MekS0!;ap|5vJj(ix$5sJT(0<br>z6v#AnF<EHjWY>53<^%8ohLwMzc-L<OJ8Gl839cYzR3dlIvvwaZilB~HB!Cn5?*=O{<br>zNqZJaQ?Q|5e_*B%0DhJ$9^w+=Fv9~->6Gr8f(dYGl1~^ME=Q|VVHW%1$wIokr$y{A<br>za%=!OZ@EV=CAEnG!g}INdIAwa>&cY?D8k0&khS8E8;A@+@+kdOkOzn9bp>Vz+?!*K<br>zKf_H#avZncwn)-lekxme&=l&4tyN=Dz+_+7FshG-stbUFl^$M7zJm8Fk3q40K0D<A<br>zkWR0Y<iV8F4~Bz3^ZzWAb>Jz7w$LWqOGI%ehLB@OGbB&k6!bdL6(5^b>Gte1LKBuh<br>zWwlXv{D3lG<eY<OX2RoXNuVj>yI64eZ2J|xMep!$jIU?T00DzPX&~t>VfjN^8}(M%<br>z*>?Ae3=l~$PE8K6ZJz2$G?iCRXQntLn{+XSKt7E8c5U5$bb;rZCCzVk2tbV@-hfQB<br>zxY>5aznb}%up7HZ)#BoXe>6o7IHGT^xjzKc6$RG4MG-lZxr$y%65t9IaCaUw{C^oX<br>zIYnJncpv%@&)J8{k^`X4wi$v>E{xMW1JNTDpOJs2O~Xh@iL&txA=}NKcdqFd@4I(c<br>zNd(0{0LRi9cE#<1HmD(g;dpdBeh!p)CGj6YlB2nfFX<>ScIcZUMt{-n=qH*tvbY_B<br>z;W7Kud#97rsf;DQNsdR*<|k$f1_MyV9xjjeJDm0OEv`+GzfB?g@U)u9yJZHHRPZT><br>z>iJJbDZKo(`mqO4{so~^EkFH}fA{(t$k6#&OOc%O@+pOWPZuDaf++TiY-m&L9sTJ#<br>z`&~0#&YtWA9Y2k}U%LWFnDl@)ZX7-xDX)c&Zi|&iXuf0k^YamVH@5ka+Sf<VO?iIS<br>zec^t1<K0&m;e9%rR;CW6*-QRC*XZ^v&6QCy!CIU&p+H|uise+9UKj?7fN|tq0--TT<br>zwllfxLVtpiPx3Z@Hzx-O@a-h>a?+g8vQA+1KJw$MfJW@5Dlo+dKtc#gwX>!G`m~1~<br>z-JAj)lzu%h&OY)U_lluyx@DfYq31=G@vAG~T|lDw^hrSliDANxr-F~hmh=&5un0r+<br>zjP~>xzA4Ms-beNLE7mD}b*Hw(XAn!fv5!`bJ`mW53k#@Mj-Hzdqzr`x-K|^E*S?h)<br>zH@6|QE!+k9GGt)K57juVYRP((@p^TT%XIazU?R^}w(s^A?*8OSnX1Yj?A6Dll7bll<br>zV;iiV@^IeSMm95N$(h;=c8ZmT$;ZIhuxm+f`36<foVT-dgX~?+uA#pR!}BKUzv~-A<br>zm&}^hk|x%}=VNw#sbz(0_k!Qw`$x?w?gz2Q@>qB*w~+eufmFUfUOA65Qj5c1h@kC@<br>zdvIL~EchYXww1Q6BxL!-;@tcHbSkYkkqSc;xo<KmqE$S$_y!)El;ugjQ8@a&$D6sT<br>z#eSdHBt+e6s?W-geTAHG|CP7an@qJYW#7M?j$URL>*4ILIy?5mu57p5OutgyVivg@<br>zb5w_ag|ASri!>}gzLwap%3p;m!j_gMef{Br32hlRF2RoqS-U^$9WH~dZnY>;xJ<M*<br>zzP!+$-oH#K)uS5c%kJt><oe3cDa-lpv8*Q9Rk}XAfpLw+2&&;t*!kFvFDe}4&l*rl<br>z16F*Pa9Pq^x%z>G+p>K>L#0^|_u~Y&CmX@<fA|#zOgFqN^s~}0vd~|8_akI*vb$~2<br>z8$Kj&i2C?Y2G_-&l{)CUcyCL!jCbkYRuF2@Svo#)gUK;c7oD{1trH-q!ZbBb-!)0z<br>z5{Kzjnr*r{EPfc~vkoqz_4JLEt8Zrf5bl#in;fs+i|<0`+t>NxtPb4padmA<`?Xl!<br>z?9&TZlggW%SvG(5z2UqN@D!_~PexFCZIU{fvh@k5TOO!e7o>0o3u~q(mhMK!?iK^e<br>z!q$^wC_Y7>?G$D%Q>~3v2W`q*^X-uju(d5DC3&W}0J(Cu-`hx13lXs-nvPe0G7%FH<br>zOXcE*;iDl%_DQ+Kp8~(++QgJCxUshgsW$cax2C(@&v*3%!*bdbpl0rSoQv`E^QuD1<br>zM)1L7>;6yHO!|=I`)aAQj`M8<9rymC1cl*wX~#$b1JulY=ZQ_rm-9+Hy6oF*-K~;!<br>zFm*4DUvOiq>7v0cybQcvp!1}(L~Z-#t`0jH!Q7wR)t{MnYbbYXhe^t^sF$!}!VTwF<br>zUZ1XtMK7e8&edL+$oZ6XS>ZY^lh7hI_W`#FhvCYRyjn?bkDs7uF@&SygNFMXW*Q|c<br>z7AwPIIPWiWwHD}<)i&=(=*U-_&=+@X5*s<2Z*IdQht{CPQ>(Tp|5$n1p%ieYioTC`<br>zvGyOsu~JX6x5nq9bDX-2wc0rUCC|xl@9+_rDbx?=hK=)`j3a5UR}vN%9)?!$RbVB)<br>zt6Z}PUiv8zq&jr{D}JReAXBR8{%-EPD~Iv`=uoVHO?|;T?WSqmu>upH!_O?^zFPh&<br>zXRL2%5dT`AFaba^Y7Se)`+XKBoCQ7q`y7bX<{=(E_g8AQT-E5DOvhxDFN%J}YUfz><br>ziK&v1_(y3))>!QcmZIL-isx3SFAp0J!;Bs$)L&>oeQA=@wA2ne3b+Gff7y5h$IiTn<br>zubo95--B{T*?uq=w=*%nibjHhMz79b9!D^$P*VQV+NvUddNc2-V<*AAD1uHmEDn8V<br>zO>N|!b%~9w4Nj`9G3eQ{iuYlc+)392?@g4T#EG}0)OxM*JA+^y4dc%2dk7A8AXT!V<br>zg%+eC5)jWHutQd9HNalhO_v@dtL!;^JJ_V}TGNy5dCZ)Z+8_`)Xh54`%p$u(>_)Ve<br>z{)LwZe$w3d@{PHwKtUMCX8L!qV&ityj~ed_QgY>c$;pmn?AHoNjWP?owPnz_9*<KD<br>z(=M4C^#Y%L8Lh`2Q3Re|`={IPKTZE5tE3S_&^z9(*l$^MO*zmLgso}&W@|Zx-lm{m<br>zBUFp=maZ?9?s|#Gvh;DDA@KQj7l>cXjzY)S%HZIy2s5C*#<Vz9K)&U!W+8pGY2ln3<br>zdii>7(%h-U$NTZHbjMpBrz$4~3(|P5XZ)k=19OJ3n(!#ckD}Cd^XzkcN66$<&MwTc<br>zKUK13OE8K+<h<qFHvX*|v$+_>e+OBg8%4foOSe+DlhQF-7+YF^S)Bm|%KyJ8L)RPT<br>zV<41a@#2F0RYuRXnx$2e|KFZsL7)>8CfaCaH42Y9T?KKQ%!K$1fSsQ><jy^3X+`99<br>zW=+fP^VL(9v`a;b4CUqsM%aZ>r!LO2$v{m86ks@huFTsn4IZqDx5Ras%Jg1vFPTnb<br>zeW&swY=!299Gnzz6E@x_QC~FO?2xZ~%K7LQ)S}DJ=#6Cqk3BBUt}2$TW9)Jw?=s8w<br>zI%otn6e4N4fj<8eH<xR0-wxVjtb9BoOv~(FZ$<suxFTsdTp|5uwVARZ=}2s$<*xq<<br>z8~M2FJJLXqh;9o9?FO%SA$oNSLvjMe_g`6b=x#;ung=7rOXWWK$WJ!#Q9HUkztoL$<br>zLHZ#JYcu|^Oj4BKi=P>o9G9>X?Q@CRuvK-RL=Rj#bYGL$5bvet3D0MUnGw1k;NzZ9<br>zY7(%S5W1)5|8Q70r*1-M_ABpna4J@RrT>{uukK4BsrbI=`B#p#rG6WtX(~mdYcc_u<br>zaZrKrN?gY*7uT5P`{o&fJ5Z<Zz?e-ns-zB;Ofuy#E>9UwryOl`_TRus+Etwif+u#3<br>z<W)vCHt=a$u0{<^*i{Apx>>`}3?5k&S9DcSu|`tW1iLErhUY(gxYktK=yRNOUke7k<br>zkMRj&t(#Ma1M)okI$9BnA`@HsDuq&(CDoUgj^cdW-^2RE8*hx=G{4g^D>7NYDsynQ<br>zRM|7p1H{(%l^i+vd09)|v?RLyhAat(!ehJDy+wat_zhgVa*l(6wmeerQ|mrDuxb^6<br>Mx@&+e(|8#AKeclho&W#<<br><br>literal 0<br>HcmV?d00001<br><br>diff --git a/images/user/ctf-trace.png b/images/user/ctf-trace.png<br>new file mode 100644<br>index 0000000000000000000000000000000000000000..64a389c21b9bfc3ef57de7d8699b019ebfc7dfa2<br>GIT binary patch<br>literal 16038<br>zcmb_@Wmp}{x@O}9CwQ=h1PJaB++9L&ch>;H-Ce@QEkJOG0KqK*f=h6R;BLWTdhLDY<br>zK6B=|XYQZr2k2GR)kW23Rp0y8ihQRejgImP1pokaSs97<005f+eqKgK1plHPiVcCc<br>z7fv$TE&zav1O0^oGO`E(07cnaT>RZTD@RvH7b{06h^)9c#L3yw!rIOp06Z45RV~$2<br>z_wWU;S1!fmBLe=CcYKeB40$gW9e|riLr?JnOD=*UZyryj8(UHmo_OGM1YBHPKn$J=<br>zBU%*79MW%!{J7wPh^WE)b?*Y(nYQcgk*9`Pp`D70?D{dJE@ZS684eY$0JKsuGVHbB<br>z{_lP3znMh>QK+2&EaZAK3YSMJ7~sZFK!Aa=3#kKu@t8tI2D%h8yI4uWpE38v()C~h<br>zLSVXF6M5y418@NmuQ;(HKtu{AAUlml75EGf7!8@4Yy$6?03%xe?I|E2`zGBR2GISB<br>z0uSbMA^^cLkB|VY_<@QsjVMV#ixt4NkpKP`m}3H1Wi>5ifSM+tYZME$4nRf&SXClI<br>z-vIF5fYAUIl?M=#4&X|iYYLn(RAKGVgOW<G6KJM>D;cPZ%=7_CQ<IsDZd8_l0hikt<br>z);L3ixyLh|h&_-KbM0an06r(;fwR4M^ccmc8Xe`1Ys4^Q+V4bsrZh3xeA*f-cM<`B<br>zbyvTMCq|a~R{{Kp0rpS%uaDua3{XFRypFc0!xU)%KJP7PUN}KzBbk@bJU_qn`}dsO<br>zcQIY#K~3K$%O1ln%}2XiKY@qqtF?{|>Ogk=Kxz1!wVvTig+h|CPcK4DmbT-iADU2~<br>zA4sPtzss65YtiFws=WLVCy^0z!CpuiDfa2jkJppWW*e)F_i#e1TtJPD5R7*sQ;EJQ<br>z+#h*bEG^frjcWinZ*}bcMTZO*U=_SR=Kg#l{3!kTH4tDS`{@G!7)Vevs}0r*_ag&<<br>z#OFZz8d2iQZbHT`M3QcVrEb&*Bkm9}>hC>bSYjw<0VK{wZz_Vs=)y*7Na>AOeu<EB<br>zcBxo}B{^X*_o#ov5Ol)4Ge*worfUm)0WUg$jAKl(5CLNnr9~BoOpqRWL(we*|1z2y<br>z@-qTgg;G9|ONQ-zlo~``hV)#}8TM_so>WUB{{X-q^bpo2&GuJdor>Tuv<C6!5}sEf<br>zQu(OkX0B`*@%W!J$DO~v5{%)_+Zivn!d!?K67Og2+9gEd_-@C_+}A5s%ggv8$#kfe<br>zvI4EV?^TUP1zc<7mFZZmJN(N)$*vdN@a|#|V=_@0Ed?#5Ihhg&2{kA7!V8`ka3Lx^<br>zw3JCD@?U9Muy4N;ny|BlYsoND&Ag1qVZri_5dY3Y{W4OVowhjvR<`zw+T_bgsY!?T<br>zRC|o2nVd4OsFHpznAz4Lz5R<3!Y~l}JNtL<Z;s!@zbVdjQL;@$K76@R-Jp9vXd_3o<br>zg|)@Gg=n6}E~;LT@qW1^PYs(ZUPr7lukn4gN_Ytl=f{k<Bf<Ex@`aW8$y2Ya2&}HH<br>zt9M;nu$Pm`lv2kvCx`Z=cT;!aF5S`4!|;OpBP{8NG6|6gEs5L-tJ4&Uh^C^6`qfx@<br>z*bdTm(lOH=)wSpw>3#4L2T_vcl4+8O=~>iD%ZkcY%23rW)Q8mKOAS<gtEAL9R5wds<br>z{7NZTFUx*+ph~Q2S;}7$US?V1s3!cyPx~<vQM*^6S6Tdv%I8|c&9*)Wswq*u2P1_o<br>zdU@E#K(6mJwIlOBZuG5bkEE^9f@P(7Z^b#}I5g|uU;JeujI^2d;U>#f>BSCRaq5L%<br>z)C%s&n~gWbMVt!FZ035lWhtpCTIDk3D&^7#?c7yI#o0yelC9eJff%Cwa<qE1(w6a~<br>z2-!QT^Qz0mD8=}Sf_zt1%w@KP#Cfd}?wt<B$7wko1_3z=j>RjU?K^iQzATSwkM?)P<br>zSJG%&i1ldHh>K{WgaSXfJ~#@Hvh**Wsfg?Miij5)CmW}(ha@&n2oy|9#Y$nuSoi5|<br>zQg7P#+4mLDAkt9K$SdwE9%sB)Y%Y3J#IL}w&_6Ofl0Pz&&Xp<1Hp{+~xsy4Yx!Po;<br>z<DtXYSkm~-T(<7FPLcL;W1B;$&Rgw5Ep;9Jda26n%GWckm953t#m!1dO655-mc2D+<br>zjXxVpn}}+*<`5UF8tof>jV(<GESr8*^&Tg+C;7Jc#y$!np@+|7l#}X^`nh~{#^uxC<br>zTge#BIu`c*ahbBmVyQKTH8#hw*@!dr=DT&aYUY%*C4ptLOYlWRbfkRH5Ob;!b0%@$<br>z@<97<IoGQX`s-ekSJ|2MnLS4(i`B>6$JWQ;OS!|Gxo>i`Ib6nj2gKJ@wkCv8bCX$Z<br>zS1bIK#gzjs8+NEzOj!~&D`#t(3f;@DjZX-K{s=keZVGJ*@T{<}Xd4dmbTth$4Jr3J<br>z<`{;qiu+SNn>~9yPXNUMuVF0VA_GMObz$#synHA+<AnJZ&HvQRABo0%ZWhH8jSs2}<br>z+Ul;Puo^f_sHC{wNgGWZwZ;g2=eIjEj%2)T9Np`OMjIL)su?C6=M<s!YJx45%Y9-=<br>z++|hbP9jBOCDW2k`E50m92dP%8MBSR0#6HPi*O&ah4%2YR<@R`ojl1~X8I~_2fL2d<br>zhog(|jqDB7O>crUmH~Yy&%Du|%g|!{Qs$S8d?_Ld5lXy&or+@7m*B^|KF4u?9f#uC<br>zL)v3W$uhw`5iuvOM^C17E<>;A_31FNjmwkz2S*{}R&xk#X+oO<y25fMUk-kT8^oSn<br>zkguIB_)}uS2eC2=#iT~deameNx1kF2(7LA|4$)04WXVWBZR-;%5VV<48pVos)pY1)<br>z>5=Lz%{47LM<NH`rj+L}j2sQu4=yI~WS!(bAHD2(x&EoKFic*PiBxO5y~5^goxlgr<br>zMU+iE1copT#0r6LQH}KW)5_&XnyFQO?KEDBwt)uSgF)R5Ft!J%>L^>Gz6VRQNBYWI<br>zEZVCL#&==a#6ozHQB}B$1gUubb974{Tg2gxgPrM1e|;@2|K4miW-)28x4puYql=MJ<br>zmb#sa;ebBB@D+Vk<LlAYAIU|Q)DgPH*5F3*=7LUvZ*AtqKSxLSh1I^OU8>!waUV}E<br>zHyF>}I7}Q9d$;}JJe*$CZM%LH`q{Cl4x_F(Z82?rFMD5qEnF2@ws(_qZ?9jeWdGr)<br>zA8r!v5s3<;aklx_H0h+E+WYt!h68Dge)5i|>=Sn;bZ&I@*sQ({Dkllg-+R|DR<Fs><br>z`4-$_yerm`rpVn$ElF8y#4^q^q%u`A?sZLcTa<@|CT8|mydI<%$uYAy1++coF4TTn<br>zFYE<PC0U-2#bhUE`}#58E*UN6H+t`wj;`8ZI-ay(xvo!2K1c8HxABkaoquyZuUp*0<br>z(fp>FQO##)zwf#)@RT&A+~1njno-rPXWM-2)!yK3alJ>J!!x>k+3tCU|2#9D^Hy-V<br>z{ld%f`p5OvD*m#cGwtK(Q0u%q?QvzBa+~3$$dTy0_;UEPu<p~++{u!^O_%%Ui-{%a<br>zYsAptv8TkVcuaAG`1JUpF!Zp49A2TfZ#RUUANL-L#mCIXXmSXi@}GvP2=H0_Zl(`r<br>zM<>!I@>0)JlRE8v3Lp2o4v4B3`+EAwI(~X^uo+xx+#hwjFS(PR6s%$@|Mr3S(>+_=<br>z)?TTO7vColB_%z>!=+t3m~t>Jg8NN~smyyt0PuPZ00F@OaQh72_W<A{D*)^p0RUeb<br>z01!BSGW;P002~vt5~6Az3x~`0c52tzET<=)8E-EHHh0)~ErQqx(O%F{uPtFYy>!l8<br>zNhne&zmc*hXmDIm8(EQaFU)LRn3h{Kux6-inUuQUaGOT5PoZmXa+l}cYn08hYuTds<br>z5*E-+=!D41x>igiJaRGI%(9)e>B-p`Xq0&(4eM<&I`v?2cyV=-^-KiwRs)CyUR|C<<br>zMt~RE3t$#T4=w=<C;`Y|SP_k0iezw6f>*u(JHQiQ14zFHuJ`gjkcgyQQ9!FHwE?zA<br>zZ*}-JB-ZX0ENpD-2}K3qG#bDKh-QMJJvvariC}9ZLHp1_MwEfxO#-N)xBp!D&kb~r<br>z%~Ap)Qu0_}=g>bZbw08MG{NY>pW*?5C>QOe{*N}H{m(_izL;=nFisifw9tQ*zqQ8z<br>zJfQ|)0uKt9iH0yWFS`7ZSWzGu1h~pOp`COAI=%~-K+LeIFUvu963nNF2=F&0k55qG<br>zi6Ovn|2i9y6>V)S;Xtk<o2MNca&b~V-AR@yO}A9wzZ|0HUXKx=-ziw&7)%<vJpOQ1<br>z`P17Dv0nduxZiV8oBeG73kx<AfdCTNW73glAj7IPuu6v#)g-QHuv;-T`>ZaA#&=om<br>zAGTzCJms19G5*Qp$u#qF5d-kgSLUf;*;G#8XH=H>%2)#@D={?jW3eVin4#s7hwez`<br>z>1A`=PWZq_<fenX6RyWIKHnV7tLlE>0lB&AcdwTgXNos=b5()3|KUhmm#r)H>bAVR<br>z1X_ZGgnQV;V=JB`KElLp*yO_nP59MqhZar3!c}$gMaQdb8OUtl1HGZ#-&$&^k4d;@<br>zl^Y{^NF*EgYYZ@7-tS5i^g@2nGCXlghoqCcbw<p?2;IUo#<4JAGtvG%Q5@5*VU7Xx<br>zcWe)lWIfEwc~=XL&d-Zp5laSND@7bazKLVTOZ9({%5{@?zK(f{kFe4<g32dzHsRp><br>zF_~;K28Nk@Z8XM=OzK!bMmoJeZm;{aI_kJuva0o_`mW9UTx<);v-@1yGw|Hf$2!ug<br>z87qPR!##<-sKihN8`h6qa2tNxJCT`iaEeYa(khi}X_0fFqsn>ogFT-3dKO<%wRn}s<br>zCF$1Urtakg`@|q1D*;}pC<)NPgBN}X)CM9V2qAxa#D6aQj}88L6>3i4<$!vtVR8I0<br>z*b#=Fjp^UJ?dqeB^#d^_34CN_Jykb<P`j7TGe&lIvlH&;d3v|=3POJHbY6y(yYN_B<br>zFo>EtgrJgg69x4!rVsP3MHJjzSAyaFkAku(<WG-*hWh%u?D)ROtyhWmhVE*f>!+SX<br>zWYF=ayiiG5JM~;IInReaGW^Ak-|9TQx7*mP?}G;&R|-YuA_7?PqzCr}f;^r7eUu97<br>z#m>}nFX2T?z*=gsh`n5}p7a_5I&FSvf_4y|(v-8|w#RUr_6_;D<*&gdOCQy5gf56y<br>zl1-My<0w2O9>f>;C3w{$Q&Ad*ZRocLvnWM464-S=V1L*ILPj5(l2S$}iK3~9ltqTj<br>zEOO<$i-z4>zfS6CROD%V;8SFHUPvx4*4Pt#cX?-HZg{e>^ZxiFQ)M{akkgHT)15#9<br>zuKDPl#rro3@zSh<WTG_5^cOReH}$#_?{Rs{+nm(zx7AlmYn^0$Bd^Ryv<(quGRQ>%<br>zPLTkOSCj~O5MJcw=g-fnnFg$6I2P_F+jh<7;sb_t2~BNn0ctflljHe$50A;c2P80!<br>z)b;z<)*^iA672Zl%Lidv6cQF3+6wXE6ml=AwP7#I(bUj*bkY}6Le?e;tCO3nAwDUn<br>zPFp?B%>hEyI?1R_$*H<Eu9bSbGgz5fJ-<)s9x81qbO)b%<Y-mDaXZ08O~Xny^q6Qe<br>zguSP)aC9|!iNhmRQ&#zL^v>W&7)i1r<LdQHDwm}%!?b&?2Xf|d9&0wgvDRM_Up6D7<br>zk_tCIMAX5nY{&Np4Kl#iNe1TYu;Ik1WjR;~pn+1hYY@Rgz;{@=!h;;-d3)KlZMaUE<br>zZoX4vI2gLC+paii+aCgCIZw#xu}dYK<AC&%x$G~QNw`ED>yd-}!Kd)l(LG{JjUD(1<br>zQ=7?fcb6U^SLVLjE*b8=M3BgBVh93EMoQ()w<2>?%#*30gG||C2B93;Vv3rM3YG);<br>zirY^mEdLmeFY|wPlN2fgnJk4U#sdPh-1Zy~noLQ)B<)M2;5kMOEj-j74pr2QF=O?_<br>z5u1qDI1EJ{@lEy<w&j}ISWZ;zaTh#Q6zK*_v<!B7(=jP`QX~(X>j)!F-K!xU^pVj8<br>zvziLNhJH4NKYiiy7<gTeIrF1^$UinZ^vrBGcpNPUqh>hTx}fI&ghvz;2S+@lQ$Na3<br>zH!4pl;>O)zRNhG>G>rl5k~fEmixXgF<cMf~M)xZ&KJ*dn_5;8|<>6*^E+6}e{VBiT<br>zX=~dqy1vd!mKb`5-BTW_waTB<W}L45O^Ub@RvBRxev!o3u#9!EDp-kHzon&L1Od@)<br>zr%l@Ji{WSKrFfurmW7tm&^G%d2!XZt_8v9O2ujmo1;LgC4GQHZqN?ggK|9_Ky0lM^<br>zhs6x^B30Ks#t_bsz;Qf4Bz7v+my};+({(eJik#Ud-7OmL;877Z$MJbndDG}*9j{>u<br>z)S2x}`bUHJFm(*$VWUO(mtoB7*%MekWu*Fn-0(gPH}~<Y($r*<dMBf<2n$$f@eo2H<br>z1mOGB8xMO7@G&?uF>12*!Xu!@4Au;k0_l?l*hP2o!r5>OQ|{0o^9H?sY*rx^r2tA<<br>znJ@1x2>+6J0UJ<JM3JK)G6kq$eWu4B_yi9FyHRQ;yNine<5rFr5U}Tg`-!gGzFs_q<br>z+DaRJ>Wt8&6khL+{3UlZLgZg~6J|a?9(r2Xu)F7NQ(dm6TU!oZX{_(AX=_mv9Vyzr<br>z+jKqPids(^Lrjn<HcrM9a9Y**^-T~9xHN2!>0Y;$G=AS*G;Iq3Zm2yl$XekRPaH%0<br>zk3}exdwvdy>b+_YM9Mfp0yt-XZF*6+<%|6m*+p47IAGdCZu{_Ce2z&&V16aAXkTxQ<br>zEHmSK_eyUB4bJO$Qa*RYeinVYc{bNZ2UwtOb~f53l~~z+U!-9u)`~q)d}q`M!fB>d<br>zztZ_i+?0yJrXO^&nF@}BHfq=}$_)ker3m3+%xTNtApuSTQK{S~BH^7xU=40anUUGo<br>zHKFPeW4GO)^~B7o`pQOZQuJ$>J1?)GN6@sko%tR{ki(?MH5QSpZNilss0fK99e3aV<br>zi2Dqho1G0Ce_@~V<{mCzrp_=%F<3>8E}D!7-^LYDtZGr*kao5d+tT)MiepuNwmKbP<br>z3;*4W4;?!|^4aN+6(vUaG-5O(Rf<9vC4<xAVcNI_N{?xBFM?zW8+LXeT|~)8Pe>G{<br>z#mf(KxTyPrpp_zvCpzZ}R?5`fKDHZaF5+`~m4CP!l+-dKB7RWB0v`ICr*;><;+2=%<br>zobGLn)huX6w`Vr3S8kRDo!%7M$LEh8Nh&|TD5(n~XndwEi9#q23$m&z?bjrm4}EsI<br>zr1G#IT^h?>eo@`~B4&m7YWewQO6$b2$J@6Zp>uAP_uRPK6twR-usWh6lWq>X?ctY;<br>zRaq66JL9VF`P;b)4H7>0S6~Z|+frYskKd6)eIyvv6ml&XmTX7(s@wQhr-6Bm#WYk?<br>zs?hAej6C4|A18F(scSmM8`1OjUcmQKS$u015`@XjLKQcd#;6_%tP&yK*ux#&UHtRo<br>zqb{h1h?Vizb7lx*6^pRy8ctTbum)C(VFA_nPz8tQz^r9o(4z8X8f3zOErLAw%n>IM<br>zQwgelAN;!A5Ph0Et<HnZp9i>HyicfAuqfo~^Tv>4n&Z;LB<MrU_z+-Vsbz!ckP{@Z<br>zqZlbN6d)<kpC0>q0>-An^&rZv9#hW5fL@zWMp?r23=zuo?|;!5C08SYUS&F!bh?n8<br>z79+_<6kSzfD04-|5;LaiRLcGJS9Q-GL$feSkty4y)M$Yt9ddNV=f17LDU0ACi{7%b<br>zS3Ux~0m>|x8>*gI$_?(gjMvTf*(D#n$6dDJ@2cQyo8JIU%YlZZ_n3NQq<ytxh^HgV<br>zhFxCIHV=P(k=GU!qSG>CZb(cR4i7DZl^6G~iixu;Gl!3R=6+FQgkfaz2N&)0skJVZ<br>zxHZ?VtcC=)_nEdsm54AjvWg8=8QA*Wk@IGQJEjSQ6TY>O!2fKk+Sv9&2kMbfcNESN<br>zjuqcgs{fY~2l!YbT_8gr*YNiXNBB`3I{o%#WThu}*%5oGc&o_IG5QOd<4j}8MULC#<br>zsJgD;??=Q3z-V^~emLHduM4X5N@XR9rz{aJ8bo<uuJ#lv#(r9P>;KZeA=V?$KC^kr<br>zgHQeJK@r%_yWcoDp%w)sBDNtJW_;#klS-ELH8L+N%1HAeAl)!(20>}=ey9)c;8Kuq<br>zS(es5fee1i;{Tm3w}0?+MD^fY1j{*C4j%d4mt?`JA?pUw(_xJKw;%RkM^^_P6JJKf<br>z6ij!bWM;zF45GjTvy`Sz2PcISrAuS70?9qP{qeBl?+*TK@9+MhOjKI$i7juA`|^Y|<br>zfx1XOG_CPW$Qs{Un}49Yc?mqtFCuwkW_BhZiD{0{w_qzbx_3F$?q8#CZNso~rri5t<br>zE7A<(ti|@KDo!_m@r?JwS<t-xz!5cya!<8ev$o+(YJ)}gNhB!N_6B-}CXxg&_8^FI<br>za^k&7ry(R0weo_^R%8N$4frX4&B>#-#!smbTc8!z-W<-5l|3ph?0$Uy7p(f~hn;Xu<br>z)7F?B!Z?=YstmS$J_7iUcW>jke*{&eNU~>((PW0&)Z&JY&5zNmGvS-n*XQyGlE(KG<br>zF08*lviJrcP`f8<#)S?GfI%r;u6ox{Be*v&-v#2L?pDTqXtNk|w)ZCM6^e<S%}dPX<br>zRUOu9Y!n!y&9Zxxmiq9qT+yAD*j>FQY(Yz<wChga2fB?t>d!D&2IOH>>v;OBpbhCe<br>z3niV&dx5K?sg)i4$<>t!c)RCw!&fkU2tsn+5s6h)#6MK~^YQR|M_e`n?d<dAs=saA<br>zj2$$_(EaaSLi?!u6<>l>%|Z$J;OO;vuW}lk^mc27k;nH3%{K{u;P21k+sW6*#}RJS<br>z_&dG@d<4zz?5>o`<M9`Eo68e5XlRoHj8*jbB(GWmW|c{sx8iK5Q&6>T3&tLm#`Mv1<br>zq<9s~*=4?{f-&F|-Trl9o^^m??QaZAd3L=rbPaRvQw7?Mv?yugCLLpST<XbYr7vY#<br>z36q8lxyyx^brY*uo`J4~E~VT+SK$QlE-^~}!WQ>fbn`1Rac~8M8?jxlo3CvtLyUKv<br>z3u^dS@6UaWIJP-{%VA|m+T}a_@tXiQ8t|>U2*3BP<V62~hk&F?1#hT*dIZMlVG;ql<br>z?iKCp)T^>$y%OV0?@Br%-Oei|a6jw=cU9XDphP!}PK?1Nl3m&Xwomq?S?A<nPMcNv<br>zX*3kNd$gVLES$cra)Sh~V~1?296}9>-UPAQa>hPTxnc9vp7(2ZHMmrQz6zBTbO9`N<br>zyAT*|b}NyB*q7ULj?HrRRATSP$YT-(TW@oGwyYYp<R#;pwT$5uR&}k~-C0f_w$j$Z<br>zLnt$08{15}6rboT;jCVMA&Qmo(*j$OT2AcCa(<7kyOEhQtZFTt9yfnh89Ho$D|he<<br>zL4jg+q8kz=nf!?Lp94|P=6F#tram?(q_#80x<=Waf=ZjGSJ2pZx`4jBQi~J>DD>s?<br>z`dMSy9uT97{obCo9dG!+u)@0(tSrPIeso>kpHg&BfecHN&%t}Aee5inxXVdqZ5>>u<br>zb?QhPUwLzf5fV0xA?8QWJts@J9MtLaWD7X&2(^2+5a?#=qPQW)S1pD>B^$ruhXWPt<br>z&p#L!-@Q!9HoZ4%W=&X-dhY5vD!2~X{(1qp!SObY6LsFl`@1)EymlHQUUT<4olMDo<br>zXO7T)irmJH<WnZ-uAK|6OGS?t`eXQ6;mE%cv)aCTO3%BHMVHnEr8XWi?j8~id0Q;w<br>zyWV7C$4Q@!-X^^sIy~hmU>LU`%a1Eo^|*hKy^PoE<>7Zr)+=WxiQj05UuBuw-mvF_<br>zwQq(I@4NkUJ9NL36izT3`U^AJh9_ML7r`n6QL(clMuXM=m{@x_d&<gy;XPL3;Fl5R<br>z!ZQy!at~8idK|A*m6wtO`5|h2u@xzy)N*%){sCI-)>R6)5?baUzH6Jqqy3Gkp6Bbv<br>z{nrgyE?nVTSN0c{$<=mmilq7>+KjI+MpE*ujKMU_M(4w=%E_4tA9lZjKnjoSdX}HE<br>zx&!g$?0n(E2POeTkzjRlEjU24Pa4Jw-0wIol6=c2NBppObUH^un1f7}BiC)}-eu|z<br>zymIn93~Sad%m3W18VaTp2RNIOTvPPF_)mPlsC(e-UH8)zPyFi0v-4%i-47o*V)TvH<br>z@TlCjZSQ<hFolB<o;auo2Nc|q7jr4a&l9mKed2K=11^<nihutZpJUDc8RE(BpYvcY<br>znRLeQ96`^`7P^hZo$Px!SzK&<@y+3$PkWVLch$RL#z%Se@%l0rRrKMJ$56YWOR{n0<br>z3b2N6jctgv;N`%OCP2Nh!Hyik4WTm~m$Ra0Ke?cb6=nZ1#4atYEIG(LrIpI2_+)xJ<br>z1n<0~2(FC?i+XL9LcZVK3)eC`J9PJ~MtMZ=PnsJBS8>e|D|^ldB|bS1O-8{=Of>2I<br>z5UFp2HIwxndd*f@Vqv~tXq{}U{;oQ6rtI^;kdVlV{IOe?u`jrE_-y@huZ3}zMaySn<br>zwsqmy5>pe%)^Yk)#_9X?h^nu7_9(?V(%I?ZxB2c$?_+b}nhc1wxFSU`!az|4Hj$Um<br>z+dr8iSXjo(C`!)_QH_H{Y)NH~!|pTuOjfQ=F`FmZQ~oEfT&@K3$_XF;v^wp9nL&aH<br>z4K>^D;@$Bcv-j3>zBy6x{JvynpWfix)LtnTt(BZ>R5>Q6{-2pEMdnXP=1(z|N*8z;<br>zym?o|c~0@)Jx_xOlRt6apTTE=wbIF$r4ldqBtGefBDi5sMpA?Idea?){EPeaUp8LM<br>zfZdH~uX=(hxmn5$*<5+Sr1|}z-gWH_rN4_obZyT^!YdY?iKF>9QB_x(&g<tJwsbZK<br>zQ#OUfdS3Ptl{a1y&Al^Vwto0k442{gh+2*^OWlCl^aI$n)%@Y1%LIx)?@p7xjx`g*<br>z%)4^l?4o4<qrqv_@=G#0FW-i`>L!ibmTa9ZTkfbj_}2c|j3V^}reyxMI!RH}104{W<br>zV8h7~p~+^xnAuRuPostcCMCKqtBMD$Hobfbv9YPYQnd_cvaZYnzT8d-E9<0fvR%-W<br>zClgS<E>S{KD-Qng4bH3_!N6az?a2#&6JvUIb`CH!g^TV6K?7IIKS}?M-k2_cQtJgR<br>z?j&P`zX7K_I~q8}sXn1ufG9WTEr@)WT>Vo&_nY%2#{`e?EZ}*(OYYCcK_<${4&z4o<br>z_tS7YnqVt4SdL9&Jzlp5f@tl&e3s3Nd$`UP8<lBkILt=>-u)VXS*#Gg4r(Y~C!bkl<br>z-5Z&{+X=6H`S{T5f48;ugHar)A?|wnH>MV`otIot1MS*M^gkmI|MuixK;6I9{da|b<br>z>UJ9w9L=|{_{nXw8alR!qssi$u|lAD-rxl1krzFg|HXb+Xf7tn({DZoF$vdr#DPX><br>za_#AduA+E*2U<o9ehFC<uE>%KJDRD4tVq8xlO}&<+`{ntXQxa0axsaoK1_F5jsDAz<br>zhE2`-@0OXvq$xA*31X>5KeigVw5}PtKhJ7oQ|5bfiqMxeEbf1;50c<?)F>v6vN^JN<br>z9T9On0lYyLYk)YTVPG?@U5C+$VTIUe1V!wUp@R^xgv9rMP|tteps?_N)%{!He{Aqi<br>zYl++6g*Dh?$8({yjY1)Oj(EV@?z|9*zyo&BY;~UZm;wANjpXc;E~HKb!1ctl<#1D2<br>z;B<<=u01eJ3Vf8e^Su^f?B3?uk7Vzpb+0Yn&I%0SVI9%IP3D=TW$5~t4*j~)LL03)<br>zpgtXb>Ys?Xoy<oc3wlquf4~BJQhoT%(<ybI(csbGElg5|&eLO@g@Uo6=7e=*I|Ccw<br>z=}kixF5ZymJEDUo-8XU{>+kN6ncElF_(yVNvBQFir0l3@s{Q;S8ZY?5#8vPc>9Y5q<br>zb5dncBu$6lcIBW=-NUV)x$Wa`Dw3Nu_q+CB!nl~t>Ep-Or1jt!KG5@OIT>cpA_2UU<br>ztL{?{`q@n=@pc0Uog;yIgn}M7REJi!(qLV0;s@yKX_5WIaoKFy6I^zN^)q^wv%!lK<br>zE*pff=&>Fq2X6Jj8J)4W@#xZhsEx&wKH$W8n%F!Z>F<~^Hs(oNhwanB*D>sCMZ~H8<br>z94#S)+i(<TM)r?*#(D|2ni6Dj;{}GPLq|v3dCS#8w&Z}gsoE`inZ+BH?lGKIy>!<~<br>zwuBLGBi=q14k`)M%|`t=mq0DoHOY#wADZ;opEKH6&|?sq%SmOZhDrBW&<K4Akj@OB<br>zXLDEo^j3Z}AaA)o{LzsePXUezI%H7Z3$wq2bo^3}bqzf*K*5>tvd5)+psn8ZxIm@$<br>z%d>p#oxO#Xa|w6bLOVIAS)SG$uvtd;pa-MJW7(|_%<x;o_AyI`YV5jJuyauFYggq~<br>zhV}T>0?#J%J2!(DEcu}3>P_##Pd#~M7Q0+xM%Ov*(B3(I34zn@xC-3?fbIj$iFV8C<br>z=D6mW&Vov)4)aHKL&2dy%~CVR9~)EvuNtv|=aVD{1P6q;2WzND0~u#!bxSl`uL+i(<br>z)&p}j4rRy$9=tiSpxyd;tXYDxq#Cb5`M5$~uj;uLyqZ4M4$eZ^&KKGL4%6S(Z4ble<br>zlpmbqIB19`<ib#s<@IXB6n^@1z5dSL!%Uo?q-<m<1yq6yKWSOzh7Xd^4QbADE$RvR<br>zGrS;e+&ZY#aZvq!=b46?7q9dOClj(3b2_34u-g38Pf!ec@B4*C!O0@*gl@B3^shd3<br>zc)o%G6#6$TSQ&E~JsvsE2*F_%Z@X|8aVbfbT-?dERR8VDp7Jrhl}#I<$BCcbO?!sE<br>zH*ML|A_3%jVkas&M#r*-oXkjaL#vEeNA+J*%<#@mAlKanx>emqUFo+4+&{LSZaVru<br>z7cC2Ho?c@9@kat>*XI9_6g9Pi9F7`f37YfsgYZ+!7knPwP8Hitu3<ywzt{5>4XFf<<br>z7LD7OxU`9@jIlb0*@!LYysz(_I551)1sB6}AGT+=Z!@=GouAgyZ-*@hNW&V}*Vb3T<br>z{D|J|YlG&Y2-)6AZ{m~C*J|r-99{BBBs%@H*$Y8Xrl5E&9O@_9AG)6$$GjiGS$;iV<br>zo_2xUGjAgfA1>ZPU1<9eYIh|U8te7r4Xus(pm@MuO?hATIZ?;>@{{+1ri&NS^H7b1<br>z=^s*Hd5<DxN!(ot#wT7iT~QvFs#`RrOq;OTj_7(gm-Dg0VFD|w@6hQh+l`<LvA4wE<br>zb~j8SpMozAs~mS9%nrK{$3oubUO}y?eZ7jj=c)Di8qwfrC7%5783Xj$3^-{oB@*3V<br>zAMqVi;m9AL{;>fnQ7B+(UAusokAz4XbpJC@)Z}0k<A6@WujZK_;bQjQ$KwD*iQfJo<br>zZ3X`u{itQd<~(Wh#IHW%y~*C8P^#8oFs|-=X9J_vvfk=My|0(P3+b=t$JHm=r%Upu<br>z#^1M~9Vfmmq3cBKO+0%$3k_!1WH4P0zz#m&rvKBQr}B=XzQsE1TR0_W(UOPt-K8tC<br>zUWB}#c?(!pRuZRo4VgL8+5+~+ZNj<D%mt`6SyPq@j!UVXJ_Wk7?jLH*_%=!8OyBl-<br>zg;5z_l(We-Px|zkHYbkFf^TzThGI(hxCre$SYM1Ga2@lcXzC3;?5ICz6<!et&pymr<br>zQB<QZ^Y@6)o;p6CPN`SGV^7pgw@|}U|GgocIDe7wz-R|$h;^|3Ge`VyPyRDu++qp$<br>zrO4V;hkFR+<-~)(qgnkpr+rK^gtA2%&Wt{XHz6&q4!U$krqjKT{GJINi{LAW_>S<s<br>zq@6R$S*f)d$Dzba74vxoe6aAHrpU?nbc00;Tza<@4Gv=-{dv9A8|mU_s;uwAOd9;4<br>z8<c<c0QS7eG7m!oKk{;OZ+B14H9{h+JaK?SM5nmIzj-uIt1Y_!Uz7Z|>HizAo<ElB<br>z!@%M0XKvUVHX7b(?84VUA7KJF1m!%N<c2J&`-?1B1iW`QbII?vx(_M_P*4)$Kl*!4<br>z2P+>v&8cjKj%)?d$yd;T&b?e`$2WzQnQ@oXyZMwuJ%suE)Ky(oM=w8=k7?W_RCja`<br>zN6$hc#L^4p50^WfDCM1Q+MLupC+-FstLrHl=tRntq?<;LOrYDu-MAWXTaz8<pkac5<br>zAR~%ZCK;J64QjkaoI>&w1X+xWp*9G#hreUW-#NlRslvq3>w0*GtfH-s;j=W)`cvWG<br>zV<pMWV>d-kY};t#Q4V8Dd3X-*&bYUk-Z2;i7U5NPco3h@R^utqMo^kXBY=dPXx6<W<br>zEmNi>JH9k~PC&}fVWHF@#q<+5>%xW#E%C|?*9?uP1_n*#%1Q6fyI0eL9V<V^3YQLa<br>zbTCy?KvH$>(i8G#FzagM%lkC4cq1=?AO(8$?aIP4%ch7gbWR$c>t%mN$~#m|*FW98<br>zJZROkRYFU+^u&P|frGayq<D{o5)_<pk9p_cyoa#KX6$zDFq)#v9rExR)pKYFRR-bU<br>z4LZ}S!BxYzZKK#m^6ce)xrkqqWWn@cuH7L5Pt1%v>Bpr9VLr9!r`IB#3hF<c3X)6h<br>zWs#X<&ver7QF<(!0ZnGcRMg#zGWBLBUC(9&`Psox2lU#XZxk@%dsbWU>k1z*D6$pS<br>z7rGGWG*EG;QKI!L3FS&_Iwm4z6_yCQ%Nl3i9(XrAli*I<%%p0qZt1z`Wc-VJB%Yv^<br>zqntdG`0?}o8LxzP5Zy(;spu9S%zVCxN@dy$X?i6d4l>XQL>hG<5wNH{CwC|bSL1?$<br>z+y)<7_G&-Sl_i6jn5M!=B+MtP$cM?7iE`9C$O(~A%d#zRWfQ@~rKAlGLs`V6*!b+K<br>zfi8`#nq<7Vp9;+TTJvo{F-pi&iJ-u8GU=XuP#nT1TPa4E<w;V~^btr>5;uaTqN&^3<br>zF8}5U|0?`jT?<3X_t5YBnL0Jot7y44NB|Vn$jd`TR#g7XFpk(crRvs^V<ZfK1&u#v<br>zAV8OX&3%(icB5|q@?K1(1Oxw2U%M~<P;m-=ke)3ZsPpSSoj-`QtkeF&kuK@a8ZlxL<br>zs$L5b;Ar@KOQL}{UlFFoUTfkvN9MSgKdVt)2U(LcBiV7(6K8M#rd&Vwt&E82Dwg-A<br>zzZc{rgF9cGsl6nSuC7kI>v;Ip@#!8>Ow(z1$y$QoR%qXDIizyL_H3aQiGXu;W*c83<br>z=>=Ly7?{tcHWcCQRk=ezNOl+HD+M80_d#(Sl!?GTo!%&9;?EmIp**7tN>qWTDnP!m<br>zf$3@^RW1gpIgsH)-chuC(A{<WI(?J+D|!<|j<#YkDb~tE%e0OkGDQd4N$Yg*iI`9o<br>zr;HNuw0{3EyimY`*ZLj$oc;dfPj^d?&_dbD5gY)LLz{OJgy4EhX6Mii!hz8SMe4Pm<br>zOUvB4F9e$^anKD`qsmUa{F9msNRjosL2BS%Fe}(@*@P>#73-ed{}qT&{|&QFMSaxd<br>zPY{}p0~t#YCpB`z2?l!3=nNLx;6MTrta*oZ9+Wr{bPs}Cz-NEX5F?M@MF)1}_7c*)<br>zz5yLMpaMZ)zc~xTpCf1;`|C7!Px->S>JhS()C6%$2v`fd^2)_ms_A_)o-21lTK0R><br>z<}+6m5ahNXR5M3-ET8~6s(>cMGuOexuPKY81PhJ6$JMeLLmx?CHgUG#={|)>(3^*e<br>z%Kilb25eq!{DkL3$3lQ9GYMpr#ezU`<S11xiE8s9T@DSfSgfS+VlQ8Rvv&h|P^NNY<br>zJ~DB}<N)~-iA6?y>h~HFNoRN$aPFp*LG`oDJNxDCA7{BLdM3I-nt^>GbLMm3-i$47<br>zFKsS5BvGlCp21_SqoL%3Hw4)2^dbuGosH`G5~Nr@D*~L#o{|W-AvLb9qQox;f@D%s<br>zYVbEsFE~ujRZIX%vR%n|NPeUM8G=&-Lr2-2Es!$qaj1pDiY}JC++2~t?cpFzAV<dU<br>zdW;rl*z&Fp?$~Y_9`LBHCYWaC$yxXn2=ZtXX0YL-+1(;m16daB{#;>wQW|PIVOQpr<br>zktq^Lb(M{51btE{?ja!R_;gp$gc7uIgi^us)gDAWp(HxUd4kX`2#ed*!Dd!;fhuWu<br>zJC0}7+qWPE!offn!K}R~NHMQ_;DX8k*)x-{UQqIRAR-Jhb6^XXW~tpH(7cP><zsKf<br>zrf@(@J_C(4d08W~;xp}B{PW^-|LY426+BeNx*!GaXghAyXh!h{Ef@f!9GyEFZ%+X+<br>z2+{?TX|80Fq9P#CnK}{&LXLkEoksOqi3-IO@-IQ6a}JjQ_s#YER1|gQ>ME*RgT3he<br>zKG0WG%!(Ip0?xW|wNvO?2;@0I*~U+lzR)s9{o}9_Htm@$U7o)tzex6@;DCFJ@8Tbt<br>z^DB2n->C$=K`V}-ry0S_uV1~kF57-&he{r#quxawP^$;|8Y7U2FjY<3wOclGb3G@o<br>z*Ht_8f7lChh+Q`MF{CUQ4)XjX*_ZCQJ{Xu)*4^WC$TnGIApI#+am};m4**<Bm}UA7<br>zP-v<$l5~K7%Pnj1dUBf-p~+DA<CiZ~)~-Y#<W7PK<?=^J?=a%i!mGW59=G$(K}Yct<br>zPhC?z0>efg?VMxSLaG^p?iGeLFPY>!e}!Z`Fz#LWC{aN=U7o(ot8=ChD;Lw}bXvRe<br>z#M<93J>_Fb3{2YXCcS<k`-lU}sR(imV(i&L0L&+9QCxVLd}PTKEJYeDdFao2<2-7L<br>z?v|5iqM3q(C6*%fT8$1UZ>b`h1Q{B(*C<+B<$=pKKjto}+uUerOjSU9onarTYGpI@<br>zj0m53IxOW*o!9sEwT^PX$!=_x^y)h-d~MO#A-LiZ#MF^6b#<;A4<{hkfb4tmIV8vC<br>zgih<&Wsy(i;Lqos;TM<sFHBri0f$z&PQE|n-vsz#OmorKGFv+XuAZiEj!K11q~(c~<br>z^vJ$P$`fd)`Oe;JX0FciF8{5L4}C>6A6Q)pK@c8vnEcWf4A37yX@jC)H>y6<V)-Nd<br>z<l60Q=(qotQ+;*=^s9|=kOv22HRv$a?cP{$c@%R@?KjaZ{^+`y|1<!-?qU7G8YDk6<br>z{w79D0@_TonY2ZH5`&S^egrFssV0811|wHU5iQ89nYh91>^r|&mZtJ}wfz0l78u1Q<br>zoXA1O|MUJ1>h?dBn-!z`o0sq+AyydqvPG)f6i2S0@l$t~El{AqLV!JmJ^^><KjTed<br>zk-G}V=tb^W=CY%t=Sr`yu6}Qqf;2yJv*>GBFs`-b`>$nb5W|lhLNahtnb#g-^^k;c<br>ziKNT@@wj;qjFRz?fhx(qwV7u^qU_04=~CPkK0n-mFr6kIP3b0rNLLgB2fdMx)K}N*<br>z|Dq{(x&Di$^ekp4KNPe(z5$oC|4ma?xsM`=i8p%!Xt7&<76m^;-i~+iqRpx4M}wy-<br>za0pn^^s|;mzd6<P%AHJtM~k>7J|RP?H?2i2_Pg7y@LUmAfgtzM+^p-mZ5IqP<r?xc<br>zHFkIAFP%h&dQFADvF?1t$|j6CF`|i$e-Xaz&?73SauI!3oV#hI$~a)7O+EF-tWLWG<br>zUtZ-V>(NJR+C-F_|K4+I>WogWjFfrWAxs`1%*>I{n1TQ`1MHtllOH`x{s&5u%aL`e<br>zPyHIt)e<vTIC%6U@kFx&mDgw%>xuvUjmq~aSrNGXb|EzB9)^|<e_sEV-)(HBmfxPw<br>zirF~1gRbwqz}tIvNcUVKY_rP<XnCk^D}9hKo;V+?mFFq{=gPPAjioI!OCSE`!W9{o<br>z^#zgGL5h}_?8j&u3>|O^p2`79Gri7{)XF_On{N3`_pX!kd@wkI{Ny1aYzgn=Td=u6<br>zwwSIx6=f}vgbByo{I4Kz<*N_&xRl4d&CZERCDj>?aY`FB1JBn$A}Og=ex1mRPXU=G<br>zKS@VZ%)Y7VcGK<eNsy?X(H&|qR73?y@LA6Y6uMjZx}^#YNcp>LBTOcb7A^ols+8kr<br>zN4f}`)J1{kT^kRyNHr8p&g#%1i~jwxR{|Zzs53JojkI3DJ0Er*h`v^1taa@3>5&m5<br>z0!x~z(d&_VR!a?jF5SkpW2R=$pZ2!_UcWt9@TiWY>c`6YL?UE#@PNb`lorEUi{^JD<br>zh>7zD*D8<*FR1^BGjpFg+zsE{jqqO-q!NgEgA}BW_3_<Vk74#LJd6E&q@&xR7^?tm<br>z^$1L^jkM$Lq<trispIa;1sh`M@g@%o{o@RuzTFe>%ntaCH3Pq!$U6NoFl4sC+I!rt<br>z(*nOSq&t0|zIbZ2-JCXJGipXDaJyTRm*<P9Gj4nOeDb4P;3ZnLbr-{e2hB_ZC-M`P<br>zbyLad0x4m7R+kzhO6mwku}v@l$sRGH<TgcA&+UC7i_0cJq<tnFkvG8GS6nn+YeCwG<br>zFq1yJ$%$b|es2e0Rxbw}lX^ptyUZA)Hd7I68#`(t5)KCKi2B4$8?n8DH^1v$=KP+$<br>z?5tbJgCItfe8B~|*$99{{*=d;Li93|?#^t1#*G7htXJ&(T(`@wOfBtP&7aP1t6>JR<br>zP5&J48Q9r7yqP-_YH`3ZSgIu!_PSSuvc9y7{KJW5eFA;ged|9Sm@%P;2xq>UypsRF<br>z$wysov1B~E3VY7hz+?<*B%g+e?-nSd6r6~aAw`rILh+M?Y46(@H=oAUz8td0ek7Xu<br>zEu7M+Kqc~j&{NlX;VT3e4|2QVat)aZR8io%5?o|xD8-N_d>zZUJ!(B{qunk~N0}^}<br>zsV}#A_LtCU->w?XrF|-Rz?6<6S&6FLoFej*-yS)5bS8rV2LW3{TU28xV@DC+VdxOO<br>z@<yoA<30KhWua_^9&Pm}z6jL<(*(wpPq!9B@4m8DD%f*XetRgn_F&77Fr^_I%KYM_<br>z)LBg5gnoBF`Tw919i0FF(})NE(1;VUuZsH*y9k4^W3oAccAUdE&4QfVF;?uxE2Fuz<br>z{@N2}4{;<YF^UR#w}Fc0<gJ%`)^h??iycZc*P}Dn29;MnHh!C8SpLr=ni_0%Om8Z|<br>zQ;w6Q++%=t+s+KVzv^E^Ur~k_aAXIW<QY(~Bv)<l;6~0-5?)_1rGEdKpOIXeTBKg3<br>zF52#(QyxUgau0a2G%v!0gWg00A%fg$&w)sS#8=3_u?GKDaCNuJu<(1S^fm~RLToRF<br>zT2f7|*&zn<Qrj~ACScCiqWyO^X#G$(XhEUNU?`!hQi+h8FOHfdTWEZ(-jUWZwIfQC<br>zZjy(uyK06KNAI|Gr{M{vdhU|bSs)E_+yb&jb~LDx4Wrl)b+aiVvnjMh)B{Rj&kUv1<br>z19tQ+?3aSUa5c(ESIVDCqe1)S6xlMAc*<SsN980=W#tJ`v|#e&{^M6x3eBIGlhAfP<br>zdi}=g;g96eEayBs4TKDO;VRGhc*{B2`MWy)uL+o0I>PcbSSvMJx(jEeennM>r}5h{<br>z>EaG3F-X*&uPWtJ_h@fHkp+4XSr{1=BB(q~U43YjXQ(v)@yZ6Tc<SqUwSKdgP4Wty<br>zWOcR1pQ{;q!zR^opAjjQ6r<~JDpOxk>I$91H5=)y?DV7e&R8vaa0b3inXl+9u@NMh<br>z5n<#aeY8Dpwf5Dt*9tGKJ^LGCAb~;*t~|TBv`kP;Bx!mOHSwidF<jYHx5-kZp@0S|<br>zNacAvUNQEOmQ`2R!gTZ@;s;;7ZsE9>1;0rFUjNWpR(l9CAZu5bj>Z6`Xx$~alLA59<br>ztl~Qe2%YVv!+{WjMgrLSIO1P4o^~W2E@X`Kag)WOk19fnrb`J5*DN#7D<Dn`z+3e7<br>zesem!VbMw~w45lY@%LZT)MP5Vvs&x^<ETaYhvh}kyMAX7*qNxD<h18y!+A_yi|okt<br>zzftaN8;)WWgbi2*Mr(1Qrp1X_NfN3E{e;@{4{7yZ)&;HnZwmii-M{fzu44!TxIpAT<br>zI9z4|@P!&c0SE#JZN;EHx}3sB$ap#FA&I~xASRgGLuEu4kJbhE8BwJ3^Qtx6IPzz*<br>pfY5(^D@GRJ0rcRo?w{d+x3;sgB{vq}cYgsuR#Hi#O3Wzee*yMzYQ+Em<br><br>literal 0<br>HcmV?d00001<br><br>diff --git a/user/index.rst b/user/index.rst<br>index 8cbcd1b..a764fe8 100644<br>--- a/user/index.rst<br>+++ b/user/index.rst<br>@@ -52,6 +52,8 @@ to the Community Project hosted at <a href="http://www.rtems.org/">http://www.rtems.org/</a>.<br> <br>     tools/index<br> <br>+        tracing/index<br>+<br>     support/index<br> <br>     glossary/index<br>diff --git a/user/tracing/captureengine.rst b/user/tracing/captureengine.rst<br>new file mode 100644<br>index 0000000..f0e2b01<br>--- /dev/null<br>+++ b/user/tracing/captureengine.rst<br>@@ -0,0 +1,10 @@<br>+.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>+<br>+.. comment: All rights reserved.<br>+<br>+.. _capturengine:<br>+<br>+Capture Engine<br>+**************<br>+<br>+[TBD]<br>diff --git a/user/tracing/development.rst b/user/tracing/development.rst<br>new file mode 100644<br>index 0000000..ad74d8f<br>--- /dev/null<br>+++ b/user/tracing/development.rst<br>@@ -0,0 +1,12 @@<br>+.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>+<br>+.. comment: All rights reserved.<br>+<br>+.. _development:<br>+<br>+Tracing Development<br>+*******************<br>+<br>+RTEMS trace is an open source project currently under development.<br>+<br>+This section can contain how to build the rtems-tools after making changes to the trace linker. <br>diff --git a/user/tracing/index.rst b/user/tracing/index.rst<br>new file mode 100644<br>index 0000000..d2d9993<br>--- /dev/null<br>+++ b/user/tracing/index.rst<br>@@ -0,0 +1,25 @@<br>+.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>+<br>+.. comment: All rights reserved.<br>+<br>+.. _tracing-framework:<br>+<br>+RTEMS Tracing Framework<br>+***********************<br>+.. index:: Tracing Framework<br>+<br>+RTEMS Tracing Framework is an on-target software based system which helps track<br>+the ongoings inside applications, 3rd party packages, and the kernel in real time.<br>+<br>+Software based tracing is a complex process which requires components on both the<br>+target and the host to work together. However its portability across all architectures<br>+and board support packages makes it a useful asset. A key requirement in RTEMS trace process<br>+is to take existing code in compiled format (ELF) and instrument it in order to log various events<br>+and records in real time. However instrumenting of the code for tracing should happen without rebuilding<br>+the code from the source and without annotating the source with trace code.<br>+<br>+.. toctree::<br>+<br>+   introduction<br>+   usecases<br>+   development<br>diff --git a/user/tracing/introduction.rst b/user/tracing/introduction.rst<br>new file mode 100644<br>index 0000000..596bc25<br>--- /dev/null<br>+++ b/user/tracing/introduction.rst<br>@@ -0,0 +1,97 @@<br>+.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>+<br>+.. comment: All rights reserved.<br>+<br>+.. _introduction:<br>+<br>+Introduction to Tracing<br>+***********************<br>+<br>+Tracing is an important function which has several applications including identification of<br>+complex threading, detection of deadlocks, tracing functions along with their argument values,<br>+and return values through progression of several function calls and audit the performance of an<br>+application according to required specifications. <br>+<br>+RTEMS tracing framework is under development and welcomes contribution by users.<br>+<br>+RTEMS has the following trace components:<br>+<br>+- RTEMS :ref:`tracelinker`<br>+- RTEMS :ref:`capturengine`<br>+- Common Trace Format Integration<br>+<br>+<br>+RTEMS trace framework can currently function using the following methods:<br>+<br>+.. _tracebuffering:<br>+<br>+RTEMS Trace Using Trace Buffering<br>+=================================<br>+<br>+TBD<br>+<br>+.. _printk:<br>+<br>+RTEMS Trace Using Printk<br>+========================<br>+<br>+TBD<br>+<br>+RTEMS Trace Using CTF<br>+=====================<br>+<br>+`Common Trace Format <<a href="http://diamon.org/ctf/">http://diamon.org/ctf/</a>>`_ (CTF) is a binary trace format which is fast to write<br>+and has great flexibility. It allows traces to be developed by bare-metal applications or by any<br>+other C/C++ system. RTEMS tracing framework can benefit from these features of CTF. <br>+<br>+A typical CTF *trace* consists of multiple *streams* of binary *events*. The *metadata* stream is a mandatory<br>+stream which describes the layout of all the other streams in a trace. This metadata stream is written<br>+using *Trace Stream Description Language* (TSDL).<br>+<br>+.. figure:: ../../images/user/ctf-trace.png<br>+  :align: center<br>+  :width: 75%<br>+<br>+A binary *stream* is further a concatenation of several packets each containing the following:<br>+<br>+- A packet header<br>+- An optional packet context<br>+- A set of concatenated events each containing:<br>+ - An event header<br>+ - A stream-specific context<br>+ - An event-specific context<br>+ - A payload<br>+<br>+.. figure:: ../../images/user/ctf-stream-packet.png<br>+  :align: center<br>+  :width: 75%<br>+<br>+All the headers, contexts and payloads are written in TSDL using CTF data types. CTF supports a rich set of<br>+configurable datatypes which makes it possible to describe a larger variety of binary structure. Moreover types<br>+in CTF are organized as type classes where type specifications can be inherited to allow deriving types. These factors<br>+make CTF flexible. CTF enables fast writing of binary data as it usually involves appending memory contents, as it is<br>+to a binary CTF stream. CTF streams are capable of being sent or received over the network without any data being<br>+written to disk and hence can be useful in transporting traces from the target to the host machine for analysis. <br>+<br>+Due to these advantages tracing using CTF will prove to be beneficial for the users.<br>+This method of tracing is currently under development. Currently the RTEMS tracing framework is able to output<br>+trace data in the form of trace buffers, console output and csv files. A conversion tool which transforms<br>+these trace output formats to CTF will be viable approach to generating CTF traces. In this regard we utilize babeltrace,<br>+which is described in the following section. <br>+<br>+Babeltrace<br>+----------<br>+<br>+Babeltrace is an open source trace format converter which can be used to convert RTEMS traces into CTF.<br>+It is also a reference parser implementation of CTF. Babeltrace currently supports the following output<br>+formats for traces:<br>+<br>+- Text<br>+- CTF<br>+- CTF-metadata<br>+- Dummy<br>+- lttng-live <br>+<br>+Babeltrace comes in the form of a library, python bindings (python3) and command line tool called ``babeltrace``.<br>+To install babeltrace on your host you can install a distribution package or build from source using tarballs or<br>+git repositories of babeltrace. Refer to <a href="http://diamon.org/babeltrace/">http://diamon.org/babeltrace/</a> for further details.<br>diff --git a/user/tracing/tracelinker.rst b/user/tracing/tracelinker.rst<br>new file mode 100644<br>index 0000000..6685367<br>--- /dev/null<br>+++ b/user/tracing/tracelinker.rst<br>@@ -0,0 +1,10 @@<br>+.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>+<br>+.. comment: All rights reserved.<br>+<br>+.. _tracelinker:<br>+<br>+Trace Linker<br>+************<br>+<br>+[TBD]<br>diff --git a/user/tracing/usecases.rst b/user/tracing/usecases.rst<br>new file mode 100644<br>index 0000000..418e8b8<br>--- /dev/null<br>+++ b/user/tracing/usecases.rst<br>@@ -0,0 +1,109 @@<br>+.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>+<br>+.. comment: All rights reserved.<br>+<br>+.. _usecases:<br>+<br>+Tracing Use Cases<br>+*****************<br>+<br>+Following are the use cases of the tracing framework that are currently under development:<br>+<br>+Function Tracing<br>+================<br>+<br>+Tracing the entry and exit of a function as well as the values of the arguments and<br>+return values can prove to be an important application for the tracing framework.<br>+<br>+Objective<br>+---------<br>+<br>+This use case can prove to be helpful in debugging of applications for the users. It can also<br>+be used to understand the working of existing application code bases. Capturing of argument and<br>+return values maybe useful in tracking unexpected output results from the applications.<br>+<br>+Requirements<br>+------------<br>+<br>+The current tracing framework provides this functionality with :ref:`tracebuffering`. The output is<br>+provided in the form of printing on console or saving the buffer in the form of a bin file. In order to<br>+develop this use case using CTF we need to be able to convert either the bin file or console output to CTF.<br>+The saved bin file must also first be transported to the host from the target for this purpose. On the other<br>+hand console output could be written to a text file which can then be converted to CTF.<br>+<br>+Example<br>+-------<br>+<br>+As a start to the development of function tracing using CTF we can work on the fileio<br>+sample testsuite and trace all the calls to malloc, calloc, free and realloc functions.<br>+Along with the calls made to these functions the trace must also capture the values of<br>+their arguments at entry and the return values at function exit. As an example of an application<br>+having the following progression of function calls:<br>+<br>+.. code-block:: c<br>+<br>+  #include <stdlib.h><br>+  int main(int argc, char** argv)<br>+  {<br>+    int* a = malloc(sizeof(int));<br>+    free(a);<br>+    a = calloc(1, sizeof(int));<br>+    return 0;<br>+  }<br>+<br>+<br>+The trace of such an application must be output of the following kind:<br>+<br>+.. code-block:: shell<br>+<br>+  Timestamp1    entry of malloc > argument value<br>+  Timestamp2    exit of malloc < return value<br>+  Timestamp3    entry of free > argument value<br>+  Timestamp4    exit of free < return value (null)<br>+  Timestamp5    entry of calloc > argument1 value, argument2 value<br>+  Timestamp6    exit of calloc < return value1<br>+<br>+There could be additional columns of details including current priority, task state etc.<br>+<br>+ <br>+Tracing Thread Operations<br>+=========================<br>+<br>+Tracing thread creation, switching and termination operation in a thread's lifetime within an application.<br>+<br>+Objective<br>+---------<br>+<br>+Real time applications inherently utilize parallel programming which entails several<br>+tasks executing simultaneously and competing for common resources. On single processor systems<br>+the CPU performs context switching between each of these tasks rapidly. By tracing the creation and<br>+termination of tasks as well as the context switches between them one can possibly identify probable race<br>+conditions or complex threading operations.<br>+<br>+Requirements<br>+------------<br>+<br>+[TBD]<br>+<br>+Example<br>+-------<br>+<br>+A sample trace tracking two tasks Ta and Tb could have an output of the following kind:<br>+<br>+.. code-block:: shell<br>+<br>+  Timestamp1 taskid Ta CREATED<br>+  Timestamp1 taskid Ta SWITCHED-IN<br>+  Timestamp1 taskid Ta BEGIN<br>+  Timestamp1 taskid Tb CREATED<br>+  Timestamp1 taskid Ta SWITCHED-OUT<br>+  Timestamp1 taskid Tb SWITCHED-IN<br>+  Timestamp1 taskid Tb BEGIN<br>+  Timestamp1 taskid Tb SWITCHED-OUT<br>+  Timestamp1 taskid Tb TERMINATED<br>+  Timestamp1 taskid Ta SWITCHED-IN<br>+  Timestamp1 taskid Ta SWITCHED-OUT<br>+  Timestamp1 taskid Ta TERMINATED    <br>+ <br>+<br>+<br>-- <br>2.7.4<br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 5, 2018 at 9:54 PM, Gedare Bloom <span dir="ltr"><<a href="mailto:gedare@rtems.org" target="_blank">gedare@rtems.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Tue, Jun 5, 2018 at 11:40 AM, Vidushi Vashishth <<a href="mailto:reachvidu@gmail.com">reachvidu@gmail.com</a>> wrote:<br>
> ---<br>
>  user/index.rst                |  2 +<br>
>  user/tracing/development.rst  | 12 ++++++<br>
>  user/tracing/index.rst        | 25 ++++++++++++<br>
>  user/tracing/introduction.rst | 90 ++++++++++++++++++++++++++++++<wbr>+++++++++++++<br>
>  user/tracing/usecases.rst     | 77 ++++++++++++++++++++++++++++++<wbr>++++++<br>
>  5 files changed, 206 insertions(+)<br>
>  create mode 100644 user/tracing/development.rst<br>
>  create mode 100644 user/tracing/index.rst<br>
>  create mode 100644 user/tracing/introduction.rst<br>
>  create mode 100644 user/tracing/usecases.rst<br>
><br>
> diff --git a/user/index.rst b/user/index.rst<br>
> index 8cbcd1b..a764fe8 100644<br>
> --- a/user/index.rst<br>
> +++ b/user/index.rst<br>
> @@ -52,6 +52,8 @@ to the Community Project hosted at <a href="http://www.rtems.org/" rel="noreferrer" target="_blank">http://www.rtems.org/</a>.<br>
><br>
>         tools/index<br>
><br>
> +        tracing/index<br>
> +<br>
>         support/index<br>
><br>
>         glossary/index<br>
> diff --git a/user/tracing/development.rst b/user/tracing/development.rst<br>
> new file mode 100644<br>
> index 0000000..ad74d8f<br>
> --- /dev/null<br>
> +++ b/user/tracing/development.rst<br>
> @@ -0,0 +1,12 @@<br>
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>
> +<br>
> +.. comment: All rights reserved.<br>
> +<br>
> +.. _development:<br>
> +<br>
> +Tracing Development<br>
> +*******************<br>
> +<br>
> +RTEMS trace is an open source project currently under development.<br>
> +<br>
> +This section can contain how to build the rtems-tools after making changes to the trace linker.<br>
> diff --git a/user/tracing/index.rst b/user/tracing/index.rst<br>
> new file mode 100644<br>
> index 0000000..ad22439<br>
> --- /dev/null<br>
> +++ b/user/tracing/index.rst<br>
> @@ -0,0 +1,25 @@<br>
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>
> +<br>
> +.. comment: All rights reserved.<br>
> +<br>
> +.. _tracing-framework:<br>
> +<br>
> +RTEMS Tracing Framework<br>
> +***********************<br>
> +.. index:: Tracing Framework<br>
> +<br>
> +RTEMS Tracing Framework is an on-target software based system which helps track<br>
> +the ongoings inside applications, 3rd party packages and the kernel in real time.<br>
> +<br>
<br>
</div></div>I don't know how it is elsewhere, but I would prefer to see the Oxford<br>
comma here, i.e., "3rd party packages, and the kernel"<br>
<div><div class="h5"><br>
> +Software based tracing is a complex process which requires components on both the<br>
> +target and the host to work together. However its portability across all architectures<br>
> +and board support packages makes it a useful asset. A key requirement in RTEMS trace process<br>
> +is to take existing code in compiled format (ELF) and instrument it in order to log various events<br>
> +and records in real time. However instrumenting of the code for tracing should happen without rebuilding<br>
> +the code from the source and without annotating the source with trace code.<br>
> +<br>
> +.. toctree::<br>
> +<br>
> +   introduction<br>
> +   usecases<br>
> +   development<br>
> diff --git a/user/tracing/introduction.<wbr>rst b/user/tracing/introduction.<wbr>rst<br>
> new file mode 100644<br>
> index 0000000..3314447<br>
> --- /dev/null<br>
> +++ b/user/tracing/introduction.<wbr>rst<br>
> @@ -0,0 +1,90 @@<br>
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>
> +<br>
> +.. comment: All rights reserved.<br>
> +<br>
> +.. _introduction:<br>
> +<br>
> +Introduction to Tracing<br>
> +***********************<br>
> +<br>
> +Tracing is an important function which has several applications including identification of<br>
> +complex threading, detection of deadlocks, tracing functions along with their argument values,<br>
> +and return values through progression of several function calls and audit the performance of an<br>
> +application according to required specifications.<br>
> +<br>
> +RTEMS tracing framework is under development and welcomes contribution by users.<br>
> +<br>
> +RTEMS has the following trace components:<br>
> +<br>
> +- RTEMS Trace Linker<br>
> +- Capture Engine<br>
> +- Common Trace Format Integration<br>
> +<br>
> +.. note::<br>
> +<br>
> +        I could create separate pages to explain the aforementioned components in detail.<br>
> +<br>
</div></div>Remove this note, and create/link the separate pages with the "TBD" stub.<br>
<span class=""><br>
> +<br>
> +RTEMS trace framework can currently function using the following methods:<br>
> +<br>
> +RTEMS Trace Using Trace Buffering<br>
> +=============================<wbr>====<br>
> +<br>
> +To be completed<br>
> +<br>
> +RTEMS Trace Using Printk<br>
> +========================<br>
> +<br>
> +To be completed<br>
> +<br>
> +RTEMS Trace Using CTF<br>
> +=====================<br>
> +<br>
> +`Common Trace Format <<a href="http://diamon.org/ctf/" rel="noreferrer" target="_blank">http://diamon.org/ctf/</a>>`_ is a binary trace format which is fast to write<br>
> +and has great flexibility. It allows traces to be developed by bare-metal applications or by any<br>
> +other C/C++ system. RTEMS tracing framework can benefit from these features of CTF.<br>
> +<br>
> +A typical CTF *trace* consists of multiple *streams* of binary *events*. It is upto us how many<br>
> +streams we want to divide our tracer generated events into. The *metadata* stream is a mandatory<br>
<br>
</span>Delete "It is upto us ... events into." This is an unnecessary<br>
statement in user documentation.<br>
<span class=""><br>
> +stream which describes the layout of all the other streams in a trace. This metadata stream is written<br>
> +using *Trace Stream Description Language* (TSDL).<br>
> +<br>
> +A binary *stream* is further a concatenation of several packets each containing the following:<br>
> +<br>
> +- A header<br>
<br>
</span>"A packet header" maybe better, more precise?<br>
<br>
> +- An optional context<br>
<br>
"packet context" ?<br>
<span class=""><br>
> +- A set of concatenated events each containing:<br>
> + - A header<br>
<br>
</span>"An event header" ?<br>
<span class=""><br>
> + - A stream-specific context<br>
> + - An event-specific context<br>
> + - A payload<br>
> +<br>
<br>
</span>On second thought, it's not clear to me if a user needs this much<br>
detail about what is happening inside CTF. They want to know what are<br>
the advantages/disadvantages and how do I use it. These details about<br>
the packet formats may be superfluous, I guess that remains to be<br>
seen.<br>
<span class=""><br>
> +This method of tracing is currently under development and can utilise the following 3rd party package:<br>
<br>
</span>Rewrite this sentence to better introduce the reader to the need that<br>
is filled by babeltrace.<br>
<div><div class="h5"><br>
> +<br>
> +Babeltrace<br>
> +----------<br>
> +<br>
> +Babeltrace is an open source trace format converter which can be used to convert RTEMS traces into CTF.<br>
> +It is also a reference parser implementation of CTF. Babeltrace currently supports the following output<br>
> +formats for traces:<br>
> +<br>
> +- Text<br>
> +- CTF<br>
> +- CTF-metadata<br>
> +- Dummy<br>
> +- lttng-live<br>
> +<br>
> +Babeltrace comes in the form of a library, python bindings (python3) and command line tool called ``babeltrace``.<br>
> +To install babeltrace on your host you can follow one of the following methods:<br>
> +<br>
> +Using Distribution Packages:<br>
> +<br>
> +1) On ubuntu/debian run: ``sudo apt-get install babeltrace``<br>
> +<br>
> +2) On fedora run: ``sudo yum install babeltrace``<br>
> +<br>
> +3) On Arch linux run: ``yaourt -S babeltrace`` or ``yaourt -S babeltrace-git`` for the latest git version<br>
> +<br>
<br>
</div></div>I would just refer the reader to the babeltrace instructions<br>
themselves. We don't want to provide an exhaustive list here.<br>
<span class=""><br>
> +<br>
> +You can also build from source using tarballs or git repositories of babeltrace. Refer to <a href="http://diamon.org/babeltrace/" rel="noreferrer" target="_blank">http://diamon.org/babeltrace/</a><br>
> +for further details.<br>
<br>
</span>Yes, just refer to the URL and be done with it.<br>
<span class=""><br>
> diff --git a/user/tracing/usecases.rst b/user/tracing/usecases.rst<br>
> new file mode 100644<br>
> index 0000000..323fe15<br>
> --- /dev/null<br>
> +++ b/user/tracing/usecases.rst<br>
> @@ -0,0 +1,77 @@<br>
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0<br>
> +<br>
> +.. comment: All rights reserved.<br>
> +<br>
> +.. _usecases:<br>
> +<br>
> +Tracing Use Cases<br>
> +*****************<br>
> +<br>
> +Following are the use cases of the tracing framework that are currently under development:<br>
> +<br>
> +Function Tracing<br>
> +================<br>
> +<br>
> +Tracing the entry and exit of a function as well as the values of the arguments and<br>
> +return values can prove to be an important application for the tracing framework.<br>
> +<br>
<br>
</span>Why is it important? What purpose does it serve? (Debugging aid?<br>
Program behavior comprehension?)<br>
<br>
I suggest you devise a templated approach to describe these use cases.<br>
Something like:<br>
Name<br>
=====<br>
<br>
Brief description.<br>
<br>
Objective<br>
-------------<br>
What purpose this use case intends to accomplish / its goal / user's<br>
need filled by it.<br>
<br>
Requirements<br>
------------------<br>
What the use case needs out of the trace to accomplish its purpose.<br>
<br>
Example<br>
------------<br>
Like what you have below.<br>
<span class=""><br>
<br>
> +As a start to the development of function tracing using CTF we can work on the fileio<br>
> +sample testsuit and trace all the calls to malloc, calloc, free and realloc functions.<br>
<br>
</span>typo: testsuite<br>
<span class=""><br>
> +Along with the calls made to these functions the trace must also capture the values of<br>
> +their arguments at entry and the return values at function exit. As an example of an application<br>
> +having the following progression of function calls:<br>
> +<br>
> +.. code-block:: c<br>
> +<br>
> +  #include <stdlib.h><br>
> +  int main(int argc, char** argv)<br>
> +  {<br>
> +    int* a = malloc(sizeof(int));<br>
> +    free(a);<br>
> +    a = calloc(1, sizeof(int));<br>
> +    return 0;<br>
> +  }<br>
> +<br>
> +<br>
> +The trace of such an application must be output of the following kind:<br>
> +<br>
<br>
</span>Eventually, you would be able to show some actual output. For now, you<br>
should try to "mock" the expected output as closely as you can.<br>
<span class=""><br>
> +.. code-block:: shell<br>
> +<br>
> +  Timestamp1    entry of malloc > argument value<br>
> +  Timestamp2    exit of malloc < return value<br>
> +  Timestamp3    entry of free > argument value<br>
> +  Timestamp4    exit of free < return value (null)<br>
> +  Timestamp5    entry of calloc > argument1 value, argument2 value<br>
> +  Timestamp6    exit of calloc < return value1<br>
> +<br>
> +There could be additional coulmns of details including current priority, task state etc.<br>
> +<br>
<br>
</span>spelling: coulmns.<br>
<span class=""><br>
> +<br>
> +Tracing Thread Operations<br>
> +=========================<br>
> +<br>
<br>
</span>Here you would instantiate a new use case template and fill it in.<br>
<span class=""><br>
> +Real time applications inherently utilise parallel programming which entails several<br>
> +tasks executing simulataneously and competing for common resources. On single processor systems<br>
<br>
</span>spelling: simultaneously. Please use a spell checker when writing documentation.<br>
<span class=""><br>
> +the CPU performs context switching between each of these tasks rapidly. By tracing the creation and<br>
> +termination of tasks as well as the context swicthes between them one can possibly identify probable race<br>
<br>
</span>sp: swicthes.<br>
<span class=""><br>
> +conditions or complex threading operations.<br>
> +<br>
> +A sample trace tracking two tasks Ta and Tb could have an output of the following kind:<br>
> +<br>
> +.. code-block:: shell<br>
> +<br>
> +  Timestamp1 taskid Ta CREATED<br>
> +  Timestamp1 taskid Ta SWITCHED-IN<br>
> +  Timestamp1 taskid Ta BEGIN<br>
> +  Timestamp1 taskid Tb CREATED<br>
> +  Timestamp1 taskid Ta SWITCHED-OUT<br>
> +  Timestamp1 taskid Tb SWITCHED-IN<br>
> +  Timestamp1 taskid Tb BEGIN<br>
> +  Timestamp1 taskid Tb SWITCHED-OUT<br>
> +  Timestamp1 taskid Tb TERMINATED<br>
> +  Timestamp1 taskid Ta SWITCHED-IN<br>
> +  Timestamp1 taskid Ta SWITCHED-OUT<br>
> +  Timestamp1 taskid Ta TERMINATED<br>
> +<br>
> +<br>
> +<br>
> --<br>
> 2.7.4<br>
><br>
</span>> ______________________________<wbr>_________________<br>
> devel mailing list<br>
> <a href="mailto:devel@rtems.org">devel@rtems.org</a><br>
> <a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/<wbr>mailman/listinfo/devel</a><br>
</blockquote></div><br></div>