From faf074a30c5aaf8c12214c5bd3446f85248acc04 Mon Sep 17 00:00:00 2001 From: compudj Date: Tue, 10 Jan 2006 20:36:55 +0000 Subject: [PATCH] add softirq mode git-svn-id: http://ltt.polymtl.ca/svn@1460 04897980-b3bd-0310-b5e0-8ef037075253 --- .../doc/developer/lttng-lttv-roadmap.html | 1 - .../user_guide/docbook/lttv-color-list.eps | Bin 64312 -> 17368 bytes .../user_guide/docbook/lttv-color-list.png | Bin 15693 -> 17368 bytes .../user_guide/docbook/lttv-color-list.svg | 377 ++++++++++++++++++ ltt/branches/poly/lttv/lttv/state.c | 84 +++- ltt/branches/poly/lttv/lttv/state.h | 7 +- ltt/branches/poly/lttv/lttv/stats.c | 71 +++- .../lttv/modules/gui/controlflow/drawing.c | 40 +- .../lttv/modules/gui/controlflow/drawing.h | 3 +- .../lttv/modules/gui/controlflow/eventhooks.c | 2 + .../lttvwindow/pixmaps/lttv-color-list.png | Bin 15693 -> 17368 bytes 11 files changed, 553 insertions(+), 32 deletions(-) create mode 100644 ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.svg diff --git a/ltt/branches/poly/doc/developer/lttng-lttv-roadmap.html b/ltt/branches/poly/doc/developer/lttng-lttv-roadmap.html index 6d8a45e9..61ff426d 100644 --- a/ltt/branches/poly/doc/developer/lttng-lttv-roadmap.html +++ b/ltt/branches/poly/doc/developer/lttng-lttv-roadmap.html @@ -16,7 +16,6 @@ The % symbol marks who is interested in the realisation of the item.
LTTV Roadmap

