.gitignore000066400000000000000000000003441516776645100130710ustar00rootroot00000000000000/build /node_modules /*.log /*.iws .idea/workspace.xml .idea/tasks.xml .idea/profiles_settings.xml .idea/inspectionProfiles/Project_Default.xml .idea/inspectionProfiles/profiles_settings.xml node_modules/.yarn-integrity /dist.npmignore000066400000000000000000000002471516776645100131020ustar00rootroot00000000000000/.idea /artifacts /build /test /node_modules /*.iml /*.ipr /*.iws /.travis.yml /.scrutinizer.yml /Gruntfile.js /*.lock *.log /corifeus-boot.json /secure /scripts /dist.travis.yml000066400000000000000000000014301516776645100132070ustar00rootroot00000000000000language: node_js node_js: - node before_script: - npm install -g grunt-cli npm env: global: secure: ndPY/yENX+jrLScJBSsu+GV93TZcnmFyPirG19UBvu2ZdUyh+jUnDfvsqtz9VCoYgArDoXaE2cn+O7ymlhzo3FaiTn4uhZFwWkNDvB/o4yVUY8JfqUJiKM1Ed/1FCwsKNQ5ClH9EyTKlsecu68f3Tl36C+YRI2n0ar2ILD9Fz4SzcFUS1sxAa1zAk20P5JKeEL/sEzHHYT/ex2p/TEltN/6SaV4ITV6z94FH5dxIuwgz7WQeteNx3dPG6H/b+mkpE6Lyzgb5fRhYSdoSiynWK6/Z4gswftXLG12YIue8NVR8Fa2RMAESA2Nzeu0SDfZl/jRJqw0DWKlNq+8Wzme81TPJw0S8aQDYVNWJAnbIXI2qGibXidy7+WHhM8AhoK/e+1VAKuD61H2W75YERGkktiN9oldcoGiyO/ODkxQ6gGZ6URsxC57SbtQdsTDWCAOGjkZOrcXE4qT30ItrfkVif0BpHtHhgCd8iAsnVDKcuTzj995gI/gNDitAKJjnMgIVlS3nLTYBATy7xJh90BMfDBG0MDvnonA7Co5Qrz04MotgQZ5abXckaNPkBAe9WTFeQ51pHcWSoWcuK/InTPIZCB6Hb6i/q5y8SOlGzTpr2v6vxPw9h83X2AxJLabxB6WgXCwr/DbehgnATK09O7s7QvwmG4PzfqqllcfCC6r4QRs= Gruntfile.js000066400000000000000000000016441516776645100134020ustar00rootroot00000000000000const utils = require('corifeus-utils'); module.exports = (grunt) => { const _ = require('lodash'); const builder = require(`corifeus-builder`); const loader = new builder.loader(grunt); loader.js({ replacer: { type: 'p3x', npmio: true, }, }); const test = grunt.config.get('mocha_istanbul') test['cory-coverage'].src = [ [ `${process.cwd()}/src/electron/**/*.js` , ], ] // test['cory-coverage'].options.mask = `${process.cwd()}/src/electron/**/*.js` test['cory-coverage'].options.includes = [ `${process.cwd()}/src/electron/**/*.js` , ] grunt.config.set('mocha_istanbul', test) //console.log(JSON.stringify(test, null, 4)); let defaults = builder.config.task.build.js.slice() // defaults.splice(defaults.indexOf('mocha_istanbul:cory-coverage'), 1) grunt.registerTask('default', defaults); } LICENSE000066400000000000000000000025471516776645100121150ustar00rootroot00000000000000 @license p3x-redis-ui v2018.11.1-2 📡 P3X Redis UI that uses Socket.IO, AngularJs Material and IORedis with statistics, console - terminal, tree, dark mode, internationalization, multiple connections, web and desktop by Electron. https://pages.corifeus.com/redis-ui Copyright (c) 2018 Patrik Laszlo / P3X / Corifeus and contributors. MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. README.md000066400000000000000000000135771516776645100123740ustar00rootroot00000000000000[//]: #@corifeus-header [![NPM](https://nodei.co/npm/p3x-redis-ui.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/p3x-redis-ui/) [![Build Status](https://travis-ci.org/patrikx3/redis-ui.svg?branch=master)](https://travis-ci.org/patrikx3/redis-ui) [![Uptime Robot ratio (30 days)](https://img.shields.io/uptimerobot/ratio/m780749701-41bcade28c1ea8154eda7cca.svg)](https://uptimerobot.patrikx3.com/) # 📡 P3X Redis UI that uses Socket.IO, AngularJs Material and IORedis with statistics, console - terminal, tree, dark mode, internationalization, multiple connections, web and desktop by Electron. v2018.11.1-2 This is an open-source project. Star this repository, if you like it, or even donate! Thank you so much! :) I run my own server with dynamic IP address, so, it may happen, that the server can not be reachable for about max 15 minutes, due to nature of the dynamic DNS. The server may also be unreachable, when I backup the SSD with Clonzilla (very rarely) or an electrical issue (but this should not happen again). When the server is down, please hang on for 15-30 minutes and the server will be back up. All my domains (patrikx3.com and corifeus.com) could have errors, since I am developing in my free time. However, it is usually stable. **Bugs are evident™ - MATRIX️** ### Node Version Requirement ``` >=8.11.4 ``` ### Built on Node ``` v11.0.0 ``` The ```async``` and ```await``` keywords are required. Install NodeJs: https://nodejs.org/en/download/package-manager/ # Description [//]: #@corifeus-header:end `p3x-redis-ui` is a new Redis GUI which can serve as a backend server or as a desktop application. Some of the features are coming below. ## Development It creates a package that allows you to compose `p3x-redis-ui-server` and `p3x-redis-ui-material` into one: [Server on GitHub](https://github.com/patrikx3/redis-ui-server) [Client on GitHub](https://github.com/patrikx3/redis-ui-material) By default, only English is created, but given all strings are from a `JS` file, it is very quick to spawn another language eg. German, France, Spanish etc ... [English strings, easy to translate](https://github.com/patrikx3/redis-ui-material/blob/master/src/strings/en/strings.js) ## The test version https://p3x.redis.patrikx3.com ![Screenshot 1](https://cdn.corifeus.com/git/redis-ui/artifacts/preview-images/preview-1.png) ![Screenshot 2](https://cdn.corifeus.com/git/redis-ui/artifacts/preview-images/preview-2.png) ## Features * Works as a backend * For now, it only works with HTTPS * Works as a desktop via Electron * I have * Linux * Windows * macOS * I do not have the money to buy a macOS machine and build an Electron installer, but it would be very easy to do * The error handling took careful (as much I can find errors) * Starts with no settings without config, or setup your own config * Able to create, test, save, delete multiple connections or a readonly connections setup, for shared usage * Able to use the console and interact with Redis * Online you are able to choose the tree separator, for example :, /, -, space etc... or even empty separator * It is based on Redis-Commander and phpRedisAdmin * You can select the database via console or the drop down, where the checked database is not empty, so you can always know which is filled * Save button to save the db * There is a performance penalty for this application, given it uses AngularJS `ng-repeat` for the tree component. The best is if your application uses nested keys (something:nested:good), then the tree will be fast, but, for example, Nextcloud uses about 500 keys inline and it can take 5 seconds to generate the tree. * Another solution is that instead of the : separator for your app, you can use the / separator. Then it will be much more responsive, see the settings tree separator * A second solution is to use paging, the default paging is 100 keys * Full statistics pages, can be useful * This is just a New Kind on the Block in the Redis world, so, of course, there are advantages and disadvantages in the other Redis GUIs * Dark - Dracula / light themes * Search * Client side mode searching in keys - small key set * Server side mode searching in keys - large key set * Search mode * the search keys starts with a string key * the search keys includes a string in the key # Start up with Electron Please check out the releases section. ## Releases https://github.com/patrikx3/redis-ui/releases # Start up with a server or via a browser and NodeJs/NPM [Start up with a server readme](artifacts/readme/start-up-server.md) # To create your own certificate [To create your own certificate readme](artifacts/readme/create-https-cert.md) # Some description about the config file [Some description about the config file readme](p3xrs.json) # TODO [The to do readme](todo.md) # Change log [The change log readme](changelog.md) # Release It was created in 20 days in September of 2018. [//]: #@corifeus-footer --- [**P3X-REDIS-UI**](https://pages.corifeus.com/redis-ui) Build v2018.11.1-2 [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) ## P3X Sponsors [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/) [![NoSQLBooster](https://cdn.corifeus.com/assets/png/nosqlbooster-70x70.png)](https://www.nosqlbooster.com/) [The Smartest IDE for MongoDB](https://www.nosqlbooster.com) [//]: #@corifeus-footer:endartifacts/000077500000000000000000000000001516776645100130605ustar00rootroot00000000000000artifacts/helpers/000077500000000000000000000000001516776645100145225ustar00rootroot00000000000000artifacts/helpers/redis-commander-types/000077500000000000000000000000001516776645100207355ustar00rootroot00000000000000artifacts/helpers/redis-commander-types/redis-type-hash.png000066400000000000000000000003041516776645100244460ustar00rootroot00000000000000PNG  IHDRasRGB pHYs  tIMEptEXtCommentCreated with GIMPW1IDAT8c`bř(b :HGP)*G <FMgiyIENDB`artifacts/helpers/redis-commander-types/redis-type-list.png000066400000000000000000000004221516776645100244770ustar00rootroot00000000000000PNG  IHDRasRGB pHYs  tIME:+H>tEXtCommentCreated with GIMPWIDAT8˵ C}yށ2m@h`LHd[^$;yl[v[$- 'm[xWU%Mܼ~XҸ %ZFq7i;b*]OC;IENDB`artifacts/helpers/redis-commander-types/redis-type-set.png000066400000000000000000000005571516776645100243300ustar00rootroot00000000000000PNG  IHDRh6sRGB pHYs  tIMELStEXtCommentCreated with GIMPWIDAT(ϵJ1oXE ZTCo=z(+}oKB7Z9NL&tuG]\I^ob$;ԻL$R2Kd!hx*N1|'/1g55iLuB|M0Ep C^G^ _&.n4#*r| 0z@+KhېAny Ay|+_=LzwIENDB`artifacts/helpers/redis-commander-types/redis-type-zset.png000066400000000000000000000003571516776645100245200ustar00rootroot00000000000000PNG  IHDRasRGB pHYs  tIME75tEXtCommentCreated with GIMPW\IDAT8Փ 0Cƾ\?<ԛRr ""mҦ~6 3 pfZXY"ds:ܖ-B{.,nӵ/񖤈+5viPf IENDB`artifacts/preview-images/000077500000000000000000000000001516776645100160045ustar00rootroot00000000000000artifacts/preview-images/preview-1.png000066400000000000000000004741521516776645100203460ustar00rootroot00000000000000PNG  IHDR"B?JsBITOtEXtSoftwaregnome-screenshot> IDATxi@Sg6BDD" R@,Rlj)vq>uXvֺ֢VD*BPLX (;HB~;az>\~ 0p f b6 f b6 f b6 f b6 f b6 f b6 f b6 f b6 f E/7W{[fYQqIaqFQ(OO s2*z<ݤ{cksCM`dhx;ffHJeB~[KM~tӡm[olwqg?ؽtG`s] 6L@SG;w11asHYQ\\($\!{xЍn#!cKS'<{IaދѦKᖔVKŁzl) n51qr'K>} c;,6>|< ODҍ1| Yx9Y6b#B]<5/絹'$ݧ .ɺU!l]gwמ[%]lU3V$0`a3l8DD\נ`Yޖ3X3˙ӥ|9La{eڦOV7V!l""qS}/ƱLcѫ bt~wGT0؇~q gU8ƀ\H&+'S:s/l쬸[ 9&6+ł][dWJ6nth QkUUV&OK3J2.1?E_"@blt&cK 6VFuosC!tȏw3ƴ#] \L/B{L>]3UǤ[ ܼշu>#?u?;9s3S{[[!V 2bmmIajz Kww'-iK\o /FE DDl8DqCG.D?^O߿?Vۖ;woٙlߦo7T!G=|nZܖ[PAQ"NKԭK>_$ݻtPi\ ǫ󧏧Z|7HNnuǛ󷽻?,7o8vse Gx(/V+#! t3aB&NyXIέ cK u/L޶[MnR}Fі vsy{1(7;)ᮕ8#&- 3ފCD i}E=7-|قga}9S^m}6gI#LHo-*""+mqل~B_\6-=(S$8)Ȓے=|]V[nM;í=.ɛGt6l)^3Je ?ʹVY""nO(^]г ش۪&fy5I{r]@w7:r97%4nNԺKZ!/GmHFښ,nR9DDlM;sk lEnنА| '/6wLc>cl61Vyvӷic<%$lɺU.;eꕼǿ+7utYئ+w'+w~}m뺥k7Ȉx]Q}O] f׶1\ .^m?%l)Eq<~yD6t10qG_'?bSGAߊ$E OHWnh2.(  ;i:v:[}u 9ɇW\c8ljŚZ<ߺ͋m~%e(v=ۃ"V(>PAD, u7>k垐6H9[$Pp86i׹;pD "Iօ;eݳ+Q\ab0geM-B]7r sm=͙AGS#З{5FոGxs2E9-*KWi! V><" qv̳I=ٮVm'-|󇖛wxݦ@ˆK'pZDotR<3So»XƎƘf\G w1\oGT oRa)-BͩHe_YJ"**>+HىDȝQXx·\sO7:U)*dYA!kFqj?P~ŲKi8=!&%b[wӳ74٤")D|Q9 65VVAYfKkgyIw6FLi6"beCv"R.'"Rķ(4lVB_{j%'RKޕi fS q^YW{o"uuwQ[6?H8+YZWLpB INsRMŵL҄=mi[=ebrpW n-)"㹓Y{B(n%1{N屼l Lr6 uɱk9;sbEiA:9Mq"J Gr%7b}f5b+q9>pjéxN,*\ME)B 9xtt.JOΒ9vxz,)gLy{gZ<5#f8<T$Go~I$),ui7n꟝(؇VXЋWkv?DD2TI.vD~+o\2dPeQn줔|Оu–7Qܸp{6">5L 8/_tO n|[g!';"Ѳ8ΊKlI2 ;vs]ygxEq$3_(*6״V;{7+|Zۇy'L/\$-!7{;" / 8: ў&:u3tqJ NX/;%$Q36gF-ʴk7Irzpbl7(Z$6q{:s I=0vYč-YzܸzY\a:*gΒMlQO)R19IM t:MD>&)cM>zwnٿ'>-*)+km}߄7, vjt_,9v.Bݻۆ?G'KBeOp=!^W'EӤwˁ|| O;wy݈Qn|h~+EjM^¾/qFy'Kbo="l}lvGnEŭR>^x:"lisxO'RNo^KcMݤ_ǝ~9F}hwCW$j:ZyNSHE݇88(_:oR2u*\?&_" a'$yz*#R& +Vxr1nܢ[=2[}HmH;as+rI{mir*uWƆ(Ⱦ4Dv{/PAj»]7lFs䇨s^~i)/mgAzRt_.fd?hk $iPț?)QKI-TX[xFX;i]k}6[6}K̚+ٻJ1gìny@vr&i[c? Y‹牸w6^:)ffDiqq9PTw0ɍ'ru0NhvhiBpnݺLDvA.Q7:ӷ]!?w'lQQ)P+j.ܒ!"X1!*ckM+劶prT"߼Qʂϳ iB]ĈBLb|q,:i[i;!qg]E?xXAʜ5br&;U$mk#g5TX",V:sN D|ǓaRtCjBQyOYwM)DͱkA/""RP[ڲ֞k6hy!ԻXR;#E#+޹֖|9A설ł{=@/yh9+x5rwqx~k>vWRt4xy'}qF[T) gv\&=G;#,[V7 .t?m *dn8ٮ[%HnJ$%ɱve\wiVIu*c:II1mfO$JlAΊ&g;崼Cuٸiy.6OAu8o YwY,.Rp8vn+DsHYXu ]k-ˉc9/4^~8'g˒d ]Zl=i)"36)H<"|QjI-kVᡖݱ'yT9,p[9LADu9:wR9PLkM,xͿPZ "ʎI)92?"E(^6[rf]W?/U1#)dV/<ڈ7РLNX73#:mWx zJ&صn!HQ"I ɸk,|h2|ק|>_L[a{L:K_*O>^ldžuҹ}(~́-Ǜsh8,;SH^_Y6o)Y:-IV"\o˩}@O*p5(b;}{`{`۟'E]ܒwyIa֭4!"RTg7ミp`w:[)>}CVph_L8D$/&Fn$hW0.۵I>g,pHY!Fs&gfM$洺tv˜V[ڿfˤ!~!-(7[xbfOXqk{txupcc;.KND$.+72?bQm9.%"'ޯ&$gP%lIvdˆ{3-]7DŽ,aQ:ϊN )m۩n ~=ub|Ϯߤ80X޹,3OrBb,d (cdamo83 $Wͧ@+޾Qk4cS=/qFuZGXQܩ̺i{B+diEe=Ct"Rwc#?(8M!cCՍo 曆3\;=A; zʏ:q.Fs9:] kВ ;ɯ:s%HUˉ|Uӯ:Wg 5cWfE1F[>sd߇UDDEgnKϷ4e=vf,eQՆr 7g~-2`ժ7?1UCoݖQio`bјE JG[j*Ü awsfU+}vm3K7l^X|3ϊXdūfˈrtL}ENu/m_۰f~wBpHET~7~5_6˸QN*׸ʑcT׏lqlmL2ҥ*"RHʬll.Εf!}P㫻նrEf6Ƥ"nl*Lh10H7cIݝ(1>nW,F{,f@Vה]OSDD2G2 cSFɕ:Яx.f5]OFW%YW~:M=Ҕśk~5,G73""2ȖʈX6/Lr6%"r?"&XDfV&]:KiICTUeee*"UZ_ v2"2r¯L~v5^Ɨ<%Rn:J/;'ws+@ IDATfg\>yARE,/x5ZZy{UV-ko"bUFZLlh?ILG{)MIY(YR5a 3xFe{"rY[ֿ|V 'Ä7^v5F~ (zNz 7z 7z 7z 7z 7z 7.lAlAla䡴/9 5~lAlAlAlAlAlAlAlAlAlAlAlA32A[?guzm3 @ߗ.}rEyyGvw}e\.NJ"Ν{”\IyYJ4152dw/CzTɳl *^Iډ7.LT*kT*Fh i~p=ch5n<%ͮ(/N*xן簾,[PӄeF]FN9ѩ[9}B5b4SQq##ů3jjj~r֭$FSH7k׮߈vmB_/z8fT~[0_]Scae9VV4ͪ ;G?y$fBӧCx3M,ʌ:~Af~ܓI[RS$+S2‚b3LQ=}ϙ|3᧓y9`v\Td>y,9t-+-M.굮FwzcG'M8׷PP36UUU&&&<3XEzf SsrrfȐ1c fKKJ323EbqaQѱ#{D=jW_nIᥙaXۯ$L?!"abUUVovS3D&ǨoQNG4sb Sn(?)\ 2ByG/S|Y{=o"7L/<| S[ Xlq#\a=c3s| ?/(dK!s X0]ﯟoeγOPUU[PY͏Aќ;w>''dΘ>۫Fc =:ciiiԓ1;.Qk nqAɓi- h/vKMM͹?|=e0Q~^VXJDgN͙8uokWܲ9>6/`gt3wW/ET11pimO64y?\VDG.-)N`e=8d|q^zKIJLhޟ+'~8YVV>hР^{cQPȜ gNPTs8ۧϪi  6-<"+CD&svqU*qWcX,?."ndl:?+2}nO'+ /L.<ȮQ)}qʴ !ɴwcޞpԗfu\~OTih,=vwSӳ`0mE*Uͩ3Ǐ,W[Yڥhb]#"qtfl"JJNS E04$;\\T ܜ#Gуgq\\~nNv`̙YKu/ꪪJCT\T ;%[153g2>\F~=0/7,ME3{*RӤm```e=ըݮ_!&MӇF9yDd0Bbggz޿ID555Q?`0j kjkCG1ju/GRiIi)0_wRR.åjWWcvfkT*l6xPL̈~ iٹHl Q~nۯrS;kjj]\gv37DV2=߇ b(N8ђ^^VFuᗕve ׮'mq؄iXddYY㯇7K(8%WF`>5iSbbʪ)'d^"":t謗|%X,"'";A_X;uKKKo܈1= ~V_ckMlbxFb3sޯkbM-ɀŲ<;fآ =3wOs/.,f93;yΝFSQnkae¸wnݼxK_nL|gk7fl Z/`d:ۛpJ ۠sܬ[RtVPb0[[[ב.W6&55M=a~.nPG6z0yy\^ADCx0meClx ;JK=|C6 |4';+K$*+-9jԢrjR{q|Ddllll<(aA˩d2]FL)`0F痖fdfDbBQP+y 5:b{eOMBk6@HTVWWT5D&Ӏ2Ғ%N51ovd= FSUYT*55`FF K;廃2ֶ լ5Nk,K*7,ƦUf,;3!fbX'vRTG X7#޳jߑ3 AX,ࠠq))٥eJrРAvv}Z*=K+*:5f=4EE||z8%ͮ(/y%$Ϊ|ͷ5ݠtf#f |\~ofl&Ih5*Rh4_ʳj`^ RTW&ߺ'LϑJS3+zj`dl`}b6KѨJRYSR5Dd2l6ӃݙhroAk6ްz/N"tX/. Lhfó:ujoӮ\E':㨰׆z@05:iܜ* x0Е5P-VNQ駟:'b6 0U9]))&RĜfJx]T4%E1b7N;16/ݔ,TEIؑoT*)""!RtO?͝;њݷTJYު*=UGF[0H{V9knIO{uAaom<(=JiyAVzT]JDT*O)-i֚]u)kR绪3N<=t$i~֟r4^cZE֙Ŏ+[7F^*u]|ְ.5UG 8Xba뉥cg}k#QNyO,Ʊ:|iSRW2%u .K=O˟ve>3j-Mwk%1[%OџY"i~wj֗nctΐع\ ]1@ fHxQ_<y^TJF9Ҫa]4`Wܾ>ZS[9<;5^zEpьiJgUymI?zSanU.Lݑp0=\(O4ޕgHUK%-,T^3~ְn/% l:Y3{|C[uxQUYJԁSb,*HA37:0+^u|k͛chv ݰv0#xW*v!fqkJs~[xBퟜ&1lugy<'ߐoyxad1}"26tNno|ܼG?_&j'T̓唑M$,%J }F<ῢW+Uz=jӌr8irF[\[c9}g-RQO7{-':pJzIՏ_qY`KߘgGv@(k6tҼ+ؐ7E뻗ZxL_4k<;i4n8*t/ѩqS;\=uN39iiNFgvOlkun\yzީbKwRVyہ+(u]nMThgJ+\} ='^kuT+(n?CWnwpcio| du>g+:[mjkAIE,yMwel#"nT[ѩ>.2n m+hMڤ.<~79vU4M78] Gm. ums{;f7$nZ?3B[I9Ddh۵7&=4*ek{v߅/3 ҲS6o/+]Y}y/ >0\o<4'xͫJ,*m'ޔA[{Vkn~0t/#Tת 0Lp,$%pNeegt)Hūuk[t)ebp{xgq 39S,5vsz3{G26QUQue|UuCgGjZRN"cY,ICJV,sNC,VvԱTxھrO 2+ t_Нӊy*K#A5M_6Iwˑgrs_2DĴ ppe$>l4k"XLrclny9wg;`iٳQDzڝ.oO%ʪi֢徝F=Sߵ{N\ܔU7Z*>wtm,U%^>S_ zi|jjjj 5ʺekk65C=Y+@b%<:i\[eOf ÌʒU6ƝKT<%JK t:¶4}͵̝NKޣg_Q6vcׄ4vox0Gv~J89MֱtvilFWmw%W~IiZͨgYVpMqlDզfv+9cbdJ5jt Mpwu1 a֌539[Knr#"*򠺺*Dd>ӭkUck-BHyW';hv&(wg6k7s<81fΥg bݯ.aTTJbXjdvhZRwK+pN9SۂA IDAT/L?SQN3n~fˇq03zڢaǷ{sDb"kMO1}KdzrIlw}ބ7qooʈbMXԲ98JE9eUDd;c;FQk=ZVk0upvw:UO!f+1r\1f-[d~cFVrvՇ*TGLh;gt[,|C& Oxd9Xze"72lƬ$6;܈Tr]p>fNC¦-JsRSKMv 끡i:<5β^tQ|x@>9fS?zFN#=o!Fs^,ѰIY;Mv]\Ҹw"_Fӻg6,(Ou,w]jx`)MjeQ#qx(yO=rumbɗ=?x f@gnnt@C7S32=Ye4E5%Vx4vw݉eIoU &۔mjwmHI Il;ovO]MlxlHhbwXLdU*cnJ_}DڢRҊ&Sçyd{Q9 ?lzpae bmI UꚦMM]k[ AMs_C i}ïc ^|\QOl;q"5}ε56f劲GzH1Sl&֜A"@?ʫ9<[Q@ 6q?0h2ӊ8/28/"uٗ꒛d\*>V|1 ְӗ8WKҞ](,T:[MivAQܑqee>y)>M5̜̽̽f Ͻu/cgV^<56y*b6@eXlca:G*jd`0`2?g&΋ &aP_Sn\Չ#9h < LI?|/z<YB.Sy OC}bDDʂRQrQXVkW+5qU$Ʊ,1 fl2\5S?^(h䧨 F/vh sƍ'+45ɚ⳵,1-?yY߈31)F2ͧ18LFSDjyfm628*iMeMIJg mQD I?Ea5& =LeMLD#]E;0M QQy^ZSTNu.n2b6's\GMv]g _<]MoU_4pwTm|U{(=a9/O i "2i;k֚樟V=g'/N]<7֓M7=-({/UDD㓢_;@_7Aܯ6J oZvp̠77~S{<%U;,rӫ_39D b˛:Q,q\ʌO=s_0bMD #qQ;9DTW-?T:&W/;3PXcѢp L!i(.~кj8clc>?Zz;V5g+;Dyu3)_TvѤ۾RkɞS6~Mߢ]of:|Wj]mHu(~6E݉bcLL/P__qћZ#- y+GJnT_ύ{=kƸ\M%]a сk̾ҷ|Zy dOmƏpT2j+|u0reG/e֎_wѣ@iMV}]s{ ฅ7o=UKq&SC]4j@SF'2Ø-޴#?~mSjl)Kʍ.|pC]1{6]@=0Fw̙BOX@"c)E@bl0t&K?wP3H]ѩƠ  鰔BA-]QA%l&߯ҷwE f Knz޿ {GfL'ג:r;dfLv}"&K֫ܗ&ͶlvgZZ$'К !а &9zh #L| -ܯ5\B'Pk֘\ \΍ݦFrSzu (\o{@ !+tZ _m;N1oH4p^M]7 p/ 4K W{~BfVxm#冚#G[}8Kpۤ٫$ͱN+"=J]9Q85ɇme(\Y^rɇֻ3΅QSR\tgD10Weǐf?^9Ut֍=3yǞ fX~gbC=6 7BOj0R}r8yL@Ua`4/ ;T;M"`ʸFCz$NY9AdiK$G'{ 1dg;ZlV k. sITKAu%2J,»q΂^Oo|ҕMik-y08Вlxbho蛁 `Lt욣IʢQ{b8A_'MT>l0M*x2+%b~zUE^_nu<^k5r]K4h?}-p̰HfkJcU3S_eK~h @u͆Vw_6.Θ~Dwex1@V&0KjN$E7eFTV_TܾtJvmzou=?!!4(nFH/7[z?'Ɂdh6odKzYl h @wKm~2o$Kj$"9 5WXJfeӛ6[Z$f@#V7'k2뛭14UcՆ:k+CwGsV1{T;ykoh~7E;ST{J/v$5uW=ߴ7<^}~ӫ&{#ݧv֨=kl,zlb'+]"23C~֤[u{͚s#.kQ,Z+`=xh>NTJn7`x=D5V(,q.ށ.=S[3p]߾#!z`BOӉ亁L] =Z~$2ND`=<ڏD#{wu5'9H0ܳ>#٠}v&4@0مU0Hf'Q HT^fGCr[:$K,E@ *+ ^ޢ^cyQ|9;m>&Sf8OjS=>7j5ƎU/gz6K|B  :w46)=<ٯM-ޓIɮ<me_=UGPw}!s+4n?rD3394-]cL̻Enl('1B=ބB#LWe#QȎe-;S)}6`?o VSTW:ںL;}*۠{rcP{1AG hs;Z)w6AUI!շ^6caɉD6p璩RJ!S(=uQ7D; שպz":ՇmV146 'ۧ[!:ɽφu;A QNmzp mng>*oSs]᦮N@Aǀg׉E-iko[IX7|]tW),u5zEP%6j|b^ c#T"7{KTnB# ǐCժ9?u>+Dý-wN[Yi4uُR}C?っkS;jh:N( lfgyʥpp7ާ}>3Տks-p-QyC'}6kGs-.wB?J}?_{5Û p0ʥro0c>s;vd:y}ȼ@2^߹Q v9BhdUU Z=n}BhuTH7PX-LM%clAcll5ֵ{9ܓϻP\Ush{@b ~BqO; o}JcCyT Sf28>7+ oxblSjiӦ c6B#̙3#[dg?c 噹B t!Q!$pogG-BI56DnY|h?ܸughѬiu GG5v6brc{5m$'nQښ?Y@=9o6B=Z -חHd)}C6}+ʯMpEC-oFO9=nV(|VY)za7'v_2~<-fdݒ0G0/a;45ɼ4Dlzdh퓎{ߑ H#<f]1ҷ=i jp^ihn7F]7y{Íq__9Qz=Tg UCNzǰ̰LkIm}5d;G˥ !!h1\5~b>O:t{)~ֆ<2U+oAhl"1YuNd6 zUYSVpsk#Nn<7*Ɗ¬7g%0ɊuZt:*Չ:s&!f7d_LًtŎ>L c*vYCzݱυc㶾L!zQ'LL;&, ױg<3!B!DL?4N92{N7˱dqn՛<7h.|qsh*OR1- r@y2F8X@of_@ܙR",>K]wtݭof/ʪ|k*oOe3cg\8]|$V%Y=NՂ ݄iK]8;Kb\h@eMAm9,jsId^.CY̱滭+U5pfoU9y$[ޒލerBܮ);|v[+99K*UjO[4}B!Bd_M8'v4ܑ];qĉLl'%kׇ֒v7o083c_ cLxsWAA4c&n+Vka乖V-KkN+MjaN_|}kõ+._UNgwpuF7aޛØA^:.ìvn(vMc>>\u~^q7yƽڽfE63XX#|U9=buhweyyyTyӍE;Nj#]W! ztHfnBA2<b=~X= 0o67lo].z\{^n/(J?{#%jkZ:sJԑS5T*upR&=TUc[Tꠥ}u@eL;C[I -hbAAaޮ 焉y}f[i뚕*P]j}SJ zH("}Ƴ<$,p,/g#SYA,ߠ{v_@0;a{1/ϴ2{aˑ f+ p5/fN[jj._>',$$5ݭŬv4p dj47"-$Iiwa }p{Ǐ0d=~c|hwgmp>c-+(+(l(UqjoXmiVuIe2 G/ZD"HdL_E7GtP?4WDP$2Ɏj;ӳ2e8~t-dpߋ2e}nZh矎m1lY}",S0ZǗ]avG[&PX&Qjy1.T5GDtErQieZ4(Um=9 @rUqL] LV6 U9)fQn;]D/w"ȏ]fFY0̌ҫueDŽ:w .tL//W&c~k.Hi@_ƅepںsa>XI#D"d 嶷\ըպCo0F:kDΠ(d26Ƴ zsxaV .G{/K{pʟbwz2G= YiU{ٵfrDˑmKk.\49n|gΜPsxPSrP `x1*.>&r k8yd @h4*B@tci ߃9Be^>sRO USpre.j%X|tYAvp83a1(voU=N#bLW;.웞VIyBÕ3qvvU(bP?vRT WysmL 4ؔNJ+*T: _{gnjYfrNoqi^YKVӇ+t@er܈>3yY;\,*λN+: h^W0 OnQc9V Bhdd2LPtLRz~,  BhT jB!B'f#B!BClB!Bh`B!B  B!B!cuB/zVB!hXB!B  B!B!a6B!B!4d0F!B! !4DkCCx!ŦJ%GB#r%#3ЈaJl㬐W|bI2 G:fƆ*= ὑ9zIb9uVt”U:Ah/tqNmϪ[fBZ!ӣCCx1iOsS4"Œ5BgƦl+4De) "CCx3cu5Аe !IǍvҲ^^IXUbҐUzpyoaw[Yi1q) k{6,›636eAJWxG$W7WI '͊FD:\ֳ2g}B^hDi%=;m*Y(gAhoڂ-Mf3:?iǻeѡ1"qNJ /4!G] Bx 7Ρ^20X@V7+:3nMI*7b!Y ϩ9en1V]UK)o\޹BRS\]J/4"z|zP%Dn1Y %Ww:36es.U ks+q#]6.yJZw_ I*U/3e &n<) =;+*ЈKV3P-3A}kCCr{%Fruu^i-[S0ySZ 2%oɱ"x!Y ]4m/OJR;9ֱ8i{Qwu ijW-དྷ~Ѥxzc?ڜ7BxݣdUhHlIiβ{S`n/l^V"UKJrZɒDr{)Ew7_EA|h/.$k/t}l\.@,4 Ļ^?;Q߸zH#m8'CvƌQ^o >5T` "#P+<5E2Fxl$e_s h(J._;M)Ʌ2hs|J>gݾ}ck3R64t:̌Z^ꎝIS5 Wؙ/;}_S$M'9AI\}9[tS2ws}ٟbQYp\iSS2 zY,݄M_c|4gMrJssL - 6XE%%anyPI;y̵h8݀ZYYmǪHdyrN}fhwBrVw(E^^yo0k]j|")PkS`C㷔B}9b9Iom*^en!6A۴,bIt ZV.9>cmξ׽fdnj[.iK?.mOvΎD$Յ]a$ݕ0cUkgYoǛ !;96(~82;Y@-1cU2.l|/16͙{ @ *_ϓEr֙*}9e듻~o5r*(ǰՂ_3;%=fuw|q{Bjn-1O3ߏdѭzrD(±UD ՌwN_ v%7{ 'Hz݄MG[OU9O>Nۘaʈ?~k#&[A0 +ݕY¢}8k?JN[~v?k?'UVֲb[t7ngl o?tm.[8q-,<8ml}w 3l4z=VFڼ㥕*"rhprʍ]T#^ϏdB86K*e` /G3zHe(x>C淪YtJHY#تpB0`nQ2o>@i-Ϥxf9D|]8My̖ڨd`.3Mx7-W4%P0d{IvV-L-lD,.-2$F1vL g?M(, =H[lI\>[rF>pSRV@Ꟙ5χEEd.BJsm|giCժx  ߏ6|%TpSڸ+w'!9Kʹ5\;j需YTˢ*+"b3m@ʮ#Ee}!u D|6eiRԡr1H.RqWm[bɣwss'l>\hɑ! |Y҆Iݲo/:C$#WYԕ(O$*\@-Do5(?@!]-$B0TT.G]Z.9Mv?fd<+E”Ur!|cV'qJ`ɀT݄t*7yk|oH*8}.T.۵rѻKKP*{2y-L?D\&nHq|bK m 6\70$jcq%Rۼc,Ş}9X :w[l5}Py+ _Y*ؗK9)Z+8hv4 PMp|@/~0Xj6;lZ2QigC;EifoOU*#2~311Sr)1LPrN$n 6 4\dR zzWe.J$;ܴ72jQOH~Í\$eJ8bQߊ 6E@uAfiWP7fQ$@%.7 x,Uuyχ$QF Ү1keR:oKR.I޸*JQ-p<7P+k\W޺\c)mۇ fG-[~. \DrA.>}m^]{Xa)x&#ם7 yAP(Z;*OUB)[Z7ꮬ~16!vtrI47x=Lr@?.t62L\7:s(G**)W̏UUwFS3B,zroLbj\`@+l\`_xsG,AĜH !-d%DHJK ڔB.mqS.tYr`YmmB'LKјXOe:r9ǴP,Bø:wn=o2(RB̲+F̰) Fwf{re 3/HPI fKjrUc{@Ol6fgT96M`V5٘VuoϥsxyKE0t W(@0coVt3\e%7]DܤWI>صiy&? z^l ɵqr)0lfdlaCsv=< D`X|XXn|[ {f_V;!4رiKikJoN2$xs{_ussj+O FP XyFZme15}I<3XF {NV K"a/ؗ4ݹivuvD |\_շ-t? z,0˕"VԆ޹eluD9|A M$D\tEɶYᰭBMfY0cG-\!.+ E%WXl^W%*3b-$uݪk.!)' 6z,"7.uR)|c4Âr90Lx% E ^l4X,B&nUR(Tt…aH{f(r`p,V5,608\c1Knkg_9Eȁĵ{"ntJa-!H0 bJ&1]5B8,ߨ` DP1McK{\e`xs4rf6du20N󀹲zAE"5gm+T,6bYTwyB8LSb2l(܈XnD,h6g\{j5wEw+`E^eܞ%yWu繢ug<&),P&J]A=EFpT]ܝ(uad)*V4XEq0WjF!a lRmΫ*ij|cwǜa}Gωܱ^s>ihNω+~_D^S >}kI|dEC}J''Y!qDT\ o]d9YY9eAc8P[3y(u\ 0K.,.9 g؀pD%sHw[E%߾W `#x +/2ITu1w[u9% KNKpy#@\TޝiQeȤ#̴J B72QOEZ>f6 j˅=Ǥ<%ܿ>C]Y`: ${zծٽ1c7Cp@Z-e,WV/HZիߏ2ԕDži\ܽ ?B_ :jE)Qw@sr9|"#,/U,p&p $GDq$=).:}lQmQL9 P(VZ?A¹?p\(V>AM N$:HO0STAo, IDAT]Cܽ 0". 'j.6;#W*yU.1dt Һ:IW*z`xf8/d292jf[ZlƌgNg2HBvݸ?^b*OI$OyY׋25#^9&Iji$K(1ȟ3] KcҒgV2x)6!Yj0wWі;q%J7m_V,.Wܛ%/\i|[Vul8 /V lbQC)ԥQxFaC4#}(UN'-KmOިXQߟQˊ`K>:EC^T198=r߭ v؃Ka$-2d{K5y͐uVIOO/UWZ AR0ksvEB--TV;#-/ 6.Hzٕ %(bPTr1|$nN%燳⼜Cr΢~z&E-+%.߿"y붫gBg|gde9(jO |F HΉd+4[QnbҽMF Y%{s+tuminlJ4G\$>%xƟ?ZYǥKyE+_"H.W-Uqkb/^ ',W}u*1ڟ-7Oaڟ3(/ )(JY]s7LkTba5>9"sfx؟[_g)E{KY&ؼ&cB>O`hْO}\_~)7߾_+пhqG/|:3כƅ.97}8ܗ|ʣI~MaUK114yAҴ.^/9{ƙtoTJ; o)ڤ87fM4oOq+{iCV>>$;wn75=N󍣣cg\qԨ,4B= X]"UZٓMde "~?Mn.3bEB/Z0"c"dڶw߾Z"8Mư{X{-R RZlK'7@prVu=-Rig%geXwP$XO\Ԍ})@gcfF|FEϳepMۮ?),ޱs4B}U0\Sv5UJeRVW k,mkU9 f{"j>Fyd*:۟!;i`:/,<+ur\٪ΒUamYL'G>I=NgsjŠ25e3W})RyO] *iK[-/c+Md?)1#ؕy$km ?_Ԏ'~ wl(jŢw|$/8+6Fە'R-~gߢI9]wUz zg@V)%xk>PfZ}rpE), T”o7n;W}dp䀓YvP4՟ FN h4" Bܵ;{FL sh0qFE0syՊ*cii10j|'& Al#k^>UFyfn(qʼ155Փwqqw#S*3%ADLlcK160̶6`O#Qʽ+Uc#q2aנoif.'hlƽݹ1vet)ZB;5iz=LnkkkiisM t`0߿,cu\.5h4Uz1;ʞBكZTaOߚo]nz=BaàUvsCc<==/]M(y~o^ ׿@{b4Y5 &a6q*EytՇ}qgL@8R$bѦw]RR[ݻw]NNN#B!NP}FJQw' k6[s_Nqp4}ǧ(>kqϿFuʴ߯fކwZQA+w Zk|͑mmİor+MMw ɦwQTWT*8iOtgXYG!B!4 8;b[ |zZ;tw?7/|7<~~oMDtgNLmZntMPUUe{` B!zr&rta$8zT[k[-<16x{s͛V" !B!4F7mmflp͊/3KÏL&0eʏnnnGݨI0/o!B!5G #B!{<9B!B!B!А0!B!2f#B!BClB!Bh`B!B  B!B!a6B!B!4d0F!B! !B!А0!B!?{wĝ dHGP4 Rbmvvm?mmwZ!hj뱢րD9¡ G$ }L>ϼg$|>3mPftNO'zscO'=G|;hO,[Iea>E„ܻ'sUNvvzN C}ط뮺W֍M]VWU;ݷߒTVD480JpG3x܇f%n*X>4g =3 o뵍܀Alm~]R]]}!?uX~aÆΝ= ckk+Μ9ݿp;2[Br 7ww"2thKw~jX$jܲ.:g[=_AuՕ5TZ_RpqOfKU4vu7g%<ω|sޏs%ǭe[ ԡo-3n9|7ʝ=)>&/l):a! ""*}W~sW}6'z1 2?xLoD4P*XdC `vae}];̮;z$T[ڧ@GD666nnee(}5[FW:>$4q, |+(ӧp>" -2P>>Y& "as3X""0ȱbb*3sr)0*R'bD u|oҔan 2%z@zZw>i@ԵO"6 #FWڪťe]]]Cm=m2(|Je])MuesUUeN1}5MDdau!rR_OkKǔi0xkWsy]d,+Ȟk___2qg/0VUTVMo;ai5qi~vv2s˒/]g5C׌c_Z]_[c72n]b0TVV n=jw1L2ۆl}Ufk|UVPP^XP[].fܿ(D&/[D}V_l$?ke|[]ȖI-Eĸ\̹(HԜ#2A'N`WƢ/^G??9vv/;::Q`rݒ }Vf[udTzH{]$)_P9ebĶk6c*_!mlO7Q\򈨃x~P?{&ͺC{NZF:x烁s" ˟o?FYzy 8;;UV6_,28yxccW(C]\\lmm%>>g|.VӧJ'':*ƚ&B9Еj.ihh(53ʟޡӯ㎏_L{9tXc ƾ07?Ž+?ꯏj&"<2UƟּat?8w,ùii}ʗկ fs!AHu&"77 5ҥ֏dsYУI|lCK =D4X,!3u;A \xG~$}%"ȸqXHHBF1]̍7nF\=Ɔ:8+_MDյ9gCf ZۻrccVFU;|2/ntKJKN:ܥ O:,KPb&GV]-32gDhpC&b>>u\̜5)z:.u#*FPr33\ֽFrLDDl'Vdsnlkh&p0bN7h6@wY Kj.߉ U=Z>Ax~L_ UFr!mO x"$M5^3)",T9i{T5͛+^VqWkXu{S x/'dD{"t:J[:o(eqX謍jB%H6fI㦄MSH"lL̜wR{~"lLkSuY\E p§D H{8UwM/%"YTx<.){Ղ4"B.0Ҷ-_$C9v{S$ zy/-;a{/MZ2oGQH>닕S%D?҉B".GlںZłWv6 GĪ6ެ~޻%.˺Vn4K׬{AYN\:K\.(% 3Dާ2;JBD$+MjJ$B. eR G\iqc-KuUgGDyӷo$;MGC$ڱ]S,p$WIhIp fC:%@DIO<*Q1r,:\JD!4#…DD$[;`8owXB#$u҆jA(e7[V D,NeIl1=e6 QھTȠJ||OOIĖdб&"KPEXh4""7|+ΙxyVn- opX":$rlU e➙0NIw,f4~Vu "RD4׸uuߴ=S9%JBS3:')S&,M?Enޭwݲe63>F~:;%%Dh7YD#N#" <$ xD&FL_}JKhHu͌oP_H%SX"r+ bb_؞^bLBB:H2eIaSB2c7œ{!uӣ䞼ն$"D$i Rz;TpbܛҳD1k0 p׸a"&=|32%Dk߹r+M _ƿLԓզuÊo}G~UkLr&s^I+yC^~FNi8>FE9Œc<ω}'E͖>+ٜ4g骆݅ vvv,5"wꪪ‚ߦB~~KLDp8"rtty{k5G(?>?|$c>?ރ3YkiWt6mS;1oXI.̚=VZrp0z̧uLDTm妃bg+ܭ{~T(x:ԋioeJ;.'ҍFc"ovY^p݃nTge>}l6:99]{>)w<(PfQthe?&z.ꪫ+k쩴̖;hnnTůU3X1߾?}4;l?f g-Yt?*Aт>2\uWbV0\zsoP6w/-}οure2˵ :v=c+jgYYX,iݢpw@2.+3N$(@ `82k x6j1>DDL= }kkꍬ55elF O@D)/+w3&.,|D vhDdq)Q@X2ȢJ>T)bHc$οx<,`u^ȗGJEU5/a;t`^L/Y' 2~m0k b~Mv:iZK ʡ!nܛbX,[ {U(06466Y j 7ZyhVe{7Jɝ!".m_Hs' "24r0{iȯ9Q%5w+666u֗/kkkzvWjjX?Pjm۷.mnd#sKE"H9ڰƆb)#崾6?p\ݝ;HwE1QQ.2c9kw[ȸoʗ_K^ֺ6L >\ɩÓC6oll߁ eK˹g0PXUYj|PUY{ A݆XXs^='Rͥv1 yFӟ;^%P~a7\{2 ΋_\F QLrom`>uG΍5~2#M~a4eǥr??"jP.\{{a<<= ;{V|}[X5[,n7 䙳bGO[$1 .), y^`VO]J~[wii >[".dc{FJ[teWoG~ue?%էjnaۚBh4Co|w䫿NN(k{7SCS*.*n}Ecc99;߹]4 Lqe6@A mPfte6@sxG|;hO,[Ie6@A mPfte6@A mPf.xlOюb߁EE]ڪhw(+^e=¬KKe]&UUGv6';o_7/u㱣G-|~``PƉnMB}G%~~֟c^ٕ.߶yyMMMvvv, *,(Z7::~v~FuSiWt6mS;݁5;wě0x9^o=RiOb+Fy;{)NZO[3B_S~[|a^E}Ͻs {|+AoY^\L&rAAǎg}||^^)++%[r/nv*A(Y>7f>݇gz omMy*uk(F]=XġCſ֗Rrx" Uq4H _'"$jʨk6xAz#_* QOO[6TWW,-)|q.]jQ UWW;R}se9pc4v5˭yaZZK@J&4i5?iPHPXpۛDۮƮojj\bYrͿډƆa ]) ev7mh>G;_.n,cUuMeexKqt;Mwxf#`('#TƑz`ʻE7Z_[$[X4}yxz 訽=Xd].+((/,n3PTzkuaۗ]d)/.'X\F#/ - =a/=tD=Umll/ .55bco=\#ev7444\{RH$R6XsĈm9a2k[/'HqF)|ežd;c.;ǒKM&BNNNUUUD4f\dSSesr"ƎrQUU%9:9u0m)`ϕu1%΋\"p"oА^ ۹<(Pfw3r{N$%tKbJ e?wLqC߽;tΊZ~7NQ*|/MiZ E.ήh4^"mdcpv"*++sqqz@ D!gΊ=#韏yhpIa:*7X,!3鷼~7ok UWU:C]ISSS t c{Ʈy4[8mOvU}n4:-]:xʫ#ڟҒeRcNj5mŋ;.x]Y Un3Txd"lŒWשVۛ>EXh/.^ruU)X>;oyzn)*"'x#^ov݌PEؤ8ugP',3)",4⯱K4*Bjs8>Rwlja6U_ d""b]ǟՓ,jTqLXhrUKC(YƻCo|w䫿NN(k{7S}A)yntvjӧO)CG{H?YvO]I۰=mk Ȥ&-S.6.Te/IX#$"ݶysV+kZUVDdR}x{  B~ymDD2Bu@ryĦ[Kϒ i־b|bb*I~Ἲoϗ W 6kR4DJDt!]mxiYBDdPgxs{4(ݬOD>4[9~NлՑdjj\Yg] P%"1%FHDDy}QRG\1)%1Oh~DxLoΔ_EcDDǬygbdInzGGɤK13~Hg<~qj-s]:97u8F/<:ГRKX"ɕ ZJ"uV0hngiH&kPfu>W:P"#WX:eHBH$D:2%0&""ϫNtyw-xJ$ڱt@(l=mH_qVg` iYV1r9/p&UJMl%yo" C!:nޫYŬE<"n|qqRJYBQ5 ;DDJf%%lڜ[͒XbHn^OYB\aZ_%5ݕdL~Kґbg&e>D­k52!ԪuF,w%r*$4A*w|'^[ӹM%"۬6!nR*ċQpHd3!1>D4P!'"a])6bB. "JKlIfSj*~}\÷Q@DV R[דGiRhyrHr)j<"Iz@#<N[lӥmRT`PkY"y<"ޤE'Ymh\-j &"aJ cfDmP/1$-F+ɨDC8}SȷWSZ_'%uP* mjl۸@c *伤}룸Q:mJf|\]/I-/r\y;J7oq;YFzo]0Q!$VƯ|4up jHSގ1o!1|g\#P'YRQ]-qkfEHD%:V=qH:u⒏~Z8إI%﯌}!eDD>#%,#CW{_t!qpM7RXR^r#[/lusceu F{EC<1{- ~"<:ln2۠66w+~;=xT_%_J>tvCcm G.C^8[Rm6!ۮ뚲?\t=ڗ{]RvrQ3$zi|=2ϻ!-A݋|ʆAC\rNDCGqוkoTUC}vo/ރc;96pRSLquX[]=uMmMy1]eTrLm %u79{k6 DM ̅ZuEn>흿 3:ٽHayӭV22Io򇕃Y([L~pnYoV痣{ި0+Ҽ'7gy LDٿoO?h؋-t '>!cNikw ij# 3}Ttw1'PG"߾J`L9#|툈* vHךm˫TY3kchFy! p%"S]{KKK狔zVVo0mb7VUk䴐5gn;"6v2C~6t"Co{ ?{KΙ5yuY)B>Dx֕u~yTS~lcFⲑxβ !?~~}}efBƾR=F)wg %&'*|j^*5r&}'|&ҴgUFfY*?G",*0<-+i/K3OgѩU;G:,}|vd:{4n466ntTQD}n/uլrin/wѹ?sM\[s3y[f[FV%rĴ/ZujR>MMV='(E ;?[u,#Z)Kc$b"/ٱH)1^>Քզ>oRrRԶK@,3 64:)J>*"*9aOmON|zpJu[O<#F;?t!D=|I73V2EƎ&X~_ACԝUNi!#Y 4$LCgwiٿ!w߇m۫S]YtOHg1׫. ˧rw "ǻ=yZ:*y y'ʇzti/a4ש)/./nyР;yM<0?`iztZF]Fb<;5֪j-[9<FA?ʳ&#/ܳ-ܫO.,+!}q֩FbkPG W3-jx 7Kϗ 7Vohy6'ݼx]Vo&aӞt!rv<[S_ZOİ/QSKIŏY7c@DUW:%ef2"})2MdHX:z.'̛/9{+%#Bx4khaMHEa:{Oz=$ȑF8Xa)5Q҃7t#Qg $%#\MSvk>IWw K+jաL}|]{܀ku/&W򺰗Cdz;2ijjqBm_e+v$\h"rv2Yc̍̓fDfy҅j""\Xe!9HK  ᾢ$˒R7hU#:eĜDDcF"[Q`s|_W'T]PuʖCnv%ա 긞iKt>_4N6LHD2hFi=Cwtz9+ҕ3ϸ::]67Xj *.L|Ϝ͙=kwN'N>@2qv⹖0"z@wD$ A( vlʢ|3y8{[nvuJy!_ ' s5~z›fnKDN{j׼~v8(6o%0TaJ{:p IDAT(1[}'/{h`K~w`U5Ñoғ 5*Oϙ9|8JRm%Uw,lk tb3rp7ullmǾ_4|W=h褙6vvry&"MM{MFQ0c]K征n햯(ɩ0Gz2d*7Wqd#\ "j$"tv"\X^TCd/mypXoG#ss&/.;0d,*=:j.:~@Wd9ޞ<~\:UWPWc+# )c)k;]/&!l̅$ȳ'cGDU5fre0& Uns$DrҪGʯ\uqPPr2d7o&OSZHT_W@DNfk*7_,y?-KqCDUUD}NUXI}ݽI۽?]27wFGŔS^n. DܰR39suh|I&_F G8|'j͹Ts3E MOz 굅>Mb9Xr ,&D:£S97?.̊AnHn QEaa=ժ2^m 7A&:.J:#?K\A~O==GLbDx1]9~|Esv roIeTZRoT#)է+%`UʧKLAUJ/̣=H-<pd?q2'HUU!tj6叜J9]N\zLKN$LEDz[3'NK[qkyG[۳ ށ;?zp+l i[<<_JLȐ&u2}s4hxAb9oS#\ө+e3IȞ8Dd9ݑC ؙPh={9cs5es > v)<۔/,7|K6%eN*H}\2@Sw'xRę|a4IZ렧&8@@۪ڼZ{rL϶e}Pl Ε ǽTߜYOx)lWbuv$%K{{=σ3-zęD?r4cf3w3vu*w؜};}tVtZɎ_&j:g}zU=t rs?V:[:E8=5e\v~,߫Q/-0?D=U:4cޑ cubPm-YoNzf?0y%r=q Xkdb^9fcK[us^E 6ab6OztЋ`47*..[5\OiӧK2"jllecG0Or8=RSS:2/}}N^t &h|򫅛Ǚc{rˍF8|ƜA"2!a6`Os#"s7T|GKstȬ?]'H}z8>ܺqѼZr+~c *6{?j+Ŕ)E mTM!y.\ep#d_y;N?yE,;,Z;7o7# ?vhfSg<ŐDž_O_9?!"*}/HӦ}rCs7i2lZl{߅Yd^ʩ1}-o'|יc/Y$&"޶rf~Oym#ADD+G~dWe\§͙" "ryYˣgp2f~@mq\{GDDe'6t4e]91E/_\cNƢ/ӎ`Q;1u囿\1ͯU' CZBl# ryxbd<""Ү y>NTT\޾m[xxDA֖S99Gx'N?WSS?0d0CDyyy{]ρcƎv۶n9u޲̺lcccu,GD۶n2lXUg43&o.nPg4HO[Mi˦F}򡲥ϬͫHQXJ[07§yUⰅu!!]iW_~bȘ}X?^v>f;~13\{kRİ[W}mslcwgHdX4_~$~"jo&tⲥѻcDD{H˜su]Y7T{8c&?Yl(K!ƒK<'y?JЇ]L`,>koG7ŧEM3EG7:dQ]= cgfEO 5h ڴ} !"@ DLbbZc%`ҝ!bD ?WFTQ2y!=fkC'S|"Ṃf2f߁!b)﮼*V%wh >wd{$|"?*Uc"P<pzx*WSJCD' H>ɾ$l?CD".2ΏOD"o,/6=Jq3x򮲸MFn,/-j0( ߥD 7 i$3;絳=+@VY5z,[)N"z]aaaxxDبQ|H*i4DTo'A|pk\.׺@RēOq8ӧOY0;55ݙvk>z&k]ر. f;DGMwm{V07)?6S£']}UX"O41OTxu'wz/ҦM=C7hvtӖ뮺67\9ٍ? zQ%[b/j[Cd|^PE; nyD,_U^/={m>cUa͖5adr#ɵhU鷫@x9!6Nn6zyتF۟Tr0\\p~|\d~&" [w l pߋNC( *Keƴs۴?|g0AOL[]]M%DZf.6c${{{:Dj0 ֦jڵ7oH16Ǐ {7FԽX,VCa6>IF4Yi 4蓿ܦ^hlxYA^tmQ!ra _ęLȔc:]m+5°_D&mwF @pNB4r T\3eƊ.VLjb'/]Q! _J3q[g 60{&d x?欹,XiaҦ}Qd1$F;I{go& At7-^*U5 C엎%щ\/޽{7CCbOxw\vvf9r ɞ;z[2)m,-l}%+i$162J:szpwr @t$˧.ku"I,NQl>/uqDЍDhx,/UeHn6 zұ*jJ[pՑA E ga8 $QI=Nk0馶j=zhNx/7ٻ$ (N]37u .I%AAAAN.]t^$.|7Fn)ݛSC+"&|i61\"f#? [VJ|۶_~}uvv>[%FdTjo@;wn_pww$>y򤺺vѣGW.|xz^ʴP6@| %QvM."!.k@D^Dǵ 7iKGlUt˃N=E#ydo a_*GI ʡ ؚ B5&iĬQ8Da+Ϧ][, 7JX;\ gХWFHUO!02y Pږa|*A4*}T%`0=|l7}ra1HWD0H,Q>7k҉,VwguL63ĒY6xgjYspͼj)4 ƶ^UQd4%f] Oa +>KWR@Uַ .$(,]Bek  2I=ʡWP3s5b0a2^y9@Ƭl9su=($T~jq1CQ!@gM<ۤOD8Qe#fos;MO ^J† yiE_t~gAAW_g*8u_?2՘AA#ʕY>ٴtoD"ia/{MKIAW 6{y=Տ?~ڒΨHX,\&ژ?YK"Zd FHdzEOT T& v|a~\_hõm"^P*3l<6ΐml yF-&nU%`\@_a#6 [G4&z v ,$An%Qo$҆IxB S+!7mgZ*G29SӽZLeF|Kl> yܑvnu>]=uV9|#Nٻ?hW98>9jB3T (;Kϟ 1/jϡo?9T%=`ļW$"h_iQ䞃~r xM7× vY} Gx^(u ڳgG6shEfO,_<1SĄ͒mݹJJvHpٔyu/f^]DnX?rNZoN[2#ExZm>imvMkEf F5.a4!=~^:/T3x'1 NE4ܤvϙ-r?LWmۭ2hf:'$Kw,hZ P-|.7~X)̔Wdv܎K7jSPk6>98y<貏^SO| %e\J}t%b?7(ܱ9C$rN,6h ӭ`{[:AA^NNNUӧ{5jn6kkk#?.yF~8n`;2Sx(_LYqKge4#dJ x8SAػohd0g4H,$.5j{\%W)GR=iPe$5..YYMz R!c |!KOoA1ꎾɓ'gӺs2x>|c,o;aN2L{{^^B0'; lf- ֯6l}ee+:aN_DKv\:q3Giy×T#("b 0j4T8Kd4YƎ|;FF`2YONʲقPdjaVq=/8PyZ&5&6+mT$6D fyTp}gJ^t).Y3FFyA&o(mL۽T0I $lt>s- pi~[{\h4A(o޴~֭b &ɓ'7o]rsq|||U&o u{7;cGOɭbNa<Ço">0D(3e4ܺU*W2 PhN( =8 С"ƵEci'R6Ap&ݝq \4@BJxγ#q٤tB|I`ٲ7,L+s}aj~9H,d@m\xc'ݿj!c4 C=̏heDR DZB|s(n*LدPCZn,ta h.'%]I!8+]! [/ P˄di/WfO*g:O ]l ܨID_ \Lٖ/V  龤-8DtYrYlp1xІMؾxAC<]yO?5ztޯ /8   3rtt8GTv wW\r(F~'(FAAyK$l6bN΋.HGݾ]z]O   <;GGǰoݹs[y.K?~qLgL FFAA:FAAA AAAӠ0AAAA: AAAӠ0AAAA: AAAӠ0AAAA: AAAӠ0AAAA: B)إl>bY$=Պ-:xѥ꠶Ԭ&DGm-1 G/J~Ey͏^vX=:=B/kC&E!  KEyn*UJ}G?*AK). @}63߫\Y/TN[Y֩'WuVkxLX mݸqhL? r*i~-)Z޻6ŭ$c|opǴGB6g6mjr+lh iڲiBBytqA[/@Sړ{Rt6m1Y}>)_7ǑtK<h~"_o۸r4u{Z% }}Rz Jp9=@2((ٜ6c%\zZyH;ЎLa@V_UY e縛kӰ?PŎ|eq,Jg R,hv>_}O/_ioH P*i(?' eoaPiQ#OijN7( *p.]5\AAA _:.<^^s%w β$@"K5TȪrk3`=pJ0VptgGaZeܳצ|q`+o{*9s02v^`u~ Z4۪{hUZf{Li[[J?ؿRy /y˱Ödj7M#lu#-coޝqcAAyj(~/^oݻw34T,y!eggƈ# RI]ݱG%"޶zlWJcsp(Sjcf=aF3pt8-=sn|Qk)E(.x 8""p>J:szpwr @t$ث.ku/" pE)>2T%6(to%^ V= 苫)*w֭]Ч8.I) Mȉ>ٸPs8)Dṋ!V;'4e'̏Oj,H@Z3㸲)eY9xZVK=&  ȟGoAZ%X]ޝ޻3k.+>?sO f |b=\‹.a< +.Ei69v8v*x=N^r܃C\Uj~!bt|_e x}0ǰ7;̎L,rN+qrkwٞ p#w',Eays\6&ȏ?6:>w{WGOܙՊ49|(_>z4 .;@JDAANcEyA G/u EVj~Ѝm!DlТ]37Ev?m<2/fAg 5AA/i)^S 2^s^KR@j^ACC߼r(B}t%x1肖$ZBQzR@AA\5[+ :]>fOE"-(]=K ՎlWi=o繠LҾW˪̎l7fh1f#   _ AA@AAAelAAA4(FAAANlAAA4(FAAANlAAA4(FAAANlAAA4(FAAANlAAA4(FAAANlAAA4/  yjlukZ]/:351~B"1=|KJrr``g߾OVlH$H! GK%m  l6g@ٷ/_yu_-T(**oO~EZfv~nY  |;;9[u,hx1ڳC''򼼪߾+SpfWO(+==- FkO*V}WSy7!&1ce6eqW?>4fGs앟KFj[#z7=ĆmMj\:k1MYb].Os A\*H]%LX^Yk>N7KĎyAEGy*A3L&ի"AsWVY߿_Z 믿n6^_܁u}9;;-.. gR믡a#:(/Trrb7N6)$=rnjUcX'oK*vuA@XfR]VDJMKW~ "'#JvHUHR1-$7*o׈g m'[g{6[R\qY ([)I|ٹ^<o:lݲ-po#D?"I3v~=D8wByfkWb+C{rdpz>+3_8;;e$w+ C]m]W_$$HZr~w߾}*77db2 n9߹}N,n,.Vl, 98:t IDATU^/vA={G%; ]yO?yk(www]Æ[!a7o(*,16t7o7J9tꢢB|7C~yŋl6; 44]RMyѱwur`RnFnlv/ombUHHH,W n޸믿:99 4DwBeggŞ..Jݻ|Yn0jkkvگi LKo6]to dyNqKzk!Cqܲ*/R{yѫ~]x_Lf^>Ǐgf^[VfogbuQ[;}'''/oo⚯L&I"7@Ef۵OM煮J=^ԀlXKh̐i'@*kH3nNV%haY/e*UJǣ zgK8q#s? <eej>0`Xɀݻ[2TU6nOL7CBWTUJeND⪪*Ng|Eb8}Te!CG=`b-]Z90 6!ݻw ۷RyS.ϣW)oLOOڵ눷RWWwD^onWW{pz[o83N|P5@mmm uuu΋Db:o @^^d6'Nv޽iW\6|{{3gZΞg={gԀ@Ri6G`0zda{钇G1c<ݲǎGxX#vLfs_=y򄃃7|뭑0;+Ky&]i'RSKJJxcرwjѣ&SMP!C ǏL&_$ɡ#GѣDž ]j ry^`PД)S=<.]xv)6eZ!CFβEE.-] 56Ʌ68( x]:fnm u+P,B[Wl^#8XO9?_&AN8kq4ĩd5? Y_KѸEp e -+stt[2͹.ufJ4՘ƌG79 CX>|͐PwnuII=zNNbϧ3Kl6WWW C_۫^%IlodUWW<۽{VVVV~J.孑#nnn{9ÇΘI/3 :@ ZPPWTM}%J&#ׯ zG>;n|eu;p8Ͷ5{_ -ucggrѣG ŀe~~t6}O%n==i;X!WGsZWTP5x?}nAnݘ,&KJ**cƎ={],4HJ׮vvvƏ8z\Ѽ._ɓ nG\W SueopBq޽^sNc dt$ f 0ѻ)jqԖE+b6Fa;W%\7!nU g#) wEL@/za~@}&DᐓHӉi*];9*RmZVa6i6mc`F߄/ S bzN?w8Rwz^S_r;Wb03d̑ T} Gm08`{S3QJ-ВG<9L5T8}V.Ie҆*39}r{&@6aͪv"~t W_nl6G'LHrܯa[@Cca ѣG,.U@QTVKNNNN7_wqzŰwuZDz+ܿ_Uѣ~ |]yykiM`tyh4rrr} [PSu10(֭+W.L~CNߕoYf2YNK jL&Z7X]**ooݻuuuB`9;9{zvB,JnzĻվ]t+WLρo}nkOKa<\Ե{x|2zy=>o]nAYYÇdt & WT@Ϟ(͛7sl D0boU0qvA-u&m2”mL&fC _;7'T]V+1-Gl޷̟ftmOEEhM,[5wÇΦόSL&k122N<$IΞ7=͖1څKGT/v&zcٹ7{&o؞$ظ(ץ}TĞ-øDl1d~ XD|Iu9kDZ~ TǾuӈ&]*eXQƭ.,ѧٵ%V1ur|V&mc4B2{I*r:  1$_T F#X_n37-4ͮ)F1/) :Ʀ^9ٮ]-k r/f[{-/VR>I)U_{_0W?+* >bq}Sȫ󙲈P XcjN!IRLpqGERn! cq|Ο;a dh,'S70Q~|V yI2W pω 2ZP{C`Ǎ `,Ҡ#m[VG{NS#;D= f+1zEم$+p sWsRͣ 0/PТw:[^'$ܗXӢ"C,GObe~nP7@ڴ|7HeNc(ڵ9FϟK0`8Oam 895G:B'Lk?9؊ܬSrsr1c#ގxm@E 2b Jj.ǫJrs3FӻwoFӑ/m]e2Yդu эO姊68882u4.p݆ l)ɓ'Ν? l6SEQR a6qR?@x UWWzwvfؑH;cot{բÇizsLN?VZ! X=i9矍1e$0黸p@ jjIE/Ѝ3h2!QAГtL}n4)}Y9HΎ5OBĎ-#E?X/#ǭ_8U8:75O#)(3+ @<\А%p;*tf}g t#u2W@`k8\e~P%#<fq,Jg:G6 m*ͥ?Uc}%&#I'a@?hVm]Y xѻspGETp~*L~cV 4pq(*` >@?*ςV뮫/?=Xj6ʫ0' ecV@Q@U)&/3߰j3׻aߔط"ȵ#;- gD5˯9y"&Nm`0),=ղ\\ah}^]yfuuVi6ٕP[(g^ryǝ޾]j2,/ĪܶoeZϑ-Hd2toywG 0``eeS -`a6kkkE)pppPK~:uqB隵lѶO?,`0m-^䱋iu Gw-k|}VYx g._J۞@ͱ^7.lv~*y%lGkos jz2uTx0NȲ?u/o:gA<3;r9S i_i<{(wb?!OD4Ijha%I.9ByN Fuu?.$v16C.ttZFcYk=oܸ^[[kŞ EvVlu:Q j;;;>_\2ro޼ay֍Y,j+fo.555r@(''fӪ-kkK/vͳo_#urr2m>tyRxSb'̉X,ﴟ>S"to1ÜHw޵^kiooR,骩Β ؽ{W޽x[!J|#ޝCOݳۍ7U*hmNWRrK*9;;SR=WzD`aÂ߳gbǏ-_{FӥKK\n(wAV[ֶ{FԟJ^lD,4Fٻλu %5ljKد*0N VqVavv>ZYXv`6aRu8%POz^v/?3S{_}Nsr\LcKlˢ5pF&)8<+9rtpB=sva?H+k)aw ;=к}ڣ> g-zᇫ~WԬYgP*֭[ s:^Ih|^!dYTg4bo-C}Vo k x<lnyMBtBHK"$a۹%rΎp֝?9F p6۝BQw$@{HyдCwۣΖ掑(w?=lhf ;6`z||LXf/G@?|Nd AG)fw" <B BQ׾Qfo¸g/ Rg} ku |maGWl̀`Ӟ}h%"HMwã"Q'|嗞޿| 3znJD*/W贓&)~Pή>j}G8kj"0PO$c=裟~j};cG}ƍrqAKK~?a}П/]裏޸qƍETjdS*'tϜR]W_z(˘1! op7Jc}Wu.?;~6ٿ~_RSnO:({L~衇zя~tJb ̦]& ~:MLWR?r_?P ~CQWTߺukLȘ~/>>h0].W@@_fY=&_~]99~}{U?BƎ01|b]S嚉?(O9}.וX,\i fމYX?Z wSuppwͼp6y%<wmO]v[-J/?uRN4]zO{w:U>Z9Aʩ&{p7U{rFWDgq|:y]GH W~Tlp/rػʶDy噪&7Uo;a+RM55az% ⾦vuoSӕtG7n:7 *1؜Nf():vJhfsN[sv!|sS "_({K@~ я~vX髯l]3g ~.}x8DRo޼y}*'O٤Iz衘sCCCMỎ|G͝7GpvGEs0\ IDATDFy *+}tM^͚=?g1s&:΂~ _zxKꮝv.TkgꮝY#FF6l—lҶ8'=(vX!meY _# U}D- [飽FU`>;9l;G? ݗ_͚3.wfjfk^" Ӄv?9 '  bl AA7l   _0    F   bĐ0    F   bĐ0    F   bĐ0    F   bĐ0    F   bĐ0    F   bĐ0    F Clel.Uw|K NpN~s^gu-(A7$4d$o.0R޺?Τ}F^fgutikNLAAs3@5MZ~^TՋ)!U讋潺C,׹}Yn=K:# 6Q\gC{'WPqdzX   Fp]3OP=_?!yI% ݟ_WyBgnA!cE~W{M,,)Z2VBSk#C  I7~dRXೋK2_}_+x>>_u.=O>蹇~}>{",G]<]tH"V-Gp)Dc.~pwÅ90`Қ$/el'f?0c@Sջ$l钞o.}BBKUSo.-)3XN7EK&Ώ_! Ԃ:Yi53mӓ[󯵵!g͕;6Τ>*>z1ʸ&Qݰyqƺ4IN}m:`s₶l<"lr"g]3/O484q+&s5նf:ͪo>)5N/=nkͻ:3&|K&_1nMW- 2@߹)o>Qxb]-N^dp֖.C*+O/tkۅVS5TU&NKO,]rhQ쎌eu`y]Vq_O[(? *@?)9}Nk&Y\;p?fBh{zdKoa"QMـ3ֿ?uG׺|Ҿ􄰎='zߓygMg󲵘9yS%u_w[#CYu-s(6?>-y}/GQ=}g]B[:dŶ5ŕM3@Qmf-+Y)5==uqPwBDIS]=NE:5M gLυٔWDJs%^K8S36۟r;G-צ߹*RYճcv2coU,dY{Ό B kelyt[zCʉ>SRghtLk9۞| M4m  bD0Eccccc_~奿]pɮ^pju׍Kkk3hֺLdz`ƂY5^]i X0b4X<h' lR/TSsZ+-;C0ONK?DgK%Bgٽ55@O'7:-g RDmMY܀l{\5#^[]wDh7 6Hf ʏ!scE@LU`.]s6;TP f0=wtGOU5BZq2!ek'f?"U?f΂ TrhrAA} |׃n[}kk%S<#w'EB мtpۄS-%1A>QrЊا.ؼ1X6.tK5ۛ u1|2sP$tۛ=P\noj?ʋǻl섨w o_ˇGAQ<qog?(3A4~s ΍uLC!>epb8FFINlO~/J憖uvz?Ζf7%u,cFD~> tγW7THBM WL,)5u~j$bsuߑv?nAAwiww?>>i:7N`k55Dž}|SyPLuʷ*1wݎM!4f_z׳~?3fQlخB6mk՗* wi>^i]D?`:)8}ƭH_YN prw}rt]s!O5ٝudt ͫS<- ?z|T(^LZuUtolHC-[ԫ   Xd}硇Z~$O=dP,Z9mG=0}L 2q{GS>B7zfGnjVgsCȌςiN;S۷<{3w'2s;nEZsLʚFޱǺ"Iml; $ glϊtvv4w9Z짭1ă/P!a55fIx=]Gd쮯=.dwgԸcn8g{甏w"@OmrT]oSk݀px+yyko:nQ"!]@r{i:! RN4ޫ䜀3+38 >u༮yUN@$ lqp+?q9V퇯гvL{0a<:tV PQD_M9됩Ӄ*9ksnr!q_ӝ|(gsC@y P5fjy;  hC$^{N }{+ ~Yq E3 U@t3/I+8AђqW/ ޥ$SD/ݠBv{@ ߽z[(r9 XJN LC.7c0O[k'JU߆n؁ǜCŸ Ÿ]5pс-: M/ۺD"+Ɔ-m>~Ac+6и0}Cו ~hΘ{ 3u(U [5qbPuEA'O&;  n^'JďlCxHpAG>܉׫78#v|^=g;7}w{w- S^߱lFAAă%ddD_ҽC _W>yv)ϿHqVk˄|gF.DBl  bxHM =cJ{6܂_)^Tݣ(6N|nu}[OQIxBR\ȽAAA 4Nwtv]-K=aXy(RDWa:Mvi\Iw؛)+%(pPؚ@˙?@gq_k\|Xlaw˪-ձ&d:\@[<.brt\9wuR|wU8m^ni5 j=(o/p+/gM/Q)ԣϛNkjf-|W[SaV T>)&qu0 4`luf"V_ҳ" YǻȸaU TSVs}GsYN+5ЌT^"1Z6=7{~^l vD~=YuLl\9Vr$\s,fu5o|6h8_F^"BS.^%&͈b9 0P(s7O dV1qiG"[e$ZwIܞ,7ͨ-R!VD2ά+buEb2m"VFǠjkM@vD&)s_^,B@Y zZeP1rT)}sF,i͍JLVYAK4ZXgt) иC qKwxZțڒYkcie{5. YpoHH\".^Sd`b&* P\&sr.Eg̕]42&^*hVW8+bHC0= #3M{2h/o5USu!E! "YD˿WbHM1Ve`e" `_2,ɍoo\=GA<:6{;zIm%PK|ӫtyQoǤGKi(< L$`dw>.ܱ}P:oސRjXq/1s7Ͳd Xk@ExijUYQ"y6qT+8iU1;@]EVȗ]e o:!22dexbsk=EY=Esh#gFAɗyS^~aL~&Ds¢/+[bwV@J|eW::u](6wkKOdE W@L,=PMěEV,ޮl嚤whg۫BH.ķ ͻ,̒r]4ȤIs;F'6-EڑV5["Q9(Δʢ;lz̓5::VSui1֝Z[n4Y]Z,qGxƫXe9&5}i,5B# +J'-BoUU]XemrzٱaTRh MZг69mfvՁ@yTB_˴cJMGC57{;ؔLˮs :;770f$v5zS#r5)DIrvi>[Pl0heyya/)כ9Mf.]ղcz#ӌb)(];/~q`wE0> #,QRU4hj4qPzUC˧3H*~;cZbR|}jH%eХ/Vu `cecE,l\@&RA 7P'*: CbIDCy)2^o.Ĩo?1{-q}~>򈈸nˌ{_@D|BgM%z..u0ji_k(׸Q-ŇS^ӗY=7X5ĩ |+_Zk%G[}i_O!%s+ͯ^|iZL=K%S7,yV1 c}^Y@Jٝ&-O鵩r$N&#z a6AD,yK=LL̞~V82Bɲi'_9M!J<ØdukR7%΍Tr曌Vn?&8esy*F`4,=-x4wŠ5…,S9y%@3k H3аg\D50R7&@ٯe<@㦕sriv4L^YVӧhzZz0*:C= t]͎}zr/p9L?eJn]Fn u9cgYh,3J*T}vXbX7?  e+ݮW _/^p49ڲHxh8QD1MZ\"L6=aA4w),>ܿ$ \rlCqr lٻ5F4^Y@Z\2.T|L,앜n#a6ADd w*2Mګ 5kFǿOg4Ċ-KZQƯOTH_;#fF /蔾([Wv? lβu0:<&R \ ,7f[!PH|ά~PAd|{3v˂ˢ3577f=zzqw&;L' =G.rsOp3>l]WrOO1 `흱CPCIqO7}v "c#i𚃥7:TXW7KYJʌ L1p]3W %6EV,~.oޕo;rIRZ3U20H(F8*^,i_W5q.@9i(ww-#u98esܹfJ3|%W#e i^^]S"؝UuX okY^X56-VÐHLfRb˓شFE=@+R h`6kWZEG`=Wr`b6%vw͔=7L@Z;̬01i}<<|eZVˉ=;XK˗qVUd#huz &vsbYRۗFHӴo4& ز%vso-fA 웭¨W8tr S%NJVRiܓ{t$*vF)z/<$.ЖA3ȤC# 2 Juel++#dMZ;#լb(g3vbešRd*/кO߹&iXiz!$v/AGz,;Ԡ)2*6%v7iڵwo6pQܵ`o zZ٥75BBCesK "U@3~L\!:soɊ#QsfN _u2[-ȓDoGLr/k][<+"ko31Yo3' K P2&2>>fβQ|AnZF_RT3$.g`5, d"D'+PάPƯ;\_c+J._Z0aɪz,4)mkrcyQWXf ųrj*O- d :PQǯHh}QhcF@Y*1zEbtPfg+w*fKP:eo OKKZbidڹ8}Ŝ3zFy(7-/7+J.D<%yL[Qb̈́Ť^{1l4.._Q&.WˆìӔ>yNcFzO &.m`沾F.Y&)zGVbfy y䒅+D4;{U|*?vAqQC%卒q&D|QtVe%m(=NA ;xf*~ dķPۍ6]!W6~;}'m~9W/3 k =^ʧ^w~Gk!#ysq=؃bt%Fq$)e⓾+A"膄MZ~Đ^TՋ)K„PW.j^Ny_Y{|hl^ҢyYq?0UI聼q!gAD7dnwB|vĩ[NJ, >(_m:'BwXM_ |)w{i rfAtCQS['mmE#MvWI^I|TҥCWI ܧsѸgn(‚yӵN$"aq4oO4f p7\8Zs ^,9pNXp)ƻ)ybs 3 4U[Xz~ ~Jf-M. ҷ1X-(TYe0Ғ2tSd 0PH-͟)%V96?=:5Z[r\ YcL⣧ٝnKxnr gL@Ù]׶F: l,.hkNqs)ZMm&'*0WM{f͉3 >բ(ѓnJܲY44UPS):`~o,6.+eraA4A-2h_ʬ[N]t7>^Y+ 嚓5e?+)o:Р)6yuZzgp@Gcwdnj-sڷkb~'mXFQUIs^[5*'dge17B+xgm9öE7߳ 1g-'ou-} a{N~){'26Τek1s&JG<?[Pl~f}Z^.{zkj'ΟL zLGdy*?eJ" ĕ f7NOG-}9c{\vce}S!%/^j?`#@-=hx>F+fO;ǒhi~k|_R߅ 탣xY&U; #a}'P,-&~ἡs)LVSӹq\ǧ:u[̟yv}J]cS OY&u8$nSVkV}peE= |H"}]Dg;-#AW}f{g};f{2#vTl6?cuU˔dFJ|iWľI־]\Ws F3ǻ|RBdZ&/{& бgtn'SYm`Luͩsۦ{fVj;b5e>(pPؚ@M{Tˏ<92s] h;ya@KfA7ԝZG+O~p-H{"\hmfi&^.cźOr,Y*WaE&(;`xh7 -YboMb@[Q{]Z٢ԲSw+r}iF{|m93> YNotSuzҭMP/I[Bhw!]UJuZ-P^-vX-Uk5ᣒ?UNm~<8SәO&? N8J4,a`(+[}hƗ?>/h=33aXG|+2ೡ*3Sa,@HpT:v5Ɨ0g,v:B0<: 䇅k3e8ewʄ 4,aRPF0Db ]GBle7luɧCD&'i-Ta!c]{XP F׭+F7^=|ݚa#c] w!Ypx4\O{LUL͆٥͆e_8Ɖ ɻ/rcp蹷&MS"K9ٱ.iߛ {?<^©?S4i?8^tm",ɚ)Ll{o+2;kdž{e^Ë6fO?}ƒCCUO:;CtQ̴Ԛ6gОfZPi:^1.)r׈|2FiiP:堑F `H4{s|ARܲP:^'D(ڳG-'.i 3Y&u=x#*W(lv[O%w~ߞ{D@s]ź-Aˉ4e(i84=Rܒ t[iPUO-,-..b/ya.㐳 n:rl[ZKH,#`%aen֔wYu}o ߫Prۿ^t=S!C8UXc1KSŭew[='Ų6,=w>f_s0(ܾǪc{cir#zG26[?UH_ImqGuT۳ X1?YxW12 q e~d{_uQmuߦܕa%Z3{i{==uL{ye0cS'N<02VWC_jtd뮿o8G* ަc_[Z^2ikL8I@eȥW.t-Z[~n7 "$Kͦ#=1p6Szsۻ}"?0숈)c_Xm ̀8}ki?ˋrABsi#ʌ ؼբ,R{  =MN}́୧vkyAEh j:Ƭi^~}и`8V0!2#qpC#}K>C8A |_}bM-2W;{ '`870&&x92 +`_[ǰ#"TYIKMkƛt=܇{8;9T2W֠%˃-)HVg4Vuw5i9Q"HcusUp樃~KL2#ᶰ "Y:ΰTvQVy6f 5># ccm$QdnwO13@9ru@ɝv1ݲ̵$Yr7&ޅ߶wM|@٦'M )Ъ}yS3E/xm"鳲/Nj`6uw7Of5^ڸq}bb妚Mՙ&}Y/Yjt~[};27woU?<|`qVͳJ_H9zOIq^C"sr޾rMz@3[鐊2d~oNZ qUD+-T8ZccjѪ3CH3~}zpr Up@d-=4VTᑗWj0m G:thM%סګ̇h2F~e7ttBD҆)0vF:$K_jCݾy5U.NiH=eLÄ!l3{7'| Ef}?tG\s ׭˰T$+s<`RߡJ; @{zXHC6".})N{}[IMErWeN7Uȩb|wey<#/ҸTXϠXܴ!gg'Ɵ9z7Drf\Visz+5zy 0]54]Ô8˜mm#rR>O-?exl^%5V@n^8PiZ!&[rɪ&Sƒ+~o32 f;H@0³,}۝kZW O؀Gio.gc͓\ *&Ȩ U/iRo,ݺwЬիA/$fe+ ٱ'%KPqnWKӷ[#4\-l9 |oϽe|WA)#s@d !]ZhtzQ"Q)AnH  rb^QSrBYWHȊ_^!][x#vm8j5S򊳭0J㡭f{=J NH;FOȳ1V㔖&Sҭ=4"tLlme+J)N%*4y=r@תE+fWiZ:lL;ֻiRi5u3\S[3cH @;bvvZb*wd n/3'\ή}p7;ܒ7 0R\al/nA!s4-uv*:^6OFҪe'xyST??2a04\-͇Z4;CcB|i>z|--SSfijF[QMEQ+ ;?K8iSn<淅_g;a,"q >L7*^sե"sP<!DiӨTRʇ4jN'ƜũuzD ]ӘO ws*}ssM [EQD$x60E'TʼD#5 :8sR-D9BL3;Cr#܈I njs\jDNTT J0GIڢ≭9d0)Au-0dAD0,3Ǔ&uhPɁ.f _%89Gvns}H@TMآ(W&8f5(xiҴ~K QEM7Z: ,(UOH;f +Ro?k骞 DUSY-2uqMsu3B Gݍ:dH {RBb?nbS#pT [~}AWm՝aZv/[p_alG.:AY bD_1C]WH5Ʌǰm~{jO胐B!1} sYI$H#˳qL?SmeYK!@ݼCŀM#q3*^qvxTMUecdRkJʷIO9{q ;hFxA*0@nzTTrzUUh偊3[XNc&=g p`$ _/ꯣ_(NEq[^mi-^yI;^;rL?ue8.0p S\r\l$dck',@=D8 'ccdut9\:0w+iT,*B:0ݩ t<9HbTR04}E:mSLDk.LΩ(SE.[19WwN.0EQB6bGUtL8FtٵhbA x_˟GƑV] P*ob@.FN͵ZGHA׹-\c4ֿ(~貚 x~㚢]fPar|iIaKJ/{@dޮ}xnbc`.ϑ)IC_a)L¼0jWLSPU'+:ZnwD45oDnI.?-!!!1<r)}4>-vuYZG̱r|"Lu8:T$y4 Y51!Q* yº?wS_iN0"^q,&J DouEQGʫ!ppZCY} aoppLQG8mc/(yC Cv$nmuMiSIc/XND~޼֤ĀgdpvK\BOb:!6 .sθ697YrbSdbN['1c1^qL- a4tW=~@>;0%몯[\;<IE̖1\ bDVfMr@ M.NNl'\pnw( &xs!Uˆ`NwNa(㔆ʨN `=K2ƚni@TƋ::g9kC$H 2lw7]6BG{|>3#r 6̞:/wV$؛dž\k|C ȓl[<؁~X4AvEȧ̩zHH\$1[BBBb%G!Y/{D R,YXFJ՜ Zj-Z[{ܞn$E/6+%/GYv pJٻ=^!BC;-giO_Hx^Yeq^U/:rv5"@ޢvXT}n__ *RW2^{E_O[|Œ5ڨ{cpӱ?uů"W. @G&vӬ~uz< s_@_ƋٌUaet{H:H?-I]IAYvNDPʚy)rUn͛(MkigKp`^;"M'A Uۥ6ŊCֽ10jor@F˜ͯuW;{ݎ^ᔾۻ'"Á5/Ynې\[!ܣqWhqvDk+*LP<@89Ta]4)5(n|읪[tp WO8P孛y>T|7V:u k-qqw$l %I,?k4ÄZҗ^%O▼6o◴@]T)ط5!5ŷ x }e%$n:ѸR]em;Cx^غfK%+ov!rW>% q'IHR%nsTt.T8fBđl 9/(R& IDATթ27/"g27.ؚda$ns-!"xq7sD͖͖Xt$l [I̖X0$1[BBBb7?zuԃMI{QzSoFj}=čŵk:j._6wfO _.rq8ѽZn_~33}JŸ>Kôׯ+IS0o-[9o WUuy6*1$fKHHH,>m:jnY "2npi$~XQ;m5lZ E jy/첖/h*gIIG{ {s]"0 {i:Yxׯ+JmA,39ƙiDD ٟ{۔}eo +t̀/ S',oos@_OD].ib3x /\,>64 QGzTjD]~%$n Y9Pq$1h➕SoW)V\w  0K|O V+:ߛ@Z^x[Ǩ-3ĝJJb4D4Dѭ="2._̷M~nAB*9mfDBvդZoҹ?:߽Rx}"˸k\N ~)n/4[O~??֮\XՏ!Xp3|}Ig{qt m:8e4ѿ ͩqy֯?RM&Vw{PRu)k/ J $;x{EIݻu{= ;O:R_"h} ڼZ&Yl`D9IM^qe.VTͻ%IJ' u8d~Ek=u8!v=jKf{JP1[`_[ð)dDn^PZ([}#*ݎl_ ݾZA&oO8Q۫6/CR*qF[dN`_wð#"Tgk;v-JCp]|jOs\E**.7Kg8>TzԜ<흎/YdnYMK DYZZ≯o=>^Γ.*Bc(U+uux$ mf8)y1YAgd`&/U(u0|SԖ]mEsOqJҼV 4Q+yzF?`6 IӾHn7k6szmƎA5VVNMG{Ēcz j&jmzR=k踽:5}axC8I?eΙ`޶fZQp z :V/25 y}$R2a[9ARWTY3 ̙Ͱ, ㍵xMB\ݮ|R\Sz+.0&>@\a=vNRKm_Li2"'$sj <-7 I̾v pA?mBjLP?%Kp:g׺_t?Ox."Y];~/K[V#sƾ;WlMNt8d kOc!; a?pFϽcpǝYm5ߟ([ ~oyWe髨­i 2u#E[Y2=_R~Q]Zg[9X%;^okQ- <(ٿ2Bc*~|] 'v6p:7^kXZvc?cã}Le$ExuAEdDxS϶=rZ3{jm{?4Vl]4sGQTWS϶?rZ}C,m- | `(k["s\Ŭcu7?=;:;pijP◿߾.N8w5,SdZ_  CwW:^O8f,,Sd}|C"3hࢰ+gzv{B_ pqXy Q<#z9V 4FziWGRM&ߺkv H/.K ={@b27TrLf&54g,"ѯ &{.?";oщ2Co4hnkuQz\^wnȤ0Җ( BM~nf;:S)0T⸫LǓU& ĵ>ޒF茥6 5{c'j&{:˘6>O{U vGOENU)g9^d'|Fs!e=v]D+-T8Zc%N!& ѭ;{GZx„ͻ{<(5za >oW ɩ<Ouu9քT}?Ds+nAE jF8);T5"ѻ NtMVYRK@&b_dU)cIvZ[^1nCjJcchoJQ1#3Mqʖ<@svvxMQ);:)mMy:OV4l)Dg̡0QkI{hLTYGȴf{/')C&z6L9qm :34<ާ# 7TH[QG:eα&M(4 wtS\?]Mx[wdL 㲟i^ *1ʾVg"F|n^N۟cNWWKmvuk) i0xmf/l8[eA<z\=-*`*(,iMN+ Z+K_sAHv7;"d6xO;8D4Xշu3N{ )cA@N8سÅpM՚P}ͦ2}ȫ###04ĵ~ںZ[hX;PrS˻`0XwI:qJCfµ 5fIK{WXNq'Ú QWQk'7a{3N4 ,G>X^tvnM{wVl۾.{wue>SVlF?:b뮃'{]cK><]/>+#]2 -O#]C@vYW厪~ 0vW?, no}TzֻB xn@U,<`iqGUo?hnzwE[}hE*>t m|=#?\47 _s{ﭣʲgL_ʴ"]Z=u%7E[}H]~^$\8yc4Ze*vUh̒>gϟhؿg5 }|H ^ Ծ1KvO}ዧ"FO-LPU2W-_\۾.Fgᔇ{Ed]1gunYC,% Ap98ɋ|#4Qx^UNg[ضֽE7ϵ kzCH_- "4XftS<ZM`I~RJS.GsO"*1vժcV<5%]%= _5\cM6Hkms@Yތ!˴ܚ[xGZMdnbNG0jRF)h-.})8Ocu-$0"Sǰovr>sb0 k+F|jj'ZLkW| ٻ 7-?m/yDK`¾jWmny!򎱜d/2%ԉ9cG݇ YzxTZݵym 9g<4Tlth'fRɓpݺ &s\4Ł4H Y;!% f4BNS$hG9X3jӑ[0aC>*26BBVbAg^ԥ֊HTU[rjcJ yS5; ~m}0G/\1Pҭ=4"tf\&Hտ59j,eۺZ]Wb4BUrjﴭi! FmP;W`)sH}uKf<ʁ%5Jͱ^hS$5]G|2LliUZʷvC]{Nx5cg :Fi鰵ﶵ#R_hRh '-ٯj<]l&{l,Ⱥi!ޝA;##;g~l`p0.ĕvZ\/+\d{`U¹@`Y^/V!-[G.r=ܿL{7>Ky3`x;d2.s8A}|)_o2E[*Weh_u獆ռ_TLk>R@Lhկ7e_KV"~o f&oIe/|0K!U3c 鍆U . V^W[݋z$w\[=/(Veg(?0 j75 gY ٲ6K҅~_Q#Pdnxd=f+ߥV+`g/|J⹏K2fyC&ɘ!F ό ɈTH7?Ea* .@&WMFM8t?5z˰? fNzKwOINEQZ!CollKgާD9XSHrNH_&vJ#x?[C`1Zn||=YOMiC|֐rJ_9"Z`*W4[\7T0TͱxBӂ <%?ɻAi˄ [sJX[c6 *|T)q4%[?JIœpVU&kGN58w>!cG&' ?]yœf#-)HWR}'W-Y L;jY Tn17Y#x^E˱Lz<@ݻ,!(gOx:8?$@zք"=S %i3Jã.zb BzPB#-:. ɢ1utDgYKgv$}/D,;-zn\S9Ϩ153BSXo!ySyĀM#q3D(.Yd0j$;c SkMjF|Nde}s`2 gyfk4V(4Qt k$G <ԕZ!u=ӌLF!"Ib-RZO?w]>ݧ6z%I4bC]C~uCJ۟|;ϴO,YZ x0tׯir|Z;;ڒ-Y]6٠H#Ԙ; r v)Urn 3__.K<yIVK1:wv" G/=~p`D`|J!5_(!ܸ!20eҳxq{|Pe`yi{7J_Q|y"ٷ?Ow=_;^^nӟR.6>>F_MM%d{ pmXU#+F[5HFnK ⌟egU&!  eekm81sdzf\8 ?|pEV|64~cAEzfjOefe{h *RD:z8doBpA eݐ0Lc1Sӵ1^^4.wؼ,-!N^2ͮ9FT2ax8Y*n 5 (!nxhdZvLH H!.BVn.e$}Vs5_)tq t1V_0m9Y#@=; ipZe@lw IDAT+P^aAg(rAӤ_1V By[i&ZsQ)AF-t6"`uB(n19 mcA]QnAҘh"QP="ԓb*>B>!Gr)˰3xD7o[WיW |x=o_ H\:+3F[0DJ%'do'6rqbl#1$2_,\d<\$'i~dtlݶv9N s+-E\Iӻ,=uL#qyjq98iN / 3mā xvlFww4普{K5|̙vYpMޮœn|Km[A?j&wuo $[;p54ju@ ([|_r'k~p[y;BI/%wƎ0_ | [n@Z6Sg- APggE!B25F!>wL͆Q?soMU]=z9oϽt\ =k A5%{V)?/?=90%d݃gm0@perAXu_^ 7}M~ ޛ0@xܛpf6{vTob, bTTaqcX1_}>Pvt׌iXzX!y]>VnE_5-7xPo,J-䐯%&rabal+Hؐ6cL=!'%H"y2AJ# A"٨0n1ṿXZآZU|HdKƐݺ}=}nsN.^4㧣kcɄph8 ͎qStBq6B_A&g'rcHxL"B11I\,4R"/M $(E2@@$ @S  -.ϟ[5k EM.O!'/ ?z B1I |}0API 0̭ľ WHOy*.B Asgj.S[ݪǞ:ltlHx &2, >OLKq`V| ĴAl_Kն|ݶ*/o>mq\>fkbm9RQ宺z`LIXCRT8= {ȧw7z=y~XW6~ecof/qN<8oڷN*7W{_{V_5Zd3C5I*X5nm.:CםݛPd=kx*o[Veq^P`ص^7\\Rago\B#kw$ cKEJpsM~d}34lMr_o/?UsCI[ue069A֎*_~kh 9!?sGmWsgUW7t|ȦscYq ۽}DIdjw ^q扛'Ju;kta} _LWWW<h1gG;zd돖G&nyn} Zu{|صӳ&>Zŋ_XՕ^U\ PݥaFd'*h9 r)ߢ|=~u tMeϑ!HX8@6**.b fc[,A9'Հ 'D(=9`S^QFx̓q,T@ݓ e6a! ].:OɰO9 XWu*m2SR'J^\/7.| qhdB8w+Θs l}G\L%PkEH]I:Vr،m<PoL>''-4HS"[wMGE( /C \p`AHKt;ϭRU6Mb&Bw: WTo-V^kL(0Ƿ(/UQTf35l /,(Qc)w1 Eީ{rt {lkBB`f]{4cOhj*ۅըTkcSmlUb l+z4x[껶9GrӮMbΥetxo}k意yU9n2.Xӟg[z'@RYfp4!s77Tv1y>-կ*'ګ\>kx"&}U3^WL! m/{t8+6u&4hLCű nzcQ -skm7O>T;Ub~#3}1+LO3&[wk36<҆gg=(!.pW(Q@$+a0K210N:)g39ei;-Mⷘ*](d,;? *&']~z fX,˲A[ǁ=.F Ʋ ÉДnWըHQ.l_ÄsvgdeH"PAz|j NlquMS?7 \)yM0-ՔBAJ0!Qn 5|=iTz\G<*ydl\[/l} B6%[|&A/N*dC!HSN :z&Cu@)&塃XQHNIiyۊJ%!F·A;$ﶧԯMf𒪢sMNcHREa ec8kS:X C9Ee5S3 N&~e"Ѱ0Mݶ:F~qGbB]ɩ†XM!LVlTȀ)Q!.W:}DuU!L$e,Q2r8` Jʜ*-ۯ=oƧF#M)cePFWK-ZƄXK>Ra PnǴq6(YeY.oD*5u,p9Bo+a ~R^g%w2biv h8@s$PQH~E:o7Wc5:Y?<&>ßgVOUMV(C=+2M6ȊKy/]6+(+oT3ɹlDBF P_eP~e/B$A7tW""BYY[?ATS®9'UjvEMu]MQ jDLEoHɩ?ew }nTBMvN a%m=lKǀi1Bu흇/BN/ESj=ep"fk+~ 0,&@vImMN@0 _U͉y?>i1~D-&P BE +<>&;ؼ@MOO8l8f6Μ`l  TWs]5DFrdE'bFp .22sj("ku(R7{ύ`5cj|ǵ='ю,^5=i0rX NMX{< G?F7tTf&rc{*%diR)GpE_JKjS_Av?!~Y"|'NO*'{gL]} W=Hqm/c#~ïvYu]%[qC*.Z>kz+zBdn٭+Zv*jɤn[LIk?8U@=pC]H"?4|jp >Ck=Uzw~[sܓY,R73 ?&XWJd)7C67͝gaͧiKɤn00,_Ygc0ݝs/ܭ @},ʪ$b of|o ?q|TZL, / YRAZҤKmi@<z.=yxxxÛ<<<<<<<<<>(qu/t q#xkyxx/&<]IȩYKZ|, 3 m>h SZ_ko}|0b{#v]-z@%R9KZy/rצ/kݛK9dd1*w};%ܾ8Lݞ-FӑfZ(]ԍE2U퉱.t N%\"JHHdZ$1)怽pB$ u[j2 XCtGQwS4qLOex-Isfi,@p]{ egtz`#WPBn\~נMf "twn<3Т G/{) ]x1D2~rYR}aFGksOШ812kude54?.lV*+k_@[)V$j~]3y0Ij imO jؾ7 #A,!챰cVEiTcL<T쵳gO؃@6s{ru>~a*Ÿp0ݐ;qL6]Hp,Nϰa#j՚otOՀP[U !6շpW *Ӱhj6bPَ(epӁ2uEMd>.:\n*fXn*SW1gsh&F1tRWϏտ0_ ADkst\0!Aq QWJ s&7&nxzT :1Qc?Kl$ts{MaȦZ!lС`"ZTliM־[ K[XYx3'N |/wXD(\r9{~qag}DHR)6!0yyHn_E[_+B.c!KǿLv=oBBQĄ,se={\/KŦP$(5`rhsvWZq (T^YUG)ģ궞cUan,TNHr m0uheVu&gc0fcr Ԫ\/ B`YGAe?Su6rU3zA{Ǣ)hp}vحڅJvFE`swﰹaT*/kj,=֨A9<8L! BX0A U+'YAwNIIwsKtTѵS)Q+'F8ִ=겹99#RP`ܺɶ%qMM\ڇH*)B-G6? q{$1ˆ$[C3P4PܹiN>J+.l, ו)_tOUeM Bp8  k9S@CdU^}"lcwЀ*[v-!HmuP1WY~ vgK06v\A(J Ei=ح}6~P;c8#F.\V__IU B4r8."s:&cNƅcMg)5) Rq*DptxtDr1'a;w0iNY:ɴ˵bhJi" #s5)2+m=t[ jƃ._rWh_} ZQ _ p !05udzjg!̆LrϺ~^ Ⲓ=)!pfG0/C9lNG+!͇ƁJYw{f:,TKaVGOe8 BY=?m4^ӾNx1l{8Hyִ3;:< Ɔ?BE_[(JG;cL[{'Re6k:/f0{aq!}1xesP ݭA%V :7RU6M[L.Py<3lȀunAVp B?mE:k1fjGAˡ2WT].DDQTd%l?OӝQpt (gMyO%*L|f~F e`˴8pWs>-,'KQfV wlA:蒙 . :,W$b&.%CQ `80$9g/LG0M {䕄\tR2  )9 dCnHQAfo"훭[8Y2WE?=cD"ŋQF>O-[a?_{f{ϱ^Y4u'_||2\g:F.mk7+n +`1ˌe{b `lۖf('6?7zȷُ?*n,>[z#+Hgejy#cTrwO'OlCRWw ?u 8h;]M/=&<2:&@ʴ;U Ɲ7zP94y5xst]O}ܸY̘&a牷>iըͯ6>v34^-x[ScO6Ջn?vs,퇹7.:8vG? L{vG\]ym7rNP;;n[yonª;~Z ?zsk*MvlyS{KjǙbg :'|-Uo;p/y6fi\j{O+µGkWo{#,KaٲBiZU4hhfm۶XIRdK57`J_(w3Y<* 0NE&/x0@}ɒ@m%borR*B!Z QTQ"`(0Jv=RAR QNŀDCB/y:݇8KXVhp5ZjU6&@JxϐxCY_B+䱁0Vt_dTH ~@&$s90*ש׈I 4 e瞷(p=S6Wk$;T+ApVpB9yIeTبM]SHB\X‹Ax+( NK[WRDB\Q6UR{ WHPi`eEbuJyɃHF.&Cu@)&塃XQȳh)%lݮ:Q0C]8G$FnbCaw"RImfɻI;Jjd}GwWQJi&HR/NrviNgzH:ؕXoPl2mgYƷN)Xx۳|{ͫ4g~xY}XW -w_`\nxlrj{7άlޙȸ]~u=|hm2vRahz.OZx3چy~C͋3@ 7_\vQW/\/}W{ٳL^pYoDҿ՟)57kx>^}̴!η#4\u^;3엽36g$tw|NJVSC.s bF+W-_ݚƪY(\h?|5aGpg h F}3(3cO OcW_l5Q:UW%lSa@qbcIcYL5Qs9Y8*UU*R 68hsgWKD*"y[ɩ>/7\9gk Ju%Zվi"b gb1Rcharr)useUQq$3 YD)K+Tq|Rï_ 59m6Wz=jokiEYb@^Z54=*ɔo,\>r $Pdmd'OIOX=~*8QX%oOB@<.kTIaDx69YTU[M0]qiso)+Mݡ@V4̈́Ad-o4!GMv @ŪI&rc{*%diR +mȠ zB}cr[L,UhTS®9'UjvE#Vx*NuQL"Xް#lLq29/8:YiS5jR>YFuD*ɥnX(QY8ו>%X1sؽ(WsɘП]Bq pb#ЗH6]t_HZfkRx̾P(bcG~_ڵ_lOZ88x9\ٲe3MZ >V?F@Y,w_?iiXKf 4v7w>Z~ oo鳯(iYX$solCزiJ5igk{Z惛4 ;*]>6=?!ߌ'ǿ3kA'rW%^S|{*UlЬlk 책!y~3`Dv(<U×}Wm.ڐ!XiW- Kw24 +/;㳡f>R<^Wr׍^r3,Wk 2#ۢ^QEߨ,P)ChnoxnNK \X] @~ Yڌ?|?Tnk _76mvn`@X -+[ MtQicJK1Q Ե6qD}}BMxTپJ6CXY!-~; DiҨ_Ƥ˒l`2!٬|*^5-|ْB{P_VZByEV 4e1˘kPB[=Wl# C8@%ڈ-uadU'W;Rz1МRD5HTV!'.1/ԱiMC,-$ %Ju( ^BЪNP/TNTOUNtM9ϖT[߭;aR *}qbt-sy|Lcm%7;yfdܟ^rSHd1p1,[MĖic#GPvItۀ'R׮Zv#wWWC6fZ. C+3VNqC.\faxDFnF,5ȍ;μ3Q/BayL qG@L߾qɛ?\62[`8&55UM[66rsƆ|_ʖMX~ī XGU(\co'tܫvj#Z l?J̆ðn7,* :o#ɚc?^:>~{`ll @ޞy?~HnM_:sJ|:LvV(Ut4Ғr{@cwEU{ҵ̫ṏ 7 >8o#M?_2yr]6o*Uq"=EM(յ}^lWU3 Lm}jϗ2y8Am ms81vUwsrPzS۱"G!~׮㡛gV9vvзҧ֎'+/HmK1W͵Gd\@Y$HY1;Ybv2`e<<]Puϧ깓}ɩ~^L,|H˗Ý?}N*gmS?O+}1 e2=?_o(=3kc;7V(|}ir`G&S_?U0244R7'uGoLүx8F,7'YF:``f$uLQs38p+`J9<2q 2g9q P4=!MqYcmv֬4cիW^*㣣zݦ-5?8t<<0V7uKЇ7g]ùQ`Z?=.UpO]Hгf[9|5Z9<7G)F~:֣/=ߍ1qm.D#;tKeK?σ4=klfxqYYW:0 陏޾! ]?2T)@qRS^.IcIgFLC~'#46nr;i)ބ2mˇ7髲 敋ધY[* z߽͗ +3ɝ5?-c3ό cLOPRcѷμ @랪ع! 6i~rVc{h/@us[Uo}eeÿuؐ|ku z볪!sWmQ IDATk7lZXcYh•U$F.*e߶tם?F=۲șKoތ&,d ~J{8Vp`4uN3{lC*&ʝwcYݥrf.{̗1;Qw~U>+@0n1^khzѠ{<̋3ē|39 dޖ& b.xaQr 6Mvű.X/RnVmoZ\@Kv.ѥT\".wO\JPUX}^!Rg{ VX>󽘋]#J?Vד ]z@d 06L#WG>@ bTzL"5 $,^#II_\]|Adgyxxx}Rv|ZΞ4;h? 87EmVM QkwoiD~ :ADY6V>3lZRQ%>S.os:Ȏ L1֌Q7X걞NIuuD/̯u'r'Ok-PPӴ^  %B"_Z:{n:rHUTEm}FǕW:{N dQuS|zcIPo'7~3@{0(S{rB -d fGRLϓ瓦x m;Pb|6 h1&M~]:hoz]4"8Wc;=:;2~LOb)c &!ˈ-er^ ADj&MR]_HїgniLz4L )_v* 8}6faH7*uekS/xݪ8 )PvЖ@e&7o֜JRCш6 qKHՎrR80fKBbb A*ueڜC(6,}v@ aU jT&*͙#s l;HZ.]:eY|ɚ N/(**~16E3 !"bL^}!1ox3'1!K3aRQvv;?b# <:7U\7lNF[fqK$QjKN˩z]_3(PjT(@>OLZR8}g.(rr1z}Tlv7z-nN0|J[&cnoW !`}8] eO|v9o>{X.ڡnS ߪ͙,U{ziN$+,Q%K7Ʃ0ձ6*2>c $Jhj/.uB{D&\M[@ٲXst>X YGYn Kk]!DPI}ᜥy'pژL' gQP+]TwOWZq (T^YUG.N 4g!ae% Z꿊;z}#k!uLjl~>G6@3(e" @{߸MqR]~i*FTa+k˔XIꬲ0B+ y]nwQ~Oa*}Z爗Ӣ<@Jp\U3n;@*+k[%aS#a܂QLVmEáێGLADkn (Y/Yirao֜JRCu6!˖"X?2t fnnA LB(P&W6L9{8)#:aiS:VdSm3dzlDQ)-V?+wUrSkd7/d%ہ!Pa)!X-;dI0 1fba?VssyyP zO8x0@01ƚ!zE=uu7m "!:ۂ ^-mcļc*~+"!5;C #5K@,^MvG<{b*:+]~ܰ`]!Hn^a9н < \CtI15uv rnr&7/Cu==>LFa|#U^;#-9! Sij|O9__gc++|||;׺mkG*RR 1sCk| E tVDeo=e0ɉ;cpUO4z Gg vN{aB:'U3*g=`鎤tV=A褊yl^o"S"3!Lԕٻ_6脀;0^[c8S*-2%RmBS|֤7@O?Bt:ڛTY*VLJuaLɦTD!Cvo_Hie ډ'Q*ҳ@yPƓ={զOXZ٤W'irr2F%3Ϣ_ZZMռ3f9GS^Wр@&g;mOl=AG|ȴq+Mvi.JKTAbmuk\Lr}n[|9c0 Zz B8iePZ#/讉fRݞG=eGwH bXxܴSn 2dHT ] C)\ұEQA(!TCQ2(AQ$CQf%IȵY.W??ps CMqt%Bpڦڨ%zN^\0]:[z+( pP2 <fVFg!.33 eYp~x> F:RO!s' 14= uUӶsgKbut2G(' <-D_{6`ɒs 1 KLUf^j ks3g.Գ;Kkwb 4Te`mgfh t>ZRަgFu?(S-|gY6m4! ,bBk6O*4 Q{及G@S;6JfMCRPJ!\'\Y1ӓqD*zyDu 7BoZRg16BȧtlQ(P<.@gAKbSԤEVP0 攬tTH.Vo3zK^߯Oa<?Z}\h0擈|Ѷ|˾N<`}c׉} <)NƲ 'ұEQP#6sWzc֭"!C ɑ+b YIđH%\g ^Ta@*@H'/s@ijoCpXF:>32IM-py UjzC~Z_TEI:EgfYoexP_&}g]n(8.(fb)e\EPJ PhX`(HE"K@nQVs6qJcƺk=g!.(ká!` ̭IeuR($)dL*tEYܒb§*QqW1CrB ąAf9D|i%H*U;v>80,c$7e1eE$)lE mP7eZ.+m͊j @xXj.=-[ q!@A3I'z:N$cL9C+/ n#,ǩR1[S]VRRӲ-TZa hmtw۽lh(.ˑHY[RᦺX䴮Usi{h[ɊTF9U1R[հ٠g3= ̻ B<& sN;MIn5;C 3ÙnÎ,jsOh$RDB} ɢ Dʰ)-l.֪J3>T߈*Ӓn(2 ѱ]5 6+L**U 2~VOR@X 8s_n~vD[e:>e :3AHrmHw$HDp&|4&)T=+-FV 5iND3 i $&B(E Ai@\QE+O%;Xrm)sT1!g'!n0|mvM 1u|{T,BMH![tt("wOex5dkD36o7~WX9StrR`٣VP$)% t 84ʅ㦺<{ϝr<55>d}LNT ő$-CY9y9cq@S #q\sURȨ2d0O+!oZFH>gDTe\O')u7pɦ&Ri7; ehmu^3o, :w(2,$r8?hP"sؽPp+@QOOE+HhH>+T G?a*iAAH@<>a*yVȢ(%&,E'q<|U'$r '<o2xRA=Kiq_s@-j^g.XBl~Aת w!ڵy·僱1\heBJ-}DEȇ(\KauĂ! BkHO!džHg ƷB$ДB<@ bGpOؿJ ) ,$U2d-~:&Nü  U\gO/&X[Ra`-g?$ŘjƩ 5E>vtvwۤJ`(;0MU  TJh :-D.WBY!-C LFi=vtި"+S^F?e* `9Ǎ?|n0EmKۺw_6l%4%JW {o ӘoZ>y> <&\ݩ\N@(7~ܕ.d`9dͣKvΖn@iN{|:vL^(ۿxFO g[L2ೞAJge@8N/^^J_1k>dv3dȐa m:Fsg9I Y˳mSk $F Bjt@V~{)bϼ":e:m<@97@D<0B\X{&)ԪiT Y?[Ar؃!Y%Qu!1,iĐ*߻yRWͱQ^eϻ=@0lLDEx}֦ݢ^M SU Uv{=A}M%'͖Pվj4B.%k>l_}3fW6bשf<(ӞlS i6֑ 򵺉JΒ i )R PjCv86vU3mR !t S'DC.L 2&ȍjlmwn5~oD\nv6씚J$R6x.WQҲHb# >vZr:`RO{ "B.Otǒ4 cakTj|"2}CvWe*xHi,FO:*4x@Qg@j`v MA"@jV0s#4Cz+.}CL P+g!) M+eRqY K|tS5[ 2z MW2޴VA*&"-\WuvE ;FdHV iϛ{g_: ٘@Rg JwKU{vM9rm;m߶5gR!xR|܆v c|Ȩ2d0_WOJ:gV$wY6/KzV[~W?B2JTjim`Si*וP.`t%u7ˎ7jur엌zmH9EQjaJU4aKUZMi4TgU#Tuoö.@P*Zsa윀8Aut:=g$*;4 `@СӬ-4JNA\tZUvXM9KfuvH.Sz@tv|&E IDAT"!SW:yaѓK)Th DŽ._QH \J Y:8S:'(h5Q1ˀu-F=mр؄M@VZh'_Yb{}[՞#Q*]*r)S =],Һhj%z'Tg\1{ٸ [LJ?P]. x#\\[wTe-P78wm1i|__35Th4Rd2ٌRr$fT$Bnj=APƲ#HӾ./QU1HJ9]1{| zԹn#laKZ~ҙ񍂷ny}[<~8aVaw|iu{Fːl􄕗N{; _3npAIw8+ 2dThm[;HcMW B#7UH3C0A0Uado 2|_ffgȐ!M#k4MC'~YQ3dΐ*Ο>o4>̫Q8oWߖ-@Auwͱ FGj<ͣw־qæ|Q6hpEyG7gȐ!C B~ѱ3d Z3>[n,7 .9f}ݹJod'_)[rr#I_/x8ނ܅co4-_w&2dȐ!C  a;WH"ɽcҨf6ըD4Bio§K歸#gwxy /2|R`o\a 2dȐ!C If7/I __'H$ZC,Zo~E?\.acKΪ_ݍG|EjͫHcWl~59ƾۯhV6+.;B>y˜|q}wd/^ 1',O׷~[#TK%;1 '.#:/+k(|C-5?޸Xs%Ι?I*< ~cx" |aS#{t C.c==M|~wwQvh\Ο'Ӱ揮OFnp>XF5oOP%ԧ7N}vXVʢG*6K] _Szx9f]9ᡫ2dnq^YWӝXogEd5?\lW$`}V"mw3@F_CCCCCO?$?\w!bq#.eԌޭ- H}ʱK_ǀ=*WH1+׀k/|{J ]nfX2idЗO06::hqb !7Ms |t%G$Y9k6]/|4~>* Yw y(/+yp+y2R r# F.|t%ia߂ZwKA6rV߷" RE~h|ϖ\ dU֕Ѥ r JT@3אry.<]KW]@+sS)O+,?xpEqM6~p?Q,@Ɍ~Ib E?j~cǚ,cJ^b/I|`Ê,,xo| WI/=m)]uW(Rm"fSkwr1zBuE9cۊ ui|✏U늌Aa{ [0;u==QPu+Q2_ۻf]q{xY gy*unZF #^jn'q ,Y8K+!W7RCj~/t:ʡL s1m+~,ʑOēdYc#)?x<8:`lF=7?qwVEp/7c~ d>k?sKV޵>feÃא3"Ozfe G)sf~58xƕwwcENoA8{<"$ qL'I'X7<W}l^Z.y/|Qp$+K!Yy7v38X7^=6ȍ'w Irr&˜99oFrc/>r5=EJRˋWrF@ w?x˞Zuw.&ԩEsmq.ZUR~l>s0wL竱 IM\ΣI|><%xt+z/_KTKK~ʍ&bζw q˝.7?ss[rӌ+ Ic*]nOWOP[z L ,ns{; Be)W:=ުBZRs;Hms4ZP[*KEByVeVeH7WkfēO)+o<˃)^ќ\ L\hVN^jGubp"9-Yҹ1<8a=6|MIf'/dHV`|+k Vn%N.[4o;^suE̺ ,ƍEjzzw3*ӛoRĬIv>h3n.և9&u iM ka}m̺G[`E̺ Ɲ Uo)լ+b֗w6vsie49su{"koj cdeĢU:k4^]La ԌUo+ծ/b֗nusBq7msM+fs1?\̬+_jܶ+'I ަݭ`m#wg& [7Vo*fkԴsMxv+bv¼ "f}iUo[D yDKn$+.UnIZ9ca8誯[wcZfl?\Q3ULT"f]vS._lnS*Q`]ޛhC~މ.Nz_kT R3;-K!}Sp*RqxqN|YW }MuEM5y Q܁7{"˜ szxHsA&fYv1++i6US/xWe7S]N3!JuŕsxOW된љʌF-}D>vtvB թ'uZT%FED >|P :uӦ*i+״^wв#aqH}y:b_5vNhʴr:٣J9a+D&'Gi*hɉT>Q=K>(b;v6o 'NZw>ʊ3Uʤ;jvJOY6wVsCX[}`v*k*-YLD9oޮV;ujYX0w74I rXh rJn/BV'iRAb( mSTbm[!Rm !TbȐLt-$K*:nԚBXj'RkC%W @[u _Np5<Y+S."wLTpn_EwPh b;wް:1R8/+BAӳIgss̐jFJWXz9ȵ>RbL \\[œ YurL/7"ysw}zRI5 _yuoyW32R*BAPJI\[4/c Pk'`s[[و1TdC;Y3DWrHDBö@һ"5J7)}^NZҳSL_)!;:g 0wzZF22ĝ;YDz'M%05{KW%3>GYx奷= {/퐐cھ* kMUz?w=h*8]ZcƐtv{H|桞wWXfj ዟyiW׌ޛ?}o9+'v=cw>($Ugwzt5oO_'d[A߽dEgcc9VIY>f݃ʿDz>2y9RJɯYwE rW,{VQȿ=k}weY^m-?Z3P:uSdXO65m[^XG,bn(9o~W>9rc*V]@ʉ%rr`#+_6m\~7ӌS~a潖$ٓ.̞p4֞[116eGkX^+1s ʭp5,Ӱ5DWYߨ.X5<:aFg!GiJ|&gUIgI GB #v!U uDO<ۏ$U/)]khVJL;=Zt]\/)4eƊ2\S. 106 '&W8Ts1w  xR6^WdTȶ9MD5U9[eI5ݤ irr2F(C~8+&粂Ꮐ۸Fxo6j!Ne :;&\붭ݯ h?2Z}ayTU$޿Ti-ŵIv*1f6|?mѼ{@EpMixqj*Gr{E'kD㧺rCQq"Cⶻ9+' \oVBc3uCc(3e3dA):sx~WP'vyk=EyjF a;=z9:}/N4GyfWZ+k5owd3-T$k :RrH[<0Og|lh:(ymHS?zU ^xդ"5ȕ?qAҏ N{0?kr1,L5%Z0p'snEEx>F#Uj',r:ZYl! E{avܐj|lj pOdߛRʭU[:[<%m'fݰmCHrٲ-qײV=R6`VsﶗڋY]EI}=Mr֊ ?0* j,0=S`vRc~,Gڧ[xhczVJ־wcsT"Vy|k$,|S:g-SX?8Y梄9wj.վ\6ͻ7O{wtwGwsW?^:~|$[T~xZw*>Vr_OUG(L嚉ЕU IDATBa!45/b6eQRf81ؒk XS"xە|Z@/P*{r,C,c4Y%B,.gJM|RJm^멠2$&}9]<#CKZME\Ng"2IllBs# (~G]A71%thC 尻l]!px@U2}vOLfjRZ"ݮb!*Zu6p֛vj ʈ.TG \J;YO4!(jr*PhqP{]!$';;P8mVΔt=(,5iwG_.mWPGڻC2kJﻙ\jD_{6p:U4gj b:ܼS cyu9NmmR7 zX Eit{u^,VGn` ۮr|KUʛb\Jr\Kk/CԤS@i1-fz=jer@fJRF {ւ\9%-ʫ]ۣ*X6Z,D䥕zsD2%8QqcqXW0/ՎJfE(,SD>eGo]D|Ueej l 0#r7_c:^X`&5;CO_X1o>F2!B1zgϿ5~GC, <Δ\;"IG" n,&Dې !R2& R/ɢΔ؜2ux+I杄ʤZ:'LI6)զ:Svk`* HPsh&UΕj5e{Zխet|>.,+ӾzFC⸉!YXS`7!<lm*|ʬruwUfC{S!}t]Î~sgK@O6obdEjB\P֪gkքJm S@45| mkuZ P(I(A*}swO){q@jDKq>7+5aA aP%T lklΏ_U¡!` *TP` f RwyBd{91Z PQ(BATw4MxXZe =kt+6?YӷQS l`2! &# @=Uvuty^<tp**gIDi.gz\;T7U;e9P8!) 9LF:&9]g=!o=9m A1-zT&2qog `j65 *>MAoʽ^7gA# An4vAJ)r&ѱ]5S*ydYnmn[OȐ|Z'}5q7&qNYF]R׺Σg|mn i12go.{;N m0JXE}^*%ז2G'a7F?ie. )/Qg^ėD\2BִώDb՗TE$D&KB$^<*p#POӌ8yIJ7ź@Δ}.vP; MdQ2{k̑X@nR3?5;Qg`DH])b vTd44TS'ÂQl?ҖrW?[2gX`g$1G6 M<$)%Lwtປzd8T;e4Ѣymΐ2o&찺)HV4U/괂, B[:eO #b%(,:qe^iNQ[*!Iϋ펔J1SҙX&ɉK1&C >)D~o~/ \|.o{r:4Zz}a MDKo$>:Isu N@ 2du( P<~Y*x3T"+Jf 2}LۓF6? poz7 ꪆkoL]T#=]|gotvKBUZlA_ϹDmԐqܮHM6)%@$Q(Dw C uv 1'cϊṁ@[Rl&%{]Zh!٢ ^{Oz'6JYľ/sf9s=}s69&j'8 Tr.fƽ tz=>\c\~wDsMҸ IAaob<цR(dH7˩ WH =1r>|h=bPk|_ 'ܷeB\yOc R?(n>V6ԼJ`fJl͊PF|@ r]DoaQŭXDAS@ dQ3dȐ!UZODιzS?#4t|9/Y# Y-6c=̓6ϾEn2#.kotqMGz~;' T Zj}CgzW>,AHa~=1kel ],Zt'qrB(Ch r 9Ɵ|+|f$)BLȖm4 x]a ӶEf|T&=')"鋞D]Xۛ~ӞU)pTϙ28)Juck4K79,jsJ 1eZ2$ia SK9ania~H3_ M[ 5Oz>>ZkJx @Ej n)/R gDK{d&Eݕ{ߠ}^ Uz *vV3gnHQۧsT{>ϼ> Y:vW֏˕\OT?8rZԿir#|;QK"ps: 1ĝHj +0T)CFQ@ . CB x1ޛ[pgȐ!-44d-Ϻڷ=xN-T қrFsؓzn󉤮ҘRF:Vou>s"WW*uN)itGs* Mw[RZ*T^!fÌE DEx}֦ݢ^M SU42(}ңnuVsu2dRT""ݲը q?5Ti [+s ;%ITHn0]J[$UK v*>Ya큚v SR1g\X^n5j%J-94HȒ i )R Pjø5D*v7yrCNjѐDni>7T'͖Pվj4B.%k>ltli28z,esL ,Q)(90z>YLک#񒑲d:`RIYʽfSPR@Ay%2굁N=7AT͐$ XVUvvg90;[aHaϛ>j7bDvrJ^*36ǶGy?p<_7X٤&y6 )U:uHQ3J$KU*U. TTwU6  ,y*IhOtY!@=d9 2޴VA{ĕA DY%D[ [5 qmlhQۊUUY"nhjh lѠD$TX.ꅸ}  &3g̙geM4Wи,SVED)2OgDD,ngmqnؔ|d7^]Je==19leQ4\[d9p+3)s)1SߊZ$+ H#m{as)L:^anlL6 9=Wd%j Y|ђMo.`S\Վ҄}""ldpfr\a:(c'i״ X¦30WINHHʒfH4V,6 jc͞hԬXi=71}B|Y"4|}7l~s0!#LBY*G `7RIJXl` &`|GtPpB&0`o>9$$Y޵iS$#_͙DȍKm4ùqk\&&?x$&dHR$&\%b{/ Id"?q%Kggۜ9V,3%KMds!kx*,@^p`zb vI$6X=+LLMgqg͍R2{4X$L$-${PEQͶ\qWE82S5o/]c ;,5M.PG8g*K*&ɨ'&78VF~|oBVZlX$[a*7qݾH#*iFݜ]ۮ ÓԢz?dz{hxkʣ3[UҊ͌HaF|nq7}E㕚PeS7K}v|I F%tY&3]ӯIer6>hD_4]+zVW_?l`A(30Wv8!]xsx0$CZJ'R$#$!؁!Oyr>fMO^ UeD'S$B@OEܚ*5I.w16ir$ <cClxV<`vEf\&UqB|ט45S^%=)#58b~f).eN,M\8_͏K%IjO|wO*uټd !Yr:MZ Ix `*4y^Yq!;<16eͨg%6y,#Q'6gǒ 3g}sagO>odIY*MLWt4@lxV5LlA Й}3|^/π} ^)uV#;nL/O+2qbE,'/OMeUE z]#Ͷ"b9C}1￙9,x|m؄Nljs4zTD!VݥZ]ODLSר"bnLcw}0L6ϝ˱3G̀&R߫t2ˤ] 5AZMb iX/齘Y qzVrxOȓl% 2NclBL)O`mOk[GD-F.ZqbR_ދ_NK,ZwoVYV3/]%_pW~6>2nY'PUJҴ[qr7LPxr>`"73?cgT=[Oӑ^fqઉe[B+""&2/<\&+Ş]#gX|acUn$0US2Kxg>qsb25+ m*ԅj IDATL'Ct1(ڷ3C"B>Kڌ0du֢LgN\CUuǜunM31&ϐor~ XᣛԺu r@C^ߓ9/v5kW4m~ۦ^"k?9 .ۥ@LDĖ%%'Pؾ ۓW?7<m֭"b N_frPw7~W78@n.i~:PԴ;͹ s#Cȧ kQ]PS.H]t,""@/%Q.3d /#;C|u`(w&jbht"bIWܽDDee; ;.eɻH4/[9 v[)}DT?:AVϛs$n%deFbe練#>4PQխonL)Y駣Lo^~<./b ͛iBqy7¸\=z_?`XNO _3ħ/^8_[[9YhpȪe{ F޷n r_6EDڛ?UXr> wDp,:^ ^9p鯛C8DGSN Wf&[OJP|> 6c^TZŗc!pd)iuZ?Ι z/Wߥ"?6;#G~|i3Ǐ}:->sv؞ "nNپ^8)Lx/ T$H]rCƿ!&/噇V~zGyiO-Ε/%yA8ݓIzg ,O^/b\{;Wz[io?Tn1a/ʯ\78hʷhȨ߅ʵ-q=W..hWsuI?##2}kÉr;pnǦ:_噇I|'e˘^ϸFz,SwS-FVdOT!'xI%'G$|8K-j|~sи$%SE0>Si@X2ap'o~Ͼ!Ñ}U^օb"V]iq ai>.m7_($䊋Ho\$(FLC4UHv̪Jp" )Pb14=4S bic.dVQFlL~Raܔu:QdKɒ*Z׷451sh^,S[7׍K]?$d40@8Qu**s)K,Z U~¡ҲVGni9r(XU(C\Fs v{ā wa-3DT+eeDj9LSޝ?b,.S |DƯ8ii3Nך)v0Jc<|^pqpjE?\~VS\4}V*i]B8행qrXBc5='*ESW.WyyTGg v=dMD֮3=2? ׎SWdo=AD,^_)~ ǚz|ؒ7sʇ{XOp2W1o8"z99%#=DWΞ)1fk͟BxM "ѣe?Wk"r:Y}F[{#f 1eGFDD{Ls&1^nQ459q}pٓ%Zqu׮vM`=%N؂96D>Fh,5hDW3ToKpMo:OLMM#"br+mѯ$XF|"eVX-_]?Lf6!,W姦Mgcf;lqN6O&yM&"?^TiIhZ-[|\i+H+ݷ YMd_xI[gYNcƠ&4nA_cmvU^ [;Urx|Wm#kir\eA/aIQ(S[sE7yBP1K7 NC *W1|D cZ`@dQov%C*,;.~;w'ʔ]&E/MN+Z?X2*c8Iq$kOYfA4]0r[V& jWldtYX4%e.,Ȃ $XU'鮟˹J " ř7֙iTع8-e+2مGLdbɲf4iK8ZQD,d@ܒ,W2hyrS"WZ{3 U_/# gIcY0i`=ޘ&חJs3hϸ!djiuCCQS=}a;B(ZBf/-2%w`*~dA4=wQ["#9+Y&u!ӭZu~k/m>(cO>.wEgWWrUњ -/_|/Жt9 %<#9SC_u_'㭷-wfB O]顪0JxBDROT ٨PͼKbf ٨PS?7y7h F]T2{M:B O]J#u0*%JcG/B8=w0ŠN_$@?0JcК /bg|_F7W6WRqM]0lf lA `6a6 0f0lf lA `6a6 0f0lf lA `6a6 0fc1ik}Za6 0f0lf lA `6a6 0f0lf lA `6a6 0f3DD!ϭXP%h<3aP;Wg6ߩVr:KcSҾQyoO7KK˙}f͟PO$mO:}ck@D,ZFpXXX^{p NF萼Wwo_>ťYߚF5;F::n߽_S_LreXD^tRm_ btM/./lܱ[˭^HSLf 5փ|v\mKn|倦&ng7[ Ǝf˰$"bX9/dލky}',[)1֭d B?./a6cACX[w^_1ڿrj厞KDo7k[{E|tWh(x4 W]eiJG`ї<=o骿-jDTS[)?-19/yB8O~L% c~;:[|`q"*-ڰktޯ~W꽴 _5Ŏjί.6:^=ɖn+.xul';c[4m9DaHGrEͺSҾ>#yjsKKL+Q}(>3G_X/6.S%"8þcG6,cK2V1KIE>]]NyIAΩ9%5zMuwq 7ENKM wm*svG+iٮkX\K1'UDc^=ɶ[O%}-GK4ig U]_ܸ#qA!1\';Kҫ_*PF;:%Vm?_ ԔOKK 6ҍNOWɋp?J3T)gO[qs Uy-߶>_{bnI 1igm1ki~gKDCfO6ΒEUvѓf&싫uoݾs$KޓȺm;7 yeGٹftᆦnAIDAT5'DDdfב,H[?u8Ca-QH%'/ꍀRdzϰ cl""$j "KHS獜fDͻ*Qa&̋]1`rwk?8e9k6i6#_/mHsBv*e.i[x"YC- 0 PC'ݴ08hH6DPSZ( ZꢦA;7(߰R XrV/3/G=l/j%~#*lUP2{w ħ`iM4퓘ΏK2n$+lSLY 7,q<ŶDE[Qآ+p'g=gk;Y0^|AZp˥7F02g3Ddi>I$Z+}]{aŧvT6:MZbe3φua㴊lґ!WjDi wm9]Hٸy>%QɻG|pBihWD%/I4Rc%jV;)lڳc66VH_񊣓UTUV4ϲFۨK{F&ߖ?ܭ]ʫsZWKT,ڵZX~$BhNxrzTlzo]^h^^N?pߍ{lmlf3غ^QRPT2{y;rXJ/NuPƠ^ġזO9>Ͷ:/=M4^sd')DSGԶ-xw Oܰ;arNDs1O|q!8"٤7K0fqqzdKignDDw NviG.~6Zwl݄ ӏgϜSP4I4qJi[y-$7eg$y}<^~XrSo7*[>o?5RePm3*JJOõiLy);fTs*͓v>YL]*:O[)Ƙ i"WNnt՚G>|wѫZ"rtuYEnM+h|?ziq,DTZaj]?e-kf;o,|۶^+?xB\+-c8L6ޱF+Mԏ@3PKR_c=\Z\@.Ct%QmcKvj*ÌujuE|D9Psx[ Ɔ,' i$*JKG9) #98ƴT${'dqܑK^MESFSJD HӴ̭pdD+₵wKS\RPTWA^b7dHrc]zem^7'?\iw6Ӊ?w@K"j0xE)J۶&vh7.^V̎Kؿ>(\*-u)ֆmzиoKm&O1c8 WS 0?] 'cN vC;fϚDD+9+}>Yaǻ}aCaں;-翦h@dsWN (vP?7y+泻ڼ'+Ddic8_8{[Notx|Jrq{2QI]j3`IUi%(ؾ0rŵ4EAy1m{\QU"QnSG8XBA.hEt"8b^+*oXIWuBEc+m/t2V\M5 Dh`5Էښ7Zf+vssMdN46ۜ$56^ j3ߊß%[wxٴ^fl?7?7TDDTy, {F⪳?bEccg~Aٵyg 1^Y 6M;H4@\D&(_X/woqnݤ)\$odjKwllכ'0}M 1Q\5hΥ+ \a㼫KW0QmaU_#Cנmn_0Rii)ejks0o3}>Di;cBGޤ(.6wKAG?)Z{#_y[4UaDY\,.+oW. Uʎ9\`ZM[k/:/aH8@%K;ɯOYyfٻDT->vbºUVdsmԽgpoZ4"PI5a笠6=,mmmQNU*3N}K7|w|mƋDuCm\St2l:8&>q ܻO~;vHGvK;TՉ+WGY{KSGܝvEKD׸>5ϴzX*X*!bScnMS2:otw:pXRѣGN%"^VXɏٱGt]Whxm'_lwm\k~F[KC_;)X4-՞=vk\n Gwni ̔K~ZPHKGmDԾ[s>O 'HAŦ=xPrQ{.]s㺟KJ?] G8Nݸtm~V[Q%#'/5Um *Z( %r F/N?ߨ=c]eDx-rrbN^T·N/,/1fx-{yD%'w(DSBVl,JY,ٻ[i;<.I!IԊsgXsС)/6tڂďBDvD+DwrLA*| @D"˖5F~[_o_5#{*4x_saڠف$"mB~HWM/]W]ܵJ4}ڛDTRoP4t7Ri_2_Ruby_)I[֟F1'[PrZė ׈:4~S&yV{_W-㺾0Ӛ)Q4ChaaŚں3ߟ3ݻ{p[kws\xFs!|Ѧ]AVy';jϓMlߚu&xT}!mB ϒuuu8~;ѣG6ֿ>wA,_^%|wIENwo6QŝKY,.QU2e!_~~u|D{¿U ֋a6Q 㦼j*c3_ͻT[F8<~焗3ox8Wg~㸿=x K{x;zKs2ѣ_fEo,sy_Հi!s_>z9&W`_%K2x<|PrQjc=x 8m4':"grAp7/'Ⱦwl)4lP;%=D |rfˠO컻lAUa6 0f0lf lA `6a6 0f0lf lA `6a6 0fIENDB`artifacts/preview-images/preview-2.png000066400000000000000000002070231516776645100203360ustar00rootroot00000000000000PNG  IHDR%sBITOtEXtSoftwaregnome-screenshot> IDATx\Sw?7?N@(Dh{VR%v'2E܊wjpZ?N[Z2]#EAvt۰hkX #DAr?B zSsr~|rX?|>?O{0bt@Ix$9t@Ix$9t@Ix$9|ǻh`F(1ۭV+GtS'u=?+T{:b#t02oglFw)*&x,R6Ě8{4oCKK~b:111O=g}vܹsM2E*{yyJ$\WW׿nGGGYuuu}N,@ 뼥Ơ+:{1rxyD O]Zvov2 Tl۝6ppQ3Ŏi75gՎ潌x7C50PD#l Fi26v{ڃ9ϐY/`DD s[hƚvpP뼕]^GuDBƁUSOD3yœ2'.)J{BO!g3DķU\[`gXmg ܜjviHo:v' [BƁU}ϥHߑ&-$rc :o}ѣU*vL{k׹n *y&ٚk8lO/q'\ZFi pÝnݤ/11?huh,..noo'"oo)SL2E,3gTgyF W9m&""AlE⚔}jXj8{t,RRvllZQ{hi}Z"eE59st)w((B&e0}!{gQwY{tY# DA*>}B{tQ7bQ'alfG%[mO2NZ|ԡP}gBf-T)q3u>Cҷ%?uZe:m|ꕛ7{wMy8ʵj":~#}rk?zf#W{'ox""DSc_Z}Wᄙ/'n_+=aBf)q͙~t<c7n^=2V^2'&auBz:j'Y3T AlK4Mws(_vu g\Q^V6Wc Xy||ʎݷk4 Dyv,WlED"^ D֤d&xkCƨHT)jVJAf}yl U-kJ =WٛGQ%LQY4`^۶*7(b}FFоq?b]UQwldQeޏ*سLm6<>*z*Ez>6otaXe~VCfk֞} %&*%AS\cEcj VFZ7d=+Xbծsbz [HsmmWXU[[˝؝h4lUU7VqFmwzFwԮ Y+j=u|w GCq0]Wߨ2εI[T:"5S>_xñF?4jveHEQ);>>b|FuV4pbgoUUNK{Ǫu/v]4FKD˃4G=]^֞9?@\zBUQ!qJ5C4B+GqGؚk^E{KIYx1^#0jFiQDD YA<۽KDJ*;sυT4HLOv$_e0FGP)"CPs{et^#VwB&0QNU]8 JLK{!--1Hun2t6(;_pj\0Y*r?{_o?5jkiOuSܾ}ȗGMws1aW03>7G5FvJ?=#R}6bg:U;1$#.L69BY͌\!ќոtyCvd "*(2"T&+"ᇰl5fBzg.P؅6lAS]l~T ,.ʃ Sglz,Q*Yw]قb]sJڵU)dUfYރ~% j6sӨ9r4ڃ;] d_HQlSNrQ'Oލ~kϥ~?\XYEs`u;5*k:VWaq2vǕ@߸QM -ӿ{`u+oRK]eʊ.9_GUǟl >w^; O?ܪW]W—V޶wu˝׮]7hrg@ZMb4P,ZyU;*c,@Ja3(pH{*7&Ff+d'+"+DDA^[ljuU1 gD4s?1chtc3 5wԊӯYn}7W8mYOϝ3+*)=ak0yt~ EWƫd}Kܽr*j w9 29JQe#l5?ju5B9kN ⵆ /eQV;F4o%"f pSTy{Q)&1ftkm\Q8JNڣr]>*F7|IAA?+Jf]rO͛7ڏsJksPQUUTq7lA^8,/ߘ/(VcGfT>j-j "DlK Ԟ9rw6D؈2_j9DZƎUJMO}* o9Ϛs˰fiN㢮 ӷVW+tQȏXzw;Ætc;$5Կ?x!"zz8STU8*WV'i'nvf@v7UD,aATVYF/)*k ҽ* diܹ#gn,*ЭJWf ( T6JIT369+;gK[854sVf jI>[\jtm32Y5hzYVWE5k5:*DDdkr7_mtngGb9t4ysޞ,C#N6/3V뭨:55j,TJ֬=sʴU;{y1 \SZQi" +g3$ѵ")toO9Yrau!WޘkY'eOp7t]e] ]>v te+nԭbq+g^Ա1޵33nWIK;`XCPc"pVv7EuUʂE.;1ek;9EEtG gX4\uk]MGCKXN 2(Ci QQfVd(BD_r&J5#0V#:b㴚:;rPS\eYݹ^M|!JPS\.ЭIWūFͩ p{UfݍZQʚ/4aU<vMz e|s'gvh9ywI lښkф@CX">^6h:RH3뷉i 6APlE yy\ƪ7mg4\M*WŒ'0B }^! _yÿ8_}rUf+oYezW /Wܾc#(bj0BB\mk-22:r6m{#DV_3'>-TMD;^(|PML>'&.n:_q(Qf+1\ᾙ mFyEFSlmCj A6> ҽuIC։u57sEFUC 9@4#u1TQQAƢrk\ZbBԬ;i #;IN(bw$x7,RQ*e0.oY.4+6H34 y*>ZJ@dk0P9m%HwґOO3uM;uu.E~?eZ>D$/jk ;j.NW*QfGbٝƔUUA"[Ӟړ<ԅog?'v؁nbUf??zКvj"""ž4gt9Nw-;2:{V+W ܹ]]qӃaڣ$$WoNg/v[xfUiU+4oo}k2%qi|ZFl Fΐ'r WPĩV Ez`w\pgNEd$32t!1-¦=8"ynFc[qZCJTEwK`mZnS{ ސs!qUb͎U""5pG/9"M*;? q^?{M6=ܱ?0~0&xV,O9}u nVJ #z>&*m 7،"] QnG}:_VǑkEҚ=o;xUk?XERO=gN]e&|ae׃;UTzN}1uYwd~b2e!G^~ܹsz S]x|:3OS? +,D99VuM2W-exEXt'"G&Vu݋/?EFtYn}~T )V8RQXXMRQ[Q< ogc4' R`:Ν;mڴ`vVWW׽lkkشd:0VqRys~0#] *RVQE`G!̩snOLtcCcccIIɘ]vqq1Ds}I}}}ssˁ'O iool#sSI#G,O>>2ǧva"wcޖ;2溺: ôv"w^%M<ݻvbB///:::jkk޽{}"λw"cw}OvDbX,;6:.h 0f566x{{;9jwS^?x\ IDAT`d`H:s ρ<H:s ρ<H:s ρ<̙3ǻ #c:s ρ<H:s:sύo;/H:s ρ<H:s ρ<H:s ρ<H:s ρ<H:s ρ<H:s ; xY mߢw[o2'W7Yr# KNY*cFU`WoM&'bT6/&fIL82WOVcIY4D(ėƢ|yG|ٛIh\[jH(R\+UK *ZV[HIѲ!N=m K͐c#&+yonagg-$fIIpI0\VJ|7mY(&"x3/[Hi]t$|Yj*spe j,)R_-7Vb,|2nS@XN^}SR~2' Kf-ܓ˱.檯MJehiY%cR@b]F /_f+ψe삘eR\t@\.ٔ$sW7^R_-f+OcX )6/ /qf+1bYxL\nVciral^rY4D&( Rx`$ +鰔jV"V~~T%B鈬c9eFF+Ma7䖕lZy"kUIrZHHQ2Ve4ha.1 _u)0Fr$'*|3;V麞4')E\jL3m٢rx11 d*/䔕6m%~*2:Z!˗f$K6mIryRfƖˤDc }(6m'Ӹȹ×f1Ef${eʲ(or HMD.Q"~M"rcT&ǃ_ܲeHӥÇbL]"&2^ҷm77-;7ht4P%D=9{D̚6eTJ5z׹?8I[R81cc_tw)37sD.' "r9Z[faXjYLѱÅee]CDfuٺ-Ꭳ%>8V][,u&QRR/ã""KINnE&m~UE9Js hRK6-d'(r+)ɽhrYE/Yu\~NOA˔%rܒ%!]$oOal MWK2"*\6xIrťÇW5b& Fh-_++p#2yK˸%&L$ F!HlWREdߘ.Xe8DLVQQg.7vu,ceL2.%A*bԫه__)%\ݒ/Z9"{eKUJB"G32 3dpz:͸M*itʛcn4X0i{RgOj*5J%IBzuaԞ(1疰 bx;-Ʊr< #K_t"!k^Ǥ1pʞwP*TN#S2"2; Kr 4n˺h!_s8{3:b99^j*7b"ϓY#rs53C̪ILUjvV"axL8iԜKcxPcǸYa3lRru01B&ߵ{i2sρ\=H"2uQRUdQ;%ygQ< 71eɛEKFfǰb؄H1Qy,ee3r<&$9[FƄ3dի^oъpaE,CfM~,<{x;JY" QSFB Y|"9)&4/z+11\ZY{ 8x(ƃ#+ڽބ0|k)S_6J]d X2.o,!E!1;ed6\cٜ$F)$"adRr$_y8Ho4-ɨ/:Y,IIr;:ܽBI²cK8l6˾9v,,S*8/G493|Yf4Y,+y,(?#(c&ðչS?л(Qn( '7JN g Xk"EȖo5Ws3-<1b,\;/Gl+R_-R=E붫,Z;P{_MJ2K{U/0d~P'f10M#^^^wsFC!~)OL d2Z5_zH=p7W`0mb |Gxx=8$ "@Iؼgh(4{n"{ЗFa8 藯$nN 4C>wTfax^^#?W nmTLab~Ƀp-DŽW}=ĘcXhs/1E#h4pN ty {10` H 0ΏmjAc7,)'WNWk~9okc&!Q"Z ]O&~>]j.N6ȿ |,, xΘ䥦 OF=\B;d:|C^w<ϢG0կYXʱZjʥ^hoҭAvbijۍW3":7m{~Ҧg6Kgxk7O> H:hyҏw+<#$i/υ8ϼjJIfu[J\齭{JIs# _ݑ~ӷiMɡ?é c<+j_ڂ3M#_Zϙ+h85'+ϵƮ=nqalH;v k;I_w4p(xX!#t?/)M k3W_9ɯ>KM|ro 8\ *mm$Q+"+}pq5D[UENQSu?X-M| i|xzSod#2OVK-ڃh)sqz,DD ӣ03Ů;Һ3#''~/plCS.%3pU>pǎ@mN̦&iD$S[y}#R[7?9-@׹^,$i[l9or/OxJqQ^NNq%pb>JA' j2Sqb""]$)%Q`+E _u4tm:|H:I#LP~zq[U~ؐ vIB[sT,N~ș35<`$LC'2 (veLW(^'2|9S?2w:"Epp4Rc:/xZ0Qi"s}lwyV, 4ϋW=zdn?DEĈ-4lmo}iû? k3lC9n֗V j}LDwg7~+^;"ߍ闯sIy+mV5Ukocoy~"ښ˯nz""ەӧ,~U]ADs߇o9)m=oԶsu?RkÆ Dtn L vC+;'lusKY~ο=1ス)}J^/f t=j#r*`S~vc~4-iy-ZFPk٥n1zWt^c wz,$0RZ./M9ܲT?H {mc2c Zv!(ȖU@C6:nk;Z8f-H#V7V/3wY,XjJfOOhOЌ%Ӝ61XtgTO9j ^U?agDIqNsV*J>JƣhSLJL* °Dƈiugd7("<mi6mmED"^XRD$ ĊVL=IbISDrz4yj.i1sl jkEıDsjE$umyHRcX>z??H) Ba3eeeeeb̾˜,!AS퉘C46lzuGX豑PTOCmᴞzT45oit u~4ߺ'} hO$NMdC4ۦ953IG+W}f]{59JzL7:viibTW{WmզFXWVPREDuxΌRsφ Aoj)&(|6kH1Pjq|hFKUUGmAu%LdmZCc氫Xzbpi˧R#6Z]FfMttG0dz!K38ڣ+xh~?H>펆vWz_״A|*k E"pW!A1ɮΐuE߷IZvLhG2j7k1I}g(mP۸Φ(覈u ؎H鮯]b5m+bi47 |waX,5xhMyGSPğ8,ˬ;Ah&^(\aca*X61 o{dg 3wg8O"9D+*,L(^\XN1Y_( .,Y_0r咅sgrI5B ה*wMnU?^P( YLb >y8D̯HX,{ 1dN`LF}pflI`t;dtO`\oK;0.bY 7_})1$PڻYӯ=̯\/kUr:X7ÿa%tf]kWݤD亻h ;u߸>,m[/OwfUا0꺻7.VmLs:ٞ/..+#GzssoS1eWY&tLI`W~U7k==̾ ˪G̎s_ş<7nH[V̙e_}o`o5ͭXTo:FGk&.jy}M;,绰p<;繨_6iZ0w{;y7Q s[{|)tz9q+G]Ωmsbj33X 0MŘKW;WIrgȞM'ywwޫ)>Ry2NѾk21ws,|Օby7wKev&^ߋrmu ux3O, ZnZXm}}}[ @k4H$ߗ<Լlk{QՔȐ(*ܱjCoh~Ӟ+tX^H?. QxoVOwBXf CުLǣmhXOonhjRLu'yF3TWjip{qs sXu_5jnJQPrQ9=}U*.xO| |e&YշTxyGDSQ&n)"Q湥ղw~ߟaF6˥ ߰+Vrj" 53aI\WwgTXWJ"<}EOk>}FFxhSͻ;ۻO`W߱kcO)}~ #{""^_<uEHPr1zŘCD{.nypurU|/f_{~0tB5]mDKNn*~^3ΩmLḦv&L=f* ci.'~ڙ=XG[XF*5_q5M;@TAS)#wLj9~5Ř}s㾱?øz~4xD`d}O?{l?)uo?ӧsnZKy.ߞˏwEngӰ_xx7XҽrM"y#}۶W#e6 z¦37DLwDP 0T׭c~nfsewY\;[V[b1e "r cP(]ck]7>xu#8.ؘw{b9Cel'~{oy9S:O'}醣'&8tR# :}_\1Rf35LI`>?41Ǩ GSQx͋dB,!̈Ӈc̟ƛ{}O'/YJ4v$\z^݋ '}EcN($ttAJI($ttQ>m(cں^TmdW4ѳz)y#Ltcvխ{5{ra'+Ԕv VQV4x핊3xhwnպ3)3T$Jƣp5vmة5zh}Hk~w`LcCdd2߽#FZMGFK.GNܰHvaW`!ou +If۱EZ[1Ove+H#k[}^}˧˚M_!ow=㕬7ؒoK;}~+:=>ʿ'O |/b?rŒGNMۼƅo?k[_o2ǏbiԋO?=Ʃṉ~ܡ ~JFR㩻WҦ|kyco[[O-޸9Kv>̇fu޻ 퍾]kX':̄3N*'^6uj̕Y,2޾.(j&&ugO&;s8ʜll5n簺K4\\wtgԵ"I]6IuKj.]uf4]Ohmݦm-=T299"#Kr\?VՙHK,; j5Ktwwy\UӭZfKFZ;s"jrb[oˉ8ypq=ߟ|+ڦFx{u9EbrفnZ:9jwMe&ы"Κf2Wg89?"b|~>R( |wg_&XX,o%?D3hʣ=J:hZD眰5g8]Xێ vfskNQ9\YMk=.H&wñ)^W"Y2n>b1 9=҇'Br8V#1զsf;?bfHTwvQ Uhde2`kKDZ|\0 LaH#Saٵ'LV!eӹl:ھ쭯 ~L}<\wtVUr9Q=MTx&, })7,!AS퉘aUVrU\J*jm9Lm>CDp"7p8mJ0r"#u2֪%.Iua.oSStl*7eϧ>2Gki#c|k7b됎5S>h1K4I&u[* ~# }4hMskZIUUvffZ <@֡vѧYi'6:єb離ɀx5uDm(CjvfڮS.rpz<UDDiT^ ,#C-byPCttn9GhtFwѾOvLtE&ϜĜ#)s+-֡r՗C 勮?Ro^+C{#?VLI`֕/yMMD;(.]k߶ߎT}g_%}:MѾg;xbuT10+Ir>>rg~;7l>S&zeBǔ@ܳm/m1Q5G#joݶ=;o:_qj[:ߪuvM]ԛʯwXwaxwsQ-ʿl,Ӵ`f vv9o 5ÍNS/ 6|oͥWE#dB۶هrzl&cJkqcerPZVl}&+׏V .HŘKW;WT(%kW*w.>u>&P/{"bseWnnO~?~0pOz $c54:bXcYO\fNj]-G>ΐi%u[wv=PsukwmHdnzȿa]X;oO6:}%F"%FwpG`ƪP_%pVD$ʻ~orzMz^`2վiGLyѰ_e9.Ol%l!"Rq;Wəgg]-9#G{:}􉣙""Go?o^b`i|&~ɬ)䲅#H;}.~/+Τ o9﹌xkYN4 9r͔o:C#i}ӭn&G9Ҫ*%R{ _J)Z[1b;vvG*Ȉ:Jqo$z:B!´閻B4C~6'$Yk-! &ZjTucG" rUOkvyU7 EW-_/=O 昴̫xO^Ebގ^#UvT6L3*"2j:XEЌ 6DҪLvmzI&ux`Y5F1^%FonOxUt[SѶ~`?u`AɤJJ>t[ÆWUY:\.Y+}HNt>'WÎA$ZwKǸlJdR75lJ>s#ԲMω5)?޺DD$}ӝb :Ժ``];9xhy@f0Wd(vM:\ƌ9N~ϳ21N쏌اc.f)/V^}Ƨ}[p;ke.vt" Z[fL.Sn8Ͷ3a֒\G#ly{maݨtּd=kټֵޝݓMTz5%:ڶ75{ҼpRD U}H°9M 22wK(;S+5*U$?lsU3/y)΄ 81Gr}:αUWq݉cnw$k4{UMu.9;>p`3a0:/,x gU,WRӻOEo*tXT3XTGrW'~ 3,.|P|CU,W|Xaȩ4t΄Yߔ6I=.D3ևֹXilMK$S⮬( <2bMԫsj1G[}cÏq h𜃉{3 :6~"jR4O. 8\=tO ~NQϜa?:$o:'tUDj6Qƀ-/b&;±$cuoeggR|v?5(@`Hb<ܺ{o\iFZ?㮶w6X^ڷ=)"h(t76?-=l(N?Phi+n1F"",~65"T<`6cwkX^۰b={ː@u:FqWNm6G+[vN/sEjI~+/&s`\I:ejV-o^\D}Xڔd}747-|&ٵޖց ZU߾~XL{=6EĪݳ<7l5d6y64(Lk2-wI]lX^TkyCoT<`DF1c2}͚uzd>mDŽW Wkc?"b3.jz%;V !`0(">F B_____?ƺuヷ_W9C?K_1sYYYYYrMBh&RO._SVo"/|7=1ўK250S.cV&_{"9f I`F>=d,777}9QIJUO6z{q9O=9߽(uP:H:@ P:H:@(nU6jMmz6ET+SZCrڔJ&:1jV=s jMF#3RnxtwTύ jʈ;b+u+5;0ݱ!i2l?^#{l |L{f삥KѣGXknXx$is0κo}pRwX"V-p߭]F[W$^|ÑվoSeMCyumJylX7ߥ>??W}ߓW>b؋bIX#&Zm^}·ߵWGLV4^sŧ{TW|7~XL?{O%#OWC]}+iS\5A-\짖zo\Zz^gcrÎi:p]v F_Iۮ5,}ߓdf™S'K/̺Ӈ^5O,b`Log]e3'9ieN6k6IZsX%SPqF;3h.vfx%A.VC:3Kܮ'unSDr^OEc霈HVIzNs\.XL%xҚh%ED;ۻ<*V^%#9vG ~[c9׭`7D˼Fgk8BztO>mS\"i1s@E zmH2obpgMg3aX>z??H) Ba3/eeeee ,,Kɒ4ўi%x4-"sNXEL3 Q.tmGv]gƹszgpi.IƬަS$;Xڔ\BO|n+Mvmf7qX1ʘ` Cfgq8ld"x]UH::xN)*vfJƢ;zNL;4ĈZCCu*%>x'3v!*0-P(HƗTˀ'ҼhMs'hVduNSĴDmYauy^{"͉׶VڬNCvzпZ-mls4oq8 GV;t{mO3⡎6ibZEL3$W:m驉%Q-;2m:ɧ"GtܫI=w<]Xڴ:4ǥHn!0eC.ͪ~_lC407;;$Ca[ys]>/f*SU.g8p#g?nF~O\4C404K{ÚX%&)ZA1:Z`u& mL!9̋i]yjSE9ۊa1z$WݎȨAy4k2rpH2 VW]0%"C>b؇Nlb̑C0ELړL&+ې\6NvgmmW?lcw{\>|G;QZs&OL*@Q]<>͠)DưChr9SĪi.%LD6pڶm|!"r8]Ux86%o9_UD:Vk$ú0 V^:Z[C6HZSsvHN5X鴋1D\]uH)I]z^uz4}V%KR$:̈-Qz>C4ۦ95êvnbvU-U__PUӬWhJSd :UD!s;uXWmWU{xL9m8= *"V{4k[/Vơ԰c@MooMهwijNoWs2􎮜Kj$ʊ$Iqz.W[i-IjJ6w}FPUm srk`BxV1DsiG{?A0L÷v]sTǶHZD|^˩HQDTOf͈:y=>ik-%QP5:ME@WsU*O%cсZe)7ɮ3wզC~3E >GtK&T:nۈHED"b~o˩H>Ga.Я̊Z]vڔңp]nݦ(y#; ~3ذ)Z[yS.&K.N1t٧`>tAJI($t IDATtAJI($ttAJI($ttAJI($ttAJI($ttAJGy?c~0}IG:~LӢEXJI($ttQ>| X,Skx h0B?q.YrݗYw?KM P(|rŠ/Tlb8ɞf<]qEseWT.Y"Q2cPQ\X.0`L% /w/%jr)U%r2~XEP( 橓Ǔb|>xq_qX,7cȜ.6'͠=.wӁ`ܹ10v$`]v:wAnRbH:s|ѵw_{__-ޫ|u|o{J#̺E6IuwEvݽҿq}^Y۶7_ O`)ڗLRquwo\*tfQy=_]T]V3U. gc߹JS{9kn3'Qj)SZDD`t{}ZU3)=ֺ-{FwyU7 EW-'>kɉ9#G{:}􉣙""Go?o^ O3KfwB.[8?{}{m'|ŘtΆqF0HEԑo2mM ]/u3ݵ=!LkQisʹAwLG-C/Àm@E_˟w(YDDÀy }ϵsD{P0ovΒܿv7{aIh瑃%Ty!9~8(6YIJξ%cLNn`S<0 fiwt*,m祫;gOZ, ,DG͟sogeR`j?>o9MK9?~)\Y<> /!"YE:2%zvQOh Ǔ)]`(Z[[w$˜!Ċ2d2%ƖDGk5 l=a3ӑ_fbk/|ilozВmlG1+5=f\Z)k5Oj"h]zgkn]e]Ͻm4qM k~'Jqj17Jt]1941AK{6 "P_|wI8Zޡ5u,dwzۓ)1 <]6YRPglDyV[ 渴CDΆy""?/{:~99nDk_ e?ӱ~v_ﶃSe5^[[RO }jJ2ߵa 1s3w"i;18I׿^b f 4cSa2H&HĬD算~!t3u@~g)902Eio)utzB۶i;++m5dXϙ n+gY qל ܘ㑠d?dr/mҏ5>OD"jy7nܸG_q7m,o_.ڵk׮]f] ~EWbJ^?}͍Ŕ]^u-iw9_?"1}B'~9 |L;{NNfnBoXtiŻU~sW#O?i]Vc:~t AI$@?_iFaP[:*0 zN55yZp;6!Ǣe˶x=Ns+'{g(lpLI茢&L:58PG9 sFNE b,(R*0[ Iz;Fg<^fL2Z\Yq-c ^Ol2H&rf-;&"X]^of1H:So+NdVH:eܥf>uVܿ~OG[ND>eltVoې}=ЭεSݲ^{IT4Q=)Kߍ_-[)(Ӻ);w3|LG')ۆMLI*8?Ofߛt9Ŗ`}#{7uT{OGEt?I50ٞL'ЮNF=&fHՔ&"p8V"R*Pτc AghS%`~k֬%߼y͛ݜhvڵkXY&x?9Wt-m/ƊDo !"N("d?b٭&[fC&J^ v]baSDq5Fhyy FiN;>BM(c%mꌇLT*)"6͐2 {UIL3t^eCl- Q-b:+Jl?*"&}ǯ&4K<M8lxt%҆YY͛=ҙx=秇2bn+V#J'O $2=ssIcI1]%q۾iSI`gmu<"" [dc[,'ӭZr "rg-A&`RM;c-6ds9:Gcb-V2GCkx=6d=-""@{[graH&o %D&Ő23NjRXnX>̏ۤj׽eŻ?+:ehްϳˬ<ꪬ*w;KZ;S1H701%59w8DUힺJg:д74TVfC mb-cWUf>Q$>H(rJJ%g2Zi:NWWn9:1c[[mgV`9?lt<2Z^6 hFG5qIgzYYWȄێtyFZF1d:cPLFqlБmXPKJJy Tb}3r|>)4cst:-fId&$DkdJh*1J$b)z ܞ*q;))PrSQZ`4oj2)J'2. 3t7C~ۋq5Z.UQMDq:x,:jo?ҼCDd(Ϙy xXm&C&}$ADQSf5a%(vOm[MMGf̳3m.COg%Lv7YDD"KZްm},crD%',GFndY חrȵVjNݝxXvOdzTvK[W>g E$lm_SlK]W/_̨nY9t]'99Gfe}x[=vw]>4{]-dz=ѮdYΘZc|HYt IDATGjlGɺ:uk"Q϶fex 5zڸŻ.ԑvs%ٷ: 55Y2>>2VC 5͈)~{MlNvrCH1a/nw$;s]͆^o>}=cIr yfosӕ]`x<ieW[)\ڳs?##9g68ED$#oۧ_=~097_Dd\܍әų\;UИ}mDe5۟5+}jڰy<e|ɘCDDNJu[WxnY?)+ǒs,9""99BgێX8ɺrDs,99 #à n.㖧fWkq>܆ϗ]4Wd8NAB$칙w/{" n31lˆHU d9˞1";IHrr"Oϸ&gYظde>fn;9!3>nkkhx|-%{1eo,S?---m'y`c:W>,m͟3 #'I ''Œ52ɹ_ܬPrzB6[lUvEJ.,̵ UsO߿dbd\6r U/++u[0ü1HNaنE_u}r ;\1[unPDDsrDYOs2ENn "26nsU-2266&23RI̷H55[d:0LΊ>,otf$xT)YN1>r*&}26266666z`N=[VsHvzEdlR^ttŹ.kx3o7^ 57g5}Iu蜞4m9۟]VgpZZ_=sS[O|<"c^lӇȒd;HᆜqM2ؕXW㞑m%"V3:`5%9YV!"piny꾿y뛼GrOWow>3WEr u9=5cLUK:$gnnpS_roe?T`u{7~ҥmNF'5k _[qc~N7& 9;k|#Yϕ/vX-"#Y YγgoX==vsGOd} fv~fHծ|,|/g>HOHMK[[o_ ;eZ_;}{>,,~elg-nvnH܍QWh]Ƞ56.Y9 ϕ=? X5;r E%+b/\pUC-jvX]'9Zoܼ]8]bj^樿KAtG'K]96<9u늬|;6de[r K}Tﷶ^1Yr4D ;7wq|>׿~KR_km,64~. =JxVmEGHbxxvH$ejRDVFb IǪ~lKi=G"#"O;$+cͬ$VsGX9燧ի-O}՜5Gux,+w χ5{Gt]]'F%+ےu {1cdn\aj7=a$@?H:~t AI$@?H:~t AI$@?H:~t AIЏ'~455n;VhݺuAI$@?H:~t AI$@?H:~t AI$@?H:~t roT|mZtޯYr Xe'ZtD5DD\\YUj;JL E{Ҿ+cjX(Yv!?*5Egz8E4dhw~a(,ӡwE{9W_ "= u]\|CX]]~aat]nf$rqw""b.nq7p!r帷w=%#\Fdӽlӱ(NڏqkS\Z̑ޔ^VYDfU1XgvbsUn=iǷ_ ߶܇{=߲/l%>FIpW{;wN;M嵵{Nؤ%L4M]ջߞ=[N|%B=|lgI:xI5y|[S/|=&"h"6Ome:ز7S51?q`i:ٓWWQ/Ugv8Աw?j88{侃Ѵ^?gxLF`+9w`hGT:OqLF=+1mkzaG[LD$NY.sڷ{lێٸMmabvJaHOmk""`4Z[&"J˯Le,oUwګeDD,W;D$yhDwS2?9H(㶶%D2̱mG'*Uyx_GG""!ͭ.CT51eDdWǷ!=G^~}Ub{kJW+QM4I~Y%!'X循R%D$v%=Vq5-Ϙ,+7ynS &8\[\'NW[i 3)}/]#ѹ%߿d$z:6Xs4/'wm_a2dCj#Ť)*O*!Nƣ{w5R""۶i;++m5dXϙ K~k}݁*I`ӑh}{MqGmEEފ= m9?j˾#=>Ux_w۾]%Yٹ'W>wS΢@86жc[ʷiju4߳2mŴ2|>D"M oVPj}0x%4۷Tb)O=Ha%IDŽx3= 6:\0U䏭X( ?1Rvm c2 ~L8uNtU;OçL+-ʓooOLlk zئZce]{MSWܺa]< Kd2DY4kE7/}%4*"ѓ>wzk=pt{Nh')6X\ԅ+H̷.67\:sxOE"(ǯDŵ+u|/_Dt]8>|D\xjwykȕF2o+nwYOY˶7NVp©^qˑ3KV\hhͳVy*O,'F.7$tdVDtzsƒ2!G'hjggTJ VPX4#LVc;=X]/|Oqmml[ݦ虽/:xmCA2MLE*]wҭ]j8v‘6ڵ-Ww$Z&3_eOMw=']_;D[m۶`Gs׾^yޗtw50(QI2iMEQf P<ԙrćb[H^I5."JUz'w55 ֢׶xx%dǮaM$I@D/`u4u;] Fw-w}  rt̛nmL&"zwyI:T᫰ soV*;^]S/ԼKd1UU9bV~\a1z9ypbQ$TZ fIdKu<0-fB"&sP 5qO$ELfHp%OtH:{vh(3d2#IsM陚hUm"%EvIѩ*/""iF̈ ī٤7@H70I=Oh?66x|ީUG"2{JVuLco9;o_Sd\\Y_WQⰛarW!1YLI'nՆ3>ͥiPLfH,1# 32a5$L?fS3wzRjVd1IM%O&:ܡ@w6*Nd2aA " <kT<ƦExޑ>s)K3b8pjdf޵5l1ϝn0XԌ@D$ E3"tZL&Ӭ*fI D"{s6\8]:ڗk} cݺuw;SCǏ7{&VX554:O}6L\s𨹿WLQZWU$}M%H36禆FT6Y|g%Bc֭?x*dո߹}Ŗomr}ܶo_ۇ,RtT-)X wW>S/WݟFj}XU^"AI$@?H:~t AI$@?H:~t պXɤ#Hn;V'` $@?H:~t6v IDAT AI$@?H:~t AJ^Щ ]D"ȕ]8̮ܓݹ#S^ *?~%ҵ б ȅcs#Wm/^qSuE4zl=tJ$rTU.^D"w/=qRS,vt﮽{,N..DWި4X~ʅo/b66nu$;vmk]kf7\_)mzk ̛|U%x]G:2||)1 >No7;y :Rhft; XA+h1lωR ݱ/Zfn@}&I3!M6$hb/qEc:,dѡY1K*0s(vOs]D"W.w;ۢProh#sr6\z"y[ߌD..(#KYéD"W.5dV8TYP7D{'i.<Ź͟;sn" NEiis<ؽ LiW3>MkM+" <4d@!NX DdBBV⦏l%c+-f)X*kfl2;ǝOb^C~>/yq׹Α? 1H֛X_sI=8NJ :?߽hkn>0Tf25m7wfco|YIĝOrYbs>f HiѿA&ҧC(|u\#2>>;-3Էs\I-Է)h!GHXM%=W=ϫ\r)]mc{_$\o ymu]QY8NG$J6ַjES’T}~qykloao/Ɇ"erIEWP$bTZ[k],T<>s$3Z|˦tJQZ/םP`)ob_o_i&T__\RjB/f.LvٲsM1<~hT$Vm{lLg ݌{+<)(nDYѥM/3lm*J۷[UӸ{N]7opAq{d|OIIG$"xV%?$"P~# K-(2"yջE߈KG,7h䡞ꞹELtdQ8xWΙ4 }1+ E4MvSYh8]]D_8tKVyWAh3X>uw %C7+cqN()ZMڈҬ1C\>WW3U YnɛxօZE#42Vb!(<;ԂT?-"$"w8JQx^7t0wTt8NhfC h&V]m̫)7VcKi:+XCC)B:\ zy,ː* ͝UH(~8X<,ݰ[ʚMy_T{"D$a$ --תz%GBst9:I6_53<!il+֗ bbKNǓaA$bd(2 N?ZH3YOeR9.AHajN3[j*6VݰRuH=y O wKTȉ2c20E\zx2O3MɳI-'j,Չ8^A)u8c=dZˉq'D!IAD_Ku[H˫5&OX1sRF%vl7TfՌ)qЧ#hn6*MMJ &+9N/'-SU8Kz\9S\z@fo~J()FO6g;j[|'DrRc`iSB[H6Oi͖\yV2flxv~qMK[/Uju(CIVUx>NmxD*\#F[Ir&k+PZ?{aZ7jةw#5ZKηhؑ˅ >q5{W3-ئFŇ@$V֗kؑk%]s7kZ jqWKkVJȱ=dg"Z+r9KQ?20U?ι2G@c;b]ff2G}wv2/̽2N6s2,;uu1fPۑđ_h֗Vtb!I֗u߹#E7yvw[Y5M*D/ܴätޞ'3#9bPrEkaOCU 6pw,dCJki잟m: ?""I5o?nIZtWTDpFdHwle7U5c,,uD䂻1LDs|U ;|DYݞg;lD 3Ŧ4+BDgXQ֬zDDEԱv~jJ$oasE""6lkqQ͙m{VAnZೖH_Un ZzO1NRi!f :RfDsCQbY6W噾:V҈go=vD=LYCC",\Cd8$DI{3 @ ֨$A{bIV+QR%zL+j̎33eJ<`C1,#!b$f(!@|0e,/)zZ߽a|231Ry<3a58\Y0-Q?[ D}ڞBD[>#MUi4Zժ½AYLB S]ӂd2(LRٺϬS*d,+ ' !afZ.QhBXEqsajqߒV$$φdC2KQ!=a^^QeDwo8*l$Q"2]Ò,˜xW],R^{ݮqRo-6i2F2GάLRXes"Bdn( BTy+3Hsuu;9Y%"ou/<@loEW9%͚:o5?gHV;ŠZE#`σ`cylyeZ]w뼖V+3^(`jil*˧=%`^]'ud5T:\"tcH)X!~<%%}}(4ଛ(YìpdB0Id Y5E8H)UY2KEb$q%=b3E'XPxDsPtڳ 2淵j WJk z6FLF~k{y!S9Z;2sdQ 8Je,#7(>sy-tb0FѠDv22}ى#fH° 0f5Y>@J=:3GMy5A?*Qs=dFA#>8~H4AQ53#'ʌ`TYk’G+]1ɮR/Px’=8H²#$#ePh&<\d魐}G=sy }:"fԩt:ݾ@l2tiq" ^;07js6'e \Q!5gz)j(:4NE78ZQ 2JC9-䮺$J}Xs=yGd`TmBΪ>"wtyk#Le6kb2D$l\m^}+H2Z t׀.NkhHm*/4{<ޑ (wU_ JIaBa(`1 }#^G_|pQZɶ/H4m)-I !}PdlК -i4FN%%.rVx󳖝ٮ G-+% !pfs ǮzOi8JTWwbo-AT ъ 6'JJeւ2%9N/h}Dʭ5y, `WECtT^Yo*7 VsU^9踽bh-5y$T57Gh32p sܹsᇔ,VJ1c4Y]ξFľRZWF|S%A#i +N|fSexE(wB(/6YrY x/W44"YXvb!5oeg *8PāJ$T: qHt@@*8PāJ$T: qHt@@*8PāJ$T: qOrrmMW:ǟn;()) w@@*8PāJ$T: qHt@@*8PāJ$T: qHt@XkI8}ν{wnw_r9KQ?2z ; sdΛw߻s>4dwv2l')x^wP}N9Hێ3DZtߎm~$/;kP\m: ? ZxGi~ D'%|Oa4*'(%#= ~a0JĄ}a"b$c /\-RiY|3 4\e +BD6YR%o\]DmUJF.T|; ЉMwe}JViqWӥE GKPUˣj]$"r9| !ZKVnQhZLd3ԆGפTGRþDDl^'3+H%Aۭ"ZA}dŤ%3!Nys5srYQVd[9vyX<wXQ}rۡݻ IJ\&wyQRfi37w{;Ƨ=A6>$%|Ҹ|mtzlwyAr%PHi.6g'fwZlEsGTR%S)t ejU <5`_9JN%_qx8 S*Ͷ9ӌF>Wjx OjD>J2J}T` tqi}2PHDN1~ D%b$:ttzyR bT sC(ޑiVlzuO}-HSU`4qy4poGP,z״`!% Te3 JUD!$L2-C s(FK4W_VԘ[90z]=]\KUa?"$"qnrjtEy %{[|^<6&ӭ',fY ώZE# [ҳjktH3:EVk9zy,?B޾m VpDaV82P$2hf{,YG?b:ZHjW`s4ң6o͌9:$/՚l7y>`ȤTjTiIYcRPRcZ+NDJf  D n_B1/M)I[Fc^^{L3Qa23=1d(4΋ "I;StPyozxq:LVkyy~C7TKh?"R FYAxR}ى#fH°!dDfA_}~z.uf~Kξ F_x07mx3% wWRl7Lk9x` ˓D"[R?)ZD" S7r?5DZby{5*O(L6{uH5Zt \= qz>`T6Ν%iDE+#J65dϞqep|=dk38G%jN7{%1JNwDo$Jit{x O deƌtYC٨45u*N/8.8]|g9MvG4C%W?u>BFHYr `1ʼN>Sr젧oL9_k66:AFi(0UDnVyFJE#.8 `1 }#^NJ[T 5liڢV3"DYdQG)CQe8WDD/r9lXb4A=Aû]gz:j#YDd EyfOg}TAg@v9F 'hnpZPzF/6) e^lMҢޮTxml[%= q^ϳs=yGd`TmBΪ>"wtyk#Le6kb^aH9ڼV: \ea-]<ٮ G-+% !pfsLqU) טXI44s֕ URTZ?UWP^j2Zaa[IIZWƱ$>GթSGxxWi)S^l6I$QvU44{D"1Tʬ gJ+t,jë+WzZJE̖J+jY'qgi!̳HAS %G҉8;\kQϱ$^u!jVT旵(xVob5M|,WQhQU'-oO#EHk()ˬ&VxPC} %+c% Jg`#3д>Ie ̏󛴽ˏ*wPn-cIp&a{u?R^WWz>6=55K޺BD|l=11Ě @r֞u[:"I-uRu-ŸPE2dA3ay(7yvb)! 2M{\r:ώ/g?wD8GX/"x Å ];m) :\.XM&]cE枖Ù~>/Yf?0=7GF_wzt~%ؑ`݇3߼XubG0ҕHLR3>hݙ~ؔH̖thΛt&?Q)tL'"QL1yw$ބY"BGH^ L̖,]׮;a~!xpcc ƈ6.Q?{Q"b[R2ua챳-)1}j}H2uÞڜ̙;T]J``hkܻ3*8ޟ5h?(Mz-Xa_^zaX,˾曱O?tdd䡋xє"tW:&'O;&d6q>yi`?֛wo \o?yш(Mz]pݝ)94%SqOmc:Vy<2XѦ];3;K _vnc.ɸekL[hnѱܗ+Ǫ5:{kӎXƈwHoIމbKӥ!W^}m۶^?yl޲l|3_KcSc׮Tx/ӫɤ`6#M2س_sـVOrdni&pr6.̑ş@w`tnK4xݻ3UggX 0;tvjʄ}ݮRXq VJabdjllW#=>Y5[ |6Ԙ&'ǦDScc$X`8X^']u3Z;ӧǪ:g;z{Gڳف߯_s ]9faZ>>Uܔtilgor={tFDIIIp>[Rw"zW_z,%F"qĀ]{v:;ә Ǖb;lg'6]3ެ߽;;=[6 &HٖB.SxYgq)fFwc̯QJ.{ ;u|Kh_V F&VXJ s Y钆Y8^9;|*R\._{xk4<ޮ,L Gs&'ǮuYƔ-DVxr#2c5P)꽾5:{D[stp^Y;Q&͜ʔ8vW)\t8xe(ɸmͱm99)4串փΓ'>n)io~9FI:>=n@ǮXs̤Q>y]*1)73h~ٗ徊+C"%ˆ,n 9!OE+ӣ+/~-[,1+Fq髁KHmښ$E_nFIWm M~Ű%i EK+1)=i QMދ/3C_f~qN1ڌ^Oh JJBSCk2wʄJ|&"$ι-4]0$6oKUWK=(t Fʐ{5Gc!%"1ZWwrr޼xq85 |@o cٛ??ߊ{_ǿ?yvW^y2h`[-, ~zZp3#S M}RV6KeyRҷ|ED_LӗՁ>,ֵ]͞o-z5>nڸyCNg3GÜnD/iȢӟ=0{~pdv;*R[6?k[Ihj95|Emu`Ieć JK= FIDAT%|۶b #t5s,cU m+W_r-NGlI篇vt[ ,e}}!M2ߓЇ?p333_{u#g=5tɏ7jĆMJhtXo_|3]>{P˲6у%'ӳ2_-g{zO VT<ӟ2XT*%"4}TQt2]YCW`~]Ǯ:>kQck?!=r'rܶ6)I ~N]K憋!*JNN^!I7C~5_ƨy4}][i޳'DH$evO7:{.+EJur-Wk$ݶ4mK9RX4Ž-0kbbrR2ROCX,=sCceL6kH M*k3e1DZ!UKx,qjbArjh'd``20=Gڡw/''k\*###~GoR`}5 hsܧ&F'ۚN˝U]*yv?e"&xqQRs?ۋckW oIb9Vs\z3K>n -,҇}|d5lڴ魷ފMpw#u,zw.\p ~9E yW!1bm{GMTKO7#'1v<{@V44{Ir:l%`ӦMGt[>`tt493_3_Lb&T>ėc$MϚ{SVN:#NV1rcy>gOj̓mO8>t LlԽkԥL8/^k;w`Jdb"2޳mK1H˜Ioڱ~3oB8DzvzP Js CD4">  -ˊP;ERdQVvm* s"Ba?Ɍ3Ť~]ߌ_I͍v' 5n[|BHyfZ6KtzCnn OUI:Io(XOiL{F>{b lQ1*vuzWmjXm|_񳯫*9K0۬lo/-'$<#3uzZmoڼDzzzGIIdz?7r^6:ӳQ'MN0lx|~)~舔:}~fސbTbvW|WB2=V^kNDJo(a!V3s5r5ůe/(FNfjkOdηVTT={{p˖-%%%}OV-uBOS=mJ|gLsqB[iݾ=D O!!m!Y  hm5' z~i.%sɩNA*͵mtIʃId3|PnVk=veoM !Cnu4.ʶҐּۭnl/Mm+?ܐ9d:lz}s۶mƱ>~?ޒ;vTVVF?~?䱳103>fr%^v6mj24nC{t"^١N 7<0û(OkW]_GZF!Āc}CNOlV;='rY,ׯ_9sѣFQ+WLŋvJK#9i:VodaDD_S].uԖ}vy& !|]OS] oX_Gq_;>"o@UU۷o/^(+222v{EEWΟ?ͅ%i;~8  i%߿{p8|ĉW^eee=y$>NZzuWΝ;w֭w&p[TQ6H?>h0/6ͥp8;;`0ɲ|^t)yC)2urK8!}i=DvUUׯ_rʍ7 H$W$uK.TQW.H3 t!|݌^C's199x֬Y3-Poڴ|֭& ;CǏ>}zbb"Ik7/嶀ÎE${ VZnݺ;wgǎI'''1'B08 -J+dee5>>vܹP(I~ydh˒VVU&(((HOOؾsΜk׮]|9'kߑ$BoH:/{:f/Ilu:]NN΢Eo}͍7N>ѣB|ǯ?Ϩd%kXabb;--mddDUgv˻w^ccc?Ws$ha+N1V&UQKSһ-ɕ|e˖B!M"H5ɲȘgK:PPbI:Ü;$ utARIH$ utARIH$ utARIH$ utARIH$ utARIH.gIENDB`artifacts/preview-images/preview-images.md000066400000000000000000000023411516776645100212520ustar00rootroot00000000000000[//]: #@corifeus-header # 📡 P3X Redis UI that uses Socket.IO, AngularJs Material and IORedis with statistics, console - terminal, tree, dark mode, internationalization, multiple connections, web and desktop by Electron. [//]: #@corifeus-header:end # More to come in progress ... [//]: #@corifeus-footer --- [**P3X-REDIS-UI**](https://pages.corifeus.com/redis-ui) Build v2018.11.1-2 [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) ## P3X Sponsors [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/) [![NoSQLBooster](https://cdn.corifeus.com/assets/png/nosqlbooster-70x70.png)](https://www.nosqlbooster.com/) [The Smartest IDE for MongoDB](https://www.nosqlbooster.com) [//]: #@corifeus-footer:endartifacts/readme/000077500000000000000000000000001516776645100143155ustar00rootroot00000000000000artifacts/readme/create-https-cert.md000066400000000000000000000031041516776645100201730ustar00rootroot00000000000000[//]: #@corifeus-header # 📡 P3X Redis UI that uses Socket.IO, AngularJs Material and IORedis with statistics, console - terminal, tree, dark mode, internationalization, multiple connections, web and desktop by Electron. [//]: #@corifeus-header:end # Create HTTPS2 certificate Use PEM pass phrase: `123456789` ```bash #openssl req -newkey rsa:2048 -keyout localhost.key -out localhost.csr -passwd 123456789 openssl req -x509 -sha256 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 36500 openssl rsa -in key.pem -out key.nopass.pem ``` # Allow unauthorized TLS certificate ```bash process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; ``` [//]: #@corifeus-footer --- [**P3X-REDIS-UI**](https://pages.corifeus.com/redis-ui) Build v2018.11.1-2 [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) ## P3X Sponsors [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/) [![NoSQLBooster](https://cdn.corifeus.com/assets/png/nosqlbooster-70x70.png)](https://www.nosqlbooster.com/) [The Smartest IDE for MongoDB](https://www.nosqlbooster.com) [//]: #@corifeus-footer:endartifacts/readme/start-up-server.md000066400000000000000000000110001516776645100177120ustar00rootroot00000000000000[//]: #@corifeus-header # 📡 P3X Redis UI that uses Socket.IO, AngularJs Material and IORedis with statistics, console - terminal, tree, dark mode, internationalization, multiple connections, web and desktop by Electron. [//]: #@corifeus-header:end # Start up with a server ```bash npm i -g p3x-redis-ui p3x-redis # if you want to disable changing of connections p3x-redis --readonly-connections # or p3x-redis -r # or p3x-redis --config p3xrs.json # mix p3x-redis --config p3xrs.json --readonly-connections ``` # Create a Linux SystemD service ```bash adduser --disabled-password redis-ui touch /etc/systemd/system/p3x-redis-ui.service nano /etc/systemd/system/p3x-redis-ui.service ``` Place this file with this content: ```text [Unit] Description=p3x-redis After=network.target [Service] Type=simple User=redis-ui WorkingDirectory=/home/redis-ui # or if you want readonly connections as it is public #ExecStart=/usr/bin/p3x-redis --readonly-connections #ExecStart=/usr/bin/p3x-redis --readonly-connections --config /usr/some/path/p3xrs.json ExecStart=/usr/bin/p3x-redis Restart=on-abort [Install] WantedBy=multi-user.target ``` Finally: ```bash systemctl daemon-reload systemctl enable p3x-redis-ui service p3x-redis-ui start ``` The server is loading at: [https://localhost:7843](https://localhost:7843) The best is, if you have an NGINX with a valid, secure HTTPS certificate for example Let's Encrypt and then use it as a proxy, for example my own: ```text /etc/nginx/sites-enabled/p3x.redis.patrikx3.com ``` For free SSL certificate, I use `acme.sh`: https://github.com/Neilpang/acme.sh Config: ```text server { listen 80 ; listen [::]:80 ; server_name p3x.redis.patrikx3.com; error_log /var/log/nginx/p3x.redis.patrikx3.com-error.log; access_log /var/log/nginx/p3x.redis.patrikx3.com-access.log combined; root /home/redis-ui/www/public; location ~ /.well-known { auth_basic off; auth_pam off; allow all; root /var/www/acme-challenge; } location = /robots.txt { allow all; log_not_found off; access_log off; } return 301 https://$host$request_uri; } server { server_name p3x.redis.patrikx3.com; error_log /var/log/nginx/p3x.redis.patrikx3.com-error.log; access_log /var/log/nginx/p3x.redis.patrikx3.com-access.log combined; root /home/redis-ui/www/public; location ~ /.well-known { auth_basic off; auth_pam off; allow all; root /var/www/acme-challenge; } location = /robots.txt { allow all; log_not_found off; access_log off; } ssl_certificate /home/redis-ui/acme/ssl/p3x.redis.patrikx3.com/fullchain.cer; ssl_certificate_key /home/redis-ui/acme/ssl//patrikx3.com/patrikx3.com.key; location / { proxy_pass "https://127.0.0.1:7843"; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } listen 443 ssl http2; listen [::]:443 ssl http2; ssl on; add_header Strict-Transport-Security "max-age=31536000; " always; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; } ``` [//]: #@corifeus-footer --- [**P3X-REDIS-UI**](https://pages.corifeus.com/redis-ui) Build v2018.11.1-2 [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) ## P3X Sponsors [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/) [![NoSQLBooster](https://cdn.corifeus.com/assets/png/nosqlbooster-70x70.png)](https://www.nosqlbooster.com/) [The Smartest IDE for MongoDB](https://www.nosqlbooster.com) [//]: #@corifeus-footer:endartifacts/readme/start-up-with-electron.md000066400000000000000000000023471516776645100212060ustar00rootroot00000000000000[//]: #@corifeus-header # 📡 P3X Redis UI that uses Socket.IO, AngularJs Material and IORedis with statistics, console - terminal, tree, dark mode, internationalization, multiple connections, web and desktop by Electron. [//]: #@corifeus-header:end # Start up with Electron in progress... [//]: #@corifeus-footer --- [**P3X-REDIS-UI**](https://pages.corifeus.com/redis-ui) Build v2018.11.1-2 [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) ## P3X Sponsors [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/) [![NoSQLBooster](https://cdn.corifeus.com/assets/png/nosqlbooster-70x70.png)](https://www.nosqlbooster.com/) [The Smartest IDE for MongoDB](https://www.nosqlbooster.com) [//]: #@corifeus-footer:endbin/000077500000000000000000000000001516776645100116505ustar00rootroot00000000000000bin/p3x-redis.js000077500000000000000000000001241516776645100140240ustar00rootroot00000000000000#!/usr/bin/env node const boot = require('p3x-redis-ui-server/src/lib/boot') boot() changelog.md000066400000000000000000000025101516776645100133470ustar00rootroot00000000000000[//]: #@corifeus-header # 📡 P3X Redis UI that uses Socket.IO, AngularJs Material and IORedis with statistics, console - terminal, tree, dark mode, internationalization, multiple connections, web and desktop by Electron. [//]: #@corifeus-header:end # Change log ## v2018.9.28-3 * the AppImage was not working, now I verified on Windows and Linux ## v2018.9.26-0 * the first full version [//]: #@corifeus-footer --- [**P3X-REDIS-UI**](https://pages.corifeus.com/redis-ui) Build v2018.11.1-2 [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) ## P3X Sponsors [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/) [![NoSQLBooster](https://cdn.corifeus.com/assets/png/nosqlbooster-70x70.png)](https://www.nosqlbooster.com/) [The Smartest IDE for MongoDB](https://www.nosqlbooster.com) [//]: #@corifeus-footer:endp3xrs.json000066400000000000000000000016511516776645100130550ustar00rootroot00000000000000{ "p3xrs": { "https2": { "certs-info": "If you want to use your own certificates, you can use a relative or absolute cert and key.", "cert": "~p3x-redis-ui-server/artifacts/certs/cert.pem", "key": "~p3x-redis-ui-server/artifacts/certs/key.nopass.pem", "port-info": "this is ommitted, it will be default 7843", "port": 7843 }, "connections": { "home-dir-info": "if the dir config is empty or home, the connections are saved in the home folder, otherwise it will resolve the directory set as it is, either relative ./ or absolute starting with /. NodeJs will resolve this directory in p3xrs.connections.dir", "home-dir": "home" }, "static-info": "This is the best configuration, if it starts with ~, then it is in resolve the path in the node_modules, otherwise it resolves to the current process current working directory.", "static": "~p3x-redis-ui-material/dist" } }package.json000066400000000000000000000042061516776645100133700ustar00rootroot00000000000000{ "name": "p3x-redis-ui", "version": "2018.11.1-2", "description": "📡 P3X Redis UI that uses Socket.IO, AngularJs Material and IORedis with statistics, console - terminal, tree, dark mode, internationalization, multiple connections, web and desktop by Electron.", "corifeus": { "icon": "fas fa-database", "code": "2Q", "prefix": "p3x-", "type": "p3x", "opencollective": false, "publish": true, "build": true, "nodejs": "v11.0.0", "reponame": "redis-ui" }, "main": "src/app.js", "bin": { "p3x-redis": "./bin/p3x-redis.js" }, "scripts": { "test": "grunt", "build": "build --ia32 --x64 build/dist", "build-test": "build build/dist" }, "repository": { "type": "git", "url": "https://github.com/patrikx3/redis-ui.git" }, "keywords": [ "redis", "ui", "gui", "web", "electron", "desktop", "server", "angularjs", "javascript", "material", "dark", "light" ], "author": "Patrik Laszlo ", "license": "MIT", "devDependencies": { "corifeus-builder": "^2018.11.1-2", "corifeus-utils": "^2018.11.1-2", "electron": "^3.0.7", "electron-builder": "^20.29.0", "jsdom": "^13.0.0" }, "engines": { "node": ">=8.11.4" }, "homepage": "https://pages.corifeus.com/redis-ui", "dependencies": { "p3x-redis-ui-material": "^2018.11.1-1", "p3x-redis-ui-server": "^2018.11.1-1" }, "build": { "appId": "p3x.redis-ui.electron", "productName": "patrikx3-redis-ui-electron", "copyright": "(c) Copyright P3X / Corifeus / PatrikX3 as MIT license", "win": { "icon": "src/electron/images/", "target": "nsis" }, "nsis": { "artifactName": "${name}-setup-${os}-x64-${version}.${ext}" }, "linux": { "category": "Office", "icon": "src/electron/images/", "target": "appimage" } } }redis-ui.iml000066400000000000000000000006231516776645100133250ustar00rootroot00000000000000 scripts/000077500000000000000000000000001516776645100125675ustar00rootroot00000000000000scripts/start-local.cmd000066400000000000000000000002121516776645100154740ustar00rootroot00000000000000set NODE_ENV=development REM set DEBUG=serialport:*,ngivr-arabesque:* REM yarn link ngivr-ms-arabesque .\node_modules\.bin\electron.cmd . scripts/start-local.sh000077500000000000000000000002201516776645100153450ustar00rootroot00000000000000#!/usr/bin/env bash #DEBUG=serialport:*,ngivr-arabesque:* #REM yarn link ngivr-ms-arabesque NODE_ENV=development ./node_modules/.bin/electron . src/000077500000000000000000000000001516776645100116675ustar00rootroot00000000000000src/app.js000066400000000000000000000021171516776645100130060ustar00rootroot00000000000000 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; const boot = require('p3x-redis-ui-server/src/lib/boot') boot() require('./electron/global.js'); const { app, ipcMain } = require('electron') app.commandLine.appendSwitch("ignore-certificate-errors"); if (process.env.NODE_ENV === 'development') { app.commandLine.appendSwitch('remote-debugging-port', '9222') } const gotTheLock = app.requestSingleInstanceLock() if (!gotTheLock) { app.quit() return } app.on('second-instance', (event, commandLine, workingDirectory) => { // Someone tried to run a second instance, we should focus our window. global.p3xre.setVisible(true); global.p3xre.mainWindow.webContents.reload(); }) const createWindow = require('./electron/module/create/window'); app.on('ready', () => { createWindow(); // ngivrSession.init(); }); app.on('window-all-closed', function () { if (process.platform !== 'darwin') { app.quit(); } }); app.on('activate', function () { console.warn('activate') if (global.p3xre.mainWindow === null) { createWindow(); } }); src/electron/000077500000000000000000000000001516776645100135025ustar00rootroot00000000000000src/electron/electron.mock.js000066400000000000000000000012641516776645100166060ustar00rootroot00000000000000const Module = require('module'); const originalRequire = Module.prototype.require; Module.prototype.require = function(name){ switch(name) { case 'electron': const mock = { on: () => {}, }; return { ipcMain: mock, app: Object.assign({ makeSingleInstance: () => {} }, mock) }; break; } //do your thing here return originalRequire.apply(this, arguments); }; const { JSDOM } = require("jsdom"); const dom = new JSDOM(`

Hello world

`); global.document = dom.window.document; global.window = dom.window src/electron/global.js000066400000000000000000000011331516776645100152760ustar00rootroot00000000000000const pkg = require('../../package.json'); global.p3xre = { iconFile: `${__dirname}/images/256x256.png`, mainWindow: undefined, pkg: pkg, indexHtml: 'file://' + __dirname + '/window/main/index.html', strings: require('../strings/en/index'), } global.p3xre.setVisible = (visible = true) => { if (visible === null) { visible = true; } if (global.p3xre.mainWindow !== undefined) { if (visible) { global.p3xre.mainWindow.show(); } else { global.p3xre.mainWindow.hide(); } } //global.ngivr.recreateMenus(); } src/electron/images/000077500000000000000000000000001516776645100147475ustar00rootroot00000000000000src/electron/images/256x256.png000066400000000000000000000303271516776645100164230ustar00rootroot00000000000000PNG  IHDR\rfbKGD pHYs B(xtIME  ) Fm IDATxy]UsoURLd$-eAYQPA {m6QAVhʠЂaTBJԜJ%d$u|Pg^{bX,bX,bX,bX,bX,bX,bX,bX,bX,bX,@!7|4S ZVb-k,!EʜR}Zrp0}i&ZskZ`1[z#}6S$4F=ֈmk,&,}R .W)ϊ)9a X/;r눏ke>v#~__Kqz:}@_aZR$8WrOKɑˀO)O#).h / /n @xܒӵr>"`J ^xXڗ, vq&_x ՝՚"yzcDO\P.G.p%܎n k#}+NCb @$\?.[\ > Q9 5⁄=}-v8Xl+!gG䐐 uhEݣ=oci^49rv/}DE]OtOOU~]vY`nыRWjU@].WVq wJ)={G@odc#C)p׉clEe4snߧ:;zq:~mr>L*^Ez}?C/ҹ}kfg59'SWS  }qgcoTx<4:}xEzE T~gEٲcAg0:^X UYTk&>u%1&?0=΍'Ϡ޵[hL\ORwfKvZpHeE8F=pO~J#;֭wgϜI_,c<⥳?ZO|yss?uԬ/0Y+%߹s?/t>0ZJ?x&%Oz|+a#^^T \bjtOьi͏='m $`B](?*NZNDU*5xU8ɢPcż@Pg=1VqN%9fIԌudM jbenWqohCbČŔ)*_{UL{I̙]>"ETW'.Rw3ھՈ$!9frUh>CsB#XУ8Ƀk) Tw7w"Hkk\[yoS0{4̉xeW>;]IzёP p_ j^ ,)ץRuL=zM VDdx&׼JsP)3<$64 o}HM.n`o^xۅ ׹礗^_s`ZL2TvUflܹKsG,lIygov~2[>3n,080/dqI/Da jQG͒F\R:.u\5I5;z1-9|N*a?ڿ5Rӧ4$dwRl9! zV-hoabW^}K?Sb-%]?ƖN3Gaك$u2% e3uYT(AZό5|ӮSh Cj"qd\T shA}RtI͈οN)gDGf[ʧy8ET A8Bhi벸.oH'Tj:!FptIKF:tVY?@ٲb!P|B蕚)ɦ׀o5 c8aЧɷWV>gGAM+^R"_kZS8GhX+)e~j!us aH /TIQ^yto/XM(-%=4G0|[m~w0TM)Ɉet:;ݿgOA+Xpp戂ExM唲..㔲gZv.~{csbO0zB0UTЗIJ+A!UӒg< i*jz*ִ|Pu__FRz/O@+v1;1;(AXִδmXԤ/9#艂w^7܄;5ŔPQy~xOl$UPAа+bn$IYxd@IW[ 90fLusn( uu̾v5瞇ppyi^ykjC@ۧ*̷Iz^_њVLlm! 7ʩ%sOQ{GqJ@HlcZ,ROt2(u%XZuB7V]#փڻKbxeeTvէPSKDO߆6ʟ/7x_f$,,Nnݗ|ͺ%!1R9RwL}Qv1Ϛ]I3ګ>{zlr͘A{)63\E%I%( 15+-9shN7Gu4%GA{pw}R*1:CF*ƙ g<0J+jnMLs{N(G6ol Y@%~EE8EES?8Nû}mkeTWmgO#{BDӐpHU `IWfS:{=bpϠd\Υ9 '(W+5ZS*\)!+:rm a+JŠT9:ϡslk߈ᕕQ4s3g1e|Jͧx,J).[yo9KA#NkM%ҟ:4[Rm)IP98'q.gR2Sͣh,g8prRl(xSi}E0雵:}E(su J{<n~lѽ AW HD! $z.uCZܟ]`s79sޛ7ځ^k6Qy95%miI rf|n>o~h)iWuh2#:(<5^n_+:"=;7&Z3s,[.Ck27gHiRDZQ .;&ˎukv=vz`+s ~c֚v?Ht(s3^M`P-_ jǨt.y, xWi@jXHj3)n,xMdηocyiI"TB uCD"q'RTqfh5 _y?ا\6GԂ:j( ]F=<W@ C*Ǜn\q{Yp=(uԂ"4L[CQ G(+ZZޥK'nbo !(D1hX2g.~/2%'cMo#5vfK=i 7ذ1n[@[;zWP98S4\v9S.?GtWq͸v| Ƹ͝[/[{ 2Q*O.]r$Fx~'K>?0nנ\S$DgxkÆ73>gmMM!kĀlа8 5ԝw>~ƃ.57B&犩1hy3U9Ӟ}k @o/Z>2KE!h8T/i'ޓ&~=n~%\3.t+Ozy!1Ct4CŠas;/oڴ[ C%*=ƃ+8[<َ\5_-Ul2Bx?(CgWt]B)Ј{wT{. Џ)໤=4u' -q!{h:*/Fx _t GηWa?2yܗ'Y؋ pҋ&ĉ_y`b‰\а98J=b8g:nZ۟{(g'HM˼5  X}:*]A ˖ތ+pHl]:T:AU4+y~ fO@mV>J͐ ^8vO'mӰ]*cⶍ?E(hO7_*|P eAxa|XKWpj}DEIRr_KPyjJKdo4#5=ҧԻUc$fHi A+K8s7i.UNr5NWF(;x7!ug:%7 (+"*WPzPANA 3Z `Z檧܍%0Ed3 ~UHfJҿ+)EyqaKAie8ш<5Y/@\D}H toMc/5Su kͦdAW+^AQNR-iIk:םI܉1/DQ [R>}<֏J%{A+(w=fȩx]宠s$]MTeQWt~ ֠T>dXWG0+276ACq?^T9F:-瀛S3DiE̽=ƛ)ITNF\W61 (Jי3] ?jv*Y uC0@GSzd铚aaF¼c0{{+W$4%]7¥jC7{sC|EK84&\"q *ڮ8473wP۩jM[:iEАp(6,tG, A倔9*Q%RGZq'!s,5 EK3 GPySҚA*k;Id~P&RQ+11=AC+%TסT@#.JkFtpT#,u؞C[ءm N`J,|ienIT 7!P>n>S{_9Fr}A/s1)KZ%%jf^B@cw0E]E}dkk p+DuR3.s JGACCa{ 셈U,uyPiGȪcdE=Ӱ˗V2. kY&5[r^Кe~acaJx$Pxi:N#M8TffW4ɴV{{U~4h<*HbxE(3g+^P I*7P-14EjɈI|95 @o75-.>F SJ!3l!wPWZi|mXIDATLdyhIuNg %1Airj2ȱ{?uB@{hg~!?|"%G.nNιCqI`1=0K r Dƽ d]RG^7=$)Ÿ#_аgreltw~蕊>*1A+Y lB^$>۟²#/B| &eӒeJjQA?*Y3' "4u(6toFc4Feh:N>|AJ#% Eа vAUW@9)y;3ހ:OYuϡGi;bP)L[S!\#+,'i^ȼa F7vۚmd51S-iOД'O_*|P tM k-iŞҰ1峨+u߇;#0aVӰD+SWv&6En@i>Y737RZv \l8dy kx+%ْTj ؞ SbGfk:c*0 5߇ofXFIiݾzw=ĝU+:jhOˠ^g?隶%R1U\ze%LN϶lĔQ7 Ial^ v(#>`fpǂ|>|qhx'#y^9~XnviL(LL3#-![: 5O0jsAhHZU8FO\tN03Ҵfjog"fΦ2h5}R'U{ߙ|}.23)M$v|)nテ3K**A)3E$.ST}6Kh):4jI`z. r4&h8*=2GLNPk2O5QvtinSkݦupkОdL1h( jpE U JqPiJ34R3 #Ieɴ M:?GIٸ^ 2*]32hiw]JAIFkQך"Za6(m15Jt}PiG̨1d|а_j &28/JOac?ִW yrvtAV!̪VΘzQ2 ㊩}!MiZ؝ցv}(͜ Oca\U{ooZӒw(dsj=3$iE3I;&O w)٪$ ٢sq4iIAY,)mJ]|\˓ÄC mZ @zSi#w+Onlа0ԮM4Ye|Eyx`JNA=hHŚFޔ}ʦ%&ߕnq#[{`XOloPKk9w4 t%R3j䘂W4-BX0NP&w5('+qG%u/OaJk}E`xބ|7{@;5X.19h 6h}Ax \Ewf_ʏ]iS {vMM< /7W@"`D+.APR4Da:D9+|t&[ohgDKqcҥStQ{۬IA]K6P2[PU96Gb[(xmZ_b'9qܹN2K{: К^F4z.\j;|#So\[#N1ǔ&FFnpeGZWPp)6La{DHw/vj[}iӦ--KV9 XD4ܙikXd X]z#Bܫ7[v4Ã*P]AM5/_ZQ_T35~iV epY`Avݫ&`f +׶>RbS2YR5N`ZaV('&Z -OWT? K&+||L *Mg ʫv י i[HxJ(--O&7+ʦS3^05h8WJuxH(u94"[/"-CY{xP*74(7)2u?'j2aZC Vw .Ŏ2WpQ޶NK7mНXΤjr-ħZ`Q\ ǓAq|'dޘIAۄhi/W_t.2ps+55K2,:cRBsu/rkS<W k*.ԠhL8d h!~m_\B>H^s' Vlа.ӥ-l=78gp1)Ժ qJC[ZWw{m-BSͶ3MpՁIg< !VN_K 3zEʊb4,PrCx<֚[:/kaxBŋG뀏8zQ]H;ՏED +_z#ACTϥ5 *Mk:5*)+ϯ^ %q :As R-H xL*u --/Dqs =q k@kz2;;}ߡ } ۢ]FU kǹ82ܷFѰWtT=BnnnNxI4,wr:Z'5R1(#/++Wl[bDq :Ja8bBAj͐ HMqHBHߺnw!IHk0KBW &M Ou'1&),Xuk+2,q@ bu?c# ˸Lkct$O\~z;8 #>[n9:z ogG jg a-ʱ0njs4 CRUж ܾxqgiB{k<ӗd.#RX7ћ}ַ#b @ >9bÆWpX`͝[$Wj8ŽȤ)Ί.;ͧUmvt;͋ⲲR{o @\K,R~ 2E9DqPn#Ol5 Np"ķ]6[X04w+n5b|PjՊ օ up9PKk!aXÝMI$D뀹!3)?߸iSXxжhѹhW4$Nߺaݺ65/^k} ? j!Mxׯmnn_$Ҟwz0ݠGRU5j"8 GQڅ ~;šXru>o*p{o"q_gX`1[_|~ #n @>}hi釵1@PI9<[cp,Ccb{Wsrc/electron/module/000077500000000000000000000000001516776645100147675ustar00rootroot00000000000000src/electron/module/create/000077500000000000000000000000001516776645100162325ustar00rootroot00000000000000src/electron/module/create/window.js000066400000000000000000000015131516776645100200770ustar00rootroot00000000000000const { app, BrowserWindow } = require('electron') function createWindow() { global.p3xre.mainWindow = new BrowserWindow({ icon: global.p3xre.iconFile, title: global.p3xre.strings.title, backgroundColor: 'black', }); global.p3xre.setVisible(true); global.p3xre.mainWindow.loadURL(global.p3xre.indexHtml); if (global.p3xre.dev) { global.p3xre.mainWindow.webContents.openDevTools() } /* global.ngivr.mainWindow.on('minimize', function (event) { event.preventDefault() global.p3xre.setVisible(false); }); global.ngivr.mainWindow.on('close', function (event) { if (!app.isQuiting) { event.preventDefault() global.p3xre.setVisible(false); } return false; }); */ } module.exports = createWindow; src/electron/window/000077500000000000000000000000001516776645100150115ustar00rootroot00000000000000src/electron/window/main/000077500000000000000000000000001516776645100157355ustar00rootroot00000000000000src/electron/window/main/css/000077500000000000000000000000001516776645100165255ustar00rootroot00000000000000src/electron/window/main/css/style.css000066400000000000000000000001351516776645100203760ustar00rootroot00000000000000html, body { padding: 0; margin: 0; } webview { width: 100%; height: 100%; }src/electron/window/main/index.html000066400000000000000000000007111516776645100177310ustar00rootroot00000000000000 P3X Redis UI Electron src/electron/window/main/onload.js000066400000000000000000000035741516776645100175600ustar00rootroot00000000000000//const { ipcRenderer } = require('electron'); global.p3xre = { webview: undefined }; window.p3xreRun = async function() { try { global.p3xre.webview = document.getElementById("p3xre-redis-ui-electron"); global.p3xre.webview.addEventListener("dom-ready", async function() { if (process.env.hasOwnProperty('NODE_ENV') && process.env.NODE_ENV === 'development') { global.p3xre.webview.openDevTools(); } }); } catch(e) { console.error(e); alert(e.message); } /* const events = [ // 'did-finish-load', 'did-fail-load', // 'did-frame-finish-load', 'did-start-loading', // 'did-stop-loading', // 'did-get-response-details', 'did-get-redirect-request', 'did-get-redirect-request', // 'dom-ready', // 'page-favicon-updated', 'new-window', 'will-navigate', 'did-navigate', 'did-navigate-in-page', 'will-prevent-unload', 'crashed', 'plugin-crashed', 'destroyed', 'before-input-event', 'devtools-opened', 'devtools-closed', 'devtools-focused', 'certificate-error', 'select-client-certificate', 'login', 'found-in-page', 'media-started-playing', 'media-paused', 'did-change-theme-color', // 'update-target-url', 'cursor-changed', 'context-menu', 'select-bluetooth-device', 'paint', 'devtools-reload-page', 'will-attach-webview', 'did-attach-webview', // 'console-message', ] events.forEach(event => { webview.addEventListener(event, function() { console.groupCollapsed(`NGIVR-ELECTRON-EVENT: ${event}`) console.log(arguments); console.groupEnd(); }) }) */ } src/strings/000077500000000000000000000000001516776645100133605ustar00rootroot00000000000000src/strings/en/000077500000000000000000000000001516776645100137625ustar00rootroot00000000000000src/strings/en/index.js000066400000000000000000000000671516776645100154320ustar00rootroot00000000000000module.exports = { title: 'P3X Redis UI Electron' }todo.md000066400000000000000000000026201516776645100123670ustar00rootroot00000000000000[//]: #@corifeus-header # 📡 P3X Redis UI that uses Socket.IO, AngularJs Material and IORedis with statistics, console - terminal, tree, dark mode, internationalization, multiple connections, web and desktop by Electron. [//]: #@corifeus-header:end # To do * when in a key and switch database, it shows an error * hover on table list on key or config info * add key and refresh tree * overview is not complete * enable http in the server (right now only https) [//]: #@corifeus-footer --- [**P3X-REDIS-UI**](https://pages.corifeus.com/redis-ui) Build v2018.11.1-2 [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) ## P3X Sponsors [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/) [![NoSQLBooster](https://cdn.corifeus.com/assets/png/nosqlbooster-70x70.png)](https://www.nosqlbooster.com/) [The Smartest IDE for MongoDB](https://www.nosqlbooster.com) [//]: #@corifeus-footer:end