By default, Bugzilla does not search the list of RESOLVED bugs.
You can force it to do so by putting the upper-case word ALL in front of your search query, e.g.: ALL tdelibs
We recommend searching for bugs this way, as you may discover that your bug has already been resolved and fixed in a later release. View | Details | Raw Unified | Return to bug 881
Collapse All | Expand All

(-)tdeaddons/doc/kate-plugins/index.docbook (-17 / +24 lines)
Lines 1-16 Link Here
1
<?xml version="1.0" ?>
1
<?xml version="1.0" ?>
2
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN"
2
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
3
"dtd/kdex.dtd" [
3
  <!ENTITY kappname "&kate;">
4
 <!ENTITY kappname "&kate;">
4
  <!ENTITY doc-filetemplates SYSTEM "filetemplates.docbook">
5
 <!ENTITY doc-filetemplates SYSTEM "filetemplates.docbook">
5
  <!ENTITY doc-htmltools SYSTEM "htmltools.docbook">
6
 <!ENTITY doc-htmltools SYSTEM "htmltools.docbook">
6
  <!ENTITY doc-insertcommand SYSTEM "insertcommand.docbook">
7
 <!ENTITY doc-insertcommand SYSTEM "insertcommand.docbook">
7
  <!ENTITY doc-openheader SYSTEM "openheader.docbook">
8
 <!ENTITY doc-openheader SYSTEM "openheader.docbook">
8
  <!ENTITY doc-projectmanager SYSTEM "projectmanager.docbook">
9
 <!ENTITY doc-projectmanager SYSTEM "projectmanager.docbook">
9
  <!ENTITY doc-textfilter SYSTEM "textfilter.docbook">
10
 <!ENTITY doc-textfilter SYSTEM "textfilter.docbook">
10
  <!ENTITY doc-xmltools SYSTEM "xmltools.docbook">
11
 <!ENTITY doc-xmltools SYSTEM "xmltools.docbook">
11
  <!ENTITY doc-xmlcheck SYSTEM "xmlcheck.docbook">
12
 <!ENTITY doc-xmlcheck SYSTEM "xmlcheck.docbook">
12
  <!ENTITY doc-sort SYSTEM "sort.docbook">
13
 <!ENTITY % English "INCLUDE" > <!-- change language only here -->
13
  <!ENTITY % English "INCLUDE" > <!-- change language only here -->
14
]>
14
]>
15
15
16
<book lang="&language;">
16
<book lang="&language;">
Lines 19-44 Link Here
19
19
20
<!-- TRANS:ROLES_OF_TRANSLATORS -->
20
<!-- TRANS:ROLES_OF_TRANSLATORS -->
21
21
22
<date>2006-02-24</date>
22
<date>&tde-release-date;</date>
23
<releaseinfo>3.5.1</releaseinfo> <!-- Used KDE version here -->
23
<releaseinfo>&tde-release-version;</releaseinfo>
24
24
25
<copyright>
25
<copyright>
26
<year>2001</year>
26
<year>2001</year>
27
<year>2002</year>
27
<year>2002</year>
28
<holder> </holder>
28
<holder> </holder>
29
</copyright>
29
</copyright>
30
<copyright>
31
<year>&tde-copyright-date;</year>
32
<holder>&tde-team;</holder>
33
</copyright>
30
34
31
<legalnotice>&FDLNotice;</legalnotice>
35
<legalnotice>&FDLNotice;</legalnotice>
32
36
33
<abstract>
37
<abstract>
34
<para>
38
<para>
35
This is the handbook for the plugins for &kate;, &kde;'s Advanced Text
39
This is the handbook for the plugins for &kate;, &tde;'s Advanced Text Editor.
36
Editor.
37
</para>
40
</para>
38
</abstract>
41
</abstract>
39
42
40
<keywordset>
43
<keywordset>
41
<keyword>KDE</keyword>
44
<keyword>TDE</keyword>
42
<keyword>tdeaddons</keyword>
45
<keyword>tdeaddons</keyword>
43
<keyword>Kate</keyword>
46
<keyword>Kate</keyword>
44
<keyword>Plugins</keyword>
47
<keyword>Plugins</keyword>
Lines 90-95 Link Here
90
<listitem>
93
<listitem>
91
<para><link linkend="filetemplates">File Templates</link></para>
94
<para><link linkend="filetemplates">File Templates</link></para>
92
</listitem>
95
</listitem>
96
<listitem>
97
<para><link linkend="sort">Sort</link></para>
98
</listitem>
93
</itemizedlist>
99
</itemizedlist>
94
100
95
</chapter>
101
</chapter>
Lines 101-106 Link Here
101
&doc-openheader;
107
&doc-openheader;
102
&doc-textfilter;
108
&doc-textfilter;
103
&doc-filetemplates;
109
&doc-filetemplates;
110
&doc-sort;
104
111
105
<chapter id="credits">
112
<chapter id="credits">
106
<title>Credits and License</title>
113
<title>Credits and License</title>
(-)tdeaddons/doc/kate-plugins/sort.docbook (+103 lines)
Line 0 Link Here
1
<chapter id="sort">
2
3
<chapterinfo>
4
<title>Sort</title>
5
6
<authorgroup>
7
8
<author>
9
<firstname>Marián</firstname>
10
<othername></othername>
11
<surname>Kyral</surname>
12
</author>
13
<author>&tde-authors;</author>
14
15
</authorgroup>
16
17
<copyright>
18
<year>2007</year>
19
<holder>Marián Kyral</holder>
20
</copyright>
21
<copyright>
22
<year>&tde-copyright-date;</year>
23
<holder>&tde-team;</holder>
24
</copyright>
25
26
<date>&tde-release-date;</date>
27
<releaseinfo>&tde-release-version;</releaseinfo>
28
29
<abstract>
30
<para>
31
This plugin allows sorting a text file or selection of text and supports KatePart
32
compatible editors (Kate, KWrite).
33
</para>
34
</abstract>
35
36
<keywordset>
37
<keyword>TDE</keyword>
38
<keyword>KatePart</keyword>
39
<keyword>Kate</keyword>
40
<keyword>KWrite</keyword>
41
<keyword>Sort</keyword>
42
<keyword>Plugin</keyword>
43
</keywordset>
44
45
</chapterinfo>
46
47
<title>Kate Sort</title>
48
49
<sect1 id="using-sort">
50
<title>Sort Features</title>
51
52
<para>
53
Sort allows sorting a text file or selection of text.
54
</para>
55
56
<para>
57
58
<screenshot>
59
<screeninfo>Sort screenshot.</screeninfo>
60
	<mediaobject>
61
	  <imageobject>
62
	    <imagedata fileref="sort_plugin_en.png" format="PNG"/>
63
	  </imageobject>
64
	  <textobject>
65
	    <phrase>Screenshot</phrase>
66
	  </textobject>
67
	</mediaobject>