* TODO
-(2) Make GUI Event list trigger state computation.
(2) state.c : add Softirq execution mode.
(3) Make LTTV aware of type formats defined in the XML file.
(3) Use a per architecture enumeration for traps.
diff --git a/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.eps b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.eps index 61d480eb8d7891b115a35c3a14a4511f392c70a8..98abddbe4b7c3eb097957c46e62f33073f00a6f7 100644 GIT binary patch literal 17368 zcmchL!yrwl^Uu@k%z5xK?zmL zRuL2se1g(T1Oe&2x3hiU_l$AAd&jwVj9WhbAUiPj%38@;06m0 z4pt=kdIh>(_jgnD3-EZppd$!_oq*wS=dOli&J73Gh*PO#V*oI3|UXM}obdWQZq=;eJTBDO)&;CF)|o5T?opng=$%ja}|znf*d zCTrJxidR>OUWLkR)|uH~EPX7$@qh2-_uMuCDk~$r+JYuL9NKA;rDwLkt_Y@hwTCv) zjHkb@*k5_2YNXx%y}dZaIjbjo^>pi})t>J@KK9S*dy=O=cZKa&zx1uBuL2^EU^cJ! z7}=9*P0txt;Oi<@XCv<#JDcPZ8>IFOymcES{x8jnr?4IqOnGko{`@o2i;y9w zd-r>oxw9}Qf^a9kohnlx{@50C?RoIz98xX&w*wC^&FzMg_Ty^l(hJT|XIr4os+r4O zsq!9<)9~{Ob7-&pQNngC1I6uzd|(_3{i_w|uF1e0yfKROuzCt&|@lgj{Fm3PSEXCbSPL%>GK% z+|AJpt$CTz#BCo1hshd#cc+4idk;HV479XNiRMvxw9}!bGTqr-J(Fk5z1nYA)b{{q z%>2A+!|DvnzYQ>6gy_iKyT1|9Sp>ewlU}asnWd0&Ll#n)XD_F`$VJbyGihN-=|9M3 z4!biYP+M8s{TVcOH?J)9w&FX^O38mz^_Np?~8})f@sb9U!Yvc5M&7-`!+fs=(W&e2e*Pq@l{o<8u zBUP41leYU^z#!N#GyTXJj$B#nOp0)5JF8VTr>{DDwDQmB1hjVl)y(W?En1$p$7IU3 z{Bv8Src2wWr@qn$i}UV1=w#!n(>hX+()%MRA~yWELx@zChZ{YtBt*?m~K281MnntzQRZ~a7jo&L*X z0;eZ8qj9U;H}?T8CwJhtzw()X9GpHuhaGJ&h^EM zMei+d7Va!M(Z5jy664W`RiozB?FdN*ihyRkrKH;z^osSJz`o9Vo{MF~M} zaVj(Q=}bAHN)QoZHAmCUIH?E72nDRv-IhLw>#PhfgGbDqpcL3ny8m!v_h5ffMHFK$l2NqX;O59bTNI zN_Iia!jj1M#m6ddJfd!(I-gKv9?)V*Ur7_>P|_%T7l|a_$BrGx8pgk$1pBWQ*^cP|ZnfXMy0yGLkCx1`QA)ErZeIak5OP@RUij+XF2HFcBbl!U@RB z36;uA-IS1X^nuVJ!~q}1)@(<7X)wYn{xKy>qV)N02+LMeW;L%r4mad-rl$+JJK4>S zy-@@B!P|cwbj4BL1@s${BC%uK+k4+BTZupx`6W4bJ9|zD<0_fORL@=l9}>h!`xASpa{C_GYhVS$oaI>F$1Z z_c+(yMY;$m2jIN}=}dP6bBE+Gw=)4RiBhvLzPHA>y=!z;PzihEZ@>?UB>5p`5z)+d zOJ@Slxo4{%L!CucAva)(OlO(SGIL=|?`9&sIb)E%iEBs7wf(JdjtNNe6LxYbNd>H= z`j*z;{qhhII5mC_ymeW5MfdWOnrMhX0TX8=`Kjsq&ikR*A*L-^;`t%{Lrv|`CRT8s zDk`zxJ^VcJ-d|+R7yYa?nBT~`^u-^9%P?A`TLLus?OB?2e&UL>> zR+|oMaITXUo_@%E!I;{uw#i&di1wy#ZbB4`zaMVss_8qK_~5Ie@zpW8P_~-frlsohjOV)Ib5ekdAu zpUBv7D06I>JvGvOW7yu+JK?M$v}28F2)=CCTWMcJc0cJwB&22KAflKeWUwQNYD{(# z*lZczEaOPAM5)}zpery6gyI&Wvu8d~d(fg3%FNmPADU8FJ*rw65Cwd>rOQ|ZBAI7l zT}d`luokL~KvYf|!)yP(%_5@MG)!a*OXP#k%nib#IK368(U{v|St^zZ-)-sVK{SA0 z!_kv=Wk6Lh3-}TeguBpr*uXnjco076L-22mzk)Ag%0^cesP-&_M_xX(l|+f~Rkro+ zI0wTH1Tnp4TBXXb>PD?L1e8^1koewPS4ZYzl#pOn-!;x zWOdgWI*3G$3}}g1SDk4swJ2WimoME(KRRu+e(#Yz*;p6%^odvF`ENhRu z7PFMIUi)s*DnxNtH!IMmL*sqSsqf)rHKG+$b_Y=!)@oYEt--n#3#{S~M{ASRYWe56 z=f1==-40aicHxhawut$4I&Wo}n{+)?o*&n|N{vHWCek>G6=M|`40YqA&r0S6dwgHc zntk4w5=aExcF?5ifOq0-ZlawzWe7i$=0+-45>0`4*leQN^cIVd+0sf1YU+xiq`@VI znPNVl8_0SPC6$o9RJ_Y{0xN~zLHVEaUFFt1683;s;F5LJ`NmCkSiExNgWqnKl~FQ; zqK@8A2cl>_cqigOo~V8K+lpuG+fU;r_%cgNrnuA~#c64|vZoYt2`A&QudAn*l;H3F zsfr#d)V@$x@wTHxr!05~lN9PDwGx-H=CFHhqoyacV$HaXiTlUYJgZb&)LC;ci>L~G zt-^%XTW^!hVE1QnCB3OM70hi-cPHQh?{$MItG5+JmLA!`SNk`T<+?5V!%8i@x;!dq zZ(A!npTDd&Duw-h&E6|cTNeCXM98ygfOwYR#GOa0okds5E;LL8S6ushCF}-UMej{L zxwfj8j$X60s;|cDMcslaGD)_R6_uf}anC1yn0qCUU_4Q5m2{!3YRUA1l%B*KABFCJ z&Y74n3A(j^U4XMe97ECO8u8RYYI|6cdGNE}?UR)+9X&+TEWBnVMn_;TDwCod?%y{i zpD$evBgWFT4f`3nHuerk%Gm8^gugF2d!PhFQhHKaow9l}R;>JHLb0nL%-8 z>Ef&1jxId;($GLQ_zy$;T~X?m@$!t8uZ43seU@m`=&by0V8yLl-yCj~ce>(q-z~3( z&ez?kI%v+Gm-eRb6y$_X=8j9PZG88!()JHO8xQ-{Vze9$uy~o|L_dtm_VZ3Rtygg77v2A~bX)U4_^j%`unkTfM^_{BJ{=yMh za@O7;&yi$K-nPtM=*@CI+mv^P{e+fWNP*ts9N}*p`*1`|9G65}@-yrA#ua;=EXJPu zd1mev7xGe=1%W%(q>EL)CKGpVX4&UJ3kv$k+EabGv_kQn>=$hpCiV%F>KNrx2Wjj2m>o1Wy-1KmFcXwO6sA_ z8XB2T7~EniH|CG~1hJ@hY80m;9?7rV!f1Jph*O2!{sFilonmw!>m>3nGHN*P>|K;4 zyd~%}rLOZD$n2!ca_V0cVo+010E5X#n$E!Gv*Ux2&P-Kt6mbb3lsB^uI+GvMEup|Q z$JK$#6v32D1n@v?pcgwS5i_L&d^9C#OB64zlBU{4Vl7>0mp8iTFW?BZ9r=h#h7Nxui-@+A{>D0M^+ky1r!e z=_PIgi$6-{cfrEujvx^YQ%AJJ+2NbVRum;sY|mjz3E3H&%$>5oax!-7AE<3}!F=1c z`QiCfdp|)fkPglRU&8nqF9lue9;($wtBe+}ujpzv8268b_;qfs3J}Czh?U!S?n=wt zvO8WQJ~}EwMhDn872S1#Z?r`=aqJzn6A7WNwPS-%mP*KTWwOkn<bgRu!ven`6f`VTB82Z);Ct7gE#^Tb3vHe+^AFk=@9> z#WPvdRXOsP0I(9XtmXe0aQQK-{7w(MkhXU9XU6kdE)AW{J2uW=wh>FR%E>grx1!V8 zE+QDK@3+Q>DH=isbUVghlr0=R5a5d`C3R!RIPua*X_yu4uzhny6W=ve)o8ra7;Ug4 znkECSv{wRZ!snj6>gXs54}D{~^A%Lbw|_rOSi>&mWvbVf2kEBLk`JbT<)k&`JfR?; za!!6Z_!yz}pvNaY=c>knLSZm2f}`ZBX&FtovS{8t^4KhE$kR1hCj8Tc>`tL)cGgV; zhz!x`5|$&FV6y>cJN_DZ>_f9KG4Yb$g3I$5?I-$k^0kd!OuiX6wVDq zt8m$=RS!R<&A_L_>t(SA-M{R$ze07*k=~#mC!oGsM4>Vji4OGe)t7kll^=2N&d$Y; zQ|N^_%BrNU!n7DD1d=Fyc^C4jBTpz~iziMTj?&XUT0g5P#?3y|yD33>M5;({i6u|( zr2b-}bQm6uG^cKO>ZG=dpd4kUFVQ8UuWIk=9@ns?9|P^ds8FK`9=rz?@zjj8B29nN znnpsI7Gr+wYG|cIx4(SW@2#jGtH_Jtj5af%e*ghWx}E9s=WEG&b$QYAcMphho8mV- zO{yGjMH}Gi#fiG~?!&lw?=qz&=Vd)pdzRnVhBRafrHO{)>6CPOwjR6B2D-&&UAH@g z%}rl6D!$^$eP&hF=L!=kP#MMw=7^8YD~i&EyZ()HW6>D;|0U3Ml<=aVn#SGcU(Kk> zefrOR|2O#fUv8_=%mnx(*JUrg&IkCs0Hu?KE>khD$4xUF=mGQIu6+2M{@P1)&+R}N zJiGN&^;NF0%#WO4TZO+j^t$&L1BKx$NzdpnZAp*FMx;Yrv)_!`ZQ*jIrLd&e$CxZ( zjgBde{K{-wwq7m6s2!v>JlfMlC>-8|&|65rRFZ)*gqTUQh10iv6nK$g0{Va)uD4`_ zmAK?pXItFd-6a(+OYeWAY}HA?yUet>``EUGmpJ^LaTjE45@>LlQz2*#acq&a34TDK z`nEH!{_1BtSRWSqx^pVrxLI?1YZeRxKT~RGMeno0B8GaBib!Yw!`sQ+rTNvJE)+h`H^S+f_)luj@BXK3{%EY1Mtn6fgzR<(JkpEC43;?$_{K) zF>^6zaG!O_h~8XN3oKr()Kp)Z6^!&j?eW%7)Rqql5~|ge#fYfAGEfA_Kl~VYut_R| zAHuj2)dU1!a~Z3fh`XP+(dPCx^rBGVe1seV{X?KT3UmZm518oP8)}RMK{ppfob>P} z&(q`EjakNQh|YG`MeCZDGUR>9Qtmm^9YtRlqDHJHDM)_`@fy7#sk`oy=#t~jy_dl2 zEn>i?`1)id_n>vG+Zl!g<3oi02?aq%&OMQ>H^925o#C!KgP@#bM->FKSt zaAhT#&m>-wLP~tsV~VuoFh~7SOrC^OQdz}sbHMuL6#KZ?1-8FlCD{1)NTK97BL&rP zOVy&v<=0RU093wu+&X*HfCpy3BIDw6#+TPA3aluhAn&J=ySoO8w6)apI?_QuN2MPu16smZt+erkerwDp%+*y6i_e zpw}eDqR0bTmS`iBu!f?K+`A2=-iLA)r$UfU zx=de~H1^dGVzGMp5#_qlO{vkrc=5515sfF5YtM|P{lWa*j)WkI>3mcxqSd(hT}Am~ zE)dDv3Mq&cMWb>5A-K!&jv4=x)BYFCR{ehl_5ZuuXczS7LZzAmoYZ+$Rf`pTA8h&D zDFX6H=Hg?IBceEz<+08MvYSE-IK!FofwHwCFA($&Z;#P9h20>U2z?}%88-u50$rOB z$=#?@)s|!8e8W|4oE8gF_L<+yHd!&Nq*VzY)(D<-IjnO6O;K6j-xe2fe&<~y`UK&% znHydXjwJ75#|-i9NF}4@oA_Cy=6$L?$xVE0+C49sCb5JmKf1(QehU{PyS6T04pUYy z7f`ms4OxGV=CKnB(ZV_-o#Am`whf^w{6H16>}k1(E@6#nr>cLzlpY(xr#qgO@Z9B^X;n8=TY~ zb9>$zW;-SgiA|?@j>`#eCHw@u;Ti=okDwTtU`^0zAR z1859d*IG{4+cIxZgY07UJmeIrPJO=K5jzU@T(XP*d;IoMvU|JO28K^{!n zFRww?tzcYcb{B-A!ymvf>f~2zzsHnS2`88iVz2Rwz`M$^*~jgRU0c`Lm-Rl5X5MC_XlvS;g^99P2DEYP;ThKCE)tz9-g=%``O*+S%0eWivCofo16_a@INwX9(U3KtnfQ*${JWpPy3Lw zKmScm|J$%FB8>JZid}yAjv>S-v=+weH5zOl0=ncL8U z!UY$Nr3kq%r}v;98aE%O#xeCUNg;!g(pMYV@!?2^NzZDSM`zsV74x54#h{?mnIjNl zdifGwy*Nid0A;~o5)ph1Dv?|zIN>9R9_9n~2*txtMQGKm+cJ%Gx@E^wYy-kv2nqy= zKXBGIZ4Q@%#~U?2cVkv8R9`}!AemrqlmMb2vw;=kH6>k&sH`k%rw~sJ!o_^`DPht< z3&SF)-8-;Z7!L_eVkbYQhC$V|7_uE1456^22g^6H5W(Njj(#=v4vVtJ=+h}SV#@B; z1zf%ToySjMhAYbhAQ{vKCqQ$sNkSxfasO~4ApciDYg+B2;m0mkf68A7% zzMw5`M$KyOd)e;)fj;%hBTK$NBhFhEYe-?8nG)7G%Jr5`%8+VGE>5ySE9wVX zk_=VqH}JNI!N~x9ab4YLgbwrEg^WE}XGB$@O3S8c((W)uM zq)dkg)|!x1K9PT=#90-g1u&yu$RFY*8n}ko>N5vneTi!LXswaCF`da_vPek6^m+brv^LO4WU~h#Wvou)Q{}oVS+P*o8_S|>UOXQU=G0XsjYBSb~Zm<#YQ300vtXneE z*6+u_qzf(z2J{GZa3q{3`sC=S}UB685q=oZ)@u9;8dA72L=Z(JAC+4&+e z^g>SRaF?RQ16_h7LzCe}<$_765xv9-^50&bGgJ>m_-iiJ0O8^{?%%CaXW2Ua?c_OR zxuie0^6@_8?_+-?lCM#(A5)%6Hoziy1i0$0GGJCnJ%kNRF^=+7Hbr8cDGKQ*hS}t! zr=gimnwM@!L;jDm1WKd{eKwZT9XL{mSr*6Z!zNKZ@K=b@cnbHbh7`i^4_!V_xJ_VF zzDzIFjFx0Pp=emq?|~{HZD?^9qf+8|K^h)O$_7tD1l9WB5;(PDcVNo)noHbbhKDRp z;v^}-#vwB4CXvPB$j!kdWgaG^Asg?e5s2HgD`NbzJ{@iA6B`q+vwu6Y(l z9gzdXm@+Y#UR(9lO|9?Yca}$I{u0jQ9Zt|UNtD8oOyr7T)RrFws0$V`obQV@KqD?DMNl#nXphPIn)ibTZ2wZ;aM z*wbz;my}!}`9gsdSlE!`D#Dnc^eL4ImZ%#dFDnu3aG8qJM<7k*OPC?Uoj&uqKybeE zibu?+*)S9O6n5;v(8v#qHrqKwi5c5kV^&#(b3eBv=Lw%EN3ohx*~4oLs5nwYUk^;Q zk<(HjkZyeQAJHrw5b<<(cUq97YcKw7i(fo6q>DdTd$c+=3vSh;e;&cRJf?WDPdtRp zQl0Pc>YfkdGsuRNi69Ywe*b92Re7R53UFJ;TSxN8j}mrfAKy3-2TqLHF;3w>lB#7R z`G-(*GSiOqw$GHJJu;XhVIe*rs*ylL|FpyN|I&+k)*g3r=VrLQb8ZcVmUhEibjtNX z6*rS*f|}qK=~*l~yQ?*^jFq9mZ~@uDN?>=@cj1xF!#1lVVU|o(J-)7K+*FP=<@Ov> z_@s>KxzCqsJIv3tbYJJaw66>KN_Q0S`=(ZXiwQQy2f~k*%#&R4VA>CpY~qqCWU!q#yoWb;Z26gcFunVbe1!KHc|W+n##2vvm{_ zNPIV?sgsoLyKyxvsuf)Y@4*zz8yZsrS<8JJbI2JlSSuLVLs4h zZeM-T{bFN|OTzd3iw)}K&Oam688Y}?mlM_(Q|)g-G?QDBa?NAx;o0lg*=-=JF|pjj19H6Z&%#FK$#zw5WUeR zA(9?7N&pj%&=xFkA7Jt-O!i$ZXO`(_$#1oSuc$bK=FA8d=xiXWNqm!7~^YjuX;Z+>RJb+K=hgZuukjGHC51<%T>?Vt4b z_jOIH|L|6NshtvHOhbr^lTs(tf6RVR!7DIjVZGf%Fi>e%Wg!{Jy{I&2^VtX z@zlvwfI?yR2?~$Wz3zT?st*xz%8FqNIeOfPmLyRQ_(*Bds#>|t$%0cmFP3OS=h<+g z@YfQ$XV}x(5~M#C{@}zlf2X9&WbuXwGw-289@7v3S0FFXUw4U}-UbfED%LTwJ^(t8 z)mkmYOaC^ozjO-+CV$vgd)1ZnW3zO?60jC9-Mp1&C6r==MdK_6esBCoJN8zE3R^j7 zTW(lM+PF$M!;rh+5?L^@309LUBqQ~)QoS<4g8nT2r@!$FpoiFmC5ik5H$vl#8TBq~ z@-Zd)s@uL$jiB9=wX0FqdJkzCZ`hVl^u}1vaS0KQ65867d>CoUseo3Rmb_BXT0UTT(6F-PM4MlUBZuSiMtH zruJ-hscV*p&<&*t>IpP%f`qdE^mH%`k{L!myFEmR2PV8>Q`W+c$k5(E^vF@erqhHF-d$N z(hKH_FO$GxN95zGX9kX;m=Uwo4ckn+GpRQkMnIeG?2)6G?iKeh)#79OMPUu5?=6%V zP%;j8(oc^to*5jBQ*$UxSGdJxr=SAWyfSF5=o2XTDq`2zddY1<^WP?X{eOdD^bkW2rRf@PR}%+wd0U;>xRBT$(r+ z=D5WVZy*{O>9W_IGq!%?9*_fnhbT)p(2G6-6^wc^{gXt<9&eo&9vlE|NjY$SnBic* zv&q154MRGN@R1^r+TFx0%yPlUJdb(|`I@N{E$V5Z4JnrTFgX~HgaV5&mpnTpti#q& zQLOcxnF5%>sXBASlyP&a&+*{!O5QkrCY!k@=b%1ZY48NrnJnWe6>td=uDxR#IQlDq zM8Nu6;_6QltqIo&x{L)g@zA4#?2y4a(oU3vL9xH4?L8qVez^=T0IUo8nA;8waPu9{ zh1o_*&DpZ^YcUiIwK1zZCyC~ObG&FBe1=g7W%W!4xoXfM+!`zzm~{3&S?ud%8h5$y zQbgnA7jPUj0pmb->JDNmL24&~cDmeD)WeGLi;{kdh#|NT9B0AqvG;JLC&$5KM8xwl(!RQ(-P$6Je0O-;T63YA%!XVct`W&#e*6En2AB9D>bXM=3Hpzh>g-7XroL5?`&tW<=0?oas5V zzx^q|8Bb0e-5Gc>p+?ZghyN-Oo5HUgA*kc`$xfbX%Yk&9y_&$*>2j_mL&hqYdLfz- znaOJ^&#@<)KhL~|TtJH=J0(#FeW|ZxFGMulSIVLVJrS0M{7BX&b(25I-KS6rL5tc3 zImvlggtW_S7}YlMV6b@GcCRFl7!V&lW+| ze>#GeGH!Nw;8j+mQx+A$BCJS+6Chb4r+viPReqerjlB^AD3H5XDzlj~QG0wLy4Ztj zdA{5;O`Uy+^fX%CvN&DVbQ$gfEY_Ms5<@FFug>!XBr<#p|N3+(k}*mRgPFh#O?f&k zfiKMNBTY-@jNf}tUev`W;gd!ot4$Yl0Iy?~&%I0lzIw$>IMKVelfa_@l#Ax|SC)Bk z?b+I22Ng$qjsM6Snsi_%oZ(PAp9t_#YQ=8^wNq zW;J?oy0L68o2s){LjzVl$;S2ome5qzR@4@YS)MgJhtGkT<1gcwmNYLL{3EHyDR{7! zACk$dk^ZcI&UJJT&{kSfn|>UX0eFzF;FAb>v2oQ2sqdANXtua|n=cfKt)vBFA%@b{ zyd%e8gTm0CNIWyNa20SWn6>wiRAI@(!py4tbFH~v8 zcFZz0NRya1P6tku_1NiAgS2D>B97UK^p)Xvvy5f@AuUo9f1m;$fa$l!UDj%2g~$z0 z-{YcAJ2MH`4i(ttAAA7&s^W4}#+HfOI9(m;NB zPVS|C=i0g7r+tEt{mBB@BmqrHQRn{-6CV{;S{&|6q(w6_DK*tkAAMK&Pf}`6JnjEw zX5ha<@c%A~rI2zzlD2yc#5idjgLVwRG}W=a>L;w!yNC^#9`gu7F_xm;e)bemqdXE9 zLC+O09UaAhhM3#?CBMtQ*u}wL$56tH>5DNGi@IBO!_MYELty1ZTTaMT63lpKJV2l~ z2Uh_vNlB6lLYOJD8FUHq0@K1{3X!^l)P*AB|A3Apm_#W@y(nf}?hj{8b4XF^k58j1 ze}i^U>USYKDQtEk4ZC!<{H(uvIj=G&Bsa=oUnNXtiq_6MgFCeyx){t?UlL%ndd60V z53`83XSNd!(ZIIgGuZ8zSzhS->z9Wpt~OE9Gh0u`0~Tak?AWKFNpALi1=bP{9Z`&* zn$V~R`CpecN5U#`gg_h0`Vuz;k1IllUmtPX?9xX02p@)W^SDHa`z-_*`I@r_W zY8Q>ja)C>4Pc7x>bn23$5&E5*VlJa>oY1*$12s7 zZn(QwJpKoe_9CIlepIP}uM#r(E>mkcG_J6(1AY7S*x4wE|5}d&tAT4lbP^A%kZ?Y0#9w&-jPA_u$z@4nb$8 z&e?xSK89k+rz%iO7qf-SV0RJOQo3I^JKX+FE>nSauX-%YD>UmB)3VdAV5<`}xb?(S zAAadQnU0#b!w4O29covTnYA+2Q<{k;C-udc_yz9=N<%2qiP z+Un|=ZqAA__H{bnRJN>MTP1$;H_nU}^LP1IWYFI4U#yavy0F=nH2!~Ll}(;+xfsDz z+2Uh^2{wvcNo&S>Wgek;{gXcQOm(btdSl;vf4WzEC3HF<01BhnU87$I*D=ecC+FXR zEublsJ~>2no}8bkVbNgeD|??_G%r_(CR)4NS&!g>Ufrn#=Z`wb`kp6MQ>L^eU&^9-JCxEC%hz9tM-4$ zbN>J0eG?0XI~wA9&{5wWxI$>W!<7+a93vxTI>6e8+!6?3uTjG;$Pc~%eu5jAW&EQ! z+S5NKmIM~cUoTQLRPz_n7bujc1OIIJktfLA5G5-u(dJ0!-ZI4L`~%FvAc5Pht%xjiOCG2Ts=aCsqG)}Mc=9QZ^+O6X>n{gfqm`Udk6 zbjmL`>Wlqab0bTVq)DOTV<{i(Qqgyr8qqqbi(L=@=(Yq!RhD#E3A4^o3{Sw$4CFcM zfvS+RaTYf6m;#9A1=R^E}aJo

+&Ku7iEl-Nlm4UPf7#%D&!-bO-bgg)Y(Z%KfpCkl9F-S{+^cS z%L18aPb^;DAmsiMaQ!<~;z^i9*+uFJiYRob^5XzTLF7D179r4;qma@X&PI z>GkJLC)aTI&hK-GAyg)Gm9qF_?8!Mp`$~p46k# z6yW9M-`%y!(||WsPN!UqEaN@q*?Uv;W=uU~W>y!cV5))JSLqTiRs+l@MjhVtXgcV5pTgwJO%1}AbHkRm=^ z)bHdV-=9vGtK3uOtDknIea}~3@FDxGzN;$r*5_@x?A;6h&8A3R3wuOsIR%;^0F6Z+yUg9njv z+{F7-8jsBLH<>|{W%V*P52kb3qM5$Q9U9PI~DFsXs4+lGIN)T*4(i~H5gctjL2+>~9f0_~qZ zFC@AC#_3RHz!}9+-QfK(*5BvOgIQIRO&HF>JOZ65 zNT3zYx7^6nIal?jq3G&}RGNB9+aTPcD(k5)d_(SgFZ^x8%6MZkP`9!guq{=UW}EG@ zpsk;D!vR02h)hT40S-m9-F&YhO%aL3Hp1XTv zFC>T42NhGlvkNeFFdwk$uy&-Z3HY-ro6u9i%~d;NWINovjw?hx`jI5{E>q`8i_haE zTk=;)C)gU=lG)uf!)rH#UOguTB@jLEhi`T5E;sEBSp+8d>wM#^dCr^e1En}`5TvFV zd$B?R&leH-a3?Yb6kvqCVAZgu&x4)dI(3GOhK^ep<8#mt`?6)H?O(hDK7m}cdw(X> z_3^VJzmud#UV`_|53|sp(6pC$80Q!PgctLh5>8y-@dKO!1{p`-EmQag5#=u%xA6MR zapjTkfTun=Xfbz%5k!@=#gZ;Ljm_1LX)m|U*K=wL218!{^SuBygNcaLT}a@`G#Rk( zKdLdf;fYToyLzje*2%}0aV|ZXFP0U-*9nFstMzXn6gw6hkJgNAG_6MNBBBusRSmSZ z^eX1g@`lTFb68bQN77m+cnwr1eF7sGQ&k?;(^FcPPgKJ+__yNbFHsjHQ1(gQR*B!! zlHWt8aD_m^U}}(z3`;$_k552q+VMsHytrf~%H1Y(f!UTra0Fe{5CJWxo@yJmCWa#Y zW(b@A2@=o=JPwi|{%Ejn3}z=>Z_Gy1BrUdzNq$o++JTxStS~`Sxrw)z0FZH;{-o*3 zo6}`rj<5TW-(*e&TV&VU1}&Fh+VI61k3pT+z2^HtT@xwG@zuIcbUx5XbJrgsQ=rLO zV@p@9GD+TfcBzl~8e4*@vUVckHS>$4`A31wKLhYi_;Yr**$a5SDYq3%M5m%U8S zeXaAhVhfR73>5o@N@pj8rvRF>)2{colyB91`zTfJ?k5TDFDzV#S1S=u$yoBHFFgDXqJvkPs0fKWqrwjYkBiwc^Q(zKu183vf$Zn^|B9>1Nu`PTv&g)=h=1P& zcSg?mbScKH|^QIn^4x zw(OQ+|a;3O6+`60$Zrwzxs2o z)eA~sq^}Fp_P!f^J93`o&}8Mw<|+Ekpi|1=26Q&H^%TQqP>Hry@lkqH|DcPFN7=Ws S4Ekyg7~aSd_xe2H-v0oYD{&%BOH)JYVZX&#-y#^Juiehu)XVvH`>%j% zoDCE>Yxowt;`i}2L$9oEa7q8ZeG!cRdWnW#=tzo5rfBAc4u=`Iuwtn9%T~X^g{#y{ z`Mh1}iIR4MGp&`rzpwV&*7m=)=hO=gheY@jr(PoPYst9l8%^JrjQ80-H`oQ2^N zaFWwEW#eKEYtd5L!pn#VDBKgymjT|s82?Lu*=Xtw2wb86ez_ShtN${z&5LU2yE7ce zL?ryU;AL&y`#R$L2oEaYnHCu@eYDc?8D8>bXP_5jx5L{T5n+IBQJQ9>Oq_|u3;o*_XgK zE`lM>TX;<40t|fFZ;i|LhW?v~(Xkgg%Dk}e6u>)NRu)%Y;2)&@Z({mlT@!}?tm~|Q z=WuNg&gpw>@$F!oH!o7H6u_&?^}NL|SC}VXC=LPr=rIKR3%9&%wmTxU|JK3vHxB+E z^^On-@i8Yu#a_A5U}Kf7YHWbr+S!_tA?dESw)*~d_;ENwV7v#- zf8ltK*Zu8yHw5b>`aWY{SH#Qf|Kd>)_sfF?FQxy!Z87m!ahfGiB83L&{gU;b9E+5h zGUlV(c00HEbF-NP?WAd$%rqvez_Bn^Z`t@bU^@gx%}~WTY~K%8`5dSm zi0GTWfY?th7xmugoGSEe_7f`=!nJUBQJAN3AR{+%z+0#79bgv`u9^1Zu3^cGT#cvALhsPuFAH*SsDDatD732AsH()+J83I`2cPs(uw+HHz;>+x;0kB&tgQ1k%~VCNVI!;v`-ma;1x>^HVJxEpAs zmR3*ba3FK=j{0pB(sJ(6ZhMG~>*GX{m~i`jdFtL|+SA2Qm1omkTA626CW&KJGWh>; zPli4j`jgMlbgzGw=UK70niWcRdAi`5t;s5mOA~LZksJqndhmB^JZvlmy=+tN%fV}_ zcT2a*y=>l=BBW`vM@x=T$lG-{dUuhNLzj-aR<<3#k(r}i0Hv@$ZorasC^Yu%hap(7 zB`?}~;x4o~xk>E3*)iHwl?#D3%2Fg#R^S&vVGMsQ`(u0XwN1ZG3~u0Zg_(OqOI zKj^47)3XI^x!&krt@cxgOJ~5^xY0nz#+s1DeeU?C3{ZsvWpJWF9hNf_?s~0G%U;9% zzWAT4eX{n~o3(|qa_GN)>bd5BnzX7Ay@= zd1wGo0Ad7Ik=@;O7uuK*xwh-rspo{1uxolpLP!{N+U;qi);jIi`4)4_C7L~-5#mj@ z>E=_Mhi~kv8ft{L-Ai2vCAHdFAh)%cI$9CcexNYpP}w%*(yL{!GO-og6+3IMmWy=V zS6WUonR0P?u2$@PtW}vXy)KtNo@5TSf>XG+x~Rp@8x;n0?+F+?e}<q<_Mm`fLe*S6icmaEVXg~t&&w6Q^TaY znb>NPraop3rOTO;9LGu&JS8&=wnwAZmsz(2 zdUiOMW986(NKe*iW`_0rs|I;;{K@fu_c>l|E;seBEDwk;EW!7vTe@W5=#5k+2Or>Z z6m*H7dKev|H-ZkGdW>5LJlgl#?MHf`bj(dPBO}Cx?GD71XbP^Y1<}ecN8#Reg0O~3qm}B+V^2C& z!Jc-tjy+4Mg+1m%#8mLu$5fFVVXCFeRjxATYi`!lt1TF5RxfxQ+eS9tH5#|5+fMLi zaTsj&a{fe1Y|Tm^`UccZQt7Ct^GRGe>twe~-hEObDJQ;|E^RPfGT`Oh+QPdB^W^@M z`~SIfpH8J^aY3sCeKi?@r{ie%ZgjZ_w#zpDCCYL8oxZW$8?hy4z-poBhi5}HZj@m* zvH|W;&*S49ES7AqsvNeBFRCV1;a72gxh+j?rPDI5mzecxTa=9KykNTYK^|Xn&3x7? zrwHth^@7-KuX&Nuq@CE+_mfC*olLaUmKRjX@CW4CgjVJ{?kJnp>u!!J-t-nNhrN?^ ziD6xgt=sGbcJ0z0&{#R2HEI~Nn5D|bClMv{AF>E=C4K-7(rI4RW79zFI#6#Ce+u9Wkv~q*nk%6lp#TA4?IfKoJ>d zaTOG7;6#OjuRhf1T;TdCtyv&G^v_cUPZ>PdL8GW#l9mhAvl1#buzx&hE7k(Jl&Ikl z6_bTH>%)60k#bw}mYWZY$1->run4*yh^^Q$D4-I=J{~?(X~uNH*qPNhwN7O!yQC1Q zgtDZ&Ogl?vi8<}}ugYhjtb2L9VH^3(RV(K5>trH3*N?%h3l*G1hNG@1t;U5*I`8H$ zsd<&wQm(1CNpjAv!m5?zl=Z8moM_rdVq6O|Oq}l6>T#`96%$SWW&mg1V^(c*3nIw{ z=PKN6>|hx71Otjj`aVD4%rNh_W!Zbhm0g^=*GQXA82t~W7O@R>eCddJYqYUOUUuh@t20fU5Zff-w^bUIJY)geulXv09f2l~9r;NIZdN60m|<;n zN|~%k3H4;eL}K!w*Cr``by}xu*XkuholP>MC}nSUVJBliYqyZk1}UB>q`27tUL~Ov zb#ZenoergYS@Svkpqu*%czIA`Tzf58YHaf6_2nlf1er3PPi7X=g7BGg9CZTr=0^0U z{gB&|RFC93owM4|#zE-0@s!O|HqUkQ9qWcGcwQ4-pVXOVsk1qRn>O7x1g$Hrn5V)* z)m0+TCN%ag5sCg)&q z_+f2jD0O3`Yx~4D#dpS&WV=X-?5WbP5(z!-NGB4>4vigkrQ->lsAi0;_%2LdoNc4? zIXjQKG;Kh0B-ci>(TGN~Y9oLOdc=*Kh3pP~m=5@p@e`@Z1XWW#gDeDw11F26Ax_%TDaxU zIdTCuH%(2-`H__FycunNX;%^}QB-bEk5q-n&Dfh$*Dm7Mku+A}{z75hB;^`D3}* zVeHG6ihXA$(@omaYJk(y_Eqkba!INJzU5G1YvW@!v9phQY@N1RS3u5kI+qzl^MeXXW(ui%&)%!#xrDWcPP>JNhxOOY`p9nm*lHpV;;GK7<%~nxW$LBQ&J`Frl8s!e958S8fEMtWT3-V_fqPDJnd68m=m$B?QvDq2hJqfX-(kP}ffmz+r9&k0OOHao6 zeCVbtWNWA@=%$T>d2~bPl-)izh(djFn=)E%$dAKr%*w?KX1mAuFqBIf-6?TxodVMquztV&v*N`ksF#H^2JeexD;cX zZ38<8w{xzW@GNmCd`_#I&C^Oek_FV<&uN!AWv*w z#$s211BU}zp);BZ~`#_9RK!~6ee zRzBbE7nEJ;Ra?6HVrQ7RyXHH^7Yk!Aoe93qOsYbrDmR>KjVaQJEB6_~SHIvDYk_r~ zA~0QC<-B$O$+M2hm0hNvb*2Wzz)8UN~ zR`iSz4mL)h80$RI>JK{opkHVG*p|(C$6YG5z;?GLr!%$XlB3f6h0aH3aky_Z&gIY4 zs^c^8NC=MI!Z7E_5JFnFye}=yK%iZiH!J%RI25ZpwhFCvtI+ybi{1BX zwV&@SxMA5h0>5kAEzhBnx}?aLDO#O_MO2L)QUu}*nL*sV79_p%oQL!_X*+h6oHtYv z#^A7dc`XUqwlPH4*`--63q7O7u9{{w)gQB`zO9Fy0>4LxMfxt`pg_e#M|!9HRy^zx;?D+udZ$Dxe8DM6>EdbRa^DVWoJ$} zsA}a3<=aItSnlZ#x^0E+neI64u&fH>_k~{`;2<-};)L2flihVZYkiVTOgEu`!cGP0 z3*U#{lSc6pp~^)A_b^M(FPN<4x2VibN3m{s1$}Rs zX479)mcB84SN4l*RgJI&owdwO_#`DmY9}1WK1m(VFD2-vV?{jXqPy0pJ&BE2P%QTm zTWuHaU{h(mL`cm~9-pM=qsVRZ>Gk9Hy`aY-9rN?Zm|;!e0(lbM{h+vxP-Zbn^-(xs_}w;J(B zTIq1eW`;v;SH%_VsM~Aca?S1i*VS&}PwFMvH*#VDO)9<_%AJZ00)C#x@ON;D?q+#| z$zbPz$-?y9I8KI_Ak*F6f+vpkgbuS)G`u}ka}hP@=4sB`A4E%~n8M`8r*kZ0w(SI@ zV}hYXqPa=4jLOxMw9C~`g|ai{k%@ss%*~#4hXx_2;K^qolrFsi`B+R5fEeH0mHGQ&6@I!HNDA_8{>07&fDR+cs*gdlvqcl-v zx-(CIurFX=>_%a#u!|GYDtYE`q%D}x)#aE;yJ&oy)e(t2NQevD;oj$Hgbtx~=8#NI zb5kW$!BL+q6@nzz1AO_YHOf0y2jh1iBZea1*-V$NMd`SXPJ|3)jLz7b8dU1k;&2ta zkugT{g^H%trcTQ2FcS^TQ$nH8j0Q_MTJXoqE=Y!5yxUfWXw1FQ>0?;zwb?^ex0aP~ zKt22OQv{asbNW4}-*fsswI7t){6}g(Gzz@+);t<|zb-OeLDv1!f9>M^RJH|udENe} zFL0&D{l3m2ay>w4X=?Ufv1PC1rk)a;oo`qEj3NZdw3?Srk76yT)vEN9k%QV`nQkCU zJW3qmDeui4>kk7`j7-~(jKj|>(NYM>kLreq>bRC)zr}pc6Ae?FhAUJLM#$i~YBx}xWL`{%7UJB#BM2ukx^S@vkC$VV=#B47WlyK>qu zvsO<~1bTw%&IZ2ktS090y0-9D2d_1*Ry$DcON}cu9Xj(@=mc79iixIYRCxF-S%*=w z>hR;AHRd_(FMHOh5YrxlK7#UAs6nllS^wE_cvYK&s?Qt4(wKZyhM{>YTC(c8@@Ve9 zB+=}+ilJh*5i&i8(H(y16#Utu3F}M(s=&z1M->=$IO+}Ti1*vrQE`y*D{e3eX?Mw5 zzDLcfd+kEqD?d%`BAy+n^U*cKWr9v3TjCdCODCp3=|tZgbmB^TD|scc@2is6N9F#) z*P4F%4mW+oTaTmFQ{BE)#jo5DZkfAV?TvnEE{6(lC9nKbR8LVoD#xFz>a8E!q4UY4S)5mNY*O%hZv40!$rv(@h~A@72<14(#F_YHDD`fHOkMemZTB1A1(TE ztyvY~^fAcCy5zFR=#fc;F$(QctQ$2OaDr(Qajh>&iDv9Lw3?MBRNg2k6ESXdJu4d7(yB!@4M_#CKU_W8!(D9^h2QNs@n0fTv-_|k+K z!mfGDfn81K4ZBzq8o-tD2|G3UfR>ru8ZEt{Ir7An!6gAo7k<+wsJ!tjaJC5j;DQJl z*rhVl(GndHQUJ2T8qkGZM$wDi?pPU~r$WJggKj>$lfZqoOtnWpxRsD?ODor#3IiXO z;M7UF@~PGGQM*69erdG~zqMLAZnd{o%Vro5u`CFjcT5U^-%H9Y0U6muz?IOG(&zSZfa;4H&bQp!TG@b^26>eSNT1cl zM7+0U0zlsY+0y8^;Pa`&Z&TzUu0c~xR>fH{ZD-tpQGmp{1zKfPH0TtpHmU>?>1z?<;~f za4X0L&>R4p^KNB*M$G}(KL9Q*twk?w2M0CSwZHX(&$lT+F$1s)IYf2`tWTId@VSUt zsx!;JHXuF4@D#&yHN3BeiZmssZ^+^AaH8+(3E)H@pk5Dji*JH@HF~!bwjrTqlV@YkANHsI5)| zt?4X>R`*~5t=2a{;}Q=E@?pIyY{^|#I9aohN*2*fh;q($<)y{0SG|X^;bAKU!er9b7}DMwiV(vv;Nk_ zU01(G%gIuKZ@_j9AK=6Q!OmZXg4b>vHA~^`JBrSe`%muwr_TMdIpvPC>D)g8WOJeY zj%;3KUw1DEX{>G7J})m{fWF37OJnB^xZ)LN#|r8Lq%rXdFZd2=tbihN48K@QfK=L& zA-?~B7~HCXSBnX>5dyfGCZt7cs|@yLhX_jJJiMZW+nAOW!?@Q~jyOuO>=6+Im=1s|#gwn&jjRpJYhDI+;nF+U*XD7J@V_8LF0gXQy;zL|u0 z1^~+0NUL}@{7of3^fakK-oe*yt{c(VWz}mVG;5ygZ4}tm>W-7OPh$)n0O2=FCw~ zsP?X@Ni8-RDRB0>tqZQ?5$@>faIc18n1Bri)6o0vg)0FDK1VHjs#eWcXkC|Jm%L&8EuU;PFZ{dNC@ji-@)+dm;HbYUY3 zYPRxaldV@@>dEIPpZ}faGZPh8+m%4&3yNrLVoMz-d<%24Bp0azbD3wy<26_;q49Jf z^gC0x<0GL4g^(89d;ebLT8MgY(t(YMznJZ8*a_1ySL@a%eYwy-)H=~qaK=- z1!r%$>Z-Rj_qu}6NmPl#EwcpNe9OQvi98HA;GpklUx$Z;TSQmm>Ros;gw6eP`xv^E z((``h)>{o+gVS~}PXsj?@L*2zBs0AZ3)O4$u}Q+0?NrjB4lW#Qt&|rC(5dIqY-$u& zpl8kVBJHf+mn>uRsfDh+_o^eFJbm)?SD2@d4*bUtLvdHFN^=Wa;CUe9_}B6SvjU~@ zt66v~Z3c;!d5^26S{=F;2(=H$po)rVQ){_6D4uKGtuh3nlSUysBc zQq!9~pmY}vnKi3<`_s%kXP{txP73Q&4xyZleN}vqsnaoPgW}(~@H@u-{Vf|jSAy3n zN)Kjc?(8}=imSd5N!LA0pzGrI-D^=KPoj8hd&ZTz;^H!PbUAj|;ekj_Gn2Exg*9DI zj(tb?O+8`%byBS4j(nE)j;ql^uSWCemP`xa%m&r$qPv;FrW&|_>7?u$v5KFqL}J{Y z5ELp_xoUf#YE;&XQzPb?-|9m~t{#n~_C+{Gtv3HoYCni2ewf-1Vu^24`>S&KcXUg` zfqBoaSOpbE4E9%WYFu*Z+iPJFO_h)LN=UxvWwWV7487x-wJrb=qK|hsqn;+zbahY? z&o#z(!l&7wV>E4^^?h_Qy~8|NO4*fN`HJcyi*CWFh8>gebwaOZb|zNZXV(60nuW%n ziLfghhDIQ#Qy_(5OuQbaA>HTD01FC-_7&>Wf~lwS-%0ETt;7!#`#~%5O=5ph9)E-E z&4oWzx4GDrpJLZgs8%BV%Am4i50x^yFGTUQW*wbS`XXDiVzj%Nhlt5#j}zi>FV5Hp zqYrkj9hd2~&<}GSy$`cuAHj*@Y=~~ozyY8SUExAvGqQUGCgzx?n)BJ-EyD-cX& z_~{~=lNQ5N1*N5tUYUdkB1{Bvj(zn_4ky-f#+*1ZS{c*F9(+7nb450GlTK*p9Y>~F z*n15c>!ZYDIzT0enSPxO6W5a6^qL3No3USt)@)$jW`kqUx$L*o5l-l?QncR+Wz5*F zEy8RV8js$1A~hvN5{KO8J<+7N3HHSo79pelr`eDO9E9(p^@G$`6><0hT0cl7zD4V= z&Ed>VyvvT;s&BvdaAMKU7hE_S%X;kFa_3Z<*T%74(Vos-+v!n6AI4|VkzCR))u3)} z&(+nLmef0OL9^cC6qCDvlOk-V(IJZ$_3&`a!GIEjZWIIPs(}^GXUO<*d%gn0?27KptP;&$=cr`hnN^`F33C{_*JY>|9};RKhydpF*` z=P+Fk1(9YyHa-vX_aBB&z`xcBdHRA+SJ*N{{^w_5Yo4e?&2c$!MyxZ}AqQcn4?JI^ z3!d+)ip1V1y;CAS3dv^aeR=&4++*20UA~^mxTI#Zd<1{^Sj{>ru)`awZ6q@{Xu>8V z#j(~TNySI@dp97u5oR@%bZ+J)*UboX@r3VZkI?h^ z<)q92vsLCUk$xM-&PuJjS~dG!z?baZ*<5O*V_%|F8K0}l6|?<(dt|Vz9mU67iSV`W z?$%Cbx!N$Lqp`qC0ZKMH%mv4%)M?laS1)i2QWpAP7qI&)&c;I2-9;pyZ}*y)DqPXM zAMx@^mb4L=W%>P3J!YT_=gHp1k#5;FX-<6!gs7u$lg(?fvlEYjkj`4HHKy__ z=H2gj{BQ71@1nltzf(FN!XbWGIv>J;CYSG!&TnU2Uw3s2(Iu*TNtkifD_d611(qBHd|lu|jhb90odvThqy{ z?9n}&Yn`d)HU{G&eCd?-w}>KaJ<}?SZPhZG)zsPuw9z*v-M_O2V1H%bN5X6%C9&Of7%a9!y#HaF52^F zqUh3b-sAC|a&(-NxkQ4xAIZ(tl@BiGl)RZD5_Q5x=a>LejdRQorhJyicl%#ftBd!G{QlAC|#~2#CK+ z2A_zpEF+qFw_9czmpn5^FhSuX8OZK)cFQd5rUQkfgqhNEQNoRBnv|Ua3krDUz^s%? z61h}pns3eXQXEtB!eCI-k5jBiqrgLmhirQBzFZ@CNs>~96DXgc*0!drl0PL z*I4F`f$X|#FK>yegIy$<#f)OJ+%_O`UDm;lV{3j6BsJaXAYPn@^IPpAcD_qY<4eGVLzA=|f$;AWAuLH;EsbBoxF%;Qj0SBYuUK7fOn z+h(Gb-Ngn)cLxaDnd>e`#vMkbH$BNaJ$i-DTyO5>7lyd#+HZ||;Y9U!H!kVAW;Ffy z&UVP={ZvF*T>ccxlIFhe)af@tJA;K(ribj_R@bM4Xd2n@`r?Zqe=eGSBS**}isSF( z81ccfALbbGiDm5Gc~%1#eNb7>_s7XT<(`DOv^ydB#IY_n&ok1rryI&Nv3EG6ig_Y;9lZqMwAA-wJMQmIL3(BjSTee-)2*>9M*iR8I)wmU6zfwn4CL z0x4`KM`B71nsr~bym4SschtS9q^{!Fg&xP-sUo$oIWn6>4{SjmZn;FvmAKi9NYh2CM)n1t9(8cCN6tUQ$3O zdQ3&>LOSod53sjV3K7=w0`q&>9ON8#o_SkcRhOtyyX(j%ZR5L2C34%l(kp*s*% zrfO^tmwBR+-sv2vjmaSuhu!nq-R)TmdOA3KAJYg4cEza7 z-7|zTc6)oAU&CI6xA)J_zwTy8f_t&eSKSBnwuC zmzbcKj&u9s($OXdZkr#oLs#vqMgNyw1BKag9$lNP?z%0bT)I??lI_hLBYc*(*adZN zX8|F4E?}sr0utZ&j2si|)_$64{{ z_7j`XD3CLm&2GC4FP+TN>>Sr}#Ob@EutG};%H25>ZujmeJzORmWtT2G7yJA$Ih*(T zgQBkAFx!);ZSCZIV^E!!qIz5!`0o>_D%|(KlSJZ!#vdjT1ow%?&!zl7A&u_>Zt>T- zC#iWeq3--}8~a-I*;3Z4%#inOk9=(vf@0~`P8%yr_;fNCFm9smP2KJ2(*0=jj6HGE zMQqsQnF6fDAZ*rMr)VSLvoVgfLFccN76zfbHC5rpNE3mP@84*Y>E$WsQLeNwahu0yyW|5IY;mBCE2H-%U?;XV0zJ zOMY`5Ym4tBkNBYPhsh(pqVKn|{i*1C7ixtb%u|JHp1w3zIJ8I?7kme~F8pCrgOaXN zIJlDyY$$g3z9;oj1Kf>NX2aunji;rsE1FKs?*y#IvOGSD-X-L5vAk0PGsuEQbMD$% z%=fWFZI59qmg?w>TD}YEOJo5m54%6qGR5$dl?2GklW`2x@~Zxwgb^Q<{WXMnRDPhu z?b2wR&HOxsy$et{r8h$yI=7Ep1v9%^Cy(MM^C3XwjrQC0q;)^kincM}G`393yNn9e zSuy6RF5C_W_9Ulc`1p|f8N_lt-4pINo##T_~IjpVkZ+C%=!+#kQnAOL7QPv z)qu5&_^Sfm;e>Rj&!!oK3a6Sa@T!2H#QhlOz|544Wl!3hQ6N#;uqCdPo%P{>_M&;GouwnD9 z9YNjQ_N27xd3}Y_OjpMo)H>$7fBn~9_4I3>e(k@5UkeF5q1EBbU?roLQqlcfH9WfH z?x$L;EbXDD#0?cS@-5Ao{aS8u&t>%q%`|NF1=i%R{n(#vm>Io_#DhnK()TksrJAnz zPwSqo&&Mz_&l7`0&F~Q3wrmx%&>}jVP9q%M8+CG+23DX7(!o?|X8H)x_bZH`p5ekm zWu~S(CU#}7^g!(u$S)};Y_c~rf%s6|ex`eNDvQI+8J6uP#` zUK_%y%UPTjrg}Q8(c8E^oRc6Ycd~gS)tY=U+qa`Iq@_IYzHi(75UgriNTG<}5Lh%2`?Yoy9Y* zQs>}yT(5YhqQaIAJS1rude<$ZCKR=!xFVd`!oFJd7%4ei)6DL|HWuEOhqOid_b->IhQbTydTl=lE z(NbSw4=rs^*WSf?C=trg8=hm&4L6$Eq3N-{aK_ZP@2SZ5!kxM#Q!+HhJt_N}JbT15pwM-HvITR2 zWi4vNLYvAxnf~xZf8ZR6QZ0IXE-{}*`@4@m{nn@7`tRVkJ{H+eCQ2|*q49TQ7M9ZV zSku9H);-zsMo_M^Tas-A6TwVsDo(10dj=&-O3mZPkz*X9bA8u+)T8>8o(%RW*)BFx zM6M>M7F&P6o=}@Mv;V4!|GA@k;(TY#&LwGDfSCGUO}l6ICDR;)&j<&gDVo|g6f#mf zvhz^r;%Vi^IKhlF=$7QZhgN&*nL{Fa>}?n0 zuA?NJt~c9eF=w)k88vNX-#&f6AkDuu!G1kHzl9X?lh9(DWRB!wQ042Yx!=YqXdjQQ zz-S$_`S`p`1>fezChTahj|Gmn6vT|tN)Dz&Qlz#8bYD_7NE?}cb~SR0I+Kido9)6* zqVuc}T!+Q(nle*~jlam8PY&3x@uctfiXWJ6(VC8g|X^#sz%y!ix zBr%8InjgOo-Jj>kuS54|9rETW_Is*5=w=7|=@Ed|dbiY+cTFi|%b#P6-IMO8rfEMk z@kac|LfF?#&T5>S$UEJGAwW)yG$ePsx>xa>jcg*6>7HHTPDl;rJvY{u7qzOk|O6uUSAD*BM0_W!dD3;DF218;b4}P)lGUfJ+CN| zw6d4mT_NkIh%Flw8|W_a)yC8Zz!T1}a?Sez4-k4N#nH^rEl;c~jQRZBLnW!%8bLv{ zGh!X%#Tp-mF5S}x3ZTyyiMYD5_{wSXcs>)avX1v~$FD@Ir_6U76_3;}H9J2wU*B`c zo+O~U-&7nNc1h?YF;9sXD9%d7*lY-@4=_2Z610V2xd4e>)Zfv^ijs zO--NcUIW`!$vUJEu1mixL~q$QmGC6=pTyBx$FabNJJbP9Can|ga6`$6JOpgEQ9BCN zWHze`VNOk5T5`MLIcAI5a4H6Hfc**tw1-Yh^eVAio>tm&e5?sjKg6F`Vw@T7C~@Yxdh{!=K$p+4)i1GnA&)kd>bN z`=8h5rDL`v4b;l!Z^a)XsqN~RvTe6DLjpt$r$^t^MkW8@&Mm@_gp?`m99c(6)jvIp z@Ew_gxjDe)#r-yjAM6cZ{Gj*A?I}705a4d`cKL(k<)6nu{#i75YP{q`mVo}i z1w7CEOXTD|A@G4FT@?-Jdgaor907Ql9T3r7b5?JJR)IP)C(W~0=Qi!tq84gK3Pw=F z)aVowtIH~MU3BB^_DPR6!Cz0^mv-LxWBL4RDEXFn{za60)w23$UK!0&=UHqGN!>`u z9OFVaDn<+78n05Rq25wy{9?vFiIF|^X%h^)$DPN2u0b^ySqx?=!7FF?_KH!px- z96NOJ^a~$?`5Z0&W0(7%OT?L%4SP}=AH09+pZ@cR_}l)Rf$oW`Hmq&3+j7*O7_7si zodZ*mVJexe9wi(^s&|mS0BSrrurU~7mXUp1yr3z=2ODwhDJ?AQCP9#bhnUzqdVREP zht8+zB;^ks7AsP)6Bo{9 z$48LzN(V4W&UITb21JYe76ou+Wt) zA51V8(A&`{?qDas%DWrO8=VJ zl{F|55*v_wmQ%y3F0PXs*5A`%wdVGRoI<`@UsQ;n*xXo}T|?d<8OI~@eTR1>$%wZ7 z$T)79uV0~$x2f%Kf9kxX5terLi|;Tz=}xw{o6m&y#@;+$XE-L57ZB*nRTyyZN*Ydx ziRNa(d*e82+U!*!oATqBCat$>Y+7B6B>}R2@`2+L>p**6npch8Y<2A5I9A4o36(Ds zx*AGlcLiH_jAQf-fARJ{8_|E_?fneIe)fZYc49wGgFp3@ZfH}J15S^JQR1g^+{V{jMgnYP_L^9nKF22w$T;T6% z)sGIHMT{FJc9%hXtd0Rl7a;P(36DS9FP6ubotL@v2eD~?@8Tu$BHn_WbDZ|<3EH;5 zqy)(`_hHH-E3i$EwYQ(8sJ{^j`FW}R)_nMRsr9(|wnio;aqWQ?pg;3aoha#7mJKrD z1$d>pUEM@dW+HTIC9ly@LnJ0M)-U-I>F)KCJRHSAyF__PO6j;6bl1uVCc!F-Bf=_X zfrv|ACPD9zTL;`1X_J?oH#u^M%noFMXkY783R4uGU2{48T{mp_0V=tr(W#OD$tkt* zZCVOQqHnzZi7EYiyz(1%^WuG(zA#2C>W|e;_K22ze+3&8_ZS>*0Pr@-T@BcPpaX?J z_FL>e&e0{?L-4D7+_C>6_;I=&PO>`e_-4TBpUqPPZ^Zu)yenm<^hiAe3`+EA5)nMg<8~mKhEhHt!Ey2w#F(?4?aumyVZK zSto@~-iy%8UeFbHrcCxmPS1zC{Lxp;|HC&^HGUqYCz9e%PXFPXJttn?qJ%VFI$EH? z-SxD6FKYgHa9%X+k?6%7FY>ze19Di7o-jUV$F6IEPp!;*pnEm%UCnAVR!;;J5uE{@ zJ8Hi{#eZ18&Q9*5%}?G(&_r(Btz&0sFIS-}U9ckn8=VMdVi|;uw<-qQHl%WuVe7!Z zdIq0u?Vp4w&z_gren5ilQms8!e-2K47GKY97W}0`C!j5T=j?2|KIcb`wjIanqh7+_ z5cj!pIG3l_!TG8%Fb9BfbJoY}m|R&A7txiJ__`-cl^njoiJiK_K2{&{?LpAxxZ^+< zwz`Npr;~zj4coho8{>6kO!t~a;SvTMT~ir==#6AaD^y8BKc-95^u53Cm$oZ*K3p`l zJ7%snIaky=uX!6-FrS6|OOgJ0D*Rfce_HQA`pR2rhyiWIn3L3@Q!XhDrHVby)4YF9 z3I!x@bB$L2x*uOWu4vb)6l|QefZ-!9!cvXKqK)PpM}{8G*zBDcqJg7DAS4Oxtz?fj zaa=wC*r3FW+xAhC!inexMdq#G*vz%E(Fsnsiy?JX+7S$F4OG^cRV#%Y;hU81E7KDW zR@pa**l$giUxV!5O_X1QY|6%uQf5z@GIppJf=PlMJ5>p2uszshG*^MT_SE?j>y}r0Vw-_TO=+@G=D!5Z@3DpH6i54c9MGnsd_u8;o4z(K5!jAP zxSd+NqVbp!(s0`Kr$>ebihefS00iqbFRenui~vMQ5cV(2U2QXFvT?$Ojh8YLb-MG{ zA?F>@ct`E3yh~!7<92XAk0arBnN{5WRgY|!;5(xqV?w(zg*_9Fa#t&za>Pc`qFUS^ zjh2igBc1aTh&6tSGCT?XCv&*Q@z5c3bK|&;>&)EicvuhY{k^)~ETap_ZewWfI-pK~E*#)=bP6sez2~aznr-U6WCXRqJzco=sJbJ*>RD z#t?&eQu|NhZBt1HLxQrLg+bYOCgQoCcxU@Re9GzM^i5@TTM_tR{IBb3za^Z`K3Zw# PEh4u12L9qYRpS2xjYIo! diff --git a/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.png b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.png index 2fc665111db463e7255289ee01b6997ee52265a7..98abddbe4b7c3eb097957c46e62f33073f00a6f7 100644 GIT binary patch literal 17368 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Ξm?5}VdY40RIt0qZS- zB=#=HeWO{si;EG}B1y-)Qh+-Y+SLctZIKD-l${9}nj~6R>4f+>H%Qw3n7vaa^Aops z@0NYgAR2PwpKPEFNar;A$&Sd4w1wWwxd>17t?9Z8u+-1`GWElgTj}7JR_vcGHOsj| zx%U&>)AQMsLR$G|AzXkCV=Z!)rg8p`23v+S^rB+Vbd$cp{oS8TkvwE%PK?Q-2s@Ff z`k>(mjX@=9kwZOuLbo39o>kwzUGPVP73kQe1CcOK;xe(!4vBc(kJ&%fHy{H@0I~G)u~e}pqVDQ} z;(~?Pa=PC|0=DDqnd9kX_^5Z;} zRU`4t$W8b2ZoW0B@l}ttrHJ%&=~nu}mo!FjTq5b7bVxgI^q&Gf0eyaedHsQlN?^(v zrj1I@9QRw7tAL&#Kg(DhsR?HaA>p}nZZPFFacz9f#Gq=m5IS48OaMLt$pnmUSP1R_ zlhJ5WbTYp0ltyW&R_@pZX7aFMMpTq;m^Isx$tAjS>N2_0>L2vOQhP2mNH0dP=`BRf z#i6k+!ybvQHO^8(`QD%1?Tu7D-pR^RJWg7ET~NjU8I-t+FL-uy#-oqV2#z-8uNBdeOJjuAnoSBdUbq4+`J)c3c-wb98)#-=}&%v(ix*u``}3I?2)(L+ULr;-L!j! zOo%sZ`=uaoxc~d3%_NM$XP$IU2YQAGbWv!CMXPA1@rj35I$0Ed`8Ak>MgC@{e?MBU zJ5i$PX_q0CCTOG9z`F-+)?Oa_VdH2}RweLU9or^fNq!c3^G9G0L0OADGcVoUDxLr} zhmE-PU!;7xl9o=dVw$m?n+M z`-QZ}bj3T^&M;zb%S0duPK4G0eq8$?19_ukc2if0&$6=6*H?CkoHKI#v^xYBvo*t z?p=x+VA|L!TZpz=e~Pn}w-BvgIC|ao7sk|5lI1TZX#R7*;0Llll1fK5^EDOULF{77p5F6x32wKkw^WbpFwG_&(}_$HD^D zdUviM`qoV{Me0Jb)d?J*f4`6KQ2k1Aq$OUIwblSec5fb*sJad_BcVkO}gR3(H?Lv@2!pZh9Q_ibb=xbYgx%o}$x6y57ZeY-nlNXvR*6U(n36RC7(CaL)K%UFp|(x3g)z zNdpZ6cjV2;N20fdh|EYXUs3DiLFbrPs`&Bf&Nz!ye$y>W+>R3kmjuWMY9|9Ym{6r% zAl{r2cD=fN`}QUE(gSL0Y6{p(;KA*ayA{BLvimn~{okkF^6+9G-so%_U9huzZyson zO82};tp#R*Yd{rUb>HXvQZiT>(%P7iyMJ?ie{?DLovm5jea)~4W_bqB{0Z6wk`IZ< z8afJIzrvH0-6-eiCu%Ngu3CWDs-fN`s2cw{sVEJ*sC+?na$j@WkvMa%|5Tr zx|-TWcMP;6f`6?Th7F$Okb!n!3Ri!#>`njPHWq4wFX~uXhsr1fLm*t z@uCQ`uTkZ6zZ^mJs~25_2BWD(TP+@AwhpyelY+?`Boy2UdKZ$+?C|O@UiINXvmx8| z4;P0auJ>1@dbV3@RnSVrcOd=*!6tTW$@qNXZ8x4R86VOt{eB>Iy3TL3 zwyc_=_heKtIj6i1PWZ7{kV=0>Cv47(!GQ3PvM~Lph#TTSBjwKKe#f2Ab;HG4>2ATr z^t!WJe>|NQgy=EL-C=K-oXcB_EsK#tbOc9JfN$*DKJA< zW|kw0U9_@cUr+aTh^9QF3v?F`;x4nVjYW#%u2iwAo^kVl)FNTPj_HL;6L2B56(hbs zPvNB8Uvk-m1J8hEdd&;&kjV2dgXz8`d-9-G?>45I5LsG@fE0QLMTyE@!o1+B#>w{u zwNe-pYE1xdIVZBr`MtGY_Nd=PAgi8r9GHr=VmKyM_SX7mTR!W$Y&o-WfP9@C7lQlv4&3+8#Tl3e`<#aA+8 z#LU_=s&W(6Ke&o}aK6;tp<{Hyyx5{3rUlMa$OWWHs_^79tfBrx8H4=1o95A|>} z(x952UXeD3!jy4wfxc2B(j)f$cPU33y_KUF5BL!+c-HB@pVL5UPF6**;1O3-y-2js zu~{Vc z_3hsr5g(B$Fj7CL0KqpOCzu&&YCc^lYn?hrH_A90;VhCPM zC!X|A5B^nsv%G|HI0c&Fq9X1rvwN_mid;`dlb>nHjGD7|GTpG7`=U{3c0eRwiS5hI zYuWY!h>b!=W@p5a@2%uz^6;us&6`G`VKXz?knKV_vtf&Oi&Wem0wvrQ_(m@Yt4PyX zgt8OaFOsD5nW;^Ixo%7w$9{WqEXiK0lxrNjg9G71CBM|wQu>Qn6)6-iJP&W6bcJ^uwv_IzF~s? zkqJ$O6yo?v*lcLuNJsgt-2aGLURBOVm&Zg&S+nY_^8>NcI&=!gKPaf|Mv?1Ok=IA&+GDZG zz}`T6R#0Jbq*;TiT#w`H$M`gdeh&)7P?;I@O6OQIL~_K&q5mC#B5#if;|XH}-3M}t zUv(=6aa7>*H0$wD-$S09jo8+cknEvlLZf2zD=x-y(?&{eSD?65$<&<2ulwG?vFP#G z62=I3Cul{VZ|}5zu*6*fcqenD;TjOLkyKi!3Ip_husN<&E3FaZm#K*6!QeAWC*k^-jY;t%g^q{BOEF2%^c<201h-YN8^U^hRCzsJQNcpAK5jxp^vD zb&B`-NaL(S4x@!Ki2l}^X<6cpwYsq-MH0LidZ|ln9_lBvvD=QJ&+a^Ug9f(#KnRJ(TLvu z14ZOsvJ=^s>~bslwe5vn>|mhd`j22uTs-^cAJQlLq4aoVJjS>_?-LLJSUo*_@AmB< z;aU1q$&hKs7TNXP(F%(Ksdc7inGiGOmM;M(>Uv2(wYqoh1J0GAQKJ`uS?eoVyZfk37F`ITnwZS!uTR! zh|X87dXET+dTB_ScC-pDrtha;fTVM7!)}@uP5MdF*LQ@;Z6D>~>%cBhSYP_fuhXb^ zVx1X-5sWzNx68oy)m0znnxh}oXLo{(L8HoYvujEBdo_k8h}a(V644H^LMdIil2jo) z0KO%@o=Np>ol8Y5;>V}GbMlaR@Cjt4WD3-$#OOfHC;9@y5f`?m;+Sv*nsB@B&(D*~ zz#Q-jAOmk2xBT^1RUxjhjl0UtsL zRimK>I*Xaogau@(Xqyj{-XfQ<$NXX4`Fe{G5zwStrO=|qqIaQ{pp~Lqd(58(W_MXC zU43puU(f)J-=}rNOe&IG0?~m=p3(>+8B+FtdKXT|i0_|KXP>1!`KiZtb<|2gfw;a* z4|e_j;9cAJW%@$3AWo4N#c5J4Mch_Fj-;OMe?!^163t9SjudOnsNqJFIy6U9kM`GS z{ZVFC{;NjF1yKGvvsY0I2rq=jDKBK;MZPcAGs!D*wz(*TKeQ<<0){yqlGsPB^GS5B zCD{_qo#hX=3K0|e%4Xa@3D5U=eHgwAld(Iofe5Y%DEgG4*HBYJ}aKIv)hr! zMWTx|XHK*Ad+OoLxG*7{&Bzg+VRFy()<7@TbCb4(cX-O^50U}l$y2-*(`om}BCB^g zGD7!FJ=#s`Q@c`YA}}#%emd@mvxt+ZY!o)$9SDIZaTUhxlZG9k)MZsa4O7P z(WdR=z*Fn#-@=@FxTV*j7kTOX5A=cb*7kiQm0TCY@@|#WW|-W%s@pY&q1990XtB29 z6`k$rL1k9C2A>2>Z&el8^LE)kk7xhdA3^5ZxZnGK*R}se$@~9ss^A^=(TVGyFuwMHTjO92S(Jr7H4aQs<~Jm~&M9gQ#v4|2uuj3{rx43;EY`a2^PS z!0ktc+0-?N8+1Xm8lloaByuMQfOo)Q;ENwGYmBGeb0Y<1fbCCU!vS*~n(f1k|MH-K zOS%cB8i&R@8bS(#NqwH*|4bVaJRiE+!3cb+gWvAp8t=0gCqS-3T8Ac;MetB1@0#r( zysB^Z>JfH2kYDib{g+-ao7tY4Kq-wc3GEymNJiRG5=zH5hLVj#uACJesiKd{t~-n` zaB{rvH5e@_vxh+^dKjusl=M+H7hP|luF*3?pzL1dw+Two7SUn`&DB|j;#(q3)JQm9 zJmnQ{`=~NJN47jAIE`G_Z{Q00fZ}W3KqBR6oj6S*1cs4FC>v7t=Cc$FDgtY2po)yl ztFr93Nts@VxR+DRQySYccl3q)l?YtracA6KY-&)2V04(t3*T5J1dD(B&V6K;Mr{wMBHx4Yk|+kw%xAtyXu|3JXfo2ptz_N z?WFhk=F;d&foR6Uvut^DP)=a|d&I4JsugaJZBZzYGk?Q7VQo1W!k@%PeHwd64c3z3{RTXw z*W||p3FzDV4QjZ`78#Qaz-{*Om}-jEPV-~^o0Ms>j?wNT&=ke>hty;(9ewYH!610b znSOIzsiyp(01-+1vb3%@r08+dCzITy>fh(hN>go|(ulZ|&0 zSV?B8ProJEZB*zSp}a`tYL6!uR3AE}@$DVGgrKd8dQaeg(-6eWBp+kXXav9P^KgDv zd2vg@{2fn(Ku`#J3eAd_?&01oBB2@svmc)LRrWfU>sKAZHlu47BEH$1quZrNuGjr3 zG-GyW{O$7{5=ayLeJS(YlmA&S|9|8(!`z&PTxW3K({e`H)f`Ky#S zTpp8ZQcBo2;?@5y2jQ++ot685I!Y2D4Q^T-<%SOBach;wGDKwI69#PK#Mlyq z0%0J+Mrvc~2%U!3!%qk)<87#f9-g=VST@J#`RLg1bc9#T`46gD^$Rz zs=kLGdgZPlXMAusPboQp02wz?$_oV3y9T1~xUimTOwLpvhi>gG_-$qt&?I2AW<1!A zIHhQ-qf)X+xZH@%%kp5Xs;G^ml~|!(m^S-5a5YC5mh6U&LV#HzRJI&ZFymnHnYT@U zpp2Rme-96U=|U?}mB_8#>+*}&s8i%VW{0x*jotg`FxmT{tQ}@YadRN!j`7jWC>R!K(a3(&vOvGZq9szxj7KPA4`-MKe zE#-BU#m7VGl9o-%1+cBX>u0$9UF`Gh<(%(uo6lgu(At?4VBc6?=(wthbM9oe-gq^ z=;7X8fRvxQ=H53F1k-==)oVk2D)INA!OhNL4kTo7(u#R#@N!z=lFRl*_B;CJuMWNs zAm%&QcTAaf-K4u!qsS^wp=ne^ZjER0fj{VIB4mVK+%*nZ5-`Kvs|DIG*8EMt3e@-z zmI=QK>xH{9g>Ma%f~A;dJ7PPH%YH=_2_IhRi1fOrR@T*oDwLuAZSASt$N*{Yzlt>e zANcM+xu86=zLr0~DMI_Il?8&GMQcI{vCS>HlsZW^1TL^O*jh}t!!z#vNx*mdn!+4g zy+}MoHo=&d#Z{H2_m%DsOJrBj<8vDJM(1(0b4(Ev=lJ~VKlqb?Ebx-a(+xDJjy(E9VU6lJCk z_K{SAYV;lIDmhd;t>loz*9&|o1X}@Ssj;3U@x~N=+)VMEmw8p^__tcDrF|xNRjWQx z(BkliP2ZnX24utE4igcT-o1zFtzG(G(WCNAkhBc$WAzV`?<4u86Z$0TPhdBFfzq(g z;3JQi6Nt2uZu7}DqpK{)v!S?c3v8N5f%?obwgr2h9#JP7UB&GV-#8ESG;)vAqax&c zb3mzDfO`+t#m=s_ec?If$d)3mO_7j(HrEXSRT2@O_B4?BA$(X78io9h(5J-c&`hI) zd!PBpG?g=nM5T9}njXze&#^Ix>Ip2|>66%EM(quwz{vDDtp*J&35V(kB zRWmUVVbHj6FS-&hri-eSC=9ZF%h8tM7gBKbFq%3|KcpXN-a+@hV|1$Tx3H-s7g-S= z;fPnZ2str)d)dJPwhlojY?X>$&xVylD+Ytt5)PuH1=0ZT?rMF+sumi|)plIOvs``+ zG~g$`glE>pbRvZWRc&I&mA6R z*E#+yphl1fwaJ%kaC>`xm!zv!>g>=QOZDh~u6MT2qvl<1&ID9fDn)6ek9Q=ex^lQI zR(BYiBxX*odqivDa%Y=6;tX z(*B+LrL7D;nUEe4Gglr_@wv66ml*754oP^+bJA;dL41Ff^0ZjrWTeCP%@BYgxV>_k zVR+`vL2bSe%qjdO>%cPSk7+R86Wz%Y*qoSiyJTYgGoGHx0c1dn_X%zC^#{7L2U zt&H7AWvR|>eR2D|Tc`0DUq(sk`@5crA*pkm-dM)fn;#huBB4X~P2TdpNU!=cBbC>J zDa$jp5JJhIL(<0ix%%vQ)v9A)xk_?=fqMJFtyxZ(%p7*~%UsG#gySrqcWO?|2I7!x zb1Z*M7~wDI(~^np<6bw`u8{UVrSTd~<}fWA1tfK+O|_8SMaoSd=;-#n=5032#Z)$p zC*W`?nFIz)XwJwAvvs^=PK&gCxaeJ4Y0|d$QfK>R#YH`A+UylQKV_uSS#Red=+`PR zNX?ngZBPs`3d*`d9GdADLb2(Pa)(W+Dbwy2I%c@nN4knk*o8ZQJFRjJac_Lp@0Zo+ z+|Sg)SR0BrRjew86IIShvlVdHxUK3{1pXsGjM)^l(-Q3h83GB$f4c^mdM>#>ukMJJ zj>05a2hTbbCdKx`MdI|CYhR}KnwF+;Z2EY2W48y%NRHmkd#34jh_E`IXntj86EeN8$M(jdA=Bm9CJi0f8Z(t{W7VuQ<<*@>kB?OBRscS% zj?}wHHaowV-b|5FIy5$)pi^c8Y-sdwpLPzF%qGZ8oqHcfAjmzlQZ#zFl)L9p-0W5L zU(wC$3Wp>!nlY`M``A9&>fpohyy5LgFKnYYr%fEp)fN z<}vMO6WTL^P1z<))k``o@q$bIjL-6;8BzFN9+G_6K4L!@S`8+!&y+%ax_OSVyHoya z`3_^6t;XnvrQ%F++H4W#@aoDr{`Z#l9g7Ay+%DWuOJ6Q!f4u_eI3y4nSZdhJzti5qwc>Fqtv5=FQ09U~#c*Q}!v`S;zfNGCK{*sl)IZr0^VHgze0} zIo7=oXN^;cZYG$?Pez=LbOQsqfADU#M2+Ypi~6`bn=N9|Wz^V+fn3r!`AstKK|_F^ zw?E@Cr1PosmZjrZRi5hS{);HwUbYm_415QyfNJ1dtWqbX;c`TGju2_S&qvh!On*3G z6)d_gr+c2w+HGPZmD1@tmqxwuL{DANLg$MvaxCaqNdi*iY@<&j-B)Ctm6RIlw0lvU z-JWw1nktD$v?-dGcKHZ(GP$jw-TPi$MN}3cblHe&|7}Wf`y#NHf}^E#^VJDQH+bz< zv`j8md6QqyJ&0C@2S{x-Qi(<_IRQR z5_I|nrpNlTfGvPYW-&YH`fG<=Hr}==M+fH%7DVD8S-A~0+)nynntOjHut}LpB2|!7 zogRr*e(oKKtL#(6qqfSb=BI&es6A8?8V^D7PCNST8R_MH)C;MHq`l&|IrYl`A^=$Z zJwp^&;xT9I>`LINwfgR*T+UMJDv~qN$FnTyMnzZhY3MLb=zK)^!-s(E3w4OdaCfY5~Fu+ z&%a7M6xBV)=Z$?o%3fPtkLOw8w8NB{-h*5-NEG$!$&GaGw11X$vC*j@riTWuD{r6# z&wpjXbJ0Sj1zuw2ctKPe1kS{fpIB!0uz^~SMDJ|u*IwxKAl(VfU%`GrrH}^~ReHJ} zG1exZCVp_d1k#uH{gneaLuRKE(18(kT@V-hId=a)0_cD2^$-4MO*a3nL~1Bp-c+Ey z{x^|+-{?xg|7S$nfBz#yy-2bRxtDz~VrZ2n> zsj&rk;g~T`{>?}p*X@64=<&WOiu)IAW*T7w!E}l3+ryf^3o{!{g&ggF1*Ce)olOq?Fd&`0=Hz#8cb+UP3slJQ>3!JxFUvtU zjB2x?Srw~Hk82}-z#;Ya)~uiJEjp@5cS+6uZw(`?r#HyY)Z1$U@7^S{9Q^9(o%fc| zDdarjG(@(7Aorl*Z2PUd@adtQ^{_=vu;+RrFJkHE81J3*@Wt2vn_@~?NmM#E$JWY6 zi=g+-o$A~GOADusi*2A_5{N{F5hiacXa0GL=lsv>n;$mI0StK>Ou3kjEroSU(W!)1 zL`WkHG=4Q5l9Up3qOnXv@40AKYlecXXsQI>kF_A;3{yc2L5iOv9^CcgwZjT}d7mL@ zxwg3r%yeu^NnJ}c3N*p4M=#mf7d{2$GVq+qAl|Jgr#X{f95L5$& z;M80Mof;CO>^H6!DB;~^qQj?8d5LIvMxy3Wy53O_QgU|Nbiga6@Si8p&M~|fVs4#olOTc`W$ z0r7TaCQliRPd8(Z4hJ-*PRe?faVO$XN@&2_B^KH}0} zj>imT2k(&lcf12}NKy=`D@K5Z&}d#urq)`2O{wln7CMZZSE63e-V zql23kW8SxyR8H7#jcpww92Ix*hF%>L=2Oi^J6eW1RT7jJQ8+zN)sa>uwbt1FHXvoS zw8vMAVWA@Wu}<)vepwfmQ7dpKcJ7{%zpX=H{VMh9xZXESuuj95FNCBR>7%lctO`{A z$-DpVo5Wm^|L^ZK`aco$uaV-+k{{_{!Yu!$7DU}pM#?zLsZC3>oV6uA-0s_|C(c=D=TzoOgpkI+ORX-^)~V zUoih>MHShNgbBrBtm^{`IR&R0ae9e9-0jxBf-)aPjbAP`U1BW0=+&hwpevLMf~ ze&XwS+|CAR_x@^tg%29_Fjb8{5Pig;llqvD=G|WmC{XUKL}M)>!RmUjtufxi98+kV z$b7!ZJDwSuD6zh0kxETt3OidCkm0TVq##d?nLB`P4zHHz&s^Qor5&dIPIVjYIMeS& zN+j<^D_;QH>sXKpm@_4&nfui5qYH2dq`*XVWznr&<}xFqK6^%#*R>XH*%h&TJ}jAVVLCCp*-F4b21YCoEub|5Sm_lVm!SQ~ikVL}=Ve}Vt9Wnm5o1d?aXQTH1p zLjJavHt*#v#~v?M9r?h+v$&UaHq$Ks)2nK&9ci8Q`_)V(Zu-G9?>)(Fz&ZMVN&Eq~xZ{A-cEpy6d5B%} zaKD6%rLH@KVUbn0qzlaret*5W?}hRutrHF6RPoi%`7aQ6t}j{oaQ-%Q=_ik9jkEsw zx;&CxL!8G6IF}`EhTg?oY&pljMlAxU+=^X4u2BiVl|MgEsCkU-yl+ZhaB9gN&Vywh zB^H;wpM2n_5Y+$rOC$R5PS+TeftT;oaF&~KfiPlfEg^*a*-BqD_2tNH#^2L}2wM*~ z^Wn9nErbCSf51`OUR`QrB0sCu-$Uk8STd#i<>;p3C*3e;wCu=ZzW=>748np`l_NbW zd~Vd;dsO-UeX{P}sr3!uHg~iRAt`>~XIwG(f)3n?#Cg#C-OFSpA(>BkYuCs5t7^fu(RqzR*hG$r-R;cFWvsuS&Zy+A z=-+?1ulNe*Ft%p5bSl~)XE?$dB1g_fukI4WP0AMq<$fuS(1)jL6waPtdwg8AJhi;7 zun)1Rz6#H^qvJGbdG@dnjX=n}%%2sR_BQpq%#Tu{Yz`PH92OBs83yuDLubRfE5r%nx|onC|WlMG;3=kztgIO63keY~Q8G|w!{(AFRi>rWzW zcDHW}?5LfOc1i^8K3{HG(hQqp2;$#7KMc4qyGAjeaQtK}=k}G?wO@m3sM5GI9TnH< z-Q{!5BI_ir6NPFBfJ5)>{r>)g9qJt)AaPqaR!_U*0rQM)gRxH5(3rSU!prMk05U;E@y&{xaXioTi727vEFL$D`Y?W&LC GuKf=)J64VW diff --git a/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.svg b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.svg new file mode 100644 index 00000000..4428218a --- /dev/null +++ b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.svg @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + White : mode unknown or unnamed + + + + + + + + + Yellow : running in a trap + Orange : servicing an IRQ + Dark yellow : waiting for CPU + Dark purple : zombie + Dark green : waiting for fork + Magenta : process has exited + Pale blue : running in a system call + Green : running in user mode + Dark red : waiting for I/O + + Pink : running a softirq handler + + diff --git a/ltt/branches/poly/lttv/lttv/state.c b/ltt/branches/poly/lttv/lttv/state.c index 18d21fde..18518e87 100644 --- a/ltt/branches/poly/lttv/lttv/state.c +++ b/ltt/branches/poly/lttv/lttv/state.c @@ -48,6 +48,8 @@ GQuark LTT_EVENT_TRAP_EXIT, LTT_EVENT_IRQ_ENTRY, LTT_EVENT_IRQ_EXIT, + LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_EVENT_SOFT_IRQ_EXIT, LTT_EVENT_SCHEDCHANGE, LTT_EVENT_FORK, LTT_EVENT_EXIT, @@ -60,6 +62,7 @@ GQuark LTT_FIELD_SYSCALL_ID, LTT_FIELD_TRAP_ID, LTT_FIELD_IRQ_ID, + LTT_FIELD_SOFT_IRQ_ID, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, @@ -73,7 +76,8 @@ LttvExecutionMode LTTV_STATE_USER_MODE, LTTV_STATE_SYSCALL, LTTV_STATE_TRAP, - LTTV_STATE_IRQ; + LTTV_STATE_IRQ, + LTTV_STATE_SOFT_IRQ; LttvExecutionSubmode LTTV_STATE_SUBMODE_UNKNOWN, @@ -728,6 +732,7 @@ typedef struct _LttvNameTables { GQuark *syscall_names; GQuark *trap_names; GQuark *irq_names; + GQuark *soft_irq_names; } LttvNameTables; @@ -846,6 +851,20 @@ create_name_tables(LttvTraceState *tcs) name_tables->irq_names[i] = g_quark_from_string(fe_name->str); } + /* + name_tables->soft_irq_names = g_new(GQuark, nb); + for(i = 0 ; i < nb ; i++) { + name_tables->soft_irq_names[i] = g_quark_from_string(ltt_enum_string_get(t, i)); + } + */ + + name_tables->soft_irq_names = g_new(GQuark, 256); + for(i = 0 ; i < 256 ; i++) { + g_string_printf(fe_name, "softirq %d", i); + name_tables->soft_irq_names[i] = g_quark_from_string(fe_name->str); + } + + g_string_free(fe_name, TRUE); } @@ -865,6 +884,7 @@ get_name_tables(LttvTraceState *tcs) tcs->syscall_names = name_tables->syscall_names; tcs->trap_names = name_tables->trap_names; tcs->irq_names = name_tables->irq_names; + tcs->soft_irq_names = name_tables->soft_irq_names; } @@ -884,6 +904,7 @@ free_name_tables(LttvTraceState *tcs) g_free(name_tables->syscall_names); g_free(name_tables->trap_names); g_free(name_tables->irq_names); + g_free(name_tables->soft_irq_names); g_free(name_tables); } @@ -1177,6 +1198,37 @@ static gboolean irq_exit(void *hook_data, void *call_data) return FALSE; } +static gboolean soft_irq_entry(void *hook_data, void *call_data) +{ + LttvTracefileState *s = (LttvTracefileState *)call_data; + LttEvent *e = ltt_tracefile_get_event(s->parent.tf); + guint8 fac_id = ltt_event_facility_id(e); + guint8 ev_id = ltt_event_eventtype_id(e); + LttvTraceHookByFacility *thf = (LttvTraceHookByFacility *)hook_data; + // g_assert(lttv_trace_hook_get_first((LttvTraceHook *)hook_data)->f1 != NULL); + g_assert(thf->f1 != NULL); + // g_assert(thf == lttv_trace_hook_get_first((LttvTraceHook *)hook_data)); + LttField *f = thf->f1; + + LttvExecutionSubmode submode; + + submode = ((LttvTraceState *)(s->parent.t_context))->soft_irq_names[ + ltt_event_get_unsigned(e, f)]; + + /* Do something with the info about being in user or system mode when int? */ + push_state(s, LTTV_STATE_SOFT_IRQ, submode); + return FALSE; +} + + +static gboolean soft_irq_exit(void *hook_data, void *call_data) +{ + LttvTracefileState *s = (LttvTracefileState *)call_data; + + pop_state(s, LTTV_STATE_SOFT_IRQ); + return FALSE; +} + static gboolean schedchange(void *hook_data, void *call_data) { @@ -1431,8 +1483,8 @@ void lttv_state_add_event_hooks(LttvTracesetState *self) /* Find the eventtype id for the following events and register the associated by id hooks. */ - hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 11); - hooks = g_array_set_size(hooks, 11); + hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 13); + hooks = g_array_set_size(hooks, 13); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_SYSCALL_ENTRY, @@ -1470,34 +1522,46 @@ void lttv_state_add_event_hooks(LttvTracesetState *self) irq_exit, NULL, &g_array_index(hooks, LttvTraceHook, 5)); g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_FIELD_SOFT_IRQ_ID, 0, 0, + soft_irq_entry, NULL, &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT, + 0, 0, 0, + soft_irq_exit, NULL, &g_array_index(hooks, LttvTraceHook, 7)); + g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_SCHEDCHANGE, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, - schedchange, NULL, &g_array_index(hooks, LttvTraceHook, 6)); + schedchange, NULL, &g_array_index(hooks, LttvTraceHook, 8)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FORK, LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID, 0, - process_fork, NULL, &g_array_index(hooks, LttvTraceHook, 7)); + process_fork, NULL, &g_array_index(hooks, LttvTraceHook, 9)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_EXIT, LTT_FIELD_PID, 0, 0, - process_exit, NULL, &g_array_index(hooks, LttvTraceHook, 8)); + process_exit, NULL, &g_array_index(hooks, LttvTraceHook, 10)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FREE, LTT_FIELD_PID, 0, 0, - process_free, NULL, &g_array_index(hooks, LttvTraceHook, 9)); + process_free, NULL, &g_array_index(hooks, LttvTraceHook, 11)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_FS, LTT_EVENT_EXEC, LTT_FIELD_FILENAME, 0, 0, - process_exec, NULL, &g_array_index(hooks, LttvTraceHook, 10)); + process_exec, NULL, &g_array_index(hooks, LttvTraceHook, 12)); g_assert(!ret); @@ -2130,6 +2194,7 @@ static void module_init() LTTV_STATE_SYSCALL = g_quark_from_string("system call"); LTTV_STATE_TRAP = g_quark_from_string("trap"); LTTV_STATE_IRQ = g_quark_from_string("irq"); + LTTV_STATE_SOFT_IRQ = g_quark_from_string("softirq"); LTTV_STATE_SUBMODE_UNKNOWN = g_quark_from_string("unknown submode"); LTTV_STATE_SUBMODE_NONE = g_quark_from_string("(no submode)"); LTTV_STATE_WAIT_CPU = g_quark_from_string("wait for cpu"); @@ -2164,6 +2229,8 @@ static void module_init() LTT_EVENT_TRAP_EXIT = g_quark_from_string("trap_exit"); LTT_EVENT_IRQ_ENTRY = g_quark_from_string("irq_entry"); LTT_EVENT_IRQ_EXIT = g_quark_from_string("irq_exit"); + LTT_EVENT_SOFT_IRQ_ENTRY = g_quark_from_string("soft_irq_entry"); + LTT_EVENT_SOFT_IRQ_EXIT = g_quark_from_string("soft_irq_exit"); LTT_EVENT_SCHEDCHANGE = g_quark_from_string("schedchange"); LTT_EVENT_FORK = g_quark_from_string("fork"); LTT_EVENT_EXIT = g_quark_from_string("exit"); @@ -2174,6 +2241,7 @@ static void module_init() LTT_FIELD_SYSCALL_ID = g_quark_from_string("syscall_id"); LTT_FIELD_TRAP_ID = g_quark_from_string("trap_id"); LTT_FIELD_IRQ_ID = g_quark_from_string("irq_id"); + LTT_FIELD_SOFT_IRQ_ID = g_quark_from_string("softirq_id"); LTT_FIELD_OUT = g_quark_from_string("out"); LTT_FIELD_IN = g_quark_from_string("in"); LTT_FIELD_OUT_STATE = g_quark_from_string("out_state"); diff --git a/ltt/branches/poly/lttv/lttv/state.h b/ltt/branches/poly/lttv/lttv/state.h index de8d36b8..bf6ad531 100644 --- a/ltt/branches/poly/lttv/lttv/state.h +++ b/ltt/branches/poly/lttv/lttv/state.h @@ -70,6 +70,8 @@ extern GQuark LTT_EVENT_TRAP_EXIT, LTT_EVENT_IRQ_ENTRY, LTT_EVENT_IRQ_EXIT, + LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_EVENT_SOFT_IRQ_EXIT, LTT_EVENT_SCHEDCHANGE, LTT_EVENT_FORK, LTT_EVENT_EXIT, @@ -82,6 +84,7 @@ extern GQuark LTT_FIELD_SYSCALL_ID, LTT_FIELD_TRAP_ID, LTT_FIELD_IRQ_ID, + LTT_FIELD_SOFT_IRQ_ID, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, @@ -90,8 +93,6 @@ extern GQuark LTT_FIELD_PID, LTT_FIELD_NAME; -extern GQuark LTT_EVENT_SYSCALL_ENTRY; - typedef struct _LttvTracesetState LttvTracesetState; typedef struct _LttvTracesetStateClass LttvTracesetStateClass; @@ -141,6 +142,7 @@ extern LttvExecutionMode LTTV_STATE_SYSCALL, LTTV_STATE_TRAP, LTTV_STATE_IRQ, + LTTV_STATE_SOFT_IRQ, LTTV_STATE_MODE_UNKNOWN; @@ -255,6 +257,7 @@ struct _LttvTraceState { GQuark *syscall_names; GQuark *trap_names; GQuark *irq_names; + GQuark *soft_irq_names; LttTime *max_time_state_recomputed_in_seek; /* Array of per cpu running process */ diff --git a/ltt/branches/poly/lttv/lttv/stats.c b/ltt/branches/poly/lttv/lttv/stats.c index 23a9cca8..143c14e2 100644 --- a/ltt/branches/poly/lttv/lttv/stats.c +++ b/ltt/branches/poly/lttv/lttv/stats.c @@ -530,7 +530,6 @@ gboolean before_irq_entry(void *hook_data, void *call_data) return FALSE; } - gboolean after_irq_entry(void *hook_data, void *call_data) { update_event_tree((LttvTracefileStats *)call_data); @@ -552,6 +551,33 @@ gboolean after_irq_exit(void *hook_data, void *call_data) } +gboolean before_soft_irq_entry(void *hook_data, void *call_data) +{ + mode_change((LttvTracefileStats *)call_data); + return FALSE; +} + +gboolean after_soft_irq_entry(void *hook_data, void *call_data) +{ + update_event_tree((LttvTracefileStats *)call_data); + return FALSE; +} + + +gboolean before_soft_irq_exit(void *hook_data, void *call_data) +{ + mode_end((LttvTracefileStats *)call_data); + return FALSE; +} + + +gboolean after_soft_irq_exit(void *hook_data, void *call_data) +{ + update_event_tree((LttvTracefileStats *)call_data); + return FALSE; +} + + gboolean before_schedchange(void *hook_data, void *call_data) { LttvTracefileStats *tfcs = (LttvTracefileStats *)call_data; @@ -804,8 +830,8 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) /* Find the eventtype id for the following events and register the associated by id hooks. */ - hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 7); - g_array_set_size(hooks, 7); + hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 9); + g_array_set_size(hooks, 9); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_SYSCALL_ENTRY, @@ -849,17 +875,31 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) &g_array_index(hooks, LttvTraceHook, 5)); g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_FIELD_SOFT_IRQ_ID, 0, 0, + before_soft_irq_entry, NULL, + &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT, + 0, 0, 0, + before_soft_irq_exit, NULL, + &g_array_index(hooks, LttvTraceHook, 7)); + g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_SCHEDCHANGE, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, before_schedchange, NULL, - &g_array_index(hooks, LttvTraceHook, 6)); + &g_array_index(hooks, LttvTraceHook, 8)); g_assert(!ret); before_hooks = hooks; - hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 9); - g_array_set_size(hooks, 9); + hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 11); + g_array_set_size(hooks, 11); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_SYSCALL_ENTRY, @@ -903,26 +943,39 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) &g_array_index(hooks, LttvTraceHook, 5)); g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_FIELD_SOFT_IRQ_ID, 0, 0, + after_irq_entry, NULL, + &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT, + 0, 0, 0, + after_soft_irq_exit, NULL, + &g_array_index(hooks, LttvTraceHook, 7)); + g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FORK, LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID, 0, process_fork, NULL, - &g_array_index(hooks, LttvTraceHook, 6)); + &g_array_index(hooks, LttvTraceHook, 8)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_EXIT, LTT_FIELD_PID, 0, 0, process_exit, NULL, - &g_array_index(hooks, LttvTraceHook, 7)); + &g_array_index(hooks, LttvTraceHook, 9)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FREE, LTT_FIELD_PID, 0, 0, process_free, NULL, - &g_array_index(hooks, LttvTraceHook, 8)); + &g_array_index(hooks, LttvTraceHook, 10)); g_assert(!ret); diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c index b461e8a4..4fade313 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c @@ -72,7 +72,8 @@ GdkColor drawing_colors[NUM_COLORS] = { 0, 0x0000, 0xFF00, 0x0000 }, /* COL_RUN_USER_MODE : green */ { 0, 0x0100, 0x9E00, 0xFFFF }, /* COL_RUN_SYSCALL : pale blue */ { 0, 0xFF00, 0xFF00, 0x0100 }, /* COL_RUN_TRAP : yellow */ - { 0, 0xFFFF, 0x5E00, 0x0000 }, /* COL_RUN_IRQ : red */ + { 0, 0xFFFF, 0x5E00, 0x0000 }, /* COL_RUN_IRQ : orange */ + { 0, 0xFFFF, 0x9400, 0x9600 }, /* COL_RUN_SOFT_IRQ : pink */ { 0, 0x6600, 0x0000, 0x0000 }, /* COL_WAIT : dark red */ { 0, 0x7700, 0x7700, 0x0000 }, /* COL_WAIT_CPU : dark yellow */ { 0, 0x6400, 0x0000, 0x5D00 }, /* COL_ZOMBIE : dark purple */ @@ -219,7 +220,7 @@ void drawing_data_request(Drawing_t *drawing, associated by id hooks. */ hooks = g_array_new(FALSE, FALSE, sizeof(LttvTraceHook)); - hooks = g_array_set_size(hooks, 13); + hooks = g_array_set_size(hooks, 15); /* before hooks */ @@ -271,12 +272,29 @@ void drawing_data_request(Drawing_t *drawing, &g_array_index(hooks, LttvTraceHook, 5)); g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_FIELD_SOFT_IRQ_ID, 0, 0, + before_execmode_hook, + events_request, + &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT, + 0, 0, 0, + before_execmode_hook, + events_request, + &g_array_index(hooks, LttvTraceHook, 7)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_SCHEDCHANGE, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, before_schedchange_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 6)); + &g_array_index(hooks, LttvTraceHook, 8)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -284,7 +302,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_PID, 0, 0, before_process_exit_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 7)); + &g_array_index(hooks, LttvTraceHook, 9)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -292,7 +310,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_PID, 0, 0, before_process_release_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 8)); + &g_array_index(hooks, LttvTraceHook, 10)); g_assert(!ret); @@ -350,7 +368,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, after_schedchange_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 9)); + &g_array_index(hooks, LttvTraceHook, 11)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -358,7 +376,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID, 0, after_process_fork_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 10)); + &g_array_index(hooks, LttvTraceHook, 12)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -366,7 +384,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_PID, 0, 0, after_process_exit_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 11)); + &g_array_index(hooks, LttvTraceHook, 13)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -374,7 +392,7 @@ void drawing_data_request(Drawing_t *drawing, 0, 0, 0, after_fs_exec_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 12)); + &g_array_index(hooks, LttvTraceHook, 14)); g_assert(!ret); @@ -391,7 +409,7 @@ void drawing_data_request(Drawing_t *drawing, /* Add these hooks to each event_by_id hooks list */ /* add before */ - for(k = 0 ; k < 9 ; k++) { + for(k = 0 ; k < 11 ; k++) { hook = &g_array_index(hooks, LttvTraceHook, k); for(l=0;lfac_list->len;l++) { thf = g_array_index(hook->fac_list, LttvTraceHookByFacility*, l); @@ -403,7 +421,7 @@ void drawing_data_request(Drawing_t *drawing, } /* add after */ - for(k = 9 ; k < 13 ; k++) { + for(k = 11 ; k < 15 ; k++) { hook = &g_array_index(hooks, LttvTraceHook, k); for(l=0;lfac_list->len;l++) { thf = g_array_index(hook->fac_list, LttvTraceHookByFacility*, l); diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h index 9f2b9360..58f562a2 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h @@ -39,7 +39,8 @@ typedef enum _draw_color { COL_RUN_USER_MODE,/* green */ COL_RUN_SYSCALL, /* pale blue */ COL_RUN_TRAP, /* yellow */ - COL_RUN_IRQ, /* red */ + COL_RUN_IRQ, /* orange */ + COL_RUN_SOFT_IRQ, /* red */ COL_WAIT, /* dark red */ COL_WAIT_CPU, /* dark yellow */ COL_ZOMBIE, /* dark purple */ diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c index c2b16dfa..22015eaf 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c @@ -279,6 +279,8 @@ static inline PropertiesLine prepare_s_e_line(LttvProcessState *process) prop_line.color = drawing_colors[COL_RUN_TRAP]; else if(process->state->t == LTTV_STATE_IRQ) prop_line.color = drawing_colors[COL_RUN_IRQ]; + else if(process->state->t == LTTV_STATE_SOFT_IRQ) + prop_line.color = drawing_colors[COL_RUN_SOFT_IRQ]; else if(process->state->t == LTTV_STATE_MODE_UNKNOWN) prop_line.color = drawing_colors[COL_MODE_UNKNOWN]; else diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/lttv-color-list.png b/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/lttv-color-list.png index 2fc665111db463e7255289ee01b6997ee52265a7..98abddbe4b7c3eb097957c46e62f33073f00a6f7 100644 GIT binary patch literal 17368 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Ξm?5}VdY40RIt0qZS- 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 GuKf=)J64VW -- 2.34.1