[PATCH] Adding tracing documentation in user manual

Vidushi Vashishth reachvidu at gmail.com
Tue Jun 5 20:39:42 UTC 2018


I am just sending a revised version with incorporations of your
suggestions. I will create a fresh version 2 patch after everyone has
reviewed.
Sorry for the spelling mistakes earlier!
---
 images/user/ctf-stream-packet.png | Bin 0 -> 21843 bytes
 images/user/ctf-trace.png         | Bin 0 -> 16038 bytes
 user/index.rst                    |   2 +
 user/tracing/captureengine.rst    |  10 ++++
 user/tracing/development.rst      |  12 +++++
 user/tracing/index.rst            |  25 +++++++++
 user/tracing/introduction.rst     |  97 +++++++++++++++++++++++++++++++++
 user/tracing/tracelinker.rst      |  10 ++++
 user/tracing/usecases.rst         | 109
++++++++++++++++++++++++++++++++++++++
 9 files changed, 265 insertions(+)
 create mode 100644 images/user/ctf-stream-packet.png
 create mode 100644 images/user/ctf-trace.png
 create mode 100644 user/tracing/captureengine.rst
 create mode 100644 user/tracing/development.rst
 create mode 100644 user/tracing/index.rst
 create mode 100644 user/tracing/introduction.rst
 create mode 100644 user/tracing/tracelinker.rst
 create mode 100644 user/tracing/usecases.rst