68
</screenshot>
69
</para>
70
71
<itemizedlist>
72
<listitem><para>Sorts selected text or whole file.</para>
73
</listitem>
74
<listitem><para>Case sensitive sort.</para>
75
</listitem>
76
<listitem><para>Duplicities can be removed.</para>
77
</listitem>
78
<listitem><para>Can be sorted according to given column. If part of a row is selected,
79
it is automatically used.</para>
80
</listitem>
81
</itemizedlist>
82
83
</sect1>
84
85
<sect1 id="katesort-thanks-and-acknowledgements">
86
<title>Thanks and Acknowledgments</title>
87
88
<para>
89
&kate; Plugin <quote>Sort</quote> copyright 2007 Marián Kyral.
90
</para>
91
<para>Home page: <ulink url="http://marian.kyralovi.cz/linux/katesort">
92
http://marian.kyralovi.cz/linux/katesort</ulink></para>
93
94
<para>
95
Documentation copyright 2007 Marián Kyral.
96
</para>
97
98
<!-- &underFDL; -->
99
<!-- &underGPL; -->
100
101
</sect1>
102
103
</chapter>
(-)tdeaddons/doc/kate-plugins/sort_plugin_en.png (+91 lines)
Line 0 Link Here
1
‰PNG
2
3
IHDR´üHQó IDATxœìÝwxÕúÀñï̶ì&›²éHz'""‚tA¥© DTÀ«¢âý"ØA)JµÂÕ«¨ØbG¤ˆÐBïé=»›móûc!$ìn $Îçyxžefλg6gçÝ)çIQ.fµÛ/](‚ ×?Fºx™T<¡íO:¦ AxTD¥VLAÊ#-9hÔ VQbSŸñ۟ÿ(.—›Ý!8¨jj(‚ >8y:­FMZF¶Òáö›%8w†öõ¿*Vk!…6;‡“Û;ÞvÙoâ¯ÞBê?	˜Ãï!<2Êã¶.EÁápàt:àü‰¢*•µZ,]rFY)±AªÚµz|¼Vbýùë_¨Õ*tZ
~~:îíÙQR¤gd“••‹Íî@Q,…¶Kߨ¥àp(hµ2;÷åsìÈaúõnQb›ÍN¢ý&!ëôü°é…íGqiRS§ÓIfF[ÿú“ãǎ¡¸\î}‘eâjÕ¢Ím·c
4
E¥R!yØ©ŠŒ%‚PÕ®Õããµëlr:’$¡Õ¨			t—}}ö‡ŠÅZHvN>ŠâBQ`Ðð—ÞøG)i®žD@€‘”Ãß0ò‘»Òï¢aÐÿ¡9{Ž;qÞɼ“]¹¥ëÀKbÙì6þÙÉÎmÑ¡}7n¾ù6:?̅Vþùç/~û}=-[ßFó–-Ѩ5e~8KÎÓú©DŸÖÂBRΤr¦ÐuYñâÕ"åÐqRây+Á³kõøx­ÅZýÑçHH’LpPz?Ò¿ÿ3[ÉÌÊ¥Àláü"£Ç(Q0ßì`ëß0nP#^~ïO<G|=^XAêáµô¿GG¶¯¡9|Ž;àts÷4&¬ç¿	‹Œ.Ëép°oOGöïeРÇÑB‘Uà|e—sA:«W¿GíFiÒ4•ZÍÅ*2– œ'I:´¨Cú©SÌ4ãD&À߀Ñaæ´ÅYÎ`2(.noÀ™}‡8m¿¼„(Ü®ÕããµkÑ» Iþ=¦@ԧϦ‘“G~¥hCs¡½DÁŸ·äÒí–Æä8xê¡Úlü3áLz,”O¿
5
§Uô84ÇÎÂqœŽevbcB{>ƒ!ØT"–¢(äçæ°o×Nú,’Ú„Å®B)ñv(jTšHú|’OVÎ"":†€À ÚS¬;¶Q¯~CŒ>ńâT#:IáïÓٜO?ù+ÉŶQûiU/Šƒ§ÝÆñS§Ù›æþuºµ)gOd€Z¥`…@•„¾~q
6
d=Êß9öKÞW¸±•vL+(”ùjÍgìØ¾•JÍðGFQ»v+:>^påÇÚO–H³æ-ˆ¿¹åÇ*o½Î¦d½ð×c±¢NKÏ&3+‡¼|sÑJs±{h™9
7
òðóӐ–åÀO+Ó¨N(_nHçÞÎVíþ.œ<G4p*š™‰0vy
8
! D‡ÃAâŽm4kÑ
»„Í&C)ýàÜû$!L|‹nìÞ¾•æmÛ£.–¡Ëеkç6~üî+þú¡a^c	Bq’-ƒlg4·Ç…²7-—¬<3æ—
9
eº´ŽÁ~üÿ;•‹. „-됟±›ý'. 6ÐÊ7ÛOpþ|®Aû–ù{/‡mâM(]iÇ´¤ý{øå§Môìݏää3|°d1/L~ý²¥º‚Xûöî#4¼õ¬ÊeÇÚðýW€Dמ÷°á‡µ8zôéç1Vr±„f0`·;Q§ed‘ž‘Mn^AÑJK±³ªu¿ØèØ<šÜ|'yù
10
.$t‰z1&>ýú!·ÄQ[Ây̟W7×#¤ïhÆ1γÛ
11
I9sŠÖ·%¯P†s¿ìÝÅö-¿Ðºí4lrþa™¨¸lßö=u­…h4ŠÇX;þú•Í¿® /??XÄÀ!£1…{Œ%%ÙY»y-êDѼ^‚õj²³2ؼë()v}M¤B>>œ((Lå×ôÜ£ag‚ppo2ù….Oº›ÍŽå2ïÁ	Õ_iÇ´è˜F¼0u’,±uóO:˜D¾õ|*ßñÑ3ßc)Š»]K’„Ó¥PhWŠÕ©üõÊÎÉgë–_5²2ÓøkóO´½£3ù—ÇXÉ©šÙbÅéráõ4%.(KÞAþ»¶.5cšbôw`	2jۘÿÓݬ«Æ®Ós¤îCäþü'÷Þwk©±Ô²
12
ÅåDB‹Ã©pþ9Í­þL~nNÑëº
›ûh´ 8Q_t‰°´X-Z·§Eëö,˜5…Öm;sk»N8œ.±ábvKÛ÷ä±Piõ´ŒoD×[£Y¹ù4*•§#¯Ä!’ã@}áë”í?˜„ò)ëø°×6ÿ²ž^÷
*:žAùŽÞøë›Ï—sôÐþ¢õþ¶‘?Û@ízè3àárÕ«kŸp*
13
߯ý/mÚuæ®^/ë¸í=¡Eæ°'1ÿ~ª}œJ‰Ã_¯&%Á5߁]®Ãœ½Òû¾úüû>#Ë>ŽeíšUô¾ïVdY.ë|}ìNŠrᏢ¸”¢³aÅ¥àpûƒ•qš\V,8÷HèEq<ÅOœ6‰ûóiv[(p§ÓŒJm¢øï^}[ž£Ì¢å	Þx:¦}ùßhשqu›\ññ±,¾ÆªÓ ¡áî‡ý¶mÞDšµ¨Q³
14
l
15
Ãáp•»^.—Rô%qù˜Jã5¡Æ´§‰öRîz¾ÚrÍÑh¢°Úœ¸´Qè52‹ï¾OF‘dþ5$œ·ææ×
+èÔ½ÝE{ãî0g·‚JWtƒ¯Eëöü³í·¢×Îs™YQpZ‘UêÀx‰å.ŠËUÇk,A(F¥¢uŒ–ƒÉÙd[íhtš76b3»±[ϒ¦DÓ96ˆŸNä 3šè¦eÏfs™1sœæ§"I\rÊâá˜Öõîû‰ˆŽñý˜VJ¬¾ZɱÃJlV«nCzÞ7¤\±ê6¸pmÛæŸˆ®Y‹[n¿«h™Ãá,W½6~÷oûÖ·Ý‰1ØÄOëÖ ¸:÷Pîã¶×„¦Vk½©>§³Ñº^"AAVv¬KšM%;2*wg —üٟðíZ^ú"ºfÇï$¶Þí8Ѹ?ÔzͨU¯Ù…äÜM%98yt'5nŠq?þìC,(v†Vìï)– §¸lÈÆ(%@«FqÚIËÈäǝgÏmàdý–Ctl^‹¡õµ8í…$íßK‚¹ìGúw'¥Ò³U†J¼{7Ò/¼@¸±y:¦mù}=-ÛÜIhÄMEËÊ{|¬U¿¦ð’]‡ápº®ìXëtù|¬--–Vg U›ŽtèÖpßo.4[¼Ö«4>?êwSÓnèŽüÂþ=‰šÑàLV­§tZZ)éo¬¥MÓý´¾£ã¥Ad‰†ñ­øå‡¯‰¬ÙÞ„Ó%]z=F•¬`µdqôÀ&:ô¸§JUr;±bãêâîyîK,A(Æå²ðçî·±™³ØðWV©ë¾Ú¸õ’e¹góéÙãR?¡šòpLë3à‚CB}?¦•«nƒ¦¥keÉyÙÇژÚõ	6]Q½ÚÞÙÎ]UhÙº£oõ*…*2¶ùËf‹•Bۅ§{Ý׭ԍµÆ›0ê‰ÐüÂ÷[‚ˆ
@£3b·;IÏQضu+m› mçR’ÙùýQ«6úó÷–µDF5B«q÷Wpß ”%;ւ¶ÿ¾ˆæ-[¡	ÃUʎ”«vý&„˜ÂËK¡ª•uLÓû «ä
16
9>Vä±¶Nƒf˜Â"ª¤^ß½¾èµN§Å`ð+_B“e†ÀP2SS	1œ&,¤c§œä˜Iؽ…»n=æ1™¸	%H¯å_þ‡,ɃQÉ áÀiÏçø¡-ìÚú_ni}+a1u±•ñÄXEÆA¨j×êññZŒUZB“š·¬\ÜíÝ¥oyýàӏüBÒþ³ì8=„ô´$zµ;CÛN¼–÷½=ƒN…d+dﮜ8~‡Ãý„˜Z­&6.ŽÆñ­pjtÚ]Ï2+2– BU»V×Z¬q#'½4ú|ù	Íᰓ›‘¶m'		†6ío÷ZæâR©e52
17
18
°9œ80Û¸\PڌÚW3– BU»V×R¬ÒÚeÿ¤Vk0EÖ¤GŸš—U^¹ŽóO{]þØvK¡ª]«ÇÇk5ÖyâùuA¡Z	MA¨DBAª‘ÐA„jA$4A¡Z	MA¨DBAª‘ÐA„jA$4A¡Z	MA¨DBAª‘ÐA„jA$4A¡Z	͋ƒ³àåeû«ºÂ5æzk×[}ár\öô1—#g÷—,[ü	IGNáRY«!í'L§{íÀˊ÷z¿´_ö#Bô\SáFµæ_Ýø>ÓÄÜ/W£“¥ª®Ž åPi	Íe?Ë+/¾EüØ·™ÙõVtJ>'÷nãäeÄRœV$•_…Ö¯¢c^:
19
W—#ÿO¾KƒfúdV'e1¼‘©ª«$B9TZB³çm&שbèÝmQKAÔnՕÚŶ±œýeoÎcÏÑT45èøðн1Sûvàæ‘ƒHX÷V³†AÑ.Ž[¤ŽÊw2Ôÿ>¶¿ä}ËóÕeK1ŸØÀ‚is8’f#¢qz%÷#'•3f³#ñ(ŠÖÄ-}Ç1â¡;ˌ'\?άy€:OÑï¶ÿ1{þ/ŸÛ¯h§vqzÍ£Ìú¥oÏé]´lߛ÷³R÷Ó&ÜÌÖù“øòdçYÐG4¤ç¯Ñ­•»­Níہ–
e߆˜³Ï¢«s/ÏL…öÜÉ¡-{7«f½Ãö„#¸$±­‡ñüKžÛ¢·v,ÕQ¥%4m`gnÒÍfÆ;‹éug[bë5ÄdÔ­WsŸ|	ýCo1wv[ò¯ç•	£06ûî5øm«‰és?.ú²Çõë@ûwV”yɱ¼1ÅÂܧ_!ä‘yÌï݂¬Ä/øÏ‹_qþ¸¦8X2væ^“™9µRîAŽyŒåÍ>ãáø°Rë(\/\üïËc4šÒލ8y+§s¦ð^jèT^ÛEd÷'È[ò<™ö^˜42(6VoN殥
ð«Óg‡¿‚)@űŸç2}Ênÿò3Tî[ØüÎk3!cgõˆ^,Ûݗ1-ÂA±³hìx
20
º<ÏSºcmœHHr¿©‡¶8´¹¿çv,ÕÔ'´ófx\?ôÉçÔ&&-šËÚUŸ±æ¯8“œIt‹ô"
‚´XS—sÈQ“÷û·E– ¨^7i½€O–¢ûó7Ðö‰{ʕ(ÊӚº‚#Îú¼ß»`j֟k,â§óñ2V±3/ŠC:»Ï2ƒðà˜F¼±,‘‡çt*³ŽÞ>#áòMžÿGö%–ºÎ×¶	`9û{­~ÌlbB«îJ›Ài|òëžíãµ]¨ý[Ò+ÌŪ]i<Ñ:’‚“IÑÞÎ]aîZñ½:½O­Nãi8÷s¶dÒ5Ô½¾Ã螸o×i¸íŽH–ýž
21
-±¦¯`w~óéy®Mù×"ðܾxÐc}}ý|¡2yú.ûªBÎÐ&Ïÿ¨ÌuÅ+¨‹lÉÀ	-ز޲ö§˜÷ìrÞ]<§õ jCsŠß‡nŒyS~Ñÿkø•¯ºåé´DpÅóQt퀢׎‚\Žt¦<ú`Ñ2ÅU€Ö?Óc=}>Âå›úÄp¯ÛøÚ6“~±îS«ÝgM=ïãÍWA·‰^Û@û5aúâMÐz0I‹6}ß[Eëö=5ßýDzž•,‘ovP×á*Zª¹ð°±J¯Â™ëÀaއÚТÔqžÚ¢/õõöÙBeòå»ì‹
22
»äXÞ̪
©MÇãY7~#0•_}æŸq)% œ}9Š}/ù^K xxòÆTùÕÃaÝW"FîYDœ[¯oˆJ—Å´¥‹/­KYu¤üŸP±¼}þŠ3‡ÛS)PÏãéAﹺò±æà¯œñÄ{iaí&`›ù§Ì=ùdW:Cžwß¶eϬÅ?óÜ¢e4ˆàí}ª·ÚЇù
23
çî;_à©-ZRÒ½ÖD»ªŸJë‡æÈ߯ªO×r*9§â¢ íßÍۍþ¦^ø…?LÕIÞûr.rläƒm©Ü9´^™1£´jŽ'[Ê\_ޘ~áçÜÎ7‰Ø²v²úpVÑz}ø0â
‡˜»j sj/;å\Æ'"\+²g‘-E3mÉJ^~o¹ûßÂ5ôˆà›O’¼¶YW‡1~,^>	s`n>wXqd!kLÄDº»¦díþˆ½vŸêå6”xÿTfô#f‡ÅeåĮ݀ç¶èK}¡:ª´‡BdMÎß°à«y¤eä¡2S§å]üûåAH²žñï¾Ê’3xòÃ4TÑÜùÄBzÜt饒ózºYSîçI‡DƒV0®MT‰õå)ÉzÆÍþ^Í?þáhu‘toÉæ¢
4Œ^0Õ³ßaÒÀWq "¸f#:>>µ">"¡Šl]ð‘Ýß ",¬Äònãï`ãÔ98Ç,õÜ.ιet+V½¸‰^(Z¦Ì¶2ùÑa„…ñé@Ë@o“4Œ~o+ߚÍįƒJGlëáLlï±-zmǂPMIÍÛVÒ3²ÉÍ+(ZøîÒ·<)iżr3OÊË[ÛmS®—ó]7rbÑë@£?a¡Ábè+A¡z	MA¨DBAª‘ÐA„jA$4A¡Z	MA¨DBAª‘ÐA„jA$4A¡Z¨´¡¯JcðÓÒ¤n­K–ï=|³ÕVùnXÁF~>IUL¾µì<óU¨‘ åU5	MQhݬ!‡Ÿ$5=ƒdYÂnw`),t,îr‚$ƒ$fÊ®¾Ô”Tb[4G«Õø\Æl±räøI´†²Ç¡òTzBs9äfg²3х¿AOâþ$œŽÓëÔ*âbj¢Ó¨HIM#0؄¬RUv5…LVf&v»­V÷ë6xݾw®hÔ*²231©µh´Z¯eA¸º*=¡ååd¡ÓéÈÎÉ%%%…c{v¢UɄè$\.QMo%11‘Ðpt:¹Y™…†!]çgjg=Àʐ©¼üH#fèH«Eë¸ëܬÅBÕ*ÈË)jc	Ö V{þjôîѵ¨œNo 84Ìãö7
24
oíZ´{ájªÔ„–—“9?90˜œÌtRŽìG§Õpw߁h4.õ¤¦g°+a‘7Å`1ç#É2A¦PŸÞcÍ¿ºñ}¦‰¹_®F'_»I°Ë£¿ê¯¹9E—·õz=ýG>ás9c°ÉëvÇ^Îÿ>_Ëá#§pª¨Ù¸-]‡ŽãöfÕ+oׯ÷ë@ûe?Ò!D_êzA¨h•šÐғÏl
25
##å,»·m¦n­ú†ÁßIV!IŠ¢Â¡c'IO>C)Œ”Ó'1‡ ˞Êtäoá»4h¦OfuRÃy?ÐT•–½úWu„bòr/LÒj4‰‰«íµŒ¢¸ËEyÙîÌ·“™¶p/÷?û£omŠÖ™Ï±6òãGÿpûŒ®WXók‹·v-Ú½p5UjBKK>MíºõIJø› £‘þƒ†áo4–HT’$¬¦OÏn̟û.µêÖgß®mÄÕoˆÎÏóeŠ3kPç)úÝö?fÏÿ…ásû[£ðËÂI¬]¿BEBkŒ¢÷¬EܪǖÀªYs؞p—¤#¶õ0žé!ì9	¬œ1›‰GQ´&né;ŽÝ	ÀÔ¾hùØPöm؁9û,º:÷ò̤QhϝšOl`Á´9I³Ñ¤=œ%êZüҋ×XÇ×1ú\ަÛ	oÔ™Ûø1jzÑåKáʙóóÊ]Æátz-§8³™óþFÚ½¼†î·Dœ[j¢aûûix‡ÀÖù“øòdç[Ї7¤ç¯Ñ­U8žÚ­§¶yQ
.+†ç6YvÌóí:êí±·8H?”ïd¨;þ}m^´¾Ñ¯O1ó—~¼=§wQM÷½y?+u/1mÂÍåØ?A¸ RZfj*õjÇòófT²ŒÎÏÏãY—Ål¦N\M¾ÏÌÄVXè%¡¹øß—Çh4¥QqòVNçLá½ÔЩ°¦¯`ÕzӖÿ@˜^%ýÉ
(vGA—çysJwô²	IîpŠƒ%cÇaî5™™S;!ådá˜ÇXÞì3Žw_&úãïp^›¹;«GôbÙiŽ¢X˜ûô+„<2ù½[•øÿ™ô5}Ë®}™±\fޙ0¨ÇßçÙîMÉ9ð
ÿ÷ÜZB=ÄÊÏb.Àétzß°§Ó‰Å\àqkƧdÚUj~éÊs—8ýêtçÙá¯`
26
Pqìç¹Ly·¯ùuÖÊ2Ú­÷¶Yôþe¶ýËoßeÆ,¦Éôˆëׁöï¬(qÉñ¼ˆîO·äy2í½0idPì¬ÞœÌ]K–kÿ¡¸JíX-«dö'DZz:jçG¤‚‚Øsà N‡»­Ð㶖³³×êǃMLhƒºÒ&Pá“_Ï ÉG&Çæ(èÃêP[¯Æš¾’Ýù<ýHOjIö#®E<֌Uì̋büÎèd	mpӈË.̨ÚqtOd	4ÜvG$§Ou—M[Ág}Fõn˜šõçÁh£Çú—+}Ǥ¦ŒèÞ	n؇Á5=ÇÊÏj6cw8ÊUFQ¬fÏ}Ð\ÖãÈÚ(ôîçÆ÷ê„)@ÈÔê4ž†š4¶d–Ýn}h›ç]IŒ²ÚdY1ËCíߒ^a.VíJ àäû¤joç®0}¹öOŠ«Ô3´À ROŸ"²F,¹¹^ï‰EF×$åô)dY…Ëåò¸mÒ¯0Ö}Š`µ;fÏ{ãxóÃUÐm":ÓÆ?’Â7_`ÉÉ|êÝ֓ÁÏ<Iy/jC‹¢K{Å9
27
p9ҙòèƒEËWZÿÌ¢ÿ›4ê¯Ò«p溈NËA4·P<ltmÏ}•ÊŒe>ˆÆÐ¼Ä¶a±¢ßSE³ZÌ(ŠR®2f‹«ÅsB“ýâpÙ~ÇâRÊLjû¿žÇšï~"=ρJ–È7;¨ët¡‹(£ÝúÐ6Ï+³í_Aû.+æM~å;œ´ÿW¦/Þ­“´h#Q÷½øö݄ÒTjB‹Š‰ãhÒ>†ŒIvzJÑr³Ù‚F£.ñ¤#@ÓæÍùêÓO0=&?Å™ÃŠí©¨çñô ÷Ü]ùXsðWÎxnÒÑäÞ±4¹w,Žü3ü0í1æ¿Û‰É#šà0CÁݙ»•¾!*]Ӗ.¦¼ÏJªôõpZ÷•X–{ÖeðËP»yg‰eé'ò/+–P6«Åì~Ê£ò
28
29
¼&4?ӄh>â¿»Òù×ŗ[ÎÌZò3Ï-\Fƒè ÞÐÎU¥´vûÿ*_Û¬ˆ¾Ä|mâÍ%7’Šv£Taí&`›ù§Ì½ødWCž¯\ÙwO¸±Uê%ÇZ
ãp8X÷í·ôìsŸ~ö9ƒþ’d¶3q¿mÚ@VFÑ1qh´eK”8‹l9šiKVòò{ËÝÿ®¡Gtß|’„-k#‰OãR@åoÂhPƒ$á6„xÿTfô#f‡ÅeåÄ®ôáÈ7bîªM˜.@!çÔ^vÊ)³çù…=L¬s;ß$f`ËÚÉêÃY—õ™ù…=L¬²‡×ïqïkÒ·¬:UþÏ
30
-¬…îáÖBBB|*““K¡ÅâqĪÇ:³yʓ¬ÿýò-vlYøý3æM܈âÈBV›ˆ‰ k÷Gì-°”ÙnËÓ6+"†¯1/¥Us<¹ìÏGÖÕa@Œ‹—¿ˆ9°?7ݏó_I݄[¥w¬Žoӎ/>X€ÝaãÎ.Ý9zâ4:µZMA«­m›eëÏëiÚª-zÿ´º²ÚÖÙí
"ÂJÞ0î6þ6Nƒm@WÖΚÏ{ɹȲЍæ]xr\3TŒ~o+gÌfâ€×A¥#¶õp&¶h’†Ñæ±zö;¼8ðU¨®ÙˆŽOõº’¬güìÿ0ÿµÑüãŽVI÷6‘l¾ŒÏK’
L˜5‰ù¯?ÏØ÷ì„7ìÌà[#Y¯¿]+’­ÐJn~>–£Vâ»ö%%-‹ÅŠÝé@­R!Iîß~N§›ÍFÁ¹Df+´z}SŸi¼èÿ1Ÿ¯šÆ¯Á¥	 fãÛè2l<º°P贕ɏ#,ԈLZºÛºË‘Zv»õ±mVDŸc^¤÷¨û˜5å~žtH4xaãÚ\ÚÁá–Ñ­Xõâ&LxáÂÂ+øî	76©yûÁJzF6¹yžÖzwé[>X1o“çđ}¾Ý°u¹\œ:zˆ?֋ŸŸžz›Gtt
ÒÒÒH>yœ¤Ä(ÈË%*¶5bkS#®6Æ ïýÐn¿éÉæ‡–2±ãMU]•*å­í•§m¾ñïÇxfúÛ¨ÕîaÖÔj5~Z-jµÇ¹§ÕjµûJ‚Ýá>‹zqÌF>7™ðèûo!W¢¼y`ÜȉE¯þ„…Wþš,ËԈ«M÷þƒÙþë&þüi=ÙéXÍùø2™ˆ¢v£f‡†Q£&þ^ìÑÖã{.]·¥¢w£Råüýö†m	óא–ð«Oòx+q­"Å·½ƒ7&ú6:Hq5âê^…ÚTœ²¾×ûwBJS%£í«Tj‚L¡´íÒhLD„ IDATƒñ-ÉÍÊÄR‡ÝfG£Õ ÷7b¿1•Ês5«û—Ó|zo¿1•B§É¿&ݞ]JÓßG…¼»ûa´ër7ǒö’‘îs¹àÐ0÷w«ZuÿnBqU’Ð$IB­Ö`
31
ÁOo ,2»­—Ë…,Ëh´:´:­N\f¢ï™ÂŒ{ªºÕŸ¿1Z
šxíóXœF«Ãßxk%‚¯ªt‚OY–Ñùé½i%•A£ÕŠQóá:&NA„jA$4A¡Z	MA¨DBAª‘ÐA„jA$4A¡Z	MA¨DBAª…*íXmðÓÒ¤n­K–ï=|³ÕVùnXÁF~åÂ*ßZHvžç9ÑA¨U“Ð…ÖÍrøøIRÓ3ð÷G–%ìv–ÂB÷d›.'Hr©ó,	BEKMI%¶Es´ZßÇÈ4[¬9~­AÌ .ׂJOh.§“ÜìLv&ºð7èIܟ„Óá,Z¯R«ˆ‹©‰N£"%5À`²JUÙÕn0Y™™Øív´Z
ß®ÛàuûÞ=º¢Q«ÈÊÌĤ֢Ñj+¡–‚ xRé	-/'NGvN.)))Û³­J&D'ár¹ˆjz+‰‰‰„„†£ÓéÈÍÊ$(4©šŸ©œõ+C¦òò#˜9 #­­ã®P1Îee(ÈË)jc	Ö V{þjôîѵ¨œNo¸êc@Šö ÞUjBËËÉÆœŸ‡LNf:)Gö£Ój¸»ï@4š—zRÓ3ؕ°‡È›b°˜ó‘d™ S¨Ç؋ì̖l’$£öó',¦7wîϽýº ½sa—G' ~õW–‚Üœ¢ËÛz½žþ#}›­ 7c°Éã6ÿîݎ»>Ø@ŸCѲ3kFòú×w3÷ƒ>½h‚à]¥&´ôä3›ÂÈH9Ëîm›©[+†þƒ†að÷G’UH’„¢(‡pèØIғÏd
32
#åôIŒÁÞg¬n>{-ãšpXs9µg3_¼3ÿ۝ʛ/®¤=¬8-{õ¯ê*ÜPòrsŠ^Fbâj{-£(îrQW³bçˆö ÞUjBKK>MíºõIJø› £‘þƒ†áo4Ò*.¼ÄvÿœÌ OÏn̟û.µêÖgß®mÄÕoèušI–‘U*´þ!ÔiӛqóƒxrÐslLïK—0=öœVΘ͎ģ(Z·ôLj‡î~Y8‰µë·Q¨HhQôžµˆ»BõزX5kێà’tĶÆó/=à!Líہ–
e߆˜³Ï¢«s/ÏLUt¶h>±Óæp$ÍFD“.ôp–Ø—â—˜¼Æ:¾ŽùÓçr4ÝNx£ÎôØÆQӋ._
33
ޙóóÊ]Æát^V¹ÒxûoEm'ÝNdã.tø‹u‘þÞczÞΤ5¿«w½“^Ȫ˜×˜2´à¹Ý
34
Âõ¬Rû¡e¦¦R¯v,³ùÜ\h~Ϻ,f3uâj’“™‰­Ð÷IÏÓ·ç¶`?¶ýŠƒ%cǑÑèaf~±‰·½Nþ×/³|w:Öô¬Zoá…å?0÷óõL›ù
35
µ
Pì,;ŽäZ÷óæÿ62ïó/Ô§™;¸‡xçýñw8ÏÎ\ÄËK¾ öÁÿ²lwš»¨baîÓ¯xßtæ¯ù‘qƒë³üÏdûRf,—™w&L#là›ÌÿbOoƪ-žc	—²˜p:Þ7,Æétb1TXÊúw¾í„ô{ù_¬cÜЬôÒvJðÞnázU©	MVÉ$ìO" (ˆ´ôtÔϏH±çÀAœ{¹f.®†NMáY֌Uì̋büÎèd	mpӈË‘dŠ#“caSôau¨­WcM_Éîüž~¤'µŒ$û×"Àc¼ó:Žî‰,’†Ûîˆäôï©î²i+8â¬Ï¨Þ-S³þ<mô¸eÆJ_Á1©)#º7E‚öapMϱ„KYÍfìG¹Ê(Š‚Õ\q}ÐÊúgM[Á¥1#{5GB÷eÐM¾ÿ½}i·‚p½ªÔKށA!¤ž>EdX
36
rs½Þ‹Œ®IÊéSȲ
37
—ËuYïy¦Ð.Z£ —#)>X´Nq õÏDgÀøGRøfá,9™O½Ûz2ø™'	2ïEmhQêC%žâgÒ\Ø?•^…3×}ÀtZ¢	¸…âa£k{îËTf,óA4†æ%¶
‹ý¢ÊËj1£(J¹Ê˜-¬ï	M–ÀIÉØ.‡âîgYLYã✖ƒ¨
ñ%–E”ãïíK»„ëU¥&´¨˜8Ž&ícȈ‘d§§-ß|àºÄ“ŽM›7ç«O?Á`ôšüJcËùƒ¿²­º%•³!*]Ӗ.¦´‡›Ü;–&÷ŽÅ‘†¦=Æüw;1yDæïq(¸;{£Ò{Žç‰J_§u_‰e¹g-QÎ@€ÊP»yg‰eé'ò/+֍Ìj1»Ÿò(‡¼‚ŸZM?
'’-á_´,wo6º°èr×S¥¯‡Ã¼£Ä²´“ùyáÿ~*‰ÂbûbÍ,„˜óå/¿Ý
38
µ®R/9ÖjЇÃÁºo¿¥gŸ{øô³Ï0ô—$³‰ûømÓ²2҈މC£õ>,‘ârár:±Y²9ºý{æ?ù„´Ç]¡zôáÈ7bîªM˜.@!çÔ^vÊÁ–µ‘ă§q) ò7a4¨A’ðB¼*³?ú³Ã…â²rbW€ÇxÞø…=L¬s;ß$f`ËÚÉêÃYåû0‹ÇRöðáú=d'}˪Só Â¤ÐbÁZèn-$$ħ2Ù9¹Z,^·ëÓ=Ž3çpäl6Šâ %ñ>ؖB›‘
Ë]O¿°‡©¥ìåƒQ€¬ýk/ù{·3éÙ´Ó}¹Ò–µ‹U.œ}]I»„k]¥w¬Žoӎ/>X€ÝaãÎ.Ý9zâ4:µZMA«­m›eëÏëiÚª-zÿ´:ï	-áé{¨uFÂbêÓ¢ï$žèߎRÒ0zÁ<VÏ~‡¾ŠÁ5Ñññ©4v¤²vÖ|ÞKÎE–UD5ï“㚁¤bô{sX9c6¼*±­‡3±Esñ¼‘d=ãgÿ‡ù¯æÿp´ºHº·‰dóe|ž’l`¬IÌýyƾg'¼agßÉz•øý]¶B+¹ùùXŽZ‰ïڗ”´t,+v§µJ…tîò ÓéÄf³Qp.‘Ù
39
­^c×}ô}îu¼ÊÂñýÉȵbŒ¬GÛÑïð@CßgqçÛμé/ðÄ{6"wá¡¶QüXl›>¯>ÍìWÆ0eU8þ!
èÑ*œ_Š\~»„kÔ¼ý`%=#›Ü¼Ok½»ô-Ÿ¬˜7ƒÉó?âÈ>ßn*»\.N=Äë¿ÅÏOO½ÆÍˆŒ‰#:ºiii$Ÿ<NRâ?äå[‹±µ©Wc÷~h‚Ûïcz²ù¡¥LìxSUWåªòÖöÊÓ6ßø÷c<3ýmÔj÷0kjµ?­µZãÜӏjµ
40
Ú}%Áî°ð☌|n2áÑU÷Y_<ʌ \oʛGƍœXô:ÐèOXhp埡ɲL¸Útï?˜í¿nâϟ֓‘ŽÕœŸ!€ “‰Ðˆ(j7jFph5jâïåÚÈm½¾ïÒu[*r7®)9ÿ†½a[Âü5¤%|Á꓅<ÞJÜD+ø¶wðÆDßF)®F\Ý«P›²•ÝÖÿÅÈÿVïv.ÞTÉhû*•š S(m»ô A|Kr³2±äa·ÙÑh5èý†˜0…GàoD¥ò\ÍýKl>½‰·ß˜J¡Ó‰ä_“nÏ.¥i€ï£Æp÷Ãh×ånŽ%í%;Ã÷>YÁ¡a>Ýß­(¥µuq†&nU’Ð$IB­Ö`
41
ÁOo ,2»­—Ë…,Ëh´:´:­N\fôAô=S˜qOU×âúço¤Vƒ&åêó¨Ñêð7^ÅZyWÿ™Oy¹Jk ׆*àÓ=ZˆÞëV‚P4ZíU5_„«Gœþ‚ ՂHh‚ Bµ š ‚P-ˆ„&‚ T"¡	‚ ՂHh‚ Bµ š ‚P-ˆ„&‚ TUÚ±Z®ÁF~åÂ*ßZHv^ÅÍZ-Âå	M€Ô”Tb[4G«õ}L³Åʑã'ÑÄá‚p-	M€¬ÌLìv;Z­†o×mðº}ï]ѨUdefbRkÑhµ•PKA<	M€‚¼$É=)j†5¨Õž¿½{t-*§Ó®ù1 gèH«Eë¸+TŒ›*T_"¡	P›çš^¯§ÿHßæF+ÈÍÁlò¸Íâ;³%Û=õ¬ÖY¿5ýŸB«šâR¥ T¤
42
IhSŸ^a¡Êäåæ½6ÄÄÕöZFQÜå¢|ˆß|öZÆ54á´å²íãq,yö-¬žz5ábWœÐ&Ïÿ¨"ê!UʜŸWî2§Óçr’,#«TÈún؇ekæpæëQÌÜt/oϹ0¡ÝÞ7ò‰a2ÓÆÅ_ǖÀªYs؞p—¤#¶õ0žé!,gcٛóØs4M`
:>üto|IŒ1=ogҚ߈ջ¿þI¯dUÌkLڀ©};Ðö¹Çغx§2m4½ûߌ\ƒ%¯LgOR2!ÍzóÜ´çTËEÛ·|l(û6ìÀœ}]{yfÒ(´R9>LA¨WœÐŽìK¬ˆzB•²˜p:å*ãt:±˜ÊùN
43
G6ý„_Ô}Dv{óÂñ¤Ùz®•QŸlN¦çGõK)jgÑØqtyž7§tG/Û8‘ä^¥X˜ûäKèz‹¹³Û’x=¯L…±Ùt¯QþK›×äñü{_`Ýϔᣙý÷­ôºŒ1aV?v?7
æ¹î±EÛÿñw8¯Í\„ŒÕ#z±lw_Æ´/÷û
44
•«°šÍ؎r•Q«Ù·>h{ÿoOº›ñý;2{y
45
L
€J߄~5e>ٖ@þá¹dºÓ>ä҇7¬é+ٝÁӏôÄ –‘d?âZ¸Ïâ¬iË9ä¨ÉýÛ¢’ ¨^7iÎÏ˕kŸÎkûìØô*´!MéîOa—'i€¤æÎ>±¤nJ.±}ÇÑ=‘%@Òpۑœþ=õ²ÞW®„x(D«ÅŒ¢(å*c¶X°Z|KhõŸ›Ï¨úÁà´qêŸ5¼ûÔhê|º‚š:moÃ7ï|wŒ"ñý_‰yh^©1潨
-J½”ç´DmhîN*ç7	Ƽ)¿\ût^´ß…CƒA–ÑÇúý_ Æi-™üMš¿UzÎÜòý8„Š ÎÐwB£œ	-¯ À焦	&($” °hšvKMé_Ÿqßnþ~é³/û«÷å2¨ÛM¥ÆPšà0ïÂQJ5Uúú8Ì	¸Š­Ëٗƒ¡ö¥—ýT…Åö՚YèÓ>µN$4A
46
-¬…6BBB|*““K¡ÅâÓ¶ŠË…ËéÄi·p|ËrNX4
47
tµ%©‚Ò*Œeï>7¦¶¾ôÑJü†ïŸÊì~Äìp¡¸¬œØ•pnÝÃÔQä½/·áR ÷ÈF>ؖʝCë]§IϦîK‚¶¬]¬:éÓ>µN\rÀVh%7?ËQ+ñ]û’’–ŽÅbÅît V©$÷o?§Ó‰Íf£à\"³Z}ŠŸðô=Œ$IÆY—.cæ–èäÜà±>dŽXLë×»—DÒ0ú½9¬œ1›‰^•ŽØÖÙآ9’¬gü»¯²dƞü0
U@
î|b!=nºô­Ï«O3û•1LYŽHz´
48
çß?*A¸f‰„&€­°ìœ\Ôj¹ùùøiµ¨Õê¢37µZ…F­A¯×£Ö¨‹Êy3ê¿?1ÊË6Ú –Èê0†Ä{qD܂Ó?dD)ëô5;ñÔ;J-÷ì翽6ÔêÃKô)±¾x©É_þVb]«Å?ЪØÿ#»-äíneo;ôc^+sáê	M€ø¶wðÆDßF)®F\Ý+zߑ=ږøÿÓ½Û½^ºnËńHh‚ÜýÀ0Úu¹›cI{ÉÎH÷¹\phmù§9oÉ·ßóÔýýQ5ä‰ysiàûhÿ‚ ”T©	-g÷—,[ü	IGNáRY«!í'L§{íÀˊ÷z¿´_ö#Jé³SžmÀßH­M°Û|êO£Õáo¼¼ö ©C˜·æ§Ë./•–Ð\ö³¼òâ[ď}›™]oE§äsrï6N^F,ÅiERùUx…›F«½æGÍ¡l•–Ðìy›Éuªzw[Ô@µ[u¥ø°žÆ¢›Ú·7Dº¿°š5ŠvqÜâ uüP¾“¡îø÷y´eÉ¡vö¼4â’mî>9ÉãØySûv ùð$mޏ-7¿º÷ðÔ³#ð;×c՞“ÀʳّxEk▾ãñНWùÓA¼©´„¦
ìÌMºÙÌxg1½îlKl½†˜Œ&Eôe,ºß¶š˜>÷㢑âúu ý;+ʼœØtú—lãlä}ì¼Í;¢xó­ñÈ8ùñ¥~Ì\юÿkŠƒ%cÇaî5™™S;!ådá˜ÇXÞì3öòtš ‚pu]qB[1o†ÇõCŸ|ImbÒ¢¹¬]õkÞùŠ3əD·èÁÐI/Ò H‹5Õ=ÝûýÛ"E·€O–¢ûó7Ðö‰{®xïâc獿#ºÔ±ón{÷¹!„T´¢kž^æcÍXÅμ(éì>ËnÀƒcñƲDžÓɧÏC¨X“ç$Ȩ 34OSÈ?Øè"[2pBK¶¬£¬}ã)æ=»œwÄiõ>]
¿Š9¡ô6v^b#5¨
upZþÀQ€Ë‘ΔG,Z¯¸
49
Ðú_iAL§SyÄ<|‚ Wa—Ëû+YR›Ç³nüF`$*¿ú8Ì?ãR(JjEwÉə^Gß+e÷Øy÷°/»«÷å2áՒcçβÒ>ÄýЉ-3•Þ}9R¥oˆJ—Å´¥‹/­Ë9âlA¡jTÚXŽŽüm¬út-§’³p*.
50
ÒñݼÝèoê€_¸ïcѝ¥Us<ÙóXz¥mãmì¼]o-!³Ð‰ËšÌš7~"º×ôáÈ7bîªM8\€BΩ½ì<”ƒ ‚Pµ*í¡Yóð',øjiy¨ÁÔiyÿ~y@)cÑE—9Ýy½GÝǬ)÷ó¤C¢Á+×&Êçm<×íæŽº”l+qwâ¹áçfý•4Œ^0Õ³ßaÒÀWq "¸f#:>>µ>!AáJT^BÓÅ1ôÅÙ·ñ4ÝÅãÅDt™À›]&xŒYÖ6žÆÎi5„)w,5ž&¨)¿¼ˆ‡=¾« WB<\U=<ùò[d§§UÚûݰC_X=Óm	T‹táZtþ	iAðÕ
—ÐGV±±óÚz/ ‚ \n¸„æmì¼Ò.m
51
‚ ×>q½M®3tdc†o³_‚P:‘С˜œÝ_2û©x¼w;»¯;“Ç?ŏGs‹Ö¿Þ¯¿e]Yâ)-F—G'Ð0@[F‰«§"öG®7Ü%GA(KEÎQO³D´ìÕ¿‚Þ¥:r‘“‘ŽÕbÁát¡Rëð	Ãh¨üµM$4A8Çی¥ÍÞðhËp¶ÎŸÄ—ì ;ς>¢!=Ÿxn­Ü3?ø:KÄÌi¹h]BõLíہ–
e߆˜³Ï¢«s/ÏLU4ŽiÁñu,˜>—£évÂu¦GÀ6~ŒšÎˏ4*u¿Êª_Yû“ºn›ÍwÑ·_­«ý‘ûHÁ)ë‰A­’q˜sHK=…:¦6zÕî*T+"¡	Â9Þf„(mö¿:Ýyvø+˜Tûy.Ó§Œáö/?#@å¾¢_ÞY"þø;œ×f.BÆÎê½X¶»/cZ„£¸Ì¼;aQ¿Ï³Ý›’sàþï¹µ„ö-{¿Êª_Yû“¹å~Íjt
%4¦ ¢ÿiLè³r0;\èUª*¬—p­÷Ðáœó3BÔç(kÞy‘çïïÄäç_!)Çæ±\|¯N˜4€L­Nãi¨McKö…Y¯/g–ˆ£{ºÇ4•4ÜvG$§OÀš¶‚cRSFtoŠ7ìàšÆ+ªßÅMù‚·ç´+_…+“««KA/ú
52
©Ò34ƒŸ–&uk]²|ïác˜­ž"‚p5xš¢,û¿žÇšï~"=ρJ–È7;¨ëp­¿œY"B5Ö*½
53
g®§å Cóۆǖ=<œ/õ»¾¸ÈIIF‰A\n.R5	MQhݬ!‡Ÿ$5=ƒdYÂnw`),tß¿p9A’AV¨Ï\2{ƒ-û{f-þ™ç-£A´û²ØÛ:–ˆsY³D”A¥¯‡Ý¼³Ä²´ùQúö^ëwu©|
54
y)§°ª‚‰õ¯êÊ× J?gw9dg¦³3qN§“ÄýIüñ×v~ûs[¶ï$qßT*:ŠìÌt\NgeWQ¸Ay›.½Aqd!kLÄDµû#öØ=¾/³D”Å/üab•=|¸~ÙIß²úT^™Û{«_iuIýñC¾þêøeÕïêQÈK=…#AÞ7nH•žÐòr²Ðétdçäräè1’þÞÂÉ=;È?ô7¹IÛÑI.ÉÊÎE§Ó‘›•‰¢\ùoș:²Éǎ«Sûv`K¶õ²ÞçJʖ¦<õ¾š1nî!6±à™AŒé՞gDZ Nüû­AEÛôu‰SîçÉþ]ywk2º°Á<ÐÉÀäG‡ñæscYù³––:ïsqŒòdfM"õÓçÛ¿³?H`Э‘He\~óV¿Òê’ùç×üüÓérÕëêRÈO;EË@xD0(
55
Š¢\Gg–Be©ÔKŽy9٘óóƒÉÉL'åÈ~tZ
w÷ˆFsaN²Ôôv%ì!ò¦,æ|$Y&ÈêÓ{¬ùW7¾Ï41÷ËÕèäëëråëý:Ð~ُ%ž8ëòè« ÃíÈ—!J›½¡Ë¸9t)¾`Üࢗ¾Îñì翖Y&vèǼVìÿþuz1qñ…³ÆßÇôDgY÷Ñ$õ+­.¦|ÁÛeD«.+9v ‡³Ç/Ì=¨%Ì_<¨-\P©­!=ùÁ¦02Rβ{Ûfê֊¡ÿ aüý‘d’$¡(
56
AÁ!:v’ôä3™ÂH9}cp²ìù„Ò‘¿…ïÒ ™>™ÕIYodª¤=»zD‡[áb9ÿ†½a[Âü5¤%|Á꓅<~®ß[µ$빩Vª®…p¨Ô„––|šÚu듔ð7AF#ý
Ãßh¤U\É/ã?'3èÓ³óç¾K­ºõÙ·kqõ¢ó+»ßÀ™5¨óýnû³çÿÂð¹ýJÝnjß4>¤Íû±å&ãW÷žzv~ÅÎèr÷Å닖s<ÍL\ÛÁ%:¶uTÍ· /ّ ëï¼òᗤäRûŽÁ%bÛsX9c6;¢hMÜÒw#º“½etr9 #­­ã®P=¶ìV͚Ãö„#¸$±­‡ñüKùT'¡ú0ŸÞÄÛoL¥ÐéDò¯I·g—ÒTœÅBå&´ÌÔTêՎåç̨dŸŸÇ³.‹ÙL¸š|Ÿ™‰­°ÐKBsñ¿/ÑhJ;¢â䭜ΙÂ{©¡+½ãåæQ¼ùÖxdœüøR?f®hdž]iaã§©<7w
!R*G)êØ
57
¥tT}y·¯¹Ð‘výÿrùÏâ¯VÒX5aø…ØŠƒ%cÇaî5™™S;!ådá˜ÇXÞì3.£“kÅ΢±ã(èò<oNéŽ^¶q"!©hµ·:	ÕGô=S˜qOU×B®=•z´“U2	û“
58
"-=u±ûf¥	
59
bρƒ8vì¶²;‚XÎ~Ì^«61¡
êJ›@…O~=Sæö·Ž½û\ÇUíŸèÂéo–—XÛs#ó× 2ÜDÏN5Š:¶B)U5%;ª¶œ8“N…ìÅ}ÏßUۚ±ŠyQŒÒ,¡
nÀƒc±sY¢Ç}°¦¯dw~O?҃ZF’ýˆkïsAª»J=C
60
!õô)"kÄR›ëõžXdtMRNŸB–U¸\ž;‚&-ü
61
cݧ>7z@Ï{ãxóÃUÐmb©Û×Ð_H¦jCœÖ?.Zá£QÕ8SEÿ/µ£ªóBýj]xŠLܧuŽ‚\Žt¦<ú`ÑzÅU€Ö?Óã¾8Ì{QZ”9ℷ:	Âõäɗߪê*סJMhQ1qMÚǐ#ÉNO)Z¾ùÀ)4u‰'š6oÎWŸ~‚Áè1ù)ÎVlO¥@=§½ç^èÊǚs€¿rÆs[Ð¥QβÒ>Ä=ò¹-3•_}ŸöÁ–ý=³–üÌs/ê¨Zìâc¹…bçì/Š­Ò7D¥ËbÚÒŗv¶\Ն&8ÌßãP87pnùê$דìô´ª®‚pªÔK޵4Æáp°îÛoéÙç>ýìsý%Élgâ>~Û´¬Œ4¢câÐhËîۓ8‹l9šiKVòò{ËÝÿ®¡Gtß|’Tj™]o-!³Ð‰ËšÌš7~"º×ŸöAqd!«=w¤Ý9ãC²
62
63
Sùú͍E±õáÈ7bîªM˜.@!çÔ^vr?Šì©Ã­_ØâýS™ýя˜.—•»|®“ BuWé8âÛ´ã‹`wظ³KwŽžpwàÔé4¨Õj
64
65
,Xm…lÛü+[^ËȇÕIDATOÓVmÑû Õ•Ð¶.ø‹ÈnoVby·ñw°qêc–^R¦Û!Ìu)ÙVâîÄsÃûTwGÕ­L~ta¡Füc:\ґ¶k?Þu辰%
£Ìcõìwxqà«8P\³Ÿ
66
¸;¹Îšr?O:$¼°‚qm¢.•4Œ~o+gÌfâ€×A¥#¶õp&¶hîSAª;©yûÁJzF6¹yEß]êûõëófü{÷_U}?~üuιçÎìEA)Ö=pP@­ZꦩŠ[õû+Š»‚¨*Ö­Eë¶u 8Š-Z·Š,e²î:ó÷Ç
—rƒ!	áý|<òàÞsÏýäó9ܜ÷ýlþ2ë	V}×üÀÇqX÷Ã
67
þûÎëøýúL—}zPTԕÒÒR6­]ͲÅ_®©¦°¸']‹KèÚ£„ôÌæç¡¥jêè£ùø;šÕøf‹bÏÐÜg¯¥ŸM!Dûؕ¿ÕI㷏ÈH‘—›Õö54UUéÚ£„‘§Žá³ïñÑûïPY^F,R‹?˜FfN¹…”LVn]»j¦­£?êН¾þȼÛ('B±÷i—uc4ÍCfN.‡E¿ý‡R½µ‚h¸Ó0ѽ:P:Ù9ääJÏ@ÓöŒåm$`	!Dûi—H¡(
68
Nzf6þ@¼.E˜FÇqPUÝëÃëó¡{}»¥fÖØúzBˆö÷ôýwµwD+ºüÆ¿¶éˆÕv­ú¨ªŠÏhvI+!ÄÞãœË'·wĪãwL	!„)€&„¢S€&Än´|ú™ÜøèÒäói§
ã]ÙlUˆÝbÏ>(Dyø¬cù¸²aÀIÛg*÷þmd«¤ß^¶6¶y¬4!v0xú+\Þoû氊Úz&²aë.r¢l\»<ùuKoï܈Jš;P=:º·ñZÔÔÑG1ôâsønþçD*7âëuJƒÍ_#kæ3û–{XUjP0p8£ÒíïŸvÚ0†Î™ÇðÜ@³i…WÏcö­3ù¡Ì$À±ŒJû”·oåÆÐ˜ä&¯5QÛ7y]ÒÄæ±[æ=ÊÂÈqŒþmÏÖºt»MíæR|Aq£½s":2éC¢…þûE>×L›Ã{‰’åÏñè7‰y6®eæU7‘ñ›[™õòÛLú]_žZ¸i×Òr"Üwå-ä~'³^šÇUç
fîÇ;OËßk$×Ìù³ÿùÇæS&Pk;ºõ1z<œzïÓÜþø‹üahb£ÚŠÿł7½g`GaÇʨU3I÷6¾Y¯ÛH@bßÞ0†+Εü¹ó™å
^?ê¢ãë6‡Õ9äˆ.ÉÍ_c[žf•Ý—=È|*guÝyóX“i•>ÍÊ Æ„dõ?‰³»ï<­ŸlòêÝù&¯¦¼ÄÝ÷ÞÌÕho[KÃdçg¶wFÄ ]›ƒ~/ûöîù“ãß®ü‘HLÚDûè;y&ãûd'ŸkÁœ¯çêÛ¿j
»:±ù«[ŽžöË{ݕ¤íôw5™Vt9zp¿çæï<­F7yµöìM^ã›p3
69
ñ© "‰æ´O@s]ܟ•«×²¥¬œ´PUU0M‹h<žØÀÒ±AQAib‹f!v=+ì¼Ü¿Oó÷ÁŠ}×àXõÆ(´<Z fäËÇJ×Ô6™–Qù&Óþ€ÉsvØäu›lÛQ¹v-åµEŲ’HM›79:¶MeE_.þÛ¶Y¼tÿýßg|øÑ§|üٗ,þî{4MçkTV”áØvó‰
70
ъËÄ4Œäe¦öô珥‡ýÿZ\€±õKž]¹u—òàÏK±»„ÇßY@å²×yv]M“ç»ÖVT½éM^Û<vËۏóÚ««w)mÁŽUãºq6­]ÍÆµ«)«Œã˜el\·¾½³&:¨6¯¡ÕTmÅçóQYUÍæÍ›ùqɗx5•lŸ‚ã8:ˆÅ‹“›Ïç£zk™¹y( ¦6í´a0gÇåÊ\ ŽlñG3¡Þs_îÌþû›}Ÿ¢˜4ãÿ˜}ÛE|ÊÇëëÂȃ»°pò ¨A®œ~=³nÿ—>`’ßÿXÎ>¨óµÆÿšÛäµ±Íc+>z¶öã”ßô؅î~ž@!…Ý·7™Z՛¨ˆ¤SÐeçM¯bïÕ¦­¦ª’Hm
jFUel^µŸWçÄѧ£ëzò¼-eå|½h	]ºíC4R‹¢ªdæì¼	è᳎å“pS_|‰"_b4TÕÒ«¹þæf=3q·–+Uí5©V¤îÂçÞ睼¾ãN
Åç<Émõž‡zŽbòœQ
Ω?%ûš¤žV¯¸öá’Ïÿ3áxG7u3W>é†×?4iLòaÁð+¹sø•
Þ1`ÊKÜÝDj‚ª¢ÕkDrTPÑ<2ÚQ4®MZÙ¦
dåäQ¾y#ß|ºÞ=÷áÔ³Ï%
71
¡¨Š¢àº.™YÙ¬øq-e›6™“ÇæõkIÏj~Çjn5>±ˆ›.úE•(5®CÑü2©¶ƒëh´V}ñ!fÿCÉé”.z‰gׯ¹ä€ü6ÍCG¢gv£H;ŠhӀVºi=%½û²lÑd¦§sêÙçJOo¨EÕÃIǏ`ÖÌûèÙ»/ß}ý)=úöov›™þœÈâë¯c͹ÿ¤ØÿÓ¢M8þ0®ùCЉזÝ~:s÷¹)çô“f|1Ÿ<<—uƒN¼š	cºò·›neɲMdþ5“o™L†'‘_³jÏÜ5ƒÏÿ€ëÍᗣ'1îwG'ÓúÅø³Y4ïÄ":7?úHƒ&G£rs§ßÃg‹Vá(>Š<—?Ýð»V¹Îb×t´
Z#ëßãî;¦·m”PwF\󃤆/D“Ú4 UlÙBŸ’b>x+‚¦ªøüþÖº¢‘½ztç͊
72
Œx¼Ù€æÍþç
}’9s¾à–IïRß}¹†?=ði±¥L9ï"f|q£§>ʄ<‹g/>ƒ‡ÞÃä‘ÅàZüíÒIDNøÓ¦ƒR½œ‡&\ÌSƒŸgìþy|øI·Î|2¹òC’k2çÒI„‡ÿ‰;§Œ$ ¬Y´l—ò+:¯¢“§p×Éí!öm:ÊQÕT-]FZf&¥eexêõ›5&-3“%ß/ǶLL£é	¢õ8y2ón`Ed×f­zÍXrÞìAü:?D|øåô+LCñdqôIÅly/±ZC¬|._ÖrÅïÅ§*x³úqք|ùèâíi]vòOƒ+{†oj¸ê‚ã	zTÕO!ûïR~…B$´i
-#3›-ë×Ñ¥k1áêêfûĺugóúu¨ª†ã¤6ATÏ8‚ñ‡gðèýÿãO§´<Eõš*ƒªJ 8”|®¥y°c‰‰¯VxŽUƔ?œ•|ÝuÂxCÉç]iö°"ßâ	i4Ø	±7»üÆ¿¶wĬMZá>=øaÙwü~Üx*Ë6'G"QtÝÓ`¤#À ýöãÕü`zF³Á¯¾!W^ÏcgNæÛã58î×âîö饱Š8ì³keÑýÑ|[¹å‘‡i*.5uÜÜ+ò&–Kb¹€Ê²Òö΂؃µi“cÏ~±,‹y¯¿Îñ'Ì?ž€`0ð“`öåâïøð½ùl-/¥hŸèÞÔWð„~ÉEÇæñôì%
Žžà½/kå[¿fî÷½=%üsÙ?¸‚™sß#b9€KÕºoùrEU³ïõçýžýC[˜ñÄÛD,׉±æëE»œ!„í0±zÿƒç¥ÇfcZGÉk³þ}>ÇC8%fÄùtá>ùàp(P^_˖¿Ù÷²)h§_ˆµýØI7_Ō›&0en>¡ì~Œ: ŸïjA‹fßϳ3îåºÓoÆB#«û†]25µ÷>pÏÜ5ƒkO»4ŞǵCökþ½B!Õæ-¯°+'ž}>ÿ}çu~\¶”>ÓeŸu¥´´”MkW³lñW„kªé»ßPòŠº’™“Ûl
íÂçÞoðÜÄ}¯7\£!Øó$nxì¤ÇŽ©÷xlj®<üÔ{ÞeÄCÜ=bûs=scoœÃØFò³cZÐpR­7kãn}œq¼W!D˵y@SU•®=Jyê>[ð½ÿ•åeÄ"µøƒidæä[PHɀÁdåæQе;¡ö¡íŠæ&ÕÍYBˆ½]»¬¶¯i2sr9tø(úí?”ê­DÃ5˜†‰îÕ	„ÒÉÈÎ!'¿€Pzš¶û³)J!ölíÐEÁãÑIÏÌÆ’×¥Óˆã8ªª¢{}x}>t¯o·×̄BtíºÁ§ªªøüfWB!š#Õ!„‚4!„‚4!„‚4!„‚4!„‚4!„‚4!„‚4!„‚4!„‚4!„‚4!„‚4!„‚4!„B«¬¶?õ²óZ#!Z|6…Ø{üì€ö—YO´F>„huòÙbïò³Úªï·F>„huòÙbï"}hB!:	hB!:	hB!:	hB!:	hB!:…V™‡&„MÙ²që\ɺV²þ‡•ÔVWàºn;ç¬!EQ’Ó2²èVқî%½éÖ³7EÝÛ1g"UЄ»Í'ÿ~‡o¼ÒÞÙh±ÚêJ¾ÿús¾ÿús†8šƒÑι͑€&„Ø-^yò!V,ù¦½³Ñ*¼ñ
73
V¯bô¹§t~Àç#+-HÀïÅ£i»9w{˶‰Æ*k#DãñVM[š¢Õ-|çÁ¬¸O8l…Å%0x`;æ,5_,þŽMk~à‹°fÅ÷¬Xò
ßyƒÃGœ¸Ó÷¦ü„^tŠeÛ¤‡‚Ô„#„#Qj#,˲ì¶(F‡`Ù6¶m£{<˜–…îñ ª*™éhªŸÚh¬Õ~—4!D«Ú´n5翞|>ì„S8ùÔ3ðé:(
74
¿šp„Õë6´c.*nɛnz(Hæ ý8ø°ÃyëŸ/³àÍ×X8ÿuJú¤¨¸¤Ñ4 	„±m‡P(€¦ªd¤…ðh>ŸMU±§
KÖ¾â†AeU5•U8¶ƒ©'ÂNm$‚ßçCÑ4PZ§+£…­j͊ïQU
UÕèÙo_;úW”•oeîõã(ßZÉä“%=äékÏ¥[Q—óï‚{ÿLm$·OßI$ãӇ¦°~Óf:òXz
œ,ÓÚU˛,{4¦ª¦6Y+«ØJÜ00-¿ÏGÀçëë{ÕO( /'›Ìôt\×!‹a×ÕPÑ(µÕ5X¦Ù*ƒ„”ýŽã–•WR]N¼ï‘¿þ섅{§}€õ?®`ÔicèVÒMÓX>÷.úœýGúô,&+#ƒp4ÚÎ9mÈq¶”UPV^ŽmYhîÁ¶6þ¸Š7_x€n={sڗ4šÆÖÒÍølÇÅ2
E¥_Ÿ²ÒÓñx<hj¢ro¢(
75
–eQYSÚu©­©FU5ü?‘pM×IÏÈBó¤Þh8iüµÉÇé!òr³¤ÉQѺʷlÄãÕÈÌÍCU,ˤûo.ň˜–…iYø¼ÞvÎiC
76
“Im8BuU%ß|„âß\‚ª¨¤çä$ËT¾ec“iD£tŸÛ40
®c&†iâVÛ¥ÃqŸ®ø©©®Â²LŒ¸‚¦{‰Çc¸Ñ@¨E­1Є­JQt=¬,ÓÄÅÅ2MÊß}ŠÜác1MÃ0	Ö}Cï(,Ë£ªø}^ª\—ÜãÎÁ0¼>–i&Ë´3F,Šª@ܲ°L3Y;1ÍD(Ó4
µÞ|·=Õ÷eØ¿¾æ´‚`³ç:®‹mÛÉ~C×M|TUE÷z1bQ\lûç‡{	hBˆVåõù’ãÑ®ã`[¡ÃNŶ,ÃÀ²,œŒøöÕû˜ýØ\–®Ü„'½¡¿:‹‰7L¤«/1 `êý©™ýî’À–…2œqï[œÌ>ͦ7ŒäM×q½Dú‘gàê:ñh¤A¹šL#šÅhÛ6Žmá8¢±8¡`Ûqðù¼°}EËÞzˆ‡Ÿxžo—­Áö¤ÓkÈQüvÂõŒ8  Åiµ°­DͳYŠB<nàº.ŽãຎmaÛ,Ë"àñúZüyhŒ4!D«òú¶×¼báÚÄ·sËÂúâ
´ƒN¡:!â÷§Þ—ôãó¹ôŽ%Lœ1›;Û£tÏÝ~	Œþ‘¼: ¦àºà:6–m³yÁLÆ_ùç̚Çه¥ÔoÅq]ˆ®ãà9àDìºà×6(W“i„É·xŸæØ„#Q2ÒÒPUEÇiY@[ýâ5Lœ±ˆq7ÞÊ5‡ï‡Ï®eù§oòò̏8êÁZ”Vkq3n‹Íž«ª
77
¦iâ8.±¸ã8‰kc[¸®K4&MoþËB*$ 	!Z•×H>‡k꾙۸ƒ‡ã¸–™èCGRâÚU\wû}×|~u`!¶i¢e•0æ¶çø|ø0¦Î»„ÿwL7,\ìXŒåoÜÉÿ÷cg¾ÊÉC²Rþ=¶ã`Û¶eã¸Êâwq~1
78
×u	‡kR
79
h±h×qq×upÇq°lÍU1̖5«¹öVn¼û-޹ëmN>¤KÝÑ,=†Ã\,ÛæÃéWó÷÷?¡¢&J°p¿ýãN98Qs»úØ¡rå|óæ'„+Öãë{7ß|ÞºñíÆÖ¯˜sË_ùè‹åتŸ^‡Žç¶[ÏO¼Vù5snºƒ¾^‰ãÍá°³&3iÜðD¾§îËCó–Äu­»î¶Zšãâ:.±h„´¬œ]—¦H@B´*_`{@‹F¢É¼¶ô߸ûÄvÓÀëMíöÝü›Liæb;õn JçÏôǗ`+ÄuaӻӘøü'Œà%F
Ênx~3ÃÄv}=®ã`8¥î¦Dñšï/ŠÇb¸®›‚î&ú‹×Å0M4UEka³Ztӓ”ZçÉÆ0oÞÓKFò—q·›¦±òÝ{¸aò¹ñÖ«¤k*.ðîÇyÜ{ï£h˜<>æ8f|:𫆀krר©u÷ß|AÕà‡¯—&~kq÷Ø	Ÿ4•n?µj3ƍcÖ¾¯ráÐüD¿˜ab©ýnëCsv¸6®ëÉÄj!Då«W“©³²ú
CwÁub±8ºGO)½HÍ
80
TO^Ë&¾Ã
81
zqcÕâqØüÖ[øŠÏä^!âñúwê‰Æã8¶]WƒÏ²0xD²¾jhñøöò&n؉òÆãqTMCS[6õ7\³
82
U/D5
šºíï;âHÀ!wèväeôןã½ÍՌÊ
àG_8ӈcх9ï­#¶o&±ÒÇù¼¦€9çý
83
Í6‰Û
84
]÷H,'VúŸTwáocŽÓÀ	öd̄L}ðÆÞwL¢Éш‹§VÛq\ÛúsÎê_³ŸKš¢UÕ¯¡Uo­¨{䢯øªkv´m¢)~37éŽcΧ,%¤5!¸uU
ž´|¢±¶ý¯{€¬YWqõŸýÜqÓ8¼-Qh‰þ Çu³Ï‘è$n¼F,JFvóÍbF²LnÝà7Y^lMmي¶ºŽñªbµñ²,ýçl^~keµ‰Z`mÄ¢W4ŽaxpL×NÖµ5†a˜D*ã	î¦ÉŽ=a‘ʯq¬R®»àÌä1׉à
–bfbTbÝhՔÊQWSÞvm·]¨Í~>	hBˆVåóׯ¡mï¿2zŽžøzŽm;É¡ìÍQ3~C®þ(O}¶‰ñä'»v5Ï]FÏ+{aš.Š’Ë¹Óâá‰à†›=Lýóïð¤Ól§îF[׿]¹wÐqÉrÔ/WSŒú54¶5¯¹u#ø\·e“ª=Y¿%[й_máÜ!y
_t]Œêw˜þ设ÿúfpïïFâØ‰þ-×M“m}]¶l°þþX‘wˆYöO¯‘¯/š¯’gßώ/Y¶åh§Ø‡Æ¶Ùökë²½†f´b
M–¾B´ª`(-ù¯·ˆw庘uC¾Sù1 ÆÉÿn¹‚ù/¡&gë†ïxáÖِy瘋aš8.8–‰¥pÞô™.‚ïzŽ˜‘Úï±LÓ2ë*.FïÓyG£
ÊՔúµ
¥^y­äp~Ó4Sþ±œ Î?Šo¹Š·?ü‚ÊšáªR¾ýðf]?#VŽêÉ¢K¶Ó4)ýêI¾›Ø¦…Y7pÛãDz.®“x®eœÎ àî}òmªcF¼–¾ü*ñZæ™ö¯äþgߥ*j`šå«ñù²òĈEÀN±¶m'æâYVòÚ*õ¤ÔЄVý¾aÄ@EQ1úYwÃIÜä-+õ]FÜÀž§yõ‰)¼°¾5˜G߃G0yúïÑËI%wíDà@ëÆ¸iw3çÊ«¸ý~×^râOj;rëò.(
85
úŠÿ ì7”D9vȶ—7žXr$Qèdʎã¢(‰&-]³°päu\|Ž×^œÆkwoÄñ¤Ñ­ÿ/vÖÅèÙٌ>âsn›4œœ4‚Ýeÿ4ob¡»m"óölj۞«œ7íVžŸù {7®æ£ûг™4h  2vú¼<{7?
ËUÉìڗÃ/øs£éîôºÖ•¹þµM\¥îÚ¶Þ2²–£¢Um[Çàõ¹sö„+‰†ÃŸ¿Ž:d$¡ôô¶ìU}–i®©Æ2
|þ Pˆg¼‡_9?yN·ž½}ï#wÝÄéã/#R[‹âѽ¾¼mÉ2Mj««°L¯/@0-™ÅÑ¿>•ÂîŤed¦œ–¬å(„Øíê
86
1âqP<ºŽ=dd²Öâºõ*0͘tú¨fϹï…y»”×ú\\EEÓ4âŸÎÃsԙ‰Úe<Þ \M1âqT5ñ~UÕ ^½p[ú-Ñ\Ù[£Üma{ÙTUEUµºk”¸¶­Eš¢UùÁd³šæñ`Äbè^/ï¿LÚá§oŸ§Õl#`½Ï7Ón…GÐ<ۚUÍCèðӋÇch>" );É·i¸€G÷b×­„±-вýƞj~›+{k”{w«ÿÅEQ•äÄÝ(˜f󫍤Jš¢Ueef±m„y~Q7Ê7o¤¨G	ù#ÎÃ4ÛÆQmt=µyhm%±i"Hxt
ÿšCñèË(ß¼†ü¢näfg‰~(«‰@â÷ˆEÂøAlۋmY‰>$Ç-1d_AI¹vÚ)(
87
Z]Ù]—ľr^
î!
·xnÞÎÈ(G!D«
88
äSTÏ!njäÝ×^ÀˆÅXûÊl|~?›ßz×uXôÄmx½z‡ùwáìëÉÍÎâ£Y7žžNß³®Â2MÞ}í9fd²LÁ`ÓM¹EE”m܊‚×çãë8ŽS·JF¢¹mïºíjš†O×ñyu<š†G×ѽ^E¥lã¡tÔ&æØµ”
89
B´ª´ Ÿ%ÅÉç3ﻗO>˜Ïð“O£Ë>=ð‚(°Š
90
ÉÊH'à÷óýŠ•lZó#o¿ü,ÎÄIW$Ï[úÃj#5_¹t	óžš3/œˆ×ﯛsg£(u}Gš'qS÷´l‚õžÌv\|ºNNv&áH„p$šØÍ 6̳ÝCßACè=hºtíN0-=åtePˆb·«Äذ¥œ®¹Lœt¯õéÏÿޛy/Í¥¦ª ÅÃ×w·úA6=3‹^qڗrʉÇ'oØRÞd0è=`û=ˆgfMÿIwÝDÓ£åº-š²°§Ó<.Ê·&þßÃápòËB^Q7ºö(Áç÷ÿìÍ=AúЄ»Á†Òr‚Y鉹[§œx|ƒÀ°'ª¬©eCiy³çsÒ©tëՇOޛÇÚg'Mmµÿ½…×ç'·°¿8ˆn={JK'”ž'ŵ=wFšb·X±fEù9t+Èkþäný–26–V4b>÷£¤ï@"µ5ÔÖTÅplk•ØT̓Ïï'-=“`Z:ª–z3l¯ƒ=.M±Ûl,­ ª&LZ(@z0HZ(€Þ‚W{1m›Úp”šH„Úp”H¬es¥%1<=-#_ €½;twvªª¢y<èºEUSîWí5p0S/;¯Ñ×$ 	!v«H,N$gKye{g¥M)Š‚¢iø´æ'd‹Ôì,˜ÛB±¨Ìι|r£çH@BÑ¡í̚êC“€&„¢Ãj,˜5Õì(M!D‡Ô’`ЄBt@;f҇&„bÐ\0“>4!„^*ÁLúЄBth?'˜4!„@K‚™ô¡	!„èZ̚êC“ýЄBìqÛMðû¼hšTքBìY4MÅïóàq͖Q‹bÇp-×uY¿zU;gQ!„hšc†@ãÁ24\<‹>~E)èy ‹mmãØ6VÿÐÞyB!šä˜4ME#6Y³d¾âp¬(¶i ¢àâH@BÑ¡©¨®Šmº8j]“#@Ùº%Š'çúý>TEaƒ49
91
!„èÀT7†k¹ÄbqjJËÅ­·'¸ª]€Â¢.í”E!„¢y›6nÀ1#É­®´äAEùéA!„¢ƒp]WÙñØÿ0Ö
í
t^óIEND®B`‚
(-)tdeaddons/kate/CMakeLists.txt (+1 lines)
Lines 27-32 Link Here
27
add_subdirectory( insertcommand )
27
add_subdirectory( insertcommand )
28
add_subdirectory( make )
28
add_subdirectory( make )
29
add_subdirectory( helloworld )
29
add_subdirectory( helloworld )
30
add_subdirectory( katesort )
30
31
31
#### other data #################################
32
#### other data #################################
32
33
(-)tdeaddons/kate/Makefile.am (-1 / +1 lines)
Lines 1-6 Link Here
1
SUBDIRS = scripts htmltools kpybrowser modeline openheader textfilter xmltools \
1
SUBDIRS = scripts htmltools kpybrowser modeline openheader textfilter xmltools \
2
	xmlcheck filelistloader cppsymbolviewer tabbarextension filetemplates \
2
	xmlcheck filelistloader cppsymbolviewer tabbarextension filetemplates \
3
	snippets insertcommand make helloworld
3
	snippets insertcommand make helloworld katesort
4
4
5
app_DATA = kate-plugins.desktop
5
app_DATA = kate-plugins.desktop
6
appdir = $(kde_appsdir)/.hidden
6
appdir = $(kde_appsdir)/.hidden
(-)tdeaddons/kate/katesort/CMakeLists.txt (+38 lines)
Line 0 Link Here
1
# This file is genereted by trinity-automake-cmake-convert script by Fat-Zer
2
3
include_directories(
4
  ${CMAKE_BINARY_DIR}
5
  ${CMAKE_CURRENT_BINARY_DIR}
6
  ${CMAKE_CURRENT_SOURCE_DIR}
7
  ${TDE_INCLUDE_DIR}
8
  ${TQT_INCLUDE_DIRS}
9
)
10
11
link_directories(
12
  ${TQT_LIBRARY_DIRS}
13
)
14
15
16
##### katesortplugin (kpart) ##############
17
18
tde_add_kpart( katesortplugin AUTOMOC
19
  SOURCES plugin_sort.cpp sortdialog.cpp sortdialoglayout.ui
20
  LINK kateinterfaces-shared
21
  DESTINATION ${PLUGIN_INSTALL_DIR}
22
)
23
24
25
##### icons #####################################
26
27
tde_install_icons( katesort )
28
29
30
##### other data ################################
31
32
install( FILES plugin_sort.rc
33
  DESTINATION ${DATA_INSTALL_DIR}/kate/plugins/sort
34
)
35
36
install( FILES katesort.desktop
37
  DESTINATION ${SERVICES_INSTALL_DIR}
38
)
(-)tdeaddons/kate/katesort/Makefile.am (+21 lines)
Line 0 Link Here
1
INCLUDES = $(all_includes)
2
METASOURCES = AUTO
3
4
KDE_ICON = AUTO
5
6
# Install this plugin in the KDE modules directory
7
kde_module_LTLIBRARIES = katesortplugin.la
8
9
katesortplugin_la_SOURCES = plugin_sort.cpp sortdialog.cpp sortdialoglayout.ui
10
katesortplugin_la_LIBADD = -lkateinterfaces
11
katesortplugin_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries)
12
13
pluginsdir = $(kde_datadir)/kate/plugins/sort
14
plugins_DATA = plugin_sort.rc
15
16
17
messages: rc.cpp
18
	$(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
19
	$(XGETTEXT) *.cpp -o $(podir)/katesort.pot
20
noinst_HEADERS = sortdialog.h sortdialoglayout.h
21
kde_services_DATA = katesort.desktop
(-)tdeaddons/kate/katesort/hi16-action-katesort.png (+7 lines)
Line 0 Link Here
1
‰PNG
2
3
IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“	pHYs
×
×B(›xtIME×1#S˜’IDAT8˽‘=H\Q…Ï™ûÞÛ®Â[5„eÑ"6–	›ÒÎÄR$HÜÊ@ ‚EÄÄ2DA°±”àb!Ȳ•6ba!Š
4
ÑJ‚E‚EB*uƒ?ogÓøw—5$Bf¸p™Ã7ÃÌ1¨Š"³-ƔŽTOð·ñÖq2?â>ù½Ãó’a]ÒÒÅwÌpˆ¾àëD"!5p·ë>=
5
6
¨š'÷¬µ1à'®áŠŠüŠÇãÑ
7
¸=iÝ&¿…°:'²”L&É%®Aos¿ªßÐϓ»wáð:bÌ8³õHS¡ðäX™$§Nb(¬“‡3äÈ×Réšc< ëºŸ«pú"™µûV<0þSƒR?§–ý˜@¡½,4Á\¾¿¥Re^Vë1KæÌ°ÃEù|)‹²éû¾w¯©TŠ2#Y•07ø%êG›kl<®n½táÖFkmŒËÜ)ãG8sŸ¹5;[k—dï Ù÷†ìK‹¤C-ò8ÒÊ-žâŠÎ€óêŸìòz¼çòA¦«ë¿Ç«äٍòIEND®B`‚
(-)tdeaddons/kate/katesort/hi32-action-katesort.png (+7 lines)
Line 0 Link Here
1
‰PNG
2
3
IHDR  szzôsRGB®ÎébKGDÿÿÿ ½§“	pHYs
×
×B(›xtIME×/iv»ä›IDATXÃíVMh\Uþî½ïÝ÷3™ç¼™‰¥ajˆ¬:4›bˆ.ŠbDQé"-ÓÙº©Q¡ELRЪ.$¸	hü‹º¡nª¸PìB¡´DJ3¦¦3͝™7÷^™&Ó¼d’Æf¡çr6÷½ÃùÎwþ.°‰¤Óiö¥ŸÇ"‘°’1ÍÉ@>Oéœïû±Ûê|¯eý
4
PK€z„±™ÁÁAº“>H؇×=ð¶?=«µ×ôø' ŽpþÚ|­6Ùù?çüÉ`4x}ÌÆ¥PȤ»;R(*]¡ŠÅbw¾Dé…* T›J@}T’¶=ÚiÃvç¡PmÓZC'Pp]÷Ž®œ÷õõY‡û±Øá¼© N²ØÓÓ3¸€ÃNà
5
ÔºçÃpkò™ËåÈ]ùü»ïIy(xAëÞ£++3‰DbmQª[,ˆ4çÏý
6
2$úvýP£Œ}ÕßßÏZüµuZâ;ӟ"ºqÞÔó€Ì˜æD©TãÛ`€Þóz¹<ýŒÖV·l)wäTœ¼¿·wr{)0˜É7¦Ê@0NÈ¢ˆ §ur_G@àB–KÀŠX@KÖjo,ÚÖwÂÛË}6›%B!š=½o(¯Gû%@†q¬Ý^±Ú†Ûì‚ééií8Çh­u5l#FÝ~ç8Îj{­¿sc•î6€›xÙ
øÀ€Ü ë;€ „°x<ñ</222b!@41Z‘uV(çœ5‡Ýðð°éyžÛÚ[€Æ}Ëû—Çõã:rVžµÝI—éӚ 7Äè	D‹Åâ%wÂe `úa-é=àéuÿ7M3õiÈ(¾°:гö;‡ï@†Œß°# èËô¢ïû{B£ÜÀ|@>Ÿ¿—¿…¹-@¨C‘Ó¤‰DlHs7```€±‡ØX칄Â,j¶oÞ4Ï݀d2éÑ,ýbçP7Óæ«RÊ[ë‚Î}³´´tÝýÖ#ãäjèƒ$°ãì˃{N0ÆÐS@¹¨
7
 D›þÖÁ@k%GCø+7UDŠ£ç‰„ú$ë˲JI9û‹Öœ¶Ñ¤\À»X¯¯.¢$ÎX¯X'«éêûx°a¢ò)¸³îصòµëÿúX"Ɛ1…ˍè¿F`Gí§nëlO¥R6c?cŠïçoîʂ‰Çã):B?Îd2›VÜ?#¬mwFIEND®B`‚
(-)tdeaddons/kate/katesort/katesort.desktop (+10 lines)
Line 0 Link Here
1
[Desktop Entry]
2
Type=Service
3
ServiceTypes=Kate/Plugin
4
X-TDE-Library=katesortplugin
5
X-Kate-Version=2.5
6
Name=Kate Sort
7
Name[cs]=Kate Řazení
8
Comment=Sort file or selection
9
Comment[cs]=Seřadí soubor nebo výběr
10
Author=Marián Kyral, mkyral@email.cz
(-)tdeaddons/kate/katesort/plugin_sort.cpp (+308 lines)
Line 0 Link Here
1
/***************************************************************************
2
 *   Copyright (C) 2007 by Marián Kyral                                    *
3
 *   mkyral@email.cz                                                       *
4
 *                                                                         *
5
 *   This program is free software; you can redistribute it and/or modify  *
6
 *   it under the terms of the GNU General Public License as published by  *
7
 *   the Free Software Foundation; either version 2 of the License, or     *
8
 *   (at your option) any later version.                                   *
9
 *                                                                         *
10
 *   This program is distributed in the hope that it will be useful,       *
11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13
 *   GNU General Public License for more details.                          *
14
 *                                                                         *
15
 *   You should have received a copy of the GNU General Public License     *
16
 *   along with this program; if not, write to the                         *
17
 *   Free Software Foundation, Inc.,                                       *
18
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19
 ***************************************************************************/
20
21
22
#include "plugin_sort.h"
23
#include "sortdialog.h"
24
25
#include <tdeaction.h>
26
#include <tdelocale.h>
27
#include <kstandarddirs.h>
28
#include <map>
29
#include <ntqregexp.h>
30
31
class PluginView : public KXMLGUIClient
32
{
33
  friend class KatePluginSort;
34
35
  public:
36
    Kate::MainWindow *win;
37
};
38
39
extern "C"
40
{
41
  void* init_katesortplugin()
42
  {
43
    TDEGlobal::locale()->insertCatalogue("katesort");
44
    return new KatePluginFactory;
45
  }
46
}
47
48
KatePluginFactory::KatePluginFactory()
49
{
50
  s_instance = new TDEInstance( "kate" );
51
}
52
53
KatePluginFactory::~KatePluginFactory()
54
{
55
  delete s_instance;
56
}
57
58
TQObject* KatePluginFactory::createObject( TQObject* parent, const char* name, const char*, const TQStringList & )
59
{
60
  return new KatePluginSort( parent, name );
61
}
62
63
TDEInstance* KatePluginFactory::s_instance = 0L;
64
65
KatePluginSort::KatePluginSort( TQObject* parent, const char* name )
66
    : Kate::Plugin ( (Kate::Application*)parent, name )
67
{
68
}
69
70
KatePluginSort::~KatePluginSort()
71
{
72
}
73
74
void KatePluginSort::addView(Kate::MainWindow *win)
75
{
76
    /// @todo doesn't this have to be deleted?
77
    PluginView *view = new PluginView ();
78
79
     (void) new TDEAction ( i18n("Sort"), 0, this,
80
                      SLOT( slotSort() ), view->actionCollection(),
81
                      "edit_insert_sort" );
82
83
    view->setInstance (new TDEInstance("kate"));
84
    view->setXMLFile("plugins/sort/plugin_sort.rc");
85
    win->guiFactory()->addClient (view);
86
    view->win = win;
87
88
   m_views.append (view);
89
}
90
void KatePluginSort::removeView(Kate::MainWindow *win)
91
{
92
  for (uint z=0; z < m_views.count(); z++)
93
    if (m_views.at(z)->win == win)
94
    {
95
      PluginView *view = m_views.at(z);
96
      m_views.remove (view);
97
      win->guiFactory()->removeClient (view);
98
      delete view;
99
    }
100
}
101
102
void KatePluginSort::slotSort()
103
{
104
  Kate::View *kv = application()->activeMainWindow()->viewManager()->activeView();
105
106
  if (! kv)
107
    return;
108
109
  // display dialog part
110
  SortDialog m_sortDialog;
111
  
112
  // if only part of one row is selected. update By column part of dialog
113
  if (! kv->getDoc()->selection().isEmpty())
114
  {
115
    if (kv->getDoc()->selStartLine() == kv->getDoc()->selEndLine() &&
116
        kv->getDoc()->lineLength(kv->getDoc()->selStartLine()) != -1 )
117
    {
118
      uint sel_sc = kv->getDoc()->selStartCol() + 1;
119
      uint sel_ec = kv->getDoc()->selEndCol() + 1;
120
      if (! (sel_sc == 0 && (int) sel_ec == kv->getDoc()->lineLength(kv->getDoc()->selStartLine())))
121
      {
122
        m_sortDialog.m_checkBoxByCol->setChecked(true);
123
        m_sortDialog.m_lineEditStartCol->setText(TQString::number(sel_sc,10));
124
        m_sortDialog.m_lineEditEndCol->setText(TQString::number(sel_ec,10));
125
      }
126
    }
127
    kv->getDoc()->clearSelection();
128
  }
129
  if (m_sortDialog.exec() == TQDialog::Rejected)
130
  return;
131
132
  if (kv->getDoc()->selection().isEmpty())
133
    kv->getDoc()->selectAll();
134
  if (kv->getDoc()->selection().isEmpty())
135
    return; // Nothing to sort !
136
137
  uint sel_sl = kv->getDoc()->selStartLine();
138
  uint sel_el = kv->getDoc()->selEndLine();
139
  if (kv->getDoc()->selStartCol() > 0 && kv->getDoc()->selStartCol() == kv->getDoc()->lineLength(sel_sl))
140
    sel_sl++ ;
141
  if (kv->getDoc()->selEndCol() == 0 && kv->getDoc()->lineLength(sel_el) >0)
142
    sel_el-- ;
143
144
  // split string to lines
145
  TQStringMultiMap strMLines; // alphabetical sort multimap
146
  LongMultiMap longMLines;     // numerical sort multimap
147
148
149
  // Map filling...
150
  TQString skey;
151
  TQString sdata;
152
  int ikey, non_num_ind;
153
  TQRegExp rx("[^0-9]"); // Search regexp for not number character
154
  for (uint i = sel_sl; i <= sel_el; i++)
155
  {
156
    sdata = kv->getDoc()->textLine(i);
157
    skey  = sdata;
158
    if (m_sortDialog.m_checkBoxByCol->isChecked())
159
    {
160
      skey = skey.mid(m_sortDialog.m_lineEditStartCol->text().toInt() - 1,
161
                      m_sortDialog.m_lineEditEndCol->text().toInt() - m_sortDialog.m_lineEditStartCol->text().toInt());
162
//       tqDebug("skey: %s", skey.ascii());
163
    }
164
165
//      tqDebug("\tLine: %d",i);
166
//      tqDebug("Key: %s, Line content: %s", skey.ascii(),sdata.ascii());
167
    if (m_sortDialog.m_radioButtonAlphaSort->isChecked())
168
    {
169
      if (m_sortDialog.m_checkBoxCase->isChecked())
170
      {
171
        // Case sensitive sort
172
          strMLines.insert(std::pair<TQString, TQString>(skey ,sdata));
173
      }
174
      else
175
      {
176
        // Case insensitive sort
177
          strMLines.insert(std::pair<TQString, TQString>(skey.lower(), sdata));
178
      }
179
    }
180
    else
181
    {
182
      // Numeric sort
183
      skey = skey.stripWhiteSpace();
184
      if (skey.toLong() == 0)
185
      { // key is not number
186
        non_num_ind = skey.find(rx,0);
187
        if (non_num_ind != -1)
188
        { // beginning of key is number
189
//           tqDebug("non_num_ind: %d",non_num_ind);
190
          skey.truncate(non_num_ind);
191
        }
192
        else
193
        {
194
          skey = "0";
195
        }
196
      }
197
//       tqDebug("Key: %s",skey.ascii());
198
      longMLines.insert(std::pair<long, TQString>(skey.toLong(), sdata));
199
    }
200
  }
201
202
  // Insert result back to document
203
  // Remove selection
204
  kv->getDoc()->removeText(sel_sl,0,sel_el,kv->getDoc()->lineLength(sel_el));
205
//  kv->updateView(false);
206
207
  TQStringMultiMap::iterator smit, smsit, emsit;
208
  LongMultiMap::iterator lmit, slmit, elmit;
209
  bool fasc;
210
  uint i=sel_sl; // insert start line
211
  bool first=true; // First line flag
212
  TQString prevLine; // Store previous line (for unique purpose)
213
214
  if (m_sortDialog.m_radioButtonAlphaSort->isChecked())
215
  {
216
    if (m_sortDialog.m_radioButtonAsc->isChecked())
217
    {
218
    // Ascendent
219
      smsit=strMLines.begin();
220
      emsit=strMLines.end();
221
      fasc=true;
222
    } //m_sortDialog.m_radioButtonAsc->isChecked()
223
    else
224
    {
225
    // Descendent
226
      smsit=strMLines.end();
227
      smsit++;
228
      emsit=strMLines.begin();
229
      emsit--;
230
      fasc=false;
231
    } //m_sortDialog.m_radioButtonAsc->isChecked()
232
    for( smit=smsit; smit != emsit; fasc ? ++smit : --smit )
233
    {
234
      sdata = smit->second;
235
      skey = smit->first;
236
//       tqDebug("Key: %s, Line content: %s", skey.ascii(),sdata.ascii());
237
238
      if (m_sortDialog.m_checkBoxUnique->isChecked())
239
      {
240
        if ( prevLine.compare(sdata) != 0 || first ) //remove duplicities
241
        {
242
//           tqDebug("Inserting line: %d",i);
243
          first = false;
244
          prevLine = sdata;
245
          kv->getDoc()->insertLine(i, sdata);
246
          i++;
247
        }
248
      } // m_sortDialog.m_checkBoxUnique->isChecked()
249
      else
250
      {
251
        prevLine = sdata;
252
//         tqDebug("Inserting line: %d",i);
253
        kv->getDoc()->insertLine(i, sdata);
254
        i++;
255
      } // m_sortDialog.m_checkBoxUnique->isChecked()
256
    } //for
257
  } //m_sortDialog.m_radioButtonAlphaSort->isChecked()
258
  else
259
  {
260
    if (m_sortDialog.m_radioButtonAsc->isChecked())
261
    {
262
    // Ascendent
263
      slmit=longMLines.begin();
264
      elmit=longMLines.end();
265
      fasc=true;
266
    } //m_sortDialog.m_radioButtonAsc->isChecked()
267
    else
268
    {
269
    // Descendent
270
      slmit=longMLines.end();
271
      ++slmit;
272
      elmit=longMLines.begin();
273
      --elmit;
274
      fasc=false;
275
    } //m_sortDialog.m_radioButtonAsc->isChecked()
276
    for( lmit=slmit; lmit != elmit; fasc ? ++lmit : --lmit )
277
    {
278
      sdata = lmit->second;
279
      ikey = lmit->first;
280
281
//       tqDebug("Key: %d, Line content: %s", ikey,sdata.ascii());
282
      if (m_sortDialog.m_checkBoxUnique->isChecked())
283
      {
284
        if ( prevLine.compare(sdata) != 0 || first ) //remove duplicities
285
        {
286
//           tqDebug("Inserting line: %d",i);
287
          first = false;
288
          prevLine = sdata;
289
          kv->getDoc()->insertLine(i, sdata);
290
          i++;
291
        }
292
      } // m_sortDialog.m_checkBoxUnique->isChecked()
293
      else
294
      {
295
        prevLine = sdata;
296
//         tqDebug("Inserting line: %d",i);
297
        kv->getDoc()->insertLine(i, sdata);
298
        i++;
299
      } // m_sortDialog.m_checkBoxUnique->isChecked()
300
    } //for
301
  }
302
  // Delete last blank line
303
  kv->getDoc()->removeLine(i);
304
305
}
306
307
#include "plugin_sort.moc"
308
(-)tdeaddons/kate/katesort/plugin_sort.h (+73 lines)
Line 0 Link Here
1
/***************************************************************************
2
 *   Copyright (C) 2007 by Marián Kyral   *
3
 *   mkyral@email.cz   *
4
 *                                                                         *
5
 *   This program is free software; you can redistribute it and/or modify  *
6
 *   it under the terms of the GNU General Public License as published by  *
7
 *   the Free Software Foundation; either version 2 of the License, or     *
8
 *   (at your option) any later version.                                   *
9
 *                                                                         *
10
 *   This program is distributed in the hope that it will be useful,       *
11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13
 *   GNU General Public License for more details.                          *
14
 *                                                                         *
15
 *   You should have received a copy of the GNU General Public License     *
16
 *   along with this program; if not, write to the                         *
17
 *   Free Software Foundation, Inc.,                                       *
18
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19
 ***************************************************************************/
20
21
22
#ifndef _PLUGIN_SORT_H_
23
#define _PLUGIN_SORT_H_
24
25
#include <kate/application.h>
26
#include <kate/documentmanager.h>
27
#include <kate/document.h>
28
#include <kate/mainwindow.h>
29
#include <kate/plugin.h>
30
#include <kate/view.h>
31
#include <kate/viewmanager.h>
32
33
#include <klibloader.h>
34
#include <tdelocale.h>
35
#include <map>
36
37
#include "sortdialog.h"
38
39
class KatePluginFactory : public KLibFactory
40
{
41
  Q_OBJECT
42
43
  public:
44
    KatePluginFactory();
45
    virtual ~KatePluginFactory();
46
47
    virtual TQObject* createObject( TQObject* parent = 0, const char* pname = 0, const char* name = "TQObject", const TQStringList &args = TQStringList() );
48
49
  private:
50
    static TDEInstance* s_instance;
51
};
52
53
class KatePluginSort : public Kate::Plugin, Kate::PluginViewInterface
54
{
55
  Q_OBJECT
56
57
  public:
58
    KatePluginSort( TQObject* parent = 0, const char* name = 0 );
59
    virtual ~KatePluginSort();
60
61
    void addView (Kate::MainWindow *win);
62
    void removeView (Kate::MainWindow *win);
63
64
  public slots:
65
    void slotSort();
66
67
  private:
68
    TQPtrList<class PluginView> m_views;
69
    typedef std::multimap<TQString,TQString> TQStringMultiMap;
70
    typedef std::multimap<long,TQString> LongMultiMap;
71
};
72
73
#endif // _PLUGIN_SORT_H_
(-)tdeaddons/kate/katesort/plugin_sort.rc (+14 lines)
Line 0 Link Here
1
<!DOCTYPE kpartgui>
2
<kpartplugin name="sort" library="katesortplugin" version="1">
3
<MenuBar>
4
 <Menu name="tools"><Text>&amp;Tools</Text>
5
  <Action name="edit_insert_sort"/>
6
 </Menu>
7
</MenuBar>
8
<ToolBar name="extraToolBar">
9
  <Action name="edit_insert_sort"/>
10
</ToolBar>
11
<ActionProperties>
12
  <Action icon="katesort" name="edit_insert_sort" />
13
</ActionProperties>
14
</kpartplugin>
(-)tdeaddons/kate/katesort/sortdialog.cpp (+144 lines)
Line 0 Link Here
1
/***************************************************************************
2
 *   Copyright (C) 2007 by Marian Kyral                                    *
3
 *   mkyral@email.cz                                                       *
4
 *                                                                         *
5
 *   This program is free software; you can redistribute it and/or modify  *
6
 *   it under the terms of the GNU General Public License as published by  *
7
 *   the Free Software Foundation; either version 2 of the License, or     *
8
 *   (at your option) any later version.                                   *
9
 *                                                                         *
10
 *   This program is distributed in the hope that it will be useful,       *
11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13
 *   GNU General Public License for more details.                          *
14
 *                                                                         *
15
 *   You should have received a copy of the GNU General Public License     *
16
 *   along with this program; if not, write to the                         *
17
 *   Free Software Foundation, Inc.,                                       *
18
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19
 ***************************************************************************/
20
21
22
#include "sortdialog.h"
23
#include "tdeconfig.h"
24
#include <ntqwhatsthis.h>
25
26
SortDialog::SortDialog ( TQWidget* parent, const char* name, bool modal, WFlags fl )
27
		: sortdialoglayout ( parent,name, modal,fl )
28
{
29
  // set labels
30
  TQWhatsThis::add(m_radioButtonAsc,i18n(
31
    "Sort in ascending order "
32
    "(from A to Z or 0 to 9)."));
33
  TQWhatsThis::add(m_radioButtonDesc,i18n(
34
    "Sort in descending order "
35
    "(from Z to A or 9 to 0)."));
36
  TQWhatsThis::add(m_checkBoxCase,i18n(
37
    "Check this for case sensitive sort."));
38
  TQWhatsThis::add(m_checkBoxUnique,i18n(
39
    "Check this to removed all duplicated records."));
40
  TQWhatsThis::add(m_checkBoxByCol,i18n(
41
    "Check this for sorting by specific column.\n\n"
42
    "If a part of one line is selected, "
43
    "this checkbox is automatically selected. "
44
    "Start and end fields are filled according to selection."));
45
  TQWhatsThis::add(m_lineEditStartCol,i18n(
46
    "Start column of the sorting area."));
47
  TQWhatsThis::add(m_lineEditEndCol,i18n(
48
    "End column of the sorting area."));
49
  TQWhatsThis::add(m_radioButtonAlphaSort,i18n(
50
    "Alphabetical sorting (A-Z)."));
51
  TQWhatsThis::add(m_radioButtonNumSort,i18n(
52
    "Numeric sorting (0-9)"));
53
54
  config_load();
55
}
56
57
SortDialog::~SortDialog()
58
{}
59
60
/*$SPECIALIZATION$*/
61
void SortDialog::reject()
62
{
63
	TQDialog::reject();
64
}
65
66
void SortDialog::accept()
67
{
68
	if (m_checkBoxByCol->isChecked())
69
  {
70
    if (m_lineEditStartCol->text().isEmpty() ||
71
        m_lineEditStartCol->text().toInt() == 0 ||
72
        m_lineEditEndCol->text().isEmpty() ||
73
        m_lineEditEndCol->text().toInt() == 0)
74
    {
75
      TQMessageBox::warning(this,i18n("Error"),
76
                                i18n("Fields:\n\"Starting at\" and \"Ending at\"\nhave to contains numbers."),
77
                                i18n("OK"));
78
      return;
79
    }
80
  }
81
  config_save();
82
  TQDialog::accept();
83
}
84
85
int SortDialog::exec()
86
{
87
  return TQDialog::exec();
88
}
89
90
void SortDialog::toggledCol()
91
{
92
   if (m_lineEditStartCol->isEnabled())
93
   {
94
     m_lineEditStartCol->setEnabled(false);
95
     m_lineEditEndCol->setEnabled(false);
96
   }
97
   else
98
   {
99
     m_lineEditStartCol->setEnabled(true);
100
     m_lineEditEndCol->setEnabled(true);
101
   }
102
}
103
104
void SortDialog::toggledType()
105
{
106
  if (m_radioButtonAlphaSort->isChecked())
107
    m_checkBoxCase->setEnabled(true);
108
  else
109
    m_checkBoxCase->setEnabled(false);
110
}
111
112
void SortDialog::config_load ()
113
{
114
//   tqDebug("config_load()");
115
  TDEConfig *config = new TDEConfig("katesortpluginrc");
116
  m_radioButtonAsc->setChecked(config->readBoolEntry("Asc",true));
117
  m_radioButtonDesc->setChecked(config->readBoolEntry("Desc",false));
118
  m_radioButtonAlphaSort->setChecked(config->readBoolEntry("Alpha",true));
119
  m_radioButtonNumSort->setChecked(config->readBoolEntry("Num",false));
120
  m_checkBoxCase->setChecked(config->readBoolEntry("Case",false));
121
  m_checkBoxUnique->setChecked(config->readBoolEntry("Unique",false));
122
  m_checkBoxByCol->setChecked(config->readBoolEntry("By col",false));
123
  m_lineEditStartCol->setText(config->readEntry("Start col"));
124
  m_lineEditEndCol->setText(config->readEntry("End col"));
125
}
126
127
void SortDialog::config_save ()
128
{
129
//   tqDebug("config_save()");
130
  TDEConfig *config = new TDEConfig("katesortpluginrc");
131
  config->writeEntry("Asc",m_radioButtonAsc->isOn());
132
  config->writeEntry("Desc", m_radioButtonDesc->isOn());
133
  config->writeEntry("Alpha",m_radioButtonAlphaSort->isOn());
134
  config->writeEntry("Num", m_radioButtonNumSort->isOn());
135
  config->writeEntry("Case", m_checkBoxCase->isOn());
136
  config->writeEntry("Unique", m_checkBoxUnique->isOn());
137
  config->writeEntry("By col", m_checkBoxByCol->isOn());
138
  config->writeEntry("Start col", m_lineEditStartCol->text());
139
  config->writeEntry("End col", m_lineEditEndCol->text());
140
  config->sync();
141
}
142
143
#include "sortdialog.moc"
144
(-)tdeaddons/kate/katesort/sortdialog.h (+66 lines)
Line 0 Link Here
1
/***************************************************************************
2
 *   Copyright (C) 2007 by Marian Kyral                                    *
3
 *   mkyral@email.cz                                                       *
4
 *                                                                         *
5
 *   This program is free software; you can redistribute it and/or modify  *
6
 *   it under the terms of the GNU General Public License as published by  *
7
 *   the Free Software Foundation; either version 2 of the License, or     *
8
 *   (at your option) any later version.                                   *
9
 *                                                                         *
10
 *   This program is distributed in the hope that it will be useful,       *
11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13
 *   GNU General Public License for more details.                          *
14
 *                                                                         *
15
 *   You should have received a copy of the GNU General Public License     *
16
 *   along with this program; if not, write to the                         *
17
 *   Free Software Foundation, Inc.,                                       *
18
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19
 ***************************************************************************/
20
21
#ifndef SORTDIALOG_H
22
#define SORTDIALOG_H
23
24
#include "sortdialoglayout.h"
25
#include <ntqdialog.h>
26
#include <tdelocale.h>
27
#include <ntqlineedit.h>
28
#include <ntqpushbutton.h>
29
#include <ntqbuttongroup.h>
30
#include <ntqradiobutton.h>
31
#include <ntqgroupbox.h>
32
#include <ntqcheckbox.h>
33
#include <ntqlabel.h>
34
#include <ntqmessagebox.h>
35
36
class SortDialog : public sortdialoglayout
37
{
38
		Q_OBJECT
39
40
	public:
41
		SortDialog ( TQWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
42
		~SortDialog();
43
//    TQCheckBox* m_checkBoxUnique;
44
    /*$PUBLIC_FUNCTIONS$*/
45
46
	public slots:
47
		/*$PUBLIC_SLOTS$*/
48
    int   exec();
49
50
	protected:
51
		/*$PROTECTED_FUNCTIONS$*/
52
    void          config_load();
53
    void          config_save();
54
    TDEConfig       *config;
55
56
	protected slots:
57
		/*$PROTECTED_SLOTS$*/
58
		virtual void          reject();
59
		virtual void          accept();
60
    virtual void          toggledCol();
61
    virtual void          toggledType();
62
63
};
64
65
#endif
66
(-)tdeaddons/kate/katesort/sortdialoglayout.ui (+392 lines)
Line 0 Link Here
1
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
2
<class>sortdialoglayout</class>
3
<widget class="TQDialog">
4
    <property name="name">
5
        <cstring>sortdialoglayout</cstring>
6
    </property>
7
    <property name="geometry">
8
        <rect>
9
            <x>0</x>
10
            <y>0</y>
11
            <width>426</width>
12
            <height>224</height>
13
        </rect>
14
    </property>
15
    <property name="caption">
16
        <string>Sort</string>
17
    </property>
18
    <property name="sizeGripEnabled">
19
        <bool>true</bool>
20
    </property>
21
    <grid>
22
        <property name="name">
23
            <cstring>unnamed</cstring>
24
        </property>
25
        <widget class="TQLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
26
            <property name="name">
27
                <cstring>Layout1</cstring>
28
            </property>
29
            <hbox>
30
                <property name="name">
31
                    <cstring>unnamed</cstring>
32
                </property>
33
                <property name="margin">
34
                    <number>0</number>
35
                </property>
36
                <property name="spacing">
37
                    <number>6</number>
38
                </property>
39
                <spacer>
40
                    <property name="name">
41
                        <cstring>Horizontal Spacing2</cstring>
42
                    </property>
43
                    <property name="orientation">
44
                        <enum>Horizontal</enum>
45
                    </property>
46
                    <property name="sizeType">
47
                        <enum>Expanding</enum>
48
                    </property>
49
                    <property name="sizeHint">
50
                        <size>
51
                            <width>253</width>
52
                            <height>20</height>
53
                        </size>
54
                    </property>
55
                </spacer>
56
                <widget class="TQPushButton">
57
                    <property name="name">
58
                        <cstring>buttonOk</cstring>
59
                    </property>
60
                    <property name="text">
61
                        <string>&amp;OK</string>
62
                    </property>
63
                    <property name="accel">
64
                        <string></string>
65
                    </property>
66
                    <property name="autoDefault">
67
                        <bool>true</bool>
68
                    </property>
69
                    <property name="default">
70
                        <bool>true</bool>
71
                    </property>
72
                </widget>
73
                <widget class="TQPushButton">
74
                    <property name="name">
75
                        <cstring>buttonCancel</cstring>
76
                    </property>
77
                    <property name="text">
78
                        <string>&amp;Cancel</string>
79
                    </property>
80
                    <property name="accel">
81
                        <string></string>
82
                    </property>
83
                    <property name="autoDefault">
84
                        <bool>true</bool>
85
                    </property>
86
                </widget>
87
            </hbox>
88
        </widget>
89
        <widget class="TQButtonGroup" row="0" column="0">
90
            <property name="name">
91
                <cstring>m_groupSortOrder</cstring>
92
            </property>
93
            <property name="title">
94
                <string>Sort order</string>
95
            </property>
96
            <hbox>
97
                <property name="name">
98
                    <cstring>unnamed</cstring>
99
                </property>
100
                <widget class="TQLayoutWidget">
101
                    <property name="name">
102
                        <cstring>layout2</cstring>
103
                    </property>
104
                    <vbox>
105
                        <property name="name">
106
                            <cstring>unnamed</cstring>
107
                        </property>
108
                        <widget class="TQRadioButton">
109
                            <property name="name">
110
                                <cstring>m_radioButtonAsc</cstring>
111
                            </property>
112
                            <property name="text">
113
                                <string>&amp;Ascending</string>
114
                            </property>
115
                            <property name="accel">
116
                                <string>Alt+A</string>
117
                            </property>
118
                            <property name="checked">
119
                                <bool>true</bool>
120
                            </property>
121
                        </widget>
122
                        <widget class="TQRadioButton">
123
                            <property name="name">
124
                                <cstring>m_radioButtonDesc</cstring>
125
                            </property>
126
                            <property name="text">
127
                                <string>&amp;Descending</string>
128
                            </property>
129
                            <property name="accel">
130
                                <string>Alt+D</string>
131
                            </property>
132
                        </widget>
133
                    </vbox>
134
                </widget>
135
            </hbox>
136
        </widget>
137
        <widget class="TQGroupBox" row="0" column="1" rowspan="2" colspan="1">
138
            <property name="name">
139
                <cstring>m_groupAdvanced</cstring>
140
            </property>
141
            <property name="title">
142
                <string>Advanced</string>
143
            </property>
144
            <grid>
145
                <property name="name">
146
                    <cstring>unnamed</cstring>
147
                </property>
148
                <widget class="TQLayoutWidget" row="0" column="0">
149
                    <property name="name">
150
                        <cstring>layout4</cstring>
151
                    </property>
152
                    <vbox>
153
                        <property name="name">
154
                            <cstring>unnamed</cstring>
155
                        </property>
156
                        <widget class="TQCheckBox">
157
                            <property name="name">
158
                                <cstring>m_checkBoxCase</cstring>
159
                            </property>
160
                            <property name="text">
161
                                <string>&amp;Case sensitive</string>
162
                            </property>
163
                            <property name="accel">
164
                                <string>Alt+C</string>
165
                            </property>
166
                        </widget>
167
                        <widget class="TQCheckBox">
168
                            <property name="name">
169
                                <cstring>m_checkBoxUnique</cstring>
170
                            </property>
171
                            <property name="text">
172
                                <string>Uni&amp;que</string>
173
                            </property>
174
                        </widget>
175
                        <widget class="TQCheckBox">
176
                            <property name="name">
177
                                <cstring>m_checkBoxByCol</cstring>
178
                            </property>
179
                            <property name="text">
180
                                <string>B&amp;y column</string>
181
                            </property>
182
                            <property name="accel">
183
                                <string>Alt+Y</string>
184
                            </property>
185
                        </widget>
186
                    </vbox>
187
                </widget>
188
                <widget class="TQLayoutWidget" row="1" column="0" rowspan="1" colspan="2">
189
                    <property name="name">
190
                        <cstring>layout5</cstring>
191
                    </property>
192
                    <hbox>
193
                        <property name="name">
194
                            <cstring>unnamed</cstring>
195
                        </property>
196
                        <widget class="TQLabel">
197
                            <property name="name">
198
                                <cstring>m_textLabelStartCol</cstring>
199
                            </property>
200
                            <property name="text">
201
                                <string>Starting at:</string>
202
                            </property>
203
                            <property name="buddy" stdset="0">
204
                                <cstring>M_lineEditStartCol</cstring>
205
                            </property>
206
                        </widget>
207
                        <spacer>
208
                            <property name="name">
209
                                <cstring>spacer2</cstring>
210
                            </property>
211
                            <property name="orientation">
212
                                <enum>Horizontal</enum>
213
                            </property>
214
                            <property name="sizeType">
215
                                <enum>Expanding</enum>
216
                            </property>
217
                            <property name="sizeHint">
218
                                <size>
219
                                    <width>30</width>
220
                                    <height>20</height>
221
                                </size>
222
                            </property>
223
                        </spacer>
224
                        <widget class="TQLineEdit">
225
                            <property name="name">
226
                                <cstring>m_lineEditStartCol</cstring>
227
                            </property>
228
                            <property name="enabled">
229
                                <bool>false</bool>
230
                            </property>
231
                            <property name="maxLength">
232
                                <number>7</number>
233
                            </property>
234
                            <property name="inputMask">
235
                                <string></string>
236
                            </property>
237
                        </widget>
238
                    </hbox>
239
                </widget>
240
                <widget class="TQLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
241
                    <property name="name">
242
                        <cstring>layout6</cstring>
243
                    </property>
244
                    <hbox>
245
                        <property name="name">
246
                            <cstring>unnamed</cstring>
247
                        </property>
248
                        <widget class="TQLabel">
249
                            <property name="name">
250
                                <cstring>m_textLabelEndCol</cstring>
251
                            </property>
252
                            <property name="text">
253
                                <string>Ending at:</string>
254
                            </property>
255
                            <property name="buddy" stdset="0">
256
                                <cstring>m_lineEditEndCol</cstring>
257
                            </property>
258
                        </widget>
259
                        <spacer>
260
                            <property name="name">
261
                                <cstring>spacer3</cstring>
262
                            </property>
263
                            <property name="orientation">
264
                                <enum>Horizontal</enum>
265
                            </property>
266
                            <property name="sizeType">
267
                                <enum>Expanding</enum>
268
                            </property>
269
                            <property name="sizeHint">
270
                                <size>
271
                                    <width>31</width>
272
                                    <height>20</height>
273
                                </size>
274
                            </property>
275
                        </spacer>
276
                        <widget class="TQLineEdit">
277
                            <property name="name">
278
                                <cstring>m_lineEditEndCol</cstring>
279
                            </property>
280
                            <property name="enabled">
281
                                <bool>false</bool>
282
                            </property>
283
                            <property name="maxLength">
284
                                <number>7</number>
285
                            </property>
286
                            <property name="inputMask">
287
                                <string></string>
288
                            </property>
289
                        </widget>
290
                    </hbox>
291
                </widget>
292
                <spacer row="0" column="1">
293
                    <property name="name">
294
                        <cstring>spacer6</cstring>
295
                    </property>
296
                    <property name="orientation">
297
                        <enum>Horizontal</enum>
298
                    </property>
299
                    <property name="sizeType">
300
                        <enum>Expanding</enum>
301
                    </property>
302
                    <property name="sizeHint">
303
                        <size>
304
                            <width>130</width>
305
                            <height>21</height>
306
                        </size>
307
                    </property>
308
                </spacer>
309
            </grid>
310
        </widget>
311
        <widget class="TQButtonGroup" row="1" column="0">
312
            <property name="name">
313
                <cstring>m_groupSortType</cstring>
314
            </property>
315
            <property name="title">
316
                <string>Sort type</string>
317
            </property>
318
            <hbox>
319
                <property name="name">
320
                    <cstring>unnamed</cstring>
321
                </property>
322
                <widget class="TQLayoutWidget">
323
                    <property name="name">
324
                        <cstring>layout3</cstring>
325
                    </property>
326
                    <vbox>
327
                        <property name="name">
328
                            <cstring>unnamed</cstring>
329
                        </property>
330
                        <widget class="TQRadioButton">
331
                            <property name="name">
332
                                <cstring>m_radioButtonAlphaSort</cstring>
333
                            </property>
334
                            <property name="text">
335
                                <string>Alpha&amp;betical</string>
336
                            </property>
337
                            <property name="accel">
338
                                <string>Alt+B</string>
339
                            </property>
340
                            <property name="checked">
341
                                <bool>true</bool>
342
                            </property>
343
                        </widget>
344
                        <widget class="TQRadioButton">
345
                            <property name="name">
346
                                <cstring>m_radioButtonNumSort</cstring>
347
                            </property>
348
                            <property name="text">
349
                                <string>Nu&amp;meric</string>
350
                            </property>
351
                            <property name="accel">
352
                                <string>Alt+M</string>
353
                            </property>
354
                        </widget>
355
                    </vbox>
356
                </widget>
357
            </hbox>
358
        </widget>
359
    </grid>
360
</widget>
361
<connections>
362
    <connection>
363
        <sender>buttonOk</sender>
364
        <signal>clicked()</signal>
365
        <receiver>sortdialoglayout</receiver>
366
        <slot>accept()</slot>
367
    </connection>
368
    <connection>
369
        <sender>buttonCancel</sender>
370
        <signal>clicked()</signal>
371
        <receiver>sortdialoglayout</receiver>
372
        <slot>reject()</slot>
373
    </connection>
374
    <connection>
375
        <sender>m_checkBoxByCol</sender>
376
        <signal>toggled(bool)</signal>
377
        <receiver>sortdialoglayout</receiver>
378
        <slot>toggledCol()</slot>
379
    </connection>
380
    <connection>
381
        <sender>m_radioButtonAlphaSort</sender>
382
        <signal>toggled(bool)</signal>
383
        <receiver>sortdialoglayout</receiver>
384
        <slot>toggledType()</slot>
385
    </connection>
386
</connections>
387
<slots>
388
    <slot access="protected">toggledCol()</slot>
389
    <slot access="protected">toggledType()</slot>
390
</slots>
391
<layoutdefaults spacing="6" margin="11"/>
392
</UI>

Return to bug 881