diff --git a/images/user/ctf-stream-packet.png
b/images/user/ctf-stream-packet.png
new file mode 100644
index
0000000000000000000000000000000000000000..0c41fcfb015d5f7ad2afef0fcc09d07ea4a9b155
GIT binary patch
literal 21843
zcmag_1yCMaumuW#1cJLKSdak02?T<>B{&3kcL^c5B{&3km*DR17Tn!ExJ!b){hf2}
zz4ia~s$LcHF|%i8 at 9x#zYxQh`<Ygt$kY6H0AP_VuNl`@z<XJfQyo(4AetP9M8-rg+
zc9QB25C{qm^cx0}ltKuBAj_GHh{(&E*?zHgFtfFLB_$&A%I>qRiMbWH!g(Q8$y8Zs
z51;R5<x==#pm)qiTSYv?SBk<R-nfy}bmT~w9|FlU=kXLeu*AgRh<;@R!iI%;hvF$P
zpavt)A#9Ong?-Ns3?8^!cgwb%X};MReyo}0-z~mKtr|sWM?{U2WK($Ojanc~inaE=
zue*1Bi%HN2naU1=iCASs?(jef1G)9&<)x=+M`(q>I8UM=LfU1L+gXSMo-p=>6SZKx
zePP<aM85xs=#2{zbPW^Eg$Rnnc&8>%D?u{gAbNv_2AdFhMu;Ab*UluwJM}iv4F;ka
zLyiZN5ea#PV;m?7G2?+0kE#TVLDX0vxF#RFxgc|l5Edy_6G=#U9i)8(6QvS at hzem*
z2=sdcfpdfC{i39FhWI8zaK+D6dC%xeF?Z>Jr4lQ78>qO%d^8am?GaQ}nMi3zqzLG7
zIrN|DCkZljx+K1M>%)$*b}<BjWJKbD)m}U}kD!;1jBte2qU$p5x4}PA7#M6mZjTn(
z2|^(2Up&Vj8JMeHdh@`0TR&#KK87>XLCJ8u2{Ea}5Uhb@>@BEX*g<V0mKo77Kfk at T
zHTR)gSW|yM)#K5$Q at 369!Rn7E at BPiyTI&Xt&s%LD3Ao#}&Y?@`9OBU^BwvH2op6c!
zI+Uk-l1YkgDT4+zI^0bKZ2K_Lq|l4EITS&{QEz%)PdpiItTNoe@~^&wlw0t_xJ5GN
zYa7B|f26 at w`_jH~1A&}3*>+6PBEou`eP17SdO8t!kjQuq at ivi)vWGx)M5&mR2dV`6
z5FrrJ3?I63A)?C;LWXvD;*RG_9VqvD9KOO--JQai!pKJ6#Gm!v6n_(@^&c)Lq0?iY
z5+q at 7S1|LBwnJy?{8W$5XNU1uA2F?iw%G>>PUsgRjz0N9AdEq<8f6$FL89L+d50t%
zb_mt0{y<y>ijR at +Bv}=Mm0x|5Bsu5%{ERC=OT00X=NIJdw|oC)3Dy{&N(H_t)Ebe7
ze9o7?;#nwTMqgNy!tpbb$39oT<O}7<+#M at 2!&nIC7wKbZ|4oR%)@{YY)Y~Oo at ty%G
z+HkOfq8PQP_hq?CF>F)NmEmZG6CAdWSUVC2oRjb?eNrJwHEA{3Im!H2#8m893rL(u
zu)YeNG!)VKAFHVwvHo-u8oXr<P?Kb!oWTyqVa9X|6zS%q!VVI7OVbeXOse9i@&xvT
z_=Jrj<sL&pGP~qU%IN+DBg;wzt{8?_^uPSJQn$Lc*tUqa$j>#AQw;>|f8Hu>&?*jC
ze0Z^qxy`-}Z=CQ}=u>u*;&OhbGS<6r4dIf^TE#MjfP5Tw$0V-d at Ay(5b4s#eCtsQo
znBAC{{r=L3wH!+-8$YHxF}Nr3JN`H9r4uTeKi>DgKvUWm$%F`mrZ1cb%Mzq>UrdI)
z=u>9lWIagOO~gpF{iH@$OXrRkIe;AdA(lFph>lsgpfI;^r4Z%Q#iv2#@B$qrk5chZ
zY)YF2NK<h|p9)ju50r?MObdAO0}4&^ZIuOnda6GJ!K-&kcgczTRLH2%-E8iCg<|-k
z%9(-O60OMJ(dS(^b;a<!`&YWAga?wQ5Wd2KOfC_&4{WMciWe~^0tlN4_O~ftWRZ4h
z^WrZ&gI91*-fX-f%4L^sU^UjVER2hfQ!A1zQYex*XyGV5%1g~{5o=Pv^FbHt`#_^b
zBVigo@;r4{X<lhL4>=EChL8KIl&R1%hbXg2)TzxT?>Hf?RmVF`+BR>+rDgXou?O>m
z@`Lr?yekP*HTWu2D)>dz5klUcclNftB+Pw_X9^<PU4kMx`my@)>%Nf<<Gk6^;y=VO
zLd|=%HmNqPd#!u3so|-~sXxl>%N!>u$~5G@$>ovek?tEF8qOM?Nqm>g$2$9VH+eUC
zHhHy9Ps3S*p*Fv^-dL(~OCwkPxVG8GPlHQ6N9~h_c9nQZYRT)Frjn*Sth@%<XxXB)
z8Pl%vv)caJg1Q&w+jH=XrM1?z9{Q#R1g3R8rCrC-Ezus09zP!V5YPhV(ThklNIV^?
zKjU(%aIYkdq#O%)^jya6F`KH5Vvf$SZPwxpzUekkRZ5<eFeNZ;aQJ=^7!vgH+aOas
zKT|SM at A9vftq)(W?6ucjC$3VHtCBm9@)ygFIgZVb1D4W<*wf#nsk1qZb^Q`qQ`jCC
zKuM2fv0N?oloOHjF|FC9WHw}uR4th;ugh^NywN`);J at booW9Aw$;-L&c12xxh_k)!
zSKXjomu;G^->Qfg<&)8q>(e+S&-*ouDQu9BkdNlGyIWUx^0qJm?nUG4%K0Oq(2NEl
zJfZM!CEvC?O32NA9Y&Op-|QxgM2?uF`^kI$o*6^X-_Z~0@<gTa3-D9*7YMTpRC_tj
z8vo8|d`ZM%RrIfDoajojDXSb;8RLg{bo_-(7Q73bjqHsAy-X(RL(^)hYEo7oiMg2Q
zN;zz-T37FnE&?`EH&8a+2ojioY1_GEj&xr7<>41FVKZ>Y2}%dbzK=N-!lcW`4}E=(
z<McWV*`<@D)0BdFoMSw2PDG22RQ6nwPR2FrFtYib3snzW4#ReXFHJ#2voxCYax!-s
ze$v-h)^GW^TUftGMMl^Q7m~|F*P8B|?wEWXEH?J5eC)9asbeOMMd-JziYR`r&WKzq
zocmi at gLak<q0-b?)ue4WXn-rOD2;yjXsBvnF at iJYB>m|KyAyjosy4^}qbehb+D=Qc
z1y?1ny~`r<Cf;*;e--#*-umELI_qh<q9fJ#QqLA at R~btmosNNT9W^kP2PmJAxBWa0
zmS&H%<<ywfS8MeD`lk}{;{^qm;w}=z<9W@|E;(-#1=tR>B`(EO7Zi0j7>$}tnC$JW
zFs5mu#}&r!#G~7w%`a4=t*TTXU0sVUGRF_oE;fCy6=}$B<E?Kt&g&l;<`Gc-seGyY
zSDE8 at V!1|t_SR<nn8>a9n*DHkQM38xfxo|X at e|A^nQ4=0<2$LlsvCjQpu)Y|xI1g@
z5?O2eqdwRP*arkk^xD~mscDi4K4r!58TtbW^ggoI$J7%iMl=qzPd`$6Hz at 5yUAFda
zkXCO<(YP1BhPoB6BTSNgB{3yowh&G_PZCd7O1jfD&}@_&;vb*cUva&cSR}(pVdqtM
z`Ea4!Z@#eiZ8F;Qd^9vQHr2zE>CckhVpgr&uHne41%~ZOBj%U&39+Y;U7lv15v}w3
zFXxqu+c>KAs!3(sy4L$&_IV$pC*}H at Qks%V8?-DNj$K=7+)Qrvh|)MmmM>de&hVdR
zrqj6imRl}dZEt#Ru2%7vJwMYtj0`r-JJB4MG|M&XUJ4!w&5JAtObci}F3p`Rd0DhO
zWn7FeN!-BueII>{yb8w<c^;k^KIo6;e~|W`pNnfl;Pb=YeV)ju(I|Bq!DH6rU?~AU
zv*+#f!R*L*!gyx<d3<!6wR_IPe*3|Tvc=xcUeeZnXEs)yOO?B$4yPq2l9TLJ47n}$
zS6;MFW`8QKl*aPzqF+QuKf%E!T-+P7F)jkW`N~jIQ3e8WeGP$le}_Q+Jb~YP5QrlS
z1hTIOfp8~4AOyBix;^3$$Olg;Q6XjLg~JvXJFPyCle<(jHbRE)9pc|8AjnjR!Oz4Z
z^wg==6DXc*sBXk658yE_1{vJF5nHKeSd4v7o%*w~`9Mn{%yvLCisIs&VezDQMo~q|
zQ+a?~TK$bu);S^*1p}5ZViW`}V$KBq6+BzQ(SyA#*(LE1D*Ryat!JS;WM^pa_~L*+
zuWfg>?U>`ffA53>reuE<X^W<BYE^>3c?Ao?4EtL~<V7k39md(SVdD0Bg?U%zx#!XF
zNy*lA)7)1F#C9Rbol=5Vk*gQU^Rb2qoQnbvY+*@$18HF`lA+B5f(--m>Y}gal1eWy
zq$oI}&A0XkJ38=OZD|S}@)p9B7<Cq>SA8*s&k?Ks-eoMzLxMSv^63g+{tU|(dC>X(
zcM_&2+d*<aP^Y&zz7MHKWVZ0*Y>p>Wcd`<n+!qce+Lb7^m0-#!@9!G^yV1YoybgVn
z@^mDF at 8$Bn$P`D9K3(j^cK;H(dRie&HEC`}m)b?SYxwEzYwd at oHBm#VAYdu~WD_y4
zK%PTBfjfKgIh6hUhtYy<*=6Ng%z_&CVi}vP=TX8{MB~rK&r&yYii>C)OLAF5%pZ@~
zbruO~`DufM8$1U4v{-c-4RYp5vvs&{&8U4N4tw&yax)iT9Lx3_j%RpMJIVG at jl)6u
zrbk_;M>guGDq4R&E*Fr-^O5&Wk&z#UeO$Fx9sRK at g>7Cx)fU|^$G at ZeWIK!0r!?Wz
z{ZtZV#-EqAScrq}y0Psj+9FFX8YVUCBLC3#iSHysnFdX9_dt2jQ66e8ucnwC*5#W^
z^DUzO+EtZ32UY(C+va<%!0RXu$t&8r<Pou2A}Y*q62-*Si)xQEzO(bWR}ai&(Ylop
z-48#@2!s*I)sJ1Q#$4EaIZH(LAz>d<#}uyIvcB`sxp2tpbBq+Ka_>yJeDj^%E}vQ_
ziRGmW@>k<wB`S)Q_RKPj4sZF1LzXwyc2l%RraD+5^053Ss3LoRwZfnQd;4{B-JRpJ
zN+Ikno-ZVBc^1)z`z`@fCnu_tpP$v|#vPO=ov=!+k%mQz^9T1CEtFyUr7MPWN?s*~
zT_;O>22jam|JsZxU9QI;x7j#*^X^FJ>ZQi?+g{7N&QdTC31;b4YMt)GGX4Cz{5ST@
zBIsJU)?5zd$#x`^$v-0oZN|7dre3o`u&(m7XA|pS301u`3<CuvSNx55&|T^qD1+`_
z8f?*Y6HsA%%DW^vo3D4(7S<XeXp5ySgBQi<bL{0pK;mVQmHHw&b>6Q-O)ji~<@K9=
z^;hgQkFF>4$7i3M<J at uxu<b`G#Hy1;YbVp=^N&K_23<R8IqBrZsF+5X8~EG^ko!iU
z8piRmF%9*Gk at PJkv^x|3AouOIQ^}(;h_meUXX{<<-=ax(lH4yA)tblZzo6u<>YCsx
zDU^AMuO`mLY>LWSLCF8waiS#Z!T3at=bWvTRflLO_L_)ZK+;;?883WaCt*u%$RD?j
zu-o#kkLBPE-dSDWP6OxeM~56)GYa2`6o5}P3er7VlK_!T;F4M4FLMU at r-&vr4uP^K
zE(|s*4!r34U*G;BPt6F4O{d+(>JM?y+OOu$Il#9!=~SXMs20^yx#RsR6*D`SkjgOb
zJ)hZZM1$}?=cM-IhEVrF5cy};CAtlUNKx&bw+$1XINLPcpYo=d<Rp#F;urRX3R0Oa
zjp^q<1Lsksow;bMlY87Cni#%|mWsv{mP8Nk!%6sY5u(Sz^zn;XiM&7Tri;SMsm<9b
zS&=Vmotik7`PSr}uduV(c=M3qRipm&Z}Yx(^nM$_%JXO4mx@}<^|LgIa^_cB at fVxh
zuT47A6vOvgKAvHc_Sz4P<nsM|WX at yeRSB4W^2^Kr6fZ84R<o{U(ROzJoeH<dR>Aah
z(~J1hGAEcL@$Rd%4-;u;3$1~Uq^g6=0sg$qsd;2Oaxv7viNsy67_nEF9P2;#QMvJT
zV-|d*+0n>3sW(WW?@J6)dm9<96kpnm8*$G$6(&J?J?VC|v7N`9cPq_Qce`4^!xTp{
z-e>o&yPrl!r{ZugSPA{XG34`aYpT4}Qu;hvkus{R6bN@)%gvw*ThS*CD)-jwMWXDq
ziDl2-K{;L1vxToG6bnCyDd#bFSH|l4MXkwLt;o}94*7JG9IU#<I+4h!oVpE}UUhF?
z6gT#CjU-}%cnIl9Fx<woHv}0Mk(>&akRlSXL=cf2{2A3Li32_8iy18O&oALK$$w6~
z4RFcPsju$-C|fyUD!uFaP!Wbi?z=@tzkG4q2RSxid!;Ul=Pi))0*sdDHL;a=VB~;}
z5+i<Io at DaM7c;6PLG||PiP4)L!jHbjX at yROqGQ63qDLen1ZJSAzL(a=18GHHyMsuB
zb6v#GPs<=S<G5f(w4_z>UZ2Fa*w~-<zv?`=bz*-Gon7DIt~$gEJtHCa)r)UB(7ED<
zb9IZ+vW9!fDn+0QmQnsQig at b)6s<Wyr3iMB|2;%Wo0fhuhD-Hh>;SsB4c34^ZV(v=
zIyfZrzlRcGPCr3b;o^_U3j+STze~Fmgp~Fy-1jH8D+zS<#3o6vsCA#8o<MZqSY#a{
zaNC!Szzw&kE_r)*D7;lOP<3&lkbgT;0Ru#jT at a?Xc~_oXA$^j at uGISHK~$!hyR7`1
zkVoWp2lnUcCjSf-K1;|;f!J}@f5A}af8Uh^{Ly1biu3H0MjjuXIfLuh+y7Y|?=F?M
z4a7 at YDdM&8f2+gmRE4>J<K1M2TnYEz-RgyJF+bdIu8!dvMgF%ud%v?fdFqjBa0u()
zi7>Bmhxa=mv_ByMA9x1ryh8Cl;Kmk4>?iu|qD4pp!7UQ at jxfrcjRb+YA~?F)i3sD2
z-#!XyM(-h#lBD=|jjCf8^>&`HYmBs2Wk`t_{~8JJl9ws047MI(On66`^u62XA8WcG
z at P&tLQbL}dt!c79mx8o}LCZh7D=ER~>a+T1Yn$@^l}M5QK2Jw at baSHt*7)`>fCoFm
zxX{0Am3SNQA21@<Y~DgI$L}KZJZZplSr0S0`}}(P+1fkE4aJX-H_naC^o{FGh7UR4
zo^l=^ab{ShUO(L*D!lZ;jQR at J$4!vg&HKnDBlMqPC8FST5$q7#;gbw{y40ZHa{0k)
z<w4*r at a)v(%C-_x{0TqdNL+gPa*~k#%H%DPd}W7!KZZvj93?yOe}wxwC4?Dro9E?u
z{aZqqcLt{3yh2^S7PnoGeM}lf1>M`l5s|zOE7E+y_O$^W3M at p}hWio<D2zxuxQ=$z
zXZ!+?sSusxa0U)~1{He0%`C>EK=^1%Y0YBMQ15Y4akHpSs3Sb}SzhW at Xy{j{!>omi
z%H4!EWO&c07kZ{}K=j+yq+uE+SYrLLuE8>`p<yPVP_w}%%&YPO_3}Lv0(tzt$4^*`
z?SIxBf#+R_S2VZC$QJ1hqt6^rriy(Db-%ilJa4XdL?2={AL at 5MHXGGW64C#xU&-DX
z?2TJxEA{vv_9QBK|DJ_mvB3HZyOLe}IsV6ah&`0*9Ktr!cfT4WU6B6qGA(I;C3YeQ
z1g2fBbN#@*+2KE&O2(x|EFvmN5yInGN6P(&)X1N{l4IVdB$T0AjWlJ)FaN=mJa1GC
zRuW66+2#b_pJ)HwRLUZV_SwYN&l^^<W5R!i6&nq)3%Me$vUaKwe;X$inj74kZ9r}b
z8<cRn;5f8tCct~01Mv>wEX&M3;QiYte){`bJHI49*ky%zqzxA0{N=7Rq3`Kz>Od+!
zvo;I42Je&e-Ts}6xuHI#ewE+UuwU{l3kO$+{|CfO=OHTcc&yxD%+5&@Z_2rbfPF{Q
zr5)=k;;h^j7owHczx+&T518P2;HFGg#p)qXXBSThhEBW*X=moEN2D*?r!zev-cG&Y
z0~?C$)5SfDs;hl-B%@J1pIU?aoS*Sx$-J{X1M~Y$MwIDH1x>L at fvetus}Ln~LUN1%
zJ_j^clK6n&D8*_{TM>y_KlSiAOfWeg=3_6^CQci1aER8&$uVDGziPl>z2qKqSp at cC
zXI`<5w25;CMX-ODV0Tr>S}Znh<oHMOI3K&W_0 at rb!l9s;)SFWDtIeaL6T_R{;W;&>
zqHP-A+?MuWgycHQXEHwzQqQtmT$1Tl3Ki7!dU}${I(77VdXqGyM{nO at 6p`Ae{gP`v
z7X7mq-r{jpSMPkWKukWbT!p{#LI7%%B#Rk?n_f5QrE^<w+ at 5ZvhS4}?1*;hgR<PnH
z((;1X!Ulg7CApEBWLWSW_R_SPl?V^&d98|c%aB+Tk27K1xBH$5Ut`CAEcVnN6)7iB
z8yDdCwoJsiIeye6ub>z#T!iPRLQfY=lFy*hoX&VKWBF~bKpSHXoQ7Iw?}b3x!XIzy
zQ~tJHa$vbh-Y*o|<j!QvttdKe6o=p(gw$#!?6Cq1>N95djm!jNyj_^~%TV2mv61+6
z_aU%af@@yi+ at u<X&a;p^vdMv0k7bNyoxq*d#hT$|B<~U3d_Li10Puj>&FdkNJ7ny#
z4vPv~+#9MRX0p=#((=*i+op-zwa#?6e=<~fdfF_Q-F2q$bE<GNgV^5O;{%isCZ`DA
zjCt=E-}U@)Vz0Ogxj0z^F0mBZYkU6`Ms3zs|HKLfG>J9=?&xa7XX!vDthR!{O-tvq
z!?JPUWZk)oh`8g+P-dIv-13mXMQQ4`U~FSV-Ixp2=PK@=qaq5k%!ilZc{&nLbBNGo
zH?w)V-)#+^j@&{m3Plkx-X;J^2f>Yizix_`srr5(CSV6~K4ZREJ4vrlXAmhoWz+gy
z2 at evm51*?zo8Eu?Ai`{C5R?l1bQ%651Hfb__24%*8K=y;BW{+`HN1G<V)!!ANzeD;
z#djE~3|e=6{xGzpqFl>=BKRs*1OATx+#z8WP>{7hT6xh%%}-{vQi`OZk05x~yMR*c
zd^|ZiR1nR|Ap@<C_}B{mWilfy-|BvQ41N9WsHNlUZLVJDIU*X{=Du+QMKr<aBlli)
zRFDg9g%9HuQMucu32)7T4;QOXKcX^ucelJVSi9%zVN6|gWE3lhM_KANVe>#20Q)30
zJl3$I;YH{r!#e<?3SUc0@;gENv$K9cBu8?mqr&lRfq#Wc7}9WUSi4Fd3ZCB>01t)O
zwOgIUFubS5E^I#S8?mR`)5 at LMm1dcslcM}ikY>IYiNGpUxSwtO1>@N}xLi%2Wjn>Z
zty^v4v*?tSn0;>DpT4aJ=CH682gP+3)o+7snt}OJ*B8kaGaCh|7-k~p4~CSt02pIn
zkrH($-#~O0i9A3bXDx;YZY!^;;0KNe2S+m)HB*vPp<nWvL_`cCDt$s+e?u96+^_iC
zQ5sF)K3sPLAh>H5op{P$hyKHdv+L=bc#rv%y0X^rxW8!5U=7f3h{-G;F#zOb at 9^y)
zji*3v-31gE*^5r=%;~otkYIw79w*NdG?;^c>i8~8Q|9swO9XU_ZMTPe9sp#?g!I-F
zgX`*g9S9ViXYq3P{AmkU5FPj3S&(0dVs!x0 at ehz70JE4nymtr9+P#68mCmSMw=KJn
zR|ZaY`4p5JKPlkg&_GEbVtp1jE%bUOa>IVU0)&61P0P-o5Kg#d<*KhEQLF}?l23Dz
z6ZX-aMY(bx-I+|t4<=(wUmb+^n<KN%^08xnGVxFcORYKC`*Td@&T5gM^_1%TXK(Ng
zfAk>ZV;zB7c38-q5|@s0OytKaOyNssJ{;We7pf=J?akbQYt}dvLICr0`ntKkxV}rc
z*HnCnXZ1^icv!-}J_k!&2fv`kekL3(E|VX@;8PJs1sixP1~`=o;YGr8Uz#5*rRW{<
zghED1D}7ep;4}_{k**CmkNc&_2o}rOY-%gxhE?+z`JZYA<-9ZDlVHu78BiJqEjmcT
zOrWxA^#3OLmlFZ%h$H$8-nWIgb%g4l0uH6cV!sT1$4UJ=IzM%>*>nC|Smk+l at b$$6
zKkubo{!5I(rOE$Sz9(I1{&yS$dELIpR%N*PzswEr<-8ziB5#Nu!}_Ts_wlp;nOzFa
z7DuNtwtt7H=6?h^VoUw>+IKw=X5|H2uBkMl#Ah$*X|uqL@>g(fLYU$rR8mB6tR$!H
z1PP+=v8B!bd_YNI!B1QxC6>uV8!A`-Aa7>hZYEhOr6$Zqo8I`NvH%NwYM>uuG+9#f
zVBTkL!EkuhPV<c1<wLtN#7P0KH$;V8kM7sO?$U=wl?A4jSvr>c^_w(U at 4#gRZZ8QU
z4!tjhnAdM<tX{unN&4(%d1yzAxVlBvY(qd7lB at q#d<QRVb0wL!l;L|zF(I|Xano~=
z4$S6bo_e-@@rD*p9T;<@KNWj3V#S4}f-dTB7~+<!5eP~+Ac7&QeJimM?)cArUiB{H
z)bsKB(-&!CvZ!BNbJaza#@2pZtwC;1LrSO>SVD(*Syv2uMLG3;`xZqvH<-dgcwyMR
zsK?%EK<^6!5BD%h%R&>zdI_&ZTU?&`a{|UNZLZynz0;zuLytwT_dvp at KkfAHQ}lN=
zU6Y=|!p{lP4VJKN9o`qU!b>N~y#pS~*p+Wt5<_X3=zKf$+Ph;glsF_-_;*z%Y9_w!
zHL1va`TKwp;*yfa+M%Hs6_3`dq4;et at lQ)&YdhSbagU2RteZNkyHAiy+iuEBp at zxG
zi`hFNA3R4Nh!qx7km#=unM-@#4i-jYy#L;^piL$5c~GBSHzfOwfT=B^On;A^KV>Fw
zUB`Wu_|Q6Jh>KtAgp+X0v_fw(G+j<gSOwFh3Tfx`{%rWqX^N)Q?1#miM-2i-Qlx%@
ze~BPI0^p4H{{uhlDE9vWvM<&1f4Cmtl;l$XgIY;R#eat~kd*$ARzbbw&JEA1d^xpJ
z#k^DTh#_k at z*l{b!4`t{>1vVna(%HF0*xFhBXh*EO`5#pF+%fpql(PxeH+wOUW}(0
zo_#et>UWw#D$}+SM>`(4;XqfMN&cG1oMmMT#qjhFiac=OXD(?Z5(|47y2Kl<Cx{jO
zj_4~T?y3Imj*IfFt;C-sHwYvx@?hbn at Sv{CsG>td89sSANUuF06Ju4}t`|XKdRc=T
zHv(uvZo&)6bJAXJ6S7QijGE+|O!r|Ei1+ldD0ni9x>f#sInhBa|1(I!IcnzD3x2D)
zvsDOW+wxcloTvRfr8mIld;ac5uPbcTuR#zi2EvXd1!(@eG3Z at gN!a>wwc9v%tDf8+
zk`q2-beuS57J4Rcm}}Lcd2bXfRo_)55H^I-pWNF*23VZHEz1{D2cBTaJnzV!vT{_b
z^f_~vL<n2$VZhAHcd`C8TL;SwYt?0&*Gr|exoE>)1OdTe|7CC?t*%2jHEqdPn&PiC
z{MU23q8_@=_$?Dg$;v%)Kt}+J)8m3E4aS(#nha4wP*>}{lhB&pm2I5<m{jQe3~aYe
zZd}n};Upd;4)j*ych+z!Tm53gxY_Vozc)7#9IPgycp;nL$ug9GXkIo3$hVqQy~I#Y
zSR$(E5#I#8X5`G>$SuZ8Zj&@M*6 at du^cfS8aNsWh1>m-f;YQNGr`EW!C1KokPY;u)
zZrVr}$OXH$UbmL at Q)d_#p6O7PO-cST)NzPG=SF at hi2l4WoRV|YaDWZ>YCgsdF`oNT
z=z{-m-cl0g;nUg|WeqSFGuGHH3k~WJw9IyPdLL-70!a#L_>U}WAw&lWhc^ZurK^d(
zCyrt+gn5Jnz&URMz`9QKilN;JfGf#~|ARU1|G^yX|6oqu9Cq`+W8RW=9+>6)m;9-y
zu>QSbkNouk?+jP)*==squDhqF8LsJH{5JH(svBE%<(GG}vm2dbh~h1+)i1tUOT9xc
zwoShHle12mLUO3_r7=J=O-=cw+kwW}%C7*z<m)YCk=%bC(64`{W>%3=FcHM&A(EuG
zsI2ZkYGn at REr#+d_XAC7Xd{99$Y%1fc>1oaMvr0Ue6YAF;|Tg!^KaIME+lDI3kZ-9
z{D>bT8d at YLnx|X{Gj;lUpWj<=oXOIL-sIjpdkuv1WZHeWc$*}hZ$sN at ck;@U1UZK)
z+#nh&Ii$G0>{qZsH0yy?d6b&8w(kShtw55G7p-@>z>O|Ts0wWHJAAbhI`44{wMY)N
zLO#%~rY3#98z4T;S9thnx33}a=z7vu-ja)L`qy86msVU;8;$OW1JWL=z$vSJfZ&~P
zxFU#|S9+B_iqkT at RGUPnykPzNVoB&GA4Mis*1g&0-61}kcng0@<4m|h8OEX|9Sj8g
zVBJZTE%JuLl`{<g*ig!O$9?uAHN9(QUmV!7b0Ny&P-`+YSQr7aw(m@~a(Dm-eU3MV
z?X{x;SUcTO$@CA}x>)d;kgwE}o!hd)L5A%RpQtyN&$+4$$8eI=s>EihRp2;TvcWqA
z)$hz}^*p1#5>>2-PQijBr)Q>!b0(MJNS?(PW6A0CY5DW!liHDBKX2A+B at Q(thH9qH
zRu<k9X9X3lP`UsdYNg{@F<RWttptMOWT&+`<ACwnbE|S(H%#HU+s?Qk=_7o$)-O*U
zb1F(XF4$zNUpN=`Ep~`43%_i9yjewPGFI8Got|DxJi5`-l)?MU7oG2byE%VXmocO8
zjXvAPs;HoIR-l#SYsib5Fl>lmNj4ST4{0T{+6}uwoH>o<d>3qtV%x5fcf$^0)(mA`
z>v1&lX0;Z(C%{B`Cmw{FMMSJDT%k3ur{6D~!_CAgZvvaus&H-;@$ml;uEMkYSolte
zE-#X9rD;<{>eGu4bR;a>L1u3gWoQe&Wc(~dJy||0ktEu((7xqI&M2;jGwylqLYX8@
z9sO0NHT)U<1pLPe1ac$upUN`UWd)+C*@WJ2t+dVS)@$fz_3IMG`Sv?)|Jr1_P5GgS
zP~IN2kbPe^=mkKSV>EGpS|0pO>X<p|AaOzaEV!>?L?M)al;nPG`DP6bZd^qb*7jAP
z?ZXalv(Kx)yiTWw51QpAxyWVO4PmAytKVizwbD0Rq!GXh-<{P~G^6ABp*N4;aR5)3
zhTW_m>JhkVJviHLiMSi??gE<_SUOT7533Nj-O_;*gbBnmyuqK7V57U<d!BugMtGQO
z0Gm&Q1X>-AO%u at n0;3fpjYZFntN}Z}cR3m&J~5{Iopj!%pcEU=847rdcD7A5*CG83
ze1i(XV+W*gaPVRR{`FU$rSH+ at Wp$-$L=3&8z7Y)g;lOX!Y70b&8+q|=cKT*;kg?r{
z?{cNOAz&5Q%jEeK3aCy_;f>X8FlGjqAccVCLNX?7poXgBZ{RV}NHnsRs^MTbLc2Zv
zaAU6Z@)!n!DvfTa`+!bt<3h1dyiS7KwG5zsWE)AHff^)-5If%kjDed}a!c0c at ZLmY
z&xo7YXEG*zg(JJ)chAm9Z1L6XJ_UAQyV207zI60>proGhq8{t at D_^4uXZNFlE82A$
zv!bF7kav3hGO_M2KVyKrmO!BxD8j0#5jetnQvJ0xP at nkf@9E?qp8~}Nm^Iy at --~yr
z{g$R#zUg|qNhZW<tNtIm_?&a@*g at d2iv7e4FsQA@Oa<WwPT{}%?rOF0UA0k8B53GF
zoL{t|B!)2++7X{;Cfy|G{bryT(p(%)!Ew?HorI-osim+IVn4vp`$<k;kQn)^a<Ept
zZr*|fd3H-pvrpXf-m!!XBw>qPMEgXUvoK-8XJgbgzXtyzR=DVS5XtKBWFyItQ}rnF
z8C+kVg_Lc8H~=}i3#60g`PrZr$C3puVXa_&TQG- at dHKcgH8+PLF2zsZCqYeTbW1b&
zUuIK{WF5ttY$U3nP583o at v7$bZ(p5+hYrAe%x)MpWO3huUC1TZR#J1n4>%pf!C4~X
zkGZy1e2^r|3o22=Z5uUlvNniWtsaN2-GBvmUYD>nq%?D$lV4Atw5vL~bMIe(^ae89
z6x<q!?4%4{p1B;xD>jnL&8-?X=Sp+3>zNu0gY)*k95R8y4&CK{CU5vdg{vH;4x|AI
zPyn2U7Eq at y&e1M`?J#cq6sh3>Qozd;np|{ekY6tt8P8F at -l$k*3p#0Yd-0IgpU@}K
z!he62{8TXPdwe5pL4hIf-!yuOmf5KjxF;x>{QLaDiP><72Mx0DGHTKX0wCJ at bZk7u
z6|7)ZA(~2gURX|Gv6~Can)rGJF1ErP<8haV+3YL?L|4);*qHU>s_)t$C0pR=LDp`2
zR9TOcArNb{{=Ez`5OHC;?w^ts7}MD}jyfDny?j4w7JOv_-Q8_{_fuHuP_6U}7xU?5
zC=c7(ae;#kmW1*(K;*#kvKu{l24<IFA*Z2Qv#qMyZ6tss%w)ZtJCuck<wy0n<@m<N
z|Gw~eW};uELNs}+O-2!0=m;bizWoXRBpeS3_p(t38Viog{Mo$WTKq5Jjaf71Q)C2|
z{QIV#LaHYkdN;p}g_EkbaZIKB=Gkxq>rpUpuv*9lgD>m<X8+G%u_8%&U8e*vX)C}`
zp&T-%Y#tQ?_*(vQGX|Iwpst3?GZGMpQX2V`%}M|o&m$2e!+n?!dLB?*X%~O_)*Vv7
zJeybuXoX?CsnN}F7N~GISTC-r0foUI{eR_{LK;wx>9g?v!!b{d|GzlqICZrYwH1^X
z`RCJqS&Q^vUO*QFo&daJ9RO^>>D)u^TohDEU(U6V1`Q#)ijq?C>9pE}KJgW9*wvD4
zUHWOGs?PDs=bNUZ#@#cY+!pjSwMnk#L*1Tjo}`Jix763F&P;?x<%(an-R at V;$`tPF
zSNz9j&n}_t(xl5q?MODJtU&??S)~aFe37{wGH10i^NQ=3V~Z7TY=HIqZbU{9Z}#VU
zsA(#eFiuz3G-3e;RdYnkRzc&!adz2)(Wkvn7fWc(F*iHi;ZcDCBUimF!teFr{7bc!
z5SVaikOT-vwE<!~T}A52#NyxtMh(@Fl}%=b{;-04qRpmM^=XwnUJ+Kqd5GR^@AE0E
zxe}KUf7_HWY*YX*`qYXZ_ at d<(ui-zxSfFaNj>0~>1y#t-(~LcbExD(7AJiaSERwy?
z&KW9|1oTAaUuG<Dvc2bDCvBzrcAwa<!W|baK$?2|LHS)sN;|t|BiIdcfEa(92D}gu
zlkBg2=kV_DL2&0#o>Y()4ON^kYR(4Rulm+P9zkLPLuzWIZa}QxRflND(jk-7msxyQ
zLD&20<y0}y-h0l?7{<9Q{q?5ZE!%cv_uA31yrk5Bcf(jlI__l2r+gIQriW>G6CR?(
zc~^51Tf^RER at Jd#myuD7OP)>!_0+Fj2?dXmIN4k{qxPeq0iLxpy=f7Q&el@&6(SGX
z)dmszJgw^}nIESszbAQpwt1YoFOe5!r!%cA*`zrRh|5g+bH!uW-*p-(#j!Z(?ssm*
zrg8NtzFtuZT0Q8Dag$6wWyuQmKI_1!eo?P;gE?c(=M7a-?x)|kxNSpZlC^}A$Ef#e
zr9N~UD&;6GR&jp{Of^vn{-sukV3FfiQ5gwx2}p`#aGK#oULzDI8%~+?g^V3k-MMq4
z?x28xyfUZS1`9YqjrzUZ>KzL_b%4Ejy~HAl_ThI=koTda4{(6P63ZUIA3 at Bnquo|t
z30-~U9*$py=2qt=Q1`+0_Fv0UbeGS}=NLHv%M{M8!UvSS{VZfaKDVBFev+Hy(vlt{
zX7Pi9!tY;!&Y==>yCTzR95M_V1H=pR7Jo)a@)ss^g9-}ytZ56&z<#W<te*u~z$2&2
zFK4<FtR3IM>$<_lz1?;V*|%h)CdDBywLJfT at yrH;m{Ai1&kq2~jQdBD^7q82%YX4c
zaJ<X1kRt-u7>3yud+Z~@Es;v=?D=FHqkvNzf6vG|8(r~ccpnkn>-<^gm%mq*469w-
zQvPnadd6Ukew1)B!!n?eRCTTshBr9#^k{A!cW}FgKucHD0e)#n at B@WTOQ%WVX!CTJ
zw|>)zy at RJXy83uJYge#Iw)4PmEu8$blll!&Z7E=*fSb14ux86?H;oe^c7jhOrSQpg
zgOFDPBIb1o6<!`C)Tp3-G=JT0{F?TD2MsPeZbd3)2b9Kg%^^T%N9X;hr_+R6IA2HZ
zil3lG at rk)&OwCnG9HfZ-HAQIBtDCdao%W~27+Yyn0Ypq=;qyzXs{5_FCx0k|g+{z<
zBRil~vm<5)&igl10w7?JhG>$ndzMGFhDx98XNeXRW#u at ILV&uUX?x%V>?nI&z33>1
zX+g5sni1zHePwgM5BMLXwC?FMeyDzcB1dC6FjzRCR?ZE`DuKl-7pN{+_zgJBsfli0
zZHoyw{Le$<O)Ru07V^>(F4S)>R{c(9$|*8xZ4`KaXyOU6x#S?!$nn9P{NQICVcxpQ
zwvbDvMi=21uzCEQr;s(|WJ!4ZQ5%4xw)o5krAKi`5MTvj5>VndRs(|d&Vaz?>0A{O
zvu;SfMO}88QJnK4+x7we`Y-npTO>XN1ee7u>G>a4$0{=L7#|Re3HEXz-Z8$HwfIDg
zhL?{9e8S*E{Fo at hW4qRqPPuhKxpvn5Lt+>XDzA}{&RsqK|Kv4H&c2n}Q;g=p+MU3A
zlGqt2Ac~jDlj8afL}*!39Y^2&LlBHN>@{U#Yo9J3uLk4;)aKlPJQ=w}>#$+nWYc^J
zxV=5le`)ic7)f-gfP3lU_(J|+gMGEr%9#^3lih|{>^-Mnxd{*mnwkPf6r5E>P3d|0
zg(1kJKTaD{T3yiZ_MJpsf{id at By}139YC;h#Lcb)dQef(EK4+lo0bCT;i%Miqcop>
zeO{+)2~evt#??cByaQZa9Y^!5Irf|AT_Os`1yDWJjp4BZ5E-oziLCqXXV=1k&jwhU
zF^m3|aBjbo+5T*V6GUx{Xm9k!A;U;1o0^u<7#)-aGw$<Pu1-|QeVxsyEByVuV~cpQ
z3{f0BWVB~c1NG;PIN89-s*itH`fRD#0io^n8<DHzmkN~y3Pd(>Z)oZLo at T7A=hS^+
zK?S<Cz0&LD^Qn=0I8Kq``Fl}m9)+4Q^yLRZSKPn-3Hxqne<Ccm@;!V6hx!W+sYK^P
zQpa`O5qiUO-6v;qKw<N%7yn1$D9y&`=bN6Wie}9fo(8)Pfv5w5 at Iw<?>{lXS at C6s3
zsyEASJW(M#GD?VjUtEa&0&@GN!_)7tSF^Z#fQ=N=l8ZJyl6J*k;p3Ct$gJ(Tk%>2y
zd<jF?hkgn#(#0V($gjv6^C5F;@qwb>`mO)z5+XUdTgBTT%&GGs1M;`s*C7QX^wELw
zev_P|<_EUOFw`3lQRFM0JJ3c0VENW{S)Vn{r|=U(Uh8-oBxpLn^doSz)h^oEzAWsb
z1>&+Q3vDFew6Uktqu?XaKurwSn&*LZO!*Xb+FWsY3|E$@VeLknBTwnB!|-N!yIGa~
z{jvi{nc`APhB3RWml0&!Hz(fxCVn?2x?1*y1d|Z?hTTnCOY`2_c?UwTn-qL_%mZF5
z94W;9(?OF$>^MWxJXn~XMLlM?4C$|bI(+2T5D at r%azEtNHVuKU1jnbib<OmpAGRK!
z>p0vQM{q*C++c;QZ<78 at z(vgTboi-m at 82H6UdA3zLVE>3MS)ymX`t9`-=8KpUf_xY
zSC1?=U3cU8Vs+)tSOzz6*$k>IT*#`VSoV697{U_{8$LMdB#K_6h8!@mYl3Q#fTM_M
zD|Zfj0r0B_IzvExCcUx-RACPq1W-!JOdIlA!841GAgRRc%gjh3+|=*l>4j^bD{HBE
z8qFI+jC#J{z=f%Nmp$JIY_`ycI-BgDQb8~=&*dp9KM|`B5JSuJ25XPw;5T)|PPMeY
zg5(Fl1jPTyis{9zwuxK_;>X0&MLSaIbFaGiMhrzo=D6xKeb&bLCcO1&!P?p6j!(ng
zD1A4KV~ck&atL45N+f}HSenAgHH&Q)Ma<>5P3Er^F2G{|HJ{-M8PPia?GOo?2RyUv
zmaG})@4&o46&Atq6Q-3zcu?qThS8k at +-qV<bC%nb!=Vu9=`)~QdFQJ!ylM|FG at OM&
z72l>GV7R85jW!dw06GBF?$Z?Vot)|h(LYF<{9vS?NfCY}km0<h>0hx9==*egappiR
z$hL}-HR$0DYjzaJk&j;H1M5`bwcRh at zirxul2FIvUz(;n+Vrf4N;>$Q?%QqIH at 7Gu
zI-0DXLeu#I&Qp2Ds?Cq>+}n>7s2i)<yPPcF?}VCxaEDfHP|$~q-g{oB;GZ<?oJo|g
z(?9X;r+lka1ebE|@(TY##tAo|7skRsqCE?)bUFpH7qq!%sr!Cu5+3X7hIo!rf!K5i
z>-oTzY9HpRUk4gbpckRP#OVX7m3it3 at aTdlg!Sj_=Kd_4?%Qvd6LuKTqz9T6fVi9)
zP4a^h6dIh(>vDwpwbZ;fTITLF)j?qJgIw6DVvmT{?0g3kko8F{E&!ZfWA}(JQ)?DP
zQOE%`;3siBY%N3s7&8-QP)PbaKU5&jpiUWA)WE$$P!kj7Dfih$*MVGc^T^cGydD9n
z%mi_)rBj$Ohz?pN|GGzkeXy$CS_69_9t*~{KRMTutDc%tZk$FQP(c_^lA<J<-KyX_
zriH}Us7d$$df^)0mf=DMYZLy}eXE4cq1lnbe-u#gR?RM!1*@b8X_~*4J>2~B%h|Ea
zYuD|KuCXdAXKs~EG&@&*?w&vv&{-7~=~vHZ9lmwRkw{i&Y>otMX~F)%r2!jW5V2?T
zts4pGmet``{YHa318s(dv?-vRc?LFV{d2rr8xYdxC-PI{rIQjjhFfK=)p6zrzc at DA
zhVAY^|LnC~s`E at m_>kWEJHxN91SCe#MH~kt0I2JifGKnlwb)AJL>9a#e*4#Q%<Y#i
zB0k&n5q>g$A1BArxJd;-G|(JB06XCL$vnd2aY6iOHM<-AK?$+(i)(`~0n at m>x^ypv
z&V7b^DZ|30`QB*ys8TAe4(ohn;GJ-K{JmH4=H9EVi at qO@(${Vk{Ihb`5zm#uF{;Go
zt5vL7wN{4!4tfpL)xO47(LcZ2it5tcb!uIVkusgNsG-u at nz|a(=^JPX*R!yH(~t-{
zSJ_MS<-~-8xF2xtjw=@&&eDz$Y at 7iEHcDvcJI08jsgB0ywleGq4rSqelMi!<;p04y
z;yU@^PB?vr4sw`I;$DWp0PJgCMGB9z!~_<~i5CgPy- at f1nH&%^t8l!M`-|o7b`l?p
zE_J2YFRbZx4CpZkYs#HN9T)hrTentr93*yONh=0)gid}kz*@9qnKon)`?1gF_+GXU
z<^+mOt<b at CaIFS8mGaKN9(Oql>$&r6>{h5;dC_7je&QIk-7ua<cEIylry|Uh=lswP
zt4vkl_gEY&HjeP6fjns%fk<)C1eGrXdc`#*xzV=XPb5i>3E;FZV`YpM{Kv^-_>=gg
z-Jq+qfZ3Yxo^k|das5bZl6P0Fm>ulu!i)m at 1ig*uY06SNK%m|Bj*P-2{2+-Xkcj6C
z6IKpZAKGX(nxLw(BfH8`0`{+s)uo<PLk8j%^Zbt0^IB`la~UKQT62pOCr)B}+2WIV
z6;(@3?%t5^xNaJ&kK1MMiDjWLFU|-K<4hNWk6!rg%7>9Wj5MT+^|%jgoPl5l(cY6%
zkW4%5TotN{y(HnW2b5{1h1_CF;@qCBVZp5YKM&q03?QAlPD`_w)7#&<$4Lz3Nai@;
zU18m9I-?13vAqOW5CL6K`MJ&ZpO+nMXC~YGo9}Uk>wn-~Bn|<~ZtuG$KyM#&vXp5(
z%;{LAi$f3MhjwuRHF`Ms#SL8VDqn#2BJ5oww>3SVecGKO0brMAq>Vt6TjN(8HY7LB
zV}P^=VwHCOr at I70v39Ei)UU-wD#KEgsme>Mg^V?n*ZJso?yT`x!KRdaozZ5M>buU^
zhVuej7xX-TmfB!JHrVr^q6*O)q9o at Eo!ea^IyGNZJ}$8o%dS#coYgpFxtJzNpNV_N
zUEYcY=$;wr0-*G2n#!bsD-znpN_4`{A2a at 7h03^<1J1VyuM{JaLZ26j(pdovAj~fS
zz6!6aGu?O5p=P`;paB`a<cM17sbRF;sLG<N6tIK#sbNnw)w0f{J~E%2q0FEUK=B)^
z#-#F;?`I;w(0&|IJ~HnDCxzONgcLj&RroG5YD0q65H-`qxhrD0^mJA8tl4NqQ*(x3
zLb@`wn`qO^$ESuLX^Hlp=a!F#x=~mJBvr=ka9zjO at w3ktJAAE%?!3ho#t&)^|10Nt
zXS?t>^_+hnin{Qo6~WATZd0-=kZo!b<SN3sS$HV5e|p_-6oDQxDwHZ5C0uTnazbcP
z%E;7KbC0r1<tP{50Ivc4fZBQu4^@fBA;D-p3x1qlmr9|{j_`o!vr7CzZN7B?Whig>
zeQgX^_47J0-gL>fC(uhfpLqct1r`4>Tr9Uq23<f81Ogpur+fJA&R{l$eL`xSdm7eR
z<g7a+LF^`{lq)2Nr`BfNiXC8H8vN%1vGdt({llQHSPo^a&E?ABWLQwM-|Q!610?c!
zn1B+betpn+P(W!#A$P9d4l-VpXvrGOENOcK?dWL=gIdj8bfb`t at i7th_+u3Zu5dYU
z)LNUPCJ_ at Jit6B<@*qz>)rVD}d?q6sH1Aw&omu|Q*h0O7Wk>I2x|E%vqx)85`?+xr
z3ovgj{?y5~w!F$q<B#f?ayolLe;$IJzJjKN0g%hhoPS at bT%gtS(bCdy5C0R4Mh$EH
z`ycy^Qfp#8v{R{7jIgL`M>SESRbAPAEGpHrYv-zFXU+FCRm(nDI3-(AtX;3oFq^6}
zVBUEgw1ihOZtEWb3FSlJRf-x928zsd(tkwk=YMY{BZ*FVtw4}<2KrBPnzMyHZvn2S
z4G4U;XrAxgC?Md<ZF_tovIDXOym5f`V;A|tWZbGfIt_ystW3aUK>$~0ZcSqxO&Yuq
zW60_^5&QEn&>d;ilZq(`rdO at r_o!K?Ffj%76$rzD8PDXGP;UaMU+ih78&m$lsW}_d
zp+9&V&^e8iyc_X!e2h2#t=lI(m9H~U=gU0yo!*UFg1$|o4HgYxz@)!jsHg(gfjLY8
zi(cr)5Pb2i75KFSs70}>8fb$;2J?l08#<`b_VF1oCIN1<po3tu==qMuLomn~mtp{n
z1T8)21y|{JsL)u!$Dy6Tv`^R*>?Xo5De}8B*vPa5dBeeKt7RP8Ub2p>El+-Qt9&>*
z*p~-!X?9KKc2iAF3<TD#twRARG=Gr~KD$xS<pz)a&G#rA<0Rj`bM=1&AZ`e2a1Iej
zuxtS58V9%VHV9PBO33QEQ&SHGu3N5_=r7%m%hfb*0Vua0`2bn=A?fA2 at r9?2BGxj#
ztqX~H+QSR;zDtgYMMc!*0C!I<fkzRL6Os&{qGSd{i7H~S!1nV<%t~o!?#Hox&pl&h
z`mhi}o-VL|uV%@%KN)^S!c`_+e3C!C+LWp=h&$|L-9JY=bJbHt1}q(KZQTp#WqmIt
zxjMWdSdZ at zRwJ;}YvMGycmMWypj|f=@O~7Y54w|KCqs9Vbs4a-b-Q=u>d5~bgYJNb
zZYP3fk0|1dF*CvUxC4WhC;`H>>@QWS(LR?jq2j{|uiNP?yuwBA(o>)3PzwdGTyevx
z2F;i%I}ci;<7amqS37nn4uWfiN~irCe>{)YvDH~v8>uFkc{vzd+hK4h1l<Cl-s{oB
zAstq4Z|eSRUC+~bwX*~BI8;vWbN7!Dv06Oy?^-1&i`w}0C(@m4jx at H-wwZQ>X$3rX
zGP0dt<Bi1@^xlA1K at 4akwbX;MLH&WFC3HP*N;;rB&WbniFjDx-NHn?ya#KPlRxqF7
z#KA&{N?WGwXUBp#yJn^{?Kf^Bx+lxiO!jB3^<B`ZG*!-ak#5UN*siWOc;>y&V3Acc
z<z352dOHuRd`dDPv0-mfLs9ekP$~t%D^prhDSSl}j&&S#9{%<6NqBXe?}*+`$S7F;
zFxKlY2xsDUwY3wFf0Wynceaw(xQP+LiWAxpt~qCz^(+Wh^*B<hO!HvTqMiFlN~U$F
zvJ0!c-?j2fU?nWKTtJb1r<Nsn at dB&ztuzee9*?a&j9?7&pHzMxbW^P294cNdBiAMB
z!0_O+&q-l~GKmR!mIFih4L+g8O8wt)-{`?EPNUj2r`(ouQ4027Z}rX-X-Qw3q`=^g
z-AVo$zz+wTt;%Lk*j`dd&9%quawM#N#AMgN+(O+*$(>d7PW$$ZcP;f>Y^VL7?riWz
z+x5)sI!Q03pHx7Mg;03x{Zr_nyYooNPs^MmMX!<&{BXbL<hL|57nPZ}C(>DCZ at pl_
zZmkPfG?C<-FDoYv!G$cx=cjv7*{BJOzbiE=W_kRCk^79hFge;WStzV>b`>yL#aWc_
zy&W0cn!`7bk?KPVRk|H)UTf1^$N#m|Zg#GQW8Eh0tL{tXT&c68^)(MCQYy8_#fOV7
z_n|DCWvNcwB?#Z_DYCP4My1SVg8QB#mH2UqBYE7sY8}{s7F}tJfrdIAOW&1bmqm#m
zcF^~Qzr0DF;q&i8p`nd-2iLS<tJwC{e@|?+{Nbwp*mc5(0Ksa?W-q`I)`x9oGr4_6
z?MqqUMwr0x+-|Da$1(#WQn at tVB(U8CsY3_Tx1UgI0v<*hf%g=F1}kjK(^Q{5LGN9B
z#@L4U8>v}Gp|ODTf<@Ykuufv+ at _->2_Z~6A`aCSl#<C86R;lj{Y?i3gv>dn_7Pr(t
zGPC>Z(fNngOq^L9NOJn0)wN)6iWRXK*1mR>E&ZRZTP-S(Q&(zyCelf%`dg+~#J=Nh
z$#S~Fao!!+J`LQyWA#Yu=1jk$k*{5a3E7BFb+C5H_X|)(Pk%dO3KZ17`n4k=DZ6<k
zZFFO0ne9Y~rOBnY^;OB2LF0WACCev2%+Ct%bEAR<;VAJJIPtUbVZ|BXtx`<#;mH38
zer=-&fMvPu#i~`U%0*O1rEXWo6L;<mERXM`HhxAT=)&@iHMp<7S=Feswt$5oiw0~F
zM0=h>D%P#|ETOoVQ5fIZDY-~E&>0PJbzR<q?hT6g+Pjx5BF4D!{6#QAkSl&yG9WOd
z-$i1Ewkr4 at 6{%_ZQiTZNg?YjXlOp#iE4>KRi_z(GX;8E3u6+akF^QIRavVc8oZNs(
zwA;$`2Ub+5T`?*-Hk>dMa^DwutWdorX`Ug8 at L@y=mT%K+TDmb2?wH|}k;OU;@3W-S
z-e?TJq%<Ox-X<5N5Hw41L(W5SC5@)Ef-vDF+oi{^NC<z%`a~awcy`O&k(gM_RNiqS
z-mNG6GsCw=LXvm=H)@yOGhst&?-7#VK8CITr-dtzhqC+P4^ku)Whz6Kv6Y>Q#y%6q
zzJz))!r0Pl9m^OZ*=Z~zJ7X!-;0-S#TlLzP$vQ+RW8cY|_&w_P*L|MP=YH<<oO{nX
z_j}Jh-&5l&xEN at w5c)VbjCS=yIsnvzTq{+^z$d4E$+e@|F{d=wB#_HwpqDC$Df7UF
z*}m004}ImKC$b~`kN|KBtE48`wgOh=+$VrFG72fcbl`M;eIJ-2A(IWRg|uEFt;J7m
z1#zjR5ZDcyD_Wz~Mq)nGq+N;UFS)+DBAm%cqy|QPE+Cq}(a?;$EDoxOa~w>OTV~2z
z<;KKW{5QF`4ID`f<Mbe*>S%#PQVy_QmL}F3{A0VTVYsglLZWj9-o7mN4PG02%!V2D
zlrIXhqt4L<ayGkd-<1~n&746u%}T`i%^T8<Gft5Y7$&O?2Q)YKuY_~~N4_$+Qu#5C
zit)p(N-ao`o1{U at A!~>MU}HPP8QKOYotYxOzDR)aOT1wcV41!gB1I>fE5_6z;pM{<
z?_TWwbEZV2B6Rf3R3yNAW?iKx(Rjl@(eb`Cgbs_?$l}!SVnP&(v<EKGg2i_Rk6D_d
zuEQWL>}-Ld5+UMn8~hf2p?%gKIAR6q$3+8)- at y16?k?38jD<hn_T&d{hsXlnt;U&z
z!0=l--E_bty~mn{p_NOu5G=EO=2F=4*=Byxa?P+3*ewQs)@De*5ES*XZcjSJ1BUW6
z;Yd88nI&&s2;l^dB8Ifh&->Bs`HAxGQe6mf1N3YUq+YCPFe3y&4_p}D^i0+^H`)wk
z4wwN?Sf|$L>eak4jFzIjsogA#a`oYbe4tJ6#F6PY70rb at yrD))gnx>^Ct}W&UX0gu
zJl)I=KwpW0TcjRjGF%q-5JD!>#KMj2ppzdsgrgFZ-!fViIw>m9O*H|<1;6`IEthQ6
z(#y598;t=6nVEP%N!J^5$q$h(>K$8nUse!!LSHti3ns>2-Dgg|c}>wip2n?ukC6re
z!kh^u`HVmANQz7{uAfUj&w7$R-^r|gr5Dc at 5<R4|8MekS0!;ap|5vJj(ix$5sJT(0
z6v#AnF<EHjWY>53<^%8ohLwMzc-L<OJ8Gl839cYzR3dlIvvwaZilB~HB!Cn5?*=O{
zNqZJaQ?Q|5e_*B%0DhJ$9^w+=Fv9~->6Gr8f(dYGl1~^ME=Q|VVHW%1$wIokr$y{A
za%=!OZ at EV=CAEnG!g}INdIAwa>&cY?D8k0&khS8E8;A at +@+kdOkOzn9bp>Vz+?!*K
zKf_H#avZncwn)-lekxme&=l&4tyN=Dz+_+7FshG-stbUFl^$M7zJm8Fk3q40K0D<A
zkWR0Y<iV8F4~Bz3^ZzWAb>Jz7w$LWqOGI%ehLB at OGbB&k6!bdL6(5^b>Gte1LKBuh
zWwlXv{D3lG<eY<OX2RoXNuVj>yI64eZ2J|xMep!$jIU?T00DzPX&~t>VfjN^8}(M%
z*>?Ae3=l~$PE8K6ZJz2$G?iCRXQntLn{+XSKt7E8c5U5$bb;rZCCzVk2tbV at -hfQB
zxY>5aznb}%up7HZ)#BoXe>6o7IHGT^xjzKc6$RG4MG-lZxr$y%65t9IaCaUw{C^oX
zIYnJncpv%@&)J8{k^`X4wi$v>E{xMW1JNTDpOJs2O~Xh at iL&txA=}NKcdqFd at 4I(c
zNd(0{0LRi9cE#<1HmD(g;dpdBeh!p)CGj6YlB2nfFX<>ScIcZUMt{-n=qH*tvbY_B
z;W7Kud#97rsf;DQNsdR*<|k$f1_MyV9xjjeJDm0OEv`+GzfB?g at U)u9yJZHHRPZT>
z>iJJbDZKo(`mqO4{so~^EkFH}fA{(t$k6#&OOc%O at +pOWPZuDaf++TiY-m&L9sTJ#
z`&~0#&YtWA9Y2k}U%LWFnDl@)ZX7-xDX)c&Zi|&iXuf0k^YamVH at 5ka+Sf<VO?iIS
zec^t1<K0&m;e9%rR;CW6*-QRC*XZ^v&6QCy!CIU&p+H|uise+9UKj?7fN|tq0--TT
zwllfxLVtpiPx3Z at Hzx-O@a-h>a?+g8vQA+1KJw$MfJW at 5Dlo+dKtc#gwX>!G`m~1~
z-JAj)lzu%h&OY)U_lluyx at DfYq31=G at vAG~T|lDw^hrSliDANxr-F~hmh=&5un0r+
zjP~>xzA4Ms-beNLE7mD}b*Hw(XAn!fv5!`bJ`mW53k#@Mj-Hzdqzr`x-K|^E*S?h)
zH at 6|QE!+k9GGt)K57juVYRP((@p^TT%XIazU?R^}w(s^A?*8OSnX1Yj?A6Dll7bll
zV;iiV@^IeSMm95N$(h;=c8ZmT$;ZIhuxm+f`36<foVT-dgX~?+uA#pR!}BKUzv~-A
zm&}^hk|x%}=VNw#sbz(0_k!Qw`$x?w?gz2Q@>qB*w~+eufmFUfUOA65Qj5c1h at kC@
zdvIL~EchYXww1Q6BxL!-;@tcHbSkYkkqSc;xo<KmqE$S$_y!)El;ugjQ8 at a&$D6sT
z#eSdHBt+e6s?W-geTAHG|CP7an at qJYW#7M?j$URL>*4ILIy?5mu57p5OutgyVivg@
zb5w_ag|ASri!>}gzLwap%3p;m!j_gMef{Br32hlRF2RoqS-U^$9WH~dZnY>;xJ<M*
zzP!+$-oH#K)uS5c%kJt><oe3cDa-lpv8*Q9Rk}XAfpLw+2&&;t*!kFvFDe}4&l*rl
z16F*Pa9Pq^x%z>G+p>K>L#0^|_u~Y&CmX@<fA|#zOgFqN^s~}0vd~|8_akI*vb$~2
z8$Kj&i2C?Y2G_-&l{)CUcyCL!jCbkYRuF2 at Svo#)gUK;c7oD{1trH-q!ZbBb-!)0z
z5{Kzjnr*r{EPfc~vkoqz_4JLEt8Zrf5bl#in;fs+i|<0`+t>NxtPb4padmA<`?Xl!
z?9&TZlggW%SvG(5z2UqN at D!_~PexFCZIU{fvh at k5TOO!e7o>0o3u~q(mhMK!?iK^e
z!q$^wC_Y7>?G$D%Q>~3v2W`q*^X-uju(d5DC3&W}0J(Cu-`hx13lXs-nvPe0G7%FH
zOXcE*;iDl%_DQ+Kp8~(++QgJCxUshgsW$cax2C(@&v*3%!*bdbpl0rSoQv`E^QuD1
zM)1L7>;6yHO!|=I`)aAQj`M8<9rymC1cl*wX~#$b1JulY=ZQ_rm-9+Hy6oF*-K~;!
zFm*4DUvOiq>7v0cybQcvp!1}(L~Z-#t`0jH!Q7wR)t{MnYbbYXhe^t^sF$!}!VTwF
zUZ1XtMK7e8&edL+$oZ6XS>ZY^lh7hI_W`#FhvCYRyjn?bkDs7uF@&SygNFMXW*Q|c
z7AwPIIPWiWwHD}<)i&=(=*U-_&=+ at X5*s<2Z*IdQht{CPQ>(Tp|5$n1p%ieYioTC`
zvGyOsu~JX6x5nq9bDX-2wc0rUCC|xl at 9+_rDbx?=hK=)`j3a5UR}vN%9)?!$RbVB)
zt6Z}PUiv8zq&jr{D}JReAXBR8{%-EPD~Iv`=uoVHO?|;T?WSqmu>upH!_O?^zFPh&
zXRL2%5dT`AFaba^Y7Se)`+XKBoCQ7q`y7bX<{=(E_g8AQT-E5DOvhxDFN%J}YUfz>
ziK&v1_(y3))>!QcmZIL-isx3SFAp0J!;Bs$)L&>oeQA=@wA2ne3b+Gff7y5h$IiTn
zubo95--B{T*?uq=w=*%nibjHhMz79b9!D^$P*VQV+NvUddNc2-V<*AAD1uHmEDn8V
zO>N|!b%~9w4Nj`9G3eQ{iuYlc+)392?@g4T#EG}0)OxM*JA+^y4dc%2dk7A8AXT!V
zg%+eC5)jWHutQd9HNalhO_v at dtL!;^JJ_V}TGNy5dCZ)Z+8_`)Xh54`%p$u(>_)Ve
z{)LwZe$w3d@{PHwKtUMCX8L!qV&ityj~ed_QgY>c$;pmn?AHoNjWP?owPnz_9*<KD
z(=M4C^#Y%L8Lh`2Q3Re|`={IPKTZE5tE3S_&^z9(*l$^MO*zmLgso}&W@|Zx-lm{m
zBUFp=maZ?9?s|#Gvh;DDA at KQj7l>cXjzY)S%HZIy2s5C*#<Vz9K)&U!W+8pGY2ln3
zdii>7(%h-U$NTZHbjMpBrz$4~3(|P5XZ)k=19OJ3n(!#ckD}Cd^XzkcN66$<&MwTc
zKUK13OE8K+<h<qFHvX*|v$+_>e+OBg8%4foOSe+DlhQF-7+YF^S)Bm|%KyJ8L)RPT
zV<41a@#2F0RYuRXnx$2e|KFZsL7)>8CfaCaH42Y9T?KKQ%!K$1fSsQ><jy^3X+`99
zW=+fP^VL(9v`a;b4CUqsM%aZ>r!LO2$v{m86ks at huFTsn4IZqDx5Ras%Jg1vFPTnb
zeW&swY=!299Gnzz6E at x_QC~FO?2xZ~%K7LQ)S}DJ=#6Cqk3BBUt}2$TW9)Jw?=s8w
zI%otn6e4N4fj<8eH<xR0-wxVjtb9BoOv~(FZ$<suxFTsdTp|5uwVARZ=}2s$<*xq<
z8~M2FJJLXqh;9o9?FO%SA$oNSLvjMe_g`6b=x#;ung=7rOXWWK$WJ!#Q9HUkztoL$
zLHZ#JYcu|^Oj4BKi=P>o9G9>X?Q at CRuvK-RL=Rj#bYGL$5bvet3D0MUnGw1k;NzZ9
zY7(%S5W1)5|8Q70r*1-M_ABpna4J at RrT>{uukK4BsrbI=`B#p#rG6WtX(~mdYcc_u
zaZrKrN?gY*7uT5P`{o&fJ5Z<Zz?e-ns-zB;Ofuy#E>9UwryOl`_TRus+Etwif+u#3
z<W)vCHt=a$u0{<^*i{Apx>>`}3?5k&S9DcSu|`tW1iLErhUY(gxYktK=yRNOUke7k
zkMRj&t(#Ma1M)okI$9BnA`@HsDuq&(CDoUgj^cdW-^2RE8*hx=G{4g^D>7NYDsynQ
zRM|7p1H{(%l^i+vd09)|v?RLyhAat(!ehJDy+wat_zhgVa*l(6wmeerQ|mrDuxb^6
Mx@&+e(|8#AKeclho&W#<

literal 0
HcmV?d00001

diff --git a/images/user/ctf-trace.png b/images/user/ctf-trace.png
new file mode 100644
index
0000000000000000000000000000000000000000..64a389c21b9bfc3ef57de7d8699b019ebfc7dfa2
GIT binary patch
literal 16038
zcmb_ at Wmp}{x at O}9CwQ=h1PJaB++9L&ch>;H-Ce at QEkJOG0KqK*f=h6R;BLWTdhLDY
zK6B=|XYQZr2k2GR)kW23Rp0y8ihQRejgImP1pokaSs97<005f+eqKgK1plHPiVcCc
z7fv$TE&zav1O0^oGO`E(07cnaT>RZTD at RvH7b{06h^)9c#L3yw!rIOp06Z45RV~$2
z_wWU;S1!fmBLe=CcYKeB40$gW9e|riLr?JnOD=*UZyryj8(UHmo_OGM1YBHPKn$J=
zBU%*79MW%!{J7wPh^WE)b?*Y(nYQcgk*9`Pp`D70?D{dJE at ZS684eY$0JKsuGVHbB
z{_lP3znMh>QK+2&EaZAK3YSMJ7~sZFK!Aa=3#kKu at t8tI2D%h8yI4uWpE38v()C~h
zLSVXF6M5y418 at NmuQ;(HKtu{AAUlml75EGf7!8 at 4Yy$6?03%xe?I|E2`zGBR2GISB
z0uSbMA^^cLkB|VY_<@QsjVMV#ixt4NkpKP`m}3H1Wi>5ifSM+tYZME$4nRf&SXClI
z-vIF5fYAUIl?M=#4&X|iYYLn(RAKGVgOW<G6KJM>D;cPZ%=7_CQ<IsDZd8_l0hikt
z);L3ixyLh|h&_-KbM0an06r(;fwR4M^ccmc8Xe`1Ys4^Q+V4bsrZh3xeA*f-cM<`B
zbyvTMCq|a~R{{Kp0rpS%uaDua3{XFRypFc0!xU)%KJP7PUN}KzBbk at bJU_qn`}dsO
zcQIY#K~3K$%O1ln%}2XiKY at qqtF?{|>Ogk=Kxz1!wVvTig+h|CPcK4DmbT-iADU2~
zA4sPtzss65YtiFws=WLVCy^0z!CpuiDfa2jkJppWW*e)F_i#e1TtJPD5R7*sQ;EJQ
z+#h*bEG^frjcWinZ*}bcMTZO*U=_SR=Kg#l{3!kTH4tDS`{@G!7)Vevs}0r*_ag&<
z#OFZz8d2iQZbHT`M3QcVrEb&*Bkm9}>hC>bSYjw<0VK{wZz_Vs=)y*7Na>AOeu<EB
zcBxo}B{^X*_o#ov5Ol)4Ge*worfUm)0WUg$jAKl(5CLNnr9~BoOpqRWL(we*|1z2y
z at -qTgg;G9|ONQ-zlo~``hV)#}8TM_so>WUB{{X-q^bpo2&GuJdor>Tuv<C6!5}sEf
zQu(OkX0B`*@%W!J$DO~v5{%)_+Zivn!d!?K67Og2+9gEd_- at C_+}A5s%ggv8$#kfe
zvI4EV?^TUP1zc<7mFZZmJN(N)$*vdN at a|#|V=_ at 0Ed?#5Ihhg&2{kA7!V8`ka3Lx^
zw3JCD@?U9Muy4N;ny|BlYsoND&Ag1qVZri_5dY3Y{W4OVowhjvR<`zw+T_bgsY!?T
zRC|o2nVd4OsFHpznAz4Lz5R<3!Y~l}JNtL<Z;s!@zbVdjQL;@$K76 at R-Jp9vXd_3o
zg|)@Gg=n6}E~;LT at qW1^PYs(ZUPr7lukn4gN_Ytl=f{k<Bf<Ex@`aW8$y2Ya2&}HH
zt9M;nu$Pm`lv2kvCx`Z=cT;!aF5S`4!|;OpBP{8NG6|6gEs5L-tJ4&Uh^C^6`qfx@
z*bdTm(lOH=)wSpw>3#4L2T_vcl4+8O=~>iD%ZkcY%23rW)Q8mKOAS<gtEAL9R5wds
z{7NZTFUx*+ph~Q2S;}7$US?V1s3!cyPx~<vQM*^6S6Tdv%I8|c&9*)Wswq*u2P1_o
zdU at E#K(6mJwIlOBZuG5bkEE^9f at P(7Z^b#}I5g|uU;JeujI^2d;U>#f>BSCRaq5L%
z)C%s&n~gWbMVt!FZ035lWhtpCTIDk3D&^7#?c7yI#o0yelC9eJff%Cwa<qE1(w6a~
z2-!QT^Qz0mD8=}Sf_zt1%w at KP#Cfd}?wt<B$7wko1_3z=j>RjU?K^iQzATSwkM?)P
zSJG%&i1ldHh>K{WgaSXfJ~#@Hvh**Wsfg?Miij5)CmW}(ha@&n2oy|9#Y$nuSoi5|
zQg7P#+4mLDAkt9K$SdwE9%sB)Y%Y3J#IL}w&_6Ofl0Pz&&Xp<1Hp{+~xsy4Yx!Po;
z<DtXYSkm~-T(<7FPLcL;W1B;$&Rgw5Ep;9Jda26n%GWckm953t#m!1dO655-mc2D+
zjXxVpn}}+*<`5UF8tof>jV(<GESr8*^&Tg+C;7Jc#y$!np at +|7l#}X^`nh~{#^uxC
zTge#BIu`c*ahbBmVyQKTH8#hw*@!dr=DT&aYUY%*C4ptLOYlWRbfkRH5Ob;!b0%@$
z@<97<IoGQX`s-ekSJ|2MnLS4(i`B>6$JWQ;OS!|Gxo>i`Ib6nj2gKJ at wkCv8bCX$Z
zS1bIK#gzjs8+NEzOj!~&D`#t(3f;@DjZX-K{s=keZVGJ*@T{<}Xd4dmbTth$4Jr3J
z<`{;qiu+SNn>~9yPXNUMuVF0VA_GMObz$#synHA+<AnJZ&HvQRABo0%ZWhH8jSs2}
z+Ul;Puo^f_sHC{wNgGWZwZ;g2=eIjEj%2)T9Np`OMjIL)su?C6=M<s!YJx45%Y9-=
z++|hbP9jBOCDW2k`E50m92dP%8MBSR0#6HPi*O&ah4%2YR<@R`ojl1~X8I~_2fL2d
zhog(|jqDB7O>crUmH~Yy&%Du|%g|!{Qs$S8d?_Ld5lXy&or+ at 7m*B^|KF4u?9f#uC
zL)v3W$uhw`5iuvOM^C17E<>;A_31FNjmwkz2S*{}R&xk#X+oO<y25fMUk-kT8^oSn
zkguIB_)}uS2eC2=#iT~deameNx1kF2(7LA|4$)04WXVWBZR-;%5VV<48pVos)pY1)
z>5=Lz%{47LM<NH`rj+L}j2sQu4=yI~WS!(bAHD2(x&EoKFic*PiBxO5y~5^goxlgr
zMU+iE1copT#0r6LQH}KW)5_&XnyFQO?KEDBwt)uSgF)R5Ft!J%>L^>Gz6VRQNBYWI
zEZVCL#&==a#6ozHQB}B$1gUubb974{Tg2gxgPrM1e|;@2|K4miW-)28x4puYql=MJ
zmb#sa;ebBB at D+Vk<LlAYAIU|Q)DgPH*5F3*=7LUvZ*AtqKSxLSh1I^OU8>!waUV}E
zHyF>}I7}Q9d$;}JJe*$CZM%LH`q{Cl4x_F(Z82?rFMD5qEnF2 at ws(_qZ?9jeWdGr)
zA8r!v5s3<;aklx_H0h+E+WYt!h68Dge)5i|>=Sn;bZ&I@*sQ({Dkllg-+R|DR<Fs>
z`4-$_yerm`rpVn$ElF8y#4^q^q%u`A?sZLcTa<@|CT8|mydI<%$uYAy1++coF4TTn
zFYE<PC0U-2#bhUE`}#58E*UN6H+t`wj;`8ZI-ay(xvo!2K1c8HxABkaoquyZuUp*0
z(fp>FQO##)zwf#)@RT&A+~1njno-rPXWM-2)!yK3alJ>J!!x>k+3tCU|2#9D^Hy-V
z{ld%f`p5OvD*m#cGwtK(Q0u%q?QvzBa+~3$$dTy0_;UEPu<p~++{u!^O_%%Ui-{%a
zYsAptv8TkVcuaAG`1JUpF!Zp49A2TfZ#RUUANL-L#mCIXXmSXi@}GvP2=H0_Zl(`r
zM<>!I@>0)JlRE8v3Lp2o4v4B3`+EAwI(~X^uo+xx+#hwjFS(PR6s%$@|Mr3S(>+_=
z)?TTO7vColB_%z>!=+t3m~t>Jg8NN~smyyt0PuPZ00F at OaQh72_W<A{D*)^p0RUeb
z01!BSGW;P002~vt5~6Az3x~`0c52tzET<=)8E-EHHh0)~ErQqx(O%F{uPtFYy>!l8
zNhne&zmc*hXmDIm8(EQaFU)LRn3h{Kux6-inUuQUaGOT5PoZmXa+l}cYn08hYuTds
z5*E-+=!D41x>igiJaRGI%(9)e>B-p`Xq0&(4eM<&I`v?2cyV=-^-KiwRs)CyUR|C<
zMt~RE3t$#T4=w=<C;`Y|SP_k0iezw6f>*u(JHQiQ14zFHuJ`gjkcgyQQ9!FHwE?zA
zZ*}-JB-ZX0ENpD-2}K3qG#bDKh-QMJJvvariC}9ZLHp1_MwEfxO#-N)xBp!D&kb~r
z%~Ap)Qu0_}=g>bZbw08MG{NY>pW*?5C>QOe{*N}H{m(_izL;=nFisifw9tQ*zqQ8z
zJfQ|)0uKt9iH0yWFS`7ZSWzGu1h~pOp`COAI=%~-K+LeIFUvu963nNF2=F&0k55qG
zi6Ovn|2i9y6>V)S;Xtk<o2MNca&b~V-AR at yO}A9wzZ|0HUXKx=-ziw&7)%<vJpOQ1
z`P17Dv0nduxZiV8oBeG73kx<AfdCTNW73glAj7IPuu6v#)g-QHuv;-T`>ZaA#&=om
zAGTzCJms19G5*Qp$u#qF5d-kgSLUf;*;G#8XH=H>%2)#@D={?jW3eVin4#s7hwez`
z>1A`=PWZq_<fenX6RyWIKHnV7tLlE>0lB&AcdwTgXNos=b5()3|KUhmm#r)H>bAVR
z1X_ZGgnQV;V=JB`KElLp*yO_nP59MqhZar3!c}$gMaQdb8OUtl1HGZ#-&$&^k4d;@
zl^Y{^NF*EgYYZ at 7-tS5i^g at 2nGCXlghoqCcbw<p?2;IUo#<4JAGtvG%Q5 at 5*VU7Xx
zcWe)lWIfEwc~=XL&d-Zp5laSND at 7bazKLVTOZ9({%5{@?zK(f{kFe4<g32dzHsRp>
zF_~;K28Nk at Z8XM=OzK!bMmoJeZm;{aI_kJuva0o_`mW9UTx<);v- at 1yGw|Hf$2!ug
z87qPR!##<-sKihN8`h6qa2tNxJCT`iaEeYa(khi}X_0fFqsn>ogFT-3dKO<%wRn}s
zCF$1Urtakg`@|q1D*;}pC<)NPgBN}X)CM9V2qAxa#D6aQj}88L6>3i4<$!vtVR8I0
z*b#=Fjp^UJ?dqeB^#d^_34CN_Jykb<P`j7TGe&lIvlH&;d3v|=3POJHbY6y(yYN_B
zFo>EtgrJgg69x4!rVsP3MHJjzSAyaFkAku(<WG-*hWh%u?D)ROtyhWmhVE*f>!+SX
zWYF=ayiiG5JM~;IInReaGW^Ak-|9TQx7*mP?}G;&R|-YuA_7?PqzCr}f;^r7eUu97
z#m>}nFX2T?z*=gsh`n5}p7a_5I&FSvf_4y|(v-8|w#RUr_6_;D<*&gdOCQy5gf56y
zl1-My<0w2O9>f>;C3w{$Q&Ad*ZRocLvnWM464-S=V1L*ILPj5(l2S$}iK3~9ltqTj
zEOO<$i-z4>zfS6CROD%V;8SFHUPvx4*4Pt#cX?-HZg{e>^ZxiFQ)M{akkgHT)15#9
zuKDPl#rro3 at zSh<WTG_5^cOReH}$#_?{Rs{+nm(zx7AlmYn^0$Bd^Ryv<(quGRQ>%
zPLTkOSCj~O5MJcw=g-fnnFg$6I2P_F+jh<7;sb_t2~BNn0ctflljHe$50A;c2P80!
z)b;z<)*^iA672Zl%Lidv6cQF3+6wXE6ml=AwP7#I(bUj*bkY}6Le?e;tCO3nAwDUn
zPFp?B%>hEyI?1R_$*H<Eu9bSbGgz5fJ-<)s9x81qbO)b%<Y-mDaXZ08O~Xny^q6Qe
zguSP)aC9|!iNhmRQ&#zL^v>W&7)i1r<LdQHDwm}%!?b&?2Xf|d9&0wgvDRM_Up6D7
zk_tCIMAX5nY{&Np4Kl#iNe1TYu;Ik1WjR;~pn+1hYY at Rgz;{@=!h;;-d3)KlZMaUE
zZoX4vI2gLC+paii+aCgCIZw#xu}dYK<AC&%x$G~QNw`ED>yd-}!Kd)l(LG{JjUD(1
zQ=7?fcb6U^SLVLjE*b8=M3BgBVh93EMoQ()w<2>?%#*30gG||C2B93;Vv3rM3YG);
zirY^mEdLmeFY|wPlN2fgnJk4U#sdPh-1Zy~noLQ)B<)M2;5kMOEj-j74pr2QF=O?_
z5u1qDI1EJ{@lEy<w&j}ISWZ;zaTh#Q6zK*_v<!B7(=jP`QX~(X>j)!F-K!xU^pVj8
zvziLNhJH4NKYiiy7<gTeIrF1^$UinZ^vrBGcpNPUqh>hTx}fI&ghvz;2S+ at lQ$Na3
zH!4pl;>O)zRNhG>G>rl5k~fEmixXgF<cMf~M)xZ&KJ*dn_5;8|<>6*^E+6}e{VBiT
zX=~dqy1vd!mKb`5-BTW_waTB<W}L45O^Ub at RvBRxev!o3u#9!EDp-kHzon&L1Od@)
zr%l at Ji{WSKrFfurmW7tm&^G%d2!XZt_8v9O2ujmo1;LgC4GQHZqN?ggK|9_Ky0lM^
zhs6x^B30Ks#t_bsz;Qf4Bz7v+my};+({(eJik#Ud-7OmL;877Z$MJbndDG}*9j{>u
z)S2x}`bUHJFm(*$VWUO(mtoB7*%MekWu*Fn-0(gPH}~<Y($r*<dMBf<2n$$f at eo2H
z1mOGB8xMO7 at G&?uF>12*!Xu!@4Au;k0_l?l*hP2o!r5>OQ|{0o^9H?sY*rx^r2tA<
znJ at 1x2>+6J0UJ<JM3JK)G6kq$eWu4B_yi9FyHRQ;yNine<5rFr5U}Tg`-!gGzFs_q
z+DaRJ>Wt8&6khL+{3UlZLgZg~6J|a?9(r2Xu)F7NQ(dm6TU!oZX{_(AX=_mv9Vyzr
z+jKqPids(^Lrjn<HcrM9a9Y**^-T~9xHN2!>0Y;$G=AS*G;Iq3Zm2yl$XekRPaH%0
zk3}exdwvdy>b+_YM9Mfp0yt-XZF*6+<%|6m*+p47IAGdCZu{_Ce2z&&V16aAXkTxQ
zEHmSK_eyUB4bJO$Qa*RYeinVYc{bNZ2UwtOb~f53l~~z+U!-9u)`~q)d}q`M!fB>d
zztZ_i+?0yJrXO^&nF@}BHfq=}$_)ker3m3+%xTNtApuSTQK{S~BH^7xU=40anUUGo
zHKFPeW4GO)^~B7o`pQOZQuJ$>J1?)GN6 at sko%tR{ki(?MH5QSpZNilss0fK99e3aV
zi2Dqho1G0Ce_@~V<{mCzrp_=%F<3>8E}D!7-^LYDtZGr*kao5d+tT)MiepuNwmKbP
z3;*4W4;?!|^4aN+6(vUaG-5O(Rf<9vC4<xAVcNI_N{?xBFM?zW8+LXeT|~)8Pe>G{
z#mf(KxTyPrpp_zvCpzZ}R?5`fKDHZaF5+`~m4CP!l+-dKB7RWB0v`ICr*;><;+2=%
zobGLn)huX6w`Vr3S8kRDo!%7M$LEh8Nh&|TD5(n~XndwEi9#q23$m&z?bjrm4}EsI
zr1G#IT^h?>eo@`~B4&m7YWewQO6$b2$J at 6Zp>uAP_uRPK6twR-usWh6lWq>X?ctY;
zRaq66JL9VF`P;b)4H7>0S6~Z|+frYskKd6)eIyvv6ml&XmTX7(s at wQhr-6Bm#WYk?
zs?hAej6C4|A18F(scSmM8`1OjUcmQKS$u015`@XjLKQcd#;6_%tP&yK*ux#&UHtRo
zqb{h1h?Vizb7lx*6^pRy8ctTbum)C(VFA_nPz8tQz^r9o(4z8X8f3zOErLAw%n>IM
zQwgelAN;!A5Ph0Et<HnZp9i>HyicfAuqfo~^Tv>4n&Z;LB<MrU_z+-Vsbz!ckP{@Z
zqZlbN6d)<kpC0>q0>-An^&rZv9#hW5fL at zWMp?r23=zuo?|;!5C08SYUS&F!bh?n8
z79+_<6kSzfD04-|5;LaiRLcGJS9Q-GL$feSkty4y)M$Yt9ddNV=f17LDU0ACi{7%b
zS3Ux~0m>|x8>*gI$_?(gjMvTf*(D#n$6dDJ at 2cQyo8JIU%YlZZ_n3NQq<ytxh^HgV
zhFxCIHV=P(k=GU!qSG>CZb(cR4i7DZl^6G~iixu;Gl!3R=6+FQgkfaz2N&)0skJVZ
zxHZ?VtcC=)_nEdsm54AjvWg8=8QA*Wk at IGQJEjSQ6TY>O!2fKk+Sv9&2kMbfcNESN
zjuqcgs{fY~2l!YbT_8gr*YNiXNBB`3I{o%#WThu}*%5oGc&o_IG5QOd<4j}8MULC#
zsJgD;??=Q3z-V^~emLHduM4X5N at XR9rz{aJ8bo<uuJ#lv#(r9P>;KZeA=V?$KC^kr
zgHQeJK at r%_yWcoDp%w)sBDNtJW_;#klS-ELH8L+N%1HAeAl)!(20>}=ey9)c;8Kuq
zS(es5fee1i;{Tm3w}0?+MD^fY1j{*C4j%d4mt?`JA?pUw(_xJKw;%RkM^^_P6JJKf
z6ij!bWM;zF45GjTvy`Sz2PcISrAuS70?9qP{qeBl?+*TK at 9+MhOjKI$i7juA`|^Y|
zfx1XOG_CPW$Qs{Un}49Yc?mqtFCuwkW_BhZiD{0{w_qzbx_3F$?q8#CZNso~rri5t
zE7A<(ti|@KDo!_m at r?JwS<t-xz!5cya!<8ev$o+(YJ)}gNhB!N_6B-}CXxg&_8^FI
za^k&7ry(R0weo_^R%8N$4frX4&B>#-#!smbTc8!z-W<-5l|3ph?0$Uy7p(f~hn;Xu
z)7F?B!Z?=YstmS$J_7iUcW>jke*{&eNU~>((PW0&)Z&JY&5zNmGvS-n*XQyGlE(KG
zF08*lviJrcP`f8<#)S?GfI%r;u6ox{Be*v&-v#2L?pDTqXtNk|w)ZCM6^e<S%}dPX
zRUOu9Y!n!y&9Zxxmiq9qT+yAD*j>FQY(Yz<wChga2fB?t>d!D&2IOH>>v;OBpbhCe
z3niV&dx5K?sg)i4$<>t!c)RCw!&fkU2tsn+5s6h)#6MK~^YQR|M_e`n?d<dAs=saA
zj2$$_(EaaSLi?!u6<>l>%|Z$J;OO;vuW}lk^mc27k;nH3%{K{u;P21k+sW6*#}RJS
z_&dG at d<4zz?5>o`<M9`Eo68e5XlRoHj8*jbB(GWmW|c{sx8iK5Q&6>T3&tLm#`Mv1
zq<9s~*=4?{f-&F|-Trl9o^^m??QaZAd3L=rbPaRvQw7?Mv?yugCLLpST<XbYr7vY#
z36q8lxyyx^brY*uo`J4~E~VT+SK$QlE-^~}!WQ>fbn`1Rac~8M8?jxlo3CvtLyUKv
z3u^dS at 6UaWIJP-{%VA|m+T}a_ at tXiQ8t|>U2*3BP<V62~hk&F?1#hT*dIZMlVG;ql
z?iKCp)T^>$y%OV0?@Br%-Oei|a6jw=cU9XDphP!}PK?1Nl3m&Xwomq?S?A<nPMcNv
zX*3kNd$gVLES$cra)Sh~V~1?296}9>-UPAQa>hPTxnc9vp7(2ZHMmrQz6zBTbO9`N
zyAT*|b}NyB*q7ULj?HrRRATSP$YT-(TW at oGwyYYp<R#;pwT$5uR&}k~-C0f_w$j$Z
zLnt$08{15}6rboT;jCVMA&Qmo(*j$OT2AcCa(<7kyOEhQtZFTt9yfnh89Ho$D|he<
zL4jg+q8kz=nf!?Lp94|P=6F#tram?(q_#80x<=Waf=ZjGSJ2pZx`4jBQi~J>DD>s?
z`dMSy9uT97{obCo9dG!+u)@0(tSrPIeso>kpHg&BfecHN&%t}Aee5inxXVdqZ5>>u
zb?QhPUwLzf5fV0xA?8QWJts at J9MtLaWD7X&2(^2+5a?#=qPQW)S1pD>B^$ruhXWPt
z&p#L!- at Q!9HoZ4%W=&X-dhY5vD!2~X{(1qp!SObY6LsFl`@1)EymlHQUUT<4olMDo
zXO7T)irmJH<WnZ-uAK|6OGS?t`eXQ6;mE%cv)aCTO3%BHMVHnEr8XWi?j8~id0Q;w
zyWV7C$4Q@!-X^^sIy~hmU>LU`%a1Eo^|*hKy^PoE<>7Zr)+=WxiQj05UuBuw-mvF_
zwQq(I at 4NkUJ9NL36izT3`U^AJh9_ML7r`n6QL(clMuXM=m{@x_d&<gy;XPL3;Fl5R
z!ZQy!at~8idK|A*m6wtO`5|h2u at xzy)N*%){sCI-)>R6)5?baUzH6Jqqy3Gkp6Bbv
z{nrgyE?nVTSN0c{$<=mmilq7>+KjI+MpE*ujKMU_M(4w=%E_4tA9lZjKnjoSdX}HE
zx&!g$?0n(E2POeTkzjRlEjU24Pa4Jw-0wIol6=c2NBppObUH^un1f7}BiC)}-eu|z
zymIn93~Sad%m3W18VaTp2RNIOTvPPF_)mPlsC(e-UH8)zPyFi0v-4%i-47o*V)TvH
z at TlCjZSQ<hFolB<o;auo2Nc|q7jr4a&l9mKed2K=11^<nihutZpJUDc8RE(BpYvcY
znRLeQ96`^`7P^hZo$Px!SzK&<@y+3$PkWVLch$RL#z%Se@%l0rRrKMJ$56YWOR{n0
z3b2N6jctgv;N`%OCP2Nh!Hyik4WTm~m$Ra0Ke?cb6=nZ1#4atYEIG(LrIpI2_+)xJ
z1n<0~2(FC?i+XL9LcZVK3)eC`J9PJ~MtMZ=PnsJBS8>e|D|^ldB|bS1O-8{=Of>2I
z5UFp2HIwxndd*f at Vqv~tXq{}U{;oQ6rtI^;kdVlV{IOe?u`jrE_-y at huZ3}zMaySn
zwsqmy5>pe%)^Yk)#_9X?h^nu7_9(?V(%I?ZxB2c$?_+b}nhc1wxFSU`!az|4Hj$Um
z+dr8iSXjo(C`!)_QH_H{Y)NH~!|pTuOjfQ=F`FmZQ~oEfT&@K3$_XF;v^wp9nL&aH
z4K>^D;@$Bcv-j3>zBy6x{JvynpWfix)LtnTt(BZ>R5>Q6{-2pEMdnXP=1(z|N*8z;
zym?o|c~0@)Jx_xOlRt6apTTE=wbIF$r4ldqBtGefBDi5sMpA?Idea?){EPeaUp8LM
zfZdH~uX=(hxmn5$*<5+Sr1|}z-gWH_rN4_obZyT^!YdY?iKF>9QB_x(&g<tJwsbZK
zQ#OUfdS3Ptl{a1y&Al^Vwto0k442{gh+2*^OWlCl^aI$n)%@Y1%LIx)?@p7xjx`g*
z%)4^l?4o4<qrqv_@=G#0FW-i`>L!ibmTa9ZTkfbj_}2c|j3V^}reyxMI!RH}104{W
zV8h7~p~+^xnAuRuPostcCMCKqtBMD$Hobfbv9YPYQnd_cvaZYnzT8d-E9<0fvR%-W
zClgS<E>S{KD-Qng4bH3_!N6az?a2#&6JvUIb`CH!g^TV6K?7IIKS}?M-k2_cQtJgR
z?j&P`zX7K_I~q8}sXn1ufG9WTEr@)WT>Vo&_nY%2#{`e?EZ}*(OYYCcK_<${4&z4o
z_tS7YnqVt4SdL9&Jzlp5f at tl&e3s3Nd$`UP8<lBkILt=>-u)VXS*#Gg4r(Y~C!bkl
z-5Z&{+X=6H`S{T5f48;ugHar)A?|wnH>MV`otIot1MS*M^gkmI|MuixK;6I9{da|b
z>UJ9w9L=|{_{nXw8alR!qssi$u|lAD-rxl1krzFg|HXb+Xf7tn({DZoF$vdr#DPX>
za_#AduA+E*2U<o9ehFC<uE>%KJDRD4tVq8xlO}&<+`{ntXQxa0axsaoK1_F5jsDAz
zhE2`- at 0OXvq$xA*31X>5KeigVw5}PtKhJ7oQ|5bfiqMxeEbf1;50c<?)F>v6vN^JN
z9T9On0lYyLYk)YTVPG?@U5C+$VTIUe1V!wUp at R^xgv9rMP|tteps?_N)%{!He{Aqi
zYl++6g*Dh?$8({yjY1)Oj(EV@?z|9*zyo&BY;~UZm;wANjpXc;E~HKb!1ctl<#1D2
z;B<<=u01eJ3Vf8e^Su^f?B3?uk7Vzpb+0Yn&I%0SVI9%IP3D=TW$5~t4*j~)LL03)
zpgtXb>Ys?Xoy<oc3wlquf4~BJQhoT%(<ybI(csbGElg5|&eLO at g@Uo6=7e=*I|Ccw
z=}kixF5ZymJEDUo-8XU{>+kN6ncElF_(yVNvBQFir0l3 at s{Q;S8ZY?5#8vPc>9Y5q
zb5dncBu$6lcIBW=-NUV)x$Wa`Dw3Nu_q+CB!nl~t>Ep-Or1jt!KG5 at OIT>cpA_2UU
ztL{?{`q at n=@pc0Uog;yIgn}M7REJi!(qLV0;s at yKX_5WIaoKFy6I^zN^)q^wv%!lK
zE*pff=&>Fq2X6Jj8J)4W@#xZhsEx&wKH$W8n%F!Z>F<~^Hs(oNhwanB*D>sCMZ~H8
z94#S)+i(<TM)r?*#(D|2ni6Dj;{}GPLq|v3dCS#8w&Z}gsoE`inZ+BH?lGKIy>!<~
zwuBLGBi=q14k`)M%|`t=mq0DoHOY#wADZ;opEKH6&|?sq%SmOZhDrBW&<K4Akj at OB
zXLDEo^j3Z}AaA)o{LzsePXUezI%H7Z3$wq2bo^3}bqzf*K*5>tvd5)+psn8ZxIm@$
z%d>p#oxO#Xa|w6bLOVIAS)SG$uvtd;pa-MJW7(|_%<x;o_AyI`YV5jJuyauFYggq~
zhV}T>0?#J%J2!(DEcu}3>P_##Pd#~M7Q0+xM%Ov*(B3(I34zn at xC-3?fbIj$iFV8C
z=D6mW&Vov)4)aHKL&2dy%~CVR9~)EvuNtv|=aVD{1P6q;2WzND0~u#!bxSl`uL+i(
z)&p}j4rRy$9=tiSpxyd;tXYDxq#Cb5`M5$~uj;uLyqZ4M4$eZ^&KKGL4%6S(Z4ble
zlpmbqIB19`<ib#s<@IXB6n^@1z5dSL!%Uo?q-<m<1yq6yKWSOzh7Xd^4QbADE$RvR
zGrS;e+&ZY#aZvq!=b46?7q9dOClj(3b2_34u-g38Pf!ec at B4*C!O0@*gl at B3^shd3
zc)o%G6#6$TSQ&E~JsvsE2*F_%Z at X|8aVbfbT-?dERR8VDp7Jrhl}#I<$BCcbO?!sE
zH*ML|A_3%jVkas&M#r*-oXkjaL#vEeNA+J*%<#@mAlKanx>emqUFo+4+&{LSZaVru
z7cC2Ho?c at 9@kat>*XI9_6g9Pi9F7`f37YfsgYZ+!7knPwP8Hitu3<ywzt{5>4XFf<
z7LD7OxU`9 at jIlb0*@!LYysz(_I551)1sB6}AGT+=Z!@=GouAgyZ-*@hNW&V}*Vb3T
z{D|J|YlG&Y2-)6AZ{m~C*J|r-99{BBBs%@H*$Y8Xrl5E&9O at _9AG)6$$GjiGS$;iV
zo_2xUGjAgfA1>ZPU1<9eYIh|U8te7r4Xus(pm at MuO?hATIZ?;>@{{+1ri&NS^H7b1
z=^s*Hd5<DxN!(ot#wT7iT~QvFs#`RrOq;OTj_7(gm-Dg0VFD|w at 6hQh+l`<LvA4wE
zb~j8SpMozAs~mS9%nrK{$3oubUO}y?eZ7jj=c)Di8qwfrC7%5783Xj$3^-{oB@*3V
zAMqVi;m9AL{;>fnQ7B+(UAusokAz4XbpJC@)Z}0k<A6 at WujZK_;bQjQ$KwD*iQfJo
zZ3X`u{itQd<~(Wh#IHW%y~*C8P^#8oFs|-=X9J_vvfk=My|0(P3+b=t$JHm=r%Upu
z#^1M~9Vfmmq3cBKO+0%$3k_!1WH4P0zz#m&rvKBQr}B=XzQsE1TR0_W(UOPt-K8tC
zUWB}#c?(!pRuZRo4VgL8+5+~+ZNj<D%mt`6SyPq at j!UVXJ_Wk7?jLH*_%=!8OyBl-
zg;5z_l(We-Px|zkHYbkFf^TzThGI(hxCre$SYM1Ga2 at lcXzC3;?5ICz6<!et&pymr
zQB<QZ^Y at 6)o;p6CPN`SGV^7pgw@|}U|GgocIDe7wz-R|$h;^|3Ge`VyPyRDu++qp$
zrO4V;hkFR+<-~)(qgnkpr+rK^gtA2%&Wt{XHz6&q4!U$krqjKT{GJINi{LAW_>S<s
zq at 6R$S*f)d$Dzba74vxoe6aAHrpU?nbc00;Tza<@4Gv=-{dv9A8|mU_s;uwAOd9;4
z8<c<c0QS7eG7m!oKk{;OZ+B14H9{h+JaK?SM5nmIzj-uIt1Y_!Uz7Z|>HizAo<ElB
z!@%M0XKvUVHX7b(?84VUA7KJF1m!%N<c2J&`-?1B1iW`QbII?vx(_M_P*4)$Kl*!4
z2P+>v&8cjKj%)?d$yd;T&b?e`$2WzQnQ at oXyZMwuJ%suE)Ky(oM=w8=k7?W_RCja`
zN6$hc#L^4p50^WfDCM1Q+MLupC+-FstLrHl=tRntq?<;LOrYDu-MAWXTaz8<pkac5
zAR~%ZCK;J64QjkaoI>&w1X+xWp*9G#hreUW-#NlRslvq3>w0*GtfH-s;j=W)`cvWG
zV<pMWV>d-kY};t#Q4V8Dd3X-*&bYUk-Z2;i7U5NPco3h at R^utqMo^kXBY=dPXx6<W
zEmNi>JH9k~PC&}fVWHF@#q<+5>%xW#E%C|?*9?uP1_n*#%1Q6fyI0eL9V<V^3YQLa
zbTCy?KvH$>(i8G#FzagM%lkC4cq1=?AO(8$?aIP4%ch7gbWR$c>t%mN$~#m|*FW98
zJZROkRYFU+^u&P|frGayq<D{o5)_<pk9p_cyoa#KX6$zDFq)#v9rExR)pKYFRR-bU
z4LZ}S!BxYzZKK#m^6ce)xrkqqWWn at cuH7L5Pt1%v>Bpr9VLr9!r`IB#3hF<c3X)6h
zWs#X<&ver7QF<(!0ZnGcRMg#zGWBLBUC(9&`Psox2lU#XZxk@%dsbWU>k1z*D6$pS
z7rGGWG*EG;QKI!L3FS&_Iwm4z6_yCQ%Nl3i9(XrAli*I<%%p0qZt1z`Wc-VJB%Yv^
zqntdG`0?}o8LxzP5Zy(;spu9S%zVCxN at dy$X?i6d4l>XQL>hG<5wNH{CwC|bSL1?$
z+y)<7_G&-Sl_i6jn5M!=B+MtP$cM?7iE`9C$O(~A%d#zRWfQ@~rKAlGLs`V6*!b+K
zfi8`#nq<7Vp9;+TTJvo{F-pi&iJ-u8GU=XuP#nT1TPa4E<w;V~^btr>5;uaTqN&^3
zF8}5U|0?`jT?<3X_t5YBnL0Jot7y44NB|Vn$jd`TR#g7XFpk(crRvs^V<ZfK1&u#v
zAV8OX&3%(icB5|q@?K1(1Oxw2U%M~<P;m-=ke)3ZsPpSSoj-`QtkeF&kuK at a8ZlxL
zs$L5b;Ar at KOQL}{UlFFoUTfkvN9MSgKdVt)2U(LcBiV7(6K8M#rd&Vwt&E82Dwg-A
zzZc{rgF9cGsl6nSuC7kI>v;Ip@#!8>Ow(z1$y$QoR%qXDIizyL_H3aQiGXu;W*c83
z=>=Ly7?{tcHWcCQRk=ezNOl+HD+M80_d#(Sl!?GTo!%&9;?EmIp**7tN>qWTDnP!m
zf$3@^RW1gpIgsH)-chuC(A{<WI(?J+D|!<|j<#YkDb~tE%e0OkGDQd4N$Yg*iI`9o
zr;HNuw0{3EyimY`*ZLj$oc;dfPj^d?&_dbD5gY)LLz{OJgy4EhX6Mii!hz8SMe4Pm
zOUvB4F9e$^anKD`qsmUa{F9msNRjosL2BS%Fe}(@*@P>#73-ed{}qT&{|&QFMSaxd
zPY{}p0~t#YCpB`z2?l!3=nNLx;6MTrta*oZ9+Wr{bPs}Cz-NEX5F?M at MF)1}_7c*)
zz5yLMpaMZ)zc~xTpCf1;`|C7!Px->S>JhS()C6%$2v`fd^2)_ms_A_)o-21lTK0R>
z<}+6m5ahNXR5M3-ET8~6s(>cMGuOexuPKY81PhJ6$JMeLLmx?CHgUG#={|)>(3^*e
z%Kilb25eq!{DkL3$3lQ9GYMpr#ezU`<S11xiE8s9T at DSfSgfS+VlQ8Rvv&h|P^NNY
zJ~DB}<N)~-iA6?y>h~HFNoRN$aPFp*LG`oDJNxDCA7{BLdM3I-nt^>GbLMm3-i$47
zFKsS5BvGlCp21_SqoL%3Hw4)2^dbuGosH`G5~Nr at D*~L#o{|W-AvLb9qQox;f at D%s
zYVbEsFE~ujRZIX%vR%n|NPeUM8G=&-Lr2-2Es!$qaj1pDiY}JC++2~t?cpFzAV<dU
zdW;rl*z&Fp?$~Y_9`LBHCYWaC$yxXn2=ZtXX0YL-+1(;m16daB{#;>wQW|PIVOQpr
zktq^Lb(M{51btE{?ja!R_;gp$gc7uIgi^us)gDAWp(HxUd4kX`2#ed*!Dd!;fhuWu
zJC0}7+qWPE!offn!K}R~NHMQ_;DX8k*)x-{UQqIRAR-Jhb6^XXW~tpH(7cP><zsKf
zrf@(@J_C(4d08W~;xp}B{PW^-|LY426+BeNx*!GaXghAyXh!h{Ef at f!9GyEFZ%+X+
z2+{?TX|80Fq9P#CnK}{&LXLkEoksOqi3-IO at -IQ6a}JjQ_s#YER1|gQ>ME*RgT3he
zKG0WG%!(Ip0?xW|wNvO?2;@0I*~U+lzR)s9{o}9_Htm@$U7o)tzex6@;DCFJ at 8Tbt
z^DB2n->C$=K`V}-ry0S_uV1~kF57-&he{r#quxawP^$;|8Y7U2FjY<3wOclGb3G at o
z*Ht_8f7lChh+Q`MF{CUQ4)XjX*_ZCQJ{Xu)*4^WC$TnGIApI#+am};m4**<Bm}UA7
zP-v<$l5~K7%Pnj1dUBf-p~+DA<CiZ~)~-Y#<W7PK<?=^J?=a%i!mGW59=G$(K}Yct
zPhC?z0>efg?VMxSLaG^p?iGeLFPY>!e}!Z`Fz#LWC{aN=U7o(ot8=ChD;Lw}bXvRe
z#M<93J>_Fb3{2YXCcS<k`-lU}sR(imV(i&L0L&+9QCxVLd}PTKEJYeDdFao2<2-7L
z?v|5iqM3q(C6*%fT8$1UZ>b`h1Q{B(*C<+B<$=pKKjto}+uUerOjSU9onarTYGpI@
zj0m53IxOW*o!9sEwT^PX$!=_x^y)h-d~MO#A-LiZ#MF^6b#<;A4<{hkfb4tmIV8vC
zgih<&Wsy(i;Lqos;TM<sFHBri0f$z&PQE|n-vsz#OmorKGFv+XuAZiEj!K11q~(c~
z^vJ$P$`fd)`Oe;JX0FciF8{5L4}C>6A6Q)pK at c8vnEcWf4A37yX@jC)H>y6<V)-Nd
z<l60Q=(qotQ+;*=^s9|=kOv22HRv$a?cP{$c@%R@?KjaZ{^+`y|1<!-?qU7G8YDk6
z{w79D0 at _TonY2ZH5`&S^egrFssV0811|wHU5iQ89nYh91>^r|&mZtJ}wfz0l78u1Q
zoXA1O|MUJ1>h?dBn-!z`o0sq+AyydqvPG)f6i2S0 at l$t~El{AqLV!JmJ^^><KjTed
zk-G}V=tb^W=CY%t=Sr`yu6}Qqf;2yJv*>GBFs`-b`>$nb5W|lhLNahtnb#g-^^k;c
ziKNT@@wj;qjFRz?fhx(qwV7u^qU_04=~CPkK0n-mFr6kIP3b0rNLLgB2fdMx)K}N*
z|Dq{(x&Di$^ekp4KNPe(z5$oC|4ma?xsM`=i8p%!Xt7&<76m^;-i~+iqRpx4M}wy-
za0pn^^s|;mzd6<P%AHJtM~k>7J|RP?H?2i2_Pg7y at LUmAfgtzM+^p-mZ5IqP<r?xc
zHFkIAFP%h&dQFADvF?1t$|j6CF`|i$e-Xaz&?73SauI!3oV#hI$~a)7O+EF-tWLWG
zUtZ-V>(NJR+C-F_|K4+I>WogWjFfrWAxs`1%*>I{n1TQ`1MHtllOH`x{s&5u%aL`e
zPyHIt)e<vTIC%6U at kFx&mDgw%>xuvUjmq~aSrNGXb|EzB9)^|<e_sEV-)(HBmfxPw
zirF~1gRbwqz}tIvNcUVKY_rP<XnCk^D}9hKo;V+?mFFq{=gPPAjioI!OCSE`!W9{o
z^#zgGL5h}_?8j&u3>|O^p2`79Gri7{)XF_On{N3`_pX!kd at wkI{Ny1aYzgn=Td=u6
zwwSIx6=f}vgbByo{I4Kz<*N_&xRl4d&CZERCDj>?aY`FB1JBn$A}Og=ex1mRPXU=G
zKS at VZ%)Y7VcGK<eNsy?X(H&|qR73?y at LA6Y6uMjZx}^#YNcp>LBTOcb7A^ols+8kr
zN4f}`)J1{kT^kRyNHr8p&g#%1i~jwxR{|Zzs53JojkI3DJ0Er*h`v^1taa at 3>5&m5
z0!x~z(d&_VR!a?jF5SkpW2R=$pZ2!_UcWt9 at TiWY>c`6YL?UE#@PNb`lorEUi{^JD
zh>7zD*D8<*FR1^BGjpFg+zsE{jqqO-q!NgEgA}BW_3_<Vk74#LJd6E&q@&xR7^?tm
z^$1L^jkM$Lq<trispIa;1sh`M at g@%o{o at RuzTFe>%ntaCH3Pq!$U6NoFl4sC+I!rt
z(*nOSq&t0|zIbZ2-JCXJGipXDaJyTRm*<P9Gj4nOeDb4P;3ZnLbr-{e2hB_ZC-M`P
zbyLad0x4m7R+kzhO6mwku}v at l$sRGH<TgcA&+UC7i_0cJq<tnFkvG8GS6nn+YeCwG
zFq1yJ$%$b|es2e0Rxbw}lX^ptyUZA)Hd7I68#`(t5)KCKi2B4$8?n8DH^1v$=KP+$
z?5tbJgCItfe8B~|*$99{{*=d;Li93|?#^t1#*G7htXJ&(T(`@wOfBtP&7aP1t6>JR
zP5&J48Q9r7yqP-_YH`3ZSgIu!_PSSuvc9y7{KJW5eFA;ged|9Sm@%P;2xq>UypsRF
z$wysov1B~E3VY7hz+?<*B%g+e?-nSd6r6~aAw`rILh+M?Y46(@H=oAUz8td0ek7Xu
zEu7M+Kqc~j&{NlX;VT3e4|2QVat)aZR8io%5?o|xD8-N_d>zZUJ!(B{qunk~N0}^}
zsV}#A_LtCU->w?XrF|-Rz?6<6S&6FLoFej*-yS)5bS8rV2LW3{TU28xV at DC+VdxOO
z@<yoA<30KhWua_^9&Pm}z6jL<(*(wpPq!9B at 4m8DD%f*XetRgn_F&77Fr^_I%KYM_
z)LBg5gnoBF`Tw919i0FF(})NE(1;VUuZsH*y9k4^W3oAccAUdE&4QfVF;?uxE2Fuz
z{@N2}4{;<YF^UR#w}Fc0<gJ%`)^h??iycZc*P}Dn29;MnHh!C8SpLr=ni_0%Om8Z|
zQ;w6Q++%=t+s+KVzv^E^Ur~k_aAXIW<QY(~Bv)<l;6~0-5?)_1rGEdKpOIXeTBKg3
zF52#(QyxUgau0a2G%v!0gWg00A%fg$&w)sS#8=3_u?GKDaCNuJu<(1S^fm~RLToRF
zT2f7|*&zn<Qrj~ACScCiqWyO^X#G$(XhEUNU?`!hQi+h8FOHfdTWEZ(-jUWZwIfQC
zZjy(uyK06KNAI|Gr{M{vdhU|bSs)E_+yb&jb~LDx4Wrl)b+aiVvnjMh)B{Rj&kUv1
z19tQ+?3aSUa5c(ESIVDCqe1)S6xlMAc*<SsN980=W#tJ`v|#e&{^M6x3eBIGlhAfP
zdi}=g;g96eEayBs4TKDO;VRGhc*{B2`MWy)uL+o0I>PcbSSvMJx(jEeennM>r}5h{
z>EaG3F-X*&uPWtJ_h at fHkp+4XSr{1=BB(q~U43YjXQ(v)@yZ6Tc<SqUwSKdgP4Wty
zWOcR1pQ{;q!zR^opAjjQ6r<~JDpOxk>I$91H5=)y?DV7e&R8vaa0b3inXl+9u at NMh
z5n<#aeY8Dpwf5Dt*9tGKJ^LGCAb~;*t~|TBv`kP;Bx!mOHSwidF<jYHx5-kZp at 0S|
zNacAvUNQEOmQ`2R!gTZ@;s;;7ZsE9>1;0rFUjNWpR(l9CAZu5bj>Z6`Xx$~alLA59
ztl~Qe2%YVv!+{WjMgrLSIO1P4o^~W2E at X`Kag)WOk19fnrb`J5*DN#7D<Dn`z+3e7
zesem!VbMw~w45lY@%LZT)MP5Vvs&x^<ETaYhvh}kyMAX7*qNxD<h18y!+A_yi|okt
zzftaN8;)WWgbi2*Mr(1Qrp1X_NfN3E{e;@{4{7yZ)&;HnZwmii-M{fzu44!TxIpAT
zI9z4|@P!&c0SE#JZN;EHx}3sB$ap#FA&I~xASRgGLuEu4kJbhE8BwJ3^Qtx6IPzz*
pfY5(^D at GRJ0rcRo?w{d+x3;sgB{vq}cYgsuR#Hi#O3Wzee*yMzYQ+Em

literal 0
HcmV?d00001

diff --git a/user/index.rst b/user/index.rst
index 8cbcd1b..a764fe8 100644
--- a/user/index.rst
+++ b/user/index.rst
@@ -52,6 +52,8 @@ to the Community Project hosted at http://www.rtems.org/.

     tools/index

+        tracing/index
+
     support/index

     glossary/index
diff --git a/user/tracing/captureengine.rst b/user/tracing/captureengine.rst
new file mode 100644
index 0000000..f0e2b01
--- /dev/null
+++ b/user/tracing/captureengine.rst
@@ -0,0 +1,10 @@
+.. comment SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. comment: All rights reserved.
+
+.. _capturengine:
+
+Capture Engine
+**************
+
+[TBD]
diff --git a/user/tracing/development.rst b/user/tracing/development.rst
new file mode 100644
index 0000000..ad74d8f
--- /dev/null
+++ b/user/tracing/development.rst
@@ -0,0 +1,12 @@
+.. comment SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. comment: All rights reserved.
+
+.. _development:
+
+Tracing Development
+*******************
+
+RTEMS trace is an open source project currently under development.
+
+This section can contain how to build the rtems-tools after making changes
to the trace linker.
diff --git a/user/tracing/index.rst b/user/tracing/index.rst
new file mode 100644
index 0000000..d2d9993
--- /dev/null
+++ b/user/tracing/index.rst
@@ -0,0 +1,25 @@
+.. comment SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. comment: All rights reserved.
+
+.. _tracing-framework:
+
+RTEMS Tracing Framework
+***********************
+.. index:: Tracing Framework
+
+RTEMS Tracing Framework is an on-target software based system which helps
track
+the ongoings inside applications, 3rd party packages, and the kernel in
real time.
+
+Software based tracing is a complex process which requires components on
both the
+target and the host to work together. However its portability across all
architectures
+and board support packages makes it a useful asset. A key requirement in
RTEMS trace process
+is to take existing code in compiled format (ELF) and instrument it in
order to log various events
+and records in real time. However instrumenting of the code for tracing
should happen without rebuilding
+the code from the source and without annotating the source with trace code.
+
+.. toctree::
+
+   introduction
+   usecases
+   development
diff --git a/user/tracing/introduction.rst b/user/tracing/introduction.rst
new file mode 100644
index 0000000..596bc25
--- /dev/null
+++ b/user/tracing/introduction.rst
@@ -0,0 +1,97 @@
+.. comment SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. comment: All rights reserved.
+
+.. _introduction:
+
+Introduction to Tracing
+***********************
+
+Tracing is an important function which has several applications including
identification of
+complex threading, detection of deadlocks, tracing functions along with
their argument values,
+and return values through progression of several function calls and audit
the performance of an
+application according to required specifications.
+
+RTEMS tracing framework is under development and welcomes contribution by
users.
+
+RTEMS has the following trace components:
+
+- RTEMS :ref:`tracelinker`
+- RTEMS :ref:`capturengine`
+- Common Trace Format Integration
+
+
+RTEMS trace framework can currently function using the following methods:
+
+.. _tracebuffering:
+
+RTEMS Trace Using Trace Buffering
+=================================
+
+TBD
+
+.. _printk:
+
+RTEMS Trace Using Printk
+========================
+
+TBD
+
+RTEMS Trace Using CTF
+=====================
+
+`Common Trace Format <http://diamon.org/ctf/>`_ (CTF) is a binary trace
format which is fast to write
+and has great flexibility. It allows traces to be developed by bare-metal
applications or by any
+other C/C++ system. RTEMS tracing framework can benefit from these
features of CTF.
+
+A typical CTF *trace* consists of multiple *streams* of binary *events*.
The *metadata* stream is a mandatory
+stream which describes the layout of all the other streams in a trace.
This metadata stream is written
+using *Trace Stream Description Language* (TSDL).
+
+.. figure:: ../../images/user/ctf-trace.png
+  :align: center
+  :width: 75%
+
+A binary *stream* is further a concatenation of several packets each
containing the following:
+
+- A packet header
+- An optional packet context
+- A set of concatenated events each containing:
+ - An event header
+ - A stream-specific context
+ - An event-specific context
+ - A payload
+
+.. figure:: ../../images/user/ctf-stream-packet.png
+  :align: center
+  :width: 75%
+
+All the headers, contexts and payloads are written in TSDL using CTF data
types. CTF supports a rich set of
+configurable datatypes which makes it possible to describe a larger
variety of binary structure. Moreover types
+in CTF are organized as type classes where type specifications can be
inherited to allow deriving types. These factors
+make CTF flexible. CTF enables fast writing of binary data as it usually
involves appending memory contents, as it is
+to a binary CTF stream. CTF streams are capable of being sent or received
over the network without any data being
+written to disk and hence can be useful in transporting traces from the
target to the host machine for analysis.
+
+Due to these advantages tracing using CTF will prove to be beneficial for
the users.
+This method of tracing is currently under development. Currently the RTEMS
tracing framework is able to output
+trace data in the form of trace buffers, console output and csv files. A
conversion tool which transforms
+these trace output formats to CTF will be viable approach to generating
CTF traces. In this regard we utilize babeltrace,
+which is described in the following section.
+
+Babeltrace
+----------
+
+Babeltrace is an open source trace format converter which can be used to
convert RTEMS traces into CTF.
+It is also a reference parser implementation of CTF. Babeltrace currently
supports the following output
+formats for traces:
+
+- Text
+- CTF
+- CTF-metadata
+- Dummy
+- lttng-live
+
+Babeltrace comes in the form of a library, python bindings (python3) and
command line tool called ``babeltrace``.
+To install babeltrace on your host you can install a distribution package
or build from source using tarballs or
+git repositories of babeltrace. Refer to http://diamon.org/babeltrace/ for
further details.
diff --git a/user/tracing/tracelinker.rst b/user/tracing/tracelinker.rst
new file mode 100644
index 0000000..6685367
--- /dev/null
+++ b/user/tracing/tracelinker.rst
@@ -0,0 +1,10 @@
+.. comment SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. comment: All rights reserved.
+
+.. _tracelinker:
+
+Trace Linker
+************
+
+[TBD]
diff --git a/user/tracing/usecases.rst b/user/tracing/usecases.rst
new file mode 100644
index 0000000..418e8b8
--- /dev/null
+++ b/user/tracing/usecases.rst
@@ -0,0 +1,109 @@
+.. comment SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. comment: All rights reserved.
+
+.. _usecases:
+
+Tracing Use Cases
+*****************
+
+Following are the use cases of the tracing framework that are currently
under development:
+
+Function Tracing
+================
+
+Tracing the entry and exit of a function as well as the values of the
arguments and
+return values can prove to be an important application for the tracing
framework.
+
+Objective
+---------
+
+This use case can prove to be helpful in debugging of applications for the
users. It can also
+be used to understand the working of existing application code bases.
Capturing of argument and
+return values maybe useful in tracking unexpected output results from the
applications.
+
+Requirements
+------------
+
+The current tracing framework provides this functionality with
:ref:`tracebuffering`. The output is
+provided in the form of printing on console or saving the buffer in the
form of a bin file. In order to
+develop this use case using CTF we need to be able to convert either the
bin file or console output to CTF.
+The saved bin file must also first be transported to the host from the
target for this purpose. On the other
+hand console output could be written to a text file which can then be
converted to CTF.
+
+Example
+-------
+
+As a start to the development of function tracing using CTF we can work on
the fileio
+sample testsuite and trace all the calls to malloc, calloc, free and
realloc functions.
+Along with the calls made to these functions the trace must also capture
the values of
+their arguments at entry and the return values at function exit. As an
example of an application
+having the following progression of function calls:
+
+.. code-block:: c
+
+  #include <stdlib.h>
+  int main(int argc, char** argv)
+  {
+    int* a = malloc(sizeof(int));
+    free(a);
+    a = calloc(1, sizeof(int));
+    return 0;
+  }
+
+
+The trace of such an application must be output of the following kind:
+
+.. code-block:: shell
+
+  Timestamp1    entry of malloc > argument value
+  Timestamp2    exit of malloc < return value
+  Timestamp3    entry of free > argument value
+  Timestamp4    exit of free < return value (null)
+  Timestamp5    entry of calloc > argument1 value, argument2 value
+  Timestamp6    exit of calloc < return value1
+
+There could be additional columns of details including current priority,
task state etc.
+
+
+Tracing Thread Operations
+=========================
+
+Tracing thread creation, switching and termination operation in a thread's
lifetime within an application.
+
+Objective
+---------
+
+Real time applications inherently utilize parallel programming which
entails several
+tasks executing simultaneously and competing for common resources. On
single processor systems
+the CPU performs context switching between each of these tasks rapidly. By
tracing the creation and
+termination of tasks as well as the context switches between them one can
possibly identify probable race
+conditions or complex threading operations.
+
+Requirements
+------------
+
+[TBD]
+
+Example
+-------
+
+A sample trace tracking two tasks Ta and Tb could have an output of the
following kind:
+
+.. code-block:: shell
+
+  Timestamp1 taskid Ta CREATED
+  Timestamp1 taskid Ta SWITCHED-IN
+  Timestamp1 taskid Ta BEGIN
+  Timestamp1 taskid Tb CREATED
+  Timestamp1 taskid Ta SWITCHED-OUT
+  Timestamp1 taskid Tb SWITCHED-IN
+  Timestamp1 taskid Tb BEGIN
+  Timestamp1 taskid Tb SWITCHED-OUT
+  Timestamp1 taskid Tb TERMINATED
+  Timestamp1 taskid Ta SWITCHED-IN
+  Timestamp1 taskid Ta SWITCHED-OUT
+  Timestamp1 taskid Ta TERMINATED
+
+
+
-- 
2.7.4


On Tue, Jun 5, 2018 at 9:54 PM, Gedare Bloom <gedare at rtems.org> wrote:

> On Tue, Jun 5, 2018 at 11:40 AM, Vidushi Vashishth <reachvidu at gmail.com>
> wrote:
> > ---
> >  user/index.rst                |  2 +
> >  user/tracing/development.rst  | 12 ++++++
> >  user/tracing/index.rst        | 25 ++++++++++++
> >  user/tracing/introduction.rst | 90 ++++++++++++++++++++++++++++++
> +++++++++++++
> >  user/tracing/usecases.rst     | 77 ++++++++++++++++++++++++++++++++++++
> >  5 files changed, 206 insertions(+)
> >  create mode 100644 user/tracing/development.rst
> >  create mode 100644 user/tracing/index.rst
> >  create mode 100644 user/tracing/introduction.rst
> >  create mode 100644 user/tracing/usecases.rst
> >
> > diff --git a/user/index.rst b/user/index.rst
> > index 8cbcd1b..a764fe8 100644
> > --- a/user/index.rst
> > +++ b/user/index.rst
> > @@ -52,6 +52,8 @@ to the Community Project hosted at
> http://www.rtems.org/.
> >
> >         tools/index
> >
> > +        tracing/index
> > +
> >         support/index
> >
> >         glossary/index
> > diff --git a/user/tracing/development.rst b/user/tracing/development.rst
> > new file mode 100644
> > index 0000000..ad74d8f
> > --- /dev/null
> > +++ b/user/tracing/development.rst
> > @@ -0,0 +1,12 @@
> > +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> > +
> > +.. comment: All rights reserved.
> > +
> > +.. _development:
> > +
> > +Tracing Development
> > +*******************
> > +
> > +RTEMS trace is an open source project currently under development.
> > +
> > +This section can contain how to build the rtems-tools after making
> changes to the trace linker.
> > diff --git a/user/tracing/index.rst b/user/tracing/index.rst
> > new file mode 100644
> > index 0000000..ad22439
> > --- /dev/null
> > +++ b/user/tracing/index.rst
> > @@ -0,0 +1,25 @@
> > +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> > +
> > +.. comment: All rights reserved.
> > +
> > +.. _tracing-framework:
> > +
> > +RTEMS Tracing Framework
> > +***********************
> > +.. index:: Tracing Framework
> > +
> > +RTEMS Tracing Framework is an on-target software based system which
> helps track
> > +the ongoings inside applications, 3rd party packages and the kernel in
> real time.
> > +
>
> I don't know how it is elsewhere, but I would prefer to see the Oxford
> comma here, i.e., "3rd party packages, and the kernel"
>
> > +Software based tracing is a complex process which requires components
> on both the
> > +target and the host to work together. However its portability across
> all architectures
> > +and board support packages makes it a useful asset. A key requirement
> in RTEMS trace process
> > +is to take existing code in compiled format (ELF) and instrument it in
> order to log various events
> > +and records in real time. However instrumenting of the code for tracing
> should happen without rebuilding
> > +the code from the source and without annotating the source with trace
> code.
> > +
> > +.. toctree::
> > +
> > +   introduction
> > +   usecases
> > +   development
> > diff --git a/user/tracing/introduction.rst b/user/tracing/introduction.
> rst
> > new file mode 100644
> > index 0000000..3314447
> > --- /dev/null
> > +++ b/user/tracing/introduction.rst
> > @@ -0,0 +1,90 @@
> > +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> > +
> > +.. comment: All rights reserved.
> > +
> > +.. _introduction:
> > +
> > +Introduction to Tracing
> > +***********************
> > +
> > +Tracing is an important function which has several applications
> including identification of
> > +complex threading, detection of deadlocks, tracing functions along with
> their argument values,
> > +and return values through progression of several function calls and
> audit the performance of an
> > +application according to required specifications.
> > +
> > +RTEMS tracing framework is under development and welcomes contribution
> by users.
> > +
> > +RTEMS has the following trace components:
> > +
> > +- RTEMS Trace Linker
> > +- Capture Engine
> > +- Common Trace Format Integration
> > +
> > +.. note::
> > +
> > +        I could create separate pages to explain the aforementioned
> components in detail.
> > +
> Remove this note, and create/link the separate pages with the "TBD" stub.
>
> > +
> > +RTEMS trace framework can currently function using the following
> methods:
> > +
> > +RTEMS Trace Using Trace Buffering
> > +=================================
> > +
> > +To be completed
> > +
> > +RTEMS Trace Using Printk
> > +========================
> > +
> > +To be completed
> > +
> > +RTEMS Trace Using CTF
> > +=====================
> > +
> > +`Common Trace Format <http://diamon.org/ctf/>`_ is a binary trace
> format which is fast to write
> > +and has great flexibility. It allows traces to be developed by
> bare-metal applications or by any
> > +other C/C++ system. RTEMS tracing framework can benefit from these
> features of CTF.
> > +
> > +A typical CTF *trace* consists of multiple *streams* of binary
> *events*. It is upto us how many
> > +streams we want to divide our tracer generated events into. The
> *metadata* stream is a mandatory
>
> Delete "It is upto us ... events into." This is an unnecessary
> statement in user documentation.
>
> > +stream which describes the layout of all the other streams in a trace.
> This metadata stream is written
> > +using *Trace Stream Description Language* (TSDL).
> > +
> > +A binary *stream* is further a concatenation of several packets each
> containing the following:
> > +
> > +- A header
>
> "A packet header" maybe better, more precise?
>
> > +- An optional context
>
> "packet context" ?
>
> > +- A set of concatenated events each containing:
> > + - A header
>
> "An event header" ?
>
> > + - A stream-specific context
> > + - An event-specific context
> > + - A payload
> > +
>
> On second thought, it's not clear to me if a user needs this much
> detail about what is happening inside CTF. They want to know what are
> the advantages/disadvantages and how do I use it. These details about
> the packet formats may be superfluous, I guess that remains to be
> seen.
>
> > +This method of tracing is currently under development and can utilise
> the following 3rd party package:
>
> Rewrite this sentence to better introduce the reader to the need that
> is filled by babeltrace.
>
> > +
> > +Babeltrace
> > +----------
> > +
> > +Babeltrace is an open source trace format converter which can be used
> to convert RTEMS traces into CTF.
> > +It is also a reference parser implementation of CTF. Babeltrace
> currently supports the following output
> > +formats for traces:
> > +
> > +- Text
> > +- CTF
> > +- CTF-metadata
> > +- Dummy
> > +- lttng-live
> > +
> > +Babeltrace comes in the form of a library, python bindings (python3)
> and command line tool called ``babeltrace``.
> > +To install babeltrace on your host you can follow one of the following
> methods:
> > +
> > +Using Distribution Packages:
> > +
> > +1) On ubuntu/debian run: ``sudo apt-get install babeltrace``
> > +
> > +2) On fedora run: ``sudo yum install babeltrace``
> > +
> > +3) On Arch linux run: ``yaourt -S babeltrace`` or ``yaourt -S
> babeltrace-git`` for the latest git version
> > +
>
> I would just refer the reader to the babeltrace instructions
> themselves. We don't want to provide an exhaustive list here.
>
> > +
> > +You can also build from source using tarballs or git repositories of
> babeltrace. Refer to http://diamon.org/babeltrace/
> > +for further details.
>
> Yes, just refer to the URL and be done with it.
>
> > diff --git a/user/tracing/usecases.rst b/user/tracing/usecases.rst
> > new file mode 100644
> > index 0000000..323fe15
> > --- /dev/null
> > +++ b/user/tracing/usecases.rst
> > @@ -0,0 +1,77 @@
> > +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> > +
> > +.. comment: All rights reserved.
> > +
> > +.. _usecases:
> > +
> > +Tracing Use Cases
> > +*****************
> > +
> > +Following are the use cases of the tracing framework that are currently
> under development:
> > +
> > +Function Tracing
> > +================
> > +
> > +Tracing the entry and exit of a function as well as the values of the
> arguments and
> > +return values can prove to be an important application for the tracing
> framework.
> > +
>
> Why is it important? What purpose does it serve? (Debugging aid?
> Program behavior comprehension?)
>
> I suggest you devise a templated approach to describe these use cases.
> Something like:
> Name
> =====
>
> Brief description.
>
> Objective
> -------------
> What purpose this use case intends to accomplish / its goal / user's
> need filled by it.
>
> Requirements
> ------------------
> What the use case needs out of the trace to accomplish its purpose.
>
> Example
> ------------
> Like what you have below.
>
>
> > +As a start to the development of function tracing using CTF we can work
> on the fileio
> > +sample testsuit and trace all the calls to malloc, calloc, free and
> realloc functions.
>
> typo: testsuite
>
> > +Along with the calls made to these functions the trace must also
> capture the values of
> > +their arguments at entry and the return values at function exit. As an
> example of an application
> > +having the following progression of function calls:
> > +
> > +.. code-block:: c
> > +
> > +  #include <stdlib.h>
> > +  int main(int argc, char** argv)
> > +  {
> > +    int* a = malloc(sizeof(int));
> > +    free(a);
> > +    a = calloc(1, sizeof(int));
> > +    return 0;
> > +  }
> > +
> > +
> > +The trace of such an application must be output of the following kind:
> > +
>
> Eventually, you would be able to show some actual output. For now, you
> should try to "mock" the expected output as closely as you can.
>
> > +.. code-block:: shell
> > +
> > +  Timestamp1    entry of malloc > argument value
> > +  Timestamp2    exit of malloc < return value
> > +  Timestamp3    entry of free > argument value
> > +  Timestamp4    exit of free < return value (null)
> > +  Timestamp5    entry of calloc > argument1 value, argument2 value
> > +  Timestamp6    exit of calloc < return value1
> > +
> > +There could be additional coulmns of details including current
> priority, task state etc.
> > +
>
> spelling: coulmns.
>
> > +
> > +Tracing Thread Operations
> > +=========================
> > +
>
> Here you would instantiate a new use case template and fill it in.
>
> > +Real time applications inherently utilise parallel programming which
> entails several
> > +tasks executing simulataneously and competing for common resources. On
> single processor systems
>
> spelling: simultaneously. Please use a spell checker when writing
> documentation.
>
> > +the CPU performs context switching between each of these tasks rapidly.
> By tracing the creation and
> > +termination of tasks as well as the context swicthes between them one
> can possibly identify probable race
>
> sp: swicthes.
>
> > +conditions or complex threading operations.
> > +
> > +A sample trace tracking two tasks Ta and Tb could have an output of the
> following kind:
> > +
> > +.. code-block:: shell
> > +
> > +  Timestamp1 taskid Ta CREATED
> > +  Timestamp1 taskid Ta SWITCHED-IN
> > +  Timestamp1 taskid Ta BEGIN
> > +  Timestamp1 taskid Tb CREATED
> > +  Timestamp1 taskid Ta SWITCHED-OUT
> > +  Timestamp1 taskid Tb SWITCHED-IN
> > +  Timestamp1 taskid Tb BEGIN
> > +  Timestamp1 taskid Tb SWITCHED-OUT
> > +  Timestamp1 taskid Tb TERMINATED
> > +  Timestamp1 taskid Ta SWITCHED-IN
> > +  Timestamp1 taskid Ta SWITCHED-OUT
> > +  Timestamp1 taskid Ta TERMINATED
> > +
> > +
> > +
> > --
> > 2.7.4
> >
> > _______________________________________________
> > devel mailing list
> > devel at rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20180606/b97f9cf6/attachment-0002.html>


More information about the devel mailing list