cmst/images/application/variations/scalable/cmst_spot_05.svg000644 001750 000144 00000053201 12645570501 024721 0ustar00andyusers000000 000000 cmst/images/application/cmst.png000644 001750 000144 00001107204 12645570501 017414 0ustar00andyusers000000 000000 PNG  IHDRogAMA a cHRMz&u0`:pQ<bKGDC pHYsZZp#}tIME "+دrIDATxuxTg睙 BRh-mBvKR7ҭS7-] qwydYv+|?׵̹ٙ {WE8V+):sY?eggO?f;|,W7:8ǺT1Wzsq9_$mohPtt,]QWg[(%_w϶ymibή:s$bꑪjj9 ,G>+;~nnՕfMVOyx&m!َ(77Z%LM&jswׇ,V7O$*Yշ2''C=9::U]\RqVjt HE]+>z̐HzR ųBޕpy^Uja}ſ_+$LuժjNKg8[.gi:*}RuRY!EMEt_UUZoT,.-ݢzjXw5̣ern\Ue:mԭv3ۥ""/OܽgqO#C IN>{{`yQGO5zNnQh?/jzGjDDL5J֕H T0'kJJKY*H)bbzR/),.t~@ y>7״`SP`C{w5₂gRJlF7h(`gZ{6mV;!!/lĠ ) D@|-kr`yJ6"JP@\$~oo hlNlR,3ՍS*B8ɹK}suNK~A䨞%5+6#볲BCDwԥ\]<%.֞v3ѯm+YkCCe-icJ5=i# :E&cڴ[kҧMQzCB..F%䧆!^37WRUgf*!99_/33w:_jOY;gdL]Wkퟞ^="zsZ2=P]ma X[4흝Oٶekǎ""؎MtcG\>W;vԱQ%8X& 28oXr]jlHYVJەjMjm\VT {SGYRJimМQM޲Lqs3NU> ٔk3"B Mqǎ:T+ߵoO g//c8!'reJO}78"wHo Zhĉ.ȠYo߾}Zep[NLc=%"BL˦Ν=&?N a#jnmDH{=.5UfO7%E%)):֤dى-S]vYE?>0F|3{;۵3E*_EEَ\]*҇dBv*תdܪ8:p)n| ^WGzWxHRUUkLL>}Pfo%Vj-7,Y_MO^ʽ[79*wdP>m z\nB"aa}2-5U`Ѻ~zAΦ%*Jߤ^#W/ҫggs)l -9Mز$Y JLw_^)J)F4ohVzЩMnۧ\j7i!S=tܨ{e~C$x?Ъj+)\ތ).N %gsM;rZ4AKA]==^[7^SDC~eP 32(H%ed߯Vejg߰znÆ.߷oGUUF\Xt9:Pk}W.8ַDKtWAԶy.dު'&w3w^ud Ӄ?=xpJpnPXh"fn útڂl\ C6I:T%T.d)@Z3E}$%ӪZٶMHYo7M}w_^)J)F6wXqdZoomY܁mq[5p&=f`9e;77K(+B=@={5^gq9hyaݗhay,9k;tk, _7}z&Wíx)Z;vLb:U=*m\}vQZ:0 +Wѱi# CYPdztX=O_犺NԀ\G>:R-ڶͼ<}>t޽ϯ5:/4WڢEim6;;wRPгbaT*ÇKz:9t'KFh2I^Y)Zןޭzd6Y?^H2:'G_>LO?dժZQW\aǟ8k*+ 堀-ʕqqwthzt)K䔘e:Z!I WcusMZ.۶پ}7l0EU>+VL gbb14?גS~|EgmKԍ2]&OdftNIQ/}R[RM֧˗W}RV14='IXRmXy^V듓'2}0uZs-ɐ7TTo(#%P\YKnXd.7.//7:&P&f]uqi|QI]gM&饲EF9VWKJ{Ε+Mh%~ggG jڑiy%Vhz`T/eer9R6~tKr.RMLa{bQLc.T-gѣFQsdMƑi;mɓUTȫC"@bJ1M3^hbx>࿣ʕqq%%^^%PpڨhYbJS_Wrb۶, >`ݰeZ1&TrG%JFELwu]~քVoѢE6t)9R٫"믗GD.gGJ\] ӯ2ζͱ)x-pɓFZ" XZ+QaY}r)\}ܥwFsE͖ͦv۝;շ=}dbYXpӷN -hf~9kw1RW_u^+/p7,|` j!rJvʭ2T=WN/\~O0:&Psì|}MWuk$WS7(@^FfI)ϊ G?GU/ؓuϲ͛QJ)ehJ(`h6-ZHkٹK#MϚ#nMoiԩAq{{s@zLe'KoS:S~:mHIIFD @uf AiՖn*OZjj_}eUvwG~%#nx@ 胺X{zڭ27L믗H bt>T#Z7GG/ [o߾}7:&p.QphJt;c#Hs뭲R{.\e~sl|'.3#_|a: ozJfʸ//iٲF?#uft>F"X[GKQU߃)&SUEѣF5=GvުSe8F4q{Pir!sBy̴J4:PvdZޢ@} S 78U)zWS'Zj/'eY_߫n;컼xh(`ZkbpR!w))wyU/-sZ'P<+*TYJVW:'-Z?!u_ >`Ѻ~z4QͿ.֫hF/߷oGUUF@D hVs- 7ݤ{^2ۤH://Wj+)ћNU:EWY~{OM5:Z X@+o߾}ZrxefNSn)>|'uu"VfTW֞Y"WZfkyMM]]Mjl"uugAjjk/JY,"vvgXL&Yכ/X;NNNNgo`ggg'b6fɤ$p A͖ͦՏ5k$Y￿M11(ٌ ~  o2u\7k~R^`ښ*3jʚ*ՍEWW7ܮHu@U[xƟ7444, GXsrrpptqphbk,n9:]c޾Xk_xӿo_)nΕSBe~Xo~_v,rF@[@ 焻FM[͔9rkdܪ8:pn)4TTWVVVUTTTUU5^_QQY)RZZYyv"^6}@SpXrrrrqqi,r:;7^vrrqqssuuqi/ox3E/@nWsՔj%u*S3yIH0: X@3Zk_y%2[!#et9|zg PEE%%2Ҳ2LL?qG7b//{z7<=XrskLx)Z&V=ۻâZ҅, IN]n[]f[=s՞Wvdt>h-V²bmiiQBUaaIIqHqqcag&S1Y h,lpqqsk,lyxxzzyx{7^vwo)xb}4yT6~))ʬ>}W:0=gL,+3:. X@k *G 7$^rqw7:4wUU"EE"Ņ"EmiiRZkG5;O-ooO_<=EE||L&L&ZbySN2R_| .۠w.jhʸ>}A3G+z\lojkjkEyy" ޮpYR׷qo߿ݸ= ]fd6})_/[f{QkMv ٱ|87(`@V_G~Tk|Pɋ2l(Drr ^.,)--///7:5|gWgZ~~"AA>>~~">>"lNMQ٦ؾ]%rk~>˗?RE XyhёiZۻ%W_Ry[ֳ[MMmmm"Px%-GcA+/ Ҧѩ@5OJG]&EW~HAuP55Fo[P0ͮ-]/@S:777ZI[~~"AA"!!"vv vhѲ|Eo{.Ë_v,rF ~0gTGQ+Ǥtr~Kzzx~/Mk0Uff6##//'rNHuummuѩՙ%,}ئ`HHH@@PHv &khAI^Y)g_nz RN(0P7WY*ylҫggU))ii"Odddgsd6mN jFO͖&*I-GFã~𙘘ht>ֆL|<Xxy;WIqEEee""ii٧O7n WuuFirsi׮qrVmۊoߦM68mƉZFL!K/*sg:.QD$%܋59n3^"[,FzX6&rt'Ndd`~Haaiiqih]LԩMPvBCD-b1N "rT'oWSUO'wѱZ Xhb wl{LvUR'MI-Λ3Kfffd4nh,Z>-`vv"Ү]Rg&guԶmHH64TZ#u\MغUQ鶇^xa׬1:@sKhV|_8hyb{⩧2C6nѹ<%%"))'O$'gd:%8*/H^^ڷԩ]_}|DR85W8`)瞛mwҥhmt>_"Qpi"yyg Ugɍ2ڷgC珺_NS Y,ZRPT^S$gǏ7:'7@رSN9~q~HEEUUU)@kvfÎ Z!!;v ҡCpp6"fl@sv%Yy'|mOe(d; XhUڡn~1-VI4I&IHҀG8!xdrHQQiiI)<{{;;;;`۴ رcGm;t`?azJLHЫmOW}vҤh?~Z;>@2ȴB>& @S]][[]8*5q/F0/'hv$١CXH۶" h=oyfKܷ|9,s/;LL̛'o&\ZkEҲO>;*1ĉdS23EVf3:-@"ҥK:5n Z:xyyx@B5yKD˗/7:WhV:[oo{R#z֛oT=O(WUUV$'{շxɓwIذ\,bE#ӊBBLڼmßxBRF}׍7JWD.XٴDRS3332D㓓9rɤ$ܳдfҸav"ѝ:u,ո  0:%Cݦ>6n>ؤGlncUpAsì|}7׷|AGS{ir^wN$))-IcDRR)+0:%777WWE#"^vpwp0:% IMM^ݰAV9G-~ѹ( X8/V+)2]ezCkpl+u{yyEEg'Yǟ8qHJJzzZjYF@ScggX,";v ҭ[XXDHn:ED]@˥fwrfW}~ۑ<{SSP9Oѱ\w]$CeޣEN6:RNeggf:txbǏ=*[TTP`tJ4>>~~"=zGFѥHډ(eyEz"ixyr,Oi,b(jU||~WHi套 :v4:?ff9yL9pر#GDJJʌN 줬KvԹ)j\Uv:||@/8vl߾ޥF?dʸncƨ^]+ret.\}}CCCȱcN8!tII"UUF{{;;;;.]ڷl1GΝvqssvvq1:%B(+BzꫦkkZ XM+woIX){eJct._mm}}]H||r"= $RWW___otJ2M&Y$<<$C޽##44s5OJ裓Z X7A۷Mz9{z̐H|3E'ERR(Zɤ$ҾH]DE%jtJ@vNjkΜa>;v \Zu?ťUsMr:wL[GG~t<~<1QF)ԩmېbVn"z5<=ݍN PSW7lM1w{='!\堀,Zhf CnEirީWYV rHjjJȾ}"qqǎQߊY}DFFG31 h^0^RS?s1sӗha@E X}[\xAzzU|ut z0:srDv?xPd#GD˫*+NbV~QQ=z:;;;oXB˦(`P2ݹS)ԴiF SP/ѣ"{$$:$W\\Tdt:b"]v~ճg.]88Ԩ>)I;ѵ?>yr 4}Z%]/{ǡO=OYvvFZƥDvNH8|X$3377;t ҳgDDTH~]v.ҥK;LJLFZի3RU<0[φG XTZ[,U/*pN)!OKu^^FZCOLٵ+>cNLMٴٌN 9pwwuuu߿k=Dѣwo6mNRH|X_/if#v}yf|e (`4;1>\ϖ՚wޑR\@k%{w|"{9rHEEUUUD{4(:wo77WWxźP*ߗ_27OZT]G [6؂);/$K%Kn:$x=G"= }{\"O@kvfΝCC;v80:gO^t3:%J|. Rm:qûeL\X;&&V'cO$מ< U#H_9]\DVf%%?.c$& Yo߮]E ޽woР6mNp$^ 7si #R>]n]et<pPh"V+6fj%I] h򊋋DMH8tpHQQYYi 8{=E ѣo߳->i++IůR.'_[kt<pP0Ȋ󇅇޴(ߖQ`s-ICCC*rPRRbȶm+vZkmtJ,EwnD ٳo_mCCERJ)pnJ|z*뮉+F/.EvxeksMr:wL[GG-AnnQQAȎ8 sg\"UUFǧէȠAѽ{ha $QWWٻtEI^ϧ qγkfUNLϗWvdt.9ZmVǏ=*ew$'gd:d+8Wfl޽saz_K;ubRpNsBGgy|{ӣ+UWgt<[6؂);/$#s7sYYYEEEȮ] l޼o"EEeeF[dȐ^<{}E\]N4oj%'zqDŽ'ݸ\࿣XRǯ{Eެo%vnnF,ؽ{wٻȑMb4N 6w}'ehVIh-J,k#TP`t<p,?i# jw{Oj=;:\@sR[[WW[+wobb\ȦM{%rt~~nUHH``ppc!_?~zqp7:l yHmG4):xf~5GnhcW_UwɏnI-UWTTX(oΝ";w?|>_yB%+1qUcr~ޓzĉF={ݻwN9mٯg.X,M\G/lArO~GuVcВQSZkM~ nE WRkEFBdփٴi]D**Nhi,]8hP={=`С"FU/Z*uL|?Xs(63gbx|eeF%Z?'ܕ׿Gzz1!}3:eflذ{֭"9/blVl2"{GFv&2f̀Ch^-K32L|9kք h5-6u''iϝ+uW} N򸽽ĉtuvܲE$>>%qtgaaڅ\|A]$ҭ[N;(S1ߨg3ŋVuuwyۃ?*(0:/5@?92^' {Œ4Vf8phBwo&et:`?1c:T]Efb1:DKdKgϞtW~G-2: ,o_ms2|R^;9s|!&#Չۗxvm&WTTXht:/77WW{_dĈ}qqqrrv6:4⧢VCFYû񙘙it.2 XX}[\xAѶzyOJ}{sFݻwN͛ؽ[tAdذ=5_AD<<<=NKTd]Ilʃ<0!,߬>k\SkДPVLrwwmG7OMOubZJ-[߽[d={v1:Ml2"EEu.2nܠA]$gt:`oK\n%X20F)m86}ZE|^$}sF(,,--)={oٺ{EN@8G$::,,"Bd„!CFi>8m[\+JK 7CMܽG #QMyxj}H$_*YY"ڵm޽G>,bl6hti>,LK.h(۶hTWq11 ,I[o;˳Ɋ&nV^ rBR|W%8\%}M"qqIIGhF""ᡡ:L0x": ȳK?a{;'Obcp!PMF>2-okM:R|u&]5:SZj֟OI9~ə% 'N:tȳK5n8ϹˎEv\| x"A7|^&psӍK l+rGP%i? @d„BV^QQ"J)ҩI ͕i2]͚5}.5:/<;y.q:oJDx@ϗi2822'\\m[ㄫd&\кoԶȤIÆ)ҭЊP3%+wgle{X'?W/*kݺ 8(\BZ"5A͏gӇf%L$ҌA 7:VkmTM*9wdeēOqYYK Xyƍ"''=J ~)d%ҭ[N; 8OVw⒝-drIO?tX9&ȴEaa֧tWr~[8\W\\T$jՖ-7ݛG ;:k'2ucNJDDo߱ѩsl<.(BM]Fu׼$$ ߃8gb9S_-HѹsTdccEv<|AfZNZ.]ڷ k,dsvb"s"^kmgorr;|O6:֯߷ãnk{I=V\TQQUUU%~]۶۷cH}}CCCrEڴ  4:רj :pꗇ>}PfB a1VѨQz^BAw2TWVW_sΝ"55uuuuFRJ)uSd.5Jt/:_ ~w۽X,_߻`_.P(F߬_ٽ{ +Zk?rDdɒ^Vt珽Ȉ} $2a!Ç8::888mسgn4p`7,D/-2k^%G_]j\_qةS))"?X6:q\\\]E&M6lHC{Ol6{J+/=§z B HLrwwy&D_zIW_mt..(Yr˖9pرS4]޾"S1fH^QQ"N@v!C,ZU/$)iI/W 3JKE/߼yz={> vBCE.|E:tnT@w<{w?hFNcEmm}pYbۧZn.r?N$&fXO?]t",4gcde抴k,ltJV*jSQb]<֍ X1f?b/dG/0\qfΝqqtUZZQQ^nt:l6-#0@daFqrrppr2:Z %ɳii&FcQ[u1}ZduV9y SD)qȷm~vY Z^_o%aC}Q}iU'ID11:s^}~P?im?ܯmG\渄8U_1|>pwaբRNJ*#ʧWvRڥku}GŁʻ*.|޾Ԛ+W=U`o_W]}ʪkYVjeoWX[XLڙAAmڈ(o֡/X'#G&^RnFN` _Z0o_qQOHEzVСѹjl6[سGdŊ-[6n6:-sjZ;UUy,t*7xq\SqBMg\TxUS3K x}[kjpu;;AJx XMCIJGGs/-(({ѱ࢒k8:]Tb_ѱҏ+pt,YXGҤJ>p pr*i_VťhEz7NN5ug}\32D ݻ_?K#Fjx 0 YGeꗒ2p]Íhx@X5K [(F䌌SD.\f ӧssN@`kn <6TEW Γ++xMpY^U5+]]sW*yVUL ?jW&G5ց~K<[[_>5:%ץ˲)NN _*y9?..%VE:9>PIeKQZS\]KW\SUd.Ky"w޻HbF拯z,.nҚ ߏz0:u% MYRiN4|_^kt.?)/駍׬ٽ;!!t\XѦ5sBgJ;?\Q}WVVexǹ8w{Bee۟}FVT񩬨yד : X-x-/ϿZ^-VS9ŧҟ˾8ܪ\]2 /.i?![Kյ߲U˫3^ut49%СMvD{ҫZ&o6 yH^V7o6H׾ˇ 3:ubww]Dj=;:\/)Vmr="˗oڴaK Z&1|Jz[Zx[Yoʀў**"t<ҿ>hZ[sY~T'?/5S=4S遹Ezx+ݽw+z\åh^ju'}6OJѝ_oY.jM͕|3[3:ubW9aP}I\et.srDn͚EN4:Nݩ5v.OTT|{ʣ$2`GYYh[|SJJwn{%ee,rϜHez#`x~)>K&k'2²>+XMڪw3}{zfxg}SG;/ӳtq|twwFH\\\]En//ѱ Fy6Q3LRO=q,. BJZ_CN'K'&ښ+lٸQdӦ}vٴٌN@#nGoxwg< nw\?cm.-uϵKF묖X⡀r4Uj-V*|)kqH^t]_G^U%T}jt4f˯U_t}ΙF¹eZ&M.okLy,Σم1%_|!r {9|X6n\ZT4ڼޔ`|ͿMX^}%%S@Wx_>BY-ChM謁1eﶷO3JZ{2+do9)Ǯ˫W*)V>Po hQ,E]:]zѝ{.hϿ{͕-Qʹٔlo.j"sZ'^PpsgYOƟMN{l9%o;]g%xM~Yz*w\O{[sT'o` jt@F shܸ/ ޘ:Uf=/K6FBfl6Hl޽;vXѸ`]]}}}͍NݩaJʂW*.nEu~K:DQQ1]? XTVC3S=GJ%_u|fyFvvGSL=S_+'M_md_̚X д)R"W|8&Ʋ1[>lWRl;;!%&Fn Zkbp3p]_~q$j+##''+K䫯bb.={4~NMM;YYP) "܂vek\;G;44V wK ܾczЈF^@eޣRӵ+lS[)-0i+R.ωI;T8"#N{DRVe{C9{NO]􉏏mmdqZn+Pޔ&\㘏GiѶ[GGszn-} +@Sd1m\IOYL߬_ٽ{ [RRzɓ"~lHnnQQAѩii)f ?kgQQW; hAnvW꺺?&7YffY-qZ&`5,u2Τe'ǝ/7'-U-0p~=wʇ_-)n6mtTOVUHIEb|6=jt,D?9õ8AnOl__suYx]4:|367%lA[Xޯô.o皗krҀd?+"rR6>ukR}hDz2ĩdg^=""OWmybo}09OvΚUQT~_ 1//Cjss{'FHAN쮶Z &˜L:%NQbV=5%?''xS*0|HyyFyki[KK~w(,8?AOQ˄s&KݡnϷon.Z฼cG2uvK^옚:pE 58(_77s6{s]U͚uq+@EYqdZoo@Po"H.3F6:ZEfKEJKˍN8ϩ2? &7k.?evKoh G&`#eV wKU;*y[~GgΉ'~<}"(d[Y]]~M[}3/~; dO}&k7z[hVy'L,i}[ʕ; KyyUUe߯Ybȁǎ%$ ߘ:ԝZL3;ݗ=6ҷ]eQNENdos>tA[Г=de]wh`OʒYݷk{<'((c iI''v6ۺLFXGN {`9_f˼Mw 1<muo..FlTWq11NU|?#E,@re\\a1c2v==΅e߾x ׭[쒃N!Ձ=rrWF-5~"]mt|Q3=;DEH It=~YXEy1(hORhXɝՏkH3:?*rg7j^={?x[]wcshhSo0s6=$FRcc+(+'Jc{*1͜o| I0kkE~UDIH8tT>n3JJ"\6~=+:eeJ -͵Z9 L楟Zf <%.c-K6>.cg3`Z8`ssv6:DM.YZ~7# h^(`ZZL%{Ly53sF>^]_VEw)x~Vs?WbN㳵~_cmn!!@>>R_l;/6ψs˳;h>}*Wߩ6ootfK֪r^y7wcM>}RV3X"~.. &(2C2suYxÆիEo?th>S@g4jm99_z"tlVK"df_sJMvUDDN}! JO,tHc%>~cC] YzxpʷϕTft~_S7.!nެtEn3Ǯ]۾i;w=Tl&#`a}Z>;9/fJӪd gΜ-'f:al2@lS- /MzH>FB된q_,_"FDZ~嵺wm+{-ߘ9ةsr].cL:L m`VKwKiY^l'2RDD.1:skМ>PWMå/\ zݻ_ K9YR:GG~[Γzz>~ߍ8p̕miZuw{g*cZM9U*cG۝:Qn38L5J֕*uӧK 6>6lQ$o Xf-暸Yy&jeh<+>Rjt.l"}|?de 3u< +^}>MO'llF_ZXb:R&`}skLjy4{~?5 &kR[fJ]7wÙ_m[Ws Z64Q]8fٮ]&O'OY߱vүGv;W.0mj۶@U`V/۟-_Km(^j򧟜wWt\d:G.$ Xfi)97,?@%r9o83jݻoYl˖E.W|٭OwiQCwu}ii%tknV Qh-3Zj%nn(`5% `vaty[^ѭMǕyMzzQyzίE]fdUƛ wNjx:M#@:VTD&YYFyK?nR.HowBӧ+;P43+W|5wRJ/dtl啕"_|rO?9rDRѩ367%law 5xh]=ujGJVXͣ:@颀V wKksKV<7o#3车RS[moe\zç>_MZZ[,7=UPhn3:ZÇOL꫘KE*+NMjSwj0[N(Gfc뾺:^BritPﻫod;&cZ=:Rd7K2-okRgBA k'N4:ZKcc׮{w4:4=()鷿#RN{ð}W{_U]-ID)f4*͜u"ڷ).!~Cq gnw㔷2عPQ&H2W|&>%&h_ߖ|wvY^50IBCê*S>={w `@S/<&eմ#VUȕ+I\hҲOe/-**(0:ϩ{KmmtLКaCJMMlv^"d?D Պ Ҩä6^{x:iˤ (8Umۄ)Y韷m[*GG@STiXwke S~U0WW܆ Y>kr.\R]+~^hJ(`U  DFM@իelFBˢZ_{֭"˗oڴqjYF O01%laz7þodLjE-+.>a?Oi*ʲ.06v}m!cegζrs𰔝>>["v'N5$|HsFfŦMjoId9 ~)ӫU+`ǷJ;o2YzȌ}r&Z-ϯ5HZ=ȴECvemt.,UU"|"))F ϧ2z>ĉq=F|= -w55|+CN 8(^hjLCZ)`;;((~3m:uG#۷?P]+Ս O3:?%ɂg==|渁AA_"=%;BPd3x%J~Yκ7?r;k Z' XCL藿{d[ީ[PIo6JJJKKMUiiyyyѩeiknFynMZ蜋t{ĉ>{x@*yrY4ÍŬ%#*?97&}V ۲됵mۍwčdhg&^@kS2$؈ֿd}yU?|mYoCPD'.$ X jej_w\?To.ܰٴDV޶m&:3٪Or3Nw~!%"NQuu""rP9^pz]Үn NK;ZƉnn1MT;-رg% do9/l }yjjʣoWeYy$ݧvFEB  b,nw߭ =7|IH\hKKE>tEDRR22ҌNe]%. OKO8ѣ!jIțEERL &`>R^!7$m׼9#G%Cvk^<@eDs_.1:/+TۗR˃b_zHN\|_RѹDْf(3N٪y۵\0O+_8/G+# R O=%1 O= 刋KN>vL/W'*Ssfol8P$ybLseZm6MduD6nܳg3?gꨮYZw|yfEw1)i}C W(̀ ~έ~=L[ 2̬ ;;FFJ=<4%S'F{e4-y<2Q.#,б:sgfQݾ?U]3,gkwr8Ip.P1ɳg;8Tu (|[Q?qFBPRR^^V&`ҥ  iS;955}D125uʣ?6x/ep>QU;s =r}>6<<|u#B ͙7ߜpdf^^@?dZZ]]~ot< Xd}<<cZLޒtFBpةS))"~t"UUF?.2 FNrᤤ?vitVF]ٲfktJu  ZSs7l$ך&꟔=Kmץ˖KDx8,MՁg'}4dsphfSqQ3(`+JJԍ^-7rFBvf)w޺Udٲ Dl6m652KN[^YY_|kGnyc|5YdtRgG@mowɢÇos17%&~sŶ-~釳##jW϶7:/$Poq0lElsʬ'}|`RJ)e߃Y5ȴER'6n(ZfGG [eeuuUg-_"G8dt*NۏVWg^ϒN815␾AIIm{VUIlRS+7.tN2N{咬ذaΝ7>>.]j|6P`]xzdͶT6"ZvG8*:PPбZLy.7+廼xêW?*IᦇnoZS_}ȋ/~SyvXy]o}w˖ݹ.{P޹UUFp)dͶ6uߎschryNF<~|y)Y.kbIzTӯ/;{DCdը?lڸ- B Vs-! mdft.4o7߿{ȫ~ w{;45nڲmoj䩧JNv r `tN}ۂG^yޙط7jU#Kָ)e.LzBt'S3Ϥ=_i׮F?ּxEQ(n}l2m[syjhhhZEjժ%KD~+DV< R_?Q_vxرye?5m~lڡQNOV7.N<[Q7]bǎW>DYYYFre.)]ltsMOZ~8#zc5]dt.~D/-ҷ'k͛e̐JF)..//-yc;޿T rpgm EԴ5>b!!,./Ǝ];n[U Uﲳ3:=#.--}!7m<[DllFM_F0Fywv;9SG痽p\ց2}Qԩ35S=t)+%%"/| sg|FК,3mZ]epukj|^ Xh{|t}`2G' X̀F4`'rzyݕu7ٝ|;/$MzF7^ K1 Otur˺:hz/~ '`Ivwڥ[>yDz вQVbUmYW\!t]xl'y\h^NLOy?ӧsssrN50Yf,}= W/g z+ۋ &?l/(u:_rO/ v͚k7|.۶M)et\N鼪*rr:>'ڴ[6:zf%ϩ!࡝;h(`@ #OrY7^"3zjl"˗oڴaȺuvmbt*-ٙ%*m74xLgkl3Ou^5Cuo1Ka_<-3sUsOlmsyyw L9ŵ==sJO|]?y;;)s:ׯ'͵-פ wϥyy27ѩM.Uvu|!h ?Z",MӶ\wR&ֻJ]7q+VмA<0+K.˫j%_}%]~*O>YdBcN:qTZ"sF}?>lZ?{ĚT_\L򰈈8H"k-WS%44oO>c~~,"3:]q:7Wu3Wjmtn5ͪK,*V&xxXZ ]fi/D)n3GnHvqqזݙxiPСQqҋhܦ:uNw SzȌwW?˫]c7_}RJ%yh!b;t!rO +&ѹvhӌbP\,u/@MPD~[*g}| M}KUf> 횬ԭCP^4zlHNxjJa_=ydg#@ud|"DBqRTlCԫge^=#<#}|+| PMZ>]QnH)^p:ۺ56(>>% :<ϋ_dp;+n;m +':HcsPB|CLC':\]z>hlsfehZ3mgBKnWUGnp/ްWyy\V^O aĹԽRkUeeM6o2Yn]_u@YZ5{Tz# A=5 F 1"W7o}kUp _P uT ت =)Bː!-ã~R(h$; ^?l$IDAT~Jyhkzk6Njf(ߋKkާ߿zbiwllӰc[sA۶7oIp0?0,nPRT/"yY8Ce :+K6/VQQƋ2/:A񣻶?Vu;Ż@UIhRy\ꎚ#,x#5R̨(j@k|X^e P ,_jr삂<:՗?&N?%,xGsS{R?U܊FψrA[NTh螼3j۷/SooMjܸh[٢Rj{a%+`;b3BrKc \^:u.uH-I\ޠAo]Vw&|ni/$b޵'韕ػmFmrrde&,z1OqF:so||djykeqh@,%$*5/'%%&-]nݪUD,uT aDw#'bSN7cxin}J6uPg.6O5vb;vrvյ~GF{ޱ^5V{֝9,n*'~:umD}5nCaa,:ԽlP{%4RP0Go#~+*ZmJQ ~ +v^rk–-i` 33Aqv~]>m|Z-uTm9s8ѷnٲ~=r\RW@u{v0{Gӯ3Yn7S RAuˉ ו.*;ʰsS[&i__okwI_bXHkXϣ/ʿ0hn6ȷd 9w:e9%lu:uJͯ}|D c #hd`ơ$$ BB/D9rE qAAQzڼ&\UT$#ɮb 1}^P}[ګS|bDY{3ΑU*":LD, +o:K] -byu4+.n~ɤFO+ O?wԝ5I+ԕ}(%\m[Q$S*ifzN:- `HdϺk l)~GCvOzjrno߸ҥx*7TLsg V^t 3HD=np _siKُ˕eSx.=uv^g`X@DL^^: E oX^.,Dz]SOMJ UMѰM̋!.U :hkԉLd7++?̨r)JԝYE]C9WS952ߓOfFٷh2/uvd'.,ѠiFGb٬V7lX(55;;3S*îzwU^AUgy־_NMItJ&&FjfGo}0|i~~uv,ȥeeYqv&l,˫R//zc 带"&9Bg&$yWs/ o+l- w|NDDtYXk2P]+hԬY!yudЄ{ XɾG>| :p85CB/ JKH qQtxU7E-E-juR[I*͠TSGwLYe9CἼƿ[VHˈ F5LVe.ɴ~ka0X~55je3#X<2_T8kM99?lRFyVEG)mjhB-+kR/fF {msEH=Hh˪3PλwKw-/(eaCRPp_ԖU"~ZVZylO8,/8ds,xh{\muVR_ 'g}TQ"Wm"u `#[_cݡCo5 $Un%r8\.S* ւLw{<^~=z<1RTMVihnTdvOשskzi:u+|\ 1.FZXRgk/T**xG"IiӉW졽h\.Ξvܵk"G/i6oZay>*v)*Rתp&*RwO#sjM."aΈۦ仉0P=a .9xWmC'ŜmU&URwAt3'NmrDsj7yCtq:>B>wx{<5PQƴ\6ν#̗ɲ+lurCBN}~8>ŽL3 .).+*YDҲ2a [",,6s)^-ӕ4 *;f0l34\/ќ70RcW'yrnj=cve-Řԝc1F4i֐_KJ"A|^-p:\&.3O,Yv-ͥW޽[9ph3g cy}?U1rx k[T R1V޶b5*`HTM[W=Q5O[zQQWB_- R\\- +W2^Ui4E*Wt^^.4M*7J#Xv>&:R?Kՙн(*uIuToCmE,-rdwKGG/-gini۱Ix݀2{WNqM艪EWWUʁvo_S "/DsQ$ZnϞۉNr@JDIQ!x0IE*tv4VedHNlq4S(3va#,.!tfddIID^P$gp ; Eǖ-Sor1Ҳ"sJVMo`+6}^ Y&J<1&8NO.GhZn/!)xSݜxd7 Ý9d2;ĤCWw+~F_[TG(?ǘ T/r%& `C_O.r.uR@vѪU۷ IIRWd叉9~+DZEuxy<ԲsP]\r* +3^-wnNKܮxS D4-dKII"E..s?%]ϳ#%3*ΗWWUӫzNQ0){{@B}+#+qއk|l~+O[ WT'GOژ6+**$Nv}3;b Vj07튏/-N=2x/{j諯bc׮%JIȐ y;uD}S:x<·r$ĉ1֏-f @m*rP*^(XuHHV˂!!]p~v%٠%%nKK 9LоtJ}=1gZ:Y/z̓lhb$yt=CڳR@MMY.ǽPzzzl[m]nyH^NG+L'9urɁW$uH>)vW^f]P X8wȇAu H>RWAUQQaD}OSP/uOʙtνw,)<qLOR@begDK~%Sֲ4DHLk6 ǕD$f_xӨEK4#].&bXGJvN )K/NM@D="":DDDK]-mA~^S꒪ &2rV3/%%<nJʑC^'V^onmlU8 ;zl 9YzF_H <83ۡ_9H XΝqq%Qj}A HUCYX^Ng=QAAiiqUp?yMqE+][<6E۟1uPY}m,JզZNdysM:aoEEH_>,- bOeuQ ~0l0Dӱ#{C,/oB\ҁJJƲ2Ki*2~7T=ys_G: n᜔J6ipki%ytGI<HO@_gH)F2L,u+{yݤ1i^DD4H\Rwǃ++ iP^ha%l [,Y]xGݦPؤՖk<כV[!,j {a"zhHDw{*gu3.~vm дmsm92х>>RwBc=Y1!m~bcYad=\}C7Mm0hwmƍF\{7\ ܢV&2fY*Ή{!8,u?acϷȴZKjӖ-Zmzje UɊ: a=|~j4~Tdґ:o@րl-_T%+XNW1Ng[R+dN6 1N )D +XT)b17 L/4w_Oy~/JNs/{EGz'|QTTV!A-ղSRtzG^=P] KƎMo xb'n m/w[C4n RwAՐK?DfjJ]7\ubL[6CVg"p]/\*zs)" &1 ""PocEDwزTtUlS!o{^^`.]j1.O9LHQZ,`RwtZoG rgj}ŋ ۷{?_]P5deed-[f p8RW {R"xwol`|1*_Lsl6>rw۶-BɫЭÖt u]<2_K.a[dP>Vj4Y^@D =rws50c} (޿bdkXi^V(L;-Zk4KZq A3=ki:z&)5IQܞ}. &Ήhml:TyKj&6g:PXZv]蔲_86%% _3ƇZDB^).g3Փ'LS4yhOQI7&˙3;4~ha4΋9ٓ=}e=͛;rpTb],8R&+r*#_ߒYYe=+OדV EkfJ[&LdEE~OdWTm l6 @U_!cZFcNg]պDO#W\5L$i M}gh(ͩ k%l0Fhy] EEM[[Rraゃ~nUPRWL&u/T B?a/|aOlj 0:ʣ~<]3QpڢXPko|MiFIUÕ+7o&&}ݖ-DvK]wOv@ž?lk\uY,Jv",aLLn99;F}yy[έSJƤ>OcW`|"`0Rz i s(c]DMs]sbm_հ]kpO ߟJ;Z,A[}2}*l6a [BR%@g78妥֗MM4"Z"jeIhl >}-F ׸dD Rݣ6*Eq(}似ڕxok{®e x_uچ1#z<}SϝlzG^] 3x֚T1Blfmv"rE2 dGJlZgצE.$5o?1C.]~=!hժm*D >,A JK_t349Dk4ѹ>7hm6l@M"eI;o0i}rg wļRVGxDEz>-l;4 @m^(cdR2h]Jf2NM$94H6[x?jjZ _hgyX|uV CS&/z Ϳ?bQ>/KGbKD?Bn)ޖoWꊋjeMD|yT'P4_#""%m$bB/!s"GAD4^j|s:'HOGn`b+O=UPɇHj(w5Ĩ>`_~{ֲz*30f ߨ4+|5~޽i3__ԉ%k ]#f5\يi_OtnpL-^ӪIq/Y|(,fzjG)3ϴ]'=I7$kЀD?GUg*}*{yηz}bDt҉ȟV1SQu/M/MƮlyў)l6onfӟhn3fTi. UxrtRqLR;YXnVݮR69Sl{Jʡs]vRY a"",wm=ODDy-oO(D_Ω/+Fx͔7=>z"lERy 9 K7g?㞫۶/TRwΜveܹs"QW5C/G:ǔtI Wr5k&{\Aky_y֧t)>qVيCBx/#"bWJ3U*c\||h7 caDDU[Y""JD:.!uMͦ9 Q?pƩ^uFunKk6۽HwSBU8E RS?' T~L޴w5rv忚-_RwÿRS(\7>33gF{mVRwM6wT*e/RCy^H{}:A28;&wf@kl)nܺ|IO RwNz%kw޲soL Ք&BG)w8&yˍsﱱlRQ8=+u10VHIzG6w /۪> R?+p H=ʂ?&QkcTϴGSߤ䩍GguJz^K ޚpasNi5o.~rV%D6GztXd aK/e 蝷ފX¼<: `@q4VFZt۷VtWO.ɓW\@O{lۆ+SJNάgf#Z}c_;^O偙HID#(u$/*~FyNt*=KE jө:\HsTg?Z:7fG.:G˥iڠtVT4w#.zrۭ^rɎ ϳNNwL8іP W\nltw]ᮗr 7NBԝ-^uk\rΗ V1gW95ϙPټ)[& 7o{:;d$bMXSJx"Q9h=;YΏOa6*+e=߭߷4SgjI{Wf77bo>as_KST(>6ԝJ^̐V*i0N -[ w&3z+lca+0^@ c'_.i$t u_wdOB^ _1[/3plvuS*"Jld鈈(, ;9'3( sDLMDC O {UE8…6EQL^$r? Pn򼢭ۭ(}hv+;nHM[n*N.(ݲ4(*se v=Y]a :CW-X㑿$[,$ YQS>zrkbu"U_vuS~yTRAp\\)[ yF-PqLD)b(\Ap,rvCF&PW\{v̽].w(_3i2+=ܓ)z:W垯i>hn\uQ cDD4uişGsf$i/FU(>|n3J>%8"%k)u ,4 4()Qʛ+ǻ\uw"M7]`cc_v<82H) M]8(3=*x;}ft,.mT1#y>3qNnY 5ҷުW1??a ݇ %~SJ:u*.% ^~>'L10ƚ?Dj+z<=>Ğ~[v=Pf͒~Ft4o! PE9ς`qT*jF Eۆ +rRuDRkyzCzP/vh1`VEDDiw24JˬL9BOq6Je7dBB "^rw ׿ڲ-X߬_O.Ѕu% r'|{>rݏ_yMis9n)龶 34ZKDa" Yuw~57nÿ"اB^PBQ+"zZCw&ЌQRثfvN37놨gݓhhxJKDC藖v3 cl/msOĜ-'%+:WS ^篪 {xQLFM$'YК+|Ұ.| IyG_Ν9`1U>XPm~ZJWiE 3g*֮ݵk ^Tgejç\tfgEH]&-m>OxoO4nŋiEY2릤 >hͳ  ~[ xA?,FqdԆӖHQ~|\sno!VBn_ߎw'cO*L˧e?CD X=%Dէ>\G.8'ɴ.PyPae"DσD cB +lx/eiJo+'"ŒEޯLFDI]kx6zS耊4F]4.숸dAFDE]tQQfV{gZ}ud-DD5^ g ǴΚFG{}a>1s=ݺ(sŋׯ]{֭(kv>|܀}7ůI 5/5J9zZgLAAugE7AeK]癑YIC?XV&JKv+Sn_-$ /iw7.Ժ!S7z^M -yL aaWz.:b:(嚫Ty]:zǣ ߽327\~O{E$Lk!a۵TcU^RwHXP8pBi3A~{7 @/'%%&Zm/` za1q64Z86)k;yJZjVFÇϻ tFӼy֯-:ԝpoa B$B$gF{U^<Ő`YU!C}uRWJάEy}h)Qrg fxݑ6+ 7o OJ^9(88cAޭ-Xo:RVOgD |Da:0maaF/+,icj ]9ރZAs"z[:?")u'cǦőϫ۶l ~TYop9bڵ䤦ԷI@ 7oZ};jpL<09HwJU[[Y;]kIm_i{ɚּԧbb./٨MK Ll+Nd=#\W-ectpϽuFcޮ٥Ge[EY2[qޖR򲲶ӛRmeeэGI[^^ !Ow㹴5~~sO ]eEQ{AF˥ry9uٚoI!XQ^ԥA賡WTx4/ݿ=Nh @|Ǹqi0 eGJp` Nv{=MMåi6x|ƍy<v.&cPɓQ7gRwvSZQ@]'5Gt IO?:u^K|q73mob fy""ցu.o J_7+g+"tOoKKʍ.=J%uelh JYggSuŕ*R"CDt"JTC/H}V@DD-HOu5a e>a +XVCtU5 `@;9a\aqSD-^|.)ܺI7s՟>UXl͛3_xdy߳/+F*U,uUEOg uޔN]:ߺuv>̨K+ߺ֦aC;9JRI W~xuL7}))e|Vԕ5bO3e2G>YƾnȠ ))R+ٝخ(MngWQ `L. _~pN࿑Pȣ\iSi`Ӌ#r]/Nڷv:ũTZdK xF6Ѿhf25jr,fZFF7wGo*]aS^Hq!!Rw+m`p0YMooF|?JWnnQQAҥ֭^Md96UnM=`2wnXkm坑!u] d yMOj곶G,3޿YPx?]u132b>qWUU4`?,{nRnKv Rwm؂$s… +Xjd]p}OdlVU4xjK?.yfG.?vY{Pjj[۞NO?d\'5ޠhlZ^cb$[%dCKPݱG~N]gY>Gt?D)t60TWXrQsJ=O/??y.眿N/cᐺNa $Sz{q_x ]S**F>\h4+*G&ӓ3yf\ÝƟ161:I]UoYw^ҷe'kn-J/EDK9s7-R֕G~EI6ʘ4,J ̋snh䵥",uwys&>SGdb#Fzr{觟<6O&L`l|/ `})s[|<̙RUQaZ,xURb4I]&BE)w8&=ԩWǓ';=Ӿ~jɒZQQۤ33nݩVV\Ѝj9MF #I}pBp]sty3Cz{,+S}Lu9m6XB6͎}NZyURwSP{5H֣{f?=plFgׯ^M_\\T$u;1\/+[pطr ^?'lf9os>z(sWGL=ӧn (-@JlG&ӤLqA&_Qnt:[WH =Yo~qnS]=e67 dALYff23A_VgkRt>C_7~Ŭ>: u#~/7iSOI֭G8@tիXj{Lh|y3wxu} +|y1Oϱ4;ezx}ߔj/U@X) EѯP=IIOoZCuT-C6ԝP&/}zO5&MRIȥcϺk l)Yb#u?G^x g?.u Y)ASd]'OzNhι\Rw dVvڬΑ-?o{#;'⇅\lt=(ɺu o G#u T9W,wo,XOÄE@͡P95*,lS5kC;鶫ԝU S4cNfxRުM Xjxd>D- EC*JJƲ2ڰaZ"r:+|J5=>uǎEb :mf9oNuB]E**-.(sPNYoGF:E ~(@Kfs;C*r *_7Q%ԵP]a Bo@m Mg(B} [ܟ1}݂eۃ-(8L_rN׭[VdRwelV+__D,u@r*y>_}wzb$n >4GKwƻ|ĸ=7f$k뢣Ŏ@7hG155U%y]ny>Ɛrre#"\J] pf+x^Xȶ}49篿cn:j `˹L&ǎOdyZH]po\nM|yWRWn-Z4([X?yr|(>ip)'+ȽE=5jann{jNsss-u z|GE%o'*yTJ pw _#ϖSP]k:Ƚh'~{Rիo%JM̔ b1]c^FCt,P5n;摏рD{Ξ+7n\}}^܉đ/'.V\O^>g]KCnו+Ɏ)MDDkh(]RYk<^:*/ݼY.0ўq ?K/DD*6nI, uB`2P=+&9=\^rgnrrY\`+fh`6͓r넒ӹhΖ:j `#s1d?S? +WnHH ڴ={au3=`B݌qF]p;@ΛR ,*jJYX!WF%?o.oh-u7@UGcg;@u:WK|U7'/0NsFcQ?%.'t&W=<=o^L91fJ5w {Ԅ&Ңnݤ{+++??7oߴsv[hr_=~)4޷-~t{.ݑ22=*n0\9Jֈ"- >=R#/T^V̵%cl/;ƈp}Ik3|^Q|ruv4 ɷ?Z@PQi?P+[1EIqOZ ᫩9e  hٲ ~pNj!O^8GyC_E:(m)P KLׯ N/1lXXO{ÝKη .~xT$>QPj{&S[6_7C_ydK.ű!-[v77X@-fNBUd<1p:].hŊׯ'2+***]MФyyDד'ՙ^ʎ_~°ES 6VytvqMLL|7"e``b[;o{heޣ.Fꀵ<8Ko7VE-*֫s8Ny5Be,/W{u\.TԅPԭK?x*kNF̺$333mCgj&  `BKj2G_PR9xUBB{㷭Wں56(==//;[*ڥE&E]ukO9EYбnQLSL{bBAA 1XޱT(^I~6qrh荹z9<1G # @T|t8N>j4&3|7ѯMugьe1?sf;f/$%uT?Hd<:apۼС{^MN~]ڥ˪NL^JmUPi;kj:\]:v)]\-i,jzYJx!!7c2V|R/Q)*u:y_2 {hRi9v;5=h5l:VS>m>\>$…! dHj;⊊ڵhS^tsNv`uh=Эڶ9s؎t,u=GWjE(#vaijP*cҿLQ2F](iP)0PO bo].={UE`P?Z XUHd y/Yg2.) aV+uFD(GZ x= v;~f>1ϳa 5ieH//8ugbԋW*{#))==5hݺ={mv`ud磣ܹ?ح[RwSl#5֔ݑZ]bZ0嵛!!)Q9%%1KıYpON5/LA#|ҍFGvzHDD u-Tl+j&ْQ#FT^}]Pa PO_}ߧK~}{()1ʈVܺ_<Qxل~B(>4sLnCNHGcox|&{nNmwwQttUT&\L=yskpڲEO=_&'\gK6^ϣ&ψ m>noh5@R)x~Y;GE>|5@ 9eS M& Kf{򗔋<C6H}nP+MapooSg+ߟ{mc {0PG8rqޯx?XK}{cǎc$y3)IM]| m޼C_I]Օl*MPgLYV+4!!up^jƌ[,((K!w|``Q%e(ϘTzŸ{|+*|w能 {(DpN/F(Qr@I] "SoMPyRg@Ձ,0x˂l,Y7\q#!hӧfӽDo=똕3zKbLRwtW=A?͡u䦯iԭ[7eYou#  vTR@W9>pgv3+]zbhhn6.1ɤ\nADDQ?vG) m$WM))cϟ ,`GEEm搞.)_^Ԁ!' ?oߴ- y^>Qс#+*zY{TF =|;c9 Ԃsv2 X[Ib,JLQNoVd6WL~We-ETy%k[y䗤.GO l(W-ӆf_Czoff#"DM*g!Z%{p޼'fkFƬQaK65k&u](z26цモ ? `TC_[P܀7g̞-u6:w/QrrVVz55\يyZ?udÇCR'k߶6`g(LQKCLMF*a,OQZhN^\o+._=+h XW9\;ZVn6}4V_{lJ'lV'=>o߸'9&B cKM+z"kJJB{2ZXՈr_+RݕSTTP@Owo*u @_W>82ਡn '֪r@+)'9Ad6wt? YY@|XVs{7䧖,=^:!a@c!G/u *%pYVTϫlmwEfz/j#Xl(n"m-""G\ߝe ڞ9spoч1Ƙ-u;vM%?Re96ъ7r9RW,[|uL/x~0x͓]bMҖyݰX|xmX%c2["T7|(^,^cfС3E_[ҥ;gj0PQkl$'u]{GNgSMw R]j@4]7b ƊzN,APҪPQ[dfROyM^^=g2&yTe\uYmXYoh~?b_NՕlzY,9Ś[ɼEDr2D6M+KX"dc4`̌9SV&u=v?lޓ۸]N8rDEO/Z<Gb ^y5΃ɟl&<4.7}mz{\}yޥKV{{RkCoŷWl 'R (U_Vqlay-:C'֋yZuUN'""z""BDD >Nxk|&ٕ;c1&R@kaa|k0~R*R,u-Fcy9ʕ["v mY3y gwС(cĻ[fM;/`ERLpIIW%%6 }jDd6?T%(yy)]U_,`0zǕeZwڣZ""^ @m\JzVtԽt%6R0Ր lyjr8X&pNQ,$"e"(@MBæMspx VyRw@"o~w\J#MG=+m%Xl6U*A_o?39='lRT_my؀YRҀ"YRBh""(|n6KH""!"D4I&9]Hŋ2ws?e _y%dc!,~rsu9|BT*u=׮ܸAtOK]P3r9P 8zn7c *c<6s Cm6?2D{FDԶ촗Q "{ .LVlQqNWTPSqޘn&ju&2s7:cC!P6Rq45f]]=\ݮ5 '^ jljv#g;MD&:(k| =܁oOϤX_v/oŖ5KYX^N;vlD9`Ȟ9nz췯Л"ZT[a1#rs\6)JM1Nh*fզ K~-C^uf:֩棎$V6Kue:7TR?T]3;([)Pe5C]8T9eө=RphMiaM{kP>+wwyz"sҒR9Y6PKmY*wymcL X\8缔JrtG/^9jheS>vn;RًT*UiP9Q*9J%-A4;=/ųX$9dv6Cf>Re9"nf9C[5^өSLStz꩷9%ꅺdCNyARg*ع(a\ȑ#y[ RQRb4]{-R ʕQu"u&/#E1|>l6@D# ""R0""CDD "y&[Z)d tRlldJNh/*M'JmcBp(Εm +ٝP8+\% +RQ(~%a<,D˽nUmrVPr)+n8Et /*#].*MS}AKr{)_t/hzF:rl(҆V-g!÷}RT%su(- [\0pNN[`EeDMp<QE+nݰfs8;_ڬ˪NL:ׯKPyνu&yAD1L* &"ִnDD:E$?4c}Ba9gP8p^t4T(3o?T*_;{:ߒ]\ \rk ~ps(;uv ;o:宾eIrk;Z.wW.wzH~O^iG#/r#s>b<]-k';8ȹۭ*+xYrl-!/*\./UGnTT\[b˥jvkRT.䟶`h/M}1SU85O;۷'^qB!sTnI꫕[\R0pz{;t;?t(--'wQOwWh - %p?%]ө'N'}uXc"zcPG9("En_:v>֣~DDɮod2{LGsL.w6;Sd2w 1S\]./̽scϗr~\.\ܓr>y+D=Om˅vQ-eȎ"A HED$ʄ\Q?JZ> gDQ9CZۅn('t ELK9(u)QT&xmm #}߼KDK7ҊDDNDۉ G4 nťUWF6DH:&ٝ<7yJſg+4:fj%Zj۶X"QOt900Is _Ir7fhƄn'>|x^k'yqu~GAM\,MK[d u@m,;'%iQ^;rn7ʕ[{넺l2=#\3ĉV[\zX.MJAwPMoL*u@m,`oVx)??~:|=pwlzȾ}[9sb]>n'u@mW [hH.yIƷ:t6?׺~^r20P3II驩DG\p5S9OJS:ꛎRVcyNV[[KP` o=ݺ9Ϛ6M36aYkז-DsιUK̊ǂ.>>kWHPy_ZdP<"u@m,?9˩ l2F-(1ά_wDeeFcy5KxÄy/y'O,aJ*J_W*s+yaFsk|ޡL^?/SQjr)R@5-`ԣGnY^ޮ95\b H-϶j%uܙ˗ΟOHzѽDo}NnRvKpTJ%2:&wJ(0P2X2O+ 1EǍt/5LB&D:5&h":ED?=@:C5#p"r%^m5tCl6^ᆗf6{l%{wb Riد1˛iZ^&Q>\~>z%% b,d"u@M,bߣRJtl7ޠɟʥd"={nzPȣ\ҧ' \{hhZw~Us{{ \hݕ ɋvەj@@npiG}}NRID' u("RSWDDD4TJLwǯLWJִZd&6 zN;S=EDTy}%-y  +Tg }dr>]V|\Ds3nsPG Od{?~ٳDׯH]Po\֪FI8(,*|@U`_ M|{)Tnxɂ SgIyN<#nAVJr=No_vc}5++r{OSSGl =]NK~ "cy.zMGpη"c1fKPa O#s*G?[R7?WRb4mzRT/M7RzƜ+)I`U٩"_zS½% !  o:N*G* :)PP8w#{ln=mڴx8fSÍYYct1(2)դzt*+ f`gr۩tCU^RgTgWm-wh~B{z׀~o/9BD@{|0 B ~&uܙG/\8s̴4k˚E|g 9~\hHgmen{dqzٝӮݬ|͡CKT}z=>eR[-Tcj\`  XФZgkr}QQ{ؑ~Qnnaa~>M(f*ʌ[‡w`Aw4=3WMٗ6\uw%'-xyeqfdc~GG>hXH<pE#|O;Eԩs2 `AOJj!x!=pq,j%嗭[7n]F/SԴ}Y}M hl=kO=Y׷_uUگjʂywwF{tow)vC|jl1lIDATes`J`.:ɚ\UZm[= IPH|tԋjyuV$r8\.w @ֶ{[8sf|nF:Ż0w4&]ے?}hMȻ.ΡCYYDgg?λa 6tllOM5ݾzb˖^?*.h.<׶m_UzI" .HPӄ'cbb?p9û!4J1Ƙ #i[o@F8.I7YûaӅiS{] g1mou'YG8-鵡/o.]u={4V2r|Eg};A,˨5^[ ccbx4Fim9Q7@{Iۗw\~ڴiZZw @C%@4{{GolN ߪ/vݭ򼫠:v4[΄:m'{I5Xp~<ە.){T.yw54/jp뭼{w<b{]PGgϑ#hzSwNfb""ǻ JP]r!mϭHMv4$SUw5oy&o*{:-w\ %vNWu=FMqVoiϝ'ZuϽjNR7HMWg_6>,yg$CTO<;t'"*eD$+xƌ35_r:#զ6%fq{ꌵun7ߥQy[sy0̔)S\$ `Acce##=$3O1"_uvڶl]0i5å{6]4չ» ̇_(Ò PlJr(8~sCg%CCKX6UxW˽7p3 <; STA.pV^_ S;**?'-!"86rrMMjh4>nd1ch>?0{^uCV;(w\򚚪* ۾w @C%@41tBQ틿7vJXZ}=*hvVU?/<:hkG^p1~85cݻ6aws܅Z$]d6?W:V?"ohQN<9S}jNV %{uf@6*~L>>f{6e4n\io;v5J]W&,:l倔a*]Ot{|u+Wy^o=@k?.w4~l6f5O]خe0j$H.Z7ouTV˻ | \pM{f I:5a^\ ,L-= x:ݑZ%&] nF LD߄iI,k,ӫ)ݍgZ :s)5 S>bLpeu#nzt&#^%"*h Yms6y36wOC'TQtڶEuk"(&F^Qz|owQ"A | c*QIHQq1cj5Qnh4DGʲNG(Z-{;su/ZFa PߧۡwmTRwÕM~>$D'*4CA{uf@~nn2qOB! 1kjxX5K={W)~$rF. XV:r[7eIxq:].hٲ-[֭]0i5å{6]4չ>Eު{2FGDϲ0Ԑ R (IDzA$ďsY&ӹKߛRyavBub@qxc}H|Tj73Ʀ} 3$@Ã/i4+쾿m6n$XVw @C#@41tBQ틿7vJXZ}=*h[8T:]={ [auSS%b!<7p6#j_WϞs?VWU)^OtDek4>T/o;v<ީEEb5 xw|緾|KDD*l;n \]J[QiSvlK9F=|n4`TWͪWGtj]C;59Gy {qkw{2CiVTĻ,l׮ẃ;M&=WڹᣡC}V}NW\LtՒd5nayڲ2u |nRkk4}.ZzϦWflU+>E9U᚜]g_uVJ*ׄaL6QK񕻥96mRcIIa;Z]iA0L_[[[;rcL낝60D~ʕDX] GQ9VUݚvcڀ׎MGCy]_cFm:wVN銊{O--%jVNu_D xDOS{":1+W߄IBN']}gT=/^}heI4O/ͻ.hXtta֫߹S MQ+gaǾ{ws%*6AQ}V$ ߆}XM]to Wr bfpv,o;wz6Y ~-N'[WNqu1U_a4XՕvn'g;.4otqI#_Z/5w迁tҥTBsB⋼{NAj7hXt#MlJFITpc}W~V:="w֥o꧟)SjH{gOQt8-3 &MRxW]~.sj7Fض-^*^]Y}]@\WƽIIn>$!n%&G$] LV3Edz)o@qm(!ns'a0 кuUՌOQ4魼wvw @2(6_x@ӡVQL:us͘VDmx ՞{N z5߆,q^|PbJJ = Vf7-d@N-|5)r&[\@N8?m'K{,]aD(»a'hf;w=z[aݫZOۘ Z&9J6r؎s_+-%?7 Wvr-Y0/qءާcǓNl*9].*UvgEDlsx֭,;Yz3Nǻ.-ևj!'+Ke+/7# FVx-4mɐ#y+&E9T☘ߟ)֭O*O):&OZͻ ]}Fsʈoy76s`=XР8޴=~`E\8?-_e˺uk^c'8{m5)k]ߴ-Eƫ_ˉUC3(,qMxޙ ֚5=l=ק'sTf;g=hժr#"r"l g&"=K]eĻapPimMkw4:f(0˗oݺ~GѸ1-=p"V=tU1gU/ߗ,6$Ҽ D/VV ujB4j$lk9DV[T[ޕi,9-mdw.]w8{B潇[Tʼn ?NAݹsQ{M;8a^xuLza+##y+..,$:xĉL5 Cmz9,gX!mLmB\ Qnj@N.({E`;࿞~Z$ Y]xiڂ pTf+De/X2Ќ{͚fn:zEH4eƩlVsBBxw)i֍72cu w4M77 y# [[GBǻ/SXv[ƻ@ie c nْvxSHR]Q.*ɻ չAGu.+/|ƒ->^N~*_%j4OH)Տ .~MD#=yKvκ=>EwL֯xxw[K:B5kVDN}/7Y{6[.5R=ʻϡCYYDkӍtc7tcBq'_a.h:~uOhK]@unPj5p;gO]s/>r~~9f~Wz>5'Dl2w-4%EV3r.?Dl,|5uZ6~ډE4tJexY|}u#H%[X4;?l)U*ƎXZbi XpE얖Vr@SghY{;v;{/AƈBDeHd ,o/,z">~YԺv'N/ z}˝~55պ6kۻgnhl~pZ][K1ƻi|U}u@kv\ϱ} ;z&ծHRW$KFMo GW Ǝ0WpnZ{]V~14l+WرeXMY§eY=I2d]b}*0pOjQ;Ē E~.%\payL,dlтw:7p5eZ]Wǻ.]T*ukF,Uܾ:|[$z.+fpt ꍫ.|1P=DlMN΃9ju5c{TTTWyЁkҴ?X+^OW9R䙢)ˢ6t]sNڑe[VsZ- ccOv,l*IوBBdw 2yY*wŰ׸s>& YF#NtN;Xp92}:e".w_ݶmF"YVM "cD!ۢ;H`{>0pH:wѣkβ%=zpztvYD6e5qϛcLQ-ۈ*FR.8EϪ20W~=Ҭ!C71f;Ż6 `etҥT]G*leeDee;ƻ/8eY5JMT޾MY 51qucW>>pwѣW-ϯ۷/}F#\qOX0x +/[z]${.|?+cLSU*6usI{i\kZ|3F؁d=p~-۲e:"r& ABSOgiq\gϊμUQK _9raOǿۿOD=9_ܼsr߯WgVyW\8vey5Z- !/V>gL,W-l~&1w4M~ 1DQTshDvvAA^щyyk;>G^j*DEmt|~ۙ=&_sKۮ]Rrpޝp8?p~*RUgG]ĻbDB4f$YkUhGj0?-z⻗.o}7J->;Tno,@SG̻㟚4IxW@CR.۵Ewͅm4IoH礘l‚+ %nǏڱ#{˜\cǦMkA " _G^*3JG ,R?&fOۻoyW #>zbد#W~lhw99&F}|d>%.]y\N|ZRSI{,?cmjvû{Vv߮٩h0{Wg>˻Ϟ=UUUV#_w:dY5ʿԼE[%鴫37knkƥ}W9rŲ=Ҿ}AV}oL{U{oZ»㟚2E+8_vpi=Je ]m۬V8\u_ݺF0uؓ~ߜ2'z\Fd G5FoDݺ'˲]koCw`K͡wLo52n?q=Z}%ߏ1 _]8lƟw^-!%eep)ٮsIYA{.D(D#FHʻEV9uN-86]کr+Sbtι?' [wzީ셓xSB&"o4jw %Q%B/.jj־l(8xsGLl>fNxVb7uYvjU%%,vSIIQtַJ#¹p}GT2 S\sLKĮ6?Ghq/لݍ3=qw{q\wI*6LiC_?=<%Z~Ϟ;xaZޠ(Q1F}5qƇmcPr,J*%2rG\Z̞ ;̋6uۖouSmRCbxV\J-[ k.ܹC&M$=J %& Mt4c WӒl6t4Nn+!HSz}=]ryUjsrrQ{3ZD ?rw4.l7geRl~DfjT+xs0s)JwQ,ʺGGQ9Mv)J®n++kM^l-*i[۶Ts[ߞpi萕wdDxxT3jHHիJe%&QrWjJr>YoM {Kvw)} Xfm\Z"/Gs˫IUwnƍa4UA/G:VA-1`V cc}sڞ=೧暯#W~=%zLg[$hoSRRxwSSx8S Xq[7׹}p JROA{v=RRt< D@9g۶%XVw eޤ(kuyG5;orwJ7К_onߧ;Qr˘1ߝ^rc,P=kvV'obNIB.L4xo?R;Pj- .MSaOX,rq`yudԔ)WpQ5YYW}3v{V+B>lrɼ;a Ԇ$EpYƻzD[8{7++`FH{H#c T]u_Ug%tm?zUWsǗQ,6ܴ&cǓ gw> ^5ũx\sUVpͻ¹yw*ug%TWf,u-x44D:&>ZUZm[=GV>|~MӮ]Y,6攡P%P`,BjE7o ol8[-־t&TFWV*w*uaevf,i7nԲ"ɓjHtY\u9ܪ9:] H6hb:=h6\g2=ٿºQ„ ?λ~oHqシ{ɲ2ƍɻ2 79UA-` sp8}o櫎lzOwˏ3fіmٯֻ-ue˚ZCjSZ$G ¾',[sjՄ TWǻQxwЯ+CrSN4)/ /Ri߾^uUj՝w>zλ޽GX,k ]GCi&)cNު؊۱ǵݑ#?4[:]<8+(H]w6~whqqu/ZF#5|$ ) Qb(zk.\NKو,]Lk{:&1HnT]B-,?;w `1V ,h,=1E!ڰa;x\  c+SA$ K+Ϝ~p۶ߌ]iiСo\2FaAv`c3ccm/;uT <%'L$w45zYo\^>MqqOL? %A˄{XXh=0DDT1HKu.z.1w?zw aZZ(p{ʵ|ss1.wZ=ϔ~Įſs2?k=zvksb{tJJDIĻOޛYN-y8>ۢ D]"އ+-5Unq[uFYKx@-lS芊hc)L!Mww41s& {1ѺuwoλP%P`f xE!"~rv 7WY^~Z97<tj'8 )<{G-Z*yKe\QKx[͞{jْ4~)S4whzRSE]qa6-$6œ䏷5QR'F5wTVi,ĭrQ=`@~>c˖%& Bp̻ & `5qk86bi@ҳ'{Gdg8ATRRYY^λfp|(Fh宕B3t'LԼvuDF]cVVT4KJ H,?bcyK8(-hE UN%Rk$w 4U뜊/kE`KVhemYQ=XSfV#G^waV$(*;kmm֮ݽ{6W>t1c PdJ(Y29"j""ؙ jVSN,pc^XiLk5)"%%Z-t:=kIوL& 11ﰮHyWڅt:"ʧ?{ ^v XK$ wWc'<$uÇ2؊ aVzg2k?W [ffnɓDżkgÝ* !Qk7{Fh M(.n;^"2?c[_|!dee3 m'ߙ:8W>};-NKI!h:7yZmIIQ\.eY]s-2/h8hԝ}O. g/, }ѐ|x5{&׫Vg.~c_ygAÂ@Y+{!j˖S ܺu|M~jP{h>+F{јm̧FcԼ}(akjʖ6s'*+[v6lT34]'{5 .% 41+f-H߲g̠TEwN%:uw %Q;!EB"NMC9:bU'WUWP5U Y_dպt>ihHX覚5-E&PU-Xz~ h@eSRzX 7u*6_AÓ*8jq-$2I akKEؔfj)毕 x+NFH usmя7XM}oMgR =֮ݹxW\3B+\kE|KL];GޞTFTtddYxUPddDRZAuul!oJLJpG.PWG$}k.nᜮRߙrC{.V@,%IV+?JMA*Utdf68SBddv슊>6tP^;UۺUAV$ͭPy[wpoϭ]SRHG;(wś2E+A dw˅Mަ?*  '\-w\I~3DD}ĻV#'~CKiϽ)rT:i)*(/':v5qf#:Yzv|EE/TLrJ$잿iB> b~+|d&Yi~U55Nt^پKa/|4]Be2LO{PyMjne>|"\jB8Nc=k1akjbFEf6PS[?bQ,>$ WzdxvHxw@@ux˵`[p gy zo8yMHCC*5q$qý/RSU*:gktQž `5F}I]v{*.2z~P V+] %T*)O7|K+ X_f-P ^ b!:xĉL5ScΩIpM_p||ڱJN-腸8*ˠC/KŞBV>=}MMܖ(ULJMM XuuP/Mw]DWe T[b2*qj-SF9w@}vMGъ S⡅ߘLo:Dk `"(0PjeLyW-jwGShۓXW*+?`Q{@*?X`΃9WH2?e>o*w#% :*. ڦMI$ˊ_Q?Abh R(Y(.7 k=iy:(D<ʵ'%mw/0̵#ayOQ^\b6'F56ƨzz!G9q+Qf++~t1FcME}uhNYq ]V }GOh"";v>_ɳU+Lzmَi4oOۉ5Ew 9xDJ \D1:C,swttVok/-aUU ~pb U _?ߦ-[xgFfM̅cc3XokW=hϞy\^nAO90&TǼk.ѹծ5lbc0eXDqq{~@ ^/.%lF#ZB x{EW{jE?u/{M&"X:wjB$r9ȿ+\\jIjCN]fJ7-9:q}DAĚIU^%Dr `p0`Oi6y_v VʠtV˻`4v!fO"HĆJ*(֞l2Ւ,d2Qɴ7h6 $"0""UޠSSG5ekYa݃Z[wjEn}v`+[pUr2A3N =Z[owJHZX``8u:fPmC]n".uDD&Q)?tqF3k䷏]}$YD!!D̻ E!ZEU~KZ,6oq¼CުK|-IUUnAvlw-_Bi]Kj,ĦjM̅cc}Yom[=m;xp^"Ye/bFj'c߳ǸôݏfÏ''*T>ɻR}$3Y-AAfPP* .ﱋw݁ӌC:כ"Flw7ׇ]>6f N ynrTYRMxFc>eg[f8N鬡iz=5Ngq<[^zܵAUVlw!D$""Ԗ޷vw)#soP mk.ޔ)ju8wfroVz,t_Gj?M_iz;0D1&i\XRlnMf6%njخwT曔aF+iwIDyz^Y&ڹ3==-w f 6 brW-ms yD=v.knH.ݴOޜ/)ɫ3.3O;ѸijW[\g3 (ik4?\A~hRVS5GhhPːVkDj!}mЯCn#YCaa^j߷뮪?S`.qxZZ3_qV{7B(Z"jKۉ}Z1ӏd"8D(K៪oMMQ:>nn_n';w[N\TQto|uv:E7Cg qGCaQTW''ZU8G] XSfV\/0իyw?ƍii55AApakd*a~#wѣDV^_ϻ7dfL-edn4n^zzM=2)Yd#xy}V[A5TEZmeM"ST# cDRe)588f3-45\U_oz,`il jn(]H{ Gn޷xO(mvj_Zۋtu?۷t:[s@_Lq٘3~^+@eDl:DD$ _ Dt/NST xSH»sƑ2HR}u`I2&'^wD3(wmmAQw't pNr~/70[ ΂٭Y# 8_aOx&(x#eloû|499$<(^`ޤ%ln`z?""%DDB"Q jND<)@cqe7w=h回0}jG,9VR_]kp^~QQ:<^LY,&(w"a 5'"C](џI?bw` Z (DGKʻsUō5UGiI;b).ޫJ|2bnMMQCbhM"CLDO`ISjTTݞN۵43w\ `l}:};LNNa3Dŕk.a9ÏS-z_FmkOݮkK/--T]hs]ƞmN3;6)Y* ._R6PP|4/:IacT#T%gC\4g Xe0|p2́}ЫM[C&:@uQ7DA]ԑXe_jݦV;j)Zm[uz^s ph4DѸW.tJX5TM/>g 3 u۽=JϯkQV @StnK#R"zxں:]Ҏذ/ "ԋY, *7D<rfn󈈨M҂مdž'"WjV>Q/5eZɻǻ0%lCY~>%ޗr?`}aÆpX;FFYȸE>%7c۰) J[h!ZhI[)0=zDlDSBξD(uF'@з7:-mq.MneZk0n~Tgb'LȩSҙ.}qwu$>:^N?itq9Zk}NW?uC:yWFxskVlU`?"=@D dA!Z"ZLSY"@rp%庋5(w?5iZ]Wǻ/7x/^/QAռ_\yOTtTify<ѫL6͉'"ߍg4{t7zPyo#@S'~H1ݺm *|;44Ѡ Nh%ͣo-e^5l6(='x\xmcǤub?|uN7v;;P+j~yyYbp뒒ǜ~-goBlhi 9:&>`xv3Yô ağkc٘dsNus|Oqvj큮1#ZW<׍ZjwWVKOY }ADwrۉI""@*!"t;VZk1՚wY2ksg$jڿ^RSEZZg.zQXu 5Q:>}x*Vvx+J3Sw2l zhr]pa0@=cLـ̣Uts;wfd8@$˲Ccc<.klϻ':?⇨6uaGz¼?z';vEó2R|,EcVAؔM3333 !B»9=׻i>r-jO֭3Sp?DZ"lbm"64HD OnCpDUSA{nXa4,3~t_s:vQai􈩟iC~) ^EΕuzV[芶jm1N=EqmZkKhnkVɒwzKqDTKwQ!Sng8wD~o?ϻd]s&O$w@ÒHܴh]sjSmjEË}Xmȉ55Taűhl՞w3\ylR>3lbC2;b jz>zС ք=G˜uA @[mN?ΕvuiPԙTX؛:NER#CNrzmysw{kV˻JKuT̢XOrg0ԓc jTH&ˆd"FDDߟ}j""z~"heZ pUY\.I;S[rF}+S.Wz P\DCΔgZti~ъ|ٛl OhK;ֱBo g2) шdhLm7!6-S3a}UUGy{eIx8GcZэ+XL£aa<3k׵?;Ly,8?jħn=^gx:r$; w Ov:G QGDy7]/GǔYѣǬ8rěgf5hTLLƙ͛Vֶha) >%POs ;9W}}e3DD4:~/To cEJUөW^}r?Mt*s/].c602|N/݆'uSZp^cxХpU ;Hp1l6{>NQ׺F:PϹu>V#5=jųV;:׸h\;O\kZܭj5<4DeDD[]1"ʥVDDBgi H/Qu&"9&[(׊;Kޏqoz*9Oy\kUt:{V]q*C=; n|4flGC ""j`6txlQkh DDT˻ ۶m85[OmQOe=ڷ){,(.޽=uYP\\jl;|$'}wb^^ּy]u@)lR"1q}@?5g_79@DBADپmM$|U-}%z5zmK6Q4n\umxY_vwj:xu{\AnG;v>kHx =q0ws T*gWsn>V;KjXwj+kZmr4i4lO j{kZνUq>5I=M1[0'Fo@!}t #0z$LEDDP'ԾL&GL5SK'M:5 S\ xDl6i^aCytS=Ʊ_*Zazɓi:Qm@j'O]piI+չR3gLՋ:GRB t4tɓhgCɬȼMaah@\?!A=އ$|;؛%I^$w'}s_o8> ""ҝ}I""GEqcTF!O1JͤI/v:]]J֭vHvǣKSǣ:ۭG+kx 4u<C~9O@KAnzM^T~g3KZe!5ԓ/I>jWDv{<zܣsuT݁j޳M\z~vW}_<Ւ1zJϨ,]n;;p­Q eȷnFDTBDDTB_Q0CDDs:NDD}%`\:jtuXk{.V^*NG\ $9qr,tZ®U{{S)wF Q+~IrG~~۹ ]!OH62 _;v:?cytdmpn))~Do#2eTuuIBvCIxh37\en޼<ݪYD54TL$!Bh,g=:~x!a -!>:GD6by"3R(z5ob]RS":|w\(LDƻ⛂} X ˎ6?( wy]?y^,ݛλ6r͚wz$A?;^IJ~@]_E%/ @uS٫N%oEo:~J}[RH(IWeJ&7U11E \S==_i4J?zZ<ĨhZMED4˷9FW%,fNo;DDԛ‰=W~;Z&"bND-%7ϤgH 54[XHD["yտ5HTIc^]a1)N RvS^[X Qգnµ*T(= Uj\r<)2 BŘz"}.^OLC(U^_ e1AuPHݮQ{<_tKjyDGTu(duR> "=}CwFQĖ_?s^WNc_M#r&HJʧ^x;TE9]Y%/<۽D;Û~vSy *Ŝ (t5= ޕRE}awh I[_TDQy[V׉"`#%/dJ+PnECv(WyUU*Fa.=$|K{%:AT{׵DP۳7y٣\ԁA$Dq"GDDpr>{=Q<J$$h""ZM^<UeI6Wy_O'uuDD;Oj(\+.IO\9((B)0Tۈ$ W_?ay ʆ҃cu+.-9H06jֈ!]feWyW5ߑǟ^6\<Ӆ?)wфJ/goj"+Z/YџU[[1_3VEC~$oiӟd==EDoH1!AH&"ok"'ѓ" ĉhJ1+ŽcDyJчыFe(&L:5%%Er΍^bGC i;M{c[Yo޽{ m8[9zx6*vb1N?uw բ]R狋[`GM3X(]TZڕڸ:~VZjDˇgyhfbl챻sf:T\22w74)TL+`thZǠA#cc}G3(.N^"EQu\lWP2=#^iRo:wYG83eSnw]NK#b1~ m2xw4uw닍s<~b潦ߵ[&qO7޶k͚;2#33p1?ƻj,U8w?5eZmoZ ?WkeCT; .4w9 `<Д)3dYQhϞ#Gy\Zo10t|w++y Z)cO:y_n}{ׯaϵok[Mݨ?"tBk 64jIR9F#unU>*ͻUm5(AA\BCAy4DQ@ &CB7񱸸>gy^O^8x0{16wǎ>L$ˊh=hq,qfbjcmVl쭪ot=\9J5?\Lp"T1MŻ.SJ)S$b]и8Җ-7a..{.$w#PȆ˻|0u"e/=2u*s=λj;MFžuƮ8zE)yg}9).V3~J} f]c2b- SPCZx<phG_*`sZ t*)5UѓҼ)]sͻqn7(o_c7T UtҥTd>?aw 5|ΐ=rrE"]`VWjKv͔7 BV3{=D˸SGunK2iiQ_Wb21F{ySh4zKME܀e8֧Uok6kO;BoQ2X%f >ԶU+Kxw5U؀unjLuE{+h|o[^^b15{q(I:>dF/=5k&Տ:nmlyUS7tr:yw4U̻acx2@ G($WX:cD\#IV+-5U籥c9&,4$EEĉ;dYQ(-#Gx\Z?ۻufv6hZ{0k‑_&#cֳ}Oڵ'qm60doyw4vB" PhtOU*=khd"R5۹ Xgҡgfc I g{"p'x_f3Eg&(FcN&l65I;SG_MxWASVxPXԒSEv.4ѣy=[8,8 Ycc)9u[6G(p)V}y ɒTu7+Qq1cj5WP]!t:{?!5Er~zՓoޱ eVԿ?ncbxۗb7ZQHHuxn &pNнǏWԼYp܉9QQy 'Sҿ*2RO)R: ժ1%M#wj^].v|pۄU\,4U\^]_~KAޣsGbJ[;aG64vp9Ż62|6:ŻR&b{2/o=ؽw~1{/sϞ3wjy$/O7S3W7 03333 ."{X;L&"]s&OV-MSV*?>VlV=?8XN=rVu5=׭[c,@e;[S3ݵ?:t(++3zew 2Şab7RoJYZ6S8Tz|fϷmz67dgf\j "!+.=9BQd P~_I@=+ HF$܋Gjn*!Mա0)MwQRK8C7ݺijpe6訚zS<#GxW\ZIhWbռ_[WW$j9283=e&eyGDG䣢5ziXmVgBMŻ.G 0;YǫV+^Oٹ#UNT6O܎S2a@sG;8nbZrs y\!Y,]:u5w@CQºDS]f$*t5_GDd_uz11ʄhΩ9X МZ_`h97iZwxTe3I%{QPDZˮeUeume׎QED@z% dv!⺺Iܿ+rOH23yڏVii 'ID,y*l&Wq&Gm&&&|jʕ蠉'+;{`#8r"Nya`&W]J]:ObcaEu|Y8B}hqtuo܍KI--~Nc--D@to[ $V)*>4rpųUmWR}cDU6rSD7PCW^["mIp<1C|*+ zOR#*o?ZWZ#u`}98_2|8@Dr%\ X]d)lBC1r$(CD|+n),\J#ej!-!Xt @t;teL11t:Kg̚Wj/QMM(VM X 7R:7U[Bk:Tyڵcu7(`uҲ;od Hk³ϦB/:۱{Yczͪw3u>5}}(4ttTWGtwQ_/Q,U5r|l)%%U NMLŶ'3a@t= B_LD4>c㒓9.";VѯeY:ͱygЪEpa$i? _˲A.?8GHyg=1cFp<5!?x9|Ka }S=gL= IˇeY98c@M:)Sh|,pԶm`tͼ~3s4u"讬-! nHuuC`@ e[O.'&VͮP܆w?%}j @-j""/ȿ[ܳ}kENZlQO <hH#;_|A[ӑipTODD4^WN&"K,~"Igu~T퇡u릔PrSM0h,w5kŻ%wOyY}`(2OEu|X܁^^cWr@ [=/ ]||7] .eAK;F8֩ݎEEN5\2>937F;ONZ?$g8UVDC UVR?BZnoZjw4Pwn\\ >ovD+/--7m}Msj7Ն_? >!H ""қD?/LBRI<9F$BD)DQtdKmޏmDDCh|jgy(D BPtzHi_ٌ6lk@DcGVފVWQVe_:jl_%%55|ԟN`vY5Q5d߆$WWSn!~(UU!u7n{ӱfIXg}{g<*B8OxuDzz y}$0zwCDD.bj&@tHę,!@ akO<5q׫kս;;fNC**CDiu"S\e=׳Nu׾eѭ: Dn4ProV;gE">iDkXv۶۷g]^YMMٶ{StP?CPo ˩9ب,!%>?'WUja||MjӔ|noD{@BWy7 M:|o"&#?@|sjqir*|y~7הWZ ;11pA&o|FlxX5jN\Rl,"Xh"/4VO S O蓭[YR;"$$O4e~i۶ek [3ԕrY: ~[>o\cceS޸F"D?d +*~V]WM sZX@4, w vUӷ%C?͗ Rò4v{e i:}O8˖U]^9.㛲Z VkeEXOa) r29OʩI^n6Yݳ\{ZBo;}:e"=jd4јpli^oVZ駺\ņ -IK$p\ys 11DuHtDD4eFtN]!?_hV%5/V Xr Æɲ,2sq$ΥV(`ujmݹE~NEmA.g>nuu9֋M_J{;q/?8xyMך""+ THuW|cV_06[ݭqqu6o( ղ=pb` yxFb:ri}N'"l@$ɋ8q&nj.1$xZzSjSԾ YѦ&ppzA`'R+n7F{!?~yvj[~}G6X ,\n67UXT:ZA~y""+֩xn*i:ǐfXS^=!Z@u*u*/:'R%Jv"'ɔAD.!W[NZ+gվYuN\\H?l֥VkpE.L_IW"Zv7~ח>TCU-!SN&=.}qB-URcsQhpkk]X&Qhm_j\7k4aǟ[۾la6&@> 6VSia\: D#tn4!cyJEw l7n9IIb$IԮ)TTB1?N;S>O}8,Jtjm#2yJ}1Xfڲl5/qq 8Ձto@O%+/g mCKVg!5zu28oO΋-Mxb'fph*|yWWyla&rf"&_toUauc06[8#Yxlj$hVL~*JO}9WYu.AqiҶIX{wQсSt#M(/gAgBk3(hRe`ϋo޺`:NN٪x~kllS}mM6[&2C-4ַ En[".bYM Z6ٷS+e o>ʞG9T?ƾh4۹ϱJ`[Vgk7` 8"%11tLtTg4*;ONixjt69ҫ! d׬*Y,})6`"oДk S^[uAX]DOg&Eײ`( _ZZR: @>7ytz_e>S\.".uF,F_u| d wɂtJ Xju P顋lJ(`k{P5: ?׻vR"@pȑ4hp`Y١CD~0Ʀ9/w;>{; #_c>Ny>v7{YDD0=ZUZ5Znm|St]іVggl-_Bb\XAؽ{l _Mwh1Ǖbu3tɹb]/}xsyfL b3 522x>">뜕/lk@oJRY8.XR h]gICA`;w:@8e/&iDp*/1 z2I1v۫JQF>=O "R[9':p :]bb5d6?|s㇘s=&pܠX'}N9O9XS6i6[(#d wewnnq[{۹%1qh]A47듵 aOԜ Y52y.3ǵHm8tz=|:T|>u$yx#Ij?_U8nFDS4,5E17n:Z8lǏǥlAeY)))*bsbb ]oiaz&˷Y~olO2UKвG<_lޔn2UPZkնmXbi2><+@Z- En[zEMT|[eLM'tfrCq͖Tbl9tye0:ƽLWlzG?4,b*z-{qOZv[sm/Oyy~ܼLxQh[BQ+} Xuf4un ҴÕP:V(`y ?hP^^[[]Mtb31/{Y@ .hTJ:tIdr:i;]DDW+ZӝO^7T\a:qY.}KH|^xdD+) , ӪϪ"&Xg+pypA ,ۮjBm67ǒ^B_NJPR`pk$YƹݖF 7"+ބ{gNsEpXs$$&Q"b":i59KQ}h%4RYHlD09爢: wm3s]z3׭Wi-xKxٰa,r,w@w|fCj*])&={+.N}sVTu'•RNܡ@-˧,)ljŻD!17tW _ՎXʚ5jcbFKyd[CK_{o:tF}/xU*:,1ҥٛ:g&pjffpp!Q秦NhN"NYE=OA St\ʓK>N{~ ֹ Ds)6[ uYG>:VSw OsLtG{Q/g>55R =[dy)wv8Lt:rJDD$h* ;4[mJ7f4lK[Y,-;ږ-+][oXnsYne}Kx)^=_-xH?l~|-}&77[ͶQsa*}_>e~ƸO^tC/^o+[cIׯ3sOOrGQ#4DɴJn.cڗϜ.@ϖqj~tWrUJ4 XzÆ< XCq]GVa\.9@dj[e%j$\~d"%7;$}өZ:;>F?|"_}>(&5ln^~z:2tye0:DK2 t_|'ͱO}&vfOhZ˳^Y6L5KuDtO'"ä'ӉH%?I;mzow&&6i:OƌO_sjp(9B!:YV\9Wb&,ݸC>uhCqܸ&Ygu*طhL5;iJzbӿC,J>[[ D-n&mDmʄ-ʄOfͮG0[]_=o4蜗-6%ЭhWWYDL8Q*zwy}B|;^Р{R~(I@)"~ .tBoux/?Z6]kYG&T]e|AQV"*Z6yuͥw)lDn,Q+|a5Yۼ~F";499u)\K>׍P]3gOwoy@wCŝ<,Y4֖=9(OOshU&l%LJju:)n!"4e-M'x&i4쉍FgM)%Wkƻ̮KFǹofsw.> [77׻SJ痘l6i_\pv`ђ#/D(WY I4:Ofhڈ{ x@H]IC#BOEk5}`6S)k:D/=~7g4Hy ߃֯o3u "*/&r:=\Yjwҏf*+i-aUR$ә~_ǁ4=r|Sm?ֵg49ۖ+ܢkq2vXa;Dҕ8&^y"Vt)݊-ooq5-N:$0LDLr,D~q--,D,DM"}q:&Sɺ%8o աq~agܮ.6U|on-Ӎ >Y?fi{>?ODz" klu 'YZOߓ\*93EEuF+`E卥Wl.G yFOwՠADԟuhWG(8n=7仉hTo&_Y- ]I?o X{q+=Dg,Mx7M eGޱ!G lMcKyFc[뵶gLwnw_h bǞC'Nó⦭z}ӿ y]j1c%4}+Qrr+m6p)IRW JaIj u:ݻ%I'ڼY "K)ro+]n(;jnyb1k)ScşͿ͒$Yc u#_|Xpo~O7̸3U~˧u{qeϧC\  "ODDK(GK?"}DVt꧱lNONny91ba'R.Qrr? k Wʛjqպ*"8rګs,;%&Zsexc#XЏ=60h|7]?:()))*bs?ńN{q+ s$1LXDD)wQS,P^*Ϲ680>ryھ0[݉9F{5ݣ<=yB(pxW"hOQL7hW~MFYF暟b&$?spK-Q_I."zFQ -g}~'Κ8S@4k|<߷O A-*^KD3(uPwc8#Y*+X68~|XO`8*Xz P3s>D: @㡫Z_6_|f"מ\1Zmsc]ۗCk+QyE' G<+v3?{^m }:Or-9ʍt\5b2kMMDk(w l6MY='ŧ)%C+rK[cb \K8]K$OS;7\;& ́ߙ6uu~ִ2c40] ?_,ԗJd^:򲝋ѧ?e$a]vBSB3Ás}hwZuKKP䓕/?RPV]FbXϖ4ޢGQ5S cRu ***++-%$Y$i"ctҿij""s,m584ޣ""zn!mG>`)s_rk~<)Q/>Jgѯ.|j*|>S@ta8ss#_b1}Dci2%"@EDd#t]zy͗H=sR|nlGWއ]zQWa\R:@ )|F]u5(unL{S|r.W>W&rK^$G\z4Dd$h>exhN-ηt:w}zXw~{P ܯt$e2A_O Ctps0=C u3FisOX9hq\8Lt=:]Sĉmhz.4*+|3و^]u nkV[qA}~8dju{Ƚ'^F0Ks(ԿB} `|M C F߯\Y 9pn`T ̟M 2=@EĩX":^ǎEyIDDt*"aP [^[kOMu-ܯ+kc X,+ϷN:`̈(`s ҿ k(`,:,KߏG$_LײNg[Q}~dayCOX_ODYggIa|0h&={O$3)'"%fO\D탹DDN2R3QpxPN<^ h9u-lw,}y\M(tFʗy^#j|@w,x>LE{Sk}^:6z xD=%%uՂKjkhZZƍS&͝''UTHF:SZjC11)Ŀ$_p.KJ~a5.B!ډm~ݨ@@Llм  gƓobBo L S7CΨ k;tY""h""^P'K%)~/;w ZQ={WT@!:Mfh)@l6pW/q~},*: _~es5lDcTΤ R^ q'DǎDD jQ~gGhµRpl4 d%! V^_H.N㨖>C2Q.ωh/>LD$ O8u=]u'x+i"O/O<3B@FBh3CB5H&, ܥ\CFުCRE6z,ԭOs^uFJtMZms3+"L~<}^_YIt=@^D+WB&t]/J*k_29ҮΠ蛙$m_ j 5~ͥ}vX 鴚uΫӕq />{4ݮB`иTl _`0b$%It5}BϧuDDyQ5 FDD4=Dd2CD/ѩt2/g=P\:ig=rr5Ç+"<^jnu6}C:Y@ݴ[RYKe>,c5?Nn%'~:WT8p,PWkH{i4˸e9g" 1U1=~p X81߹dٶܲtoR~z˫~^x/^(Hѫ#"JыL"DDPxu[{ 'M@].{E10+FO ~ CE1hxLA =*kCOD1xqbQ JH1 n ܀#D ]%  K`A{ÏJP=BUF#]MQWO=y ݬSu[ml<嗃8Npt){og3u՝9C/?tYkqQI>D9%s_|?}Q,-x" $8z8"r8*9joKN-$Φoh L0)SDb6bQq*D!KA@y [ ?T;Ygڦ"9URN愜`" dIr `ɠLJ V[&R [DDKODWIDDt9~"?D .S4N&l0UDD #oHCPK aMA " //b(лn6-$(_-q\Gq(O5RDž. 5ʑ2 y>|O烖E 79.~3K[<BMȽ+Lr\"}A|~ik8[obji HwSK:?wg(=w}&_Ozx5nW,]VkIj0:U[~[-ܭ[ 7I)R1SBDD7ӭDDd'"EDD|";}Nos\"o%FWSR -s;87LZtϐ!,6Q{%tF_67*S>{&- H[[⬬t&G%%s@ϳm߮ےG]:Mfª`Z,NP?A Jw}\qͦdwV.'o^{!5WQ;h<](S: N9#vݞ]M i7'2 bï?1z}[t$5.e}k:/hvSEu=wݥ&$hݺp`ey;޲,?g4N|?o(j*oDy"5p2J헤dg+E%IMs+.kL_jQ uMCy?:Iw#sS2=\{ O. O\`0ПNo:(*/g 2 隿|:@vۺW%_bKy3F^eE`tuuD Ny̓gڧXc]^XcIUwXSB`|6g7ofcԇ?Yҷ/WG]Fr2}Z-<=]}Dp\ jJɧq9\q @3y;M99tV\DžG<<uZ'Ͽߏ[X k'{Eq{s=de)$h$㫠@6w5ξGWr]~s XqN>uP` tJuhh-!W:OguNt4|8{D^=&Օ畖lsZBS8~^fd{B~eu^=YeYe+IXp'k#}Y=ťO2 XѢ ,P+..dyطCϼ,vb?E(:tAx&NL>WnWJ ҫ! |?ssڅ@򥝏mc#R,,hX@+ەj*ۀt4{\i0pK٬ XgqIs,P$F=~D܍x-@תƆ+*IIa'R6et/F[fi:oe{6m/(l[.e'R#F(9NͅPMk>B :.|>U=M񞴆={bknv8Z[v%+'uh];VɑwE&g eE]f&Nvg#.QA'4ߒؽ?xpz }8G'ZΚWZgVq(`@q|ҷ/$ȗwb`()+P! z( ,/mvI'_]}F: o兦{pOU^X';/˲,GYzSѣYEIIU XVjS_h:gm<5սhd'R+N'Q\9 w22y%[߯y|=l+&deo^ idtQlk#h-~?h˨ up}HoKj͜)mmDi"3ځfD?n>]kj5ʙuj6%%y#O'Bh?I* Xʳѻwە:uH/.Qb sak.ߎUьy!RI~,3/]|1'de)Duko4t(1@qpe% XV}rb&_@|"Jw|qh33Y牔LMrpbM&j.IoK\u0}z8b֝D[^ DsɄV+ǩy2!m0-u8J.SS^{_^D@3x2@mګYY< Nq3^DN:^x3'un X@.m Xpږ5>}+ijYԴiF׫ sN睧sj/wpԗ"O5K+y^E>-% Pȅ#MOd=ݮE:u^֖i:ƐfXGPkZ"noQ@W2aOVS&uT%ͬ@{&;_;C-M&"I"4INi:/?_6-m[{(*;hEf&K+`qk*yLbHW@ϔrwʓ54q'Y8q//;|IrB<=^uu:Uݫۏ0ykQo1~7l:DZh9yFtjaSkKAi1UQS +ieFUBc4L))tee55X=j| i9V@ϳ|ئkoU䫙3Z5c@F8OYܖs\+/;;<:̇s8u:c&Rh K߾N5ז}t|8]vum X;s(;gwq0Yg WÁ:pRV2E+\Ku{w[f&'aEmO5:O yo_WsQbc )S? X98w)wEm XrKRC+ZTUձN1uB2z8`׽p,?k@luHM.N'VK$ˬ@OѾsl:t7p7Y:UӛkС sPZ\#GW|@ @bN1żjkkJfIbDYoG+ڗMp%%q\(Dt)N+97-oWlu8H~wFkpвٔ0&"&Z@w ?468l6y4W: &_(N`=ݦE%2׿?=]MMCC],˲)mnf9NZi:ON>Y)q 4SM&mmSDNz[wt];|ͭ[é@eh9uFtt,GY+j&<B\{} XDce 22PctW͜)X$q(Dg;:tܚ)-.uG%%Ʋ*4S+`uy;^n6o+eu 2iMMsomox9ӇuH%$p\8_<ihI-'+[ԪyLuw2@O}OHLl\NIN:I< X8y><8RmJ«`(qM㝏ԯ} TX=-Q1hɶ+V P5Hy50凸-܋IXj]dwUBQt8X8qڟde)E,Hmt^DN $*B\/)8`=2uI 3|=džv[yD風IC=p\ @4p |DnŇ.;xJFoy~A`[s֛t}3 KOg'R a%\j]EXǾ  rһ(`E ~55447|FڤKϋngxۑU@BBӳ- ƲNSVpa4u" Bogk4ˮߴnE쫾km?fgo^ i[9S0z],Jd/ݼ̬,yЖLc E`zKy觟a護Ah@ !xw cc֭ "X*!a8ڔΫϩjA "'FT9:K#Bo_CM@MMc# X6*Sm?4ukkmͥAt&:MǵWƦONJ"Py%ӇA YhXm-Nvvxtxex&AJQ8j'4%Կg0 R:)54N>Y^i;p@t:7bcVRW~ Ur r]}Fcee|0VBwQP~?:ͱٱ4.IIwI7 :MT;["簾|9zpXaFngcRKONnk͉̓g:nZY駋ME>ޝ:UBw;Sd0n޽Y艾 w!'GAE3s(b%~@b"^oz:ѲeU;W/ ,ӽތ W&fBUZ\i4uP#~, Ꟁ]vMMGXj'㝄Pk[]:GgaEt^"TPvl9zi4/q=6'uHiJj4FͫY!:ʲ ]}ϗBzJ~xCYU׿|{J j-`W~Æk&<>rwEZڇܳTkuu͍StrinF޸1pu2؝m{Ztgq a'R6( 1QviN*rK}s^:@OeMkW8ީ}em|ɘSVUUioG҃zmٲe˖- <"&W+Ymllh`c,}i.WGֻj~( ۾볱֬Rtz1CYنEН}+_˖oLyz },u`A xk)E_bcYQ&`i4|s`9'S vY牔=(˲,<2;f ,P'at?\i.і yPE}E(D-t7.n7Q\ǩy̦w,T@:Zke^XTNDÇ<&ZBWٿ_t: UוՄUU$ӀZ23չ`T rb"T]kԒݻn$=ttMMXAj?ww;zri;ba'RgT]P-)SDd&r̓g^ank:`=5!uOnb.35Kq8X׃Ծ"@G竳USz%(`@~~J R]^9G$ɲ$5445N15W~}pY'hmWl\D-ӧwU\?w۰3+u$xUzrgѢ=wKW1矯Ѩp ѥNEhŊPhd}m8lJ! X򯶳Z-|'=?&`8уctͭDP(+QAme.Mu"eXkp4TVdӇAQLe%א!}DiL $Ng)+%I&SyhnIRo3h:@w aAtihQ(E:yy꜀ծJ$pr,˲2R]Tw@NMҫv v{s3( 'D|Ii:OC+%kv6Ճ}ݻ95Ps(\DGū f&rU6ɥ^׷yyDn,e @WZ0ZY X Nªjl:~ X hLOMeTSRppI܌ yzFL}}ؙ]eٛRxa!NL.3<,9udO(}23Y牔ŢJ'tJYh6m i"WR"I:.6)(yu{e{jM+͕N4K꟒:FGƦGY뛛Y>c'HwNnmph@)"]NrE%kW;hH3@qԩ^V .>wM}W,mMw̙W K]ߊIX"?_+}CƲ*T 5IkY(j9S3 X5445I,K4p៺:7#]l5^+օpܶ]N<$ pצLQVw $fN٬sDEיonXԨQ{DeB!UTT Xp첳(s \ٜl69@}Gr$9:uc&/`khhiinfcťpHo#~szW9L(n7QLR8.&;V=Q)e>-MYFKoz'_P ]o`0&utV228.d*V7nME :N]jɲ,˲zO%g\Lbngc''i~@~ pV 6M+:W.nLyIP[V尫hz/<% :K\.ih/()I9z B踂AP~ͯ7܀D>ߊzbXE7qXknnmmmec&.U!K;Ʋ){|eNƍ(1B!i"do99\iÒֽ\Az5Qr3WZ…:S_/ˢV+j,`ٟsݪX<󏓝RMr2J=3rXkjr8ZZX蘔39(`z-n|y\y`[ZztJǖW7yU<4I\."Y)bPN j^ݹҕ_p^)wqz_n.UX>4a).$Lcվ:6(fG6ZkQoJᮗeOIj*=D~05,qgn6-mk#ONqkrw [~'jsNUQhD(5X夵"6@R_r\@[⊴4y"Ǝ\ ]eǎpX':pgM:xg^yyՏ7\R Xq@&}֩ IwbN17CSU<[[P5lT@ӯ ~?Q &NTVLDj$yOֱXE=ek+>ɑޖb+Ի\PD: t| Ĺ8%%(j_3 'N~JmjooTl#EPe9gGF}d,֚V):&1:stw7>S\yͧ=%SX(,k JsEb&r7JL,{Ҳ)8\ Vx4O~ֿq+99DJS~NklY(d6NsJ\DuP|e5~2Z:H6)-/MJbD}K~U. B֚LIZ0!@= Bo*y~ǘb>mV X=@cQbnw8):&9"k fe`ˬ&&TtUihPArr9ݶde^TJ6eŕNYwcn.5kFUdYY`駡 ѿP EɄjsZBdszL4ELOg &P\ Xkcw5lӧk4aB@4BV}3vl:@Wհ>o*b{f'R}|0H4j{@wq$=%IcBUVRgf_aARRa|<$ XLhXZ=]KӉ>^&[ObҪ!(4V.?S\>+=CGԷWc(EQ9V?ݾc!t/[{\yPA"-WNKs}/z[(8Qn"U)zt> cbB!"To%%Ǯ@'C{_%0 g8: Ŝ]ѻV}"4&Anގk ޔvu> .P)^F&n7Qb"DžBDnc;Ssr;DfU;Yfa%tIR W_| İN:"?_=U;"c'WBjٔފ({HNfkmmk-P7,5֧m`1CQ5k_ޢUaf;X,[㉉tDT(.&T?^XTDAxcU55|=#zR6:'Xz Xdd{۵ݵ=6u,y@KOT,P;QUcbjbVE#y%85NNU Xj_m:@G,yakrsվIblQlme A,cEE^:M~:U}誻,8yv_UQ[wlXC (ytV:W=:GgbE@P& #jeOy*= <6A1YYDdRMV*ղ_ DbIhl8yyU}. 6Z[ X&Ϡ,Z[<z>]'ˉ&o5j[ʟ.{pLy"eDg% LbQ\ykӇueM'86#÷4 .` Qld0(s5׫iRPt]Eu_ڳtXFnUƇ6}>}}塐Dd˲ N>(`AG|0Hߵ/jb!;yT:5qz dt|z)f:_^j oﳷ5cCU=ɴic7Z3 ,9y+g 5u n. PN:N85>?xaA;0ksZje(`pݘ'jak.O,D?mə:GgvB@O0x |j5k}vɿz!#.hl8w>}X牔FM, ˲VKm[8l0N^ŒtZW.iq4 Xp<(?1[pBYzΖo\w Bz@T3 X=ܧxgz.}J.~.#uH%$p\8Lt晢^eu')F=7XS33ۡ4y"5uF֦LNeiX0Z3Y,DmmDñRkԶoOx պHN( ˍ4eYe9G]ov4@XeA̼kIsY'5[v3WdfWб:U)p"N͔)IժwWm5Sv[^e#R1CNi,iԯ j;y";h8ޘy@=j%rQW%\:GOp\xjty҅1`D'UZWN͘Li_56n(ɡ9/%ba<[i'$&6i}^UI',^/QF:'@t`0&ZQ$iSZzQI>eC? >.cs:nIwX|(]|[ɧMM`uiԽPAEm[=2+uY=5Y-T+,h)Psk^Q$ad զ4p>L|/{u,_mgkk BP:!?=6WjpJ[\ljZ*tjyw#͕wN]ݩ/qhXz:3K:]_ustZzMj*;|(DtIIw]l$!YD#t:"I"GxZVגu|^J6UVqη_"8K:w򸉛Cğձ^_>T eSEĿ]ȝ,Q aPaX[ yGO ->V, X49qqu Ԣio [z~;ơ\kg2}܉7;uz کq.][CjemGѿ<ُg?vp||׹铻._n̿W%#n1~t|'o@!7Bƈ'q@D|b'?En~6.ێݥpJZ:WGAY&b>>H?>_2/Wq}{q)ߎ*5:cr F{p)x=~ё-tcZg>u̷7NqOp_q2|\١a@$OҸN|#nr d/έ2"mw|UvLgvg~:(M3?Hy;|_镣C_ w:1ӾSd '&NOB!5k Ceg]my/@ ǽ̋|i' ws{7pvȻ{w@ VG~/ߋ۩ǿC!vGmݫ9r;c.?=k>VOyb#9N&ki=]DDhr"Ƞn|;Hk6U׽lr|G|Ӈ1qf`0'o?2yÑg6ikBsow'tV3i8'^mu= I&ϓ>Sڙ3Ud8Q }a=5FHN9JϪr FBLB$D+VBf34=Om,k4T l|utvZۼz}w7y9wȯ h4q,wX+vpgFƎ IOhbc=\-w: …}1Y'8j'˲,D^Npl5PFt|PSE=%ʉکSq8~V^,P .\#\ #cU/xeI- D*-C!1cf# x[tTӅ-KF?>8 [e:fSs鐈袋ZԼ …|n _u5Njm16 XгHgK%t9Wn6\j Ղ:_ԪDυQS ijC9uk_AB?q&_TPCkfM'/RIBeEϫ{ ti46_7쵚> ,y :53\qRU0zVt^̟ y(D:YE~ zy3M)_r=nv;V\tGWC|X8{pkz/x [s_@%VRKOw|sOb2ܯ wp%j XLa.,|@@Mh虄!_pN4SMse]Gi4ʉ /E5,9de2^*ܘ"yu6+BK@X?_N"Ըb ӧBk\s۹1'c*UUpy^}}XE9]%2Ibh nj钔4fֹE(#|\=颦ōrŚz&np| Xp5綽f^V)E(.ai OƻuOxh|&(*[偲6UXS. -RA~87?Co:%_Vw wQ,kSZsVڤFr#M2k*Wֶј+|7`ߧj~H=`pp;'@]aӇ sE] 5u PiӔ:j_UZBpܹw;}IUmNmwe A*(HE1Ek4=%6 ]TT@@S? ޿.>޻Ι9>qcG|c}wq3^3F{{F2~%&XAȫOg?mk}rL:=E>4QY\D,)Fsͱڟx p$h s*]m%><'bZn uaSGȉk&`?9C縹kIbnqZ"u`b!]Q$|hvZA? o`|E)= X:Xo}_KRQmBm~(|DK@85J{{FsM@Ϳli15ҕZX'N~EA x!.D@ \`mDz+ӛY' B8zNlڔ}h: jXIX I+iv4 Z>#I4pϒ³fɲ: D@qgnUvg'%UiJrZ_n9g➍[TULt^X(<n~Uѡ<=88K"ȡhO&ӷźyæ%D :|(SX,EzQmϷMjT khL*IFADQX ^X[I J'ToW(TC^]7A s7tv&=p+MnwݡDUVX(I^IiG Mv y,"a41l X XO| DYuhmkwӜhO>Β.)`0 \[Pyi>;dj.k=y庴'ˍ׶],İ 8}$y<@صKUV~n%t&mcC)Zt=.>nbIX%%r3"*xgSklLF瞕sQo,_O0YSE,wB2/KZ~ |qj6<AӈN?]Ni`0Zdr8PywÓ 3}PS_l|K@_+k2c'?O^VRx)nT ~q>~ˆXgb*¶=;C uӲ&q"#bD' C+U4M;+@xWoYa/?$u`͛'QLQ823'<=M׷]ښssKZȲQZr^$߹pDQN˯`w7:G$o+`Dt:^WEE|jU>*-\nw=ShVbi7j21XaD!\_{ xj|)ʰt).@xX#mF*W4݌IXC5x{f{}Sd"JIs%uX"BaabX(G@;)ߑr]gxkKaLlֶxuy#r$pv #ah>ZYEUUu Uljzequh;V{{F9D@n3V'6|\< X([sfLu*.6YHF%gElpXG}`#.LtUw7p .I< haksL`A1響{Bo%=^H>sp3wN/Ÿh? 76͉>t8M&'@1g3ΐeu,pbX=kkܭy&SSGGNhy5t |D& +u}]o::ˎ_%TP w "0on^ݹ,P޷w_o1(`2OAM408 &Ѧ] n<)b駅 M&j}D"QF{EjͿlȌU4Eu.4&4lߊBiDP ڪL'bNB-M~^feWޘV&`]KHx|K@ SyjrAF?7x((`?)tp)D@5nj-.e,YT_$՞h.&u0To՘_E~o>tYv) T֬h߆nοCxK,ţ 9/+`\DHT_o X&Þ&k'UG<@7okP:d4g Mu'OkaO,;wpR $,͓eФ^U-hSۈU|j3Us &S$iFj:EJTUm6'\ޓj2Ea#9>c^Xfq)!P(*2VF"k:׶0=T- 'Hi&`r+XVt]B,LXA u+LAhm^ۍédxx1Su]׉Fy JjJ:,Yb"ʕ~|<7z+:!-+ؗ GTQvൾE: X! *a<ϯ:25YC*i$1X*VO}j^>jMyRG?-\h29 /O`4e(D99NM/#{Yg$ ؟Tm+X,;T'L0NCѡWgy|fgN@D$Ejn<97 pSx,`:wowHjjӺՃS,He23ϔeu9wbi=M\K'8lPhCdP k~|<9y3 =sU__Tӌ:x*v_n X$|euYJi?0])/f n]i$&2D~i%K.`T\_7fX|<O )~BeF z{ֆ ~?sdlڐO~s&߄SE(?EQ~ݧ\L;WN"_5Ωmc7tQY-&~ l(TÑwY,Di㛒SNuR=$)C)Zt=nk̋7xEt4ee"Z_lpcF^psO[.Cޢ݂|$Qdp;!ܚۖzPŘ[L rQU%]owz>w9]wL57ǫ_\^L{zPZgbFܔZ:@%6ٻ+avRēt=MZRW8G|ʤ7^^KAd! kcJZU{g6O$(3Ә0񾊐Hu+jTLyn}7QW%?~!8.DA̒9dFS]jk5d"r@_ .<ru{TVo ҿ=7ezYj3PUy3Ńyqa:`%˘_-\eL&M('Gx>K\SqqD^}/4nl͟EG^ݵf9dIr:PY^Q<";r6vt9b4p xX/M3G-m|NRBڷb& nrn:AQ|xANy4tJobxa @ ֚o(IXA0( ?byw@Fq60 v]$o4hvM":pe8,Zd29{Ejyfc'\6VrbL1 w46aEߔ„9ɯ7+?Dc"xM[i02ƶ ?4JIdȬ7 UEL"r3`D~0ش<ֶmͦ+z,1r 8&^m\ݸQQbbu]>Y3pecҥfsOQBQ/.,MMŨںR6: _(yI6W]DDImSP ׺ETQ) i'9\_X](*-(ܲW%%F/EQQl6A4VX*E툜"(@_$g^ӓ[{T$rp(S#Ŋ(|`7>_?KN~݅ZN/Y"`H~-TU}pto|NjQTL"%G]>߰.jkc{WxkaSo›(`"IXA<9>cci>;db'X'lLJI1(J-[f|SQbcC?91>%&]xaoov@(-^lL╶C@_+m+jM,Au4 Ҽ?>!tt?ȘT+[Y'$m~+R]Xe:ϻ4Fⵃ^F(` DI,@Z/~a%tZ|OX?M[<F>䫀bcR@(Y].W^V58f `moE~Vv}ߩʲId ϏK/(qqD~?+W o:;b(Fds 毀p+}-73L&=~\EE!:UZ^Ю734~JIQT&1ih<9*7nXZkJya+5s :D5k^=(n>|}GmE[[-ڵk{RƓOII&{ D2v(\|yj(QeH)|ɄWj+WF>1lBȟ| 'zcw`r)@_ef W[֏0 3r[T36)s[uum{0Kw/ [ B%ҘLNwN?. V>t2Y,ޑC5K].$A`"/D4ό$,I5N=[@ȟiCcߊf\x7ONi R46,7o8sM.ӯR՘Vc!rwgMc:vuK,SOenZJQ"Bm`ݘ0h߫z es2]k/no26Xuy(TChD}|͈S鍸pw]W7+,Q4W|"ly~p P%hm)zכ|k܅Z[ǷeTMͤeשׁʿ397؛;NF|Jĵȅ͉MQW5ule ܥI>?򦦥iW#(^ٷ?O 6G_/'?vbt yHA;"mD?#],Tj=4˟]A( W }[>Wp،}*;BX7Qe12X~E/ ;ϵxHD/y$\۷'׊H"?͠Sv_gZЇC']+G?|?Y;>Fšk >=׽:iMO$kŲ:D ׸ȱaI֮5&a'I8 h1C+/yӺ]o׉yy}?K/҃'|@xz5PcjF)<8q*+PxGxo'}+~M Wّmک`@(:xP׍)#+ԡ/$h&vg|W:Ody KCQ) |,J_aq\zk%L|c? _k+<'O! iPyk[sj~҈h-/ hxQDBeE!1XwT5&h ]ok#ٌI3HN6&p$\D6*s* ӵ/c4.!-y(A9p41d}IGҥ|OV(T_(<Mzy,zzn*-ω~+.=i4Q+esڶ>ڙOuQ$jj"e ")VX(KX6,֦ag4kVl I6P[VKZ̓#b0yeiF 4.JZ.V+[',IN硉Xw_߳V~&b !V4VnncOup5Bύ?[@^ogi UQQTҼ*ngBOFla_ (Ta:`gZ,|"R>;nWҗWgf:vLqY3d$3Xk2.ءiQQDf2 8Ct晲$3;xoHJbt`6ew :OŽYdW' TݻU-Y;SvW#;;;Y W)M5-] 0 #&HU22Ǖկ4Pj0|h1MC; HcZ,xNZ*ˬs+X'~ږ};2&e`J`5߻*`Z1ҥR֛?}s0J)rw7D@Xƽ9[L_&ޕ6uFQ$9_mM=L&\M0됿tC$Ej6;cY! "<:`o*nAF< \;V{{YH[KtE7[Q]ccPAƍ$w->P5tKtB_ z_/g'Xh.5p[8eˬd)oSyok؜y{/\ӧKC)~?4)zB?1syUee![ըiF7&FR}LK>,|vV)l^J8ZT&`A| G1 OY+,OAӈΕeLʀPٳGӬV5m0~?57g!INm^mWυqvYca!U\l2jjAA Z6ٻzF)=M 8xppᵀpvuv;:1tg)`N"M Vł;;E^?}'#zꋛ޿{ꢢX ܹt}A˪U(mڤDgթJ:M"7ZRSK_M8 aee APO$u;w. #MMj堿2c<Z/o9[i)&`A bL2V򦢵Q ,H"O%0*`EŞj6^'noNoF_s Բe|tI{) _m؀&S$/CxZgbNi`@ݟ8?e)JJ.8"Ci9i# XD~#VPhNp Bq/)+6Պ 7.< Xve;bbj :Oƌ1N(%@X^Qbb<"u>dE{(z/ Xq iDqN'<eN7;x/0Xzm~TA7,[f2uwNfȘjƅ]t7B,\hL<{ro{q[<ڟy_,%:#X".QJ ֭cc^ *F@eeWM' {QztV"n]$f+*Euymv^j?^!@$e,Jh]xj"a84l65*H7 08r=@8E$\Qjgf2)X11Z3ΐeLʀPٹSUV2L8u8) R,\h<& j]6hޏ۹yW P Ըf| 7 u}wϼuH1|\y:;YXE}7| X XE }3RϧVIEQ$Zfp^S r7NLj{:3l͓e(* ^VRLyk"t;{ IJU%:IrY ^Uͭ8׺֚Gm32X 4I<i R|l&7Wx~5b'RЇjww:Oa!GQ(<†_p+PC6 IX,.TɖSwRƒ%&sCtuI(JL 41.>_:?!} 7{Mz?[?Pߥ?*Qq "P}c;R9"u|kMKwzyPM#JOsoեԯB k,K^H_:`;ǷΕ/V ToVVkxI%1¸ ֯ccx;k^e IrRR@ųߖk~B_;W)%_y)=+Cb!4JBUeOfc&xquN>瘻,jjb'RO+.9+Dܙ_׶|"m}s< mc v116[t4y>ض)(u]o!Ų}P$ ή]jUT:@Ig]Q޽7.nǦREɡ߹͵99zS<'J3U JPX8+ ߅~1vq/+H$5=d_RL&**^)ytjx~f̞[boaR92} Xaʫ^ zo $ie(c'X y/۷kZTQy9V ĺu1PXxGӾ~ckz'T}?=*^9 Eӌ7y.TK6i`' sd9VׯNRTS$䒆Ox#a s\ev,>}7塀Ś]$`cW[n2Ļї#~_/ZdLZ0Bej 7#c\|Nj^uvLx%9~jjwƿ1|Bx lh0VjK 7֦-Lt ~BC V@I XwEEȾjWWUͧ1P&Sw7)sc^IT5:P s]ة))%9wWEm7~|Knw/9֭ETS&4GU_ׯ7&ő-4>svq..{$(\ߓǥ$ozҬXr/J寀E$ID--(C9gkݙ^!WLt;|]K`!kWw٬jqڗ<߃/Mo'&fc @(^(o[(`& K4l x0JޒJ+gS2/!qU{yIIk߯ω>@Qbb::t]X u+x~[rWW ()4~VTX׍w.9~2 G5 U2=):kVyI{'KbRN[qOfc&UWw(i R,Zd29SsRo$uoҷddm*e!Vy|pƈKNun=󺻅bj@_9+JkBwtv&V_OM3h#y~˷(j%eY:wLr(`I }=mO;)cTIr uk+Pk#9ɈdOwݵܟ.J;tW;5W_%<{,;@ukUJg焓rut3Ere&^a|+=KJP7邠(__?h3x"-c%$aXS  l)m\'eLiFjZ*7VD9 /)ɸ`8c,W~i]b͙t<+$oV~^qz^r!ˬ+Jb0׌9otjQi)2R.IU%%_"{3Q:N٭;=5'471a!n}7 XG{grY_ZH_l\X?dc@(lެQQD o_Q{=U+@W.zH_+'5u;,#xlmƲN:jyt$+;+`UU^Lzua .q<x Uߨ.|m F8 uX)y(4@ne2E"cի#cx)iskZc$@(x$\D))| 6~ߺo0lB_ ڮٵ+%-{f~M$!~XiCD+:ycy~Lyf8r+`kea,8%˿Z+4VU Wptp.V<?a91c,#a￝ Q4 W˖aRNs1jfUX ^Ҟ/twW2_knUZJJpaN_,euu(}~ܔ2k3^\/@[RQx|0wԆ7?nԌnd#Xu]Q$0`F8pfLJ;-` t&`fBw/ރ(`ҞJ؟X 2231)Bgc⒦c1=[ X t-2 X<9?J9k.a'XDNxwY,Digdii5!wjݬy6̌n sl/rs#X@]isxK9;|^mK2Xp kw:o'O~Ue&/9  `yucUd>fr YtW{{3-~14s&LEuMgթYY3Zv.Ֆ.5&Y&ʕJxַMsa/nH\-?|QqVyc.@ 1_g<>3 v BXO({ZTug22\yfLʘ>2 t>DUcbZZ,1W0̑3IX]].ID6) ϫ!!,^,..]*wPq8t]}ՃZ/z猚ֲ}՘~Z, ` ny8u XazI^%̽a X%$F \wN|Qɝ^=F;gbLʀ[W&.:N8uޔG?YU%]"v/iZ!t̑e(&F'Kyh!@(V=1qfye ŋR_+PtomF8 ,`u':Otf9z/yMMs vO?ne,wo !wnYAQ$uE0)B^M&/PU/h?/1W 'n^o-g7X}6QS.EEǕN3@ptLwYxz5߅ja<>iO*/g`u``]Q$Pu]׉]^sLUQ~¶\뼶6juy訨("Iq ]siKo ]/?sﴔ3I'IMI: 㷍}fbUi挟6 y^-eb{AN^i R|Q./u $Yi)cDfԍ9'-nwD,)Çb+}/ ,M' Zo^/U 3X ݎIXڞn;g X:O_/;*2 (_(<yzyr͔/?m۸3m>]n7zuU7`g7nQ**soUɖ)g8OB5[ SՄcVǷ:&`A J6@8 u73a[ h}UW:`0XJA pY'pDޞs,wW?W4'u`&^$y<@#E&jm{ݸoG-)/mo/u`i,}:u$Fj|!t:;$hFUa&xmGSf[yU d%H{u:xEWmy XHlV(`_^k<躾׮JR8L6uWjOQ:Oe2 VRH!gJ9/N`zzEE`B:֮*B e8TК3GNDcb@(Y||< f<.#eRF=Jc?Opt:AYLk+ .q<‰tVifR_:`gc?LL華ߗ|9-\h2UmLD_~<~RR~GpNgg!ߝ̾?ş +JL áb؟ pgŠ3d !4(Y(<`.b]_xǴs_4s؊ "+*sr_-U 3"~)59)aVZbݎs_]iiw8ʻ{Ij,cRFJ Vn3mI ;ؿ{5bʢEXJd Du}6Q}Qܳe%݋eۑcȱCW ()A Hxk*N*BpgkB޺,zRt`!k񉉬S^KY޳Y#^P:@8N`|3 s&N{'xcO||L^:*BO$(=P8lc0@(Zeyw̉3֔kO1g\3u JK5bax1t |D 7T6׌A 揤wF0 XRv ,֒vV 9ꜿ(Eڗ c:yR[egA&O$PcU]g<Nɣ*+1X<2KM55`ݫiV+'yd+pg y&:MM.D7J{yB'hnfBK|HxH|( IM){aÌ޶\)'Z"۪# Xt 5ҕ(`@$Z +#Tm(|ӲW<8rߦe3Zv~Bqs8@(ZS}OM>|y'_}ߤ[Fn>frE7X]]O?Uhi R,^l2a^ߍ+D#Gy!GjL QkWc~?업I~37J3^_+D0 뺮};f\L`jOQ0TPU]R Ǵs$*#fL^0ɪ*S|ߥa/sbcJ//BoJ?>u;yRC|ۆ6wu i-v?$W5<[,G nXkv;+:lqn,";FEULy'~?q Vx|+n'RUN2&9VY$i0 4V ¬);[𫑝{!!L1g\Y:37+,軼<>EӚ~[{ XG_'t 'BnN%}̟OsRTu.9!5,|O3@}p#6 <*.eLʀP[ZQxM'pc)qޚ?Vs캉 +t}WQp6Beɒpbx.|^`k gڏya s@x$Juߞ<0 #6v0>W׭hn G"~|}{{;?V_?_YKKC _¶3z:@is?kcaWiIIZ sʲ: Do5.!eHY56}֨ qM=2Tnx)~? X*ӦIC!:#|Rc#@(\cwiuB^wN͌Zy d>|WZ=0&G`5oW7NH``PY'{(`ޙ4T!lY8{n2aE_uYY.wIT<;d! RZ䫀xꊲ29~uyGUǔVW@QLr 7oF,3S~i RQ xu)3ί^k>@xݕt=::t]ۍ_H^)t<udg:` (`^ e)Y8owPaK7nO,(`c&{QzuT3~X9zo`!d@!+L-Ђpf ߅*iSo+| VAvrS+``!t]uڹeCY īwkP 9m~f---!+!>Tn4/ұ%?vK;bbj4>R_:OF4|=;`!KX%ZfpWx67Y ۗ~vl~72&e@Z(<ߏ,ni=xR#&1j;+*XVW$mܨ11@X8'=.[fˤ/8:Vy>b;Ӟ+8d0 #1QT(%(pjoS^!OTinfpW_koZ`TnZZRRJ 4013?L$>/]aX Vt4qWvn:ʆW>Y2slת*q2ɣk:g Tfϖe(.8E Y6 W L(~\V~˦_U_:!cGq),Fa!뗴,=~ X!7pg Ʋ:5V7HG Ov]n1ކy?//8剢O4q(z<@ Mو.pjCOo{6'8 X G﯇|T"8" IV+_!ZG»L&qdMvLۓ?'PoFE&uIbx/J4s$TL> H WWE{Y>\< ,\W00OKG "QzY{-pD\'#ESh綀-P8pu0dd$%a!_6ٻ}pJm}3 XeL&W-Ax2 0}dbx1qK'bN|^Q xmEa"Ųef3OGP ^ՃbͿwZ%@dݕrM=ڌ(CZr8Jnqd(P )s!A""THNNMe^h-ޅMj\\cbcE!u2|>'eLt\2rix$'e㺎?zB<^b1Y(82yq<QeM&In7ј1|^ FXAȫQ.-\[YˆK'xR!+``GQ(x@E5 %1 h71Q|J//:`:UH ˇB]ukŘ|iXFQbcY x)i5M5wgRNr>,aլDfpaBg HkUdFu4+WFF'~3͹- ZNG ^#$w_.z!BCRW)Pb-3355=u fy7(7͍]]#m6y7;JTe'XvVflYv:YHmlD|_)ښsuu%IoR)NZs~W2 ˸qKt&Sg'47F tjkud" Ub&xu_ycm--@d99KQ_3.b0 #!8$[Y.ܸbv& \^mX5{<#ÞATL`Y+j¾` _s1*[%Ś  ed$'c!ok[oE }c|9l,c J[K+Jt44}:}cҔѻbM35~W06nq 8JtKk+7 tfM#vkrB3^+[Ak^^(g^?Y'UU-o_VT,Eh GNuԷt mJPQ XGFiaVNME ]ƫ^G ꩲ9v{hIMNf'X&ICSO __RP:@]%hjWJIU=z3WV._m{b]ֲ/TU^q@-fm*o7[[,1N$hhi;W(Jt+W=*S<>&gϰMJJ4bax €]疍bKe&]W>$r=:Nɬ0NB߯? V(`\]yNҵlwLw([yeeyRiP"zu`$$*̙rNU5*bˈ7lMmmm<_R82f89yRś4t(<( _]q:DDAPCū%KX'in6ܩiQQ/8)?o:%ww:-1WM^)Y2%r8Xp7l(&u|M@.oڛpFDT_:Ottd$kny Xvڤ?o]vQA@:Qo˾jrcGn5C||HKM"y`+۪U~$v5[0)L4z518׍ImB^}狏5Id.!!AeI7kAM3Y^WyyF7[a@0#~SGi6 XYB 5{7YVdh,NUeh&Uf&x ͏3r1ćć&1񻢱x~񅱒`5^+nؠl/01~҅'RS: N7&]U%%(`A񺊰AxR j[mz]v MݻYC`@8kȨ?3,`k˗NLlyw{Zb"<:xIr UOWqqZKM{h\ NN{y3 7 n6lPX"CEJwk_eet~V[Sie䯀C%uEQ(|S_g}W]78eyxb*G9Sܼp1dHFFf&r}]]^ɲmu*.ea@ n[X+q*ɣsvLfWUË̹K{r}Y'45>R՘.\hmժ(9ݙ=X=l_uA^Fg'*-$,;^'`!zC6T<:Wfh)( dѫHu vCdddeNpx3I\\֞o\>˱uM7O=7u`͘!n74)6mRѸSW?ɳTWSc}^rIDAT{:!j?&`#X~`1`ٻWӬV}_y5T%kLKȗs`k#CRvw D,)>Xez"Hsk>†R0 tLNt 䖦$L룦gUS7,]j22 ܬZ䫀Y'֟ЋI`‹ǟUWg|2~/: X08\f>0aWq<MoNdPHNU%JL4~M;9(`Ҏ̧A3 XZ-|:`CdF,l8$9`p2i'zY(EduW[:MGş5ܢ%#YNr}7ƅF'áH|P7 s&8,l^LbJʱ]]sWI VB: mNB. /ձ1PWk={XCnnz:VB-ϛ|fE^ONnKο%$%&4VƤ M3VjR9"Ŝgry9~?Ez ceo/)+G>{̛喑3i!ɸVyQR>\y\toζR][qEf*~WD\Kx:1+\ U3Wvܓ: z9s Tqz $֭{\//TSߘ4ǫYEg ݝ~RR~(ۊ!YAa<>o'f"Эӳ䯀udbxQTg˻їՏ\Wwet4<LXX Ž}NDLYX3  X<zjZ'6_5%zul>8 א!+=ݘxu,Pظ(+y5᮪<s:Oto'ZQ:GN"I"#io״(r]yXqݍC[3F;o1aீPRytL^T2:Dcsg^z%Ik2Y!E"]g"ŪU|O uoOIGi<7}QuxMڵxUx)=u67ƜwNnS%%fN7&`L|HjS0 X?Ԥ9D+lQzpVC o UrjD9 2}r:GEzBX=}FENjq `'RgKG8/{N+ b|яݳb'<4uÑʅ[ u=U%ooVIaUx+<e ,'mi|Z2~{uUxfN90dHf&VBޞ:D;aSS;gt쾞[SfΔe(5XA VqqDF$occ`rҧnw7PXin/.x>OyYDR#3V`0uik+`< XÇ󹊰~k3MQQM着X-`Y|`6,++;u k~u~w]R@I#O Xed~|b3 s~3TW3XLv|\lK}\q;kݺ( xZ0Vu}kچS`?ܟ2&s&ZZt]t=0myWXw/w6M@8_:UNv/vMTFa7+CffNpxGQܿagb⸇jkc ԕسb)KR2'\֩/;[hTIe"Ň+::XlMwNF#h >?IZ~˿i&n0$OP m?n&30,7vsԦ(D´->u^U։ _:0tC״["o*~%%j&ĈSui{(./jUU:Y*BIKh4GpIFnt|^hyCM_u ~C%pqVc% 'H `03Uو^:ܳեԓxX菂O3Gnu"4WRf3ɂ>9EE|Nwk۱9O*lKX]@D޿)nh"5S ڛwt;ujЌl"IEQ$RUM4֩~\IJNGchȅ(`@p;S6Æh۵s|%f ԪU~? 9I=s^@/|MEjapDOuTݿG2G>XB}ߴ\~F!G0R]EV7㉨H|B|XxBi$w}R""zR + !jӾ$TXPBM$Y׍1(`o"x~ZQ}: @t %UGD<"*)QUhdQD ~JN}riB¤u#Q0VVUU H^A ȎU&D: UVض*%uB_ ZMd2 2 TVjDך:MbFڬ~y+KU5AwF':;xGc1ofc>8~똇'67 o~ǷE'Ĝt_%%f6NHIE!JLkίo.hTww $)_:^_: 2u ë1#%%H_: fs{szzwҞ9S$$JJ&U%>9Er|A*  SNᅦO$D65`0Y#4W'?m₲2!A!i&Ĕ\.`(,sVݾ9;P "mQbe%!X8 p1thffV޻/[,U jh/©ORv~s ԲefsO)^co* ﲤK%MK:'arh~'.E[%exK^i+ \)QZ+q*ɣgϚy`p9+W*+47@:E5\ӹuݮV+X`Kܥ_]:GE|+ 3vHx1 xہ'c!8 1OBGŲ/%'٬kQ&Mu￯(11Dݺ󊵔5[<eq9s"P"n줗SNwVY1b^MZY>2V+y5ygZS_&%|S 䯀j]$,+^ Xލllmt:S{t[UK侙) yBonÁD;::`De\ Ul8d%"`Ƴ߻Gq&\a:;]%nq/_C ٥zbqr#wf~,Flz++fzI;!jQwEGEc.cY\߯ϪU|OH;'Թ}C%_nw=5S#İkUcX,d*?>u;}Ӥ: @ jY:K0JJTb!6Ly\-G| w~e%%$ƦRݸR is+`=:MD|?Rٿf Xq lo-//)a Սvkj*uN08VG(mZ;8vju u-YKVgbz7njo?.fKԝ%F}>Ӯ^WyGUccV jk#ZgV4_~iQQ/DyI&ZG||_Xas3̹ENiE^(qT ~fՕN?uaFKɁHj詭GVzy&axRFߛzJK <́wR/!"y\ ugNllݍӻlmߏ&:Q TzIZ]= Vkݎ9rq?,Zg^=;jyG~Wcx|ǾpRo$"' '""*׳["}'8&")/)Ţ9sd$JH RUi RZdLHJD.,2f:Rr]IN]E>0VwΟ/(K+WqqAO*=`34FNZRpx<ߙjFR\}(`E\AZaYˆjtY6b=ASRVwm;&Y(``5fR(E })l㊮_v"*x3tl-QQiλVׁ=rO,qju-ZnߙW~ O@D|#jDn&Y~E[]/Z,4$S\l^VXi']"W5-@S3^""u*9i$ONT4S}b|v{ kH|i\//T3&?vҩ4VNpdd8ڨ XΓV$#*/W X ۟in EY6Ie_{}bHNmnR{E^/fk!eY$"EQa 4bvÍii0{@8XG8.cTT?3z\QQ]k7\o9Dm+zq]fskZ=mGTnnS1DD(%-ϧ6|1""ׄD߅#QRO;ө5l |DNjbo/4)ū-RK&x-vauݙo$[דLhMjTukcWMLDC: &ᆱ(Dݺ.IoKߎ?+$y͝;厊rD/G4wӈsj!"4"2^w"zUGDH. M׳Nn"Ao: իy_=h:֙W >^(^s?e·_oLjØ*<I=fƌ);Ʈ(xŝ ;.!Mh>"u]uC`! XEEN?|nH4 •=WNgz9qN8 8,mCe@a!Df Ap 3RS3(^d{{Zlw|tt-w?z.w|!:p|3:u'ϵfSsZ$}dD"*"I^DDtqc.tso6/PNT\.W;WN8 (v;ޚtvJMDoۤW5:O+y>LUm63$ )c^.Et4GG6)?nuԤ^{%:u*-5 }*Bd uu2rFsE>6Q&: %^BRFjp 2SJlغU?9bU93dBkRͩiiD:G͖kcbU(p,16[Mv':Zߤ)H7CFDDדQDDB#O]v}dm4uL==S@pu]ya&xdJKKwc`$z!ԫj~Zqq*BHq){ϣ7_h9=xof4ֲB/&79|O6oWը(il%Y4.+<+,GҠ+`-|E6[Qeg5XEEY,QQDɩDͬSiiDDi7}:Qں~yOTTuuZN|؎[zvw11=k\qnzw>\ۛ{w!냞_N;[DR-SǿIzLkp1: DRCnyr[:i T,k&f﷟ڽR?Vh6Y;B7Ϗ;iJe抨SL SvZcVREi77idLi^):ΊzӝtJ؅5(b(" ݵ}cf~5~Ʋ,~|w9|dPܻFl\gA芛B~`0WN+`笞82B%%` l N\^ҷB<:yQRf83!jb[3"QmGSNݝJeCEkTګl b;TqV9T*]{3rf(!0qx M-  w \?X[d-i Գ4M7yHdC{-[oo.@,w=xLEX96ͳeZ>_+\!X.T2E$ZNjMzڴ1 >ڨѪ$z@>i JKF(HI@T O'Gͮv ȩ1 \5pU,K aW>j i˟(jj"!Ɖ,LbsUUv҇oG9 L>xOsAV ºU׹+//4iC蓓C C>([QuV OB4ij^8*R\':lktz9>36:|A\j23۵jقO  O?|3FcO΅BX8>>$GVMiШTl,TUgwj4<[\*d2r`<󿻬1!%\`EnD"4UVEy:E9ZT^/h*$s+q!ۤ3e'1u) hZ1e~[5Breh_w|듅oD{Eߋ5'G`V:WC=V^g~.]8.E ܽ22Bm޿4sOb@tt!,`!2|s|CտRUi0Fj4i&Z6c^Vb`Q .UGʟ $9ОdžPKgNM!\iIpj~˗&W4sd.ט f@ex)n%Jv; |:Ev,ElL 7 4G܀۪t&WKwk4]f9f XB52Wh%HHI.M{ܫL0Pդ:˲ʡnA_5푭S>v*O-otA[ l3FN|jT NsF"Ջ<Ӡ.\>C ݻAj\]i¦N@m G A+n"M$p$ >>**:Tzm^o:j0J$'Tq B- 3#tK: jKyTKRii^퓕;5ڞoj,`I1}l˲hJ!^}y{ߝdvccXLd1OD|؍7DN'LL\>)#$*G8wp ? sA95~xj^.sR #PT u*PKh4\|i&YRZu.B͍>P3ZaPT^V.6 .h4% A,f[3˃Q")"* ِ< Œc+H x[Wb[J%iNY5|u&Ľ~ksjW [:ttd: B%ڹ3Iҗt@ܘVcpBVAp;IO0V[xd24F|S?+{TVƪ>r盛j\O/JI'i?,jKBW~+2 [|?w,#*`@ MڢOZi<@F0yhS[|yP,`q-33))%`v: B\[+&^BXB!S*9Q%j MX[?SVkew0juG<#‹ c#׏!\ gwP<.7ݻS +?Q˲jU R| Eurh9~^`_|UBf' "hٲ$`߯)?Yvlh`]B}V[婆ZmߺN_ן'Co )kl*V4-D6)Pk^PlYgD}fCaUOTAďq.Wie\ ,+Kr9!u*PKXsygTi¸$T,O fHT?cBL _-Jۭ[~*W(7jV}7NiGI9AWetz!B\uMby‚9w VuZ-r&O^ n\mX `$@*bvKKN_O?;|:C\BOHTLkk5s2ztmMhZ:F(qp1 Zf6;y3b1?'T*BB48|ad2R~+5YV_a)vq_nwI cj5{}VoFLNN`,P؎4TֆVŪȴ\.2(i~|A$.5FS}Y6vrӤk<M'Jyۭ!5.g1Umh O\y2++m]Ѯ$^1s|P骬eE"dB~S.=}yoDRqMC}t,1"*:BQCo07s <~ݼdwʎ\S>紼AϮtsu:k,'=e-}-6+td;BRYE[v隲a:]AZmtK/R ;x I0@,׏!tu&51C6=J$22D{ظqB dgE1#/꒼'fNsJ73, rR *bPAGAmZym wl[0AǪS$ZЎO.INCdf&`UndYx06D-i>,` px X\1%%=`7o: B,KZ OI PKc39tJ$%}_U9hL6Ut1,}z=~+_+r6B`"z"nY*l  $L*`!,`P$Eϊ4Y~C-S5qGE\taLuA {E"T!.TT0PpM7DG v:r Y[LS~7{7#~UR*K{5DEA".0IO].M|jۭX1M5^9=$Fc]z3jk>| \jpkpdFIK@෕|Qyg=TWsF)7[ŲM$j.\:Wg"=};xuQQ11*\P8n7NG-邩Wz@KB/߱֏ΡRv?h4]V kLkj+զkz˞DfQ 낕\?P[yѷI {wKeZ"P~~HCba0Y!WPhM | ;ٷ|y5ePhfPS,]dɷ*@ʩ6RbZfh ja&r_P- \.Xq ǃP@ L,1]Qf<\0 )_H$׾$ F$:U㕾VQZ-dÓ\gA LSN'yWKϣ n zY@g0 :4Ծ}JJZg\!xcbnXrAyBr6*bQz^_;4~o۬2Bf]%\\?!t&p| ; w4ݤI8 5 M% j4F^ Y63 n ١F"IT@'S5V Js]Ф'F*M  @pz5_ϩj"˦ďHJw8  8O dN Ut2ikCH( 4򇔟\]=WJve\i].A>I$lĽgXV X4,t23 zTmV q e\Aư/10Nq;X᧺~=nݍ߭47: u옒, *>I=feO B-_"SU} EqUōe OjH;Bs^"D 0|., .f6;yS*j:SSh4aBa۽ 5F.(+lnDwv2#jEFw*TR*C LgP X6J%̲cr8$nQX-]#}pPhZkO֞M GdOJ[{biWw>tFmlw:EO UWJDv5ZG oΏWWPp,ET7I79a}cڽz@ nnc@m$M67\I`0 Xر]&bl\Z]Lhw)oGAs!f;AHnF݇Jeѵ{ jިb0z;]"@\փjlmyb1̼8;xZ @-Qvvh E 2 R͕A0~NF:ϊ\T7ҴR 0c@CBZɂj«.mL![J C?"̧İ7e\?y3PuqJӽ͙TU @^`OȢ95^9CoWt*p4AE_u&mB*:MYV"у[A":˥`O9M*xZ@ڒ`p ".\B{.\_G[/Ν0iv:N[V+J%@\\DDd$@EE]]m-שkWt S 8,;k>&fMnU^u.P\d)pU$RZ4w5G2 aq@M$(<0j{̇r_"\'ipelf: j-CWI iNZ qI7~:⿘"%ѳ\.ނ+`ݡI8ZZ'hZ*:Miw>W7jaѦ`O&e_"z.RiY ɢO;SPN}|劜}0ЊqPt ùN4.дX УEa ,V,u4jckպ$@Vp XUKc2 ;nuC$,,`!>8):-} >~ tD AADٞ eUUS [Ta0[,#t:&,  ~xGB-EAo';ٿWe, n7@b"!d+V*@0[ɏR =2,k1)U\4Q02rehj~%h? ]l: jK{}%nDR͢o\YB.kR6(˝NjF, Z!N*f߯zZWnc[zd|OB1bb ZZt4lUh4p: 3BdIZ0 ͅ\i7Ɵzɴ O:v}n\j벲226o>p`n N+j#bciA5E v }+;GH7+k4%?GDTU%2.Z-c"Hxi4W$klX^H~x4M7iNB͇aB [" dO@&,t 0Lʣ1׺\3`:~NW60 r߫zE[A=#.~C3Ңi(v8)D7njE}rGZKC\O`Yј>qF݊G ÃA|K'o gcR|8RY]P0oP+/o >j0Hr)8r-KUVZ-z\薯 i{<ڀ>"GmIU;ܖc:Ղ LY:ݹnU] 'DJ>V)Nq8"f&>q8j6;Ac⧃AG؄iZ,i.݅ 4-$& ) ϋs#Vƹ,2>u /#-S]?r.8p<($++--#pSeӢs֊yBMǓN][:l`-ݻ+wՇ?xأ;W\dmyttpf )X,q!_sGxRKB}>.cX5|jQMfΎZ"h sj˖. ]q\@9x ,J%%5'ۗfƦls]zTi:(*VOz[;Ʀ&q8_xh뿷KZEPcST ߕTM/ը5!+! Q9 7mbj :O[Pdr9@RRll|<@qqeeYשgGo=:΋:Ad:BmߍA%ז|`0'9VGDT,Um4/j` [$xx#t=B!󽶟l %x$g$OG> T\i:yȲG _F|fDg1>m8aj͒۳ DBǁj e) _A4M'V8],ă1]c) :r +T"3"TF׹ S! S[r8"VtUG}_! (e#flj0M7\4V^Èq j$$tQxeeI l@Z(iP$\`I688- `+_ 6߷;efb Cn݅{*~C'O*B};MH{_j.(#2QP<2AfeLgl-Ӊ,0! {̦b_D>ٚ"**t"|Р,Î4TՅ |鍊zsx 3j b^8ݐnj.dY*pwHdr !Vj5I)qq/o j)Ypwj[\Sr RoW QQA"MSGd*8nRrw8DǗ3֢+zj> XuȠ(SyiTU],IQ^^ !$y畁ΝsҟXWuҥK؋<+s[?djI:{mTwDZLJZduÊ>}>:/#njy+S=:;vaz>hdXB!&X;kb>SR' v;G䣖);uEq VDn~+VX=a99" B||y疯SO:B|@`  8[jU-/x)1qgJig5oRX*.zV_R1;̷81{*~Pc X|S_f5gh4i8&8a;HBaolu׫խa=j|s΁PKĖ z !+"KMq{Z1o/E%bQv|GRo吊Ҹ `Hu~Pc&0/X.6Du\\;aDͧ2tߜȫ~`Pe;󠶍$PI1wVaiihĉ #r!Ob ߓ_"nUG$#&/.2YYa՟DF.vIZچtٓ~ѻr)oXSlKſV6^PCtuef >).]wq-As3gRa"i&sB!s猌NPfIJ`g Q6IGONxi9Ыׇ5}1?-^QNa> CNsoszXޞ@aZZ w'ŽD( טg D9,[|0^UQE:ŽI̽n7VtB-[vv ~N:$ t50әLf:EY ۋ*U_^ķo9FEFr_-=X {%?i\hiNF`6G߂=GoSֻw}?޽k0xzO!g}DYlWM$l~,[yUXC؂چ׍GK{E4,Z>\n2eS7%KZppk;RD6;~tyH?E7N}Zc_%%?%ZGWWFE\tUJSu:sI!% 6l:n22:+gW|}F󠶍&xcEdiV޶lKas/,ݗÆEFԑu^xM|t4(Sr)pRBƚߥBapuB!BͥaD"Çϓ2DAmWȲexMK!M2@Uw+@p,SK~J_j͵0p#ϊ  N"#ygDR}ؼ>O*:j#V.ZSAG}=qZ:,`5QBoa՞=>2 6Y\A!:"?#΁O)oPxxɷ~.Z3mř^>:_HƌYG v3+Oߡ#8!PR{ > .W6L p""B+jKV}B(DYPeĶ+0A!>4S\ rvsDwu|aq5_'`lo ۠$qUcazՋ@`ٿy3yPHxվ}JJj*ijVHJofWnj[[g52ٶ_V9@kd}_Ǝ٭ٺo߂˺<{?"k 9.Wx B]f W zQ/QY8B{\ARhM_.{M+:OSZ T= j i4M~2< dZ/E^&2|t&`Q?/Z*]tdǛqb'/3 >&׭:]q!Og?(xdjцh ~`X\M{Ҿ4]9t~F=[Y5`=> !!@ FBs-'$-`5MAb>\]KGu\^5Vv \A“vؤav;Hx=B-UHESUS$ X XdP*!xDـ* X"_Qyv}s\ ,`]&j\ד'ge󠐮]۷( !8pAds]V7~t/D,:tKݢ.#GyÒ]_|g``73ٯ|!{];$eY>2“z%jC.qdD,N@a˸Npb"-ny3="D C:z&Y{#qh6\=hw__+/'`KUUFQXBWb21gt&S6RՔ4:١,9t<(DrD (8^EZ$: *"KV^d~cĈYM7p9ĢW_,Z*ZxB `M6-VEPꦛB4(*bY JNtRE/P6F~ :BC`#wӎҵ J4Еuk0P-nySe uDCU X #8,PcedVM=f__x; }Q\=xr&bׯ:=ڷ:BCE0; _utew_09)j4V1v#F,v~}|ذsG}831̕*W*Y~L@!.cgH' 7N'^OMsK E=aXl| '_$rb?^Uhk{"B|^=witB^8 !>27*)A Sj NbctW&"◽냫wp/3f_^uȐߊVNXcV!Peg;fWa& x: 5/ƒ` ˴/^ tqaQ6z? []" jF$8|ad249FxN`?ڲza~q!jL~.-*B:鰭$Ỳgf VRɨGU'N@+*΃BT*\U_*ߨp$*&^.:gh]5vO~Y3zMl *v{WOc@rj]K/DIX>G, "D#I.O]DuPɴҮ4-+$o%x^,X11JEOYi΁Z v>U}9LJZB!e{6ܱay*B'l ,=e/sn,Nji5lzɛFtIȑV JҼs+R"B9;>qcdf }~: j=~/ U@dڼ</||&-*_hPb #}89 X͌,%K֬:p W">9qe7p_NnMYV._0ѣ}y/?z]gO(\Eu Psw}ri ޶+2AH`X: j-Wv>0|PU=~Yt$j Y_^ lRQ}ʿa6&9,A34t"ϧi8GEՒIߝWa 5Ap+[eF~!yO).:_Gf'Yli mC-R)鉉XgA|aN8{i4g{b^u֪{Wj49ذ7+k֫Q~Ү{;)W22\2Z\ ЕźNPq;|/{Zk9gHT'B\. *⻨ + q)'j[b3߉o=74' ,]I!?CjMi%\),+rEz@ X,oTZsi`}/B-` 5 4s|OG6+̆a}u.ңGYYϗr^ynrjjf3yau9U&;N|x⃅mwh4nx8E,PuDC?4ݤI"u Zݡ3U0a"7|QNɭb<׉n j8MtAWXò^JJV]CQ{Q ~K\;*r7ϥз_ LŽ5Fy̍WNU3AHP|NŌ]Uu-Ł)x*rEn|8'OXj =?o_8pҤЊ]P]dy 'YT-Vhw𩖶{w_kK}>\tU A uuV.ej[ 5<q8u~&WYVޕ+< Xj1w _~ufZs.NJ^(>vL6ZE'OMӷǟPS JLjg4I]uV;=tKZЈ#<?(YM"y*#~])PK~}hU_}9~c퓦< L/lw2/^"j_@&<0%įO@-5 :⯦(]W#?+*  yeV`g03m x{G aٕ ߾=V `C"$XF[Qw:o/PL l/fs5K(d0$w{0>8]((հ (>4o LG6?E.2L;b6{8~H(?EͷL+UDmb(Nj㩂zGEB-YA)'k"q !WUBADMdY.?K+ۯ ^Ւ.,VX$GO*`5%jH1 Q g@G- _-ZN|0-v C<Exaffrrj*sEE\BFe"n G_]\\ fߤsU11g,牉uU}3;PJQw'Dkh7 € :c$ΊMTWfNP^qcPWoE,M'lWN'hNjnT!MyXVsBjg$ٗPcdU|qrʅ9'&޿086.^ (:3jx NBm`Xo#|Pm\'twciPkqL¹s^U]tUܬqO!=,aF bA0oxBp ,Ptלh=Mg7g͚*b @,"5kB+E,JZs0Np%O.x몾ݪ΃PK2~JJP'Vwsr"+qJxEG=\p]]l"; wU|V{*)3,Pc|;)}wqvВSu XWO3CX~yӹs׮\@Ҝ?p̔f*=Bn{|ndCV-ݧǏ}ȱcwd߿WӫWۦLF"B;/P'\o:Pױ#Ey\AڵR wgo|Paa  &] u| 卵:OSG2@u5yh`5Ll%l'2OW7 4+Z V#nJ܉;L!OZu GYYڥ(2՘PspMp}?RKl,yj(k"69:ud7_5jYF!C&URDhKtH!℥]c gvPPs[߫H77 z?XCjm_]9aPQt~?o!ԜVl JXX@ p΃zdZɃ;iZV*qI sqj8BA>^6TJqǣ)x7*'xO^zOi 0_pxdr`>B[KÆ !8׏rLQq8X6oM+_=.G{WW8u*aFv|Ɓ;ubO,Xſ9+W'}H$ig,THh1˥Z ÿcc<&4@QUU"@\@/"G"#8Qyߝ'b^T;."Ça3&`*cNQ=@t)u: !$t%O^;v u*5>)z >sFWT 7~B8`8r'kWY 2iB!KE!!; DjWN^yV-T(.CWquKϫxSU?jx׈]|_q 6pG@\E*JU+}TxTF׮o+#Q˴rehUEvkzA Z:' "r%,f|ժ(s]͛A%PqR$j;. 5S\ԩqa | Op!%ëz烗a6YB,`: YuU8'"сs3MM,U] ,X'CU!$%tKttǣ|@5[|Ris4rlKnv&֩}4zm,Y"~wW`>jp\_ɿm.5fG]?ʚ4I$ٸNZ+ztd3'W)-9!>@{OB]W"·;pJ1)TRŹ\:lKZw#T: Kf#$+bx뿍g  ΏOIoa!ש.JE .:\A4-2XuK'튊ly\:׋w{EEΰwmx99UXBme`_'j,Gظ"$ Z<,9A糀l\.`!ryO\! @y9V 2*Z@=YP!`7:Gk'9d̃K :};w X_*Vbjz_m=ڣ)pboB!.QxI׫PT 5].Ju6.&m?Gxb. n;|~C7$RiJHCv6'_ 9˾P\gAdŹWh:+6UpiQȅSgӹuΞ <>t{QkDӡzN /,nq ]NjI;TS|wlsU_q-TL1Ejpi\v5dW󌫫a#cveQѺ駇5=~çݹ΅BԩkW˷lٰ mj/<!PK&8NP,^=#jJٚ uөyLYayng Z&=z z`筂$.]TB\ z>cu_TY'C&2߁өr؝_~!;pQ~;w,/,˲x8J";i"'ѧ ! 5 Oпy@ܪ8!Fgdá^zCUxqH,x7Gm|䮣pedҤACa@׫Ra6}QTN}tEE`mг'y.}{0P!:\B򔗳HpMg${M+_7P@{u*PK^N«#_W!)f"қ<-)7˷zVTp9 ^΅B:th.- @QT*p8NP㸿Hn(x5xmB?Xk Ҩkk}>-#Fp:5h;Dl-pWh9; T*Usg =bBU\+|kq: g5E_} \gj Osee|?᝔ux +i`dU߭(uP$pR'a ١"ux _\h1Bz[&s}|% a:'B{3GhZF"@0M)|?gj^H$\@|}TVV:|QT5+Z8R󠫋e\-yAlgIqXj)(7+[7M߽T5MB$cyBHUh;:+ V9-9}ь4\q j> \;vд\uNWjuxZ`שjZT Ő XIAW&=Xl6s KiS0T͡u$}eI?*ߊWaЭOyJP A in|b+Lp,JA 5F&sl*z޹Kv y(Bm3۽qu 4V~~hax%|`?|>'O]1u=Z l3vВc:u X-Ȝ:_َ0΅B $rԈBzBğGc؋ ^Y>|D5̣NCN]du4-p55K۝N[Y:ץZ2T|P,X( 'M"h-,G^[P. =,s*5@qfGᆴH,ltdgݟ: Ήs ON\?}T"a`s|~&, d?ISaGy4^x\u5HZ1?q!LV_h{Dy΅y$f>cUXjaˮc V3p`nza g zBT" 9?,^ˇūA\"ԉ io֥ZOtlQDl,7Dn#O rE\ B1?| Y\?*wy _L$l\@Ex偀Ju<@Yf ղIOj6jWl=Bf*2qfy_6[D `&UOkzjSX$wCl߈:@i^Oi:tGL i,L?e1?bd q ۋR rxJ.w>%r9s-}7EqP XW3Tzd<2>߄'`v$=aeڡеOZ#ȑdtrV 3:=}aݾ.tdօ-p DBPЧOVV׮;v9rשjNsJҝ(nd{m"B1؋ $HEZjکVk(]~0j%e,hi3ԏ `u-0OwGPȶC,ON/B!+;;TNq|ҫY l: Bm]ܽQG-q%'um  ]"(:45Z.:$bGG3tHi)g\j>Ƴ*ЂmUGL(C`.7~Tjqδ scͯPv kE-~O`)?˪S&(9\,0IPޟQT0PQ0B,rZ-tN7`>,m`)\sM{c {5Z:䷨ M!Z,^qC'JWNmF%ޏxb:("jMkK`jRU U&{2GmӡWΤ,i.]JE"4eY`PtR5Yv{O]#0 f]"ϲ|=/HBϿz ^>Tl6Wf`Pp:CE,jY>q/j:Wa~Ֆ)A ^o*D0$B;J;Y)\ĖPغ:V*8{F&?ÉZKUUwJS^^h,B"##o\A͍ &Zϣ>m[r<pSC~w[Lmi6`Hgzs(rS!8 CӄxWl'D6AZPku7̅,ިm1e6Gt}6[%zT.5np@jX\?wܗpAh<\*c 5FF!|T|avVeK籀{`&\p>!ZYvC!lFe1ߵk}~T\`BH$"X зoNݺy\BҸZ'D2V1Bj{)t8" 1|cKbY,1QuN'+=W ty6;{MJ /|[n vW擝:Nw@oA="ZS?dF~k0XMo5ڵJ3b T t59,KQ *\i:{|7  |Eكe~@3Y `hZz8X! ,O ^06]8';*WpWit'43{!)* a;~/Rk)ۯ1(Rfa}Bn:j)xV~`Xvݣ#t/׹ ҫW߾v?~˲,A|?B=!>WBD7H> `w {~nI%z~g#l%eNYL(ڃA a$[`׏s 뀇'(*Tfn: j-i4Mg쨽[mv9}uP;5/aOW/\pe`P9R(t8NښUBؼЊ*8-"2dXTp5w:#@ƭN'АpwM$+2S*M/9?ޣT9w86*I^Z*wXth\Wc6_,) GJK()JNx Z0r5kΝQoxlh<?C.~PjibbH$ 4%6BʓϗE˲v{sg'1[fow@Ć wIoCCjڿZ>^W!N`ϟ;k0lJs\,.Ef&!n\нkZhs `sՐQ^CdDGJJ΃7 nĎcto8~M;wIk:!Cz ?Ϻf(Z&;']]ɺTc>}ɔ#\'ne/t0 >Q :LK#r9&M D9OMZ€Rxs0xϽƕ[y"VQqs1iZ.`/]I1LPX(&٪ޏi?:j)V v{ϡ[w+wX{VK6Ri}}-Z0ϷlJPp/ 4k'yCg6q“7BX|Mz@ŵЫԋŇ u'G#nw|I uScYd* yK-p7+߾frXgr;u…#kcb-3cGVRVO rkJ(FW8q!;l<LҀM#L cgƍ3ŏKj6+7)+Xr BþX (| <\x5p@vs۶J%@}}h!_e}ΙqD3m:B;K,`SYD#bu*څ'Yݰ{0@?482eu-x<,-x<0Xz&4lK[^$25ўTzH$\?te^֝euMŠUA\3LRiY}0uP esM]j) ڨm62X{?\`8ٷhS?!I#Ye{A`@kk[( `nzXnm۸NХp~,YLҫǧP@Ri1ɺcKSDT%1ڙ'6eMA"}\?ЕEs0o))3y[D"~;a[RPpiB+QX[شU;VY:ץZ"Cbłhh`Y TV(Ntrc{n٫TS(*|T&n΀g-C-vӖb9Rl *wKߝX;gکzG xe9Y^E8d@rqt޴jT qM t/L{4&6saو%Ob674M~j,.Pudѣ 3pLKEq]᧺~=傷HYly_4{޽C,Bm5U|"7TGaBZ+tgn̽vň==}~4݄vϞ 98lϥ륵(^!ڜc'RSTA|YV$8te<Q6>l2u0僌, .̢ft?rb4Ummh4-rV99Fv2i^}i*(j.:xܻ2m@a#u_3̙]yteJt8֮kC^B>Ϙi[*r6>Ytu)0Lhz uKWz/{'&f_Bg*2?PsV-fv$upOY%p!0u*yi4JJеkffǎ=u*.ct !*^ #XDMAQϲ&Nsj&*ՆqOlhH?$ Ik7L~+=,2rFNw)˵׆d D9dgj5mLoOeA9Bo~EE;kGV{_)V = x<\AE{@{&H7AƳcQ<U\BqeJB<# ~ _)gwX\?V`[yJe-W.Z =6k{vpwp.UffhVUMD\ina/^B?~0pHtaB-BllMW뢏U]*TF%[eM4iK\A 'Ԩ5vA{hOqC{׏5 ˆsΰHIXd<|LfY[QQ6[/S Ge[LxW?4wv:OΞ3]WBFy,p4s\ID"OX߫bTᏁ=*+:B>o\uN0棸55\i[iZZCjw&XVU&ZU!I:ӧfgN:YS#gO"8!RY{*DRR.>u`o_R `6ugXOLC?AjkvW7^.[ yRjYw7{t d&eIBFO?3nw,>MN]sCFݹb{nޢN 0 R*r|Y{ Xቈ5^FE>¾Og.x&$BRW}bZ'[iEp1x\l;v.sox(,X@|'\[azߟ5 2 !8 5etM{h:jȟ{ٳ%vܾ;ߕzM&}4M}vֹn++Uo)7_mzݟ21:N4I(( F\䫰u@+:e +*'}BV|,+Cr9iN7H5Os?SϞOrEfQ(hNy<f+t}V肂KG ~Ɂ+۟1nI,%dϕ&`EО7zTyy4-r_'`4 UW6#;nycwYϳF9:'//YOe%qP.ϘNّkj֝<#az`_fs?7+{wUvܲpNS!ti?&a):W0DDY}"x5 W"9~~Tt/%K.MbE0lbYp'\G]M-u?bgg3vvWv :եBo vӠ֢aD"cB+*bT}}fmrRV+yBWh Q'r:Cm%%,Ls]|HΝccGi^ĕy_oa~>>S ґ d&u)Arm 06U|[}JUݮ1Rr9sVuL(U J׈)qR0M? ys>:?+iՕ@Q\N,˧랲$62c;7H$Ee}s'%u76wK8Xߐ)-s'9Х gl${=͟O*B@0hPn{_w\B҄'a9>@Q=<_p?!.]o:gbnMI]?Է e6I*\GwwOFG: N: j-AWt穂^#Cr~rrB:v+ V$5maB5+ayTa;m 6C~Iu&JUiQ-lU*Lp&_mK#j&]=uMK$\@|Jp4i2ZҮ|b@Tce{&)ĆNc\ϟ߼CMB/N`8x|@[ã&'aorC{@$ v?rh(M[ ^ Z9A`5cEnX[;`H'z:5m7?oy8u;/$Zݎc?qrMPBW׬ [@qk+zfy9yBW_WiSmhe#m6s֭ Jյuk0PׇVUg]4giޡ !ȃ>_O64 &tEEvpMکS}kx͸kkfiwn\|:7o ,+lo_W뭞7;\:ܓ̰U7ߟ,!x<\A[ !0 :k*\P١C\Ai“K7FuP)*f8iw=]Xxi#ן޷ϧLyuS7Lݪڷy}PSX}䞨l\&j}XӤҢKLqq\iЕzQ@_C'lm6u]i/O-.Jpe}7dwZTur:PF: Aտ/+Z A!)g٘W" ۏnKV~_fOsLcIKJ"#Sfx sA![sn*fT:r]kſ!+{Hyp-}Kҳs69cc{hioKe 9PV |+TÆ=`)>aw-]"{UEopƾ&^a>zu П|fM0RqbTᏁsovOi)yBW_xrVw64 TfwQX8qOI鶂yK/+B3yW? +IJ7ʡ ػﰨ}9awPرDM1$wczbc)Kb1Eņ";1euEsy Iqhce,b?]>>?-Ι~j38:lsnݷoޣ9T{<:vl׎ՕuEW˯$,ht~,b;q̹pI}fLܻwas\5̹_-d@z_t<{&Tz՝;}Vrj0u;O:BNKHwAe6kD(Nx_(zGVYA&<z(eCë[5yyC8W+}G9v;zhWv86ﴸ'Sxt"LMLN’w*wWa?:sM_{N#G"8W+(QAǙIEAZ<<ѐ!={: ݩ[YJs1&aR?~N.虰^YY lh܉/=;ǎoЄ=9~z>cK^:7}diq';[Xg4u.MeN$jQ1n{2&8=]eRl}I=n_H=Ù4Va(D'NXW[gF*ϥ/ \qEgGsm+{<:詽r>|eԿ{[ݔ+ 7\+,j9w"*J&b}|j ,%3ĢZOO[߿uhwB6InG~=-p'cZ>}:uޝQjYhQE#Sy\ʷ98MQ{6jzt7u򞪃_X4slٮ]ڏ7n.ļVP+Z¾gF&X{1 ^R,qG4T;Q;O\n.7'b4Mlpw ꨔA`?ϡ<cP}Ԁryvؽ9g2f{TZWm_zp.rrkA33=;rS^.KvRPï׺]rR9^%~fz:Vy-$`qUڊufTa73&l~M׵Xn+pƍ^fAno:=\.Ɉ֭W/iתP75>-&8.nN++cb;oz ɉL+ _J+|%t 2 cj"Q$;V.$hm]rE+':y5ܾ|!`]~sN$XX,D։X6:݋5筴49PDsO![OEE.vڔ52˗-鐜SRY~]қU!ZWؽԮH%M]779pw/дX-~KDD 0 6gO={N<|H7ڦIXo+P]5&ﭪ Kee9yyy}ro/-&@hu?qFWwKZz.4ԨQ╃a4uL&'')^ΖAް: HICcdddP>DHoEdX~uO(eeSAK)+EhvYʛ*gf #Hn.EP}:e\":(1O#W*ZJ[Eq;/8:.zTtvhZ|Mrb|дhX?; Xp9dVXϯT&S)u tk45Άځ*vKz N n]|;cΙ3&e &`#:ntq/_fZӥKl,4wG *3n?"%@DďE^0ϸs3%xΜwhC ]}?WЪp9VBBQU:؊Qy],)߰WtwL~>< =ww??_rztop[g6;9 D<f1;T?Pzq oݍ %uuvGݾ=T=]?X '\3 !xZ $+Uc[܃e lS+G8k2MK/A1^DD}:C{ۗH&0*t)_mżV{x{'ݾ=(ssyfݱѼć[v {w^F.i ?y{H6wCgyGYivx` y|Ws@TWg-bIU5Qє|I>KppgтffXIHkdCgR=qqDcqTՃ }2{='w.*b0 #2R&Ҋ7)<XkT'Eyr@%Eh M8[Ysʗ^Ӽpqqppr"!&ucH//8}RTLbs% oA= ;w]ssL~xO=cvc)/ljP1~_+hIIҾAu9t(ty@q 9?[ 955DYx & QU'_~ԿafŤqaКm?u/"&ګOt 2CWg癳!qRYqb]V":>Ͼxk(iC Y!"$ĚzsQ+VlО=U+/K` ?fOKf=Wvs>;fhOhv#L+̕<_\M chh\dD7nHdspsW<;xֲ$;{[ۥ4VEx7+4rrDQIg:|'>8WzzXE !(($u(~",bs4'{7мp#>zbADYǁE: 1~渺P)[p#!nG=Nw…g?푹;v7),*V|[EX5Z,gbxN4?}˗YV5,fkȓ~k1ڍݯS4K)<𕸮}ngd8jsg0N ^ן[:ݚ2E.Ah*բDn6k4v~\{uu=gM_-?'ϗc6XvFOO"^7BݹsK=p=o?˫銟/{U_+K~q{e9"oo⤲ .P7vCߒex%*4 Xm(/dYHo@Qv]`eI3,j_1TÊnv v~E%(:xpOf+JOwMt`ׅpEqLOgyGSzo Bh8",yrw7i0ج1(aC3w{kj˲>8vuhƍyCۖmh97n`٨Q}:@Ө^ZB9&avghYo79}`={~4`^}cלy@R=ZM&GG)툮=}KqsMMMelh299Z "襗 ")WD^p?\W:@s |Qz,kV@ˈA*Ղ( ZW)Xe2>KKL ln/K)-h_мG݉}Dٷ߲,22((4(<< (u#qDϖ]<(5_^V`ˇ =ȑ3|O g.Ft":V+yKک4VKd)WWNyAhEQ+$®|t+?3OtU[^'Ŭ4>N:qbc@D= \:UR߹ ]cV{})mFVɤ82KUT n}_a!)力-AN=@˲0::l7L{ħ1OL[Q2D9M ˶&}CqϸDѯR_a~>7ӷo^9vgv<~jQWɎHy f}qrd@~!P? S)55D kBSIJz|:="sv&aI/d0x{](}d;L&eˋŖ>/~<{q%%= ()a:uҽyV8uƻ(-hXOf9vE?'^8>ee@j_вqI55bO?,&&,,2((ϏuS3̓ r]T<ݶ=͒1+v҅i=rsUە.·qJ)VTTLFw٬ղNx155{t u6< }'.gnSaZM pn9 +Dh6lĈ޽1 l!+r'ݯaF 2~g"Wd߾{"-)WS/p2GexHv'<յ+D:Մ-Z{C,[,^~ݹ_UН$?uV^r!IXwCydbኟ7KWi6PKMROtZ:1;q0;4b,e <ϺtjߞˋuQ5B=EhZ$ ̉;({>ok0_5'o5 ?9h^@۰wߏ)S L"֒fW/0B7fOqYY;9TUt:ka笅իM&gg֩lON (D߯8aۅI1F},G.=^һΎ X Z^:Gca4T'`uxARybYY~"?'Ki=8XgOb"%&Z,[6=G0 !?v,&a㈪bK'Y튇_IPosK#hǎ)}F 痜"; 7R\/]=qַ -0VJK7zoKSR==GRYX:p D=b3gWnݲNxIחh\O[drt$?ZX۶M+onܳm\cWZ:@kM7++.\n` ! X>.ѰΡSGd/Z-t:|}~qu@ QWC׭TÍMOgYΑ:{yN4VW(7}=gS5&Sc諡'33zvbŽ;G(:xOH7{QVlWCu_΅*twgbce2(8Ze͛7xMJ~Rt;G x>Yi!WT0گ7XiivZhDpueaIl Ww[,D'tDg4zzUTC=b!}ϳڨW=`>T]:OC J:HY,D^^׊ݱbKŪOr4{Zg"w6뻔8uhPq8ugƌՖ*+DqԜ=ͶmǼ7sAG&TV 5:㓤;&_ASaWՂ0"gasf&<wGNIq7vhKjkYiiFʕ&3ȑuuDom]wmܰV>㭅W^뽼23A`DAѷΝsS;W$5~}<\,7nX,ZTW;O'Uws1 C|ݻY,#g ~z{ܫ%%?: +8ߟu\+ EٱYHBO|W@끉Кt^˯=q,8uru2D&alɓFC'R^94171ƹ/@[~b8)'OJuPS/dOf^. hDJ4\\nlŬ['|C4hPmmp0тI_99mpU}aй0}nqaiq:&q3nɗ^++Kʿ܉(i"8TZ-emv[G+-8r$(㜝Yǁ,#.#7Z'=YwΝU]uh9gV 2Mߛ j"ޖd29:Nqv{TZ+Ch EEu]:OknqWFbС։Yj0xyXa0u挵`\T$r_Kj (D۷DY UӧtDYVs D{Dn8+D;guuO^ ,˿Q}i ^~b)_io:ãBB23ssY;cR7jonu=&wJϳ59mL}`x8}@^4[ W'+X MzCAEe\qsѯñNEEܭZ;Ǖ+se]ʝ[$U:WkU_ڹZڹuvDQ;;"ZΪ/huuD%%(5 0_"޳ǎ:`r%ت8? 5~|y9qtu/2k'rв""uR8Lqgy뵖{$C]TUQ ?w_•>bǛ@k X R o;!CXhZ^KϘy1y#]tڷo|յG^4V^2^Oq&4`+6nި?,U=wF뚃Wmo LQ|5ᡇ9~^~Zӱ%u&`u떵f| DWXW^jq$֘˽^T[.u'AC``;1ԣy*fݸ:WClRIs|Ѯ%^MK~~aC_WPFh]&Fug:EEN4 q-.k;G˃?m;lщYsܭ)Sr-֪~ƍ&4'[,{JXaf&<Mͻ>S.θ~l1?[nzmڪGʚ+޸:y=BzW RSQ;W_ $m|ZRCb괃5_#-LꔒqN}p` X(L:-۰u3& 8|8qj*`+ u;*<ܶ}#Y7N:E(7Y dݭ+rX[qbgGTP`"U]ç8t\ wsuo97cǸ.\ng@[T9N3SB~Ak\ 5~nz^ JN’UkO n+-eW)܏mX@ 8C,KL'9"}{iNݹ-?9}ǂMd^f~@`&MR(*+riZiziO7{IJh;эs!?䖞NNfx~RMyf?;UA` Vw<+VE(dD>-KtTTg?k֚[U? >WW3{J lC..))rweN<<Νn￳wf„'xǿ`#L#L kw~[7y=W>"I/KjjޘO:4PV: os4Vj*&aɤPEQ ʂK4*\),dx\xrf)%;4 ,<9xyEGw: @JMXp50㧯=:ݸ} wŠFggy_?חfiVl`6;: W=fa0 `ٱkuOI(v׃8alSUz~޽]^ӱ` feTW J:HT'`++Ks~]sHM&tf$Vyޔ:if9@P&1E'H:>:ܙc ! ޽nm]4_}zJXw+!A+h*M'?'ϗc62H|bV<# ƽ8eN\VVnϿoQhnUO:X,.3띊k$Lpv^AbKeo7,E_gtVPq?nNihIqaᇬsquurrv&֭gOiVmT7k__ybZt4< Qfs2άa#Xi,oo녤VKT\l]A(UO wv|#T2OE{7ٳR=-Z}|\y׳\'y_Q:GC!IXeOUmXt} RJH[sz׹ܛ]۷]Օu;S?}:$DxVޢI*"'Rh*II&wo Oc ;8u͛N qRX*4c3NٷMt:@[p3W-VFuHqӀTDEuΪ+W1)zEE_Kز:Jɠ5@ xNpgFիi!%G,={ǘU;yؤIX=M'/Or'-;g<θVXVdغH]Y<Rѯcǥqo~1s9.{P[:Hcx:\cӕ+a>JEIXp"#Y2/8Z|܊e>~&HNqW+'_D$d.?tu6܀f1In[m~r>ϳwf^#ruutFiߝ׍x۳w߸*3Z"OO~L$>Qv+fmhJTmy?7wG~>\кUT0ftOXyc=wV/p Yzv &V7DdL&)|Gԏ* /]D>=̿=~f>%lIpwPfa=I$`Q?u3 \.?d4ueҽ HkY[rye%`+L&kjuS*WLba@\:9yckz^t<0_"ATjgJzX0/u.{0!WF~=- R{e^Eiιy! u8W/Lclž}VKTZ*-Á:ge9>bM_-Mqϡ7S{xe}n׶F(_ί\O/~_{=X-r 島uqb Bh(iJV-Or_a{v_'e[Ot{鏊ob4-^i\6_W)^:ܙCBÉPO[u0ȏ)g;w3IxECtnՃ)]=PX W&UUӀEA[/y8 {]oA@SqVR˔O]\XoD޼wVL g&8ŝ7L)ZbGIIs:4.o_/^<u*U<8joOܾoڕ+sY _{8뙗{Q?2֩N$E jiVRItŢVNxc/.  7l"u^uuœ_P4yիeܘr(Bk9UUmeeOtK%*(K^ڕA4Z,DԝuVh6x8ZQq%2ns23A 28H^G'>W{gw^|[&7}:wޝue~y\޻)ܬ-Evyd]x8]狛[EOLT(0 &Lk`ُ\lvvpuzuB Ņb!rw8u[8>OՌkTChHC֯gxn $#dG7Wʝ߶iA'jXh^Êcֹې×:ubZeЕ.vtWq -UWN"%Ejkפz!p-W|o@K9VZ_4Dd$Kx^dSŋ"Pfωl֏_0fr1.fgoTINK cosÆN2Nv]Ύ9ۛuhG·,Si44֨Q2YM Vk-b4$iO7Xhk0*VF (D&tCKjp_yqQ8G#ix:]f3gޠ|v֏"d(>xO&4};w% `yY+-5ի,Rwp9VBBQU:؊"hnuƳWtB-yښe^xUp"#yhd 5M*6}*=~{vvUQ wPIw.jҒKTh<0qG4uȑo<83paDR!;w׽{/jL+̕<MCBXi,{{"A 1Boh*.ZMt Hys}~%oǣu[-y q7 i>%[WE,+V6E"niavI {~<w,ӖZ˖zv<0JVM2tѬ Xc>$8i'GG#jyk8"@SXdrrb힞iis&SvXhÊcֹ^2:u)N@t2Rp9֤I VBSE'Yecv93OUPRW*.ELe2i@*""Y*ϯY1Wv]U/;~'~H׮(uz,(`M䙸{7}Iy4iyqN6lX"Z h+>Yp}utt)gMpwgL弬_+ C<=Yi.]d2];i^ȁifёH'8i/vaNii2(Vo!VT";' Xb2--w-?Wy;~j(Wqk7Vf1P?DGw̡P-:b L4vlCN2 q-ḕ?>2wj ֹ8sp"Qr-#!A.+hj7Z XRu9DQrcfd.. ͡{we&5εkF#w==DzuH/r Rc@P2jzǏ^$Fk:4qq{N226jK~Gm\<1U&KY1+8urp8A 6L.flř3FC. a]B>vXg?Rs]'GZy !\]9b!rs8;~wrFxդ$y X`,(뭷,q{qqGO@$ gZ^*?:J&9Qh=^]6-ug]=7 u: Y[S(X=MBe2fusuuVSӳ4h Ye'WȰf"c"*J k2>#{d2T-߾uN4!p4{Dڜ:4ر;; r[8$kC_S~:f3&SAEyxXݻd:QXI N6Y'_Ҿp{WǺt^nfv>}PA`""Btںju[uVfgubu/q\K:M,i.##sR)J%у3i_+ ڂ5NN?,?{wyڪ|s ,hoA˹)Yzxj.88,wvee|Q9:!ҍnn4V\LIdN7͎Df_%?)1"z_ל4~!_: 4 A30-zw X**DǬN:E՝6F`0ROGm?y9$O-%w2eذѣ]LO'*/FڊkU7N]/.Q{c uo[wNDQertϷrJ&_) #TDs}gny4͹s{#nM)|'*"ԉ\}b"n)W%"}CWEQQ%xlr۹DQn'?6e=7΂ ?!Ajȳe\-~ mAP^2dX}ͪ7r٬ܯU6UJӊYSQ2 UJFI)>X/(jTf:fY9W]n6)JHQ[#WTp^S\<(+ JggiW %TDś`P6-11:Ky"};\811QQDqqѝ;>}ŋS ae?oGwpr8'u ndH.'Gh֭3Y{~´4ʧ&Yd.".Э{[SXQ~.vRY]T>Tz6*u_tW 㳦  g 3Ɓ JAcaBa4nZTZ&[1傋q4ID}ED{i*)i*DD#yWnAD =!Dt:QWB"~E"n>>HE#"4QK)A|Ld&#)>%q(D7 "oGO8/%ߖ;JDwn"" 潸BDWH ""$wF"*QyJ~Co2)7L&=}&*IRn2D5&&UFuɤ~d SwWLLvUL&2#v?BD0kϚLNo۟t^SSVSVV23oܰB!},.^4hOLJ<ܱcgn*F(fxֹqN9r8ܬ,*ށvR_jg͞sا_8!A*JvLOZԙ Wz%' EU4`+nE,r9tv]/)Cڄjuu/*5/^R ?)u)%uq*dA}eg$&7B_f(5Th=$n8: =ADQ4N""?-EID{h䟿~&q]ʅ2ID! #⾠&@D%q6yXd}y6g,Drd 0x0 ˉkzr(wDԇb͠=DD\gΛ#V n (^p{IDATUꕪ ^Fg:dRxޞu.h<0vĉD_}f/Ho,]{ֽ{T M:@kQJە:OccUq&4`+6mN"cC]o.+6<)h#\h}ϝ* 6~tm7=ӿl,QdzPO*U`剿}IDD.&i)qù*QD4[-E;ASBRX O[(JRNjQq6l0D',RǪ0\q牊딣L'yTzU@&l 3h(u5["V/ƝNruّR[i8wڵ '5.СOb exu]LL_sKKkzT@A\س pIJHP(0J f)n(k~gǔ:nxk-TwFS[[^!"?ˆh '4ϟB=T&&Fz`&M^K_9ja^f\8\tn8T{S0 ΅xy}:͝3,k+,F֩EQ,)[I Xv gpU1Puh׎u.hI 9t²֩ZEG?[/\FA{f:EmBqg6dӀ8tl'** *mSM&+D$;0I0jf)kH}vR}E_RxQ,=DDJ'5FOt/kt:m]Lw|co9DYs=8YsIscp@X Y'E~aD$QRV&4@yr:0C5]bbt۷_z4g88T* ьMD+V# N2 ~ƽ旕?}P|PaI]. >Zbo3 ""2E.ˆzhZכNNS=pNYF#iYghcS4XhnN(SUI3GDψdqh(j^WCz vzs/H'ߚչT9ֹs!Nwqu:֏B{9bMbW~ld4oTAPF"aZ"Q5b{zβ\$ c;urKٻwg\ʔyII;;; sA㄄ ڳg~D{~W32n +**,d eeTrgk>;cǎ?.Rc_Q_btguuD^^MaёH8usts?qq?|3緁kkfμv]S_NReUq 'hG 9ĺZXlSA뢢H5iYhN<&k'zvӘֹq&L0`۹u*&Hްe)W/߃>]~ee4!yT/gg '{5__ī}e:iV8`6uWاLCXZXfZ6[e2kzTcu:֓DD^WF·k?up)ֳKj9NZZ~!ӵ(<7:hEu ~4ŋJE4t\PyE#d/ )٬s4' 666L]+}G-kkǏ_4jcD ׻7YYiiD))驩S,mLS }eb=]d ʁglAaHb2yBQUED@SYlBο88e4,87yNO;*ʩ[_9=FDQ?%Su R~)߮d29EԸwLt]Sxҵkuwۓn]ƹ~TW/dw=k29~tu:vlcZ A 8#G˥FҞs.]db9*]^V;͝KR`ggoO4cر&Uh &Le؞=9֩l)xyUR^:Oc h]9a]A֯7?MÎ F9u2Od;9VJYw}׷k{+d}l1wsǎǝ9+((MuY5W^U(X?3uϷJIu`eAq(ʥ RĔ1Z XwatDn8$f?<<4"#ucg??8xծGDGXǮqzt'_KHP(*+Y[a4ZOPnl6;8Nx|75~(:ۦmj"}A,]֧h[l!!O$ةӯ᛿w7l]xvv3Sx≒I10jP*Vݻzƶm&4-,&0:"zgͧ][Mc!CF"bnkN;wKP<wXejuڻy?g=:OcDԫձNb^Y%Eu[li2qr?pJ}HE]=ur{{QQ[Mc=կC%4ּ] PCwI0ЀW[ںZ1xosz;o$+ 9ìcS Є䟋v< ~2Io4;B.ˉ~{1@$H1sk=/>qk·S/2  . ^o4ϕ6TsGn,=(0 '^qU}awCï|zӳC6Fd8#*JJ)қ\QA$!4655֯yqUU(ɬހhF,67H<4|}=<&N4hiز,d?>ľ-,(Ύu.d/|%[:Oc)DH4aBQU: ؊ QT*ΟX4iON9WX劧]uJ,yB]3:!`iW{}5Իnܴg݅gwZծ]]W}|^][JqfW!dW?ϋYieL&gg"ANDfX߮Xa2NsCG&%%%%%?*ۆ@38u.᯿ sɓ@806W/Ν:t`-^]qZeޒ;0ک + \tԅ ^^՝jM5;{Fp`寋/w+)drtcǻr3ݪoVUw^^/\<۬C8ѫCmףǾq#==a@#!oG>QP:Gceg Ri: 4MmAқy~*z{1Z X`q'k|%mzIMm K|p̘\]Y`xiߝ]rqDٮsܭA`0<Ѷm yR%E~'ujrj jvvGos7W9]M?8`[޽um|έG=HPq"ΐ )SJNYv$%LNNS pYX=p7,".bDoe|OqůmYէ]FsK_|_qmٱqK霜:Zhtq!~]T*in]*j5ѪU&MliυRQR,H:k g͢P-:bMcذ^#)2];iZcGNx(:z[Oudlx͢r܅^ cT*"A ?^.flEj (D/Z/I&[eP=h6+*Bu}X']79!Sx]X_-=mںkW¶>~rѾM+l3ou}}έPcWz[2go8iy3G|`"2Pt:׬G9Ec6[+X`,4nN.tbuhO|p̘I\\lvyxحò+Fyvq ԼV7ޞu>\.%rr8_t#)l++_SLsucRsxz#^^NJM?WپnާGvD5#n/. -vj9awy d~oֆ۷Y[>htwg OOLAP(X{\O&َW&L/@ .E5boPkX灦ao͜9~|BL]|4,q֜Pq\٧ͥYx)M$qBI;fiO˿OE{x Zw4*gU߫^^N us.ٝx,<<-X/Je@Oܼ:GSٸdrr"ZZ+nĽL '9X W>4}lZCװBV?d4epH&yCg>]<̖^Z+3#.e_:OcED@ԥL׳Nb.ёF|;S6a9NwIZr3אָ;eLʓm gS/IxkT*ֹ {u~rw 4?6=<XXoŢ}:M_s4ͨz;Y`I—`o#GDg{/fֈ{u: @Ӎ2U/w\,,ӫ0&o0oS6LuX=fOZLlu[ >O?m-b?X,>>:""mO~ߜ]]% )/gd?Rs]yvuf0_E͛=)[*6m~_x`~lx'qxZr,$u/4ZQK;t߷q4oY灦MtcL: @r;hYeۧfkx^cY ߝ:2U[r{޹̞çڷOsky'Ym>wiuIfk OOEFw;ܝDc8aHkW{~6 VV.&Qٍ@ӊܙ_.]z`u[?kQw2bo鋗oo5PPY~7<վ= D11ַMaNZĒ*GF"Ιu-BGSu-wî)g'DG:mzJDFZ@:4{>|X`iZo3*uɱٓH#a Z!g>:&&B"! r9&_ASKJ>i|;7x "q8Y2N.I,*Uu5tItoWbV˹`U <1frz>=4dE&:iԩDT˕sτΝYvL+u<"5Pyzkhu.Y/޸a=y)UvTf"S~"XX;`LY2QryNb[^^]gqnwP֒}]% =:4-WW''ggG8{d2pb)vjoGY'^h,wmtfM7-ž_?H~tϔPTWqLM&)zBUr/96Y_L_79Coub KLڛo".Hˇ ͫ.,:/4Lu}8vOYiiׯ JE#om%C'OZ W?l}ܳgDii>h>- nl$`78¿͘AI7 ;umMvaaD& 4|84Gi͊:M'hΧǜ]ߩ32jԚ;تx'gV9֔)ryU`+xhnޞuƓ?.&;jfyKjYLQsj_?I}XNIOO%\AKڊ:M:.8.{P[:+ū"֔)IPkךLNND ZRS^N$Yc}&YcY WvZ@(;[(⭷X9pFGDw}~)?;"D4>\дٳ_?"/]:u*e_}W:wV**+MIe|t&\r* -آ՞2W7e&<[TooOD1 (Z6-r99Ar:vy];7X[mHd0XXRnƁ3h/ ,͡F[P@Jnhzq`\J@NoWU .**[uIKyTu t]zhϚL/[9=Ʌ]dZH[򹿗jFт֕|={d:ѠArym-Q\tDAAT{bB7OOֹZbQˉ-aޞu*OGAG#[N -^Rcv]F{yy899;͞=e}d2Y#fѯ6'{Jx@\z5]/Ld/-ݍ=h\{(d%$t|<߱Aɦ2,7IwryU%T֭:"g\B FRt;B8uȺtp4}qǍ qȲeTX4tcvFXm:_lYiDy  E(`؀sb2~K^uhaaD C: @$dh t'^#SY"s'K;s 0~e㿚e F8xֹbbj[RgMR?|SQaw٬ղNx嵲Af&lf@*kkoUGj3쯧&=|.=N>}ӈ3ECo$""avx/q6_qΤu|)?[nXXh THj8q.tOX2lQi]}Ih):4bc{"۷KXiZ'aeo՘m]rkCRܞ ?&vݪc;q{i'݉D]s氬- Qv |-G߶?i2vɾƉ`Vb8nSҥབྷۉ'~[sڛc.wnRIYwjZ'$h7.@DW\ =SW?]홟~b `4[K~p{w%\Oz yyk4vvDO>DvvjF:@T_J"a%'[}¯~ue>Bu1*JnTXOC2Y?^&RH5IJ2X{˴L&9jhR~ 9=(hc1=pbhDDnXhY5]>{eǞ?qg ЂWt.mXhj;ֱl X6l78Y-|￟sʯb ;SLN$dr9Tv;pp0\ Q12{j۹C]O&Qv?wAϞ_,QAiyģXiKIGx϶LFtbo:MʓAV&lfes?\0s#ҩ'/~K+An2߶xXFJ@sybxR7&}c'q]ֹ"1=-9R֢[%\mcv]FmG=:4G7u֭Ӗē'{ڝ򛘈gg~JMúulڪKu tݤ7Ѳ<2,?-S{G鈂9hdlŦMf#WOWi:F]tpcG4aBCx{]P 1xyQ&?X+9$&F*җgc6l(rOo{<}UfHQ'VTdD8zINٜŮؔ'J%Oig"DD$w<>ein^dAA J\Ng%,ݷsP#~ɖ?h-QzL+{4]>UbvͿ5 `b*>| 6kOB!+DӦ%%E쌅oy ]hHp,7ΤO|ܯ/4u6[;KQnۧ |K\niytqW⸪ARk!MɦLdWT?b@dig-F?栗6ݿD1nj؝OtϿe~hꔳg'j;dc/('aZ3\AJu(+1ꠅ[LS^>%'7֝_ݘ7=.[Fv=t9;tNNT*B 1wzvnE\}?Ș]P=ؚڬwbO+?iʝ77j>K3GNۧ1f?k踟?-ZH$&Q@lb@MiD#KNq8 [h" a,{daBOϝ+?>6vgA.:*v'7s32fL zg!%m23gKx~7ʏ b{;vlۥɓ>!bM4yAÆI$T*vc8})no|n{Q!v1 ce=ǚ^μ_NۏZHŝq`2545_rܕrAD'?ݿq)ne==p|j-\f̽}{|+WٲAXq'V{k~P`+Dž@V~[Ϟa'=[x6㣣5"ٳuĮp,7.-( o:jTל;ay{ԭk+߳52rB"Ap䱌Ҋ "!(9jAGnl7EBʋ4<,lôSl]i`ƺ2^@͡vvBxի_^tG-KMLJ50>`d;NbKrkoO]4_?ݻmNʈN|yCFT求>>s.,QٹkG_~ wtwf࿻&VSmW߽u8"BDEMKDBgS[ рzV:zj,G%Q6C.Uʟv{vltnl̠;2twm|)?QdHlNHS ǻ9l4M#hZ3g r]S~'{_p:ulol2 >3(,'UWSdtWϏش++K<x0QVtY cc_Ccbj/SG>x:nA8rd^}V bݼ~u!qAL27-t4[WM=p dl`W+lZV]mu-^nJVƼ ZR#ԁS0ص6vq &m۶H[!iDDAj1bLMfg_d"ˣni|ڣ?: It|a\׮mzإ=aaG\-8"( [*Rv߰Z]xeCtv]\MsVW{ac6ߖn\kה_ӅÂ?KΑG 'K<; JKŮfڼٱ䚰٬ hU׬V{ d 5wkqI#rghhYOB!v'm<턺޼q&3kz?ht!#3=]MpzSfi0]\)\֎L5Xޕ _/R_ZkW*jZʆs_ &L3"ZF.xJB :uȐѣ_oJJ**ck|R-^eO3F|p\F Ms534mvLUYηwi+^=\ I8xfS tT/5VD-9-b<~/?!ǥS.eoF2oR>4<&;u+&ؽ[- jOu߈Zqn+RNqR3ǘ< JϊFB'yeow4Gd\͏qrWfmݩ/-ٿkOo~l8#)Hk׎. SؤIbw99M2xD}+WL s}kVk߱~ǎuPb9*#EFfn=Dt>[:$ {(c@uaVCt:uZ;h5O!e,Y[^^>^|.:##YP(ޒeg\ײݪl"ʧDgM qr:MEgo+3,w /x3c7RyeI V:Gc1ƈܾ5qn]^?8" Gm n=.z;A~P]a 3*ZǦK. M[ԈNjOW`J|yr?GqG^ˡS Ye  (FL01H$t]85`TZQ!v  5sꆜ.KJjuCIFSWީdFSQl 2P*_[[*d2K,kDbVYd˕x^=CnSEY,Ped6k]SfTX3yy޿{^azB}:O%Rs""ap]WXX|SU ^+"bIyϘ+/hkNo)zW!v<]11u ڣGb"њ5;wn"vc҅e 7pSu'I9]ϟ^:Cwf]rvޯ?HY2_ Z]6/Ep0ov$ӳj B'aɉ6QB4H+% <BO0l]ۭR#߉ۄⲲ:Zc=u7u#Sa!=&NDԃ""z['>"MDD[^7BݻZmNTag^7Iyǁ,ۺnP]YCrБ={(M>\?j6mbc ;}1S~MCWL9K8yRS.eo;MﹸD#W3YZ՜y9]" D4@7xLV^.vVkՖ-65kfY~AatE&x; "zHwYNnZem69.^ۥ]$ NpAAqLf|6px^Hd.lyI\znސK.󼴀ݗy4YKq]>Y2H"{/y#?3%oD ((~ϣBb?-1fke}GqyFpKm7QWRQ"Y\[^l?ie9F&c X:I$M{I$n|3Y}-oJ| /ao]c\* g_˿b_qnR}YdR[m {h@=sb Ssxz~M<776"zuWMTDvYb@B#>/KO;sEwH|Pp㣏(gcΝ{ *,,++-%x֭kĮpL7;y) 4鋦u3\%;5w)]jw~i2N_ ¯=.S}Wc||{Z=ta9ce|Aq3fh!b@Mͦ #_iRsjzsjt:vJICm6ebb"FjU~*ߠXe1V' Eժ-ZU6jEEnRc*:˿im6REGů6l(}nXroidݮxUb.OD(DDl%"D[@Dɝ.$J' x(^QBHCDD^$_տ6ddI7kRK%I*5vdVo6W:fJ7̗̟d&9ZxsrL2Lfnmze9/| )qw"rd߽yz{_4Z9}yl [zD8C֡Cb9uDbanfHɌSL 2Y|2KO&r*}pŔmP}M[rwMzrae9Pfa r+c%-}6+{+OM~gCgg4Y\i@ڹ \իn%pa cV7+3|uIjEixT}tdRTJ4u!=Gh?\I+vc*|NwGr;w9K nD /.2 ΕSe?>vznܜp퍈6q\@"EC&O*փ𤤧 \NtݮR]ke3 ]qSJW,e+[, l6R4jQv54~U{N魝g4B]tL&?= L&VLo*<%"zJрT<""j/A!4z=UJYx:e/ _tnw#g2(ѯo߰T"jgW֞a3ޕ M$Cer_ekBc\l+o%*QgN5NW(L[(/\V Oc.x:,R2(e|pky}|bZk̬&+(`5| @,v\ MoWJhҥIKYR/?É.xj?ckEŎoտ?k*mG{On..bӥR)J%ѴiII=G`?XAT\\E!uw>*+|v}ѥˀc7>ӭKp'[KWiܓG.|RH9}80$[- [|y\;K$z=;c8OJr^z[4D&lAP55E&gi.u1\pNuq1+f./|f4ʎKyz|  ǟ``j ":.sJr!IҒn2CK:2s;+*hJ-DD4x?Q(5#"8LV*Ӈ+eRBb_9VXhWT{ʛJJU񖉌Lb{Z"c0x)g)+Թ}#}}zܟQNvb}6y^.RLxr0O]B@lg۷w{CY{v4#j+OND4m~iJJ`1ٗsCIv ;ղecLw{AۋMpk9[M&;o=7Ӊb@ͅ,xzE';O\s+۰!g#4?02h ֬!yŮplv8!j=S:$Hx㠓|7WtC>{6lx~ѬYsnkmejk8# 9a$1> Vgg+/Cgg}1SzPQw .uF3v"JDD?=xj@%9fIIgrf4z3H˩^TD6YI~c%[-7K]39*UQt~W24rZOz 3^|4cJ`:5t=C>jUlbnЁ+WG_OD; j2 `3c ~ܒHrv /6h v<11uԫGs{@zm7V 'wm^D/Tlr_5 rԃ3zm:&uܕ1|h)H<qD@(=XoKKW*Ůy|Cl?yQZwk@L:HacOD]>TQ"""6"ʦ\""1Zwf,?ع`FS.ZC.8Szw-ɫG\-,RKSK=hҗ_Tޯ_0dFS"Rc^ƾ1rpUFD$9ĝ jY~jHԛV[4)'^**겐`>{Sb?n !@eRR,a1%#NJo|9oJ~0>;sQ Mwsfbbbcʈl9xŮ*Ku4E۾r֥۷ZyDmE?¶&pܾ1'~b।s3#,- A6J/ξLYm- [|=׭T=:ךU˗z5qNM%$,k܊I%oIt&6z8F٬6eyMA|I=ZmѤy%V[,R+[VKu/Cy^d OTREJݼ2~dX!"_HOJTV&v*[\qLv3{{_.ֽ<=|~/8oG֝Eynn{W>h(,""L㉈2zpMDD{̿@[҈(442 zpD E[%ȂMa 9^P,"D ')pB}k2YS7a$X ޽6:-m˗b a׹|Ȯ]%lR|%zhժ}{"l6=qj[-C&/\۶&e(Lzo_]J-^y??֞xFʾ4W鈈h؏ S++; ]  \ `6qюV냯I||6ń,SU 6LW +*=;ޥ2f =B3bbaiJwB0NW̕X6Q--1Di&`\T,*QAEFzVRҬask>4 '{ -\|!Exν|}/1GD^tH-h/u}Fyy\~Se J땕i>:CQ RhF 8^7#}CQoc0 Bz'tDڐ.[VgkfYP`޽6to`ɴ\)v<[uЭh2LDG\p@$ZZѵד4H͹}^^n,L/,Mb ~F.,g-vq cb!wΝ6VKT^^5~WiiʵrOy*ֆg |"wr\ht'7\h$"uDDԑ* cM>2sEtn'e?|To\^N4|ꭠnٙ0W]V%d+{rscLJ^jUlϺ)f+ؗkl|lG&FO.'""#U^54/pL:":S|f4;Pԑ;wkֻU;}!"*׭  +z=P{T; |swȻҴqcsiT`1ƈ ѣO"b1Μvej̹9 &ڶ G^2}x andk>-<[$-Ps$'[NNbW<n:GTҦbMYRӽdI:]k%KNN%NN}eohv)VR_NB4]=|}Z=3-uOuMVݬ Y" b?KO~aQRtn@L̞iN]bxÐ&mtˆk->ϻ7{0 }pm۷PmUjoq嗵IE!!z*%$G'&Hd2f3ѕ+n]Pn[VHW3V2,G⬒HzY[x^[KC\+YzFzzT"Z8=m'yιE_H-il/>;Oy_'Z__v쏘\xيZ{%֚+[^p)t{fͲ*"ww"ʢCb?ǶԖHIT =n- }A+Kco45[pp WP^ ;7#.4n*vCx! ^%/l _P v<[D"MX5$v@pJSqe3S/q`M K_:xLV^.v pѮ]vN'vSRLmkʘV aYhOwɍ*h .d9]l)2\N I-v@fL3cE}g;i$W;w%$st~1c6mP.Y,D p$v ۷l:^_5bw[=TxֆMrbIp mt:++aN#^}AKl]gw 3;5^mjfJOLKVώ|]ԳZT>zFLZK:RtTHqI;!tkɹW}?.VQ̢Tnŋhy#vJpÇi.4IFRD/ڟ}_*v,pX V&/ZG,ġө K/ 6f U5 M=\]X[qQy^R,HOիe;&vUsv&z#Ə'rwwvvu v4/f84׭J[ #eآ;[g;փIbW@MI$Dwl:5O#SNSm~=,%'~#C}ޯh3S\NzzRQ;7˾o &->ƍ߼U+>R5+;/ppk^tn׶2g)ш]NylE# 嗷ִ7>=].D!]S -W%x05FGBdY)Ƀlߺ%vٙhƌ#b:gvƈJFߟ1H$/TqؠzӅo-iCw38dj[m6h$r##C\sG6U:^DQ/ZcLAuwtx/oչu'ŷ~̙Fa_ߛvѸu-)%Y3|||CR)}|NNú j;eE=ŲGut צxy@D$2 lw*c,Xc,Dž3E7=HRyybw8\]^ziq㈜u:G^UXq%i]%`/ՏyRMXJ&++j Vgg+eYA?UrZ=y^vNt_i043o[j[q/kځ;ɖ4r9' d/KI~VzZN.^ ,J>xlslO|KǷ`E,Xa"YzJP^ޘ;7PVZ*v߅,,mЧݻtZƖ&٬(v͍WZV*rݴL vTjJՉeq+ZZ"gOB).\y(5rk_Hk^tjk.Ej1.?[}č]׿ĉ+ x+Cefjy.\ZJ.m~~/FqsW pLg'soòex6NvbX%l…{|;'G.'aOY"vup /(CGv@DӧD..:U GTj25"hp$;Ż]c._"oCF:&Ā<{bƸ(?1RER9g[ֹ"EH~JWPrZmhӕm-}-RkC]!'#-$ ɮ{ ֔בuF<%/$n#IS=Xج^;̘NԭT׋]5ٳck}M:SSqV bJ fO}ϭd8"KV*-oPPK$E2"[#VT)D^X7jT>N^;?,.....Ί q.OZzVR6$&aʤϊq999;ȑy{yx]P 0F_UqE-R):tk^=4`'T$?M7Lo|ƙyybU n?(/G&:fbw\]u:gg3{noo__rݴL< vTjRq^=-֏>?Hq~OȦM6NGd9g|: Wr{٫ND7L P\dl Kl|k3gbM<վ jcn DW__i˨m_z?ǘg,Qmݙ뎄Ɩ[*{Wnqdf9޼y..%%bwaOf˧_"ԯ2"sZNVx6Nvbϧ(۾ CT#> 00f9st=P=(2\N II#GԩSUxf8lb$4R'^_VƲmϰp$ "j"'aE슿Mڴ(JMÑ`m'Xqh!GYyְ&sɸuV6MIqy80#78b˷ۃn5"ŅO9u]{]fwV7Ri΅I׿")&yS, X-&D:I6mL*J&O4hpM##cbĮǰ,TޅJ3.j6Ku5@u~>nd2^ ) A"!:xfSŮy|./c˛ lS7?_i05llް,l}rs[ҥͲ:V-ڲ'GA= SRRˬFd7g޷/uz88h^#ԩYVĮ YG/ϸ(U;hƿOs_sD$]5W \mdtb<>2nhwm}j>a\fPSQQf%׮ n|S9=]l5T{ޣEFyy昮,l'\Jhhw6$Xw_+x/v#0:ٹUq½ޭ1ZA޻'vT1]EԵkB£?vۺRJBs[(`W8XyS~}iX"W=jD #vȧa33Rtoc+8ZɰXtu 󳲆\m;.aٳ6th6urnD,] O [ Ot[^|;/{m4G௳vֱd+,v<|:{ :mb8* `s"웝-J VؽvUwQv;3۸v:#qjzQ:bw_ Ç+1~IG^{]NΒ \n^tYDe]PhѠAD'8|8L&JbWcO}ϭd08CX*-DHx:%X&`}A*%:rj,GzeewKRP v؂q5cq-wL^i8mg:W^/v'+verJ]\vEYu׷xE˜PPv.$pS ׏k'NWbEՎ vSfTSh<.:f #"'zՑ#Ǐ'hT*G>1 P'mq_t H~Wj[Ã1ɉŮGqߒ}6tSĴK[/Ůgb~'zM+,ֳS 2 2u寫Tْ|skͮtqe[mbw'L~Ξ z/[V5x#oOJ;AP$Ĝl};ͦsdAWN_ʈ9;k:UgQTEI5 R}u;վWX|ޕoإ+yݝ6>vK?N/TNP*.սT//;jSmMeKc,ҺD8s&h)r=P=dRTJ4n\~IID:4mڢUwTX*mq9Ww *~ OƍV94wjm;VǥGzee˱Z}t?w ⲳDIp]szJ.;rS^prg|̑_!8eogbgEHTJ$/;71L&jYүPiڱ׋1qDCt޻7QRR׮ ]Þj`NjT!GԖl$*dR&u-M&"_eU \mbtb<>9iֱm~wOplNafs͚~meIgD˃){VY|"v2ڦrܱ'Nd}_z2}Qђ+INNol3oqNn$=]FΏ7/10x &+X-FK6~.z1>eK 6JY̛*HZs\廯d%Z"BG܂Rpx?5Ap1ÃJO|d5{O|3ӽR,XLRRt2c 43hVG[GEijZ-v< J6H$vTu[x8(^n8*Gq$'[bW}?755U+l6RbN97w`H9ֈ9 ZhÕjRF;  ܎WSft>Y&K{$Pn;#g5AmLcbd$$^.ST⹸8fP"#7la2tm}ƍw *)9Bg 8E/y >mTb<>(pEE]fKr!"ןAioroە{i<J+Z0d^ ʋKϺNSTbAx +\8ej5}+vCK YFF IO> Řbg\֘RZ(҅:DΉ՛'믏;e QݺAAbWpkK~ZE\;_UT$ Qy9cW~ťMb+^pߘ}57u]ԦKd7\ NG "jzۚ\Ky!uvAN )ǰEau'7Znܧˤދ1^bgS omٓz赫WMQj_:t-4hX*x| zjg'޽w]h˻.:IubW@ue1FeͦӉ]YrX:mo֯={6-x4էm)]o^^Rt6Fv|g^>>?<ue}D"W~Rݩ{͛bwc1>eKoP"\&`)7 ltn,*ru%yV.\U*+JNٜĮ:4z{_|[._6PfRYٶ۾Jm{gOJ.`kAASoII^4wn gbg_,'']h0ڕ.sG.p MDFFG99iZU4l&RIyzLeeU[ Bu\W*&4AˉΟw={RPPWЁeebZ! j[ %%ΏVȲZFR:ٰBDGm[R/'b6w״Ib<8}CMI xl-ml e_BdE'3@ 00*{$ \m.Ӊ,1(2\N Jؾ}D1V('m6`(.vu% ݉vE&{=vYZ-BC6FCT^^5ԋ9]:6Dzc/\kCݝkd#TWʹf RVPTv2FK:-˾/Q + mFl[@@r% .O h 1xϫ[y {lp=RSo|9oJ\;]>p@XOMiRP}P=իu<=V޺uF"by/@ v,DrJe4)z=I$6D U8={Jz %DL2bDߔ(<]su!TBgh?JN8T]vӲeIqq,)bT%zn봴]!Gh^'+{$^ CllݺQQDfN| kPX,FJEdL*BVWV:Á,VWW `6.J%<_|\x 3/z\'B^r뭿H^n+S A>Ěy䱯pGXƺs\̍cCV; mK}#or{y(mr2g.QFԨaC9./wz^[Υy8ܑK} CW>TuoMJb,) W5o'k|Yz:Ur3ڷTOK Õf3fdCBŮq\Yyy^^D&SYNG$$_ щv_oZŮZnjGT;1o.HkT[pfkİ0!r ^_7Qee pˏ,q KLo\"ԼUC<<~\CT4366E1٧OzYfR]]v-j `R碓22/$ӛt 5JVM6tD:Ƿl)v٬kDD&SENWu Kͭ9U*vJǧܭP65yyJV=P YL?{Π1hYrB–k6jdh edbwRU(dK,@w{/ݿTzx,e=z,f#GlK<:Mߙ&Ҥ~$~/,v<zE4++K0%,CZP[bwcH85!h̘Ar j7ArN D3թЗ~=G#q"]d#o;{ǎԃG]*v8oo__77bb AۥR"ŅHBV"AH bc_d2/ZkW5似־&b@v7)@&Yl9C~ݣǭ 'v-z6X\wI^ߛ,ChH_tjf:־$3 kԈyKZOؖu킶bw,7ĻK^_evL<)v8&ZT^x!)i(;u֍j f:GYDz}~?ll99ca!wp2Y6MRS)<˯on䅈9a+Sz>[wτ鴖 <; E[%~w SJ>?{tFn5f b/0ϥK !!bgSiԻwÆ..%%СkW:CoБ? ÁnZh@-m- V*/$2++5"]!-//tAŮ?/,wws@?2yMj> +K*w~Jب{77wbz~{W>&\*Ө+.M owdoS*ve@PZ.=kΔv:9?ґE'{%6݉T&ww - _})S}|Įᖅ&SiQEE^?UQQrҋ/L>>DD8P}mftD?`֤_\_="^\{1YYTo\ .LL~AY:Z2؝/ؿ^J$k p![ D"v_u'̥ __(0,,[{T%V 8?e}+ԙ}a]<=]]܈f=zdN[ BV^QJJy+ɕDCҮ8}j>r(IIJv{9-?o_{XY?ฟVpxExȌ_-޻/Kwm8n՘i+@!J Yҷ\aabw9]RΔ˶>#F NAcIJNfbQ.s5lɨ]d2T*%;kѓ&]UoP"uwdɏ=` =*-bwAI4s1&5oޠAlU+)'jx˫S(3fÆOV3K/LDf3QM ii{5^Y)vTv0|})!Mm޼dgSVNaúu'z+77ggj>a9L-^xa{ůTbW}b%hpٳA_t A>pl"3&1q Qu!_eSY/QwMS>ŋ&?檕̱X<=b= \ }Okq=J.ޭ;1$d˾+\ҥE6m&O8p"R.Jϐ  \2K:y9T%#u]UX?0MbYQ.zM#)>eK&rl鈦Oͭ[cǪߟhڰ0VZbqs#6h =WE0hqub+ڢrGԫ7b}cUNNbwU^^nnU"LFᔷi{ݢ+3+"~۶] [7Gmۄ?vVw횐@@v[Lf,v%YJ%燅-YRTH4rsn.sϹܿO)Z,b}<_5pcͦ-^\5x'q=˄]&?IVmPS*/0tR- [#"L-/D4gY֭E4ztbDJBP] /GD^(z΋NJ:ztgicOuwS jF~˖jb]&#Z80KJuhwq!jF.-3u-WW AĮOO;n)vQBB۶:ai02&fKZ賴Bwμ6x-A/-A"8Nu#SnMN&*+jM&Wrs#Pë.9j,//In]XX( Yt:Z!:5)i(S\xhݺݻn%2' UU/WVCOtm:nMADD4] yz߯ߐ!DbW_ՒZgc BEaw'?oi$LNY<<^{m?}Q[ܿnyqTeJ[ɬ֪,HPM&""ưR&pkx~ThY9h>^/v@m9-hb<=>,؅ [ҼݕZ-}@D,] 4iM4rd^T J%v@,pHgî# de ƍ4FbE"8#֭Ev""CCV޶m"+xjɈLRgg"ɩj,օX) W;+ĉQ ju~ҷ~~:~sǧ ƈ(] dRTJԿǎݻu߲U 1]]a Z S<1Zl؇LVc.- }P3ƸqS%'DǏ_tu3Fd *գ[Hv"L2qRimZٯ'-mBo6#C"\saZCu_xMQѺȫ4lu] ??qKJzb?n‹R\L.,.^-i;wRfDG5R)DF%$O԰aݺYs-D #%"Yj>\JYWbKϷ{[bT֩,B݀};^v;xGn@D>@|1QZױc׮DD"Y]x-,"-~bCV 5Jd7DhF {ѶdZ!La;5[FD&޽۶={+bo6,?5rj K6$j:eVm??0$0_ر:ޔ{zkӃ/_eMWuf\Nt*Ů~t:Z!=:1q@uŮꆽH˾1VPW"r HYcJKAðCQ/țѦSMUj2qzbb~eϞ[** Jpp CRytp‡[>̒Jm6a4 BPܹ;u?%E.Gwiﹺ;!!]HUnLSDJD:"zQZ~p1cu:''>`?}׮u[2{_a j#civλ@s.}CDg08;fk$22:(""88$h]n%x֭kĮxf°j ê[5H.ʐ1g'YMsNwx8yYYb?o&ݜ3F{ΑЋV]{XhhQbIHNND4]BH8N"!ӧ}.]vmѢMG[7Ba ?zƈ? `@kvO<Ջmڠ>))]Hظf }HTՊ5å'M8p03g]|jۉ*+FAJ6TJd2tnRddZ9l&"bIfidiql O').y2_v),Qw >wqP//R/8~Eo%/Q7DDskر}&%]ӳ&&v{Z;ȝǏ w#׵ܔk g#_fŴgeVUtS#R""=\Ѫ]M7'߿cn݈ L.Ns^XnmD'v0ZBrtWŋm7Ts5jD-[-jDMIjL4hHo޼z_v޶`I,j0K"U fXI}[M_>>rE#+[5W;gft{Ss=<F st0 gt=:~Lk~XQ2BwqK#Ow!x7-S;ۛO~8N9;t:ȑzO^UPLf?QåK2c{9a,cg]2.b*l!Ej ԩW("bė^"ڼ={p̙bW<;\Dr{s( ]ʹ5 ;Q .DefvP > b %̇ ѣOfbbbc~iǎ͛ Į&,,c,;<3rvMyrz3:#{o2!^"CܻjUTwVqW\%@Pd $F{'\jr^'Hr^j앛sc?F^R/h#oa7o8;ozzVxA̔]ϝU4ߞ+uR"R3swwqqu暩Sg0wᙵs- ZP`t G_Ϸl/7a)7.tnMM" ۷o,q?n.b6uSe]]/[8;Ѽio0?u~rara'x9lm}-m✑%{I]r '큓!!y XOgmQQ-ygX9ȺoK/ד:m;$&&&jm^B-ߒgŻ2 +**(W>y*h,s-q6[Co SP>w];|ܠ? 9}G55?`] ~3e #~[1jl9ߟߦx!3wl80.O!!K<в nnF\ȕWN<}Ȑ!-G G2)=zÆMSQataYf͡CEE߮&zynR$򄃃]ܴZk;LJ͛V:h:zieed.OӧBu.67p87 X>ϖm=2p I8cA;u3&LF?O#rSΚ%ս{ϞFWQ׉VP {L7/pZdJiFw~XC $ӪоoJÆTZډǎ9*\frx>XO yO bz.('w7p87 X>ϖ-(9G//(hĴu{jWe7,pr2y.d2E&O>|hSG?^jX,ԫE␞nӹt, 822est/?5e?.৚E6lصkVommp~yTuάXmJĂ"/ [YPwczWܴ2:#w`u <[7Յ7(GOe_y|j``څY3x:2}B>?.""4kWk:E9+ɶ7jrv={JXLRgh`5Y󋟿:U>-64z$9voo<63/000{{M~~o9*:#ggGG''3ǎ0AdܸaDL&E/ԭiC7wTS]sZ;;evd3'_~)iߏ0 ON ֮)(())*2 sZmuhU{QQϭO?s몢޶ **Kꥳz8VXWG08`٪u`Nʛ'JMq?Ǿ}!(daγMMskC-bc##Df4 ZIb/rD-\8]Sg hg̮c5-SI)Sfknٺu߾{EVڲeFFStư+s(*\Hзcߍ ^ZU6/}mopnZ`; :Xm}VR]պcܝ.;/ljO),%w6ٜcl>@.r啓&͜)2p`TTtU񪮖Zzuӗw78`І|XzH|| *0Ѻ1䥠ǽKJM+w*)H7.3KKwE~PVtZ{/zA #}߯"*Yu+)N:g_ߞ 7{/|}kWe7,pr:9@ӣGdٓ&M.gtˍlnYj{]r9Fg v`٥]\, 7 ol6fٺ5)iիn;zD'_냧v,+ {>߈҈GEee݇|41EϔV'xw ~^GtSk:voSe޾'_o<Q$?H$>~ӦkERS23uKkkw# ݛRLs<3+I9O}TӞy ~]5^$6622*J+'O1CӓfͩꑆJs|Yم+z#M/K\ 0 5OKKM[N*@Galh:l8x>_Y7'sTeeBG+&tYk~8['VUsԽ#x`umqXOSɔqԬc"N;zz<_|g)Aig o,jǖ+U\ о̙sE3gDFunt3z}g+ߵ,@7t q}\;9 urP watk455777|ݞ=;vlذk֭" F: n&kk~se-< L*pl@W𚚰Aq~몪_ ^]MhĶVgxwrC잹Wf%]HAQI{npAAEOV\^FsU{e^#u.\]]\Df3 EƌX'FG:w2Y(RftkTUԈ]}"۷۷wfwBW|w^]'] ]5:sׂs_mmj ۍ~ :cwݿ% KU.utޞT jKl//յ7JMյxeōSʟ̨m//):'d2DF0`3Ǎ0 hz7}>`\\\RMMFg'Xtr+ջ5TL?}"_yߊ&9>3: 10ILLLj-8X\eۓOr7>?-W~HffvɓFW68OtuxuS]}x7g:ͮQ|m]=.uuKkh~ˍ#\5n46]:̩{sOxXgW{5,ˋXT<ܡ6'Sjf;:st,(TMܺNNGjR=+NVv\S{a]sUJ{0=884TK/Dz5<*/[ԐLm]/lZMs[t, ֬9tĉj¾e\-5]əGoܸvHQQYYiUt,P8icCΕ;pzR~rswW*\q{`_mW3G䭷d>>FwgSAAIIQȪU[n$ZZjjQF_11=zDF̘1f̄ "ݻ]NjY[+TGst{Zo,~N]"(HC/+Ja4s!/ Y7hJ ,`=ºu5k؉E"#u 7 8KSJJ*1W_=&Fg0[EkoM&yzbtp.[};,p>t*2kָq&DEuޣUYfY|?qfR\\;Fg0g]BF% M{OdY8.\:~<77;[d;l9t(##-*О!8mNj׳gFWg0Y-.Ve~-L;¯zj5`s&111Qk`byqISO|ݮ5@ԳgXXn"'1vH߾=zI/|˴n1#6˫,mFBFƼy>䥗nX D6nGYnjB{0 8?5N$[[{lھg8x!YNv(3mΒ e%q 6 0BAAiiq;vl"woJʡC"6n]@zAbbDL9r8.]/zDuٷvRˏ^;3>48`6oROϦOVl/g"nt`Ҋr-[ٶm={D덮c1M&YdȐؖر"FYTjnV|+~o~kzjΜx @ٔ+g͚ o-Sjw ѹ֊Cb?CRҏ?TW]@bZ,ȨQʼnLctW@OjĈ3WrpZVEI5+Ke曧_;[-c:+vfVwO?{,1ڒcrrN]nIN~ՠ I%FmQUUmmMȮ]%%l޼w?WUUV]윝DF8PdĖu@eY|y3c*/uߪ*h`Nku,}o_SCw{#Fe6Ȟ=))|=;v]}|D&L6l(a0@jZڨU뾷6ط\׭3: Zkm2 ݦPzL2h˴Zk'ټ4]kJ@{RJۣG^" C~[.]Rn7:0ݴZk־]Lt%K'Rwg-IMپ}{E33Dl63g6L&H߾=z-2vC޳RJ)^~@-P M!:Ou:'N6 _| p}2prZMw%kb1**Dv>|x~[))(/7:__Ccb926v ooOO//Ers%VMsҾ ,18VxnMt)7EyD?z]@Gbkm>.mہ{;qj շȑ ,ҳghhn\ 8RեUsXdmNͫzj/]TSct#ٵ+9y~]ڷO:0^n]ٿ"CƊ8;;::9]tP Dcmig&b>o |0kAK=$W}1$򄃃}@GvT~~^ȶm+zH}}cccupӧ_?c 2D$,,((8:LݭW T?7ߜ3gl6 XYMvKŦct -Cd;ܷOS_޽u8sezZ-JPO6M]Ͳz2'9<p1h֬9tplUӟ_|Q{w7 L󋋋D~19={>p@: :oD _:1;T[2z=3/f,6nŊZ;8-icS߯҅ [DkCٻ75С3WEd޽cbD8PGЮ]:'P<@T=6uqR_[D}aάss]=m<#[uRZLFQSSsssHrrffZ-WJI9v,=]fv+G׳gTԙUttDDϞ"fd6] tR/JOY$$WyV--'.uߪ*q`s^:!CVyN??ވFwٻ7%!ݻSR)(8}:F22D{:{qrrppp0KxYcдRs}SbdfXLB]n3gELr~@۽]()(/IJ:r!;ܿ_:Bp`Ȱa/2lX߾xz]_̗-jHf^/n;KX,v1VNL̻t)"Y#U.+?ڢ<={RSjh>,RV2ӧo3FTU*Q.z9sbjl4:} :oc>! qy3ϨOsm,_Zkȱc99N$&9,o_jjrHUUmmMѕ@2OdР3,mXTjnLK<{fYN,(0:? :9K]fyR-9~Z?={]aVVVnnvȾ}-ìÇE**:__OO//{GdРU]]P׫M>O}.pkr]cI84$apXze#Fkfeg>-&g] M>>-CZrPU/E[ٖ-FgEˀCק\_+MrPm[H??ӋÍNٿԖ+g>,RRRQQVft%p~x{ rd`]]w/[ԐLk3\RJimt`JȘ1Q\7+FjcI~Kot/'Y9"r`FƑ#"O]:-C .]D ;&(`@+dzX kM=-3'&^F@ ʷڸH`);Wtz1I.<=pUT?rѣ"))YY"6lt%:+I)I$""44,L_޽[W}CݡQdܥxYd&M0t^ |udi"__{l zH*˟$6}ξ:';3jV]]CC}ѕ(Vb'V pV2kWVGՕo,1p^+##; Ç33] E$6622*Jh>}""z<39b֮UϟzME2 09zpĨ(YEG 8}+d?ף@'RRRQQV&r㙙"Gde;&.R_ht%ε`@}{ݻe`!ٵkxl2;@'sD'wPZ=ǧE[ٖ-FgR*w?gSY@VzôiFw0NccSSSHzɓYY?rֱcg[hDzn=2G^DbbZn=<`m٢S3^o۶,ߊ qhJIz>Or ee"ii'NYii'N;&R[[__Wgt%@-ս{Ϟ"zEEbp%+""<1y^}hѴȾ#W6: la6eN#Feb|Y~ݮ.SP,SvZl6L&𐐰0~"#{ׯgϨ(.]&-?Cz.?s3fp0@}{j9:02kEV+ip%SURJ)8`]YHGT LTUԜRֱc'Odffg>-ּ\3wwWזAUxH>=zDGGD%it%vGjՃSz}9s(5@ ZBВɓe\z I3._yyUUe+h<%rh˕JJ**ʌqvvttr3,[3W="7W!=]gy}@)nt`CWyD$Z*g0 @SQQ]]U%rT~~^HfS'O8 ҽ{pp׮-W#4{CBDfl6@TW ) W Njm:ӗ黯BK?S|= ihhllh9~#jl|gN6ߢFtV !111Qk0飒+t^,bbsNj90/"ӧ EZk퍧HnAA!!"]tr.]DVP$Jݚ#2wM~{Ҥ8 Ђp Z\쒋gTgt0uuj犻kAA"]܆$`t5{6mUT)78oYRn7,hkjjjk[Z?Vч-VV`''g3+RtH: qssqqq1 . }ztJ]5{:.߻<: 2pEPPG5F^?̝>hol6Y_UP RTTZZV&R\\^^Vv#-flh9׷e8fHz_sc{i\CI15ˣ{?y}`mTeTx,z$Nz4ettTյ"EEee"EE-RR3UUUV=kjX,aOSޭozyyyLJLF? hǢ$JݚfA7,*>xgԭ~=dcYowi1~}ٵ^quUV2ܪhlUVVTmfF?mQ땨<=E||<<<=E||<=[<-fX+Qyz(p;di^&[ǜ9s(esovdu,}o_ؼ6v\y_oP]wIpu5ZgX?hܖVUܶ]YY]]]-R^^]]Y)RUUSSU%z@:rwwuuum9S˫eH2hã~//T&jdmJ)}>f3?oy0ߺz.^^="7ꞻat=3jmlVmmMMˀVZH꺺]ZMnn.."...."ήgS7nljmt&&^x:9K3'/KD%i7$7e}9mccSSSHccssSә!WSSssssOolljjnnmll|tU_X_/bZy-fkhhhhhlkv;#dVb6go=bXL&NN"&R&b"Ù?Z[ѱϭ֖o fbqtlsrj83rppr:8ojfaT%{OO2k]lfRLϩSF}atBq}\;9լJv-9S'#FYu@$)Iooyښi/_>gΈ@ ?YsPQ"߮u5P|>xyWZ_/eW|kc8`t:&X~VBFƼѺCJ/Դ;BZ' `t@] H\|d)a1#KK@ R#[$}9z^W9;`JZZ*7K/'}Oߢ΍mROφ+Uڡ#Fh<\. Sڥ(䓙Iqq ,LBF% ѲQdU+-H~KotXj<$5yyr+w-_njj;3fetK0p$dd˘(p'˵tz.Trbt',PO6MyuzI?+~ X +š{mW|FuR&L/ 7+MQO˃uGO퍶m˗O>堋 &Xڬ5k**4=f$&>`F,a謗K.%SZFݡQ$X\d5< -_ܳhoպu!Όvo}v슝>>mO6F^qJS;ԓ7 }d~v(Ps9b$L}kң:gUL|j;ki%emK\fz {wp D,Mmcbz|L||Ng;ozwnrtbtujɑt:W1{ 0:h`Zkm2 4uNQȑ/ fϖdޥW 0Y-.V>zW_@uDo^|wPJ)6:H`Xb f~+Ujr 2B\"[B Q/jyD?%#;!A+Gv|sϢU֍WRFw,VNL̻biu0_N>aE]'jXA#zܗ_NJ >>Qlݺ@)nt'Й1d>k'̚'MuzV.5KnүOO;A[%[^-- "Mk׶^*[~}\\\RMMFg`9z{RL|Q/ fϖdޥW <L$Cr׬ah Z[N?^;Keb=I͚%SjN rR}"O}ikpZVex5^)lt&ߏQ_MGL>J[Rx A 2x}D$JԭYY$'eҚ5M,^?{RJk3; Y5-;͚%',#f.7NLj5<\:Y->.5kq2X%}̤~Ҍ`XA$d}˵gKr̙'M8FwmRnW2_~;N?sm!VM>堋 0.!#c^X箜%'e1i@/@;dU7me _F񳲛vZdȥ Fg`Ϊ+Vlvq*.0@DD8tյKfMz H񊌔.j K{*."Bf}_Ddy/"B;$D/d6/^UKtDTmSrBJ`zlRwfOKѣoU^ @zDȦ{wOje:.q엗""<\/T^?d//jsq=}ZK?+KbvʒI2N^Ry<+K*ojfb$+!,_蛑irwwž`J՞|kWizFm _vװ0iknxaaq:aa2[n;9|jY[+V~I9*囜٣fY7NR:%7#Ts {@G <[<`S`ey`ml:K`ܥCBtyK@\$ݡDQ-Y!J d![= P=Pz{enJקeva'f(*+ssM[${թSj)%'gJXLRy ڹ)+vHۮҥ>J[ZugZcWZ^PǔP~~*g_?wywe~~$GG'pVKfHWKJJ<[@}\RPEEREELЪDSUbO[- TM'O((w~ajN]ͭ:N2=iQ>ҩTZ߼Vw3yB7N7-g!>%zD{xCjTu%tvoyT"< ./system/org.cmst.roothelper.service; echo "Name=org.cmst.roothelper" >> ./system/org.cmst.roothelper.service; echo "Exec=$$CMST_LIB_PATH/cmstroothelper" >> ./system/org.cmst.roothelper.service; echo "User=root" >> ./system/org.cmst.roothelper.service INSTALLS += service # dbus DBUS_ADAPTORS += ./code/roothelper/org.monkey_business_enterprises.roothelper.xml DBUS_INTERFACES += ./code/roothelper/org.monkey_business_enterprises.roothelper.xml # header files HEADERS += ./code/roothelper/roothelper.h # sources SOURCES += ./code/main.cpp SOURCES += ./code/roothelper/roothelper.cpp ## Place all object files in their own directory and moc files in their own directory ## This is not necessary but keeps things cleaner. OBJECTS_DIR = ./object_files MOC_DIR = ./moc_files sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro cmst/images/interface/000755 001750 000144 00000000000 12645604061 015367 5ustar00andyusers000000 000000 cmst/images/raw_art/nm-signal-25.png000644 001750 000144 00000003044 12645570501 017707 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTE̒~hhh"!!VVVĹõ&&& cccuuuJJJoonTTT}}}JJJuuu444%%%opoopo###EEEGGG___rrr oooyyy\\\lllccckkkvvvWWWUUUqqqDDD|||cccKKKzzzeee$%$fffZZZ qqqbbb111YYYaaaMMMN2WtRNS%(Sny|xlQ'U{{V'lyfSHHSfxo.-t{Y++Vxx5'ts: , 4ly3No*?hz~xc8 "eT _)!d_ U'qpSAD\vl pyN (\}hps5 89%Fzg.+Uy{_6"g}mFuO68TvJ\./Y#?  $!E%6F Q.=bKGDH pHYs$$ctIME84~WIDAT(c` 021 sprq  ! KHHII…UT54ut!F&f V6v` 'gW7wO//o_? EpHhXxDdTtLLl\|BbRrJjH&=#31+;'7/??/lTYyEeUuMm]}CcSsKk[b{Y]=} &NreNx;~<CRn-̫y%nNyncMĪ CZ.2iO3h46eL 3[U b#\~y@L^; 8جk^CO.\=}$4 45&$-4-)2?-5+DsO|GR:So|O n9y ٔ5S(hS(4#4L5uj`fD$9N oC0y'I1ױ-B M5Fl$G% S ]PYАv>-8&<!4J#3LAL&LL%w^w_'1{B}yѦ'>Hy#B^PCnRJ u˃INd*CH,9 2bWI$$3[0`R4ho- r-!.IƒI u#NeX <YW O7D1 ǔʞ^ܻ8 շ -GƻߺX|%.D諭2r %nft1 U1 #78[| Yi& w +Y7nC>Ҕ&8[|9B`Ue0E;2mڵ~ mQ& Q&;\^r7 `^5&բsϐE@/ '.~qGؚMoe ~vG~ YvA\.PT4+k֔eWam}  2 H~ '0[ <! Mgx S X@ Xk'( [NY cr1 d f lfy | ~V ޢ3 6U :6 Sk OS dC m  6 , ~ ~ ~ ~ U^%  ! ^Ԡ |ɋ #b^* )^ )"t - 7N 9ͳ܆ ? D5 P} W3 ^e a4 c48 eK< j5E j5 sYͲ 'r %^o a  n) D I : I , 2Dm :' ŚIg ŴI$ ȗ4 ~ εE$ V!: n#D 8 և j $(^pm )' L^ RV~C ^=L _we a"%_ a"; bȞ c~ h> h>I l." pS }OSM ~# Z89 |w3  ~$ )ݔ )B )= O ^ ~j O7N 4  ͛} DŽ27 m %3 (w 1 37 4b ;~s G G M} M UTNL b0M cG9 g, u?[ v9 T <8 - Mm  ߵ S$ 6n R Ӛ ts ׅS ئ&T  }>x  % x ֢ -^* PtՍ T^Ba VR: V`:E V! _^ i?2 i?2 nE NS  . N") N uD  ͑۵ b? S7 h. ^| B >O nA" t5W HYY jew>.B%U>+,;I>5 9=LN4{P4dIiOr$ {D)N.N^ 0de!H xɾ,-)b>?V)n.  aICJE&B^"u,F~As1AZ;a1.c-gD`"g>Lh~m!nqWntN@T5["|1w61.)!^H1q}>{-xN-ͻn^|NٚiC Sm(&C)&CancelAgent[x(&H)&Hide PassphraseAgent N(&I) &IdentityAgent T y(&N)&NameAgent [x(&P) &PassphraseAgent &SSID&SSIDAgentu(b7T (&U) &UsernameAgent&WPS Pin&WPS PinAgent...Agent<html><head/><body><p>cS^vOu(O`W(kdON-cOvO`o0</p><p>\bO`vQeSѐ~connman[bz N~~c0</p></body></html>

Accept and use the answers you have provided in this dialog.

This will send your input to the connman daemon to continue the connection process.

Agentd<html><head/><body><p>Smc0<br/></p></body></html>K

Cancel the connection process.

Agent<html><head/><body><p>SmO0</p><p>\O~connman[bz SѐSmclB0</p></body></html>

Cancel the dialog.

This will send a message to the connman daemon that you have cancelled the connection request.

Agent`<html><head/><body><p>R N喐[x0</p></body></html>Z

Check this box to obscure the password characters.

Agent<html><head/><body><p>ConnmanOu(mOVhv{_U0eg,hF\Uy:NST+v{_UubvQW@0</p></body></html>

Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.

AgentZ<html><head/><body><p>~~c0</p></body></html>H

Continue the connection process.

Agentf<html><head/><body><p>Qe WPS pin.</p></body></html>8

Enter a WPS pin.

Agentz<html><head/><body><p>Yge[xSu( [Of>y:W(ّO\N:S€0</p></body></html>n

If an old passphrase is available it will be shown here for reference.

Agentl<html><head/><body><p>QeO``cvQ~vT y</p></body></html>c

Type the name of the hidden network you wish to connect to.

Agent^<html><head/><body><p>W(kdQe[x0</p></body></html>A

Type the passphrase here.

Agentb<html><head/><body><p>QeO`vEAPN</p></body></html>e

Type your Identity for the Extensible Authentication Protocol

Agent<html><head/><body><p>SUQT/R bvmOVh0mOVh\ObS_f>y:W( v{_UURL eg,hFvQW@0</p></body></html>

Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.

Agentb<html><head/><body><p>WISPr [x.</p></body></html>7

WISPr password.

Agentd<html><head/><body><p>WISPr u(b7T .</p></body></html>7

WISPr username.

AgentZ<html><head/><body><p>f/NNH</p></body></html>3

What's This

Agent<html><head/><body><p>_SR e Ou(WPS push button N0 </p></body></html>Z

When checked use WPS push button authentication.

AgentNtQe Agent InputAgentu(mOVhv{_UBrowser Login RequestedAgentSbi\UNSO (EAP)(Extensible Authentication Protocol (EAP)AgentQ~Hidden NetworkAgentT/RmOVh(&B)Launch &BrowserAgentv{_U URL: Login URL:Agent xn[(&K)O&KAgent[x PassphraseAgent [x(&D) Passwor&dAgentg Rh(SSID)Service Set IdentifierAgent(Ou( Push &Button NUse Push &Button AuthenticationAgent SObvWifin (WPS)WiFi Protected Setup (WPS)Agente~g RUFo+n8 (WISPr)2Wireless Internet Service Provider roaming (WISPr)Agent O`o Information AgentDialog NtlBY1%Agent Request Failed ConnmanAgentConnman  Connman Error ConnmanAgentTConnman VNNN <b><center>%1</b><br>f/T&͋RConnman returned the following error:
%1
Would you like to retry? ConnmanAgent$W(_R0NN*V^NKRM NtlBY1%N05The agent request failed before a reply was returned. ConnmanAgent %L1 BytesConnmanCounter%L1 GBConnmanCounter%L1 KBConnmanCounter%L1 MBConnmanCounter %Ln Packet(s)ConnmanCounter%n e %n Day(s)ConnmanCounter%n e %n Hour(s)ConnmanCounter%n R %n Minute(s)ConnmanCounter%n y %n Second(s)ConnmanCounterd<b>]O </b><br>O `;ep: %1 (%2), O : %3, O N"Y1: %4FTransmit:
TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4ConnmanCounter0<br><br><b>ce</b><br>

Connect Time:
ConnmanCountert<br><br><b>]ce6</b><br>ce6`;ep: %1 (%2), ce6: %3, ce6N"Y1: %4N

Received:
RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4ConnmanCounter< WiFi Y:<br> %1 ]b~R0, %2 ]T/u(. WiFi Technologies:
%1 Found, %2 Powered ControlBox fTJ Warning ControlBox%1 (%2) Q~%1 (%2) Network ControlBox%1 - N%͕%1 - Critical Error ControlBox%1 - fTJ %1 - Warning ControlBox%1 fee_N Su(0%1 change log is not available. ControlBox(%1 vSf/ MIT license.%1 license is the MIT license. ControlBoxRhmKR0 %1 rHg, %2 by %3 0<p>N*g Re/chLbwă rHg, %4z%1 version %2 by %3 has been detected on this system.

This server supports desktop Notification Specification version %4 ControlBox%1Qs%1%1 %1Off%1%1 ControlBox%1_%1%1%1On%1%1 ControlBox QsN(&A)&About ControlBox&AwOken ControlBox ~ߋ(&C) &Counters ControlBox~O`o(&D)&Details ControlBox Q(&E)&Exit ControlBox ^.R(&H)&Help ControlBox f\(&L)&Less ControlBox&License ControlBox n(&P) &Preferences ControlBox&QT ControlBox r`(&S)&Status ControlBoxe~Q~(&W) &Wireless ControlBox<b>c:</b> %1Connection: %1 ControlBox<b>g R:</b> %1Service: %1 ControlBox
IPv4
 ControlBox
IPv6
 ControlBox$<br><b>DNS</b><br>
Name Servers
 ControlBox"<br><b>Nt</b><br>
Proxy
 ControlBox(<br><b>g R`:</b><br>
Service Details:
 ControlBox"<br><b>e~</b><br>
Wireless
 ControlBox,<br><br><b>NY*Q</b><br>

Ethernet
 ControlBox0<br><br><b>d}"W</b><br> #

Search Domains
 ControlBox4<br><br><b>eg RVh</b><br> !

Time Servers
 ControlBoxX<center><b>g*W(kdg:N b~R0|~bXv0</b><center><br>kdz ^NSu(N{tO`vc OFf/bXvVhOyu(0<center><br><br>YgO`W(|~T/Rew R0N*O`o ^vNO`wS_S|~T/Re|~bXv[XW( \u( <b>-w</b> SepT/Rg,z ^ ^vW(g _ʼnv`QN nNN*^e0 [Ev{I_eVN T |~߀ _0

Unable to find a systemtray on this machine.

The program may still be used to manage your connections, but the tray icon will be disabled.


If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the -w switch and set a delay as necessary. The exact wait time will vary from system to system. ControlBox<center><b>bkcϋYee6R0NNN*geDBUSvm`o0</b></center><br><br>T y: %1<br><br>m`o: %2
We received a DBUS reply message indicating an error while trying to scan technologies.


Error Name: %1

Error Message: %2 ControlBox<center>kdz ^Ou( <b>AwOken</b> Vh rHg, 2.5<br><br>W(NN SN S^<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>CMST Vhf/ AwOken VhvMuO\T06
This program uses the AwOken icon set version 2.5

Released under the
Creative Commons
Attribution-Share Alike 3.0
Unported License
http://creativecommons.org/licenses/by-sa/3.0/legalcode
The CMST icon is a derivative work from the AwOken icon set. ControlBoxf<html><head/><body><p><span style=" font-weight:600;">^.R</span></p><p>z ^v^.RO`oN;u1N ev &quot;f/NNH&quot; c cO0c N c ^vSUQO``Nvyv0 &quot;f/NNH&quot; N_SW(gavN S.vN N eSU0</p></body></html>g

Help

Program help is mainly provided by the "What's This" button in the lower left corner. Press the button and then click on an item you are interested in. "What's This" is also available via context menu by right clicking on a button, box or text area.

 ControlBox<html><head/><body><p><span style=" font-weight:600;">ވLj!_</span></p><p>ވLj!_cQh\@ve~Y_Qsn0bS_ވLj!_\OQsb@g e~Y0y_ވLj!_e e~Yv_Qsr`u1Tv{VueQ[0 </p><p>W(ވLj!_bS_g NSbKRebS_Y0OY gN`QN g PvWifibrYOu(f/QAv0</p></body></html>#

OfflineMode

The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not.

During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.

 ControlBoxP<html><head/><body><p>Connman bxlNYyO\ bg/ 0W(N-N:N[ftNQO\ Y  N*ehFQf>y:Nb@g ]w勾YvO`o0</p><p>bS_bQs틾Y SUQ[^Y<span style=" font-weight:600;">]T/u(</span>hQvc 0</p></body></html>0

Connman refers to hardware devices as technologies. This box will display information about all known technologies.

To turn a technology on or off click on the button that shows in the Powered column for the technology.

 ControlBoxX<html><head/><body><p>~ߋn</p></body></html>8

Counter Settings

 ControlBoxd<html><head/><body><p>hO\&quot;o+n8&quot;v&quot;W(~&quot; cv~ߋO`o0</p><p>OY[Nzepcnge N,hy:cR0_W0vЄ%UF0</p><p>~ߋ^v^`;f/Su(0~ߋST}NL (-c b --disable-counters)yu( N_SW(Pvq6v`QN cbTJ&quot;\1~&quot; r` ^ &quot;W(~&quot;0W(~f/ &quot;\1~&quot; vcǀTQTvr`0N_g S &quot;\1~&quot; vc W(~ OFf/~ߋS[ &quot;W(~&quot; vcg eH0</p></body></html>

Counters for the "online" service connection marked "roaming".

In the case of cellular services this normally indicates connections to a foreign provider.

Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register "ready" instead of "online". Online is a "ready" connection that has verified internet connectivity. It is possible to be online with only a "ready" connection, however the counters only work for they "online" connection.

 ControlBox<html><head/><body><p>^o+n8v &quot;W(~&quot; g Rcv~ߋO`o0 </p><p>~ߋ^v^`;f/Su(0~ߋST}NL (-c b --disable-counters)yu( N_SW(Pvq6v`QN cbTJ&quot;\1~&quot; r` ^ &quot;W(~&quot;0W(~f/ &quot;\1~&quot; vcǀTQTvr`0N_g S &quot;\1~&quot; vc W(~ OFf/~ߋS[ &quot;W(~&quot; vcg eH0</p></body></html>9

Counters for the "online" service connection that is not marked roaming.

Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register "ready" instead of "online". Online is a "ready" connection that has verified internet connectivity. It is possible to be online with only a "ready" connection, however the counters only work for they "online" connection.

 ControlBoxp<html><head/><body><p>؋lg T/u(NOUry[hLbvNx0</p></body></html>L

Default is no desktop specific code.

 ControlBox<html><head/><body><p>kd y]yu( VN:_SRMconnmanOcS׏N* yOFf/N OPZNOUN`0</p></body></html>

Disabled because currently Connman will accept this option but will do nothing with it.

 ControlBoxx<html><head/><body><p>f>y:QsNN*z ^N-Ou(vVhv[hF0 </p></body></html>}

Display a dialog box containing information about the Icon set used in this program.

 ControlBox~<html><head/><body><p>f>y:QsNu(Ng^g,z ^vQt]QwSv[hF0 </p></body></html>

Display a dialog box containing information about the QT toolkit used to develop this program.

 ControlBoxp<html><head/><body><p>f>y:QsNg,z ^vO`ov[hF0 </p></body></html>h

Display a dialog box containing information about this program.

 ControlBox<html><head/><body><p>Qz ^^vydbXvVh0ConnmanNON[bz ЈL OFf/N QSg,z ^{t0</p></body></html>

Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.

 ControlBox$<html><head/><body><p>_:R6b@g WifiYebkc0NbgLT}NL <span style=" font-weight:600;">connmanctl scan wifi</span> |{O<0</p><p>W(bkcϏz N-c \yu(0</p></body></html>

Force a rescan of all WiFi technologies. This is similar to issuing the command connmanctl scan wifi from the command line.

The button will become inactive while the scan is occuring.

 ControlBox^<html><head/><body><p> c h</p></body></html>A

Hide the connection field

 ControlBox<<html><head/><body><p>YgconnmanSN:N &quot;Y1%Failed &quot; r` [N,OOcN*r`0</p><p>YgN*Y hFR CMSTO\ՑecR0Qe &quot;Y1%Failed &quot; r`RMvWifig R0 </p></body></html>

If a Connman service falls into the "Failed" state it will normally remain in that state.

If this box is checked CMST will try to automatically reconnect a WiFi service that enters the "Failed" state.

 ControlBox<html><head/><body><p>R CMST OW(_SRMu(b7vT/Rv_UNuNN*T/Ry N Y ROyd0v_UOMnN,N: <span style=" font-weight:600;">${HOME}/.config/autostart</span>0 </p><p>CMST SONubR dT/RyeNY9Qv .desktop eN0RT/RN,OVNhLbsX _Ř{W(hLbsXT/u(0</p></body></html>

If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: ${HOME}/.config/autostart.

CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.

 ControlBoxl<html><head/><body><p>R N f>y:bXvVh0 </p></body></html>f

If checked an icon will not be displayed in the system tray.

 ControlBox<html><head/><body><p>R N e UIcNvcy:OT/u(0</p><p>_SO`u( hRcNN cy:O_9Q0 </p></body></html>

If checked the display of tooltips will be enabled for the interface widgets.

Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface.

 ControlBox<html><head/><body><p>R hLbwz ^OW(connmanvQsv͉NNSue_9Qwm`o0</p><p>wSbXvVhYt bwz ^YtYg[XW( 0 N$N T eT/u(0</p></body></html>A

If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.

Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.

 ControlBoxz<html><head/><body><p>R W( hRbXvVhe_9Qr`O`o0</p></body></html>

If checked the system tray icon will popup a status message when you hover the mouse over it.

 ControlBox<html><head/><body><p>R bXvVhOW(connmanvQsv͉NNSue_9Qwm`o0</p><p>wSbXvVhYt bwz ^YtYg[XW( 0 N$N T eT/u(0</p></body></html>%

If checked the system tray will popup a notify message when a significant connman related event is received.

Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.

 ControlBox<html><head/><body><p>g\S[hF0Yg|~bXvVhT/u( S.VhS`bY N*[hF0YgbXvVh g\S\N Su(0</p></body></html>

Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.

 ControlBox<html><head/><body><p>bRhN- N-vg RyR0SNyTb0</p><p>N*c SOW( N-NyTT/u(0</p></body></html>

Move the selected service after another in the list.

The button will only become active once a service is selected.

 ControlBox<html><head/><body><p>bRhN- N-vg RyR0SNyRMb0</p><p>N*c SOW( N-NyTT/u(0</p></body></html>

Move the selected service before another in the list.

The button will only become active once a service is selected.

 ControlBox<html><head/><body><p>^8 ~ߋO`oONv}/ ceTce60O epOOuYvR0N Nk!T/R0 </p><p>_SR N e kk!cmstbconnmanT/Re~ߋO`oOn0 </p></body></html>.

Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots.

When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started.

 ControlBoxf<html><head/><body><p>bS_Mnprovision Vh R^bconnmanMneN0</p><p>NMneNW( /var/lib/connman b@g gCN: root:root 0 CMST OlQNN*roothelpergeSTQQeN*eNY9QveN0 </p><p>N:2kbrootrygCnu( VhSOdO\TN: <span style=" font-style:italic;">.cmst.config</span>veN0N*TOW(eNO[XeRmRN ^vNN Oe90 </p><p>N*VhN bR dQv[e_R^vMneN0</p></body></html>

Open the provisioning editor to create or edit Connman configuration (provisioning) files.

These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory.

To avoid abusing the root privileges the editor will only operate on files with names ending in .cmst.config. This file name ending will be added automatically during a file save and cannot be altered.

Using this editor it is not possible to edit or delete config files created by other means.

 ControlBoxh<html><head/><body><p>N*ehFQf/cSvn0</p></body></html>V

Preferences for the interface are in this box.

 ControlBoxj<html><head/><body><p>|~bXvvQsnW(NWW0</p></body></html>X

Preferences for the system tray are in this box.

 ControlBox$<html><head/><body><p>W(N hN- bNN*Wifig R ^vc N N*c gecR0g R0 </p><p>YgRhN-Sg NN*g R c N N*c \OR b鐣N*g R^v\Տc0 </p><p>YgN*g RfYvO`o OY[x O`\Ocy:0 </p></body></html>{

Select a wifi service in the table below and press this button to connect the service.

If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect.

If information about the service is needed, a passphrase for instance, you will be prompted for it.

 ControlBoxR<html><head/><body><p>W(N hN- bNN*Wifig R^vc N N*c gee_[0 </p><p>YgSg NN*Wifig RYN &quot;\1~&quot; b &quot;W(~&quot; r` c N N*c \OR b鐣N*g R^ve_[0 </p><p>N_Su(N~kbQHRMvc\0</p></body></html>j

Select a wifi service in the table below and press this button to disconnect it.

If there is only one wifi service in the "ready" or "online" state pressing this button will automatically select that service and disconnect it.

This may also be used to abort a previous connection attempt.

 ControlBox\<html><head/><body><p>W(N hN- bNN*Wifig R^vc N N*c geR d[0 </p><p>Ygf/f~bRcvg R]O[X N*c \Oyd]O[X\^`'0YgkcW(cR0N*g R g R\e_0Ygg RlB[x [xOnd^v_؋0</p><p>Ygg Y1%vc\ N*c Su(Nng R0</p></body></html>

Select a wifi service in the table below and press this button to remove the service.

If a service has previously been sussessfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.

If a connection attempt failed this can slso be used to reset the service.

 ControlBox<html><head/><body><p>[W(~ߋfeRM_Ř{O vepcn NKBhy: (؋f/ 1024 KB)0</p></body></html>

Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).

 ControlBox <html><head/><body><p>[W(~ߋfeRM_Ř{O vepcn NKBhy: (؋f/ 1024 KB)0</p><p>ConnmanOcS׏N* y OFf/h9cnconnmanvNxl N*ry`'g*[s Vkd y]yu(0</p></body></html>A

Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).

Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.

 ControlBox<html><head/><body><p>c[for NSAQmR6c qgYN h<_ RRGGBB.</p></body></html>k

Specify the background color as a hex number in the format: RRGGBB.

 ControlBox<html><head/><body><p>n~ߋO`ofevs NyN:SUOM (؋f/ 10 y)0 </p></body></html>z

Specify the frequency in seconds between counter updates (default is 10 seconds).

 ControlBox<html><head/><body><p>nT/R|~bXvRMv{I_e NyN:SUOM (؋f/ 0 y)0</p></body></html>

Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).

 ControlBoxR<html><head/><body><p>b@g g Rv؋nf/Rvb|{O<DHCP 0 N,kdnYOu( OFN f/ N*c Su(gebKRn N-g RvNY*QTIPn0</p><p>W(NN N$y`QN N*c Oyu(g Rnu1YMneNcO bg Rf/NN*Wifi0elOe9Ng Rvn0</p></body></html>

The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.

This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.

 ControlBox<html><head/><body><p>Qh\@cr` Svr`g &quot;y~&quot;, &quot;zz&quot;, &quot;\1~&quot;T&quot;W(~&quot;. </p></body></html>

The global connection state of the system. Possible values are "offline", "idle", "ready", and "online".

 ControlBox<html><head/><body><p>cR6e~Y_QsvQh\@n0_SވLj!_bS_eb@g e~Y\Qs0</p><p>_SYNވLj!_e N*R+YNq6SebS_0y_ވLj!_ee~Yv_Qsr`u1Tv{VueQ[0</p></body></html>X

The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.

While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.

 ControlBoxd<html><head/><body><p>vщ^v~ߋvg R0</p></body></html>T

The service being monitored by the counters.

 ControlBox<html><head/><body><p>~ߋfevP<0 epcnTeT e[NINfes0</p></body></html>

The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.

 ControlBox<html><head/><body><p>NgavcR6cmstT/RevNN y0 </p><p>b@g N ySNT}NLn T}NL\OvkdYvn0</p></body></html>

These entries control various options for CMST at program start.

All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.

 ControlBox<html><head/><body><p>N*ehFQf>y:Nb@g connmanYcR0vQ~0</p></body></html>`

This box lists all services that connman can connect to.

 ControlBox<html><head/><body><p>N*Y hFcR6QhQ~܏cv_Qs0_S N-e b@g Q~܏c\Qs0</p><p>_S|~YNވLj!_e N*_QsSebS_N*NY0y_ވLj!_e Yv_Qsr`u1Tv{VueQ[0</p></body></html>l

This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.

When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.

 ControlBox<html><head/><body><p>N*h{~f>y:Nb~R0vT_T/vWifiYepv0ON bvehFQf>y:g R \b~R0^v_T/NN*WifiY0</p><p>_QsYR0 <span style=" font-weight:600;">r`</span> h{~uv <span style=" font-weight:600;">Y</span> ehF^vSQ[^Y <span style=" font-weight:600;">]T/u(</span> hQve[W0</p></body></html>

This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.

To turn a technology on or off go to the Technologies box in the Status tab and double click on the text that shows in the Powered column for the technology.

 ControlBox<<html><head/><body><p>N*ubf>y:N]wvWifig R0</p><p><span style=" font-weight:600;">T y:</span> Q~vSSID0</p><p><span style=" font-weight:600;">]O[X:</span> N*hvN-v__bVhhy:Su5f~Ou(N*g RcQ~0</p><p><span style=" font-weight:600;">]c:</span> hy:N*g Rvcr`0 hRVhO_9Qe[Wf0 W(~hy:Q~Su(^vN]򚌋0 \1~hy:YbRc0 </p><p><span style=" font-weight:600;">[Qh`': </span>cϏNg Rv[Qh`'0SvP<p><span style=" font-weight:600;">OS_:^:</span> WifivOS_:^ u(0R0100vP<p><br/></p></body></html>

This page shows the known WiFi services.

Name: The SSID of the network.

Favorite: A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.

Connected: Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device.

Security: Describes the type of security used for this service. Possible values are "none", "wep", "psk", "ieee8021x", and "wps".

SIgnal Strength: The strength of the WiFi signal, normalized to a scale of 0 to 100.


 ControlBoxf<html><head/><body><p>Ou(N:ry[DEQYvz ^Nx0</p><p>N2014.11.24v`Q Ou( QT5.3 TgN|~bXvO b0z ^N-NNNx\ՉQN* R NyOT/u(N:ry[hLbQYvNx0</p><p>_SOY e N yOOuYNQMT/Rg,])n OFeN* y\NNHN PZ0</p></body></html>

Use code specific for the selected desktop environment.

As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.

If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.

 ControlBox<html><head/><body><p>Ou(N*N bhF bO``gw ~O`ovg R0<br/></p></body></html>

Use this Combobox to select the service for which you wish to view the detailed information.

 ControlBox <html><head/><body><p>Ou(N*c Qe &quot;f/NNH&quot; j!_^vgw GUIQC} vvQsO`o0 </p><p>O`N_SNW(uLbQC} N S.gw NNKvQsv &quot;f/NNH&quot; O`o0</p></body></html>

Use this button to find information about an element in the GUI by entering "What's This" mode.

You may also right click on an element to show the "What's This" text for it.

 ControlBoxn<html><head/><body><p>Ou(g,c gw z ^vfee_0</p></body></html>^

Use this button to view the change log of the program.

 ControlBoxh<html><head/><body><p>Ou(g,c gw z ^S0</p></body></html>T

Use this button to view the program license.

 ControlBoxZ<html><head/><body><p>f/NNH</p></body></html>3

What's This

 ControlBox~<html><head/><body><p>_SR e N:~u(b7QYvDRnOf>y:Qge0</p></body></html>j

When checked additional controls for advanced users are displayed.

 ControlBoxz<html><head/><body><p>_SR e g R ehFQvcT y0</p></body></html>b

When checked hide the connection name in the Services box.

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">T}NL y: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>n~ߋO`ofevs NyN:SUOM (؋f/ 10 y)0 </p></body></html>
Command Line Option: --counter-update-rate

Specify the frequency in seconds between counter updates (default is 10 seconds).

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">T}NL y: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>QNN*QT OObXvVhfoN:тrbv}r N f/f0</p><p>O`SNW(ّc[bXvVhfor0h<_N: RRGGBB vSAQmR6P<0YgR6[vrNbXv؀forvT bN\1bRW0O* NNN*ffo0</p></body></html>
Command Line Option: --fake-transparency

Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.

You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency.

 ControlBoxl<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">T}NL y: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html>D
Command Line Option: --use-mate
 ControlBoxJ<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">T}NL y: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> b </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>yu(|~bXvVh0</p><p>_S|~bXvN e/c Freedesktop.org |~bXv؉ăeS0</p></body></html>
Command Line Option: -d or --disable-tray-icon

Disable the system tray icon.

May be needed for system trays not compliant with the Freedesktop.org system tray specification.

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">T}NL y: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> b </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>T/Reg\SR0bXv0</p></body></html>"
Command Line Option: -m or --minimized

Start the GUI minimized in the system tray.

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">T}NL y: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> b </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>nT/R|~bXvRMv{I_e NyN:SUOM (؋f/ 0 y)0</p><p>Yg CMST ]T/R^v\W(|~bXvT/RRMT/RbXvVh O_9QNN*fTJ[hF0_Sz ^RT/Re g eOSu0YgO`xn[|~T/ReOT/RbXv O`SN勾nNN*{I_e CMSTOW(R^bXvVhRM{I_0O_W(bNbVhe>QebXvRM WMbbgg eR^bXv0</p></body></html>2
Command Line Option: -w or --wait-time

Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).

If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">T}NL y: <span style=" font-weight:600;">-c</span> b <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>yu(~ߋ0SQ\|~ߍDnm0</p></body></html>
Command Line Option: -c or --disable-counters

Disable the counters. May be used to minimize load on your system.

 ControlBox QsN %1About %1 ControlBoxQsN AwOken About AwOken ControlBoxW0W@S: %1<br>Address Acquisition: %1
 ControlBox~Advanced Controls ControlBoxQsb@g Y(&O)All Devices &Off ControlBox$\ %1 of 4 gb~wg R00Attempt %1 of 4 looking for notification server. ControlBoxRc: %1<br>Auto Connect: %1
 ControlBoxC&MST ControlBoxSmCancel ControlBox ChangeLo&g ControlBox ChangeLog ControlBoxn Configuration ControlBoxcConnect ControlBox]c Connected ControlBoxc Connection ControlBoxce_: %1<br>Connection Method: %1
 ControlBox"cYNY1%r` \Ցe^zˏcLConnection is in the Failure State, attempting to reestablish the connection ControlBoxcYNY1%r`0#Connection is in the Failure State. ControlBoxcYN\1~r`0!Connection is in the Ready State. ControlBox cr`g*wConnection status is unknown ControlBox c: %1Connection: %1 ControlBox>elW( system bus N R^NconnmanOvcS:Could not create an interface to connman on the system bus ControlBoxelՏcR0system bus-Could not find a connection to the system bus ControlBox~ߋfe KBCounter Update KB ControlBox ~ߋfesCounter Update Rate  ControlBox ~ߋN Su(0Counter not available. ControlBox ry[hLbnDesktop Specific ControlBoxYW0W@: %1<br>Device Address: %1
 ControlBoxODialog ControlBoxyu(~ߋDisable Counters ControlBoxyu(|~bXvVhDisable Tray Icon ControlBoxyu(Disabled ControlBoxe_ Disconnect ControlBox Q(&X)E&xit ControlBox T/u(RT/REnable Autostart ControlBox T/u(bXv_9hFEnable System Tray Popups ControlBoxT/u(cy:Enable ToolTips (Interface) ControlBoxT/u(Enabled ControlBoxT/u(Engaged ControlBoxPW(Sbgconnman.Manager.GetPropertieseSu6Error reading or parsing connman.Manager.GetProperties ControlBoxPW(Sbgconnman.Manager.GetPropertieseSu4Error reading or parsing connman.Manager.GetServices ControlBoxPW(Sbgconnman.Manager.GetPropertieseSu8Error reading or parsing connman.Manager.GetTechnologies ControlBoxNDBUSSV\^`'Y1%$Error retrieving properties via Dbus ControlBoxNY*Qc<br>Ethernet Connection
 ControlBox2cd:<br>&nbsp;&nbsp;%1<br>Excludes:
  %1
 ControlBoxYMneN: %1<br>#External Configuration File: %1
 ControlBoxO* bXvVhffoFake Transparency ControlBox]O[XFavorite ControlBox]O[X: %1<br>Favorite: %1
 ControlBoxQh\@nGlobal Properties ControlBox bXvVhHide Tray Icon ControlBoxg,W0Home ControlBoxIP W0W@S: %1<br>IP Address Acquisition: %1
 ControlBoxIP W0W@: %1<br>IP Address: %1
 ControlBoxIP QQs: %1<br>IP Gateway: %1
 ControlBoxIP [PQcx: %1<br>IP Netmask: %1
 ControlBoxuLb Interface ControlBoxcS: %1<br> Interface: %1 ControlBoxcS: %1<br>Interface: %1
 ControlBoxLicense ControlBoxMATE ControlBox MTU: %1
 ControlBoxgY'S(&X) Ma&ximize ControlBoxg\S(&N) Mi&nimize ControlBoxN y Move After ControlBoxN y Move Before ControlBoxT yName ControlBox Q~g R:Network Services: ControlBoxT&No ControlBoxT& autoconnectNo ControlBoxT& connectedNo ControlBoxT& immutableNo ControlBoxT&roamingNo ControlBoxT&tetheredNo ControlBox g* bg RNo Services Selected ControlBoxeSu(Q~g RNo network services available ControlBoxeNone ControlBoxg*c Not Connected ControlBoxg*c icon_tool_tip Not Connected ControlBoxwz ^Notification Daemon ControlBoxw Notifications ControlBox[a_: %1Object Path: %1 ControlBoxQsOff ControlBoxވLj!_ Offline Mode  ControlBoxވLj!_]yu(Offline Mode Disabled ControlBoxވLj!_]_T/Offline Mode Engaged ControlBoxވLj!_N Su(OfflineMode: Unavailable ControlBoxf/On ControlBoxf/ autoconnectOn ControlBox]T/u(Powered ControlBoxRM^: %1<br>Prefix Length: %1
 ControlBoxRM^: <br>Prefix Length:
 ControlBoxy: %1<br>Privacy: %1
 ControlBoxz ^cR6Program Control ControlBox MnVhProvisioning Editor ControlBox_؋Remove ControlBoxebkc(&A)Resc&an ControlBoxn~ߋReset Counters ControlBox Y1%ecRetry Failed Connection ControlBoxo+n8Roaming ControlBoxo+n8: %1<br>Roaming: %1
 ControlBox SSID: %1
 ControlBox[Qh`'Security ControlBox[Qh`': %1<br>Security: %1
 ControlBox g R(&V)Ser&vice ControlBoxg Rr` Server Status ControlBox4g RVh:<br>&nbsp;&nbsp;%1<br>Servers:
  %1
 ControlBoxg R: %1Service Error: %1 ControlBoxg Rr`: %1<br>Service State: %1
 ControlBoxg R|{W: %1<br>Service Type: %1
 ControlBoxg RService: ControlBoxg R: %1<br>Service: %1
 ControlBoxg RServices ControlBoxn Settings: ControlBoxOS_:^Signal Strength ControlBox T/Reg\SStart Minimized ControlBoxT/R y Start Options ControlBoxr`State ControlBoxr`: State:  ControlBox r`N Su(State: Unavailable ControlBox_:^: %1%<br>Strength: %1%
 ControlBox_:^: %1<br>Strength: %1
 ControlBox|~bXv System Tray ControlBox |~bXvؐwSystem Tray Notifications ControlBoxY Technologies ControlBoxpp Tethering ControlBoxW(Sbgconnman.Manager.GetPropertiesvV^eSuNNN*0<br><br>%1 SN ]O\0There was an error reading or parsing the reply from method connman.Manager.GetProperties.

It is unlikely any portion of %1 will be functional. ControlBoxW(Sbgconnman.Manager.GetPropertiesvV^eSuNNN*0<br><br>%1 RRSNSN]O\0There was an error reading or parsing the reply from method connman.Manager.GetServices.

Some portion of %1 may still be functional. ControlBoxW(Sbgconnman.Manager.GetPropertiesvV^eSuNNN*0<br><br>%1 RRSNSN]O\0There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.

Some portion of %1 may still be functional. ControlBox|{WType ControlBox URL: %1
 ControlBoxrelW( system bus N R^NconnmanOvcS0<br><br>%1 \elNconnmanO0sUnable to create an interface to connman on the system bus.

%1 will not be able to communicate with connman. ControlBox elxn[g RUnable to determine service ControlBoxRelՏcR0system bus0<br><br>%1 \elNconnmanO0fUnable to find a connection to the system bus.

%1 will not be able to communicate with connman. ControlBoxelb~R0bcwg R03Unable to find or connect to a Notification server. ControlBox<~ߋfevPWiFi Connection
 ControlBoxWifi r` Wifi State ControlBox e~Q~g RWireless Services ControlBoxXFCE ControlBoxf/Yes ControlBoxf/ connectedYes ControlBoxf/ immutableYes ControlBoxf/roamingYes ControlBoxf/tetheredYes ControlBox0W(c N cc NKRM O` bNN*Wifig R0EYou need to select a Wifi service before pressing the connect button. ControlBox0W(c N e_c NKRM O` bNN*Wifig R0HYou need to select a Wifi service before pressing the disconnect button. ControlBox0W(c N _؋c NKRM O` bNN*Wifig R0DYou need to select a Wifi service before pressing the remove button. ControlBox W(&D)&DomainsPeditor u((&G)&GeneralPeditorDNSg RVh(&N) &NameserversPeditor Nt(&P)&ProxyPeditoreg RVh(&T) &TImeserversPeditor<html><head/><body><p>xnnyv b[NSѐ~connman ^vQs[hF0</p></body></html>g

Accept the entries, send them to Connman, and close the dialog.

Peditor<html><head/><body><p>RNtMnvURL0 W(&quot;R&quot;elN-Ou(0</p></body></html>p

Automatic proxy configuration URL. Used by the "auto" method.

Peditor<html><head/><body><p>niZ_SRMubvQh苾n0</p><p>N*c ObubN b@g nnN:؋P< ؋P<^8N:zz0</p></body></html>

Clear all entries on the current page.

This button will reset every field on the current page to the default value, which generally means nothing in the field.

Peditor<html><head/><body><p>ndN*[hFN b@g ubN-vn0</p><p>\Obb@g ubvb@g nnN:؋P<0</p></body></html>

Clear all fields on every page of the dialog.

This will reset every field on every page to the default value for the field.

Peditor|<html><head/><body><p>Qs[hF N SѐNOUn~connman0</p></body></html>`

Close the dialog without sending any entries to Connman.

Peditor<html><head/><body><p>R N*g R\W(lg Qv[Su(ceRc0N*ShN: &quot;]O[X&quot;vg ROu(0 </p><p>o+n8e g R\N ORc0</p></body></html>

If checked this service will auto-connect when no other connection is available. This is only available for services marked "Favorite".

The service will not auto-connect while roaming.

Peditor<html><head/><body><p>bKRMnvd}"WRh0</p><p>QeNN*bYN*IPW0W@0 u(eS0RSbzzh</body></html>

List of manually configures search domains.

Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditor<html><head/><body><p>bKRMnvDNSg RVhRh0RzQ~N cOkcxnvWT gg RVh N*Rhv֋n0</p><p>N*Rhc qgOQH~c^ RhN-v{,Nyhy:gOQHvDNSg RVh0</p><p>_SYNbKRj!_Nlg nQh\@WT g RVhe ٘ynSARg u(0</p><p>QeNN*bYN*IPW0W@0 u(eS0RSbzzh</body></html>"

The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.

This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.

When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.

Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditor<html><head/><body><p>bKRMnveg RVhRh0</p><p>RhN-v{,Nyhy:gOQHvg RVh0</p><p>Ou(bKRMne N*nSN剆vQv[b@g eg RVhn0Vg R _ VkdSꔈ[؋vW(Ou(vg RvP<0</p><p>e9S؏٘ynOT/NTPg0</p><p>QeNN*bYN*IPW0W@0 u(eS0RSbzzh</body></html>

The list of manually configured time servers.

The first entry in the list represents the timeserver with the highest priority.

When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.

Changes to this property will result in restart of NTP query.

Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditor<html><head/><body><p>_ST/u(&quot;bKR&quot;eleOu(0 SNvcvN;g:Rh0</p><p><br/></p><p>QeNN*bYN*IPW0W@0 u(eS0RSbzzh</body></html>

Used when "manual" is set. A list of hosts which can be accessed directly.


Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditor <html><head/><body><p>_ST/u(&quot;bKR&quot;eleOu(0NtURIvRh0 N ^&SOvURIO_SO\u(NtURI0</p><p>QeNN*bYN*IPW0W@0 u(eS0RSbzzh</body></html>

Used when "manual" is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.

Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditorb<html><head/><body><p>IPv4vu(b7n</p></body></html>L

User configuration of IPv4 settings.

Peditorb<html><head/><body><p>IPv6vu(b7Mn</p></body></html>K

User configuration of IPv6 settings

Peditor^<html><head/><body><p>Ntvu(b7Mn</p></body></html>M

User configuration of Proxy settings.

PeditorZ<html><head/><body><p>f/NNH</p></body></html>3

What's This

PeditorW0W@AddressPeditorRAutoPeditorRc AutoConnectPeditorSmCancelPeditorDHCPPeditorvccDirectPeditoryu(DisabledPeditorT/u(EnabledPeditorcdExcludesPeditorQQsGatewayPeditorIPv&4PeditorIPv&6PeditorbKRManualPeditorelMethodPeditor[PQcxNetmaskPeditorxn[OKPeditorQsOffPeditorS  PreferredPeditorRM^ Prefix LengthPeditoryPrivacyPeditor nVhProperty EditorPeditornQh(&A) Reset &AllPeditornub(&G) Reset Pa&gePeditorg RVhServersPeditorURLPeditorndub(&C) &Clear Page Provisioning R d(&D)&Delete Provisioning bS_(&O)&Open Provisioning O[X(&S)&Save Provisioningl<html><head/><body><p>ndVhzSQvb@g e[W0</p></body></html>N

Clear all text from the editor window.

 Provisioning`<html><head/><body><p>R dNN*MneN</p></body></html>=

Delete a config file.

 Provisioning<html><head/><body><p>Qe &quot;f/NNH&quot; j!_0</p></body></html>J

Enter "Whats This" mode.

 Provisioning\<html><head/><body><p>Q[hF0</p></body></html>8

Exit the dialog.

 Provisioningh<html><head/><body><p>bS_]~[XW(vMneN0</p></body></html>E

Open an existing config file.

 Provisioning<html><head/><body><p>eg,zS0</p><p>O`SNW(zS̏Qe0Y R6b|40O`N_SNOu(N evSUcQeeg,0</p></body></html>

Text edit window.

You may type or cut and paste into this window. You may also use menus above to insert text fields.

 ProvisioningZ<html><head/><body><p>f/NNH</p></body></html>3

What's This

 Provisioning<html><head/><body><p>beg,hFQvepcnQQeMneN0</p><p> bhFQOg N|RcmstR^vMneNNOv0O`N_SNW(hFQQeNN*T [W0</p><p>O`N Q_bTT VN:[NOSc^vu(Tlv_TTT SN0 </p></body></html>h

Write the displayed data to a config file.

The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.

It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values.

 Provisioning CACertFile ProvisioningClientCertFile Provisioning Description ProvisioningDomain Provisioning Q(&X)E&xit ProvisioningEAP ProvisioningEduroam (long) ProvisioningEduroam (short) ProvisioningHidden Provisioning IPV4 DHCP ProvisioningIPv4 W0W@ IPv4 Address Provisioning IPv4 QsIPv4 Off ProvisioningIPv6 W0W@ IPv6 Address ProvisioningIPv6 R IPv6 Auto Provisioning IPv6 QsIPv6 Off ProvisioningIPv6 y IPv6.Privacy ProvisioningIdentity ProvisioningMAC ProvisioningName Provisioning Nameservers Provisioning Passphrase ProvisioningPhase2 ProvisioningPrivateKeyFile ProvisioningPrivateKeyPassphrase ProvisioningPrivateKeyPassphraseType Provisioning MnVhProvisioning Editor ProvisioningSSID Provisioning SearchDomains ProvisioningSecurity Provisioning Timeservers ProvisioningType Provisioning[global] Provisioning [service_*] ProvisioningN%͕ CriticalProvisioningEditorO`o InformationProvisioningEditor%1 - O`o%1 - InformationProvisioningEditor%1 - ep[WQe%1 - Integer InputProvisioningEditor%1 - yvQe%1 - Item InputProvisioningEditor%1 - beN%1 - Select FileProvisioningEditor%1 - eg,Qe%1 - Text InputProvisioningEditor%L1 Bytes ]QQe%L1 Bytes writtenProvisioningEditor%L1 KB ]QQe%L1 KB writtenProvisioningEditor<b>DBus  T y:</b> %1<br><br><b>[W{&N2:</b> %2<br><br><b>m`o:</b> %3MDBus Error Name: %1

String: %2

Message: %3ProvisioningEditor<<center>lg b~R0MneN0<br>N OR dNOUN0F
No configuration files were found.
Nothing will be deleted.ProvisioningEditorF<center>lg b~R0MneN0<br>O`SNu(N*[hFR^NN*0T
No configuration files were found.
You may use this dialog to create one.ProvisioningEditor$<center>S֑MneN %1&
Reading configuration file: %1ProvisioningEditor b@Ou(vWT Domain name to be usedProvisioningEditorEAP |{W0 EAP type.ProvisioningEditorQeQ~vcϏ0#Enter a description of the network.ProvisioningEditor6QeeveNT b b^v<br>fcbNN*]~[XW(veN0AEnter a new file name or select
an existing file to overwrite.ProvisioningEditorQeIPv6RM^Enter the IPv6 prefix lengthProvisioningEditorQeQ~T y0Enter the network name.ProvisioningEditor,Qe 802.11 SSID v[W{&N2hy:02Enter the string representation of an 802.11 SSID.ProvisioningEditorR deSuN0Error encountered deleting.ProvisioningEditorCANfeN_$File Path to the CA Certificate FileProvisioningEditor[b7zNfeN_(File Path to the Client Certificate FileProvisioningEditor eN]R d File deletedProvisioningEditor yeN_(File path to the Client Private Key FileProvisioningEditor eNS[bFile read completedProvisioningEditoreNO[XY1%0File save failed.ProvisioningEditorQh\@GlobalProvisioningEditorQ~Hidden networkProvisioningEditorIPv4 W0W@ IPv4 AddressProvisioningEditorIPv4 QQs S (IPv4 Gateway (This is an optional entry)ProvisioningEditorIPv4 [PQcx IPv4 NetmaskProvisioningEditorIPv6 W0W@ IPv6 AddressProvisioningEditorIPv6 QQs S (IPv6 Gateway (This is an optional entry)ProvisioningEditorIPv6 y IPv6 PrivacyProvisioningEditorEAPvN[W{&N20Identity string for EAP.ProvisioningEditor0[ƔeN (*.pem);;QheN (*.*)"Key Files (*.pem);;All Files (*.*)ProvisioningEditorDNSd}"WRhList of DNS Search DomainsProvisioningEditorDNSg RVhRhList of NameserversProvisioningEditoreg RVhRhList of TimeserversProvisioningEditorMAC W0W@0 MAC address.ProvisioningEditorQ~[Qh|{W0Network security type.ProvisioningEditoryeNv[x0-Password/Passphrase for the private key file.ProvisioningEditor>6k 2 TLSSۈLQ莫N <br>e_0HPhase 2 (inner authentication with TLS tunnel)
authentication method.ProvisioningEditory[x|{W0Private key passphrase type.ProvisioningEditorRSN/WPA/WPA2 [xRSN/WPA/WPA2 PassphraseProvisioningEditor2SSID: 802.11 SSID vSAQmR6hy:2SSID: hexadecimal representation of an 802.11 SSIDProvisioningEditor b鉁R dveN0Select a file to be deleted.ProvisioningEditor b鉁R}veN0Select a file to load.ProvisioningEditorg RServiceProvisioningEditor g R|{W0 Service type.ProvisioningEditor.fcb * vh{~T <br>MneNvU/Nh0MTag which will replace the * with
an identifier unique to the config file.ProvisioningEditorj!g TemplatesProvisioningEditorrQeIPv4 v<b>W0W@</b>0<b>[PQcx</b> TS v<b>QQs</b>0<p>QY\1~e c xn[0The IPv4 Address, Netmask, and optionally Gateway need to be provided.

Press OK when you are ready to proceed.ProvisioningEditorrQeIPv6 v<b>W0W@</b>0<b>RM^</b> TS v<b>QQs</b>0<p>QY\1~e c xn[0The IPv6 Address, Prefix Length, and optionally Gateway need to be provided.

Press OK when you are ready to proceed.ProvisioningEditorWiFiProvisioningEditor:elW(system busN lQroothelper[a07Failed to register roothelper object on the system bus. RootHelperLellQg R org.cmst.roothelper   S]~W(ЈL0WFailed to register service org.cmst.roothelper - there may be another instance running. RootHelpernRhF Scrollbox ScrollBoxeg,h{~ TextLabel ScrollBox]cAlready connectedTranslateStrings]yu(Already disabledTranslateStrings]T/u(Already enabledTranslateStrings]~[XW(Already existsTranslateStringsۈLN- In progressTranslateStrings^lSepInvalid argumentsTranslateStrings^l\^`'Invalid propertyTranslateStrings^lg RInvalid serviceTranslateStrings elb}Q~ No carrierTranslateStringsg*c Not connectedTranslateStringsg*b~R0 Not foundTranslateStringsg*[sNot implementedTranslateStringsg*lQNot registeredTranslateStringsN e/c Not supportedTranslateStringsN U/N Not uniqueTranslateStringsdO\QOperation abortedTranslateStringsdO\eOperation timeoutTranslateStrings[xPassphrase requiredTranslateStringsb~݋Permission deniedTranslateStringscN- associationTranslateStringsRautoTranslateStringsR"connman ethernet connection methodautoTranslateStringsRconnman ipv6 method stringautoTranslateStringsrY bluetoothTranslateStringszepcncellularTranslateStringscmstTranslateStringsMnN- configurationTranslateStringsconnman system trayTranslateStringsvccdirectTranslateStringse_ disconnectTranslateStringsNY*QethernetTranslateStringsfailureTranslateStringsgadgetTranslateStringsgpsTranslateStringszzidleTranslateStrings ieee8021xTranslateStringsbKRmanualTranslateStringsbKR"connman ethernet connection methodmanualTranslateStringsbKRconnman ipv4 method stringmanualTranslateStringsbKRconnman ipv6 method stringmanualTranslateStringsenoneTranslateStringsy~offlineTranslateStringsW(~onlineTranslateStringsp2pTranslateStringspskTranslateStrings\1~readyTranslateStrings|~systemTranslateStringsvpnTranslateStringswepTranslateStringswifiTranslateStringsg ~Q~wiredTranslateStrings(SNN*cmst[OkcW(ЈL0[O\QNAnother running instance of CMST has been detected. This instance is abortingmain.cppConnman System Tray.main.cpppyu(|~bXvVh0 SW(|~bXvN {&T Freedesktop.org system tray ăe0Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification.main.cppNYgbXvVhO*ŀfof c[Ou(vfor h<_0xRRGGBB bIf tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB)main.cppKBmain.cpp:_UconnmanvinputRequeste_NO04Log the connman inputRequest for debugging purposes.main.cpp RRGGBBRRGGBBmain.cpp*c[|~bXvT/Rv{I_e NyN:SUOM0FSpecify the wait time in seconds before starting the system tray icon.main.cppT/RGUIeg\SR0|~bXv0+Start the GUI minimized in the system tray.main.cppOu(N:MATEQYvNx0Use MATE DE specific code.main.cppOu(N:XFCEQYvNx0Use XFCE specific code.main.cpp0[[`'] yu(epcn~ߋ0 SQϏ{|~ߍ}0S[Experimental] Disable data counters. May be used to minimize load on your system.main.cpp,[[`'] ~ߋfeve NyN:SUOM0?[Experimental] The interval in seconds between counter updates.main.cpp2[[`'] ~ߋfeRMO vepcn NkbN:SUOM0W[Experimental] The number of kb that have to be transmitted before the counter updates.main.cppysecondsmain.cppcmst/translations/cmst_fr_FR.ts.000644 001750 000144 00000720575 12650551344 017376 0ustar00andyusers000000 000000 Agent Agent Input Passphrase <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> <html><head/><body><p>Type the passphrase here.</p></body></html> <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> &Hide Passphrase O&ld Passphrase &Passphrase Hidden Network &Name <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> Service Set Identifier &SSID Wireless Internet Service Provider roaming (WISPr) &Username <html><head/><body><p>WISPr username.</p></body></html> Passwor&d <html><head/><body><p>WISPr password.</p></body></html> Extensible Authentication Protocol (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> &Identity WiFi Protected Setup (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> Use Push &Button Authentication &WPS Pin <html><head/><body><p>Enter a WPS pin.</p></body></html> Browser Login Requested Choose or enter a browser: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> Login URL: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> Launch &Browser <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel AgentDialog Information You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "%1 %2" ConnmanAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ConnmanCounter %L1 Bytes %L1 KB %L1 MB %L1 GB <b>Transmit:</b><br>TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4 %Ln Packet(s) <br><br><b>Received:</b><br>RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4 <br><br><b>Connect Time:</b><br> %n Day(s) %n Hour(s) %n Minute(s) %n Second(s) ConnmanVPNAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ControlBox Dialog &Status <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> All Devices &Off <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> Global Properties <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> OfflineMode: Unavailable <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> State: Unavailable <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Technologies Name Type Powered Connected Tethering <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> Resc&an <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> Services State Connection <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move Before <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move After <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> &Less &Details Ser&vice <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> Configuration &Wireless <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> Favorite Security Signal Strength Wireless Services <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> Connect <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> Disconnect <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> Remove <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Wifi State &VPN VPN Services <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> Host Domain &Counters <html><head/><body><p>The service being monitored by the counters.</p></body></html> Service: <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Home Counter not available. <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Roaming <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> Settings: &Preferences <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> Start Options <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> Disable Tray Icon <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> Counter Update KB <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> Start Minimized <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> Use Icon Theme <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> Wait Time <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> Disable Counters <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> Counter Update Rate <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> Fake Transparency <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> Desktop Specific <html><head/><body><p>Default is no desktop specific code.</p></body></html> None <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> System Tray <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> Hide Tray Icon <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> Enable System Tray Popups <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> System Tray Notifications Notifications <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> Notification Daemon Server Status Program Control <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> Enable Autostart <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> Retry Failed Connection <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> Interface <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> Reset Counters <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> Advanced Controls <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> Enable ToolTips (Interface) <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> <html><head/><body><p>Open the color selection dialog. </p></body></html> ... <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help &About <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> &License <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> ChangeLo&g <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> Provisioning Editor <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> E&xit <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> Mi&nimize Rescan Offline Mode Service Details WiFi Connections VPN Connections Ma&ximize &Exit About %1 <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian)<br><center><b>Build Information:</b><center>Compiled using QT version %5<center>Built %6 - %7 About AwOken <center>This program uses the <b>AwOken</b> icon set version 2.5<br><br>Released under the<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>The CMST icon is a derivative work from the AwOken icon set. License %1 change log is not available. ChangeLog Cancel <b>Service:</b> %1 Unable to determine service No Services Selected %1 license is the MIT (Expat) license. You need to select a service before pressing the connect button. You need to select a service before pressing the disconnect button. You need to select a Wifi service before pressing the remove button. Offline Mode Engaged Offline Mode Disabled %1 (%2) Network Connection: %1 Network Services: No network services available Service Error: %1 Object Path: %1 VPN Engaged VPN Disengaged Warning <center><b>We received a DBUS reply message indicating an error while trying to scan technologies.</b></center><br><br>Error Name: %1<br><br>Error Message: %2 <b>Connection:</b> %1 <br><b>Service Details:</b><br> Service Type: %1<br> Service State: %1<br> Favorite: %1<br> Yes favorite No favorite External Configuration File: %1<br> Yes immutable No immutable Auto Connect: %1<br> On autoconnect No autoconnect <br><b>IPv4</b><br> IP Address Acquisition: %1<br> IP Address: %1<br> IP Netmask: %1<br> IP Gateway: %1<br> <br><b>IPv6</b><br> Address Acquisition: %1<br> Prefix Length: <br> Prefix Length: %1<br> Privacy: %1<br> <br><b>Proxy</b><br> URL: %1<br> Servers:<br>&nbsp;&nbsp;%1<br> Excludes:<br>&nbsp;&nbsp;%1<br> <br><b>Name Servers</b><br> <br><br><b>Time Servers</b><br> <br><br><b>Search Domains</b><br> <br><br><b>Ethernet</b><br> Connection Method: %1<br> Interface: %1<br> Device Address: %1<br> MTU: %1<br> <br><b>Wireless</b><br> Security: %1<br> Strength: %1<br> Roaming: %1<br> Yes roaming No roaming <br><b>VPN Provider</b><br> Host: %1<br> Domain: %1<br> Name: %1<br> Type: %1<br> State: Engaged Disabled Offline Mode %1On%1%1 powered %1Off%1%1 powered Yes connected No connected Yes tethered No tethered WiFi Technologies:<br> %1 Found, %2 Powered Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. Ethernet Connection<br> icon_tool_tip Service: %1<br> Interface: %1 WiFi Connection<br> icon_tool_tip SSID: %1<br> Strength: %1%<br> VPN Connection<br> icon_tool_tip Connection is in the Ready State. icon_tool_tip Connection is in the Failure State, attempting to reestablish the connection icon_tool_tip Connection is in the Failure State. icon_tool_tip Not Connected icon_tool_tip Error retrieving properties via Dbus Connection status is unknown <p style='white-space:pre'><center><b>%1 Properties</b></center> Type: %1 <br>Powered On Off Not Connected <br>Tethering Enabled Connection : %1 Signal Strength: %1% Favorite Connection Never Connected <br>Security : %1 <br>Roaming <br>Autoconnect is <p style='white-space:pre'><center><b>%1</b></center> <center><b>Unable to find a systemtray on this machine.</b><center><br>The program may still be used to manage your connections, but the tray icon will be disabled.<center><br><br>If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the <b>-w</b> switch and set a delay as necessary. The exact wait time will vary from system to system. Could not find a connection to the system bus %1 - Critical Error Unable to find a connection to the system bus.<br><br>%1 will not be able to communicate with connman. Could not create an interface to connman on the system bus Unable to create an interface to connman on the system bus.<br><br>%1 will not be able to communicate with connman. Error reading or parsing connman.Manager.GetProperties %1 - Warning There was an error reading or parsing the reply from method connman.Manager.GetProperties.<br><br>It is unlikely any portion of %1 will be functional. Error reading or parsing connman.Manager.GetTechnologies There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.<br><br>Some portion of %1 may still be functional. Error reading or parsing connman.Manager.GetServices There was an error reading or parsing the reply from method connman.Manager.GetServices.<br><br>Some portion of %1 may still be functional. %1 version %2 by %3 has been detected on this system.<p>This server supports desktop Notification Specification version %4 Attempt %1 of 4 looking for notification server. Unable to find or connect to a Notification server. Colorize Icons IconManager A new icon definition file will be installed to <b>%1</b> and a backup of the old definition file has been created as <b>%2</b> <p>If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. <p>If the original was never customized or you just wish to delete the backup now you may select <i>Discard</i> to delete the backup or <i>Save</i> to retain it. Peditor Property Editor &General <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> AutoConnect <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Nameservers <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &TImeservers <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Domains <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> IPv&4 Address Netmask Gateway DHCP Manual Off Method <html><head/><body><p>User configuration of IPv6 settings</p></body></html> IPv&6 Auto Prefix Length Privacy Disabled Preferred Enabled <html><head/><body><p>User configuration of Proxy settings.</p></body></html> &Proxy Direct <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> URL Servers <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> Excludes <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> Reset Pa&ge <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> Reset &All <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> OK <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> Cancel Provisioning Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Description [service_*] Type MAC Nameservers Timeservers SearchDomains Domain SSID EAP CACertFile ClientCertFile PrivateKeyFile PrivateKeyPassphrase PrivateKeyPassphraseType Identity Phase2 Passphrase Security Hidden Eduroam (long) Eduroam (short) IPv4 Address IPv4 Off IPV4 DHCP IPv6 Address IPv6 Off IPv6 Auto IPv6.Privacy ProvisioningEditor Global Service WiFi Templates File Path to the CA Certificate File File Path to the Client Certificate File File path to the Client Private Key File Key Files (*.pem);;All Files (*.*) MAC address. SSID: hexadecimal representation of an 802.11 SSID List of Nameservers List of Timeservers List of DNS Search Domains Domain name to be used Enter the string representation of an 802.11 SSID. Service type. EAP type. Private key passphrase type. Network security type. Hidden network IPv6 Privacy %1 - Item Input Tag which will replace the * with<br>an identifier unique to the config file. Enter the network name. Enter a description of the network. Password/Passphrase for the private key file. Identity string for EAP. RSN/WPA/WPA2 Passphrase Phase 2 (inner authentication with TLS tunnel)<br>authentication method. %1 - Text Input Information The IPv4 <b>Address</b>, <b>Netmask</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv4 Address IPv4 Netmask IPv4 Gateway (This is an optional entry) The IPv6 <b>Address</b>, <b>Prefix Length</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv6 Address %1 - Integer Input Enter the IPv6 prefix length IPv6 Gateway (This is an optional entry) <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 RootHelper Failed to register service org.cmst.roothelper - there may be another instance running. Failed to register roothelper object on the system bus. ScrollBox Scrollbox TextLabel TranslateStrings connman system tray Main Window Title cmst Abbreviated Program Name - used for QMessageBox titles idle connman state string association connman state string configuration connman state string ready connman state string online connman state string disconnect connman state string failure connman state string offline connman state string system connman type string ethernet connman type string wifi connman type string bluetooth connman type string cellular connman type string gps connman type string vpn connman type string gadget connman type string p2p connman type string wired connman type string direct connman proxy string manual connman proxy string auto connman proxy string psk connman security string ieee8021x connman security string none connman security string wep connman security string wps connman security string Invalid arguments connman error string Permission denied connman error string Passphrase required connman error string Not registered connman error string Not unique connman error string Not supported connman error string Not implemented connman error string Not found connman error string No carrier connman error string In progress connman error string Already exists connman error string Already enabled connman error string Already disabled connman error string Already connected connman error string Not connected connman error string Operation aborted connman error string Operation timeout connman error string Invalid service connman error string Invalid property connman error string disabled connman privacy string enabled connman privacy string prefered connman privacy string auto connman ethernet connection method manual connman ethernet connection method dhcp connman ipv4 method string manual connman ipv4 method string off connman ipv4 method string fixed connman ipv4 method string auto connman ipv6 method string manual connman ipv6 method string 6to4 connman ipv6 method string off connman ipv6 method string openconnect connman vpn connection type openvpn connman vpn connection type vpnc connman vpn connection type l2tp connman vpn connection type pptp connman vpn connection type VPNAgent VPN Agent Input Username <html><head/><body><p>WISPr username.</p></body></html> Password <html><head/><body><p>WISPr password.</p></body></html> Host Name OpenConnect CA Cert. Client Cert. Cookie Server Cert. VPN Host <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel Save Credentials VPN_Editor Global OpenConnect OpenVPN VPNC L2TP PPTP All Files (*.*) CA Files (*.pem *.ca);;All Files (*.*) Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Key Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Config Files (*.ovpn *.conf *.config);;All Files (*.*) VPN server IP address (ex: 1.2.3.4) %1 - Item Input %1 - Verify Option User defined name for the VPN Domain name for the VPN Service (example: corporate.com) Networks behing the VPN link, if more than one separate by a comma. Format is network/netmask/gateway, and gateway can be omitted. Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16 Networks = entry is optional and may be left blank. %1 - Text Input Information <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 VPN_Prov VPN Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Name of the network. Description Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE PPPD.ReqMPPE40 PPPD.ReqMPPE128 PPPD.ReqMPPEStateful VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert Local peer's signed certificate. OpenVPN.Key Local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass Authenticate with server using username/password? OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. main.cpp Another running instance of CMST has been detected. This instance is aborting Connman System Tray. Bypass restoring the window state if restoring window state is specified in the settings file. Bypass restoring any start options in the settings file. [Experimental] Disable data counters. May be used to minimize load on your system. Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. Use an icon theme from your system. Icon Theme Name Log the connman inputRequest for debugging purposes. Start the GUI minimized in the system tray. Specify the wait time in seconds before starting the system tray icon. seconds [Experimental] The number of kb that have to be transmitted before the counter updates. KB [Experimental] The interval in seconds between counter updates. If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB) RRGGBB Use XFCE specific code. Use MATE DE specific code. cmst/apps/rootapp/system/distro/slackware/000755 001750 000144 00000000000 12645604012 021411 5ustar00andyusers000000 000000 cmst/apps/rootapp/code/roothelper/roothelper.cpp000644 001750 000144 00000012504 12646050137 022577 0ustar00andyusers000000 000000 /**************************** roothelper.cpp *************************** Code for the root helper registered on DBus. When registered the CMST provisioning editor will communicate with object using signals. As the name implies roothelper is run as the root user, since we need to read and write to /var/lib/connman. This program is started by DBus and the configuration files necessary to make that happen are in the system dir. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include # include # include "./roothelper.h" // header files generated by qmake from the xml file created by qdbuscpp2xml # include "roothelper_adaptor.h" # include "roothelper_interface.h" // constructor RootHelper::RootHelper(QObject* parent) : QObject(parent) { // Create RootHelperadaptor new RoothelperAdaptor(this); // Data members b_connected = false; return; } ///////////////////// Public Slots ///////////////////////////////////// // // Slot to start the event loop void RootHelper::startHelper() { // Try to register a service on the system bus if (! QDBusConnection::systemBus().registerService("org.cmst.roothelper")) { qDebug() << tr("Failed to register service org.cmst.roothelper - there may be another instance running."); QCoreApplication::instance()->exit(1); } // Try to register an object on the system bus if (! QDBusConnection::systemBus().registerObject("/", this)) { qDebug() << tr("Failed to register roothelper object on the system bus."); QCoreApplication::instance()->exit(2); } // if we made it this far we have a connection and are registered on the system bus. b_connected = true; return; } // // Slot to get a list of all files in /var/lib/conmann the were created // by CMST. These files will end in .cmst.config QStringList RootHelper::getFileList(const QString& path) { // make sure the path is allowed if (! pathAllowed(path) ) return QStringList(); // variables QDir dir = QDir(path); QStringList filters; filters << "*.cmst.config"; // get a list of all .cmst.config files and return it return dir.entryList(filters, QDir::Files, QDir::Name); } // // Slot to read a file from disk QString RootHelper::readFile(const QString& path, const QString& fn) { // make sure the path is allowed if (! pathAllowed(path) ) return QString(); // open the file for reading QFile infile(QString(path + "/%1.cmst.config").arg(sanitizeInput(fn)) ); if (! infile.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); // read the file into a QByteArray QByteArray ba = infile.readAll(); // cleanup and exit infile.close(); return QString(ba); } // // Slot to delete a disk file bool RootHelper::deleteFile(const QString& path, const QString& fn) { // make sure the path is allowed if (! pathAllowed(path) ) return false; // delete the file and emit a signal with the result return QFile::remove(QString(path + "/%1.cmst.config").arg(sanitizeInput(fn)) ); } // // Slot to write the file to disk qint64 RootHelper::saveFile(const QString& path, const QString& fn, const QString& data) { // make sure the path is allowed if (! pathAllowed(path) ) return -1; // open the file for writing QFile outfile(QString(path + "/%1.cmst.config").arg(sanitizeInput(fn)) ); if (! outfile.open(QIODevice::WriteOnly | QIODevice::Text)) return 0; // write the file and emit a signal when done qint64 bytes = outfile.write(data.toLatin1() ); // cleanup and exit outfile.close(); return bytes; } /////////////////////////////////////////////// Private Functions ////////////////////////////////////////// // // Function to take a file name, which may contain a path and extension, and return only the file name QString RootHelper::sanitizeInput(QString instr) { // return a null string if instr is empty if (instr.isEmpty() ) return QString(); // extract the name and return it QFileInfo fi(instr); return fi.baseName(); } // // Function to determine if the path is allowed bool RootHelper::pathAllowed(QString path) { if (path == "/var/lib/connman") return true; else if (path == "/var/lib/connman-vpn") return true; return false; } cmst/apps/cmstapp/code/agent/000755 001750 000144 00000000000 12651160773 016610 5ustar00andyusers000000 000000 cmst/images/application/variations/scalable/cmst_scalable.svg000644 001750 000144 00000370073 12645570501 025207 0ustar00andyusers000000 000000 cmst/apps/cmstapp/code/vpn_prov_ed/ui/000755 001750 000144 00000000000 12650767244 020455 5ustar00andyusers000000 000000 cmst/misc/desktop/000755 001750 000144 00000000000 12651005136 014561 5ustar00andyusers000000 000000 cmst/translations/cmst_es_ES.ts000644 001750 000144 00000720575 12650551344 017320 0ustar00andyusers000000 000000 Agent Agent Input Passphrase <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> <html><head/><body><p>Type the passphrase here.</p></body></html> <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> &Hide Passphrase O&ld Passphrase &Passphrase Hidden Network &Name <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> Service Set Identifier &SSID Wireless Internet Service Provider roaming (WISPr) &Username <html><head/><body><p>WISPr username.</p></body></html> Passwor&d <html><head/><body><p>WISPr password.</p></body></html> Extensible Authentication Protocol (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> &Identity WiFi Protected Setup (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> Use Push &Button Authentication &WPS Pin <html><head/><body><p>Enter a WPS pin.</p></body></html> Browser Login Requested Choose or enter a browser: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> Login URL: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> Launch &Browser <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel AgentDialog Information You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "%1 %2" ConnmanAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ConnmanCounter %L1 Bytes %L1 KB %L1 MB %L1 GB <b>Transmit:</b><br>TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4 %Ln Packet(s) <br><br><b>Received:</b><br>RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4 <br><br><b>Connect Time:</b><br> %n Day(s) %n Hour(s) %n Minute(s) %n Second(s) ConnmanVPNAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ControlBox Dialog &Status <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> All Devices &Off <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> Global Properties <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> OfflineMode: Unavailable <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> State: Unavailable <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Technologies Name Type Powered Connected Tethering <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> Resc&an <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> Services State Connection <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move Before <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move After <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> &Less &Details Ser&vice <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> Configuration &Wireless <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> Favorite Security Signal Strength Wireless Services <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> Connect <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> Disconnect Remove <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Wifi State &Counters <html><head/><body><p>The service being monitored by the counters.</p></body></html> Service: <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Home Counter not available. <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Roaming <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> Settings: &Preferences <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> Interface <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> Enable ToolTips (Interface) Rescan Offline Mode <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> Reset Counters <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> Advanced Controls <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> Start Options <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> Disable Tray Icon <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> Counter Update KB <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> Start Minimized <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> Use Icon Theme <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> Wait Time <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> Disable Counters <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> Counter Update Rate <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> Desktop Specific <html><head/><body><p>Default is no desktop specific code.</p></body></html> None <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> &VPN VPN Services <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> Host Domain Fake Transparency <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> System Tray <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> Hide Tray Icon <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> Enable System Tray Popups <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> System Tray Notifications Notifications <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> Notification Daemon Server Status Program Control <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> Enable Autostart <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> Retry Failed Connection <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> <html><head/><body><p>Open the color selection dialog. </p></body></html> ... <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help &About <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> &License <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> ChangeLo&g <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> Provisioning Editor <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> E&xit <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> Mi&nimize Ma&ximize &Exit About %1 Service Details WiFi Connections VPN Connections <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian)<br><center><b>Build Information:</b><center>Compiled using QT version %5<center>Built %6 - %7 About AwOken <center>This program uses the <b>AwOken</b> icon set version 2.5<br><br>Released under the<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>The CMST icon is a derivative work from the AwOken icon set. License %1 change log is not available. ChangeLog Cancel <b>Service:</b> %1 Unable to determine service No Services Selected You need to select a Wifi service before pressing the remove button. Offline Mode Engaged Offline Mode Disabled %1 (%2) Network Connection: %1 Network Services: No network services available Service Error: %1 Object Path: %1 VPN Engaged VPN Disengaged Warning <center><b>We received a DBUS reply message indicating an error while trying to scan technologies.</b></center><br><br>Error Name: %1<br><br>Error Message: %2 <b>Connection:</b> %1 <br><b>Service Details:</b><br> Service Type: %1<br> Service State: %1<br> Favorite: %1<br> Yes favorite No favorite External Configuration File: %1<br> Yes immutable No immutable Auto Connect: %1<br> On autoconnect No autoconnect <br><b>IPv4</b><br> IP Address Acquisition: %1<br> IP Address: %1<br> IP Netmask: %1<br> IP Gateway: %1<br> <br><b>IPv6</b><br> Address Acquisition: %1<br> Prefix Length: <br> Prefix Length: %1<br> Privacy: %1<br> <br><b>Proxy</b><br> URL: %1<br> Servers:<br>&nbsp;&nbsp;%1<br> Excludes:<br>&nbsp;&nbsp;%1<br> <br><b>Name Servers</b><br> <br><br><b>Time Servers</b><br> <br><br><b>Search Domains</b><br> <br><br><b>Ethernet</b><br> Connection Method: %1<br> Interface: %1<br> Device Address: %1<br> MTU: %1<br> <br><b>Wireless</b><br> Security: %1<br> Strength: %1<br> Roaming: %1<br> Yes roaming No roaming <br><b>VPN Provider</b><br> Host: %1<br> Domain: %1<br> Name: %1<br> Type: %1<br> State: Engaged Disabled Offline Mode %1On%1%1 powered %1Off%1%1 powered Yes connected No connected Yes tethered No tethered WiFi Technologies:<br> %1 Found, %2 Powered Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. Ethernet Connection<br> icon_tool_tip Service: %1<br> Interface: %1 WiFi Connection<br> icon_tool_tip SSID: %1<br> Strength: %1%<br> VPN Connection<br> icon_tool_tip Connection is in the Ready State. icon_tool_tip Connection is in the Failure State, attempting to reestablish the connection icon_tool_tip Connection is in the Failure State. icon_tool_tip Not Connected icon_tool_tip Error retrieving properties via Dbus Connection status is unknown Type: %1 <br>Powered On Off Not Connected <br>Tethering Enabled Connection : %1 Signal Strength: %1% Favorite Connection Never Connected <br>Security : %1 <br>Roaming <br>Autoconnect is <p style='white-space:pre'><center><b>%1</b></center> <center><b>Unable to find a systemtray on this machine.</b><center><br>The program may still be used to manage your connections, but the tray icon will be disabled.<center><br><br>If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the <b>-w</b> switch and set a delay as necessary. The exact wait time will vary from system to system. Could not find a connection to the system bus %1 - Critical Error Unable to find a connection to the system bus.<br><br>%1 will not be able to communicate with connman. Could not create an interface to connman on the system bus Unable to create an interface to connman on the system bus.<br><br>%1 will not be able to communicate with connman. Error reading or parsing connman.Manager.GetProperties %1 - Warning There was an error reading or parsing the reply from method connman.Manager.GetProperties.<br><br>It is unlikely any portion of %1 will be functional. Error reading or parsing connman.Manager.GetTechnologies There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.<br><br>Some portion of %1 may still be functional. Error reading or parsing connman.Manager.GetServices There was an error reading or parsing the reply from method connman.Manager.GetServices.<br><br>Some portion of %1 may still be functional. %1 version %2 by %3 has been detected on this system.<p>This server supports desktop Notification Specification version %4 Colorize Icons Attempt %1 of 4 looking for notification server. %1 license is the MIT (Expat) license. You need to select a service before pressing the connect button. You need to select a service before pressing the disconnect button. <p style='white-space:pre'><center><b>%1 Properties</b></center> Unable to find or connect to a Notification server. IconManager A new icon definition file will be installed to <b>%1</b> and a backup of the old definition file has been created as <b>%2</b> <p>If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. <p>If the original was never customized or you just wish to delete the backup now you may select <i>Discard</i> to delete the backup or <i>Save</i> to retain it. Peditor Property Editor &General <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> AutoConnect <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Nameservers <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &TImeservers <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Domains <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> IPv&4 Address Netmask Gateway DHCP Manual Off Method <html><head/><body><p>User configuration of IPv6 settings</p></body></html> IPv&6 Auto Prefix Length Privacy Disabled Preferred Enabled <html><head/><body><p>User configuration of Proxy settings.</p></body></html> &Proxy Direct <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> URL Servers <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> Excludes <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> Reset Pa&ge <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> Reset &All <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> OK <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> Cancel Provisioning Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Description [service_*] Type MAC Nameservers Timeservers SearchDomains Domain SSID EAP CACertFile ClientCertFile PrivateKeyFile PrivateKeyPassphrase PrivateKeyPassphraseType Identity Phase2 Passphrase Security Hidden Eduroam (long) Eduroam (short) IPv4 Address IPv4 Off IPV4 DHCP IPv6 Address IPv6 Off IPv6 Auto IPv6.Privacy ProvisioningEditor Global Service WiFi Templates File Path to the CA Certificate File File Path to the Client Certificate File File path to the Client Private Key File Key Files (*.pem);;All Files (*.*) MAC address. SSID: hexadecimal representation of an 802.11 SSID List of Nameservers List of Timeservers List of DNS Search Domains Domain name to be used Enter the string representation of an 802.11 SSID. Service type. EAP type. Private key passphrase type. Network security type. Hidden network IPv6 Privacy %1 - Item Input Tag which will replace the * with<br>an identifier unique to the config file. Enter the network name. Enter a description of the network. Password/Passphrase for the private key file. Identity string for EAP. RSN/WPA/WPA2 Passphrase Phase 2 (inner authentication with TLS tunnel)<br>authentication method. %1 - Text Input Information The IPv4 <b>Address</b>, <b>Netmask</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv4 Address IPv4 Netmask IPv4 Gateway (This is an optional entry) The IPv6 <b>Address</b>, <b>Prefix Length</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv6 Address %1 - Integer Input Enter the IPv6 prefix length IPv6 Gateway (This is an optional entry) <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 RootHelper Failed to register service org.cmst.roothelper - there may be another instance running. Failed to register roothelper object on the system bus. ScrollBox Scrollbox TextLabel TranslateStrings connman system tray Main Window Title cmst Abbreviated Program Name - used for QMessageBox titles idle connman state string association connman state string configuration connman state string ready connman state string online connman state string disconnect connman state string failure connman state string offline connman state string system connman type string ethernet connman type string wifi connman type string bluetooth connman type string cellular connman type string gps connman type string vpn connman type string gadget connman type string p2p connman type string wired connman type string direct connman proxy string manual connman proxy string auto connman proxy string psk connman security string ieee8021x connman security string none connman security string wep connman security string wps connman security string Invalid arguments connman error string Permission denied connman error string Passphrase required connman error string Not registered connman error string Not unique connman error string Not supported connman error string Not implemented connman error string Not found connman error string No carrier connman error string In progress connman error string Already exists connman error string Already enabled connman error string Already disabled connman error string Already connected connman error string Not connected connman error string Operation aborted connman error string Operation timeout connman error string Invalid service connman error string Invalid property connman error string disabled connman privacy string enabled connman privacy string prefered connman privacy string auto connman ethernet connection method manual connman ethernet connection method dhcp connman ipv4 method string manual connman ipv4 method string off connman ipv4 method string fixed connman ipv4 method string auto connman ipv6 method string manual connman ipv6 method string 6to4 connman ipv6 method string off connman ipv6 method string openconnect connman vpn connection type openvpn connman vpn connection type vpnc connman vpn connection type l2tp connman vpn connection type pptp connman vpn connection type VPNAgent VPN Agent Input Username <html><head/><body><p>WISPr username.</p></body></html> Password <html><head/><body><p>WISPr password.</p></body></html> Host Name OpenConnect CA Cert. Client Cert. Cookie Server Cert. VPN Host <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel Save Credentials VPN_Editor Global OpenConnect OpenVPN VPNC L2TP PPTP All Files (*.*) CA Files (*.pem *.ca);;All Files (*.*) Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Key Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Config Files (*.ovpn *.conf *.config);;All Files (*.*) VPN server IP address (ex: 1.2.3.4) %1 - Item Input %1 - Verify Option User defined name for the VPN Domain name for the VPN Service (example: corporate.com) Networks behing the VPN link, if more than one separate by a comma. Format is network/netmask/gateway, and gateway can be omitted. Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16 Networks = entry is optional and may be left blank. %1 - Text Input Information <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 VPN_Prov VPN Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Name of the network. Description Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE PPPD.ReqMPPE40 PPPD.ReqMPPE128 PPPD.ReqMPPEStateful VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert Local peer's signed certificate. OpenVPN.Key Local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass Authenticate with server using username/password? OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. main.cpp Another running instance of CMST has been detected. This instance is aborting Connman System Tray. Bypass restoring the window state if restoring window state is specified in the settings file. Bypass restoring any start options in the settings file. [Experimental] Disable data counters. May be used to minimize load on your system. Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. Use an icon theme from your system. Icon Theme Name Log the connman inputRequest for debugging purposes. Start the GUI minimized in the system tray. Specify the wait time in seconds before starting the system tray icon. seconds [Experimental] The number of kb that have to be transmitted before the counter updates. KB [Experimental] The interval in seconds between counter updates. If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB) RRGGBB Use XFCE specific code. Use MATE DE specific code. cmst/apps/cmstapp/code/peditor/ui/peditor.ui000644 001750 000144 00000054611 12645570501 021606 0ustar00andyusers000000 000000 Peditor 0 0 297 450 Property Editor true true 0 0 0 279 166 &General <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> AutoConnect Qt::Vertical 20 40 0 0 279 166 <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Nameservers Qt::Vertical 20 40 0 0 279 166 <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &TImeservers Qt::Vertical 20 40 0 0 279 166 <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Domains Qt::Vertical 20 40 0 0 154 132 <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> IPv&4 Address Netmask Gateway DHCP Manual Off Method Qt::Vertical 20 40 0 0 194 161 <html><head/><body><p>User configuration of IPv6 settings</p></body></html> IPv&6 Auto Manual Off Gateway 255 Prefix Length Privacy Address Disabled Preferred Enabled Method Qt::Vertical 20 40 0 0 146 168 <html><head/><body><p>User configuration of Proxy settings.</p></body></html> &Proxy Method Direct Auto Manual 2 <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> Qt::Vertical 20 173 URL Servers <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> Excludes <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> Qt::Vertical 20 40 Qt::Vertical 20 243 Qt::Horizontal <html><head/><body><p>What's This</p></body></html> Qt::Horizontal 40 20 <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> Reset Pa&ge <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> Reset &All Qt::Horizontal 40 20 true <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> OK <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> Cancel comboBox_ipv4method lineEdit_ipv4address lineEdit_ipv4netmask lineEdit_ipv4gateway comboBox_ipv6method spinBox_ipv6prefixlength lineEdit_ipv6address lineEdit_ipv6gateway comboBox_ipv6privacy comboBox_proxymethod lineEdit_proxyurl toolButton_whatsthis pushButton_resetpage pushButton_resetall pushButton_ok pushButton_cancel pushButton_cancel clicked() Peditor reject() 239 434 226 -14 comboBox_proxymethod activated(int) stackedWidget_proxy01 setCurrentIndex(int) 238 198 230 218 cmst/images/overlay/overlay-warningnet9.png000644 001750 000144 00000001214 12645570501 021541 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTEzGYsd7"^t?Ljw>Y@Y2nyJ+ae X)T>Y BTLTbKGDB= pHYs  tIME*'6cIDAT(c`ED%%X$edY$mlU88$T5эrvC70426Dbjfnaie-`SS 6l%tEXtdate:create2015-10-17T20:16:28-04:00+%tEXtdate:modify2013-07-28T03:30:42-04:00IENDB`cmst/apps/cmstapp/code/peditor/peditor.cpp000644 001750 000144 00000032550 12645570501 021334 0ustar00andyusers000000 000000 /****************** peditor.cpp *********************************** Code to manage the Properties Editor dialog. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include "./peditor.h" #define DBUS_SERVICE "net.connman" PropertiesEditor::PropertiesEditor(QWidget* parent, const arrayElement& ae, bool (*extractMapData) (QMap&,const QVariant&)) : QDialog(parent) { // Setup the user interface ui.setupUi(this); // Data members objpath = ae.objpath; objmap = ae.objmap; // Setup the address validator and apply it to any ui QLineEdit. // The lev validator will validate an IP address or up to one white space character (to allow // editing of the line edit). QString s_ip4 = "(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])"; QString s_ip6 = "(?:[0-9a-fA-F]{1,4})"; // QLineEdits that allow single address QRegularExpression rx4("\\s?|^" + s_ip4 + "(?:\\." + s_ip4 + "){3}" + "$"); QRegularExpression rx6("\\s?|^" + s_ip6 + "(?::" + s_ip6 + "){7}" + "$"); QRegularExpressionValidator* lev_4 = new QRegularExpressionValidator(rx4, this); QRegularExpressionValidator* lev_6 = new QRegularExpressionValidator(rx6, this); ui.lineEdit_ipv4address->setValidator(lev_4); ui.lineEdit_ipv4netmask->setValidator(lev_4); ui.lineEdit_ipv4gateway->setValidator(lev_4); ui.lineEdit_ipv6address->setValidator(lev_6); ui.lineEdit_ipv6gateway->setValidator(lev_6); // now QLineEdits that allow multiple addresses QRegularExpression rx46("\\s?|((" + s_ip4 + "(?:\\." + s_ip4 + "){3}|" + s_ip6 + "(?::" + s_ip6 + "){7})(\\s*[,|;|\\s]\\s*))+"); QRegularExpressionValidator* lev_m = new QRegularExpressionValidator(rx46, this); ui.lineEdit_nameservers->setValidator(lev_m); ui.lineEdit_timeservers->setValidator(lev_m); // initialize and populate submaps ipv4map.clear(); ipv6map.clear(); proxmap.clear(); extractMapData(ipv4map, objmap.value("IPv4.Configuration") ); extractMapData(ipv6map, objmap.value("IPv6.Configuration") ); extractMapData(proxmap, objmap.value("Proxy.Configuration") ); // Seed initial values in the dialog. ui.checkBox_autoconnect->setChecked(objmap.value("AutoConnect").toBool() ); ui.lineEdit_nameservers->setText(objmap.value("Nameservers.Configuration").toStringList().join("\n") ); ui.lineEdit_timeservers->setText(objmap.value("Timeservers.Configuration").toStringList().join("\n")); ui.lineEdit_domains->setText(objmap.value("Domains.Configuration").toStringList().join("\n")); // ipv4 page if (! ipv4map.value("Method").toString().isEmpty() ) { ui.comboBox_ipv4method->setCurrentIndex(ui.comboBox_ipv4method->findText(ipv4map.value("Method").toString(), Qt::MatchFixedString) ); } ui.lineEdit_ipv4address->setText(ipv4map.value("Address").toString() ); ui.lineEdit_ipv4netmask->setText(ipv4map.value("Netmask").toString() ); ui.lineEdit_ipv4gateway->setText(ipv4map.value("Gateway").toString() ); // ipv6 page if (! ipv6map.value("Method").toString().isEmpty() ) { ui.comboBox_ipv6method->setCurrentIndex(ui.comboBox_ipv6method->findText(ipv6map.value("Method").toString(), Qt::MatchFixedString) ); } ui.spinBox_ipv6prefixlength->setValue(ipv6map.value("PrefixLength").toUInt() ); ui.lineEdit_ipv6address->setText(ipv6map.value("Address").toString() ); ui.lineEdit_ipv6gateway->setText(ipv6map.value("Gateway").toString() ); if (! ipv6map.value("Privacy").toString().isEmpty() ) { ui.comboBox_ipv6privacy->setCurrentIndex(ui.comboBox_ipv6privacy->findText(ipv6map.value("Privacy").toString(), Qt::MatchFixedString) ); } // proxy page if (! proxmap.value("Method").toString().isEmpty() ) { ui.comboBox_proxymethod->setCurrentIndex(ui.comboBox_proxymethod->findText(proxmap.value("Method").toString(), Qt::MatchFixedString) ); } ui.lineEdit_proxyservers->setText(proxmap.value("Servers").toStringList().join("\n") ); ui.lineEdit_proxyexcludes->setText(proxmap.value("Excludes").toStringList().join("\n") ); ui.lineEdit_proxyurl->setText(proxmap.value("URL").toString() ); // connect signals to slots connect(ui.toolButton_whatsthis, SIGNAL(clicked()), this, SLOT(showWhatsThis())); connect(ui.pushButton_resetpage, SIGNAL(clicked()), this, SLOT(resetPage())); connect(ui.pushButton_resetall, SIGNAL(clicked()), this, SLOT(resetAll())); connect(ui.pushButton_ok, SIGNAL(clicked()), this, SLOT(updateConfiguration())); } ///////////////////////////////////////////////// Private Slots ///////////////////////////////////////////// // // Slot to enter whats this mode // Called when the ui.toolButton_whatsthis clicked() signal is emitted void PropertiesEditor::showWhatsThis() { QWhatsThis::enterWhatsThisMode(); } // // Function to clear the contents of the specified page. If the page // argument is less than one (default value is -1) then clear the // current toolbox page. Called when ui.pushButton_resetpage is clicked() void PropertiesEditor::resetPage(int page) { // find the page (index) to clear. int toolboxindex = ui.toolBox_peditor->currentIndex(); if (page >= 0 ) toolboxindex = page; switch (toolboxindex) { case 0: ui.checkBox_autoconnect->setChecked(objmap.value("AutoConnect").toBool() ); break; case 1: ui.lineEdit_nameservers->clear(); break; case 2: ui.lineEdit_timeservers->clear(); break; case 3: ui.lineEdit_domains->clear(); break; case 4: ui.comboBox_ipv4method->setCurrentIndex(0); ui.lineEdit_ipv4address->clear(); ui.lineEdit_ipv4netmask->clear(); ui.lineEdit_ipv4gateway->clear(); break; case 5: ui.comboBox_ipv6method->setCurrentIndex(0); ui.spinBox_ipv6prefixlength->setValue(0); ui.lineEdit_ipv6address->clear(); ui.lineEdit_ipv6gateway->clear(); ui.comboBox_ipv6privacy->setCurrentIndex(0); break; case 6: ui.comboBox_proxymethod->setCurrentIndex(0); ui.lineEdit_proxyurl->clear(); ui.lineEdit_proxyservers->clear(); ui.lineEdit_proxyexcludes->clear(); break; default: break; } // switch return; } // // Slot to reset all pages. Called when ui.pushButton_resetall // is clicked(). void PropertiesEditor::resetAll() { for (int i = 0; i < ui.toolBox_peditor->count(); ++i) { this->resetPage(i); } return; } // // Slot to update the configuration then exit. Called when ui.pushButton_ok // is clicked. Step through each page of the QToolBox and send any entries // to connman. void PropertiesEditor::updateConfiguration() { // Some variables QString s; QStringList sl; QList vlist; QMap dict; QDBusInterface* iface_serv = new QDBusInterface(DBUS_SERVICE, objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); QList lep; QStringList slp; // QCheckboxes // Only update if changed if (ui.checkBox_autoconnect->isChecked() != objmap.value("AutoConnect").toBool() ) { vlist.clear(); vlist << "AutoConnect"; vlist << QVariant::fromValue(QDBusVariant(ui.checkBox_autoconnect->isChecked()) ); QDBusMessage reply00 = iface_serv->callWithArgumentList(QDBus::AutoDetect, "SetProperty", vlist); //qDebug() << reply00; } // QLineEdits (nameservers, timeservers and domains) lep.clear(); slp.clear(); lep << ui.lineEdit_nameservers << ui.lineEdit_timeservers << ui.lineEdit_domains; slp << "Nameservers.Configuration" << "Timeservers.Configuration" << "Domains.Configuration"; for (int i = 0; i < lep.count(); ++i) { s = lep.at(i)->text(); s.replace(',', ' '); s.replace(';', ' '); s = s.simplified(); if (s.isEmpty() ) sl.clear(); else sl = s.split(' '); // Only update if an entry has changed. if (sl != objmap.value(slp.at(i)).toStringList()) { vlist.clear(); vlist << slp.at(i); vlist << QVariant::fromValue(QDBusVariant(sl) ); QDBusMessage reply01 = iface_serv->callWithArgumentList(QDBus::AutoDetect, "SetProperty", vlist); //qDebug() << reply01; } // if } //for // ipv4 // Only update if an entry has changed. if (! ui.comboBox_ipv4method->currentText().contains(ipv4map.value("Method").toString(), Qt::CaseInsensitive) | ! ui.lineEdit_ipv4address->text().contains(ipv4map.value("Address").toString(), Qt::CaseInsensitive) | ! ui.lineEdit_ipv4netmask->text().contains(ipv4map.value("Netmask").toString(), Qt::CaseInsensitive) | ! ui.lineEdit_ipv4gateway->text().contains(ipv4map.value("Gateway").toString(), Qt::CaseInsensitive) ) { vlist.clear(); lep.clear(); slp.clear(); dict.clear(); vlist << "IPv4.Configuration"; dict.insert("Method", ui.comboBox_ipv4method->currentText().toLower() ); lep << ui.lineEdit_ipv4address << ui.lineEdit_ipv4netmask << ui.lineEdit_ipv4gateway; slp << "Address" << "Netmask" << "Gateway"; for (int i = 0; i < lep.count(); ++i) { s = lep.at(i)->text(); s = s.simplified(); // really should not be needed with the validator if (s.isEmpty() ) s.clear(); dict.insert(slp.at(i), s); } // for vlist << QVariant::fromValue(QDBusVariant(dict) ); QDBusMessage reply02 = iface_serv->callWithArgumentList(QDBus::AutoDetect, "SetProperty", vlist); //qDebug() << reply02; } // if ipv4 changed // ipv6 // Only update if an entry has changed. if (! ui.comboBox_ipv6method->currentText().contains(ipv6map.value("Method").toString(), Qt::CaseInsensitive) | (static_cast(ui.spinBox_ipv6prefixlength->value()) != ipv6map.value("PrefixLength").toUInt()) | ! ui.lineEdit_ipv6address->text().contains(ipv6map.value("Address").toString(), Qt::CaseInsensitive) | ! ui.lineEdit_ipv6gateway->text().contains(ipv6map.value("Gateway").toString(), Qt::CaseInsensitive) | ! ui.comboBox_ipv6privacy->currentText().contains(ipv6map.value("Privacy").toString(), Qt::CaseInsensitive)) { vlist.clear(); lep.clear(); slp.clear(); dict.clear(); vlist << "IPv6.Configuration"; dict.insert("Method", ui.comboBox_ipv6method->currentText().toLower() ); dict.insert("PrefixLength", QVariant::fromValue(static_cast(ui.spinBox_ipv6prefixlength->value())) ); dict.insert("Privacy", ui.comboBox_ipv6privacy->currentText().toLower() ); lep << ui.lineEdit_ipv6address << ui.lineEdit_ipv6gateway; slp << "Address" << "Gateway"; for (int i = 0; i < lep.count(); ++i) { s = lep.at(i)->text(); s = s.simplified(); // really should not be needed with the validator if (s.isEmpty() ) s.clear(); dict.insert(slp.at(i), s); } // for vlist << QVariant::fromValue(QDBusVariant(dict) ); QDBusMessage reply03 = iface_serv->callWithArgumentList(QDBus::AutoDetect, "SetProperty", vlist); //qDebug() << reply03; } // if ipv6 changed // proxy // Only update if an entry has changed. if (! ui.comboBox_proxymethod->currentText().contains(proxmap.value("Method").toString(), Qt::CaseInsensitive) | ! ui.lineEdit_proxyservers->text().contains(proxmap.value("Servers").toStringList().join("\n"), Qt::CaseInsensitive) | ! ui.lineEdit_proxyexcludes->text().contains(proxmap.value("Excludes").toStringList().join("\n"), Qt::CaseInsensitive)| ! ui.lineEdit_proxyurl->text().contains(proxmap.value("URL").toString(), Qt::CaseInsensitive)) { vlist.clear(); lep.clear(); slp.clear(); dict.clear(); vlist << "Proxy.Configuration"; dict.insert("Method", ui.comboBox_proxymethod->currentText().toLower() ); lep << ui.lineEdit_proxyurl << ui.lineEdit_proxyservers << ui.lineEdit_proxyexcludes; slp << "URL" << "Servers" << "Excludes"; for (int i = 0; i < lep.count(); ++i) { s = lep.at(i)->text(); s = s.simplified(); // URL is a single string if ( i == 0 ) { if (s.isEmpty() ) s.clear(); dict.insert(slp.at(i), s); } // if // remanider are an array of strings else { if (s.isEmpty() ) sl.clear(); else sl = s.split(' '); dict.insert(slp.at(i), sl); } //else } // for vlist << QVariant::fromValue(QDBusVariant(dict) ); qDebug() << dict; QDBusMessage reply04 = iface_serv->callWithArgumentList(QDBus::AutoDetect, "SetProperty", vlist); //qDebug() << reply04; } // if proxy changed // cleanup iface_serv->deleteLater(); this->accept(); } cmst/apps/cmstapp/code/scrollbox/ui/000755 001750 000144 00000000000 12645604037 020135 5ustar00andyusers000000 000000 cmst/apps/rootapp/code/roothelper/cpp2xml.sh000755 001750 000144 00000000311 12645570501 021626 0ustar00andyusers000000 000000 #!/bin/bash # # script to convert the header file to cpp # # -M all public slots # -P all properties # -S all signals qdbuscpp2xml -M -P roothelper.h -o org.monkey_business_enterprises.roothelper.xml cmst/apps/cmstapp/code/main.cpp000755 001750 000144 00000017432 12645570501 017151 0ustar00andyusers000000 000000 /**************************** main.cpp ********************************* C++ main routine. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include # include # include # include # include # include # include # include # include # include "./control_box/controlbox.h" # include "../resource.h" // Create a signal handler to catch ^C from console void signalhandler(int sig) { if(sig == SIGINT || sig == SIGTERM) { qApp->quit(); } return; } int main(int argc, char *argv[]) { QApplication::setApplicationName(LONG_NAME); QApplication::setApplicationVersion(VERSION); QApplication::setOrganizationName(ORG); QApplication::setDesktopSettingsAware(true); QApplication app(argc, argv); // make sure only one instance is running QLocalSocket* socket = new QLocalSocket(); socket->connectToServer(SOCKET_NAME); bool b_connected = socket->waitForConnected(500); socket->abort(); delete socket; if (b_connected) { qDebug() << QCoreApplication::translate("main.cpp", "Another running instance of CMST has been detected. This instance is aborting"); return 1; } // setup the command line parser QCommandLineParser parser; parser.setApplicationDescription(QApplication::translate("main.cpp", "Connman System Tray.") ); QCommandLineOption bypassState(QStringList() << "b" << "bypass-restore-state", QCoreApplication::translate("main.cpp", "Bypass restoring the window state if restoring window state is specified in the settings file.") ); parser.addOption(bypassState); QCommandLineOption bypassStartOptions(QStringList() << "B" << "bypass-start-options", QCoreApplication::translate("main.cpp", "Bypass restoring any start options in the settings file.") ); parser.addOption(bypassStartOptions); QCommandLineOption disableCounters(QStringList() << "c" << "disable-counters", QCoreApplication::translate("main.cpp", "[Experimental] Disable data counters. May be used to minimize load on your system.") ); parser.addOption(disableCounters); QCommandLineOption disableTrayIcon(QStringList() << "d" << "disable-tray-icon", QCoreApplication::translate("main.cpp", "Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification.") ); parser.addOption(disableTrayIcon); parser.addHelpOption(); QCommandLineOption useIconTheme(QStringList() << "i" << "icon-theme", QCoreApplication::translate("main.cpp", "Use an icon theme from your system."), QCoreApplication::translate("main.cpp", "Icon Theme Name"), QString() ); parser.addOption(useIconTheme); QCommandLineOption logInputRequest(QStringList() << "l" << "log-input-request", QCoreApplication::translate("main.cpp", "Log the connman inputRequest for debugging purposes.") ); parser.addOption(logInputRequest); QCommandLineOption startMinimized(QStringList() << "m" << "minimized", QCoreApplication::translate("main.cpp", "Start the GUI minimized in the system tray.") ); parser.addOption(startMinimized); parser.addVersionOption(); QCommandLineOption waitTime(QStringList() << "w" << "wait-time", QCoreApplication::translate("main.cpp", "Specify the wait time in seconds before starting the system tray icon."), QCoreApplication::translate("main.cpp", "seconds"), "0"); parser.addOption(waitTime); QCommandLineOption counterUpdateKb (QStringList() << "counter-update-kb", QCoreApplication::translate("main.cpp", "[Experimental] The number of kb that have to be transmitted before the counter updates."), QCoreApplication::translate("main.cpp", "KB"), "1024" ); parser.addOption(counterUpdateKb); QCommandLineOption counterUpdateRate (QStringList() << "counter-update-rate", QCoreApplication::translate("main.cpp", "[Experimental] The interval in seconds between counter updates."), QCoreApplication::translate("main.cpp", "seconds"), "10" ); parser.addOption(counterUpdateRate); // Added on 2015.01.04 to work around QT5.4 bug with transparency not always working QCommandLineOption fakeTransparency(QStringList() << "fake-transparency", QCoreApplication::translate("main.cpp", "If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB)"), QCoreApplication::translate("main.cpp", "RRGGBB"), "0x222222" ); parser.addOption(fakeTransparency); // Added on 2014.11.24 to work around a bug where QT5.3 won't show an icon in XFCE, My fix may not work, but keep it in for now. If this gets fixed in // QT5.4 keep the command line option so users start up commands don't break, but make it a NOP. QCommandLineOption useXFCE(QStringList() << "use-xfce", QCoreApplication::translate("main.cpp", "Use XFCE specific code.") ); parser.addOption(useXFCE); // Added on 2014.12.16 to work around a similar bug where QT5.3 won't show an icon in MATE. QCommandLineOption useMATE(QStringList() << "use-mate", QCoreApplication::translate("main.cpp", "Use MATE DE specific code.") ); parser.addOption(useMATE); // Setup translations QTranslator qtTranslator; qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); app.installTranslator(&qtTranslator); QTranslator cmstTranslator; if (cmstTranslator.load("cmst_" + QLocale::system().name(), ":/translations/translations" ) ) { app.installTranslator(&cmstTranslator); } // else use en_US as it contains Connman strings properized and some singular/plural strings else if (cmstTranslator.load("cmst_en_US", ":/translations/translations" ) ) { app.installTranslator(&cmstTranslator); } // Make sure all the command lines can be parsed // using parse() instead of process() as process stops on an error if an option needs a value // and it is not specified, even if we provide a default. We're supposed to catch errors if we // use parse(), but parse.errorText() returns an empty string on this. Bag the error checking // for now. parser.parse(QCoreApplication::arguments() ); QStringList sl = parser.unknownOptionNames(); if (sl.size() > 0 ) parser.showHelp(1); if (parser.isSet("help") ) parser.showHelp(1); if (parser.isSet("version") ) { #if QT_VERSION >= 0x050400 parser.showVersion(); #else QTextStream out(stdout); out << qPrintable(LONG_NAME) << " " << qPrintable(VERSION) << endl; return 0; #endif } // signal handler signal(SIGINT, signalhandler); // Showing the dialog (or not) is controlled in the createSystemTrayIcon() function // called from the ControlBox constructor. We don't show it from here. ControlBox ctlbox(parser); return app.exec(); } cmst/apps/rootapp/code/000755 001750 000144 00000000000 12645604013 015520 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/control_box/controlbox.h000755 001750 000144 00000015561 12650551344 022414 0ustar00andyusers000000 000000 /**************************** controlbox.h ***************************** Code to manage the primary user interface to include the QDialog the user interfaces with and the system tray icon. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef CONTROLBOX_H # define CONTROLBOX_H # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include "ui_controlbox.h" # include "./code/agent/agent.h" # include "./code/counter/counter.h" # include "./code/notify/notify.h" # include "./code/iconman/iconman.h" # include "./code/vpn_agent/vpnagent.h" // Two of the connman.Manager query functions will return an array of structures. // This struct provides a receiving element we can use to collect the return data. struct arrayElement { QDBusObjectPath objpath; QMap objmap; }; // // custom QFrame containing a QToolButton that will emit a button id class idButton : public QFrame { Q_OBJECT public: idButton (QWidget*, const QDBusObjectPath&); inline void setText (const QString& text) {button->setText(text);} inline void setIcon (const QPixmap& pixmap) {button->setIcon(pixmap);} inline void setChecked (bool checked) {button->setChecked(checked);} signals: void clickedID(QString, bool); private: QToolButton* button; QDBusObjectPath obj_id; private slots: void buttonClicked(bool); }; // // The main program class based on a QDialog class ControlBox : public QDialog { Q_OBJECT public: ControlBox(const QCommandLineParser&, QWidget* parent = 0); public slots: void aboutCMST(); void aboutIconSet(); void showLicense(); void showChangeLog(); protected: void closeEvent(QCloseEvent*); void keyPressEvent(QKeyEvent*); bool eventFilter(QObject*, QEvent*); private: // members Ui::ControlBox ui; quint8 q8_errors; QMap properties_map; QList services_list; QList technologies_list; QList wifi_list; QList peer_list; QList vpn_list; ConnmanAgent* agent; ConnmanVPNAgent* vpnagent; ConnmanCounter* counter; NotifyClient* notifyclient; short wifi_interval; quint32 counter_accuracy; quint32 counter_period; QDBusInterface* con_manager; QDBusInterface* vpn_manager; QSystemTrayIcon* trayicon; QMenu* trayiconmenu; QMenu* tech_submenu; QMenu* info_submenu; QMenu* wifi_submenu; QMenu* vpn_submenu; QMenu* mvsrv_menu; QActionGroup* minMaxGroup; QActionGroup* moveGroup; QAction* minimizeAction; QAction* maximizeAction; QAction* exitAction; bool b_usexfce; bool b_usemate; QSettings* settings; QString onlineobjectpath; QLocalServer* socketserver; QColor trayiconbackground; IconManager* iconman; // functions int managerRescan(const int& srv = 0); void assembleTabStatus(); void assembleTabDetails(); void assembleTabWireless(); void assembleTabVPN(); void assembleTabCounters(); void assembleTrayIcon(); void sendNotifications(); bool getProperties(); bool getTechnologies(); bool getServices(); bool getArray(QList&, const QDBusMessage&); bool getMap(QMap&, const QDBusMessage&); static bool extractMapData(QMap&,const QVariant&); void logErrors(const quint8&); QString readResourceText(const char*); void clearCounters(); private slots: void updateDisplayWidgets(); void moveService(QAction*); void moveButtonPressed(QAction*); void enableMoveButtons(int,int); void counterUpdated(const QDBusObjectPath&, const QString&, const QString&); void connectPressed(); void disconnectPressed(); void removePressed(); void dbsPropertyChanged(QString,QDBusVariant); void dbsServicesChanged(QMap, QList, QDBusMessage); void dbsPeersChanged(QMap, QList, QDBusMessage); void dbsServicePropertyChanged(QString, QDBusVariant, QDBusMessage); void dbsTechnologyPropertyChanged(QString, QDBusVariant, QDBusMessage); void dbsTechnologyAdded(QDBusObjectPath, QVariantMap); void dbsTechnologyRemoved(QDBusObjectPath); void scanWiFi(); void toggleOfflineMode(bool); void toggleTrayIcon(bool); void togglePowered(QString, bool); void minMaxWindow(QAction* = 0); void techSubmenuTriggered(QAction* = 0); void infoSubmenuTriggered(QAction* = 0); void wifiSubmenuTriggered(QAction* = 0); void vpnSubmenuTriggered(QAction* = 0); void getServiceDetails(int); void showWhatsThis(); inline void trayNotifications(bool checked) {if (checked) ui.checkBox_notifydaemon->setChecked(false);} inline void daemonNotifications(bool checked) {if (checked) ui.checkBox_systemtraynotifications->setChecked(false);} inline void closeSystemTrayTearOffMenu() {trayiconmenu->hideTearOffMenu();} void iconActivated(QSystemTrayIcon::ActivationReason reason); void enableRunOnStartup(bool enabled); void writeSettings(); void readSettings(); void createSystemTrayIcon(); void connectNotifyClient(); void configureService(); void provisionService(); void socketConnectionDetected(); void cleanUp(); void callColorDialog(); void iconColorChanged(const QString&); }; #endif cmst/apps/cmstapp/code/control_box/controlbox.cpp000755 001750 000144 00000342724 12651157547 022763 0ustar00andyusers000000 000000 /**************************** controlbox.cpp *************************** Code to manage the primary user interface to include the QDialog the user interfaces with and the system tray icon. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ /********************************************************************** * NOTE TO PEOPLE HACKING ON THE CODE * * Prior to 2015.11.12 text returned by connman was translated and then * stored in the various maps. After that date the code was revised so * that text is stored in the maps exactly as connman returns it and * is then translated when it needs to be displayed. * ***********************************************************************/ # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include "../resource.h" # include "./controlbox.h" # include "./code/scrollbox/scrollbox.h" # include "./code/peditor/peditor.h" # include "./code/provisioning/prov_ed.h" # include "./code/vpn_prov_ed/vpn_ed.h" # include "./code/trstring/tr_strings.h" // headers for system logging # include # include # include # define DBUS_PATH "/" # define DBUS_CON_SERVICE "net.connman" # define DBUS_VPN_SERVICE "net.connman.vpn" # define DBUS_CON_MANAGER "net.connman.Manager" # define DBUS_VPN_MANAGER "net.connman.vpn.Manager" // Custom push button, used in the technology box for powered on/off // This is really a single use button, after it is clicked all idButtons // are deleted and recreated. Once is is clicked disable the button. idButton::idButton(QWidget* parent, const QDBusObjectPath& id) : QFrame(parent) { // margins const int m_left = 5; const int m_top = 0; const int m_right = 5; const int m_bottom = 0; // create the button button = new QToolButton(this); button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); obj_id = id; button->setCheckable(true); connect (button, SIGNAL(clicked(bool)), this, SLOT(buttonClicked(bool))); // create the box QHBoxLayout* layout = new QHBoxLayout(this); layout->setContentsMargins(m_left, m_top, m_right, m_bottom); layout->addWidget(button, 0, 0); return; } void idButton::buttonClicked(bool checked) { this->setDisabled(true); emit clickedID (obj_id.path(), checked); return; } // main GUI element ControlBox::ControlBox(const QCommandLineParser& parser, QWidget *parent) : QDialog(parent) { // set the Locale (probably not necessary since the default is the system one anyway) QLocale::setDefault(QLocale::system() ); // setup the user interface ui.setupUi(this); // install global event filter (used to disable showing tooltips) qApp->installEventFilter(this); // We need this if someone is running the program from the tray popup menu. // The main UI is fine without it, but if you call up the agent dialog and then // close that seems to be treated as the last window. qApp->setQuitOnLastWindowClosed(false); // set the window title setWindowTitle(TranslateStrings::cmtr("connman system tray")); // data members q8_errors = CMST::No_Errors; properties_map.clear(); services_list.clear(); technologies_list.clear(); wifi_list.clear(); peer_list.clear(); vpn_list.clear(); agent = new ConnmanAgent(this); vpnagent = new ConnmanVPNAgent(this); counter = new ConnmanCounter(this); trayiconmenu = new QMenu(this); tech_submenu = new QMenu(tr("Technologies"), this); info_submenu = new QMenu(tr("Service Details"), this); wifi_submenu = new QMenu(tr("WiFi Connections"), this); vpn_submenu = new QMenu(tr("VPN Connections"), this); mvsrv_menu = new QMenu(this); settings = new QSettings(ORG, APP, this); notifyclient = 0; onlineobjectpath.clear(); socketserver = new QLocalServer(this); socketserver->removeServer(SOCKET_NAME); // remove any files that may have been left after a crash socketserver->listen(SOCKET_NAME); trayiconbackground = QColor(); iconman = new IconManager(this); // Read saved settings which will set the ui controls in the preferences tab. this->readSettings(); // Set the iconmanager color iconman->setIconColor(QColor(ui.lineEdit_colorize->text()) ); // Constructor scope bool, set to true if we are using start options bool b_so = (! parser.isSet("bypass-start-options") && ui.checkBox_usestartoptions->isChecked() ); // Enable or disable preferences group box (changed via ui signal/slot after the constructor) ui.groupBox_startoptions->setEnabled(ui.checkBox_usestartoptions->isChecked()); // Restore window if retain_state is checked and we have not bypassed it on the command line if (! parser.isSet("bypass-restore-state") && settings->value("CheckBoxes/retain_state").toBool() ) { settings->beginGroup("MainWindow"); resize(settings->value("size", QSize(700, 550)).toSize() ); move(settings->value("pos", QPoint(200, 200)).toPoint() ); ui.tabWidget->setCurrentIndex(settings->value("current_page").toInt() ); settings->endGroup(); } // Make sure the controlbox will fit onto small acreens QSize sz_target = (qApp->desktop()->availableGeometry(this)).size(); QSize sz_source = this->sizeHint(); sz_target.scale(sz_target.width() - 100, sz_target.height() - 100, Qt::KeepAspectRatio); // give me a little buffer if (sz_source.width() > sz_target.width() || sz_source.height() > sz_target.height() ) { sz_source.scale(sz_target.width(), sz_target.height(), Qt::KeepAspectRatio); resize(sz_source); move(25, 25); } // set a flag if we sent a commandline option to log the connman inputrequest agent->setLogInputRequest(parser.isSet("log-input-request")); vpnagent->setLogInputRequest(parser.isSet("log-input-request")); QDir d(IPT_REQ_LOG_PATH); d.mkpath(IPT_REQ_LOG_PATH); if (d.exists(IPT_REQ_LOG_FILE)) d.remove(IPT_REQ_LOG_FILE); // Set icon theme if provided on the command line or in the settings if (parser.isSet("icon-theme") ) QIcon::setThemeName(parser.value("icon-theme")); else if (b_so && ui.checkBox_systemicontheme->isChecked() ) QIcon::setThemeName(ui.lineEdit_icontheme->text() ); else QIcon::setThemeName(INTERNAL_THEME); // Set the window icon. If an icon was installed to /usr/share/icons/hicolor/48x48/apps // use that, otherwise use a freedesktop.org named one if (QFile::exists("/usr/share/icons/hicolor/48x48/apps/cmst.png") ) this->setWindowIcon(QIcon("/usr/share/icons/hicolor/48x48/apps/cmst.png") ); else this->setWindowIcon(QIcon::fromTheme("preferences-system-network") ); // Set the whatsthis icons ui.toolButton_whatsthis->setIcon(iconman->getIcon("whats_this")); agent->setWhatsThisIcon(iconman->getIcon("whats_this")); vpnagent->setWhatsThisIcon(iconman->getIcon("whats_this")); // set a flag is we want to use XFCE or MATE custom code. // Currently (as of 2014.11.24) this is only used to get around a bug between QT5.3 and the XFCE system tray // Even then the fix may not work, but for now keep it in. b_usexfce = (parser.isSet("use-xfce") || (b_so && ui.radioButton_desktopxfce->isChecked()) ); b_usemate = (parser.isSet("use-mate") || (b_so && ui.radioButton_desktopmate->isChecked()) ); // Fake transparency if (parser.isSet("fake-transparency") ) { bool ok; trayiconbackground = QColor(parser.value("fake-transparency").toUInt(&ok, 16) ); if (! ok) trayiconbackground = QColor(); } // if parser set else if (b_so && ui.checkBox_faketranparency->isChecked() ) { trayiconbackground = QColor(ui.spinBox_faketransparency->value() ); } // if else trayiconbackground = QColor(); // set counter update params from command line options if available otherwise // default params specified in main.cpp are used. Set a minimum value for // each to maintain program response. uint minval = 256; uint setval = 0; if (parser.isSet("counter-update-kb") ) { bool ok; setval = parser.value("counter-update-kb").toUInt(&ok, 10); if (! ok) setval = minval; } // if parser set else if (b_so && ui.checkBox_counterkb->isChecked() ) { setval = ui.spinBox_counterkb->value(); } // else if counter_accuracy = setval > minval ? setval : minval; // number of kb for counter updates minval = 5; setval = 0; if (parser.isSet("counter-update-rate") ) { bool ok; setval = parser.value("counter-update-rate").toUInt(&ok, 10); if (! ok) setval = minval; } // if parser set else if (b_so && ui.checkBox_counterseconds->isChecked() ) { setval = ui.spinBox_counterrate->value(); } counter_period = setval > minval ? setval : minval; // number of seconds for counter updates // operate on settings not dealt with elsewhere ui.pushButton_provisioning_editor->setVisible(ui.checkBox_advanced->isChecked() ); ui.pushButton_vpn_editor->setVisible(ui.checkBox_advanced->isChecked() ); ui.groupBox_process->setVisible(ui.checkBox_advanced->isChecked() ); enableRunOnStartup(ui.checkBox_runonstartup->isChecked() ); // Create the notifyclient, make four tries; first immediately in constructor, then // at 1/2 second, 2 seconds and finally at 8 seconds notifyclient = new NotifyClient(this); this->connectNotifyClient(); QTimer::singleShot(500, this, SLOT(connectNotifyClient())); QTimer::singleShot(2 * 1000, this, SLOT(connectNotifyClient())); QTimer::singleShot(8 * 1000, this, SLOT(connectNotifyClient())); // setup the dbus interface to connman.manager if (! QDBusConnection::systemBus().isConnected() ) logErrors(CMST::Err_No_DBus); else { con_manager = new QDBusInterface(DBUS_CON_SERVICE, DBUS_PATH, DBUS_CON_MANAGER, QDBusConnection::systemBus(), this); if (! con_manager->isValid() ) logErrors(CMST::Err_Invalid_Con_Iface); else { // Access connman.manager to retrieve the data this->managerRescan(CMST::Manager_All); // register the agent con_manager->call(QDBus::AutoDetect, "RegisterAgent", QVariant::fromValue(QDBusObjectPath(AGENT_OBJECT)) ); // if counters are enabled connect signal to slot and register the counter if (! parser.isSet("disable-counters") && (b_so ? (! ui.checkBox_disablecounters->isChecked()) : true ) ) { QList vlist_counter; vlist_counter.clear(); vlist_counter << QVariant::fromValue(QDBusObjectPath(CNTR_OBJECT)) << counter_accuracy << counter_period; QDBusMessage reply = con_manager->callWithArgumentList(QDBus::AutoDetect, "RegisterCounter", vlist_counter); if (reply.type() == QDBusMessage::ReplyMessage) connect(counter, SIGNAL(usageUpdated(QDBusObjectPath, QString, QString)), this, SLOT(counterUpdated(QDBusObjectPath, QString, QString))); } // connect some dbus signals to our slots QDBusConnection::systemBus().connect(DBUS_CON_SERVICE, DBUS_PATH, DBUS_CON_MANAGER, "PropertyChanged", this, SLOT(dbsPropertyChanged(QString, QDBusVariant))); QDBusConnection::systemBus().connect(DBUS_CON_SERVICE, DBUS_PATH, DBUS_CON_MANAGER, "ServicesChanged", this, SLOT(dbsServicesChanged(QMap, QList, QDBusMessage))); QDBusConnection::systemBus().connect(DBUS_CON_SERVICE, DBUS_PATH, DBUS_CON_MANAGER, "PeersChanged", this, SLOT(dbsPeersChanged(QMap, QList, QDBusMessage))); QDBusConnection::systemBus().connect(DBUS_CON_SERVICE, DBUS_PATH, DBUS_CON_MANAGER, "TechnologyAdded", this, SLOT(dbsTechnologyAdded(QDBusObjectPath, QVariantMap))); QDBusConnection::systemBus().connect(DBUS_CON_SERVICE, DBUS_PATH, DBUS_CON_MANAGER, "TechnologyRemoved", this, SLOT(dbsTechnologyRemoved(QDBusObjectPath))); // clear the counters if selected this->clearCounters(); // VPN manager vpn_manager = new QDBusInterface(DBUS_VPN_SERVICE, DBUS_PATH, DBUS_VPN_MANAGER, QDBusConnection::systemBus(), this); if (! vpn_manager->isValid() ) logErrors(CMST::Err_Invalid_VPN_Iface); else vpn_manager->call(QDBus::AutoDetect, "RegisterAgent", QVariant::fromValue(QDBusObjectPath(VPN_AGENT_OBJECT)) ); } // else have valid connection } // else have connected systemBus // add actions to groups minMaxGroup = new QActionGroup(this); minimizeAction = new QAction(tr("Mi&nimize"), this); maximizeAction = new QAction(tr("Ma&ximize"), this); minMaxGroup->addAction(minimizeAction); minMaxGroup->addAction(maximizeAction); exitAction = new QAction(tr("&Exit"), this); moveGroup = new QActionGroup(this); moveGroup->addAction(ui.actionMove_Before); moveGroup->addAction(ui.actionMove_After); // connect signals and slots - actions and action groups connect(minMaxGroup, SIGNAL(triggered(QAction*)), this, SLOT(minMaxWindow(QAction*))); connect(tech_submenu, SIGNAL(triggered(QAction*)), this, SLOT(techSubmenuTriggered(QAction*))); connect(info_submenu, SIGNAL(triggered(QAction*)), this, SLOT(infoSubmenuTriggered(QAction*))); connect(wifi_submenu, SIGNAL(triggered(QAction*)), this, SLOT(wifiSubmenuTriggered(QAction*))); connect(vpn_submenu, SIGNAL(triggered(QAction*)), this, SLOT(vpnSubmenuTriggered(QAction*))); connect(exitAction, SIGNAL(triggered()), qApp, SLOT(quit())); connect(moveGroup, SIGNAL(triggered(QAction*)), this, SLOT(moveButtonPressed(QAction*))); connect(mvsrv_menu, SIGNAL(triggered(QAction*)), this, SLOT(moveService(QAction*))); connect(ui.actionRescan, SIGNAL (triggered()), this, SLOT(scanWiFi())); connect(ui.actionOffline_Mode, SIGNAL(triggered(bool)), this, SLOT(toggleOfflineMode(bool))); // connect signals and slots - ui elements connect(ui.toolButton_whatsthis, SIGNAL(clicked()), this, SLOT(showWhatsThis())); connect(ui.comboBox_service, SIGNAL(currentIndexChanged(int)), this, SLOT(getServiceDetails(int))); connect(ui.pushButton_exit, SIGNAL(clicked()), exitAction, SLOT(trigger())); connect(ui.pushButton_minimize, SIGNAL(clicked()), minimizeAction, SLOT(trigger())); connect(ui.checkBox_hideIcon, SIGNAL(clicked(bool)), this, SLOT(toggleTrayIcon(bool))); connect(ui.pushButton_connect, SIGNAL(clicked()), this, SLOT(connectPressed())); connect(ui.pushButton_vpn_connect, SIGNAL(clicked()), this, SLOT(connectPressed())); connect(ui.pushButton_disconnect, SIGNAL(clicked()), this, SLOT(disconnectPressed())); connect(ui.pushButton_vpn_disconnect, SIGNAL(clicked()), this, SLOT(disconnectPressed())); connect(ui.pushButton_remove, SIGNAL(clicked()), this, SLOT(removePressed())); connect(ui.pushButton_aboutCMST, SIGNAL(clicked()), this, SLOT(aboutCMST())); connect(ui.pushButton_aboutIconSet, SIGNAL(clicked()), this, SLOT(aboutIconSet())); connect(ui.pushButton_aboutQT, SIGNAL(clicked()), qApp, SLOT(aboutQt())); connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(cleanUp())); connect(ui.pushButton_license, SIGNAL(clicked()), this, SLOT(showLicense())); connect(ui.pushButton_change_log, SIGNAL(clicked()), this, SLOT(showChangeLog())); connect(ui.tableWidget_services, SIGNAL (cellClicked(int, int)), this, SLOT(enableMoveButtons(int, int))); connect(ui.checkBox_hidecnxn, SIGNAL (toggled(bool)), this, SLOT(updateDisplayWidgets())); connect(ui.checkBox_systemtraynotifications, SIGNAL (clicked(bool)), this, SLOT(trayNotifications(bool))); connect(ui.checkBox_notifydaemon, SIGNAL (clicked(bool)), this, SLOT(daemonNotifications(bool))); connect(ui.pushButton_configuration, SIGNAL (clicked()), this, SLOT(configureService())); connect(ui.pushButton_provisioning_editor, SIGNAL (clicked()), this, SLOT(provisionService())); connect(ui.pushButton_vpn_editor, SIGNAL (clicked()), this, SLOT(provisionService())); connect(socketserver, SIGNAL(newConnection()), this, SLOT(socketConnectionDetected())); connect(ui.checkBox_runonstartup, SIGNAL(toggled(bool)), this, SLOT(enableRunOnStartup(bool))); connect(ui.toolButton_colorize, SIGNAL(clicked()), this, SLOT(callColorDialog())); connect(ui.lineEdit_colorize, SIGNAL(textChanged(const QString&)), this, SLOT(iconColorChanged(const QString&))); // tray icon - disable it if we specifiy that option on the commandline or in // the settings, otherwise set a singleshot timer to create the tray icon. trayicon = 0; if (parser.isSet("disable-tray-icon") || (b_so && ui.checkBox_disabletrayicon->isChecked()) ) { ui.checkBox_hideIcon->setDisabled(true); this->updateDisplayWidgets(); this->showNormal(); // no place to minimize to, so showMaximized } // if else { const short mintrigger = 100; // Minimum time (milliseconds) to wait before starting the tray icon. We advertise zero, but not really. int timeout = 0; if (parser.isSet("wait-time") ) { bool ok; timeout = parser.value("wait-time").toInt(&ok, 10); if (! ok) timeout = 0; } // if parser set else if (b_so && ui.checkBox_waittime->isChecked() ) { timeout = ui.spinBox_waittime->value(); } timeout *= 1000; if (timeout < mintrigger) timeout = mintrigger; if (parser.isSet("minimized") || (b_so && ui.checkBox_startminimized->isChecked()) ) { QTimer::singleShot(timeout, this, SLOT(createSystemTrayIcon()) ); } // if showMinimized else { this->showNormal(); QTimer::singleShot(timeout, this, SLOT(createSystemTrayIcon()) ); } // else showNormal } // else } ////////////////////////////////////////////////// Public Functions ////////////////////////////////// ////////////////////////////////////////////////// Public Slots ////////////////////////////////////// // // slot to display an about box for this program void ControlBox::aboutCMST() { QMessageBox::about(this, tr("About %1").arg(TranslateStrings::cmtr("cmst")), tr("

%1 is a program to interface with the Connman daemon and to provide a system tray control." "
Version %2" "
Release date: %3" "
Copyright c %4
by" "
Andrew J. Bibb" "
Vermont, USA" "
Contributors:" "
Brett Dutro" "
Adam Fontenot" "
Lester Bico" "
Yaohan Chen" "
Translations:" "
Jianfeng Zhang (Chinese)" "
sqozz (German)" "
Ilya Shestopalov (Russian)" "
Build Information:" "
Compiled using QT version %5" "
Built %6 - %7") .arg(TranslateStrings::cmtr("cmst")) .arg(VERSION) .arg(RELEASE_DATE) .arg(COPYRIGHT_DATE) .arg(QT_VERSION_STR) .arg(__DATE__) .arg(__TIME__) ); } // // slot to display an about box for the icons we used void ControlBox::aboutIconSet() { QMessageBox::about(this, tr("About AwOken"), tr("
This program uses the AwOken icon set version 2.5" "

Released under the" "
Creative Commons" "
Attribution-Share Alike 3.0" "
Unported License" "
http://creativecommons.org/licenses/by-sa/3.0/legalcode" "
The CMST icon is a derivative work from the AwOken icon set." ) ); } // // slot to display the program license void ControlBox::showLicense() { QString s = readResourceText(":/text/text/license.txt"); if ( s.isEmpty() ) s.append(tr("%1 license is the MIT (Expat) license.").arg(TranslateStrings::cmtr("cmst"))); QMessageBox::about(this, tr("License"), s); } // // slot to display the change log of the program void ControlBox::showChangeLog() { QString s = readResourceText(":/text/text/changelog.txt"); if ( s.isEmpty() ) s.append(tr("%1 change log is not available.").arg(TranslateStrings::cmtr("cmst"))); ScrollBox::execScrollBox(tr("ChangeLog"), s, this); } ////////////////////////////////////////////Private Slots //////////////////////////////////////////// // // Slot to update all of our display widgets void ControlBox::updateDisplayWidgets() { // each assemble function will check q8_errors to make sure it can // get the information it needs. Only check for major errors since we // can't run the assemble functions if there are. if ( ((q8_errors & CMST::Err_No_DBus) | (q8_errors & CMST::Err_Invalid_Con_Iface)) == 0x00 ) { // rebuild our pages this->assembleTabStatus(); this->assembleTabDetails(); this->assembleTabWireless(); this->assembleTabVPN(); this->assembleTabCounters(); if (trayicon != 0 ) this->assembleTrayIcon(); } // if there were no major errors return; } // // Slot to move the selected service before or after another service. // Called when an item in mvsrv_menu is selected. QAction act is the // action selected. void ControlBox::moveService(QAction* act) { // See if act belongs to a service QString ss; QDBusObjectPath targetobj; for (int i = 0; i < services_list.size(); ++i) { ss = services_list.at(i).objmap.value("Name").toString(); // the items in mvsrv_menu are in the same order as services_list if (ss == act->text() ) { targetobj = QDBusObjectPath(services_list.at(i).objpath.path()); break; } // if } // for // make sure we got a targetobject, if not most likely cancel pressed if (targetobj.path().isEmpty()) return; // get enough information from tableWidget_services to identify the source object QList list; list.clear(); list = ui.tableWidget_services->selectedItems(); if (list.isEmpty() ) return; // apply the movebefore or moveafter message to the source object QDBusInterface* iface_serv = new QDBusInterface(DBUS_CON_SERVICE, services_list.at(list.at(0)->row()).objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); if (iface_serv->isValid() ) { if (mvsrv_menu->title() == ui.actionMove_Before->text()) { QDBusMessage reply = iface_serv->call(QDBus::AutoDetect, "MoveBefore", QVariant::fromValue(targetobj) ); //qDebug() << reply; } else { QDBusMessage reply = iface_serv->call(QDBus::AutoDetect, "MoveAfter", QVariant::fromValue(targetobj) ); //qDebug() << reply; } // else } // iface_srv is valid // clean up iface_serv->deleteLater(); return; } // // Slot called if the movebefore or moveafter button was pressed void ControlBox::moveButtonPressed(QAction* act) { mvsrv_menu->setTitle(act->text()); mvsrv_menu->popup(QCursor::pos()); return; } // // Slot to enable the movebefore and moveafter buttons, and to prepare the poupup menu void ControlBox::enableMoveButtons(int row, int col) { (void)col; // enable the buttons ui.pushButton_movebefore->setEnabled(true); ui.pushButton_moveafter->setEnabled(true); // create the menu to show if a user selects one of the buttons mvsrv_menu->clear(); QString ss; for (int i = 0; i < services_list.size(); ++i) { ss = services_list.at(i).objmap.value("Name").toString(); QAction* act = mvsrv_menu->addAction(ss); if (i == row) act->setDisabled(true); } // add a cancel option mvsrv_menu->addSeparator(); mvsrv_menu->addAction(tr("Cancel")); return; } // // Slot to update the service label when this->counter is updated. Other labels in page 4 receive signals directly void ControlBox::counterUpdated(const QDBusObjectPath& qdb_objpath, const QString& home_label, const QString& roam_label) { // Don't update the counter if qdb_objpath is not the online service if (! qdb_objpath.path().contains(onlineobjectpath) ) return; // Set the labels in page 4 if (! qdb_objpath.path().isEmpty() ) { QMap map; for (int i =0; i < services_list.size(); ++i) { if (services_list.at(i).objpath == qdb_objpath) { map = services_list.at(i).objmap; break; } // if } // for ui.label_counter_service_name->setText(tr("Service: %1").arg(map.value("Name").toString()) ); ui.label_home_counter->setText(home_label); ui.label_roam_counter->setText(roam_label); } else ui.label_counter_service_name->setText(tr("Service: %1").arg(tr("Unable to determine service")) ); return; } // // Slot to connect a wifi or vpn service. Called when ui.pushButton_connect // or ui.pushButton_vpn_connect is pressed. // For VPN's this connects the service, not the vpnconnection. It appears that connman_vpn takes // the vpnconnections and creates one service for each. The vpnconnection part could be connected by // using vpn connection interface, but not really worth it since connman automatically creates a // a service for us. void ControlBox::connectPressed() { // Process wifi or vpn depending on who sent the signal QTableWidget* qtw = NULL; if (sender() == ui.pushButton_connect) qtw = ui.tableWidget_wifi; else if (sender() == ui.pushButton_vpn_connect) qtw = ui.tableWidget_vpn; else return; // If there is only one row select it if (qtw->rowCount() == 1 ) { QTableWidgetSelectionRange qtwsr = QTableWidgetSelectionRange(0, 0, 0, qtw->columnCount() - 1); qtw->setRangeSelected(qtwsr, true); } // If no row is selected then return( QList list; list.clear(); list = qtw->selectedItems(); if (list.isEmpty() ) { QMessageBox::information(this, tr("No Services Selected"), tr("You need to select a service before pressing the connect button.") ); return; } // send the connect message to the service. TableWidget only allows single selection so list can only have 0 or 1 elments QDBusInterface* iface_serv = NULL; if (qtw == ui.tableWidget_wifi) { iface_serv = new QDBusInterface(DBUS_CON_SERVICE, wifi_list.at(list.at(0)->row()).objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); } else if (qtw == ui.tableWidget_vpn) { iface_serv = new QDBusInterface(DBUS_CON_SERVICE, vpn_list.at(list.at(0)->row()).objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); } else return; // really not needed // don't know why, but can't get the Agent until the timeout, set a short one iface_serv->setTimeout(5); QDBusMessage reply = iface_serv->call(QDBus::AutoDetect, "Connect"); //qDebug() << "reply: " << reply; iface_serv->deleteLater(); return; } // // Slot to disconnect a wifi or VPN service. Called when ui.pushButton_disconnect // or ui.pushBotton_vpn_disconnect is pressed void ControlBox::disconnectPressed() { // Process wifi or vpn depending on who sent the signal QTableWidget* qtw = NULL; if (sender() == ui.pushButton_disconnect) qtw = ui.tableWidget_wifi; else if (sender() == ui.pushButton_vpn_disconnect) qtw = ui.tableWidget_vpn; else return; // If there is no item is selected run through the list looking for // services in "online" or "ready" state. If more than one is found // break as we will have to use the one currently selected. int cntr_connected = 0; int row_connected = -1; if (qtw->selectedItems().isEmpty() ) { int itemcount = 0; QMap map; if (qtw == ui.tableWidget_wifi) itemcount = wifi_list.size(); else if (qtw == ui.tableWidget_vpn) itemcount = vpn_list.size(); else return; // line is not really needed for (int row = 0; row < itemcount; ++row) { if (qtw == ui.tableWidget_wifi) map = wifi_list.at(row).objmap; else if (qtw == ui.tableWidget_vpn) map = vpn_list.at(row).objmap; else return; // line is not really needed if (map.value("State").toString() == "online" || map.value("State").toString() == "ready" ) { ++cntr_connected; row_connected = row; } if (cntr_connected > 1 ) break; } // for // Nothing selected, online or ready so return now if (cntr_connected == 0) return; // If only one entry is connected or online, select it if (cntr_connected == 1 ) { QTableWidgetSelectionRange qtwsr = QTableWidgetSelectionRange(row_connected, 0, row_connected, qtw->columnCount() - 1); qtw->setRangeSelected(qtwsr, true); } // cntr_connected == 1 } // if there are no currently selected items // If no row selected return QList list; list.clear(); list = qtw->selectedItems(); if (list.isEmpty() ) { QMessageBox::information(this, tr("No Services Selected"), tr("You need to select a service before pressing the disconnect button.") ); return; } // Send the disconnect message to the service. TableWidget only allows single selection so list can only have 0 or 1 elments QDBusInterface* iface_serv = NULL; if (qtw == ui.tableWidget_wifi) iface_serv = new QDBusInterface(DBUS_CON_SERVICE, wifi_list.at(list.at(0)->row()).objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); else if (qtw == ui.tableWidget_vpn) iface_serv = new QDBusInterface(DBUS_CON_SERVICE, vpn_list.at(list.at(0)->row()).objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); else return; // this line really not needed iface_serv->call(QDBus::AutoDetect, "Disconnect"); iface_serv->deleteLater(); return; } // // Slot to remove (unset the Favorite property, clear passphrase if one exists) of a Wifi service // Called when ui.pushButton_remove is pressed void ControlBox::removePressed() { // if no row selected return QList list; list.clear(); list = ui.tableWidget_wifi->selectedItems(); if (list.isEmpty() ) { QMessageBox::information(this, tr("No Services Selected"), tr("You need to select a Wifi service before pressing the remove button.") ); return; } // send the Remove message to the service QDBusInterface* iface_serv = new QDBusInterface(DBUS_CON_SERVICE, wifi_list.at(list.at(0)->row()).objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); iface_serv->call(QDBus::AutoDetect, "Remove"); iface_serv->deleteLater(); return; } // dbs slots are slots to receive DBus Signals // // Slot called whenever DBUS issues a PropertyChanged signal void ControlBox::dbsPropertyChanged(QString prop, QDBusVariant dbvalue) { // save current state and update propertiesMap QString oldstate = properties_map.value(prop).toString(); properties_map.insert(prop, dbvalue.variant() ); // refresh display widgets updateDisplayWidgets(); // offlinemode property if (prop == "OfflineMode") { notifyclient->init(); if (dbvalue.variant().toBool()) { notifyclient->setSummary(tr("Offline Mode Engaged")); notifyclient->setIcon(iconman->getIconName("offline_mode_engaged") ); } else { notifyclient->setSummary(tr("Offline Mode Disabled")); notifyclient->setIcon(iconman->getIconName("offline_mode_disengaged") ); } this->sendNotifications(); } // if contains offlinemode if (prop =="State") { // local variables QString type; QString name; QString state = dbvalue.variant().toString(); QString iconpath; // if there is at least 1 service if (services_list.count() > 0 ) { QMap map = services_list.at(0).objmap; type = services_list.at(0).objmap.value("Type").toString(); name = services_list.at(0).objmap.value("Name").toString(); // notification text and icons if (type == "wifi") iconpath = iconman->getIconName("connection_wireless"); else iconpath = iconman->getIconName("connection_wired"); notifyclient->init(); notifyclient->setSummary(tr("%1 (%2) Network").arg(type).arg(name) ); notifyclient->setBody(tr("Connection: %1").arg(state) ); notifyclient->setIcon(iconpath); this->sendNotifications(); // execute external program if specified if (! ui.lineEdit_afterconnect->text().isEmpty() ) { if( (state == "ready" || state == "online") && (oldstate != "ready" && oldstate != "online") ) { QString text = ui.lineEdit_afterconnect->text(); text = text.simplified(); QStringList args = text.split(' '); QString cmd = args.first(); args.removeFirst(); QProcess* proc = new QProcess(this); proc->startDetached(cmd, args); } // if online or ready and not online before } // if lineedit not empty } // if services count > 0 // no services listed else { notifyclient->init(); notifyclient->setSummary(tr("Network Services:") ); notifyclient->setBody(tr("No network services available") ); notifyclient->setIcon(iconman->getIconName("connection_not_ready") ); this->sendNotifications(); } // else no services listed } // if state change return; } // // Slot called whenever DBUS issues a ServicesChanged signal. When a // Scan method is called on a technology the results of that scan are // signaled through this slot. This is also called when the sort order // of the services list changes. It will not be called when a property // of a service object changes. void ControlBox::dbsServicesChanged(QMap vmap, QList removed, QDBusMessage msg) { // Set the update flag (for a manager rescan) bool b_needupdate = false; // Demarshall the raw QDBusMessage instead of vmap as it is easier. if (! vmap.isEmpty() ) { QList revised_list; if (! getArray(revised_list, msg)) return; // if revised_list is not the same size as the existing services_list // then we definetely need an update if (revised_list.count() != services_list.count() ) b_needupdate = true; // merge the existing services_list into the revised_list // first find the original element that matches the revised for (int i = 0; i < revised_list.size(); ++i) { arrayElement revised_element = revised_list.at(i); arrayElement original_element = {QDBusObjectPath(), QMap()}; for (int j = 0; j < services_list.size(); ++j) { if (revised_element.objpath == services_list.at(j).objpath) { original_element = services_list.at(j); if (i != j) b_needupdate = true; break; } // if } // j for // merge the new elementArray into the existing if (! original_element.objpath.path().isEmpty()) { QMapIterator itr(revised_element.objmap); while (itr.hasNext()) { itr.next(); b_needupdate = true; original_element.objmap.insert(itr.key(), itr.value() ); } // while // now insert the element into the revised list revised_list.replace(i, original_element); } // if original element is not empty } // i for // now copy the revised list to services_list services_list.clear(); services_list = revised_list; } // vmap not empty // process removed services if (! removed.isEmpty() ) { b_needupdate = true; for (int i = 0; i < services_list.count(); ++i) { if (removed.contains(services_list.at(i).objpath) ) services_list.removeAt(i); } // for } // if we needed to remove something // clear the counters (if selected) and update the widgets if (b_needupdate) { clearCounters(); managerRescan(CMST::Manager_Services); // used to connect service object signals to dbsServicePropertyChanged() slot } updateDisplayWidgets(); return; } // // Slot called whenever DBUS issues a Peerschanged signal. See note above about // scan results being signaled here. void ControlBox::dbsPeersChanged(QMap vmap, QList removed, QDBusMessage msg) { // Set the update flag bool b_needupdate = false; // Process changed peers. Demarshall the raw QDBusMessage instead of vmap as it is easier. if (! vmap.isEmpty() ) { QList revised_list; if (! getArray(revised_list, msg)) return; // if revised_list is not the same size as the existing peer_list // then we definetely need an update if (revised_list.count() != peer_list.count() ) b_needupdate = true; // merge the existing peers_list into the revised_list // first find the original element that matches the revised for (int i = 0; i < revised_list.size(); ++i) { arrayElement revised_element = revised_list.at(i); arrayElement original_element = {QDBusObjectPath(), QMap()}; for (int j = 0; j < peer_list.size(); ++j) { if (revised_element.objpath == peer_list.at(j).objpath) { original_element = peer_list.at(j); break; } // if } // j for // merge the new elementArray into the existing if (! original_element.objpath.path().isEmpty()) { QMapIterator itr(revised_element.objmap); while (itr.hasNext()) { itr.next(); b_needupdate = true; original_element.objmap.insert(itr.key(), itr.value() ); } // while // now insert the element into the revised list revised_list.replace(i, original_element); } // if original element exists } // i for // now copy the revised list to peer_list peer_list.clear(); peer_list = revised_list; } // vmap not empty // process removed peers if (! removed.isEmpty() ) { for (int i = 0; i < peer_list.count(); ++i) { if (removed.contains(peer_list.at(i).objpath) ) peer_list.removeAt(i); } // for } // if we needed to remove something // update the widgets if (b_needupdate) updateDisplayWidgets(); return; } // // Slot called whenever DBUS issues a TechonlogyAdded signal // There must be an internal counter for technologies, first time a // technology is changed we get a signal even if we've already run // getTechnologies. After that first time we never get this signal. // Use this this to catch real additions, which we defined as something // we don't already have from getTechnologies. void ControlBox::dbsTechnologyAdded(QDBusObjectPath path, QVariantMap properties) { // iterate over the properties map and replace connman text with translated text QMapIterator itr(properties); while (itr.hasNext()) { itr.next(); properties.insert(itr.key(), itr.value() ); } // map iterator // construct an arrayElement arrayElement ae = {path, properties}; bool newelem = true; // first see if the element exists, if so replace it for (int i = 0; i < technologies_list.count(); ++i) { if (path == technologies_list.at(i).objpath) { technologies_list.replace(i, ae); newelem = false; break; } // if } // for // if it is a new element add it if (newelem) { technologies_list.append(ae); } updateDisplayWidgets(); return; } // // Slot called whenever DBUS issues a TechonlogyAdded signal void ControlBox::dbsTechnologyRemoved(QDBusObjectPath removed) { for (int i = 0; i < technologies_list.count(); ++i) { if ( removed == technologies_list.at(i).objpath ) { technologies_list.removeAt(i); break; } // if } // for updateDisplayWidgets(); return; } // // Slots called from objects. The previous slots were called from Manager // // Slot called whenever a service object issues a PropertyChanged signal on DBUS void ControlBox::dbsServicePropertyChanged(QString property, QDBusVariant dbvalue, QDBusMessage msg) { QString s_path = msg.path(); QVariant value = dbvalue.variant(); QString s_state; // replace the old values with the changed ones. for (int i = 0; i < services_list.count(); ++i) { if (s_path == services_list.at(i).objpath.path() ) { QMap map = services_list.at(i).objmap; map.remove(property); map.insert(property, value ); arrayElement ae = {services_list.at(i).objpath, map}; services_list.replace(i, ae); s_state = map.value("State").toString(); break; } // if } // for // process errrors - errors only valid when service is in the failure state if (property =="Error" && s_state == "failure") { notifyclient->init(); notifyclient->setSummary(QString(tr("Service Error: %1")).arg(value.toString()) ); notifyclient->setBody(QString(tr("Object Path: %1")).arg(s_path) ); notifyclient->setIcon(iconman->getIconName("state_error") ); notifyclient->setUrgency(Nc::UrgencyCritical); this->sendNotifications(); } // if state property changed sync the online data members if (property == "State") { if (value.toString() == "online") { onlineobjectpath = s_path; } // else if (s_path == onlineobjectpath) { onlineobjectpath.clear(); } // else if object went offline // Send notification if vpn changed for (int i = 0; i < vpn_list.count(); ++i) { if (s_path == vpn_list.at(i).objpath.path() ) { notifyclient->init(); if (value.toString() == "ready") { notifyclient->setSummary(QString(tr("VPN Engaged")) ); notifyclient->setIcon(iconman->getIconName("connection_vpn") ); } else { notifyclient->setSummary(QString(tr("VPN Disengaged")) ); notifyclient->setIcon(iconman->getIconName("onnection_not_ready") ); } notifyclient->setBody(QString(tr("Object Path: %1")).arg(s_path) ); notifyclient->setUrgency(Nc::UrgencyNormal); this->sendNotifications(); break; } // if } // for } // if property contains State // update the widgets updateDisplayWidgets(); return; } // // Slot called whenever a technology object issues a PropertyChanged signal on DBUS void ControlBox::dbsTechnologyPropertyChanged(QString name, QDBusVariant dbvalue, QDBusMessage msg) { QString s_path = msg.path(); // replace the old values with the changed ones. for (int i = 0; i < technologies_list.count(); ++i) { if (s_path == technologies_list.at(i).objpath.path() ) { QMap map = technologies_list.at(i).objmap; map.remove(name); map.insert(name, dbvalue.variant() ); arrayElement ae = {technologies_list.at(i).objpath, map}; technologies_list.replace(i, ae); break; } // if } // for updateDisplayWidgets(); return; } // Slot to rescan all WiFi technologies. Called from the // ui.pushButton_rescan control. // Results signaled by manager.ServicesChanged(), except for peer // services which will be signaled by manager.PeersChanged() void ControlBox::scanWiFi() { // Make sure we got the technologies_list before we try to work with it. if ( (q8_errors & CMST::Err_Technologies) != 0x00 ) return; // Run through each technology and do a scan for any wifi for (int row = 0; row < technologies_list.size(); ++row) { if (technologies_list.at(row).objmap.value("Type").toString() == "wifi") { if (technologies_list.at(row).objmap.value("Powered").toBool() ) { ui.pushButton_rescan->setDisabled(true); ui.tableWidget_services->setCurrentIndex(QModelIndex()); // first cell becomes selected once pushbutton is disabled qApp->processEvents(); // needed to promply disable the button QDBusInterface* iface_tech = new QDBusInterface(DBUS_CON_SERVICE, technologies_list.at(row).objpath.path(), "net.connman.Technology", QDBusConnection::systemBus(), this); iface_tech->setTimeout( 8 * 1000); // full 25 second timeout is a bit much when there is a problem QDBusMessage reply = iface_tech->call(QDBus::AutoDetect, "Scan"); if (reply.type() != QDBusMessage::InvalidMessage) ui.pushButton_rescan->setEnabled(true); if (reply.type() != QDBusMessage::ReplyMessage) { QMessageBox::warning(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Warning"), tr("
We received a DBUS reply message indicating an error while trying to scan technologies.
" "

Error Name: %1

Error Message: %2").arg(reply.errorName()).arg(TranslateStrings::cmtr(reply.errorMessage())) ); } // if reply is something other than a normal reply message iface_tech->deleteLater(); } // if the wifi was powered } // if the list item is wifi } // for return; } // // Slot to globally turn power off to all network adapters // Called when ui.checkBox_devicesoff is clicked void ControlBox::toggleOfflineMode(bool checked) { if ( ((q8_errors & CMST::Err_No_DBus) | (q8_errors & CMST::Err_Invalid_Con_Iface)) != 0x00 ) return; QList vlist; vlist.clear(); vlist << QVariant("OfflineMode") << QVariant::fromValue(QDBusVariant(checked ? true : false)); con_manager->callWithArgumentList(QDBus::AutoDetect, "SetProperty", vlist); return; } // // Slot to toggle the visibility of the tray icon // Called when ui.checkBox_hideIcon is clicked void ControlBox::toggleTrayIcon(bool b_checked) { if (trayicon != 0 ) { if (b_checked) { trayicon->setVisible(false); ui.pushButton_minimize->setDisabled(true); } // if else { trayicon->setVisible(true); ui.pushButton_minimize->setDisabled(false); } // else } //if return; } // // Slot to toggle the powered state of a technology // Called when our custom idButton in the powered cell in the page 1 technology tableWidget is clicked void ControlBox::togglePowered(QString object_id, bool checkstate) { QDBusInterface* iface_tech = new QDBusInterface(DBUS_CON_SERVICE, object_id, "net.connman.Technology", QDBusConnection::systemBus(), this); QList vlist; vlist.clear(); vlist << QVariant("Powered") << QVariant::fromValue(QDBusVariant(checkstate) ); QDBusMessage reply = iface_tech->callWithArgumentList(QDBus::AutoDetect, "SetProperty", vlist); // cleanup iface_tech->deleteLater(); return; } // // Slot to minimize the input window. QWidget.hide() if the tray icon // is visible, QWidget.showMinmized() if the tray icon is not visible. // Do it this way as otherwise there is no way to get the dialog back if // the tray icon is not shown. // called when actionMinimize is activated void ControlBox::minMaxWindow(QAction* act) { if (act == minimizeAction ) { this->writeSettings(); if (trayicon != 0 ) trayicon->isVisible() ? this->hide() : this->showMinimized(); else this->showMinimized(); } // if minimizeAction else if (act == maximizeAction) { this->showNormal(); } // Called from the systemtrayicon context menu. Actions are // created dynamically and we don't know them up front. Actions here // we want to open the details page and set the combo box to display // information on the service. else { ui.tabWidget->setCurrentIndex(1); ui.comboBox_service->setCurrentIndex(ui.comboBox_service->findText(act->text()) ); this->showNormal(); } return; } // // Called from the systemtrayicon context menu. Actions are // created dynamically and we don't know them up front. Actions here // are to power and unpower technologies void ControlBox::techSubmenuTriggered(QAction* act) { // find the techology associated with the action and toggle its powered state for (int i = 0; i < technologies_list.count(); ++i) { if (technologies_list.at(i).objmap.value("Name").toString() == act->text() ) { togglePowered(technologies_list.at(i).objpath.path(), act->isChecked() ); break; } // if } // for return; } // // Called from the systemtrayicon context menu. Actions are // created dynamically and we don't know them up front. Actions here // we want to open the details page and set the combo box to display // information on the service. void ControlBox::infoSubmenuTriggered(QAction* act) { ui.tabWidget->setCurrentIndex(1); ui.comboBox_service->setCurrentIndex(ui.comboBox_service->findText(act->text()) ); this->showNormal(); return; } // // Called from the systemtrayicon context menu. Actions are // created dynamically and we don't know them up front. Actions here // connect to a wifi service. void ControlBox::wifiSubmenuTriggered(QAction* act) { // find the wifi service associated with the action. for (int i = 0; i < wifi_list.count(); ++i) { if (wifi_list.at(i).objmap.value("Name").toString() == act->text() ) { QDBusInterface* iface_serv = new QDBusInterface(DBUS_CON_SERVICE, wifi_list.at(i).objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); iface_serv->setTimeout(1); QString state = wifi_list.at(i).objmap.value("State").toString(); if (state == "online" || state == "ready") iface_serv->call(QDBus::AutoDetect, "Disconnect"); else iface_serv->call(QDBus::AutoDetect, "Connect"); iface_serv->deleteLater(); break; } // if } // for return; } // // Called from the systemtrayicon context menu. Actions are created // dynamically and we don't know them up front. Actions here connect // to a VPN service. void ControlBox::vpnSubmenuTriggered(QAction* act) { // find the VPN service associated with the action for (int i = 0; i < vpn_list.count(); ++i) { if (vpn_list.at(i).objmap.value("Name").toString() == act->text() ) { QDBusInterface* iface_serv = new QDBusInterface(DBUS_CON_SERVICE, vpn_list.at(i).objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); iface_serv->setTimeout(1); QString state = vpn_list.at(i).objmap.value("State").toString(); if (state == "ready") iface_serv->call(QDBus::AutoDetect, "Disconnect"); else iface_serv->call(QDBus::AutoDetect, "Connect"); iface_serv->deleteLater(); break; } // if } // for return; } // // Slot to get details of the selected service and write it into ui.label_details // Called when the ui.comboBox_services currentIndexChanged() signal is emitted. void ControlBox::getServiceDetails(int index) { // Make sure we were sent a valid index, can happen if the comboBox is // cleared and for whatever reason could not be reseeded with entries. if (index < 0 ) return; // variables bool b_editable = services_list.size() > 0 ? true : false; // Get the QMap associated with the index stored in an arrayElement QMap map = services_list.at(index).objmap; // Some of the QVariants in the map are QMaps themselves, create a data structure for them QMap submap; // Get a QFileInfo associated with the index and display the connection QFileInfo fi = services_list.at(index).objpath.path(); ui.label_details_connection->setText(tr("Connection: %1").arg(fi.baseName()) ); // Start building the string for the left label QString rs = tr("
Service Details:
"); if (map.value("Name").toString().isEmpty() ) b_editable = false; rs.append(tr("Service Type: %1
").arg(TranslateStrings::cmtr(map.value("Type").toString())) ); rs.append(tr("Service State: %1
").arg(TranslateStrings::cmtr(map.value("State").toString())) ); rs.append(tr("Favorite: %1
").arg(map.value("Favorite").toBool() ? tr("Yes", "favorite") : tr("No", "favorite")) ); rs.append(tr("External Configuration File: %1
").arg(map.value("Immutable").toBool() ? tr("Yes", "immutable") : tr("No", "immutable")) ); if (map.value("Immutable").toBool() ) b_editable = false; rs.append(tr("Auto Connect: %1
").arg(map.value("AutoConnect").toBool() ? tr("On", "autoconnect") : tr("No", "autoconnect")) ); rs.append(tr("
IPv4
")); extractMapData(submap, services_list.at(index).objmap.value("IPv4") ); rs.append(tr("IP Address Acquisition: %1
").arg(TranslateStrings::cmtr(submap.value("Method").toString(), "connman ipv4 method string")) ); rs.append(tr("IP Address: %1
").arg(submap.value("Address").toString())); rs.append(tr("IP Netmask: %1
").arg(submap.value("Netmask").toString())); rs.append(tr("IP Gateway: %1
").arg(submap.value("Gateway").toString())); rs.append(tr("
IPv6
")); extractMapData(submap, services_list.at(index).objmap.value("IPv6") ); rs.append(tr("Address Acquisition: %1
").arg(TranslateStrings::cmtr(submap.value("Method").toString(), "connman ipv6 method string")) ); rs.append(tr("IP Address: %1
").arg(submap.value("Address").toString())); QString s_ipv6prefix = submap.value("PrefixLength").toString(); if (s_ipv6prefix.isEmpty() ) rs.append(tr("Prefix Length:
")); else rs.append(tr("Prefix Length: %1
").arg(submap.value("PrefixLength").toUInt())); rs.append(tr("IP Gateway: %1
").arg(submap.value("Gateway").toString())); rs.append(tr("Privacy: %1
").arg(TranslateStrings::cmtr(submap.value("Privacy").toString())) ); rs.append(tr("
Proxy
")); extractMapData(submap, services_list.at(index).objmap.value("Proxy") ); QString s_proxymethod = TranslateStrings::cmtr(submap.value("Method").toString(), "connman proxy string" ); rs.append(tr("Address Acquisition: %1
").arg(s_proxymethod) ); if (s_proxymethod == "auto" ) { rs.append(tr("URL: %1
").arg(submap.value("URL").toString()) ); } else if (s_proxymethod == "manual" ) { rs.append(tr("Servers:
  %1
").arg(submap.value("Servers").toStringList().join("
  ")) ); rs.append(tr("Excludes:
  %1
").arg(submap.value("Excludes").toStringList().join("
  ")) ); } // write the text to the left display label ui.label_details_left->setText(rs); // Start building the string for the right label rs = tr("
Name Servers
"); rs.append(map.value("Nameservers").toStringList().join("
") ); rs.append(tr("

Time Servers
")); rs.append(map.value("Timeservers").toStringList().join("
") ); rs.append(tr("

Search Domains
")); rs.append(map.value("Domains").toStringList().join("
") ); rs.append(tr("

Ethernet
")); extractMapData(submap, services_list.at(index).objmap.value("Ethernet") ); rs.append(tr("Connection Method: %1
").arg(TranslateStrings::cmtr(submap.value("Method").toString(), "connman ethernet connection method")) ); rs.append(tr("Interface: %1
").arg(submap.value("Interface").toString()) ); rs.append(tr("Device Address: %1
").arg(submap.value("Address").toString()) ); rs.append(tr("MTU: %1
").arg(submap.value("MTU").value()) ); rs.append(tr("
Wireless
")); QStringList sl_tr; for (int i = 0; i < map.value("Security").toStringList().size(); ++i) { sl_tr << TranslateStrings::cmtr(map.value("Security").toStringList().at(i) ); } // for rs.append(tr("Security: %1
").arg(sl_tr.join(',')) ); if (! map.value("Strength").toString().isEmpty() ) rs.append(tr("Strength: %1
").arg(map.value("Strength").value()) ); rs.append(tr("Roaming: %1
").arg(map.value("Roaming").toBool() ? tr("Yes", "roaming") : tr("No", "roaming")) ); rs.append(tr("
VPN Provider
")); extractMapData(submap, services_list.at(index).objmap.value("Provider") ); rs.append(tr("Host: %1
").arg(submap.value("Host").toString()) ); rs.append(tr("Domain: %1
").arg(submap.value("Domain").toString()) ); rs.append(tr("Name: %1
").arg(submap.value("Name").toString()) ); rs.append(tr("Type: %1
").arg(submap.value("Type").toString()) ); // write the text to the right display label ui.label_details_right->setText(rs); // enable or disable the editor button if (map.value("Type").toString() == "vpn") b_editable = false; // can't edit vpn connections ui.pushButton_configuration->setEnabled(b_editable); return; } // // Slot to enter whats this mode // Called when the ui.toolButton_whatsthis clicked() signal is emitted void ControlBox::showWhatsThis() { QWhatsThis::enterWhatsThisMode(); } //////////////////////////////////////////// Protected Functions ////////////////////////////////// // // Close events for this dialog. If there is a systemtray and it is visible // then a close event will only minimize (for instance clicking the X in a // window bar. If there is no system tray or there is one but it is not // visible then close the program. void ControlBox::closeEvent(QCloseEvent* e) { if (trayicon != 0 ) { if (trayicon->isVisible() ){ this->hide(); e->ignore(); } // if visible } // if there is a tray icon else e->accept(); return; } // // Key event for this dialog. If escape is pressed, minimize instead of close if // applicable. void ControlBox::keyPressEvent(QKeyEvent* e) { if (e->key() == Qt::Key_Escape && trayicon != 0 && trayicon->isVisible()) { this->hide(); return; } QDialog::keyPressEvent(e); } // // Event filter used to filter out tooltip events if we don't want to see them // in eventFilters return true eats the event, false passes on it. bool ControlBox::eventFilter(QObject* obj, QEvent* evn) { if (evn->type() == QEvent::ToolTip) { // first check if the object is the system tray icon QString objname = obj->metaObject()->className(); if (objname.contains("QSystemTrayIconSys") ) { if (ui.checkBox_enablesystemtraytooltips->isChecked()) return false; else return true; } // if obj is QSystemTrayIconSys // now check all the other interface widgets if (ui.checkBox_enableinterfacetooltips->isChecked()) return false; else return true; } // event is a tooltip return false; } //////////////////////////////////////////// Private Functions //////////////////////////////////// // // Function to rescan connman properties, technologies and services // Int return value is the errors encountered int ControlBox::managerRescan(const int& srv) { if ( ((q8_errors & CMST::Err_No_DBus) | (q8_errors & CMST::Err_Invalid_Con_Iface)) == 0x00 ) { // Reset the getXX errors, always a chance we could read them after // a previous error. Don't actually believe it, but just in case. q8_errors &= ~CMST::Err_Properties; q8_errors &= ~CMST::Err_Technologies; q8_errors &= ~CMST::Err_Services; // Access connman.manager to retrieve the data if (srv & CMST::Manager_Technologies) { if (! getTechnologies() ) { logErrors(CMST::Err_Technologies); } // if else { // connect technology signals to slots for (int i = 0; i < technologies_list.size(); ++i) { QDBusConnection::systemBus().disconnect(DBUS_CON_SERVICE, technologies_list.at(i).objpath.path(), "net.connman.Technology", "PropertyChanged", this, SLOT(dbsTechnologyPropertyChanged(QString, QDBusVariant, QDBusMessage))); QDBusConnection::systemBus().connect(DBUS_CON_SERVICE, technologies_list.at(i).objpath.path(), "net.connman.Technology", "PropertyChanged", this, SLOT(dbsTechnologyPropertyChanged(QString, QDBusVariant, QDBusMessage))); } // for } //else } // if technolgies if (srv & CMST::Manager_Services) { if (! getServices() ) { logErrors(CMST::Err_Services); } // if // connect service signals to slots else { for (int i = 0; i < services_list.size(); ++i) { QDBusConnection::systemBus().disconnect(DBUS_CON_SERVICE, services_list.at(i).objpath.path(), "net.connman.Service", "PropertyChanged", this, SLOT(dbsServicePropertyChanged(QString, QDBusVariant, QDBusMessage))); QDBusConnection::systemBus().connect(DBUS_CON_SERVICE, services_list.at(i).objpath.path(), "net.connman.Service", "PropertyChanged", this, SLOT(dbsServicePropertyChanged(QString, QDBusVariant, QDBusMessage))); } // for } // else } // if services if (srv & CMST::Manager_Properties) { if (! getProperties() ) logErrors(CMST::Err_Properties); } } // if return (q8_errors & CMST::Err_Properties) | (q8_errors & CMST::Err_Technologies) | (q8_errors & CMST::Err_Services); } // // Function to assemble status tab of the dialog void ControlBox::assembleTabStatus() { // Global Properties if ( (q8_errors & CMST::Err_Properties) == 0x00 ) { QString s1 = properties_map.value("State").toString(); if (s1 == "online") { ui.label_state_pix->setPixmap(iconman->getIcon("state_online").pixmap(QSize(16,16)) ); } // if online else { if (s1 == "ready") { ui.label_state_pix->setPixmap(iconman->getIcon("state_ready").pixmap(QSize(16,16)) ); } // if ready else { ui.label_state_pix->setPixmap(iconman->getIcon("state_not_ready").pixmap(QSize(16,16)) ); } // else any other state } // else ready or any other state s1 = TranslateStrings::cmtr(s1); s1.prepend(tr("State: ") ); ui.label_state->setText(s1); bool b1 = properties_map.value("OfflineMode").toBool(); QString s2 = QString(); if (b1) { s2 = tr("Engaged"); ui.label_offlinemode_pix->setPixmap(QPixmap (iconman->getIconName("offline_mode_engaged")) ); } // if offline mode is engaged else { s2 = tr("Disabled"); ui.label_offlinemode_pix->setPixmap(QPixmap (iconman->getIconName("offline_mode_disengaged")) ); } // else offlinemode disabled s2.prepend(tr("Offline Mode ")); ui.label_offlinemode->setText(s2); } // properties if no error // Technologies if ( (q8_errors & CMST::Err_Technologies) == 0x00 ) { QString st = QString(); bool bt; ui.tableWidget_technologies->clearContents(); ui.tableWidget_technologies->setRowCount(technologies_list.size() ); ui.tableWidget_technologies->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Fixed); for (int row = 0; row < technologies_list.size(); ++row) { QTableWidgetItem* qtwi00 = new QTableWidgetItem(); st = technologies_list.at(row).objmap.value("Name").toString(); qtwi00->setText(TranslateStrings::cmtr(st) ); qtwi00->setTextAlignment(Qt::AlignCenter); ui.tableWidget_technologies->setItem(row, 0, qtwi00) ; QTableWidgetItem* qtwi01 = new QTableWidgetItem(); st = technologies_list.at(row).objmap.value("Type").toString(); qtwi01->setText(TranslateStrings::cmtr(st) ); qtwi01->setTextAlignment(Qt::AlignCenter); ui.tableWidget_technologies->setItem(row, 1, qtwi01); bt = technologies_list.at(row).objmap.value("Powered").toBool(); idButton* qpb02 = new idButton(this, technologies_list.at(row).objpath); qpb02->setFixedSize( ui.tableWidget_technologies->horizontalHeader()->sectionSize(2), ui.tableWidget_technologies->verticalHeader()->sectionSize(0) ); connect (qpb02, SIGNAL(clickedID(QString, bool)), this, SLOT(togglePowered(QString, bool))); QString padding = " "; if (bt ) { qpb02->setText(tr("%1On%1%1", "powered").arg(padding)); qpb02->setIcon(QPixmap(":/icons/images/interface/golfball_green.png")); qpb02->setChecked(true); } else { qpb02->setText(tr("%1Off%1%1", "powered").arg(padding)); qpb02->setIcon(QPixmap(":/icons/images/interface/golfball_red.png")); qpb02->setChecked(false); } ui.tableWidget_technologies->setCellWidget(row, 2, qpb02); QTableWidgetItem* qtwi03 = new QTableWidgetItem(); bt = technologies_list.at(row).objmap.value("Connected").toBool(); qtwi03->setText( bt ? tr("Yes", "connected") : tr("No", "connected") ); qtwi03->setTextAlignment(Qt::AlignCenter); ui.tableWidget_technologies->setItem(row, 3, qtwi03); QTableWidgetItem* qtwi04 = new QTableWidgetItem(); bt = technologies_list.at(row).objmap.value("Tethered").toBool(); qtwi04->setText( bt ? tr("Yes", "tethered") : tr("No", "tethered") ); qtwi04->setTextAlignment(Qt::AlignCenter); ui.tableWidget_technologies->setItem(row, 4, qtwi04); } // technologies for loop } // technologies if no error // Services if ( (q8_errors & CMST::Err_Services) == 0x00 ) { QString ss = QString(); ui.tableWidget_services->clearContents(); ui.tableWidget_services->setRowCount(services_list.size() ); for (int row = 0; row < services_list.size(); ++row) { QTableWidgetItem* qtwi00 = new QTableWidgetItem(); ss = services_list.at(row).objmap.value("Name").toString(); qtwi00->setText(TranslateStrings::cmtr(ss) ); qtwi00->setTextAlignment(Qt::AlignCenter); ui.tableWidget_services->setItem(row, 0, qtwi00); QTableWidgetItem* qtwi01 = new QTableWidgetItem(); ss = services_list.at(row).objmap.value("State").toString(); qtwi01->setText(TranslateStrings::cmtr(ss) ); qtwi01->setTextAlignment(Qt::AlignCenter); ui.tableWidget_services->setItem(row, 1, qtwi01); QTableWidgetItem* qtwi02 = new QTableWidgetItem(); QFileInfo fi = services_list.at(row).objpath.path(); qtwi02->setText(fi.baseName() ); qtwi02->setTextAlignment(Qt::AlignVCenter|Qt::AlignLeft); ui.tableWidget_services->setItem(row, 2, qtwi02); if (ui.checkBox_hidecnxn->isChecked() ) { ui.tableWidget_services->hideColumn(2); } else { ui.tableWidget_services->showColumn(2); ui.tableWidget_services->horizontalHeader()->resizeSection(1, ui.tableWidget_services->horizontalHeader()->defaultSectionSize()); } } // services for loop // resize the services column 0 to contents ui.tableWidget_services->resizeColumnToContents(0); } // services if no error return; } // // Function to assemble details tab of the dialog. Only fill in the // ui.comboBox_service widget. The detail portion will be filled in // by the getServiceDetails() slot whenever the comboBox index changes. void ControlBox::assembleTabDetails() { // initilize the page2 display widgets ui.comboBox_service->clear(); ui.label_details_left->clear(); ui.label_details_right->clear(); // services details if ( (q8_errors & CMST::Err_Services) == 0x00 ) { // populate the combobox for (int row = 0; row < services_list.size(); ++row) { QString ss = services_list.at(row).objmap.value("Name").toString(); ui.comboBox_service->addItem(TranslateStrings::cmtr(ss) ); } // services for loop ui.comboBox_service->setCurrentIndex(0); } // services if no error return; } // // Function to assemble the wireless tab of the dialog. void ControlBox::assembleTabWireless() { // initilize the table ui.tableWidget_wifi->clearContents(); ui.tableWidget_wifi->setRowCount(0); int rowcount = 0; // Make sure we got the services_list before we try to work with it. if ( (q8_errors & CMST::Err_Services) != 0x00 ) return; // Run through the technologies again, this time only look for wifi if ( (q8_errors & CMST::Err_Technologies) == 0x00 ) { int i_wifidevices= 0; int i_wifipowered = 0; for (int row = 0; row < technologies_list.size(); ++row) { if (technologies_list.at(row).objmap.value("Type").toString() == "wifi" ) { ++i_wifidevices; if (technologies_list.at(row).objmap.value("Powered").toBool() ) ++i_wifipowered; } // if census } // for loop ui.label_wifi_state->setText(tr(" WiFi Technologies:
%1 Found, %2 Powered").arg(i_wifidevices).arg(i_wifipowered) ); } // technologis if no errors // Run through each service_list looking for wifi services wifi_list.clear(); // set the stylesheet for signalbars QFile f0(":/stylesheets/stylesheets/signal_bar.qss"); QString qss; if (f0.open(QIODevice::ReadOnly | QIODevice::Text)) { qss = QString(f0.readAll()); if (QColor(ui.lineEdit_colorize->text()).isValid() ) { qss = qss.left(qss.lastIndexOf('}') ); qss.append(QString("background-color: %1;").arg(ui.lineEdit_colorize->text()) ); qss.append('}'); } f0.close(); } for (int row = 0; row < services_list.size(); ++row) { QMap map = services_list.at(row).objmap; if (map.value("Type").toString() == "wifi") { wifi_list.append(services_list.at(row)); ui.tableWidget_wifi->setRowCount(rowcount + 1); QTableWidgetItem* qtwi00 = new QTableWidgetItem(); qtwi00->setText(map.value("Name").toString() ); qtwi00->setTextAlignment(Qt::AlignCenter); ui.tableWidget_wifi->setItem(rowcount, 0, qtwi00); QLabel* ql01 = new QLabel(ui.tableWidget_wifi); if (map.value("Favorite").toBool() ) { ql01->setPixmap(iconman->getIcon("favorite").pixmap(QSize(16,16)) ); } ql01->setAlignment(Qt::AlignCenter); ui.tableWidget_wifi->setCellWidget(rowcount, 1, ql01); QLabel* ql02 = new QLabel(ui.tableWidget_wifi); if (map.value("State").toString() == "online") { ql02->setPixmap(iconman->getIcon("state_online").pixmap(QSize(16,16)) ); } // if online else { if (map.value("State").toString() == "ready") { ql02->setPixmap(iconman->getIcon("state_ready").pixmap(QSize(16,16)) ); } // if ready else { ql02->setPixmap(iconman->getIcon("state_not_ready").pixmap(QSize(16,16)) ); } // else any other state } // else ready or any other state ql02->setAlignment(Qt::AlignCenter); ql02->setToolTip(TranslateStrings::cmtr(map.value("State").toString()) ); ui.tableWidget_wifi->setCellWidget(rowcount, 2, ql02); QTableWidgetItem* qtwi03 = new QTableWidgetItem(); QStringList sl_tr; for (int i = 0; i < map.value("Security").toStringList().size(); ++i) { sl_tr << TranslateStrings::cmtr(map.value("Security").toStringList().at(i) ); } // for qtwi03->setText(sl_tr.join(',') ); qtwi03->setTextAlignment(Qt::AlignCenter); ui.tableWidget_wifi->setItem(rowcount, 3, qtwi03); QProgressBar* pb04 = new QProgressBar(ui.tableWidget_wifi); pb04->setMinimum(0); pb04->setMaximum(100); pb04->setOrientation( Qt::Horizontal); pb04->setStyleSheet(qss); pb04->setValue(map.value("Strength").value() ); ui.tableWidget_wifi->setCellWidget(rowcount, 4, pb04); ++rowcount; } // if wifi cnxn } // services for loop // resize the services column 0 to 4 to contents ui.tableWidget_wifi->resizeColumnToContents(0); ui.tableWidget_wifi->resizeColumnToContents(1); ui.tableWidget_wifi->resizeColumnToContents(2); ui.tableWidget_wifi->resizeColumnToContents(3); // enable the control buttons if there is at least on line in the table bool b_enable = false; if ( wifi_list.count() > 0 ) b_enable = true; ui.pushButton_connect->setEnabled(b_enable); ui.pushButton_disconnect->setEnabled(b_enable); ui.pushButton_remove->setEnabled(b_enable); return; } // // FUnction to assemble the VPN tab of the dialog void ControlBox::assembleTabVPN() { // initilize the table ui.tableWidget_vpn->clearContents(); ui.tableWidget_vpn->setRowCount(0); int rowcount = 0; // Make sure we got the services_list before we try to work with it. if ( (q8_errors & CMST::Err_Services) != 0x00 ) return; // Run through each service_list looking for wifi services vpn_list.clear(); for (int row = 0; row < services_list.size(); ++row) { QMap map = services_list.at(row).objmap; if (map.value("Type").toString() == "vpn") { vpn_list.append(services_list.at(row)); ui.tableWidget_vpn->setRowCount(rowcount + 1); QMap providermap; extractMapData(providermap, services_list.at(row).objmap.value("Provider") ); QTableWidgetItem* qtwi00 = new QTableWidgetItem(); qtwi00->setText(map.value("Name").toString() ); qtwi00->setTextAlignment(Qt::AlignCenter); ui.tableWidget_vpn->setItem(rowcount, 0, qtwi00); QLabel* ql01 = new QLabel(ui.tableWidget_vpn); ql01->setText(TranslateStrings::cmtr(providermap.value("Type").toString()) ); ql01->setAlignment(Qt::AlignCenter); ui.tableWidget_vpn->setCellWidget(rowcount, 1, ql01); if (map.value("State").toString() == "association") { QProgressBar* pb02 = new QProgressBar(ui.tableWidget_vpn); pb02->setMinimum(0); pb02->setMaximum(0); pb02->setOrientation( Qt::Horizontal); pb02->setFormat("Connecting"); // set the stylesheet on pb02 QFile f0(":/stylesheets/stylesheets/vpn_connecting.qss"); if (f0.open(QIODevice::ReadOnly | QIODevice::Text)) { QString qss = QString(f0.readAll()); if (QColor(ui.lineEdit_colorize->text()).isValid() ) { qss = qss.left(qss.lastIndexOf('}') ); qss.append(QString("background-color: %1;").arg(ui.lineEdit_colorize->text()) ); qss.append('}'); } f0.close(); pb02->setStyleSheet(qss); } ui.tableWidget_vpn->setCellWidget(rowcount, 2, pb02); } // if association else { QLabel* ql02 = new QLabel(ui.tableWidget_vpn); if (map.value("State").toString() == "ready") { ql02->setPixmap(iconman->getIcon("state_vpn_connected").pixmap(QSize(16,16)) ); } // if ready else { ql02->setPixmap(iconman->getIcon("state_not_ready").pixmap(QSize(16,16)) ); } // else any other state ql02->setAlignment(Qt::AlignCenter); ql02->setToolTip(TranslateStrings::cmtr(map.value("State").toString()) ); ui.tableWidget_vpn->setCellWidget(rowcount, 2, ql02); } // else not association QLabel* ql03 = new QLabel(ui.tableWidget_vpn); ql03->setText(providermap.value("Host").toString() ); ql03->setAlignment(Qt::AlignCenter); ui.tableWidget_vpn->setCellWidget(rowcount, 3, ql03); QLabel* ql04 = new QLabel(ui.tableWidget_vpn); ql04->setText(providermap.value("Domain").toString() ); ql04->setAlignment(Qt::AlignCenter); ui.tableWidget_vpn->setCellWidget(rowcount, 4, ql04); ++rowcount; } // if vpn cnxn } // services for loop // resize the services column 0 to 3 to contents ui.tableWidget_vpn->resizeColumnToContents(0); ui.tableWidget_vpn->resizeColumnToContents(1); ui.tableWidget_vpn->resizeColumnToContents(2); ui.tableWidget_vpn->resizeColumnToContents(3); // enable the control buttons if there is at least on line in the table bool b_enable = false; if ( vpn_list.count() > 0 ) b_enable = true; ui.pushButton_vpn_connect->setEnabled(b_enable); ui.pushButton_vpn_disconnect->setEnabled(b_enable); return; } // // Function to assemble the counters tab of the dialog. void ControlBox::assembleTabCounters() { // Text for the counter settings label ui.label_counter_settings->setText(tr("Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time.") \ .arg(counter_accuracy) \ .arg(counter_period) ); return; } // // Function to assemble the tray icon tooltip text and picture. Called // mainly from updateDisplayWidgets(), also from createSystemTrayIcon() void ControlBox::assembleTrayIcon() { QString stt = QString(); int readycount = 0; QIcon prelimicon; if ( (q8_errors & CMST::Err_Properties & CMST::Err_Services) == 0x00 ) { // count how many services are in the ready state for (int i = 0; i < services_list.count(); ++i) { if (services_list.at(i).objmap.value("State").toString() == "ready") ++readycount; } // readycount for loop if ((properties_map.value("State").toString() == "online") || (properties_map.value("State").toString() == "ready" && readycount == 1) ) { if ( (q8_errors & CMST::Err_Services) == 0x00 ) { QMap submap; if (services_list.at(0).objmap.value("Type").toString() == "ethernet") { extractMapData(submap, services_list.at(0).objmap.value("Ethernet") ); stt.prepend(tr("Ethernet Connection
","icon_tool_tip")); stt.append(tr("Service: %1
").arg(services_list.at(0).objmap.value("Name").toString()) ); stt.append(tr("Interface: %1").arg(TranslateStrings::cmtr(submap.value("Interface").toString())) ); prelimicon = iconman->getIcon("connection_wired"); } // if wired connection else if (services_list.at(0).objmap.value("Type").toString() == "wifi") { stt.prepend(tr("WiFi Connection
","icon_tool_tip")); extractMapData(submap, services_list.at(0).objmap.value("Ethernet") ); stt.append(tr("SSID: %1
").arg(TranslateStrings::cmtr(services_list.at(0).objmap.value("Name").toString())) ); QStringList sl_tr; for (int i = 0; i < services_list.at(0).objmap.value("Security").toStringList().size(); ++i) { sl_tr << TranslateStrings::cmtr(services_list.at(0).objmap.value("Security").toStringList().at(i) ); } // for stt.append(tr("Security: %1
").arg(sl_tr.join(',')) ); stt.append(tr("Strength: %1%
").arg(services_list.at(0).objmap.value("Strength").value()) ); stt.append(tr("Interface: %1").arg(TranslateStrings::cmtr(submap.value("Interface").toString())) ); quint8 str = services_list.at(0).objmap.value("Strength").value(); if (str > 80 ) prelimicon = iconman->getIcon("connection_wifi_100"); else if (str > 60 ) prelimicon = iconman->getIcon("connection_wifi_075"); else if (str > 40 ) prelimicon = iconman->getIcon("connection_wifi_050"); else if (str > 20 ) prelimicon = iconman->getIcon("connection_wifi_025"); else prelimicon = iconman->getIcon("connection_wifi_000"); } // else if wifi connection else if (services_list.at(0).objmap.value("Type").toString() == "vpn") { extractMapData(submap, services_list.at(0).objmap.value("Provider") ); stt.prepend(tr("VPN Connection
","icon_tool_tip")); stt.append(tr("Type: %1
").arg(TranslateStrings::cmtr(submap.value("Type").toString())) ); stt.append(tr("Service: %1
").arg(services_list.at(0).objmap.value("Name").toString()) ); stt.append(tr("Host: %1
").arg(TranslateStrings::cmtr(submap.value("Host").toString())) ); prelimicon = iconman->getIcon("connection_vpn"); } // else if vpn connection } // services if no error } // if the state is online // else if state is ready else if (properties_map.value("State").toString() == "ready") { prelimicon = iconman->getIcon("connection_ready"); stt.append(tr("Connection is in the Ready State.", "icon_tool_tip")); } // else if if ready // else if state is failure else if (properties_map.value("State").toString() == "failure") { // try to reconnect if service is wifi and Favorite and if reconnect is specified if (ui.checkBox_retryfailed->isChecked() ) { if (services_list.at(0).objmap.value("Type").toString() =="wifi" && services_list.at(0).objmap.value("Favorite").toBool() ) { QDBusInterface* iface_serv = new QDBusInterface(DBUS_CON_SERVICE, services_list.at(0).objpath.path(), "net.connman.Service", QDBusConnection::systemBus(), this); QDBusMessage reply = iface_serv->call(QDBus::AutoDetect, "Connect"); iface_serv->deleteLater(); stt.append(tr("Connection is in the Failure State, attempting to reestablish the connection", "icon_tool_tip") ); } // if wifi and favorite } // if retry checked prelimicon = iconman->getIcon("state_online"); stt.append(tr("Connection is in the Failure State.", "icon_tool_tip")); } // else if failure state // else anything else, states in this case should be "idle", "association", "configuration", or "disconnect" else { prelimicon = iconman->getIcon("connection_not_ready"); stt.append(tr("Not Connected", "icon_tool_tip")); } // else any other connection sate } // properties if no error // could not get any properties else { prelimicon = iconman->getIcon("connection_error"); stt.append(tr("Error retrieving properties via Dbus")); stt.append(tr("Connection status is unknown")); } // Set the tray icon. If the trayiconbackground color is valid and // there is a valid alpha channel convert the alpha to the background // color to get our fake transparency. Fake transparency can be set as a command // line option so trayiconbackground is set up in the constructor. // Otherwise just convert the image to ARGB32 which seems to be required // for the icons to display in Plasma5. // First convert from a QIcon through QPixmap to QImage QPixmap pxm = prelimicon.pixmap(prelimicon.actualSize(QSize(22,22)) ); QImage src = pxm.toImage(); QImage dest = QImage(src.width(), src.height(), QImage::Format_ARGB32); QPainter painter(&dest); if (trayiconbackground.isValid() && src.hasAlphaChannel() ) { painter.setCompositionMode(QPainter::CompositionMode_Source); painter.fillRect(dest.rect(), trayiconbackground); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); } // if img has alpha channel and background color valid else { painter.setCompositionMode(QPainter::CompositionMode_Source); } // else just make an ARGB32 copy painter.drawImage(0, 0, src); prelimicon = QIcon(QPixmap::fromImage(dest)); trayicon->setIcon(prelimicon); // Set the tool tip (shown when mouse hovers over the systemtrayicon) trayicon->setToolTip(stt); // Don't continue if we can't get properties if ( (q8_errors & CMST::Err_Properties & CMST::Err_Technologies & CMST::Err_Services) != 0x00 ) return; // Assemble the submenus for the context menu // tech_submenu. tech_submenu->clear(); for (int i = 0; i < technologies_list.count(); ++i) { QAction* act = tech_submenu->addAction(technologies_list.at(i).objmap.value("Name").toString() ); act->setCheckable(true); act->setChecked(technologies_list.at(i).objmap.value("Powered").toBool() ); QString ttstr = QString(tr("

%1 Properties
").arg(TranslateStrings::cmtr(technologies_list.at(i).objmap.value("Name").toString())) ); ttstr.append(tr("Type: %1").arg(technologies_list.at(i).objmap.value("Type").toString()) ); ttstr.append(tr("
Powered ")); technologies_list.at(i).objmap.value("Powered").toBool() ? ttstr.append(tr("On")) : ttstr.append(tr("Off")); ttstr.append("
"); technologies_list.at(i).objmap.value("Connected").toBool() ? ttstr.append(tr("Connected")) : ttstr.append(tr("Not Connected")); ttstr.append(tr("
Tethering ")); technologies_list.at(i).objmap.value("Tethering").toBool() ? ttstr.append(tr("Enabled")) : ttstr.append(tr("Disabled")); act->setToolTip(ttstr); } // i for // info_submenu info_submenu->clear(); for (int j = 0; j < services_list.count(); ++j) { QAction* act = info_submenu->addAction(TranslateStrings::cmtr(services_list.at(j).objmap.value("Name").toString()) ); if (services_list.at(j).objmap.value("Type").toString() == "ethernet" ) { if (services_list.at(j).objmap.value("State").toString() == "online") act->setIcon(iconman->getIcon("connection_wired")); else if(services_list.at(j).objmap.value("State").toString() == "ready") act->setIcon(iconman->getIcon("connection_ready")); else act->setIcon(iconman->getIcon("connection_not_ready")); } // if wired else if (services_list.at(j).objmap.value("Type").toString() == "wifi" ) { if (services_list.at(j).objmap.value("State").toString() == "online" || (properties_map.value("State").toString() != "online" && (services_list.at(j).objmap.value("State").toString() == "ready" && readycount == 1)) ) { quint8 str = services_list.at(j).objmap.value("Strength").value(); if (str > 80 ) act->setIcon(iconman->getIcon("connection_wifi_100") ); else if (str > 60 ) act->setIcon(iconman->getIcon("connection_wifi_075") ); else if (str > 40 ) act->setIcon(iconman->getIcon("connection_wifi_050") ); else if (str > 20 ) act->setIcon(iconman->getIcon("connection_wifi_025") ); else act->setIcon(iconman->getIcon("connection_wifi_000") ); } // if we want to show a wifi signal symbol else if(services_list.at(j).objmap.value("State").toString() == "ready") act->setIcon(iconman->getIcon("connection_ready")); else act->setIcon(iconman->getIcon("connection_not_ready")); } // else if wifi else if (services_list.at(j).objmap.value("Type").toString() == "vpn" ) { if (services_list.at(j).objmap.value("State").toString() == "ready") act->setIcon(iconman->getIcon("connection_vpn")); else if (services_list.at(j).objmap.value("State").toString() == "association") act->setIcon(iconman->getIcon("connection_vpn_acquiring")); else act->setIcon(iconman->getIcon("connection_not_ready")); } // else if vpn else if (services_list.at(j).objmap.value("State").toString() == "ready") act->setIcon(iconman->getIcon("connection_ready")); else if (services_list.at(j).objmap.value("State").toString() == "failure" ) act->setIcon(iconman->getIcon("connection_failure")); else act->setIcon(iconman->getIcon("connection_not_ready")); } // j for // wifi_submenu. wifi_submenu->clear(); for (int k = 0; k < wifi_list.count(); ++k) { QAction* act = wifi_submenu->addAction(TranslateStrings::cmtr(wifi_list.at(k).objmap.value("Name").toString()) ); act->setCheckable(true); QString state = wifi_list.at(k).objmap.value("State").toString(); if (state == "online" || state == "ready") act->setChecked(true); QString ttstr = QString(tr("

%1 Properties
").arg(TranslateStrings::cmtr(wifi_list.at(k).objmap.value("Name").toString())) ); ttstr.append(tr("Connection : %1").arg(TranslateStrings::cmtr(state)) ); ttstr.append("
"); ttstr.append(tr("Signal Strength: %1%").arg(wifi_list.at(k).objmap.value("Strength").toInt()) ); ttstr.append("
"); wifi_list.at(k).objmap.value("Favorite").toBool() ? ttstr.append(tr("Favorite Connection")) : ttstr.append(tr("Never Connected")); ttstr.append(tr("
Security : %1").arg(wifi_list.at(k).objmap.value("Security").toString()) ); if (wifi_list.at(k).objmap.value("Roaming").toBool() ) ttstr.append(tr("
Roaming")); ttstr.append(tr("
Autoconnect is ")); wifi_list.at(k).objmap.value("AutoConnect").toBool() ? ttstr.append(tr("Enabled")) : ttstr.append(tr("Disabled")); act->setToolTip(ttstr); } // k for // vpn_submenu vpn_submenu->clear(); for (int l = 0; l < vpn_list.count(); ++l) { QAction* act = vpn_submenu->addAction(TranslateStrings::cmtr(vpn_list.at(l).objmap.value("Name").toString()) ); act->setCheckable(true); QString state = vpn_list.at(l).objmap.value("State").toString(); if (state == "ready") act->setChecked(true); QString ttstr = QString(tr("

%1
").arg(TranslateStrings::cmtr(vpn_list.at(l).objmap.value("Name").toString())) ); ttstr.append(tr("Connection : %1").arg(TranslateStrings::cmtr(state)) ); act->setToolTip(ttstr); } // l for return; } // Handler for left click on tray icon void ControlBox::iconActivated(QSystemTrayIcon::ActivationReason reason) { //Only handling left click case if(reason == QSystemTrayIcon::Trigger) { //Show the window if it is currently hidden/minimized if(this->isHidden() || this->isMinimized()) { minMaxWindow(maximizeAction); } //Otherwise hide the window else { minMaxWindow(minimizeAction); } } } void ControlBox::enableRunOnStartup(bool enabled) { QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); QString HOME = env.value("HOME"); QString XDG_CONFIG_HOME = env.value("XDG_CONFIG_HOME", QFileInfo(QDir(HOME), ".config").absoluteFilePath()); QFileInfo autostart_dir_info(QDir(XDG_CONFIG_HOME), "autostart"); QFileInfo autostart_file_info(QDir(autostart_dir_info.absoluteFilePath()), "cmst-autostart.desktop"); QFile user_autostart_file(autostart_file_info.absoluteFilePath()); if (enabled) { QCryptographicHash hasher(QCryptographicHash::Sha1); QFile fileToCopy("/usr/share/cmst/autostart/cmst-autostart.desktop"); if (user_autostart_file.exists()) { hasher.reset(); hasher.addData(&fileToCopy); QByteArray orig_file_hash = hasher.result(); hasher.reset(); hasher.addData(&user_autostart_file); QByteArray user_autostart_file_hash = hasher.result(); if (orig_file_hash == user_autostart_file_hash) { return; } if (!user_autostart_file.remove()) { return; } } // Copy the autostart file (create the target directory first if needed) QDir dir = autostart_file_info.dir(); if (! dir.exists() ) dir.mkdir(autostart_file_info.path() ); fileToCopy.copy(autostart_file_info.absoluteFilePath()); } // if enabled else { if (!autostart_file_info.exists()) { return; } user_autostart_file.remove(); } } // Slot to save GUI settings to disk void ControlBox::writeSettings() { settings->beginGroup("MainWindow"); settings->setValue("size", this->size() ); settings->setValue("pos", this->pos() ); settings->setValue("current_page", ui.tabWidget->currentIndex()); settings->endGroup(); settings->beginGroup("CheckBoxes"); settings->setValue("hide_tray_icon", ui.checkBox_hideIcon->isChecked() ); settings->setValue("devices_off", ui.checkBox_devicesoff->isChecked() ); settings->setValue("retain_settings", ui.checkBox_usestartoptions->isChecked() ); settings->setValue("retain_state", ui.checkBox_retainstate->isChecked() ); settings->setValue("services_less", ui.checkBox_hidecnxn->isChecked() ); settings->setValue("enable_interface_tooltips", ui.checkBox_enableinterfacetooltips->isChecked() ); settings->setValue("enable_systemtray_tooltips", ui.checkBox_enablesystemtraytooltips->isChecked() ); settings->setValue("enable_systemtray_notications", ui.checkBox_systemtraynotifications->isChecked() ); settings->setValue("enable_daemon_notifications", ui.checkBox_notifydaemon->isChecked() ); settings->setValue("reset_counters", ui.checkBox_resetcounters->isChecked() ); settings->setValue("advanced", ui.checkBox_advanced->isChecked() ); settings->setValue("retry_failed", ui.checkBox_retryfailed->isChecked() ); settings->setValue("run_on_startup", ui.checkBox_runonstartup->isChecked()); settings->endGroup(); settings->beginGroup("LineEdits"); settings->setValue("colorize_icons", ui.lineEdit_colorize->text() ); settings->endGroup(); settings->beginGroup("StartOptions"); settings->setValue("disable_counters", ui.checkBox_disablecounters->isChecked() ); settings->setValue("disable_tray_icon", ui.checkBox_disabletrayicon->isChecked() ); settings->setValue("use_icon_theme", ui.checkBox_systemicontheme->isChecked() ); settings->setValue("icon_theme", ui.lineEdit_icontheme->text() ); settings->setValue("start_minimized", ui.checkBox_startminimized->isChecked() ); settings->setValue("use_wait_time", ui.checkBox_waittime->isChecked() ); settings->setValue("wait_time", ui.spinBox_waittime->value() ); settings->setValue("use_counter_update_rate", ui.checkBox_counterseconds->isChecked() ); settings->setValue("counter_update_rate", ui.spinBox_counterrate->value() ); settings->setValue("use_fake_transparency", ui.checkBox_faketranparency->isChecked() ); settings->setValue("fake_transparency_color", ui.spinBox_faketransparency->value() ); settings->setValue("desktop_none", ui.radioButton_desktopnone->isChecked() ); settings->setValue("desktop_xfce", ui.radioButton_desktopxfce->isChecked() ); settings->setValue("desktop_mate", ui.radioButton_desktopmate->isChecked() ); settings->endGroup(); settings->beginGroup("ExternalPrograms"); settings->setValue("run_after_connect", ui.lineEdit_afterconnect->text() ); settings->endGroup(); return; } // // Slot to read GUI settings to disk void ControlBox::readSettings() { settings->beginGroup("CheckBoxes"); ui.checkBox_hideIcon->setChecked(settings->value("hide_tray_icon").toBool() ); ui.checkBox_devicesoff->setChecked(settings->value("devices_off").toBool() ); ui.checkBox_usestartoptions->setChecked(settings->value("retain_settings").toBool() ); ui.checkBox_retainstate->setChecked(settings->value("retain_state").toBool() ); ui.checkBox_hidecnxn->setChecked(settings->value("services_less").toBool() ); ui.checkBox_enableinterfacetooltips->setChecked(settings->value("enable_interface_tooltips").toBool() ); ui.checkBox_enablesystemtraytooltips->setChecked(settings->value("enable_systemtray_tooltips").toBool() ); ui.checkBox_systemtraynotifications->setChecked(settings->value("enable_systemtray_notications").toBool() ); ui.checkBox_notifydaemon->setChecked(settings->value("enable_daemon_notifications").toBool() ); ui.checkBox_resetcounters->setChecked(settings->value("reset_counters").toBool() ); ui.checkBox_advanced->setChecked(settings->value("advanced").toBool() ); ui.checkBox_retryfailed->setChecked(settings->value("retry_failed").toBool() ); ui.checkBox_runonstartup->setChecked(settings->value("run_on_startup").toBool()); settings->endGroup(); settings->beginGroup("LineEdits"); ui.lineEdit_colorize->setText(settings->value("colorize_icons").toString() ); settings->endGroup(); settings->beginGroup("StartOptions"); ui.checkBox_disablecounters->setChecked(settings->value("disable_counters").toBool() ); ui.checkBox_disabletrayicon->setChecked(settings->value("disable_tray_icon").toBool() ); ui.checkBox_systemicontheme->setChecked(settings->value("use_icon_theme").toBool() ); ui.lineEdit_icontheme->setText(settings->value("icon_theme").toString() ); ui.checkBox_startminimized->setChecked(settings->value("start_minimized").toBool() ); ui.checkBox_waittime->setChecked(settings->value("use_wait_time").toBool() ); ui.spinBox_waittime->setValue(settings->value("wait_time").toInt() ); ui.checkBox_counterseconds->setChecked(settings->value("use_counter_update_rate").toBool() ); ui.spinBox_counterrate->setValue(settings->value("counter_update_rate").toInt() ); ui.checkBox_faketranparency->setChecked(settings->value("use_fake_transparency").toBool() ); ui.spinBox_faketransparency->setValue(settings->value("fake_transparency_color").toInt() ); ui.radioButton_desktopnone->setChecked(settings->value("desktop_none").toBool() ); ui.radioButton_desktopxfce->setChecked(settings->value("desktop_xfce").toBool() ); ui.radioButton_desktopmate->setChecked(settings->value("desktop_mate").toBool() ); settings->endGroup(); settings->beginGroup("ExternalPrograms"); ui.lineEdit_afterconnect->setText(settings->value("run_after_connect").toString() ); settings->endGroup(); return; } // // Slot to create the systemtray icon. Really part of the constructor // and called by a single shot QTimer. void ControlBox::createSystemTrayIcon() { // Search for a tray icon, don't read XDG_CURRENT_DESKTOP for the tray type bool b_dtaware = qApp->desktopSettingsAware(); qApp->setDesktopSettingsAware(false); // We still need to make sure there is a tray available if (QSystemTrayIcon::isSystemTrayAvailable() ) { // Create the systemtrayicon trayicon = new QSystemTrayIcon(this); // Create the outline of the context menu. Submenu contents are defined in the // assembletrayIcon() function. trayiconmenu->clear(); trayiconmenu->setTearOffEnabled(true); trayiconmenu->setToolTipsVisible(true); tech_submenu->setToolTipsVisible(true); info_submenu->setToolTipsVisible(true); wifi_submenu->setToolTipsVisible(true); vpn_submenu->setToolTipsVisible(true); trayiconmenu->addMenu(tech_submenu); trayiconmenu->addMenu(info_submenu); trayiconmenu->addMenu(wifi_submenu); trayiconmenu->addMenu(vpn_submenu); trayiconmenu->addSeparator(); trayiconmenu->addAction(ui.actionRescan); trayiconmenu->addAction(ui.actionOffline_Mode); trayiconmenu->addSeparator(); trayiconmenu->addAction(maximizeAction); trayiconmenu->addAction(minimizeAction); trayiconmenu->addSeparator(); trayiconmenu->addAction(tr("Cancel"), this, SLOT(closeSystemTrayTearOffMenu()) ); trayiconmenu->addAction(exitAction); trayicon->setContextMenu(trayiconmenu); connect(trayicon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); // Assemble the tray icon (set the icon to display) assembleTrayIcon(); // QT5.3 and XFCE don't play nicely. Hammer the XFCE tray up to // maxtries to get a valid icon geometry. // QT5.4 update, may be fixed but leave option in for now if (b_usexfce || b_usemate) { const int maxtries = 125; int i; for (i = 0; i < maxtries; ++i) { trayicon->setVisible(true); //qDebug() << "icon geometry: " << trayicon->geometry(); if ((trayicon->geometry().left() > 0 || trayicon->geometry().top() > 0) && trayicon->geometry().width() > 1) break; trayicon->setVisible(false); qApp->processEvents(); } // hammer loop if (i == maxtries - 1) { qDebug() << QString("Failed to get a valid icon from the systemtray in %1 tries").arg(maxtries); ui.pushButton_minimize->setDisabled(true); trayicon = 0; // reinitialize the pointer } // if we hit the end of the loop } // if use xfce // Sync the visibility to the checkbox ui.checkBox_hideIcon->setEnabled(true); trayicon->setVisible(true); } // if there is a systemtray available // else no systemtray available else { ui.checkBox_hideIcon->setDisabled(true); trayicon = 0; QMessageBox::warning(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Warning"), tr("
Unable to find a systemtray on this machine." "

The program may still be used to manage your connections, but the tray icon will be disabled." "


If you are seeing this message at system start up and you know a system tray exists once the " "system is up, try starting with the -w switch and set a delay as necessary. The exact wait time will vary " "from system to system." ) ); // Even if we want to be minimized we can't there is no place to minimize to. this->showNormal(); } // else // Restore the desktopAware qApp->setDesktopSettingsAware(b_dtaware); // Lastly update the display widgets (since this is actually the last // line of the constructor.) this->updateDisplayWidgets(); return; } // // Function to show notifications (if desired by the user). Called from // the functions we connect dbus signals to, for instance dbsPropertyChanged(), // The notifyclient class is used to store data for display from both // the systemtrayicon and the notification server. void ControlBox::sendNotifications() { // if we want system tray notifications if (ui.checkBox_systemtraynotifications->isChecked() && QSystemTrayIcon::isSystemTrayAvailable() ) { QSystemTrayIcon::MessageIcon sticon = QSystemTrayIcon::NoIcon; if (notifyclient->getUrgency() == Nc::UrgencyCritical) sticon = QSystemTrayIcon::Warning; else sticon = QSystemTrayIcon::Information; if (notifyclient->getBody().isEmpty() ) trayicon->showMessage(TranslateStrings::cmtr("cmst"), notifyclient->getSummary(), sticon); else trayicon->showMessage(TranslateStrings::cmtr("cmst"), QString(notifyclient->getSummary() + "\n" + notifyclient->getBody()), sticon); } // if we want notify daemon notifications if (ui.checkBox_notifydaemon->isChecked() && notifyclient->isValid() ) { notifyclient->sendNotification(); } return; } // // Function to query connman.manager.GetProperties // Return a bool, true on success, false otherwise bool ControlBox::getProperties() { // call connman and GetProperties QDBusMessage reply = con_manager->call("GetProperties"); // call the function to get the map values properties_map.clear(); return getMap(properties_map, reply); } // // Function to query connman.manager.GetTechnologies // Return a bool, true on success, false otherwise bool ControlBox::getTechnologies() { // call connman and GetTechnologies QDBusMessage reply = con_manager->call("GetTechnologies"); // call the function to get the map values technologies_list.clear(); return getArray(technologies_list, reply); } // // Function to query connman.manager.GetServices // Return a bool, true on success, false otherwise bool ControlBox::getServices() { // call connman and GetServices QDBusMessage reply = con_manager->call("GetServices"); // call the function to get the map values services_list.clear(); return getArray(services_list, reply); } // // Function to extract arrayElements from a DBus reply message (that contains an array). // This data type is returned by GetServices and GetTechnologies. // // Return value a bool, true on success, false otherwise // A QList of arrayElements is sent by reference (called r_list here) // and is modified by this function. r_msg is a constant reference // to the DBus reply message. bool ControlBox::getArray(QList& r_list, const QDBusMessage& r_msg ) { // make sure r_msg is a QDBusArgument if ( ! r_msg.arguments().at(0).canConvert() ) return false; // make sure the QDBusArgument holds an array const QDBusArgument &qdb_arg = r_msg.arguments().at(0).value(); if (qdb_arg.currentType() != QDBusArgument::ArrayType ) return false; // iterate over the QDBusArgument pulling array elements out and inserting into // an arrayElement structure. qdb_arg.beginArray(); r_list.clear(); while ( ! qdb_arg.atEnd() ) { // make sure the argument is a structure type if (qdb_arg.currentType() != QDBusArgument::StructureType ) return false; arrayElement ael; qdb_arg.beginStructure(); qdb_arg >> ael.objpath >> ael.objmap; // iterate over the objmap and replace connman text with translated text QMapIterator itr(ael.objmap); while (itr.hasNext()) { itr.next(); ael.objmap.insert(itr.key(), itr.value() ); } // map iterator qdb_arg.endStructure(); r_list.append (ael); } qdb_arg.endArray(); return true; } // Function to extract a QMap from a DBus reply message (that contains a map). // This data type is returned by GetProperties // // Return value a bool, true on success, false otherwise. // The map is sent by reference (called r_map here) and is modified by this function. // r_msg is a constant reference to the DBus reply message. bool ControlBox::getMap(QMap& r_map, const QDBusMessage& r_msg ) { // make sure r_msg is a QDBusArgument if ( ! r_msg.arguments().at(0).canConvert() ) return false; // make sure the QDBusArgument holds a map const QDBusArgument &qdb_arg = r_msg.arguments().at(0).value(); if (qdb_arg.currentType() != QDBusArgument::MapType ) return false; // iterate over the QDBusArgument pulling map keys and values out qdb_arg.beginMap(); r_map.clear(); while ( ! qdb_arg.atEnd() ) { QString key; QVariant value; qdb_arg.beginMapEntry(); qdb_arg >> key >> value; qdb_arg.endMapEntry(); r_map.insert(key, value); } qdb_arg.endMap(); return true; } // // Function to extract the data from a QDBusArgument that contains a map. // Some of the arrayElements can contain a QDBusArgument as the object // instead of a primitive (string, bool, int, etc.). This function // will extract the data from the QDBusArgument and write it into a map. // // Return value a bool, true on success, false otherwise. // The map is sent by reference (called r_map here) and is modified by this function. // r_var is a constant reference to the QDBusArgument. // // This is a static function because we send it to the PropertiesEditor class // as a function argument. bool ControlBox::extractMapData(QMap& r_map, const QVariant& r_var) { // make sure we can convert the QVariant into a QDBusArgument if (! r_var.canConvert() ) return false; const QDBusArgument qdba = r_var.value(); // make sure the QDBusArgument holds a map if (qdba.currentType() != QDBusArgument::MapType ) return false; // iterate over the QDBusArgument pulling map keys and values out r_map.clear(); qdba.beginMap(); while ( ! qdba.atEnd() ) { QString key; QVariant value; qdba.beginMapEntry(); qdba >> key >> value; qdba.endMapEntry(); r_map.insert(key, value); } // while qdba.endMap(); return true; } // // Function to log errors to the system log. Functionallity provided // by syslog.h and friends. void ControlBox::logErrors(const quint8& err) { // store the error in a data element q8_errors |= err; // Log the error in the system log // LOG_PID Include PID with each message // LOG_CONS Write to console if there is a problem writing to system log // LOG_USER User Level Message // LOG_ERR Error condition // LOG_WARNING Warning contition // Defined in resource.h // LOG_NAME Name to display in the log openlog(qPrintable(LOG_NAME), LOG_PID|LOG_CONS, LOG_USER); switch (err) { case CMST::Err_No_DBus: syslog(LOG_ERR, "%s", tr("Could not find a connection to the system bus").toUtf8().constData() ); QMessageBox::critical(this, tr("%1 - Critical Error").arg(TranslateStrings::cmtr("cmst")), tr("Unable to find a connection to the system bus.

%1 will not be able to communicate with connman.").arg(TranslateStrings::cmtr("cmst")) ); break; case CMST::Err_Invalid_Con_Iface: syslog(LOG_ERR, "%s",tr("Could not create an interface to connman on the system bus").toUtf8().constData()); QMessageBox::critical(this, tr("%1 - Critical Error").arg(TranslateStrings::cmtr("cmst")), tr("Unable to create an interface to connman on the system bus.

%1 will not be able to communicate with connman.").arg(TranslateStrings::cmtr("cmst")) ); break; case CMST::Err_Properties: syslog(LOG_ERR, "%s", tr("Error reading or parsing connman.Manager.GetProperties").toUtf8().constData() ); QMessageBox::warning(this, tr("%1 - Warning").arg(TranslateStrings::cmtr("cmst")), tr("There was an error reading or parsing the reply from method connman.Manager.GetProperties.

It is unlikely any portion of %1 will be functional.").arg(TranslateStrings::cmtr("cmst")) ); break; case CMST::Err_Technologies: syslog(LOG_ERR, "%s",tr("Error reading or parsing connman.Manager.GetTechnologies").toUtf8().constData() ); QMessageBox::warning(this, tr("%1 - Warning").arg(TranslateStrings::cmtr("cmst")), tr("There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.

Some portion of %1 may still be functional.").arg(TranslateStrings::cmtr("cmst")) ); break; case CMST::Err_Services: syslog(LOG_ERR, "%s", tr("Error reading or parsing connman.Manager.GetServices").toUtf8().constData() ); QMessageBox::warning(this, tr("%1 - Warning").arg(TranslateStrings::cmtr("cmst")), tr("There was an error reading or parsing the reply from method connman.Manager.GetServices.

Some portion of %1 may still be functional.").arg(TranslateStrings::cmtr("cmst")) ); break; default: break; } closelog(); return; } // // Function to read text contained in a resource file. Input is a const char* to the resource, // Return value is a QString of the text QString ControlBox::readResourceText(const char* textfile) { QString rtnstring = QString(); QFile file(textfile); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&file); while (!in.atEnd()) { rtnstring.append(in.readLine() ); } // while } // if return rtnstring; } // // Function to clear the counters if selected in the ui. Called from the constructor // and from dbsServicesChanged void ControlBox::clearCounters() { if (ui.checkBox_resetcounters->isChecked() && ! onlineobjectpath.isEmpty() ) { QDBusInterface* iface_serv = new QDBusInterface(DBUS_CON_SERVICE, onlineobjectpath, "net.connman.Service", QDBusConnection::systemBus(), this); iface_serv->call(QDBus::AutoDetect, "ResetCounters"); iface_serv->deleteLater(); } return; } // Slot to connect to the notification client. Called from QTimers to give time for the notification server // to start up if this program is started automatically at boot. We make four attempts at finding the // notification server. First is in the constructor of NotifyClient, following we call the connectToServer() // function. void ControlBox::connectNotifyClient() { //initialize the counter static short count = 0; ++count; if (count > 1 ) { // if we have a valid notifyclient return now if (notifyclient->isValid() ) return; // else try to connect again else notifyclient->connectToServer(); } // if count > 1 // setup the notify server label if we were successful in finding and connecting to a server if (notifyclient->isValid() ) { QString name = notifyclient->getServerName().toLower(); name = name.replace(0, 1, name.left(1).toUpper() ); QString vendor = notifyclient->getServerVendor(); vendor = vendor.replace(0, 1, vendor.left(1).toUpper() ); QString lab = tr("%1 version %2 by %3 has been detected on this system.

This server supports desktop Notification Specification version %4") .arg(name) .arg(notifyclient->getServerVersion() ) .arg(vendor) .arg(notifyclient->getServerSpecVersion() ); ui.label_serverstatus->clear(); ui.label_serverstatus->setDisabled(true); ui.groupBox_notifications->setToolTip(lab); } // not successful, try again or abandon if counter is at limit else { if (count < 4) { ui.label_serverstatus->setText(tr("Attempt %1 of 4 looking for notification server.").arg(count)); } // try again else { ui.label_serverstatus->setText(tr("Unable to find or connect to a Notification server.")); ui.checkBox_notifydaemon->setChecked(false); ui.checkBox_notifydaemon->setEnabled(false); } // else last time ui.groupBox_notifications->setToolTip(""); ui.groupBox_notifications->setWhatsThis(""); } // else we don't have a valid client. return; } // The following two functions are somewhat similar. ConfigureSerivce opens a dialog to tweak // defaults set by Connman. All settings are read and written by Connman into files that Connman // creates. // // Provisioning creates a provision file that takes precedence over anything Connman creates. It // is required for certain types of networks, for instance Eduroam. The provisioning file must be // created manually before trying to connect via Connman. Disk reads and writes are handled by // a program (this one) and not by Connman. // // Slot to open a dialog to configure the selected service void ControlBox::configureService() { // Make sure the index is real if (ui.comboBox_service->currentIndex() < 0 ) return; // Create a new properties editor PropertiesEditor* peditor = new PropertiesEditor(this, services_list.at(ui.comboBox_service->currentIndex()), this->extractMapData ); // Set the whatsthis button icon peditor->setWhatsThisIcon(iconman->getIcon("whats_this")); // call then clean up peditor->exec(); peditor->deleteLater(); return; } // // Slot to open the provisioning editor to create a configuration (provisioning) file // Called whenever ui.pushButton_provisioning_editor or ui.pushButton_vpn_editor // is pressed. void ControlBox::provisionService() { if (qobject_cast(sender()) == ui.pushButton_provisioning_editor) { ProvisioningEditor* peditor = new ProvisioningEditor(this); // Set the whatsthis button icon peditor->setWhatsThisIcon(iconman->getIcon("whats_this") ); // call then clean up peditor->exec(); peditor->deleteLater(); } else if (qobject_cast(sender()) == ui.pushButton_vpn_editor) { VPN_Editor* veditor = new VPN_Editor(this); // Set the whatsthis button icon veditor->setWhatsThisIcon(iconman->getIcon("whats_this") ); // call then clean up veditor->exec(); veditor->deleteLater(); } return; } // // Slot called when a connection to the local socket was detected. Means another instance of CMST was started // while this instance was running. void ControlBox::socketConnectionDetected() { this->showNormal(); return; } // // Slot to tidy up the place at close. Called when the QApplication::aboutToQuit() signal is emitted void ControlBox::cleanUp() { // close and delete the socket server socketserver->close(); socketserver->deleteLater(); // write settings this->writeSettings(); // unregister objects if (con_manager->isValid() ) { // agent QDBusMessage reply_a = con_manager->call(QDBus::AutoDetect, "UnregisterAgent", QVariant::fromValue(QDBusObjectPath(AGENT_OBJECT)) ); //qDebug() << reply_a; // counter - only have a signal-slot connection if the counter was able to be registered if (counter->cnxns() > 0) { QDBusMessage reply_c = con_manager->call(QDBus::AutoDetect, "UnregisterCounter", QVariant::fromValue(QDBusObjectPath(CNTR_OBJECT)) ); //qDebug() << reply_c; } // if counters are connected to anything } // if con_manager isValid if (vpn_manager->isValid() ) { QDBusMessage reply_b = vpn_manager->call(QDBus::AutoDetect, "UnregisterAgent", QVariant::fromValue(QDBusObjectPath(VPN_AGENT_OBJECT)) ); //qDebug() << reply_b; } // ivpn_manager isValid return; } // // Slot to open the color selection dialog and request input. void ControlBox::callColorDialog() { QColor color = QColorDialog::getColor(QColor(ui.lineEdit_colorize->text()), this, tr("Colorize Icons")); if (color.isValid() ) ui.lineEdit_colorize->setText(color.name() ); return; } // // Slot to process things when the user changes the icon color void ControlBox::iconColorChanged(const QString& col) { iconman->setIconColor(QColor(col) ); this->updateDisplayWidgets(); ui.toolButton_whatsthis->setIcon(iconman->getIcon("whats_this")); agent->setWhatsThisIcon(iconman->getIcon("whats_this")); vpnagent->setWhatsThisIcon(iconman->getIcon("whats_this")); return; } cmst/apps/cmstapp/code/provisioning/prov_ed.cpp000644 001750 000144 00000070154 12646535647 022423 0ustar00andyusers000000 000000 /****************** prov_ed.cpp *********************************** Code to manage the Provisioning Editor dialog. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include # include # include # include # include # include # include # include # include # include # include "./prov_ed.h" # include "../resource.h" # include "./code/trstring/tr_strings.h" ValidatingDialog::ValidatingDialog(QWidget* parent) : QDialog(parent) { // build the dialog label = new QLabel(this); lineedit = new QLineEdit(this); buttonbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); this->setSizeGripEnabled(true); QVBoxLayout* vboxlayout = new QVBoxLayout; vboxlayout->addWidget(label); vboxlayout->addWidget(lineedit); vboxlayout->addWidget(buttonbox); this->setLayout(vboxlayout); // signals and slots connect(buttonbox, SIGNAL(accepted()), this, SLOT(accept())); connect(buttonbox, SIGNAL(rejected()), this, SLOT(reject())); } // Slot to set the lineedit validator void ValidatingDialog::setValidator(const int& vd, bool plural) { // setup a switch to set the validator QString s_ip4 = "(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])"; QString s_ip6 = "(?:[0-9a-fA-F]{1,4})"; QString s_mac = "(?:[0-9a-fA-F]{1,2})"; QString s_hex = "[0-9a-fA-F]*"; QString s_int = "[0-9]*"; QString s_dom = "[0-9a-zA-Z]*[\\.]?[0-9a-zA-Z]*"; QString s_wd = "[0-9,a-zA-Z_\\.\\!\\@\\#\\$\\%\\^\\&\\*\\+\\-]*"; QString s_start = (plural ? "\\s?|(" : "\\s?|^"); QString s_end = (plural ? "(\\s*[,|;|\\s]\\s*))+" : "$"); switch (vd){ case CMST::ProvEd_Vd_IPv4: { QRegularExpression rx4(s_start + s_ip4 + "(?:\\." + s_ip4 + "){3}" + s_end); QRegularExpressionValidator* lev_4 = new QRegularExpressionValidator(rx4, this); lineedit->setValidator(lev_4); } break; case CMST::ProvEd_Vd_IPv6: { QRegularExpression rx6(s_start + s_ip6 + "(?::" + s_ip6 + "){7}" + s_end); QRegularExpressionValidator* lev_6 = new QRegularExpressionValidator(rx6, this); lineedit->setValidator(lev_6); } break; case CMST::ProvEd_Vd_MAC: { QRegularExpression rxm(s_start + s_mac + "(?::" + s_mac + "){5}" + s_end); QRegularExpressionValidator* lev_m = new QRegularExpressionValidator(rxm, this); lineedit->setValidator(lev_m); } break; case CMST::ProvEd_Vd_46: { QRegularExpression rx46(s_start + "(" + s_ip4 + "(?:\\." + s_ip4 + "){3}|" + s_ip6 + "(?::" + s_ip6 + "){7})" + s_end); QRegularExpressionValidator* lev_46 = new QRegularExpressionValidator(rx46, this); lineedit->setValidator(lev_46); } break; case CMST::ProvEd_Vd_Hex: { QRegularExpression rxh(s_start + s_hex + s_end); QRegularExpressionValidator* lev_h = new QRegularExpressionValidator(rxh, this); lineedit->setValidator(lev_h); } break; case CMST::ProvEd_Vd_Int: { QRegularExpression rxint(s_start + s_int + s_end); QRegularExpressionValidator* lev_int = new QRegularExpressionValidator(rxint, this); lineedit->setValidator(lev_int); } break; case CMST::ProvEd_Vd_Dom: { QRegularExpression rxdom(s_start + s_dom + s_end); QRegularExpressionValidator* lev_dom = new QRegularExpressionValidator(rxdom, this); lineedit->setValidator(lev_dom); } break; case CMST::ProvEd_Vd_Wd: { QRegularExpression rxwd(s_start + s_wd + s_end); QRegularExpressionValidator* lev_wd = new QRegularExpressionValidator(rxwd, this); lineedit->setValidator(lev_wd); } break; default: lineedit->setValidator(0); break; } // switch return; } ProvisioningEditor::ProvisioningEditor(QWidget* parent) : QDialog(parent) { // Setup the user interface ui.setupUi(this); // Data members menubar = new QMenuBar(this); ui.verticalLayout01->setMenuBar(menubar); con_path = "/var/lib/connman"; statusbar = new QStatusBar(this); ui.verticalLayout01->addWidget(statusbar); statustimeout = 2000; i_sel = CMST::ProvEd_No_Selection; // Setup the buttongroup bg01 = new QButtonGroup(this); bg01->addButton(ui.pushButton_open); bg01->addButton(ui.pushButton_save); bg01->addButton(ui.pushButton_delete); // Add actions to actiongroups (signals from actiongroups are connected to slots) group_template = new QActionGroup(this); group_template->addAction(ui.actionTemplateEduroamLong); group_template->addAction(ui.actionTemplateEduroamShort); group_freeform = new QActionGroup(this); group_freeform->addAction(ui.actionGlobal); group_freeform->addAction(ui.actionGlobalName); group_freeform->addAction(ui.actionGlobalDescription); group_freeform->addAction(ui.actionService); group_freeform->addAction(ui.actionWifiPrivateKeyPassphrase); group_freeform->addAction(ui.actionWifiIdentity); group_freeform->addAction(ui.actionWifiPassphrase); group_freeform->addAction(ui.actionWifiPhase2); group_combobox = new QActionGroup(this); group_combobox->addAction(ui.actionServiceType); group_combobox->addAction(ui.actionWifiEAP); group_combobox->addAction(ui.actionWifiPrivateKeyPassphraseType); group_combobox->addAction(ui.actionWifiSecurity); group_combobox->addAction(ui.actionWifiHidden); group_combobox->addAction(ui.actionServiceIPv6Privacy); group_validated = new QActionGroup(this); group_validated->addAction(ui.actionServiceMAC); group_validated->addAction(ui.actionWifiSSID); group_validated->addAction(ui.actionServiceNameServers); group_validated->addAction(ui.actionServiceTimeServers); group_validated->addAction(ui.actionServiceSearchDomains); group_validated->addAction(ui.actionServiceDomain); group_validated->addAction(ui.actionWifiName); group_selectfile = new QActionGroup(this); group_selectfile->addAction(ui.actionWifiCACertFile); group_selectfile->addAction(ui.actionWifiClientCertFile); group_selectfile->addAction(ui.actionWifiPrivateKeyFile); group_ipv4 = new QActionGroup(this); group_ipv4->addAction(ui.actionServiceIPv4Off); group_ipv4->addAction(ui.actionServiceIPV4DHCP); group_ipv4->addAction(ui.actionServiceIPv4Address); group_ipv6 = new QActionGroup(this); group_ipv6->addAction(ui.actionServiceIPv6Off); group_ipv6->addAction(ui. actionServiceIPv6Auto); group_ipv6->addAction(ui.actionServiceIPv6Address); // Add Actions from UI to menu's menu_global = new QMenu(tr("Global"), this); menu_global->addAction(ui.actionGlobal); menu_global->addSeparator(); menu_global->addAction(ui.actionGlobalName); menu_global->addAction(ui.actionGlobalDescription); menu_service = new QMenu(tr("Service"), this); menu_service->addAction(ui.actionService); menu_service->addSeparator(); menu_service->addAction(ui.actionServiceType); menu_service->addAction(ui.actionServiceDomain); menu_service->addAction(ui.actionServiceMAC); menu_service->addSeparator(); menu_service->addAction(ui.actionServiceIPv4Off); menu_service->addAction(ui.actionServiceIPV4DHCP); menu_service->addAction(ui.actionServiceIPv4Address); menu_service->addSeparator(); menu_service->addAction(ui.actionServiceIPv6Off); menu_service->addAction(ui. actionServiceIPv6Auto); menu_service->addAction(ui.actionServiceIPv6Address); menu_service->addAction(ui.actionServiceIPv6Privacy); menu_service->addSeparator(); menu_service->addAction(ui.actionServiceNameServers); menu_service->addAction(ui.actionServiceTimeServers); menu_service->addAction(ui.actionServiceSearchDomains); menu_wifi = new QMenu(tr("WiFi"), this); menu_wifi->addSeparator(); menu_wifi->addAction(ui.actionWifiName); menu_wifi->addAction(ui.actionWifiSSID); menu_wifi->addSeparator(); menu_wifi->addAction(ui.actionWifiSecurity); menu_wifi->addAction(ui.actionWifiPassphrase); menu_wifi->addAction(ui.actionWifiHidden); menu_wifi->addAction(ui.actionWifiPhase2); menu_wifi->addSeparator(); menu_wifi->addAction(ui.actionWifiEAP); menu_wifi->addAction(ui.actionWifiIdentity); menu_wifi->addSeparator(); menu_wifi->addAction(ui.actionWifiCACertFile); menu_wifi->addAction(ui.actionWifiClientCertFile); menu_wifi->addSeparator(); menu_wifi->addAction(ui.actionWifiPrivateKeyFile); menu_wifi->addAction(ui.actionWifiPrivateKeyPassphrase); menu_wifi->addAction(ui.actionWifiPrivateKeyPassphraseType); menu_template = new QMenu(tr("Templates"), this);menu_template->addAction(ui.actionTemplateEduroamShort); menu_template->addAction(ui.actionTemplateEduroamLong); menu_template->addAction(ui.actionTemplateEduroamShort); // add menus to UI menubar->addMenu(menu_global); menubar->addMenu(menu_service); menubar->addMenu(menu_wifi); menubar->addMenu(menu_template); // connect signals to slots connect(ui.toolButton_whatsthis, SIGNAL(clicked()), this, SLOT(showWhatsThis())); connect(ui.pushButton_resetpage, SIGNAL(clicked()), this, SLOT(resetPage())); connect(bg01, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(requestFileList(QAbstractButton*))); connect(group_template, SIGNAL(triggered(QAction*)), this, SLOT(templateTriggered(QAction*))); connect(group_freeform, SIGNAL(triggered(QAction*)), this, SLOT(inputFreeForm(QAction*))); connect(group_combobox, SIGNAL(triggered(QAction*)), this, SLOT(inputComboBox(QAction*))); connect(group_validated, SIGNAL(triggered(QAction*)), this, SLOT(inputValidated(QAction*))); connect(group_selectfile, SIGNAL(triggered(QAction*)), this, SLOT(inputSelectFile(QAction*))); connect(group_ipv4, SIGNAL(triggered(QAction*)), this, SLOT(ipv4Triggered(QAction*))); connect(group_ipv6, SIGNAL(triggered(QAction*)), this, SLOT(ipv6Triggered(QAction*))); } /////////////////////////////////////////////// Private Slots ///////////////////////////////////////////// // // Slot called when a member of the QActionGroup group_selectfile void ProvisioningEditor::inputSelectFile(QAction* act) { // variables QString key = act->text(); QString title; if (act == ui.actionWifiCACertFile) title = tr("File Path to the CA Certificate File"); if (act == ui.actionWifiClientCertFile) title = tr("File Path to the Client Certificate File"); if (act == ui.actionWifiPrivateKeyFile) title = tr("File path to the Client Private Key File");; QString fname = QFileDialog::getOpenFileName(this, title, QDir::homePath(), tr("Key Files (*.pem);;All Files (*.*)")); // return if the file name returned is empty (cancel pressed in the dialog) if (fname.isEmpty() ) return; // put the path into the text edit key.append(" = %1\n"); ui.plainTextEdit_main->insertPlainText(key.arg(fname) ); return; } // // Slot called when a member of the QActionGroup group_validated is triggered void ProvisioningEditor::inputValidated(QAction* act) { // variables QString key = act->text(); // create the dialog ValidatingDialog* vd = new ValidatingDialog(this); // create some prompts and set validator if (act == ui.actionServiceMAC) {vd->setLabel(tr("MAC address.")); vd->setValidator(CMST::ProvEd_Vd_MAC);} if (act == ui.actionWifiSSID) {vd->setLabel(tr("SSID: hexadecimal representation of an 802.11 SSID")); vd->setValidator(CMST:: ProvEd_Vd_Hex);} if (act == ui.actionServiceNameServers) {vd->setLabel(tr("List of Nameservers")); vd->setValidator(CMST::ProvEd_Vd_46, true);} if (act == ui.actionServiceTimeServers) {vd->setLabel(tr("List of Timeservers")); vd->setValidator(CMST::ProvEd_Vd_46, true);} if (act == ui.actionServiceSearchDomains) {vd->setLabel(tr("List of DNS Search Domains")); vd->setValidator(CMST::ProvEd_Vd_Dom, true);} if (act == ui.actionServiceDomain) {vd->setLabel(tr("Domain name to be used")); vd->setValidator(CMST::ProvEd_Vd_Dom);} if (act == ui.actionWifiName) {vd->setLabel(tr("Enter the string representation of an 802.11 SSID.")); vd->setValidator(CMST::ProvEd_Vd_Wd);} // if accepted put an entry in the textedit if (vd->exec() == QDialog::Accepted) { QString s = vd->getText(); key.append(" = %1\n"); // format strings with multiple entries if (vd->isPlural() ) { s.replace(',', ' '); s.replace(';', ' '); s = s.simplified(); s.replace(' ', ','); } ui.plainTextEdit_main->insertPlainText(key.arg(s) ); } // cleanup vd->deleteLater(); return; } // // Slot called when a member of the QActionGroup group_combobox is triggered void ProvisioningEditor::inputComboBox(QAction* act) { // variables QString key = act->text(); QString str; bool ok; QStringList sl; // create some prompts if (act == ui.actionServiceType) {str = tr("Service type."); sl << "ethernet" << "wifi";} if (act == ui.actionWifiEAP) {str = tr("EAP type."); sl << "tls" << "ttls" << "peap";} if (act == ui.actionWifiPrivateKeyPassphraseType) {str = tr("Private key passphrase type."); sl << "fsid";} if (act == ui.actionWifiSecurity) {str = tr("Network security type."); sl << "psk" << "ieee8021x" << "wep" << "none";} if (act == ui.actionWifiHidden) {str = tr("Hidden network"); sl << "true" << "false";} if (act == ui.actionServiceIPv6Privacy) {str = tr("IPv6 Privacy"); sl << "disabled" << "enabled" << "preferred";} QString item = QInputDialog::getItem(this, tr("%1 - Item Input").arg(TranslateStrings::cmtr("cmst")), str, sl, 0, false, &ok); key.append(" = %1\n"); if (ok) ui.plainTextEdit_main->insertPlainText(key.arg(item)); return; } // // Slot called when a member of the QActionGroup group_freeform is triggered // Freeform strings may have spaces in them. For strings that cannot have spaces // use validated text and set b_multiple to false. void ProvisioningEditor::inputFreeForm(QAction* act) { // variables const QLineEdit::EchoMode echomode = QLineEdit::Normal; QString str; bool ok; QString key = act->text(); // create some prompts if (act == ui.actionService) str = tr("Tag which will replace the * with
an identifier unique to the config file."); if (act == ui.actionGlobalName) str = tr("Enter the network name."); if (act == ui.actionGlobalDescription) str = tr("Enter a description of the network."); if (act == ui.actionWifiPrivateKeyPassphrase) str = tr("Password/Passphrase for the private key file."); if (act == ui.actionWifiIdentity) str = tr("Identity string for EAP."); if (act == ui.actionWifiPassphrase) str = tr("RSN/WPA/WPA2 Passphrase"); if (act == ui.actionWifiPhase2) str = tr("Phase 2 (inner authentication with TLS tunnel)
authentication method."); if (act == ui.actionGlobal) { key.append("\n"); ui.plainTextEdit_main->insertPlainText(key); } else { act == ui.actionService ? key = "[service_%1]\n" : key.append(" = %1\n"); // get the string from the user QString text = ""; text = QInputDialog::getText(this, tr("%1 - Text Input").arg(TranslateStrings::cmtr("cmst")), str, echomode, "", &ok); if (ok) ui.plainTextEdit_main->insertPlainText(key.arg(text)); } // else return; } // // Slot called when a member of the QActionGroup group_ipv4 is triggered void ProvisioningEditor::ipv4Triggered(QAction* act) { // variables QString s = "IPv4 = %1\n"; QString val; // process action if (act == ui.actionServiceIPv4Off) ui.plainTextEdit_main->insertPlainText(s.arg("off") ); if (act == ui.actionServiceIPV4DHCP) ui.plainTextEdit_main->insertPlainText(s.arg("dhcp") ); if (act == ui.actionServiceIPv4Address) { QMessageBox::StandardButton but = QMessageBox::information(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Information"), tr("The IPv4 Address, Netmask, and optionally Gateway need to be provided." \ "

Press OK when you are ready to proceed."), QMessageBox::Ok | QMessageBox::Abort,QMessageBox::Ok); if (but == QMessageBox::Ok) { ValidatingDialog* vd = new ValidatingDialog(this); vd->setLabel(tr("IPv4 Address")); vd->setValidator(CMST::ProvEd_Vd_IPv4); if (vd->exec() == QDialog::Accepted && ! vd->getText().isEmpty() ) { val = vd->getText(); vd->clear(); vd->setLabel(tr("IPv4 Netmask")); vd->setValidator(CMST::ProvEd_Vd_IPv4); if (vd->exec() == QDialog::Accepted && ! vd->getText().isEmpty() ) { val.append("/" + vd->getText() ); vd->clear(); vd->setLabel(tr("IPv4 Gateway (This is an optional entry)")); vd->setValidator(CMST::ProvEd_Vd_IPv4); if (vd->exec() == QDialog::Accepted && ! vd->getText().isEmpty() ) { val.append("/" + vd->getText() ); } // if gateway accpted ui.plainTextEdit_main->insertPlainText(s.arg(val) ); } // if netmask accepted } // if address accepted vd->deleteLater(); } // we pressed OK on the information dialog } // act == actionServiceIPv4Address return; } // // Slot called when a member of the QActonGroup group_ipv6 is triggered void ProvisioningEditor::ipv6Triggered(QAction* act) { // variables QString s = "IPv6 = %1\n"; bool ok; QString val; // process action if (act == ui.actionServiceIPv6Off) ui.plainTextEdit_main->insertPlainText(s.arg("off") ); if (act == ui.actionServiceIPv6Auto) ui.plainTextEdit_main->insertPlainText(s.arg("auto") ); if (act == ui.actionServiceIPv6Address) { QMessageBox::StandardButton but = QMessageBox::information(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Information"), tr("The IPv6 Address, Prefix Length, and optionally Gateway need to be provided." \ "

Press OK when you are ready to proceed."), QMessageBox::Ok | QMessageBox::Abort,QMessageBox::Ok); if (but == QMessageBox::Ok) { ValidatingDialog* vd = new ValidatingDialog(this); vd->setLabel(tr("IPv6 Address")); vd->setValidator(CMST::ProvEd_Vd_IPv6); if (vd->exec() == QDialog::Accepted && ! vd->getText().isEmpty() ) { val = vd->getText(); int i = QInputDialog::getInt(this, tr("%1 - Integer Input").arg(TranslateStrings::cmtr("cmst")), tr("Enter the IPv6 prefix length"), 0, 0, 255, 1, &ok); if (ok) { val.append(QString("/%1").arg(i) ); ValidatingDialog* vd = new ValidatingDialog(this); vd->setLabel(tr("IPv6 Gateway (This is an optional entry)")); vd->setValidator(CMST::ProvEd_Vd_IPv6); if (vd->exec() == QDialog::Accepted && ! vd->getText().isEmpty() ) { val.append(QString("/" + vd->getText()) ); } // if gateway was accepted ui.plainTextEdit_main->insertPlainText(s.arg(val) ); } // if prefix provided } // if address accepted vd->deleteLater(); } // we pressed OK on the informaion dialog } // act == actionServiceIPv6Address return; } // // Slot called when a member of the QActionGroup group_template is triggered void ProvisioningEditor::templateTriggered(QAction* act) { // variable QString source; // get the source string depending on the action if (act == ui.actionTemplateEduroamLong) source = ":/text/text/eduroam_long.txt"; else if (act == ui.actionTemplateEduroamShort) source = ":/text/text/eduroam_short.txt"; // get the text QFile file(source); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QByteArray ba = file.readAll(); // seed the textedit with the template this->seedTextEdit(QString(ba)); } // if return; } // // Slot to enter whats this mode // Called when the ui.toolButton_whatsthis clicked() signal is emitted void ProvisioningEditor::showWhatsThis() { QWhatsThis::enterWhatsThisMode(); } // // Function to clear the contents of the textedit void ProvisioningEditor::resetPage() { ui.plainTextEdit_main->document()->clear(); return; } // // Slot to request a file list from the roothelper. // Roothelper will emit an obtainedFileList signal when finished. This slot // is connected to the QButtonGroup bg01 void ProvisioningEditor::requestFileList(QAbstractButton* button) { // initialize the selection if (button == ui.pushButton_open) i_sel = CMST::ProvEd_File_Read; else if (button == ui.pushButton_save) i_sel = CMST::ProvEd_File_Write; else if (button == ui.pushButton_delete) i_sel = CMST::ProvEd_File_Delete; else i_sel = CMST::ProvEd_No_Selection; // request a list of config files from roothelper QList vlist; vlist << QVariant::fromValue(con_path); QDBusInterface* iface_rfl = new QDBusInterface("org.cmst.roothelper", "/", "org.cmst.roothelper", QDBusConnection::systemBus(), this); iface_rfl->callWithCallback(QLatin1String("getFileList"), vlist, this, SLOT(processFileList(const QStringList&)), SLOT(callbackErrorHandler(QDBusError))); iface_rfl->deleteLater(); return; } // // Slot to process the file list from /var/lib/connman. Connected to // the obtainedFileList signal in roothelper void ProvisioningEditor::processFileList(const QStringList& sl_conf) { // variables bool ok; QString filename = ""; QList vlist; QDBusInterface* iface_pfl = new QDBusInterface("org.cmst.roothelper", "/", "org.cmst.roothelper", QDBusConnection::systemBus(), this); // If we are trying to open and read the file if (i_sel & CMST::ProvEd_File_Read) { // display dialogs based on the length of the stringlist switch (sl_conf.size()) { case 0: QMessageBox::information(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Information"), tr("

No configuration files were found.
You may use this dialog to create one."), QMessageBox::Ok, QMessageBox::Ok); break; case 1: QMessageBox::information(this, tr("%1 - Information").arg(TranslateStrings::cmtr("cmst")), tr("
Reading configuration file: %1").arg(sl_conf.at(0)), QMessageBox::Ok, QMessageBox::Ok); filename = sl_conf.at(0); break; default: QString item = QInputDialog::getItem(this, tr("%1 - Select File").arg(TranslateStrings::cmtr("cmst")), tr("Select a file to load."), sl_conf, 0, // current item 0 false, // non-editable &ok); if (ok) filename = item; break; } // switch // if we have a filename try to open the file if (! filename.isEmpty() ) { vlist.clear(); vlist << QVariant::fromValue(con_path); vlist << QVariant::fromValue(filename); iface_pfl->callWithCallback(QLatin1String("readFile"), vlist, this, SLOT(seedTextEdit(const QString&)), SLOT(callbackErrorHandler(QDBusError))); } // if there is a file name } // if i_sel is File_Read // If we are trying to delete the file else if (i_sel & CMST::ProvEd_File_Delete) { // // user will have to select the file to delete it switch (sl_conf.size()) { case 0: QMessageBox::information(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Information"), tr("
No configuration files were found.
Nothing will be deleted."), QMessageBox::Ok, QMessageBox::Ok); break; default: QString item = QInputDialog::getItem(this, tr("%1 - Select File").arg(TranslateStrings::cmtr("cmst")), tr("Select a file to be deleted."), sl_conf, 0, // current item 0 false, // non-editable &ok); if (ok) filename = item; break; } // switch // if we have a filename try to delete the file if (! filename.isEmpty() ) { vlist.clear(); vlist << QVariant::fromValue(con_path); vlist << QVariant::fromValue(filename); iface_pfl->callWithCallback(QLatin1String("deleteFile"), vlist, this, SLOT(deleteCompleted(bool)), SLOT(callbackErrorHandler(QDBusError))); } // if there is a file name } // if i_sel is File_Delete // If we are trying to save the file else if (i_sel & CMST::ProvEd_File_Write) { QString item = QInputDialog::getItem(this, tr("%1 - Select File").arg(TranslateStrings::cmtr("cmst")), tr("Enter a new file name or select
an existing file to overwrite."), sl_conf, 0, // current item 0 true, // editable &ok); if (ok) { filename = item.simplified(); // multiple whitespace to one space filename = filename.replace(' ', '_'); // replace spaces with underscores } // if ok // if we have a filename try to save the file if (! filename.isEmpty() ) { vlist.clear(); vlist<< QVariant::fromValue(con_path); vlist << QVariant::fromValue(filename); vlist << QVariant::fromValue(ui.plainTextEdit_main->toPlainText() ); iface_pfl->callWithCallback(QLatin1String("saveFile"), vlist, this, SLOT(writeCompleted(qint64)), SLOT(callbackErrorHandler(QDBusError))); } // if there is a file name } // if i_sel is File_Save // cleanup i_sel = CMST::ProvEd_No_Selection; iface_pfl->deleteLater(); return; } // // Slot to seed the QTextEdit window with data read from file. Connected to // fileReadCompleted signal in root helper. Also called directly from // the templateTriggered slot. void ProvisioningEditor::seedTextEdit(const QString& data) { // clear the text edit and seed it with the read data ui.plainTextEdit_main->document()->clear(); ui.plainTextEdit_main->setPlainText(data); // show a statusbar message statusbar->showMessage(tr("File read completed"), statustimeout); return; } // // Slot to show a statusbar message when a file delete is completed void ProvisioningEditor::deleteCompleted(bool success) { QString msg; if (success) msg = tr("File deleted"); else msg = tr("Error encountered deleting."); statusbar->showMessage(msg, statustimeout); return; } // // Slot to show a statusbar message when a file write is completed void ProvisioningEditor::writeCompleted(qint64 bytes) { // display a status bar message showing the results of the write QString msg; if (bytes < 0 ) msg = tr("File save failed."); else { if (bytes > 1024) msg = tr("%L1 KB written").arg(bytes / 1024); else msg = tr("%L1 Bytes written").arg(bytes); } statusbar -> showMessage(msg, statustimeout); return; } // // Slot to handle errors from callWithCallback functions void ProvisioningEditor::callbackErrorHandler(QDBusError err) { QMessageBox::critical(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Critical"), QString(tr("DBus Error Name: %1

String: %2

Message: %3")).arg(err.name()).arg(err.errorString(err.type())).arg(TranslateStrings::cmtr(err.message()) ), QMessageBox::Ok, QMessageBox::Ok); return; } cmst/images/application/variations/scalable/cmst_spot_01.svg000644 001750 000144 00000055313 12645570501 024723 0ustar00andyusers000000 000000 cmst/stylesheets/signal_bar.qss000644 001750 000144 00000000301 12650551344 017362 0ustar00andyusers000000 000000 QProgressBar{ margin-top: 6px; margin-right: 11px; margin-bottom: 6px; margin-left: 7px; border: 1px solid black; border-radius: 4px; text-align: center; } QProgressBar::chunk { } cmst/apps/rootapp/000755 001750 000144 00000000000 12652522153 014610 5ustar00andyusers000000 000000 cmst/apps/cmstapp/cmstapp.pro000644 001750 000144 00000005074 12650031000 016752 0ustar00andyusers000000 000000 # We need the qt libraries, we want compiler warnings on, and this is a release version of the program CONFIG += qt CONFIG += warn_on CONFIG += release CONFIG += nostrip # Widgets needed for QT5, QT += widgets QT += dbus QT += network QT += core # cmst variables include(../../cmst.pri) TEMPLATE = app TARGET = cmst target.path = /usr/bin INSTALLS += target # dbus DBUS_ADAPTORS += ./code/agent/org.monkey_business_enterprises.agent.xml DBUS_INTERFACES += ./code/agent/org.monkey_business_enterprises.agent.xml DBUS_ADAPTORS += ./code/counter/org.monkey_business_enterprises.counter.xml DBUS_INTERFACES += ./code/counter/org.monkey_business_enterprises.counter.xml # header files HEADERS += ../resource.h HEADERS += ./code/control_box/controlbox.h HEADERS += ./code/agent/agent.h HEADERS += ./code/agent/agent_dialog.h HEADERS += ./code/counter/counter.h HEADERS += ./code/scrollbox/scrollbox.h HEADERS += ./code/notify/notify.h HEADERS += ./code/peditor/peditor.h HEADERS += ./code/provisioning/prov_ed.h HEADERS += ./code/vpn_prov_ed/vpn_ed.h HEADERS += ./code/trstring/tr_strings.h HEADERS += ./code/iconman/iconman.h HEADERS += ./code/vpn_agent/vpnagent.h HEADERS += ./code/vpn_agent/vpnagent_dialog.h HEADERS += ./code/vpn_agent/vpnagent_adaptor.h HEADERS += ./code/vpn_agent/vpnagent_interface.h # forms FORMS += ./code/control_box/ui/controlbox.ui FORMS += ./code/agent/ui/agent.ui FORMS += ./code/scrollbox/ui/scrollbox.ui FORMS += ./code/peditor/ui/peditor.ui FORMS += ./code/provisioning/ui/provisioning_editor.ui FORMS += ./code/vpn_prov_ed/ui/vpn_prov_editor.ui FORMS += ./code/vpn_agent/ui/vpnagent.ui # sources SOURCES += ./code/main.cpp SOURCES += ./code/control_box/controlbox.cpp SOURCES += ./code/agent/agent.cpp SOURCES += ./code/agent/agent_dialog.cpp SOURCES += ./code/counter/counter.cpp SOURCES += ./code/scrollbox/scrollbox.cpp SOURCES += ./code/notify/notify.cpp SOURCES += ./code/peditor/peditor.cpp SOURCES += ./code/provisioning/prov_ed.cpp SOURCES += ./code/vpn_prov_ed/vpn_ed.cpp SOURCES += ./code/trstring/tr_strings.cpp SOURCES += ./code/iconman/iconman.cpp SOURCES += ./code/vpn_agent/vpnagent.cpp SOURCES += ./code/vpn_agent/vpnagent_dialog.cpp SOURCES += ./code/vpn_agent/vpnagent_adaptor.cpp SOURCES += ./code/vpn_agent/vpnagent_interface.cpp # resource files RESOURCES += ../../cmst.qrc ## Place all object files in their own directory and moc files in their own directory ## This is not necessary but keeps things cleaner. OBJECTS_DIR = ./object_files MOC_DIR = ./moc_files sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro cmst/translations/cmst_pl_PL.ts000644 001750 000144 00000721105 12650551344 017316 0ustar00andyusers000000 000000 Agent Agent Input Passphrase <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> <html><head/><body><p>Type the passphrase here.</p></body></html> <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> &Hide Passphrase O&ld Passphrase &Passphrase Hidden Network &Name <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> Service Set Identifier &SSID Wireless Internet Service Provider roaming (WISPr) &Username <html><head/><body><p>WISPr username.</p></body></html> Passwor&d <html><head/><body><p>WISPr password.</p></body></html> Extensible Authentication Protocol (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> &Identity WiFi Protected Setup (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> Use Push &Button Authentication &WPS Pin <html><head/><body><p>Enter a WPS pin.</p></body></html> Browser Login Requested Choose or enter a browser: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> Login URL: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> Launch &Browser <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel AgentDialog Information You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "%1 %2" ConnmanAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ConnmanCounter %L1 Bytes %L1 KB %L1 MB %L1 GB <b>Transmit:</b><br>TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4 %Ln Packet(s) <br><br><b>Received:</b><br>RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4 <br><br><b>Connect Time:</b><br> %n Day(s) %n Hour(s) %n Minute(s) %n Second(s) ConnmanVPNAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ControlBox Dialog &Status <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> All Devices &Off <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> Global Properties <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> OfflineMode: Unavailable <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> State: Unavailable <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Technologies Name Type Powered Connected Tethering <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> Resc&an <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> Services State Connection <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move Before <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move After <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> &Less &Details Ser&vice <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> Configuration &Wireless <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> Favorite Security Signal Strength Wireless Services <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> Connect <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> Disconnect Remove <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Wifi State &Counters <html><head/><body><p>The service being monitored by the counters.</p></body></html> Service: <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Home Counter not available. <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Roaming <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> Settings: &Preferences <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> Interface <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State Rescan Offline Mode <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> Use Icon Theme <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> Enable ToolTips (Interface) <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> Reset Counters <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> Advanced Controls <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> Start Options <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> Disable Tray Icon <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> Counter Update KB <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> Start Minimized <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> Wait Time <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> Disable Counters <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> Counter Update Rate <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> Desktop Specific <html><head/><body><p>Default is no desktop specific code.</p></body></html> None <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> &VPN VPN Services <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> Host Domain Fake Transparency <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> System Tray <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> Hide Tray Icon <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> Enable System Tray Popups <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> System Tray Notifications Notifications <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> Notification Daemon Server Status Program Control <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> Enable Autostart <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> Retry Failed Connection <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> <html><head/><body><p>Open the color selection dialog. </p></body></html> ... <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help &About <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> &License <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> ChangeLo&g <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> Provisioning Editor <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> E&xit <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> Mi&nimize Ma&ximize &Exit About %1 Service Details WiFi Connections VPN Connections <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian)<br><center><b>Build Information:</b><center>Compiled using QT version %5<center>Built %6 - %7 About AwOken <center>This program uses the <b>AwOken</b> icon set version 2.5<br><br>Released under the<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>The CMST icon is a derivative work from the AwOken icon set. License %1 change log is not available. ChangeLog Cancel <b>Service:</b> %1 Unable to determine service No Services Selected You need to select a Wifi service before pressing the remove button. Offline Mode Engaged Offline Mode Disabled %1 (%2) Network Connection: %1 Network Services: No network services available Service Error: %1 Object Path: %1 VPN Engaged VPN Disengaged Warning <center><b>We received a DBUS reply message indicating an error while trying to scan technologies.</b></center><br><br>Error Name: %1<br><br>Error Message: %2 <b>Connection:</b> %1 <br><b>Service Details:</b><br> Service Type: %1<br> Service State: %1<br> Favorite: %1<br> Yes favorite No favorite External Configuration File: %1<br> Yes immutable No immutable Auto Connect: %1<br> On autoconnect No autoconnect <br><b>IPv4</b><br> IP Address Acquisition: %1<br> IP Address: %1<br> IP Netmask: %1<br> IP Gateway: %1<br> <br><b>IPv6</b><br> Address Acquisition: %1<br> Prefix Length: <br> Prefix Length: %1<br> Privacy: %1<br> <br><b>Proxy</b><br> URL: %1<br> Servers:<br>&nbsp;&nbsp;%1<br> Excludes:<br>&nbsp;&nbsp;%1<br> <br><b>Name Servers</b><br> <br><br><b>Time Servers</b><br> <br><br><b>Search Domains</b><br> <br><br><b>Ethernet</b><br> Connection Method: %1<br> Interface: %1<br> Device Address: %1<br> MTU: %1<br> <br><b>Wireless</b><br> Security: %1<br> Strength: %1<br> Roaming: %1<br> Yes roaming No roaming <br><b>VPN Provider</b><br> Host: %1<br> Domain: %1<br> Name: %1<br> Type: %1<br> State: Engaged Disabled Offline Mode %1On%1%1 powered %1Off%1%1 powered Yes connected No connected Yes tethered No tethered WiFi Technologies:<br> %1 Found, %2 Powered Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. Ethernet Connection<br> icon_tool_tip Service: %1<br> Interface: %1 WiFi Connection<br> icon_tool_tip SSID: %1<br> Strength: %1%<br> VPN Connection<br> icon_tool_tip Connection is in the Ready State. icon_tool_tip Connection is in the Failure State, attempting to reestablish the connection icon_tool_tip Connection is in the Failure State. icon_tool_tip Not Connected icon_tool_tip Error retrieving properties via Dbus Connection status is unknown Type: %1 <br>Powered On Off Not Connected <br>Tethering Enabled Connection : %1 Signal Strength: %1% Favorite Connection Never Connected <br>Security : %1 <br>Roaming <br>Autoconnect is <p style='white-space:pre'><center><b>%1</b></center> <center><b>Unable to find a systemtray on this machine.</b><center><br>The program may still be used to manage your connections, but the tray icon will be disabled.<center><br><br>If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the <b>-w</b> switch and set a delay as necessary. The exact wait time will vary from system to system. Could not find a connection to the system bus %1 - Critical Error Unable to find a connection to the system bus.<br><br>%1 will not be able to communicate with connman. Could not create an interface to connman on the system bus Unable to create an interface to connman on the system bus.<br><br>%1 will not be able to communicate with connman. Error reading or parsing connman.Manager.GetProperties %1 - Warning There was an error reading or parsing the reply from method connman.Manager.GetProperties.<br><br>It is unlikely any portion of %1 will be functional. Error reading or parsing connman.Manager.GetTechnologies There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.<br><br>Some portion of %1 may still be functional. Error reading or parsing connman.Manager.GetServices There was an error reading or parsing the reply from method connman.Manager.GetServices.<br><br>Some portion of %1 may still be functional. %1 version %2 by %3 has been detected on this system.<p>This server supports desktop Notification Specification version %4 Colorize Icons Attempt %1 of 4 looking for notification server. %1 license is the MIT (Expat) license. You need to select a service before pressing the connect button. You need to select a service before pressing the disconnect button. <p style='white-space:pre'><center><b>%1 Properties</b></center> Unable to find or connect to a Notification server. IconManager A new icon definition file will be installed to <b>%1</b> and a backup of the old definition file has been created as <b>%2</b> <p>If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. <p>If the original was never customized or you just wish to delete the backup now you may select <i>Discard</i> to delete the backup or <i>Save</i> to retain it. Peditor Property Editor &General <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> AutoConnect <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Nameservers <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &TImeservers <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Domains <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> IPv&4 Address Netmask Gateway DHCP Manual Off Method <html><head/><body><p>User configuration of IPv6 settings</p></body></html> IPv&6 Auto Prefix Length Privacy Disabled Preferred Enabled <html><head/><body><p>User configuration of Proxy settings.</p></body></html> &Proxy Direct <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> URL Servers <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> Excludes <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> Reset Pa&ge <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> Reset &All <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> OK <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> Cancel Provisioning Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Description [service_*] Type MAC Nameservers Timeservers SearchDomains Domain SSID EAP CACertFile ClientCertFile PrivateKeyFile PrivateKeyPassphrase PrivateKeyPassphraseType Identity Phase2 Passphrase Security Hidden Eduroam (long) Eduroam (short) IPv4 Address IPv4 Off IPV4 DHCP IPv6 Address IPv6 Off IPv6 Auto IPv6.Privacy ProvisioningEditor Global Service WiFi Templates File Path to the CA Certificate File File Path to the Client Certificate File File path to the Client Private Key File Key Files (*.pem);;All Files (*.*) MAC address. SSID: hexadecimal representation of an 802.11 SSID List of Nameservers List of Timeservers List of DNS Search Domains Domain name to be used Enter the string representation of an 802.11 SSID. Service type. EAP type. Private key passphrase type. Network security type. Hidden network IPv6 Privacy %1 - Item Input Tag which will replace the * with<br>an identifier unique to the config file. Enter the network name. Enter a description of the network. Password/Passphrase for the private key file. Identity string for EAP. RSN/WPA/WPA2 Passphrase Phase 2 (inner authentication with TLS tunnel)<br>authentication method. %1 - Text Input Information The IPv4 <b>Address</b>, <b>Netmask</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv4 Address IPv4 Netmask IPv4 Gateway (This is an optional entry) The IPv6 <b>Address</b>, <b>Prefix Length</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv6 Address %1 - Integer Input Enter the IPv6 prefix length IPv6 Gateway (This is an optional entry) <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 RootHelper Failed to register service org.cmst.roothelper - there may be another instance running. Failed to register roothelper object on the system bus. ScrollBox Scrollbox TextLabel TranslateStrings connman system tray Main Window Title cmst Abbreviated Program Name - used for QMessageBox titles idle connman state string association connman state string configuration connman state string ready connman state string online connman state string disconnect connman state string failure connman state string offline connman state string system connman type string ethernet connman type string wifi connman type string bluetooth connman type string cellular connman type string gps connman type string vpn connman type string gadget connman type string p2p connman type string wired connman type string direct connman proxy string manual connman proxy string auto connman proxy string psk connman security string ieee8021x connman security string none connman security string wep connman security string wps connman security string Invalid arguments connman error string Permission denied connman error string Passphrase required connman error string Not registered connman error string Not unique connman error string Not supported connman error string Not implemented connman error string Not found connman error string No carrier connman error string In progress connman error string Already exists connman error string Already enabled connman error string Already disabled connman error string Already connected connman error string Not connected connman error string Operation aborted connman error string Operation timeout connman error string Invalid service connman error string Invalid property connman error string disabled connman privacy string enabled connman privacy string prefered connman privacy string auto connman ethernet connection method manual connman ethernet connection method dhcp connman ipv4 method string manual connman ipv4 method string off connman ipv4 method string fixed connman ipv4 method string auto connman ipv6 method string manual connman ipv6 method string 6to4 connman ipv6 method string off connman ipv6 method string openconnect connman vpn connection type openvpn connman vpn connection type vpnc connman vpn connection type l2tp connman vpn connection type pptp connman vpn connection type VPNAgent VPN Agent Input Username <html><head/><body><p>WISPr username.</p></body></html> Password <html><head/><body><p>WISPr password.</p></body></html> Host Name OpenConnect CA Cert. Client Cert. Cookie Server Cert. VPN Host <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel Save Credentials VPN_Editor Global OpenConnect OpenVPN VPNC L2TP PPTP All Files (*.*) CA Files (*.pem *.ca);;All Files (*.*) Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Key Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Config Files (*.ovpn *.conf *.config);;All Files (*.*) VPN server IP address (ex: 1.2.3.4) %1 - Item Input %1 - Verify Option User defined name for the VPN Domain name for the VPN Service (example: corporate.com) Networks behing the VPN link, if more than one separate by a comma. Format is network/netmask/gateway, and gateway can be omitted. Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16 Networks = entry is optional and may be left blank. %1 - Text Input Information <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 VPN_Prov VPN Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Name of the network. Description Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE PPPD.ReqMPPE40 PPPD.ReqMPPE128 PPPD.ReqMPPEStateful VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert Local peer's signed certificate. OpenVPN.Key Local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass Authenticate with server using username/password? OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. main.cpp Another running instance of CMST has been detected. This instance is aborting Connman System Tray. Bypass restoring the window state if restoring window state is specified in the settings file. Bypass restoring any start options in the settings file. [Experimental] Disable data counters. May be used to minimize load on your system. Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. Use an icon theme from your system. Icon Theme Name Log the connman inputRequest for debugging purposes. Start the GUI minimized in the system tray. Specify the wait time in seconds before starting the system tray icon. seconds [Experimental] The number of kb that have to be transmitted before the counter updates. KB [Experimental] The interval in seconds between counter updates. If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB) RRGGBB Use XFCE specific code. Use MATE DE specific code. cmst/apps/cmstapp/code/vpn_agent/vpnagent_interface.h000644 001750 000144 00000004165 12650020224 023475 0ustar00andyusers000000 000000 /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp org.monkey_business_enterprises.vpnagent.xml -p vpnagent_interface * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #ifndef VPNAGENT_INTERFACE_H #define VPNAGENT_INTERFACE_H #include #include #include #include #include #include #include #include /* * Proxy class for interface net.connman.vpn.Agent */ class NetConnmanVpnAgentInterface: public QDBusAbstractInterface { Q_OBJECT public: static inline const char *staticInterfaceName() { return "net.connman.vpn.Agent"; } public: NetConnmanVpnAgentInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); ~NetConnmanVpnAgentInterface(); public Q_SLOTS: // METHODS inline QDBusPendingReply<> Cancel() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("Cancel"), argumentList); } inline QDBusPendingReply<> Release() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("Release"), argumentList); } inline QDBusPendingReply<> ReportError(const QDBusObjectPath &in0, const QString &in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return asyncCallWithArgumentList(QStringLiteral("ReportError"), argumentList); } inline QDBusPendingReply RequestInput(const QDBusObjectPath &in0, const QVariantMap &in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return asyncCallWithArgumentList(QStringLiteral("RequestInput"), argumentList); } Q_SIGNALS: // SIGNALS }; namespace net { namespace connman { namespace vpn { typedef ::NetConnmanVpnAgentInterface Agent; } } } #endif cmst/apps/cmstapp/code/agent/ui/000755 001750 000144 00000000000 12645604030 017215 5ustar00andyusers000000 000000 cmst/images/application/variations/scalable/cmst_spot_06.svg000644 001750 000144 00000052545 12645570501 024734 0ustar00andyusers000000 000000 cmst/apps/rootapp/system/distro/arch/000755 001750 000144 00000000000 12645604012 020352 5ustar00andyusers000000 000000 cmst/images/raw_art/nm-signal-50.png000644 001750 000144 00000003037 12645570501 017707 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTE̒~hhh"!!VVVĹõ&&& cccuuuJJJoonTTT}}}JJJuuu444%%%opoopo###EEEFFF___rrroooyyy\\\lllccckkkwwwWWWVVVrrrDDD}}}dddKKK{{{eee%%%fffZZZ qqqbbb111YYYaaaMMM'tRNS%(Sny|xlQ'U{{V'lyfSHHSfxo.-t{Y++Vxx5'ts: , 4ly3No*?hz~xc8 "eT _)!d_ U'qpSAD\vl pyN(\}hps5 @psL Fzg.+-;6"4>lq<] ^9#? $!E%6FbKGDH pHYs$$ctIME84~VIDAT(c` 021 sprq  ! KHHII…UT54ut!F&f V6v` 'gW7wO//o_? EpHhXxDdTtLLl\|BbRrJjH&=#31+;'7/??/lTYyEeUuMm]}CcSsKk[b{Y]=}@'L4yT{M1s9s_p%K˖'Xk[D =޴-[$;wdo8j( áG'N:}rg.c+Wvč/_ݺ-rܽw?à a\vz9(%tEXtdate:create2015-11-04T18:05:25-05:00<%tEXtdate:modify2013-07-28T03:30:56-04:00n+IENDB`cmst/apps/rootapp/code/roothelper/roothelper.h000644 001750 000144 00000004561 12646050137 022250 0ustar00andyusers000000 000000 /**************************** roothelper.h ***************************** Code for the root helper registered on DBus. When registered the CMST provisioning editor will communicate with object using signals. As the name implies roothelper is run as the root user, since we need to read and write to /var/lib/connman. This program is started by DBus and the configuration files necessary to make that happen are in the system dir. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef ROOTHELPER # define ROOTHELPER # include # include # include # include class RootHelper : public QObject, protected QDBusContext { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.cmst.roothelper") public: RootHelper(QObject* parent = 0); public slots: void startHelper(); QStringList getFileList(const QString&); QString readFile(const QString&, const QString&); bool deleteFile(const QString& , const QString&); qint64 saveFile(const QString&, const QString&, const QString&); inline bool isConnected() {return b_connected;} // may not actually use this private: // members bool b_connected; //functions QString sanitizeInput(QString); bool pathAllowed(QString); }; #endif cmst/apps/cmstapp/code/agent/ui/agent.ui000644 001750 000144 00000044167 12645570501 020673 0ustar00andyusers000000 000000 Agent 0 0 386 642 Agent Input 0 Passphrase Qt::Horizontal 181 20 <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> true <html><head/><body><p>Type the passphrase here.</p></body></html> true <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> &Hide Passphrase O&ld Passphrase lineEdit_old_passphrase &Passphrase lineEdit_passphrase Hidden Network &Name lineEdit_hidden_name <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> true Service Set Identifier &SSID lineEdit_ssid true Wireless Internet Service Provider roaming (WISPr) &Username lineEdit_wispr_username <html><head/><body><p>WISPr username.</p></body></html> true Passwor&d lineEdit_wispr_password <html><head/><body><p>WISPr password.</p></body></html> true Extensible Authentication Protocol (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> true &Identity lineEdit_eap_identity WiFi Protected Setup (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> Use Push &Button Authentication Qt::Horizontal 85 20 0 0 &WPS Pin lineEdit_wps_pin 0 0 <html><head/><body><p>Enter a WPS pin.</p></body></html> true Browser Login Requested Choose or enter a browser: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true Login URL: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> true <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> Launch &Browser Qt::Vertical 20 40 <html><head/><body><p>What's This</p></body></html> ... :/icons16x16/images/16x16/help.png:/icons16x16/images/16x16/help.png Qt::Horizontal 328 20 <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel pushButton_accept clicked() Agent accept() 289 630 233 500 pushButton_cancel clicked() Agent reject() 375 630 380 487 cmst/apps/cmstapp/code/vpn_agent/vpnagent_dialog.cpp000644 001750 000144 00000014460 12650017374 023342 0ustar00andyusers000000 000000 /****************** vpnagent_dialog.cpp *********************************** Code to manage the agent user interface. When the connman daemon needs to communicate with the user it does so through the agent. The agent has a QDialog as a class member, and agent_dialog.cpp manages that dialog. Copyright (C) 2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include # include # include # include # include # include # include "./vpnagent_dialog.h" # include "./code/trstring/tr_strings.h" VPNAgentDialog::VPNAgentDialog(QWidget* parent) : QDialog(parent) { // setup the user interface ui.setupUi(this); // connect signals to slots connect(ui.toolButton_whatsthis, SIGNAL(clicked()), this, SLOT(showWhatsThis())); } ///////////////////////////////////////////////// Public Functions ///////////////////////////////////////////// // // Function to extract the input data from the QLineEdit's in the dialog and put it into // a QMap. The QMap is sent to this function as a reference and is modified by the function. void VPNAgentDialog::createDict(QMap& r_map) { // Initialize the map r_map.clear(); // Create the dict entries if (! ui.lineEdit_username->text().isEmpty() ) r_map["Username"] = ui.lineEdit_username->text(); if (! ui.lineEdit_password->text().isEmpty() ) r_map["Password"] = ui.lineEdit_password->text(); if (! ui.lineEdit_host->text().isEmpty() ) r_map["Host"] = ui.lineEdit_host->text(); if (! ui.lineEdit_name->text().isEmpty() ) r_map["Name"] = ui.lineEdit_name->text(); if (! ui.lineEdit_cacert->text().isEmpty() ) r_map["OpenConnect.CaCert"] = ui.lineEdit_cacert->text(); if (! ui.lineEdit_cookie->text().isEmpty() ) r_map["OpenConnect.Cookie"] = ui.lineEdit_cookie->text(); if (! ui.lineEdit_servercert->text().isEmpty() ) r_map["OpenConnect.ServerCert"] = ui.lineEdit_servercert->text(); if (! ui.lineEdit_vpnhost->text().isEmpty() ) r_map["OpenConnect.VPNHost"] = ui.lineEdit_vpnhost->text(); if (ui.checkBox_savecredentials->isEnabled() ) r_map["SaveCredentials"] = ui.checkBox_savecredentials->isChecked(); return; } // // Function to show the dialog. // imap - is map of QStrings with input keys that connman has requested the user to fill in, and any values // that it has sent back for informational purposes. Return the accept state of the dialog int VPNAgentDialog::showPage(const QMap& imap) { // set all input widgets to disabled this->initialize(); // turn on the boxes that need to be filled in if (imap.contains("Username")) { ui.lineEdit_username->setEnabled(true); ui.lineEdit_username->setText(imap.value("Username") ); } if (imap.contains("Password")) { ui.lineEdit_password->setEnabled(true); ui.lineEdit_password->setText(imap.value("Password") ); } if (imap.contains("Host")) { ui.lineEdit_host->setEnabled(true); ui.lineEdit_host->setText(imap.value("Host") ); } if (imap.contains("Name")) { ui.lineEdit_name->setEnabled(true); ui.lineEdit_name->setText(imap.value("Name") ); } if (imap.contains("OpenConnect.CaCert")) { ui.lineEdit_cacert->setEnabled(true); ui.lineEdit_cacert->setText(imap.value("OpenConnect.CaCert") ); } if (imap.contains("OpenConnect.Cookie")) { ui.lineEdit_cookie->setEnabled(true); ui.lineEdit_cookie->setText(imap.value("OpenConnect.CaCert") ); } if (imap.contains("OpenConnect.ServerCert")) { ui.lineEdit_servercert->setEnabled(true); ui.lineEdit_servercert->setText(imap.value("OpenConnect.ServerCert") ); } if (imap.contains("OpenConnect.VPNHost")) { ui.lineEdit_vpnhost->setEnabled(true); ui.lineEdit_vpnhost->setText(imap.value("OpenConnect.VPNHost") ); } if (imap.contains("SaveCredentials")) { ui.checkBox_savecredentials->setEnabled(true); } return this->exec(); } ///////////////////////////////////////////////// Private Functions ///////////////////////////////////////////// // // Function to initialize the fields in the dialog box, everything is disabled to start void VPNAgentDialog::initialize() { // QList of widget pointers QList list; list.clear(); list.append(ui.lineEdit_username); list.append(ui.lineEdit_password); list.append(ui.lineEdit_host); list.append(ui.lineEdit_name); list.append(ui.lineEdit_cacert); list.append(ui.lineEdit_clientcert); list.append(ui.lineEdit_cookie); list.append(ui.lineEdit_servercert); list.append(ui.lineEdit_vpnhost); list.append(ui.checkBox_savecredentials); // set disabled true for all widgets in the list and clear contents for (int i = 0; i < list.size(); ++i) { list.at(i)->setDisabled(true); if (qobject_cast (list.at(i)) != NULL ) qobject_cast (list.at(i))->clear(); if (qobject_cast (list.at(i)) != NULL ) qobject_cast (list.at(i))->setChecked(false); } } ///////////////////////////////////////////////// Private Slots ///////////////////////////////////////////// // // Slot to enter whats this mode // Called when the ui.toolButton_whatsthis clicked() signal is emitted void VPNAgentDialog::showWhatsThis() { QWhatsThis::enterWhatsThisMode(); } cmst/apps/cmstapp/code/agent/org.monkey_business_enterprises.agent.xml000644 001750 000144 00000001550 12645570501 027053 0ustar00andyusers000000 000000 cmst/images/raw_art/stock_lock.png000644 001750 000144 00000002074 12645570501 017733 0ustar00andyusers000000 000000 PNG  IHDRw=gAMA asRGB cHRMz&u0`:pQ<bKGDD(M pHYs  1IDATHǽkcUƟܛۤ37Scj3. ]BM7b@ N]X҅;BD,I.Z)*)%Nҏ؛.Tf1C},9/>W,HQ.xR @ σY{/@+?28;w.(Vd u?%r߳1_F\wS>n'eƇxj_*ZRהRE$yP=FOxlooCcS(|3;;υBx<~}pppzzzfOv$FFFnx\.e23g1?MOOOaehqq1q֭Sc`` e}Sk IENDB`cmst/translations/cmst_ru_RU.qm000644 001750 000144 00000377055 12645570501 017346 0ustar00andyusers000000 000000 .elxߋ~tC6nKCG%niByn$^7M7F C.23hB6enL Ub#K@~e'@a{HL^@ جB^~ccO\r.pG$ָ 4׫&g-Շ-R2u?-5TDWGOʷR:S`|On7yٔSŸhS4*v4*5*j`T\D$݀4o0nurLyIJIRKױNBM*Fg TN~%6N ]YIv>Vt-E8&a<J#3*6LLLtLw^w_{9}yJb'>Iyg`>U̹8B^-CDRW{ uAmINJd2{*CF,,9 +2b#I$$C[0@`R4/horz&.I9IfuyeQXIY+WBO7D7 ;^ʞ^YG8zշG:ߺOX|9> 諭ӍP%n>18`187"8[|K"0$&8[|GBO`U7We0EmVW~FQ&Q&^.ٳ M^ բsGEy '.m5 !tqSGS@M:^oevG\ ~"vkMAm\.XT4ɸ֔eJWB8E}  ( H~ '0R .l <^ Mg Sn X@Y Xk'QH [N d8 f lf7 ; ~  :N S OS da m7  _ ~ ~[ ~ ~ U^j   ^N, |> #b^G7 )^ )"(' - 7NH 9ͳX ? D5 P) W3 ^eU{ a4C c4ۧ eK: j5! j5 sYE 9 %^v a4  n2 Dl I _$ _/ ,Q 2D! :Y ŚIu ŴI) ȗM ~5. εp V9 n;  ևaP jL8 $(^ )CR L^]b RV~25 ^ _wem a"p a"; b< c~q h>$O h> l. pSr| }OSr ~9O Z8 | 6 ~ )Z )Y )`W ] ^9( ~\ O 4 ͛ DŽ> [ %l ( 1 3P 4k ;~ GE G2 M}E M[$ UTN| b cG[Y g, u?? v9^_ + <+ -_ MmF  ]- S] 6, Qv L ts^ ׅ ئAU S }> o  W P -^ PtOU T^S VR. V` V: _^MK i?2X i?2 n N0^   ." N N uD q ͑W b1 SHu h. ^X A >L nT t5Ojdm H  j7e_k>Z.l%U>s,;I+5 9$=6<LNPWd6i:r{܂)N.N;^80d-$eeHɾ˙->g])`np (q a1=I#JPA&B^f,F~ 1Z;-a1.<cVgD`;wg>ch~=m: n+qW1t0NpTSrw26o..Ƃ^xgA f-N'ʖ. ͻn^|Ti&B<5=0&CancelAgent&!:@KBL ?0@>;L&Hide PassphraseAgent&45=B8D8:0F8O &IdentityAgent&<O&NameAgent&0@>;L &PassphraseAgent &SSID&SSIDAgent"&<O ?>;L7>20B5;O &UsernameAgent8= &WPS&WPS PinAgent......Agent<html><head/><body><p>@8=OBL 8 8A?>;L7>20BL >B25BK, ?@54>AB02;5==K5 20<8 2 MB>< 480;>35. </p><p>-B> >B?@028B 2254Q==K9 40==K5 45<>=C connman 4;O ?@>4>;65=8O ?@>F5AA0 ?>4:;NG5=8O.</p></body></html>

Accept and use the answers you have provided in this dialog.

This will send your input to the connman daemon to continue the connection process.

Agent<html><head/><body><p>B<5=8BL ?@>F5AA ?>4:;NG5=8O.<br/></p></body></html>K

Cancel the connection process.

Agent$<html><head/><body><p>B<5=8BL 480;>3. </p><p>-B> >B?@028B A>>1I5=85 45<>=C connman > B><, GB> 2K >B<5=8;8 7?@>A =0 ?>4:;NG5=85.</p></body></html>

Cancel the dialog.

This will send a message to the connman daemon that you have cancelled the connection request.

Agent<html><head/><body><p>#AB0=>28B5 MB>B D;06>:, GB>1K A:@KBL A8<2>;K ?0@>;O.</p></body></html>Z

Check this box to obscure the password characters.

Agent<html><head/><body><p>Connman 70?@0H8205B >B:@KBL 251-1@0C75@, GB>1K 7025@H8BL ?@>F5AA 2E>40.</p><p>K ?@>A:0=8@>20;8 20H #", 4;O 1@0C75@>2 8 2A5 =0945==K5 1@0C75@K ?>:070=K 2 A?8A:5 =865. K <>65B5 2K1@0BL ;N1>9 >48= 1@0C75@, GB>1K 8A?>;L7>20BL 53> 4;O 2E>40. A;8 20H 251-1@0C75@ >BACBAB2C5B 2 A?8A:5, 22548B5 53> =0720=85 =5?>A@54AB25==> 2 ?>;5 <span style=" font-weight:600;">K15@8B5 1@0C75@ 8;8 22548B5 53> =0720=85</span>.</p><p>;O 70?CA:0 1@0C75@0 =06<8B5 :=>?:C <span style=" font-weight:600;">0?CAB8BL 1@0C75@</span>. </p><p>A;8 2K E>B8B5 2>9B8 2@CG=CN, 70:@>9B5 MB> >:=>, 70?CAB8B5 251-1@0C75@ 8 ?5@5948B5 ?> URL-04@5AC, C:070==><C ?>;5 <span style=" font-weight:600;">URL-04@5A 2E>40</span>.</p></body></html>

Connman is requesting that you open a web browser to complete the login process.

We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the Choose or enter a browser box.

To launch the browser click the Launch Browser button.

If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the Login URL box.

Agent&<html><head/><body><p>Connman 70?@0H8205B ?@>4>;65=85 2E>40 A ?><>ILN 1@0C75@0. -B> ?>;5 ?>:07K205B URL-04@5A A> AB@0=8F59 2E>40.</p></body></html>

Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.

Agent<html><head/><body><p>@>4>;68BL ?@>F5AA ?>4:;NG5=8O.</p></body></html>H

Continue the connection process.

Agentp<html><head/><body><p>2548B5 ?8= WPS.</p></body></html>8

Enter a WPS pin.

Agent<html><head/><body><p>A;8 AB0@K9 ?0@>;L 4>ABC?5=, B> >= 1C45B ?>:070= 745AL 4;O A?@02:8.</p></body></html>n

If an old passphrase is available it will be shown here for reference.

Agent<html><head/><body><p>2548B5 8<O A:@KB>9 A5B8, : :>B>@>9 2K E>B8B5 ?>4:;NG8BLAO.</p></body></html>c

Type the name of the hidden network you wish to connect to.

Agentz<html><head/><body><p>2548B5 ?0@>;L 745AL.</p></body></html>A

Type the passphrase here.

Agent<html><head/><body><p>2548B5 AB@>:C 20H59 845=B8D8:0F88 4;O @0AH8@O5<>3> ?@>B>:>;0 0CB5=B8D8:0F88</p></body></html>e

Type your Identity for the Extensible Authentication Protocol

AgentB<html><head/><body><p>A?>;L7C9B5 MBC :=>?:C 4;O 70?CA:0 C:070==>3> 1@0C75@0. @0C75@ >B:@>5BAO =0 AB@0=8F5, ?>:070==>9 2 ?>;5 URL-04@5A 2E>40.</p></body></html>

Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.

Agentj<html><head/><body><p>0@>;L WISPr.</p></body></html>7

WISPr password.

Agent~<html><head/><body><p><O ?>;L7>20B5;O WISPr.</p></body></html>7

WISPr username.

Agent^<html><head/><body><p>'B> MB></p></body></html>3

What's This

Agent<html><head/><body><p>>340 AB>8B D;06>:, 8A?>;L7C5BAO 0CB5=B8D8:0F8O A ?><>ILN :=>?:8 0CB5=B8D8:0F88 WPS.</p></body></html>Z

When checked use WPS push button authentication.

Agent0==K5 035=B0 Agent InputAgent@0?@>H5= 2E>4 A ?><>ILN 1@0C75@0Browser Login RequestedAgentTK15@8B5 1@0C75@ 8;8 22548B5 53> =0720=85:Choose or enter a browser:AgentR 0AH8@O5<K9 ?@>B>:>; 0CB5=B8D8:0F88 (EAP)(Extensible Authentication Protocol (EAP)Agent!:@KB0O A5BLHidden NetworkAgent$0?CAB8BL &1@0C75@Launch &BrowserAgent URL-04@5A 2E>40: Login URL:AgentO&KO&KAgent&!B0@K9 ?0@>;LO&ld PassphraseAgent 0@>;L PassphraseAgent&0@>;L Passwor&dAgent:#=8:0;L=K9 845=B8D8:0B>@ A5B8Service Set IdentifierAgentbA?>;L7>20BL 0CB5=B8D8:0F8N A ?><>ILN &:=>?:8 WPSUse Push &Button AuthenticationAgent@0I8IQ==0O =0AB@>9:0 Wi-Fi (WPS)WiFi Protected Setup (WPS)Agentp >C<8=3 ?>AB02I8:0 CA;C3 15A?@>2>4=>3> 8=B5@=5B0 (WISPr)2Wireless Internet Service Provider roaming (WISPr)Agent 8=D>@<0F8O Information AgentDialogK 70?@>A8;8 1@0C75@ %1, => <K =5 <>65< =09B8 ?@>3@0<<C B5@<8=0;0 4;O 53> >B:@KB8O.  =0AB>OI55 2@5<O <K <>65< 70?CAB8BL %1, 8A?>;L7CO A;54CNI85 B5@<8=0;K: <b>roxterm</b> 8 <b>xterm</b>.<br><br>;O ?@>4>;65=8O 20< =C6=> >B:@KBL B5@<8=0; 2@CG=CN 8 70B5< 225AB8: "%1 %2"You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: roxterm and xterm.

To continue you need to manually open a terminal and then enter: "%1 %2" AgentDialog.0?@>A 035=B0 =5 C40;AOAgent Request Failed ConnmanAgentH81:0 Connman Connman Error ConnmanAgentConnman 25@=C; A;54CNICN >H81:C: <b><center>%1</b><br>K E>B8B5 ?>?@>1>20BL A=>20?RConnman returned the following error:
%1
Would you like to retry? ConnmanAgentX0?@>A 035=B0 =5 C40;AO 4> 2>72@0B0 >B:;8:0.5The agent request failed before a reply was returned. ConnmanAgent%L1 109B>2 %L1 BytesConnmanCounter %L1 %L1 GBConnmanCounter %L1 %L1 KBConnmanCounter %L1 %L1 MBConnmanCounter%n ?0:5B%n ?0:5B0%n ?0:5B>2 %Ln Packet(s)ConnmanCounter%n 45=L %n 4=O%n 4=59 %n Day(s)ConnmanCounter %n G0A%n G0A0%n G0A>2 %n Hour(s)ConnmanCounter%n <8=CB0%n <8=CBK%n <8=CB %n Minute(s)ConnmanCounter%n A5:C=40%n A5:C=4K%n A5:C=4 %n Second(s)ConnmanCounter<b>5@540=>:</b><br>A53> TX: %1 (%2), >H81>: TX: %3, ?@>?CI5==KE TX: %4FTransmit:
TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4ConnmanCounterH<br><br><b>@5<O A>548=5=8O:</b><br>

Connect Time:
ConnmanCounter<br><br><b>>;CG5=>:</b><br>A53> RX: %1 (%2), >H81>: RX: %3, ?@>?CI5==KE RX: %4N

Received:
RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4ConnmanCounterX"5E=>;>388 Wi-Fi:<br>=0945=> %1, 2:;NG5=> %2. WiFi Technologies:
%1 Found, %2 Powered ControlBox 2=8<0=85 Warning ControlBox%1 (%2) A5BL%1 (%2) Network ControlBox.%1 - :@8B8G5A:0O >H81:0%1 - Critical Error ControlBox%1 - 2=8<0=85 %1 - Warning ControlBox@%1 6C@=0; 87<5=5=89 =5 4>ABC?5=.%1 change log is not available. ControlBox>8F5=78O %1  MB> ;8F5=78O MIT.%1 license is the MIT license. ControlBox%1 25@A8O %2 by %3 1K;0 >1=0@C65=0 2 MB>9 A8AB5<5.<p>-B>B A5@25@ ?>445@68205B A?5F8D8:0F8N C254><;5=89 @01>G53> AB>;0 25@A88 %4z%1 version %2 by %3 has been detected on this system.

This server supports desktop Notification Specification version %4 ControlBox%15B%1%1 %1Off%1%1 ControlBox%10%1%1%1On%1%1 ControlBox& ?@>3@0<<5&About ControlBox&AwOken&AwOken ControlBox&!GQBG8:8 &Counters ControlBox&>4@>1=>AB8&Details ControlBox &K9B8&Exit ControlBox&!?@02:0&Help ControlBox&5=LH5&Less ControlBox&8F5=78O&License ControlBox&@54?>GB5=8O &Preferences ControlBox&QT&QT ControlBox&!>AB>O=85&Status ControlBox$&5A?@>2>4=K5 A5B8 &Wireless ControlBox...... ControlBox*<b>!>548=5=85:</b> %1Connection: %1 ControlBox"<b>!;C610:</b> %1Service: %1 ControlBox&<br><b>IPv4</b><br>
IPv4
 ControlBox&<br><b>IPv6</b><br>
IPv6
 ControlBox6<br><b>!5@25@K 8<Q=</b><br>
Name Servers
 ControlBox*<br><b>@>:A8</b><br>
Proxy
 ControlBoxH<br><b>>4@>1=>AB8 > A;C615:</b><br>
Service Details:
 ControlBox@<br><b>5A?@>2>4=K5 A5B8</b><br>
Wireless
 ControlBox6<br><br><b>Ethernet</b><br>

Ethernet
 ControlBoxD<br><br><b>><5=K ?>8A:0</b><br> #

Search Domains
 ControlBoxH<br><br><b>!5@25@K 2@5<5=8</b><br> !

Time Servers
 ControlBox<center><b>5 C40;>AL =09B8 A8AB5<=K9 ;>B>: 2 MB>9 A8AB5<5.</b><center><br>-B0 ?@>3@0<<0 2AQ-5IQ <>65B 1KBL 8A?>;L7>20=0 4;O C?@025=8O 20H8<8 A>548=5=8O<8, => 7=0G>: 2 A8AB5<=>< ;>B:5 >B@060BLAO =5 1C45B.<center><br><br>A;8 2K 2848B5 MB> A>>1I5=85 ?@8 703@C7:5 A8AB5<K 8 2K 7=05B5, GB> A8AB5<=K9 ;>B>: 1C45B ?>A;5 703@C7:8 A8AB5<K, ?>?KB09B5AL 70?CAB8BL A >?F859 <b>-w</b> 8 CAB0=>28BL =C6=CN 7045@6:C. ">G=>5 2@5<O >6840=8O 1C45B 7028A5BL >B :>=:@5B=>9 A8AB5<K.

Unable to find a systemtray on this machine.

The program may still be used to manage your connections, but the tray icon will be disabled.


If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the -w switch and set a delay as necessary. The exact wait time will vary from system to system. ControlBox@<center><b>K ?>;CG8;8 >B25B DBUS, A>>1I0NI89 >1 >H81:5 ?@8 ?>?KB:5 A:0=8@>20=8O B5E=>;>389.</b></center><br><br>0720=85 >H81:8: %1<br><br>!>>1I5=85 >H81:8: %2
We received a DBUS reply message indicating an error while trying to scan technologies.


Error Name: %1

Error Message: %2 ControlBox<center>-B0 ?@>3@0<<0 8A?>;L7C5B =01>@ 7=0G:>2 <b>AwOken</b> 25@A88 2.5<br><br>K?CI5= ?>4 ;8F5=7859<br>Creative Commons<br>Attribution-Share Alike 3.0<br>564C=0@>4=0O ;8F5=78O<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>=0G>: CMST  MB> ?@>872>4=0O @01>B0 >B =01>@0 7=0G:>2 AwOken.6
This program uses the AwOken icon set version 2.5

Released under the
Creative Commons
Attribution-Share Alike 3.0
Unported License
http://creativecommons.org/licenses/by-sa/3.0/legalcode
The CMST icon is a derivative work from the AwOken icon set. ControlBox<html><head/><body><p><span style=" font-weight:600;">!?@02:0</span></p><p>!?@02:0 ?> ?@>3@0<<5 2 >A=>2=>< ?@54AB02;5=0 :=>?:>9 &quot;'B> MB>&quot; 2 =86=5< ;52>< C3;C. 06<8B5 MBC :=>?:C 8 70B5< IQ;:=8B5 ?> 8=B5@5ACNI5<C 20A M;5<5=BC. $C=:F8O &quot;'B> MB>&quot; B0:65 4>ABC?=0 G5@57 :>=B5:AB=>5 <5=N =060B85< ?@02>9 :=>?:8 <KH8 =0 :=>?:C, >:=> 8;8 >1;0ABL B5:AB0.</p></body></html>g

Help

Program help is mainly provided by the "What's This" button in the lower left corner. Press the button and then click on an item you are interested in. "What's This" is also available via context menu by right clicking on a button, box or text area.

 ControlBoxL<html><head/><body><p><span style=" font-weight:600;">2B>=><=K9 @568<</span></p><p>2B>=><=K9 @568< ?>:07K205B 3;>10;L=K9 ?0@0<5B@ ?> 2:;NG5=8N 2A5E A5B52KE CAB@>9AB2. :;NG5=85 02B>=><=>3> @568<0 ?@8254QB : >B:;NG5=8N CAB@>9AB2. >340 02B>=><=K9 @568< =5 0:B828@>20=, >B45;L=K5 4;O :064>3> CAB@>9AB20 ?@028;0 >?@545;ONB, 2:;NG0BL ;8 CAB@>9AB2> A=>20. </p><p>@8 02B>=><=>< @568<5 2AQ-5IQ <>6=> 2:;NG0BL B5E=>;>388 2@CG=CN. 0?@8<5@, >B45;L=>5 8A?>;L7>20=85 CAB@>9AB2 Wi-Fi 8;8 Bluetooth <>65B 1KBL @07@5H5=> 2 =5:>B>@KE A8BC0F8OE.</p></body></html>#

OfflineMode

The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not.

During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.

 ControlBox<html><head/><body><p>Connman >B=>A8BAO : CAB@>9AB20< :0: : B5E=>;>38O<.  MB>< ?>;5 1C45B >B>1@060BLAO 8=D>@<0F8O > 2A5E 8725AB=KE B5E=>;>38OE.</p><p>'B>1K 2:;NG8BL 8;8 2K:;NG8BL B5E=>;>38N, =06<8B5 =0 :=>?:C, :>B>@0O >B>1@0605BAO 2 AB>;1F5 <span style=" font-weight:600;">:;NG5=></span> 4;O A>>B25BAB2CNI59 B5E=>;>388.</p></body></html>0

Connman refers to hardware devices as technologies. This box will display information about all known technologies.

To turn a technology on or off click on the button that shows in the Powered column for the technology.

 ControlBoxv<html><head/><body><p>0AB@>9:8 AGQBG8:>2</p></body></html>8

Counter Settings

 ControlBoxZ<html><head/><body><p>!GQBG8:8 4;O &quot;>=;09=>2>9&quot; A;C61K A>548=5=89, :>B>@0O ?><5G5=0 :0: &quot;@>C<8=3&quot;.</p><p> A;CG05 A A>B>2K<8 A5BO<8 MB> >1KG=> >7=0G05B A>548=5=85 A 8=>AB@0==K< ?@>20945@><. </p><p>!GQBG8:8 <>3CB =5 2A5340 1KBL 4>ABC?=K. !GQBG8:8 <>3CB 1KBL >B:;NG5=K 87 :><0=4=>9 AB@>:8 (-c 8;8 --disable-counters) 8;8 A;CG09=> A>548=5=85 1C45B 70@538AB@8@>20=> :0: &quot;3>B>2>5&quot; 2<5AB> &quot;>=;09=&quot;. =;09=  MB> &quot;3>B>2>5&quot; A>548=5=85, :>B>@>5 8<55B ?@>25@5==>5 A>548=5=85 A 8=B5@=5B><. =;09= <>6=> 1KBL B>;L:> A &quot;3>B>2K<&quot; A>548=5=85<, >4=0:> AGQBG8:8 1C4CB @01>B0BL B>;L:> A &quot;>=;09=>2K<8&quot; A>548=5=8O<8.</p></body></html>

Counters for the "online" service connection marked "roaming".

In the case of cellular services this normally indicates connections to a foreign provider.

Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register "ready" instead of "online". Online is a "ready" connection that has verified internet connectivity. It is possible to be online with only a "ready" connection, however the counters only work for they "online" connection.

 ControlBox<html><head/><body><p>!GQBG8:8 4;O &quot;>=;09=>2>9&quot; A;C61K A>548=5=89, :>B>@0O =5 ?><5G5=0 :0: @>C<8=3. </p><p>!GQBG8:8 <>3CB =5 2A5340 1KBL 4>ABC?=K. !GQBG8:8 <>3CB 1KBL >B:;NG5=K 87 :><0=4=>9 AB@>:8 (-c 8;8 --disable-counters) 8;8 A;CG09=> A>548=5=85 1C45B 70@538AB@8@>20=> :0: &quot;3>B>2>5&quot; 2<5AB> &quot;>=;09=&quot;. =;09=  MB> &quot;3>B>2>5&quot; A>548=5=85, :>B>@>5 8<55B ?@>25@5==>5 A>548=5=85 A 8=B5@=5B><. =;09= <>6=> 1KBL B>;L:> A &quot;3>B>2K<&quot; A>548=5=85<, >4=0:> AGQBG8:8 1C4CB @01>B0BL B>;L:> A &quot;>=;09=>2K<8&quot; A>548=5=8O<8.</p></body></html>9

Counters for the "online" service connection that is not marked roaming.

Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register "ready" instead of "online". Online is a "ready" connection that has verified internet connectivity. It is possible to be online with only a "ready" connection, however the counters only work for they "online" connection.

 ControlBox<html><head/><body><p>> C<>;G0=8N =5 8A?>;L7C5BAO :>4 4;O :>=:@5B=>3> >:@C65=8O @01>G53> AB>;0.</p></body></html>L

Default is no desktop specific code.

 ControlBox<html><head/><body><p>B:;NG5=>, ?>A:>;L:C A59G0A Connman ?@8<5B MBC =0AB@>9:C, => =8G53> =5 A45;05B A =59.</p></body></html>

Disabled because currently Connman will accept this option but will do nothing with it.

 ControlBox <html><head/><body><p>>:070BL 480;>3>2>5 >:=>, A>45@60I55 8=D>@<0F8N =01>@5 7=0G:>2, 8A?>;L7C5<KE MB>9 ?@>3@0<<>9. </p></body></html>}

Display a dialog box containing information about the Icon set used in this program.

 ControlBoxB<html><head/><body><p>B>1@0605B 480;>3>2>5 >:=>, A>45@60I55 8=D>@<0F8N > =01>@5 8=AB@C<5=B>2 QT, 8A?>;L7>20==>< 4;O @07@01>B:8 MB>9 ?@>3@0<<K.</p></body></html>

Display a dialog box containing information about the QT toolkit used to develop this program.

 ControlBox<html><head/><body><p>>:07K205B 480;>3, A>45@60I89 8=D>@<0F8N >1 MB>9 ?@>3@0<<5. </p></body></html>h

Display a dialog box containing information about this program.

 ControlBoxb<html><head/><body><p>K9B8 87 ?@>3@0<<K 8 C1@0BL 7=0G>: 87 A8AB5<=>3> ;>B:0. Connman 2AQ-5IQ 1C45B 70?CI5= :0: 45<>=, => =5 1C45B C?@02;OBLAO MB>9 ?@>3@0<<>9.</p></body></html>

Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.

 ControlBox<html><head/><body><p>@8=C48B5;L=>5 A:0=8@>20=85 2A5E B5E=>;>389 WiFi.  01>B05B 845=B8G=> :><0=45 <span style=" font-weight:600;">connmanctl scan wifi</span> 87 :><0=4=>9 AB@>:8.</p><p>=>?:0 1C45B =50:B82=>9, ?>:0 ?@>8AE>48B A:0=8@>20=85.</p></body></html>

Force a rescan of all WiFi technologies. This is similar to issuing the command connmanctl scan wifi from the command line.

The button will become inactive while the scan is occuring.

 ControlBox<html><head/><body><p>!?@OB0BL ?>;5 !>548=5=85</p></body></html>A

Hide the connection field

 ControlBox<html><head/><body><p>0:>9 =01>@ 7=0G:>2 8A?>;L7>20BL. 'B>1K 2K <>3;8 8A?>;L7>20BL MB>B =01>@, >= 4>;65= 1KBL CAB0=>2;5= 2 A8AB5<5. A;8 =01>@ =5 CAB0=>2;5=, 8;8 2K =0?8A0;8 =0720=85 =5?@028;L=>, CMST 1C45B 8A?>;L7>20BL 2=CB@5==89 =01>@ 7=0G:>2.</p><p> A;8 MB> ?>;5 ?CAB>5, CMST ?>?KB05BAO 8A?>;L7>20BL >1I5A8AB5<=CN B5<C 7=0G:>2 (5A;8 >=0 >?@545;5=0).</p></body></html>L

Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.

If this box is blank CMST will try and use the system wide icon theme (if one is defined).

 ControlBox(<html><head/><body><p>A;8 C A;C61K Connman 1C45B &quot;A1>9&quot;, >=0 ?> C<>;G0=8N 1C45B >AB020BLAO 2 MB>< A>AB>O=88.</p><p>A;8 745AL AB>8B D;06>:, CMST 02B><0B8G5A:8 ?>?KB05BAO ?5@5?>4:;NG8BLAO : A;C615 WiFi, =0E>4OI59AO 2 A>AB>O=88 A1>O&quot;A1>O&quot;.</p></body></html>

If a Connman service falls into the "Failed" state it will normally remain in that state.

If this box is checked CMST will try to automatically reconnect a WiFi service that enters the "Failed" state.

 ControlBoxD<html><head/><body><p>A;8 ?>AB02;5=0 30;>G:0, CMST ?><5AB8B M;5<5=B 2 ?0?:C 02B>70?CA:0 B5:CI53> ?>;L7>20B5;O, A=OB85 30;>G:8 C40;8B MB>B M;5<5=B. 1KG=> MB> ?0?:0: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST 4>1028B 8;8 C40;8B B>;L:> .desktop-D09; 87 ?0?:8 02B>70?CA:0. 2B>70?CA: >1KG=> 7028A8B >B 20H53> >:@C65=8O @01>G53> AB>;0 8 4>;65= 1KBL 2:;NGQ= >BAN40.</p></body></html>

If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: ${HOME}/.config/autostart.

CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.

 ControlBox<html><head/><body><p>A;8 ?>AB02;5= D;06>:, 7=0G>: 7=0G>: =5 1C45B >B>1@060BLAO 2 A8AB5<=>< ;>B:5.</p></body></html>f

If checked an icon will not be displayed in the system tray.

 ControlBox<html><head/><body><p>A;8 CAB0=>2;5= D;06>:, >B>1@065=85 ?>4A:07>: 1C45B 2:;NG5=> 4;O 28465B>2 8=B5@D59A0.</p><p>>4A:07:8  MB> =51>;LH85 2A?;K20NI85 >:=0, :>B>@K5 ?>O2;ONBAO ?@8 =02545=88 C:070B5;O <KH8 =0 >1;0ABL 8=B5@D59A0. </p></body></html>

If checked the display of tooltips will be enabled for the interface widgets.

Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface.

 ControlBox<html><head/><body><p>A;8 CAB0=>2;5= D;06>:, B> A8AB5<=K9 45<>= C254><;5=89 ?>:065B ?@54C?@5645=85, :>340 1C45B ?>;CG5=> 7=0G8B5;L=>5 A>1KB85 >B connman.</p><p>#254><;5=8O <>3CB 1KBL >1@01>B0=K A 8A?>;L7>20=85< 7=0G:0 2 A8AB5<=>< ;>B:5 8;8 45<>=>< C254><;5=89, 5A;8 >= CAB0=>2;5=. 10 A?>A>10 =5 <>3CB 1KBL 0:B82=K<8 2 >4=> 8 B> 65 2@5<O.</p></body></html>A

If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.

Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.

 ControlBox0<html><head/><body><p>A;8 ?>AB02;5= D;06>:, 2 A8AB5<=>< ;>B:5 1C45B ?>O2;OBLAO A>>1I5=8O > A>AB>O=88 ?@8 =02545=88 =0 7=0G>: :C@A>@0.</p></body></html>

If checked the system tray icon will popup a status message when you hover the mouse over it.

 ControlBox<html><head/><body><p>A;8 CAB0=>2;5= D;06>:, B> A8AB5<=K9 ;>B>: ?>:065B A>>1I5=85, :>340 1C45B ?>;CG5=> 7=0G8B5;L=>5 A>1KB85 >B connman.</p><p>#254><;5=8O <>3CB 1KBL >1@01>B0=K A 8A?>;L7>20=85< 7=0G:0 2 A8AB5<=>< ;>B:5 8;8 45<>=>< C254><;5=89, 5A;8 >= CAB0=>2;5=. 10 A?>A>10 =5 <>3CB 1KBL 0:B82=K<8 2 >4=> 8 B> 65 2@5<O.</p></body></html>%

If checked the system tray will popup a notify message when a significant connman related event is received.

Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.

 ControlBox<html><head/><body><p>!25@=CBL MB>B 480;>3. A;8 C 20A >B>1@>605BAO 7=0G>: 2 A8AB5<=>< ;>B:5, MB>B 480;>3 <>65B 1KBL 2>AAB0=>2;5= =060B85< ?@02>9 :=>?:8 <KH8 =0 MB>< 7=0G:5. A;8 7=0G>: 2 A8AB5<=>< ;>B:5 A?@OB0=, B> A2>@0G820=85 =5 1C45B 4>ABC?=>.</p></body></html>

Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.

 ControlBox(<html><head/><body><p>5@5<5AB8BL 2K1@0==CN A;C61C ?>A;5 4@C3>9 2 A?8A:5.</p><p>=>?:0 AB0=5B 0:B82=>9 B>;L:> ?>A;5 2K1>@0 A;C61K.</p></body></html>

Move the selected service after another in the list.

The button will only become active once a service is selected.

 ControlBox(<html><head/><body><p>5@5<5AB8BL 2K1@0==CN A;C61C ?5@54 4@C3>9 2 A?8A:5.</p><p>=>?:0 AB0=5B 0:B82=>9 B>;L:> ?>A;5 2K1>@0 A;C61K.</p></body></html>

Move the selected service before another in the list.

The button will only become active once a service is selected.

 ControlBox<html><head/><body><p>1KG=> AGQBG8:8 254CB CGQB =0@0AB0NI8< 8B>3><, 0 B0:65 A>E@0=ONB 2@5<O ?>4:;NG5=8O 8 G8A;> TX 8 RX <564C 703@C7:0<8. </p><p>>340 MB>B D;06>: CAB0=>2;5=, B> AG5BG8:8 1C4CB A1@0AK20BLAO 4> =C;O :064K9 @07, :>340 CMST 70?CA:05BAO, 8 5A;8 CMST 2K?>;=O5BAO :064K9 @07, :>340 70?CI5=0 A;C610 Connman. </p></body></html>.

Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots.

When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started.

 ControlBox<html><head/><body><p>B:@KBL @540:B>@ :>=D83C@0F88 4;O A>740=8O 8;8 @540:B8@>20=8O D09;>2 =0AB@>9:8 (?>43>B>2:8 : @01>B5) Connman.</p><p>-B8 D09;K =0E>4OBAO 2 /var/lib/connman, 2;O45;LF5< :>B>@>9 O2;O5BAO root:root. CMST 70@535AB@8@C5B roothelper 4;O ?>;CG5=8O @07@5H5=8O =0 70?8AL 8 GB5=85 D09;>2 2 MBC ?0?:C. </p><p>;O 871560=8O 7;>C?>B@51;5=85< ?@020<8 AC?5@?>;L7>20B5;O, @540:B>@ 1C45B @01>B0BL B>;L:> A D09;0<8, 70:0=G820NI8<8AO =0 <span style=" font-style:italic;">.cmst.config</span>. -B> >:>=G0=85 8<5=8 D09;0 1C45B 7040=> 02B><0B8G5A:8 2> 2@5<O A>E@0=5=8O D09;0 8 =5 <>65B 1KBL 87<5=5=>. </p><p>! ?><>ILN MB>3> @540:B>@0 =52>7<>6=> 87<5=8BL 8;8 C40;8BL D09;K =0AB@>9:8, A>740==K5 A ?><>ILN 4@C38E A@54AB2.</p></body></html>

Open the provisioning editor to create or edit Connman configuration (provisioning) files.

These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory.

To avoid abusing the root privileges the editor will only operate on files with names ending in .cmst.config. This file name ending will be added automatically during a file save and cannot be altered.

Using this editor it is not possible to edit or delete config files created by other means.

 ControlBox<html><head/><body><p>@54?>GB5=8O 4;O 8=B5@D59A0 =0E>4OBAO 2 MB>< ?>;5.</p></body></html>V

Preferences for the interface are in this box.

 ControlBox<html><head/><body><p>@54?>GB5=8O 4;O A8AB5<=>3> ;>B:0 =0E>4OBAO 2 MB>< ?>;5.</p></body></html>X

Preferences for the system tray are in this box.

 ControlBox<html><head/><body><p>K15@8B5 A;C61C Wi-Fi 2 B01;8F5 =865, 8 =06<8B5 MBC :=>?:C, GB>1K ?>4:;NG8BLAO : MB>9 A;C615. </p><p>A;8 2 B01;8F5 B>;L:> >4=0 A;C610 wifi, B> ?@8 =060B88 MB>9 :=>?:8 MB0 A;C610 2K15@5BAO 02B><0B8G5A:8 8 : =59 1C45B ?@54?@8=OB0 ?>?KB:0 ?>4:;NG5=8O. </p><p>A;8 1C45B =C6=0 8=D>@<0F8O > A;C615, ?0@>;L, =0?@8<5@, 20< 1C45B ?@54;>65=> 225AB8 53>.</p></body></html>{

Select a wifi service in the table below and press this button to connect the service.

If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect.

If information about the service is needed, a passphrase for instance, you will be prompted for it.

 ControlBox<html><head/><body><p>K15@8B5 Wi-Fi A;C61C 2 B01;8F5 A=87C 8 =06<8B5 MBC :=>?:C, GB>1K >B:;NG8BLAO >B =5Q. </p><p>A;8 5ABL B>;L:> >4=0 Wi-Fi A;C610 2 A>AB>O=88 &quot;>B>20&quot; 8;8 &quot;=;09=&quot;, =060B85 =0 MB5 :=>?:C 02B><0B8G5A:8 2K15@5B 5Q 8 >B:;NG8BAO >B =5Q. </p><p>-B> B0:65 <>65B 1KBL 8A?>;L7>20=> 4;O >B<5=K ?@54K4CI59 ?>?KB:8 A>548=5=8O.</p></body></html>j

Select a wifi service in the table below and press this button to disconnect it.

If there is only one wifi service in the "ready" or "online" state pressing this button will automatically select that service and disconnect it.

This may also be used to abort a previous connection attempt.

 ControlBox<html><head/><body><p>K15@8B5 A;C61C Wi-Fi 2 B01;8F5 =865, 8 =06<8B5 MBC :=>?:C, GB>1K C40;8BL MBC A;C61C. </p><p>A;8 A;C610 1K;0 @0=55 CA?5H=> ?>4:;NG5=0 (O2;O5BAO 71@0==>9), MB0 :=>?:0 C40;8B AB0BCA 71@0==>9. !;C610 B0:65 1C45B >B:;NG5=0, 5A;8 >=0 2 <><5=B =060B8O ?>4:;NG5=0. A;8 CA;C35 B@51C5BAO ?0@>;L B> ?0@>;L 1C45B A=OB 8 701KB </p><p>A;8 ?>?KB:0 ?>4:;NG5=8O =5 C40;0AL, B> MB> B0:65 <>65B 8A?>;L7>20BLAO 4;O A1@>A0 A;C61K.</p></body></html>

Select a wifi service in the table below and press this button to remove the service.

If a service has previously been sussessfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.

If a connection attempt failed this can slso be used to reset the service.

 ControlBox,<html><head/><body><p>#:068B5 >1J5< 40==KE 2 :8;>109B0E, :>B>@K9 4>;65= 1KBL ?5@540= 4> >1=>2;5=8O AG5BG8:>2 (?> C<>;G0=8N 1024 ).</p></body></html>

Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).

 ControlBoxV<html><head/><body><p>#:068B5 >1J5< 40==KE 2 :8;>109B0E, :>B>@K9 4>;65= 1KBL ?5@540= 4> >1=>2;5=8O AG5BG8:>2 (?> C<>;G0=8N 1024 ).</p><p>Connman ?@8<5B MB>B ?0@0<5B@, => A>3;0A=> :><<5=B0@8N 2 :>45 Connman MB0 DC=:F8O 2AQ 5IQ B@51C5B @07@01>B:8, 8 2K1>@, A;54>20B5;L=>, >B:;NG5=.</p></body></html>A

Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).

Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.

 ControlBox<html><head/><body><p>#:068B5 F25B D>=0, :0: H5AB=04F0B5@8G=>5 G8A;> 2 D>@<0B5 RRGGBB.</p></body></html>k

Specify the background color as a hex number in the format: RRGGBB.

 ControlBox<html><head/><body><p>#:068B5 G0AB>BC 2 A5:C=40E <564C >1=>2;5=8O<8 ?>:070=89 AGQBG8:0 (?> C<>;G0=8N 0 A5:C=4).</p></body></html>z

Specify the frequency in seconds between counter updates (default is 10 seconds).

 ControlBox<html><head/><body><p>#:068B5 2@5<O >6840=8O 2 A5:C=40E ?5@54 70?CA:>< 7=0G:0 2 A8AB5<=>< ;>B:5 (?> C<>;G0=8N 0 A5:C=4).</p></body></html>

Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).

 ControlBoxl<html><head/><body><p>5B>4 =0AB@>9:8 ?> C<>;G0=8N 4;O 2A5E A;C61  02B><0B8G5A:89 8;8 GB>-B> 2@>45 DHCP. = 4>;65= ?>4E>48BL 4;O 1>;LH8=AB20 ?>;L7>20B5;59, 2 ?@>B82=>< A;CG05 MB0 :=>?:0 ?>72>;8B @CG=CN =0AB@>9:C ?0@0<5B@>2 Ethernet 8 IP 4;O 2K1@0==>9 A;C61K.</p><p>-B0 :=>?:0 1C45B =50:B82=0, 5A;8 A;C610 :>=D83C@8@C5BAO 2=5H=8< D09;>< 8;8 5A;8 A;C610  MB> A:@KB0O Wi-Fi A5BL. !2>9AB20 B0:8E A;C61 =52>7<>6=> 87<5=8BL.</p></body></html>

The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.

This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.

 ControlBoxp<html><head/><body><p>1I55 A>AB>O=85 ?>4:;NG5=8O A8AB5<K. >7<>6=K5 7=0G5=8O: &quot;>D;09=&quot;, &quot;?@>AB08205B&quot;, &quot;3>B>2>&quot;, 8 &quot;>=;09=&quot;. </p></body></html>

The global connection state of the system. Possible values are "offline", "idle", "ready", and "online".

 ControlBox<html><head/><body><p>;>10;L=K9 ?0@0<5B@ 4;O 2:;NG5=8O 8 2K:;NG5=8O 2A5E A5B52KE CAB@>9AB2. >340 02B>=><=K9 @568< 0:B828@>20=, 2A5 A5B52K5 CAB@>9AB20 >B:;NG0NBAO.</p><p>While in offline mode it is possible to turn individual devices back on. @8 2KE>45 87 02B>=><=>3> @568<0 >B45;L=K5 ?@028;0 4;O :064>3> CAB@>9AB20 >?@545;ONB, 2:;NG8BAO ;8 >=> A=>20.</p></body></html>X

The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.

While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.

 ControlBox<html><head/><body><p>-BC A;C61C >BA;56820NB AGQBG8:8.</p></body></html>T

The service being monitored by the counters.

 ControlBox\<html><head/><body><p>>@>3>2K5 7=0G5=8O 4;O >1=>2;5=8O ?>:070=89 AGQBG8:>2 (@07@5H5=85 AGQBG8:0). ;O MB>3> CG8BK205BAO :0: :>;8G5AB2> 40==KE, B0: 8 2@5<O.</p></body></html>

The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.

 ControlBox<html><head/><body><p>-B8 =0AB@>9:8 :>=B@>;8@CNB @07;8G=K5 >?F88 ?@8 703@C7:5 CMST. </p><p>A5 MB8 >?F88 4>ABC?=K 87 :><0=4=>9 AB@>:8, 8 5A;8 >=8 7040=K 2 :><0=4=>9 AB@>:5, B> >=8 ?>;CG0NB ?@58<CI5AB2> =04 MB8<8 =0AB@>9:0<8.</p></body></html>

These entries control various options for CMST at program start.

All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.

 ControlBox<html><head/><body><p> MB>< ?>;5 ?5@5G8A;5=K 2A5 A;C61K, : :>B>@K< connman <>65B ?>4:;NG8BLAO.</p></body></html>`

This box lists all services that connman can connect to.

 ControlBox<html><head/><body><p>-B>B D;06>: C?@02;O5B 3;>10;L=K< ?0@0<5B@>< ?> 2:;NG5=8N 8;8 2K:;NG5=8N 2A5E A5B52KE CAB@>9AB2. >340 D;06>: CAB0=>2;5=, CAB@>9AB20 2K:;NG5=K.</p><p>>340 A8AB5<0 =0E>48BAO 2 02B>=><=>< @568<5, <>6=> 2:;NG8BL >B45;L=K5 CAB@>9AB20. @8 2KE>45 87 02B>=><=>3> @568<0 >B45;L=K5 ?@028;0 4;O :064>3> CAB@>9AB20 >?@545;ONB, 2:;NG8BAO ;8 >=> A=>20.</p></body></html>l

This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.

When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.

 ControlBox<html><head/><body><p>-B0 <5B:0 ?>:07K205B :>;8G5AB2> Wi-Fi B5E=>;>389 (CAB@>9AB2), :>B>@K5 1K;8 =0945=K, 8 :>;8G5AB2> B5E=>;>389, :>B>@K5 2:;NG5=K. >;6=0 1KBL =0945=0 8 2:;NG5=0 :0: <8=8<C< >4=0 B5E=>;>38O Wi-Fi 4;O B>3>, GB>1K 2 ?>;5 A=87C >B>1@060;8AL CA;C38</p><p>'B>1K 2:;NG8BL 8 2K:;NG8BL B5E=>;>38N, ?5@5948B5 : B01;8F5 <span style=" font-weight:600;">"5E=>;>388</span> =0 2:;04:5 <span style=" font-weight:600;">!>AB>O=85</span> 8 A45;09B5 42>9=>5 =060B85 <KHLN ?> B5:ABC 2 AB>;1F5 <span style=" font-weight:600;">:;NG5=></span> 4;O MB>9 B5E=>;>388.</p></body></html>

This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.

To turn a technology on or off go to the Technologies box in the Status tab and double click on the text that shows in the Powered column for the technology.

 ControlBox~<html><head/><body><p>0 MB>9 AB@0=8F5 ?>:070=K 4>ABC?=K5 A;C61K Wi-Fi. </p><p><span style=" font-weight:600;"><O:</span> SSID A5B8.</p><p><span style=" font-weight:600;">71@0==>5:</span> A><2>; A5@4F0 2 MB>< AB>;1F5 >7=0G05B, GB> MB>B :><?LNB5@ @0=55 ?>4:;NG0;AO : A5B8 G5@57 MBC A;C61C.</p><p><span style=" font-weight:600;">>4:;NG5=>:</span> ?>:07K205B A>AB>O=85 A>548=5=8O MB>9 A;C61K. 02548B5 :C@A>@ =0 7=0G>:, GB>1K C2845BL 2A?;K20NI55 B5:AB>2>5 >?8A0=85. =;09= >7=0G05B, GB> A>548=5=8O A 8=B5@=5B>< 4>ABC?=K 8 1K;8 ?@>25@5=K. >B>2 >7=0G05B CA?5H=> ?>4:;NGQ==>5 CAB@>9AB2>. </p><p><span style=" font-weight:600;">57>?0A=>ABL: </span>>?8AK205B B8?K H8D@>20=8O, 8A?>;L7C5<K5 MB>9 A;C61>9. >7<>6=K5 7=0G5=8O &quot;=5B&quot;, &quot;WEP&quot;, &quot;PSK&quot;, &quot;IEEE 8021.X&quot; 8 &quot;WPS&quot;.</p><p><span style=" font-weight:600;">!8;0 A83=0;0:</span> A8;0 A83=0;0 Wi-Fi, =>@<0;87>20==0O ?> H:0;5 >B 0 4> 100.</p><p><br/></p></body></html>

This page shows the known WiFi services.

Name: The SSID of the network.

Favorite: A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.

Connected: Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device.

Security: Describes the type of security used for this service. Possible values are "none", "wep", "psk", "ieee8021x", and "wps".

SIgnal Strength: The strength of the WiFi signal, normalized to a scale of 0 to 100.


 ControlBox<html><head/><body><p>A?>;L7>20BL :>4, A?5F8D8G=K9 4;O 2K1@0==>3> >:@C65=8O @01>G53> AB>;0.</p><p>0G8=0O A 25@A88 2014.11.24 :065BAO ACI5AB2C5B ?@>1;5<0 A Qt 5.3 8 =5:>B>@K<8 A8AB5<=K<8 ;>B:0<8.  ?@>3@0<<5 5ABL :>4, A?><>ILN :>B>@>3> <>6==> ?>?KB0BLAO >1>9B8 MBC ?@>1;5<C, 8 2K1>@ >4=>3> 87 MB8E ?C=:B>2 ?@8<5=8B :>4, A?5F8D8G=K9 4;O >:@C65=8O @01>G53> AB>;0.</p><p>A;8 >H81:0 1C45B CAB@0=5=0, MB8 >?F88 >AB0=CBAO 4;O B>3>, GB>1K =5 ?>@B8BL 703@C7>G=K9 A:@8?B, => >=8 C65 =5 1C4CB =8 =0 GB> 2;8OBL.</p></body></html>

Use code specific for the selected desktop environment.

As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.

If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.

 ControlBox<<html><head/><body><p>A?>;L7C9B5 MB>B 2K?040NI89 A?8A>:, GB>1K 2K1@0BL A;C61C, 4;O :>B>@>9 2K E>B8B5 ?@>A<>B@5BL ?>4@>1=CN 8=D>@<0F8N.<br/></p></body></html>

Use this Combobox to select the service for which you wish to view the detailed information.

 ControlBox<html><head/><body><p>A?>;L7C9B5 MBC :=>?:C, GB>1K C7=0BL >1 M;5<5=B5 GUI G5@57 @568< &quot;'B> MB>&quot;. </p><p>K B0:65 <>65B5 =060BL ?@02CN :=>?:C <KH8 =0 M;5<5=B5, GB>1K C2845BL B5:AB &quot;'B> MB>&quot; 4;O =53>.</p></body></html>

Use this button to find information about an element in the GUI by entering "What's This" mode.

You may also right click on an element to show the "What's This" text for it.

 ControlBox<html><head/><body><p>A?>;L7C9B5 MBC :=>?:C, GB>1K C2845BL 6C@=0; 87<5=5=89 MB>9 ?@>3@0<<K.</p></body></html>^

Use this button to view the change log of the program.

 ControlBox<html><head/><body><p>A?>;L7C9B5 MBC :=>?:C, GB>1K C2845BL ;8F5=78N =0 MBC ?@>3@0<<C.</p></body></html>T

Use this button to view the program license.

 ControlBox^<html><head/><body><p>'B> MB></p></body></html>3

What's This

 ControlBox<html><head/><body><p>>340 AB>8B D;06>:, >B>1@060NBAO 4>?>;=8B5;L=K5 =0AB@>9:8 4;O >?KB=KE ?>;L7>20B5;59.</p></body></html>j

When checked additional controls for advanced users are displayed.

 ControlBox<html><head/><body><p>>340 AB>8B D;06>:, ?@OG5B 8<O A>548=5=8O 2 ?>;5 !;C61K.</p></body></html>b

When checked hide the connection name in the Services box.

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">0@0<5B@ :><0=4=>9 AB@>:8: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>#:068B5 G0AB>BC 2 A5:C=40E <564C >1=>2;5=8O<8 AGQBG8:0 (?> C<>;G0=8N 10 A5:C=4). </p></body></html>
Command Line Option: --counter-update-rate

Specify the frequency in seconds between counter updates (default is 10 seconds).

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">0@0<5B@ :><0=4=>9 AB@>:8: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>A?>;L7C5BAO 4;O >1E>40 >H81:8 Qt, 87-70 :>B>@>9 7=0G:8 2 A8AB5<=>< ;>B:5 >B>1@0605BAO A 15;K< 8;8 GQ@=K< D>=>< 2<5AB> ?@>7@0G=>3>.</p><p>K <>65B5 C:070BL 745AL F25B D>=0 7=0G:0. $>@<0B  H5AB=04F0B8@8G=>5 G8A;> RRGGBB. A;8 C:070==K9 F25B A>2?0405B A D>=>< A8AB5<=>3> ;>B:0, 7=0G8B <K :0G5AB25==> A>740;8 ?A524>?@>7@0G=>ABL. </p></body></html>
Command Line Option: --fake-transparency

Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.

You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency.

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">0@0<5B@ :><0=4=>9 AB@>:8: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html>D
Command Line Option: --use-mate
 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">0@0<5B@ :><0=4=>9 AB@>:8: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html>D
Command Line Option: --use-xfce
 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">0@0<5B@ :><0=4=>9 AB@>:8: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> 8;8 </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>B:;NG8BL 7=0G>: 2 A8AB5<=>< ;>B:5.</p><p>>65B ?>=04>18BLAO A8AB5<0<, =5A>2<5AB8<K< A> A?5F8D8:0F859 Freedesktop.org.</p></body></html>
Command Line Option: -d or --disable-tray-icon

Disable the system tray icon.

May be needed for system trays not compliant with the Freedesktop.org system tray specification.

 ControlBox0<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">0@0<5B@ :><0=4=>9 AB@>:8: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> 8;8 </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>A?>;L7>20BL A8AB5<=K9 =01>@ 7=0G:>2. K <>65B5 2K1@0BL =01>@ 2 ?>;5 A?@020 8;8, 5A;8 ?>;5 A;520 >AB02;5=> ?CABK<, CMST ?>?KB05BAO 8A?>;L7>20BLA8AB5<=K9 =01>@ 7=0G:>2 (5A;8 >= >?@545;Q=).</p></body></html>
Command Line Option: -i or --icon-theme

Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">0@0<5B@ :><0=4=>9 AB@>:8: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> 8;8 </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>0?CAB8BL 3@0D8G5A:89 ?>;L7>20B5;LA:89 8=B5@D59A A2Q@=CBK< 2 A8AB5<=K9 ;>B>:.</p></body></html>"
Command Line Option: -m or --minimized

Start the GUI minimized in the system tray.

 ControlBox<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">0@0<5B@ :><0=4=>9 AB@>:8: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> 8;8 </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>#:068B5 2@5<O >6840=8O 2 A5:C=40E ?5@54 70?CA:>< 7=0G:0 2 A8AB5<=>< ;>B:5 (?> C<>;G0=8N 0 A5:C=4).</p><p>A;8 CMST 70?CI5= 8 ?KB05BAO A>740BL 7=0G>: 2 A8AB5<=>< ;>B:5 4> 70?CA:0 A8AB5<=>3> ;>B:0, 1C45B >B>1@06Q= 480;>3, >1JOA=ONI89 MB>. -B> 8=>340 ?@>8AE>48B, :>340 ?@>3@0<<0 70?CA:05BAO 02B><0B8G5A:8. A;8 2K 7=05B5, GB> A8AB5<=K9 ;>B>: 1C45B 703@C65= ?@8 70?CA:5 A8AB5<K, 2K <>65B5 C:070BL 2@5<O >6840=8O 8 CMST 1C45B 640BL C:070==>5 :>;8G5AB2> A5:C=4 ?5@54 B5< :0: A>740BL 7=0G>: 2 A8AB5<=>< ;>B:5. -B> =C6=> 4;O B>3>, GB>1K 40BL 2@5<O >:>==><C <5=5465@C 8;8 ?0=5;8 =0 A>740=85 A8AB5<=>3> ;>B:0 ?5@54 ?>?KB:>9 ?><5I5=8O 2 =53> 7=0G:0.</p></body></html>2
Command Line Option: -w or --wait-time

Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).

If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.

 ControlBox:<html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">0@0<5B@ :><0=4=>9 AB@>:8: <span style=" font-weight:600;">-c</span> 8;8 <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>B:;NG8BL AGQBG8:8. >65B 1KBL 8A?>;L7>20=> 4;O <8=8<870F88 =03@C7:8 =0 A8AB5<C.</p></body></html>
Command Line Option: -c or --disable-counters

Disable the counters. May be used to minimize load on your system.

 ControlBox %1About %1 ControlBox AwOken About AwOken ControlBox0>;CG5=85 04@5A0: %1<br>Address Acquisition: %1
 ControlBox* 0AH8@5==K5 =0AB@>9:8Advanced Controls ControlBox2&B:;NG8BL 2A5 CAB@>9AB20All Devices &Off ControlBoxZ>?KB:0 %1 87 4-E ?>8A:0 A5@25@0 C254><;5=89.0Attempt %1 of 4 looking for notification server. ControlBox22B>?>4A>548=5=85: %1<br>Auto Connect: %1
 ControlBox C&MSTC&MST ControlBox B<5=0Cancel ControlBox"C&@=0; 87<5=5=89 ChangeLo&g ControlBox C@=0; 87<5=5=89 ChangeLog ControlBox0AB@>9:0 Configuration ControlBox>4:;NG8BLAOConnect ControlBox>4:;NG5=> Connected ControlBox!>548=5=85 Connection ControlBox4!?>A>1 ?>4:;NG5=8O: %1<br>Connection Method: %1
 ControlBox!>548=5=85 2 =5@01>B>A?>A>1=>< A>AB>O=88, ?>?KB:0 ?5@5?>4:;NG5=8OLConnection is in the Failure State, attempting to reestablish the connection ControlBoxR!>548=5=85 2 =5@01>B>A?>A>1=>< A>AB>O=88.#Connection is in the Failure State. ControlBoxD!>548=5=85 2 A>AB>O=88 3>B>2=>AB8.!Connection is in the Ready State. ControlBox>!>AB>O=85 A>548=5=8O =58725AB=>Connection status is unknown ControlBox!>548=5=85: %1Connection: %1 ControlBoxt5 C40;>AL A>740BL 8=B5@D59A 4;O connman =0 A8AB5<=>9 H8=5:Could not create an interface to connman on the system bus ControlBoxZ5 C40;>AL =09B8 ?>4:;NG5=85 : A8AB5<=>9 H8=5-Could not find a connection to the system bus ControlBox01=>2;5=85 AGQBG8:>2, Counter Update KB ControlBox:'0AB>B0 >1=>2;5=8O AGQBG8:>2 Counter Update Rate  ControlBox*!GQBG8:8 =5 4>ABC?=K.Counter not available. ControlBoxN;O :>=:@5B=KE >:@C65=89 @01>G53> AB>;0Desktop Specific ControlBox04@5A CAB@>9AB20: %1<br>Device Address: %1
 ControlBox 80;>3Dialog ControlBox$B:;NG8BL AGQBG8:8Disable Counters ControlBoxDB:;NG8BL 7=0G>: 2 A8AB5<=>< ;>B:5Disable Tray Icon ControlBox=5 0:B828@>20=Disabled ControlBoxBA>548=8BLAO Disconnect ControlBox &K9B8E&xit ControlBox&:;NG8BL 02B>70?CA:Enable Autostart ControlBox 07@5H8BL 2A?;K20NI85 C254><;5=8O ?@8 =02545=88 =0 7=0G>: 2 A8AB5<=>< ;>B:5Enable System Tray Popups ControlBox` 07@5H8BL 2A?;K20NI85 ?>4A:07:8 (4;O 8=B5@D59A0)Enable ToolTips (Interface) ControlBox:;NG5=0Enabled ControlBox0:B828@>20=Engaged ControlBoxnH81:0 GB5=8O 8;8 0=0;870 connman.Manager.GetProperties6Error reading or parsing connman.Manager.GetProperties ControlBoxjH81:0 GB5=8O 8;8 0=0;870 connman.Manager.GetServices4Error reading or parsing connman.Manager.GetServices ControlBoxrH81:0 GB5=8O 8;8 0=0;870 connman.Manager.GetTechnologies8Error reading or parsing connman.Manager.GetTechnologies ControlBoxNH81:0 ?@8 ?>;CG5=88 A2>9AB2 G5@57 Dbus$Error retrieving properties via Dbus ControlBox.!>548=5=85 Ethernet<br>Ethernet Connection
 ControlBox>A:;NG0O:<br>&nbsp;&nbsp;%1<br>Excludes:
  %1
 ControlBox:=5H=89 D09; =0AB@>5:: %1<br>#External Configuration File: %1
 ControlBox$A524>?@>7@0G=>ABLFake Transparency ControlBox71@0==>5Favorite ControlBox"71@0==>5: %1<br>Favorite: %1
 ControlBox1I85 A2>9AB20Global Properties ControlBoxB!?@OB0BL 8:>=:C 2 A8AB5<=>< ;>B:5Hide Tray Icon ControlBox><0H=OO A5BLHome ControlBox6>;CG5=85 04@5A0 IP: %1<br>IP Address Acquisition: %1
 ControlBox 4@5A IP: %1<br>IP Address: %1
 ControlBox(;N7 IP: %1<br>IP Gateway: %1
 ControlBox0!5B520O <0A:0 IP: %1<br>IP Netmask: %1
 ControlBox=B5@D59A Interface ControlBox=B5@D59A: %1 Interface: %1 ControlBox"=B5@D59A: %1<br>Interface: %1
 ControlBox8F5=78OLicense ControlBoxMATE ControlBoxMTU: %1<br> MTU: %1
 ControlBox 0&725@=CBL Ma&ximize ControlBox!&25@=CBL Mi&nimize ControlBox><5AB8BL ?>A;5 Move After ControlBox><5AB8BL 4> Move Before ControlBox<OName ControlBox!5B52K5 A;C61K:Network Services: ControlBox5BNo ControlBox5B autoconnectNo ControlBox5B connectedNo ControlBox5B immutableNo ControlBox5BroamingNo ControlBox5BtetheredNo ControlBox&5B 2K1@0==KE A;C61No Services Selected ControlBoxD5 4>ABC?=K =8:0:85 A5B52K5 A;C61KNo network services available ControlBox5BNone ControlBox5 ?>4:;NG5=> Not Connected ControlBox5 ?>4:;NG5=> icon_tool_tip Not Connected ControlBox"5<>= C254><;5=89Notification Daemon ControlBox#254><;5=8O Notifications ControlBox$CBL : >1J5:BC: %1Object Path: %1 ControlBoxK:;NG5=>Off ControlBox"2B>=><=K9 @568<  Offline Mode  ControlBox22B>=><=K9 @568< >B:;NGQ=Offline Mode Disabled ControlBox82B>=><=K9 @568< 0:B828@>20=Offline Mode Engaged ControlBox82B>=><=K9 @568<: =54>ABC?=>OfflineMode: Unavailable ControlBox2:;NG5=>On ControlBox2:;NG5=> autoconnectOn ControlBox:;NG5=>Powered ControlBox,;8=0 ?@5D8:A0: %1<br>Prefix Length: %1
 ControlBox(;8=0 ?@5D8:A0: <br>Prefix Length:
 ControlBox4>=D845=F80;L=>ABL: %1<br>Privacy: %1
 ControlBox,@>3@0<<=>5 C?@02;5=85Program Control ControlBox* 540:B>@ :>=D83C@0F88Provisioning Editor ControlBox#40;8BLRemove ControlBox*!:&0=8@>20BL ?>2B>@=>Resc&an ControlBox81=C;OBL ?>:070=8O AGQBG8:>2Reset Counters ControlBoxN>2B>@=>5 ?>A;5 A1>O ?>4:;NG5=85 : A5B8Retry Failed Connection ControlBox >C<8=3Roaming ControlBox >C<8=3: %1<br>Roaming: %1
 ControlBoxSSID: %1<br> SSID: %1
 ControlBox57>?0A=>ABLSecurity ControlBox(57>?0A=>ABL: %1<br>Security: %1
 ControlBox!&;C610Ser&vice ControlBox"!>AB>O=85 A5@25@0 Server Status ControlBox<!5@25@K:<br>&nbsp;&nbsp;%1<br>Servers:
  %1
 ControlBox"H81:0 A;C61K: %1Service Error: %1 ControlBox0!>AB>O=85 A;C61K: %1<br>Service State: %1
 ControlBox$"8? A;C61K: %1<br>Service Type: %1
 ControlBox!;C610:Service: ControlBox!;C610:%1<br>Service: %1
 ControlBox !;C61KServices ControlBox0AB@>9:8: Settings: ControlBox!8;0 A83=0;0Signal Strength ControlBox&0?CA:0BL A2Q@=CBK<Start Minimized ControlBox?F88 70?CA:0 Start Options ControlBox!>AB>O=85State ControlBox!>AB>O=85: State:  ControlBox*!>AB>O=85: =54>ABC?=>State: Unavailable ControlBox!8;0: %1%<br>Strength: %1%
 ControlBox!8;0: %1<br>Strength: %1
 ControlBox!8AB5<=K9 ;>B>: System Tray ControlBox:#254><;5=8O 2 A8AB5<=>< ;>B:5System Tray Notifications ControlBox"5E=>;>388 Technologies ControlBox"5B5@8=3 Tethering ControlBox&@>87>H;0 >H81:0 ?@8 GB5=88 8;8 0=0;875 >B25B0 >B <5B>40 connman.Manager.GetProperties.<br><br>@O4 ;8 :0:0O-=81C4L G0ABL %1 1C45B DC=:F8>=8@>20BL.There was an error reading or parsing the reply from method connman.Manager.GetProperties.

It is unlikely any portion of %1 will be functional. ControlBox@>87>H;0 >H81:0 ?@8 GB5=88 8;8 0=0;875 >B25B0 >B <5B>40 connman.Manager.GetServices.<br><br>0:0O-B> G0ABL %1 2AQ 5IQ <>65B DC=:F8>=8@>20BL.There was an error reading or parsing the reply from method connman.Manager.GetServices.

Some portion of %1 may still be functional. ControlBox"@>87>H;0 >H81:0 ?@8 GB5=88 8;8 0=0;875 >B25B0 >B <5B>40 connman.Manager.GetTechnologies.<br><br>0:0O-B> G0ABL %1 2AQ 5IQ <>65B DC=:F8>=8@>20BL.There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.

Some portion of %1 may still be functional. ControlBox"8?Type ControlBoxURL: %1<br> URL: %1
 ControlBox5 C40;>AL A>740BL 8=B5@D59A 4;O connman =0 A8AB5<=>9 H8=5.<br><br>%1 =5 A<>65B >1<5=820BLAO 40==K<8 A connman.sUnable to create an interface to connman on the system bus.

%1 will not be able to communicate with connman. ControlBox85 C40;>AL >?@545;8BL A;C61CUnable to determine service ControlBox5 C40;>AL =09B8 ?>4:;NG5=85 : A8AB5<=>9 H8=5.<br><br>%1 =5 A<>65B >1<5=820BLAO 40==K<8 A connman.fUnable to find a connection to the system bus.

%1 will not be able to communicate with connman. ControlBoxp5 C40;>AL =09B8 8;8 ?>4:;NG8BLAO : A5@25@C C254><;5=89.3Unable to find or connect to a Notification server. ControlBox'0AB>B0 >1=>2;5=8O AGQBG8:>2 >A=>20=0 =0 ?>@>3>2>< 7=0G5=88 %L1  40==KE 8 %L2 A5:C=40E 2@5<5=8.dUpdate resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. ControlBox2A?>;L7>20BL B5<C 7=0G:>2Use Icon Theme ControlBox@5<O >6840=8O Wait Time ControlBox(!>548=5=85 Wi-Fi<br>WiFi Connection
 ControlBox!>AB>O=85 Wi-Fi Wifi State ControlBox&5A?@>2>4=K5 A;C61KWireless Services ControlBoxXFCE ControlBox0Yes ControlBox0 connectedYes ControlBox0 immutableYes ControlBox0roamingYes ControlBox0tetheredYes ControlBoxpK15@8B5 A;C61C Wi-Fi ?5@54 =060B85< :=>?:8 ?>4:;NG5=8O.EYou need to select a Wifi service before pressing the connect button. ControlBoxrK15@8B5 A;C61C Wi-Fi ?5@54 =060B85< :=>?:8 >BA>548=5=8O.HYou need to select a Wifi service before pressing the disconnect button. ControlBoxjK15@8B5 A;C61C Wi-Fi ?5@54 =060B85< :=>?:8 C40;5=8O.DYou need to select a Wifi service before pressing the remove button. ControlBox&><5=K&DomainsPeditor &1I85&GeneralPeditor&!5@25@K 8<Q= &NameserversPeditor&@>:A8&ProxyPeditor &!5@25@K 2@5<5=8 &TImeserversPeditor<html><head/><body><p>>4B25@48BL 2A5 M;5<5=BK, >B?@028BL 8E Connman, 8 70:@KBL 480;>3.</p></body></html>g

Accept the entries, send them to Connman, and close the dialog.

Peditor<html><head/><body><p>URL-04@5A 4;O 02B><0B8G5A:>9 =0AB@>9:8 ?@>:A8. A?>;L7C5BAO &quot;02B><0B8G5A:8<&quot; A?>A>1><.</p></body></html>p

Automatic proxy configuration URL. Used by the "auto" method.

Peditor<html><head/><body><p>G8AB8BL 2A5 M;5<5=BK =0 B5:CI59 AB@0=8F5.</p><p>-B> 25@=QB 7=0G5=85 ?> C<>;G0=8N 2 :064>5 ?>;5 =0 B5:CI59 AB@0=8F5, GB>, 2 >1I5< A;CG05 >7=0G05B ?CAB>5 ?>;5.</p></body></html>

Clear all entries on the current page.

This button will reset every field on the current page to the default value, which generally means nothing in the field.

Peditor6<html><head/><body><p>G8AB8BL 2A5 ?>;O :064>9 AB@0=8FK 480;>30.</p><p>-B> 25@=QB 7=0G5=8O ?> C<>;G0=8N 2 :064>5 ?>;5 =0 :064>9 AB@0=8F5.</p></body></html>

Clear all fields on every page of the dialog.

This will reset every field on every page to the default value for the field.

Peditor<html><head/><body><p>0:@KBL 480;>3 157 >B?@02:8 40==KE Connman.</p></body></html>`

Close the dialog without sending any entries to Connman.

PeditorJ<html><head/><body><p>A;8 0:B828@>20=>, B>, :>340 4@C385 A>548=5=8O =54>ABC?=K, MB0 A;C610 1C45B ?>4:;NG0BL :><?LNB5@ 02B><0B8G5A:8. -B> 4>ABC?=> B>;L:> 4;O A;C61, ?><5G5==KE :0: &quot;71@0==>5&quot;. </p><p>-B0 A;C610 =5 1C45B ?>4:;NG0BLAO 02B><0B8G5A:8 2> 2@5<O @>C<8=30.</p></body></html>

If checked this service will auto-connect when no other connection is available. This is only available for services marked "Favorite".

The service will not auto-connect while roaming.

Peditor<html><head/><body><p>!?8A>: 7040==KE 2@CG=CN 4><5=>2 ?>8A:0.</p><p>2548B5 >48= 8;8 1>;LH5 04@5A>2 IP. B45;8B5 :064K9 2254Q==K9 04@5A 70?OB>9, B>G:>9 A 70?OB>9 8;8 ?@>15;><.</p></body></html>

List of manually configures search domains.

Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditor6<html><head/><body><p>!?8A>: =0AB@>5==KE 2@CG=CN A5@25@>2 4><5==KE 8<Q=. 5:>B>@K5 A>B>2K5 A5B8 =5 ?@54>AB02;ONB ?@028;L=K5 A5@25@0 8<Q=, 8 MB0 >?F8O ?>72>;O5B ?5@5>?@545;5=85.</p><p>-B>B <0AA82 >BA>@B8@>20= ?> ?@8>@8B5BC, 8 ?5@2K9 ?C=:B 2 A?8A:5 >7=0G05B A5@25@ 8<Q= A =082KAH8< ?@8>@8B5B><.</p><p>-B0 =0AB@>9:0 ?>;57=0, :>340 8A?>;L7C5BAO @CG=0O :>=D83C@0F8O 8 =5 =0AB@>5= 3;>10;L=K9 A5@25@ 4><5==KE 8<Q=.</p><p>2548B5 >48= 8;8 1>;LH5 04@5A>2 IP. B45;8B5 :064K9 2254Q==K9 04@5A 70?OB>9, B>G:>9 A 70?OB>9 8;8 ?@>15;><.</p></body></html>"

The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.

This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.

When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.

Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditorx<html><head/><body><p>!?8A>: 7040==KE 2@CG=CN A5@25@>2 2@5<5=8.</p><p>5@2K9 ?C=:B A?8A:0 >7=0G05B A5@25@ 2@5<5=8 2 =082KAH8< ?@8>@8B5B><.</p><p>@8 8A?>;L7>20=88 @CG=>9 :>=D83C@0F88 MB0 =0AB@>9:0 ?>;57=0 4;O ?5@570?8A8 =0AB@>5: 2A5E >AB0;L=KE =0AB@>5: A5@25@>2 2@5<5=8. -B> 7028A8B >B :>=:@5B=>9 A;C61K, A;54>20B5;L=>, 8A?>;L7CNBAO B>;L:> 7=0G5=8O 4;O A;C61K ?> C<>;G0=8N.</p><p>7<5=5=8O MB>3> A2>9AB20 ?@8254CB : ?5@570?CA:C 70?@>A>2 NTP.</p><p>2548B5 >48= 8;8 1>;55 04@5A>2 IP. B45;8B5 :064K9 2254Q==K9 04@5A 70?OB>9, B>G:>9 A 70?OB>9 8;8 ?@>15;><.</p></body></html>

The list of manually configured time servers.

The first entry in the list represents the timeserver with the highest priority.

When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.

Changes to this property will result in restart of NTP query.

Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditor"<html><head/><body><p>A?>;L7C5BAO ?@8 2K1@0==>< &quot;@CG=><&quot; A?>A>15. !?8A>: C7;>2, : :>B>@K< <>6=> ?>4:;NG0BLAO =0?@O<CN.</p><p><br/></p><p>2548B5 >48= 8;8 1>;LH5 04@5A>2 IP. B45;8B5 :064K9 2254Q==K9 04@5A 70?OB>9, B>G:>9 A 70?OB>9 8;8 ?@>15;><.</p></body></html>

Used when "manual" is set. A list of hosts which can be accessed directly.


Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditor><html><head/><body><p>A?>;L7C5BAO ?@8 2K1@0==>< &quot;@CG=><&quot; A?>A>15. !?8A>: URI ?@>:A8. URI 157 ?@>B>:>;0 1C45B 8A?>;L7>20= :0: >1KG=K9 URI ?@>:A8.</p><p>2548B5 >48= 8;8 1>;LH5 04@5A>2 IP. B45;8B5 :064K9 2254Q==K9 04@5A 70?OB>9, B>G:>9 A 70?OB>9 8;8 ?@>15;><.</p></body></html>

Used when "manual" is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.

Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.

Peditor<html><head/><body><p>>;L7>20B5;LA:0O :>=D83C@0F8O =0AB@>5: IPv4.</p></body></html>L

User configuration of IPv4 settings.

Peditor<html><head/><body><p>>;L7>20B5;LA:0O :>=D83C@0F8O =0AB@>5: IPv6</p></body></html>K

User configuration of IPv6 settings

Peditor<html><head/><body><p>>;L7>20B5;LA:0O :>=D83C@0F8O =0AB@>5: ?@>:A8.</p></body></html>M

User configuration of Proxy settings.

Peditor^<html><head/><body><p>'B> MB></p></body></html>3

What's This

Peditor 4@5AAddressPeditor2B><0B8G5A:8AutoPeditor"2B>?>4A>548=5=85 AutoConnectPeditor B<5=0CancelPeditorDHCPDHCPPeditor5?>A@54AB25==>DirectPeditorK:;NG5=0DisabledPeditor:;NG5=0EnabledPeditorA:;NG8BLExcludesPeditor(;N7GatewayPeditor IPv&4IPv&4Peditor IPv&6IPv&6Peditor@CG=CNManualPeditor !?>A>1MethodPeditor!5B520O <0A:0NetmaskPeditorOKOKPeditorK:;NG5=>OffPeditor@54?>G8B05<0 PreferredPeditor;8=0 ?@5D8:A0 Prefix LengthPeditor$>=D845=F80;L=>ABLPrivacyPeditor  540:B>@ A2>9AB2Property EditorPeditor!1@>A8BL &2AQ Reset &AllPeditor$!1@>A8BL &AB@0=8FC Reset Pa&gePeditor!5@25@KServersPeditorURLURLPeditor$&G8AB8BL AB@0=8FC &Clear Page Provisioning&#40;8BL&Delete Provisioning&B:@KBL&Open Provisioning&!>E@0=8BL&Save Provisioning<html><head/><body><p>G8AB8BL >:=> >B 2A53> B5:AB0.</p></body></html>N

Clear all text from the editor window.

 Provisioning|<html><head/><body><p>#40;8BL D09; =0AB@>5:.</p></body></html>=

Delete a config file.

 Provisioning<html><head/><body><p>>9B8 2 @568< &quot;'B> MB>&quot;.</p></body></html>J

Enter "Whats This" mode.

 Provisioningr<html><head/><body><p>K9B8 87 480;>30.</p></body></html>8

Exit the dialog.

 Provisioning<html><head/><body><p>B:@KBL ACI5AB2CNI89 D09; =0AB@>5:.</p></body></html>E

Open an existing config file.

 Provisioning~<html><head/><body><p>:=> B5:AB>2>3> @540:B>@0.</p><p>K <>65B5 225AB8 8;8 2K@570BL 8 2AB028BL 2 2 >:=>. K B0:65 <>65B5 8A?>;L7>20BL <5=N 2KH5 4;O 2AB02:8 B5:AB>2KE ?>;59.</p></body></html>

Text edit window.

You may type or cut and paste into this window. You may also use menus above to insert text fields.

 Provisioning^<html><head/><body><p>'B> MB></p></body></html>3

What's This

 Provisioning<html><head/><body><p>0?8A0BL >B>1@0605<K5 40==K5 2 D09; =0AB@>5:.</p><p>>;5 A> A?8A:>< A>45@68B A?8A>: D09;>2 =0AB@>5:, A>740==KE CMST, GB>1K >15A?5G8BL ?@>AB>9 A?>A>1 8E ?5@570?8A8. K B0:65 <>65B5 225AB8 8<O 2 ?>;5 A> A?8A:><.</p><p>5 =04> C:07K20BL ?CBL, =8 @0AH8@5=85 D09;0, B0: :0: >10 1C4CB 2K@570=K 8 70<5=5=K 4>?CAB8<K<8 7=0G5=8O<8.</p></body></html>h

Write the displayed data to a config file.

The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.

It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values.

 Provisioning&$09; A5@B8D8:0B0 CA CACertFile Provisioning0$09; A5@B8D8:0B0 :;85=B0ClientCertFile Provisioning?8A0=85 Description Provisioning ><5=Domain Provisioning &K9B8E&xit ProvisioningEAPEAP Provisioning"Eduroam (4;8==K9)Eduroam (long) Provisioning$Eduroam (:>@>B:89)Eduroam (short) Provisioning!:@KBK5Hidden ProvisioningIPv4 DHCP IPV4 DHCP ProvisioningIPv4-04@5A IPv4 Address ProvisioningB:;NG8BL IPv4IPv4 Off ProvisioningIPv6-04@5A IPv6 Address Provisioning$2B><0B8G5A:8 IPv6 IPv6 Auto ProvisioningB:;NG8BL IPv6IPv6 Off Provisioning.>=D845=F80;L=>ABL IPv6 IPv6.Privacy Provisioning45=B8D8:0F8OIdentity ProvisioningMACMAC Provisioning<OName Provisioning!5@25@K 8<Q= Nameservers Provisioning 0@>;L Passphrase Provisioning $0702Phase2 Provisioning$$09; ;8G=>3> :;NG0PrivateKeyFile Provisioning(0@>;L ;8G=>3> :;NG0PrivateKeyPassphrase Provisioning0"8? ?0@>;O ;8G=>3> :;NG0PrivateKeyPassphraseType Provisioning* 540:B>@ :>=D83C@0F88Provisioning Editor ProvisioningSSIDSSID Provisioning><5=K ?>8A:0 SearchDomains Provisioning57>?0A=>ABLSecurity Provisioning!5@25@K 2@5<5=8 Timeservers Provisioning"8?Type Provisioning[>1I85][global] Provisioning[A;C610_*] [service_*] Provisioning :@8B8G5A:0O CriticalProvisioningEditor 8=D>@<0F8O InformationProvisioningEditor%1 - =D>@<0F8O%1 - InformationProvisioningEditor.%1 - &5;>G8A;5==K9 22>4%1 - Integer InputProvisioningEditor$%1 - 2>4 M;5<5=B0%1 - Item InputProvisioningEditor"%1 - K1@0BL D09;%1 - Select FileProvisioningEditor&%1 - "5:AB>2K9 22>4%1 - Text InputProvisioningEditor&%L1 09B>2 70?8A0=>%L1 Bytes writtenProvisioningEditor%L1  70?8A0=>%L1 KB writtenProvisioningEditor<b>H81:0 8<5=8 DBus:</b> %1<br><br><b>!B@>:0:</b> %2<br><br><b>!>>1I5=85:</b> %3MDBus Error Name: %1

String: %2

Message: %3ProvisioningEditor|<center>$09;K =0AB@>5: =5 =0945=K.<br>8G53> =5 1C45B C40;5=>.F
No configuration files were found.
Nothing will be deleted.ProvisioningEditor<center>$09;K =0AB@>5: =5 =0945=K.<br>K <>65B5 8A?>;L7>20BL MB>B 480;>3 4;O 8E A>740=8O.T
No configuration files were found.
You may use this dialog to create one.ProvisioningEditorB<center>'B5=85 D09;0 =0AB@>5:: %1&
Reading configuration file: %1ProvisioningEditorT><5==>5 8<O, :>B>@>5 1C45B 8A?>;L7>20BLAODomain name to be usedProvisioningEditor"8? EAP. EAP type.ProvisioningEditor,2548B5 >?8A0=85 A5B8.#Enter a description of the network.ProvisioningEditor2548B5 =>2>5 8<O D09;0 8;8 2K15@8B5<br>ACI5AB2CNI89 D09; 4;O ?5@570?8A8.AEnter a new file name or select
an existing file to overwrite.ProvisioningEditor62548B5 4;8=C ?@5D8:A0 IPv6Enter the IPv6 prefix lengthProvisioningEditor 25AB8 8<O A5B8.Enter the network name.ProvisioningEditorX2548B5 AB@>:>2>5 ?@54AB02;5=85 802.11 SSID.2Enter the string representation of an 802.11 SSID.ProvisioningEditor H81:0 C40;5=8O.Error encountered deleting.ProvisioningEditor6CBL : D09;C A5@B8D8:0B0 CA$File Path to the CA Certificate FileProvisioningEditor@CBL : D09;C A5@B8D8:0B0 :;85=B0(File Path to the Client Certificate FileProvisioningEditor$09; C40;Q= File deletedProvisioningEditorFCBL : ;8G=><C D09;C :;NG59 :;85=B0(File path to the Client Private Key FileProvisioningEditor,'B5=85 D09;0 7025@H5=>File read completedProvisioningEditor45 C40;>AL A>E@0=8BL D09;.File save failed.ProvisioningEditor 1I85GlobalProvisioningEditor!:@KB0O A5BLHidden networkProvisioningEditorIPv4-04@5A IPv4 AddressProvisioningEditorL(;N7 IPv4 (MB> =5>1O70B5;L=K9 M;5<5=B)(IPv4 Gateway (This is an optional entry)ProvisioningEditor$!5B520O <0A:0 IPv4 IPv4 NetmaskProvisioningEditorIPv6-04@5A IPv6 AddressProvisioningEditorL(;N7 IPv6 (MB> =5>1O70B5;L=K9 M;5<5=B)(IPv6 Gateway (This is an optional entry)ProvisioningEditor.>=D845=F80;L=>ABL IPv6 IPv6 PrivacyProvisioningEditor:!B@>:0 845=B8D8:0F88 4;O EAP.Identity string for EAP.ProvisioningEditorJ$09;K :;NG59 (*.pem);;A5 D09;K (*.*)"Key Files (*.pem);;All Files (*.*)ProvisioningEditor2!?8A>: 4><5=>2 ?>8A:0 DNSList of DNS Search DomainsProvisioningEditor(!?8A>: A5@25@>2 8<Q=List of NameserversProvisioningEditor.!?8A>: A5@25@>2 2@5<5=8List of TimeserversProvisioningEditorMAC-04@5A. MAC address.ProvisioningEditor,"8? 157>?0A=>AB8 A5B8.Network security type.ProvisioningEditorB0@>;L 4;O D09;0 70:@KB>3> :;NG0.-Password/Passphrase for the private key file.ProvisioningEditorB>@0O D070 (2=CB@5==OO 0CB5=B8D8:0F8O G5@57 TLS-BC==5;L)<br>A?>A>10 0CB5=B8D8:0F88.HPhase 2 (inner authentication with TLS tunnel)
authentication method.ProvisioningEditor2"8? ?0@>;O ;8G=>3> :;NG0.Private key passphrase type.ProvisioningEditor&0@>;L RSN/WPA/WPA2RSN/WPA/WPA2 PassphraseProvisioningEditorbSSID: H5AB=04F0B8@8G=>5 ?@54AB02;5=85 802.11 SSID2SSID: hexadecimal representation of an 802.11 SSIDProvisioningEditor6K15@8B5 D09; 4;O C40;5=8O.Select a file to be deleted.ProvisioningEditor6K15@8B5 D09; 4;O 703@C7:8.Select a file to load.ProvisioningEditor !;C610ServiceProvisioningEditor"8? A;C61K. Service type.ProvisioningEditor5B:0, :>B>@0O 70<5=8B * <br>C=8:0;L=K< 845=B8D8:0B>@>< 2 D09;5 =0AB@>5:.MTag which will replace the * with
an identifier unique to the config file.ProvisioningEditor(01;>=K TemplatesProvisioningEditor>;6=K 1KBL ?@54CA<>B@5=K <b>IPv4-04@5A</b>, <b><0A:0 A5B8</b>, 8 =5>1O70B5;L=> <b>H;N7</b>.<p>06<8B5 , :>340 1C45B5 3>B>2K ?@>4>;68BL.The IPv4 Address, Netmask, and optionally Gateway need to be provided.

Press OK when you are ready to proceed.ProvisioningEditor>;6=K 1KBL ?@54CA<>B@5=K <b>IPv6-04@5A</b>, <b>4;8=0 ?@5D8:A0</b>, 8 =5>1O70B5;L=> <b>H;N7</b>.<p>06<8B5 , :>340 1C45B5 3>B>2K ?@>4>;68BL.The IPv6 Address, Prefix Length, and optionally Gateway need to be provided.

Press OK when you are ready to proceed.ProvisioningEditor Wi-FiWiFiProvisioningEditor5 C40;>AL 70@538AB@8@>20BL >1J5:B roothelper =0 A8AB5<=>9 H8=5.7Failed to register roothelper object on the system bus. RootHelper5 C40;>AL 70@538AB@8@>20BL A5@28A org.cmst.roothelper  2>7<>6=> 70?CI5= 4@C3>9 M:75<?;O@.WFailed to register service org.cmst.roothelper - there may be another instance running. RootHelper#65 ?>4:;NG5=0Already connectedTranslateStrings#65 2K:;NG5=0Already disabledTranslateStrings#65 2:;NG5=0Already enabledTranslateStrings#65 ACI5AB2C5BAlready existsTranslateStrings ?@>F5AA5 In progressTranslateStrings,5?@028;L=K5 0@3C<5=BKInvalid argumentsTranslateStrings*5?@028;L=>5 A2>9AB2>Invalid propertyTranslateStrings&5?@028;L=0O A;C610Invalid serviceTranslateStrings5 ?>4:;NG5=0 Not connectedTranslateStrings5 =0945=0 Not foundTranslateStrings5 2=54@5=>Not implementedTranslateStrings&5 70@538AB@8@>20=0Not registeredTranslateStrings"5 ?>445@68205BAO Not supportedTranslateStrings5 C=8:0;L=0 Not uniqueTranslateStrings"?5@0F8O >B<5=5=0Operation abortedTranslateStrings:@5<O >6840=8O >?5@0F88 2KH;>Operation timeoutTranslateStrings "@51C5BAO ?0@>;LPassphrase requiredTranslateStrings>ABC? 70?@5IQ=Permission deniedTranslateStrings!>548=5=85 associationTranslateStrings02B><0B8G5A:8autoTranslateStrings02B><0B8G5A:8"connman ethernet connection methodautoTranslateStrings02B><0B8G5A:8connman ipv6 method stringautoTranslateStringsBluetooth bluetoothTranslateStrings!>B>20OcellularTranslateStringscmstTranslateStrings0AB@>9:0 configurationTranslateStrings.!8AB5<=K9 ;>B>: connmanconnman system trayTranslateStrings=5?>A@54AB25==>directTranslateStringsBA>548=5=85 disconnectTranslateStringsEthernetethernetTranslateStrings!1>9failureTranslateStrings 0465BgadgetTranslateStringsGPSgpsTranslateStrings?@>AB08205BidleTranslateStringsIEEE 802.1X ieee8021xTranslateStrings2@CG=CNmanualTranslateStrings2@CG=CN"connman ethernet connection methodmanualTranslateStrings2@CG=CNconnman ipv4 method stringmanualTranslateStrings2@CG=CNconnman ipv6 method stringmanualTranslateStrings>BACBAB2C5BnoneTranslateStrings >D;09=offlineTranslateStrings =;09=onlineTranslateStringsP2Pp2pTranslateStringsPSKpskTranslateStrings >B>20readyTranslateStrings!8AB5<=0OsystemTranslateStringsVPNvpnTranslateStringsWEPwepTranslateStrings Wi-FiwifiTranslateStrings@>2>4=0OwiredTranslateStringsWPSwpsTranslateStringsK;0 >1=0@C65=0 70?CI5==0O :>?8O CMST. 0?CA: MB>9 :>?88 >B<5=Q=NAnother running instance of CMST has been detected. This instance is abortingmain.cpp4Connman 2 c8AB5<=>< ;>B:5.Connman System Tray.main.cppB:;NG8BL 7=0G>: 2 A8AB5<=>< ;>B:5. >65B ?>=04>18BLAO A8AB5<=K< ;>B:0<, =5 A>>B25BAB2CNI8< A?5F8D8:0F88 Freedesktop.org.Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification.main.cpp*0720=85 B5<K 7=0G:>2Icon Theme Namemain.cppA;8 7=0G:C 2 A8AB5<=>< ;>B:5 B@51C5BAO ?A524>?@>7@0G=>ABL, C:068B5 F25B D>=0 (D>@<0B: 0xRRGGBB)bIf tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB)main.cppKBmain.cppxC@=0;8@>20BL 70?@>A connman inputRequest 4;O F5;59 >B;04:8.4Log the connman inputRequest for debugging purposes.main.cppRRGGBBmain.cpp#:068B5 2@5<O >6840=8O 2 A5:C=40E ?5@54 70?CA:>< 7=0G:0 2 A8AB5<=>< ;>B:5.FSpecify the wait time in seconds before starting the system tray icon.main.cpp0?CAB8BL 3@0D8G5A:89 ?>;L7>20B5;LA:89 8=B5@D59A, A2Q@=CBK< 2 A8AB5<=K9 ;>B>:.+Start the GUI minimized in the system tray.main.cpp~A?>;L7>20BL A?5F80;L=K9 :>4 4;O >:@C65=8O @01>G53> AB>;0 MATE.Use MATE DE specific code.main.cppLA?>;L7>20BL A?5F80;L=K9 :>4 4;O XFCE.Use XFCE specific code.main.cppHA?>;L7>20BL A8AB5<=CN B5<C 7=0G:>2.#Use an icon theme from your system.main.cpp[-:A?5@8<5=B0;L=>] B:;NG8BL AGQBG8:8 40==KE. >65B 1KBL 8A?>;L7>20=> 4;O C<5=LH5=8O =03@C7:8 =0 A8AB5<C.S[Experimental] Disable data counters. May be used to minimize load on your system.main.cpp[-:A?5@8<5=B0;L=>] @><56CB>: 2 A5:C=40E <564C >1=>2;5=85< AGQBG8:>2.?[Experimental] The interval in seconds between counter updates.main.cpp[-:A?5@8<5=B0;L=>] >;8G5AB2> :1 :>B>@K5 4>;6=K 1KBL ?5@540=K ?5@54 >1=>2;5=85< AGQBG8:>2.W[Experimental] The number of kb that have to be transmitted before the counter updates.main.cpp A5:C=4secondsmain.cpp ) , cmst/apps/cmstapp/code/peditor/ui/000755 001750 000144 00000000000 12645604020 017564 5ustar00andyusers000000 000000 cmst/translations/cmst_fr_FR.ts..qm000644 001750 000144 00000000027 12645570501 017771 0ustar00andyusers000000 000000 cmst/images/application/variations/scalable/cmst.svg000644 001750 000144 00000032526 12645570501 023357 0ustar00andyusers000000 000000 image/svg+xml cmst/images/raw_art/network-idle.png000644 001750 000144 00000002223 12645570501 020200 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTEαÆ˾vvvǺsssºtttFFFlllrrr{{{PPPmmmKKKooojjjMMMlllhhhggg ccc]]]OOOGGGVVV??@SSSQQQQQR@@?FFF{|{tRNSdv0de dx;!)dxA c{|wAfyBei'ucR5Fwy<ep7FwyE fp7GoERq1% _y+oyD dyE dwYQ;dwA Ww@ J|w@ I; pv|bKGDH pHYs  tIME84~IDAT(c` 021cgaec"ˇ)/ ($,"&*&.!)%%-#&.'..g`&ndlbjfnnai*nmckg"""jAjZzFFFfV6z8WTTVU7465wtvuO8i:m9sgf26ߋg%tEXtdate:create2015-11-04T18:04:11-05:00%tEXtdate:modify2013-07-28T03:30:56-04:00n+IENDB`cmst/000755 001750 000144 00000000000 12652522135 012161 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/iconman/iconman.h000644 001750 000144 00000004475 12645570501 020742 0ustar00andyusers000000 000000 /**************************** iconman.h ****************************** Class to manage icons and allow the user to provide substitutions based on the the system theme. Copyright (C) 2015-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef ICON_MANAGER # define ICON_MANAGER # include # include # include # include # include # include # include # include "../resource.h" struct IconElement { QString resource_path; QString colorize; QString fdo_name; QStringList theme_names; }; class IconManager : public QObject { Q_OBJECT public: // members IconManager(QObject* parent); // functions QIcon getIcon(const QString&); QString getIconName(const QString&); inline void setIconColor(const QColor& col) {icon_color = col;} private: // members QMap icon_map; QString cfg; QString qrc; QColor icon_color; // functions bool buildResourceIcon(QIcon&, const QString&, const QString&); bool buildThemeIcon(QIcon&, const QString&); QString getFallback(const QString&); void makeLocalFile(); QString extractValue(const QString&); QString extractKey(const QString&); QPixmap processArt(const QString&, const QColor&); }; #endif cmst/translations/cmst_es_CO.ts000644 001750 000144 00000720575 12650551344 017312 0ustar00andyusers000000 000000 Agent Agent Input Passphrase <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> <html><head/><body><p>Type the passphrase here.</p></body></html> <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> &Hide Passphrase O&ld Passphrase &Passphrase Hidden Network &Name <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> Service Set Identifier &SSID Wireless Internet Service Provider roaming (WISPr) &Username <html><head/><body><p>WISPr username.</p></body></html> Passwor&d <html><head/><body><p>WISPr password.</p></body></html> Extensible Authentication Protocol (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> &Identity WiFi Protected Setup (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> Use Push &Button Authentication &WPS Pin <html><head/><body><p>Enter a WPS pin.</p></body></html> Browser Login Requested Choose or enter a browser: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> Login URL: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> Launch &Browser <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel AgentDialog Information You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "%1 %2" ConnmanAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ConnmanCounter %L1 Bytes %L1 KB %L1 MB %L1 GB <b>Transmit:</b><br>TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4 %Ln Packet(s) <br><br><b>Received:</b><br>RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4 <br><br><b>Connect Time:</b><br> %n Day(s) %n Hour(s) %n Minute(s) %n Second(s) ConnmanVPNAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ControlBox Dialog &Status <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> All Devices &Off <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> Global Properties <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> OfflineMode: Unavailable <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> State: Unavailable <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Technologies Name Type Powered Connected Tethering <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> Resc&an <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> Services State Connection <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move Before <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move After <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> &Less &Details Ser&vice <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> Configuration &Wireless <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> Favorite Security Signal Strength Wireless Services <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> Connect <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> Disconnect Remove <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Wifi State &Counters <html><head/><body><p>The service being monitored by the counters.</p></body></html> Service: <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Home Counter not available. <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Roaming <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> Settings: &Preferences <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> Interface <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> Enable ToolTips (Interface) Rescan Offline Mode <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> Reset Counters <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> Advanced Controls <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> Start Options <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> Disable Tray Icon <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> Counter Update KB <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> Start Minimized <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> Use Icon Theme <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> Wait Time <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> Disable Counters <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> Counter Update Rate <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> Desktop Specific <html><head/><body><p>Default is no desktop specific code.</p></body></html> None <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> &VPN VPN Services <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> Host Domain Fake Transparency <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> System Tray <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> Hide Tray Icon <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> Enable System Tray Popups <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> System Tray Notifications Notifications <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> Notification Daemon Server Status Program Control <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> Enable Autostart <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> Retry Failed Connection <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> <html><head/><body><p>Open the color selection dialog. </p></body></html> ... <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help &About <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> &License <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> ChangeLo&g <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> Provisioning Editor <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> E&xit <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> Mi&nimize Ma&ximize &Exit About %1 Service Details WiFi Connections VPN Connections <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian)<br><center><b>Build Information:</b><center>Compiled using QT version %5<center>Built %6 - %7 About AwOken <center>This program uses the <b>AwOken</b> icon set version 2.5<br><br>Released under the<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>The CMST icon is a derivative work from the AwOken icon set. License %1 change log is not available. ChangeLog Cancel <b>Service:</b> %1 Unable to determine service No Services Selected You need to select a Wifi service before pressing the remove button. Offline Mode Engaged Offline Mode Disabled %1 (%2) Network Connection: %1 Network Services: No network services available Service Error: %1 Object Path: %1 VPN Engaged VPN Disengaged Warning <center><b>We received a DBUS reply message indicating an error while trying to scan technologies.</b></center><br><br>Error Name: %1<br><br>Error Message: %2 <b>Connection:</b> %1 <br><b>Service Details:</b><br> Service Type: %1<br> Service State: %1<br> Favorite: %1<br> Yes favorite No favorite External Configuration File: %1<br> Yes immutable No immutable Auto Connect: %1<br> On autoconnect No autoconnect <br><b>IPv4</b><br> IP Address Acquisition: %1<br> IP Address: %1<br> IP Netmask: %1<br> IP Gateway: %1<br> <br><b>IPv6</b><br> Address Acquisition: %1<br> Prefix Length: <br> Prefix Length: %1<br> Privacy: %1<br> <br><b>Proxy</b><br> URL: %1<br> Servers:<br>&nbsp;&nbsp;%1<br> Excludes:<br>&nbsp;&nbsp;%1<br> <br><b>Name Servers</b><br> <br><br><b>Time Servers</b><br> <br><br><b>Search Domains</b><br> <br><br><b>Ethernet</b><br> Connection Method: %1<br> Interface: %1<br> Device Address: %1<br> MTU: %1<br> <br><b>Wireless</b><br> Security: %1<br> Strength: %1<br> Roaming: %1<br> Yes roaming No roaming <br><b>VPN Provider</b><br> Host: %1<br> Domain: %1<br> Name: %1<br> Type: %1<br> State: Engaged Disabled Offline Mode %1On%1%1 powered %1Off%1%1 powered Yes connected No connected Yes tethered No tethered WiFi Technologies:<br> %1 Found, %2 Powered Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. Ethernet Connection<br> icon_tool_tip Service: %1<br> Interface: %1 WiFi Connection<br> icon_tool_tip SSID: %1<br> Strength: %1%<br> VPN Connection<br> icon_tool_tip Connection is in the Ready State. icon_tool_tip Connection is in the Failure State, attempting to reestablish the connection icon_tool_tip Connection is in the Failure State. icon_tool_tip Not Connected icon_tool_tip Error retrieving properties via Dbus Connection status is unknown Type: %1 <br>Powered On Off Not Connected <br>Tethering Enabled Connection : %1 Signal Strength: %1% Favorite Connection Never Connected <br>Security : %1 <br>Roaming <br>Autoconnect is <p style='white-space:pre'><center><b>%1</b></center> <center><b>Unable to find a systemtray on this machine.</b><center><br>The program may still be used to manage your connections, but the tray icon will be disabled.<center><br><br>If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the <b>-w</b> switch and set a delay as necessary. The exact wait time will vary from system to system. Could not find a connection to the system bus %1 - Critical Error Unable to find a connection to the system bus.<br><br>%1 will not be able to communicate with connman. Could not create an interface to connman on the system bus Unable to create an interface to connman on the system bus.<br><br>%1 will not be able to communicate with connman. Error reading or parsing connman.Manager.GetProperties %1 - Warning There was an error reading or parsing the reply from method connman.Manager.GetProperties.<br><br>It is unlikely any portion of %1 will be functional. Error reading or parsing connman.Manager.GetTechnologies There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.<br><br>Some portion of %1 may still be functional. Error reading or parsing connman.Manager.GetServices There was an error reading or parsing the reply from method connman.Manager.GetServices.<br><br>Some portion of %1 may still be functional. %1 version %2 by %3 has been detected on this system.<p>This server supports desktop Notification Specification version %4 Colorize Icons Attempt %1 of 4 looking for notification server. %1 license is the MIT (Expat) license. You need to select a service before pressing the connect button. You need to select a service before pressing the disconnect button. <p style='white-space:pre'><center><b>%1 Properties</b></center> Unable to find or connect to a Notification server. IconManager A new icon definition file will be installed to <b>%1</b> and a backup of the old definition file has been created as <b>%2</b> <p>If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. <p>If the original was never customized or you just wish to delete the backup now you may select <i>Discard</i> to delete the backup or <i>Save</i> to retain it. Peditor Property Editor &General <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> AutoConnect <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Nameservers <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &TImeservers <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Domains <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> IPv&4 Address Netmask Gateway DHCP Manual Off Method <html><head/><body><p>User configuration of IPv6 settings</p></body></html> IPv&6 Auto Prefix Length Privacy Disabled Preferred Enabled <html><head/><body><p>User configuration of Proxy settings.</p></body></html> &Proxy Direct <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> URL Servers <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> Excludes <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> Reset Pa&ge <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> Reset &All <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> OK <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> Cancel Provisioning Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Description [service_*] Type MAC Nameservers Timeservers SearchDomains Domain SSID EAP CACertFile ClientCertFile PrivateKeyFile PrivateKeyPassphrase PrivateKeyPassphraseType Identity Phase2 Passphrase Security Hidden Eduroam (long) Eduroam (short) IPv4 Address IPv4 Off IPV4 DHCP IPv6 Address IPv6 Off IPv6 Auto IPv6.Privacy ProvisioningEditor Global Service WiFi Templates File Path to the CA Certificate File File Path to the Client Certificate File File path to the Client Private Key File Key Files (*.pem);;All Files (*.*) MAC address. SSID: hexadecimal representation of an 802.11 SSID List of Nameservers List of Timeservers List of DNS Search Domains Domain name to be used Enter the string representation of an 802.11 SSID. Service type. EAP type. Private key passphrase type. Network security type. Hidden network IPv6 Privacy %1 - Item Input Tag which will replace the * with<br>an identifier unique to the config file. Enter the network name. Enter a description of the network. Password/Passphrase for the private key file. Identity string for EAP. RSN/WPA/WPA2 Passphrase Phase 2 (inner authentication with TLS tunnel)<br>authentication method. %1 - Text Input Information The IPv4 <b>Address</b>, <b>Netmask</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv4 Address IPv4 Netmask IPv4 Gateway (This is an optional entry) The IPv6 <b>Address</b>, <b>Prefix Length</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv6 Address %1 - Integer Input Enter the IPv6 prefix length IPv6 Gateway (This is an optional entry) <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 RootHelper Failed to register service org.cmst.roothelper - there may be another instance running. Failed to register roothelper object on the system bus. ScrollBox Scrollbox TextLabel TranslateStrings connman system tray Main Window Title cmst Abbreviated Program Name - used for QMessageBox titles idle connman state string association connman state string configuration connman state string ready connman state string online connman state string disconnect connman state string failure connman state string offline connman state string system connman type string ethernet connman type string wifi connman type string bluetooth connman type string cellular connman type string gps connman type string vpn connman type string gadget connman type string p2p connman type string wired connman type string direct connman proxy string manual connman proxy string auto connman proxy string psk connman security string ieee8021x connman security string none connman security string wep connman security string wps connman security string Invalid arguments connman error string Permission denied connman error string Passphrase required connman error string Not registered connman error string Not unique connman error string Not supported connman error string Not implemented connman error string Not found connman error string No carrier connman error string In progress connman error string Already exists connman error string Already enabled connman error string Already disabled connman error string Already connected connman error string Not connected connman error string Operation aborted connman error string Operation timeout connman error string Invalid service connman error string Invalid property connman error string disabled connman privacy string enabled connman privacy string prefered connman privacy string auto connman ethernet connection method manual connman ethernet connection method dhcp connman ipv4 method string manual connman ipv4 method string off connman ipv4 method string fixed connman ipv4 method string auto connman ipv6 method string manual connman ipv6 method string 6to4 connman ipv6 method string off connman ipv6 method string openconnect connman vpn connection type openvpn connman vpn connection type vpnc connman vpn connection type l2tp connman vpn connection type pptp connman vpn connection type VPNAgent VPN Agent Input Username <html><head/><body><p>WISPr username.</p></body></html> Password <html><head/><body><p>WISPr password.</p></body></html> Host Name OpenConnect CA Cert. Client Cert. Cookie Server Cert. VPN Host <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel Save Credentials VPN_Editor Global OpenConnect OpenVPN VPNC L2TP PPTP All Files (*.*) CA Files (*.pem *.ca);;All Files (*.*) Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Key Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Config Files (*.ovpn *.conf *.config);;All Files (*.*) VPN server IP address (ex: 1.2.3.4) %1 - Item Input %1 - Verify Option User defined name for the VPN Domain name for the VPN Service (example: corporate.com) Networks behing the VPN link, if more than one separate by a comma. Format is network/netmask/gateway, and gateway can be omitted. Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16 Networks = entry is optional and may be left blank. %1 - Text Input Information <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 VPN_Prov VPN Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Name of the network. Description Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE PPPD.ReqMPPE40 PPPD.ReqMPPE128 PPPD.ReqMPPEStateful VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert Local peer's signed certificate. OpenVPN.Key Local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass Authenticate with server using username/password? OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. main.cpp Another running instance of CMST has been detected. This instance is aborting Connman System Tray. Bypass restoring the window state if restoring window state is specified in the settings file. Bypass restoring any start options in the settings file. [Experimental] Disable data counters. May be used to minimize load on your system. Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. Use an icon theme from your system. Icon Theme Name Log the connman inputRequest for debugging purposes. Start the GUI minimized in the system tray. Specify the wait time in seconds before starting the system tray icon. seconds [Experimental] The number of kb that have to be transmitted before the counter updates. KB [Experimental] The interval in seconds between counter updates. If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB) RRGGBB Use XFCE specific code. Use MATE DE specific code. cmst/apps/cmstapp/code/vpn_prov_ed/ui/vpn_prov_editor.ui000644 001750 000144 00000062503 12650767244 024241 0ustar00andyusers000000 000000 VPN_Prov 0 0 418 574 VPN Provisioning Editor true <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open false true <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save false Qt::Vertical <html><head/><body><p>Delete a config file.</p></body></html> &Delete false Qt::Horizontal 40 20 <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page false <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> Qt::Horizontal 40 20 <html><head/><body><p>Exit the dialog.</p></body></html> E&xit false [global] Name Name of the network. Description Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE Require the use of MPPE? PPPD.ReqMPPE40 Require the use of MPPE 40 bit? PPPD.ReqMPPE128 Require the use of MPPE 128 bit? PPPD.ReqMPPEStateful Allow MPPE to use stateful mode? VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert File containing peer's signed certificate. OpenVPN.Key File containing local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass File containing the user:password credentials. OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. Import Configuration pushButton_exit clicked() VPN_Prov reject() 351 737 310 -23 cmst/images/application/variations/scalable/cmst_spot_02.svg000644 001750 000144 00000041303 12645570501 024716 0ustar00andyusers000000 000000 cmst/apps/cmstapp/code/provisioning/ui/000755 001750 000144 00000000000 12646535647 020667 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/control_box/ui/controlbox.ui000644 001750 000144 00000263656 12650551344 023226 0ustar00andyusers000000 000000 ControlBox 0 0 557 492 530 475 Dialog true 0 Qt::LeftToRight &Status Qt::Horizontal 40 20 <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> All Devices &Off <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> Global Properties <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> OfflineMode: Unavailable 0 0 16 16 true Qt::Horizontal 506 20 Qt::Horizontal 466 20 0 0 16 16 true <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> State: Unavailable <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Technologies QAbstractItemView::NoEditTriggers false false QAbstractItemView::NoSelection false false false false 75 true false false Name Type Powered Connected Tethering Qt::Horizontal 293 17 <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> Resc&an <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> Services QAbstractItemView::NoEditTriggers false false QAbstractItemView::SingleSelection QAbstractItemView::SelectRows false false true 100 true false false Name State Connection false <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move Before false <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move After Qt::Horizontal 40 20 <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> &Less false &Details 75 true Ser&vice comboBox_service <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> true 0 0 515 317 0 0 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Vertical 20 40 Qt::Horizontal 40 20 <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> Configuration &Wireless <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> QAbstractItemView::NoEditTriggers false false QAbstractItemView::SingleSelection QAbstractItemView::SelectRows false false 5 80 true false false Name Favorite Connected Security Signal Strength Wireless Services <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> Connect <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> Disconnect <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> Remove 0 0 <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Wifi State Qt::Horizontal 40 20 &VPN VPN Services true <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> Connect true <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> Disconnect Qt::Horizontal 40 20 <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> QAbstractItemView::NoEditTriggers false false QAbstractItemView::SingleSelection QAbstractItemView::SelectRows false false 5 false 80 true false false Name Type State Host Domain &Counters <html><head/><body><p>The service being monitored by the counters.</p></body></html> Service: 0 1 <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Home true 0 0 491 110 0 0 Counter not available. Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 1 <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Roaming true 0 0 491 109 0 0 Counter not available. Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true Qt::Vertical 20 40 <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> Settings: true &Preferences true <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> Start Options false <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> QAbstractSpinBox::PlusMinus 5 86400 10 10 <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> Disable Tray Icon false <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> Counter Update KB false <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> QAbstractSpinBox::PlusMinus 1 60 false <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> QAbstractSpinBox::PlusMinus 256 32768 64 1024 <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> Start Minimized <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> Use Icon Theme <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> Wait Time <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> Disable Counters <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> Counter Update Rate <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> Fake Transparency false <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> QAbstractSpinBox::PlusMinus true 16777215 16 false <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> true <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> true Qt::Vertical 20 40 <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> Desktop Specific <html><head/><body><p>Default is no desktop specific code.</p></body></html> None true <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> System Tray <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> Hide Tray Icon <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> Enable System Tray Popups true true <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> System Tray Notifications true Notifications true <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> Notification Daemon 1 0 Server Status true Program Control <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> Enable Autostart <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> Retry Failed Connection Qt::Vertical 20 40 <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> Interface true <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> Reset Counters <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> Advanced Controls false true <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options true <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> Enable ToolTips (Interface) 1 0 <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> true <html><head/><body><p>Open the color selection dialog. </p></body></html> ... Qt::UpArrow <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help &About <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> &License <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> ChangeLo&g Qt::Vertical 20 250 true 0 0 405 395 <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> true Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse Qt::Vertical 20 40 <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> Provisioning Editor <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor Qt::Horizontal 40 20 <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> E&xit Qt::Horizontal 40 20 <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> Mi&nimize Move Before Move After Rescan true Offline Mode tabWidget checkBox_devicesoff tableWidget_technologies pushButton_rescan tableWidget_services pushButton_movebefore pushButton_moveafter checkBox_hidecnxn comboBox_service pushButton_connect pushButton_disconnect pushButton_remove tableWidget_wifi scrollArea_home_counter scrollArea_roaming_counter checkBox_usestartoptions checkBox_enableinterfacetooltips checkBox_resetcounters checkBox_hideIcon checkBox_enablesystemtraytooltips checkBox_systemtraynotifications checkBox_notifydaemon pushButton_aboutCMST pushButton_aboutIconSet pushButton_aboutQT pushButton_license pushButton_change_log scrollArea toolButton_whatsthis pushButton_exit pushButton_minimize checkBox_advanced clicked(bool) pushButton_provisioning_editor setVisible(bool) 82 190 163 536 checkBox_waittime toggled(bool) spinBox_waittime setEnabled(bool) 410 199 578 201 checkBox_counterkb toggled(bool) spinBox_counterkb setEnabled(bool) 410 228 578 230 checkBox_counterseconds toggled(bool) spinBox_counterrate setEnabled(bool) 410 257 578 259 checkBox_faketranparency toggled(bool) spinBox_faketransparency setEnabled(bool) 410 286 578 288 checkBox_systemicontheme toggled(bool) lineEdit_icontheme setEnabled(bool) 410 145 578 146 checkBox_usestartoptions clicked(bool) groupBox_startoptions setEnabled(bool) 102 73 336 53 checkBox_advanced clicked(bool) groupBox_process setVisible(bool) 131 190 410 443 pushButton_movebefore clicked() actionMove_Before trigger() 117 498 -1 -1 pushButton_moveafter clicked() actionMove_After trigger() 203 498 -1 -1 pushButton_rescan clicked() actionRescan trigger() 611 318 -1 -1 checkBox_devicesoff clicked() actionOffline_Mode trigger() 567 54 -1 -1 checkBox_advanced clicked(bool) pushButton_vpn_editor setVisible(bool) 107 190 209 540 cmst/apps/resource.h000755 001750 000144 00000007405 12651776465 015155 0ustar00andyusers000000 000000 /**************************** resource.h ******************************* Header file that contains program #defines. It used to be that we kept all program update and version information in this single file. Now we've moved a lot of that to txt files inside the /text directory which are compiled in as a resource. This seems to result in a faster compile, but we now have manage information in two locations. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ #ifndef RESOURCE_H #define RESOURCE_H ///////////////////////////////// Program Values /////////////////////// // // Program Info (may be visible, but don't mark for tranalation) #define VERSION "2016.01.26-1" #define RELEASE_DATE "26 January 2016" #define COPYRIGHT_DATE "2013-2016" // Program Values: // QApplication (not user visible) // QSettings (visible in filesystem only) // System Logging (visible in system logs only) #define LONG_NAME "CMST - Connman System Tray" #define ORG "cmst" #define APP "cmst" #define LOG_NAME "CMST" // Program Values - Misc. (not user visible) #define SOCKET_NAME "cmst_single_app_socket" #define INTERNAL_THEME "CMST_Icon_Theme" #define IPT_REQ_LOG_PATH "/tmp/cmst" #define IPT_REQ_LOG_FILE "input_request.log" //////////////////////////// CMST Namespace///////////////////////////// // Used for enum's local to this program namespace CMST { enum { // errors No_Errors = 0x00, Err_No_DBus = (1 << 0), // Can't find DBus Err_Invalid_Con_Iface = (1 << 1), // Invalid interface Err_Properties = (1 << 2), // There was an error reading connman.Manager.GetProperties Err_Technologies = (1 << 3), // There was an error reading connman.Manager.GetTechnologies Err_Services = (1 << 4), // There was an error reading connman.Manager.GetServices Err_Invalid_VPN_Iface = (1 << 5), // Invalid interface // methods Manager_Properties = (1 << 1), // scan for properties Manager_Technologies = (1 << 2), // scan for technologies Manager_Services = (1 << 3), // scan for services Manager_All = (CMST::Manager_Properties | CMST::Manager_Technologies | CMST::Manager_Services), // provisioning editor ProvEd_No_Selection = 0x00, ProvEd_File_Read = (1 << 0), ProvEd_File_Delete = (1 << 1), ProvEd_File_Write = (1 << 2), // provisioning editor validator input ProvEd_Vd_None = 0x00, ProvEd_Vd_IPv4 = 0x01, ProvEd_Vd_IPv6 = 0x02, ProvEd_Vd_MAC = 0x03, ProvEd_Vd_46 = 0x04, ProvEd_Vd_Hex = 0x05, ProvEd_Vd_Int = 0x06, ProvEd_Vd_Dom = 0x07, ProvEd_Vd_Wd = 0x08, }; // enum } // namespace CMST #endif cmst/apps/rootapp/system/000755 001750 000144 00000000000 12645604010 016127 5ustar00andyusers000000 000000 cmst/misc/desktop/cmst.desktop000644 001750 000144 00000000450 12645570501 017127 0ustar00andyusers000000 000000 [Desktop Entry] Type=Application Version=1.0 Name=Connman UI Setup GenericName=Network Configuration Comment=QT GUI frontend for connman Categories=Settings;System;Qt;Network; Icon=cmst Terminal=false Exec=cmst StartupNotify=false X-GNOME-Autostart-enabled=true Name[de]=Netzwerk-Konfiguration cmst/apps/cmstapp/code/counter/counter.h000644 001750 000144 00000004304 12645570501 021017 0ustar00andyusers000000 000000 /**************************** counter.h ********************************** Code for the connection counter registered on DBus. When registered the connman daemon will communicate to this object with signals. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef CONNMANCOUNTER # define CONNMANCOUNTER # include # include # include # include # define CNTR_SERVICE "org.cmst" # define CNTR_INTERFACE "net.connman.Counter" # define CNTR_OBJECT "/org/cmst/Counter" class ConnmanCounter : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", CNTR_INTERFACE) public: ConnmanCounter(QObject*); QString getLabel(const QVariantMap&); inline int cnxns() {return receivers(SIGNAL(usageUpdated(const QDBusObjectPath&, const QString&, const QString&)));} signals: void usageUpdated(const QDBusObjectPath&, const QString&, const QString&); public Q_SLOTS: void Release(); void Usage(QDBusObjectPath, QVariantMap, QVariantMap); private: QVariantMap home_data; QVariantMap roam_data; }; #endif cmst/apps/cmstapp/code/vpn_prov_ed/000755 001750 000144 00000000000 12651532532 020027 5ustar00andyusers000000 000000 cmst/translations/cmst_de_DE.qm000644 001750 000144 00000052331 12645570501 017235 0ustar00andyusers000000 000000 sAhwA}nB1}B_#W"H5H5-/e e0;<%?VE@BN5+H5+f(6++(jDG`G'G*cNx$Nx$b>;xA~B#L 6 =]D.$99 4:4-7y wٔ:44"5WD$?4o.!XB&r ]+-J#3L,ML1L+L1]w^-w_1{L,9 II##X%Y#7*0D48%C諭+Z50(78[|$a=U30 +Y8[|?e0EA1&7Q&,Q&,"yA<^9EHXoe'~ A. 6L <* Mg) cr4| d+ , ޢ7 ;P :; S0 OS- dN$ mE '^ ~& ~ ~! ~( )"b -" 7N D5 P c4= j5Q j5."  I ,' 2D ŚI ŴI-L >/ ^C a";_ c~ h> h>1 pS! }OS! Z8?H ) F )0l Ol )^ 6 ׅ_ T^L VR@o V`@ i?2 i?2/ n $\ . h. nI,;IELN8d)0dB$H Z I,F~Jh1Jn2NIUT9"|4-/6iNX&Abbrechen&CancelAgent&&Verstecke Passwort&Hide PassphraseAgent&Identitt &IdentityAgent &Name&NameAgent&Passwort &PassphraseAgent &SSID&SSIDAgent&Benutzername &UsernameAgent&WPS Pin&WPS PinAgent......Agent<html><head/><body><p>Aktiviere diese Box um die Passwortbuchsteben zu verstecken.</p></body></html>Z

Check this box to obscure the password characters.

Agent2<html><head/><body><p>Connman fordert einen Login ber einen Webbrowser an. Diese Box zeigt die URL, welche die Loginseite enthlt, an.</p></body></html>

Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.

Agent<html><head/><body><p>Fahre mit dem Verbindungsprozess fort.</p></body></html>H

Continue the connection process.

Agent~<html><head/><body><p>Gebe einen WPS-Pin ein.</p></body></html>8

Enter a WPS pin.

Agent<html><head/><body><p>Wenn ein altes Passwort vorhanden ist, wird es hier als Referenz angezeigt.</p></body></html>n

If an old passphrase is available it will be shown here for reference.

Agent<html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html>c

Type the name of the hidden network you wish to connect to.

Agent<html><head/><body><p>Gebe hier dein Passwort ein.</p></body></html>A

Type the passphrase here.

Agent<html><head/><body><p>Gebe hier deine Identitt fr das Extensible Authentication Protocol an</p></body></html>e

Type your Identity for the Extensible Authentication Protocol

Agent:<html><head/><body><p>Benutze diesen Knopf um den ausgewhlten Browser zu starten. Der Browser wird die URL aus der Login-URL-Box anzeigen.</p></body></html>

Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.

Agentn<html><head/><body><p>WISPr Passwort.</p></body></html>7

WISPr password.

Agentv<html><head/><body><p>WISPr Benutzername.</p></body></html>7

WISPr username.

Agentf<html><head/><body><p>Was ist das</p></body></html>3

What's This

Agent<html><head/><body><p>Wenn aktiviert, wird die WPS-Push-Button Authentifizierung genutzt. </p></body></html>Z

When checked use WPS push button authentication.

AgentAgent-Eingabe Agent InputAgent6Browser-Anmeldung gewnschtBrowser Login RequestedAgentPExtensible Authentication Protocol (EAP)(Extensible Authentication Protocol (EAP)Agent(Verstecktes NetzwerkHidden NetworkAgentStarte &BrowserLaunch &BrowserAgentLogin URL: Login URL:AgentO&KO&KAgentPasswort PassphraseAgentPasswor&t Passwor&dAgent,Service Set identifierService Set IdentifierAgentLBenutze Push-&Button AuthentifizierungUse Push &Button AuthenticationAgent4WiFi Protected Setup (WPS)WiFi Protected Setup (WPS)AgentdWireless Internet Service Provider roaming (WISPr)2Wireless Internet Service Provider roaming (WISPr)AgentInformation Information AgentDialog8Agent-Anfrage fehlgeschlagenAgent Request Failed ConnmanAgentConnman Fehler Connman Error ConnmanAgentConnman gab folgenden Fehler zurck: <b><center>%1</b><br>Mchtest du es erneut versuchen?RConnman returned the following error:
%1
Would you like to retry? ConnmanAgentDie Agent-Anfrage ist fehlgeschlagen bevor eine Antwort zurck kam.5The agent request failed before a reply was returned. ConnmanAgent%L1 Bytes %L1 BytesConnmanCounter %L1 GB%L1 GBConnmanCounter %L1 KB%L1 KBConnmanCounter %L1 MB%L1 MBConnmanCounter%Ln Paket%Ln Pakete %Ln Packet(s)ConnmanCounter %n Tag%n Tage %n Day(s)ConnmanCounter%n Stunde%n Stunden %n Hour(s)ConnmanCounter%n Minute%n Minuten %n Minute(s)ConnmanCounter%n Sekunde%n Sekunden %n Second(s)ConnmanCounter<b>bertragen:</b><br>TX Total: %1 (%2), TX Fehler: %3, TX Dropped: %4FTransmit:
TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4ConnmanCounterF<br><br><b>Verbindungszeit:</b><br>

Connect Time:
ConnmanCounter<br><br><b>Empfangen:</b><br>RX Total: %1 (%2), RX Fehler: %3, RX Dropped: %4N

Received:
RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4ConnmanCounter...... ControlBoxf<html><head/><body><p>Was ist das</p></body></html>3

What's This

 ControlBoxAbbrechenCancel ControlBoxDeaktiviertDisabled ControlBox&BeendenE&xit ControlBoxAktiviertEnabled ControlBoxNameName ControlBoxAusOff ControlBox.Provisionierungs-EditorProvisioning Editor ControlBoxSicherheitSecurity ControlBoxTypType ControlBox&Domnen&DomainsPeditor&Allgemein&GeneralPeditor&Namensserver &NameserversPeditor &Proxy&ProxyPeditor&Zeitserver &TImeserversPeditorf<html><head/><body><p>Was ist das</p></body></html>3

What's This

PeditorAdresseAddressPeditorAutoAutoPeditor*Automatisch verbinden AutoConnectPeditorAbbrechenCancelPeditorDHCPDHCPPeditor DirektDirectPeditorDeaktiviertDisabledPeditorAktiviertEnabledPeditorAusgeschlossenExcludesPeditorGatewayGatewayPeditor IPv&4IPv&4Peditor IPv&6IPv&6PeditorManuellManualPeditorMethodeMethodPeditorNetzmaskeNetmaskPeditorOKOKPeditorAusOffPeditorBevorzugt PreferredPeditorPrefix-Lnge Prefix LengthPeditorPrivatsphrePrivacyPeditor(Eigenschaften-EditorProperty EditorPeditor&&Alles zurcksetzen Reset &AllPeditor&Sei&te zurcksetzen Reset Pa&gePeditor ServerServersPeditorURLURLPeditor &Seite aufrumen &Clear Page Provisioning&Lschen&Delete Provisioning&ffnen&Open Provisioning&Speichern&Save Provisioningf<html><head/><body><p>Was ist das</p></body></html>3

What's This

 ProvisioningCACertDatei CACertFile ProvisioningClientCertDateiClientCertFile ProvisioningBeschreibung Description Provisioning DomneDomain Provisioning&BeendenE&xit ProvisioningEAPEAP ProvisioningEduroam (lang)Eduroam (long) ProvisioningEduroam (kurz)Eduroam (short) ProvisioningVerstecktHidden ProvisioningIPV4 DHCP IPV4 DHCP ProvisioningIPv4 Adresse IPv4 Address ProvisioningIPv4 AusIPv4 Off ProvisioningIPv6 Adresse IPv6 Address ProvisioningIPv6 Auto IPv6 Auto ProvisioningIPv6 AusIPv6 Off ProvisioningIPv6.Privacy IPv6.Privacy ProvisioningIdentittIdentity ProvisioningMACMAC ProvisioningNameName ProvisioningNamensserver Nameservers ProvisioningPasswort Passphrase Provisioning Phase2Phase2 ProvisioningPrivateKeyDateiPrivateKeyFile Provisioning$PrivateKeyPasswortPrivateKeyPassphrase Provisioning*PrivateKeyPasswortTypPrivateKeyPassphraseType Provisioning.Provisionierungs-EditorProvisioning Editor ProvisioningSSIDSSID ProvisioningSuchdomnen SearchDomains ProvisioningSicherheitSecurity ProvisioningZeitserver Timeservers ProvisioningTypType ProvisioningInformation InformationProvisioningEditorIPv4 Adresse IPv4 AddressProvisioningEditorIPv6 Adresse IPv6 AddressProvisioningEditor$IPv6.Privacy {6 ?} IPv6 PrivacyProvisioningEditorRegistrierung des roothelper Objektes auf dem System-Bus fehlgeschlagen.7Failed to register roothelper object on the system bus. RootHelperRegistrieren des Dienstes org.cmst.roothelper fehlgeschlagen - Eventuell luft bereits eine andere Instanz.WFailed to register service org.cmst.roothelper - there may be another instance running. RootHelperScrollbox Scrollbox ScrollBoxTextLabel TextLabel ScrollBox"Bereits verbundenAlready connectedTranslateStrings&Bereits deaktiviertAlready disabledTranslateStrings"Bereits aktiviertAlready enabledTranslateStrings"Existiert bereitsAlready existsTranslateStringsIn Bearbeitung In progressTranslateStrings&Ungltige ArgumenteInvalid argumentsTranslateStrings*Ungltige EigenschaftInvalid propertyTranslateStrings"Ungltiger DienstInvalid serviceTranslateStringsKein Carrier No carrierTranslateStringsNicht verbunden Not connectedTranslateStringsNicht gefunden Not foundTranslateStrings&Nicht implementiertNot implementedTranslateStrings"Nicht registriertNot registeredTranslateStrings"Nicht untersttzt Not supportedTranslateStringsNicht eindeutig Not uniqueTranslateStrings$Aktion abgebrochenOperation abortedTranslateStrings2Aktion ZeitberschreitungOperation timeoutTranslateStrings"Passwort bentigtPassphrase requiredTranslateStrings$Zugriff verweigertPermission deniedTranslateStringsVerbindung associationTranslateStringsAutoautoTranslateStringsAuto"connman ethernet connection methodautoTranslateStringsAutoconnman ipv6 method stringautoTranslateStringsBluetooth bluetoothTranslateStringsCellularcellularTranslateStringscmstcmstTranslateStringsKonfiguration configurationTranslateStrings&connman system trayconnman system trayTranslateStrings DirektdirectTranslateStringsTrennen disconnectTranslateStringsEthernetethernetTranslateStringsFehlschlagfailureTranslateStrings GadgetgadgetTranslateStringsGPSgpsTranslateStringsInaktividleTranslateStringsieee8021x ieee8021xTranslateStringsManuellmanualTranslateStringsManuell"connman ethernet connection methodmanualTranslateStringsManuellconnman ipv4 method stringmanualTranslateStringsManuellconnman ipv6 method stringmanualTranslateStrings NichtsnoneTranslateStringsOfflineofflineTranslateStrings OnlineonlineTranslateStringsP2Pp2pTranslateStringsPSKpskTranslateStrings BereitreadyTranslateStrings SystemsystemTranslateStringsVPNvpnTranslateStringsWEPwepTranslateStringsWifiwifiTranslateStringsKabelgebundenwiredTranslateStringshEine andere Instanz von CMST luft gerade. Breche abNAnother running instance of CMST has been detected. This instance is abortingmain.cpp(Connman System-Tray.Connman System Tray.main.cpp"Deaktiviere das Tray-Icon. Wird eventuell bentigt, falls das System-Tray nicht kompatibel mit der Freedesktop.org-System-Tray Spezifikation ist.Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification.main.cppFalls Pseudotransparenz bentigt wird, kann hier die Hintergrundfarbe definiert werden (Format: 0xRRGGBB)bIf tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB)main.cppKBKBmain.cppxProtokolliere den connman inputRequest fr Debugging-Zwecke.4Log the connman inputRequest for debugging purposes.main.cpp RRGGBBRRGGBBmain.cppGebe die Wartezeit in Sekunden an, bevor das System-Tray-Icon angezeigt wird.FSpecify the wait time in seconds before starting the system tray icon.main.cppPStarte das GUI minimiert im System-Tray.+Start the GUI minimized in the system tray.main.cppDBenutze MATE DE spezifischen Code.Use MATE DE specific code.main.cpp>Benutze XFCE spezifischen Code.Use XFCE specific code.main.cpp[Experimentell] Datenzhler ausschalten. Kann eventuell die Last auf dem System minimieren.S[Experimental] Disable data counters. May be used to minimize load on your system.main.cpp[Experimentell] Der Zeitraum in Sekunden zwischen den Zhler-Aktualisierungen.?[Experimental] The interval in seconds between counter updates.main.cpp[Experimentell] Die Anzahl der kb die bertragen werden, bevor der Zhler aktualisiert wird.W[Experimental] The number of kb that have to be transmitted before the counter updates.main.cppSekundensecondsmain.cppcmst/apps/cmstapp/code/agent/agent.cpp000644 001750 000144 00000016350 12651160773 020417 0ustar00andyusers000000 000000 /**************************** agent.cpp ******************************** Code for the user agent registered on DBus. When the connman daemon needs to communicate with the user it does so through this agent. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include # include # include # include "./agent.h" # include "../resource.h" # include "./code/trstring/tr_strings.h" // header files generated by qmake from the xml file created by qdbuscpp2xml # include "agent_adaptor.h" # include "agent_interface.h" // defines # define ERROR_RETRY "net.connman.Agent.Error.Retry" # define ERROR_CANCELED "net.connman.Agent.Error.Canceled" # define ERROR_LAUNCHBROWSER "net.connman.Agent.Error.LaunchBrowser" // constructor ConnmanAgent::ConnmanAgent(QObject* parent) : QObject(parent) { // members uiDialog = new AgentDialog(qobject_cast (this) ); input_map.clear(); b_loginputrequest = false; // Create Adaptor and register this Agent on the system bus. new AgentAdaptor(this); QDBusConnection::systemBus().registerObject(AGENT_OBJECT, this); } /////////////////////////////////////// PUBLIC Q_SLOTS//////////////////////////////// // // Called when the service daemon unregisters the agent. QT deals with cleanup // tasks so don't need much here void ConnmanAgent::Release() { //qDebug() << "Agent Released"; return; } // Called when an error has to be reported to the user. Show the // error in a QMessageBox void ConnmanAgent::ReportError(QDBusObjectPath path, QString s_error) { (void) path; if ( QMessageBox::warning(qobject_cast (parent()), tr("Connman Error"), tr("Connman returned the following error:
%1
Would you like to retry?").arg(TranslateStrings::cmtr(s_error)), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) == QMessageBox::Yes) this->sendErrorReply(ERROR_RETRY, "Going to retry the request"); else return; } // // Called when it is required to ask the user to open a website to proceed // with login handling void ConnmanAgent::RequestBrowser(QDBusObjectPath path, QString url) { (void) path; // Send the url to the dialog to have the user the necessary information, return if canceled. if (this->uiDialog->showPage1(url) == QDialog::Rejected) this->sendErrorReply(ERROR_CANCELED,"User cancelled the dialog"); return; } // // Called when trying to connect to a service and some extra input is required from the user // A dialog is displayed with the required fields enabled (non-required fields are disabled). QVariantMap ConnmanAgent::RequestInput(QDBusObjectPath path, QMap dict) { (void) path; // Take the dict returned by DBus and extract the information we are interested in and place in input_map. this->createInputMap(dict); // Send our input_map to the dialog to have the user supply the necessary information // needed to continue. Return if canceled. QMap rtn; rtn.clear(); if (this->uiDialog->showPage0(input_map) == QDialog::Rejected) this->sendErrorReply(ERROR_CANCELED,"User cancelled the dialog"); else uiDialog->createDict(rtn); // create a return dict and send it back to connman on DBus return rtn; } // // Called when the agent request failed before a reply was returned. Show // a QMessageBox void ConnmanAgent::Cancel() { QMessageBox::information(qobject_cast (parent()), tr("Agent Request Failed"), tr("The agent request failed before a reply was returned.") ); return; } /////////////////////////////////////// PUBLIC FUNCTIONS //////////////////////////////// // // Function to put all of input fields received via DBus:RequestInput into a // QMap where key is the input field received and value is // generally blank but can be used for informational text. // // If we asked to log the input request create the log file in /tmp/cmst/input_request.log void ConnmanAgent::createInputMap(const QMap& r_map) { // Initialize our data map input_map.clear(); // QFile object for logging QTextStream log; QDir d(IPT_REQ_LOG_PATH); QFile logfile(d.absoluteFilePath(IPT_REQ_LOG_FILE)); if (b_loginputrequest) { if (!logfile.open(QIODevice::WriteOnly | QIODevice::Text)) b_loginputrequest = false; else log.setDevice(&logfile); } // Run through the r_map getting the keys and the few values we are interested in. QMap::const_iterator i = r_map.constBegin(); while (i != r_map.constEnd()) { // Lets see what the values contain, but first make sure we can get to them. if (b_loginputrequest) log << "Agent: " << "Map Key = " << i.key() << "\n"; if (! i.value().canConvert() ) return; const QDBusArgument qdba = i.value().value(); if (qdba.currentType() != QDBusArgument::MapType ) { if (b_loginputrequest) log << "Agent: " << "Error - QDBusArgument as the value is not a MapType\n"; return; } // The r_map.value() is a QDBusArgument::MapType so extract this map into a new QMap called m. qdba.beginMap(); QMap m; m.clear(); if (b_loginputrequest) log << "Agent: " << "Extracting the DBusArgument Map...\n"; while ( ! qdba.atEnd() ) { QString k; QVariant v; qdba.beginMapEntry(); qdba >> k >> v; qdba.endMapEntry(); m.insert(k, v.toString()); if (b_loginputrequest) log << "{ " << k << " , " << v.toString() << "}\n"; } // while qdba.endMap(); // Browse through QMap m and get things we need to look at // Types we don' really care about. We ignore "optional" and "alternate" requirements // and only extract the "mandatory" and "informational" requirements with values if (m.contains("Requirement") ) { QString val = QString(); if ( m.value("Requirement").contains("mandatory", Qt::CaseInsensitive) || m.value("Requirement").contains("informational", Qt::CaseInsensitive) ) { if (m.contains("Value") ) val = m.value("Value"); } // if mandatory or informational // create our input_map entry input_map[i.key()] = val; } // if requirement ++i; } // while logfile.close(); return; } cmst/apps/cmstapp/code/vpn_prov_ed/vpn_ed.h000644 001750 000144 00000006035 12650736224 021462 0ustar00andyusers000000 000000 /**************************** vpn_ed.h *************************** Code to manage the VPN Provisioning Editor dialog. Copyright (C) 2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef VPN_PROVISIONING_EDITOR_H # define VPN_PROVISIONING_EDITOR_H # include # include # include # include # include # include # include # include # include # include # include # include # include # include "ui_vpn_prov_editor.h" // The class to control the properties editor UI based on a QDialog class VPN_Editor : public QDialog { Q_OBJECT public: VPN_Editor(QWidget*); private: // members Ui::VPN_Prov ui; int i_sel; QMenuBar* menubar; QMenu* menu_global; QMenu* menu_OpenConnect; QMenu* menu_OpenVPN; QMenu* menu_VPNC; QMenu* menu_L2TP; QMenu* menu_PPTP; QActionGroup* group_provider; QActionGroup* group_freeform; QActionGroup* group_combobox; QActionGroup* group_yes; QActionGroup* group_validated; QActionGroup* group_selectfile; QActionGroup* group_template; QButtonGroup* bg01; QStatusBar* statusbar; int statustimeout; QString vpn_path; private slots: void inputSelectFile(QAction*); void inputValidated(QAction*, QString s = QString()); void inputComboBox(QAction*); void inputYes(QAction*); void inputFreeForm(QAction*, QString s = QString()); void showWhatsThis(); void resetPage(); void requestFileList(QAbstractButton*); void processFileList(const QStringList&); void seedTextEdit(const QString&); void deleteCompleted(bool); void writeCompleted(qint64); void callbackErrorHandler(QDBusError); void createProvider(QAction*); void importOpenVPN(); public: inline void setWhatsThisIcon(QIcon icon) {ui.toolButton_whatsthis->setIcon(icon);} }; #endif cmst/apps/cmstapp/code/agent/agent.h000644 001750 000144 00000004742 12645570501 020063 0ustar00andyusers000000 000000 /**************************** agent.h ********************************** Code for the user agent registered on DBus. When the connman daemon needs to communicate with the user it does so through this agent. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef CONNMANAGENT # define CONNMANAGENT # include # include # include # include # include # include # include # include "./code/agent/agent_dialog.h" # define AGENT_SERVICE "org.cmst" # define AGENT_INTERFACE "net.connman.Agent" # define AGENT_OBJECT "/org/cmst/Agent" class ConnmanAgent : public QObject, protected QDBusContext { Q_OBJECT Q_CLASSINFO("D-Bus Interface", AGENT_INTERFACE) public: ConnmanAgent(QObject*); inline void setLogInputRequest(bool b) {b_loginputrequest = b;} public Q_SLOTS: void Release(); void ReportError(QDBusObjectPath, QString); void RequestBrowser(QDBusObjectPath, QString); QVariantMap RequestInput(QDBusObjectPath, QMap); void Cancel(); private: AgentDialog* uiDialog; QMap input_map; bool b_loginputrequest; void createInputMap(const QMap&); public: inline void setWhatsThisIcon(QIcon icon) {uiDialog->setWhatsThisIcon(icon);} }; #endif cmst/misc/000755 001750 000144 00000000000 12576410746 013125 5ustar00andyusers000000 000000 cmst/images/application/variations/000755 001750 000144 00000000000 12627435077 020122 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/peditor/000755 001750 000144 00000000000 12645604021 017150 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/vpn_agent/vpnagent_adaptor.h000644 001750 000144 00000003557 12650020224 023173 0ustar00andyusers000000 000000 /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp org.monkey_business_enterprises.vpnagent.xml -a vpnagent_adaptor * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef VPNAGENT_ADAPTOR_H #define VPNAGENT_ADAPTOR_H #include #include QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE /* * Adaptor class for interface net.connman.vpn.Agent */ class VPNAgentAdaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "net.connman.vpn.Agent") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") public: VPNAgentAdaptor(QObject *parent); virtual ~VPNAgentAdaptor(); public: // PROPERTIES public Q_SLOTS: // METHODS void Cancel(); void Release(); void ReportError(const QDBusObjectPath &in0, const QString &in1); QVariantMap RequestInput(const QDBusObjectPath &in0, const QVariantMap &in1); Q_SIGNALS: // SIGNALS }; #endif cmst/images/application/variations/24x24/000755 001750 000144 00000000000 12645604060 020673 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/vpn_agent/cpp2xml.sh000755 001750 000144 00000001560 12650031000 021374 0ustar00andyusers000000 000000 #!/bin/bash # # script to convert the header file to cpp # # -M all public slots # -P all properties # # Adaptor and interface code is generated here because the QT autogenerator # creates an adaptor class based on the last part of the interface name. # So net.connman.Agent and net.connman.vpn.Agent both create an adaptor # named AgentAdaptor. This compiles fine, but Mr. Linker does not like it. # Generate the vpn adaptors and interfaces here and then change all instances of # AgentAdaptor to VPNAgentAdaptor. # qdbuscpp2xml -M -P vpnagent.h -o org.monkey_business_enterprises.vpnagent.xml qdbusxml2cpp org.monkey_business_enterprises.vpnagent.xml -a vpnagent_adaptor qdbusxml2cpp org.monkey_business_enterprises.vpnagent.xml -p vpnagent_interface sed -i 's/AgentAdaptor/VPNAgentAdaptor/g' vpnagent_adaptor.h sed -i 's/AgentAdaptor/VPNAgentAdaptor/g' vpnagent_adaptor.cpp cmst/images/raw_art/nm-signal-100.png000644 001750 000144 00000003050 12645570501 017756 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTEͺ|}|¡hhh!!!VVVźö&&& cccvvvJJJmmmTTT}}}JJJuuu333$$$pppppp"""EEEGGG___sss popxxx]]]mmlccckkkwwwWWWVVVrrrDDD}}}dddKKK{{{eee%%%fffZZZ qqqbbb111YYYaaaMMMÿzntRNS=KJ9 QڤP /4NΧ\[W "XkNt@YX:ihT~pE˨ARB7@9 Nᨂ?68Q#=j @psK$]W,;mE4>lq<]^9#? $!E%6F"bKGDH pHYs$$ctIME84~\IDAT(c` 021s srq  #]tʕKHJedߐWPTRVQy]M]"}KGWO춹%X ]O/=_?аȨ1 q I)>zAjZ:CFfبܼGE%eW$VVAU]󴶮ވYK+m]=}&N cmst/apps/rootapp/system/org.cmst.roothelper.service.example000644 001750 000144 00000000125 12645570501 025066 0ustar00andyusers000000 000000 [D-BUS Service] Name=org.cmst.roothelper Exec=/usr/lib/cmst/cmstroothelper User=root cmst/apps/cmstapp/code/scrollbox/scrollbox.h000755 001750 000144 00000003335 12645570501 021705 0ustar00andyusers000000 000000 /**************************** scrollbox.h ***************************** Dialog to display text to the user. Kind of like a neutered QMessageBox except it has scroll bars built in. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef SCROLLBOX_H # define SCROLLBOX_H # include # include "ui_scrollbox.h" // The main program class based on a QDialog class ScrollBox : public QDialog { Q_OBJECT public: ScrollBox(QWidget*); static void execScrollBox(QString, QString, QWidget*); public slots: void setDisplayText(const QString&); private: // members Ui::ScrollBox ui; }; #endif cmst/apps/cmstapp/code/notify/notify.h000644 001750 000144 00000011034 12645570501 020477 0ustar00andyusers000000 000000 /**************************** notify.h ********************************** Code for a notify client to interface with a desktop notification server. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ /* Usage is very similar to notify-send. Create a notifyclient instance. * During creation the constructor will try to connect to a notification * server. You can test if this was successful by calling the isValid() * function. If sussessful you may also use the getxxx functions to * return information about the server. * * To send a notification initialize the client using the init() function. * Set the items you wish to send using the setxxx functions. To show * the notification call sendNotification(). * * This class may also be used to store the information you saved to be * retrieved by the various getxxx functions. This information can be used * for instance to show a popup from the systemtray icon. */ # ifndef NOTIFY_CLIENT # define NOTIFY_CLIENT # include # include # include # include # include # include # include # include // Used for enum's local to this program namespace Nc { enum { // urgency levels UrgencyLow = 0, UrgencyNormal = 1, UrgencyCritical = 2 }; } // namespace class NotifyClient : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Notifications") public: NotifyClient(QObject*); inline bool isValid() {return b_validconnection;} inline QString getServerName() {return s_name;} inline QString getServerVendor() {return s_vendor;} inline QString getServerVersion() {return s_version;} inline QString getServerSpecVersion() {return s_spec_version;} inline QStringList getServerCapabilities() {return sl_capabilities;} inline void setSummary(QString s) {s_summary = s;} inline void setAppName(QString s) {s_app_name = s;} inline void setBody(QString s) {s_body = s;} inline void setIcon(QString s) {s_icon = s;} inline void setUrgency(int i) {i_urgency = i;} inline void setExpireTimeout(int i) {i_expire_timeout = i;} inline void setOverwrite(bool b) {b_overwrite = b;} inline QString getSummary() {return s_summary;} inline QString getAppName() {return s_app_name;} inline QString getBody() {return s_body;} inline QString getIcon() {return s_icon;} inline int getUrgency() {return i_urgency;} inline int getExpireTimeout() {return i_expire_timeout;} void connectToServer(); void init(); void sendNotification(); private: // members QDBusInterface* notifyclient; QString s_name; QString s_vendor; QString s_version; QString s_spec_version; QStringList sl_capabilities; bool b_validconnection; quint32 current_id; QString s_summary; QString s_app_name; QString s_body; QString s_icon; int i_urgency; int i_expire_timeout; bool b_overwrite; QMap file_map; // functions void getServerInformation(); void getCapabilities(); void closeNotification(quint32); private slots: void notificationClosed(quint32, quint32); void actionInvoked(quint32, QString); void cleanUp(); }; #endif cmst/translations/cmst_it_IT.ts000644 001750 000144 00000720575 12650551344 017332 0ustar00andyusers000000 000000 Agent Agent Input Passphrase <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> <html><head/><body><p>Type the passphrase here.</p></body></html> <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> &Hide Passphrase O&ld Passphrase &Passphrase Hidden Network &Name <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> Service Set Identifier &SSID Wireless Internet Service Provider roaming (WISPr) &Username <html><head/><body><p>WISPr username.</p></body></html> Passwor&d <html><head/><body><p>WISPr password.</p></body></html> Extensible Authentication Protocol (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> &Identity WiFi Protected Setup (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> Use Push &Button Authentication &WPS Pin <html><head/><body><p>Enter a WPS pin.</p></body></html> Browser Login Requested Choose or enter a browser: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> Login URL: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> Launch &Browser <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel AgentDialog Information You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "%1 %2" ConnmanAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ConnmanCounter %L1 Bytes %L1 KB %L1 MB %L1 GB <b>Transmit:</b><br>TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4 %Ln Packet(s) <br><br><b>Received:</b><br>RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4 <br><br><b>Connect Time:</b><br> %n Day(s) %n Hour(s) %n Minute(s) %n Second(s) ConnmanVPNAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ControlBox Dialog &Status <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> All Devices &Off <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> Global Properties <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> OfflineMode: Unavailable <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> State: Unavailable <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Technologies Name Type Powered Connected Tethering <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> Resc&an <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> Services State Connection <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move Before <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move After <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> &Less &Details Ser&vice <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> Configuration &Wireless <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> Favorite Security Signal Strength Wireless Services <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> Connect <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> Disconnect Remove <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Wifi State &Counters <html><head/><body><p>The service being monitored by the counters.</p></body></html> Service: <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Home Counter not available. <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Roaming <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> Settings: &Preferences <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> Interface <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State Rescan Offline Mode <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> Use Icon Theme <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> Enable ToolTips (Interface) <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> Reset Counters <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> Advanced Controls <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> Start Options <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> Disable Tray Icon <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> Counter Update KB <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> Start Minimized <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> Wait Time <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> Disable Counters <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> Counter Update Rate <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> Desktop Specific <html><head/><body><p>Default is no desktop specific code.</p></body></html> None <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> &VPN VPN Services <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> Host Domain Fake Transparency <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> System Tray <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> Hide Tray Icon <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> Enable System Tray Popups <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> System Tray Notifications Notifications <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> Notification Daemon Server Status Program Control <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> Enable Autostart <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> Retry Failed Connection <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> <html><head/><body><p>Open the color selection dialog. </p></body></html> ... <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help &About <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> &License <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> ChangeLo&g <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> Provisioning Editor <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> E&xit <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> Mi&nimize Ma&ximize &Exit About %1 Service Details WiFi Connections VPN Connections <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian)<br><center><b>Build Information:</b><center>Compiled using QT version %5<center>Built %6 - %7 About AwOken <center>This program uses the <b>AwOken</b> icon set version 2.5<br><br>Released under the<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>The CMST icon is a derivative work from the AwOken icon set. License %1 change log is not available. ChangeLog Cancel <b>Service:</b> %1 Unable to determine service No Services Selected You need to select a Wifi service before pressing the remove button. Offline Mode Engaged Offline Mode Disabled %1 (%2) Network Connection: %1 Network Services: No network services available Service Error: %1 Object Path: %1 VPN Engaged VPN Disengaged Warning <center><b>We received a DBUS reply message indicating an error while trying to scan technologies.</b></center><br><br>Error Name: %1<br><br>Error Message: %2 <b>Connection:</b> %1 <br><b>Service Details:</b><br> Service Type: %1<br> Service State: %1<br> Favorite: %1<br> Yes favorite No favorite External Configuration File: %1<br> Yes immutable No immutable Auto Connect: %1<br> On autoconnect No autoconnect <br><b>IPv4</b><br> IP Address Acquisition: %1<br> IP Address: %1<br> IP Netmask: %1<br> IP Gateway: %1<br> <br><b>IPv6</b><br> Address Acquisition: %1<br> Prefix Length: <br> Prefix Length: %1<br> Privacy: %1<br> <br><b>Proxy</b><br> URL: %1<br> Servers:<br>&nbsp;&nbsp;%1<br> Excludes:<br>&nbsp;&nbsp;%1<br> <br><b>Name Servers</b><br> <br><br><b>Time Servers</b><br> <br><br><b>Search Domains</b><br> <br><br><b>Ethernet</b><br> Connection Method: %1<br> Interface: %1<br> Device Address: %1<br> MTU: %1<br> <br><b>Wireless</b><br> Security: %1<br> Strength: %1<br> Roaming: %1<br> Yes roaming No roaming <br><b>VPN Provider</b><br> Host: %1<br> Domain: %1<br> Name: %1<br> Type: %1<br> State: Engaged Disabled Offline Mode %1On%1%1 powered %1Off%1%1 powered Yes connected No connected Yes tethered No tethered WiFi Technologies:<br> %1 Found, %2 Powered Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. Ethernet Connection<br> icon_tool_tip Service: %1<br> Interface: %1 WiFi Connection<br> icon_tool_tip SSID: %1<br> Strength: %1%<br> VPN Connection<br> icon_tool_tip Connection is in the Ready State. icon_tool_tip Connection is in the Failure State, attempting to reestablish the connection icon_tool_tip Connection is in the Failure State. icon_tool_tip Not Connected icon_tool_tip Error retrieving properties via Dbus Connection status is unknown Type: %1 <br>Powered On Off Not Connected <br>Tethering Enabled Connection : %1 Signal Strength: %1% Favorite Connection Never Connected <br>Security : %1 <br>Roaming <br>Autoconnect is <p style='white-space:pre'><center><b>%1</b></center> <center><b>Unable to find a systemtray on this machine.</b><center><br>The program may still be used to manage your connections, but the tray icon will be disabled.<center><br><br>If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the <b>-w</b> switch and set a delay as necessary. The exact wait time will vary from system to system. Could not find a connection to the system bus %1 - Critical Error Unable to find a connection to the system bus.<br><br>%1 will not be able to communicate with connman. Could not create an interface to connman on the system bus Unable to create an interface to connman on the system bus.<br><br>%1 will not be able to communicate with connman. Error reading or parsing connman.Manager.GetProperties %1 - Warning There was an error reading or parsing the reply from method connman.Manager.GetProperties.<br><br>It is unlikely any portion of %1 will be functional. Error reading or parsing connman.Manager.GetTechnologies There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.<br><br>Some portion of %1 may still be functional. Error reading or parsing connman.Manager.GetServices There was an error reading or parsing the reply from method connman.Manager.GetServices.<br><br>Some portion of %1 may still be functional. %1 version %2 by %3 has been detected on this system.<p>This server supports desktop Notification Specification version %4 Colorize Icons Attempt %1 of 4 looking for notification server. %1 license is the MIT (Expat) license. You need to select a service before pressing the connect button. You need to select a service before pressing the disconnect button. <p style='white-space:pre'><center><b>%1 Properties</b></center> Unable to find or connect to a Notification server. IconManager A new icon definition file will be installed to <b>%1</b> and a backup of the old definition file has been created as <b>%2</b> <p>If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. <p>If the original was never customized or you just wish to delete the backup now you may select <i>Discard</i> to delete the backup or <i>Save</i> to retain it. Peditor Property Editor &General <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> AutoConnect <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Nameservers <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &TImeservers <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Domains <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> IPv&4 Address Netmask Gateway DHCP Manual Off Method <html><head/><body><p>User configuration of IPv6 settings</p></body></html> IPv&6 Auto Prefix Length Privacy Disabled Preferred Enabled <html><head/><body><p>User configuration of Proxy settings.</p></body></html> &Proxy Direct <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> URL Servers <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> Excludes <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> Reset Pa&ge <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> Reset &All <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> OK <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> Cancel Provisioning Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Description [service_*] Type MAC Nameservers Timeservers SearchDomains Domain SSID EAP CACertFile ClientCertFile PrivateKeyFile PrivateKeyPassphrase PrivateKeyPassphraseType Identity Phase2 Passphrase Security Hidden Eduroam (long) Eduroam (short) IPv4 Address IPv4 Off IPV4 DHCP IPv6 Address IPv6 Off IPv6 Auto IPv6.Privacy ProvisioningEditor Global Service WiFi Templates File Path to the CA Certificate File File Path to the Client Certificate File File path to the Client Private Key File Key Files (*.pem);;All Files (*.*) MAC address. SSID: hexadecimal representation of an 802.11 SSID List of Nameservers List of Timeservers List of DNS Search Domains Domain name to be used Enter the string representation of an 802.11 SSID. Service type. EAP type. Private key passphrase type. Network security type. Hidden network IPv6 Privacy %1 - Item Input Tag which will replace the * with<br>an identifier unique to the config file. Enter the network name. Enter a description of the network. Password/Passphrase for the private key file. Identity string for EAP. RSN/WPA/WPA2 Passphrase Phase 2 (inner authentication with TLS tunnel)<br>authentication method. %1 - Text Input Information The IPv4 <b>Address</b>, <b>Netmask</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv4 Address IPv4 Netmask IPv4 Gateway (This is an optional entry) The IPv6 <b>Address</b>, <b>Prefix Length</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv6 Address %1 - Integer Input Enter the IPv6 prefix length IPv6 Gateway (This is an optional entry) <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 RootHelper Failed to register service org.cmst.roothelper - there may be another instance running. Failed to register roothelper object on the system bus. ScrollBox Scrollbox TextLabel TranslateStrings connman system tray Main Window Title cmst Abbreviated Program Name - used for QMessageBox titles idle connman state string association connman state string configuration connman state string ready connman state string online connman state string disconnect connman state string failure connman state string offline connman state string system connman type string ethernet connman type string wifi connman type string bluetooth connman type string cellular connman type string gps connman type string vpn connman type string gadget connman type string p2p connman type string wired connman type string direct connman proxy string manual connman proxy string auto connman proxy string psk connman security string ieee8021x connman security string none connman security string wep connman security string wps connman security string Invalid arguments connman error string Permission denied connman error string Passphrase required connman error string Not registered connman error string Not unique connman error string Not supported connman error string Not implemented connman error string Not found connman error string No carrier connman error string In progress connman error string Already exists connman error string Already enabled connman error string Already disabled connman error string Already connected connman error string Not connected connman error string Operation aborted connman error string Operation timeout connman error string Invalid service connman error string Invalid property connman error string disabled connman privacy string enabled connman privacy string prefered connman privacy string auto connman ethernet connection method manual connman ethernet connection method dhcp connman ipv4 method string manual connman ipv4 method string off connman ipv4 method string fixed connman ipv4 method string auto connman ipv6 method string manual connman ipv6 method string 6to4 connman ipv6 method string off connman ipv6 method string openconnect connman vpn connection type openvpn connman vpn connection type vpnc connman vpn connection type l2tp connman vpn connection type pptp connman vpn connection type VPNAgent VPN Agent Input Username <html><head/><body><p>WISPr username.</p></body></html> Password <html><head/><body><p>WISPr password.</p></body></html> Host Name OpenConnect CA Cert. Client Cert. Cookie Server Cert. VPN Host <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel Save Credentials VPN_Editor Global OpenConnect OpenVPN VPNC L2TP PPTP All Files (*.*) CA Files (*.pem *.ca);;All Files (*.*) Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Key Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Config Files (*.ovpn *.conf *.config);;All Files (*.*) VPN server IP address (ex: 1.2.3.4) %1 - Item Input %1 - Verify Option User defined name for the VPN Domain name for the VPN Service (example: corporate.com) Networks behing the VPN link, if more than one separate by a comma. Format is network/netmask/gateway, and gateway can be omitted. Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16 Networks = entry is optional and may be left blank. %1 - Text Input Information <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 VPN_Prov VPN Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Name of the network. Description Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE PPPD.ReqMPPE40 PPPD.ReqMPPE128 PPPD.ReqMPPEStateful VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert Local peer's signed certificate. OpenVPN.Key Local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass Authenticate with server using username/password? OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. main.cpp Another running instance of CMST has been detected. This instance is aborting Connman System Tray. Bypass restoring the window state if restoring window state is specified in the settings file. Bypass restoring any start options in the settings file. [Experimental] Disable data counters. May be used to minimize load on your system. Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. Use an icon theme from your system. Icon Theme Name Log the connman inputRequest for debugging purposes. Start the GUI minimized in the system tray. Specify the wait time in seconds before starting the system tray icon. seconds [Experimental] The number of kb that have to be transmitted before the counter updates. KB [Experimental] The interval in seconds between counter updates. If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB) RRGGBB Use XFCE specific code. Use MATE DE specific code. cmst/apps/cmstapp/code/vpn_agent/vpnagent.h000644 001750 000144 00000004741 12650025451 021464 0ustar00andyusers000000 000000 /**************************** vpnagent.h ********************************** Code for the user agent registered on DBus. When the connman vpn daemon needs to communicate with the user it does so through this agent. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef CONNMAN_VPN_AGENT # define CONNMAN_VPN_AGENT # include # include # include # include # include # include # include # include "./code/vpn_agent/vpnagent_dialog.h" # define VPN_AGENT_SERVICE "org.cmst" # define VPN_AGENT_INTERFACE "net.connman.vpn.Agent" # define VPN_AGENT_OBJECT "/org/cmst/VPNAgent" class ConnmanVPNAgent : public QObject, protected QDBusContext { Q_OBJECT Q_CLASSINFO("D-Bus Interface", VPN_AGENT_INTERFACE) public: ConnmanVPNAgent(QObject*); inline void setLogInputRequest(bool b) {b_loginputrequest = b;} public Q_SLOTS: void Release(); void ReportError(QDBusObjectPath, QString); QVariantMap RequestInput(QDBusObjectPath, QMap); void Cancel(); private: VPNAgentDialog* uiDialog; QMap input_map; bool b_loginputrequest; void createInputMap(const QMap&); public: inline void setWhatsThisIcon(QIcon icon) {uiDialog->setWhatsThisIcon(icon);} }; #endif cmst/images/raw_art/nm-signal-75.png000644 001750 000144 00000003043 12645570501 017713 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTE̒~hhh VVVĹõ''' cccuuuJJJoonTTT}}}JJJuuu333pppppp###EEEGGG___sss popxxx]]]mmlccckkkwwwWWWVVVrrrDDD}}}dddKKK{{{eee%%%fffZZZ qqqbbb111YYYaaaMMMXtRNS%(Sny|xlQ'U{{V'lyfSHHSfxo.-t{Y++Vxx5'ts: @YX: 4ly3No*~p"eT _)B8 UNᨂ? 68 Q#=j @psK$]W,;mE4>lq<]^9#? $!E%6FkZbKGDH pHYs$$ctIME84~YIDAT(c` 021 sprq  ! KHHII…UT54ut!F&f V6v` 'gW7wO/o_?ehXxDdTtLl\\|BbRdrJjZ:H+2;'{/`(,*URZV^qFfZZwt2Dvu>뇻wIL6}Y̝7.`"K>~lV#2r'O׭dF 0l۶xEa= {?>r'OaD3_=%_x%,~sȽ~- l ;#Hޗyϱ'%tEXtdate:create2015-11-04T18:05:28-05:00,%tEXtdate:modify2013-07-28T03:30:56-04:00n+IENDB`cmst/apps/cmstapp/code/vpn_agent/vpnagent.cpp000644 001750 000144 00000015513 12651161032 022013 0ustar00andyusers000000 000000 /**************************** vpnagent.cpp ******************************** Code for the user agent registered on DBus. When the connman vpn daemon needs to communicate with the user it does so through this agent. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include # include # include # include "./vpnagent.h" # include "../resource.h" # include "./code/trstring/tr_strings.h" // header files generated by qmake from the xml file created by qdbuscpp2xml # include "./vpnagent_adaptor.h" # include "./vpnagent_interface.h" // defines # define ERROR_RETRY "net.connman.vpn.Agent.Error.Retry" # define ERROR_CANCELED "net.connman.vpn.Agent.Error.Canceled" // constructor ConnmanVPNAgent::ConnmanVPNAgent(QObject* parent) : QObject(parent) { // members uiDialog = new VPNAgentDialog(qobject_cast (this) ); input_map.clear(); b_loginputrequest = false; // Create Adaptor and register this Agent on the system bus. new VPNAgentAdaptor(this); QDBusConnection::systemBus().registerObject(VPN_AGENT_OBJECT, this); return; } /////////////////////////////////////// PUBLIC Q_SLOTS//////////////////////////////// // // Called when the service daemon unregisters the agent. QT deals with cleanup // tasks so don't need much here void ConnmanVPNAgent::Release() { //qDebug() << "Agent Released"; return; } // Called when an error has to be reported to the user. Show the // error in a QMessageBox void ConnmanVPNAgent::ReportError(QDBusObjectPath path, QString s_error) { (void) path; if ( QMessageBox::warning(qobject_cast (parent()), tr("Connman Error"), tr("Connman returned the following error:
%1
Would you like to retry?").arg(TranslateStrings::cmtr(s_error)), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) == QMessageBox::Yes) this->sendErrorReply(ERROR_RETRY, "Going to retry the request"); else return; } // // Called when trying to connect to a service and some extra input is required from the user // A dialog is displayed with the required fields enabled (non-required fields are disabled). QVariantMap ConnmanVPNAgent::RequestInput(QDBusObjectPath path, QMap dict) { (void) path; // Take the dict returned by DBus and extract the information we are interested in and place in input_map. this->createInputMap(dict); // Send our input_map to the dialog to have the user supply the necessary information // needed to continue. Return if canceled. QMap rtn; rtn.clear(); if (this->uiDialog->showPage(input_map) == QDialog::Rejected) this->sendErrorReply(ERROR_CANCELED,"User cancelled the dialog"); else uiDialog->createDict(rtn); // create a return dict and send it back to connman on DBus return rtn; } // // Called when the agent request failed before a reply was returned. Show // a QMessageBox void ConnmanVPNAgent::Cancel() { QMessageBox::information(qobject_cast (parent()), tr("Agent Request Failed"), tr("The agent request failed before a reply was returned.") ); return; } /////////////////////////////////////// PUBLIC FUNCTIONS //////////////////////////////// // // Function to put all of input fields received via DBus:RequestInput into a // QMap where key is the input field received and value is // generally blank but can be used for informational text. // // If we asked to log the input request create the log file in /tmp/cmst/input_request.log void ConnmanVPNAgent::createInputMap(const QMap& r_map) { // Initialize our data map input_map.clear(); // QFile object for logging QTextStream log; QDir d(IPT_REQ_LOG_PATH); QFile logfile(d.absoluteFilePath(IPT_REQ_LOG_FILE)); if (b_loginputrequest) { if (!logfile.open(QIODevice::WriteOnly | QIODevice::Text)) b_loginputrequest = false; else log.setDevice(&logfile); } // Run through the r_map getting the keys and the few values we are interested in. QMap::const_iterator i = r_map.constBegin(); while (i != r_map.constEnd()) { // Lets see what the values contain, but first make sure we can get to them. if (b_loginputrequest) log << "\nVPN_Agent: "<< "Map Key = " << i.key() << "\n"; if (! i.value().canConvert() ) return; const QDBusArgument qdba = i.value().value(); if (qdba.currentType() != QDBusArgument::MapType ) { if (b_loginputrequest) log << "\nVPN_Agent: Error - QDBusArgument as the value is not a MapType\n"; return; } // The r_map.value() is a QDBusArgument::MapType so extract this map into a new QMap called m. qdba.beginMap(); QMap m; m.clear(); if (b_loginputrequest) log << "\nVPN_Agent: " << "Extracting the DBusArgument Map...\n"; while ( ! qdba.atEnd() ) { QString k; QVariant v; qdba.beginMapEntry(); qdba >> k >> v; qdba.endMapEntry(); m.insert(k, v.toString()); if (b_loginputrequest) log << "{ " << k << " , " << v.toString() << "}\n"; } // while qdba.endMap(); // Browse through QMap m and get things we need to look at // Types we don' really care about. We ignore "optional" and "alternate" requirements // and only extract the "mandatory" and "informational" requirements with values if (m.contains("Requirement") ) { QString val = QString(); if ( m.value("Requirement").contains("mandatory", Qt::CaseInsensitive) || m.value("Requirement").contains("informational", Qt::CaseInsensitive) ) { if (m.contains("Value") ) val = m.value("Value"); } // if mandatory or informational // create our input_map entry input_map[i.key()] = val; } // if requirement ++i; } // while logfile.close(); return; } cmst/apps/rootapp/system/notes.txt000644 001750 000144 00000000307 12645570501 020027 0ustar00andyusers000000 000000 org.cmst.roothelper.conf goes into /etc/dbus-1/system.d/ org.cmst.roothelper.service goes into /usr/share/dbus-1/system-services/ The .service file is generated by rootapp.pro during "make install" cmst/apps/cmstapp/code/control_box/ui/000755 001750 000144 00000000000 12650551344 020454 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/vpn_agent/ui/vpnagent.ui000644 001750 000144 00000020446 12650017374 022274 0ustar00andyusers000000 000000 VPNAgent 0 0 345 433 VPN Agent Input Username lineEdit_username <html><head/><body><p>WISPr username.</p></body></html> true Password lineEdit_password <html><head/><body><p>WISPr password.</p></body></html> true Host true Name true OpenConnect CA Cert. true Client Cert. Cookie Server Cert. true VPN Host <html><head/><body><p>What's This</p></body></html> ... :/icons16x16/images/16x16/help.png:/icons16x16/images/16x16/help.png Qt::Horizontal 328 20 <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel Qt::Vertical 20 40 Save Credentials lineEdit_username lineEdit_password lineEdit_host lineEdit_cacert lineEdit_clientcert lineEdit_cookie lineEdit_servercert lineEdit_vpnhost pushButton_accept pushButton_cancel toolButton_whatsthis pushButton_accept clicked() VPNAgent accept() 229 405 227 -10 pushButton_cancel clicked() VPNAgent reject() 313 396 318 -12 cmst/apps/cmstapp/code/vpn_agent/vpnagent_adaptor.cpp000644 001750 000144 00000003213 12650020224 023513 0ustar00andyusers000000 000000 /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp org.monkey_business_enterprises.vpnagent.xml -a vpnagent_adaptor * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "vpnagent_adaptor.h" #include #include #include #include #include #include #include /* * Implementation of adaptor class VPNAgentAdaptor */ VPNAgentAdaptor::VPNAgentAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent) { // constructor setAutoRelaySignals(true); } VPNAgentAdaptor::~VPNAgentAdaptor() { // destructor } void VPNAgentAdaptor::Cancel() { // handle method call net.connman.vpn.Agent.Cancel QMetaObject::invokeMethod(parent(), "Cancel"); } void VPNAgentAdaptor::Release() { // handle method call net.connman.vpn.Agent.Release QMetaObject::invokeMethod(parent(), "Release"); } void VPNAgentAdaptor::ReportError(const QDBusObjectPath &in0, const QString &in1) { // handle method call net.connman.vpn.Agent.ReportError QMetaObject::invokeMethod(parent(), "ReportError", Q_ARG(QDBusObjectPath, in0), Q_ARG(QString, in1)); } QVariantMap VPNAgentAdaptor::RequestInput(const QDBusObjectPath &in0, const QVariantMap &in1) { // handle method call net.connman.vpn.Agent.RequestInput QVariantMap out0; QMetaObject::invokeMethod(parent(), "RequestInput", Q_RETURN_ARG(QVariantMap, out0), Q_ARG(QDBusObjectPath, in0), Q_ARG(QVariantMap, in1)); return out0; } cmst/apps/cmstapp/code/provisioning/ui/provisioning_editor.ui000644 001750 000144 00000025210 12646535647 025322 0ustar00andyusers000000 000000 Provisioning 0 0 374 484 Provisioning Editor true <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open false true <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save false Qt::Vertical <html><head/><body><p>Delete a config file.</p></body></html> &Delete false Qt::Horizontal 40 20 <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page false <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> Qt::Horizontal 40 20 <html><head/><body><p>Exit the dialog.</p></body></html> E&xit false [global] Name Description [service_*] true Type true MAC true Nameservers true Timeservers true SearchDomains true Domain Name true SSID true EAP true CACertFile true ClientCertFile true PrivateKeyFile PrivateKeyPassphrase true PrivateKeyPassphraseType Identity true Phase2 Passphrase true Security true Hidden Eduroam (long) Eduroam (short) true IPv4 Address true IPv4 Off true IPV4 DHCP true IPv6 Address true IPv6 Off true IPv6 Auto IPv6.Privacy pushButton_exit clicked() Provisioning reject() 351 737 310 -23 cmst/apps/cmstapp/000755 001750 000144 00000000000 12652522200 014564 5ustar00andyusers000000 000000 cmst/images/application/variations/scalable/cmst_spot_03.svg000644 001750 000144 00000050271 12645570501 024723 0ustar00andyusers000000 000000 cmst/translations/cmst_en_US.ts000644 001750 000144 00000721341 12650551344 017323 0ustar00andyusers000000 000000 Agent Agent Input Passphrase <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> <html><head/><body><p>Type the passphrase here.</p></body></html> <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> &Hide Passphrase O&ld Passphrase &Passphrase Hidden Network &Name <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> Service Set Identifier &SSID Wireless Internet Service Provider roaming (WISPr) &Username <html><head/><body><p>WISPr username.</p></body></html> Passwor&d <html><head/><body><p>WISPr password.</p></body></html> Extensible Authentication Protocol (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> &Identity WiFi Protected Setup (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> Use Push &Button Authentication &WPS Pin <html><head/><body><p>Enter a WPS pin.</p></body></html> Browser Login Requested Choose or enter a browser: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> Login URL: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> <html><head/><body><p>Use the Firefox browser.</p></body></html> Removed double space <html><head/><body><p>Use the Firefox browser.</p></body><html> <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> Launch &Browser <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel AgentDialog Information You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "%1 %2" ConnmanAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ConnmanCounter %L1 Bytes %L1 KB %L1 MB %L1 GB <b>Transmit:</b><br>TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4 %Ln Packet(s) %Ln Packet %Ln Packets <br><br><b>Received:</b><br>RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4 <br><br><b>Connect Time:</b><br> %n Day(s) %n Day %n Days %n Hour(s) %n Hour %n Hours %n Minute(s) %n Minute %n Minutes %n Second(s) %n Second %n Seconds ConnmanVPNAgent Connman Error Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Agent Request Failed The agent request failed before a reply was returned. ControlBox Dialog &Status <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> All Devices &Off <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> Global Properties <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> OfflineMode: Unavailable <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> State: Unavailable <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Technologies Name Type Powered Connected Tethering Resc&an <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> Services State Connection <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move Before <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move After <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> &Less &Details Ser&vice <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> Configuration &Wireless Wireless Services <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> Connect <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> Disconnect Remove <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Wifi State <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> Counter Update Rate <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Default is no desktop specific code.</p></body></html> Rescan Offline Mode <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> Favorite Security Signal Strength &Counters <html><head/><body><p>The service being monitored by the counters.</p></body></html> Service: <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Home Counter not available. <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Roaming <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> Settings: &Preferences <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> Interface <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> Enable ToolTips (Interface) <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> Reset Counters <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> Advanced Controls <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> Start Options <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> Counter Update KB <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> Start Minimized Wait Time Disable Tray Icon <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> Use Icon Theme Disable Counters <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> Desktop Specific None <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> &VPN VPN Services <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> Host Domain Fake Transparency <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> System Tray <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> Hide Tray Icon <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> Enable System Tray Popups <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> System Tray Notifications Notifications <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> Notification Daemon Server Status Program Control <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> Enable Autostart <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> Retry Failed Connection <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> <html><head/><body><p>Open the color selection dialog. </p></body></html> ... <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help &About <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> &License <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> ChangeLo&g <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> Provisioning Editor <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> E&xit <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> Mi&nimize Ma&ximize &Exit About %1 Service Details WiFi Connections VPN Connections <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian)<br><center><b>Build Information:</b><center>Compiled using QT version %5<center>Built %6 - %7 About AwOken <center>This program uses the <b>AwOken</b> icon set version 2.5<br><br>Released under the<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>The CMST icon is a derivative work from the AwOken icon set. License %1 change log is not available. ChangeLog Cancel <b>Service:</b> %1 Unable to determine service No Services Selected You need to select a Wifi service before pressing the remove button. Offline Mode Engaged Offline Mode Disabled %1 (%2) Network Connection: %1 Network Services: No network services available Service Error: %1 Object Path: %1 VPN Engaged VPN Disengaged Warning <center><b>We received a DBUS reply message indicating an error while trying to scan technologies.</b></center><br><br>Error Name: %1<br><br>Error Message: %2 <b>Connection:</b> %1 <br><b>Service Details:</b><br> Service Type: %1<br> Service State: %1<br> Favorite: %1<br> Yes favorite No favorite External Configuration File: %1<br> Yes immutable No immutable Auto Connect: %1<br> On autoconnect No autoconnect <br><b>IPv4</b><br> IP Address Acquisition: %1<br> IP Address: %1<br> IP Netmask: %1<br> IP Gateway: %1<br> <br><b>IPv6</b><br> Address Acquisition: %1<br> Prefix Length: <br> Prefix Length: %1<br> Privacy: %1<br> <br><b>Proxy</b><br> URL: %1<br> Servers:<br>&nbsp;&nbsp;%1<br> Excludes:<br>&nbsp;&nbsp;%1<br> <br><b>Name Servers</b><br> <br><br><b>Time Servers</b><br> <br><br><b>Search Domains</b><br> <br><br><b>Ethernet</b><br> Connection Method: %1<br> Interface: %1<br> Device Address: %1<br> MTU: %1<br> <br><b>Wireless</b><br> Security: %1<br> Strength: %1<br> Roaming: %1<br> Yes roaming No roaming <br><b>VPN Provider</b><br> Host: %1<br> Domain: %1<br> Name: %1<br> Type: %1<br> State: Engaged Disabled Offline Mode %1On%1%1 powered %1Off%1%1 powered Yes connected No connected Yes tethered No tethered Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. Ethernet Connection<br> icon_tool_tip Service: %1<br> Interface: %1 WiFi Connection<br> icon_tool_tip SSID: %1<br> Strength: %1%<br> VPN Connection<br> icon_tool_tip Connection is in the Ready State. icon_tool_tip Connection is in the Failure State, attempting to reestablish the connection icon_tool_tip Connection is in the Failure State. icon_tool_tip Not Connected icon_tool_tip Error retrieving properties via Dbus Connection status is unknown Type: %1 <br>Powered On Off Not Connected <br>Tethering Enabled Connection : %1 Signal Strength: %1% Favorite Connection Never Connected <br>Security : %1 <br>Roaming <br>Autoconnect is <p style='white-space:pre'><center><b>%1</b></center> <center><b>Unable to find a systemtray on this machine.</b><center><br>The program may still be used to manage your connections, but the tray icon will be disabled.<center><br><br>If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the <b>-w</b> switch and set a delay as necessary. The exact wait time will vary from system to system. Could not find a connection to the system bus %1 - Critical Error Unable to find a connection to the system bus.<br><br>%1 will not be able to communicate with connman. Could not create an interface to connman on the system bus Unable to create an interface to connman on the system bus.<br><br>%1 will not be able to communicate with connman. Error reading or parsing connman.Manager.GetProperties %1 - Warning There was an error reading or parsing the reply from method connman.Manager.GetProperties.<br><br>It is unlikely any portion of %1 will be functional. Error reading or parsing connman.Manager.GetTechnologies There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.<br><br>Some portion of %1 may still be functional. Error reading or parsing connman.Manager.GetServices There was an error reading or parsing the reply from method connman.Manager.GetServices.<br><br>Some portion of %1 may still be functional. %1 version %2 by %3 has been detected on this system.<p>This server supports desktop Notification Specification version %4 Colorize Icons Attempt %1 of 4 looking for notification server. %1 license is the MIT (Expat) license. You need to select a service before pressing the connect button. You need to select a service before pressing the disconnect button. <p style='white-space:pre'><center><b>%1 Properties</b></center> Unable to find or connect to a Notification server. WiFi Technologies:<br> %1 Found, %2 Powered IconManager A new icon definition file will be installed to <b>%1</b> and a backup of the old definition file has been created as <b>%2</b> <p>If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. <p>If the original was never customized or you just wish to delete the backup now you may select <i>Discard</i> to delete the backup or <i>Save</i> to retain it. Peditor Property Editor &General <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> AutoConnect <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Nameservers <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &TImeservers <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Domains <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> IPv&4 Address Netmask Gateway DHCP Manual Off Method <html><head/><body><p>User configuration of IPv6 settings</p></body></html> IPv&6 Auto Prefix Length Privacy Disabled Preferred Enabled <html><head/><body><p>User configuration of Proxy settings.</p></body></html> &Proxy Direct <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> URL Servers <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> Excludes <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> Reset Pa&ge <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> Reset &All <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> OK <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> Cancel Provisioning Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Description [service_*] Type MAC Nameservers Timeservers SearchDomains Domain SSID EAP CACertFile ClientCertFile PrivateKeyFile PrivateKeyPassphrase PrivateKeyPassphraseType Identity Phase2 Passphrase Security Hidden Eduroam (long) Eduroam (short) IPv4 Address IPv4 Off IPV4 DHCP IPv6 Address IPv6 Off IPv6 Auto IPv6.Privacy ProvisioningEditor Global Service WiFi Templates File Path to the CA Certificate File File Path to the Client Certificate File File path to the Client Private Key File Key Files (*.pem);;All Files (*.*) MAC address. SSID: hexadecimal representation of an 802.11 SSID List of Nameservers List of Timeservers List of DNS Search Domains Domain name to be used Enter the string representation of an 802.11 SSID. Service type. EAP type. Private key passphrase type. Network security type. Hidden network IPv6 Privacy %1 - Item Input Tag which will replace the * with<br>an identifier unique to the config file. Enter the network name. Enter a description of the network. Password/Passphrase for the private key file. Identity string for EAP. RSN/WPA/WPA2 Passphrase Phase 2 (inner authentication with TLS tunnel)<br>authentication method. %1 - Text Input Information Critical The IPv4 <b>Address</b>, <b>Netmask</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv4 Address IPv4 Netmask IPv4 Gateway (This is an optional entry) The IPv6 <b>Address</b>, <b>Prefix Length</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv6 Address %1 - Integer Input Enter the IPv6 prefix length IPv6 Gateway (This is an optional entry) <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 RootHelper Failed to register service org.cmst.roothelper - there may be another instance running. Failed to register roothelper object on the system bus. ScrollBox Scrollbox TextLabel TranslateStrings connman system tray Main Window Title Connman System Tray cmst Abbreviated Program Name - used for QMessageBox titles CMST idle connman state string Idle association connman state string Association configuration connman state string Configuration ready connman state string Ready online connman state string Online disconnect connman state string Disconnect failure connman state string Failure offline connman state string Offline system connman type string System ethernet connman type string Ethernet wifi connman type string WiFi bluetooth connman type string Bluetooth cellular connman type string Cellular gps connman type string GPS vpn connman type string VPN gadget connman type string Gadget p2p connman type string P2P wired connman type string Wired direct connman proxy string Direct manual connman proxy string Manual auto connman proxy string Auto psk connman security string PSK ieee8021x connman security string IEEE8021x none connman security string None wep connman security string WEP wps connman security string WPS Invalid arguments connman error string Permission denied connman error string Passphrase required connman error string Not registered connman error string Not unique connman error string Not supported connman error string Not implemented connman error string Not found connman error string No carrier connman error string In progress connman error string Already exists connman error string Already enabled connman error string Already disabled connman error string Already connected connman error string Not connected connman error string Operation aborted connman error string Operation timeout connman error string Invalid service connman error string Invalid property connman error string disabled connman privacy string Disabled enabled connman privacy string Enabled prefered connman privacy string Prefered auto connman ethernet connection method Auto manual connman ethernet connection method Manual dhcp connman ipv4 method string DHCP manual connman ipv4 method string Manual off connman ipv4 method string Off fixed connman ipv4 method string Fixed auto connman ipv6 method string Auto manual connman ipv6 method string Manual 6to4 connman ipv6 method string off connman ipv6 method string Off openconnect connman vpn connection type OpenConnect openvpn connman vpn connection type OpenVPN vpnc connman vpn connection type VPNC l2tp connman vpn connection type L2TP pptp connman vpn connection type PPTP auto connamn ipv6 method string Auto manual connamn ipv6 method string Manual off connamn ipv6 method string Off VPNAgent VPN Agent Input Username <html><head/><body><p>WISPr username.</p></body></html> Password <html><head/><body><p>WISPr password.</p></body></html> Host Name OpenConnect CA Cert. Client Cert. Cookie Server Cert. VPN Host <html><head/><body><p>What's This</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel Save Credentials VPN_Editor Global OpenConnect OpenVPN VPNC L2TP PPTP All Files (*.*) CA Files (*.pem *.ca);;All Files (*.*) Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Key Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Config Files (*.ovpn *.conf *.config);;All Files (*.*) VPN server IP address (ex: 1.2.3.4) %1 - Item Input %1 - Verify Option User defined name for the VPN Domain name for the VPN Service (example: corporate.com) Networks behing the VPN link, if more than one separate by a comma. Format is network/netmask/gateway, and gateway can be omitted. Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16 Networks = entry is optional and may be left blank. %1 - Text Input Information <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 VPN_Prov VPN Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save <html><head/><body><p>Delete a config file.</p></body></html> &Delete <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit [global] Name Name of the network. Description Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE PPPD.ReqMPPE40 PPPD.ReqMPPE128 PPPD.ReqMPPEStateful VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert Local peer's signed certificate. OpenVPN.Key Local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass Authenticate with server using username/password? OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. main.cpp Another running instance of CMST has been detected. This instance is aborting Bypass restoring the window state if restoring window state is specified in the settings file. Bypass restoring any start options in the settings file. [Experimental] Disable data counters. May be used to minimize load on your system. Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. Connman System Tray. Use an icon theme from your system. Icon Theme Name Log the connman inputRequest for debugging purposes. Start the GUI minimized in the system tray. Specify the wait time in seconds before starting the system tray icon. seconds [Experimental] The number of kb that have to be transmitted before the counter updates. KB [Experimental] The interval in seconds between counter updates. If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB) RRGGBB Use XFCE specific code. Use MATE DE specific code. cmst/images/raw_art/application-exit1.png000644 001750 000144 00000002500 12645570501 021125 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<1PLTEis]OZLXJVH~v6I:FL}9CVCy7A{<@wr6?vs9 s֙tRNS&$'%&%%Iy&1,X.Y YYt -Р&''%مY0IyX-2X[X] ,iI+iL =obKGDH pHYs B(xtIME '0(RIDAT(c` lf恱yf BB3ED lqYfIJI2gϖW怀*\Ihi̛z$abjf`!XXZ-\Ȱakgx 8:9C]ekt2(psws F]frI@jXfMP0xHuPZփXx\F0HHSI)ԴM`i3d] Kl2pXWl۾}[e3buM-V ;v65XҺsg[?]*VOIa8ep 阭ټ>%tEXtdate:create2015-11-04T18:02:38-05:00Z%tEXtdate:modify2013-07-28T03:30:32-04:00NIENDB`cmst/apps/cmstapp/code/vpn_prov_ed/vpn_ed.cpp000644 001750 000144 00000113732 12651532532 022015 0ustar00andyusers000000 000000 /****************** vpn_ed.cpp *********************************** Code to manage the VPN Provisioning Editor dialog. Copyright (C) 2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include "./vpn_ed.h" # include "./code/provisioning/prov_ed.h" // use ValidatingDialog from ProvEd # include "../resource.h" # include "./code/trstring/tr_strings.h" // // This class is derived from the ProvisioningEditor class, and in fact // it uses validating code from there. There are a few improvements // mainly in more efficient packaging of the text data into each QAction. // // In this class: // QAction->text() contains the key for the Connman config file and display // text for the menus. // QAction->toolTip() contains the text displayed in dialogs // // I've also removed the template section since the new group_provider actions // ask for all mandatory fields for each type of connection. // // Constructor VPN_Editor::VPN_Editor(QWidget* parent) : QDialog(parent) { // Setup the user interface ui.setupUi(this); // Data members menubar = new QMenuBar(this); ui.verticalLayout01->setMenuBar(menubar); vpn_path = "/var/lib/connman-vpn"; statusbar = new QStatusBar(this); ui.verticalLayout01->addWidget(statusbar); statustimeout = 2000; i_sel = CMST::ProvEd_No_Selection; // Setup the buttongroup bg01 = new QButtonGroup(this); bg01->addButton(ui.pushButton_open); bg01->addButton(ui.pushButton_save); bg01->addButton(ui.pushButton_delete); // Add actions to actiongroups (signals from actiongroups are connected to slots) group_provider = new QActionGroup(this); group_provider->addAction(ui.actionProviderOpenConnect); group_provider->addAction(ui.actionProviderOpenVPN); group_provider->addAction(ui.actionProviderVPNC); group_provider->addAction(ui.actionProviderL2TP); group_provider->addAction(ui.actionProviderPPTP); group_freeform = new QActionGroup(this); group_freeform->addAction(ui.actionGlobal); group_freeform->addAction(ui.actionGlobalName); group_freeform->addAction(ui.actionGlobalDescription); group_freeform->addAction(ui.actionPPTP_User); group_freeform->addAction(ui.actionPPTP_Password); group_freeform->addAction(ui.actionPPPD_Debug); group_freeform->addAction(ui.actionL2TP_User); group_freeform->addAction(ui.actionL2TP_Password); group_freeform->addAction(ui.actionVPNC_IPSec_ID); group_freeform->addAction(ui.actionVPNC_IPSec_Secret); group_freeform->addAction(ui.actionVPNC_Xauth_Username); group_freeform->addAction(ui.actionVPNC_Xauth_Password); group_freeform->addAction(ui.actionVPNC_Domain); group_freeform->addAction(ui.actionVPNC_AppVersion); group_freeform->addAction(ui.actionOpenVPN_Cipher); group_freeform->addAction(ui.actionOpenVPN_Auth); group_combobox = new QActionGroup(this); group_combobox->addAction(ui.actionVPNC_IKE_Authmode); group_combobox->addAction(ui.actionVPNC_IKE_DHGroup); group_combobox->addAction(ui.actionVPNC_PFS); group_combobox->addAction(ui.actionVPNC_Vendor); group_combobox->addAction(ui.actionVPNC_NATTMode); group_combobox->addAction(ui.actionOpenVPN_NSCertType); group_combobox->addAction(ui.actionOpenVPN_Proto); group_combobox->addAction(ui.actionOpenVPN_CompLZO); group_combobox->addAction(ui.actionOpenVPN_RemoteCertTls); group_yes = new QActionGroup(this); group_yes->addAction(ui.actionPPPD_RefuseEAP); group_yes->addAction(ui.actionPPPD_RefusePAP); group_yes->addAction(ui.actionPPPD_RefuseCHAP); group_yes->addAction(ui.actionPPPD_RefuseMSCHAP); group_yes->addAction(ui.actionPPPD_RefuseMSCHAP2); group_yes->addAction(ui.actionPPPD_NoBSDComp); group_yes->addAction(ui.actionPPPD_NoDeflate); group_yes->addAction(ui.actionPPPD_RequirMPPE); group_yes->addAction(ui.actionPPPD_RequirMPPE40); group_yes->addAction(ui.actionPPPD_RequirMPPE128); group_yes->addAction(ui.actionPPPD_RequirMPPEStateful); group_yes->addAction(ui.actionPPPD_NoVJ); group_yes->addAction(ui.actionL2TP_LengthBit); group_yes->addAction(ui.actionL2TP_Challenge); group_yes->addAction(ui.actionL2TP_DefaultRoute); group_yes->addAction(ui.actionL2TP_FlowBit); group_yes->addAction(ui.actionL2TP_Exclusive); group_yes->addAction(ui.actionL2TP_Redial); group_yes->addAction(ui.actionL2TP_RequirePAP); group_yes->addAction(ui.actionL2TP_RequireCHAP); group_yes->addAction(ui.actionL2TP_ReqAuth); group_yes->addAction(ui.actionL2TP_AccessControl); group_yes->addAction(ui.actionL2TP_IPsecSaref); group_yes->addAction(ui.actionPPPD_NoPcomp); group_yes->addAction(ui.actionPPPD_UseAccomp); group_yes->addAction(ui.actionPPPD_ReqMPPE); group_yes->addAction(ui.actionPPPD_ReqMPPE40); group_yes->addAction(ui.actionPPPD_ReqMPPE128); group_yes->addAction(ui.actionPPPD_ReqMPPEStateful); group_yes->addAction(ui.actionVPNC_SingleDES); group_yes->addAction(ui.actionVPNC_NoEncryption); group_yes->addAction(ui.actionOpenVPN_AskPass); group_yes->addAction(ui.actionOpenVPN_AuthNoCache); group_yes->addAction(ui.actionOpenConnect_MTU); group_yes->addAction(ui.actionOpenConnect_Cookie); group_validated = new QActionGroup(this); group_validated->addAction(ui.actionPPPD_EchoFailure); group_validated->addAction(ui.actionPPPD_EchoInterval); group_validated->addAction(ui.actionL2TP_BPS); group_validated->addAction(ui.actionL2TP_TXBPS); group_validated->addAction(ui.actionL2TP_RXBPS); group_validated->addAction(ui.actionL2TP_TunnelRWS); group_validated->addAction(ui.actionL2TP_RedialTImeout); group_validated->addAction(ui.actionL2TP_MaxRedials); group_validated->addAction(ui.actionL2TP_ListenAddr); group_validated->addAction(ui.actionL2TP_Port); group_validated->addAction(ui.actionVPNC_LocalPort); group_validated->addAction(ui.actionVPNC_CiscoPort); group_validated->addAction(ui.actionVPNC_DPDTimeout); group_validated->addAction(ui.actionOpenVPN_MTU); group_validated->addAction(ui.actionOpenVPN_Port); group_validated->addAction(ui.actionOpenConnect_ServerCert); group_validated->addAction(ui.actionOpenConnect_VPNHost); group_selectfile = new QActionGroup(this); group_selectfile->addAction(ui.actionL2TP_AuthFile); group_selectfile->addAction(ui.actionOpenVPN_CACert); group_selectfile->addAction(ui.actionOpenVPN_Cert); group_selectfile->addAction(ui.actionOpenVPN_Key); group_selectfile->addAction(ui.actionOpenVPN_ConfigFile); group_selectfile->addAction(ui.actionOpenConnect_CACert); group_selectfile->addAction(ui.actionOpenConnect_ClientCert); group_selectfile->addAction(ui.actionOpenVPN_AuthUserPass); // Add Actions from UI to menu's menu_global = new QMenu(tr("Global"), this); menu_global->addAction(ui.actionGlobal); menu_global->addSeparator(); menu_global->addAction(ui.actionGlobalName); menu_global->addAction(ui.actionGlobalDescription); menu_OpenConnect = new QMenu(tr("OpenConnect"), this); menu_OpenConnect->addAction(ui.actionProviderOpenConnect); menu_OpenConnect->addSeparator(); menu_OpenConnect->addAction(ui.actionOpenConnect_ServerCert); menu_OpenConnect->addAction(ui.actionOpenConnect_CACert); menu_OpenConnect->addAction(ui.actionOpenConnect_ClientCert); menu_OpenConnect->addSeparator(); menu_OpenConnect->addAction(ui.actionOpenConnect_MTU); menu_OpenConnect->addAction(ui.actionOpenConnect_Cookie); menu_OpenConnect->addSeparator(); menu_OpenConnect->addAction(ui.actionOpenConnect_VPNHost); menu_OpenVPN = new QMenu(tr("OpenVPN"), this); menu_OpenVPN->addAction(ui.actionProviderOpenVPN); menu_OpenVPN->addAction(ui.actionOpenVPN_Import); menu_OpenVPN->addSeparator(); menu_OpenVPN->addAction(ui.actionOpenVPN_CACert); menu_OpenVPN->addAction(ui.actionOpenVPN_Cert); menu_OpenVPN->addAction(ui.actionOpenVPN_Key); menu_OpenVPN->addSeparator(); menu_OpenVPN->addAction(ui.actionOpenVPN_MTU); menu_OpenVPN->addAction(ui.actionOpenVPN_NSCertType); menu_OpenVPN->addAction(ui.actionOpenVPN_Proto); menu_OpenVPN->addAction(ui.actionOpenVPN_Port); menu_OpenVPN->addSeparator(); menu_OpenVPN->addAction(ui.actionOpenVPN_AuthUserPass); menu_OpenVPN->addAction(ui.actionOpenVPN_AskPass); menu_OpenVPN->addAction(ui.actionOpenVPN_AuthNoCache); menu_OpenVPN->addSeparator(); menu_OpenVPN->addAction(ui.actionOpenVPN_Cipher); menu_OpenVPN->addAction(ui.actionOpenVPN_Auth); menu_OpenVPN->addAction(ui.actionOpenVPN_CompLZO); menu_OpenVPN->addAction(ui.actionOpenVPN_RemoteCertTls); menu_OpenVPN->addSeparator(); menu_OpenVPN->addAction(ui.actionOpenVPN_ConfigFile); menu_VPNC = new QMenu(tr("VPNC"), this); menu_VPNC->addAction(ui.actionProviderVPNC); menu_VPNC->addSeparator(); menu_VPNC->addAction(ui.actionVPNC_IPSec_ID); menu_VPNC->addAction(ui.actionVPNC_IPSec_Secret); menu_VPNC->addAction(ui.actionVPNC_Xauth_Username); menu_VPNC->addAction(ui.actionVPNC_Xauth_Password); menu_VPNC->addSeparator(); menu_VPNC->addAction(ui.actionVPNC_IKE_Authmode); menu_VPNC->addAction(ui.actionVPNC_IKE_DHGroup); menu_VPNC->addAction(ui.actionVPNC_PFS); menu_VPNC->addSeparator(); menu_VPNC->addAction(ui.actionVPNC_Domain); menu_VPNC->addAction(ui.actionVPNC_Vendor); menu_VPNC->addAction(ui.actionVPNC_LocalPort); menu_VPNC->addAction(ui.actionVPNC_CiscoPort); menu_VPNC->addAction(ui.actionVPNC_AppVersion); menu_VPNC->addAction(ui.actionVPNC_NATTMode); menu_VPNC->addAction(ui.actionVPNC_DPDTimeout); menu_VPNC->addSeparator(); menu_VPNC->addAction(ui.actionVPNC_SingleDES); menu_VPNC->addAction(ui.actionVPNC_NoEncryption); menu_L2TP = new QMenu(tr("L2TP"), this); menu_L2TP->addAction(ui.actionProviderL2TP); menu_L2TP->addSeparator(); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionL2TP_User); menu_L2TP->addAction(ui.actionL2TP_Password); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionL2TP_BPS); menu_L2TP->addAction(ui.actionL2TP_TXBPS); menu_L2TP->addAction(ui.actionL2TP_RXBPS); menu_L2TP->addAction(ui.actionL2TP_LengthBit); menu_L2TP->addAction(ui.actionL2TP_Challenge); menu_L2TP->addAction(ui.actionL2TP_DefaultRoute); menu_L2TP->addAction(ui.actionL2TP_FlowBit); menu_L2TP->addAction(ui.actionL2TP_TunnelRWS); menu_L2TP->addAction(ui.actionL2TP_Exclusive); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionL2TP_Redial); menu_L2TP->addAction(ui.actionL2TP_RedialTImeout); menu_L2TP->addAction(ui.actionL2TP_MaxRedials); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionL2TP_RequirePAP); menu_L2TP->addAction(ui.actionL2TP_RequireCHAP); menu_L2TP->addAction(ui.actionL2TP_ReqAuth); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionL2TP_AccessControl); menu_L2TP->addAction(ui.actionL2TP_AuthFile); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionL2TP_ListenAddr); menu_L2TP->addAction(ui.actionL2TP_IPsecSaref); menu_L2TP->addAction(ui.actionL2TP_Port); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionPPPD_EchoFailure); menu_L2TP->addAction(ui.actionPPPD_EchoInterval); menu_L2TP->addAction(ui.actionPPPD_Debug); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionPPPD_RefuseEAP); menu_L2TP->addAction(ui.actionPPPD_RefusePAP); menu_L2TP->addAction(ui.actionPPPD_RefuseCHAP); menu_L2TP->addAction(ui.actionPPPD_RefuseMSCHAP); menu_L2TP->addAction(ui.actionPPPD_RefuseMSCHAP2); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionPPPD_NoBSDComp); menu_L2TP->addAction(ui.actionPPPD_NoPcomp); menu_L2TP->addAction(ui.actionPPPD_UseAccomp); menu_L2TP->addAction(ui.actionPPPD_NoDeflate); menu_L2TP->addAction(ui.actionPPPD_NoVJ); menu_L2TP->addSeparator(); menu_L2TP->addAction(ui.actionPPPD_ReqMPPE); menu_L2TP->addAction(ui.actionPPPD_ReqMPPE40); menu_L2TP->addAction(ui.actionPPPD_ReqMPPE128); menu_L2TP->addAction(ui.actionPPPD_ReqMPPEStateful); menu_PPTP = new QMenu(tr("PPTP"), this); menu_PPTP->addAction(ui.actionProviderPPTP); menu_PPTP->addSeparator(); menu_PPTP->addAction(ui.actionPPTP_User); menu_PPTP->addAction(ui.actionPPTP_Password); menu_PPTP->addSeparator(); menu_PPTP->addAction(ui.actionPPPD_EchoFailure); menu_PPTP->addAction(ui.actionPPPD_EchoInterval); menu_PPTP->addAction(ui.actionPPPD_Debug); menu_PPTP->addSeparator(); menu_PPTP->addAction(ui.actionPPPD_RefuseEAP); menu_PPTP->addAction(ui.actionPPPD_RefusePAP); menu_PPTP->addAction(ui.actionPPPD_RefuseCHAP); menu_PPTP->addAction(ui.actionPPPD_RefuseMSCHAP); menu_PPTP->addAction(ui.actionPPPD_RefuseMSCHAP2); menu_PPTP->addSeparator(); menu_PPTP->addAction(ui.actionPPPD_NoBSDComp); menu_PPTP->addAction(ui.actionPPPD_NoDeflate); menu_PPTP->addAction(ui.actionPPPD_NoVJ); menu_PPTP->addSeparator(); menu_PPTP->addAction(ui.actionPPPD_RequirMPPE); menu_PPTP->addAction(ui.actionPPPD_RequirMPPE40); menu_PPTP->addAction(ui.actionPPPD_RequirMPPE128); menu_PPTP->addAction(ui.actionPPPD_RequirMPPEStateful); // add menus to UI menubar->addMenu(menu_global); menubar->addMenu(menu_OpenConnect); menubar->addMenu(menu_OpenVPN); menubar->addMenu(menu_VPNC); menubar->addMenu(menu_L2TP); menubar->addMenu(menu_PPTP); // connect signals to slots connect(ui.toolButton_whatsthis, SIGNAL(clicked()), this, SLOT(showWhatsThis())); connect(ui.pushButton_resetpage, SIGNAL(clicked()), this, SLOT(resetPage())); connect(bg01, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(requestFileList(QAbstractButton*))); connect(group_provider, SIGNAL(triggered(QAction*)), this, SLOT(createProvider(QAction*))); connect(group_freeform, SIGNAL(triggered(QAction*)), this, SLOT(inputFreeForm(QAction*))); connect(group_combobox, SIGNAL(triggered(QAction*)), this, SLOT(inputComboBox(QAction*))); connect(group_yes, SIGNAL(triggered(QAction*)), this, SLOT(inputYes(QAction*))); connect(group_validated, SIGNAL(triggered(QAction*)), this, SLOT(inputValidated(QAction*))); connect(group_selectfile, SIGNAL(triggered(QAction*)), this, SLOT(inputSelectFile(QAction*))); connect (ui.actionOpenVPN_Import, SIGNAL(triggered()), this, SLOT(importOpenVPN())); } /////////////////////////////////////////////// Private Slots ///////////////////////////////////////////// // // Slot called when a member of the QActionGroup group_selectfile void VPN_Editor::inputSelectFile(QAction* act) { // variables QString key = act->text(); QString filterstring = tr("All Files (*.*)"); QString filepath = QDir::homePath(); if (act == ui.actionL2TP_AuthFile) filepath = "/etc/l2tpd/l2tp-secrets"; if (act == ui.actionOpenVPN_AuthUserPass) filterstring = tr("User:Pass Files (*.up *.txt *.conf);;All Files (*.*)"); filepath = "/etc/openvpn"; if (act == ui.actionOpenVPN_CACert) filterstring = tr("CA Files (*.ca *.cert *.crt *.pem);;All Files (*.*)"); if (act == ui.actionOpenVPN_Cert) filterstring = tr("Cert Files (*.ca *.cert *.crt *.pem);;All Files (*.*)"); if (act == ui.actionOpenVPN_Key) filterstring = tr("Key Files (*.key *.ca *.cert *.crt *.pem);;All Files (*.*)"); if (act == ui.actionOpenVPN_ConfigFile) filterstring = tr("Config Files (*.ovpn *.conf *.config);;All Files (*.*)"); filepath = "/etc/openvpn"; if (act == ui.actionOpenConnect_CACert) filterstring = tr("Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*)"); if (act == ui.actionOpenConnect_ClientCert) filterstring = tr("Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*)"); QString fname = QFileDialog::getOpenFileName(this, act->toolTip(), filepath, filterstring); // return if the file name returned is empty (cancel pressed in the dialog) if (fname.isEmpty() ) return; // put the path into the text edit key.append(" = %1\n"); ui.plainTextEdit_main->insertPlainText(key.arg(fname) ); return; } // // Slot called when a member of the QActionGroup group_validated is triggered void VPN_Editor::inputValidated(QAction* act, QString key) { // variables if (key.isEmpty() ) key = act->text(); // create the dialog ValidatingDialog* vd = new ValidatingDialog(this); // create some prompts and set validator if (key == "Host") {vd->setLabel(tr("VPN server IP address (ex: 1.2.3.4)")), vd->setValidator(CMST::ProvEd_Vd_46, false);} else vd->setLabel(act->toolTip() ); if (act == ui.actionPPPD_EchoFailure) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionPPPD_EchoInterval) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionL2TP_BPS) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionL2TP_TXBPS) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionL2TP_RXBPS) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionL2TP_TunnelRWS) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionL2TP_RedialTImeout) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionL2TP_MaxRedials) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionL2TP_ListenAddr) vd->setValidator(CMST::ProvEd_Vd_46, false); if (act == ui.actionVPNC_LocalPort) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionVPNC_CiscoPort) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionVPNC_DPDTimeout) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionOpenVPN_MTU) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionOpenVPN_Port) vd->setValidator(CMST::ProvEd_Vd_Int, false); if (act == ui.actionOpenConnect_ServerCert) vd->setValidator(CMST:: ProvEd_Vd_Hex, false); if (act == ui.actionOpenConnect_VPNHost) vd->setValidator(CMST::ProvEd_Vd_46, false); // if accepted put an entry in the textedit if (vd->exec() == QDialog::Accepted) { QString s = vd->getText(); key.append(" = %1\n"); // format strings with multiple entries if (vd->isPlural() ) { s.replace(',', ' '); s.replace(';', ' '); s = s.simplified(); s.replace(' ', ','); } ui.plainTextEdit_main->insertPlainText(key.arg(s) ); } // cleanup vd->deleteLater(); return; } // // Slot called when a member of the QActionGroup group_combobox is triggered void VPN_Editor::inputComboBox(QAction* act) { // variables QString key = act->text(); QString str = act->toolTip(); bool ok; QStringList sl; // create some prompts if (act == ui.actionVPNC_IKE_Authmode) sl << "psk" << "cert" << "hybrid"; if (act == ui.actionVPNC_IKE_DHGroup) sl << "dh1" << "dh2" << "dh5"; if (act == ui.actionVPNC_PFS) sl << "nopfs" << "dh1" << "dh2" << "dh5" << "server"; if (act == ui.actionVPNC_Vendor) sl << "cisco" << "netscreen"; if (act == ui.actionVPNC_NATTMode) sl << "natt" << "none" << "force-natt" << "cisco-udp"; if (act == ui.actionOpenVPN_NSCertType) sl << "client" << "server"; if (act == ui.actionOpenVPN_Proto) sl << "udp" << "tcp-client" << "tcp-server"; if (act == ui.actionOpenVPN_CompLZO) sl << "adaptive" << "yes" << "no"; if (act == ui.actionOpenVPN_RemoteCertTls) sl << "client" << "server"; QString item = QInputDialog::getItem(this, tr("%1 - Item Input").arg(TranslateStrings::cmtr("cmst")), str, sl, 0, false, &ok); key.append(" = %1\n"); if (ok) ui.plainTextEdit_main->insertPlainText(key.arg(item)); return; } // // Slot called when a member of the QActionGroup group_yes is triggered // This slot is easy, every action sent is set to "yes" void VPN_Editor::inputYes(QAction* act) { if (QMessageBox::question (this, tr("%1 - Verify Option").arg(TranslateStrings::cmtr("cmst")), act->toolTip(), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) ui.plainTextEdit_main->insertPlainText(QString(act->text() + " = yes\n") ); return; } // // Slot called when a member of the QActionGroup group_freeform is triggered // Freeform strings may have spaces in them. For strings that cannot have spaces // use validated text and set b_multiple to false. void VPN_Editor::inputFreeForm(QAction* act, QString key) { // variables const QLineEdit::EchoMode echomode = QLineEdit::Normal; QString str; bool ok; if (key.isEmpty() ) key = act->text(); // create some prompts if (key == "Name") str = tr("User defined name for the VPN"); else if (key == "Domain") str = tr("Domain name for the VPN Service\n(example: corporate.com)"); else if (key == "Networks") str = tr("Networks behing the VPN link, if more than one separate by a comma.\n" "Format is network/netmask/gateway, and gateway can be omitted.\n" "Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16\n\n" "Networks = entry is optional and may be left blank."); else str = act->toolTip(); if (act == ui.actionGlobal) { key.append("\n"); ui.plainTextEdit_main->insertPlainText(key); } else { key.append(" = %1\n"); // get the string from the user QString val= ""; val = QInputDialog::getText(this, tr("%1 - Text Input").arg(TranslateStrings::cmtr("cmst")), str, echomode, "", &ok); if (ok) ui.plainTextEdit_main->insertPlainText(key.arg(val)); } // else return; } // // Slot to enter whats this mode // Called when the ui.toolButton_whatsthis clicked() signal is emitted void VPN_Editor::showWhatsThis() { QWhatsThis::enterWhatsThisMode(); } // // Function to clear the contents of the textedit void VPN_Editor::resetPage() { ui.plainTextEdit_main->document()->clear(); return; } // // Slot to request a file list from the roothelper. // Roothelper will emit an obtainedFileList signal when finished. This slot // is connected to the QButtonGroup bg01 void VPN_Editor::requestFileList(QAbstractButton* button) { // initialize the selection if (button == ui.pushButton_open) i_sel = CMST::ProvEd_File_Read; else if (button == ui.pushButton_save) i_sel = CMST::ProvEd_File_Write; else if (button == ui.pushButton_delete) i_sel = CMST::ProvEd_File_Delete; else i_sel = CMST::ProvEd_No_Selection; // request a list of config files from roothelper QList vlist; vlist << QVariant::fromValue(vpn_path); QDBusInterface* iface_rfl = new QDBusInterface("org.cmst.roothelper", "/", "org.cmst.roothelper", QDBusConnection::systemBus(), this); iface_rfl->callWithCallback(QLatin1String("getFileList"), vlist, this, SLOT(processFileList(const QStringList&)), SLOT(callbackErrorHandler(QDBusError))); iface_rfl->deleteLater(); return; } // // Slot to process the file list from /var/lib/connman. Connected to // the obtainedFileList signal in roothelper void VPN_Editor::processFileList(const QStringList& sl_conf) { // variables bool ok; QString filename = ""; QList vlist; QDBusInterface* iface_pfl = new QDBusInterface("org.cmst.roothelper", "/", "org.cmst.roothelper", QDBusConnection::systemBus(), this); // If we are trying to open and read the file if (i_sel & CMST::ProvEd_File_Read) { // display dialogs based on the length of the stringlist switch (sl_conf.size()) { case 0: QMessageBox::information(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Information"), tr("
No configuration files were found.
You may use this dialog to create one."), QMessageBox::Ok, QMessageBox::Ok); break; case 1: QMessageBox::information(this, tr("%1 - Information").arg(TranslateStrings::cmtr("cmst")), tr("
Reading configuration file: %1").arg(sl_conf.at(0)), QMessageBox::Ok, QMessageBox::Ok); filename = sl_conf.at(0); break; default: QString item = QInputDialog::getItem(this, tr("%1 - Select File").arg(TranslateStrings::cmtr("cmst")), tr("Select a file to load."), sl_conf, 0, // current item 0 false, // non-editable &ok); if (ok) filename = item; break; } // switch // if we have a filename try to open the file if (! filename.isEmpty() ) { vlist.clear(); vlist << QVariant::fromValue(vpn_path); vlist << QVariant::fromValue(filename); iface_pfl->callWithCallback(QLatin1String("readFile"), vlist, this, SLOT(seedTextEdit(const QString&)), SLOT(callbackErrorHandler(QDBusError))); } // if there is a file name } // if i_sel is File_Read // If we are trying to delete the file else if (i_sel & CMST::ProvEd_File_Delete) { // // user will have to select the file to delete it switch (sl_conf.size()) { case 0: QMessageBox::information(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Information"), tr("
No configuration files were found.
Nothing will be deleted."), QMessageBox::Ok, QMessageBox::Ok); break; default: QString item = QInputDialog::getItem(this, tr("%1 - Select File").arg(TranslateStrings::cmtr("cmst")), tr("Select a file to be deleted."), sl_conf, 0, // current item 0 false, // non-editable &ok); if (ok) filename = item; break; } // switch // if we have a filename try to delete the file if (! filename.isEmpty() ) { vlist.clear(); vlist << QVariant::fromValue(vpn_path); vlist << QVariant::fromValue(filename); iface_pfl->callWithCallback(QLatin1String("deleteFile"), vlist, this, SLOT(deleteCompleted(bool)), SLOT(callbackErrorHandler(QDBusError))); } // if there is a file name } // if i_sel is File_Delete // If we are trying to save the file else if (i_sel & CMST::ProvEd_File_Write) { QString item = QInputDialog::getItem(this, tr("%1 - Select File").arg(TranslateStrings::cmtr("cmst")), tr("Enter a new file name or select
an existing file to overwrite."), sl_conf, 0, // current item 0 true, // editable &ok); if (ok) { filename = item.simplified(); // multiple whitespace to one space filename = filename.replace(' ', '_'); // replace spaces with underscores } // if ok // if we have a filename try to save the file if (! filename.isEmpty() ) { vlist.clear(); vlist<< QVariant::fromValue(vpn_path); vlist << QVariant::fromValue(filename); vlist << QVariant::fromValue(ui.plainTextEdit_main->toPlainText() ); iface_pfl->callWithCallback(QLatin1String("saveFile"), vlist, this, SLOT(writeCompleted(qint64)), SLOT(callbackErrorHandler(QDBusError))); } // if there is a file name } // if i_sel is File_Save // cleanup i_sel = CMST::ProvEd_No_Selection; iface_pfl->deleteLater(); return; } // // Slot to seed the QTextEdit window with data read from file. Connected to // fileReadCompleted signal in root helper. void VPN_Editor::seedTextEdit(const QString& data) { // clear the text edit and seed it with the read data ui.plainTextEdit_main->document()->clear(); ui.plainTextEdit_main->setPlainText(data); // show a statusbar message statusbar->showMessage(tr("File read completed"), statustimeout); return; } // // Slot to show a statusbar message when a file delete is completed void VPN_Editor::deleteCompleted(bool success) { QString msg; if (success) msg = tr("File deleted"); else msg = tr("Error encountered deleting."); statusbar->showMessage(msg, statustimeout); return; } // // Slot to show a statusbar message when a file write is completed void VPN_Editor::writeCompleted(qint64 bytes) { // display a status bar message showing the results of the write QString msg; if (bytes < 0 ) msg = tr("File save failed."); else { if (bytes > 1024) msg = tr("%L1 KB written").arg(bytes / 1024); else msg = tr("%L1 Bytes written").arg(bytes); } statusbar -> showMessage(msg, statustimeout); return; } // // Slot to handle errors from callWithCallback functions void VPN_Editor::callbackErrorHandler(QDBusError err) { QMessageBox::critical(this, QString(TranslateStrings::cmtr("cmst")) + tr(" Critical"), QString(tr("DBus Error Name: %1

String: %2

Message: %3")).arg(err.name()).arg(err.errorString(err.type())).arg(TranslateStrings::cmtr(err.message()) ), QMessageBox::Ok, QMessageBox::Ok); return; } // Slot to prompt and create a new Provider section void VPN_Editor::createProvider(QAction* act) { // common mandatory fields if (act == ui.actionProviderOpenConnect) ui.plainTextEdit_main->insertPlainText("\n[provider_openconnect]\nType = OpenConnect\n"); else if (act == ui.actionProviderOpenVPN) ui.plainTextEdit_main->insertPlainText("\n[provider_openvpn]\nType = OpenVPN\n"); else if (act == ui.actionProviderVPNC) ui.plainTextEdit_main->insertPlainText("\n[provider_vpnc]\nType = VPNC\n"); else if (act == ui.actionProviderL2TP) ui.plainTextEdit_main->insertPlainText("\n[provider_l2tp]\nType = L2TP\n"); else if (act == ui.actionProviderPPTP) ui.plainTextEdit_main->insertPlainText("\n[provider_pptp]\nType = PPTP\n"); inputFreeForm(act, "Name"); inputValidated(act, "Host"); inputFreeForm(act, "Domain"); inputFreeForm(act, "Networks"); // individual provider mandatory fields if (act == ui.actionProviderVPNC) inputFreeForm(ui.actionVPNC_IPSec_ID, "VPNC.IPSec.ID"); if (act == ui.actionProviderOpenVPN) { inputSelectFile(ui.actionOpenVPN_CACert); inputSelectFile(ui.actionOpenVPN_Cert); inputSelectFile(ui.actionOpenVPN_Key); } return; } // // Slot to import an OpenVPN configuration file void VPN_Editor::importOpenVPN() { // Variables QString filterstring = tr("OpenVPN Configurations (*.ovpn *.conf);;All Files (*.*)"); QString filepath = QDir::homePath(); QStringList taglist = (QStringList() << "ca" << "cert" << "key" << "tls-auth"); // To start things off we need some input from the user ui.plainTextEdit_main->insertPlainText("\n[provider_openvpn]\nType = OpenVPN\n"); inputFreeForm(ui.actionProviderOpenConnect, "Name"); inputValidated(ui.actionProviderOpenConnect, "Host"); inputFreeForm(ui.actionProviderOpenConnect, "Domain"); inputFreeForm(ui.actionProviderOpenConnect, "Networks"); QString fname = QFileDialog::getOpenFileName(this, tr("Select the configuration file to import"), filepath, filterstring); // Return if the file name returned is empty (cancel pressed in the dialog) if (fname.isEmpty() ) return; // Read the source file QFile sourcefile(fname); if (sourcefile.open(QIODevice::ReadOnly | QIODevice::Text)) { QString contents = QString(sourcefile.readAll()); sourcefile.close(); // Setup the data directories // APP defined in resource.h QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); QFileInfo fi(fname); // need to extract the baseName QDir target_dir = QDir(QString(env.value("XDG_DATA_HOME", QString(QDir::homePath()) + "/.local/share") + "/%1/openvpn/%2").arg(QString(APP).toLower()).arg(fi.baseName()) ); if (! target_dir.exists()) target_dir.mkpath(target_dir.absolutePath() ); // Extract all the certs and keys for (int i = 0; i < taglist.count(); ++i) { int snipfrom = contents.indexOf(QString("<%1>\n").arg(taglist.at(i)) ); int snipto = contents.indexOf(QString("").arg(taglist.at(i)), snipfrom + QString("<%1>\n").arg(taglist.at(i)).size()) + QString("").arg(taglist.at(i)).size(); if (snipfrom != snipto && snipfrom >= 0 && snipto >= 0) { QString substring = contents.mid(snipfrom, snipto-snipfrom); contents.remove(snipfrom, snipto-snipfrom); // Write the cert or key to a file QFile outfile(QString(target_dir.absolutePath() + "/%1%2") .arg(taglist.at(i) == "cert" || taglist.at(i) == "key" ? "client" : taglist.at(i) ) .arg(taglist.at(i) == "ca" || taglist.at(i) == "cert" ? ".crt" : ".key") ); if (outfile.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream outstream(&outfile); substring.remove(QString("").arg(taglist.at(i)) ); substring.remove(QString("<%1>\n").arg(taglist.at(i)) ); outstream << substring; outfile.close(); if (taglist.at(i) == "ca") ui.plainTextEdit_main->insertPlainText(QString(ui.actionOpenVPN_CACert->text() + " = " + outfile.fileName() + "\n") ); else if (taglist.at(i) == "cert") ui.plainTextEdit_main->insertPlainText(QString(ui.actionOpenVPN_Cert->text() + " = " + outfile.fileName() + "\n") ); else if (taglist.at(i) == "key") ui.plainTextEdit_main->insertPlainText(QString(ui.actionOpenVPN_Key->text() + " = " + outfile.fileName() + "\n") ); } // if outfile opened for writing else { QMessageBox::critical(this, QString("%1 - Critical").arg(TranslateStrings::cmtr("cmst")), tr("Unable to write %1 - Aborting the import").arg(outfile.fileName() ), QMessageBox::Ok, QMessageBox::Ok); return; } // else outfile failed to open } // if a tag was found } // for each tag // If auth-user-pass will be in the conf file ask to remove it if (contents.contains("auth-user-pass\n", Qt::CaseSensitive) ) { if (QMessageBox::question (this, tr("Keep --auth-user-pass"), tr( "The conf file will contain the auth-user-pass entry which will require " "prompts sent to stdout and a reply on stdin. This cannot be handled by " "Connman nor by CMST.

If this entry is removed you will need to create a " "\"user:pass\" file in order to have Connman make the VPN connection. In the " "next step you will be asked if you want to create this file and you will prompted " "for the user name and password.

Do you wish to remove this entry?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) contents.remove("auth-user-pass\n"); } // if contents contains auth-user-pass // If there is anything left write it to a conf file contents = contents.trimmed(); if (! contents.isEmpty()) { QFile outfile(QString(target_dir.absolutePath() + "/%1%2") .arg(fi.baseName()) .arg(".conf") ); if (outfile.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream outstream(&outfile); outstream << contents; outfile.close(); ui.plainTextEdit_main->insertPlainText(QString(ui.actionOpenVPN_ConfigFile->text() + " = " + outfile.fileName() + "\n") ); } // if outfile opened for writing else { QMessageBox::warning(this, QString("%1 - Warning").arg(TranslateStrings::cmtr("cmst")), tr("Unable to write conf file %1").arg(outfile.fileName() ), QMessageBox::Ok, QMessageBox::Ok); } // else outfile (conf) failed to open } // if contents not empty // Copy the original conf file for safekeeping if (target_dir.exists(fi.fileName()) ) target_dir.remove(fi.fileName()); sourcefile.copy(target_dir.absoluteFilePath(fi.fileName()) ); // Check to see if a user:pass file needs to be created. if (QMessageBox::question (this, tr("Create User:Password File"), tr("Do you wish to create a user:password file for this connection?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { bool b_continue = false; QString pass; QString user = QInputDialog::getText(this, tr("User"), tr("Enter the user name for this connection."), QLineEdit::Normal, "", &b_continue); if (b_continue) { pass = QInputDialog::getText(this, tr("Password"), tr("Enter the password for this connection."), QLineEdit::Normal, "", &b_continue); } // if if (b_continue) { QFile outfile(QString(target_dir.absolutePath() + "/%1%2") .arg(fi.baseName()) .arg(".up") ); if (outfile.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream outstream(&outfile); outstream << user << "\n" << pass << "\n"; outfile.close(); ui.plainTextEdit_main->insertPlainText(QString(ui.actionOpenVPN_AuthUserPass->text() + " = " + outfile.fileName() + "\n") ); } // if outfile (up) could be opened for writing else { QMessageBox::warning(this, QString("%1 - Warning").arg(TranslateStrings::cmtr("cmst")), tr("Unable to write user:password file %1").arg(outfile.fileName() ), QMessageBox::Ok, QMessageBox::Ok); } // else outfile (up) failed to open } // b_continue - we have user and pass } // messagebox yes - we wanted to create a user:pass file } // If sourcefile opened for reading else { QMessageBox::critical(this, QString("%1 - Critical").arg(TranslateStrings::cmtr("cmst")), tr("Unable to read %1 - Aborting the import").arg(sourcefile.fileName() ), QMessageBox::Ok, QMessageBox::Ok); return; } // else sourcefile failed to open // Print a done message QMessageBox::information(this, QString("%1 - Information").arg(TranslateStrings::cmtr("cmst")), tr("OpenVPN import is complete. The provisioning file may now be saved."), QMessageBox::Ok, QMessageBox::Ok); return; } cmst/translations/cmst_zh_CN.ts000644 001750 000144 00001050056 12650551344 017312 0ustar00andyusers000000 000000 Agent Agent Input 代理输入 Passphrase 密码 <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> <html><head/><body><p>如果旧密码可用,它会被显示在这里作为参考。</p></body></html> <html><head/><body><p>Type the passphrase here.</p></body></html> <html><head/><body><p>在此输入密码。</p></body></html> <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> <html><head/><body><p>勾选以隐藏密码。</p></body></html> &Hide Passphrase 隐藏密码(&H) &Old Passphrase 旧密码(&O) O&ld Passphrase &Passphrase 密码(&P) Hidden Network 隐藏网络 &Name 名称(&N) <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> <html><head/><body><p>输入你想连接的隐藏网络的名称</p></body></html> Service Set Identifier 服务集标识(SSID) &SSID &SSID Wireless Internet Service Provider roaming (WISPr) 无线服务商漫游 (WISPr) &Username 用户名(&U) <html><head/><body><p>WISPr username.</p></body></html> <html><head/><body><p>WISPr 用户名.</p></body></html> Passwor&d 密码(&D) <html><head/><body><p>WISPr password.</p></body></html> <html><head/><body><p>WISPr 密码.</p></body></html> Extensible Authentication Protocol (EAP) 可扩展身份验证协议 (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> <html><head/><body><p>输入你的EAP身份</p></body></html> &Identity 身份(&I) WiFi Protected Setup (WPS) 受保护的Wifi设置 (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> <html><head/><body><p>当被勾选时,使用WPS push button 身份验证。 </p></body></html> Use Push &Button Authentication 使用 Push &Button 身份验证 &WPS Pin &WPS Pin <html><head/><body><p>Enter a WPS pin.</p></body></html> <html><head/><body><p>输入 WPS pin.</p></body></html> Browser Login Requested 需要用浏览器登录 Choose or enter a browser: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers we found are shown below as active. You may select any one browser to use it for the login. If your web browser is not shown active, or is not listed at all, select <span style=" font-weight:600;">Other</span> and type the command you would use to start your browser from a command line in the text box. To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown below:</p></body></html> <html><head/><body><p>Connman 需要使用浏览器完成登录。</p><p>检测到下列可用的浏览器。选择一个用作登录。如果你的浏览器不可用或未被列出,请选择 <span style=" font-weight:600;">其它</span> 并在文本框内输入启动浏览器的命令行。单击<span style=" font-weight:600;">启动浏览器</span>按钮启动你的浏览器。 </p><p>如果你想手动登录,请关闭这个对话框,并启动你的浏览器打开以下网址:</p></body></html> Login URL: 登录 URL: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> <html><head/><body><p>Connman需要使用浏览器登录。该文本框展示了包含登录页面的网址。</p></body></html> <html><head/><body><p><br/></p></body></html> <html><head/><body><p><br/></p></body></html> <html><head/><body><p>Use the Firefox browser.</p></body></html> <html><head/><body><p>使用Firefox浏览器。</p></body></html> <html><head/><body><p>Use the Opera browser.</p></body></html> <html><head/><body><p>使用Opera浏览器。</p></body></html> <html><head/><body><p>Use the Luakit browser.</p></body></html> <html><head/><body><p>使用Luakit浏览器。</p></body></html> <html><head/><body><p>Use the Lynx (console mode) browser.</p></body></html> <html><head/><body><p>使用Lynx(控制台模式)浏览器。</p></body></html> <html><head/><body><p>Login using a browser that is not listed. Type the browser start command in the box below.</p></body></html> <html><head/><body><p>使用一个未被列出的浏览器。在下方输入启动命令行。</p></body></html> Othe&r 其它(&R) <html><head/><body><p>Type the browser start command here.</p></body></html> <html><head/><body><p>在此输入浏览器启动命令。</p></body></html> <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> <html><head/><body><p>单击启动选择的浏览器。浏览器将会打开显示在“登录URL”文本框里的网址。</p></body></html> Launch &Browser 启动浏览器(&B) <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>这是什么?</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>继续连接。</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> <html><head/><body><p>接受并使用你在此会话中提供的信息。</p><p>这将把你的输入发送给connman守护进程以继续连接。</p></body></html> O&K 确定(&K) <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>取消连接。<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> <html><head/><body><p>取消会话。</p><p>这将会给connman守护进程发送取消连接请求。</p></body></html> &Cancel 取消(&C) AgentDialog Information 信息 You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "%1 %2" You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "lynx %2" 你选择了%1浏览器,但是无法找到可启动的终端程序。目前可用来启动%1的终端程序有:<b>roxterm</b> 和 <b>xterm</b>.<br><br>要继续,请手动打开一个终端窗口并输入:"lynx %2" ConnmanAgent Connman Error Connman 错误 Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Connman 返回了以下错误:<b><center>%1</b><br>是否重试? Agent Request Failed 代理请求失败 The agent request failed before a reply was returned. 在得到一个回应之前,代理请求失败了。 ConnmanCounter %L1 Bytes %L1 KB %L1 MB %L1 GB <b>Transmit:</b><br>TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4 <b>已传送:</b><br>传送总数: %1 (%2), 传送错误: %3, 传送丢失: %4 %Ln Packet(s) <br><br><b>Received:</b><br>RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4 <br><br><b>已接收:</b><br>接收总数: %1 (%2), 接收错误: %3, 接收丢失: %4 <br><br><b>Connect Time:</b><br> <br><br><b>连接时间:</b><br> %n Day(s) %n 日 %n Hour(s) %n 时 %n Minute(s) %n 分 %n Second(s) %n 秒 ConnmanVPNAgent Connman Error Connman 错误 Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Connman 返回了以下错误:<b><center>%1</b><br>是否重试? Agent Request Failed 代理请求失败 The agent request failed before a reply was returned. 在得到一个回应之前,代理请求失败了。 ControlBox Dialog 会话 &Status 状态(&S) <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> <html><head/><body><p>这个复选框控制全部网络连接的开关。当被选中时,所有网络连接都将被关闭。</p><p>当系统处于飞行模式时,这个开关可能重新打开个人设备。离开飞行模式时,设备的开关状态由各自的策略决定。</p></body></html> All Devices &Off 关闭所有设备(&O) <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> <html><head/><body><p><span style=" font-weight:600;">飞行模式</span></p><p>飞行模式指全局的无线设备开关设置。打开飞行模式将会关闭所有无线设备。离开飞行模式时,无线设备的开关状态由各自的策略决定。 </p><p>在飞行模式打开期间,仍可手动重新打开设备。例如,某些情况下,有限的Wifi或蓝牙使用是允许的。</p></body></html> Global Properties 全局设置 <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> <html><head/><body><p>控制无线设备开关的全局设置。当飞行模式打开时所有无线设备将被关闭。</p><p>当处于飞行模式时,个别设备仍然可被重新打开。离开飞行模式时无线设备的开关状态由各自的策略决定。</p></body></html> OfflineMode: Unavailable 飞行模式:不可用 <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> <html><head/><body><p>全局连接状态 可能的状态有 &quot;离线&quot;, &quot;空闲&quot;, &quot;就绪&quot;和&quot;在线&quot;. </p></body></html> State: Unavailable 状态:不可用 <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> <html><head/><body><p>Connman 把硬件设备称作“技术”。(在翻译中为了容易理解仍写作“设备”) 这个方框内显示了所有已知设备的信息。</p><p>要打开或关闭设备,单击对应设备<span style=" font-weight:600;">已启用</span>栏内的按钮。</p></body></html> Technologies 设备 Name 名称 Type 类型 Powered 已启用 Connected 已连接 Tethering 热点 <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> <html><head/><body><p>强制所有Wifi设备重新扫描。这与执行命令行 <span style=" font-weight:600;">connmanctl scan wifi</span> 类似。</p><p>在扫描过程中按钮将被禁用。</p></body></html> Resc&an 重新扫描(&A) <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> <html><head/><body><p>这个方框内显示了所有connman能够连接到的网络。</p></body></html> Services 服务 State 状态 Connection 连接 <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> <html><head/><body><p>把列表中选中的服务移到另一项前面。</p><p>这个按钮只会在选中一项后启用。</p></body></html> Move Before 上移 <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> <html><head/><body><p>把列表中选中的服务移到另一项后面。</p><p>这个按钮只会在选中一项后启用。</p></body></html> Move After 下移 <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>隐藏“连接”栏</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> <html><head/><body><p>当被勾选时,隐藏“服务”方框内的连接名称。</p></body></html> &Less 更少(&L) &Details 详细信息(&D) Ser&vice 服务(&V) <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> <html><head/><body><p>使用这个下拉框选择你想查看详细信息的服务。<br/></p></body></html> <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> <html><head/><body><p>所有服务的默认设置都是自动的(或类似DHCP)。 一般此设置足够使用,但若不是,这个按钮可被用来手动设置选中服务的以太网和IP设置。</p><p>在以下两种情况下这个按钮会被禁用:服务设置由外部配置文件提供,或服务是一个隐藏Wifi。无法修改这些服务的设置。</p></body></html> Configuration 设置 &Wireless 无线网络(&W) <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> <html><head/><body><p>这个页面显示了已知的Wifi服务。</p><p><span style=" font-weight:600;">名称:</span> 网络的SSID。</p><p><span style=" font-weight:600;">已保存:</span> 这个栏目中的心形图标表示这台电脑曾经使用这个服务连接网络。</p><p><span style=" font-weight:600;">已连接:</span> 表示这个服务的连接状态。鼠标划过图标会弹出文字说明。 在线表示网络可用并且已验证。 就绪表示设备成功连接。 </p><p><span style=" font-weight:600;">安全性: </span>描述了服务的安全性。可能的值有 &quot;无&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;,和&quot;wps&quot;.</p><p><span style=" font-weight:600;">信号强度:</span> Wifi的信号强度,用0到100的值表示。</p><p><br/></p></body></html> Favorite 已保存 Security 安全性 Signal Strength 信号强度 Wireless Services 无线网络服务 <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>在下表中选择一个Wifi服务,并按下这个按钮来连接到服务。 </p><p>如果列表中只有一个服务,按下这个按钮将会自动选择那个服务并尝试连接。 </p><p>如果这个服务需要更多的信息,例如密码,你将会被提示。 </p></body></html> Connect 连接 <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>在下表中选择一个Wifi服务并按下这个按钮来断开它。 </p><p>如果只有一个Wifi服务处于 &quot;就绪&quot; 或 &quot;在线&quot; 状态,按下这个按钮将会自动选择那个服务并断开它。 </p><p>这也可被用于终止先前的连接尝试。</p></body></html> Disconnect 断开 <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been sussessfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> <html><head/><body><p>在下表中选择一个Wifi服务并按下这个按钮来删除它。 </p><p>如果是曾经成功连接的服务(已保存)这个按钮将会移除已保存属性。如果正在连接到这个服务,服务将被断开。如果服务要求过密码,密码会被清除并忘记。</p><p>如果有失败的连接尝试,这个按钮可用于重置服务。</p></body></html> Remove 忘记 <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> <html><head/><body><p>这个标签显示了找到的和开启的Wifi设备数目。要使下面的方框内显示服务,至少要找到并开启一个Wifi设备。</p><p>开关设备请到 <span style=" font-weight:600;">状态</span> 标签页的 <span style=" font-weight:600;">设备</span> 方框并双击对应设备 <span style=" font-weight:600;">已启用</span> 栏内的文字。</p></body></html> Wifi State Wifi 状态 &Counters 统计(&C) <html><head/><body><p>The service being monitored by the counters.</p></body></html> <html><head/><body><p>被监视并统计的服务。</p></body></html> Service: 服务: <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> <html><head/><body><p>非漫游的 &quot;在线&quot; 服务连接的统计信息。 </p><p>统计并非总是可用。统计可被命令行 (-c 或 --disable-counters)禁用,也可能在偶然的情况下,连接报告&quot;就绪&quot; 状态而非 &quot;在线&quot;。在线是 &quot;就绪&quot; 的连接通过联网验证后的状态。也有可能通过 &quot;就绪&quot; 的连接而在线,但是统计只对 &quot;在线&quot; 的连接有效。</p></body></html> Home 本地 Counter not available. 统计不可用。 <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> <html><head/><body><p>被标作&quot;漫游&quot;的&quot;在线&quot; 连接的统计信息。</p><p>例如对于蜂窝数据来说,这一般表示连接到异地的运营商。</p><p>统计并非总是可用。统计可被命令行 (-c 或 --disable-counters)禁用,也可能在偶然的情况下,连接报告&quot;就绪&quot; 状态而非 &quot;在线&quot;。在线是 &quot;就绪&quot; 的连接通过联网验证后的状态。也有可能通过 &quot;就绪&quot; 的连接而在线,但是统计只对 &quot;在线&quot; 的连接有效。</p></body></html> Roaming 漫游 <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>统计设置</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> <html><head/><body><p>统计更新的阈值。 数据和时间同时定义了更新频率。</p></body></html> Settings: 设置: &Preferences 设置(&P) <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> <html><head/><body><p>这个方框内是接口的设置。</p></body></html> Interface 界面 <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State Rescan Offline Mode <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> Use Icon Theme <html><head/><body><p>If checked the GUI will be restored from settings saved on disk. Settings include the geometry of the dialog and the state of various check boxes, such as this one. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p style='white-space:pre'>The settings file is: <span style=" font-weight:600;">${HOME}/.config/cmst/cmst.conf </span><br>This is a standard ini type text file.</p></body></html> <html><head/><body><p>如果被勾选,GUI会恢复存储在磁盘上的设置。这些设置包含对话框的位置和一些复选框的勾选状态,例如这个复选框本身。 </p><p>这会使GUI在启动时恢复成最后一次退出时的样子。</p><p style='white-space:pre'>设置文件保存在: <span style=" font-weight:600;">${HOME}/.config/cmst/cmst.conf </span><br>这是一个标准的ini格式的文本文件。</p></body></html> Retain Settings 保存设置 <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> <html><head/><body><p>被勾选上时,UI控件的提示会被启用。</p><p>当你用鼠标划过控件事,提示会弹出。 </p></body></html> Enable ToolTips (Interface) 启用提示 <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> <html><head/><body><p>通常,统计信息会一直累计,连接时间和接收、传送计数会保留直到下一次启动。 </p><p>当勾选上时,每次cmst或connman启动时统计信息会清零。 </p></body></html> Reset Counters 重置统计 <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> <html><head/><body><p>当勾选时,为高级用户准备的附加设置会显示出来。</p></body></html> Advanced Controls 高级 <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> <html><head/><body><p>这些条目控制cmst启动时的一些选项。 </p><p>所有这些选项可以通过命令行设置,而命令行将会覆盖此处的设置。</p></body></html> Start Options 启动选项 <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">命令行选项: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> 或 </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>禁用系统托盘图标。</p><p>当系统托盘不支持 Freedesktop.org 系统托盘规范时可能需要。</p></body></html> Disable Tray Icon 禁用系统托盘图标 <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>此选项已禁用,因为当前connman会接受这个选项但是不会做任何事情。</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> <html><head/><body><p>设定在统计更新前必须传输的数据量,以KB表示 (默认是 1024 KB)。</p><p>Connman会接受这个选项,但是根据connman的代码注释,这个特性还未实现,因此选项已禁用。</p></body></html> Counter Update KB 统计更新 KB <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> <html><head/><body><p>设置启动系统托盘前的等待时间,以秒为单位 (默认是 0 秒)。</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> <html><head/><body><p>设定在统计更新前必须传输的数据量,以KB表示 (默认是 1024 KB)。</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">命令行选项: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> 或 </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>启动时最小化到托盘。</p></body></html> Start Minimized 启动时最小化 <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre></body></html> <html><head/><body><p>Use the icon theme from your system if one is defined.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">命令行选项: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> 或 </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre></body></html> <html><head/><body><p>使用系统图标主题(如果至少一个被定义)。</p></body></html> Use System Icon Theme 使用系统图标主题 <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">命令行选项: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> 或 </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>设置启动系统托盘前的等待时间,以秒为单位 (默认是 0 秒)。</p><p>如果 CMST 已启动并尝试在系统托盘启动前启动托盘图标,会弹出一个警告对话框。当程序自动启动时,这有时会发生。如果你确定系统启动时会启动托盘,你可以设置一个等待时间,CMST会在创建托盘图标前等待。这使得在我们把图标放入托盘前,WM或面板有时间创建托盘。</p></body></html> Wait Time 等待时间 <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">命令行选项: <span style=" font-weight:600;">-c</span> 或 <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>禁用统计。可能减少系统资源消耗。</p></body></html> Disable Counters 禁用统计 <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">命令行选项: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>设置统计信息更新的频率,以秒为单位 (默认是 10 秒)。 </p></body></html> Counter Update Rate 统计更新频率 <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><p>设置统计信息更新的频率,以秒为单位 (默认是 10 秒)。 </p></body></html> <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> <html><head/><body><p>使用为特定DE准备的程序代码。</p><p>以2014.11.24的情况,使用 QT5.3 和某些系统托盘会造成问题。程序中一些代码尝试解决这个问题,勾选一项会启用为特定桌面准备的代码。</p><p>当问题被修复时,这些选项会保留以避免启动脚本崩溃,但那时这个选项将什么都不做。</p></body></html> Desktop Specific 特定桌面设置 <html><head/><body><p>Default is no desktop specific code.</p></body></html> <html><head/><body><p>默认没有启用任何特定桌面的代码。</p></body></html> None <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">命令行选项: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">命令行选项: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>解决一个QT问题,该问题会使托盘图标背景为黑色或白色,而不是透明。</p><p>你可以在这里指定托盘图标背景颜色。格式为 RRGGBB 的十六进制值。如果制定的颜色与托盘背景颜色相同,我们就成功地伪造了一个透明背景。</p></body></html> <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> &VPN VPN Services <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> Host Domain Fake Transparency 伪造托盘图标透明背景 <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> <html><head/><body><p>指定背景颜色,以十六进制按照如下格式: RRGGBB.</p></body></html> <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> <html><head/><body><p>系统托盘相关设置在这一块。</p></body></html> System Tray 系统托盘 <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> <html><head/><body><p>若勾选,不显示托盘图标。 </p></body></html> Hide Tray Icon 隐藏托盘图标 <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> <html><head/><body><p>若勾选,在鼠标划过托盘图标时弹出状态信息。</p></body></html> Enable System Tray Popups 启用托盘弹框 <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> <html><head/><body><p>若勾选,托盘图标会在connman相关的重要事件发生时弹出通知消息。</p><p>通知可被托盘图标处理,或被通知程序处理(如果存在)。 两者不能同时启用。</p></body></html> System Tray Notifications 系统托盘通知 Notifications 通知 <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> <html><head/><body><p>若勾选,桌面通知程序会在connman相关的重要事件发生时弹出通知消息。</p><p>通知可被托盘图标处理,或被通知程序处理(如果存在)。 两者不能同时启用。</p></body></html> Notification Daemon 通知程序 Server Status 服务状态 Program Control 程序控制 <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> <html><head/><body><p>若勾选,CMST 会在当前用户的启动目录产生一个启动项,不够选则会移除。目录位置一般为: <span style=" font-weight:600;">${HOME}/.config/autostart</span>。 </p><p>CMST 只会产生或删除启动项文件夹内的 .desktop 文件。自动启动一般依赖于桌面环境,必须在桌面环境启用。</p></body></html> Enable Autostart 启用自动启动 <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> <html><head/><body><p>如果connman变为了 &quot;失败(Failed)&quot; 状态,它一般会保持那个状态。</p><p>如果这个复选框被勾选,CMST会尝试重新连接到进入 &quot;失败(Failed)&quot; 状态前的Wifi服务。 </p></body></html> Retry Failed Connection 失败重新连接 <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> <html><head/><body><p>Open the color selection dialog. </p></body></html> ... <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help 帮助(&H) &About 关于(&A) <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> <html><head/><body><p>显示关于本程序的信息的对话框。 </p></body></html> C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> <html><head/><body><p>显示关于这个程序中使用的图标的对话框。 </p></body></html> &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> <html><head/><body><p>显示关于用于构建本程序的Qt工具包的对话框。 </p></body></html> &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> <html><head/><body><p>使用本按钮查看程序许可。</p></body></html> &License <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> <html><head/><body><p>使用本按钮查看程序的更新日志。</p></body></html> ChangeLo&g <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> <html><head/><body><p><span style=" font-weight:600;">帮助</span></p><p>程序的帮助信息主要由下方的 &quot;这是什么?&quot; 按钮提供。按下按钮,并单击你想了解的项目。 &quot;这是什么?&quot; 也可通过在条目上右键的上下文菜单访问。</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>这是什么?</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>使用这个按钮进入 &quot;这是什么?&quot; 模式并查看GUI元素的相关信息。 </p><p>你也可以通过在界面元素上右键查看与之相关的 &quot;这是什么?&quot; 信息。</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> <html><head/><body><p>打开配置(provision)编辑器,创建或编辑connman配置文件。</p><p>这些配置文件在 /var/lib/connman ,所有权为 root:root 。 CMST 会注册一个roothelper来读取和写入这个文件夹内的文件。 </p><p>为防止root特权滥用,编辑器只会操作后缀为 <span style=" font-style:italic;">.cmst.config</span>的文件。这个后缀会在文件保存时自动添加上,并且不能被修改。 </p><p>这个编辑器不能编辑或删除其它方式创建的配置文件。</p></body></html> Provisioning Editor 配置编辑器 <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> <html><head/><body><p>退出程序并移除托盘图标。Connman仍会以守护进程运行,但是不再受本程序管理。</p></body></html> E&xit 退出(&X) <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> <html><head/><body><p>最小化对话框。如果系统托盘图标被启用,右键图标可恢复这个对话框。如果托盘图标被隐藏,最小化将不可用。</p></body></html> Mi&nimize 最小化(&N) Ma&ximize 最大化(&X) &Exit 退出(&E) About %1 关于 %1 <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<br><center><b>Translations:</b><center>Ilya Shestopalov (Russian) <center>%1 是connman守护进程的一个交互程序,并提供系统托盘控制。<br><center>版本 <b>%2</b><center>发布日期: %3<center>版权所有 c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>贡献者:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<br><center><b>翻译者:</b><center>Ilya Shestopalov (Russian) Service Details WiFi Connections VPN Connections <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian)<br><center><b>Build Information:</b><center>Compiled using QT version %5<center>Built %6 - %7 About AwOken 关于 AwOken <center>This program uses the <b>AwOken</b> icon set version 2.5<br><br>Released under the<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>The CMST icon is a derivative work from the AwOken icon set. <center>此程序使用 <b>AwOken</b> 图标集 版本 2.5<br><br>在以下许可下发布:<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>CMST 图标是 AwOken 图标集的衍生作品。 %1 license is the MIT license. %1 的许可是 MIT license. License %1 change log is not available. %1 更新日志不可用。 ChangeLog Cancel 取消 <b>Service:</b> %1 <b>服务:</b> %1 Unable to determine service 无法确定服务 No Services Selected 未选择服务 You need to select a Wifi service before pressing the connect button. 在按下连接按钮之前,你需要选择一个Wifi服务。 You need to select a Wifi service before pressing the disconnect button. 在按下断开按钮之前,你需要选择一个Wifi服务。 %1 license is the MIT (Expat) license. You need to select a service before pressing the connect button. You need to select a service before pressing the disconnect button. You need to select a Wifi service before pressing the remove button. 在按下忘记按钮之前,你需要选择一个Wifi服务。 Offline Mode Engaged 飞行模式已开启 Offline Mode Disabled 飞行模式已禁用 %1 (%2) Network %1 (%2) 网络 Connection: %1 连接: %1 Network Services: 网络服务: No network services available 无可用网络服务 Service Error: %1 服务错误: %1 Object Path: %1 对象路径: %1 VPN Engaged VPN Disengaged Warning 警告 <center><b>We received a DBUS reply message indicating an error while trying to scan technologies.</b></center><br><br>Error Name: %1<br><br>Error Message: %2 <center><b>扫描设备时收到了一个来自DBUS的错误消息。</b></center><br><br>错误名称: %1<br><br>错误消息: %2 <b>Connection:</b> %1 <b>连接:</b> %1 <br><b>Service Details:</b><br> <br><b>服务详情:</b><br> Service Type: %1<br> 服务类型: %1<br> Service State: %1<br> 服务状态: %1<br> Favorite: %1<br> 已保存: %1<br> Yes favorite No favorite External Configuration File: %1<br> 外部配置文件: %1<br> Yes immutable No immutable Auto Connect: %1<br> 自动连接: %1<br> On autoconnect No autoconnect <br><b>IPv4</b><br> IP Address Acquisition: %1<br> IP 地址获取: %1<br> IP Address: %1<br> IP 地址: %1<br> IP Netmask: %1<br> IP 子网掩码: %1<br> IP Gateway: %1<br> IP 网关: %1<br> <br><b>IPv6</b><br> Address Acquisition: %1<br> 地址获取: %1<br> Prefix Length: <br> 前缀长度: <br> Prefix Length: %1<br> 前缀长度: %1<br> Privacy: %1<br> 隐私: %1<br> <br><b>Proxy</b><br> <br><b>代理</b><br> URL: %1<br> Servers:<br>&nbsp;&nbsp;%1<br> 服务器:<br>&nbsp;&nbsp;%1<br> Excludes:<br>&nbsp;&nbsp;%1<br> 排除:<br>&nbsp;&nbsp;%1<br> <br><b>Name Servers</b><br> <br><b>DNS</b><br> <br><br><b>Time Servers</b><br> <br><br><b>时间服务器</b><br> <br><br><b>Search Domains</b><br> <br><br><b>搜索域</b><br> <br><br><b>Ethernet</b><br> <br><br><b>以太网</b><br> Connection Method: %1<br> 连接方式: %1<br> Interface: %1<br> 接口: %1<br> Device Address: %1<br> 设备地址: %1<br> MTU: %1<br> <br><b>Wireless</b><br> <br><b>无线</b><br> Security: %1<br> 安全性: %1<br> Strength: %1<br> 强度: %1<br> Roaming: %1<br> 漫游: %1<br> Yes roaming No roaming <br><b>VPN Provider</b><br> Host: %1<br> Domain: %1<br> Name: %1<br> Type: %1<br> State: 状态: Engaged 启用 Disabled 禁用 Offline Mode 飞行模式 %1On%1%1 powered %1开%1%1 %1Off%1%1 powered %1关%1%1 Yes connected No connected Yes tethered No tethered WiFi Technologies:<br> %1 Found, %2 Powered WiFi 设备:<br> %1 已找到, %2 已启用 Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. 统计更新的阈值是 %L1 KB 的数据和 %L2 秒的时间。 Ethernet Connection<br> icon_tool_tip 以太网连接<br> Service: %1<br> 服务: %1<br> Interface: %1 接口: %1<br> WiFi Connection<br> icon_tool_tip WiFi 连接<br> SSID: %1<br> Strength: %1%<br> 强度: %1%<br> VPN Connection<br> icon_tool_tip Connection is in the Ready State. icon_tool_tip 连接处于就绪状态。 Connection is in the Failure State, attempting to reestablish the connection icon_tool_tip 连接处于失败状态,尝试重新建立连接 Connection is in the Failure State. icon_tool_tip 连接处于失败状态。 Not Connected icon_tool_tip 未连接 Error retrieving properties via Dbus 从DBUS取回属性失败 Connection status is unknown 连接状态未知 <p style='white-space:pre'><center><b>%1 Properties</b></center> Type: %1 <br>Powered On Off Not Connected 未连接 <br>Tethering Enabled 启用 Connection : %1 Signal Strength: %1% Favorite Connection Never Connected <br>Security : %1 <br>Roaming <br>Autoconnect is <p style='white-space:pre'><center><b>%1</b></center> <center><b>Unable to find a systemtray on this machine.</b><center><br>The program may still be used to manage your connections, but the tray icon will be disabled.<center><br><br>If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the <b>-w</b> switch and set a delay as necessary. The exact wait time will vary from system to system. <center><b>未能在此机上找到系统托盘。</b><center><br>此程序仍可用于管理你的连接,但是托盘图标会被禁用。<center><br><br>如果你在系统启动时看到这个信息,并且你知道当系统启动时系统托盘存在,尝试用 <b>-w</b> 参数启动本程序,并在有必要的情况下设置一个延迟时间。 实际的等待时间因不同系统而异。 Could not find a connection to the system bus 无法连接到system bus %1 - Critical Error %1 - 严重错误 Unable to find a connection to the system bus.<br><br>%1 will not be able to communicate with connman. 无法连接到system bus。<br><br>%1 将无法与connman通信。 Could not create an interface to connman on the system bus 无法在 system bus 上创建与connman通信的接口 Unable to create an interface to connman on the system bus.<br><br>%1 will not be able to communicate with connman. 无法在 system bus 上创建与connman通信的接口。<br><br>%1 将无法与connman通信。 Error reading or parsing connman.Manager.GetProperties 在读取或解析connman.Manager.GetProperties时发生错误 %1 - Warning %1 - 警告 There was an error reading or parsing the reply from method connman.Manager.GetProperties.<br><br>It is unlikely any portion of %1 will be functional. 在读取或解析connman.Manager.GetProperties的回应时发生了一个错误。<br><br>%1 可能不工作。 Error reading or parsing connman.Manager.GetTechnologies 在读取或解析connman.Manager.GetProperties时发生错误 There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.<br><br>Some portion of %1 may still be functional. 在读取或解析connman.Manager.GetProperties的回应时发生了一个错误。<br><br>%1 部分功能可能仍可以工作。 Error reading or parsing connman.Manager.GetServices 在读取或解析connman.Manager.GetProperties时发生错误 There was an error reading or parsing the reply from method connman.Manager.GetServices.<br><br>Some portion of %1 may still be functional. 在读取或解析connman.Manager.GetProperties的回应时发生了一个错误。<br><br>%1 部分功能可能仍可以工作。 %1 version %2 by %3 has been detected on this system.<p>This server supports desktop Notification Specification version %4 检测到 %1 版本 %2 by %3 。<p>这个服务支持桌面通知规范 版本 %4 Colorize Icons %1 detected 检测到 %1 Attempt %1 of 4 looking for notification server. 尝试 %1 of 4 查找通知服务。 Unable to find or connect to a Notification server. 无法找到或连接通知服务。 IconManager A new icon definition file will be installed to <b>%1</b> and a backup of the old definition file has been created as <b>%2</b> <p>If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. <p>If the original was never customized or you just wish to delete the backup now you may select <i>Discard</i> to delete the backup or <i>Save</i> to retain it. Peditor Property Editor 设置编辑器 &General 通用(&G) <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> <html><head/><body><p>若勾选,这个服务将在没有其它可用连接时自动连接。这个只能被标记为 &quot;已保存&quot;的服务使用。 </p><p>漫游时,服务将不会自动连接。</p></body></html> AutoConnect 自动连接 <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>手动配置的DNS服务器列表。部分蜂窝网络不提供正确的域名解析服务器,这个列表能覆盖设置。</p><p>这个列表按照优先级排序,列表中的第一项表示最优先的DNS服务器。</p><p>当处于手动模式且没有设置全局域名服务器时,这项设置十分有用。</p><p>输入一个或多个IP地址。 用英文逗号、分号或空格分隔不同地址。</p></body></html> &Nameservers DNS服务器(&N) <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>手动配置的时间服务器列表。</p><p>列表中的第一项表示最优先的服务器。</p><p>使用手动配置时,这个设置可以覆盖其它所有时间服务器设置。这因服务而异,因此只针对默认的在使用的服务的值。</p><p>改变这项设置会重启NTP查询。</p><p>输入一个或多个IP地址。 用英文逗号、分号或空格分隔不同地址。</p></body></html> &TImeservers 时间服务器(&T) <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>手动配置的搜索域列表。</p><p>输入一个或多个IP地址。 用英文逗号、分号或空格分隔不同地址。</p></body></html> &Domains 域(&D) <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> <html><head/><body><p>IPv4的用户设置</p></body></html> IPv&4 Address 地址 Netmask 子网掩码 Gateway 网关 DHCP Manual 手动 Off Method 方法 <html><head/><body><p>User configuration of IPv6 settings</p></body></html> <html><head/><body><p>IPv6的用户配置</p></body></html> IPv&6 Auto 自动 Prefix Length 前缀长度 Privacy 隐私 Disabled 禁用 Preferred 可选 Enabled 启用 <html><head/><body><p>User configuration of Proxy settings.</p></body></html> <html><head/><body><p>代理的用户配置</p></body></html> &Proxy 代理(&P) Direct 直接连接 <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> <html><head/><body><p>自动代理配置的URL。 在&quot;自动&quot;方法中使用。</p></body></html> URL Servers 服务器 <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>当启用&quot;手动&quot;方法时使用。代理URI的列表。 不带协议的URI会被当作通用代理URI。</p><p>输入一个或多个IP地址。 用英文逗号、分号或空格分隔不同地址。</p></body></html> Excludes 排除 <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>当启用&quot;手动&quot;方法时使用。 可以直接访问的主机列表。</p><p><br/></p><p>输入一个或多个IP地址。 用英文逗号、分号或空格分隔不同地址。</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>这是什么?</p></body></html> <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> <html><head/><body><p>清楚当前页面的全部设置。</p><p>这个按钮会把页面上所有设置重置为默认值,默认值通常为空。</p></body></html> Reset Pa&ge 重置页面(&G) <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> <html><head/><body><p>清除这个对话框上所有页面中的设置。</p><p>这将会把所有页面的所有设置重置为默认值。</p></body></html> Reset &All 重置全部(&A) <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> <html><head/><body><p>确认设置项目,把它们发送给connman,并关闭对话框。</p></body></html> OK 确定 <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> <html><head/><body><p>关闭对话框,不发送任何设置给connman。</p></body></html> Cancel 取消 Provisioning Provisioning Editor 配置编辑器 <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>文本编辑窗口。</p><p>你可以在窗口里输入、复制或粘贴。你也可以使用上方的菜单插入文本。</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> <html><head/><body><p>打开已经存在的配置文件。</p></body></html> &Open 打开(&O) <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> <html><head/><body><p>把文本框内的数据写入配置文件。</p><p>选择框内会有一系列cmst创建的配置文件以便覆盖。你也可以在框内输入一个名字。</p><p>你不需要写路径或后缀名,因为它们会被去掉并用合法的路径和后缀名取代。 </p></body></html> &Save 保存(&S) <html><head/><body><p>Delete a config file.</p></body></html> <html><head/><body><p>删除一个配置文件</p></body></html> &Delete 删除(&D) <html><head/><body><p>Clear all text from the editor window.</p></body></html> <html><head/><body><p>清除编辑器窗口内的所有文字。</p></body></html> &Clear Page 清除页面(&C) <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>这是什么?</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>进入 &quot;这是什么?&quot; 模式。</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> <html><head/><body><p>退出对话框。</p></body></html> E&xit 退出(&X) [global] Name Description [service_*] Type MAC Nameservers Timeservers SearchDomains Domain SSID EAP CACertFile ClientCertFile PrivateKeyFile PrivateKeyPassphrase PrivateKeyPassphraseType Identity Phase2 Passphrase Security Hidden Eduroam (long) Eduroam (short) IPv4 Address IPv4 地址 IPv4 Off IPv4 关 IPV4 DHCP IPv6 Address IPv6 地址 IPv6 Off IPv6 关 IPv6 Auto IPv6 自动 IPv6.Privacy IPv6 隐私 ProvisioningEditor Global 全局 Service 服务 WiFi Templates 模板 File Path to the CA Certificate File CA证书文件路径 File Path to the Client Certificate File 客户端证书文件路径 File path to the Client Private Key File 私钥文件路径 Key Files (*.pem);;All Files (*.*) 密钥文件 (*.pem);;全部文件 (*.*) MAC address. MAC 地址。 SSID: hexadecimal representation of an 802.11 SSID SSID: 802.11 SSID 的十六进制表示 List of Nameservers DNS服务器列表 List of Timeservers 时间服务器列表 List of DNS Search Domains DNS搜索域列表 Domain name to be used 所使用的域名 Enter the string representation of an 802.11 SSID. 输入 802.11 SSID 的字符串表示。 Service type. 服务类型。 EAP type. EAP 类型。 Private key passphrase type. 私钥密码类型。 Network security type. 网络安全类型。 Hidden network 隐藏网络 IPv6 Privacy IPv6 隐私 %1 - Item Input %1 - 项目输入 Tag which will replace the * with<br>an identifier unique to the config file. 替换 * 的标签名<br>配置文件的唯一标识。 Enter the network name. 输入网络名称。 Enter a description of the network. 输入网络的描述。 Password/Passphrase for the private key file. 私钥文件的密码。 Identity string for EAP. EAP的身份字符串。 RSN/WPA/WPA2 Passphrase RSN/WPA/WPA2 密码 Phase 2 (inner authentication with TLS tunnel)<br>authentication method. 阶段 2 (通过TLS隧道进行内部身份验证)<br>验证方式。 %1 - Text Input %1 - 文本输入 Information 信息 The IPv4 <b>Address</b>, <b>Netmask</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. 输入IPv4 的<b>地址</b>、<b>子网掩码</b>,和可选的<b>网关</b>。<p>准备就绪时,按确定。 IPv4 Address IPv4 地址 IPv4 Netmask IPv4 子网掩码 IPv4 Gateway (This is an optional entry) IPv4 网关 (可选) The IPv6 <b>Address</b>, <b>Prefix Length</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. 输入IPv6 的<b>地址</b>、<b>前缀长度</b>,和可选的<b>网关</b>。<p>准备就绪时,按确定。 IPv6 Address IPv6 地址 %1 - Integer Input %1 - 数字输入 Enter the IPv6 prefix length 输入IPv6前缀长度 IPv6 Gateway (This is an optional entry) IPv6 网关 (可选) <center>No configuration files were found.<br>You may use this dialog to create one. <center>没有找到配置文件。<br>你可以用这个对话框创建一个。 %1 - Information %1 - 信息 <center>Reading configuration file: %1 <center>读取配置文件: %1 %1 - Select File %1 - 选择文件 Select a file to load. 选择要加载的文件。 <center>No configuration files were found.<br>Nothing will be deleted. <center>没有找到配置文件。<br>不会删除任何东西。 Select a file to be deleted. 选择要删除的文件。 Enter a new file name or select<br>an existing file to overwrite. 输入新的文件名或选择并<br>替换一个已经存在的文件。 File read completed 文件读取完成 File deleted 文件已删除 Error encountered deleting. 删除时发生了错误。 File save failed. 文件保存失败。 %L1 KB written %L1 KB 已写入 %L1 Bytes written %L1 Bytes 已写入 Critical 严重错误 <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 <b>DBus 错误 名称:</b> %1<br><br><b>字符串:</b> %2<br><br><b>消息:</b> %3 RootHelper Failed to register service org.cmst.roothelper - there may be another instance running. 无法注册服务 org.cmst.roothelper —— 可能已经在运行。 Failed to register roothelper object on the system bus. 无法在system bus上注册roothelper对象。 ScrollBox Scrollbox 滚动框 TextLabel 文本标签 TranslateStrings connman system tray Main Window Title cmst Abbreviated Program Name - used for QMessageBox titles idle connman state string 空闲 association connman state string 连接中 configuration connman state string 配置中 ready connman state string 就绪 online connman state string 在线 disconnect connman state string 断开 failure connman state string 错误 offline connman state string 离线 system connman type string 系统 ethernet connman type string 以太网 wifi connman type string bluetooth connman type string 蓝牙 cellular connman type string 蜂窝数据 gps connman type string vpn connman type string gadget connman type string p2p connman type string wired connman type string 有线网络 direct connman proxy string 直接连接 manual connman proxy string 手动 auto connman proxy string 自动 psk connman security string ieee8021x connman security string none connman security string wep connman security string wps connman security string Invalid arguments connman error string 非法参数 Permission denied connman error string 拒绝访问 Passphrase required connman error string 需要密码 Not registered connman error string 未注册 Not unique connman error string 不唯一 Not supported connman error string 不支持 Not implemented connman error string 未实现 Not found connman error string 未找到 No carrier connman error string 无法承载网络 In progress connman error string 进行中 Already exists connman error string 已经存在 Already enabled connman error string 已启用 Already disabled connman error string 已禁用 Already connected connman error string 已连接 Not connected connman error string 未连接 Operation aborted connman error string 操作退出 Operation timeout connman error string 操作超时 Invalid service connman error string 非法服务 Invalid property connman error string 非法属性 disabled connman privacy string enabled connman privacy string prefered connman privacy string auto connman ethernet connection method 自动 manual connman ethernet connection method 手动 dhcp connman ipv4 method string manual connman ipv4 method string 手动 off connman ipv4 method string fixed connman ipv4 method string auto connman ipv6 method string 自动 manual connman ipv6 method string 手动 6to4 connman ipv6 method string off connman ipv6 method string openconnect connman vpn connection type openvpn connman vpn connection type vpnc connman vpn connection type l2tp connman vpn connection type pptp connman vpn connection type auto connamn ipv6 method string 自动 manual connamn ipv6 method string 手动 Invalid arguments connman error sring 非法参数 Permission denied connman error sring 拒绝访问 Passphrase required connman error sring 需要密码 Not registered connman error sring 未注册 Not unique connman error sring 不唯一 Not supported connman error sring 不支持 Not implemented connman error sring 未实现 Not found connman error sring 未找到 No carrier connman error sring 无法承载网络 In progress connman error sring 进行中 Already exists connman error sring 已经存在 Already enabled connman error sring 已启用 Already disabled connman error sring 已禁用 Already connected connman error sring 已连接 Not connected connman error sring 未连接 Operation aborted connman error sring 操作退出 Operation timeout connman error sring 操作超时 Invalid service connman error sring 非法服务 Invalid property connman error sring 非法属性 VPNAgent VPN Agent Input Username <html><head/><body><p>WISPr username.</p></body></html> <html><head/><body><p>WISPr 用户名.</p></body></html> Password <html><head/><body><p>WISPr password.</p></body></html> <html><head/><body><p>WISPr 密码.</p></body></html> Host Name 名称 OpenConnect CA Cert. Client Cert. Cookie Server Cert. VPN Host <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>这是什么?</p></body></html> ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>继续连接。</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> <html><head/><body><p>接受并使用你在此会话中提供的信息。</p><p>这将把你的输入发送给connman守护进程以继续连接。</p></body></html> O&K 确定(&K) <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>取消连接。<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> <html><head/><body><p>取消会话。</p><p>这将会给connman守护进程发送取消连接请求。</p></body></html> &Cancel 取消(&C) Save Credentials VPN_Editor Global 全局 OpenConnect OpenVPN VPNC L2TP PPTP All Files (*.*) CA Files (*.pem *.ca);;All Files (*.*) Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Key Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Config Files (*.ovpn *.conf *.config);;All Files (*.*) VPN server IP address (ex: 1.2.3.4) %1 - Item Input %1 - 项目输入 %1 - Verify Option User defined name for the VPN Domain name for the VPN Service (example: corporate.com) Networks behing the VPN link, if more than one separate by a comma. Format is network/netmask/gateway, and gateway can be omitted. Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16 Networks = entry is optional and may be left blank. %1 - Text Input %1 - 文本输入 Information <center>No configuration files were found.<br>You may use this dialog to create one. <center>没有找到配置文件。<br>你可以用这个对话框创建一个。 %1 - Information %1 - 信息 <center>Reading configuration file: %1 <center>读取配置文件: %1 %1 - Select File %1 - 选择文件 Select a file to load. 选择要加载的文件。 <center>No configuration files were found.<br>Nothing will be deleted. <center>没有找到配置文件。<br>不会删除任何东西。 Select a file to be deleted. 选择要删除的文件。 Enter a new file name or select<br>an existing file to overwrite. 输入新的文件名或选择并<br>替换一个已经存在的文件。 File read completed 文件读取完成 File deleted 文件已删除 Error encountered deleting. 删除时发生了错误。 File save failed. 文件保存失败。 %L1 KB written %L1 KB 已写入 %L1 Bytes written %L1 Bytes 已写入 Critical 严重错误 <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 <b>DBus 错误 名称:</b> %1<br><br><b>字符串:</b> %2<br><br><b>消息:</b> %3 VPN_Prov VPN Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>文本编辑窗口。</p><p>你可以在窗口里输入、复制或粘贴。你也可以使用上方的菜单插入文本。</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> <html><head/><body><p>打开已经存在的配置文件。</p></body></html> &Open 打开(&O) <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> <html><head/><body><p>把文本框内的数据写入配置文件。</p><p>选择框内会有一系列cmst创建的配置文件以便覆盖。你也可以在框内输入一个名字。</p><p>你不需要写路径或后缀名,因为它们会被去掉并用合法的路径和后缀名取代。 </p></body></html> &Save 保存(&S) <html><head/><body><p>Delete a config file.</p></body></html> <html><head/><body><p>删除一个配置文件</p></body></html> &Delete 删除(&D) <html><head/><body><p>Clear all text from the editor window.</p></body></html> <html><head/><body><p>清除编辑器窗口内的所有文字。</p></body></html> &Clear Page 清除页面(&C) <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>这是什么?</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>进入 &quot;这是什么?&quot; 模式。</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> <html><head/><body><p>退出对话框。</p></body></html> E&xit 退出(&X) [global] Name 名称 Name of the network. Description Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE PPPD.ReqMPPE40 PPPD.ReqMPPE128 PPPD.ReqMPPEStateful VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert Local peer's signed certificate. OpenVPN.Key Local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass Authenticate with server using username/password? OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. main.cpp Another running instance of CMST has been detected. This instance is aborting 另一个cmst实例正在运行。该实例将退出 Connman System Tray. Bypass restoring the window state if restoring window state is specified in the settings file. Bypass restoring any start options in the settings file. [Experimental] Disable data counters. May be used to minimize load on your system. [实验性] 禁用数据统计。 可能减轻系统负载。 Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. 禁用系统托盘图标。 可能在系统托盘不符合 Freedesktop.org system tray 规范时需要。 Use the icon theme from your system if one is defined. 若存在,使用系统图标主题。 Use an icon theme from your system. Icon Theme Name Log the connman inputRequest for debugging purposes. 记录connman的inputRequest日志以供调试。 Start the GUI minimized in the system tray. 启动GUI时最小化到系统托盘。 Specify the wait time in seconds before starting the system tray icon. 指定系统托盘启动钱的等待时间,以秒为单位。 seconds [Experimental] The number of kb that have to be transmitted before the counter updates. [实验性] 统计更新前传输的数据量,以kb为单位。 KB [Experimental] The interval in seconds between counter updates. [实验性] 统计更新的间隔时间,以秒为单位。 If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB) 如果托盘图标需要伪装背景透明,指定要使用的背景颜色 (格式:0xRRGGBB) RRGGBB RRGGBB Use XFCE specific code. 使用为XFCE准备的代码。 Use MATE DE specific code. 使用为MATE准备的代码。 cmst/images/application/variations/24x24/cmst_spot_05_24x24.png000644 001750 000144 00000004013 12645570501 024563 0ustar00andyusers000000 000000 PNG  IHDR!-gAMA a cHRMz&u0`:pQ<bKGD pHYs  tIME /:;IDATHDž[l\G3s.ݵ./%5(4R*$D[AS"^(@=C%$@Ѣ&"mІMZ߲{=9g ^)j'Ìf7g1#J#pjo W$S# Xj3Sq G+JV;=0)Į<#½G>f+ #A:Qܮn5}]9oZѵZxٟp37G;_}{fZiq,T:3-7332[? H|BS-Ņo2JrzII f_>wzo@ӑRkc`!5Z *c>?b|.?W#_(9\EJUsT~'1y>=OP6ǃ0T1(<\C9 ),Rrr?45e ]:;ãgsz(Iҟ$I\.ila@aD$LMfUX+bȗG,ayln>p/"P] n=h IHǜ_m -K4[Mv{جFwJ$nP)oݐ7mM*%Z%FET*JNT(BNDؗ*kaB_rq.?~צvu  ŕ;iI-.{rN:fo2kQ(l$p y9lѧ p27C}Ӗ]ENV\2v{/0ihKco#6NqD?{}(9ߋRKOwK8R90CGR#XVYX\&ˋ4sEd&œ_e37?3뿈({>}SdGVMtH!MJrJ2XRb"tDY *!ZF Y$UŜK*֊Jk޻1~|i$R()z#e$)N|_MDZqxLBR)J:()=t"[|}0NkxƑ/VJsy| FR9vs4K.vj#|X:=wK[xZk63X9l݅֎zKs[S\gXѤcGP{G6&S})׶;ooE`h @ SBi6zw򡀫/Md=^3;ww}O\?:%tEXtdate:create2015-09-20T15:43:03-04:00Q&%tEXtdate:modify2014-11-18T18:47:58-05:004MtEXtsoftwareImageMagick 6.9.2-0 Q16 x86_64 2015-08-18 http://www.imagemagick.orgtEXtThumb::Document::Pages1/tEXtThumb::Image::Height136]tEXtThumb::Image::Width144aptEXtThumb::Mimetypeimage/png?VNtEXtThumb::MTime1416354478tEXtThumb::Size15.4KBBM]"tEXtThumb::URIfile://cmst_spot_05.png} IENDB`cmst/apps/cmstapp/code/provisioning/000755 001750 000144 00000000000 12646535647 020252 5ustar00andyusers000000 000000 cmst/translations/cmst_fr_FR.ts.qm000644 001750 000144 00000000027 12645570501 017713 0ustar00andyusers000000 000000 D-qst|N띳yfBSP!dcEq?c>g꧞k--kX@0h}÷X2EU 2Gh'|.H)GO:h)18>-# -GєOe>K{e_L[w#زsñ=&3 ׇoK2R9rWpU?GA@p6"W]7k_s+m @3Ny,amd}PLO0ƴMj-  8[*h|~΂S.5dԹ\Og/zJ:}:8:jbg׿1Fdh&XJ$d]xL%YU$kѧx^ř@0j)OeI CtptV[ wާ#* '-"zl;ot;zA!>aD)څHȞ8C70&!@T++L\Z|ĿiP/s|c&4rM/# MS99jJxѴZG)r{ջ1BM!&z;l^3euSx xjIRK77;X" _׫+Ugu){1LL8,X]>y<L}eM`%po%˅X @"h*. Ī).R߶s3)S$2&}8hͅ+97R-gin5Ҭ- o ֭׹2@&FJԖIRF(F@1(%ØM ^[N`Ȓ/a-:u;o]i&_Ѷ#![:EE*[ȢMg `@+I 8!{M|J͈?*SN{QJjر{W+$͔\ (4!8JPcCr3nG _±ʦ̤`rI,( b ~(P'4]%Q.B+$E.np¥UËO5*YUXM 7W54g9L綠" h_?lIq" 5eQ9&7l oHS [v$2idTޟנ-WGoo켁k-`@wJ wn4g>iܫ-h ߾u=]71]_3ݙ۶~()4AO|BJ x}ê#k}cՕ䳝s E_ie\3$.}dEtUɕ9=xH/[2Ek1\hC3ofQeѢ&$q̱k4ׅ,}"LXD:|,܊ Vjm>c R5/w&[kY'ul񒹴W״mPbF E }jhPR!i8}YIENDB`cmst/translations/cmst_pl_PL.qm000644 001750 000144 00000000037 12645570501 017277 0ustar00andyusers000000 000000 cmst/images/application/variations/scalable/000755 001750 000144 00000000000 12645604055 021662 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/trstring/000755 001750 000144 00000000000 12650551344 017363 5ustar00andyusers000000 000000 cmst/images/application/variations/24x24/cmst_spot_03_24x24.png000644 001750 000144 00000003770 12645570501 024572 0ustar00andyusers000000 000000 PNG  IHDR!-gAMA a cHRMz&u0`:pQ<bKGD pHYs  tIME /wIDATHDž[l\G3gw^߲&iKRKj-BU@\""ZHHEEH o' CiTjK/RH"Cq|og׻{9gfx:n*|\4|CX:wwOϞH Oap'Nkx⾯ǟkg#wh˚H+n&J}R:6ެ]?yw)9~˧?=eF@EcN8ELcZ1֚LϖO> ɬW$#‹gݡ=#c XtX!~:voh8þ;g.{&}HD*H"KSήXnnm5" 9凖Yj8ǡ/a~T%ł4֨CVhbH5k X Ȼ==jv&[@a^r}7D+bx+n AK]D阱!J<ZMpG5"QX K@XTIJ;`$ܯ CşngлX捧mcøVPD8~_m(Te, qbddNOkuF0C=i9~Qp[0oyc )> d~lY*Uui#Ԗr?C^~yNEpjXűVexhr^봓RL<+gJ7@8}Y .*^3zFHlnj:Ҕ^Qv20,x2@Yd^*7ozygAob1nI= `]_}/Quu]₠`<p蝠Y"E/ ʍXFsQ+[8&`E >mQ2G9/fI@"}8t}ddXc;Qmq  0Yj#U) Gm6&np\b*HHZp @Jz~Ɩ+$B!BHAw.dd0Nϒi`O|y\ m:">!MOкbY6vo:V7[H׷h\rVJk*]^Ie/ΝmYV_~4!%(yyޑ\itstTT6ۮVse`s/ήXJSqLn[w Mr}ݒN&1vs-x;_uݩ!hq%tEXtdate:create2015-09-20T15:43:03-04:00Q&%tEXtdate:modify2014-11-18T18:47:24-05:00QMtEXtsoftwareImageMagick 6.9.2-0 Q16 x86_64 2015-08-18 http://www.imagemagick.orgtEXtThumb::Document::Pages1/tEXtThumb::Image::Height136]tEXtThumb::Image::Width144aptEXtThumb::Mimetypeimage/png?VNtEXtThumb::MTime1416354444& tEXtThumb::Size14.2KBB@$"tEXtThumb::URIfile://cmst_spot_03.png`IENDB`cmst/images/application/variations/48x48/cmst.png000644 001750 000144 00001107204 12645570501 022372 0ustar00andyusers000000 000000 PNG  IHDRogAMA a cHRMz&u0`:pQ<bKGDC pHYsZZp#}tIME "+دrIDATxuxTg睙 BRh-mBvKR7ҭS7-] qwydYv+|?׵̹ٙ {WE8V+):sY?eggO?f;|,W7:8ǺT1Wzsq9_$mohPtt,]QWg[(%_w϶ymibή:s$bꑪjj9 ,G>+;~nnՕfMVOyx&m!َ(77Z%LM&jswׇ,V7O$*Yշ2''C=9::U]\RqVjt HE]+>z̐HzR ųBޕpy^Uja}ſ_+$LuժjNKg8[.gi:*}RuRY!EMEt_UUZoT,.-ݢzjXw5̣ern\Ue:mԭv3ۥ""/OܽgqO#C IN>{{`yQGO5zNnQh?/jzGjDDL5J֕H T0'kJJKY*H)bbzR/),.t~@ y>7״`SP`C{w5₂gRJlF7h(`gZ{6mV;!!/lĠ ) D@|-kr`yJ6"JP@\$~oo hlNlR,3ՍS*B8ɹK}suNK~A䨞%5+6#볲BCDwԥ\]<%.֞v3ѯm+YkCCe-icJ5=i# :E&cڴ[kҧMQzCB..F%䧆!^37WRUgf*!99_/33w:_jOY;gdL]Wkퟞ^="zsZ2=P]ma X[4흝Oٶekǎ""؎MtcG\>W;vԱQ%8X& 28oXr]jlHYVJەjMjm\VT {SGYRJimМQM޲Lqs3NU> ٔk3"B Mqǎ:T+ߵoO g//c8!'reJO}78"wHo Zhĉ.ȠYo߾}Zep[NLc=%"BL˦Ν=&?N a#jnmDH{=.5UfO7%E%)):֤dى-S]vYE?>0F|3{;۵3E*_EEَ\]*҇dBv*תdܪ8:p)n| ^WGzWxHRUUkLL>}Pfo%Vj-7,Y_MO^ʽ[79*wdP>m z\nB"aa}2-5U`Ѻ~zAΦ%*Jߤ^#W/ҫggs)l -9Mز$Y JLw_^)J)F4ohVzЩMnۧ\j7i!S=tܨ{e~C$x?Ъj+)\ތ).N %gsM;rZ4AKA]==^[7^SDC~eP 32(H%ed߯Vejg߰znÆ.߷oGUUF\Xt9:Pk}W.8ַDKtWAԶy.dު'&w3w^ud Ӄ?=xpJpnPXh"fn útڂl\ C6I:T%T.d)@Z3E}$%ӪZٶMHYo7M}w_^)J)F6wXqdZoomY܁mq[5p&=f`9e;77K(+B=@={5^gq9hyaݗhay,9k;tk, _7}z&Wíx)Z;vLb:U=*m\}vQZ:0 +Wѱi# CYPdztX=O_犺NԀ\G>:R-ڶͼ<}>t޽ϯ5:/4WڢEim6;;wRPгbaT*ÇKz:9t'KFh2I^Y)Zןޭzd6Y?^H2:'G_>LO?dժZQW\aǟ8k*+ 堀-ʕqqwthzt)K䔘e:Z!I WcusMZ.۶پ}7l0EU>+VL gbb14?גS~|EgmKԍ2]&OdftNIQ/}R[RM֧˗W}RV14='IXRmXy^V듓'2}0uZs-ɐ7TTo(#%P\YKnXd.7.//7:&P&f]uqi|QI]gM&饲EF9VWKJ{Ε+Mh%~ggG jڑiy%Vhz`T/eer9R6~tKr.RMLa{bQLc.T-gѣFQsdMƑi;mɓUTȫC"@bJ1M3^hbx>࿣ʕqq%%^^%PpڨhYbJS_Wrb۶, >`ݰeZ1&TrG%JFELwu]~քVoѢE6t)9R٫"믗GD.gGJ\] ӯ2ζͱ)x-pɓFZ" XZ+QaY}r)\}ܥwFsE͖ͦv۝;շ=}dbYXpӷN -hf~9kw1RW_u^+/p7,|` j!rJvʭ2T=WN/\~O0:&Psì|}MWuk$WS7(@^FfI)ϊ G?GU/ؓuϲ͛QJ)ehJ(`h6-ZHkٹK#MϚ#nMoiԩAq{{s@zLe'KoS:S~:mHIIFD @uf AiՖn*OZjj_}eUvwG~%#nx@ 胺X{zڭ27L믗H bt>T#Z7GG/ [o߾}7:&p.QphJt;c#Hs뭲R{.\e~sl|'.3#_|a: ozJfʸ//iٲF?#uft>F"X[GKQU߃)&SUEѣF5=GvުSe8F4q{Pir!sBy̴J4:PvdZޢ@} S 78U)zWS'Zj/'eY_߫n;컼xh(`ZkbpR!w))wyU/-sZ'P<+*TYJVW:'-Z?!u_ >`Ѻ~z4QͿ.֫hF/߷oGUUF@D hVs- 7ݤ{^2ۤH://Wj+)ћNU:EWY~{OM5:Z X@+o߾}ZrxefNSn)>|'uu"VfTW֞Y"WZfkyMM]]Mjl"uugAjjk/JY,"vvgXL&Yכ/X;NNNNgo`ggg'b6fɤ$p A͖ͦՏ5k$Y￿M11(ٌ ~  o2u\7k~R^`ښ*3jʚ*ՍEWW7ܮHu@U[xƟ7444, GXsrrpptqphbk,n9:]c޾Xk_xӿo_)nΕSBe~Xo~_v,rF@[@ 焻FM[͔9rkdܪ8:pn)4TTWVVVUTTTUU5^_QQY)RZZYyv"^6}@SpXrrrrqqi,r:;7^vrrqqssuuqi/ox3E/@nWsՔj%u*S3yIH0: X@3Zk_y%2[!#et9|zg PEE%%2Ҳ2LL?qG7b//{z7<=XrskLx)Z&V=ۻâZ҅, IN]n[]f[=s՞Wvdt>h-V²bmiiQBUaaIIqHqqcag&S1Y h,lpqqsk,lyxxzzyx{7^vwo)xb}4yT6~))ʬ>}W:0=gL,+3:. X@k *G 7$^rqw7:4wUU"EE"Ņ"EmiiRZkG5;O-ooO_<=EE||L&L&ZbySN2R_| .۠w.jhʸ>}A3G+z\lojkjkEyy" ޮpYR׷qo߿ݸ= ]fd6})_/[f{QkMv ٱ|87(`@V_G~Tk|Pɋ2l(Drr ^.,)--///7:5|gWgZ~~"AA>>~~">>"lNMQ٦ؾ]%rk~>˗?RE XyhёiZۻ%W_Ry[ֳ[MMmmm"Px%-GcA+/ Ҧѩ@5OJG]&EW~HAuP55Fo[P0ͮ-]/@S:777ZI[~~"AA"!!"vv vhѲ|Eo{.Ë_v,rF ~0gTGQ+Ǥtr~Kzzx~/Mk0Uff6##//'rNHuummuѩՙ%,}ئ`HHH@@PHv &khAI^Y)g_nz RN(0P7WY*ylҫggU))ii"Odddgsd6mN jFO͖&*I-GFã~𙘘ht>ֆL|<Xxy;WIqEEee""ii٧O7n WuuFirsi׮qrVmۊoߦM68mƉZFL!K/*sg:.QD$%܋59n3^"[,FzX6&rt'Ndd`~Haaiiqih]LԩMPvBCD-b1N "rT'oWSUO'wѱZ Xhb wl{LvUR'MI-Λ3Kfffd4nh,Z>-`vv"Ү]Rg&guԶmHH64TZ#u\MغUQ鶇^xa׬1:@sKhV|_8hyb{⩧2C6nѹ<%%"))'O$'gd:%8*/H^^ڷԩ]_}|DR85W8`)瞛mwҥhmt>_"Qpi"yyg Ugɍ2ڷgC珺_NS Y,ZRPT^S$gǏ7:'7@رSN9~q~HEEUUU)@kvfÎ Z!!;v ҡCpp6"fl@sv%Yy'|mOe(d; XhUڡn~1-VI4I&IHҀG8!xdrHQQiiI)<{{;;;;`۴ رcGm;t`?azJLHЫmOW}vҤh?~Z;>@2ȴB>& @S]][[]8*5q/F0/'hv$١CXH۶" h=oyfKܷ|9,s/;LL̛'o&\ZkEҲO>;*1ĉdS23EVf3:-@"ҥK:5n Z:xyyx@B5yKD˗/7:WhV:[oo{R#z֛oT=O(WUUV$'{շxɓwIذ\,bE#ӊBBLڼmßxBRF}׍7JWD.XٴDRS3332D㓓9rɤ$ܳдfҸav"ѝ:u,ո  0:%Cݦ>6n>ؤGlncUpAsì|}7׷|AGS{ir^wN$))-IcDRR)+0:%777WWE#"^vpwp0:% IMM^ݰAV9G-~ѹ( X8/V+)2]ezCkpl+u{yyEEg'Yǟ8qHJJzzZjYF@ScggX,";v ҭ[XXDHn:ED]@˥fwrfW}~ۑ<{SSP9Oѱ\w]$CeޣEN6:RNeggf:txbǏ=*[TTP`tJ4>>~~"=zGFѥHډ(eyEz"ixyr,Oi,b(jU||~WHi套 :v4:?ff9yL9pر#GDJJʌN 줬KvԹ)j\Uv:||@/8vl߾ޥF?dʸncƨ^]+ret.\}}CCCȱcN8!tII"UUF{{;;;;.]ڷl1GΝvqssvvq1:%B(+BzꫦkkZ XM+woIX){eJct._mm}}]H||r"= $RWW___otJ2M&Y$<<$C޽##44s5OJ裓Z X7A۷Mz9{z̐H|3E'ERR(Zɤ$ҾH]DE%jtJ@vNjkΜa>;v \Zu?ťUsMr:wL[GG~t<~<1QF)ԩmېbVn"z5<=ݍN PSW7lM1w{='!\堀,Zhf CnEirީWYV rHjjJȾ}"qqǎQߊY}DFFG31 h^0^RS?s1sӗha@E X}[\xAzzU|ut z0:srDv?xPd#GD˫*+NbV~QQ=z:;;;oXB˦(`P2ݹS)ԴiF SP/ѣ"{$$:$W\\Tdt:b"]v~ճg.]88Ԩ>)I;ѵ?>yr 4}Z%]/{ǡO=OYvvFZƥDvNH8|X$3377;t ҳgDDTH~]v.ҥK;LJLFZի3RU<0[φG XTZ[,U/*pN)!OKu^^FZCOLٵ+>cNLMٴٌN 9pwwuuu߿k=Dѣwo6mNRH|X_/if#v}yf|e (`4;1>\ϖ՚wޑR\@k%{w|"{9rHEEUUUD{4(:wo77WWxźP*ߗ_27OZT]G [6؂);/$K%Kn:$x=G"= }{\"O@kvfΝCC;v80:gO^t3:%J|. Rm:qûeL\X;&&V'cO$מ< U#H_9]\DVf%%?.c$& Yo߮]E ޽woР6mNp$^ 7si #R>]n]et<pPh"V+6fj%I] h򊋋DMH8tpHQQYYi 8{=E ѣo߳->i++IůR.'_[kt<pP0Ȋ󇅇޴(ߖQ`s-ICCC*rPRRbȶm+vZkmtJ,EwnD ٳo_mCCERJ)pnJ|z*뮉+F/.EvxeksMr:wL[GG-AnnQQAȎ8 sg\"UUFǧէȠAѽ{ha $QWWٻtEI^ϧ qγkfUNLϗWvdt.9ZmVǏ=*ew$'gd:d+8Wfl޽saz_K;ubRpNsBGgy|{ӣ+UWgt<[6؂);/$#s7sYYYEEEȮ] l޼o"EEeeF[dȐ^<{}E\]N4oj%'zqDŽ'ݸ\࿣XRǯ{Eެo%vnnF,ؽ{wٻȑMb4N 6w}'ehVIh-J,k#TP`t<p,?i# jw{Oj=;:\@sR[[WW[+wobb\ȦM{%rt~~nUHH``ppc!_?~zqp7:l yHmG4):xf~5GnhcW_UwɏnI-UWTTX(oΝ";w?|>_yB%+1qUcr~ޓzĉF={ݻwN9mٯg.X,M\G/lArO~GuVcВQSZkM~ nE WRkEFBdփٴi]D**Nhi,]8hP={=`С"FU/Z*uL|?Xs(63gbx|eeF%Z?'ܕ׿Gzz1!}3:eflذ{֭"9/blVl2"{GFv&2f̀Ch^-K32L|9kք h5-6u''iϝ+uW} N򸽽ĉtuvܲE$>>%qtgaaڅ\|A]$ҭ[N;(S1ߨg3ŋVuuwyۃ?*(0:/5@?92^' {Œ4Vf8phBwo&et:`?1c:T]Efb1:DKdKgϞtW~G-2: ,o_ms2|R^;9s|!&#Չۗxvm&WTTXht:/77WW{_dĈ}qqqrrv6:4⧢VCFYû񙘙it.2 XX}[\xAѶzyOJ}{sFݻwN͛ؽ[tAdذ=5_AD<<<=NKTd]Ilʃ<0!,߬>k\SkДPVLrwwmG7OMOubZJ-[߽[d={v1:Ml2"EEu.2nܠA]$gt:`oK\n%X20F)m86}ZE|^$}sF(,,--)={oٺ{EN@8G$::,,"Bd„!CFi>8m[\+JK 7CMܽG #QMyxj}H$_*YY"ڵm޽G>,bl6hti>,LK.h(۶hTWq11 ,I[o;˳Ɋ&nV^ rBR|W%8\%}M"qqIIGhF""ᡡ:L0x": ȳK?a{;'Obcp!PMF>2-okM:R|u&]5:SZj֟OI9~ə% 'N:tȳK5n8ϹˎEv\| x"A7|^&psӍK l+rGP%i? @d„BV^QQ"J)ҩI ͕i2]͚5}.5:/<;y.q:oJDx@ϗi2822'\\m[ㄫd&\кoԶȤIÆ)ҭЊP3%+wgle{X'?W/*kݺ 8(\BZ"5A͏gӇf%L$ҌA 7:VkmTM*9wdeēOqYYK Xyƍ"''=J ~)d%ҭ[N; 8OVw⒝-drIO?tX9&ȴEaa֧tWr~[8\W\\T$jՖ-7ݛG ;:k'2ucNJDDo߱ѩsl<.(BM]Fu׼$$ ߃8gb9S_-HѹsTdccEv<|AfZNZ.]ڷ k,dsvb"s"^kmgorr;|O6:֯߷ãnk{I=V\TQQUUU%~]۶۷cH}}CCCrEڴ  4:רj :pꗇ>}PfB a1VѨQz^BAw2TWVW_sΝ"55uuuuFRJ)uSd.5Jt/:_ ~w۽X,_߻`_.P(F߬_ٽ{ +Zk?rDdɒ^Vt珽Ȉ} $2a!Ç8::888mسgn4p`7,D/-2k^%G_]j\_qةS))"?X6:q\\\]E&M6lHC{Ol6{J+/=§z B HLrwwy&D_zIW_mt..(Yr˖9pرS4]޾"S1fH^QQ"N@v!C,ZU/$)iI/W 3JKE/߼yz={> vBCE.|E:tnT@w<{w?hFNcEmm}pYbۧZn.r?N$&fXO?]t",4gcde抴k,ltJV*jSQb]<֍ X1f?b/dG/0\qfΝqqtUZZQQ^nt:l6-#0@daFqrrppr2:Z %ɳii&FcQ[u1}ZduV9y SD)qȷm~vY Z^_o%aC}Q}iU'ID11:s^}~P?im?ܯmG\渄8U_1|>pwaբRNJ*#ʧWvRڥku}GŁʻ*.|޾Ԛ+W=U`o_W]}ʪkYVjeoWX[XLڙAAmڈ(o֡/X'#G&^RnFN` _Z0o_qQOHEzVСѹjl6[سGdŊ-[6n6:-sjZ;UUy,t*7xq\SqBMg\TxUS3K x}[kjpu;;AJx XMCIJGGs/-(({ѱ࢒k8:]Tb_ѱҏ+pt,YXGҤJ>p pr*i_VťhEz7NN5ug}\32D ݻ_?K#Fjx 0 YGeꗒ2p]Íhx@X5K [(F䌌SD.\f ӧssN@`kn <6TEW Γ++xMpY^U5+]]sW*yVUL ?jW&G5ց~K<[[_>5:%ץ˲)NN _*y9?..%VE:9>PIeKQZS\]KW\SUd.Ky"w޻HbF拯z,.nҚ ߏz0:u% MYRiN4|_^kt.?)/駍׬ٽ;!!t\XѦ5sBgJ;?\Q}WVVexǹ8w{Bee۟}FVT񩬨yד : X-x-/ϿZ^-VS9ŧҟ˾8ܪ\]2 /.i?![Kյ߲U˫3^ut49%СMvD{ҫZ&o6 yH^V7o6H׾ˇ 3:ubww]Dj=;:\/)Vmr="˗oڴaK Z&1|Jz[Zx[Yoʀў**"t<ҿ>hZ[sY~T'?/5S=4S遹Ezx+ݽw+z\åh^ju'}6OJѝ_oY.jM͕|3[3:ubW9aP}I\et.srDn͚EN4:Nݩ5v.OTT|{ʣ$2`GYYh[|SJJwn{%ee,rϜHez#`x~)>K&k'2²>+XMڪw3}{zfxg}SG;/ӳtq|twwFH\\\]En//ѱ Fy6Q3LRO=q,. BJZ_CN'K'&ښ+lٸQdӦ}vٴٌN@#nGoxwg< nw\?cm.-uϵKF묖X⡀r4Uj-V*|)kqH^t]_G^U%T}jt4f˯U_t}ΙF¹eZ&M.okLy,Σم1%_|!r {9|X6n\ZT4ڼޔ`|ͿMX^}%%S@Wx_>BY-ChM謁1eﶷO3JZ{2+do9)Ǯ˫W*)V>Po hQ,E]:]zѝ{.hϿ{͕-Qʹٔlo.j"sZ'^PpsgYOƟMN{l9%o;]g%xM~Yz*w\O{[sT'o` jt@F shܸ/ ޘ:Uf=/K6FBfl6Hl޽;vXѸ`]]}}}͍NݩaJʂW*.nEu~K:DQQ1]? XTVC3S=GJ%_u|fyFvvGSL=S_+'M_md_̚X д)R"W|8&Ʋ1[>lWRl;;!%&Fn Zkbp3p]_~q$j+##''+K䫯bb.={4~NMM;YYP) "܂vek\;G;44V wK ܾczЈF^@eޣRӵ+lS[)-0i+R.ωI;T8"#N{DRVe{C9{NO]􉏏mmdqZn+Pޔ&\㘏GiѶ[GGszn-} +@Sd1m\IOYL߬_ٽ{ [RRzɓ"~lHnnQQAѩii)f ?kgQQW; hAnvW꺺?&7YffY-qZ&`5,u2Τe'ǝ/7'-U-0p~=wʇ_-)n6mtTOVUHIEb|6=jt,D?9õ8AnOl__suYx]4:|367%lA[Xޯô.o皗krҀd?+"rR6>ukR}hDz2ĩdg^=""OWmybo}09OvΚUQT~_ 1//Cjss{'FHAN쮶Z &˜L:%NQbV=5%?''xS*0|HyyFyki[KK~w(,8?AOQ˄s&KݡnϷon.Z฼cG2uvK^옚:pE 58(_77s6{s]U͚uq+@EYqdZoo@Po"H.3F6:ZEfKEJKˍN8ϩ2? &7k.?evKoh G&`#eV wKU;*y[~GgΉ'~<}"(d[Y]]~M[}3/~; dO}&k7z[hVy'L,i}[ʕ; KyyUUe߯Ybȁǎ%$ ߘ:ԝZL3;ݗ=6ҷ]eQNENdos>tA[Г=de]wh`OʒYݷk{<'((c iI''v6ۺLFXGN {`9_f˼Mw 1<muo..FlTWq11NU|?#E,@re\\a1c2v==΅e߾x ׭[쒃N!Ձ=rrWF-5~"]mt|Q3=;DEH It=~YXEy1(hORhXɝՏkH3:?*rg7j^={?x[]wcshhSo0s6=$FRcc+(+'Jc{*1͜o| I0kkE~UDIH8tT>n3JJ"\6~=+:eeJ -͵Z9 L楟Zf <%.c-K6>.cg3`Z8`ssv6:DM.YZ~7# h^(`ZZL%{Ly53sF>^]_VEw)x~Vs?WbN㳵~_cmn!!@>>R_l;/6ψs˳;h>}*Wߩ6ootfK֪r^y7wcM>}RV3X"~.. &(2C2suYxÆիEo?th>S@g4jm99_z"tlVK"df_sJMvUDDN}! JO,tHc%>~cC] YzxpʷϕTft~_S7.!nެtEn3Ǯ]۾i;w=Tl&#`a}Z>;9/fJӪd gΜ-'f:al2@lS- /MzH>FB된q_,_"FDZ~嵺wm+{-ߘ9ةsr].cL:L m`VKwKiY^l'2RDD.1:skМ>PWMå/\ zݻ_ K9YR:GG~[Γzz>~ߍ8p̕miZuw{g*cZM9U*cG۝:Qn38L5J֕*uӧK 6>6lQ$o Xf-暸Yy&jeh<+>Rjt.l"}|?de 3u< +^}>MO'llF_ZXb:R&`}skLjy4{~?5 &kR[fJ]7wÙ_m[Ws Z64Q]8fٮ]&O'OY߱vүGv;W.0mj۶@U`V/۟-_Km(^j򧟜wWt\d:G.$ Xfi)97,?@%r9o83jݻoYl˖E.W|٭OwiQCwu}ii%tknV Qh-3Zj%nn(`5% `vaty[^ѭMǕyMzzQyzίE]fdUƛ wNjx:M#@:VTD&YYFyK?nR.HowBӧ+;P43+W|5wRJ/dtl啕"_|rO?9rDRѩ367%law 5xh]=ujGJVXͣ:@颀V wKksKV<7o#3车RS[moe\zç>_MZZ[,7=UPhn3:ZÇOL꫘KE*+NMjSwj0[N(Gfc뾺:^BritPﻫod;&cZ=:Rd7K2-okRgBA k'N4:ZKcc׮{w4:4=()鷿#RN{ð}W{_U]-ID)f4*͜u"ڷ).!~Cq gnw㔷2عPQ&H2W|&>%&h_ߖ|wvY^50IBCê*S>={w `@S/<&eմ#VUȕ+I\hҲOe/-**(0:ϩ{KmmtLКaCJMMlv^"d?D Պ Ҩä6^{x:iˤ (8Umۄ)Y韷m[*GG@STiXwke S~U0WW܆ Y>kr.\R]+~^hJ(`U  DFM@իelFBˢZ_{֭"˗oڴqjYF O01%laz7þodLjE-+.>a?Oi*ʲ.06v}m!cegζrs𰔝>>["v'N5$|HsFfŦMjoId9 ~)ӫU+`ǷJ;o2YzȌ}r&Z-ϯ5HZ=ȴECvemt.,UU"|"))F ϧ2z>ĉq=F|= -w55|+CN 8(^hjLCZ)`;;((~3m:uG#۷?P]+Ս O3:?%ɂg==|渁AA_"=%;BPd3x%J~Yκ7?r;k Z' XCL藿{d[ީ[PIo6JJJKKMUiiyyyѩeiknFynMZ蜋t{ĉ>{x@*yrY4ÍŬ%#*?97&}V ۲됵mۍwčdhg&^@kS2$؈ֿd}yU?|mYoCPD'.$ X jej_w\?To.ܰٴDV޶m&:3٪Or3Nw~!%"NQuu""rP9^pz]Үn NK;ZƉnn1MT;-رg% do9/l }yjjʣoWeYy$ݧvFEB  b,nw߭ =7|IH\hKKE>tEDRR22ҌNe]%. OKO8ѣ!jIțEERL &`>R^!7$m׼9#G%Cvk^<@eDs_.1:/+TۗR˃b_zHN\|_RѹDْf(3N٪y۵\0O+_8/G+# R O=%1 O= 刋KN>vL/W'*Ssfol8P$ybLseZm6MduD6nܳg3?gꨮYZw|yfEw1)i}C W(̀ ~έ~=L[ 2̬ ;;FFJ=<4%S'F{e4-y<2Q.#,б:sgfQݾ?U]3,gkwr8Ip.P1ɳg;8Tu (|[Q?qFBPRR^^V&`ҥ  iS;955}D125uʣ?6x/ep>QU;s =r}>6<<|u#B ͙7ߜpdf^^@?dZZ]]~ot< Xd}<<cZLޒtFBpةS))"~t"UUF?.2 FNrᤤ?vitVF]ٲfktJu  ZSs7l$ך&꟔=Kmץ˖KDx8,MՁg'}4dsphfSqQ3(`+JJԍ^-7rFBvf)w޺Udٲ Dl6m652KN[^YY_|kGnyc|5YdtRgG@mowɢÇos17%&~sŶ-~釳##jW϶7:/$Poq0lElsʬ'}|`RJ)e߃Y5ȴER'6n(ZfGG [eeuuUg-_"G8dt*NۏVWg^ϒN815␾AIIm{VUIlRS+7.tN2N{咬ذaΝ7>>.]j|6P`]xzdͶT6"ZvG8*:PPбZLy.7+廼xêW?*IᦇnoZS_}ȋ/~SyvXy]o}w˖ݹ.{P޹UUFp)dͶ6uߎschryNF<~|y)Y.kbIzTӯ/;{DCdը?lڸ- B Vs-! mdft.4o7߿{ȫ~ w{;45nڲmoj䩧JNv r `tN}ۂG^yޙط7jU#Kָ)e.LzBt'S3Ϥ=_i׮F?ּxEQ(n}l2m[syjhhhZEjժ%KD~+DV< R_?Q_vxرye?5m~lڡQNOV7.N<[Q7]bǎW>DYYYFre.)]ltsMOZ~8#zc5]dt.~D/-ҷ'k͛e̐JF)..//-yc;޿T rpgm EԴ5>b!!,./Ǝ];n[U Uﲳ3:=#.--}!7m<[DllFM_F0Fywv;9SG痽p\ց2}Qԩ35S=t)+%%"/| sg|FК,3mZ]epukj|^ Xh{|t}`2G' X̀F4`'rzyݕu7ٝ|;/$MzF7^ K1 Otur˺:hz/~ '`Ivwڥ[>yDz вQVbUmYW\!t]xl'y\h^NLOy?ӧsssrN50Yf,}= W/g z+ۋ &?l/(u:_rO/ v͚k7|.۶M)et\N鼪*rr:>'ڴ[6:zf%ϩ!࡝;h(`@ #OrY7^"3zjl"˗oڴaȺuvmbt*-ٙ%*m74xLgkl3Ou^5Cuo1Ka_<-3sUsOlmsyyw L9ŵ==sJO|]?y;;)s:ׯ'͵-פ wϥyy27ѩM.Uvu|!h ?Z",MӶ\wR&ֻJ]7q+VмA<0+K.˫j%_}%]~*O>YdBcN:qTZ"sF}?>lZ?{ĚT_\L򰈈8H"k-WS%44oO>c~~,"3:]q:7Wu3Wjmtn5ͪK,*V&xxXZ ]fi/D)n3GnHvqqזݙxiPСQqҋhܦ:uNw SzȌwW?˫]c7_}RJ%yh!b;t!rO +&ѹvhӌbP\,u/@MPD~[*g}| M}KUf> 횬ԭCP^4zlHNxjJa_=ydg#@ud|"DBqRTlCԫge^=#<#}|+| PMZ>]QnH)^p:ۺ56(>>% :<ϋ_dp;+n;m +':HcsPB|CLC':\]z>hlsfehZ3mgBKnWUGnp/ްWyy\V^O aĹԽRkUeeM6o2Yn]_u@YZ5{Tz# A=5 F 1"W7o}kUp _P uT ت =)Bː!-ã~R(h$; ^?l$IDAT~Jyhkzk6Njf(ߋKkާ߿zbiwllӰc[sA۶7oIp0?0,nPRT/"yY8Ce :+K6/VQQƋ2/:A񣻶?Vu;Ż@UIhRy\ꎚ#,x#5R̨(j@k|X^e P ,_jr삂<:՗?&N?%,xGsS{R?U܊FψrA[NTh螼3j۷/SooMjܸh[٢Rj{a%+`;b3BrKc \^:u.uH-I\ޠAo]Vw&|ni/$b޵'韕ػmFmrrde&,z1OqF:so||djykeqh@,%$*5/'%%&-]nݪUD,uT aDw#'bSN7cxin}J6uPg.6O5vb;vrvյ~GF{ޱ^5V{֝9,n*'~:umD}5nCaa,:ԽlP{%4RP0Go#~+*ZmJQ ~ +v^rk–-i` 33Aqv~]>m|Z-uTm9s8ѷnٲ~=r\RW@u{v0{Gӯ3Yn7S RAuˉ ו.*;ʰsS[&i__okwI_bXHkXϣ/ʿ0hn6ȷd 9w:e9%lu:uJͯ}|D c #hd`ơ$$ BB/D9rE qAAQzڼ&\UT$#ɮb 1}^P}[ګS|bDY{3ΑU*":LD, +o:K] -byu4+.n~ɤFO+ O?wԝ5I+ԕ}(%\m[Q$S*ifzN:- `HdϺk l)~GCvOzjrno߸ҥx*7TLsg V^t 3HD=np _siKُ˕eSx.=uv^g`X@DL^^: E oX^.,Dz]SOMJ UMѰM̋!.U :hkԉLd7++?̨r)JԝYE]C9WS952ߓOfFٷh2/uvd'.,ѠiFGb٬V7lX(55;;3S*îzwU^AUgy־_NMItJ&&FjfGo}0|i~~uv,ȥeeYqv&l,˫R//zc 带"&9Bg&$yWs/ o+l- w|NDDtYXk2P]+hԬY!yudЄ{ XɾG>| :p85CB/ JKH qQtxU7E-E-juR[I*͠TSGwLYe9CἼƿ[VHˈ F5LVe.ɴ~ka0X~55je3#X<2_T8kM99?lRFyVEG)mjhB-+kR/fF {msEH=Hh˪3PλwKw-/(eaCRPp_ԖU"~ZVZylO8,/8ds,xh{\muVR_ 'g}TQ"Wm"u `#[_cݡCo5 $Un%r8\.S* ւLw{<^~=z<1RTMVihnTdvOשskzi:u+|\ 1.FZXRgk/T**xG"IiӉW졽h\.Ξvܵk"G/i6oZay>*v)*Rתp&*RwO#sjM."aΈۦ仉0P=a .9xWmC'ŜmU&URwAt3'NmrDsj7yCtq:>B>wx{<5PQƴ\6ν#̗ɲ+lurCBN}~8>ŽL3 .).+*YDҲ2a [",,6s)^-ӕ4 *;f0l34\/ќ70RcW'yrnj=cve-Řԝc1F4i֐_KJ"A|^-p:\&.3O,Yv-ͥW޽[9ph3g cy}?U1rx k[T R1V޶b5*`HTM[W=Q5O[zQQWB_- R\\- +W2^Ui4E*Wt^^.4M*7J#Xv>&:R?Kՙн(*uIuToCmE,-rdwKGG/-gini۱Ix݀2{WNqM艪EWWUʁvo_S "/DsQ$ZnϞۉNr@JDIQ!x0IE*tv4VedHNlq4S(3va#,.!tfddIID^P$gp ; Eǖ-Sor1Ҳ"sJVMo`+6}^ Y&J<1&8NO.GhZn/!)xSݜxd7 Ý9d2;ĤCWw+~F_[TG(?ǘ T/r%& `C_O.r.uR@vѪU۷ IIRWd叉9~+DZEuxy<ԲsP]\r* +3^-wnNKܮxS D4-dKII"E..s?%]ϳ#%3*ΗWWUӫzNQ0){{@B}+#+qއk|l~+O[ WT'GOژ6+**$Nv}3;b Vj07튏/-N=2x/{j諯bc׮%JIȐ y;uD}S:x<·r$ĉ1֏-f @m*rP*^(XuHHV˂!!]p~v%٠%%nKK 9LоtJ}=1gZ:Y/z̓lhb$yt=CڳR@MMY.ǽPzzzl[m]nyH^NG+L'9urɁW$uH>)vW^f]P X8wȇAu H>RWAUQQaD}OSP/uOʙtνw,)<qLOR@begDK~%Sֲ4DHLk6 ǕD$f_xӨEK4#].&bXGJvN )K/NM@D="":DDDK]-mA~^S꒪ &2rV3/%%<nJʑC^'V^onmlU8 ;zl 9YzF_H <83ۡ_9H XΝqq%Qj}A HUCYX^Ng=QAAiiqUp?yMqE+][<6E۟1uPY}m,JզZNdysM:aoEEH_>,- bOeuQ ~0l0Dӱ#{C,/oB\ҁJJƲ2Ki*2~7T=ys_G: n᜔J6ipki%ytGI<HO@_gH)F2L,u+{yݤ1i^DD4H\Rwǃ++ iP^ha%l [,Y]xGݦPؤՖk<כV[!,j {a"zhHDw{*gu3.~vm дmsm92х>>RwBc=Y1!m~bcYad=\}C7Mm0hwmƍF\{7\ ܢV&2fY*Ή{!8,u?acϷȴZKjӖ-Zmzje UɊ: a=|~j4~Tdґ:o@րl-_T%+XNW1Ng[R+dN6 1N )D +XT)b17 L/4w_Oy~/JNs/{EGz'|QTTV!A-ղSRtzG^=P] KƎMo xb'n m/w[C4n RwAՐK?DfjJ]7\ubL[6CVg"p]/\*zs)" &1 ""PocEDwزTtUlS!o{^^`.]j1.O9LHQZ,`RwtZoG rgj}ŋ ۷{?_]P5deed-[f p8RW {R"xwol`|1*_Lsl6>rw۶-BɫЭÖt u]<2_K.a[dP>Vj4Y^@D =rws50c} (޿bdkXi^V(L;-Zk4KZq A3=ki:z&)5IQܞ}. &Ήhml:TyKj&6g:PXZv]蔲_86%% _3ƇZDB^).g3Փ'LS4yhOQI7&˙3;4~ha4΋9ٓ=}e=͛;rpTb],8R&+r*#_ߒYYe=+OדV EkfJ[&LdEE~OdWTm l6 @U_!cZFcNg]պDO#W\5L$i M}gh(ͩ k%l0Fhy] EEM[[Rraゃ~nUPRWL&u/T B?a/|aOlj 0:ʣ~<]3QpڢXPko|MiFIUÕ+7o&&}ݖ-DvK]wOv@ž?lk\uY,Jv",aLLn99;F}yy[έSJƤ>OcW`|"`0Rz i s(c]DMs]sbm_հ]kpO ߟJ;Z,A[}2}*l6a [BR%@g78妥֗MM4"Z"jeIhl >}-F ׸dD Rݣ6*Eq(}似ڕxok{®e x_uچ1#z<}SϝlzG^] 3x֚T1Blfmv"rE2 dGJlZgצE.$5o?1C.]~=!hժm*D >,A JK_t349Dk4ѹ>7hm6l@M"eI;o0i}rg wļRVGxDEz>-l;4 @m^(cdR2h]Jf2NM$94H6[x?jjZ _hgyX|uV CS&/z Ϳ?bQ>/KGbKD?Bn)ޖoWꊋjeMD|yT'P4_#""%m$bB/!s"GAD4^j|s:'HOGn`b+O=UPɇHj(w5Ĩ>`_~{ֲz*30f ߨ4+|5~޽i3__ԉ%k ]#f5\يi_OtnpL-^ӪIq/Y|(,fzjG)3ϴ]'=I7$kЀD?GUg*}*{yηz}bDt҉ȟV1SQu/M/MƮlyў)l6onfӟhn3fTi. UxrtRqLR;YXnVݮR69Sl{Jʡs]vRY a"",wm=ODDy-oO(D_Ω/+Fx͔7=>z"lERy 9 K7g?㞫۶/TRwΜveܹs"QW5C/G:ǔtI Wr5k&{\Aky_y֧t)>qVيCBx/#"bWJ3U*c\||h7 caDDU[Y""JD:.!uMͦ9 Q?pƩ^uFunKk6۽HwSBU8E RS?' T~L޴w5rv忚-_RwÿRS(\7>33gF{mVRwM6wT*e/RCy^H{}:A28;&wf@kl)nܺ|IO RwNz%kw޲soL Ք&BG)w8&yˍsﱱlRQ8=+u10VHIzG6w /۪> R?+p H=ʂ?&QkcTϴGSߤ䩍GguJz^K ޚpasNi5o.~rV%D6GztXd aK/e 蝷ފX¼<: `@q4VFZt۷VtWO.ɓW\@O{lۆ+SJNάgf#Z}c_;^O偙HID#(u$/*~FyNt*=KE jө:\HsTg?Z:7fG.:G˥iڠtVT4w#.zrۭ^rɎ ϳNNwL8іP W\nltw]ᮗr 7NBԝ-^uk\rΗ V1gW95ϙPټ)[& 7o{:;d$bMXSJx"Q9h=;YΏOa6*+e=߭߷4SgjI{Wf77bo>as_KST(>6ԝJ^̐V*i0N -[ w&3z+lca+0^@ c'_.i$t u_wdOB^ _1[/3plvuS*"Jld鈈(, ;9'3( sDLMDC O {UE8…6EQL^$r? Pn򼢭ۭ(}hv+;nHM[n*N.(ݲ4(*se v=Y]a :CW-X㑿$[,$ YQS>zrkbu"U_vuS~yTRAp\\)[ yF-PqLD)b(\Ap,rvCF&PW\{v̽].w(_3i2+=ܓ)z:W垯i>hn\uQ cDD4uişGsf$i/FU(>|n3J>%8"%k)u ,4 4()Qʛ+ǻ\uw"M7]`cc_v<82H) M]8(3=*x;}ft,.mT1#y>3qNnY 5ҷުW1??a ݇ %~SJ:u*.% ^~>'L10ƚ?Dj+z<=>Ğ~[v=Pf͒~Ft4o! PE9ς`qT*jF Eۆ +rRuDRkyzCzP/vh1`VEDDiw24JˬL9BOq6Je7dBB "^rw ׿ڲ-X߬_O.Ѕu% r'|{>rݏ_yMis9n)龶 34ZKDa" Yuw~57nÿ"اB^PBQ+"zZCw&ЌQRثfvN37놨gݓhhxJKDC藖v3 cl/msOĜ-'%+:WS ^篪 {xQLFM$'YК+|Ұ.| IyG_Ν9`1U>XPm~ZJWiE 3g*֮ݵk ^Tgejç\tfgEH]&-m>OxoO4nŋiEY2릤 >hͳ  ~[ xA?,FqdԆӖHQ~|\sno!VBn_ߎw'cO*L˧e?CD X=%Dէ>\G.8'ɴ.PyPae"DσD cB +lx/eiJo+'"ŒEޯLFDI]kx6zS耊4F]4.숸dAFDE]tQQfV{gZ}ud-DD5^ g ǴΚFG{}a>1s=ݺ(sŋׯ]{֭(kv>|܀}7ůI 5/5J9zZgLAAugE7AeK]癑YIC?XV&JKv+Sn_-$ /iw7.Ժ!S7z^M -yL aaWz.:b:(嚫Ty]:zǣ ߽327\~O{E$Lk!a۵TcU^RwHXP8pBi3A~{7 @/'%%&Zm/` za1q64Z86)k;yJZjVFÇϻ tFӼy֯-:ԝpoa B$B$gF{U^<Ő`YU!C}uRWJάEy}h)Qrg fxݑ6+ 7o OJ^9(88cAޭ-Xo:RVOgD |Da:0maaF/+,icj ]9ރZAs"z[:?")u'cǦőϫ۶l ~TYop9bڵ䤦ԷI@ 7oZ};jpL<09HwJU[[Y;]kIm_i{ɚּԧbb./٨MK Ll+Nd=#\W-ectpϽuFcޮ٥Ge[EY2[qޖR򲲶ӛRmeeэGI[^^ !Ow㹴5~~sO ]eEQ{AF˥ry9uٚoI!XQ^ԥA賡WTx4/ݿ=Nh @|Ǹqi0 eGJp` Nv{=MMåi6x|ƍy<v.&cPɓQ7gRwvSZQ@]'5Gt IO?:u^K|q73mob fy""ցu.o J_7+g+"tOoKKʍ.=J%uelh JYggSuŕ*R"CDt"JTC/H}V@DD-HOu5a e>a +XVCtU5 `@;9a\aqSD-^|.)ܺI7s՟>UXl͛3_xdy߳/+F*U,uUEOg uޔN]:ߺuv>̨K+ߺ֦aC;9JRI W~xuL7}))e|Vԕ5bO3e2G>YƾnȠ ))R+ٝخ(MngWQ `L. _~pN࿑Pȣ\iSi`Ӌ#r]/Nڷv:ũTZdK xF6Ѿhf25jr,fZFF7wGo*]aS^Hq!!Rw+m`p0YMooF|?JWnnQQAҥ֭^Md96UnM=`2wnXkm坑!u] d yMOj곶G,3޿YPx?]u132b>qWUU4`?,{nRnKv Rwm؂$s… +Xjd]p}OdlVU4xjK?.yfG.?vY{Pjj[۞NO?d\'5ޠhlZ^cb$[%dCKPݱG~N]gY>Gt?D)t60TWXrQsJ=O/??y.眿N/cᐺNa $Sz{q_x ]S**F>\h4+*G&ӓ3yf\ÝƟ161:I]UoYw^ҷe'kn-J/EDK9s7-R֕G~EI6ʘ4,J ̋snh䵥",uwys&>SGdb#Fzr{觟<6O&L`l|/ `})s[|<̙RUQaZ,xURb4I]&BE)w8&=ԩWǓ';=Ӿ~jɒZQQۤ33nݩVV\Ѝj9MF #I}pBp]sty3Cz{,+S}Lu9m6XB6͎}NZyURwSP{5H֣{f?=plFgׯ^M_\\T$u;1\/+[pطr ^?'lf9os>z(sWGL=ӧn (-@JlG&ӤLqA&_Qnt:[WH =Yo~qnS]=e67 dALYff23A_VgkRt>C_7~Ŭ>: u#~/7iSOI֭G8@tիXj{Lh|y3wxu} +|y1Oϱ4;ezx}ߔj/U@X) EѯP=IIOoZCuT-C6ԝP&/}zO5&MRIȥcϺk l)Yb#u?G^x g?.u Y)ASd]'OzNhι\Rw dVvڬΑ-?o{#;'⇅\lt=(ɺu o G#u T9W,wo,XOÄE@͡P95*,lS5kC;鶫ԝU S4cNfxRުM Xjxd>D- EC*JJƲ2ڰaZ"r:+|J5=>uǎEb :mf9oNuB]E**-.(sPNYoGF:E ~(@Kfs;C*r *_7Q%ԵP]a Bo@m Mg(B} [ܟ1}݂eۃ-(8L_rN׭[VdRwelV+__D,u@r*y>_}wzb$n >4GKwƻ|ĸ=7f$k뢣Ŏ@7hG155U%y]ny>Ɛrre#"\J] pf+x^Xȶ}49篿cn:j `˹L&ǎOdyZH]po\nM|yWRWn-Z4([X?yr|(>ip)'+ȽE=5jann{jNsss-u z|GE%o'*yTJ pw _#ϖSP]k:Ƚh'~{Rիo%JM̔ b1]c^FCt,P5n;摏рD{Ξ+7n\}}^܉đ/'.V\O^>g]KCnו+Ɏ)MDDkh(]RYk<^:*/ݼY.0ўq ?K/DD*6nI, uB`2P=+&9=\^rgnrrY\`+fh`6͓r넒ӹhΖ:j `#s1d?S? +WnHH ڴ={au3=`B݌qF]p;@ΛR ,*jJYX!WF%?o.oh-u7@UGcg;@u:WK|U7'/0NsFcQ?%.'t&W=<=o^L91fJ5w {Ԅ&Ңnݤ{+++??7oߴsv[hr_=~)4޷-~t{.ݑ22=*n0\9Jֈ"- >=R#/T^V̵%cl/;ƈp}Ik3|^Q|ruv4 ɷ?Z@PQi?P+[1EIqOZ ᫩9e  hٲ ~pNj!O^8GyC_E:(m)P KLׯ N/1lXXO{ÝKη .~xT$>QPj{&S[6_7C_ydK.ű!-[v77X@-fNBUd<1p:].hŊׯ'2+***]MФyyDד'ՙ^ʎ_~°ES 6VytvqMLL|7"e``b[;o{heޣ.Fꀵ<8Ko7VE-*֫s8Ny5Be,/W{u\.TԅPԭK?x*kNF̺$333mCgj&  `BKj2G_PR9xUBB{㷭Wں56(==//;[*ڥE&E]ukO9EYбnQLSL{bBAA 1XޱT(^I~6qrh荹z9<1G # @T|t8N>j4&3|7ѯMugьe1?sf;f/$%uT?Hd<:apۼС{^MN~]ڥ˪NL^JmUPi;kj:\]:v)]\-i,jzYJx!!7c2V|R/Q)*u:y_2 {hRi9v;5=h5l:VS>m>\>$…! dHj;⊊ڵhS^tsNv`uh=Эڶ9s؎t,u=GWjE(#vaijP*cҿLQ2F](iP)0PO bo].={UE`P?Z XUHd y/Yg2.) aV+uFD(GZ x= v;~f>1ϳa 5ieH//8ugbԋW*{#))==5hݺ={mv`ud磣ܹ?ح[RwSl#5֔ݑZ]bZ0嵛!!)Q9%%1KıYpON5/LA#|ҍFGvzHDD u-Tl+j&ْQ#FT^}]Pa PO_}ߧK~}{()1ʈVܺ_<Qxل~B(>4sLnCNHGcox|&{nNmwwQttUT&\L=yskpڲEO=_&'\gK6^ϣ&ψ m>noh5@R)x~Y;GE>|5@ 9eS M& Kf{򗔋<C6H}nP+MapooSg+ߟ{mc {0PG8rqޯx?XK}{cǎc$y3)IM]| m޼C_I]Օl*MPgLYV+4!!up^jƌ[,((K!w|``Q%e(ϘTzŸ{|+*|w能 {(DpN/F(Qr@I] "SoMPyRg@Ձ,0x˂l,Y7\q#!hӧfӽDo=똕3zKbLRwtW=A?͡u䦯iԭ[7eYou#  vTR@W9>pgv3+]zbhhn6.1ɤ\nADDQ?vG) m$WM))cϟ ,`GEEm搞.)_^Ԁ!' ?oߴ- y^>Qс#+*zY{TF =|;c9 Ԃsv2 X[Ib,JLQNoVd6WL~We-ETy%k[y䗤.GO l(W-ӆf_Czoff#"DM*g!Z%{p޼'fkFƬQaK65k&u](z26цモ ? `TC_[P܀7g̞-u6:w/QrrVVz55\يyZ?udÇCR'k߶6`g(LQKCLMF*a,OQZhN^\o+._=+h XW9\;ZVn6}4V_{lJ'lV'=>o߸'9&B cKM+z"kJJB{2ZXՈr_+RݕSTTP@Owo*u @_W>82ਡn '֪r@+)'9Ad6wt? YY@|XVs{7䧖,=^:!a@c!G/u *%pYVTϫlmwEfz/j#Xl(n"m-""G\ߝe ڞ9spoч1Ƙ-u;vM%?Re96ъ7r9RW,[|uL/x~0x͓]bMҖyݰX|xmX%c2["T7|(^,^cfС3E_[ҥ;gj0PQkl$'u]{GNgSMw R]j@4]7b ƊzN,APҪPQ[dfROyM^^=g2&yTe\uYmXYoh~?b_NՕlzY,9Ś[ɼEDr2D6M+KX"dc4`̌9SV&u=v?lޓ۸]N8rDEO/Z<Gb ^y5΃ɟl&<4.7}mz{\}yޥKV{{RkCoŷWl 'R (U_Vqlay-:C'֋yZuUN'""z""BDD >Nxk|&ٕ;c1&R@kaa|k0~R*R,u-Fcy9ʕ["v mY3y gwС(cĻ[fM;/`ERLpIIW%%6 }jDd6?T%(yy)]U_,`0zǕeZwڣZ""^ @m\JzVtԽt%6R0Ր lyjr8X&pNQ,$"e"(@MBæMspx VyRw@"o~w\J#MG=+m%Xl6U*A_o?39='lRT_my؀YRҀ"YRBh""(|n6KH""!"D4I&9]Hŋ2ws?e _y%dc!,~rsu9|BT*u=׮ܸAtOK]P3r9P 8zn7c *c<6s Cm6?2D{FDԶ촗Q "{ .LVlQqNWTPSqޘn&ju&2s7:cC!P6Rq45f]]=\ݮ5 '^ jljv#g;MD&:(k| =܁oOϤX_v/oŖ5KYX^N;vlD9`Ȟ9nz췯Л"ZT[a1#rs\6)JM1Nh*fզ K~-C^uf:֩棎$V6Kue:7TR?T]3;([)Pe5C]8T9eө=RphMiaM{kP>+wwyz"sҒR9Y6PKmY*wymcL X\8缔JrtG/^9jheS>vn;RًT*UiP9Q*9J%-A4;=/ųX$9dv6Cf>Re9"nf9C[5^өSLStz꩷9%ꅺdCNyARg*ع(a\ȑ#y[ RQRb4]{-R ʕQu"u&/#E1|>l6@D# ""R0""CDD "y&[Z)d tRlldJNh/*M'JmcBp(Εm +ٝP8+\% +RQ(~%a<,D˽nUmrVPr)+n8Et /*#].*MS}AKr{)_t/hzF:rl(҆V-g!÷}RT%su(- [\0pNN[`EeDMp<QE+nݰfs8;_ڬ˪NL:ׯKPyνu&yAD1L* &"ִnDD:E$?4c}Ba9gP8p^t4T(3o?T*_;{:ߒ]\ \rk ~ps(;uv ;o:宾eIrk;Z.wW.wzH~O^iG#/r#s>b<]-k';8ȹۭ*+xYrl-!/*\./UGnTT\[b˥jvkRT.䟶`h/M}1SU85O;۷'^qB!sTnI꫕[\R0pz{;t;?t(--'wQOwWh - %p?%]ө'N'}uXc"zcPG9("En_:v>֣~DDɮod2{LGsL.w6;Sd2w 1S\]./̽scϗr~\.\ܓr>y+D=Om˅vQ-eȎ"A HED$ʄ\Q?JZ> gDQ9CZۅn('t ELK9(u)QT&xmm #}߼KDK7ҊDDNDۉ G4 nťUWF6DH:&ٝ<7yJſg+4:fj%Zj۶X"QOt900Is _Ir7fhƄn'>|x^k'yqu~GAM\,MK[d u@m,;'%iQ^;rn7ʕ[{넺l2=#\3ĉV[\zX.MJAwPMoL*u@m,`oVx)??~:|=pwlzȾ}[9sb]>n'u@mW [hH.yIƷ:t6?׺~^r20P3II驩DG\p5S9OJS:ꛎRVcyNV[[KP` o=ݺ9Ϛ6M36aYkז-DsιUK̊ǂ.>>kWHPy_ZdP<"u@m,?9˩ l2F-(1ά_wDeeFcy5KxÄy/y'O,aJ*J_W*s+yaFsk|ޡL^?/SQjr)R@5-`ԣGnY^ޮ95\b H-϶j%uܙ˗ΟOHzѽDo}NnRvKpTJ%2:&wJ(0P2X2O+ 1EǍt/5LB&D:5&h":ED?=@:C5#p"r%^m5tCl6^ᆗf6{l%{wb Riد1˛iZ^&Q>\~>z%% b,d"u@M,bߣRJtl7ޠɟʥd"={nzPȣ\ҧ' \{hhZw~Us{{ \hݕ ɋvەj@@npiG}}NRID' u("RSWDDD4TJLwǯLWJִZd&6 zN;S=EDTy}%-y  +Tg }dr>]V|\Ds3nsPG Od{?~ٳDׯH]Po\֪FI8(,*|@U`_ M|{)Tnxɂ SgIyN<#nAVJr=No_vc}5++r{OSSGl =]NK~ "cy.zMGpη"c1fKPa O#s*G?[R7?WRb4mzRT/M7RzƜ+)I`U٩"_zS½% !  o:N*G* :)PP8w#{ln=mڴx8fSÍYYct1(2)դzt*+ f`gr۩tCU^RgTgWm-wh~B{z׀~o/9BD@{|0 B ~&uܙG/\8s̴4k˚E|g 9~\hHgmen{dqzٝӮݬ|͡CKT}z=>eR[-Tcj\`  XФZgkr}QQ{ؑ~Qnnaa~>M(f*ʌ[‡w`Aw4=3WMٗ6\uw%'-xyeqfdc~GG>hXH<pE#|O;Eԩs2 `AOJj!x!=pq,j%嗭[7n]F/SԴ}Y}M hl=kO=Y׷_uUگjʂywwF{tow)vC|jl1lIDATes`J`.:ɚ\UZm[= IPH|tԋjyuV$r8\.w @ֶ{[8sf|nF:Ż0w4&]ے?}hMȻ.ΡCYYDgg?λa 6tllOM5ݾzb˖^?*.h.<׶m_UzI" .HPӄ'cbb?p9û!4J1Ƙ #i[o@F8.I7YûaӅiS{] g1mou'YG8-鵡/o.]u={4V2r|Eg};A,˨5^[ ccbx4Fim9Q7@{Iۗw\~ڴiZZw @C%@4{{GolN ߪ/vݭ򼫠:v4[΄:m'{I5Xp~<ە.){T.yw54/jp뭼{w<b{]PGgϑ#hzSwNfb""ǻ JP]r!mϭHMv4$SUw5oy&o*{:-w\ %vNWu=FMqVoiϝ'ZuϽjNR7HMWg_6>,yg$CTO<;t'"*eD$+xƌ35_r:#զ6%fq{ꌵun7ߥQy[sy0̔)S\$ `Acce##=$3O1"_uvڶl]0i5å{6]4չ» ̇_(Ò PlJr(8~sCg%CCKX6UxW˽7p3 <; STA.pV^_ S;**?'-!"86rrMMjh4>nd1ch>?0{^uCV;(w\򚚪* ۾w @C%@41tBQ틿7vJXZ}=*hvVU?/<:hkG^p1~85cݻ6aws܅Z$]d6?W:V?"ohQN<9S}jNV %{uf@6*~L>>f{6e4n\io;v5J]W&,:l倔a*]Ot{|u+Wy^o=@k?.w4~l6f5O]خe0j$H.Z7ouTV˻ | \pM{f I:5a^\ ,L-= x:ݑZ%&] nF LD߄iI,k,ӫ)ݍgZ :s)5 S>bLpeu#nzt&#^%"*h Yms6y36wOC'TQtڶEuk"(&F^Qz|owQ"A | c*QIHQq1cj5Qnh4DGʲNG(Z-{;su/ZFa PߧۡwmTRwÕM~>$D'*4CA{uf@~nn2qOB! 1kjxX5K={W)~$rF. XV:r[7eIxq:].hٲ-[֭]0i5å{6]4չ>Eު{2FGDϲ0Ԑ R (IDzA$ďsY&ӹKߛRyavBub@qxc}H|Tj73Ʀ} 3$@Ã/i4+쾿m6n$XVw @C#@41tBQ틿7vJXZ}=*h[8T:]={ [auSS%b!<7p6#j_WϞs?VWU)^OtDek4>T/o;v<ީEEb5 xw|緾|KDD*l;n \]J[QiSvlK9F=|n4`TWͪWGtj]C;59Gy {qkw{2CiVTĻ,l׮ẃ;M&=WڹᣡC}V}NW\LtՒd5nayڲ2u |nRkk4}.ZzϦWflU+>E9U᚜]g_uVJ*ׄaL6QK񕻥96mRcIIa;Z]iA0L_[[[;rcL낝60D~ʕDX] GQ9VUݚvcڀ׎MGCy]_cFm:wVN銊{O--%jVNu_D xDOS{":1+W߄IBN']}gT=/^}heI4O/ͻ.hXtta֫߹S MQ+gaǾ{ws%*6AQ}V$ ߆}XM]to Wr bfpv,o;wz6Y ~-N'[WNqu1U_a4XՕvn'g;.4otqI#_Z/5w迁tҥTBsB⋼{NAj7hXt#MlJFITpc}W~V:="w֥o꧟)SjH{gOQt8-3 &MRxW]~.sj7Fض-^*^]Y}]@\WƽIIn>$!n%&G$] LV3Edz)o@qm(!ns'a0 кuUՌOQ4魼wvw @2(6_x@ӡVQL:us͘VDmx ՞{N z5߆,q^|PbJJ = Vf7-d@N-|5)r&[\@N8?m'K{,]aD(»a'hf;w=z[aݫZOۘ Z&9J6r؎s_+-%?7 Wvr-Y0/qءާcǓNl*9].*UvgEDlsx֭,;Yz3Nǻ.-ևj!'+Ke+/7# FVx-4mɐ#y+&E9T☘ߟ)֭O*O):&OZͻ ]}Fsʈoy76s`=XР8޴=~`E\8?-_e˺uk^c'8{m5)k]ߴ-Eƫ_ˉUC3(,qMxޙ ֚5=l=ק'sTf;g=hժr#"r"l g&"=K]eĻapPimMkw4:f(0˗oݺ~GѸ1-=p"V=tU1gU/ߗ,6$Ҽ D/VV ujB4j$lk9DV[T[ޕi,9-mdw.]w8{B潇[Tʼn ?NAݹsQ{M;8a^xuLza+##y+..,$:xĉL5 Cmz9,gX!mLmB\ Qnj@N.({E`;࿞~Z$ Y]xiڂ pTf+De/X2Ќ{͚fn:zEH4eƩlVsBBxw)i֍72cu w4M77 y# [[GBǻ/SXv[ƻ@ie c nْvxSHR]Q.*ɻ չAGu.+/|ƒ->^N~*_%j4OH)Տ .~MD#=yKvκ=>EwL֯xxw[K:B5kVDN}/7Y{6[.5R=ʻϡCYYDkӍtc7tcBq'_a.h:~uOhK]@unPj5p;gO]s/>r~~9f~Wz>5'Dl2w-4%EV3r.?Dl,|5uZ6~ډE4tJexY|}u#H%[X4;?l)U*ƎXZbi XpE얖Vr@SghY{;v;{/AƈBDeHd ,o/,z">~YԺv'N/ z}˝~55պ6kۻgnhl~pZ][K1ƻi|U}u@kv\ϱ} ;z&ծHRW$KFMo GW Ǝ0WpnZ{]V~14l+WرeXMY§eY=I2d]b}*0pOjQ;Ē E~.%\payL,dlтw:7p5eZ]Wǻ.]T*ukF,Uܾ:|[$z.+fpt ꍫ.|1P=DlMN΃9ju5c{TTTWyЁkҴ?X+^OW9R䙢)ˢ6t]sNڑe[VsZ- ccOv,l*IوBBdw 2yY*wŰ׸s>& YF#NtN;Xp92}:e".w_ݶmF"YVM "cD!ۢ;H`{>0pH:wѣkβ%=zpztvYD6e5qϛcLQ-ۈ*FR.8EϪ20W~=Ҭ!C71f;Ż6 `etҥT]G*leeDee;ƻ/8eY5JMT޾MY 51qucW>>pwѣW-ϯ۷/}F#\qOX0x +/[z]${.|?+cLSU*6usI{i\kZ|3F؁d=p~-۲e:"r& ABSOgiq\gϊμUQK _9raOǿۿOD=9_ܼsr߯WgVyW\8vey5Z- !/V>gL,W-l~&1w4M~ 1DQTshDvvAA^щyyk;>G^j*DEmt|~ۙ=&_sKۮ]Rrpޝp8?p~*RUgG]ĻbDB4f$YkUhGj0?-z⻗.o}7J->;Tno,@SG̻㟚4IxW@CR.۵Ewͅm4IoH礘l‚+ %nǏڱ#{˜\cǦMkA " _G^*3JG ,R?&fOۻoyW #>zbد#W~lhw99&F}|d>%.]y\N|ZRSI{,?cmjvû{Vv߮٩h0{Wg>˻Ϟ=UUUV#_w:dY5ʿԼE[%鴫37knkƥ}W9rŲ=Ҿ}AV}oL{U{oZ»㟚2E+8_vpi=Je ]m۬V8\u_ݺF0uؓ~ߜ2'z\Fd G5FoDݺ'˲]koCw`K͡wLo52n?q=Z}%ߏ1 _]8lƟw^-!%eep)ٮsIYA{.D(D#FHʻEV9uN-86]کr+Sbtι?' [wzީ셓xSB&"o4jw %Q%B/.jj־l(8xsGLl>fNxVb7uYvjU%%,vSIIQtַJ#¹p}GT2 S\sLKĮ6?Ghq/لݍ3=qw{q\wI*6LiC_?=<%Z~Ϟ;xaZޠ(Q1F}5qƇmcPr,J*%2rG\Z̞ ;̋6uۖouSmRCbxV\J-[ k.ܹC&M$=J %& Mt4c WӒl6t4Nn+!HSz}=]ryUjsrrQ{3ZD ?rw4.l7geRl~DfjT+xs0s)JwQ,ʺGGQ9Mv)J®n++kM^l-*i[۶Ts[ߞpi萕wdDxxT3jHHիJe%&QrWjJr>YoM {Kvw)} Xfm\Z"/Gs˫IUwnƍa4UA/G:VA-1`V cc}sڞ=೧暯#W~=%zLg[$hoSRRxwSSx8S Xq[7׹}p JROA{v=RRt< D@9g۶%XVw eޤ(kuyG5;orwJ7К_onߧ;Qr˘1ߝ^rc,P=kvV'obNIB.L4xo?R;Pj- .MSaOX,rq`yudԔ)WpQ5YYW}3v{V+B>lrɼ;a Ԇ$EpYƻzD[8{7++`FH{H#c T]u_Ug%tm?zUWsǗQ,6ܴ&cǓ gw> ^5ũx\sUVpͻ¹yw*ug%TWf,u-x44D:&>ZUZm[=GV>|~MӮ]Y,6攡P%P`,BjE7o ol8[-־t&TFWV*w*uaevf,i7nԲ"ɓjHtY\u9ܪ9:] H6hb:=h6\g2=ٿºQ„ ?λ~oHqシ{ɲ2ƍɻ2 79UA-` sp8}o櫎lzOwˏ3fіmٯֻ-ue˚ZCjSZ$G ¾',[sjՄ TWǻQxwЯ+CrSN4)/ /Ri߾^uUj՝w>zλ޽GX,k ]GCi&)cNު؊۱ǵݑ#?4[:]<8+(H]w6~whqqu/ZF#5|$ ) Qb(zk.\NKو,]Lk{:&1HnT]B-,?;w `1V ,h,=1E!ڰa;x\  c+SA$ K+Ϝ~p۶ߌ]iiСo\2FaAv`c3ccm/;uT <%'L$w45zYo\^>MqqOL? %A˄{XXh=0DDT1HKu.z.1w?zw aZZ(p{ʵ|ss1.wZ=ϔ~Įſs2?k=zvksb{tJJDIĻOޛYN-y8>ۢ D]"އ+-5Unq[uFYKx@-lS芊hc)L!Mww41s& {1ѺuwoλP%P`f xE!"~rv 7WY^~Z97<tj'8 )<{G-Z*yKe\QKx[͞{jْ4~)S4whzRSE]qa6-$6œ䏷5QR'F5wTVi,ĭrQ=`@~>c˖%& Bp̻ & `5qk86bi@ҳ'{Gdg8ATRRYY^λfp|(Fh宕B3t'LԼvuDF]cVVT4KJ H,?bcyK8(-hE UN%Rk$w 4U뜊/kE`KVhemYQ=XSfV#G^waV$(*;kmm֮ݽ{6W>t1c PdJ(Y29"j""ؙ jVSN,pc^XiLk5)"%%Z-t:=kIوL& 11ﰮHyWڅt:"ʧ?{ ^v XK$ wWc'<$uÇ2؊ aVzg2k?W [ffnɓDżkgÝ* !Qk7{Fh M(.n;^"2?c[_|!dee3 m'ߙ:8W>};-NKI!h:7yZmIIQ\.eY]s-2/h8hԝ}O. g/, }ѐ|x5{&׫Vg.~c_ygAÂ@Y+{!j˖S ܺu|M~jP{h>+F{јm̧FcԼ}(akjʖ6s'*+[v6lT34]'{5 .% 41+f-H߲g̠TEwN%:uw %Q;!EB"NMC9:bU'WUWP5U Y_dպt>ihHX覚5-E&PU-Xz~ h@eSRzX 7u*6_AÓ*8jq-$2I akKEؔfj)毕 x+NFH usmя7XM}oMgR =֮ݹxW\3B+\kE|KL];GޞTFTtddYxUPddDRZAuul!oJLJpG.PWG$}k.nᜮRߙrC{.V@,%IV+?JMA*Utdf68SBddv슊>6tP^;UۺUAV$ͭPy[wpoϭ]SRHG;(wś2E+A dw˅Mަ?*  '\-w\I~3DD}ĻV#'~CKiϽ)rT:i)*(/':v5qf#:Yzv|EE/TLrJ$잿iB> b~+|d&Yi~U55Nt^پKa/|4]Be2LO{PyMjne>|"\jB8Nc=k1akjbFEf6PS[?bQ,>$ WzdxvHxw@@ux˵`[p gy zo8yMHCC*5q$qý/RSU*:gktQž `5F}I]v{*.2z~P V+] %T*)O7|K+ X_f-P ^ b!:xĉL5ScΩIpM_p||ڱJN-腸8*ˠC/KŞBV>=}MMܖ(ULJMM XuuP/Mw]DWe T[b2*qj-SF9w@}vMGъ S⡅ߘLo:Dk `"(0PjeLyW-jwGShۓXW*+?`Q{@*?X`΃9WH2?e>o*w#% :*. ڦMI$ˊ_Q?Abh R(Y(.7 k=iy:(D<ʵ'%mw/0̵#ayOQ^\b6'F56ƨzz!G9q+Qf++~t1FcME}uhNYq ]V }GOh"";v>_ɳU+Lzmَi4oOۉ5Ew 9xDJ \D1:C,swttVok/-aUU ~pb U _?ߦ-[xgFfM̅cc3XokW=hϞy\^nAO90&TǼk.ѹծ5lbc0eXDqq{~@ ^/.%lF#ZB x{EW{jE?u/{M&"X:wjB$r9ȿ+\\jIjCN]fJ7-9:q}DAĚIU^%Dr `p0`Oi6y_v VʠtV˻`4v!fO"HĆJ*(֞l2Ւ,d2Qɴ7h6 $"0""UޠSSG5ekYa݃Z[wjEn}v`+[pUr2A3N =Z[owJHZX``8u:fPmC]n".uDD&Q)?tqF3k䷏]}$YD!!D̻ E!ZEU~KZ,6oq¼CުK|-IUUnAvlw-_Bi]Kj,ĦjM̅cc}Yom[=m;xp^"Ye/bFj'c߳ǸôݏfÏ''*T>ɻR}$3Y-AAfPP* .ﱋw݁ӌC:כ"Flw7ׇ]>6f N ynrTYRMxFc>eg[f8N鬡iz=5Ngq<[^zܵAUVlw!D$""Ԗ޷vw)#soP mk.ޔ)ju8wfroVz,t_Gj?M_iz;0D1&i\XRlnMf6%njخwT曔aF+iwIDyz^Y&ڹ3==-w f 6 brW-ms yD=v.knH.ݴOޜ/)ɫ3.3O;ѸijW[\g3 (ik4?\A~hRVS5GhhPːVkDj!}mЯCn#YCaa^j߷뮪?S`.qxZZ3_qV{7B(Z"jKۉ}Z1ӏd"8D(K៪oMMQ:>nn_n';w[N\TQto|uv:E7Cg qGCaQTW''ZU8G] XSfV\/0իyw?ƍii55AApakd*a~#wѣDV^_ϻ7dfL-edn4n^zzM=2)Yd#xy}V[A5TEZmeM"ST# cDRe)588f3-45\U_oz,`il jn(]H{ Gn޷xO(mvj_Zۋtu?۷t:[s@_Lq٘3~^+@eDl:DD$ _ Dt/NST xSH»sƑ2HR}u`I2&'^wD3(wmmAQw't pNr~/70[ ΂٭Y# 8_aOx&(x#eloû|499$<(^`ޤ%ln`z?""%DDB"Q jND<)@cqe7w=h回0}jG,9VR_]kp^~QQ:<^LY,&(w"a 5'"C](џI?bw` Z (DGKʻsUō5UGiI;b).ޫJ|2bnMMQCbhM"CLDO`ISjTTݞN۵43w\ `l}:};LNNa3Dŕk.a9ÏS-z_FmkOݮkK/--T]hs]ƞmN3;6)Y* ._R6PP|4/:IacT#T%gC\4g Xe0|p2́}ЫM[C&:@uQ7DA]ԑXe_jݦV;j)Zm[uz^s ph4DѸW.tJX5TM/>g 3 u۽=JϯkQV @StnK#R"zxں:]Ҏذ/ "ԋY, *7D<rfn󈈨M҂مdž'"WjV>Q/5eZɻǻ0%lCY~>%ޗr?`}aÆpX;FFYȸE>%7c۰) J[h!ZhI[)0=zDlDSBξD(uF'@з7:-mq.MneZk0n~Tgb'LȩSҙ.}qwu$>:^N?itq9Zk}NW?uC:yWFxskVlU`?"=@D dA!Z"ZLSY"@rp%庋5(w?5iZ]Wǻ/7x/^/QAռ_\yOTtTify<ѫL6͉'"ߍg4{t7zPyo#@S'~H1ݺm *|;44Ѡ Nh%ͣo-e^5l6(='x\xmcǤub?|uN7v;;P+j~yyYbp뒒ǜ~-goBlhi 9:&>`xv3Yô ağkc٘dsNus|Oqvj큮1#ZW<׍ZjwWVKOY }ADwrۉI""@*!"t;VZk1՚wY2ksg$jڿ^RSEZZg.zQXu 5Q:>}x*Vvx+J3Sw2l zhr]pa0@=cLـ̣Uts;wfd8@$˲Ccc<.klϻ':?⇨6uaGz¼?z';vEó2R|,EcVAؔM3333 !B»9=׻i>r-jO֭3Sp?DZ"lbm"64HD OnCpDUSA{nXa4,3~t_s:vQai􈩟iC~) ^EΕuzV[芶jm1N=EqmZkKhnkVɒwzKqDTKwQ!Sng8wD~o?ϻd]s&O$w@ÒHܴh]sjSmjEË}Xmȉ55Taűhl՞w3\ylR>3lbC2;b jz>zС ք=G˜uA @[mN?ΕvuiPԙTX؛:NER#CNrzmysw{kV˻JKuT̢XOrg0ԓc jTH&ˆd"FDDߟ}j""z~"heZ pUY\.I;S[rF}+S.Wz P\DCΔgZti~ъ|ٛl OhK;ֱBo g2) шdhLm7!6-S3a}UUGy{eIx8GcZэ+XL£aa<3k׵?;Ly,8?jħn=^gx:r$; w Ov:G QGDy7]/GǔYѣǬ8rěgf5hTLLƙ͛Vֶha) >%POs ;9W}}e3DD4:~/To cEJUөW^}r?Mt*s/].c602|N/݆'uSZp^cxХpU ;Hp1l6{>NQ׺F:PϹu>V#5=jųV;:׸h\;O\kZܭj5<4DeDD[]1"ʥVDDBgi H/Qu&"9&[(׊;Kޏqoz*9Oy\kUt:{V]q*C=; n|4flGC ""j`6txlQkh DDT˻ ۶m85[OmQOe=ڷ){,(.޽=uYP\\jl;|$'}wb^^ּy]u@)lR"1q}@?5g_79@DBADپmM$|U-}%z5zmK6Q4n\umxY_vwj:xu{\AnG;v>kHx =q0ws T*gWsn>V;KjXwj+kZmr4i4lO j{kZνUq>5I=M1[0'Fo@!}t #0z$LEDDP'ԾL&GL5SK'M:5 S\ xDl6i^aCytS=Ʊ_*Zazɓi:Qm@j'O]piI+չR3gLՋ:GRB t4tɓhgCɬȼMaah@\?!A=އ$|;؛%I^$w'}s_o8> ""ҝ}I""GEqcTF!O1JͤI/v:]]J֭vHvǣKSǣ:ۭG+kx 4u<C~9O@KAnzM^T~g3KZe!5ԓ/I>jWDv{<zܣsuT݁j޳M\z~vW}_<Ւ1zJϨ,]n;;p­Q eȷnFDTBDDTB_Q0CDDs:NDD}%`\:jtuXk{.V^*NG\ $9qr,tZ®U{{S)wF Q+~IrG~~۹ ]!OH62 _;v:?cytdmpn))~Do#2eTuuIBvCIxh37\en޼<ݪYD54TL$!Bh,g=:~x!a -!>:GD6by"3R(z5ob]RS":|w\(LDƻ⛂} X ˎ6?( wy]?y^,ݛλ6r͚wz$A?;^IJ~@]_E%/ @uS٫N%oEo:~J}[RH(IWeJ&7U11E \S==_i4J?zZ<ĨhZMED4˷9FW%,fNo;DDԛ‰=W~;Z&"bND-%7ϤgH 54[XHD["yտ5HTIc^]a1)N RvS^[X Qգnµ*T(= Uj\r<)2 BŘz"}.^OLC(U^_ e1AuPHݮQ{<_tKjyDGTu(duR> "=}CwFQĖ_?s^WNc_M#r&HJʧ^x;TE9]Y%/<۽D;Û~vSy *Ŝ (t5= ޕRE}awh I[_TDQy[V׉"`#%/dJ+PnECv(WyUU*Fa.=$|K{%:AT{׵DP۳7y٣\ԁA$Dq"GDDpr>{=Q<J$$h""ZM^<UeI6Wy_O'uuDD;Oj(\+.IO\9((B)0Tۈ$ W_?ay ʆ҃cu+.-9H06jֈ!]feWyW5ߑǟ^6\<Ӆ?)wфJ/goj"+Z/YџU[[1_3VEC~$oiӟd==EDoH1!AH&"ok"'ѓ" ĉhJ1+ŽcDyJчыFe(&L:5%%Er΍^bGC i;M{c[Yo޽{ m8[9zx6*vb1N?uw բ]R狋[`GM3X(]TZڕڸ:~VZjDˇgyhfbl챻sf:T\22w74)TL+`thZǠA#cc}G3(.N^"EQu\lWP2=#^iRo:wYG83eSnw]NK#b1~ m2xw4uw닍s<~b潦ߵ[&qO7޶k͚;2#33p1?ƻj,U8w?5eZmoZ ?WkeCT; .4w9 `<Д)3dYQhϞ#Gy\Zo10t|w++y Z)cO:y_n}{ׯaϵok[Mݨ?"tBk 64jIR9F#unU>*ͻUm5(AA\BCAy4DQ@ &CB7񱸸>gy^O^8x0{16wǎ>L$ˊh=hq,qfbjcmVl쭪ot=\9J5?\Lp"T1MŻ.SJ)S$b]и8Җ-7a..{.$w#PȆ˻|0u"e/=2u*s=λj;MFžuƮ8zE)yg}9).V3~J} f]c2b- SPCZx<phG_*`sZ t*)5UѓҼ)]sͻqn7(o_c7T UtҥTd>?aw 5|ΐ=rrE"]`VWjKv͔7 BV3{=D˸SGunK2iiQ_Wb21F{ySh4zKME܀e8֧Uok6kO;BoQ2X%f >ԶU+Kxw5U؀unjLuE{+h|o[^^b15{q(I:>dF/=5k&Տ:nmlyUS7tr:yw4U̻acx2@ G($WX:cD\#IV+-5U籥c9&,4$EEĉ;dYQ(-#Gx\Z?ۻufv6hZ{0k‑_&#cֳ}Oڵ'qm60doyw4vB" PhtOU*=khd"R5۹ Xgҡgfc I g{"p'x_f3Eg&(FcN&l65I;SG_MxWASVxPXԒSEv.4ѣy=[8,8 Ycc)9u[6G(p)V}y ɒTu7+Qq1cj5WP]!t:{?!5Er~zՓoޱ eVԿ?ncbxۗb7ZQHHuxn &pNнǏWԼYp܉9QQy 'Sҿ*2RO)R: ժ1%M#wj^].v|pۄU\,4U\^]_~KAޣsGbJ[;aG64vp9Ż62|6:ŻR&b{2/o=ؽw~1{/sϞ3wjy$/O7S3W7 03333 ."{X;L&"]s&OV-MSV*?>VlV=?8XN=rVu5=׭[c,@e;[S3ݵ?:t(++3zew 2Şab7RoJYZ6S8Tz|fϷmz67dgf\j "!+.=9BQd P~_I@=+ HF$܋Gjn*!Mա0)MwQRK8C7ݺijpe6訚zS<#GxW\ZIhWbռ_[WW$j9283=e&eyGDG䣢5ziXmVgBMŻ.G 0;YǫV+^Oٹ#UNT6O܎S2a@sG;8nbZrs y\!Y,]:u5w@CQºDS]f$*t5_GDd_uz11ʄhΩ9X МZ_`h97iZwxTe3I%{QPDZˮeUeume׎QED@z% dv!⺺Iܿ+rOH23yڏVii 'ID,y*l&Wq&Gm&&&|jʕ蠉'+;{`#8r"Nya`&W]J]:ObcaEu|Y8B}hqtuo܍KI--~Nc--D@to[ $V)*>4rpųUmWR}cDU6rSD7PCW^["mIp<1C|*+ zOR#*o?ZWZ#u`}98_2|8@Dr%\ X]d)lBC1r$(CD|+n),\J#ej!-!Xt @t;teL11t:Kg̚Wj/QMM(VM X 7R:7U[Bk:Tyڵcu7(`uҲ;od Hk³ϦB/:۱{Yczͪw3u>5}}(4ttTWGtwQ_/Q,U5r|l)%%U NMLŶ'3a@t= B_LD4>c㒓9.";VѯeY:ͱygЪEpa$i? _˲A.?8GHyg=1cFp<5!?x9|Ka }S=gL= IˇeY98c@M:)Sh|,pԶm`tͼ~3s4u"讬-! nHuuC`@ e[O.'&VͮP܆w?%}j @-j""/ȿ[ܳ}kENZlQO <hH#;_|A[ӑipTODD4^WN&"K,~"Igu~T퇡u릔PrSM0h,w5kŻ%wOyY}`(2OEu|X܁^^cWr@ [=/ ]||7] .eAK;F8֩ݎEEN5\2>937F;ONZ?$g8UVDC UVR?BZnoZjw4Pwn\\ >ovD+/--7m}Msj7Ն_? >!H ""қD?/LBRI<9F$BD)DQtdKmޏmDDCh|jgy(D BPtzHi_ٌ6lk@DcGVފVWQVe_:jl_%%55|ԟN`vY5Q5d߆$WWSn!~(UU!u7n{ӱfIXg}{g<*B8OxuDzz y}$0zwCDD.bj&@tHę,!@ akO<5q׫kս;;fNC**CDiu"S\e=׳Nu׾eѭ: Dn4ProV;gE">iDkXv۶۷g]^YMMٶ{StP?CPo ˩9ب,!%>?'WUja||MjӔ|noD{@BWy7 M:|o"&#?@|sjqir*|y~7הWZ ;11pA&o|FlxX5jN\Rl,"Xh"/4VO S O蓭[YR;"$$O4e~i۶ek [3ԕrY: ~[>o\cceS޸F"D?d +*~V]WM sZX@4, w vUӷ%C?͗ Rò4v{e i:}O8˖U]^9.㛲Z VkeEXOa) r29OʩI^n6Yݳ\{ZBo;}:e"=jd4јpli^oVZ駺\ņ -IK$p\ys 11DuHtDD4eFtN]!?_hV%5/V Xr Æɲ,2sq$ΥV(`ujmݹE~NEmA.g>nuu9֋M_J{;q/?8xyMך""+ THuW|cV_06[ݭqqu6o( ղ=pb` yxFb:ri}N'"l@$ɋ8q&nj.1$xZzSjSԾ YѦ&ppzA`'R+n7F{!?~yvj[~}G6X ,\n67UXT:ZA~y""+֩xn*i:ǐfXS^=!Z@u*u*/:'R%Jv"'ɔAD.!W[NZ+gվYuN\\H?l֥VkpE.L_IW"Zv7~ח>TCU-!SN&=.}qB-URcsQhpkk]X&Qhm_j\7k4aǟ[۾la6&@> 6VSia\: D#tn4!cyJEw l7n9IIb$IԮ)TTB1?N;S>O}8,Jtjm#2yJ}1Xfڲl5/qq 8Ձto@O%+/g mCKVg!5zu28oO΋-Mxb'fph*|yWWyla&rf"&_toUauc06[8#Yxlj$hVL~*JO}9WYu.AqiҶIX{wQсSt#M(/gAgBk3(hRe`ϋo޺`:NN٪x~kllS}mM6[&2C-4ַ En[".bYM Z6ٷS+e o>ʞG9T?ƾh4۹ϱJ`[Vgk7` 8"%11tLtTg4*;ONixjt69ҫ! d׬*Y,})6`"oДk S^[uAX]DOg&Eײ`( _ZZR: @>7ytz_e>S\.".uF,F_u| d wɂtJ Xju P顋lJ(`k{P5: ?׻vR"@pȑ4hp`Y١CD~0Ʀ9/w;>{; #_c>Ny>v7{YDD0=ZUZ5Znm|St]іVggl-_Bb\XAؽ{l _Mwh1Ǖbu3tɹb]/}xsyfL b3 522x>">뜕/lk@oJRY8.XR h]gICA`;w:@8e/&iDp*/1 z2I1v۫JQF>=O "R[9':p :]bb5d6?|s㇘s=&pܠX'}N9O9XS6i6[(#d wewnnq[{۹%1qh]A47듵 aOԜ Y52y.3ǵHm8tz=|:T|>u$yx#Ij?_U8nFDS4,5E17n:Z8lǏǥlAeY)))*bsbb ]oiaz&˷Y~olO2UKвG<_lޔn2UPZkնmXbi2><+@Z- En[zEMT|[eLM'tfrCq͖Tbl9tye0:ƽLWlzG?4,b*z-{qOZv[sm/Oyy~ܼLxQh[BQ+} Xuf4un ҴÕP:V(`y ?hP^^[[]Mtb31/{Y@ .hTJ:tIdr:i;]DDW+ZӝO^7T\a:qY.}KH|^xdD+) , ӪϪ"&Xg+pypA ,ۮjBm67ǒ^B_NJPR`pk$YƹݖF 7"+ބ{gNsEpXs$$&Q"b":i59KQ}h%4RYHlD09爢: wm3s]z3׭Wi-xKxٰa,r,w@w|fCj*])&={+.N}sVTu'•RNܡ@-˧,)ljŻD!17tW _ՎXʚ5jcbFKyd[CK_{o:tF}/xU*:,1ҥٛ:g&pjffpp!Q秦NhN"NYE=OA St\ʓK>N{~ ֹ Ds)6[ uYG>:VSw OsLtG{Q/g>55R =[dy)wv8Lt:rJDD$h* ;4[mJ7f4lK[Y,-;ږ-+][oXnsYne}Kx)^=_-xH?l~|-}&77[ͶQsa*}_>e~ƸO^tC/^o+[cIׯ3sOOrGQ#4DɴJn.cڗϜ.@ϖqj~tWrUJ4 XzÆ< XCq]GVa\.9@dj[e%j$\~d"%7;$}өZ:;>F?|"_}>(&5ln^~z:2tye0:DK2 t_|'ͱO}&vfOhZ˳^Y6L5KuDtO'"ä'ӉH%?I;mzow&&6i:OƌO_sjp(9B!:YV\9Wb&,ݸC>uhCqܸ&Ygu*طhL5;iJzbӿC,J>[[ D-n&mDmʄ-ʄOfͮG0[]_=o4蜗-6%ЭhWWYDL8Q*zwy}B|;^Р{R~(I@)"~ .tBoux/?Z6]kYG&T]e|AQV"*Z6yuͥw)lDn,Q+|a5Yۼ~F";499u)\K>׍P]3gOwoy@wCŝ<,Y4֖=9(OOshU&l%LJju:)n!"4e-M'x&i4쉍FgM)%Wkƻ̮KFǹofsw.> [77׻SJ痘l6i_\pv`ђ#/D(WY I4:Ofhڈ{ x@H]IC#BOEk5}`6S)k:D/=~7g4Hy ߃֯o3u "*/&r:=\Yjwҏf*+i-aUR$ә~_ǁ4=r|Sm?ֵg49ۖ+ܢkq2vXa;Dҕ8&^y"Vt)݊-ooq5-N:$0LDLr,D~q--,D,DM"}q:&Sɺ%8o աq~agܮ.6U|on-Ӎ >Y?fi{>?ODz" klu 'YZOߓ\*93EEuF+`E卥Wl.G yFOwՠADԟuhWG(8n=7仉hTo&_Y- ]I?o X{q+=Dg,Mx7M eGޱ!G lMcKyFc[뵶gLwnw_h bǞC'Nó⦭z}ӿ y]j1c%4}+Qrr+m6p)IRW JaIj u:ݻ%I'ڼY "K)ro+]n(;jnyb1k)ScşͿ͒$Yc u#_|Xpo~O7̸3U~˧u{qeϧC\  "ODDK(GK?"}DVt꧱lNONny91ba'R.Qrr? k Wʛjqպ*"8rګs,;%&Zsexc#XЏ=60h|7]?:()))*bs?ńN{q+ s$1LXDD)wQS,P^*Ϲ680>ryھ0[݉9F{5ݣ<=yB(pxW"hOQL7hW~MFYF暟b&$?spK-Q_I."zFQ -g}~'Κ8S@4k|<߷O A-*^KD3(uPwc8#Y*+X68~|XO`8*Xz P3s>D: @㡫Z_6_|f"מ\1Zmsc]ۗCk+QyE' G<+v3?{^m }:Or-9ʍt\5b2kMMDk(w l6MY='ŧ)%C+rK[cb \K8]K$OS;7\;& ́ߙ6uu~ִ2c40] ?_,ԗJd^:򲝋ѧ?e$a]vBSB3Ás}hwZuKKP䓕/?RPV]FbXϖ4ޢGQ5S cRu ***++-%$Y$i"ctҿij""s,m584ޣ""zn!mG>`)s_rk~<)Q/>Jgѯ.|j*|>S@ta8ss#_b1}Dci2%"@EDd#t]zy͗H=sR|nlGWއ]zQWa\R:@ )|F]u5(unL{S|r.W>W&rK^$G\z4Dd$h>exhN-ηt:w}zXw~{P ܯt$e2A_O Ctps0=C u3FisOX9hq\8Lt=:]Sĉmhz.4*+|3و^]u nkV[qA}~8dju{Ƚ'^F0Ks(ԿB} `|M C F߯\Y 9pn`T ̟M 2=@EĩX":^ǎEyIDDt*"aP [^[kOMu-ܯ+kc X,+ϷN:`̈(`s ҿ k(`,:,KߏG$_LײNg[Q}~dayCOX_ODYggIa|0h&={O$3)'"%fO\D탹DDN2R3QpxPN<^ h9u-lw,}y\M(tFʗy^#j|@w,x>LE{Sk}^:6z xD=%%uՂKjkhZZƍS&͝''UTHF:SZjC11)Ŀ$_p.KJ~a5.B!ډm~ݨ@@Llм  gƓobBo L S7CΨ k;tY""h""^P'K%)~/;w ZQ={WT@!:Mfh)@l6pW/q~},*: _~es5lDcTΤ R^ q'DǎDD jQ~gGhµRpl4 d%! V^_H.N㨖>C2Q.ωh/>LD$ O8u=]u'x+i"O/O<3B@FBh3CB5H&, ܥ\CFުCRE6z,ԭOs^uFJtMZms3+"L~<}^_YIt=@^D+WB&t]/J*k_29ҮΠ蛙$m_ j 5~ͥ}vX 鴚uΫӕq />{4ݮB`иTl _`0b$%It5}BϧuDDyQ5 FDD4=Dd2CD/ѩt2/g=P\:ig=rr5Ç+"<^jnu6}C:Y@ݴ[RYKe>,c5?Nn%'~:WT8p,PWkH{i4˸e9g" 1U1=~p X81߹dٶܲtoR~z˫~^x/^(Hѫ#"JыL"DDPxu[{ 'M@].{E10+FO ~ CE1hxLA =*kCOD1xqbQ JH1 n ܀#D ]%  K`A{ÏJP=BUF#]MQWO=y ݬSu[ml<嗃8Npt){og3u՝9C/?tYkqQI>D9%s_|?}Q,-x" $8z8"r8*9joKN-$Φoh L0)SDb6bQq*D!KA@y [ ?T;Ygڦ"9URN愜`" dIr `ɠLJ V[&R [DDKODWIDDt9~"?D .S4N&l0UDD #oHCPK aMA " //b(лn6-$(_-q\Gq(O5RDž. 5ʑ2 y>|O烖E 79.~3K[<BMȽ+Lr\"}A|~ik8[obji HwSK:?wg(=w}&_Ozx5nW,]VkIj0:U[~[-ܭ[ 7I)R1SBDD7ӭDDd'"EDD|";}Nos\"o%FWSR -s;87LZtϐ!,6Q{%tF_67*S>{&- H[[⬬t&G%%s@ϳm߮ےG]:Mfª`Z,NP?A Jw}\qͦdwV.'o^{!5WQ;h<](S: N9#vݞ]M i7'2 bï?1z}[t$5.e}k:/hvSEu=wݥ&$hݺp`ey;޲,?g4N|?o(j*oDy"5p2J헤dg+E%IMs+.kL_jQ uMCy?:Iw#sS2=\{ O. O\`0ПNo:(*/g 2 隿|:@vۺW%_bKy3F^eE`tuuD Ny̓gڧXc]^XcIUwXSB`|6g7ofcԇ?Yҷ/WG]Fr2}Z-<=]}Dp\ jJɧq9\q @3y;M99tV\DžG<<uZ'Ͽߏ[X k'{Eq{s=de)$h$㫠@6w5ξGWr]~s XqN>uP` tJuhh-!W:OguNt4|8{D^=&Օ畖lsZBS8~^fd{B~eu^=YeYe+IXp'k#}Y=ťO2 XѢ ,P+..dyطCϼ,vb?E(:tAx&NL>WnWJ ҫ! |?ssڅ@򥝏mc#R,,hX@+ەj*ۀt4{\i0pK٬ XgqIs,P$F=~D܍x-@תƆ+*IIa'R6et/F[fi:oe{6m/(l[.e'R#F(9NͅPMk>B :.|>U=M񞴆={bknv8Z[v%+'uh];VɑwE&g eE]f&Nvg#.QA'4ߒؽ?xpz }8G'ZΚWZgVq(`@q|ҷ/$ȗwb`()+P! z( ,/mvI'_]}F: o兦{pOU^X';/˲,GYzSѣYEIIU XVjS_h:gm<5սhd'R+N'Q\9 w22y%[߯y|=l+&deo^ idtQlk#h-~?h˨ up}HoKj͜)mmDi"3ځfD?n>]kj5ʙuj6%%y#O'Bh?I* Xʳѻwە:uH/.Qb sak.ߎUьy!RI~,3/]|1'de)Duko4t(1@qpe% XV}rb&_@|"Jw|qh33Y牔LMrpbM&j.IoK\u0}z8b֝D[^ DsɄV+ǩy2!m0-u8J.SS^{_^D@3x2@mګYY< Nq3^DN:^x3'un X@.m Xpږ5>}+ijYԴiF׫ sN睧sj/wpԗ"O5K+y^E>-% Pȅ#MOd=ݮE:u^֖i:ƐfXGPkZ"noQ@W2aOVS&uT%ͬ@{&;_;C-M&"I"4INi:/?_6-m[{(*;hEf&K+`qk*yLbHW@ϔrwʓ54q'Y8q//;|IrB<=^uu:Uݫۏ0ykQo1~7l:DZh9yFtjaSkKAi1UQS +ieFUBc4L))tee55X=j| i9V@ϳ|ئkoU䫙3Z5c@F8OYܖs\+/;;<:̇s8u:c&Rh K߾N5ז}t|8]vum X;s(;gwq0Yg WÁ:pRV2E+\Ku{w[f&'aEmO5:O yo_WsQbc )S? X98w)wEm XrKRC+ZTUձN1uB2z8`׽p,?k@luHM.N'VK$ˬ@OѾsl:t7p7Y:UӛkС sPZ\#GW|@ @bN1żjkkJfIbDYoG+ڗMp%%q\(Dt)N+97-oWlu8H~wFkpвٔ0&"&Z@w ?468l6y4W: &_(N`=ݦE%2׿?=]MMCC],˲)mnf9NZi:ON>Y)q 4SM&mmSDNz[wt];|ͭ[é@eh9uFtt,GY+j&<B\{} XDce 22PctW͜)X$q(Dg;:tܚ)-.uG%%Ʋ*4S+`uy;^n6o+eu 2iMMsomox9ӇuH%$p\8_<ihI-'+[ԪyLuw2@O}OHLl\NIN:I< X8y><8RmJ«`(qM㝏ԯ} TX=-Q1hɶ+V P5Hy50凸-܋IXj]dwUBQt8X8qڟde)E,Hmt^DN $*B\/)8`=2uI 3|=džv[yD風IC=p\ @4p |DnŇ.;xJFoy~A`[s֛t}3 KOg'R a%\j]EXǾ  rһ(`E ~55447|FڤKϋngxۑU@BBӳ- ƲNSVpa4u" Bogk4ˮߴnE쫾km?fgo^ i[9S0z],Jd/ݼ̬,yЖLc E`zKy觟a護Ah@ !xw cc֭ "X*!a8ڔΫϩjA "'FT9:K#Bo_CM@MMc# X6*Sm?4ukkmͥAt&:MǵWƦONJ"Py%ӇA YhXm-Nvvxtxex&AJQ8j'4%Կg0 R:)54N>Y^i;p@t:7bcVRW~ Ur r]}Fcee|0VBwQP~?:ͱٱ4.IIwI7 :MT;["簾|9zpXaFngcRKONnk͉̓g:nZY駋ME>ޝ:UBw;Sd0n޽Y艾 w!'GAE3s(b%~@b"^oz:ѲeU;W/ ,ӽތ W&fBUZ\i4uP#~, Ꟁ]vMMGXj'㝄Pk[]:GgaEt^"TPvl9zi4/q=6'uHiJj4FͫY!:ʲ ]}ϗBzJ~xCYU׿|{J j-`W~Æk&<>rwEZڇܳTkuu͍StrinF޸1pu2؝m{Ztgq a'R6( 1QviN*rK}s^:@OeMkW8ީ}em|ɘSVUUioG҃zmٲe˖- <"&W+Ymllh`c,}i.WGֻj~( ۾볱֬Rtz1CYنEН}+_˖oLyz },u`A xk)E_bcYQ&`i4|s`9'S vY牔=(˲,<2;f ,P'at?\i.і yPE}E(D-t7.n7Q\ǩy̦w,T@:Zke^XTNDÇ<&ZBWٿ_t: UוՄUU$ӀZ23չ`T rb"T]kԒݻn$=ttMMXAj?ww;zri;ba'RgT]P-)SDd&r̓g^ank:`=5!uOnb.35Kq8X׃Ծ"@G竳USz%(`@~~J R]^9G$ɲ$5445N15W~}pY'hmWl\D-ӧwU\?w۰3+u$xUzrgѢ=wKW1矯Ѩp ѥNEhŊPhd}m8lJ! X򯶳Z-|'=?&`8уctͭDP(+QAme.Mu"eXkp4TVdӇAQLe%א!}DiL $Ng)+%I&SyhnIRo3h:@w aAtihQ(E:yy꜀ծJ$pr,˲2R]Tw@NMҫv v{s3( 'D|Ii:OC+%kv6Ճ}ݻ95Ps(\DGū f&rU6ɥ^׷yyDn,e @WZ0ZY X Nªjl:~ X hLOMeTSRppI܌ yzFL}}ؙ]eٛRxa!NL.3<,9udO(}23Y牔ŢJ'tJYh6m i"WR"I:.6)(yu{e{jM+͕N4K꟒:FGƦGY뛛Y>c'HwNnmph@)"]NrE%kW;hH3@qԩ^V .>wM}W,mMw̙W K]ߊIX"?_+}CƲ*T 5IkY(j9S3 X5445I,K4p៺:7#]l5^+օpܶ]N<$ pצLQVw $fN٬sDEיonXԨQ{DeB!UTT Xp첳(s \ٜl69@}Gr$9:uc&/`khhiinfcťpHo#~szW9L(n7QLR8.&;V=Q)e>-MYFKoz'_P ]o`0&utV228.d*V7nME :N]jɲ,˲zO%g\Lbngc''i~@~ pV 6M+:W.nLyIP[V尫hz/<% :K\.ih/()I9z B踂AP~ͯ7܀D>ߊzbXE7qXknnmmmec&.U!K;Ʋ){|eNƍ(1B!i"do99\iÒֽ\Az5Qr3WZ…:S_/ˢV+j,`ٟsݪX<󏓝RMr2J=3rXkjr8ZZX蘔39(`z-n|y\y`[ZztJǖW7yU<4I\."Y)bPN j^ݹҕ_p^)wqz_n.UX>4a).$Lcվ:6(fG6ZkQoJᮗeOIj*=D~05,qgn6-mk#ONqkrw [~'jsNUQhD(5X夵"6@R_r\@[⊴4y"Ǝ\ ]eǎpX':pgM:xg^yyՏ7\R Xq@&}֩ IwbN17CSU<[[P5lT@ӯ ~?Q &NTVLDj$yOֱXE=ek+>ɑޖb+Ի\PD: t| Ĺ8%%(j_3 'N~JmjooTl#EPe9gGF}d,֚V):&1:stw7>S\yͧ=%SX(,k JsEb&r7JL,{Ҳ)8\ Vx4O~ֿq+99DJS~NklY(d6NsJ\DuP|e5~2Z:H6)-/MJbD}K~U. B֚LIZ0!@= Bo*y~ǘb>mV X=@cQbnw8):&9"k fe`ˬ&&TtUihPArr9ݶde^TJ6eŕNYwcn.5kFUdYY`駡 ѿP EɄjsZBdszL4ELOg &P\ Xkcw5lӧk4aB@4BV}3vl:@Wհ>o*b{f'R}|0H4j{@wq$=%IcBUVRgf_aARRa|<$ XLhXZ=]KӉ>^&[ObҪ!(4V.?S\>+=CGԷWc(EQ9V?ݾc!t/[{\yPA"-WNKs}/z[(8Qn"U)zt> cbB!"To%%Ǯ@'C{_%0 g8: Ŝ]ѻV}"4&Anގk ޔvu> .P)^F&n7Qb"DžBDnc;Ssr;DfU;Yfa%tIR W_| İN:"?_=U;"c'WBjٔފ({HNfkmmk-P7,5֧m`1CQ5k_ޢUaf;X,[㉉tDT(.&T?^XTDAxcU55|=#zR6:'Xz Xdd{۵ݵ=6u,y@KOT,P;QUcbjbVE#y%85NNU Xj_m:@G,yakrsվIblQlme A,cEE^:M~:U}誻,8yv_UQ[wlXC (ytV:W=:GgbE@P& #jeOy*= <6A1YYDdRMV*ղ_ DbIhl8yyU}. 6Z[ X&Ϡ,Z[<z>]'ˉ&o5j[ʟ.{pLy"eDg% LbQ\ykӇueM'86#÷4 .` Qld0(s5׫iRPt]Eu_ڳtXFnUƇ6}>}}塐Dd˲ N>(`AG|0Hߵ/jb!;yT:5qz dt|z)f:_^j oﳷ5cCU=ɴic7Z3 ,9y+g 5u n. PN:N85>?xaA;0ksZje(`pݘ'jak.O,D?mə:GgvB@O0x |j5k}vɿz!#.hl8w>}X牔FM, ˲VKm[8l0N^ŒtZW.iq4 Xp<(?1[pBYzΖo\w Bz@T3 X=ܧxgz.}J.~.#uH%$p\8Lt晢^eu')F=7XS33ۡ4y"5uF֦LNeiX0Z3Y,DmmDñRkԶoOx պHN( ˍ4eYe9G]ov4@XeA̼kIsY'5[v3WdfWб:U)p"N͔)IժwWm5Sv[^e#R1CNi,iԯ j;y";h8ޘy@=j%rQW%\:GOp\xjty҅1`D'UZWN͘Li_56n(ɡ9/%ba<[i'$&6i}^UI',^/QF:'@t`0&ZQ$iSZzQI>eC? >.cs:nIwX|(]|[ɧMM`uiԽPAEm[=2+uY=5Y-T+,h)Psk^Q$ad զ4p>L|/{u,_mgkk BP:!?=6WjpJ[\ljZ*tjyw#͕wN]ݩ/qhXz:3K:]_ustZzMj*;|(DtIIw]l$!YD#t:"I"GxZVגu|^J6UVqη_"8K:w򸉛Cğձ^_>T eSEĿ]ȝ,Q aPaX[ yGO ->V, X49qqu Ԣio [z~;ơ\kg2}܉7;uz کq.][CjemGѿ<ُg?vp||׹铻._n̿W%#n1~t|'o@!7Bƈ'q@D|b'?En~6.ێݥpJZ:WGAY&b>>H?>_2/Wq}{q)ߎ*5:cr F{p)x=~ё-tcZg>u̷7NqOp_q2|\١a@$OҸN|#nr d/έ2"mw|UvLgvg~:(M3?Hy;|_镣C_ w:1ӾSd '&NOB!5k Ceg]my/@ ǽ̋|i' ws{7pvȻ{w@ VG~/ߋ۩ǿC!vGmݫ9r;c.?=k>VOyb#9N&ki=]DDhr"Ƞn|;Hk6U׽lr|G|Ӈ1qf`0'o?2yÑg6ikBsow'tV3i8'^mu= I&ϓ>Sڙ3Ud8Q }a=5FHN9JϪr FBLB$D+VBf34=Om,k4T l|utvZۼz}w7y9wȯ h4q,wX+vpgFƎ IOhbc=\-w: …}1Y'8j'˲,D^Npl5PFt|PSE=%ʉکSq8~V^,P .\#\ #cU/xeI- D*-C!1cf# x[tTӅ-KF?>8 [e:fSs鐈袋ZԼ …|n _u5Njm16 XгHgK%t9Wn6\j Ղ:_ԪDυQS ijC9uk_AB?q&_TPCkfM'/RIBeEϫ{ ti46_7쵚> ,y :53\qRU0zVt^̟ y(D:YE~ zy3M)_r=nv;V\tGWC|X8{pkz/x [s_@%VRKOw|sOb2ܯ wp%j XLa.,|@@Mh虄!_pN4SMse]Gi4ʉ /E5,9de2^*ܘ"yu6+BK@X?_N"Ըb ӧBk\s۹1'c*UUpy^}}XE9]%2Ibh nj钔4fֹE(#|\=颦ōrŚz&np| Xp5綽f^V)E(.ai OƻuOxh|&(*[偲6UXS. -RA~87?Co:%_Vw wQ,kSZsVڤFr#M2k*Wֶј+|7`ߧj~H=`pp;'@]aӇ sE] 5u PiӔ:j_UZBpܹw;}IUmNmwe A*(HE1Ek4=%6 ]TT@@S? ޿.>޻Ι9>qcG|c}wq3^3F{{F2~%&XAȫOg?mk}rL:=E>4QY\D,)Fsͱڟx p$h s*]m%><'bZn uaSGȉk&`?9C縹kIbnqZ"u`b!]Q$|hvZA? o`|E)= X:Xo}_KRQmBm~(|DK@85J{{FsM@Ϳli15ҕZX'N~EA x!.D@ \`mDz+ӛY' B8zNlڔ}h: jXIX I+iv4 Z>#I4pϒ³fɲ: D@qgnUvg'%UiJrZ_n9g➍[TULt^X(<n~Uѡ<=88K"ȡhO&ӷźyæ%D :|(SX,EzQmϷMjT khL*IFADQX ^X[I J'ToW(TC^]7A s7tv&=p+MnwݡDUVX(I^IiG Mv y,"a41l X XO| DYuhmkwӜhO>Β.)`0 \[Pyi>;dj.k=y庴'ˍ׶],İ 8}$y<@صKUV~n%t&mcC)Zt=.>nbIX%%r3"*xgSklLF瞕sQo,_O0YSE,wB2/KZ~ |qj6<AӈN?]Ni`0Zdr8PywÓ 3}PS_l|K@_+k2c'?O^VRx)nT ~q>~ˆXgb*¶=;C uӲ&q"#bD' C+U4M;+@xWoYa/?$u`͛'QLQ823'<=M׷]ښssKZȲQZr^$߹pDQN˯`w7:G$o+`Dt:^WEE|jU>*-\nw=ShVbi7j21XaD!\_{ xj|)ʰt).@xX#mF*W4݌IXC5x{f{}Sd"JIs%uX"BaabX(G@;)ߑr]gxkKaLlֶxuy#r$pv #ah>ZYEUUu Uljzequh;V{{F9D@n3V'6|\< X([sfLu*.6YHF%gElpXG}`#.LtUw7p .I< haksL`A1響{Bo%=^H>sp3wN/Ÿh? 76͉>t8M&'@1g3ΐeu,pbX=kkܭy&SSGGNhy5t |D& +u}]o::ˎ_%TP w "0on^ݹ,P޷w_o1(`2OAM408 &Ѧ] n<)b駅 M&j}D"QF{EjͿlȌU4Eu.4&4lߊBiDP ڪL'bNB-M~^feWޘV&`]KHx|K@ SyjrAF?7x((`?)tp)D@5nj-.e,YT_$՞h.&u0To՘_E~o>tYv) T֬h߆nοCxK,ţ 9/+`\DHT_o X&Þ&k'UG<@7okP:d4g Mu'OkaO,;wpR $,͓eФ^U-hSۈU|j3Us &S$iFj:EJTUm6'\ޓj2Ea#9>c^Xfq)!P(*2VF"k:׶0=T- 'Hi&`r+XVt]B,LXA u+LAhm^ۍédxx1Su]׉Fy JjJ:,Yb"ʕ~|<7z+:!-+ؗ GTQvൾE: X! *a<ϯ:25YC*i$1X*VO}j^>jMyRG?-\h29 /O`4e(D99NM/#{Yg$ ؟Tm+X,;T'L0NCѡWgy|fgN@D$Ejn<97 pSx,`:wowHjjӺՃS,He23ϔeu9wbi=M\K'8lPhCdP k~|<9y3 =sU__Tӌ:x*v_n X$|euYJi?0])/f n]i$&2D~i%K.`T\_7fX|<O )~BeF z{ֆ ~?sdlڐO~s&߄SE(?EQ~ݧ\L;WN"_5Ωmc7tQY-&~ l(TÑwY,Di㛒SNuR=$)C)Zt=nk̋7xEt4ee"Z_lpcF^psO[.Cޢ݂|$Qdp;!ܚۖzPŘ[L rQU%]owz>w9]wL57ǫ_\^L{zPZgbFܔZ:@%6ٻ+avRēt=MZRW8G|ʤ7^^KAd! kcJZU{g6O$(3Ә0񾊐Hu+jTLyn}7QW%?~!8.DA̒9dFS]jk5d"r@_ .<ru{TVo ҿ=7ezYj3PUy3Ńyqa:`%˘_-\eL&M('Gx>K\SqqD^}/4nl͟EG^ݵf9dIr:PY^Q<";r6vt9b4p xX/M3G-m|NRBڷb& nrn:AQ|xANy4tJobxa @ ֚o(IXA0( ?byw@Fq60 v]$o4hvM":pe8,Zd29{Ejyfc'\6VrbL1 w46aEߔ„9ɯ7+?Dc"xM[i02ƶ ?4JIdȬ7 UEL"r3`D~0ش<ֶmͦ+z,1r 8&^m\ݸQQbbu]>Y3pecҥfsOQBQ/.,MMŨںR6: _(yI6W]DDImSP ׺ETQ) i'9\_X](*-(ܲW%%F/EQQl6A4VX*E툜"(@_$g^ӓ[{T$rp(S#Ŋ(|`7>_?KN~݅ZN/Y"`H~-TU}pto|NjQTL"%G]>߰.jkc{WxkaSo›(`"IXA<9>cci>;db'X'lLJI1(J-[f|SQbcC?91>%&]xaoov@(-^lL╶C@_+m+jM,Au4 Ҽ?>!tt?ȘT+[Y'$m~+R]Xe:ϻ4Fⵃ^F(` DI,@Z/~a%tZ|OX?M[<F>䫀bcR@(Y].W^V58f `moE~Vv}ߩʲId ϏK/(qqD~?+W o:;b(Fds 毀p+}-73L&=~\EE!:UZ^Ю734~JIQT&1ih<9*7nXZkJya+5s :D5k^=(n>|}GmE[[-ڵk{RƓOII&{ D2v(\|yj(QeH)|ɄWj+WF>1lBȟ| 'zcw`r)@_ef W[֏0 3r[T36)s[uum{0Kw/ [ B%ҘLNwN?. V>t2Y,ޑC5K].$A`"/D4ό$,I5N=[@ȟiCcߊf\x7ONi R46,7o8sM.ӯR՘Vc!rwgMc:vuK,SOenZJQ"Bm`ݘ0h߫z es2]k/no26Xuy(TChD}|͈S鍸pw]W7+,Q4W|"ly~p P%hm)zכ|k܅Z[ǷeTMͤeשׁʿ397؛;NF|Jĵȅ͉MQW5ule ܥI>?򦦥iW#(^ٷ?O 6G_/'?vbt yHA;"mD?#],Tj=4˟]A( W }[>Wp،}*;BX7Qe12X~E/ ;ϵxHD/y$\۷'׊H"?͠Sv_gZЇC']+G?|?Y;>Fšk >=׽:iMO$kŲ:D ׸ȱaI֮5&a'I8 h1C+/yӺ]o׉yy}?K/҃'|@xz5PcjF)<8q*+PxGxo'}+~M Wّmک`@(:xP׍)#+ԡ/$h&vg|W:Ody KCQ) |,J_aq\zk%L|c? _k+<'O! iPyk[sj~҈h-/ hxQDBeE!1XwT5&h ]ok#ٌI3HN6&p$\D6*s* ӵ/c4.!-y(A9p41d}IGҥ|OV(T_(<Mzy,zzn*-ω~+.=i4Q+esڶ>ڙOuQ$jj"e ")VX(KX6,֦ag4kVl I6P[VKZ̓#b0yeiF 4.JZ.V+[',IN硉Xw_߳V~&b !V4VnncOup5Bύ?[@^ogi UQQTҼ*ngBOFla_ (Ta:`gZ,|"R>;nWҗWgf:vLqY3d$3Xk2.ءiQQDf2 8Ct晲$3;xoHJbt`6ew :OŽYdW' TݻU-Y;SvW#;;;Y W)M5-] 0 #&HU22Ǖկ4Pj0|h1MC; HcZ,xNZ*ˬs+X'~ږ};2&e`J`5߻*`Z1ҥR֛?}s0J)rw7D@Xƽ9[L_&ޕ6uFQ$9_mM=L&\M0됿tC$Ej6;cY! "<:`o*nAF< \;V{{YH[KtE7[Q]ccPAƍ$w->P5tKtB_ z_/g'Xh.5p[8eˬd)oSyok؜y{/\ӧKC)~?4)zB?1syUee![ըiF7&FR}LK>,|vV)l^J8ZT&`A| G1 OY+,OAӈΕeLʀPٳGӬV5m0~?57g!INm^mWυqvYca!U\l2jjAA Z6ٻzF)=M 8xppᵀpvuv;:1tg)`N"M Vł;;E^?}'#zꋛ޿{ꢢX ܹt}A˪U(mڤDgթJ:M"7ZRSK_M8 aee APO$u;w. #MMj堿2c<Z/o9[i)&`A bL2V򦢵Q ,H"O%0*`EŞj6^'noNoF_s Բe|tI{) _m؀&S$/CxZgbNi`@ݟ8?e)JJ.8"Ci9i# XD~#VPhNp Bq/)+6Պ 7.< Xve;bbj :Oƌ1N(%@X^Qbb<"u>dE{(z/ Xq iDqN'<eN7;x/0Xzm~TA7,[f2uwNfȘjƅ]t7B,\hL<{ro{q[<ڟy_,%:#X".QJ ֭cc^ *F@eeWM' {QztV"n]$f+*Euymv^j?^!@$e,Jh]xj"a84l65*H7 08r=@8E$\Qjgf2)X11Z3ΐeLʀPٹSUV2L8u8) R,\h<& j]6hޏ۹yW P Ըf| 7 u}wϼuH1|\y:;YXE}7| X XE }3RϧVIEQ$Zfp^S r7NLj{:3l͓e(* ^VRLyk"t;{ IJU%:IrY ^Uͭ8׺֚Gm32X 4I<i R|l&7Wx~5b'RЇjww:Oa!GQ(<†_p+PC6 IX,.TɖSwRƒ%&sCtuI(JL 41.>_:?!} 7{Mz?[?Pߥ?*Qq "P}c;R9"u|kMKwzyPM#JOsoեԯB k,K^H_:`;ǷΕ/V ToVVkxI%1¸ ֯ccx;k^e IrRR@ųߖk~B_;W)%_y)=+Cb!4JBUeOfc&xquN>瘻,jjb'RO+.9+Dܙ_׶|"m}s< mc v116[t4y>ض)(u]o!Ų}P$ ή]jUT:@Ig]Q޽7.nǦREɡ߹͵99zS<'J3U JPX8+ ߅~1vq/+H$5=d_RL&**^)ytjx~f̞[boaR92} Xaʫ^ zo $ie(c'X y/۷kZTQy9V ĺu1PXxGӾ~ckz'T}?=*^9 Eӌ7y.TK6i`' sd9VׯNRTS$䒆Ox#a s\ev,>}7塀Ś]$`cW[n2Ļї#~_/ZdLZ0Bej 7#c\|Nj^uvLx%9~jjwƿ1|Bx lh0VjK 7֦-Lt ~BC V@I XwEEȾjWWUͧ1P&Sw7)sc^IT5:P s]ة))%9wWEm7~|Knw/9֭ETS&4GU_ׯ7&ő-4>svq..{$(\ߓǥ$ozҬXr/J寀E$ID--(C9gkݙ^!WLt;|]K`!kWw٬jqڗ<߃/Mo'&fc @(^(o[(`& K4l x0JޒJ+gS2/!qU{yIIk߯ω>@Qbb::t]X u+x~[rWW ()4~VTX׍w.9~2 G5 U2=):kVyI{'KbRN[qOfc&UWw(i R,Zd29SsRo$uoҷddm*e!Vy|pƈKNun=󺻅bj@_9+JkBwtv&V_OM3h#y~˷(j%eY:wLr(`I }=mO;)cTIr uk+Pk#9ɈdOwݵܟ.J;tW;5W_%<{,;@ukUJg焓rut3Ere&^a|+=KJP7邠(__?h3x"-c%$aXS  l)m\'eLiFjZ*7VD9 /)ɸ`8c,W~i]b͙t<+$oV~^qz^r!ˬ+Jb0׌9otjQi)2R.IU%%_"{3Q:N٭;=5'471a!n}7 XG{grY_ZH_l\X?dc@(lެQQD o_Q{=U+@W.zH_+'5u;,#xlmƲN:jyt$+;+`UU^Lzua .q<x Uߨ.|m F8 uX)y(4@ne2E"cի#cx)iskZc$@(x$\D))| 6~ߺo0lB_ ڮٵ+%-{f~M$!~XiCD+:ycy~Lyf8r+`kea,8%˿Z+4VU Wptp.V<?a91c,#a￝ Q4 W˖aRNs1jfUX ^Ҟ/twW2_knUZJJpaN_,euu(}~ܔ2k3^\/@[RQx|0wԆ7?nԌnd#Xu]Q$0`F8pfLJ;-` t&`fBw/ރ(`ҞJ؟X 2231)Bgc⒦c1=[ X t-2 X<9?J9k.a'XDNxwY,Digdii5!wjݬy6̌n sl/rs#X@]isxK9;|^mK2Xp kw:o'O~Ue&/9  `yucUd>fr YtW{{3-~14s&LEuMgթYY3Zv.Ֆ.5&Y&ʕJxַMsa/nH\-?|QqVyc.@ 1_g<>3 v BXO({ZTug22\yfLʘ>2 t>DUcbZZ,1W0̑3IX]].ID6) ϫ!!,^,..]*wPq8t]}ՃZ/z猚ֲ}՘~Z, ` ny8u XazI^%̽a X%$F \wN|Qɝ^=F;gbLʀ[W&.:N8uޔG?YU%]"v/iZ!t̑e(&F'Kyh!@(V=1qfye ŋR_+PtomF8 ,`u':Otf9z/yMMs vO?ne,wo !wnYAQ$uE0)B^M&/PU/h?/1W 'n^o-g7X}6QS.EEǕN3@ptLwYxz5߅ja<>iO*/g`u``]Q$Pu]׉]^sLUQ~¶\뼶6juy訨("Iq ]siKo ]/?sﴔ3I'IMI: 㷍}fbUi挟6 y^-eb{AN^i R|Q./u $Yi)cDfԍ9'-nwD,)Çb+}/ ,M' Zo^/U 3X ݎIXڞn;g X:O_/;*2 (_(<yzyr͔/?m۸3m>]n7zuU7`g7nQ**soUɖ)g8OB5[ SՄcVǷ:&`A J6@8 u73a[ h}UW:`0XJA pY'pDޞs,wW?W4'u`&^$y<@#E&jm{ݸoG-)/mo/u`i,}:u$Fj|!t:;$hFUa&xmGSf[yU d%H{u:xEWmy XHlV(`_^k<躾׮JR8L6uWjOQ:Oe2 VRH!gJ9/N`zzEE`B:֮*B e8TК3GNDcb@(Y||< f<.#eRF=Jc?Opt:AYLk+ .q<‰tVifR_:`gc?LL華ߗ|9-\h2UmLD_~<~RR~GpNgg!ߝ̾?ş +JL áb؟ pgŠ3d !4(Y(<`.b]_xǴs_4s؊ "+*sr_-U 3"~)59)aVZbݎs_]iiw8ʻ{Ij,cRFJ Vn3mI ;ؿ{5bʢEXJd Du}6Q}Qܳe%݋eۑcȱCW ()A Hxk*N*BpgkB޺,zRt`!k񉉬S^KY޳Y#^P:@8N`|3 s&N{'xcO||L^:*BO$(=P8lc0@(Zeyw̉3֔kO1g\3u JK5bax1t |D 7T6׌A 揤wF0 XRv ,֒vV 9ꜿ(Eڗ c:yR[egA&O$PcU]g<Nɣ*+1X<2KM55`ݫiV+'yd+pg y&:MM.D7J{yB'hnfBK|HxH|( IM){aÌ޶\)'Z"۪# Xt 5ҕ(`@$Z +#Tm(|ӲW<8rߦe3Zv~Bqs8@(ZS}OM>|y'_}ߤ[Fn>frE7X]]O?Uhi R,^l2a^ߍ+D#Gy!GjL QkWc~?업I~37J3^_+D0 뺮};f\L`jOQ0TPU]R Ǵs$*#fL^0ɪ*S|ߥa/sbcJ//BoJ?>u;yRC|ۆ6wu i-v?$W5<[,G nXkv;+:lqn,";FEULy'~?q Vx|+n'RUN2&9VY$i0 4V ¬);[𫑝{!!L1g\Y:37+,軼<>EӚ~[{ XG_'t 'BnN%}̟OsRTu.9!5,|O3@}p#6 <*.eLʀP[ZQxM'pc)qޚ?Vs캉 +t}WQp6Beɒpbx.|^`k gڏya s@x$Juߞ<0 #6v0>W׭hn G"~|}{{;?V_?_YKKC _¶3z:@is?kcaWiIIZ sʲ: Do5.!eHY56}֨ qM=2Tnx)~? X*ӦIC!:#|Rc#@(\cwiuB^wN͌Zy d>|WZ=0&G`5oW7NH``PY'{(`ޙ4T!lY8{n2aE_uYY.wIT<;d! RZ䫀xꊲ29~uyGUǔVW@QLr 7oF,3S~i RQ xu)3ί^k>@xݕt=::t]ۍ_H^)t<udg:` (`^ e)Y8owPaK7nO,(`c&{QzuT3~X9zo`!d@!+L-Ђpf ߅*iSo+| VAvrS+``!t]uڹeCY īwkP 9m~f---!+!>Tn4/ұ%?vK;bbj4>R_:OF4|=;`!KX%ZfpWx67Y ۗ~vl~72&e@Z(<ߏ,ni=xR#&1j;+*XVW$mܨ11@X8'=.[fˤ/8:Vy>b;Ӟ+8d0 #1QT(%(pjoS^!OTinfpW_koZ`TnZZRRJ 4013?L$>/]aX Vt4qWvn:ʆW>Y2slת*q2ɣk:g Tfϖe(.8E Y6 W L(~\V~˦_U_:!cGq),Fa!뗴,=~ X!7pg Ʋ:5V7HG Ov]n1ކy?//8剢O4q(z<@ Mو.pjCOo{6'8 X G﯇|T"8" IV+_!ZG»L&qdMvLۓ?'PoFE&uIbx/J4s$TL> H WWE{Y>\< ,\W00OKG "QzY{-pD\'#ESh綀-P8pu0dd$%a!_6ٻ}pJm}3 XeL&W-Ax2 0}dbx1qK'bN|^Q xmEa"Ųef3OGP ^ՃbͿwZ%@dݕrM=ڌ(CZr8Jnqd(P )s!A""THNNMe^h-ޅMj\\cbcE!u2|>'eLt\2rix$'e㺎?zB<^b1Y(82yq<QeM&In7ј1|^ FXAȫQ.-\[YˆK'xR!+``GQ(x@E5 %1 h71Q|J//:`:UH ˇB]ukŘ|iXFQbcY x)i5M5wgRNr>,aլDfpaBg HkUdFu4+WFF'~3͹- ZNG ^#$w_.z!BCRW)Pb-3355=u fy7(7͍]]#m6y7;JTe'XvVflYv:YHmlD|_)ښsuu%IoR)NZs~W2 ˸qKt&Sg'47F tjkud" Ub&xu_ycm--@d99KQ_3.b0 #!8$[Y.ܸbv& \^mX5{<#ÞATL`Y+j¾` _s1*[%Ś  ed$'c!ok[oE }c|9l,c J[K+Jt44}:}cҔѻbM35~W06nq 8JtKk+7 tfM#vkrB3^+[Ak^^(g^?Y'UU-o_VT,Eh GNuԷt mJPQ XGFiaVNME ]ƫ^G ꩲ9v{hIMNf'X&ICSO __RP:@]%hjWJIU=z3WV._m{b]ֲ/TU^q@-fm*o7[[,1N$hhi;W(Jt+W=*S<>&gϰMJJ4bax €]疍bKe&]W>$r=:Nɬ0NB߯? V(`\]yNҵlwLw([yeeyRiP"zu`$$*̙rNU5*bˈ7lMmmm<_R82f89yRś4t(<( _]q:DDAPCū%KX'in6ܩiQQ/8)?o:%ww:-1WM^)Y2%r8Xp7l(&u|M@.oڛpFDT_:Ottd$kny Xvڤ?o]vQA@:Qo˾jrcGn5C||HKM"y`+۪U~$v5[0)L4z518׍ImB^}狏5Id.!!AeI7kAM3Y^WyyF7[a@0#~SGi6 XYB 5{7YVdh,NUeh&Uf&x ͏3r1ćć&1񻢱x~񅱒`5^+nؠl/01~҅'RS: N7&]U%%(`A񺊰AxR j[mz]v MݻYC`@8kȨ?3,`k˗NLlyw{Zb"<:xIr UOWqqZKM{h\ NN{y3 7 n6lPX"CEJwk_eet~V[Sie䯀C%uEQ(|S_g}W]78eyxb*G9Sܼp1dHFFf&r}]]^ɲmu*.ea@ n[X+q*ɣsvLfWUË̹K{r}Y'45>R՘.\hmժ(9ݙ=X=l_uA^Fg'*-$,;^'`!zC6T<:Wfh)( dѫHu vCdddeNpx3I\\֞o\>˱uM7O=7u`͘!n74)6mRѸSW?ɳTWSc}^rIDAT{:!j?&`#X~`1`ٻWӬV}_y5T%kLKȗs`k#CRvw D,)>Xez"Hsk>†R0 tLNt 䖦$L룦gUS7,]j22 ܬZ䫀Y'֟ЋI`‹ǟUWg|2~/: X08\f>0aWq<MoNdPHNU%JL4~M;9(`Ҏ̧A3 XZ-|:`CdF,l8$9`p2i'zY(EduW[:MGş5ܢ%#YNr}7ƅF'áH|P7 s&8,l^LbJʱ]]sWI VB: mNB. /ձ1PWk={XCnnz:VB-ϛ|fE^ONnKο%$%&4VƤ M3VjR9"Ŝgry9~?Ez ceo/)+G>{̛喑3i!ɸVyQR>\y\toζR][qEf*~WD\Kx:1+\ U3Wvܓ: z9s Tqz $֭{\//TSߘ4ǫYEg ݝ~RR~(ۊ!YAa<>o'f"Эӳ䯀udbxQTg˻їՏ\Wwet4<LXX Ž}NDLYX3  X<zjZ'6_5%zul>8 א!+=ݘxu,Pظ(+y5᮪<s:Oto'ZQ:GN"I"#io״(r]yXqݍC[3F;o1aீPRytL^T2:Dcsg^z%Ik2Y!E"]g"ŪU|O uoOIGi<7}QuxMڵxUx)=u67ƜwNnS%%fN7&`L|HjS0 X?Ԥ9D+lQzpVC o UrjD9 2}r:GEzBX=}FENjq `'RgKG8/{N+ b|яݳb'<4uÑʅ[ u=U%ooVIaUx+<e ,'mi|Z2~{uUxfN90dHf&VBޞ:D;aSS;gt쾞[SfΔe(5XA VqqDF$occ`rҧnw7PXin/.x>OyYDR#3V`0uik+`< XÇ󹊰~k3MQQM着X-`Y|`6,++;u k~u~w]R@I#O Xed~|b3 s~3TW3XLv|\lK}\q;kݺ( xZ0Vu}kچS`?ܟ2&s&ZZt]t=0myWXw/w6M@8_:UNv/vMTFa7+CffNpxGQܿagb⸇jkc ԕسb)KR2'\֩/;[hTIe"Ň+::XlMwNF#h >?IZ~˿i&n0$OP m?n&30,7vsԦ(D´->u^U։ _:0tC״["o*~%%j&ĈSui{(./jUU:Y*BIKh4GpIFnt|^hyCM_u ~C%pqVc% 'H `03Uو^:ܳեԓxX菂O3Gnu"4WRf3ɂ>9EE|Nwk۱9O*lKX]@D޿)nh"5S ڛwt;ujЌl"IEQ$RUM4֩~\IJNGchȅ(`@p;S6Æh۵s|%f ԪU~? 9I=s^@/|MEjapDOuTݿG2G>XB}ߴ\~F!G0R]EV7㉨H|B|XxBi$w}R""zR + !jӾ$TXPBM$Y׍1(`o"x~ZQ}: @t %UGD<"*)QUhdQD ~JN}riB¤u#Q0VVUU H^A ȎU&D: UVض*%uB_ ZMd2 2 TVjDך:MbFڬ~y+KU5AwF':;xGc1ofc>8~똇'67 o~ǷE'Ĝt_%%f6NHIE!JLkίo.hTww $)_:^_: 2u ë1#%%H_: fs{szzwҞ9S$$JJ&U%>9Er|A*  SNᅦO$D65`0Y#4W'?m₲2!A!i&Ĕ\.`(,sVݾ9;P "mQbe%!X8 p1thffV޻/[,U jh/©ORv~s ԲefsO)^co* ﲤK%MK:'arh~'.E[%exK^i+ \)QZ+q*ɣgϚy`p9+W*+47@:E5\ӹuݮV+X`Kܥ_]:GE|+ 3vHx1 xہ'c!8 1OBGŲ/%'٬kQ&Mu￯(11Dݺ󊵔5[<eq9s"P"n줗SNwVY1b^MZY>2V+y5ygZS_&%|S 䯀j]$,+^ Xލllmt:S{t[UK侙) yBonÁD;::`De\ Ul8d%"`Ƴ߻Gq&\a:;]%nq/_C ٥zbqr#wf~,Flz++fzI;!jQwEGEc.cY\߯ϪU|OH;'Թ}C%_nw=5S#İkUcX,d*?>u;}Ӥ: @ jY:K0JJTb!6Ly\-G| w~e%%$ƦRݸR is+`=:MD|?Rٿf Xq lo-//)a Սvkj*uN08VG(mZ;8vju u-YKVgbz7njo?.fKԝ%F}>Ӯ^WyGUccV jk#ZgV4_~iQQ/DyI&ZG||_Xas3̹ENiE^(qT ~fՕN?uaFKɁHj詭GVzy&axRFߛzJK <́wR/!"y\ ugNllݍӻlmߏ&:Q TzIZ]= Vkݎ9rq?,Zg^=;jyG~Wcx|ǾpRo$"' '""*׳["}'8&")/)Ţ9sd$JH RUi RZdLHJD.,2f:Rr]IN]E>0VwΟ/(K+WqqAO*=`34FNZRpx<ߙjFR\}(`E\AZaYˆjtY6b=ASRVwm;&Y(``5fR(E })l㊮_v"*x3tl-QQiλVׁ=rO,qju-ZnߙW~ O@D|#jDn&Y~E[]/Z,4$S\l^VXi']"W5-@S3^""u*9i$ONT4S}b|v{ kH|i\//T3&?vҩ4VNpdd8ڨ XΓV$#*/W X ۟in EY6Ie_{}bHNmnR{E^/fk!eY$"EQa 4bvÍii0{@8XG8.cTT?3z\QQ]k7\o9Dm+zq]fskZ=mGTnnS1DD(%-ϧ6|1""ׄD߅#QRO;ө5l |DNjbo/4)ū-RK&x-vauݙo$[דLhMjTukcWMLDC: &ᆱ(Dݺ.IoKߎ?+$y͝;厊rD/G4wӈsj!"4"2^w"zUGDH. M׳Nn"Ao: իy_=h:֙W >^(^s?e·_oLjØ*<I=fƌ);Ʈ(xŝ ;.!Mh>"u]uC`! XEEN?|nH4 •=WNgz9qN8 8,mCe@a!Df Ap 3RS3(^d{{Zlw|tt-w?z.w|!:p|3:u'ϵfSsZ$}dD"*"I^DDtqc.tso6/PNT\.W;WN8 (v;ޚtvJMDoۤW5:O+y>LUm63$ )c^.Et4GG6)?nuԤ^{%:u*-5 }*Bd uu2rFsE>6Q&: %^BRFjp 2SJlغU?9bU93dBkRͩiiD:G͖kcbU(p,16[Mv':Zߤ)H7CFDDדQDDB#O]v}dm4uL==S@pu]ya&xdJKKwc`$z!ԫj~Zqq*BHq){ϣ7_h9=xof4ֲB/&79|O6oWը(il%Y4.+<+,GҠ+`-|E6[Qeg5XEEY,QQDɩDͬSiiDDi7}:Qں~yOTTuuZN|؎[zvw11=k\qnzw>\ۛ{w!냞_N;[DR-SǿIzLkp1: DRCnyr[:i T,k&f﷟ڽR?Vh6Y;B7Ϗ;iJe抨SL SvZcVREi77idLi^):ΊzӝtJ؅5(b(" ݵ}cf~5~Ʋ,~|w9|dPܻFl\gA芛B~`0WN+`笞82B%%` l N\^ҷB<:yQRf83!jb[3"QmGSNݝJeCEkTګl b;TqV9T*]{3rf(!0qx M-  w \?X[d-i Գ4M7yHdC{-[oo.@,w=xLEX96ͳeZ>_+\!X.T2E$ZNjMzڴ1 >ڨѪ$z@>i JKF(HI@T O'Gͮv ȩ1 \5pU,K aW>j i˟(jj"!Ɖ,LbsUUv҇oG9 L>xOsAV ºU׹+//4iC蓓C C>([QuV OB4ij^8*R\':lktz9>36:|A\j23۵jقO  O?|3FcO΅BX8>>$GVMiШTl,TUgwj4<[\*d2r`<󿻬1!%\`EnD"4UVEy:E9ZT^/h*$s+q!ۤ3e'1u) hZ1e~[5Breh_w|듅oD{Eߋ5'G`V:WC=V^g~.]8.E ܽ22Bm޿4sOb@tt!,`!2|s|CտRUi0Fj4i&Z6c^Vb`Q .UGʟ $9ОdžPKgNM!\iIpj~˗&W4sd.ט f@ex)n%Jv; |:Ev,ElL 7 4G܀۪t&WKwk4]f9f XB52Wh%HHI.M{ܫL0Pդ:˲ʡnA_5푭S>v*O-otA[ l3FN|jT NsF"Ջ<Ӡ.\>C ݻAj\]i¦N@m G A+n"M$p$ >>**:Tzm^o:j0J$'Tq B- 3#tK: jKyTKRii^퓕;5ڞoj,`I1}l˲hJ!^}y{ߝdvccXLd1OD|؍7DN'LL\>)#$*G8wp ? sA95~xj^.sR #PT u*PKh4\|i&YRZu.B͍>P3ZaPT^V.6 .h4% A,f[3˃Q")"* ِ< Œc+H x[Wb[J%iNY5|u&Ľ~ksjW [:ttd: B%ڹ3Iҗt@ܘVcpBVAp;IO0V[xd24F|S?+{TVƪ>r盛j\O/JI'i?,jKBW~+2 [|?w,#*`@ MڢOZi<@F0yhS[|yP,`q-33))%`v: B\[+&^BXB!S*9Q%j MX[?SVkew0juG<#‹ c#׏!\ gwP<.7ݻS +?Q˲jU R| Eurh9~^`_|UBf' "hٲ$`߯)?Yvlh`]B}V[婆ZmߺN_ן'Co )kl*V4-D6)Pk^PlYgD}fCaUOTAďq.Wie\ ,+Kr9!u*PKXsygTi¸$T,O fHT?cBL _-Jۭ[~*W(7jV}7NiGI9AWetz!B\uMby‚9w VuZ-r&O^ n\mX `$@*bvKKN_O?;|:C\BOHTLkk5s2ztmMhZ:F(qp1 Zf6;y3b1?'T*BB48|ad2R~+5YV_a)vq_nwI cj5{}VoFLNN`,P؎4TֆVŪȴ\.2(i~|A$.5FS}Y6vrӤk<M'Jyۭ!5.g1Umh O\y2++m]Ѯ$^1s|P骬eE"dB~S.=}yoDRqMC}t,1"*:BQCo07s <~ݼdwʎ\S>紼AϮtsu:k,'=e-}-6+td;BRYE[v隲a:]AZmtK/R ;x I0@,׏!tu&51C6=J$22D{ظqB dgE1#/꒼'fNsJ73, rR *bPAGAmZym wl[0AǪS$ZЎO.INCdf&`UndYx06D-i>,` px X\1%%=`7o: B,KZ OI PKc39tJ$%}_U9hL6Ut1,}z=~+_+r6B`"z"nY*l  $L*`!,`P$Eϊ4Y~C-S5qGE\taLuA {E"T!.TT0PpM7DG v:r Y[LS~7{7#~UR*K{5DEA".0IO].M|jۭX1M5^9=$Fc]z3jk>| \jpkpdFIK@෕|Qyg=TWsF)7[ŲM$j.\:Wg"=};xuQQ11*\P8n7NG-邩Wz@KB/߱֏ΡRv?h4]V kLkj+զkz˞DfQ 낕\?P[yѷI {wKeZ"P~~HCba0Y!WPhM | ;ٷ|y5ePhfPS,]dɷ*@ʩ6RbZfh ja&r_P- \.Xq ǃP@ L,1]Qf<\0 )_H$׾$ F$:U㕾VQZ-dÓ\gA LSN'yWKϣ n zY@g0 :4Ծ}JJZg\!xcbnXrAyBr6*bQz^_;4~o۬2Bf]%\\?!t&p| ; w4ݤI8 5 M% j4F^ Y63 n ١F"IT@'S5V Js]Ф'F*M  @pz5_ϩj"˦ďHJw8  8O dN Ut2ikCH( 4򇔟\]=WJve\i].A>I$lĽgXV X4,t23 zTmV q e\Aư/10Nq;X᧺~=nݍ߭47: u옒, *>I=feO B-_"SU} EqUōe OjH;Bs^"D 0|., .f6;yS*j:SSh4aBa۽ 5F.(+lnDwv2#jEFw*TR*C LgP X6J%̲cr8$nQX-]#}pPhZkO֞M GdOJ[{biWw>tFmlw:EO UWJDv5ZG oΏWWPp,ET7I79a}cڽz@ nnc@m$M67\I`0 Xر]&bl\Z]Lhw)oGAs!f;AHnF݇Jeѵ{ jިb0z;]"@\փjlmyb1̼8;xZ @-Qvvh E 2 R͕A0~NF:ϊ\T7ҴR 0c@CBZɂj«.mL![J C?"̧İ7e\?y3PuqJӽ͙TU @^`OȢ95^9CoWt*p4AE_u&mB*:MYV"у[A":˥`O9M*xZ@ڒ`p ".\B{.\_G[/Ν0iv:N[V+J%@\\DDd$@EE]]m-שkWt S 8,;k>&fMnU^u.P\d)pU$RZ4w5G2 aq@M$(<0j{̇r_"\'ipelf: j-CWI iNZ qI7~:⿘"%ѳ\.ނ+`ݡI8ZZ'hZ*:Miw>W7jaѦ`O&e_"z.RiY ɢO;SPN}|劜}0ЊqPt ùN4.дX УEa ,V,u4jckպ$@Vp XUKc2 ;nuC$,,`!>8):-} >~ tD AADٞ eUUS [Ta0[,#t:&,  ~xGB-EAo';ٿWe, n7@b"!d+V*@0[ɏR =2,k1)U\4Q02rehj~%h? ]l: jK{}%nDR͢o\YB.kR6(˝NjF, Z!N*f߯zZWnc[zd|OB1bb ZZt4lUh4p: 3BdIZ0 ͅ\i7Ɵzɴ O:v}n\j벲226o>p`n N+j#bciA5E v }+;GH7+k4%?GDTU%2.Z-c"Hxi4W$klX^H~x4M7iNB͇aB [" dO@&,t 0Lʣ1׺\3`:~NW60 r߫zE[A=#.~C3Ңi(v8)D7njE}rGZKC\O`Yј>qF݊G ÃA|K'o gcR|8RY]P0oP+/o >j0Hr)8r-KUVZ-z\薯 i{<ڀ>"GmIU;ܖc:Ղ LY:ݹnU] 'DJ>V)Nq8"f&>q8j6;Ac⧃AG؄iZ,i.݅ 4-$& ) ϋs#Vƹ,2>u /#-S]?r.8p<($++--#pSeӢs֊yBMǓN][:l`-ݻ+wՇ?xأ;W\dmyttpf )X,q!_sGxRKB}>.cX5|jQMfΎZ"h sj˖. ]q\@9x ,J%%5'ۗfƦls]zTi:(*VOz[;Ʀ&q8_xh뿷KZEPcST ߕTM/ը5!+! Q9 7mbj :O[Pdr9@RRll|<@qqeeYשgGo=:΋:Ad:BmߍA%ז|`0'9VGDT,Um4/j` [$xx#t=B!󽶟l %x$g$OG> T\i:yȲG _F|fDg1>m8aj͒۳ DBǁj e) _A4M'V8],ă1]c) :r +T"3"TF׹ S! S[r8"VtUG}_! (e#flj0M7\4V^Èq j$$tQxeeI l@Z(iP$\`I688- `+_ 6߷;efb Cn݅{*~C'O*B};MH{_j.(#2QP<2AfeLgl-Ӊ,0! {̦b_D>ٚ"**t"|Р,Î4TՅ |鍊zsx 3j b^8ݐnj.dY*pwHdr !Vj5I)qq/o j)Ypwj[\Sr RoW QQA"MSGd*8nRrw8DǗ3֢+zj> XuȠ(SyiTU],IQ^^ !$y畁ΝsҟXWuҥK؋<+s[?djI:{mTwDZLJZduÊ>}>:/#njy+S=:;vaz>hdXB!&X;kb>SR' v;G䣖);uEq VDn~+VX=a99" B||y疯SO:B|@`  8[jU-/x)1qgJig5oRX*.zV_R1;̷81{*~Pc X|S_f5gh4i8&8a;HBaolu׫խa=j|s΁PKĖ z !+"KMq{Z1o/E%bQv|GRo吊Ҹ `Hu~Pc&0/X.6Du\\;aDͧ2tߜȫ~`Pe;󠶍$PI1wVaiihĉ #r!Ob ߓ_"nUG$#&/.2YYa՟DF.vIZچtٓ~ѻr)oXSlKſV6^PCtuef >).]wq-As3gRa"i&sB!s猌NPfIJ`g Q6IGONxi9Ыׇ5}1?-^QNa> CNsoszXޞ@aZZ w'ŽD( טg D9,[|0^UQE:ŽI̽n7VtB-[vv ~N:$ t50әLf:EY ۋ*U_^ķo9FEFr_-=X {%?i\hiNF`6G߂=GoSֻw}?޽k0xzO!g}DYlWM$l~,[yUXC؂چ׍GK{E4,Z>\n2eS7%KZppk;RD6;~tyH?E7N}Zc_%%?%ZGWWFE\tUJSu:sI!% 6l:n22:+gW|}F󠶍&xcEdiV޶lKas/,ݗÆEFԑu^xM|t4(Sr)pRBƚߥBapuB!BͥaD"Çϓ2DAmWȲexMK!M2@Uw+@p,SK~J_j͵0p#ϊ  N"#ygDR}ؼ>O*:j#V.ZSAG}=qZ:,`5QBoa՞=>2 6Y\A!:"?#΁O)oPxxɷ~.Z3mř^>:_HƌYG v3+Oߡ#8!PR{ > .W6L p""B+jKV}B(DYPeĶ+0A!>4S\ rvsDwu|aq5_'`lo ۠$qUcazՋ@`ٿy3yPHxվ}JJj*ijVHJofWnj[[g52ٶ_V9@kd}_Ǝ٭ٺo߂˺<{?"k 9.Wx B]f W zQ/QY8B{\ARhM_.{M+:OSZ T= j i4M~2< dZ/E^&2|t&`Q?/Z*]tdǛqb'/3 >&׭:]q!Og?(xdjцh ~`X\M{Ҿ4]9t~F=[Y5`=> !!@ FBs-'$-`5MAb>\]KGu\^5Vv \A“vؤav;Hx=B-UHESUS$ X XdP*!xDـ* X"_Qyv}s\ ,`]&j\ד'ge󠐮]۷( !8pAds]V7~t/D,:tKݢ.#GyÒ]_|g``73ٯ|!{];$eY>2“z%jC.qdD,N@a˸Npb"-ny3="D C:z&Y{#qh6\=hw__+/'`KUUFQXBWb21gt&S6RՔ4:١,9t<(DrD (8^EZ$: *"KV^d~cĈYM7p9ĢW_,Z*ZxB `M6-VEPꦛB4(*bY JNtRE/P6F~ :BC`#wӎҵ J4Еuk0P-nySe uDCU X #8,PcedVM=f__x; }Q\=xr&bׯ:=ڷ:BCE0; _utew_09)j4V1v#F,v~}|ذsG}831̕*W*Y~L@!.cgH' 7N'^OMsK E=aXl| '_$rb?^Uhk{"B|^=witB^8 !>27*)A Sj NbctW&"◽냫wp/3f_^uȐߊVNXcV!Peg;fWa& x: 5/ƒ` ˴/^ tqaQ6z? []" jF$8|ad249FxN`?ڲza~q!jL~.-*B:鰭$Ỳgf VRɨGU'N@+*΃BT*\U_*ߨp$*&^.:gh]5vO~Y3zMl *v{WOc@rj]K/DIX>G, "D#I.O]DuPɴҮ4-+$o%x^,X11JEOYi΁Z v>U}9LJZB!e{6ܱay*B'l ,=e/sn,Nji5lzɛFtIȑV JҼs+R"B9;>qcdf }~: j=~/ U@dڼ</||&-*_hPb #}89 X͌,%K֬:p W">9qe7p_NnMYV._0ѣ}y/?z]gO(\Eu Psw}ri ޶+2AH`X: j-Wv>0|PU=~Yt$j Y_^ lRQ}ʿa6&9,A34t"ϧi8GEՒIߝWa 5Ap+[eF~!yO).:_Gf'Yli mC-R)鉉XgA|aN8{i4g{b^u֪{Wj49ذ7+k֫Q~Ү{;)W22\2Z\ ЕźNPq;|/{Zk9gHT'B\. *⻨ + q)'j[b3߉o=74' ,]I!?CjMi%\),+rEz@ X,oTZsi`}/B-` 5 4s|OG6+̆a}u.ңGYYϗr^ynrjjf3yau9U&;N|x⃅mwh4nx8E,PuDC?4ݤI"u Zݡ3U0a"7|QNɭb<׉n j8MtAWXò^JJV]CQ{Q ~K\;*r7ϥз_ LŽ5Fy̍WNU3AHP|NŌ]Uu-Ł)x*rEn|8'OXj =?o_8pҤЊ]P]dy 'YT-Vhw𩖶{w_kK}>\tU A uuV.ej[ 5<q8u~&WYVޕ+< Xj1w _~ufZs.NJ^(>vL6ZE'OMӷǟPS JLjg4I]uV;=tKZЈ#<?(YM"y*#~])PK~}hU_}9~c퓦< L/lw2/^"j_@&<0%įO@-5 :⯦(]W#?+*  yeV`g03m x{G aٕ ߾=V `C"$XF[Qw:o/PL l/fs5K(d0$w{0>8]((հ (>4o LG6?E.2L;b6{8~H(?EͷL+UDmb(Nj㩂zGEB-YA)'k"q !WUBADMdY.?K+ۯ ^Ւ.,VX$GO*`5%jH1 Q g@G- _-ZN|0-v C<Exaffrrj*sEE\BFe"n G_]\\ fߤsU11g,牉uU}3;PJQw'Dkh7 € :c$ΊMTWfNP^qcPWoE,M'lWN'hNjnT!MyXVsBjg$ٗPcdU|qrʅ9'&޿086.^ (:3jx NBm`Xo#|Pm\'twciPkqL¹s^U]tUܬqO!=,aF bA0oxBp ,Ptלh=Mg7g͚*b @,"5kB+E,JZs0Np%O.x몾ݪ΃PK2~JJP'Vwsr"+qJxEG=\p]]l"; wU|V{*)3,Pc|;)}wqvВSu XWO3CX~yӹs׮\@Ҝ?p̔f*=Bn{|ndCV-ݧǏ}ȱcwd߿WӫWۦLF"B;/P'\o:Pױ#Ey\AڵR wgo|Paa  &] u| 卵:OSG2@u5yh`5Ll%l'2OW7 4+Z V#nJ܉;L!OZu GYYڥ(2՘PspMp}?RKl,yj(k"69:ud7_5jYF!C&URDhKtH!℥]c gvPPs[߫H77 z?XCjm_]9aPQt~?o!ԜVl JXX@ p΃zdZɃ;iZV*qI sqj8BA>^6TJqǣ)x7*'xO^zOi 0_pxdr`>B[KÆ !8׏rLQq8X6oM+_=.G{WW8u*aFv|Ɓ;ubO,Xſ9+W'}H$ig,THh1˥Z ÿcc<&4@QUU"@\@/"G"#8Qyߝ'b^T;."Ça3&`*cNQ=@t)u: !$t%O^;v u*5>)z >sFWT 7~B8`8r'kWY 2iB!KE!!; DjWN^yV-T(.CWquKϫxSU?jx׈]|_q 6pG@\E*JU+}TxTF׮o+#Q˴rehUEvkzA Z:' "r%,f|ժ(s]͛A%PqR$j;. 5S\ԩqa | Op!%ëz烗a6YB,`: YuU8'"сs3MM,U] ,X'CU!$%tKttǣ|@5[|Ris4rlKnv&֩}4zm,Y"~wW`>jp\_ɿm.5fG]?ʚ4I$ٸNZ+ztd3'W)-9!>@{OB]W"·;pJ1)TRŹ\:lKZw#T: Kf#$+bx뿍g  ΏOIoa!ש.JE .:\A4-2XuK'튊ly\:׋w{EEΰwmx99UXBme`_'j,Gظ"$ Z<,9A糀l\.`!ryO\! @y9V 2*Z@=YP!`7:Gk'9d̃K :};w X_*Vbjz_m=ڣ)pboB!.QxI׫PT 5].Ju6.&m?Gxb. n;|~C7$RiJHCv6'_ 9˾P\gAdŹWh:+6UpiQȅSgӹuΞ <>t{QkDӡzN /,nq ]NjI;TS|wlsU_q-TL1Ejpi\v5dW󌫫a#cveQѺ駇5=~çݹ΅BԩkW˷lٰ mj/<!PK&8NP,^=#jJٚ uөyLYayng Z&=z z`筂$.]TB\ z>cu_TY'C&2߁өr؝_~!;pQ~;w,/,˲x8J";i"'ѧ ! 5 Oпy@ܪ8!Fgdá^zCUxqH,x7Gm|䮣pedҤACa@׫Ra6}QTN}tEE`mг'y.}{0P!:\B򔗳HpMg${M+_7P@{u*PK^N«#_W!)f"қ<-)7˷zVTp9 ^΅B:th.- @QT*p8NP㸿Hn(x5xmB?Xk Ҩkk}>-#Fp:5h;Dl-pWh9; T*Usg =bBU\+|kq: g5E_} \gj Osee|?᝔ux +i`dU߭(uP$pR'a ١"ux _\h1Bz[&s}|% a:'B{3GhZF"@0M)|?gj^H$\@|}TVV:|QT5+Z8R󠫋e\-yAlgIqXj)(7+[7M߽T5MB$cyBHUh;:+ V9-9}ь4\q j> \;vд\uNWjuxZ`שjZT Ő XIAW&=Xl6s KiS0T͡u$}eI?*ߊWaЭOyJP A in|b+Lp,JA 5F&sl*z޹Kv y(Bm3۽qu 4V~~hax%|`?|>'O]1u=Z l3vВc:u X-Ȝ:_َ0΅B $rԈBzBğGc؋ ^Y>|D5̣NCN]du4-p55K۝N[Y:ץZ2T|P,X( 'M"h-,G^[P. =,s*5@qfGᆴH,ltdgݟ: Ήs ON\?}T"a`s|~&, d?ISaGy4^x\u5HZ1?q!LV_h{Dy΅y$f>cUXjaˮc V3p`nza g zBT" 9?,^ˇūA\"ԉ io֥ZOtlQDl,7Dn#O rE\ B1?| Y\?*wy _L$l\@Ex偀Ju<@Yf ղIOj6jWl=Bf*2qfy_6[D `&UOkzjSX$wCl߈:@i^Oi:tGL i,L?e1?bd q ۋR rxJ.w>%r9s-}7EqP XW3Tzd<2>߄'`v$=aeڡеOZ#ȑdtrV 3:=}aݾ.tdօ-p DBPЧOVV׮;v9rשjNsJҝ(nd{m"B1؋ $HEZjکVk(]~0j%e,hi3ԏ `u-0OwGPȶC,ON/B!+;;TNq|ҫY l: Bm]ܽQG-q%'um  ]"(:45Z.:$bGG3tHi)g\j>Ƴ*ЂmUGL(C`.7~Tjqδ scͯPv kE-~O`)?˪S&(9\,0IPޟQT0PQ0B,rZ-tN7`>,m`)\sM{c {5Z:䷨ M!Z,^qC'JWNmF%ޏxb:("jMkK`jRU U&{2GmӡWΤ,i.]JE"4eY`PtR5Yv{O]#0 f]"ϲ|=/HBϿz ^>Tl6Wf`Pp:CE,jY>q/j:Wa~Ֆ)A ^o*D0$B;J;Y)\ĖPغ:V*8{F&?ÉZKUUwJS^^h,B"##o\A͍ &Zϣ>m[r<pSC~w[Lmi6`Hgzs(rS!8 CӄxWl'D6AZPku7̅,ިm1e6Gt}6[%zT.5np@jX\?wܗpAh<\*c 5FF!|T|avVeK籀{`&\p>!ZYvC!lFe1ߵk}~T\`BH$"X зoNݺy\BҸZ'D2V1Bj{)t8" 1|cKbY,1QuN'+=W ty6;{MJ /|[n vW擝:Nw@oA="ZS?dF~k0XMo5ڵJ3b T t59,KQ *\i:{|7  |Eكe~@3Y `hZz8X! ,O ^06]8';*WpWit'43{!)* a;~/Rk)ۯ1(Rfa}Bn:j)xV~`Xvݣ#t/׹ ҫW߾v?~˲,A|?B=!>WBD7H> `w {~nI%z~g#l%eNYL(ڃA a$[`׏s 뀇'(*Tfn: j-i4Mg쨽[mv9}uP;5/aOW/\pe`P9R(t8NښUBؼЊ*8-"2dXTp5w:#@ƭN'АpwM$+2S*M/9?ޣT9w86*I^Z*wXth\Wc6_,) GJK()JNx Z0r5kΝQoxlh<?C.~PjibbH$ 4%6BʓϗE˲v{sg'1[fow@Ć wIoCCjڿZ>^W!N`ϟ;k0lJs\,.Ef&!n\нkZhs `sՐQ^CdDGJJ΃7 nĎcto8~M;wIk:!Cz ?Ϻf(Z&;']]ɺTc>}ɔ#\'ne/t0 >Q :LK#r9&M D9OMZ€Rxs0xϽƕ[y"VQqs1iZ.`/]I1LPX(&٪ޏi?:j)V v{ϡ[w+wX{VK6Ri}}-Z0ϷlJPp/ 4k'yCg6q“7BX|Mz@ŵЫԋŇ u'G#nw|I uScYd* yK-p7+߾frXgr;u…#kcb-3cGVRVO rkJ(FW8q!;l<LҀM#L cgƍ3ŏKj6+7)+Xr BþX (| <\x5p@vs۶J%@}}h!_e}ΙqD3m:B;K,`SYD#bu*څ'Yݰ{0@?482eu-x<,-x<0Xz&4lK[^$25ўTzH$\?te^֝euMŠUA\3LRiY}0uP esM]j) ڨm62X{?\`8ٷhS?!I#Ye{A`@kk[( `nzXnm۸NХp~,YLҫǧP@Ri1ɺcKSDT%1ڙ'6eMA"}\?ЕEs0o))3y[D"~;a[RPpiB+QX[شU;VY:ץZ"Cbłhh`Y TV(Ntrc{n٫TS(*|T&n΀g-C-vӖb9Rl *wKߝX;gکzG xe9Y^E8d@rqt޴jT qM t/L{4&6saو%Ob674M~j,.Pudѣ 3pLKEq]᧺~=傷HYly_4{޽C,Bm5U|"7TGaBZ+tgn̽vň==}~4݄vϞ 98lϥ륵(^!ڜc'RSTA|YV$8te<Q6>l2u0僌, .̢ft?rb4Ummh4-rV99Fv2i^}i*(j.:xܻ2m@a#u_3̙]yteJt8֮kC^B>Ϙi[*r6>Ytu)0Lhz uKWz/{'&f_Bg*2?PsV-fv$upOY%p!0u*yi4JJеkffǎ=u*.ct !*^ #XDMAQϲ&Nsj&*ՆqOlhH?$ Ik7L~+=,2rFNw)˵׆d D9dgj5mLoOeA9Bo~EE;kGV{_)V = x<\AE{@{&H7AƳcQ<U\BqeJB<# ~ _)gwX\?V`[yJe-W.Z =6k{vpwp.UffhVUMD\ina/^B?~0pHtaB-BllMW뢏U]*TF%[eM4iK\A 'Ԩ5vA{hOqC{׏5 ˆsΰHIXd<|LfY[QQ6[/S Ge[LxW?4wv:OΞ3]WBFy,p4s\ID"OX߫bTᏁ=*+:B>o\uN0棸55\i[iZZCjw&XVU&ZU!I:ӧfgN:YS#gO"8!RY{*DRR.>u`o_R `6ugXOLC?AjkvW7^.[ yRjYw7{t d&eIBFO?3nw,>MN]sCFݹb{nޢN 0 R*r|Y{ Xቈ5^FE>¾Og.x&$BRW}bZ'[iEp1x\l;v.sox(,X@|'\[azߟ5 2 !8 5etM{h:jȟ{ٳ%vܾ;ߕzM&}4M}vֹn++Uo)7_mzݟ21:N4I(( F\䫰u@+:e +*'}BV|,+Cr9iN7H5Os?SϞOrEfQ(hNy<f+t}V肂KG ~Ɂ+۟1nI,%dϕ&`EО7zTyy4-r_'`4 UW6#;nycwYϳF9:'//YOe%qP.ϘNّkj֝<#az`_fs?7+{wUvܲpNS!ti?&a):W0DDY}"x5 W"9~~Tt/%K.MbE0lbYp'\G]M-u?bgg3vvWv :եBo vӠ֢aD"cB+*bT}}fmrRV+yBWh Q'r:Cm%%,Ls]|HΝccGi^ĕy_oa~>>S ґ d&u)Arm 06U|[}JUݮ1Rr9sVuL(U J׈)qR0M? ys>:?+iՕ@Q\N,˧랲$62c;7H$Ee}s'%u76wK8Xߐ)-s'9Х gl${=͟O*B@0hPn{_w\B҄'a9>@Q=<_p?!.]o:gbnMI]?Է e6I*\GwwOFG: N: j-AWt穂^#Cr~rrB:v+ V$5maB5+ayTa;m 6C~Iu&JUiQ-lU*Lp&_mK#j&]=uMK$\@|Jp4i2ZҮ|b@Tce{&)ĆNc\ϟ߼CMB/N`8x|@[ã&'aorC{@$ v?rh(M[ ^ Z9A`5cEnX[;`H'z:5m7?oy8u;/$Zݎc?qrMPBW׬ [@qk+zfy9yBW_WiSmhe#m6s֭ Jյuk0PׇVUg]4giޡ !ȃ>_O64 &tEEvpMکS}kx͸kkfiwn\|:7o ,+lo_W뭞7;\:ܓ̰U7ߟ,!x<\A[ !0 :k*\P١C\Ai“K7FuP)*f8iw=]Xxi#ן޷ϧLyuS7Lݪڷy}PSX}䞨l\&j}XӤҢKLqq\iЕzQ@_C'lm6u]i/O-.Jpe}7dwZTur:PF: Aտ/+Z A!)g٘W" ۏnKV~_fOsLcIKJ"#Sfx sA![sn*fT:r]kſ!+{Hyp-}Kҳs69cc{hioKe 9PV |+TÆ=`)>aw-]"{UEopƾ&^a>zu П|fM0RqbTᏁsovOi)yBW_xrVw64 TfwQX8qOI鶂yK/+B3yW? +IJ7ʡ ػﰨ}9awPرDM1$wczbc)Kb1Eņ";1euEsy Iqhce,b?]>>?-Ι~j38:lsnݷoޣ9T{<:vl׎ՕuEW˯$,ht~,b;q̹pI}fLܻwas\5̹_-d@z_t<{&Tz՝;}Vrj0u;O:BNKHwAe6kD(Nx_(zGVYA&<z(eCë[5yyC8W+}G9v;zhWv86ﴸ'Sxt"LMLN’w*wWa?:sM_{N#G"8W+(QAǙIEAZ<<ѐ!={: ݩ[YJs1&aR?~N.虰^YY lh܉/=;ǎoЄ=9~z>cK^:7}diq';[Xg4u.MeN$jQ1n{2&8=]eRl}I=n_H=Ù4Va(D'NXW[gF*ϥ/ \qEgGsm+{<:詽r>|eԿ{[ݔ+ 7\+,j9w"*J&b}|j ,%3ĢZOO[߿uhwB6InG~=-p'cZ>}:uޝQjYhQE#Sy\ʷ98MQ{6jzt7u򞪃_X4slٮ]ڏ7n.ļVP+Z¾gF&X{1 ^R,qG4T;Q;O\n.7'b4Mlpw ꨔA`?ϡ<cP}Ԁryvؽ9g2f{TZWm_zp.rrkA33=;rS^.KvRPï׺]rR9^%~fz:Vy-$`qUڊufTa73&l~M׵Xn+pƍ^fAno:=\.Ɉ֭W/iתP75>-&8.nN++cb;oz ɉL+ _J+|%t 2 cj"Q$;V.$hm]rE+':y5ܾ|!`]~sN$XX,D։X6:݋5筴49PDsO![OEE.vڔ52˗-鐜SRY~]қU!ZWؽԮH%M]779pw/дX-~KDD 0 6gO={N<|H7ڦIXo+P]5&ﭪ Kee9yyy}ro/-&@hu?qFWwKZz.4ԨQ╃a4uL&'')^ΖAް: HICcdddP>DHoEdX~uO(eeSAK)+EhvYʛ*gf #Hn.EP}:e\":(1O#W*ZJ[Eq;/8:.zTtvhZ|Mrb|дhX?; Xp9dVXϯT&S)u tk45Άځ*vKz N n]|;cΙ3&e &`#:ntq/_fZӥKl,4wG *3n?"%@DďE^0ϸs3%xΜwhC ]}?WЪp9VBBQU:؊Qy],)߰WtwL~>< =ww??_rztop[g6;9 D<f1;T?Pzq oݍ %uuvGݾ=T=]?X '\3 !xZ $+Uc[܃e lS+G8k2MK/A1^DD}:C{ۗH&0*t)_mżV{x{'ݾ=(ssyfݱѼć[v {w^F.i ?y{H6wCgyGYivx` y|Ws@TWg-bIU5Qє|I>KppgтffXIHkdCgR=qqDcqTՃ }2{='w.*b0 #2R&Ҋ7)<XkT'Eyr@%Eh M8[Ysʗ^Ӽpqqppr"!&ucH//8}RTLbs% oA= ;w]ssL~xO=cvc)/ljP1~_+hIIҾAu9t(ty@q 9?[ 955DYx & QU'_~ԿafŤqaКm?u/"&ګOt 2CWg癳!qRYqb]V":>Ͼxk(iC Y!"$ĚzsQ+VlО=U+/K` ?fOKf=Wvs>;fhOhv#L+̕<_\M chh\dD7nHdspsW<;xֲ$;{[ۥ4VEx7+4rrDQIg:|'>8WzzXE !(($u(~",bs4'{7мp#>zbADYǁE: 1~渺P)[p#!nG=Nw…g?푹;v7),*V|[EX5Z,gbxN4?}˗YV5,fkȓ~k1ڍݯS4K)<𕸮}ngd8jsg0N ^ן[:ݚ2E.Ah*բDn6k4v~\{uu=gM_-?'ϗc6XvFOO"^7BݹsK=p=o?˫銟/{U_+K~q{e9"oo⤲ .P7vCߒex%*4 Xm(/dYHo@Qv]`eI3,j_1TÊnv v~E%(:xpOf+JOwMt`ׅpEqLOgyGSzo Bh8",yrw7i0ج1(aC3w{kj˲>8vuhƍyCۖmh97n`٨Q}:@Ө^ZB9&avghYo79}`={~4`^}cלy@R=ZM&GG)툮=}KqsMMMelh299Z "襗 ")WD^p?\W:@s |Qz,kV@ˈA*Ղ( ZW)Xe2>KKL ln/K)-h_мG݉}Dٷ߲,22((4(<< (u#qDϖ]<(5_^V`ˇ =ȑ3|O g.Ft":V+yKک4VKd)WWNyAhEQ+$®|t+?3OtU[^'Ŭ4>N:qbc@D= \:UR߹ ]cV{})mFVɤ82KUT n}_a!)力-AN=@˲0::l7L{ħ1OL[Q2D9M ˶&}CqϸDѯR_a~>7ӷo^9vgv<~jQWɎHy f}qrd@~!P? S)55D kBSIJz|:="sv&aI/d0x{](}d;L&eˋŖ>/~<{q%%= ()a:uҽyV8uƻ(-hXOf9vE?'^8>ee@j_вqI55bO?,&&,,2((ϏuS3̓ r]T<ݶ=͒1+v҅i=rsUە.·qJ)VTTLFw٬ղNx155{t u6< }'.gnSaZM pn9 +Dh6lĈ޽1 l!+r'ݯaF 2~g"Wd߾{"-)WS/p2GexHv'<յ+D:Մ-Z{C,[,^~ݹ_UН$?uV^r!IXwCydbኟ7KWi6PKMROtZ:1;q0;4b,e <ϺtjߞˋuQ5B=EhZ$ ̉;({>ok0_5'o5 ?9h^@۰wߏ)S L"֒fW/0B7fOqYY;9TUt:ka笅իM&gg֩lON (D߯8aۅI1F},G.=^һΎ X Z^:Gca4T'`uxARybYY~"?'Ki=8XgOb"%&Z,[6=G0 !?v,&a㈪bK'Y튇_IPosK#hǎ)}F 痜"; 7R\/]=qַ -0VJK7zoKSR==GRYX:p D=b3gWnݲNxIחh\O[drt$?ZX۶M+onܳm\cWZ:@kM7++.\n` ! X>.ѰΡSGd/Z-t:|}~qu@ QWC׭TÍMOgYΑ:{yN4VW(7}=gS5&Sc諡'33zvbŽ;G(:xOH7{QVlWCu_΅*twgbce2(8Ze͛7xMJ~Rt;G x>Yi!WT0گ7XiivZhDpueaIl Ww[,D'tDg4zzUTC=b!}ϳڨW=`>T]:OC J:HY,D^^׊ݱbKŪOr4{Zg"w6뻔8uhPq8ugƌՖ*+DqԜ=ͶmǼ7sAG&TV 5:㓤;&_ASaWՂ0"gasf&<wGNIq7vhKjkYiiFʕ&3ȑuuDom]wmܰV>㭅W^뽼23A`DAѷΝsS;W$5~}<\,7nX,ZTW;O'Uws1 C|ݻY,#g ~z{ܫ%%?: +8ߟu\+ EٱYHBO|W@끉Кt^˯=q,8uru2D&alɓFC'R^94171ƹ/@[~b8)'OJuPS/dOf^. hDJ4\\nlŬ['|C4hPmmp0тI_99mpU}aй0}nqaiq:&q3nɗ^++Kʿ܉(i"8TZ-emv[G+-8r$(㜝Yǁ,#.#7Z'=YwΝU]uh9gV 2Mߛ j"ޖd29:Nqv{TZ+Ch EEu]:OknqWFbС։Yj0xyXa0u挵`\T$r_Kj (D۷DY UӧtDYVs D{Dn8+D;guuO^ ,˿Q}i ^~b)_io:ãBB23ssY;cR7jonu=&wJϳ59mL}`x8}@^4[ W'+X MzCAEe\qsѯñNEEܭZ;Ǖ+se]ʝ[$U:WkU_ڹZڹuvDQ;;"ZΪ/huuD%%(5 0_"޳ǎ:`r%ت8? 5~|y9qtu/2k'rв""uR8Lqgy뵖{$C]TUQ ?w_•>bǛ@k X R o;!CXhZ^KϘy1y#]tڷo|յG^4V^2^Oq&4`+6nި?,U=wF뚃Wmo LQ|5ᡇ9~^~Zӱ%u&`u떵f| DWXW^jq$֘˽^T[.u'AC``;1ԣy*fݸ:WClRIs|Ѯ%^MK~~aC_WPFh]&Fug:EEN4 q-.k;G˃?m;lщYsܭ)Sr-֪~ƍ&4'[,{JXaf&<Mͻ>S.θ~l1?[nzmڪGʚ+޸:y=BzW RSQ;W_ $m|ZRCb괃5_#-LꔒqN}p` X(L:-۰u3& 8|8qj*`+ u;*<ܶ}#Y7N:E(7Y dݭ+rX[qbgGTP`"U]ç8t\ wsuo97cǸ.\ng@[T9N3SB~Ak\ 5~nz^ JN’UkO n+-eW)܏mX@ 8C,KL'9"}{iNݹ-?9}ǂMd^f~@`&MR(*+riZiziO7{IJh;эs!?䖞NNfx~RMyf?;UA` Vw<+VE(dD>-KtTTg?k֚[U? >WW3{J lC..))rweN<<Νn￳wf„'xǿ`#L#L kw~[7y=W>"I/KjjޘO:4PV: os4Vj*&aɤPEQ ʂK4*\),dx\xrf)%;4 ,<9xyEGw: @JMXp50㧯=:ݸ} wŠFggy_?חfiVl`6;: W=fa0 `ٱkuOI(v׃8alSUz~޽]^ӱ` feTW J:HT'`++Ks~]sHM&tf$Vyޔ:if9@P&1E'H:>:ܙc ! ޽nm]4_}zJXw+!A+h*M'?'ϗc62H|bV<# ƽ8eN\VVnϿoQhnUO:X,.3띊k$Lpv^AbKeo7,E_gtVPq?nNihIqaᇬsquurrv&֭gOiVmT7k__ybZt4< Qfs2άa#Xi,oo녤VKT\l]A(UO wv|#T2OE{7ٳR=-Z}|\y׳\'y_Q:GC!IXeOUmXt} RJH[sz׹ܛ]۷]Օu;S?}:$DxVޢI*"'Rh*II&wo Oc ;8u͛N qRX*4c3NٷMt:@[p3W-VFuHqӀTDEuΪ+W1)zEE_Kز:Jɠ5@ xNpgFիi!%G,={ǘU;yؤIX=M'/Or'-;g<θVXVdغH]Y<Rѯcǥqo~1s9.{P[:Hcx:\cӕ+a>JEIXp"#Y2/8Z|܊e>~&HNqW+'_D$d.?tu6܀f1In[m~r>ϳwf^#ruutFiߝ׍x۳w߸*3Z"OO~L$>Qv+fmhJTmy?7wG~>\кUT0ftOXyc=wV/p Yzv &V7DdL&)|Gԏ* /]D>=̿=~f>%lIpwPfa=I$`Q?u3 \.?d4ueҽ HkY[rye%`+L&kjuS*WLba@\:9yckz^t<0_"ATjgJzX0/u.{0!WF~=- R{e^Eiιy! u8W/Lclž}VKTZ*-Á:ge9>bM_-Mqϡ7S{xe}n׶F(_ί\O/~_{=X-r 島uqb Bh(iJV-Or_a{v_'e[Ot{鏊ob4-^i\6_W)^:ܙCBÉPO[u0ȏ)g;w3IxECtnՃ)]=PX W&UUӀEA[/y8 {]oA@SqVR˔O]\XoD޼wVL g&8ŝ7L)ZbGIIs:4.o_/^<u*U<8joOܾoڕ+sY _{8뙗{Q?2֩N$E jiVRItŢVNxc/.  7l"u^uuœ_P4yիeܘr(Bk9UUmeeOtK%*(K^ڕA4Z,DԝuVh6x8ZQq%2ns23A 28H^G'>W{gw^|[&7}:wޝue~y\޻)ܬ-Evyd]x8]狛[EOLT(0 &Lk`ُ\lvvpuzuB Ņb!rw8u[8>OՌkTChHC֯gxn $#dG7Wʝ߶iA'jXh^Êcֹې×:ubZeЕ.vtWq -UWN"%Ejkפz!p-W|o@K9VZ_4Dd$Kx^dSŋ"Pfωl֏_0fr1.fgoTINK cosÆN2Nv]Ύ9ۛuhG·,Si44֨Q2YM Vk-b4$iO7Xhk0*VF (D&tCKjp_yqQ8G#ix:]f3gޠ|v֏"d(>xO&4};w% `yY+-5ի,Rwp9VBBQU:؊"hnuƳWtB-yښe^xUp"#yhd 5M*6}*=~{vvUQ wPIw.jҒKTh<0qG4uȑo<83paDR!;w׽{/jL+̕<MCBXi,{{"A 1Boh*.ZMt Hys}~%oǣu[-y q7 i>%[WE,+V6E"niavI {~<w,ӖZ˖zv<0JVM2tѬ Xc>$8i'GG#jyk8"@SXdrrb힞iis&SvXhÊcֹ^2:u)N@t2Rp9֤I VBSE'Yecv93OUPRW*.ELe2i@*""Y*ϯY1Wv]U/;~'~H׮(uz,(`M䙸{7}Iy4iyqN6lX"Z h+>Yp}utt)gMpwgL弬_+ C<=Yi.]d2];i^ȁifёH'8i/vaNii2(Vo!VT";' Xb2--w-?Wy;~j(Wqk7Vf1P?DGw̡P-:b L4vlCN2 q-ḕ?>2wj ֹ8sp"Qr-#!A.+hj7Z XRu9DQrcfd.. ͡{we&5εkF#w==DzuH/r Rc@P2jzǏ^$Fk:4qq{N226jK~Gm\<1U&KY1+8urp8A 6L.flř3FC. a]B>vXg?Rs]'GZy !\]9b!rs8;~wrFxդ$y X`,(뭷,q{qqGO@$ gZ^*?:J&9Qh=^]6-ug]=7 u: Y[S(X=MBe2fusuuVSӳ4h Ye'WȰf"c"*J k2>#{d2T-߾uN4!p4{Dڜ:4ر;; r[8$kC_S~:f3&SAEyxXݻd:QXI N6Y'_Ҿp{WǺt^nfv>}PA`""Btںju[uVfgubu/q\K:M,i.##sR)J%у3i_+ ڂ5NN?,?{wyڪ|s ,hoA˹)Yzxj.88,wvee|Q9:!ҍnn4V\LIdN7͎Df_%?)1"z_ל4~!_: 4 A30-zw X**DǬN:E՝6F`0ROGm?y9$O-%w2eذѣ]LO'*/FڊkU7N]/.Q{c uo[wNDQertϷrJ&_) #TDs}gny4͹s{#nM)|'*"ԉ\}b"n)W%"}CWEQQ%xlr۹DQn'?6e=7΂ ?!Ajȳe\-~ mAP^2dX}ͪ7r٬ܯU6UJӊYSQ2 UJFI)>X/(jTf:fY9W]n6)JHQ[#WTp^S\<(+ JggiW %TDś`P6-11:Ky"};\811QQDqqѝ;>}ŋS ae?oGwpr8'u ndH.'Gh֭3Y{~´4ʧ&Yd.".Э{[SXQ~.vRY]T>Tz6*u_tW 㳦  g 3Ɓ JAcaBa4nZTZ&[1傋q4ID}ED{i*)i*DD#yWnAD =!Dt:QWB"~E"n>>HE#"4QK)A|Ld&#)>%q(D7 "oGO8/%ߖ;JDwn"" 潸BDWH ""$wF"*QyJ~Co2)7L&=}&*IRn2D5&&UFuɤ~d SwWLLvUL&2#v?BD0kϚLNo۟t^SSVSVV23oܰB!},.^4hOLJ<ܱcgn*F(fxֹqN9r8ܬ,*ށvR_jg͞sا_8!A*JvLOZԙ Wz%' EU4`+nE,r9tv]/)Cڄjuu/*5/^R ?)u)%uq*dA}eg$&7B_f(5Th=$n8: =ADQ4N""?-EID{h䟿~&q]ʅ2ID! #⾠&@D%q6yXd}y6g,Drd 0x0 ˉkzr(wDԇb͠=DD\gΛ#V n (^p{IDATUꕪ ^Fg:dRxޞu.h<0vĉD_}f/Ho,]{ֽ{T M:@kQJە:OccUq&4`+6mN"cC]o.+6<)h#\h}ϝ* 6~tm7=ӿl,QdzPO*U`剿}IDD.&i)qù*QD4[-E;ASBRX O[(JRNjQq6l0D',RǪ0\q牊딣L'yTzU@&l 3h(u5["V/ƝNruّR[i8wڵ '5.СOb exu]LL_sKKkzT@A\س pIJHP(0J f)n(k~gǔ:nxk-TwFS[[^!"?ˆh '4ϟB=T&&Fz`&M^K_9ja^f\8\tn8T{S0 ΅xy}:͝3,k+,F֩EQ,)[I Xv gpU1Puh׎u.hI 9t²֩ZEG?[/\FA{f:EmBqg6dӀ8tl'** *mSM&+D$;0I0jf)kH}vR}E_RxQ,=DDJ'5FOt/kt:m]Lw|co9DYs=8YsIscp@X Y'E~aD$QRV&4@yr:0C5]bbt۷_z4g88T* ьMD+V# N2 ~ƽ旕?}P|PaI]. >Zbo3 ""2E.ˆzhZכNNS=pNYF#iYghcS4XhnN(SUI3GDψdqh(j^WCz vzs/H'ߚչT9ֹs!Nwqu:֏B{9bMbW~ld4oTAPF"aZ"Q5b{zβ\$ c;urKٻwg\ʔyII;;; sA㄄ ڳg~D{~W32n +**,d eeTrgk>;cǎ?.Rc_Q_btguuD^^MaёH8usts?qq?|3緁kkfμv]S_NReUq 'hG 9ĺZXlSA뢢H5iYhN<&k'zvӘֹq&L0`۹u*&Hްe)W/߃>]~ee4!yT/gg '{5__ī}e:iV8`6uWاLCXZXfZ6[e2kzTcu:֓DD^WF·k?up)ֳKj9NZZ~!ӵ(<7:hEu ~4ŋJE4t\PyE#d/ )٬s4' 666L]+}G-kkǏ_4jcD ׻7YYiiD))驩S,mLS }eb=]d ʁglAaHb2yBQUED@SYlBο88e4,87yNO;*ʩ[_9=FDQ?%Su R~)߮d29EԸwLt]Sxҵkuwۓn]ƹ~TW/dw=k29~tu:vlcZ A 8#G˥FҞs.]db9*]^V;͝KR`ggoO4cر&Uh &Le؞=9֩l)xyUR^:Oc h]9a]A֯7?MÎ F9u2Od;9VJYw}׷k{+d}l1wsǎǝ9+((MuY5W^U(X?3uϷJIu`eAq(ʥ RĔ1Z XwatDn8$f?<<4"#ucg??8xծGDGXǮqzt'_KHP(*+Y[a4ZOPnl6;8Nx|75~(:ۦmj"}A,]֧h[l!!O$ةӯ᛿w7l]xvv3Sx≒I10jP*Vݻzƶm&4-,&0:"zgͧ][Mc!CF"bnkN;wKP<wXejuڻy?g=:OcDԫձNb^Y%Eu[li2qr?pJ}HE]=ur{{QQ[Mc=կC%4ּ] PCwI0ЀW[ںZ1xosz;o$+ 9ìcS Є䟋v< ~2Io4;B.ˉ~{1@$H1sk=/>qk·S/2  . ^o4ϕ6TsGn,=(0 '^qU}awCï|zӳC6Fd8#*JJ)қ\QA$!4655֯yqUU(ɬހhF,67H<4|}=<&N4hiز,d?>ľ-,(Ύu.d/|%[:Oc)DH4aBQU: ؊ QT*ΟX4iON9WX劧]uJ,yB]3:!`iW{}5Իnܴg݅gwZծ]]W}|^][JqfW!dW?ϋYieL&gg"ANDfX߮Xa2NsCG&%%%%%?*ۆ@38u.᯿ sɓ@806W/Ν:t`-^]qZeޒ;0ک + \tԅ ^^՝jM5;{Fp`寋/w+)drtcǻr3ݪoVUw^^/\<۬C8ѫCmףǾq#==a@#!oG>QP:Gceg Ri: 4MmAқy~*z{1Z X`q'k|%mzIMm K|p̘\]Y`xiߝ]rqDٮsܭA`0<Ѷm yR%E~'ujrj jvvGos7W9]M?8`[޽um|έG=HPq"ΐ )SJNYv$%LNNS pYX=p7,".bDoe|OqůmYէ]FsK_|_qmٱqK霜:Zhtq!~]T*in]*j5ѪU&MliυRQR,H:k g͢P-:bMcذ^#)2];iZcGNx(:z[Oudlx͢r܅^ cT*"A ?^.flEj (D/Z/I&[eP=h6+*Bu}X']79!Sx]X_-=mںkW¶>~rѾM+l3ou}}έPcWz[2go8iy3G|`"2Pt:׬G9Ec6[+X`,4nN.tbuhO|p̘I\\lvyxحò+Fyvq ԼV7ޞu>\.%rr8_t#)l++_SLsucRsxz#^^NJM?WپnާGvD5#n/. -vj9awy d~oֆ۷Y[>htwg OOLAP(X{\O&َW&L/@ .E5boPkX灦ao͜9~|BL]|4,q֜Pq\٧ͥYx)M$qBI;fiO˿OE{x Zw4*gU߫^^N us.ٝx,<<-X/Je@Oܼ:GSٸdrr"ZZ+nĽL '9X W>4}lZCװBV?d4epH&yCg>]<̖^Z+3#.e_:OcED@ԥL׳Nb.ёF|;S6a9NwIZr3אָ;eLʓm gS/IxkT*ֹ {u~rw 4?6=<XXoŢ}:M_s4ͨz;Y`I—`o#GDg{/fֈ{u: @Ӎ2U/w\,,ӫ0&o0oS6LuX=fOZLlu[ >O?m-b?X,>>:""mO~ߜ]]% )/gd?Rs]yvuf0_E͛=)[*6m~_x`~lx'qxZr,$u/4ZQK;t߷q4oY灦MtcL: @r;hYeۧfkx^cY ߝ:2U[r{޹̞çڷOsky'Ym>wiuIfk OOEFw;ܝDc8aHkW{~6 VV.&Qٍ@ӊܙ_.]z`u[?kQw2bo鋗oo5PPY~7<վ= D11ַMaNZĒ*GF"Ιu-BGSu-wî)g'DG:mzJDFZ@:4{>|X`iZo3*uɱٓH#a Z!g>:&&B"! r9&_ASKJ>i|;7x "q8Y2N.I,*Uu5tItoWbV˹`U <1frz>=4dE&:iԩDT˕sτΝYvL+u<"5Pyzkhu.Y/޸a=y)UvTf"S~"XX;`LY2QryNb[^^]gqnwP֒}]% =:4-WW''ggG8{d2pb)vjoGY'^h,wmtfM7-ž_?H~tϔPTWqLM&)zBUr/96Y_L_79Coub KLڛo".Hˇ ͫ.,:/4Lu}8vOYiiׯ JE#om%C'OZ W?l}ܳgDii>h>- nl$`78¿͘AI7 ;umMvaaD& 4|84Gi͊:M'hΧǜ]ߩ32jԚ;تx'gV9֔)ryU`+xhnޞuƓ?.&;jfyKjYLQsj_?I}XNIOO%\AKڊ:M:.8.{P[:+ū"֔)IPkךLNND ZRS^N$Yc}&YcY WvZ@(;[(⭷X9pFGDw}~)?;"D4>\дٳ_?"/]:u*e_}W:wV**+MIe|t&\r* -آ՞2W7e&<[TooOD1 (Z6-r99Ar:vy];7X[mHd0XXRnƁ3h/ ,͡F[P@Jnhzq`\J@NoWU .**[uIKyTu t]zhϚL/[9=Ʌ]dZH[򹿗jFт֕|={d:ѠArym-Q\tDAAT{bB7OOֹZbQˉ-aޞu*OGAG#[N -^Rcv]F{yy899;͞=e}d2Y#fѯ6'{Jx@\z5]/Ld/-ݍ=h\{(d%$t|<߱Aɦ2,7IwryU%T֭:"g\B FRt;B8uȺtp4}qǍ qȲeTX4tcvFXm:_lYiDy  E(`؀sb2~K^uhaaD C: @$dh t'^#SY"s'K;s 0~e㿚e F8xֹbbj[RgMR?|SQaw٬ղNx嵲Af&lf@*kkoUGj3쯧&=|.=N>}ӈ3ECo$""avx/q6_qΤu|)?[nXXh THj8q.tOX2lQi]}Ih):4bc{"۷KXiZ'aeo՘m]rkCRܞ ?&vݪc;q{i'݉D]s氬- Qv |-G߶?i2vɾƉ`Vb8nSҥབྷۉ'~[sڛc.wnRIYwjZ'$h7.@DW\ =SW?]홟~b `4[K~p{w%\Oz yyk4vvDO>DvvjF:@T_J"a%'[}¯~ue>Bu1*JnTXOC2Y?^&RH5IJ2X{˴L&9jhR~ 9=(hc1=pbhDDnXhY5]>{eǞ?qg ЂWt.mXhj;ֱl X6l78Y-|￟sʯb ;SLN$dr9Tv;pp0\ Q12{j۹C]O&Qv?wAϞ_,QAiyģXiKIGx϶LFtbo:MʓAV&lfes?\0s#ҩ'/~K+An2߶xXFJ@sybxR7&}c'q]ֹ"1=-9R֢[%\mcv]FmG=:4G7u֭Ӗē'{ڝ򛘈gg~JMúulڪKu tݤ7Ѳ<2,?-S{G鈂9hdlŦMf#WOWi:F]tpcG4aBCx{]P 1xyQ&?X+9$&F*җgc6l(rOo{<}UfHQ'VTdD8zINٜŮؔ'J%Oig"DD$w<>ein^dAA J\Ng%,ݷsP#~ɖ?h-QzL+{4]>UbvͿ5 `b*>| 6kOB!+DӦ%%E쌅oy ]hHp,7ΤO|ܯ/4u6[;KQnۧ |K\niytqW⸪ARk!MɦLdWT?b@dig-F?栗6ݿD1nj؝OtϿe~hꔳg'j;dc/('aZ3\AJu(+1ꠅ[LS^>%'7֝_ݘ7=.[Fv=t9;tNNT*B 1wzvnE\}?Ș]P=ؚڬwbO+?iʝ77j>K3GNۧ1f?k踟?-ZH$&Q@lb@MiD#KNq8 [h" a,{daBOϝ+?>6vgA.:*v'7s32fL zg!%m23gKx~7ʏ b{;vlۥɓ>!bM4yAÆI$T*vc8})no|n{Q!v1 ce=ǚ^μ_NۏZHŝq`2545_rܕrAD'?ݿq)ne==p|j-\f̽}{|+WٲAXq'V{k~P`+Dž@V~[Ϟa'=[x6㣣5"ٳuĮp,7.-( o:jTל;ay{ԭk+߳52rB"Ap䱌Ҋ "!(9jAGnl7EBʋ4<,lôSl]i`ƺ2^@͡vvBxի_^tG-KMLJ50>`d;NbKrkoO]4_?ݻmNʈN|yCFT求>>s.,QٹkG_~ wtwf࿻&VSmW߽u8"BDEMKDBgS[ рzV:zj,G%Q6C.Uʟv{vltnl̠;2twm|)?QdHlNHS ǻ9l4M#hZ3g r]S~'{_p:ulol2 >3(,'UWSdtWϏش++K<x0QVtY cc_Ccbj/SG>x:nA8rd^}V bݼ~u!qAL27-t4[WM=p dl`W+lZV]mu-^nJVƼ ZR#ԁS0ص6vq &m۶H[!iDDAj1bLMfg_d"ˣni|ڣ?: It|a\׮mzإ=aaG\-8"( [*Rv߰Z]xeCtv]\MsVW{ac6ߖn\kה_ӅÂ?KΑG 'K<; JKŮfڼٱ䚰٬ hU׬V{ d 5wkqI#rghhYOB!v'm<턺޼q&3kz?ht!#3=]MpzSfi0]\)\֎L5Xޕ _/R_ZkW*jZʆs_ &L3"ZF.xJB :uȐѣ_oJJ**ck|R-^eO3F|p\F Ms534mvLUYηwi+^=\ I8xfS tT/5VD-9-b<~/?!ǥS.eoF2oR>4<&;u+&ؽ[- jOu߈Zqn+RNqR3ǘ< JϊFB'yeow4Gd\͏qrWfmݩ/-ٿkOo~l8#)Hk׎. SؤIbw99M2xD}+WL s}kVk߱~ǎuPb9*#EFfn=Dt>[:$ {(c@uaVCt:uZ;h5O!e,Y[^^>^|.:##YP(ޒeg\ײݪl"ʧDgM qr:MEgo+3,w /x3c7RyeI V:Gc1ƈܾ5qn]^?8" Gm n=.z;A~P]a 3*ZǦK. M[ԈNjOW`J|yr?GqG^ˡS Ye  (FL01H$t]85`TZQ!v  5sꆜ.KJjuCIFSWީdFSQl 2P*_[[*d2K,kDbVYd˕x^=CnSEY,Ped6k]SfTX3yy޿{^azB}:O%Rs""ap]WXX|SU ^+"bIyϘ+/hkNo)zW!v<]11u ڣGb"њ5;wn"vc҅e 7pSu'I9]ϟ^:Cwf]rvޯ?HY2_ Z]6/Ep0ov$ӳj B'aɉ6QB4H+% <BO0l]ۭR#߉ۄⲲ:Zc=u7u#Sa!=&NDԃ""z['>"MDD[^7BݻZmNTag^7Iyǁ,ۺnP]YCrБ={(M>\?j6mbc ;}1S~MCWL9K8yRS.eo;MﹸD#W3YZ՜y9]" D4@7xLV^.vVkՖ-65kfY~AatE&x; "zHwYNnZem69.^ۥ]$ NpAAqLf|6px^Hd.lyI\znސK.󼴀ݗy4YKq]>Y2H"{/y#?3%oD ((~ϣBb?-1fke}GqyFpKm7QWRQ"Y\[^l?ie9F&c X:I$M{I$n|3Y}-oJ| /ao]c\* g_˿b_qnR}YdR[m {h@=sb Ssxz~M<776"zuWMTDvYb@B#>/KO;sEwH|Pp㣏(gcΝ{ *,,++-%x֭kĮpL7;y) 4鋦u3\%;5w)]jw~i2N_ ¯=.S}Wc||{Z=ta9ce|Aq3fh!b@Mͦ #_iRsjzsjt:vJICm6ebb"FjU~*ߠXe1V' Eժ-ZU6jEEnRc*:˿im6REGů6l(}nXroidݮxUb.OD(DDl%"D[@Dɝ.$J' x(^QBHCDD^$_տ6ddI7kRK%I*5vdVo6W:fJ7̗̟d&9ZxsrL2Lfnmze9/| )qw"rd߽yz{_4Z9}yl [zD8C֡Cb9uDbanfHɌSL 2Y|2KO&r*}pŔmP}M[rwMzrae9Pfa r+c%-}6+{+OM~gCgg4Y\i@ڹ \իn%pa cV7+3|uIjEixT}tdRTJ4u!=Gh?\I+vc*|NwGr;w9K nD /.2 ΕSe?>vznܜp퍈6q\@"EC&O*փ𤤧 \NtݮR]ke3 ]qSJW,e+[, l6R4jQv54~U{N魝g4B]tL&?= L&VLo*<%"zJрT<""j/A!4z=UJYx:e/ _tnw#g2(ѯo߰T"jgW֞a3ޕ M$Cer_ekBc\l+o%*QgN5NW(L[(/\V Oc.x:,R2(e|pky}|bZk̬&+(`5| @,v\ MoWJhҥIKYR/?É.xj?ckEŎoտ?k*mG{On..bӥR)J%ѴiII=G`?XAT\\E!uw>*+|v}ѥˀc7>ӭKp'[KWiܓG.|RH9}80$[- [|y\;K$z=;c8OJr^z[4D&lAP55E&gi.u1\pNuq1+f./|f4ʎKyz|  ǟ``j ":.sJr!IҒn2CK:2s;+*hJ-DD4x?Q(5#"8LV*Ӈ+eRBb_9VXhWT{ʛJJU񖉌Lb{Z"c0x)g)+Թ}#}}zܟQNvb}6y^.RLxr0O]B@lg۷w{CY{v4#j+OND4m~iJJ`1ٗsCIv ;ղecLw{AۋMpk9[M&;o=7Ӊb@ͅ,xzE';O\s+۰!g#4?02h ֬!yŮplv8!j=S:$Hx㠓|7WtC>{6lx~ѬYsnkmejk8# 9a$1> Vgg+/Cgg}1SzPQw .uF3v"JDD?=xj@%9fIIgrf4z3H˩^TD6YI~c%[-7K]39*UQt~W24rZOz 3^|4cJ`:5t=C>jUlbnЁ+WG_OD; j2 `3c ~ܒHrv /6h v<11uԫGs{@zm7V 'wm^D/Tlr_5 rԃ3zm:&uܕ1|h)H<qD@(=XoKKW*Ůy|Cl?yQZwk@L:HacOD]>TQ"""6"ʦ\""1Zwf,?ع`FS.ZC.8Szw-ɫG\-,RKSK=hҗ_Tޯ_0dFS"Rc^ƾ1rpUFD$9ĝ jY~jHԛV[4)'^**겐`>{Sb?n !@eRR,a1%#NJo|9oJ~0>;sQ Mwsfbbbcʈl9xŮ*Ku4E۾r֥۷ZyDmE?¶&pܾ1'~b।s3#,- A6J/ξLYm- [|=׭T=:ךU˗z5qNM%$,k܊I%oIt&6z8F٬6eyMA|I=ZmѤy%V[,R+[VKu/Cy^d OTREJݼ2~dX!"_HOJTV&v*[\qLv3{{_.ֽ<=|~/8oG֝Eynn{W>h(,""L㉈2zpMDD{̿@[҈(442 zpD E[%ȂMa 9^P,"D ')pB}k2YS7a$X ޽6:-m˗b a׹|Ȯ]%lR|%zhժ}{"l6=qj[-C&/\۶&e(Lzo_]J-^y??֞xFʾ4W鈈h؏ S++; ]  \ `6qюV냯I||6ń,SU 6LW +*=;ޥ2f =B3bbaiJwB0NW̕X6Q--1Di&`\T,*QAEFzVRҬask>4 '{ -\|!Exν|}/1GD^tH-h/u}Fyy\~Se J땕i>:CQ RhF 8^7#}CQoc0 Bz'tDڐ.[VgkfYP`޽6to`ɴ\)v<[uЭh2LDG\p@$ZZѵד4H͹}^^n,L/,Mb ~F.,g-vq cb!wΝ6VKT^^5~WiiʵrOy*ֆg |"wr\ht'7\h$"uDDԑ* cM>2sEtn'e?|To\^N4|ꭠnٙ0W]V%d+{rscLJ^jUlϺ)f+ؗkl|lG&FO.'""#U^54/pL:":S|f4;Pԑ;wkֻU;}!"*׭  +z=P{T; |swȻҴqcsiT`1ƈ ѣO"b1Μvej̹9 &ڶ G^2}x andk>-<[$-Ps$'[NNbW<n:GTҦbMYRӽdI:]k%KNN%NN}eohv)VR_NB4]=|}Z=3-uOuMVݬ Y" b?KO~aQRtn@L̞iN]bxÐ&mtˆk->ϻ7{0 }pm۷PmUjoq嗵IE!!z*%$G'&Hd2f3ѕ+n]Pn[VHW3V2,G⬒HzY[x^[KC\+YzFzzT"Z8=m'yιE_H-il/>;Oy_'Z__v쏘\xيZ{%֚+[^p)t{fͲ*"ww"ʢCb?ǶԖHIT =n- }A+Kco45[pp WP^ ;7#.4n*vCx! ^%/l _P v<[D"MX5$v@pJSqe3S/q`M K_:xLV^.v pѮ]vN'vSRLmkʘV aYhOwɍ*h .d9]l)2\N I-v@fL3cE}g;i$W;w%$st~1c6mP.Y,D p$v ۷l:^_5bw[=TxֆMrbIp mt:++aN#^}AKl]gw 3;5^mjfJOLKVώ|]ԳZT>zFLZK:RtTHqI;!tkɹW}?.VQ̢Tnŋhy#vJpÇi.4IFRD/ڟ}_*v,pX V&/ZG,ġө K/ 6f U5 M=\]X[qQy^R,HOիe;&vUsv&z#Ə'rwwvvu v4/f84׭J[ #eآ;[g;փIbW@MI$Dwl:5O#SNSm~=,%'~#C}ޯh3S\NzzRQ;7˾o &->ƍ߼U+>R5+;/ppk^tn׶2g)ш]NylE# 嗷ִ7>=].D!]S -W%x05FGBdY)Ƀlߺ%vٙhƌ#b:gvƈJFߟ1H$/TqؠzӅo-iCw38dj[m6h$r##C\sG6U:^DQ/ZcLAuwtx/oչu'ŷ~̙Fa_ߛvѸu-)%Y3|||CR)}|NNú j;eE=ŲGut צxy@D$2 lw*c,Xc,Dž3E7=HRyybw8\]^ziq㈜u:G^UXq%i]%`/ՏyRMXJ&++j Vgg+eYA?UrZ=y^vNt_i043o[j[q/kځ;ɖ4r9' d/KI~VzZN.^ ,J>xlslO|KǷ`E,Xa"YzJP^ޘ;7PVZ*v߅,,mЧݻtZƖ&٬(v͍WZV*rݴL vTjJՉeq+ZZ"gOB).\y(5rk_Hk^tjk.Ej1.?[}č]׿ĉ+ x+Cefjy.\ZJ.m~~/FqsW pLg'soòex6NvbX%l…{|;'G.'aOY"vup /(CGv@DӧD..:U GTj25"hp$;Ż]c._"oCF:&Ā<{bƸ(?1RER9g[ֹ"EH~JWPrZmhӕm-}-RkC]!'#-$ ɮ{ ֔בuF<%/$n#IS=Xج^;̘NԭT׋]5ٳck}M:SSqV bJ fO}ϭd8"KV*-oPPK$E2"[#VT)D^X7jT>N^;?,.....Ί q.OZzVR6$&aʤϊq999;ȑy{yx]P 0F_UqE-R):tk^=4`'T$?M7Lo|ƙyybU n?(/G&:fbw\]u:gg3{noo__rݴL< vTjRq^=-֏>?Hq~OȦM6NGd9g|: Wr{٫ND7L P\dl Kl|k3gbM<վ jcn DW__i˨m_z?ǘg,Qmݙ뎄Ɩ[*{Wnqdf9޼y..%%bwaOf˧_"ԯ2"sZNVx6Nvbϧ(۾ CT#> 00f9st=P=(2\N II#GԩSUxf8lb$4R'^_VƲmϰp$ "j"'aE슿Mڴ(JMÑ`m'Xqh!GYyְ&sɸuV6MIqy80#78b˷ۃn5"ŅO9u]{]fwV7Ri΅I׿")&yS, X-&D:I6mL*J&O4hpM##cbĮǰ,TޅJ3.j6Ku5@u~>nd2^ ) A"!:xfSŮy|./c˛ lS7?_i05llް,l}rs[ҥͲ:V-ڲ'GA= SRRˬFd7g޷/uz88h^#ԩYVĮ YG/ϸ(U;hƿOs_sD$]5W \mdtb<>2nhwm}j>a\fPSQQf%׮ n|S9=]l5T{ޣEFyy昮,l'\Jhhw6$Xw_+x/v#0:ٹUq½ޭ1ZA޻'vT1]EԵkB£?vۺRJBs[(`W8XyS~}iX"W=jD #vȧa33Rtoc+8ZɰXtu 󳲆\m;.aٳ6th6urnD,] O [ Ot[^|;/{m4G௳vֱd+,v<|:{ :mb8* `s"웝-J VؽvUwQv;3۸v:#qjzQ:bw_ Ç+1~IG^{]NΒ \n^tYDe]PhѠAD'8|8L&JbWcO}ϭd08CX*-DHx:%X&`}A*%:rj,GzeewKRP v؂q5cq-wL^i8mg:W^/v'+verJ]\vEYu׷xE˜PPv.$pS ׏k'NWbEՎ vSfTSh<.:f #"'zՑ#Ǐ'hT*G>1 P'mq_t H~Wj[Ã1ɉŮGqߒ}6tSĴK[/Ůgb~'zM+,ֳS 2 2u寫Tْ|skͮtqe[mbw'L~Ξ z/[V5x#oOJ;AP$Ĝl};ͦsdAWN_ʈ9;k:UgQTEI5 R}u;վWX|ޕoإ+yݝ6>vK?N/TNP*.սT//;jSmMeKc,ҺD8s&h)r=P=dRTJ4n\~IID:4mڢUwTX*mq9Ww *~ OƍV94wjm;VǥGzee˱Z}t?w ⲳDIp]szJ.;rS^prg|̑_!8eogbgEHTJ$/;71L&jYүPiڱ׋1qDCt޻7QRR׮ ]Þj`NjT!GԖl$*dR&u-M&"_eU \mbtb<>9iֱm~wOplNafs͚~meIgD˃){VY|"v2ڦrܱ'Nd}_z2}Qђ+INNol3oqNn$=]FΏ7/10x &+X-FK6~.z1>eK 6JY̛*HZs\廯d%Z"BG܂Rpx?5Ap1ÃJO|d5{O|3ӽR,XLRRt2c 43hVG[GEijZ-v< J6H$vTu[x8(^n8*Gq$'[bW}?755U+l6RbN97w`H9ֈ9 ZhÕjRF;  ܎WSft>Y&K{$Pn;#g5AmLcbd$$^.ST⹸8fP"#7la2tm}ƍw *)9Bg 8E/y >mTb<>(pEE]fKr!"ןAioroە{i<J+Z0d^ ʋKϺNSTbAx +\8ej5}+vCK YFF IO> Řbg\֘RZ(҅:DΉ՛'믏;e QݺAAbWpkK~ZE\;_UT$ Qy9cW~ťMb+^pߘ}57u]ԦKd7\ NG "jzۚ\Ky!uvAN )ǰEau'7Znܧˤދ1^bgS omٓz赫WMQj_:t-4hX*x| zjg'޽w]h˻.:IubW@ue1FeͦӉ]YrX:mo֯={6-x4էm)]o^^Rt6Fv|g^>>?<ue}D"W~Rݩ{͛bwc1>eKoP"\&`)7 ltn,*ru%yV.\U*+JNٜĮ:4z{_|[._6PfRYٶ۾Jm{gOJ.`kAASoII^4wn gbg_,'']h0ڕ.sG.p MDFFG99iZU4l&RIyzLeeU[ Bu\W*&4AˉΟw={RPPWЁeebZ! j[ %%ΏVȲZFR:ٰBDGm[R/'b6w״Ib<8}CMI xl-ml e_BdE'3@ 00*{$ \m.Ӊ,1(2\N Jؾ}D1V('m6`(.vu% ݉vE&{=vYZ-BC6FCT^^5ԋ9]:6Dzc/\kCݝkd#TWʹf RVPTv2FK:-˾/Q + mFl[@@r% .O h 1xϫ[y {lp=RSo|9oJ\;]>p@XOMiRP}P=իu<=V޺uF"by/@ v,DrJe4)z=I$6D U8={Jz %DL2bDߔ(<]su!TBgh?JN8T]vӲeIqq,)bT%zn봴]!Gh^'+{$^ CllݺQQDfN| kPX,FJEdL*BVWV:Á,VWW `6.J%<_|\x 3/z\'B^r뭿H^n+S A>Ěy䱯pGXƺs\̍cCV; mK}#or{y(mr2g.QFԨaC9./wz^[Υy8ܑK} CW>TuoMJb,) W5o'k|Yz:Ur3ڷTOK Õf3fdCBŮq\Yyy^^D&SYNG$$_ щv_oZŮZnjGT;1o.HkT[pfkİ0!r ^_7Qee pˏ,q KLo\"ԼUC<<~\CT4366E1٧OzYfR]]v-j `R碓22/$ӛt 5JVM6tD:Ƿl)v٬kDD&SENWu Kͭ9U*vJǧܭP65yyJV=P YL?{Π1hYrB–k6jdh edbwRU(dK,@w{/ݿTzx,e=z,f#GlK<:Mߙ&Ҥ~$~/,v<zE4++K0%,CZP[bwcH85!h̘Ar j7ArN D3թЗ~=G#q"]d#o;{ǎԃG]*v8oo__77bb AۥR"ŅHBV"AH bc_d2/ZkW5似־&b@v7)@&Yl9C~ݣǭ 'v-z6X\wI^ߛ,ChH_tjf:־$3 kԈyKZOؖu킶bw,7ĻK^_evL<)v8&ZT^x!)i(;u֍j f:GYDz}~?ll99ca!wp2Y6MRS)<˯on䅈9a+Sz>[wτ鴖 <; E[%~w SJ>?{tFn5f b/0ϥK !!bgSiԻwÆ..%%СkW:CoБ? ÁnZh@-m- V*/$2++5"]!-//tAŮ?/,wws@?2yMj> +K*w~Jب{77wbz~{W>&\*Ө+.M owdoS*ve@PZ.=kΔv:9?ґE'{%6݉T&ww - _})S}|Įᖅ&SiQEE^?UQQrҋ/L>>DD8P}mftD?`֤_\_="^\{1YYTo\ .LL~AY:Z2؝/ؿ^J$k p![ D"v_u'̥ __(0,,[{T%V 8?e}+ԙ}a]<=]]܈f=zdN[ BV^QJJy+ɕDCҮ8}j>r(IIJv{9-?o_{XY?ฟVpxExȌ_-޻/Kwm8n՘i+@!J Yҷ\aabw9]RΔ˶>#F NAcIJNfbQ.s5lɨ]d2T*%;kѓ&]UoP"uwdɏ=` =*-bwAI4s1&5oޠAlU+)'jx˫S(3fÆOV3K/LDf3QM ii{5^Y)vTv0|})!Mm޼dgSVNaúu'z+77ggj>a9L-^xa{ůTbW}b%hpٳA_t A>pl"3&1q Qu!_eSY/QwMS>ŋ&?檕̱X<=b= \ }Okq=J.ޭ;1$d˾+\ҥE6m&O8p"R.Jϐ  \2K:y9T%#u]UX?0MbYQ.zM#)>eK&rl鈦Oͭ[cǪߟhڰ0VZbqs#6h =WE0hqub+ڢrGԫ7b}cUNNbwU^^nnU"LFᔷi{ݢ+3+"~۶] [7Gmۄ?vVw횐@@v[Lf,v%YJ%燅-YRTH4rsn.sϹܿO)Z,b}<_5pcͦ-^\5x'q=˄]&?IVmPS*/0tR- [#"L-/D4gY֭E4ztbDJBP] /GD^(z΋NJ:ztgicOuwS jF~˖jb]&#Z80KJuhwq!jF.-3u-WW AĮOO;n)vQBB۶:ai02&fKZ賴Bwμ6x-A/-A"8Nu#SnMN&*+jM&Wrs#Pë.9j,//In]XX( Yt:Z!:5)i(S\xhݺݻn%2' UU/WVCOtm:nMADD4] yz߯ߐ!DbW_ՒZgc BEaw'?oi$LNY<<^{m?}Q[ܿnyqTeJ[ɬ֪,HPM&""ưR&pkx~ThY9h>^/v@m9-hb<=>,؅ [ҼݕZ-}@D,] 4iM4rd^T J%v@,pHgî# de ƍ4FbE"8#֭Ev""CCV޶m"+xjɈLRgg"ɩj,օX) W;+ĉQ ju~ҷ~~:~sǧ ƈ(] dRTJԿǎݻu߲U 1]]a Z S<1Zl؇LVc.- }P3ƸqS%'DǏ_tu3Fd *գ[Hv"L2qRimZٯ'-mBo6#C"\saZCu_xMQѺȫ4lu] ??qKJzb?n‹R\L.,.^-i;wRfDG5R)DF%$O԰aݺYs-D #%"Yj>\JYWbKϷ{[bT֩,B݀};^v;xGn@D>@|1QZױc׮DD"Y]x-,"-~bCV 5Jd7DhF {ѶdZ!La;5[FD&޽۶={+bo6,?5rj K6$j:eVm??0$0_ر:ޔ{zkӃ/_eMWuf\Nt*Ů~t:Z!=:1q@uŮꆽH˾1VPW"r HYcJKAðCQ/țѦSMUj2qzbb~eϞ[** Jpp CRytp‡[>̒Jm6a4 BPܹ;u?%E.Gwiﹺ;!!]HUnLSDJD:"zQZ~p1cu:''>`?}׮u[2{_a j#civλ@s.}CDg08;fk$22:(""88$h]n%x֭kĮxf°j ê[5H.ʐ1g'YMsNwx8yYYb?o&ݜ3F{ΑЋV]{XhhQbIHNND4]BH8N"!ӧ}.]vmѢMG[7Ba ?zƈ? `@kvO<Ջmڠ>))]Hظf }HTՊ5å'M8p03g]|jۉ*+FAJ6TJd2tnRddZ9l&"bIfidiql O').y2_v),Qw >wqP//R/8~Eo%/Q7DDskر}&%]ӳ&&v{Z;ȝǏ w#׵ܔk g#_fŴgeVUtS#R""=\Ѫ]M7'߿cn݈ L.Ns^XnmD'v0ZBrtWŋm7Ts5jD-[-jDMIjL4hHo޼z_v޶`I,j0K"U fXI}[M_>>rE#+[5W;gft{Ss=<F st0 gt=:~Lk~XQ2BwqK#Ow!x7-S;ۛO~8N9;t:ȑzO^UPLf?QåK2c{9a,cg]2.b*l!Ej ԩW("bė^"ڼ={p̙bW<;\Dr{s( ]ʹ5 ;Q .DefvP > b %̇ ѣOfbbbc~iǎ͛ Į&,,c,;<3rvMyrz3:#{o2!^"CܻjUTwVqW\%@Pd $F{'\jr^'Hr^j앛sc?F^R/h#oa7o8;ozzVxA̔]ϝU4ߞ+uR"R3swwqqu暩Sg0wᙵs- ZP`t G_Ϸl/7a)7.tnMM" ۷o,q?n.b6uSe]]/[8;Ѽio0?u~rara'x9lm}-m✑%{I]r '큓!!y XOgmQQ-ygX9ȺoK/ד:m;$&&&jm^B-ߒgŻ2 +**(W>y*h,s-q6[Co SP>w];|ܠ? 9}G55?`] ~3e #~[1jl9ߟߦx!3wl80.O!!K<в nnF\ȕWN<}Ȑ!-G G2)=zÆMSQataYf͡CEE߮&zynR$򄃃]ܴZk;LJ͛V:h:zieed.OӧBu.67p87 X>ϖm=2p I8cA;u3&LF?O#rSΚ%ս{ϞFWQ׉VP {L7/pZdJiFw~XC $ӪоoJÆTZډǎ9*\frx>XO yO bz.('w7p87 X>ϖ-(9G//(hĴu{jWe7,pr2y.d2E&O>|hSG?^jX,ԫE␞nӹt, 822est/?5e?.৚E6lصkVommp~yTuάXmJĂ"/ [YPwczWܴ2:#w`u <[7Յ7(GOe_y|j``څY3x:2}B>?.""4kWk:E9+ɶ7jrv={JXLRgh`5Y󋟿:U>-64z$9voo<63/000{{M~~o9*:#ggGG''3ǎ0AdܸaDL&E/ԭiC7wTS]sZ;;evd3'_~)iߏ0 ON ֮)(())*2 sZmuhU{QQϭO?s몢޶ **Kꥳz8VXWG08`٪u`Nʛ'JMq?Ǿ}!(daγMMskC-bc##Df4 ZIb/rD-\8]Sg hg̮c5-SI)Sfknٺu߾{EVڲeFFStư+s(*\Hзcߍ ^ZU6/}mopnZ`; :Xm}VR]պcܝ.;/ljO),%w6ٜcl>@.r啓&͜)2p`TTtU񪮖Zzuӗw78`І|XzH|| *0Ѻ1䥠ǽKJM+w*)H7.3KKwE~PVtZ{/zA #}߯"*Yu+)N:g_ߞ 7{/|}kWe7,pr:9@ӣGdٓ&M.gtˍlnYj{]r9Fg v`٥]\, 7 ol6fٺ5)iիn;zD'_냧v,+ {>߈҈GEee݇|41EϔV'xw ~^GtSk:voSe޾'_o<Q$?H$>~ӦkERS23uKkkw# ݛRLs<3+I9O}TӞy ~]5^$6622*J+'O1CӓfͩꑆJs|Yم+z#M/K\ 0 5OKKM[N*@Galh:l8x>_Y7'sTeeBG+&tYk~8['VUsԽ#x`umqXOSɔqԬc"N;zz<_|g)Aig o,jǖ+U\ о̙sE3gDFunt3z}g+ߵ,@7t q}\;9 urP watk455777|ݞ=;vlذk֭" F: n&kk~se-< L*pl@W𚚰Aq~몪_ ^]MhĶVgxwrC잹Wf%]HAQI{npAAEOV\^FsU{e^#u.\]]\Df3 EƌX'FG:w2Y(RftkTUԈ]}"۷۷wfwBW|w^]'] ]5:sׂs_mmj ۍ~ :cwݿ% KU.utޞT jKl//յ7JMյxeōSʟ̨m//):'d2DF0`3Ǎ0 hz7}>`\\\RMMFg'Xtr+ջ5TL?}"_yߊ&9>3: 10ILLLj-8X\eۓOr7>?-W~HffvɓFW68OtuxuS]}x7g:ͮQ|m]=.uuKkh~ˍ#\5n46]:̩{sOxXgW{5,ˋXT<ܡ6'Sjf;:st,(TMܺNNGjR=+NVv\S{a]sUJ{0=884TK/Dz5<*/[ԐLm]/lZMs[t, ֬9tĉj¾e\-5]əGoܸvHQQYYiUt,P8icCΕ;pzR~rswW*\q{`_mW3G䭷d>>FwgSAAIIQȪU[n$ZZjjQF_11=zDF̘1f̄ "ݻ]NjY[+TGst{Zo,~N]"(HC/+Ja4s!/ Y7hJ ,`=ºu5k؉E"#u 7 8KSJJ*1W_=&Fg0[EkoM&yzbtp.[};,p>t*2kָq&DEuޣUYfY|?qfR\\;Fg0g]BF% M{OdY8.\:~<77;[d;l9t(##-*О!8mNj׳gFWg0Y-.Ve~-L;¯zj5`s&111Qk`byqISO|ݮ5@ԳgXXn"'1vH߾=zI/|˴n1#6˫,mFBFƼy>䥗nX D6nGYnjB{0 8?5N$[[{lھg8x!YNv(3mΒ e%q 6 0BAAiiq;vl"woJʡC"6n]@zAbbDL9r8.]/zDuٷvRˏ^;3>48`6oROϦOVl/g"nt`Ҋr-[ٶm={D덮c1M&YdȐؖر"FYTjnV|+~o~kzjΜx @ٔ+g͚ o-Sjw ѹ֊Cb?CRҏ?TW]@bZ,ȨQʼnLctW@OjĈ3WrpZVEI5+Ke曧_;[-c:+vfVwO?{,1ڒcrrN]nIN~ՠ I%FmQUUmmMȮ]%%l޼w?WUUV]윝DF8PdĖu@eY|y3c*/uߪ*h`Nku,}o_SCw{#Fe6Ȟ=))|=;v]}|D&L6l(a0@jZڨU뾷6ط\׭3: Zkm2 ݦPzL2h˴Zk'ټ4]kJ@{RJۣG^" C~[.]Rn7:0ݴZk־]Lt%K'Rwg-IMپ}{E33Dl63g6L&H߾=z-2vC޳RJ)^~@-P M!:Ou:'N6 _| p}2prZMw%kb1**Dv>|x~[))(/7:__Ccb926v ooOO//Ers%VMsҾ ,18VxnMt)7EyD?z]@Gbkm>.mہ{;qj շȑ ,ҳghhn\ 8RեUsXdmNͫzj/]TSct#ٵ+9y~]ڷO:0^n]ٿ"CƊ8;;::9]tP Dcmig&b>o |0kAK=$W}1$򄃃}@GvT~~^ȶm+zH}}cccupӧ_?c 2D$,,((8:LݭW T?7ߜ3gl6 XYMvKŦct -Cd;ܷOS_޽u8sezZ-JPO6M]Ͳz2'9<p1h֬9tplUӟ_|Q{w7 L󋋋D~19={>p@: :oD _:1;T[2z=3/f,6nŊZ;8-icS߯҅ [DkCٻ75С3WEd޽cbD8PGЮ]:'P<@T=6uqR_[D}aάss]=m<#[uRZLFQSSsssHrrffZ-WJI9v,=]fv+G׳gTԙUttDDϞ"fd6] tR/JOY$$WyV--'.uߪ*q`s^:!CVyN??ވFwٻ7%!ݻSR)(8}:F22D{:{qrrppp0KxYcдRs}SbdfXLB]n3gELr~@۽]()(/IJ:r!;ܿ_:Bp`Ȱa/2lX߾xz]_̗-jHf^/n;KX,v1VNL̻t)"Y#U.+?ڢ<={RSjh>,RV2ӧo3FTU*Q.z9sbjl4:} :oc>! qy3ϨOsm,_Zkȱc99N$&9,o_jjrHUUmmMѕ@2OdР3,mXTjnLK<{fYN,(0:? :9K]fyR-9~Z?={]aVVVnnvȾ}-ìÇE**:__OO//{GdРU]]P׫M>O}.pkr]cI84$apXze#Fkfeg>-&g] M>>-CZrPU/E[ٖ-FgEˀCק\_+MrPm[H??ӋÍNٿԖ+g>,RRRQQVft%p~x{ rd`]]w/[ԐLk3\RJimt`JȘ1Q\7+FjcI~Kot/'Y9"r`FƑ#"O]:-C .]D ;&(`@+dzX kM=-3'&^F@ ʷڸH`);Wtz1I.<=pUT?rѣ"))YY"6lt%:+I)I$""44,L_޽[W}CݡQdܥxYd&M0t^ |udi"__{l zH*˟$6}ξ:';3jV]]CC}ѕ(Vb'V pV2kWVGՕo,1p^+##; Ç33] E$6622*Jh>}""z<39b֮UϟzME2 09zpĨ(YEG 8}+d?ף@'RRRQQV&r㙙"Gde;&.R_ht%ε`@}{ݻe`!ٵkxl2;@'sD'wPZ=ǧE[ٖ-FgR*w?gSY@VzôiFw0NccSSSHzɓYY?rֱcg[hDzn=2G^DbbZn=<`m٢S3^o۶,ߊ qhJIz>Or ee"ii'NYii'N;&R[[__Wgt%@-ս{Ϟ"zEEbp%+""<1y^}hѴȾ#W6: la6eN#Feb|Y~ݮ.SP,SvZl6L&𐐰0~"#{ׯgϨ(.]&-?Cz.?s3fp0@}{j9:02kEV+ip%SURJ)8`]YHGT LTUԜRֱc'Odffg>-ּ\3wwWזAUxH>=zDGGD%it%vGjՃSz}9s(5@ ZBВɓe\z I3._yyUUe+h<%rh˕JJ**ʌqvvttr3,[3W="7W!=]gy}@)nt`CWyD$Z*g0 @SQQ]]U%rT~~^HfS'O8 ҽ{pp׮-W#4{CBDfl6@TW ) W Njm:ӗ黯BK?S|= ihhllh9~#jl|gN6ߢFtV !111Qk0飒+t^,bbsNj90/"ӧ EZk퍧HnAA!!"]tr.]DVP$Jݚ#2wM~{Ҥ8 Ђp Z\쒋gTgt0uuj犻kAA"]܆$`t5{6mUT)78oYRn7,hkjjjk[Z?Vч-VV`''g3+RtH: qssqqq1 . }ztJ]5{:.߻<: 2pEPPG5F^?̝>hol6Y_UP RTTZZV&R\\^^Vv#-flh9׷e8fHz_sc{i\CI15ˣ{?y}`mTeTx,z$Nz4ettTյ"EEee"EE-RR3UUUV=kjX,aOSޭozyyyLJLF? hǢ$JݚfA7,*>xgԭ~=dcYowi1~}ٵ^quUV2ܪhlUVVTmfF?mQ땨<=E||<<<=E||<=[<-fX+Qyz(p;di^&[ǜ9s(esovdu,}o_ؼ6v\y_oP]wIpu5ZgX?hܖVUܶ]YY]]]-R^^]]Y)RUUSSU%z@:rwwuuum9S˫eH2hã~//T&jdmJ)}>f3?oy0ߺz.^^="7ꞻat=3jmlVmmMMˀVZH꺺]ZMnn.."...."ήgS7nljmt&&^x:9K3'/KD%i7$7e}9mccSSSHccssSә!WSSssssOolljjnnmll|tU_X_/bZy-fkhhhhhlkv;#dVb6go=bXL&NN"&R&b"Ù?Z[ѱϭ֖o fbqtlsrj83rppr:8ojfaT%{OO2k]lfRLϩSF}atBq}\;9լJv-9S'#FYu@$)Iooyښi/_>gΈ@ ?YsPQ"߮u5P|>xyWZ_/eW|kc8`t:&X~VBFƼѺCJ/Դ;BZ' `t@] H\|d)a1#KK@ R#[$}9z^W9;`JZZ*7K/'}Oߢ΍mROφ+Uڡ#Fh<\. Sڥ(䓙Iqq ,LBF% ѲQdU+-H~KotXj<$5yyr+w-_njj;3fetK0p$dd˘(p'˵tz.Trbt',PO6MyuzI?+~ X +š{mW|FuR&L/ 7+MQO˃uGO퍶m˗O>堋 &Xڬ5k**4=f$&>`F,a謗K.%SZFݡQ$X\d5< -_ܳhoպu!Όvo}v슝>>mO6F^qJS;ԓ7 }d~v(Ps9b$L}kң:gUL|j;ki%emK\fz {wp D,Mmcbz|L||Ng;ozwnrtbtujɑt:W1{ 0:h`Zkm2 4uNQȑ/ fϖdޥW 0Y-.V>zW_@uDo^|wPJ)6:H`Xb f~+Ujr 2B\"[B Q/jyD?%#;!A+Gv|sϢU֍WRFw,VNL̻biu0_N>aE]'jXA#zܗ_NJ >>Qlݺ@)nt'Й1d>k'̚'MuzV.5KnүOO;A[%[^-- "Mk׶^*[~}\\\RMMFg`9z{RL|Q/ fϖdޥW <L$Cr׬ah Z[N?^;Keb=I͚%SjN rR}"O}ikpZVex5^)lt&ߏQ_MGL>J[Rx A 2x}D$JԭYY$'eҚ5M,^?{RJk3; Y5-;͚%',#f.7NLj5<\:Y->.5kq2X%}̤~Ҍ`XA$d}˵gKr̙'M8FwmRnW2_~;N?sm!VM>堋 0.!#c^X箜%'e1i@/@;dU7me _F񳲛vZdȥ Fg`Ϊ+Vlvq*.0@DD8tյKfMz H񊌔.j K{*."Bf}_Ddy/"B;$D/d6/^UKtDTmSrBJ`zlRwfOKѣoU^ @zDȦ{wOje:.q엗""<\/T^?d//jsq=}ZK?+KbvʒI2N^Ry<+K*ojfb$+!,_蛑irwwž`J՞|kWizFm _vװ0iknxaaq:aa2[n;9|jY[+V~I9*囜٣fY7NR:%7#Ts {@G <[<`S`ey`ml:K`ܥCBtyK@\$ݡDQ-Y!J d![= P=Pz{enJקeva'f(*+ssM[${թSj)%'gJXLRy ڹ)+vHۮҥ>J[ZugZcWZ^PǔP~~*g_?wywe~~$GG'pVKfHWKJJ<[@}\RPEEREELЪDSUbO[- TM'O((w~ajN]ͭ:N2=iQ>ҩTZ߼Vw3yB7N7-g!>%zD{xCjTu%tvoyT"< # include # include # include # include # include # include # include # include # include # include # include # include # include "ui_provisioning_editor.h" // // Class for an QInputDialog knockoff with validator class ValidatingDialog : public QDialog { Q_OBJECT public: ValidatingDialog(QWidget*); inline void setLabel(const QString& s) {label->setText(s);} inline QString getText() {return lineedit->text();} inline void clear() {lineedit->clear();} void setValidator(const int&, bool plural = false); inline bool isPlural() {return plural;} private: // members QLabel* label; QLineEdit* lineedit; QDialogButtonBox* buttonbox; bool plural; }; // The class to control the properties editor UI based on a QDialog class ProvisioningEditor : public QDialog { Q_OBJECT public: ProvisioningEditor(QWidget*); private: // members Ui::Provisioning ui; int i_sel; QMenuBar* menubar; QMenu* menu_global; QMenu* menu_service; QMenu* menu_wifi; QMenu* menu_template; QActionGroup* group_template; QActionGroup* group_freeform; QActionGroup* group_combobox; QActionGroup* group_validated; QActionGroup* group_selectfile; QActionGroup* group_ipv4; QActionGroup* group_ipv6; QButtonGroup* bg01; QStatusBar* statusbar; int statustimeout; QString con_path; private slots: void inputSelectFile(QAction*); void inputValidated(QAction*); void inputComboBox(QAction*); void inputFreeForm(QAction*); void ipv4Triggered(QAction*); void ipv6Triggered(QAction*); void templateTriggered(QAction*); void showWhatsThis(); void resetPage(); void requestFileList(QAbstractButton*); void processFileList(const QStringList&); void seedTextEdit(const QString&); void deleteCompleted(bool); void writeCompleted(qint64); void callbackErrorHandler(QDBusError); public: inline void setWhatsThisIcon(QIcon icon) {ui.toolButton_whatsthis->setIcon(icon);} }; #endif cmst/cmst.qrc000644 001750 000144 00000002746 12650551344 013651 0ustar00andyusers000000 000000 text/changelog.txt text/icon_def.txt text/eduroam_long.txt text/eduroam_short.txt text/license.txt stylesheets/signal_bar.qss stylesheets/vpn_connecting.qss translations/cmst_de_DE.qm translations/cmst_it_IT.qm translations/cmst_pl_PL.qm translations/cmst_zh_CN.qm translations/cmst_ru_RU.qm translations/cmst_en_US.qm images/raw_art/network-vpn-acquiring.png images/raw_art/stock_lock.png images/interface/golfball_green.png images/interface/golfball_red.png images/raw_art/application-exit1.png images/raw_art/info2.png images/raw_art/network-idle.png images/raw_art/network-offline.png images/raw_art/network-transmit-receive.png images/raw_art/nm-signal-00.png images/raw_art/nm-signal-25.png images/raw_art/nm-signal-50.png images/raw_art/nm-signal-75.png images/raw_art/nm-signal-100.png images/overlay/overlay-warningnet9.png cmst/misc/manpage/cmst.1000644 001750 000144 00000020171 12651776465 015575 0ustar00andyusers000000 000000 .TH CMST 1 "26 January 2016" "Version: 2016.01.26" .SH NAME CMST - Connman System Tray .SH SYNOPSIS Usage: cmst [options] .SH DESCRIPTION A QT5 based GUI front end for the Connman network daemon .SH OPTIONS .TP \fB-c, --disable-counters [Experimental] \fP Disable the counters. May be used to minimize load on your system. .TP \fB-d, --disable-tray-icon\fP Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. .TP \fB-h, --help\fP Displays this help. .TP \fB-i, --icon-theme \fP Use a specific icon theme from your system. The Icon Theme name is optional and if specified CMST will try to use icons from that theme. If no name is provided and if a system wide icon theme is defined (via your DE) it will be used. If the icon theme cannot be found CMST will fallback to using internal built in icons. .TP \fB-l, --log-input-request\fP Log the Connman inputRequest for debugging purposes. .TP \fB-m, --minimized\fP Start the GUI minimized in the system tray. .TP \fB-v, --version\fP Displays version information. .TP \fB-w, --wait-time \fP Specify the wait time in seconds before starting the system tray icon (default is 0 seconds). If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there. .TP .TP \fB--counter-update-kb [Experimental]\fP Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB). Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented. .TP .TP \fB--counter-update-rate [Experimental]\fP Specify the frequency in seconds between counter updates (default is 10 seconds). .TP .TP \fB--fake-transparency \fP On some systems the system tray icon background, which is transparent, will display as white or black. This seems to be an issue between QT, system tray implementations, compositing, and perhaps certain graphics cards. To work around it we've implemented a fake transparency for tray icons. To use it specify the system tray background color with this option. If the background color is provided CMST will convert the tray icon image to have the specified background color. Color is a hex number in the format: RRGGBB. .TP \fB--use-xfce\fP Use code specific for XFCE. As of 2014.11.24 there seems to be a problem with QT5.3 and the XFCE system tray. There is code in the program to try and work around this issue. If the bug gets fixed in QT5.4 (or later) this option will remain so that user start up scripts and commands do not break, but it will be a no operation place holder. .TP .TP \fB--use-mate\fP Use code specific for MATE. As of 2014.11.24 there seems to be a problem with QT5.3 and the XFCE system tray. There is code in the program to try and work around this issue. If the bug gets fixed in QT5.4 (or later) this option will remain so that user start up scripts and commands do not break, but it will be a no operation place holder. .SH COMMAND LINE STABILITY Command line options marked .I [Experimental] refer to some option in Connman that is currently flagged experimental. These options should not be assumed to be fixed and could change at any time. Other command line options may be assumed to be fixed and should be safe to use in startup scripts. .SH GUI INFO The GUI contains one main dialog with separate tab pages. Program help is mainly provided through a "What's This" interface. The "What's This" button in the lower left corner will allow you to enter "What's This" mode, click the button and then click the GUI feature, or control that you are interested in. A right mouse click on a GUI feature or control will also enter "What's This" mode. .TP .I Status Tab The status tab displays information about the global properties, found technologies, and services. Checkbox at the top right will allow you to put everything in "offline" mode. To toggle a technology on or off click the entry under the Powered column .TP .I Details Tab The details tab will display detailed setup and connection information about a service. Select the service you wish to investigate in the combo box at the top. .TP .I Wireless Tab The Wireless tab will display information, connect, disconnect, and edit certain properties of wireless services. .TP .I VPN Tab The VNP tab will display information, connect and disconnect already provisioned VPN services. .TP .I Counters Tab The Counters tab will display information about the Connect time, the Transmit (TX) and Receiving (RX) counters for the service currently in the "online" state. The counters are set to fairly course intervals to minimize system usage. Currently these interval settings are hard coded into the program. .TP .I Preferences Tab The preferences tab will allow you to change some aspects of the GUI. .SH CONFIGURATION For typical networks and access points, even hidden ones, Connman will find and automatically configure the network for you. If Connman needs information, for instance a passphrase, CMST registers an agent and this agent will prompt you for the needed information. For most cases this "just works", however there are options for fine tuning the automatic configuration or creating provisioning files. .TP \fBProfile Editor\fP There are a variety of connection settings that may be used to override the automatic settings. An editor is provided to access these settings via the .B Configuration button in the lower right corner of the .I Details tab. One common use is to define a static IP address for the connection. Hidden or provisioned (see below) services cannot be edited. .TP \fB802.1x Encrypted Networks (Eduroam and similar)\fP Certain types encrypted networks require a config (provisioning) file to be created before you first connect. As of 2014.10.30 CMST has a provisioning editor built in, but it is considered an advanced control and by default it is hidden. To enable the control check the .B Advanced Controls box on the .I Provisioning tab. The button to open the editor will appear in the lower left corner of the dialog. With this editor you may create, open, edit, delete and save config files to /var/lib/connman. The menu at the top may be used to enter some information automatically, and many of the input fields are validated as you enter text into them. There are also predefined template files that may be used to seed the editing area. All of this can be bypassed if you wish and you may cut and paste or type into the editor directly. .TP \fBCreating and Editing VPN Connections\fP As of 2016.01.26 CMST has a VPN provisioning editor built in, but it is considered an advanced control and by default it is hidden. To enable the control check the .B Advanced Controls box on the .I Provisioning tab. The button to open the editor will appear in the lower left corner of the dialog. With this editor you may create, open, edit, delete and save config files to /var/lib/connman-vpn. The menu at the top may be used to enter some information automatically, and many of the input fields are validated as you enter text into them. The first item under each menu heading (Provider xxx) will start a junior wizard to walk you through entering all the mandatory information for each connection type. For OpenVPN the second menu item (Import Configuration) will import an OpenVPN .opvn file. The import will extract and save keys and certificates and will place the proper provisioning entries into the editor window. .SH BUGS For the tray icon to display is it required that the system tray be compliant with the Freedesktop.org systemtray specification. The tray icon is known to not work in the DWM system tray which appears to be a noncompliant tray. .SH Author Andrew J. Bibb. Project web page: https://github.com/andrew-bibb/cmst cmst/images/application/variations/24x24/cmst_spot_01_24x24.png000644 001750 000144 00000003771 12645570501 024571 0ustar00andyusers000000 000000 PNG  IHDR!-gAMA a cHRMz&u0`:pQ<bKGD pHYs  tIME .%6ӏIDATHDžOl\G?3޾}n6ڍ4%m4"""z(C*!8N 7©J(I1!nw}͛uьF3~oyG|oQM ^+22d=BP}aȣLcdXPR>Qd&Q \hAB+{I4W(z\9k #eލ8Ms]R{XaG=Gp THH؝/d I!E-2c8i[`8P],m,: ZZlMx~.^(S=!v2\g$ߎ* ۅ;P2$MMw;}Vr n7[wl߱:!# *U:^s,k,M֊D|bޥlU 'VH7M"%#$G˄Љ.돈m!ʓUPذ ͦOʏ4B4ݺ?ƕ<9ߐ6ĕ )@H%մhXnmHk2lcd)9 |k-PAI#б"zZ~0O?l5wnNcFH}ۙw8>7~/ 0hQʦƋ-!rQcة]vWjխoax(M }I!0:OS # include # include # include # include "./roothelper/roothelper.h" //# include "../resource.h" int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); RootHelper roothelper; QTimer::singleShot(0, &roothelper, SLOT(startHelper())); return app.exec(); } cmst/apps/cmstapp/code/peditor/peditor.h000644 001750 000144 00000004350 12645570501 020776 0ustar00andyusers000000 000000 /**************************** peditor.h *************************** Code to manage the Properties Editor dialog. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef PROPERTIES_EDITOR_H # define PROPERTIES_EDITOR_H # include # include # include # include # include # include # include "ui_peditor.h" # include "./code/control_box/controlbox.h" // The class to control the properties editor UI based on a QDialog class PropertiesEditor : public QDialog { Q_OBJECT public: // members PropertiesEditor(QWidget*, const arrayElement&, bool (*extractMapData) (QMap&, const QVariant&) ); private: // members Ui::Peditor ui; QDBusObjectPath objpath; QMap objmap; QMap ipv4map; QMap ipv6map; QMap proxmap; // functions private slots: void showWhatsThis(); void resetPage(int page = -1); void resetAll(); void updateConfiguration(); public: inline void setWhatsThisIcon(QIcon icon) {ui.toolButton_whatsthis->setIcon(icon);} }; #endif cmst/apps/rootapp/system/distro/000755 001750 000144 00000000000 12427422701 017436 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/counter/cpp2xml.sh000755 001750 000144 00000000303 12645570501 021106 0ustar00andyusers000000 000000 #!/bin/bash # # script to convert the header file to cpp # # -M all public slots # -P all properties # -S all signals qdbuscpp2xml -M -P counter.h -o org.monkey_business_enterprises.counter.xml cmst/apps/cmstapp/code/notify/notify.cpp000644 001750 000144 00000027121 12645570501 021036 0ustar00andyusers000000 000000 /**************************** notify.cpp ******************************** Code for a notify client to interface with a desktop notification server. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include # include # include # include # include "./notify.h" #define DBUS_SERVICE "org.freedesktop.Notifications" #define DBUS_PATH "/org/freedesktop/Notifications" #define DBUS_INTERFACE "org.freedesktop.Notifications" // constructor NotifyClient::NotifyClient(QObject* parent) : QObject(parent) { // Data members s_name.clear(); s_vendor.clear(); s_version.clear(); s_spec_version.clear(); sl_capabilities.clear(); b_validconnection = false; current_id = 0; file_map.clear(); this->init(); // Create our client and try to connect to the notify server if (! QDBusConnection::sessionBus().isConnected() ) qCritical("CMST - Cannot connect to the session bus."); // else try to connect to a notification server else connectToServer(); // Signals and slots connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(cleanUp())); return; } /////////////////////////////////////// PUBLIC FUNCTIONS //////////////////////////////// // // Function to connect to a notification server. void NotifyClient::connectToServer() { // return now if we already have a valid connection if (b_validconnection) return; notifyclient = new QDBusInterface(DBUS_SERVICE, DBUS_PATH, DBUS_INTERFACE, QDBusConnection::sessionBus(), this); if (notifyclient->isValid() ) { b_validconnection = true; getServerInformation(); getCapabilities(); QDBusConnection::sessionBus().connect(DBUS_SERVICE, DBUS_PATH, DBUS_INTERFACE, "NotificationClosed", this, SLOT(notificationClosed(quint32, quint32))); QDBusConnection::sessionBus().connect(DBUS_SERVICE, DBUS_PATH, DBUS_INTERFACE, "ActionInvoked", this, SLOT(actionInvoked(quint32, QString))); } // if connection is valid else { notifyclient->deleteLater(); b_validconnection = false; } // else connection not valid } // // Function to initialize data members that are used to hold information sent to the server void NotifyClient::init() { s_summary.clear(); s_app_name.clear(); s_body.clear(); s_icon.clear(); i_urgency = Nc::UrgencyNormal; i_expire_timeout = -1; b_overwrite = true; return; } // // Function to send a notification to the server. There is basically a one to one correspondence // of arguments to the org.freedesktop.Notifications.Notify method. The arguments are mandatory // and must be arranged from outside this class. The getxxx functions may be used to obtain server // information for this purpose. ///////// COMMENTED OUT SINCE WE DON'T USE IT IN CMST ///////////////////// //void NotifyClient::notify (QString app_name, quint32 replaces_id, QString app_icon, QString summary, QString body, QStringList actions, QVariantMap hints, qint32 expire_timeout) //{ //// make sure we have a connection we can send the notification to. //if (! b_validconnection) return; //QDBusReply reply = notifyclient->call(QLatin1String("Notify"), app_name, replaces_id, app_icon, summary, body, actions, hints, expire_timeout); //if (reply.isValid() ) //current_id = reply.value(); //else //#if QT_VERSION >= 0x050400 //qCritical("CMST - Error reply received to the Notify method: %s", qUtf8Printable(reply.error().message()) ); //#else //qCritical("CMST - Error reply received to the Notify method: %s", qPrintable(reply.error().message()) ); //#endif //return; //} // Convienence function to send notifications. This function does some processing // of the arguments. In these functions: // expire_timeout: The amount of time in milliseconds the message is shown. // A value of -1 means timeout is based on server's settings. // overwrite : Will overwrite the previous message sent from this function. // It will not overwrite notifications sent by other programs. // // // Show notification with summary, app_name, and body text void NotifyClient::sendNotification () { // make sure we have a connection we can send the notification to. if (! b_validconnection) return; // variables QString app_name = s_app_name; quint32 replaces_id = 0; QString app_icon = ""; QString body = ""; QString summary = s_summary; QStringList actions = QStringList(); QVariantMap hints; int expire_timeout = i_expire_timeout; // set replaces_id if (b_overwrite) replaces_id = current_id; // assemble the hints hints.clear(); hints.insert("urgency", QVariant::fromValue(static_cast(i_urgency)) ); //if (! app_icon.isEmpty() ) hints.insert("image-path", QVariant::fromValue(app_icon)); // make sure we can display the text on this server if (sl_capabilities.contains("body", Qt::CaseInsensitive) ) { body = s_body; if (! sl_capabilities.contains ("body-markup", Qt::CaseInsensitive) ) { QTextDocument td; td.setHtml(body); body = td.toPlainText(); } // if server cannot display markup } // if capabilities contains body // process the icon, if we are using a fallback icon create a temporary file to hold it QTemporaryFile* tempfileicon = NULL; if (! s_icon.isEmpty() ) { if (QFile::exists(s_icon) ) { tempfileicon = new QTemporaryFile(this); tempfileicon->setAutoRemove(false); if (tempfileicon->open() ) { QPixmap px = QPixmap(s_icon); px.save(tempfileicon->fileName(),"PNG"); app_icon = tempfileicon->fileName().prepend("file://"); } // if tempfileicon could be opened } // if s_icon exists as a disk file // assume s_icon exists as a theme icon, don't check it here. That // check needs to be done in the calling program. else app_icon = s_icon; } // if s_icon is not empty QDBusReply reply = notifyclient->call(QLatin1String("Notify"), app_name, replaces_id, app_icon, summary, body, actions, hints, expire_timeout); if (reply.isValid() ) { current_id = reply.value(); if (file_map.contains(current_id) && tempfileicon != NULL) { if (b_overwrite) { file_map.value(current_id)->remove(); delete file_map.value(current_id); file_map.remove(current_id); } // if else { tempfileicon->remove(); delete tempfileicon; tempfileicon = NULL; } // else } // if contains current_id and not NULL if (tempfileicon != NULL) file_map[current_id] = tempfileicon; } // if reply is valid else #if QT_VERSION >= 0x050400 qCritical("CMST - Error reply received to the Notify method: %s", qUtf8Printable(reply.error().message()) ); #else qCritical("CMST - Error reply received to the Notify method: %s", qPrintable(reply.error().message()) ); #endif return; } /////////////////////////////////////// PRIVATE FUNCTIONS//////////////////////////////// // // Function to get information about the server and write results to data members void NotifyClient::getServerInformation() { // return if we don't have valid connection if (! b_validconnection) return; // get the server information QDBusMessage reply = notifyclient->call(QLatin1String("GetServerInformation")); if (reply.type() == QDBusMessage::ReplyMessage) { QList outargs = reply.arguments(); s_name = outargs.at(0).toString(); s_vendor = outargs.at(1).toString(); s_version = outargs.at(2).toString(); s_spec_version = outargs.at(3).toString(); } else { if (reply.type() == QDBusMessage::InvalidMessage) qCritical("CMST - Invalid reply received to GetServerInformation method."); else if (reply.type() == QDBusMessage::ErrorMessage) #if QT_VERSION >= 0x050400 qCritical("CMST - Error reply received to GetServerInforation method: %s", qUtf8Printable(reply.errorMessage()) ); #else qCritical("CMST - Error reply received to GetServerInforation method: %s", qPrintable(reply.errorMessage()) ); #endif } // else some error occured return; } // // Function to get the capabilities of the server and write to a qstringlist data member void NotifyClient::getCapabilities() { // return if we don't have valid connection if (! b_validconnection) return; // get the server capabilities QDBusReply reply = notifyclient->call(QLatin1String("GetCapabilities") ); if (reply.isValid()) sl_capabilities = reply.value(); else #if QT_VERSION >= 0x050400 qCritical("CMST - Error reply received to GetCapabilities method: %s", qUtf8Printable(reply.error().message()) ); #else qCritical("CMST - Error reply received to GetCapabilities method: %s", qPrintable(reply.error().message()) ); #endif return; } // // Function to force a close of a notification void NotifyClient::closeNotification(quint32 id) { // return if we don't have valid connection if (! b_validconnection) return; QDBusMessage reply = notifyclient->call(QLatin1String("CloseNotification"), id); if (reply.type() == QDBusMessage::InvalidMessage) qCritical("CMST - Invalid reply received to CloseNotification method."); else if (reply.type() == QDBusMessage::ErrorMessage) #if QT_VERSION >= 0x050400 qCritical("CMST - Error reply received to CloseNotification method: %s", qUtf8Printable(reply.errorMessage()) ); #else qCritical("CMST - Error reply received to CloseNotification method: %s", qPrintable(reply.errorMessage()) ); #endif return; } /////////////////////////////// PRIVATE SLOTS ///////////////////////////////////// // // Slot called when a notification was closed void NotifyClient::notificationClosed(quint32 id, quint32 reason) { (void) reason; if (file_map.contains(id) ) { file_map.value(id)->remove(); delete file_map.value(id); file_map.remove(id); } return; } // // Slot called when some action from the notification is invoked // RIght now we don't do anything with the information void NotifyClient::actionInvoked(quint32 id, QString action_key) { (void) id; (void) action_key; //qDebug() << "Action invoked signal received" << id << action_key; return; } // // Slot to tidy up things, mainly the temp files created if we made icons // Called when qApp issues an aboutToQuit signal void NotifyClient::cleanUp() { QMapIterator itr(file_map); while (itr.hasNext()) { itr.next(); file_map.value(itr.key())->remove(); delete file_map.value(itr.key() ); file_map.remove(itr.key() ); } return; } cmst/stylesheets/000755 001750 000144 00000000000 12650551344 014537 5ustar00andyusers000000 000000 cmst/images/raw_art/nm-signal-00.png000644 001750 000144 00000003041 12645570501 017675 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTE̒~hhh"!!VVVĹõ&&& cccuuuJJJoonTTT}}}JJJuuu444%%%opoopo###EEEGGG___rrr oooyyy\\\lllccckkkvvvWWWUUUqqqDDD|||cccKKKzzzeee%%%hghZZZ pppbbb111XXX```MMMNtRNS%(Sny|xlQ'U{{V'lyfSHHSfxo.-t{Y++Vxx5'ts: , 4ly3No*?hz~xc8 "eT _)!d_ U'qpSAD\vl pyN (\}hps5 89%Fzg.+Uy{_6"g}mFuO68TvJ\./YDM Uko{" YiKO#HgbKGDH pHYs$$ctIME84~VIDAT(c` 021 sprq  ! KHHII…UT54ut!F&f V6v` 'gW7wO//o_? EpHhXxDdTtLLl\|BbRrJjH&=#31+;'7/??/lTYyEeUuMm]}CcSsKk[b{Y]=} &N@ h(q8  z lyKC* fMĿ0F`? [vGj Q, Ν[w3=7pOk/B5w\w]42Tl5ϲ2y/ߣG|?L8r|WG>qK,ZJUeZ͊2xXP?eÂxpWNiƵc2uػ W~fT{E}me8?x3﯍R6-ܺrb)X%_znW?> UՕ΃(i{ʠnE\a1HE >\g:M~w!}lپh郝p{|FCdrrk꽔ƦL;;djBث֩]L$CXɍ<,$ɢ.trK "VC3$ T;++8x2"-[7B"c~rT (gI@=Y+J g!6C6C7ϥpj8>+X@y`^>|Ǐ+(2? e,4DJ¶U`4i|sk&TtyjSLЉ`SEcPoK8sƶm,2] ]'^>=bYJ=7B #Lza,*.*0RyqK1-n/Kö%Ҫߞp:Tl\|nԢU60]Dy^߱%ꠃ-^#$ 0;;[9Jj RjNJ#clW###Wl6kc RRN7ot766~dۯBX,'''CPa{{Kݧ].ZB\ _x~ȑ>R-Di)F> tttkR:!Pٷ{z~Vpw(r1^n{+ J09%|,QԩSCޏ0TRJ'](?ŋPQj8m^ablrf9Rs;3u ¾G*NgxD"-p8\[[UVVAJ)/^UJ NE[ssqq.JS1b3u=(RjCHdE)E`[ɹw,qgPXxE(m%o4秦&J%gfffF-#X,>X(BTg۷o?*\4M$iiSDZر/{9{saוAI#͌f2}s](#_!?gxL$jɡ!4=ƞ~!Pqsع8/P!?xr un;kr7͚@:R,؍ 9~#^/a]~) ޙ`sksyQ$MԘY/.6Ͽ8w}64_&?3չWXHEc-.~iiy :V H43k0ZVwhi)Ԙ Ff~m0I^(n?v?{—]Ó^dMR|E!@:`.7겂K;ZCsk$ >v(H?:oo0.e RN=0z'zB s1 o ɗ4{qv ;D|;E"J[vw:(MfUԧ]|BN֟HB4p2yUx0

͖Ge&Ƞzz{ ВgvAU>@%T#dR&BX$2m%io # include "./tr_strings.h" // Constructor TranslateStrings::TranslateStrings(QObject* parent) : QObject(parent) { // The stringlist is not actually used for anything other than a means // to mark strings for translation. QStringList sl; sl.clear(); // Global strings sl << tr("connman system tray", "Main Window Title"); sl << tr("cmst", "Abbreviated Program Name - used for QMessageBox titles"); // Connman strings sl << tr("idle", "connman state string"); sl << tr("association", "connman state string"); sl << tr("configuration", "connman state string"); sl << tr("ready", "connman state string"); sl << tr("online", "connman state string"); sl << tr("disconnect", "connman state string"); sl << tr("failure", "connman state string"); sl << tr("offline", "connman state string"); sl << tr("system", "connman type string"); sl << tr("ethernet", "connman type string"); sl << tr("wifi", "connman type string"); sl << tr("bluetooth", "connman type string"); sl << tr("cellular", "connman type string"); sl << tr("gps", "connman type string"); sl << tr("vpn", "connman type string"); sl << tr("gadget", "connman type string"); sl << tr("p2p", "connman type string"); sl << tr("wired", "connman type string"); sl << tr("direct", "connman proxy string"); sl << tr("manual", "connman proxy string"); sl << tr("auto", "connman proxy string"); sl << tr("psk", "connman security string"); sl << tr("ieee8021x", "connman security string"); sl << tr("none", "connman security string"); sl << tr("wep", "connman security string"); sl << tr("wps", "connman security string"); sl << tr("Invalid arguments", "connman error string"); sl << tr("Permission denied", "connman error string"); sl << tr("Passphrase required", "connman error string"); sl << tr("Not registered", "connman error string"); sl << tr("Not unique", "connman error string"); sl << tr("Not supported", "connman error string"); sl << tr("Not implemented", "connman error string"); sl << tr("Not found", "connman error string"); sl << tr("No carrier", "connman error string"); sl << tr("In progress", "connman error string"); sl << tr("Already exists", "connman error string"); sl << tr("Already enabled", "connman error string"); sl << tr("Already disabled", "connman error string"); sl << tr("Already connected", "connman error string"); sl << tr("Not connected", "connman error string"); sl << tr("Operation aborted", "connman error string"); sl << tr("Operation timeout", "connman error string"); sl << tr("Invalid service", "connman error string"); sl << tr("Invalid property", "connman error string"); sl << tr("disabled", "connman privacy string"); sl << tr("enabled", "connman privacy string"); sl << tr("prefered", "connman privacy string"); sl << tr("auto", "connman ethernet connection method"); sl << tr("manual", "connman ethernet connection method"); sl << tr("dhcp", "connman ipv4 method string"); sl << tr("manual", "connman ipv4 method string"); sl << tr("off", "connman ipv4 method string"); sl << tr("fixed", "connman ipv4 method string"); sl << tr("auto", "connman ipv6 method string"); sl << tr("manual", "connman ipv6 method string"); sl << tr("6to4", "connman ipv6 method string"); sl << tr("off", "connman ipv6 method string"); sl << tr("openconnect", "connman vpn connection type"); sl << tr("openvpn", "connman vpn connection type"); sl << tr("vpnc", "connman vpn connection type"); sl << tr("l2tp", "connman vpn connection type"); sl << tr("pptp", "connman vpn connection type"); return; } cmst/images/raw_art/network-offline.png000644 001750 000144 00000002116 12645570501 020706 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTE۪מѸpppͧAAAʫ<<<ħ nnnUUU kkk>>> hhh???uuuCCC)))~~~}}}:::iijyyy121qqqXXXXXX000sssnnn"""&&&ggghhh(((.!tRNS3M5xT!+@xX:x~b;zf 4zED};V|eV|f$Ua$2.;{x3>{w3'zx19QJe 6xf$4xl]U$ [b'2ka! &$sbKGDH pHYs  tIME84~IDAT(c` 02agfae&̓./ ($,"&.&.!)%-#+'*ASK[GGWO] f s K+k[; ;8:9cE,"iBXxDdTtL,D\|BbbBR2DJjgdgePaQqIIIiY9+*kjށή^ X<A%0K7%tEXtdate:create2015-11-04T18:04:09-05:00 %tEXtdate:modify2013-07-28T03:30:56-04:00n+IENDB`cmst/apps/cmstapp/code/scrollbox/000755 001750 000144 00000000000 12645604040 017512 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/trstring/tr_strings.h000644 001750 000144 00000003324 12645570501 021734 0ustar00andyusers000000 000000 /**************************** tr_strings.cpp *************************** Class to manage and present strings that need to be translated. These are typically not inline strings, rather strings used globally or strings returned by third parties, for instance, Connman. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef TRANSLATE_STRINGS # define TRANSLATE_STRINGS # include class TranslateStrings : public QObject { Q_OBJECT public: // members TranslateStrings(QObject*); // functions static inline QString cmtr(const QString& str, const char* disamb = 0) {return tr(qPrintable(str), disamb);} }; #endif cmst/apps/cmstapp/code/scrollbox/scrollbox.cpp000755 001750 000144 00000004232 12645570501 022235 0ustar00andyusers000000 000000 /**************************** scrollbox.cpp *************************** Dialog to display text to the user. Kind of like a neutered QMessageBox except it has scroll bars built in. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include "./scrollbox.h" // constructor // Most of the interface is defined in the ui ScrollBox::ScrollBox(QWidget *parent) : QDialog(parent) { // setup the user interface ui.setupUi(this); // initialize the display text ui.label_displaytext->clear(); } ////////////////////////////////////////////// Public Functions ////////////////////////////////////// // void ScrollBox::execScrollBox(QString title, QString text, QWidget* parent) { ScrollBox scrollBox (parent); scrollBox.setDisplayText(text); scrollBox.setWindowTitle(title); scrollBox.exec(); } ////////////////////////////////////////////////// Public Slots ////////////////////////////////////// // // Slot to set the display text void ScrollBox::setDisplayText(const QString& s) { ui.label_displaytext->setText(s); return; } cmst/apps/cmstapp/code/vpn_agent/org.monkey_business_enterprises.vpnagent.xml000644 001750 000144 00000001361 12650020224 030446 0ustar00andyusers000000 000000 cmst/images/application/variations/scalable/cmst_spot_04.svg000644 001750 000144 00000047232 12645570501 024727 0ustar00andyusers000000 000000 cmst/misc/manpage/000755 001750 000144 00000000000 12651777176 014544 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/scrollbox/ui/scrollbox.ui000644 001750 000144 00000005364 12645570501 022511 0ustar00andyusers000000 000000 ScrollBox 0 0 397 488 Scrollbox true true 0 0 377 440 TextLabel true Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Ok buttonBox accepted() ScrollBox accept() 248 254 157 274 buttonBox rejected() ScrollBox reject() 316 260 286 274 cmst/apps/rootapp/code/roothelper/org.monkey_business_enterprises.roothelper.xml000644 001750 000144 00000001712 12646050137 031241 0ustar00andyusers000000 000000 cmst/apps/cmstapp/code/000755 001750 000144 00000000000 12650017374 015507 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/counter/000755 001750 000144 00000000000 12645604024 017164 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/vpn_agent/000755 001750 000144 00000000000 12651161032 017460 5ustar00andyusers000000 000000 cmst/misc/desktop/cmst-autostart.desktop000644 001750 000144 00000000454 12651005136 021151 0ustar00andyusers000000 000000 [Desktop Entry] Type=Application Version=1.0 Name=Connman UI Setup GenericName=Network Configuration Comment=QT GUI frontend for connman Categories=Settings;System;Qt;Network; Icon=cmst Exec=cmst -w5 Terminal=false StartupNotify=false X-GNOME-Autostart-enabled=true Name[de]=Netzwerk-Konfiguration cmst/images/application/icon_how_to.txt000644 001750 000144 00000001204 12645570501 021000 0ustar00andyusers000000 000000 Program icons are located in the ./variations subdirectory. To build one into the program either copy or symlink the icons you wish to use into this directory and call them: cmst.png and cmst.svg. You need both the 48x48 PNG version and scalable SVG versions copied. If you wish to use the freedesktop theme icon (preferences-system-network) for the program icon then simply do not copy or symlink a cmst.png file. The scalable version is ignored if the 48x48 PNG version does not exist. If the 48x48 verison is not found the theme icon will be used instead. The 24x24 directory is depreciated now and may be removed in the future. cmst/images/000755 001750 000144 00000000000 12625201043 013416 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/notify/000755 001750 000144 00000000000 12645604022 017013 5ustar00andyusers000000 000000 cmst/translations/cmst_ru_RU.ts000644 001750 000144 00001134706 12650551344 017352 0ustar00andyusers000000 000000 Agent Agent Input Данные агента Passphrase Пароль <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> <html><head/><body><p>Если старый пароль доступен, то он будет показан здесь для справки.</p></body></html> <html><head/><body><p>Type the passphrase here.</p></body></html> <html><head/><body><p>Введите пароль здесь.</p></body></html> <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> <html><head/><body><p>Установите этот флажок, чтобы скрыть символы пароля.</p></body></html> &Hide Passphrase &Скрыть пароль O&ld Passphrase &Старый пароль &Passphrase &Пароль Hidden Network Скрытая сеть &Name &Имя <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> <html><head/><body><p>Введите имя скрытой сети, к которой вы хотите подключиться.</p></body></html> Service Set Identifier Уникальный идентификатор сети &SSID &SSID Wireless Internet Service Provider roaming (WISPr) Роуминг поставщика услуг беспроводного интернета (WISPr) &Username &Имя пользователя <html><head/><body><p>WISPr username.</p></body></html> <html><head/><body><p>Имя пользователя WISPr.</p></body></html> Passwor&d &Пароль <html><head/><body><p>WISPr password.</p></body></html> <html><head/><body><p>Пароль WISPr.</p></body></html> Extensible Authentication Protocol (EAP) Расширяемый протокол аутентификации (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> <html><head/><body><p>Введите строку вашей идентификации для расширяемого протокола аутентификации</p></body></html> &Identity &Идентификация WiFi Protected Setup (WPS) Защищённая настройка Wi-Fi (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> <html><head/><body><p>Когда стоит флажок, используется аутентификация с помощью кнопки аутентификации WPS.</p></body></html> Use Push &Button Authentication Использовать аутентификацию с помощью &кнопки WPS &WPS Pin Пин &WPS <html><head/><body><p>Enter a WPS pin.</p></body></html> <html><head/><body><p>Введите пин WPS.</p></body></html> Browser Login Requested Запрошен вход с помощью браузера Choose or enter a browser: Выберите браузер или введите его название: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> <html><head/><body><p>Connman запрашивает открыть веб-браузер, чтобы завершить процесс входа.</p><p>Мы просканировали ваш ПУТЬ для браузеров и все найденные браузеры показаны в списке ниже. Вы можете выбрать любой один браузер, чтобы использовать его для входа. Если ваш веб-браузер отсутствует в списке, введите его название непосредственно в поле <span style=" font-weight:600;">«Выберите браузер или введите его название»</span>.</p><p>Для запуска браузера нажмите кнопку <span style=" font-weight:600;">«Запустить браузер»</span>. </p><p>Если вы хотите войти вручную, закройте это окно, запустите веб-браузер и перейдите по URL-адресу, указанному поле <span style=" font-weight:600;">«URL-адрес входа»</span>.</p></body></html> Login URL: URL-адрес входа: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> <html><head/><body><p>Connman запрашивает продолжение входа с помощью браузера. Это поле показывает URL-адрес со страницей входа.</p></body></html> <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> <html><head/><body><p>Используйте эту кнопку для запуска указанного браузера. Браузер откроется на странице, показанной в поле URL-адрес входа.</p></body></html> Launch &Browser Запустить &браузер <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Что это</p></body></html> ... ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Продолжить процесс подключения.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> <html><head/><body><p>Принять и использовать ответы, предоставленные вами в этом диалоге. </p><p>Это отправит введённый данные демону connman для продолжения процесса подключения.</p></body></html> O&K O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Отменить процесс подключения.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> <html><head/><body><p>Отменить диалог. </p><p>Это отправит сообщение демону connman о том, что вы отменили зпрос на подключение.</p></body></html> &Cancel &Отмена AgentDialog Information информация You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "%1 %2" Вы запросили браузер %1, но мы не можем найти программу терминала для его открытия. В настоящее время мы можем запустить %1, используя следующие терминалы: <b>roxterm</b> и <b>xterm</b>.<br><br>Для продолжения вам нужно открыть терминал вручную и затем ввести: "%1 %2" ConnmanAgent Connman Error Ошибка Connman Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Connman вернул следующую ошибку: <b><center>%1</b><br>Вы хотите попробовать снова? Agent Request Failed Запрос агента не удался The agent request failed before a reply was returned. Запрос агента не удался до возврата отклика. ConnmanCounter %L1 Bytes %L1 байтов %L1 KB %L1 КБ %L1 MB %L1 МБ %L1 GB %L1 ГБ <b>Transmit:</b><br>TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4 <b>Передано:</b><br>Всего TX: %1 (%2), ошибок TX: %3, пропущенных TX: %4 %Ln Packet(s) %n пакет %n пакета %n пакетов <br><br><b>Received:</b><br>RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4 <br><br><b>Получено:</b><br>Всего RX: %1 (%2), ошибок RX: %3, пропущенных RX: %4 <br><br><b>Connect Time:</b><br> <br><br><b>Время соединения:</b><br> %n Day(s) %n день %n дня %n дней %n Hour(s) %n час %n часа %n часов %n Minute(s) %n минута %n минуты %n минут %n Second(s) %n секунда %n секунды %n секунд ConnmanVPNAgent Connman Error Ошибка Connman Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Connman вернул следующую ошибку: <b><center>%1</b><br>Вы хотите попробовать снова? Agent Request Failed Запрос агента не удался The agent request failed before a reply was returned. Запрос агента не удался до возврата отклика. ControlBox Dialog Диалог &Status &Состояние <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> <html><head/><body><p>Этот флажок управляет глобальным параметром по включению или выключению всех сетевых устройств. Когда флажок установлен, устройства выключены.</p><p>Когда система находится в автономном режиме, можно включить отдельные устройства. При выходе из автономного режима отдельные правила для каждого устройства определяют, включится ли оно снова.</p></body></html> All Devices &Off &Отключить все устройства <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> <html><head/><body><p><span style=" font-weight:600;">Автономный режим</span></p><p>Автономный режим показывает глобальный параметр по включению всех сетевых устройств. Включение автономного режима приведёт к отключению устройств. Когда автономный режим не активирован, отдельные для каждого устройства правила определяют, включать ли устройство снова. </p><p>При автономном режиме всё-ещё можно включать технологии вручную. Например, отдельное использование устройств Wi-Fi или Bluetooth может быть разрешено в некоторых ситуациях.</p></body></html> Global Properties Общие свойства <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> <html><head/><body><p>Глобальный параметр для включения и выключения всех сетевых устройств. Когда автономный режим активирован, все сетевые устройства отключаются.</p><p>While in offline mode it is possible to turn individual devices back on. При выходе из автономного режима отдельные правила для каждого устройства определяют, включится ли оно снова.</p></body></html> OfflineMode: Unavailable Автономный режим: недоступно <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> <html><head/><body><p>Общее состояние подключения системы. Возможные значения: &quot;офлайн&quot;, &quot;простаивает&quot;, &quot;готово&quot;, и &quot;онлайн&quot;. </p></body></html> State: Unavailable Состояние: недоступно <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> <html><head/><body><p>Connman относится к устройствам как к технологиям. В этом поле будет отображаться информация о всех известных технологиях.</p><p>Чтобы включить или выключить технологию, нажмите на кнопку, которая отображается в столбце <span style=" font-weight:600;">«Включено»</span> для соответствующей технологии.</p></body></html> Technologies Технологии Name Имя Type Тип Powered Включено Connected Подключено Tethering Тетеринг Resc&an Ск&анировать повторно <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> <html><head/><body><p>В этом поле перечислены все службы, к которым connman может подключиться.</p></body></html> Services Службы State Состояние Connection Соединение <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> <html><head/><body><p>Переместить выбранную службу перед другой в списке.</p><p>Кнопка станет активной только после выбора службы.</p></body></html> Move Before Поместить до <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> <html><head/><body><p>Переместить выбранную службу после другой в списке.</p><p>Кнопка станет активной только после выбора службы.</p></body></html> Move After Поместить после <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>Спрятать поле «Соединение»</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> <html><head/><body><p>Когда стоит флажок, прячет имя соединения в поле «Службы».</p></body></html> &Less &Меньше &Details &Подробности Ser&vice С&лужба <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> <html><head/><body><p>Используйте этот выпадающий список, чтобы выбрать службу, для которой вы хотите просмотреть подробную информацию.<br/></p></body></html> <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> <html><head/><body><p>Метод настройки по умолчанию для всех служб – автоматический или что-то вроде DHCP. Он должен подходить для большинства пользователей, в противном случае эта кнопка позволит ручную настройку параметров Ethernet и IP для выбранной службы.</p><p>Эта кнопка будет неактивна, если служба конфигурируется внешним файлом или если служба – это скрытая Wi-Fi сеть. Свойства таких служб невозможно изменить.</p></body></html> Configuration Настройка &Wireless &Беспроводные сети Wireless Services Беспроводные службы <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Выберите службу Wi-Fi в таблице ниже, и нажмите эту кнопку, чтобы подключиться к этой службе. </p><p>Если в таблице только одна служба wifi, то при нажатии этой кнопки эта служба выберется автоматически и к ней будет предпринята попытка подключения. </p><p>Если будет нужна информация о службе, пароль, например, вам будет предложено ввести его.</p></body></html> Connect Подключиться <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>Выберите Wi-Fi службу в таблице снизу и нажмите эту кнопку, чтобы отключиться от неё. </p><p>Если есть только одна Wi-Fi служба в состоянии &quot;Готова&quot; или &quot;Онлайн&quot;, нажатие на эте кнопку автоматически выберет её и отключится от неё. </p><p>Это также может быть использовано для отмены предыдущей попытки соединения.</p></body></html> Disconnect Отсоединиться <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been sussessfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> <html><head/><body><p>Выберите службу Wi-Fi в таблице ниже, и нажмите эту кнопку, чтобы удалить эту службу. </p><p>Если служба была ранее успешно подключена (является «Избранной»), эта кнопка удалит статус «Избранной». Служба также будет отключена, если она в момент нажатия подключена. Если услуге требуется пароль то пароль будет снят и забыт </p><p>Если попытка подключения не удалась, то это также может использоваться для сброса службы.</p></body></html> Remove Удалить <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> <html><head/><body><p>Эта метка показывает количество Wi-Fi технологий (устройств), которые были найдены, и количество технологий, которые включены. Должна быть найдена и включена как минимум одна технология Wi-Fi для того, чтобы в поле снизу отображались услуги</p><p>Чтобы включить и выключить технологию, перейдите к таблице <span style=" font-weight:600;">Технологии</span> на вкладке <span style=" font-weight:600;">Состояние</span> и сделайте двойное нажатие мышью по тексту в столбце <span style=" font-weight:600;">Включено</span> для этой технологии.</p></body></html> Wifi State Состояние Wi-Fi <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Параметр командной строки: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> или </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Запустить графический пользовательский интерфейс свёрнутым в системный лоток.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Параметр командной строки: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> или </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Укажите время ожидания в секундах перед запуском значка в системном лотке (по умолчанию 0 секунд).</p><p>Если CMST запущен и пытается создать значок в системном лотке до запуска системного лотка, будет отображён диалог, объясняющий это. Это иногда происходит, когда программа запускается автоматически. Если вы знаете, что системный лоток будет загружен при запуске системы, вы можете указать время ожидания и CMST будет ждать указанное количество секунд перед тем как создать значок в системном лотке. Это нужно для того, чтобы дать время оконному менеджеру или панели на создание системного лотка перед попыткой помещения в него значка.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Параметр командной строки: <span style=" font-weight:600;">-c</span> или <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Отключить счётчики. Может быть использовано для минимизации нагрузки на систему.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Параметр командной строки: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Укажите частоту в секундах между обновлениями счётчика (по умолчанию 10 секунд). </p></body></html> Counter Update Rate Частота обновления счётчиков <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Default is no desktop specific code.</p></body></html> <html><head/><body><p>По умолчанию не используется код для конкретного окружения рабочего стола.</p></body></html> Rescan Offline Mode <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> <html><head/><body><p>На этой странице показаны доступные службы Wi-Fi. </p><p><span style=" font-weight:600;">Имя:</span> SSID сети.</p><p><span style=" font-weight:600;">Избранное:</span> сомвол сердца в этом столбце означает, что этот компьютер ранее подключался к сети через эту службу.</p><p><span style=" font-weight:600;">Подключено:</span> показывает состояние соединения этой службы. Наведите курсор на значок, чтобы увидеть всплывающее текстовое описание. Онлайн означает, что соединения с интернетом доступны и были проверены. Готов означает успешно подключённое устройство. </p><p><span style=" font-weight:600;">Безопасность: </span>описывает типы шифрования, используемые этой службой. Возможные значения &quot;нет&quot;, &quot;WEP&quot;, &quot;PSK&quot;, &quot;IEEE 8021.X&quot; и &quot;WPS&quot;.</p><p><span style=" font-weight:600;">Сила сигнала:</span> сила сигнала Wi-Fi, нормализованная по шкале от 0 до 100.</p><p><br/></p></body></html> <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> <html><head/><body><p>Принудительное сканирование всех технологий WiFi. Работает идентично команде <span style=" font-weight:600;">connmanctl scan wifi</span> из командной строки.</p><p>Кнопка будет неактивной, пока происходит сканирование.</p></body></html> Favorite Избранное Security Безопасность Signal Strength Сила сигнала &Counters &Счётчики <html><head/><body><p>The service being monitored by the counters.</p></body></html> <html><head/><body><p>Эту службу отслеживают счётчики.</p></body></html> Service: Служба: <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> <html><head/><body><p>Счётчики для &quot;онлайновой&quot; службы соединений, которая не помечена как роуминг. </p><p>Счётчики могут не всегда быть доступны. Счётчики могут быть отключены из командной строки (-c или --disable-counters) или случайно соединение будет зарегистрировано как &quot;готовое&quot; вместо &quot;онлайн&quot;. Онлайн — это &quot;готовое&quot; соединение, которое имеет проверенное соединение с интернетом. Онлайн можно быть только с &quot;готовым&quot; соединением, однако счётчики будут работать только с &quot;онлайновыми&quot; соединениями.</p></body></html> Home Домашняя сеть Counter not available. Счётчики не доступны. <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> <html><head/><body><p>Счётчики для &quot;онлайновой&quot; службы соединений, которая помечена как &quot;роуминг&quot;.</p><p>В случае с сотовыми сетями это обычно означает соединение с иностранным провайдером. </p><p>Счётчики могут не всегда быть доступны. Счётчики могут быть отключены из командной строки (-c или --disable-counters) или случайно соединение будет зарегистрировано как &quot;готовое&quot; вместо &quot;онлайн&quot;. Онлайн — это &quot;готовое&quot; соединение, которое имеет проверенное соединение с интернетом. Онлайн можно быть только с &quot;готовым&quot; соединением, однако счётчики будут работать только с &quot;онлайновыми&quot; соединениями.</p></body></html> Roaming Роуминг <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>Настройки счётчиков</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> <html><head/><body><p>Пороговые значения для обновления показаний счётчиков (разрешение счётчика). Для этого учитывается как количество данных, так и время.</p></body></html> Settings: Настройки: &Preferences &Предпочтения <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> <html><head/><body><p>Предпочтения для интерфейса находятся в этом поле.</p></body></html> Interface Интерфейс <html><head/><body><p>If checked the GUI will be restored from settings saved on disk. Settings include the geometry of the dialog and the state of various check boxes, such as this one. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p style='white-space:pre'>The settings file is: <span style=" font-weight:600;">${HOME}/.config/cmst/cmst.conf </span><br>This is a standard ini type text file.</p></body></html> <html><head/><body><p>Если поставлен флажок, параметры пользовательского интерфейса будут загружаться из сохранённых на диске настройки. Настройки включают в себя геометрию окна и состояние различных флажков, таких, как этот. </p><p>Эти настройки будут использоваться при следующей загрузке для восстановления пользовательского интерфейса таким, как он был при выключении.</p><p style='white-space:pre'>Файл настроек: <span style=" font-weight:600;">${HOME}/.config/cmst/cmst.conf</span><br>Это стандартный текстовый файл настроек.</p></body></html> Retain Settings Запоминать настройки <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> <html><head/><body><p>Если установлен флажок, отображение подсказок будет включено для виджетов интерфейса.</p><p>Подсказки — это небольшие всплывающие окна, которые появляются при наведении указателя мыши на область интерфейса. </p></body></html> Enable ToolTips (Interface) Разрешить всплывающие подсказки (для интерфейса) <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> <html><head/><body><p>Обычно счётчики ведут учёт нарастающим итогом, а также сохраняют время подключения и число TX и RX между загрузками. </p><p>Когда этот флажок установлен, то счетчики будут сбрасываться до нуля каждый раз, когда CMST запускается, и если CMST выполняется каждый раз, когда запущена служба Connman. </p></body></html> Reset Counters Обнулять показания счётчиков <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> <html><head/><body><p>Когда стоит флажок, отображаются дополнительные настройки для опытных пользователей.</p></body></html> Advanced Controls Расширенные настройки <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> <html><head/><body><p>Эти настройки контролируют различные опции при загрузке CMST. </p><p>Все эти опции доступны из командной строки, и если они заданы в командной строке, то они получают преимущество над этими настройками.</p></body></html> Start Options Опции запуска <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Параметр командной строки: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> или </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Отключить значок в системном лотке.</p><p>Может понадобиться системам, несовместимым со спецификацией Freedesktop.org.</p></body></html> <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>Отключено, поскольку сейчас Connman примет эту настройку, но ничего не сделает с ней.</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> <html><head/><body><p>Укажите объем данных в килобайтах, который должен быть передан до обновления счетчиков (по умолчанию 1024 КБ).</p><p>Connman примет этот параметр, но согласно комментарию в коде Connman эта функция всё ещё требует разработки, и выбор, следовательно, отключен.</p></body></html> Counter Update KB Обновление счётчиков, КБ <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> <html><head/><body><p>Укажите время ожидания в секундах перед запуском значка в системном лотке (по умолчанию 0 секунд).</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> <html><head/><body><p>Укажите объем данных в килобайтах, который должен быть передан до обновления счетчиков (по умолчанию 1024 КБ).</p></body></html> Start Minimized Запускать свёрнутым Wait Time Время ожидания Disable Tray Icon Отключить значок в системном лотке <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Параметр командной строки: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> или </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Использовать системный набор значков. Вы можете выбрать набор в поле справа или, если поле слева оставлено пустым, CMST попытается использоватьсистемный набор значков (если он определён).</p></body></html> Use Icon Theme Использовать тему значков Disable Counters Отключить счётчики <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><p>Укажите частоту в секундах между обновлениями показаний счётчика (по умолчанию 0 секунд).</p></body></html> <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> <html><head/><body><p>Использовать код, специфичный для выбранного окружения рабочего стола.</p><p>Начиная с версии 2014.11.24 кажется существует проблема с Qt 5.3 и некоторыми системными лотками. В программе есть код, спомощью которого можнно попытаться обойти эту проблему, и выбор одного из этих пунктов применит код, специфичный для окружения рабочего стола.</p><p>Если ошибка будет устранена, эти опции останутся для того, чтобы не портить загрузочный скрипт, но они уже не будут ни на что влиять.</p></body></html> Desktop Specific Для конкретных окружений рабочего стола None Нет <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Параметр командной строки: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Параметр командной строки: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Параметр командной строки: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Используется для обхода ошибки Qt, из-за которой значки в системном лотке отображается с белым или чёрным фоном вместо прозрачного.</p><p>Вы можете указать здесь цвет фона значка. Формат — шестнадцатиричное число RRGGBB. Если указанный цвет совпадает с фоном системного лотка, значит мы качественно создали псевдопрозрачность. </p></body></html> <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> &VPN VPN Services <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> Host Domain Домен Fake Transparency Псевдопрозрачность <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> <html><head/><body><p>Укажите цвет фона, как шестнадцатеричное число в формате RRGGBB.</p></body></html> <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><p>Какой набор значков использовать. Чтобы вы могли использовать этот набор, он должен быть установлен в системе. Если набор не установлен, или вы написали название неправильно, CMST будет использовать внутренний набор значков.</p><p> Если это поле пустое, CMST попытается использовать общесистемную тему значков (если она определена).</p></body></html> <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> <html><head/><body><p>Предпочтения для системного лотка находятся в этом поле.</p></body></html> System Tray Системный лоток <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> <html><head/><body><p>Если поставлен флажок, значок значок не будет отображаться в системном лотке.</p></body></html> Hide Tray Icon Спрятать иконку в системном лотке <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> <html><head/><body><p>Если поставлен флажок, в системном лотке будет появляться сообщения о состоянии при наведении на значок курсора.</p></body></html> Enable System Tray Popups Разрешить всплывающие уведомления при наведении на значок в системном лотке <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> <html><head/><body><p>Если установлен флажок, то системный лоток покажет сообщение, когда будет получено значительное событие от connman.</p><p>Уведомления могут быть обработаны с использованием значка в системном лотке или демоном уведомлений, если он установлен. Оба способа не могут быть активными в одно и то же время.</p></body></html> System Tray Notifications Уведомления в системном лотке Notifications Уведомления <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> <html><head/><body><p>Если установлен флажок, то системный демон уведомлений покажет предупреждение, когда будет получено значительное событие от connman.</p><p>Уведомления могут быть обработаны с использованием значка в системном лотке или демоном уведомлений, если он установлен. Оба способа не могут быть активными в одно и то же время.</p></body></html> Notification Daemon Демон уведомлений Server Status Состояние сервера Program Control Программное управление <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> <html><head/><body><p>Если поставлена «галочка», CMST поместит элемент в папку автозапуска текущего пользователя, снятие «галочки» удалит этот элемент. Обычно это папка: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST добавит или удалит только .desktop-файл из папки автозапуска. Автозапуск обычно зависит от вашего окружения рабочего стола и должен быть включён отсюда.</p></body></html> Enable Autostart Включить автозапуск <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> <html><head/><body><p>Если у службы Connman будет &quot;сбой&quot;, она по умолчанию будет оставаться в этом состоянии.</p><p>Если здесь стоит флажок, CMST автоматически попытается переподключиться к службе WiFi, находящейся в состоянии сбоя&quot;сбоя&quot;.</p></body></html> Retry Failed Connection Повторное после сбоя подключение к сети <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> <html><head/><body><p>Open the color selection dialog. </p></body></html> ... ... <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help &Справка &About &О программе <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> <html><head/><body><p>Показывает диалог, содержащий информацию об этой программе. </p></body></html> C&MST C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> <html><head/><body><p>Показать диалоговое окно, содержащее информацию наборе значков, используемых этой программой. </p></body></html> &AwOken &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> <html><head/><body><p>Отображает диалоговое окно, содержащее информацию о наборе инструментов QT, использованном для разработки этой программы.</p></body></html> &QT &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> <html><head/><body><p>Используйте эту кнопку, чтобы увидеть лицензию на эту программу.</p></body></html> &License &Лицензия <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> <html><head/><body><p>Используйте эту кнопку, чтобы увидеть журнал изменений этой программы.</p></body></html> ChangeLo&g Жу&рнал изменений <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> <html><head/><body><p><span style=" font-weight:600;">Справка</span></p><p>Справка по программе в основном представлена кнопкой &quot;Что это&quot; в нижнем левом углу. Нажмите эту кнопку и затем щёлкните по интересующему вас элементу. Функция &quot;Что это&quot; также доступна через контекстное меню нажатием правой кнопки мыши на кнопку, окно или область текста.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Что это</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>Используйте эту кнопку, чтобы узнать об элементе GUI через режим &quot;Что это&quot;. </p><p>Вы также можете нажать правую кнопку мыши на элементе, чтобы увидеть текст &quot;Что это&quot; для него.</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> <html><head/><body><p>Открыть редактор конфигурации для создания или редактирования файлов настройки (подготовки к работе) Connman.</p><p>Эти файлы находятся в /var/lib/connman, влядельцем которой является root:root. CMST зарегестрирует roothelper для получения разрешения на запись и чтение файлов в эту папку. </p><p>Для избежания злоупотреблением правами суперпользователя, редактор будет работать только с файлами, заканчивающимися на <span style=" font-style:italic;">.cmst.config</span>. Это окончание имени файла будет задано автоматически во время сохранения файла и не может быть изменено. </p><p>С помощью этого редактора невозможно изменить или удалить файлы настройки, созданные с помощью других средств.</p></body></html> Provisioning Editor Редактор конфигурации <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> <html><head/><body><p>Выйти из программы и убрать значок из системного лотка. Connman всё-ещё будет запущен как демон, но не будет управляться этой программой.</p></body></html> E&xit В&ыйти <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> <html><head/><body><p>Свернуть этот диалог. Если у вас отоброжается значок в системном лотке, этот диалог может быть восстановлен нажатием правой кнопки мыши на этом значке. Если значок в системном лотке спрятан, то сворачивание не будет доступно.</p></body></html> Mi&nimize С&вернуть Ma&ximize Ра&звернуть &Exit В&ыйти About %1 О %1 <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian) <center>%1 — это программа для взаимодействия с демоном Connman и предоставления контроля через системный лоток.<br><center>Версия <b>%2</b><center>Дата выпуска: %3<center>Копирайт c %4<center>разработана<center>Andrew J. Bibb<center>Вермонт, США<br><center><b>Помощники:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<br><center><b>Переводчики:</b><center>Jianfeng Zhang (китайский язык)<center>sqozz (немецкий язык)<center>Ilya Shestopalov (русский язык) About AwOken О AwOken <center>This program uses the <b>AwOken</b> icon set version 2.5<br><br>Released under the<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>The CMST icon is a derivative work from the AwOken icon set. <center>Эта программа использует набор значков <b>AwOken</b> версии 2.5<br><br>Выпущен под лицензией<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Международная лицензия<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>Значок CMST — это производная работа от набора значков AwOken. %1 license is the MIT license. Лицензия %1 — это лицензия MIT. License Лицензия %1 change log is not available. %1 журнал изменений не доступен. ChangeLog Журнал изменений Cancel Отмена <b>Service:</b> %1 <b>Служба:</b> %1 Unable to determine service Не удалось определить службу No Services Selected Нет выбранных служб You need to select a Wifi service before pressing the connect button. Выберите службу Wi-Fi перед нажатием кнопки подключения. You need to select a Wifi service before pressing the disconnect button. Выберите службу Wi-Fi перед нажатием кнопки отсоединения. You need to select a Wifi service before pressing the remove button. Выберите службу Wi-Fi перед нажатием кнопки удаления. Offline Mode Engaged Автономный режим активирован Offline Mode Disabled Автономный режим отключён %1 (%2) Network %1 (%2) сеть Connection: %1 Соединение: %1 Network Services: Сетевые службы: No network services available Не доступны никакие сетевые службы Service Error: %1 Ошибка службы: %1 Object Path: %1 Путь к объекту: %1 <center><b>We received a DBUS reply message indicating an error while trying to scan technologies.</b></center><br><br>Error Name: %1<br><br>Error Message: %2 <center><b>Мы получили ответ DBUS, сообщающий об ошибке при попытке сканирования технологий.</b></center><br><br>Название ошибки: %1<br><br>Сообщение ошибки: %2 <br><b>Service Details:</b><br> <br><b>Подробности о службе:</b><br> <b>Connection:</b> %1 <b>Соединение:</b> %1 Service Details WiFi Connections VPN Connections <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian)<br><center><b>Build Information:</b><center>Compiled using QT version %5<center>Built %6 - %7 %1 license is the MIT (Expat) license. You need to select a service before pressing the connect button. You need to select a service before pressing the disconnect button. VPN Engaged VPN Disengaged Warning внимание Service Type: %1<br> Тип службы: %1<br> Service State: %1<br> Состояние службы: %1<br> Favorite: %1<br> Избранное: %1<br> Yes favorite Да No favorite Нет External Configuration File: %1<br> Внешний файл настроек: %1<br> Yes immutable Да No immutable Нет Auto Connect: %1<br> Автоподсоединение: %1<br> On autoconnect включено No autoconnect Нет <br><b>IPv4</b><br> <br><b>IPv4</b><br> IP Address Acquisition: %1<br> Получение адреса IP: %1<br> IP Address: %1<br> Адрес IP: %1<br> IP Netmask: %1<br> Сетевая маска IP: %1<br> IP Gateway: %1<br> Шлюз IP: %1<br> <br><b>IPv6</b><br> <br><b>IPv6</b><br> Address Acquisition: %1<br> Получение адреса: %1<br> Prefix Length: <br> Длина префикса: <br> Prefix Length: %1<br> Длина префикса: %1<br> Privacy: %1<br> Конфиденциальность: %1<br> <br><b>Proxy</b><br> <br><b>Прокси</b><br> URL: %1<br> URL: %1<br> Servers:<br>&nbsp;&nbsp;%1<br> Серверы:<br>&nbsp;&nbsp;%1<br> Excludes:<br>&nbsp;&nbsp;%1<br> Исключая:<br>&nbsp;&nbsp;%1<br> <br><b>Name Servers</b><br> <br><b>Серверы имён</b><br> <br><br><b>Time Servers</b><br> <br><br><b>Серверы времени</b><br> <br><br><b>Search Domains</b><br> <br><br><b>Домены поиска</b><br> <br><br><b>Ethernet</b><br> <br><br><b>Ethernet</b><br> Connection Method: %1<br> Способ подключения: %1<br> Interface: %1<br> Интерфейс: %1<br> Device Address: %1<br> Адрес устройства: %1<br> MTU: %1<br> MTU: %1<br> <br><b>Wireless</b><br> <br><b>Беспроводные сети</b><br> Security: %1<br> Безопасность: %1<br> Strength: %1<br> Сила: %1<br> Roaming: %1<br> Роуминг: %1<br> Yes roaming Да No roaming Нет <br><b>VPN Provider</b><br> Host: %1<br> Domain: %1<br> Name: %1<br> Type: %1<br> State: Состояние: Engaged активирован Disabled не активирован Offline Mode Автономный режим %1On%1%1 powered %1Да%1%1 %1Off%1%1 powered %1Нет%1%1 Yes connected Да No connected Нет Yes tethered Да No tethered Нет Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. Частота обновления счётчиков основана на пороговом значении %L1 КБ данных и %L2 секундах времени. Ethernet Connection<br> icon_tool_tip Соединение Ethernet<br> Service: %1<br> Служба:%1<br> Interface: %1 Интерфейс: %1 WiFi Connection<br> icon_tool_tip Соединение Wi-Fi<br> SSID: %1<br> SSID: %1<br> Strength: %1%<br> Сила: %1%<br> VPN Connection<br> icon_tool_tip Connection is in the Ready State. icon_tool_tip Соединение в состоянии готовности. Connection is in the Failure State, attempting to reestablish the connection icon_tool_tip Соединение в неработоспособном состоянии, попытка переподключения Connection is in the Failure State. icon_tool_tip Соединение в неработоспособном состоянии. Not Connected icon_tool_tip Не подключено Error retrieving properties via Dbus Ошибка при получении свойств через Dbus Connection status is unknown Состояние соединения неизвестно Type: %1 <br>Powered On включено Off Выключено Not Connected Не подключено <br>Tethering Enabled Включена Connection : %1 Signal Strength: %1% Favorite Connection Never Connected <br>Security : %1 <br>Roaming <br>Autoconnect is <p style='white-space:pre'><center><b>%1</b></center> <center><b>Unable to find a systemtray on this machine.</b><center><br>The program may still be used to manage your connections, but the tray icon will be disabled.<center><br><br>If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the <b>-w</b> switch and set a delay as necessary. The exact wait time will vary from system to system. <center><b>Не удалось найти системный лоток в этой системе.</b><center><br>Эта программа всё-ещё может быть использована для управения вашими соединениями, но значок в системном лотке отражаться не будет.<center><br><br>Если вы видите это сообщение при загрузке системы и вы знаете, что системный лоток будет после загрузки системы, попытайтесь запустить с опцией <b>-w</b> и установить нужную задержку. Точное время ожидания будет зависеть от конкретной системы. Could not find a connection to the system bus Не удалось найти подключение к системной шине %1 - Critical Error %1 - критическая ошибка Unable to find a connection to the system bus.<br><br>%1 will not be able to communicate with connman. Не удалось найти подключение к системной шине.<br><br>%1 не сможет обмениваться данными с connman. Could not create an interface to connman on the system bus Не удалось создать интерфейс для connman на системной шине Unable to create an interface to connman on the system bus.<br><br>%1 will not be able to communicate with connman. Не удалось создать интерфейс для connman на системной шине.<br><br>%1 не сможет обмениваться данными с connman. Error reading or parsing connman.Manager.GetProperties Ошибка чтения или анализа connman.Manager.GetProperties %1 - Warning %1 - внимание There was an error reading or parsing the reply from method connman.Manager.GetProperties.<br><br>It is unlikely any portion of %1 will be functional. Произошла ошибка при чтении или анализе ответа от метода connman.Manager.GetProperties.<br><br>Вряд ли какая-нибудь часть %1 будет функционировать. Error reading or parsing connman.Manager.GetTechnologies Ошибка чтения или анализа connman.Manager.GetTechnologies There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.<br><br>Some portion of %1 may still be functional. Произошла ошибка при чтении или анализе ответа от метода connman.Manager.GetTechnologies.<br><br>Какая-то часть %1 всё ещё может функционировать. Error reading or parsing connman.Manager.GetServices Ошибка чтения или анализа connman.Manager.GetServices There was an error reading or parsing the reply from method connman.Manager.GetServices.<br><br>Some portion of %1 may still be functional. Произошла ошибка при чтении или анализе ответа от метода connman.Manager.GetServices.<br><br>Какая-то часть %1 всё ещё может функционировать. Colorize Icons WiFi Technologies:<br> %1 Found, %2 Powered Технологии Wi-Fi:<br>найдено %1, включено %2 <p style='white-space:pre'><center><b>%1 Properties</b></center> %1 version %2 by %3 has been detected on this system.<p>This server supports desktop Notification Specification version %4 %1 версия %2 by %3 была обнаружена в этой системе.<p>Этот сервер поддерживает спецификацию уведомлений рабочего стола версии %4 %1 detected %1 обнаружена Attempt %1 of 4 looking for notification server. Попытка %1 из 4-х поиска сервера уведомлений. Unable to find or connect to a Notification server. Не удалось найти или подключиться к серверу уведомлений. IconManager A new icon definition file will be installed to <b>%1</b> and a backup of the old definition file has been created as <b>%2</b> <p>If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. <p>If the original was never customized or you just wish to delete the backup now you may select <i>Discard</i> to delete the backup or <i>Save</i> to retain it. Peditor Property Editor Редактор свойств &General &Общие <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> <html><head/><body><p>Если активировано, то, когда другие соединения недоступны, эта служба будет подключать компьютер автоматически. Это доступно только для служб, помеченных как &quot;Избранное&quot;. </p><p>Эта служба не будет подключаться автоматически во время роуминга.</p></body></html> AutoConnect Автоподсоединение <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>Список настроенных вручную серверов доменных имён. Некоторые сотовые сети не предоставляют правильные сервера имён, и эта опция позволяет переопределение.</p><p>Этот массив отсортирован по приоритету, и первый пункт в списке означает сервер имён с наивысшим приоритетом.</p><p>Эта настройка полезна, когда используется ручная конфигурация и не настроен глобальный сервер доменных имён.</p><p>Введите один или больше адресов IP. Отделите каждый введённый адрес запятой, точкой с запятой или пробелом.</p></body></html> &Nameservers &Серверы имён <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>Список заданных вручную серверов времени.</p><p>Первый пункт списка означает сервер времени в наивысшим приоритетом.</p><p>При использовании ручной конфигурации эта настройка полезна для перезаписи настроек всех остальных настроек серверов времени. Это зависит от конкретной службы, следовательно, используются только значения для службы по умолчанию.</p><p>Изменения этого свойства приведут к перезапуску запросов NTP.</p><p>Введите один или более адресов IP. Отделите каждый введённый адрес запятой, точкой с запятой или пробелом.</p></body></html> &TImeservers &Серверы времени <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>Список заданных вручную доменов поиска.</p><p>Введите один или больше адресов IP. Отделите каждый введённый адрес запятой, точкой с запятой или пробелом.</p></body></html> &Domains &Домены <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> <html><head/><body><p>Пользовательская конфигурация настроек IPv4.</p></body></html> IPv&4 IPv&4 Address Адрес Netmask Сетевая маска Gateway Шлюз DHCP DHCP Manual Вручную Off Выключено Method Способ <html><head/><body><p>User configuration of IPv6 settings</p></body></html> <html><head/><body><p>Пользовательская конфигурация настроек IPv6</p></body></html> IPv&6 IPv&6 Auto Автоматически Prefix Length Длина префикса Privacy Конфиденциальность Disabled Выключена Preferred Предпочитаема Enabled Включена <html><head/><body><p>User configuration of Proxy settings.</p></body></html> <html><head/><body><p>Пользовательская конфигурация настроек прокси.</p></body></html> &Proxy &Прокси Direct Непосредственно <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> <html><head/><body><p>URL-адрес для автоматической настройки прокси. Используется &quot;автоматическим&quot; способом.</p></body></html> URL URL Servers Серверы <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>Используется при выбранном &quot;ручном&quot; способе. Список URI прокси. URI без протокола будет использован как обычный URI прокси.</p><p>Введите один или больше адресов IP. Отделите каждый введённый адрес запятой, точкой с запятой или пробелом.</p></body></html> Excludes Исключить <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>Используется при выбранном &quot;ручном&quot; способе. Список узлов, к которым можно подключаться напрямую.</p><p><br/></p><p>Введите один или больше адресов IP. Отделите каждый введённый адрес запятой, точкой с запятой или пробелом.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Что это</p></body></html> <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> <html><head/><body><p>Очистить все элементы на текущей странице.</p><p>Это вернёт значение по умолчанию в каждое поле на текущей странице, что, в общем случае означает пустое поле.</p></body></html> Reset Pa&ge Сбросить &страницу <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> <html><head/><body><p>Очистить все поля каждой страницы диалога.</p><p>Это вернёт значения по умолчанию в каждое поле на каждой странице.</p></body></html> Reset &All Сбросить &всё <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> <html><head/><body><p>Подтвердить все элементы, отправить их Connman, и закрыть диалог.</p></body></html> OK OK <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> <html><head/><body><p>Закрыть диалог без отправки данных Connman.</p></body></html> Cancel Отмена Provisioning Provisioning Editor Редактор конфигурации <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Окно текстового редактора.</p><p>Вы можете ввести или вырезать и вставить в в окно. Вы также можете использовать меню выше для вставки текстовых полей.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> <html><head/><body><p>Открыть существующий файл настроек.</p></body></html> &Open &Открыть <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> <html><head/><body><p>Записать отображаемые данные в файл настроек.</p><p>Поле со списком содержит список файлов настроек, созданных CMST, чтобы обеспечить простой способ их перезаписи. Вы также можете ввести имя в поле со списком.</p><p>Не надо указывать путь, ни расширение файла, так как оба будут вырезаны и заменены допустимыми значениями.</p></body></html> &Save &Сохранить <html><head/><body><p>Delete a config file.</p></body></html> <html><head/><body><p>Удалить файл настроек.</p></body></html> &Delete &Удалить <html><head/><body><p>Clear all text from the editor window.</p></body></html> <html><head/><body><p>Очистить окно от всего текста.</p></body></html> &Clear Page &Очистить страницу <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Что это</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Войти в режим &quot;Что это&quot;.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> <html><head/><body><p>Выйти из диалога.</p></body></html> E&xit В&ыйти [global] [общие] Name Имя Description Описание [service_*] [служба_*] Type Тип MAC MAC Nameservers Серверы имён Timeservers Серверы времени SearchDomains Домены поиска Domain Домен SSID SSID EAP EAP CACertFile Файл сертификата CA ClientCertFile Файл сертификата клиента PrivateKeyFile Файл личного ключа PrivateKeyPassphrase Пароль личного ключа PrivateKeyPassphraseType Тип пароля личного ключа Identity Идентификация Phase2 Фаза2 Passphrase Пароль Security Безопасность Hidden Скрытые Eduroam (long) Eduroam (длинный) Eduroam (short) Eduroam (короткий) IPv4 Address IPv4-адрес IPv4 Off Отключить IPv4 IPV4 DHCP IPv4 DHCP IPv6 Address IPv6-адрес IPv6 Off Отключить IPv6 IPv6 Auto Автоматически IPv6 IPv6.Privacy Конфиденциальность IPv6 ProvisioningEditor Global Общие Service Служба WiFi Wi-Fi Templates Шаблоны File Path to the CA Certificate File Путь к файлу сертификата CA File Path to the Client Certificate File Путь к файлу сертификата клиента File path to the Client Private Key File Путь к личному файлу ключей клиента Key Files (*.pem);;All Files (*.*) Файлы ключей (*.pem);;Все файлы (*.*) MAC address. MAC-адрес. SSID: hexadecimal representation of an 802.11 SSID SSID: шестнадцатиричное представление 802.11 SSID List of Nameservers Список серверов имён List of Timeservers Список серверов времени List of DNS Search Domains Список доменов поиска DNS Domain name to be used Доменное имя, которое будет использоваться Enter the string representation of an 802.11 SSID. Введите строковое представление 802.11 SSID. Service type. Тип службы. EAP type. Тип EAP. Private key passphrase type. Тип пароля личного ключа. Network security type. Тип безопасности сети. Hidden network Скрытая сеть IPv6 Privacy Конфиденциальность IPv6 %1 - Item Input %1 - Ввод элемента Tag which will replace the * with<br>an identifier unique to the config file. Метка, которая заменит * <br>уникальным идентификатором в файле настроек. Enter the network name. Ввести имя сети. Enter a description of the network. Введите описание сети. Password/Passphrase for the private key file. Пароль для файла закрытого ключа. Identity string for EAP. Строка идентификации для EAP. RSN/WPA/WPA2 Passphrase Пароль RSN/WPA/WPA2 Phase 2 (inner authentication with TLS tunnel)<br>authentication method. Вторая фаза (внутренняя аутентификация через TLS-туннель)<br>способа аутентификации. %1 - Text Input %1 - Текстовый ввод Information информация Critical критическая The IPv4 <b>Address</b>, <b>Netmask</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. Должны быть предусмотрены <b>IPv4-адрес</b>, <b>маска сети</b>, и необязательно <b>шлюз</b>.<p>Нажмите ОК, когда будете готовы продолжить. IPv4 Address IPv4-адрес IPv4 Netmask Сетевая маска IPv4 IPv4 Gateway (This is an optional entry) Шлюз IPv4 (это необязательный элемент) The IPv6 <b>Address</b>, <b>Prefix Length</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. Должны быть предусмотрены <b>IPv6-адрес</b>, <b>длина префикса</b>, и необязательно <b>шлюз</b>.<p>Нажмите ОК, когда будете готовы продолжить. IPv6 Address IPv6-адрес %1 - Integer Input %1 - Целочисленный ввод Enter the IPv6 prefix length Введите длину префикса IPv6 IPv6 Gateway (This is an optional entry) Шлюз IPv6 (это необязательный элемент) <center>No configuration files were found.<br>You may use this dialog to create one. <center>Файлы настроек не найдены.<br>Вы можете использовать этот диалог для их создания. %1 - Information %1 - Информация <center>Reading configuration file: %1 <center>Чтение файла настроек: %1 %1 - Select File %1 - Выбрать файл Select a file to load. Выберите файл для загрузки. <center>No configuration files were found.<br>Nothing will be deleted. <center>Файлы настроек не найдены.<br>Ничего не будет удалено. Select a file to be deleted. Выберите файл для удаления. Enter a new file name or select<br>an existing file to overwrite. Введите новое имя файла или выберите<br>существующий файл для перезаписи. File read completed Чтение файла завершено File deleted Файл удалён Error encountered deleting. Ошибка удаления. File save failed. Не удалось сохранить файл. %L1 KB written %L1 КБ записано %L1 Bytes written %L1 Байтов записано <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 <b>Ошибка имени DBus:</b> %1<br><br><b>Строка:</b> %2<br><br><b>Сообщение:</b> %3 RootHelper Failed to register service org.cmst.roothelper - there may be another instance running. Не удалось зарегистрировать сервис org.cmst.roothelper — возможно запущен другой экземпляр. Failed to register roothelper object on the system bus. Не удалось зарегистрировать объект roothelper на системной шине. ScrollBox Scrollbox TextLabel TranslateStrings connman system tray Main Window Title Системный лоток connman cmst Abbreviated Program Name - used for QMessageBox titles idle connman state string простаивает association connman state string Соединение configuration connman state string Настройка ready connman state string Готова online connman state string Онлайн disconnect connman state string Отсоединение failure connman state string Сбой offline connman state string офлайн system connman type string Системная ethernet connman type string Ethernet wifi connman type string Wi-Fi bluetooth connman type string Bluetooth cellular connman type string Сотовая gps connman type string GPS vpn connman type string VPN gadget connman type string Гаджет p2p connman type string P2P wired connman type string Проводная direct connman proxy string непосредственно manual connman proxy string вручную auto connman proxy string автоматически psk connman security string PSK ieee8021x connman security string IEEE 802.1X none connman security string отсутствует wep connman security string WEP wps connman security string WPS Invalid arguments connman error string Неправильные аргументы Permission denied connman error string Доступ запрещён Passphrase required connman error string Требуется пароль Not registered connman error string Не зарегистрирована Not unique connman error string Не уникальна Not supported connman error string Не поддерживается Not implemented connman error string Не внедрено Not found connman error string Не найдена No carrier connman error string In progress connman error string В процессе Already exists connman error string Уже существует Already enabled connman error string Уже включена Already disabled connman error string Уже выключена Already connected connman error string Уже подключена Not connected connman error string Не подключена Operation aborted connman error string Операция отменена Operation timeout connman error string Время ожидания операции вышло Invalid service connman error string Неправильная служба Invalid property connman error string Неправильное свойство disabled connman privacy string enabled connman privacy string prefered connman privacy string auto connman ethernet connection method автоматически manual connman ethernet connection method вручную dhcp connman ipv4 method string manual connman ipv4 method string вручную off connman ipv4 method string fixed connman ipv4 method string auto connman ipv6 method string автоматически manual connman ipv6 method string вручную 6to4 connman ipv6 method string off connman ipv6 method string openconnect connman vpn connection type openvpn connman vpn connection type vpnc connman vpn connection type l2tp connman vpn connection type pptp connman vpn connection type auto connamn ipv6 method string автоматически manual connamn ipv6 method string вручную Invalid arguments connman error sring Неправильные аргументы Permission denied connman error sring Доступ запрещён Passphrase required connman error sring Требуется пароль Not registered connman error sring Не зарегистрирована Not unique connman error sring Не уникальна Not supported connman error sring Не поддерживается Not implemented connman error sring Не внедрено Not found connman error sring Не найдена In progress connman error sring В процессе Already exists connman error sring Уже существует Already enabled connman error sring Уже включена Already disabled connman error sring Уже выключена Already connected connman error sring Уже подключена Not connected connman error sring Не подключена Operation aborted connman error sring Операция отменена Operation timeout connman error sring Время ожидания операции вышло Invalid service connman error sring Неправильная служба Invalid property connman error sring Неправильное свойство VPNAgent VPN Agent Input Username <html><head/><body><p>WISPr username.</p></body></html> <html><head/><body><p>Имя пользователя WISPr.</p></body></html> Password <html><head/><body><p>WISPr password.</p></body></html> <html><head/><body><p>Пароль WISPr.</p></body></html> Host Name Имя OpenConnect CA Cert. Client Cert. Cookie Server Cert. VPN Host <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Что это</p></body></html> ... ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Продолжить процесс подключения.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> <html><head/><body><p>Принять и использовать ответы, предоставленные вами в этом диалоге. </p><p>Это отправит введённый данные демону connman для продолжения процесса подключения.</p></body></html> O&K O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Отменить процесс подключения.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> <html><head/><body><p>Отменить диалог. </p><p>Это отправит сообщение демону connman о том, что вы отменили зпрос на подключение.</p></body></html> &Cancel &Отмена Save Credentials VPN_Editor Global Общие OpenConnect OpenVPN VPNC L2TP PPTP All Files (*.*) CA Files (*.pem *.ca);;All Files (*.*) Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Key Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Config Files (*.ovpn *.conf *.config);;All Files (*.*) VPN server IP address (ex: 1.2.3.4) %1 - Item Input %1 - Ввод элемента %1 - Verify Option User defined name for the VPN Domain name for the VPN Service (example: corporate.com) Networks behing the VPN link, if more than one separate by a comma. Format is network/netmask/gateway, and gateway can be omitted. Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16 Networks = entry is optional and may be left blank. %1 - Text Input %1 - Текстовый ввод Information информация <center>No configuration files were found.<br>You may use this dialog to create one. <center>Файлы настроек не найдены.<br>Вы можете использовать этот диалог для их создания. %1 - Information %1 - Информация <center>Reading configuration file: %1 <center>Чтение файла настроек: %1 %1 - Select File %1 - Выбрать файл Select a file to load. Выберите файл для загрузки. <center>No configuration files were found.<br>Nothing will be deleted. <center>Файлы настроек не найдены.<br>Ничего не будет удалено. Select a file to be deleted. Выберите файл для удаления. Enter a new file name or select<br>an existing file to overwrite. Введите новое имя файла или выберите<br>существующий файл для перезаписи. File read completed Чтение файла завершено File deleted Файл удалён Error encountered deleting. Ошибка удаления. File save failed. Не удалось сохранить файл. %L1 KB written %L1 КБ записано %L1 Bytes written %L1 Байтов записано Critical критическая <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 <b>Ошибка имени DBus:</b> %1<br><br><b>Строка:</b> %2<br><br><b>Сообщение:</b> %3 VPN_Prov VPN Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Окно текстового редактора.</p><p>Вы можете ввести или вырезать и вставить в в окно. Вы также можете использовать меню выше для вставки текстовых полей.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> <html><head/><body><p>Открыть существующий файл настроек.</p></body></html> &Open &Открыть <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> <html><head/><body><p>Записать отображаемые данные в файл настроек.</p><p>Поле со списком содержит список файлов настроек, созданных CMST, чтобы обеспечить простой способ их перезаписи. Вы также можете ввести имя в поле со списком.</p><p>Не надо указывать путь, ни расширение файла, так как оба будут вырезаны и заменены допустимыми значениями.</p></body></html> &Save &Сохранить <html><head/><body><p>Delete a config file.</p></body></html> <html><head/><body><p>Удалить файл настроек.</p></body></html> &Delete &Удалить <html><head/><body><p>Clear all text from the editor window.</p></body></html> <html><head/><body><p>Очистить окно от всего текста.</p></body></html> &Clear Page &Очистить страницу <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Что это</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Войти в режим &quot;Что это&quot;.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> <html><head/><body><p>Выйти из диалога.</p></body></html> E&xit В&ыйти [global] [общие] Name Имя Name of the network. Description Описание Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE PPPD.ReqMPPE40 PPPD.ReqMPPE128 PPPD.ReqMPPEStateful VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert Local peer's signed certificate. OpenVPN.Key Local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass Authenticate with server using username/password? OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. main.cpp Another running instance of CMST has been detected. This instance is aborting Была обнаружена запущенная копия CMST. Запуск этой копии отменён [Experimental] Disable data counters. May be used to minimize load on your system. [Экспериментально] Отключить счётчики данных. Может быть использовано для уменьшения нагрузки на систему. Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. Отключить значок в системном лотке. Может понадобиться системным лоткам, не соответствующим спецификации Freedesktop.org. Connman System Tray. Connman в cистемном лотке. Bypass restoring the window state if restoring window state is specified in the settings file. Bypass restoring any start options in the settings file. Use an icon theme from your system. Использовать системную тему значков. Icon Theme Name Название темы значков Log the connman inputRequest for debugging purposes. Журналировать запрос connman inputRequest для целей отладки. Start the GUI minimized in the system tray. Запустить графический пользовательский интерфейс, свёрнутым в системный лоток. Specify the wait time in seconds before starting the system tray icon. Укажите время ожидания в секундах перед запуском значка в системном лотке. seconds секунд [Experimental] The number of kb that have to be transmitted before the counter updates. [Экспериментально] Количество кб которые должны быть переданы перед обновлением счётчиков. KB КБ [Experimental] The interval in seconds between counter updates. [Экспериментально] Промежуток в секундах между обновлением счётчиков. If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB) Если значку в системном лотке требуется псевдопрозрачность, укажите цвет фона (формат: 0xRRGGBB) RRGGBB Use XFCE specific code. Использовать специальный код для XFCE. Use MATE DE specific code. Использовать специальный код для окружения рабочего стола MATE. cmst/apps/cmstapp/code/vpn_agent/vpnagent_dialog.h000644 001750 000144 00000004106 12650017374 023003 0ustar00andyusers000000 000000 /**************************** vpnagent_dialog.h *************************** Code to manage the agent user interface. When the connman daemon needs to communicate with the user it does so through the agent. The agent has a QDialog as a class member, and agent_dialog.cpp manages that dialog. Copyright (C) 2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef VPN_AGENT_DIALOG_H # define VPN_AGENT_DIALOG_H # include # include # include # include "ui_vpnagent.h" // The class to control the agent UI based on a QDialog class VPNAgentDialog : public QDialog { Q_OBJECT public: // members VPNAgentDialog(QWidget*); // functions void createDict(QMap&); int showPage(const QMap&); private: // members Ui::VPNAgent ui; // functions void initialize(); private slots: void showWhatsThis(); public: inline void setWhatsThisIcon(QIcon icon) {ui.toolButton_whatsthis->setIcon(icon);} }; #endif cmst/apps/cmstapp/code/iconman/iconman.cpp000644 001750 000144 00000040161 12650736224 021267 0ustar00andyusers000000 000000 /**************************** iconman.cpp ****************************** Class to manage icons and allow the user to provide substitutions based on the the system theme. Copyright (C) 2015-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include "./iconman.h" # include # include # include # include # include # include # include # include # include # include # include // Constructor IconManager::IconManager(QObject* parent) : QObject(parent) { // Setup the config path and file name (where we the store icon_def file) // APP defined in resource.h QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); QString home = env.value("HOME"); cfg = QString(env.value("XDG_CONFIG_HOME", QString(QDir::homePath()) + "/.config") + "/%1/%1.icon").arg(QString(APP).toLower() ); // Set the qrc data member qrc = QString(":/text/text/icon_def.txt"); // Initialize icon_map icon_map.clear(); // Make the local conf file if necessary this->makeLocalFile(); // Create the icon_ map. QFile f1(qPrintable(cfg) ); if (!f1.open(QIODevice::ReadOnly | QIODevice::Text)) { #if QT_VERSION >= 0x050400 qCritical("Error opening icon_def file: %s", qUtf8Printable(cfg) ); # else qCritical("Error opening icon_def file: %s", qPrintable(cfg) ); # endif } QTextStream in(&f1); QString line; while (!in.atEnd()) { line = in.readLine(); line = line.simplified(); if (line.startsWith("[icon]", Qt::CaseInsensitive) ) { IconElement ie; QString iconame; do { line = in.readLine(); if (line.startsWith("icon_name", Qt::CaseInsensitive) ) iconame = extractValue(line); else if (line.startsWith("resource", Qt::CaseInsensitive) ) ie.resource_path = extractValue(line); else if (line.startsWith("colorize", Qt::CaseInsensitive) ) ie.colorize = extractValue(line); else if (line.startsWith("fdo_name", Qt::CaseInsensitive) ) ie.fdo_name = extractValue(line); else if (line.startsWith("theme_names", Qt::CaseInsensitive) ) ie.theme_names = extractValue(line).split(',', QString::SkipEmptyParts) ; } while ( ! line.isEmpty() ); icon_map[iconame] = ie; } // if [icon] } // while not atEnd() f1.close(); return; } ////////////////////////////// Public Functions //////////////////////////// // // Function to return a QIcon based on the name provided QIcon IconManager::getIcon(const QString& name) { // Data members IconElement ie = icon_map.value(name); QIcon ico = QIcon(); // If the internal theme is being used (and the user has not // messed up the local config file) use that first. if (QIcon::themeName() == INTERNAL_THEME) { if (buildResourceIcon(ico, ie.resource_path, ie.colorize) ) return ico; } // if using internal theme // Next look for a user specified theme icon if (ie.theme_names.size() > 0 ) { for (int i = 0; i < ie.theme_names.size(); ++i) { if (buildThemeIcon(ico, ie.theme_names.at(i) ) ) return ico; } // for } // if theme_names.size() > 0 // Next look for a freedesktop.org named icon if (! ie.fdo_name.isEmpty() ) { if (buildThemeIcon(ico, ie.fdo_name) ) return ico; } // if freedesktop name not empty // Then look for hardcoded name in the users config dir if (buildResourceIcon(ico, ie.resource_path, ie.colorize) ) return ico; // Last stop is our fallback hard coded into the program buildResourceIcon(ico, getFallback(name), ie.colorize); return ico; } // // Function to return a QString containing the icon theme name or resource path QString IconManager::getIconName(const QString& name) { // Data members IconElement ie = icon_map.value(name); // If the internal theme is being used (and the user has not // messed up the local config file) use that first. if (QIcon::themeName() == INTERNAL_THEME ) { const QString res_path = ie.resource_path.section('|', 0, 0).simplified(); if (QFileInfo(res_path).exists() ) return res_path; } // if using internal theme // Next look for a user specified theme icon if (ie.theme_names.size() > 0 ) { for (int i = 0; i < ie.theme_names.size(); ++i) { QString theme_icon = ie.theme_names.at(i).section('|', 0, 0).simplified(); if (QIcon::hasThemeIcon(theme_icon) ) return theme_icon; } // for } // if namelist contains entries // Next look for a freedesktop.org named icon if (! ie.fdo_name.isEmpty() ) { QString theme_icon = ie.fdo_name.section('|', 0, 0).simplified(); if (QIcon::hasThemeIcon(theme_icon) ) return theme_icon; } // if freedesktop name not empty // Then look for hardcoded name in the users config dir if (! ie.resource_path.isEmpty() ) { const QString res_path = ie.fdo_name.section('|', 0, 0).simplified(); if (QFileInfo(res_path).exists() ) return res_path; } // Last stop is our fallback hard coded into the program const QString res_path = getFallback(name).section('|', 0, 0).simplified(); return res_path; } ////////////////////////////// Private Functions //////////////////////////// // // Function to make an icon from resource file(s). A reference to the Icon // is sent to this function and is modified by this function. If the name // argument contains a | the name to the left is used for the "on" state // and the next name is used for the "off" state. Additional text is ignored. // return true if we could find the resource files bool IconManager::buildResourceIcon(QIcon& icon, const QString& name, const QString& s_col) { // constants from name const QString name_on = name.section('|', 0, 0).simplified(); const QString name_off = name.section('|', 1, 1).simplified(); // see if we need to colorize QColor qc_col = QColor(); if (s_col.contains("yes", Qt::CaseInsensitive) || s_col == "1" ) qc_col = icon_color; else if (s_col.size() == 6) qc_col.setNamedColor(QString("#" + s_col) ); // check to see if the names exist, if they do build the icon if (QFileInfo(name_on.section(' ', 0, 0)).exists() ) { if (! name_off.isEmpty() ) { if (QFileInfo(name_off.section(' ', 0, 0)).exists() ) icon.addPixmap(processArt(name_off, qc_col), QIcon::Normal, QIcon::Off); } // if name_off not empty icon.addPixmap(processArt(name_on, qc_col), QIcon::Normal, QIcon::On); return true; } // if name_on exists return false; } // // Function to make an icon from theme file(s). A reference to the Icon // is sent to this function and is modified by this function. If the name // argument contains a | the name to the left is used for the "on" state // and the next name is used for the "off" state. Additional text is ignored. // return true if we could find the theme files bool IconManager::buildThemeIcon(QIcon& icon, const QString& name) { const QString name_on = name.section('|', 0, 0).simplified(); const QString name_off = name.section('|', 1, 1).simplified(); // check to see if the names exist, if they do build the icon if (QIcon::hasThemeIcon(name_on) ) { QList sizes; if (! name_off.isEmpty() ) { if (QIcon::hasThemeIcon(name_off) ) { sizes = QIcon::fromTheme(name_off).availableSizes(QIcon::Normal, QIcon::On); for (int i = 0; i < sizes.count(); ++i) { QPixmap pix02 = QIcon::fromTheme(name_off).pixmap(sizes.at(i), QIcon::Normal, QIcon::On); icon.addPixmap(pix02, QIcon::Normal, QIcon::Off); } //for } // if name_off else return false; } // if name_off not empty sizes = QIcon::fromTheme(name_on).availableSizes(QIcon::Normal, QIcon::On); for (int i = 0; i < sizes.count(); ++i) { QPixmap pix01 = QIcon::fromTheme(name_on).pixmap(sizes.at(i), QIcon::Normal, QIcon::On); icon.addPixmap(pix01, QIcon::Normal, QIcon::On); } // for return true; } // if name_on exists return false; } // // Function to return the resource name of an icon. Read from the resource file // and only used in case the user has totally messed up his local copy of the // cmst.icon file QString IconManager::getFallback(const QString& name) { // Variables QString rtnstr = QString(); // Open the resource file for reading QFile f0(qrc); if (!f0.open(QIODevice::ReadOnly | QIODevice::Text)) { #if QT_VERSION >= 0x050400 qCritical("Error opening resource file: %s", qUtf8Printable(qrc) ); #else qCritical("Error opening resource file: %s", qPrintable(qrc) ); #endif return rtnstr; } // Look for icon in the resource file and extract the resource value QTextStream in(&f0); QString line; while (!in.atEnd()) { line = in.readLine(); line = line.simplified(); if (line.startsWith("[icon]", Qt::CaseInsensitive) ) { QString key = ""; QString val = ""; do { line = in.readLine(); if (line.startsWith("icon_name", Qt::CaseInsensitive) ) key = extractValue(line); else if (line.startsWith("resource", Qt::CaseInsensitive) ) val = extractValue(line); } while ( key.isEmpty() || val.isEmpty() ); if (key == name) { rtnstr = val; break; } // key = name } // if [icon] } // while not atEnd() f0.close(); return rtnstr; } // // Function to make a local version of the configuration fiqle void IconManager::makeLocalFile() { // constants const int maxloop = 50; // Get information about the last installed icon def file from the settings QSettings* settings = new QSettings(ORG, APP, this); settings->beginGroup("IconManager"); QString lastmd5 = settings->value("last_installed_icon_def_file").toString(); settings->endGroup(); // Get the MD5 sum of the current QFile src(qrc); src.open(QIODevice::ReadOnly); QCryptographicHash hash(QCryptographicHash::Md5); hash.addData(&src); src.close(); QString currentmd5 = QString::fromLatin1(hash.result().toHex() ); // If the user's local conf file exists if (QFileInfo::exists(cfg) ) { if (lastmd5 == currentmd5) { // this should be the typical case settings->deleteLater(); return; } // MD5 sums don't match so make a backup of the existing local file else { // Find a backup name we can use int ctr = 0; QString bak; do { bak = QString(cfg + ".%1").arg(++ctr, 2, 10, QChar('0')); } while (QFileInfo::exists(bak) && ctr <= maxloop); // Now make the backup QFile f_cfg(cfg); if (ctr <= maxloop && f_cfg.copy(bak) ) { QMessageBox::StandardButton dia_rtn = QMessageBox::information(0, QString(APP), tr("A new icon definition file will be installed to %1 and a backup of the old definition file has been created as %2 \

If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. \

If the original was never customized or you just wish to delete the backup now you may select Discard to delete the backup or Save to retain it.").arg(cfg).arg(bak), QMessageBox::Save | QMessageBox::Discard, QMessageBox::Save); if (dia_rtn == QMessageBox::Discard) if (! QFile::remove(bak)) #if QT_VERSION >= 0x050400 qCritical("Failed to remove the backup file: %s", qUtf8Printable(bak) ); #else qCritical("Failed to remove the backup file: %s", qPrintable(bak) ); #endif } // if creating a backup copy worked else { #if QT_VERSION >= 0x050400 qCritical("Failed creating the icon definition backup file: %s", qUtf8Printable(bak) ); #else qCritical("Failed creating the icon definition backup file: %s", qPrintable(bak) ); #endif settings->deleteLater(); return; } // else creating a backup failed so return, don't continue // Have a backup, now create the new file QFile::remove(cfg); QFile s(qrc); if (s.copy(cfg) ) { QFile::setPermissions(cfg, QFileDevice::ReadOwner | QFileDevice::WriteOwner); settings->beginGroup("IconManager"); settings->setValue("last_installed_icon_def_file", currentmd5); settings->endGroup(); } // if creating new file worked else { #if QT_VERSION >= 0x050400 qCritical("Failed creating a new icon definition file: %s", qUtf8Printable(qrc) ); #else qCritical("Failed creating a new icon definition file: %s", qPrintable(qrc) ); #endif } // failed creating the new file (next step is return so no reason to call it here) } // qrc is different than the last installed } // if local icon_def exists // Local icon_def does not exist so create the directory (if need be) and copy the icon_def file else { QDir d; if (d.mkpath(QFileInfo(cfg).path()) ) { QFile s(qrc); if (s.copy(cfg) ) { QFile::setPermissions(cfg, QFileDevice::ReadOwner | QFileDevice::WriteOwner); settings->beginGroup("IconManager"); settings->setValue("last_installed_icon_def_file", currentmd5); settings->endGroup(); } // if creating new file worked else #if QT_VERSION >= 0x050400 qCritical("Failed creating a new icon definition file: %s", qUtf8Printable(qrc) ); #else qCritical("Failed creating a new icon definition file: %s", qPrintable(qrc) ); #endif } // if mkpath returned true else #if QT_VERSION >= 0x050400 qCritical("Failed creating directory %s for the icon definition file.", qUtf8Printable(QFileInfo(cfg).path()) ); #else qCritical("Failed creating directory %s for the icon definition file.", qPrintable(QFileInfo(cfg).path()) ); #endif } // else local icon_def did not exist settings->deleteLater(); return; } // // Function to extract the value in the data line. The value is the part // after the = sign, with all white space and comments removed. Argument // sv is the entire line containing the value. QString IconManager::extractValue(const QString& sv) { QString s = sv.section('=', 1, 1); s = s.section("#", 0, 0); return s.simplified(); } // // Function to extract the key in the data line. The key is the part // before the = sign, with all white space removed. Argument sk is the // entire line containing the key QString IconManager::extractKey(const QString& sk) { QString s = sk.section('=', 0, 0); return s.simplified(); } // Function to colorize an icon. Called from buildResourceIcon and if we // get here we've already checked that the resource exists QPixmap IconManager::processArt(const QString& res, const QColor& color) { // Extract the parts of the icon const QString base = res.section(' ', 0, 0); const QString over = res.section(' ', 1, 1); QImage src = QImage(base); QImage dest = QImage(src.width(), src.height(), QImage::Format_ARGB32); QPainter painter(&dest); // Colorize the base (if specified) if (color.isValid() ) { painter.setCompositionMode(QPainter::CompositionMode_Source); painter.fillRect(dest.rect(), color); painter.setCompositionMode(QPainter::CompositionMode_DestinationAtop); painter.drawImage(0, 0, src); } else { painter.setCompositionMode(QPainter::CompositionMode_Source); painter.drawImage(0, 0, src); } // Now add overlays - overlay names have the same name as the icon they // need to overlay. if (! over.isEmpty() ) { QFileInfo fi = QFileInfo(over); if (fi.exists() ) { QImage ovl = QImage(fi.absoluteFilePath() ); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); painter.drawImage(0, 0, ovl); } } return QPixmap::fromImage(dest); } cmst/apps/cmstapp/code/agent/agent_dialog.cpp000644 001750 000144 00000026723 12645570501 021740 0ustar00andyusers000000 000000 /****************** agent_dialog.cpp *********************************** Code to manage the agent user interface. When the connman daemon needs to communicate with the user it does so through the agent. The agent has a QDialog as a class member, and agent_dialog.cpp manages that dialog. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include # include # include # include # include # include # include "./agent_dialog.h" # include "./code/trstring/tr_strings.h" AgentDialog::AgentDialog(QWidget* parent) : QDialog(parent) { // setup the user interface ui.setupUi(this); // data members cli_browsers.clear(); cli_browsers << "lynx" << "w3m" << "links" << "elinks"; gui_browsers.clear(); gui_browsers << "google-chrome" << "google-chrome-unstable" << "chromium" << "opera"; // blink based gui_browsers << "firefox" << "seamonkey"; // gecko based gui_browsers << "qupzilla" << "luakit" << "dwb" << "jumanji" << "midoir" << "surf" << "vimprobable"; // webkit based gui_browsers << "konqueror" << "dillo" << "xdg-open"; // other // connect signals to slots connect(ui.toolButton_whatsthis, SIGNAL(clicked()), this, SLOT(showWhatsThis())); connect (ui.checkBox_hide_passphrase, SIGNAL(clicked(bool)), this, SLOT(hidePassphrase(bool))); connect (ui.checkBox_wps_no_pin, SIGNAL(clicked(bool)), this, SLOT(useWPSPushButton(bool))); connect (ui.pushButton_launch_browser,SIGNAL(clicked()), this, SLOT(launchBrowser())); connect (ui.lineEdit_browser, SIGNAL(textEdited(const QString&)), this, SLOT(enteringBrowser())); // find the PATH of the current environment sys_env_path = QString(); QProcessEnvironment se = QProcessEnvironment::systemEnvironment(); if (se.keys().contains("PATH")) { sys_env_path = se.toStringList().at(se.keys().indexOf("PATH")); sys_env_path.remove("PATH="); } } ///////////////////////////////////////////////// Public Functions ///////////////////////////////////////////// // // Function to show page 0 of the stackWidget // imap - is map of QStrings with input keys that connman has requested the user to fill in, and any values // that it has sent back for informational purposes. Return the accept state of the dialog int AgentDialog::showPage0(const QMap& imap) { // set all input widgets to disabled this->initialize(); // turn on the boxes that need to be filled in if (imap.contains("Passphrase")) { ui.lineEdit_passphrase->setEnabled(true); ui.lineEdit_passphrase->setText(imap.value("Passphrase") ); ui.checkBox_hide_passphrase->setEnabled(true); } if (imap.contains("PreviousPassphrase")) { ui.lineEdit_old_passphrase->setEnabled(true); ui.lineEdit_old_passphrase->setText(imap.value("PreviousPassphrase") ); } if (imap.contains("SSID")) { ui.lineEdit_ssid->setEnabled(true); ui.lineEdit_ssid->setText(imap.value("SSID") ); } if (imap.contains("Name")) { ui.lineEdit_hidden_name->setEnabled(true); ui.lineEdit_hidden_name->setText(imap.value("Name") ); } if (imap.contains("Userame")) { ui.lineEdit_wispr_username->setEnabled(true); ui.lineEdit_wispr_username->setText(imap.value("Username") ); } if (imap.contains("Password")) { ui.lineEdit_wispr_password->setEnabled(true); ui.lineEdit_wispr_password->setText(imap.value("Password") ); } if (imap.contains("Identity")) { ui.lineEdit_eap_identity->setEnabled(true); ui.lineEdit_eap_identity->setText(imap.value("Identity") ); } if (imap.contains("WPS")) { ui.lineEdit_wps_pin->setEnabled(true); ui.lineEdit_wps_pin->setText(imap.value("WPS") ); ui.checkBox_wps_no_pin->setEnabled(true); } this->ui.stackedWidget->setCurrentIndex(0); return this->exec(); } // // Function to show page 1 of the stackWidget // url - is the url that the user needs to open // Return the accept state of the dialog int AgentDialog::showPage1(const QString& url) { // set all input widgets to disabled this->initialize(); // show the url connman is requesting we connect to ui.lineEdit_url->setText(url); // find browser executables QStringList sl_browsers; if (! sys_env_path.isEmpty() ) { QStringList sl_loop = sys_env_path.split(':'); QStringList sl_targets = cli_browsers; sl_targets.append(gui_browsers); sl_browsers.clear(); for (int i = 0; i < sl_loop.size(); ++i) { QDir dir = QDir(sl_loop.at(i)); sl_browsers.append(dir.entryList(sl_targets, QDir::Files|QDir::Executable)); } // for dir in path } // if path not empty // add found browsers to the listView ui.listView_browsers->setModel(new QStringListModel(sl_browsers)); connect (ui.listView_browsers->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(updateBrowserChoice(const QModelIndex&, const QModelIndex&))); ui.listView_browsers->setEnabled(true); this->ui.stackedWidget->setCurrentIndex(1); return this->exec(); } // // Function to extract the input data from the QLineEdit's in the dialog and put it into // a QMap. The QMap is sent to this function as a reference and is modified by the function. void AgentDialog::createDict(QMap& r_map) { // Initialize the map r_map.clear(); // Create the dict entries if (! ui.lineEdit_passphrase->text().isEmpty() ) r_map["Passphrase"] = ui.lineEdit_passphrase->text(); if (! ui.lineEdit_ssid->text().isEmpty() ) r_map["SSID"] = ui.lineEdit_ssid->text().toLatin1(); if (! ui.lineEdit_hidden_name->text().isEmpty() ) r_map["Name"] = ui.lineEdit_hidden_name->text(); if (! ui.lineEdit_wispr_username->text().isEmpty() ) r_map["Username"] = ui.lineEdit_wispr_username->text(); if (! ui.lineEdit_wispr_password->text().isEmpty() ) r_map["Password"] = ui.lineEdit_wispr_password->text(); if (! ui.lineEdit_eap_identity->text().isEmpty() ) r_map["Identity"] = ui.lineEdit_eap_identity->text(); if (! ui.lineEdit_wps_pin->text().isEmpty() ) r_map["WPS"] = ui.lineEdit_wps_pin->text(); return; } ///////////////////////////////////////////////// Private Functions ///////////////////////////////////////////// // // Function to initialize the fields in the dialog box, everything is disabled to start void AgentDialog::initialize() { // QList of widget pointers QList list; list.clear(); list.append(ui.lineEdit_passphrase); list.append(ui.lineEdit_old_passphrase); list.append(ui.checkBox_hide_passphrase); list.append(ui.lineEdit_ssid); list.append(ui.lineEdit_hidden_name); list.append(ui.lineEdit_wispr_username); list.append(ui.lineEdit_wispr_password); list.append(ui.lineEdit_eap_identity); list.append(ui.lineEdit_wps_pin); list.append(ui.checkBox_wps_no_pin); list.append(ui.listView_browsers); // set disabled true for all widgets in the list and clear contents for (int i = 0; i < list.size(); ++i) { list.at(i)->setDisabled(true); if (qobject_cast (list.at(i)) != NULL ) qobject_cast (list.at(i))->clear(); if (qobject_cast (list.at(i)) != NULL ) qobject_cast (list.at(i))->setChecked(false); } } ///////////////////////////////////////////////// Private Slots ///////////////////////////////////////////// // // Slot to show or obscure the passphrase void AgentDialog::hidePassphrase(bool checked) { checked ? ui.lineEdit_passphrase->setEchoMode(QLineEdit::Password) : ui.lineEdit_passphrase->setEchoMode(QLineEdit::Normal); } // // Slot to use WPS PushButton Authentication // Called when ui.checkBox_wps_no_pin is checked or unchecked void AgentDialog::useWPSPushButton(bool checked) { if (checked) ui.lineEdit_wps_pin->clear(); ui.lineEdit_wps_pin->setDisabled(checked); } // // Slot to enter whats this mode // Called when the ui.toolButton_whatsthis clicked() signal is emitted void AgentDialog::showWhatsThis() { QWhatsThis::enterWhatsThisMode(); } // // Slot to set browser as the chosen item in the list // Called when ui.listView_browsers selectionChanged() signal is emitted // void AgentDialog::updateBrowserChoice(const QModelIndex & current, const QModelIndex & previous) { (void) previous; ui.lineEdit_browser->setText(current.data().toString()); } // // Slot to clear selection in the browser list view // Called when ui.lineEdit_browser textEdited() signal is emitted void AgentDialog::enteringBrowser() { ui.listView_browsers->selectionModel()->clearSelection(); } // // Slot to launch the selected browser // Called when ui.pushButton_launch_browser is pressed void AgentDialog::launchBrowser() { // variables QProcess* process = new QProcess(this); // find installed terminals that we can deal with QStringList sl_terminals = QStringList(); if (! sys_env_path.isEmpty() ) { QStringList sl_loop = sys_env_path.split(':'); QStringList sl_targets; sl_targets << "roxterm" << "xterm"; for (int i = 0; i < sl_loop.size(); ++i) { QDir dir = QDir(sl_loop.at(i)); sl_terminals.append(dir.entryList(sl_targets, QDir::Files|QDir::Executable)); } // for dir in path } // if path not empty // Code below assumes that every browser will take a URL as an argument QString chosenBrowser = ui.lineEdit_browser->text(); if (cli_browsers.contains(chosenBrowser, Qt::CaseSensitive) ) { // Support 2 terminals, roxterm and xterm. This probably won't work right if // someone uses XDG-OPEN and it happens to point to a cli browser QStringList sl_args = QStringList(); if (sl_terminals.contains("roxterm")) { sl_args << "-T" << "Web Login" << "--execute" << chosenBrowser << ui.lineEdit_url->text(); process->startDetached(QString("roxterm"), sl_args); } else if (sl_terminals.contains("xterm")) { sl_args << "-T" << "Web Login" << "-e" << chosenBrowser << ui.lineEdit_url->text(); process->startDetached(QString("xterm"), sl_args); } else QMessageBox::information(qobject_cast (parent()), QString(TranslateStrings::cmtr("cmst")) + tr(" Information"), tr("You have requested the %1 browser, but we cannot find a terminal program to open it with. " \ "Currenty we can start %1 using these terminals: roxterm and xterm." \ "

To continue you need to manually open a terminal and then enter: \"%1 %2\"").arg(chosenBrowser).arg(ui.lineEdit_url->text()) ); } else { process->startDetached(chosenBrowser, QStringList(ui.lineEdit_url->text()) ); } } cmst/apps/cmstapp/code/counter/counter.cpp000644 001750 000144 00000017044 12645570501 021357 0ustar00andyusers000000 000000 /**************************** counter.cpp ******************************** Code for the connection counter registered on DBus. When registered the connman daemon will communicate to this object with signals. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # include # include # include "./counter.h" # include "../resource.h" // header files generated by qmake from the xml file created by qdbuscpp2xml # include "counter_adaptor.h" # include "counter_interface.h" // constructor ConnmanCounter::ConnmanCounter(QObject* parent) : QObject(parent) { // data members home_data = QVariantMap(); roam_data = QVariantMap(); // Create Adaptor and register this Counter on the system bus. new CounterAdaptor(this); // Try to register an object on the system bus QDBusConnection::systemBus().registerObject(CNTR_OBJECT, this); } /////////////////////////////////////// PUBLIC FUNCTIONS //////////////////////////////// // // Function to return a QString for display in a label // map is the member map (home_data or roam_data) we wish to get QString ConnmanCounter::getLabel(const QVariantMap& map) { // Set TX bytes to Bytes, KB, MB, or GB depending on size const int b_cutoff = 1024 * 1.875 ; // size in Bytes to change units from Bytes to KB const int k_cutoff = 1024 * 1024 * 1.875 ; // size in Bytes to change units from KB to MB const int m_cutoff = 1024 * 1024 * 1024 * 1.875 ; // size in Bytes to change units from MB to GB QString datafield; if (map.value("TX.Bytes").toLongLong() < b_cutoff ) datafield = tr("%L1 Bytes").arg(map.value("TX.Bytes").toLongLong()); else if (map.value("TX.Bytes").toLongLong() < k_cutoff) datafield = tr("%L1 KB").arg(static_cast(map.value("TX.Bytes").toLongLong()) / (1024), 0, 'f', 1); else if (map.value("TX.Bytes").toLongLong() < m_cutoff) datafield = tr("%L1 MB").arg(static_cast(map.value("TX.Bytes").toLongLong()) / (1024 * 1024), 0, 'f', 1); else datafield = tr("%L1 GB").arg(static_cast(map.value("TX.Bytes").toLongLong()) / (1024 * 1024 * 1024), 0, 'f', 1); // Create a label with the total number of packets [errors and dropped] sent. QString rtn = tr("Transmit:
TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4") .arg(tr("%Ln Packet(s)", 0, map.value("TX.Packets").toLongLong()) ) .arg(datafield) .arg(tr("%Ln Packet(s)", 0, map.value("TX.Errors").toLongLong()) ) .arg(tr("%Ln Packet(s)", 0, map.value("TX.Dropped").toLongLong()) ) ; // Set RX data bytes to Bytes, KB, MB or GB if (map.value("RX.Bytes").toLongLong() < b_cutoff ) datafield = tr("%L1 Bytes").arg(map.value("RX.Bytes").toLongLong()); else if (map.value("RX.Bytes").toLongLong() < k_cutoff) datafield = tr("%L1 KB").arg(static_cast(map.value("RX.Bytes").toLongLong()) / (1024), 0, 'f', 1); else if (map.value("RX.Bytes").toLongLong() < m_cutoff) datafield = tr("%L1 MB").arg(static_cast(map.value("RX.Bytes").toLongLong()) / (1024 * 1024), 0, 'f', 1); else datafield = tr("%L1 GB").arg(static_cast(map.value("RX.Bytes").toLongLong()) / (1024 * 1024 * 1024), 0, 'f', 1); // Append to the label the total number of packets [errors and dropped] received. rtn.append(tr("

Received:
RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4") .arg(tr("%Ln Packet(s)", 0, map.value("RX.Packets").toLongLong()) ) .arg(datafield) .arg(tr("%Ln Packet(s)", 0, map.value("RX.Errors").toLongLong()) ) .arg(tr("%Ln Packet(s)", 0, map.value("RX.Dropped").toLongLong())) ); // Append the time title rtn.append(tr("

Connect Time:
") ); // Calculate the connection time and add it to the end of the label. int num_d = 0; short num_h = 0; short num_m = 0; short num_s = 0; int etime = map.value("Time").toInt(); num_d = etime / (24 * 60 * 60); if (num_d > 0 ) { rtn.append(tr("%n Day(s)", 0, num_d) ); rtn.append(" "); } etime = etime % (24 * 60 * 60); num_h = etime / (60 * 60); if (num_h > 0 || num_d != 0) { rtn.append(tr("%n Hour(s)", 0, num_h) ); rtn.append(" "); } etime = etime % (60 * 60); num_m = etime / (60); if (num_m > 0 || num_d != 0 || num_h != 0) { rtn.append(tr("%n Minute(s)", 0, num_m) ); rtn.append(" "); } etime = etime % (60); num_s = etime; if ( num_s > 0 || num_d != 0 || num_h != 0 || num_m != 0) rtn.append(tr("%n Second(s)", 0, num_s) ); // Return the string return rtn; } /////////////////////////////////////// PUBLIC Q_SLOTS//////////////////////////////// // // Called when the service daemon unregisters the counter. QT deals with cleanup // tasks so don't need much here void ConnmanCounter::Release() { //qDebug() << "Counter Released"; return; } // // Called when there is a change in counter values void ConnmanCounter::Usage(QDBusObjectPath qdb_objpath, QVariantMap home, QVariantMap roaming) { // First time through connman will send home and roaming fully loaded. After that only // items that change are sent. We need to keep the data as a class member QMapIterator i(home); while (i.hasNext()) { i.next(); home_data[i.key()] = i.value(); } QMapIterator j(roaming); while (j.hasNext()) { j.next(); roam_data[j.key()] = j.value(); } // Emit signal with object and labels to display emit usageUpdated(qdb_objpath, getLabel(home_data), getLabel(roam_data) ); return; } cmst/images/application/variations/48x48/000755 001750 000144 00000000000 12645604060 020707 5ustar00andyusers000000 000000 cmst/images/application/variations/24x24/cmst_spot_04_24x24.png000644 001750 000144 00000003734 12645570501 024573 0ustar00andyusers000000 000000 PNG  IHDR!-gAMA a cHRMz&u0`:pQ<bKGD pHYs  tIME /)&,rIDATHDž]]W{{d&$CbL(&ҨDD AQATAAV`,Zl4cNgL&ܹ瞳{p&ihu{}wX㑓\D;&ѢG U}[R)"t'_u3_J'O:c39b,9ĺ̥ CEZqE˦>[/]CIV>H[q\nn]'8q$/^Dt)aS.I97ϳB}.v~doPO*E?ncc>!"-BEժQ9ĀAP=;47yryƪUq䣟Cqrag;GY2WP7R? t׷ }#YtTNE|=يqUvJ`d/9Z)1hNoS  \ ; 쪯uh qu&}<ƉEgRÍh+/ypSH ?BXtԀ Rׂ}{lBGIi r5&*cè%atvL".g" c@lyCO{+*J;G Y@>(R i71VZga o.@n0WkĶ@t7\ pJ]],oT0txE^Y^GGZJy&zNg6mV ˋ(3շRiH-aYj/-.k4 T4'>PhWalt/tVZwǹeٺ9SY?c֫3%`hDn*H(C: FttQ,w\m#iXක67vl{{Bjáі%tEXtdate:create2015-09-20T15:43:03-04:00Q&%tEXtdate:modify2014-11-18T18:47:41-05:00GMtEXtsoftwareImageMagick 6.9.2-0 Q16 x86_64 2015-08-18 http://www.imagemagick.orgtEXtThumb::Document::Pages1/tEXtThumb::Image::Height136]tEXtThumb::Image::Width144aptEXtThumb::Mimetypeimage/png?VNtEXtThumb::MTime1416354461d7tEXtThumb::Size13.8KBBM"tEXtThumb::URIfile://cmst_spot_04.png@ܼIENDB`cmst/images/application/000755 001750 000144 00000000000 12645604051 015731 5ustar00andyusers000000 000000 cmst/apps/rootapp/code/roothelper/000755 001750 000144 00000000000 12646050137 017706 5ustar00andyusers000000 000000 cmst/images/application/variations/24x24/cmst_spot_02_24x24.png000644 001750 000144 00000003542 12645570501 024566 0ustar00andyusers000000 000000 PNG  IHDR!-gAMA a cHRMz&u0`:pQ<bKGD pHYs  tIME /jEIDATHǍIlW o؎3 MhҤm Q HR*UPvXbS) ]8I:M N~P2|=9د4AR#;voMπog]N?W&'ُ7bx=[뉓ff~e25?:'E hg~X˕*"RdHA҅ZS fax81|,zgVdX쁝~0y w+_ի:;s< 4@ r#xě~>f1sj]iflz6|(ޯ7{'3STUӔ[PDlݰEEmPPT[|E_~p7cjꭝ5H2;|ۏ3IF=3AVS@3g8!qOo崋R3d< -e7G@}WL AE CQ:rxພc,n(MxxBE>jU\, H!æfDNb8۰pL)7A7H!Jjln\%296+9և}=NZ\7kݕsIsU+:VlgtCYN $€"9~rG,uc=N|z(ưS>& c= D5-5U8]΄Ɋ8G!*0GJ$.D5e)G09.u%qƣUVVTDwֈ%J,dTLvWf-rQiWf֏9R!W 0ۆъ9DV ] S4ζheQB'p9qĭӈx8Y8> ,v V6;ػ+J%AĀ6t "Xx6(i2S\߀K@P 3Kc7xjm#k܍)A5=3 gvb׈NV z':u x~ұ&Y}65IHgf  "|G٣ok78>L MMof}|u}i׾Bػóa QT>cgZ80զʾ ":.%4m','65OʹitFiҞO~:_$3~A°%tEXtdate:create2015-09-20T15:43:03-04:00Q&%tEXtdate:modify2014-11-18T18:47:08-05:00VԜMtEXtsoftwareImageMagick 6.9.2-0 Q16 x86_64 2015-08-18 http://www.imagemagick.orgtEXtThumb::Document::Pages1/tEXtThumb::Image::Height136]tEXtThumb::Image::Width144aptEXtThumb::Mimetypeimage/png?VNtEXtThumb::MTime1416354428yqJtEXtThumb::Size11.7KBB!"tEXtThumb::URIfile://cmst_spot_02.pngϜIIENDB`cmst/translations/cmst_it_IT.qm000644 001750 000144 00000000027 12645570501 017300 0ustar00andyusers000000 000000 Agent Agent Input Agent-Eingabe Passphrase Passwort <html><head/><body><p>If an old passphrase is available it will be shown here for reference.</p></body></html> <html><head/><body><p>Wenn ein altes Passwort vorhanden ist, wird es hier als Referenz angezeigt.</p></body></html> <html><head/><body><p>Type the passphrase here.</p></body></html> <html><head/><body><p>Gebe hier dein Passwort ein.</p></body></html> <html><head/><body><p>Check this box to obscure the password characters.</p></body></html> <html><head/><body><p>Aktiviere diese Box um die Passwortbuchsteben zu verstecken.</p></body></html> &Hide Passphrase &Verstecke Passwort &Old Passphrase &Altes Passwort O&ld Passphrase &Passphrase &Passwort Hidden Network Verstecktes Netzwerk &Name &Name <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> <html><head/><body><p>Type the name of the hidden network you wish to connect to.</p></body></html> Service Set Identifier Service Set identifier &SSID &SSID Wireless Internet Service Provider roaming (WISPr) Wireless Internet Service Provider roaming (WISPr) &Username &Benutzername <html><head/><body><p>WISPr username.</p></body></html> <html><head/><body><p>WISPr Benutzername.</p></body></html> Passwor&d Passwor&t <html><head/><body><p>WISPr password.</p></body></html> <html><head/><body><p>WISPr Passwort.</p></body></html> Extensible Authentication Protocol (EAP) Extensible Authentication Protocol (EAP) <html><head/><body><p>Type your Identity for the Extensible Authentication Protocol</p></body></html> <html><head/><body><p>Gebe hier deine Identität für das Extensible Authentication Protocol an</p></body></html> &Identity &Identität WiFi Protected Setup (WPS) WiFi Protected Setup (WPS) <html><head/><body><p>When checked use WPS push button authentication. </p></body></html> <html><head/><body><p>Wenn aktiviert, wird die WPS-Push-Button Authentifizierung genutzt. </p></body></html> Use Push &Button Authentication Benutze Push-&Button Authentifizierung &WPS Pin &WPS Pin <html><head/><body><p>Enter a WPS pin.</p></body></html> <html><head/><body><p>Gebe einen WPS-Pin ein.</p></body></html> Browser Login Requested Browser-Anmeldung gewünscht Choose or enter a browser: <html><head/><body><p>Connman is requesting that you open a web browser to complete the login process.</p><p>We have scanned your PATH for browsers and any browsers found are shown in the list below. You may select any one browser to use it for the login. If your web browser is not shown in the list you may enter it directly in the<span style=" font-weight:600;"> Choose or enter a browser box</span>.</p><p>To launch the browser click the <span style=" font-weight:600;">Launch Browser</span> button. </p><p>If you wish to login manually close this dialog, start your web browser and proceed to the URL shown in the <span style=" font-weight:600;">Login URL</span> box.</p></body></html> Login URL: Login URL: <html><head/><body><p>Connman is requesting you continue login with a web browser. This box shows the URL that contains the login page.</p></body></html> <html><head/><body><p>Connman fordert einen Login über einen Webbrowser an. Diese Box zeigt die URL, welche die Loginseite enthält, an.</p></body></html> <html><head/><body><p>Use the Firefox browser.</p></body></html> <html><head/><body><p>Benutze den Firefox Browser.</p></body></html> &Firefox &Firefox <html><head/><body><p>Use the Opera browser.</p></body></html> <html><head/><body><p>Benutze den Opera browser.</p></body></html> &Opera &Opera <html><head/><body><p>Use the Luakit browser.</p></body></html> <html><head/><body><p>Benutze den Luakit browser.</p></body></html> &Luakit &Luakit <html><head/><body><p>Use the Lynx (console mode) browser.</p></body></html> <html><head/><body><p>Benutze den Lynx (Konsolen-Modus) browser.</p></body></html> Lyn&x Lyn&x <html><head/><body><p>Login using a browser that is not listed. Type the browser start command in the box below.</p></body></html> <html><head/><body><p>Login mit einem Browser welcher nicht gelistet ist. TGebe das Kommando zum starten des Browsers in der Textbox unterhalb ein.</p></body></html> Othe&r Andere&r <html><head/><body><p>Type the browser start command here.</p></body></html> <html><head/><body><p>Gebe hier das Kommando zum starten des Browsers an.</p></body></html> <html><head/><body><p>Use this button to launch the selected browser. The browser will open at the page shown in the Login URL box.</p></body></html> <html><head/><body><p>Benutze diesen Knopf um den ausgewählten Browser zu starten. Der Browser wird die URL aus der Login-URL-Box anzeigen.</p></body></html> Launch &Browser Starte &Browser <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Was ist das</p></body></html> ... ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Fahre mit dem Verbindungsprozess fort.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel &Abbrechen AgentDialog Information Information You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "%1 %2" You have requested the %1 browser, but we cannot find a terminal program to open it with. Currenty we can start %1 using these terminals: <b>roxterm</b> and <b>xterm</b>.<br><br>To continue you need to manually open a terminal and then enter: "lynx %2" Du hast den Browser %1 gewählt, aber es konnte kein Terminal-Programm gefunden werden um ihn zu öffnen. Aktuell kann %1 über folgende Terminals geöffnet werden: <b>roxterm</b> und <b>xterm</b>.<br><br>Um fortfahren zu können, musst du manuell ein Terminal öffnen und "lynx %2" eingeben ConnmanAgent Connman Error Connman Fehler Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Connman gab folgenden Fehler zurück: <b><center>%1</b><br>Möchtest du es erneut versuchen? Agent Request Failed Agent-Anfrage fehlgeschlagen The agent request failed before a reply was returned. Die Agent-Anfrage ist fehlgeschlagen bevor eine Antwort zurück kam. ConnmanCounter %L1 Bytes %L1 Bytes %L1 KB %L1 KB %L1 MB %L1 MB %L1 GB %L1 GB <b>Transmit:</b><br>TX Total: %1 (%2), TX Errors: %3, TX Dropped: %4 "Dropped" zur Verständlichkeit gelassen <b>Übertragen:</b><br>TX Total: %1 (%2), TX Fehler: %3, TX Dropped: %4 %Ln Packet(s) %Ln Paket %Ln Pakete <br><br><b>Received:</b><br>RX Total: %1 (%2), RX Errors: %3, RX Dropped: %4 "Dropped" zur Verständlichkeit gelassen <br><br><b>Empfangen:</b><br>RX Total: %1 (%2), RX Fehler: %3, RX Dropped: %4 <br><br><b>Connect Time:</b><br> <br><br><b>Verbindungszeit:</b><br> %n Day(s) %n Tag %n Tage %n Hour(s) %n Stunde %n Stunden %n Minute(s) %n Minute %n Minuten %n Second(s) %n Sekunde %n Sekunden ConnmanVPNAgent Connman Error Connman Fehler Connman returned the following error:<b><center>%1</b><br>Would you like to retry? Connman gab folgenden Fehler zurück: <b><center>%1</b><br>Möchtest du es erneut versuchen? Agent Request Failed Agent-Anfrage fehlgeschlagen The agent request failed before a reply was returned. Die Agent-Anfrage ist fehlgeschlagen bevor eine Antwort zurück kam. ControlBox Dialog &Status <html><head/><body><p>This checkbox controls the global setting for switching all radios on or off. When checked all radios are powered down.</p><p>When the system is In offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> All Devices &Off <html><head/><body><p><span style=" font-weight:600;">OfflineMode</span></p><p>The offline mode indicates the global setting for switching all radios on or off. Changing offline mode to true results in powering down all devices. When leaving offline mode the individual policy of each device decides to switch the radio back on or not. </p><p>During offline mode, it is still possible to switch certain technologies manually back on. For example the limited usage of WiFi or Bluetooth devices might be allowed in some situations.</p></body></html> Global Properties <html><head/><body><p>The global setting for switching all radios on or off. When offline mode is engaged all radios are powered down.</p><p>While in offline mode it is possible to turn individual devices back on. When leaving offline mode the individual policy of each device determines if the radio is turned back on or not.</p></body></html> OfflineMode: Unavailable <html><head/><body><p>The global connection state of the system. Possible values are &quot;offline&quot;, &quot;idle&quot;, &quot;ready&quot;, and &quot;online&quot;. </p></body></html> State: Unavailable <html><head/><body><p>Connman refers to hardware devices as technologies. This box will display information about all known technologies.</p><p>To turn a technology on or off click on the button that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Technologies Name Name Type Typ Powered Connected Tethering <html><head/><body><p>Force a rescan of all WiFi technologies. This is similar to issuing the command <span style=" font-weight:600;">connmanctl scan wifi</span> from the command line.</p><p>The button will become inactive while the scan is occuring.</p></body></html> Resc&an <html><head/><body><p>This box lists all services that connman can connect to.</p></body></html> Services State Connection <html><head/><body><p>Move the selected service before another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move Before <html><head/><body><p>Move the selected service after another in the list.</p><p>The button will only become active once a service is selected.</p></body></html> Move After <html><head/><body><p>Hide the connection field</p></body></html> <html><head/><body><p>When checked hide the connection name in the Services box.</p></body></html> &Less &Details Ser&vice <html><head/><body><p>Use this Combobox to select the service for which you wish to view the detailed information.<br/></p></body></html> <html><head/><body><p>The default configuration method for all services is automatic or something like DHCP. This should be good enough for most typical usage, but if it is not this button will allow manual configuration of Ethernet and IP settings for the selected Service.</p><p>This button will be disabled if the service is provisioned via an external config file or if the service is a hidden wifi service. It is not possible to modify the properties of these services.</p></body></html> Configuration &Wireless <html><head/><body><p>This page shows the known WiFi services. </p><p><span style=" font-weight:600;">Name:</span> The SSID of the network.</p><p><span style=" font-weight:600;">Favorite:</span> A heart symbol in this column indicates that this computer has previously made a connection to the network using this service.</p><p><span style=" font-weight:600;">Connected:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. Online signals that an Internet connectionis available and has been verified. Ready signals a successfully connected device. </p><p><span style=" font-weight:600;">Security: </span>Describes the type of security used for this service. Possible values are &quot;none&quot;, &quot;wep&quot;, &quot;psk&quot;, &quot;ieee8021x&quot;, and &quot;wps&quot;.</p><p><span style=" font-weight:600;">SIgnal Strength:</span> The strength of the WiFi signal, normalized to a scale of 0 to 100.</p><p><br/></p></body></html> Favorite Security Sicherheit Signal Strength Wireless Services <html><head/><body><p>Select a wifi service in the table below and press this button to connect the service. </p><p>If there is only one wifi service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> Connect <html><head/><body><p>Select a wifi service in the table below and press this button to disconnect it. </p><p>If there is only one wifi service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> Disconnect Remove <html><head/><body><p>This label shows the number of WiFi technologies (devices) that were found, and the number that are powered on. There must be at least one WiFi technology found and powered in order for the box below to show services.</p><p>To turn a technology on or off go to the <span style=" font-weight:600;">Technologies</span> box in the <span style=" font-weight:600;">Status</span> tab and double click on the text that shows in the <span style=" font-weight:600;">Powered</span> column for the technology.</p></body></html> Wifi State &Counters <html><head/><body><p>The service being monitored by the counters.</p></body></html> Service: <html><head/><body><p>Counters for the &quot;online&quot; service connection that is not marked roaming. </p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Home Counter not available. <html><head/><body><p>Counters for the &quot;online&quot; service connection marked &quot;roaming&quot;.</p><p>In the case of cellular services this normally indicates connections to a foreign provider.</p><p>Counters may not always be available. The counters could have been disabled at the command line (-c or --disable-counters) or occasionally the connection will register &quot;ready&quot; instead of &quot;online&quot;. Online is a &quot;ready&quot; connection that has verified internet connectivity. It is possible to be online with only a &quot;ready&quot; connection, however the counters only work for they &quot;online&quot; connection.</p></body></html> Roaming <html><head/><body><p>Counter Settings</p></body></html> <html><head/><body><p>The threshold values for counter updates (counter resolution). Data and time work together to define how often the fields are updated.</p></body></html> Settings: &Preferences <html><head/><body><p>Programs or processes to execute after various events occur.</p><p>If the program or process requires command line arguments provide them here just as if you were typing at a command line.</p><p>Example:</p><p><span style=" font-weight:600;">/path/to/program arg1 arg2 arg3</span></p></body></html> External Programs <html><head/><body><p>Enter the program or process to be executed after Connman enters the &quot;Ready&quot; or &quot;Online&quot; state.</p></body></html> After Connect <html><head/><body><p>Preferences for the interface are in this box.</p></body></html> Interface <html><head/><body><p>If checked the Start Options set here will be read and used next time the program starts. </p><p>Settings are stored in<span style=" font-family:'Courier New,courier';">: ~</span><span style=" font-family:'Courier New,courier'; font-weight:600;">/.config/cmst/cmst.conf </span><span style=" font-family:'Courier New,courier';"><br/>This is a standard ini type text file.</span></p></body></html> Use Start Options <html><head/><body><p>If checked the state of the GUI will be restored from settings saved on disk. Settings include the geometry and position of the dialog and the current tab. </p><p>These settings will be used at next boot to restore the user interface to the way it was at shutdown.</p><p>The settings file is: ~<span style=" font-weight:600;">/.config/cmst/cmst.conf </span><br/>This is a standard ini type text file.</p></body></html> Retain State Rescan Offline Mode <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-i</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--icon-theme</span></pre><p>Use an icon theme from your system. You may specify the theme in the box at the right, or if the box is left blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> Use Icon Theme <html><head/><body><p>If checked the display of tooltips will be enabled for the interface widgets.</p><p>Tooltips are the small popups that appear when you hover the mouse pointer over an area of the interface. </p></body></html> Enable ToolTips (Interface) <html><head/><body><p>Normally counters are cummulative and will retain the connect time and the TX and RX counts between boots. </p><p>When this box is checked the counters will reset to zero every time CMST is started, and if CMST is running everytime a Connman service is started. </p></body></html> Reset Counters <html><head/><body><p>When checked additional controls for advanced users are displayed.</p></body></html> Advanced Controls <html><head/><body><p>These entries control various options for CMST at program start. </p><p>All of these options are available from the command line, and if a command line option is provided it will take precedence over these settings.</p></body></html> Start Options <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-d</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--disable-tray-icon</span></pre></body></html> <html><head/><body><p>Disable the system tray icon.</p><p>May be needed for system trays not compliant with the Freedesktop.org system tray specification.</p></body></html> Disable Tray Icon <html><head/><body><p>Disabled because currently Connman will accept this option but will do nothing with it.</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p><p>Connman will accept this entry, but according to a comment in the Connman code the actual feature still needs to be implemented and the selection is therefore disabled.</p></body></html> Counter Update KB <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p></body></html> <html><head/><body><p>Specify the amount of data in KB that must be transmitted before the counters update (default is 1024 KB).</p></body></html> <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-m</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--minimized</span></pre></body></html> <html><head/><body><p>Start the GUI minimized in the system tray.</p></body></html> Start Minimized <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">-w</span><span style=" font-family:'Courier New,courier';"> or </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--wait-time</span></pre></body></html> <html><head/><body><p>Specify the wait time in seconds before starting the system tray icon (default is 0 seconds).</p><p>If CMST is started and tries to create a tray icon before the system tray itself is created a dialog will be displayed explaining that. This sometimes happens when the program is started automatically. If you know the tray will exist once the system is up you may specify a wait time and CMST will wait that number of seconds before trying to create the tray icon. This is to give the window manager or panel time to create the tray before we try to place the icon there.</p></body></html> Wait Time <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Command Line Option: <span style=" font-weight:600;">-c</span> or <span style=" font-weight:600;">--disable-counters</span></pre></body></html> <html><head/><body><p>Disable the counters. May be used to minimize load on your system.</p></body></html> Disable Counters <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--counter-update-rate</span></pre></body></html> <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> Counter Update Rate <html><head/><body><p>Specify the frequency in seconds between counter updates (default is 10 seconds). </p></body></html> <html><head/><body><p>Use code specific for the selected desktop environment.</p><p>As of 2014.11.24 there seems to be a problem with QT5.3 and some system trays. There is code in the program to try and work around this issue, and selecting one of these buttons will invoke the code specific to the desktop.</p><p>If the bug gets fixed these options will remain so that start up scripts do not break, but the options will do nothing.</p></body></html> Desktop Specific <html><head/><body><p>Default is no desktop specific code.</p></body></html> None <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-xfce</span></pre></body></html> XFCE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--use-mate</span></pre></body></html> MATE <html><head/><body><pre style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Command Line Option: </span><span style=" font-family:'Courier New,courier'; font-weight:600;">--fake-transparency</span></pre></body></html> <html><head/><body><p>Used to work around a QT bug where system tray icons display with white or black backgrounds instead of being transparent.</p><p>You can specify the icon background color here. Format is a hex number in the form RRGGBB. If the spedified color matches the tray background we've effectively created fake transparency. </p></body></html> <html><head/><body><p>Select a wifi service in the table below and press this button to remove the service. </p><p>If a service has previously been successfully connected (Favorite is true) this button will remove the Favorite property. The service will also be disconnected if it is currently connected. If the service required a passphrase then the passphrase it will be cleared and forgotten.</p><p>If a connection attempt failed this can slso be used to reset the service.</p></body></html> &VPN VPN Services <html><head/><body><p>Select a vpn service in the table below and press this button to connect the service. </p><p>If there is only one vpn service listed in the table pressing this button will automatically select that service and attempt to connect. </p><p>If information about the service is needed, a passphrase for instance, you will be prompted for it. </p></body></html> <html><head/><body><p>Select a vpn service in the table below and press this button to disconnect it. </p><p>If there is only one vpn service in the &quot;ready&quot; or &quot;online&quot; state pressing this button will automatically select that service and disconnect it. </p><p>This may also be used to abort a previous connection attempt.</p></body></html> <html><head/><body><p>This page shows the provisioned VPN services. Some cells in the table may only be available once a connection is estlablished. </p><p><span style=" font-weight:600;">Name:</span> The name given in the provisioning file.</p><p><span style=" font-weight:600;">Type:</span> The VPN type (OpenConnect, OpenVPN, PPTP, etc)</p><p><span style=" font-weight:600;">State:</span> Shows the connection state of this service. Hover the mouse over the icon to popup a text description. . </p><p><span style=" font-weight:600;">Host: </span>VPN Host IP.</p><p><span style=" font-weight:600;">Domain:</span> The VPN Domain.<br/></p></body></html> Host Domain Domäne Fake Transparency <html><head/><body><p>Specify the background color as a hex number in the format: RRGGBB.</p></body></html> <html><head/><body><p>Icon theme to use. For this theme to be used it must be installed on your system. If the theme is not installed, or if you spell the name wrong CMST will fall back to using its internal icon set.</p><p>If this box is blank CMST will try and use the system wide icon theme (if one is defined).</p></body></html> <html><head/><body><p>Preferences for the system tray are in this box.</p></body></html> System Tray <html><head/><body><p>If checked an icon will not be displayed in the system tray. </p></body></html> Hide Tray Icon <html><head/><body><p>If checked the system tray icon will popup a status message when you hover the mouse over it.</p></body></html> Enable System Tray Popups <html><head/><body><p>If checked the system tray will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notify daemon if one is installed. Both can not be active at the same time.</p></body></html> System Tray Notifications Notifications <html><head/><body><p>If checked the system desktop notification daemon will popup a notify message when a significant connman related event is received.</p><p>Notifications can be handled by the System Tray Icon, or by a Notification daemon if one is installed. Both can not be active at the same time.</p></body></html> Notification Daemon Server Status Program Control <html><head/><body><p>If checked CMST will place an entry in the autostart directory for the current user, unchecking will remove said entry. This directory is typically: <span style=" font-weight:600;">${HOME}/.config/autostart</span>. </p><p>CMST only add or remove the .desktop file from the autostart directory. Autostarting is typically dependent upon your Desktop Environment and must be enabled from there.</p></body></html> Enable Autostart <html><head/><body><p>If a Connman service falls into the &quot;Failed&quot; state it will normally remain in that state.</p><p>If this box is checked CMST will try to automatically reconnect a WiFi service that enters the &quot;Failed&quot; state. </p></body></html> Retry Failed Connection <html><head/><body><p>Color in #RGB format to colorize the internal icons with.</p></body></html> <html><head/><body><p>Open the color selection dialog. </p></body></html> ... ... <html><head/><body><p>Internal icons can be colorized. You may select a color using the button to the left, or you may type in the #RGB color yourself.</p><p>If you type the entry it must have leading # sign. Example: #22aa44 </p></body></html> Colorize &Help &About <html><head/><body><p>Display a dialog box containing information about this program. </p></body></html> C&MST <html><head/><body><p>Display a dialog box containing information about the Icon set used in this program. </p></body></html> &AwOken <html><head/><body><p>Display a dialog box containing information about the QT toolkit used to develop this program. </p></body></html> &QT <html><head/><body><p>Use this button to view the program license.</p></body></html> &License <html><head/><body><p>Use this button to view the change log of the program.</p></body></html> ChangeLo&g <html><head/><body><p><span style=" font-weight:600;">Help</span></p><p>Program help is mainly provided by the &quot;What's This&quot; button in the lower left corner. Press the button and then click on an item you are interested in. &quot;What's This&quot; is also available via context menu by right clicking on a button, box or text area.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Was ist das</p></body></html> <html><head/><body><p>Use this button to find information about an element in the GUI by entering &quot;What's This&quot; mode. </p><p>You may also right click on an element to show the &quot;What's This&quot; text for it.</p></body></html> <html><head/><body><p>Open the provisioning editor to create or edit Connman configuration (provisioning) files.</p><p>These config files reside in /var/lib/connman which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> Provisioning Editor Provisionierungs-Editor <html><head/><body><p>Open the VPN provisioning editor to create or edit Connman configuration (provisioning) files for VPN connections.</p><p>These config files reside in /var/lib/connman-vpn which is owned by root:root. CMST will register a roothelper to allow reading and writing files in this directory. </p><p>To avoid abusing the root privileges the editor will only operate on files with names ending in <span style=" font-style:italic;">.cmst.config</span>. This file name ending will be added automatically during a file save and cannot be altered. </p><p>Using this editor it is not possible to edit or delete config files created by other means.</p></body></html> VPN Editor <html><head/><body><p>Exit the program and remove the system tray icon. Connman will still be running as a daemon but will not be managed by this program.</p></body></html> E&xit &Beenden <html><head/><body><p>Minimize the dialog. If you have the system tray Icon shown this dialog may be restored by right clicking on the tray icon. If the tray icon is hidden minimize will not be active.</p></body></html> Mi&nimize Ma&ximize &Exit About %1 Service Details WiFi Connections VPN Connections <center>%1 is a program to interface with the Connman daemon and to provide a system tray control.<br><center>Version <b>%2</b><center>Release date: %3<center>Copyright c %4<center>by<center>Andrew J. Bibb<center>Vermont, USA<br><center><b>Contributors:</b><center>Brett Dutro<center>Adam Fontenot<center>Lester Bico<center>Yaohan Chen<br><center><b>Translations:</b><center>Jianfeng Zhang (Chinese)<center>sqozz (German)<center>Ilya Shestopalov (Russian)<br><center><b>Build Information:</b><center>Compiled using QT version %5<center>Built %6 - %7 About AwOken <center>This program uses the <b>AwOken</b> icon set version 2.5<br><br>Released under the<br>Creative Commons<br>Attribution-Share Alike 3.0<br>Unported License<br><a href="url">http://creativecommons.org/licenses/by-sa/3.0/legalcode</a><br><center>The CMST icon is a derivative work from the AwOken icon set. License %1 change log is not available. ChangeLog Cancel Abbrechen <b>Service:</b> %1 Unable to determine service No Services Selected You need to select a Wifi service before pressing the remove button. Offline Mode Engaged Offline Mode Disabled %1 (%2) Network Connection: %1 Network Services: No network services available Service Error: %1 Object Path: %1 VPN Engaged VPN Disengaged Warning <center><b>We received a DBUS reply message indicating an error while trying to scan technologies.</b></center><br><br>Error Name: %1<br><br>Error Message: %2 <b>Connection:</b> %1 <br><b>Service Details:</b><br> Service Type: %1<br> Service State: %1<br> Favorite: %1<br> Yes favorite No favorite External Configuration File: %1<br> Yes immutable No immutable Auto Connect: %1<br> On autoconnect No autoconnect <br><b>IPv4</b><br> IP Address Acquisition: %1<br> IP Address: %1<br> IP Netmask: %1<br> IP Gateway: %1<br> <br><b>IPv6</b><br> Address Acquisition: %1<br> Prefix Length: <br> Prefix Length: %1<br> Privacy: %1<br> <br><b>Proxy</b><br> URL: %1<br> Servers:<br>&nbsp;&nbsp;%1<br> Excludes:<br>&nbsp;&nbsp;%1<br> <br><b>Name Servers</b><br> <br><br><b>Time Servers</b><br> <br><br><b>Search Domains</b><br> <br><br><b>Ethernet</b><br> Connection Method: %1<br> Interface: %1<br> Device Address: %1<br> MTU: %1<br> <br><b>Wireless</b><br> Security: %1<br> Strength: %1<br> Roaming: %1<br> Yes roaming No roaming <br><b>VPN Provider</b><br> Host: %1<br> Domain: %1<br> Name: %1<br> Type: %1<br> State: Engaged Disabled Deaktiviert Offline Mode %1On%1%1 powered %1Off%1%1 powered Yes connected No connected Yes tethered No tethered WiFi Technologies:<br> %1 Found, %2 Powered Update resolution of the counters is based on a threshold of %L1 KB of data and %L2 seconds of time. Ethernet Connection<br> icon_tool_tip Service: %1<br> Interface: %1 WiFi Connection<br> icon_tool_tip SSID: %1<br> Strength: %1%<br> VPN Connection<br> icon_tool_tip Connection is in the Ready State. icon_tool_tip Connection is in the Failure State, attempting to reestablish the connection icon_tool_tip Connection is in the Failure State. icon_tool_tip Not Connected icon_tool_tip Error retrieving properties via Dbus Connection status is unknown Type: %1 <br>Powered On Off Aus Not Connected <br>Tethering Enabled Aktiviert Connection : %1 Signal Strength: %1% Favorite Connection Never Connected <br>Security : %1 <br>Roaming <br>Autoconnect is <p style='white-space:pre'><center><b>%1</b></center> <center><b>Unable to find a systemtray on this machine.</b><center><br>The program may still be used to manage your connections, but the tray icon will be disabled.<center><br><br>If you are seeing this message at system start up and you know a system tray exists once the system is up, try starting with the <b>-w</b> switch and set a delay as necessary. The exact wait time will vary from system to system. Could not find a connection to the system bus %1 - Critical Error Unable to find a connection to the system bus.<br><br>%1 will not be able to communicate with connman. Could not create an interface to connman on the system bus Unable to create an interface to connman on the system bus.<br><br>%1 will not be able to communicate with connman. Error reading or parsing connman.Manager.GetProperties %1 - Warning There was an error reading or parsing the reply from method connman.Manager.GetProperties.<br><br>It is unlikely any portion of %1 will be functional. Error reading or parsing connman.Manager.GetTechnologies There was an error reading or parsing the reply from method connman.Manager.GetTechnologies.<br><br>Some portion of %1 may still be functional. Error reading or parsing connman.Manager.GetServices There was an error reading or parsing the reply from method connman.Manager.GetServices.<br><br>Some portion of %1 may still be functional. %1 version %2 by %3 has been detected on this system.<p>This server supports desktop Notification Specification version %4 Colorize Icons Attempt %1 of 4 looking for notification server. %1 license is the MIT (Expat) license. You need to select a service before pressing the connect button. You need to select a service before pressing the disconnect button. <p style='white-space:pre'><center><b>%1 Properties</b></center> Unable to find or connect to a Notification server. IconManager A new icon definition file will be installed to <b>%1</b> and a backup of the old definition file has been created as <b>%2</b> <p>If the original definition file was customized you wish to retain those changes you will need to manually merge them into the new file. <p>If the original was never customized or you just wish to delete the backup now you may select <i>Discard</i> to delete the backup or <i>Save</i> to retain it. Peditor Property Editor Eigenschaften-Editor &General &Allgemein <html><head/><body><p>If checked this service will auto-connect when no other connection is available. This is only available for services marked &quot;Favorite&quot;. </p><p>The service will not auto-connect while roaming.</p></body></html> AutoConnect Automatisch verbinden <html><head/><body><p>The list of manually configured domain name servers. Some cellular networks don't provide correct name servers and this allows for an override.</p><p>This array is sorted by priority and the first entry in the list represents the nameserver with the highest priority.</p><p>When using manual configuration and no global nameservers are configured, then it is useful to configure this setting.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Nameservers &Namensserver <html><head/><body><p>The list of manually configured time servers.</p><p>The first entry in the list represents the timeserver with the highest priority.</p><p>When using manual configuration this setting is useful to override all the other timeserver settings. This is service specific, hence only the values for the default service are used.</p><p>Changes to this property will result in restart of NTP query.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &TImeservers &Zeitserver <html><head/><body><p>List of manually configures search domains.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> &Domains &Domänen <html><head/><body><p>User configuration of IPv4 settings.</p></body></html> IPv&4 IPv&4 Address Adresse Netmask Netzmaske Gateway Gateway DHCP DHCP Manual Manuell Off Aus Method Methode <html><head/><body><p>User configuration of IPv6 settings</p></body></html> IPv&6 IPv&6 Auto Auto Prefix Length Prefix-Länge Privacy Privatsphäre Disabled Deaktiviert Preferred Bevorzugt Enabled Aktiviert <html><head/><body><p>User configuration of Proxy settings.</p></body></html> &Proxy &Proxy Direct Direkt <html><head/><body><p>Automatic proxy configuration URL. Used by the &quot;auto&quot; method.</p></body></html> URL URL Servers Server <html><head/><body><p>Used when &quot;manual&quot; is set.List of proxy URIs. The URI without a protocol will be interpreted as the generic proxy URI.</p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> Excludes Ausgeschlossen <html><head/><body><p>Used when &quot;manual&quot; is set. A list of hosts which can be accessed directly.</p><p><br/></p><p>Enter one or more IP addresses. Separate each address you enter by a comma, semi-colon, or by white space.</p></body></html> <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Was ist das</p></body></html> <html><head/><body><p>Clear all entries on the current page.</p><p>This button will reset every field on the current page to the default value, which generally means nothing in the field.</p></body></html> Reset Pa&ge Sei&te zurücksetzen <html><head/><body><p>Clear all fields on every page of the dialog.</p><p>This will reset every field on every page to the default value for the field. </p></body></html> Reset &All &Alles zurücksetzen <html><head/><body><p>Accept the entries, send them to Connman, and close the dialog.</p></body></html> OK OK <html><head/><body><p>Close the dialog without sending any entries to Connman.</p></body></html> Cancel Abbrechen Provisioning Provisioning Editor Provisionierungs-Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open &Öffnen <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save &Speichern <html><head/><body><p>Delete a config file.</p></body></html> &Delete &Löschen <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page &Seite aufräumen <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Was ist das</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit &Beenden [global] Name Name Description Beschreibung [service_*] Type Typ MAC MAC Nameservers Namensserver Timeservers Zeitserver SearchDomains Suchdomänen Domain Domäne SSID SSID EAP EAP CACertFile CACertDatei ClientCertFile ClientCertDatei PrivateKeyFile PrivateKeyDatei PrivateKeyPassphrase PrivateKeyPasswort PrivateKeyPassphraseType PrivateKeyPasswortTyp Identity Identität Phase2 Phase2 Passphrase Passwort Security Sicherheit Hidden Versteckt Eduroam (long) Eduroam (lang) Eduroam (short) Eduroam (kurz) IPv4 Address IPv4 Adresse IPv4 Off IPv4 Aus IPV4 DHCP IPV4 DHCP IPv6 Address IPv6 Adresse IPv6 Off IPv6 Aus IPv6 Auto IPv6 Auto IPv6.Privacy IPv6.Privacy ProvisioningEditor Global Service WiFi Templates File Path to the CA Certificate File File Path to the Client Certificate File File path to the Client Private Key File Key Files (*.pem);;All Files (*.*) MAC address. SSID: hexadecimal representation of an 802.11 SSID List of Nameservers List of Timeservers List of DNS Search Domains Domain name to be used Enter the string representation of an 802.11 SSID. Service type. EAP type. Private key passphrase type. Network security type. Hidden network IPv6 Privacy IPv6.Privacy {6 ?} %1 - Item Input Tag which will replace the * with<br>an identifier unique to the config file. Enter the network name. Enter a description of the network. Password/Passphrase for the private key file. Identity string for EAP. RSN/WPA/WPA2 Passphrase Phase 2 (inner authentication with TLS tunnel)<br>authentication method. %1 - Text Input Information Information The IPv4 <b>Address</b>, <b>Netmask</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv4 Address IPv4 Adresse IPv4 Netmask IPv4 Gateway (This is an optional entry) The IPv6 <b>Address</b>, <b>Prefix Length</b>, and optionally <b>Gateway</b> need to be provided.<p>Press OK when you are ready to proceed. IPv6 Address IPv6 Adresse %1 - Integer Input Enter the IPv6 prefix length IPv6 Gateway (This is an optional entry) <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 RootHelper Failed to register service org.cmst.roothelper - there may be another instance running. Registrieren des Dienstes org.cmst.roothelper fehlgeschlagen - Eventuell läuft bereits eine andere Instanz. Failed to register roothelper object on the system bus. Registrierung des roothelper Objektes auf dem System-Bus fehlgeschlagen. ScrollBox Scrollbox Scrollbox TextLabel TextLabel TranslateStrings connman system tray Main Window Title connman system tray cmst Abbreviated Program Name - used for QMessageBox titles cmst idle connman state string Inaktiv association connman state string Verbindung configuration connman state string Konfiguration ready connman state string Bereit online connman state string Online disconnect connman state string Trennen failure connman state string Fehlschlag offline connman state string Offline system connman type string System ethernet connman type string Ethernet wifi connman type string Wifi bluetooth connman type string Bluetooth cellular connman type string Brauche Kontext um das richtig übersetzen zu können / Need the context to translate this right Cellular gps connman type string GPS vpn connman type string VPN gadget connman type string Gadget p2p connman type string P2P wired connman type string Kabelgebunden direct connman proxy string Direkt manual connman proxy string Manuell auto connman proxy string Auto psk connman security string PSK ieee8021x connman security string ieee8021x none connman security string Nichts wep connman security string WEP wps connman security string Invalid arguments connman error string Ungültige Argumente Permission denied connman error string Zugriff verweigert Passphrase required connman error string Passwort benötigt Not registered connman error string Nicht registriert Not unique connman error string Nicht eindeutig Not supported connman error string Nicht unterstützt Not implemented connman error string Nicht implementiert Not found connman error string Nicht gefunden No carrier connman error string Kein Carrier In progress connman error string In Bearbeitung Already exists connman error string Existiert bereits Already enabled connman error string Bereits aktiviert Already disabled connman error string Bereits deaktiviert Already connected connman error string Bereits verbunden Not connected connman error string Nicht verbunden Operation aborted connman error string Aktion abgebrochen Operation timeout connman error string Aktion Zeitüberschreitung Invalid service connman error string Ungültiger Dienst Invalid property connman error string Ungültige Eigenschaft disabled connman privacy string enabled connman privacy string prefered connman privacy string auto connman ethernet connection method Auto manual connman ethernet connection method Manuell dhcp connman ipv4 method string manual connman ipv4 method string Manuell off connman ipv4 method string fixed connman ipv4 method string auto connman ipv6 method string Auto manual connman ipv6 method string Manuell 6to4 connman ipv6 method string off connman ipv6 method string openconnect connman vpn connection type openvpn connman vpn connection type vpnc connman vpn connection type l2tp connman vpn connection type pptp connman vpn connection type auto connamn ipv6 method string Auto manual connamn ipv6 method string Manuell Invalid arguments connman error sring Ungültige Argumente Permission denied connman error sring Zugriff verweigert Passphrase required connman error sring Passwort benötigt Not registered connman error sring Nicht registriert Not unique connman error sring Nicht eindeutig Not supported connman error sring Nicht unterstützt Not implemented connman error sring Nicht implementiert Not found connman error sring Nicht gefunden No carrier connman error sring Eigentlich mit "Träger" übersetzbar, aber aus Gründen der verständlichkeit gleich gelassen Kein Carrier In progress connman error sring In Bearbeitung Already exists connman error sring Existiert bereits Already enabled connman error sring Bereits aktiviert Already disabled connman error sring Bereits deaktiviert Already connected connman error sring Bereits verbunden Not connected connman error sring Nicht verbunden Operation aborted connman error sring Aktion abgebrochen Operation timeout connman error sring Aktion Zeitüberschreitung Invalid service connman error sring Ungültiger Dienst Invalid property connman error sring Ungültige Eigenschaft VPNAgent VPN Agent Input Username <html><head/><body><p>WISPr username.</p></body></html> <html><head/><body><p>WISPr Benutzername.</p></body></html> Password <html><head/><body><p>WISPr password.</p></body></html> <html><head/><body><p>WISPr Passwort.</p></body></html> Host Name Name OpenConnect CA Cert. Client Cert. Cookie Server Cert. VPN Host <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Was ist das</p></body></html> ... ... <html><head/><body><p>Continue the connection process.</p></body></html> <html><head/><body><p>Fahre mit dem Verbindungsprozess fort.</p></body></html> <html><head/><body><p>Accept and use the answers you have provided in this dialog. </p><p>This will send your input to the connman daemon to continue the connection process.</p></body></html> O&K O&K <html><head/><body><p>Cancel the connection process.<br/></p></body></html> <html><head/><body><p>Cancel the dialog. </p><p>This will send a message to the connman daemon that you have cancelled the connection request.</p></body></html> &Cancel &Abbrechen Save Credentials VPN_Editor Global OpenConnect OpenVPN VPNC L2TP PPTP All Files (*.*) CA Files (*.pem *.ca);;All Files (*.*) Cert Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Key Files (*.pem *.ca *.crt *.cert);;All Files (*.*) Config Files (*.ovpn *.conf *.config);;All Files (*.*) VPN server IP address (ex: 1.2.3.4) %1 - Item Input %1 - Verify Option User defined name for the VPN Domain name for the VPN Service (example: corporate.com) Networks behing the VPN link, if more than one separate by a comma. Format is network/netmask/gateway, and gateway can be omitted. Ex: 10.10.20.0/255.255.255.0/10.20.1.5,192.168.99.1/24,2001:Ldb8::1/16 Networks = entry is optional and may be left blank. %1 - Text Input Information Information <center>No configuration files were found.<br>You may use this dialog to create one. %1 - Information <center>Reading configuration file: %1 %1 - Select File Select a file to load. <center>No configuration files were found.<br>Nothing will be deleted. Select a file to be deleted. Enter a new file name or select<br>an existing file to overwrite. File read completed File deleted Error encountered deleting. File save failed. %L1 KB written %L1 Bytes written Critical <b>DBus Error Name:</b> %1<br><br><b>String:</b> %2<br><br><b>Message:</b> %3 VPN_Prov VPN Provisioning Editor <html><head/><body><p>Text edit window.</p><p>You may type or cut and paste into this window. You may also use menus above to insert text fields.</p></body></html> <html><head/><body><p>Open an existing config file.</p></body></html> &Open &Öffnen <html><head/><body><p>Write the displayed data to a config file.</p><p>The combo box is seeded with a list of CMST created config files to provide an easy way to overwrite one. You may also type a name in the ComboBox.</p><p>It is not necessary to provide a path nor a file extension as both will be stripped out and replaced allowed values. </p></body></html> &Save &Speichern <html><head/><body><p>Delete a config file.</p></body></html> &Delete &Löschen <html><head/><body><p>Clear all text from the editor window.</p></body></html> &Clear Page &Seite aufräumen <html><head/><body><p>What's This</p></body></html> <html><head/><body><p>Was ist das</p></body></html> <html><head/><body><p>Enter &quot;Whats This&quot; mode.</p></body></html> <html><head/><body><p>Exit the dialog.</p></body></html> E&xit &Beenden [global] Name Name Name of the network. Description Beschreibung Description of the network. Provider PPTP Provider L2TP Provider VPNC Provider OpenVPN Provider OpenConnect PPTP.User PPTP User Name. PPTP.Password PPTP Password. PPPD.EchoFailure Set the maximum number of LCP configure-NAKs returned before starting to send configure-Rejects (default is 10). PPPD.EchoInterval Send an LCP echo-request frame to the peer every n seconds. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected. PPPD.Debug Debug level. PPPD.RefuseEAP Deny EAP authorization? PPPD.RefusePAP Deny PAP authorization? PPPD.RefuseCHAP Deny CHAP authorization? PPPD.RefuseMSCHAP Deny MSCHAP authorization? PPPD.RefuseMSCHAP2 Deny MSCHAPV2 authorization? PPPD.NoBSDComp Disables BSD compression? PPPD.NoDeflate Disable deflate compression? PPPD.RequirMPPE Require the use of MPPE? PPPD.RequirMPPE40 Require the use of MPPE 40 bit? PPPD.RequirMPPE128 Require the use of MPPE 128 bit? PPPD.RequireMPPEStateful Allow MPPE to use stateful mode? PPPD.NoVJ Disable Van Jacobson compression? L2TP.User L2TP User Name. L2TP.Password L2TP Password. L2TP.BPS Maximum bandwidth to use. L2TP.TXBPS Maximum transmit bandwidth to use. L2TP.RXBPS Maximum receive bandwidth to use. L2TP.LengthBit Use length bit? L2TP.Challenge Use challenge authentication? L2TP.DefaultRoute Add a default route to the system routing tables, using the peer as the gatewa? L2TP.FlowBit Sequence numbers included in the communication? L2TP.TunnelRWS The window size of the control channel (number of unacknowledged packets, not bytes) L2TP.Exclusive Use only one control channel? L2TP.Redial Redial if disconnected? L2TP.RedialTImeout Wait n seconds before redial. L2TP.MaxRedials Give up redial tries after X attempts. L2TP.RequirePAP Require the remote peer to get authenticated via PAP? L2TP.RequireCHAP Require the remote peer to get authenticated via CHAP? L2TP.ReqAuth Require the remote peer to authenticate itself? L2TP.AccessControl Only accept connections from specified peer addresses? L2TP.AuthFile Authentication file location. L2TP.ListenAddr The IP address of the interface on which the daemon listens. L2TP.IPsecSaref Use IPsec Security Association tracking? L2TP.Port Specify which UDP port should be used. PPPD.NoPcomp Disable protocol compression? PPPD.UseAccomp Disable address/control compression? PPPD.ReqMPPE PPPD.ReqMPPE40 PPPD.ReqMPPE128 PPPD.ReqMPPEStateful VPNC.IPSec.ID Your Group username. VPNC.IPSec.Secret Your group password (cleartext). VPNC.Xauth.Username Your username. VPNC.Xauth.Password Your password (cleartext). VPNC.IKE.Authmode IKE authentication mode. VPNC.IKE.DHGroup Name of the IKE DH Group. VPNC.PFS DH gropup to use for perfect forward secrecy. VPNC.Domain Domain name for authentication. VPNC.Vendor Vendor of your IPSec gateway. VPNC.LocalPort Local ISAKMP port to use. VPNC.CiscoPort Local UDP port number to use. VPNC.AppVersion Application version to report. VPNC.NATTMode NAT-Traversal method to employ. VPNC.DPDTimeout Send DPD packet after not receiving anything for n seconds VPNC.SingleDES Enable single DES encryption. VPNC.NoEncryption Enables using no encryption for data traffic. OpenVPN.CACert Certificate authority file. OpenVPN.Cert Local peer's signed certificate. OpenVPN.Key Local peer's private key. OpenVPN.MTU MTU of the tunnel. OpenVPN.NSCertType Peer certificate type (server/client). OpenVPN.Proto Protocol type (udp/tcp-client/tcp-server). OpenVPN.Port TCP/UDP port number. OpenVPN.AuthUserPass Authenticate with server using username/password? OpenVPN.AskPass Get certificate password from console or file? OpenVPN.AuthNoCache Don't cache --askpass or --auth-user-pass values? OpenVPN.Cipher Encrypt packets with cipher algorithm: OpenVPN.Auth Authenticate packets using algorithm: OpenVPN.CompLZO Use fast LZO compression (yes/no/adaptive). OpenVPN.RemoteCertTls Require peer certificate signed (client/server). OpenVPN.ConfigFile OpenVPN config file that can contain extra options. OpenConnect.ServerCert SHA1 certificate fingerprint of the final VPN server. OpenConnect.CACert File containing other certificate authorities. OpenConnect.ClientCert Client certificate file, if needed for web authentication. OpenConnect.MTU Request MTU from server to use as MTU of tunnel? OpenConnect.Cookie Read cookie from standard input? OpenConnect.VPNHost The final VPN server to use after completing web authentication. main.cpp Another running instance of CMST has been detected. This instance is aborting Eine andere Instanz von CMST läuft gerade. Breche ab Connman System Tray. Connman System-Tray. Bypass restoring the window state if restoring window state is specified in the settings file. Bypass restoring any start options in the settings file. [Experimental] Disable data counters. May be used to minimize load on your system. [Experimentell] Datenzähler ausschalten. Kann eventuell die Last auf dem System minimieren. Disable the system tray icon. May be needed for system trays not compliant with the Freedesktop.org system tray specification. Deaktiviere das Tray-Icon. Wird eventuell benötigt, falls das System-Tray nicht kompatibel mit der Freedesktop.org-System-Tray Spezifikation ist. Use the icon theme from your system if one is defined. Benutze das Icon Theme von deinem System, falls eines definiert ist. Use an icon theme from your system. Icon Theme Name Log the connman inputRequest for debugging purposes. Protokolliere den connman inputRequest für Debugging-Zwecke. Start the GUI minimized in the system tray. Starte das GUI minimiert im System-Tray. Specify the wait time in seconds before starting the system tray icon. Gebe die Wartezeit in Sekunden an, bevor das System-Tray-Icon angezeigt wird. seconds Sekunden [Experimental] The number of kb that have to be transmitted before the counter updates. [Experimentell] Die Anzahl der kb die übertragen werden, bevor der Zähler aktualisiert wird. KB KB [Experimental] The interval in seconds between counter updates. [Experimentell] Der Zeitraum in Sekunden zwischen den Zähler-Aktualisierungen. If tray icon fake transparency is required, specify the background color to use (format: 0xRRGGBB) Falls Pseudotransparenz benötigt wird, kann hier die Hintergrundfarbe definiert werden (Format: 0xRRGGBB) RRGGBB RRGGBB Use XFCE specific code. Benutze XFCE spezifischen Code. Use MATE DE specific code. Benutze MATE DE spezifischen Code. cmst/apps/cmstapp/code/iconman/000755 001750 000144 00000000000 12650736224 017135 5ustar00andyusers000000 000000 cmst/apps/cmstapp/code/agent/agent_dialog.h000644 001750 000144 00000004532 12645570501 021377 0ustar00andyusers000000 000000 /**************************** agent_dialog.h *************************** Code to manage the agent user interface. When the connman daemon needs to communicate with the user it does so through the agent. The agent has a QDialog as a class member, and agent_dialog.cpp manages that dialog. Copyright (C) 2013-2016 by: Andrew J. Bibb License: MIT 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. ***********************************************************************/ # ifndef AGENT_DIALOG_H # define AGENT_DIALOG_H # include # include # include # include "ui_agent.h" // The class to control the agent UI based on a QDialog class AgentDialog : public QDialog { Q_OBJECT public: // members AgentDialog(QWidget*); // functions int showPage0(const QMap&); int showPage1(const QString&); void createDict(QMap&); private: // members Ui::Agent ui; QString sys_env_path; QStringList cli_browsers; QStringList gui_browsers; // functions void initialize(); private slots: void hidePassphrase(bool); void useWPSPushButton(bool); void showWhatsThis(); void updateBrowserChoice(const QModelIndex&, const QModelIndex&); void enteringBrowser(); void launchBrowser(); public: inline void setWhatsThisIcon(QIcon icon) {ui.toolButton_whatsthis->setIcon(icon);} }; #endif cmst/images/application/cmst.svg000644 001750 000144 00000032526 12645570501 017432 0ustar00andyusers000000 000000 image/svg+xml cmst/images/interface/golfball_red.png000644 001750 000144 00000002232 12645570501 020511 0ustar00andyusers000000 000000 PNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTEzani_Hf"ky5EXbch[^ ?m~mB ;WfkkfW<  tRNS#CPO@  WݧL -#=., P6"ֿ ? N*P*E.Ӳ u_1${ G!W1Kۈ+,g‘N >S\ZL3bKGDH pHYs oytIME%WħIDAT(c` YX9Є9yxEDŚ[Z$B\J P"D\I %;Ѐ&H\K$tB!o04ꁁ^ cY@PjJM@ GIс PmT "1(3m: @  ""7k6 '$z=)9%5mMFTNn^~AaQqIiYy'򯮩ohH&^9Mٕp.L}%tEXtdate:create2015-11-04T18:23:38-05:005%tEXtdate:modify2013-07-28T03:30:37-04:00vIENDB`cmst/apps/cmstapp/code/control_box/000755 001750 000144 00000000000 12651157547 020047 5ustar00andyusers000000 000000 cmst/cmst.pro000755 001750 000144 00000003516 12645570501 013663 0ustar00andyusers000000 000000 # Need a make file to make other make files TEMPLATE = subdirs SUBDIRS = ./apps/cmstapp ./apps/rootapp # cmst build variables include(cmst.pri) # translations TRANSLATIONS += ./translations/cmst_en_US.ts TRANSLATIONS += ./translations/cmst_ru_RU.ts TRANSLATIONS += ./translations/cmst_zh_CN.ts TRANSLATIONS += ./translations/cmst_de_DE.ts TRANSLATIONS += ./translations/cmst_pl_PL.ts TRANSLATIONS += ./translations/cmst_it_IT.ts TRANSLATIONS += ./translations/cmst_es_ES.ts TRANSLATIONS += ./translations/cmst_es_CO.ts TRANSLATIONS += ./translations/cmst_fr_FR.ts. # non-application files which need to be installed # # documentation (manpage) documentation.path = $$CMST_DOC_PATH/man1 documentation.files = ./misc/manpage/cmst.1.gz documentation.CONFIG = no_check_exist documentation.extra = gzip --force --keep ./misc/manpage/cmst.1 INSTALLS += documentation # application icons - scalable icon (used internally), 48x48 provided # in case something else needs it exists(./images/application/cmst.png) icon48.path = /usr/share/icons/hicolor/48x48/apps icon48.files = ./images/application/cmst.png INSTALLS += icon48 exists(./images/application/cmst.svg) { iconsvg.path = /usr/share/icons/hicolor/scalable/apps iconsvg.files = ./images/application/cmst.svg INSTALLS += iconsvg } else { system(sed -i 's/Icon=cmst/Icon=preferences-system-network/g' "./misc/desktop/cmst.desktop") system(sed -i 's/Icon=cmst/Icon=preferences-system-network/g' "./misc/desktop/cmst-autostart.desktop") } # license license.path = /usr/share/licenses/cmst license.files = ./text/LICENSE INSTALLS += license # desktop file desktop.path = /usr/share/applications desktop.files = ./misc/desktop/cmst.desktop INSTALLS += desktop # autostart desktop file autostart.path = /usr/share/cmst/autostart autostart.files = ./misc/desktop/cmst-autostart.desktop INSTALLS += autostart cmst/apps/cmstapp/code/vpn_agent/ui/000755 001750 000144 00000000000 12650017374 020105 5ustar00andyusers000000 000000 cmst/images/raw_art/network-vpn-acquiring.png000644 001750 000144 00000002461 12650306257 022053 0ustar00andyusers000000 000000 PNG  IHDRw=gAMA asRGB cHRMz&u0`:pQ<bKGDD(M pHYs  &IDATHǵOVƿk{<1MDMR, ĦR#Eu"t̆QHQ]!Dy PZ`f"Ol{hBx䥞ε9$p]W€i ==' py^Ѳm^jhRU0dww߿\P̲9!CkNYYd֞>}u݊_~r4Dz/,,4N{{{0쬭j/ mchhJ)~ʕ+^:sƍ%W=ϳ:::\!D:>sLX,͛/.\gڶmj?66NNNRIC)5tZT;8rHNk(޹s8mZj'OT$e%U k˷pEi+2D۶fVRrR4#"b$(27)lggJ3ZK) "i~ak$siKNс$I5VVV޽{:VڊyEjE2fPA Je{0;;<ຉ8RL^Rںc"͍KGbz9@k !O{W8X[[[h&ܜ[],MAqb14M[T*AS\ZL3bKGDH pHYs B(xtIME!PIDAT(c` YX9Є9yxEDŚ[Z$B\J P"D\I %;Ѐ&H\K$tB!o04ꁁ^ cY@PjJM@ GIс PmT "1(3m: @  ""7k6 '$z=)9%5mMFTNn^~AaQqIiYy'򯮩ohH&^9Mٕp.L}%tEXtdate:create2015-11-04T18:23:28-05:00^5z%tEXtdate:modify2013-07-28T03:30:33-04:009 IENDB`cmst/text/eduroam_short.txt000644 001750 000144 00000000112 12645570501 016555 0ustar00andyusers000000 000000 [service_eduroam] Type = wifi Name = eduroam EAP = peap Phase2 = MSCHAPV2 cmst/text/license.txt000644 001750 000144 00000002315 12645570501 015333 0ustar00andyusers000000 000000

Connman System Tray (CMST)
Copyright (C) 2013-2015
by
Andrew J. Bibb

License: MIT (Expat)

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. cmst/text/LICENSE000644 001750 000144 00000002101 12645570501 014146 0ustar00andyusers000000 000000 Copyright (C) 2013-2015 by: Andrew J. Bibb 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. cmst/text/icon_def.txt000644 001750 000144 00000015323 12650306257 015463 0ustar00andyusers000000 000000 # cmst.icon # # This icon definition file, located in the user's home directory, can be # edited. The purpose of this file is to facilitate the use of theme icons # that are not part of the official Freedesktop.org naming specification. # # QT provides very good icon selection with a fallback mechanism. In order # to use it one must know the name of the theme icon you want. This is # not a problem with the official named icons, but is if you want to support # any icon theme since the name of any icon not part of the official # Freedesktop.org specification is up to the theme author. # # This file basically describes the pictures to use for each icon. Format # of the file is as follows: # # Comments are the # sign. Any text on a line after the first # is treated # as a comment. # # Each icon definition starts with the [icon] token and is terminated by a # blank line. Inside each icon block are various sections, each contained # on one line. Each section contains a key and value pair separated by an # equal (=) sign. # # icon_name = is the descriptive name of what the icon is to show. This # entry is read and used by the program and should not be edited. # # resource = is the location of the default picture which is hard coded # into the program in a QResource file. This can be edited provided you # select another valid resource which must already exist. You cannot add # resources using this file. This key/value pair is mandatory. # # colorize = (no/yes, 0/1, or a color in the format RRGGBB) if yes or 1 # the internal icons will be colorized according to the value specified # from preferences. If a color number is provided the icon will be colorized # to the specified color. If no or 0 then the icon is not colorized. # Colorizing is only available for internal icons defined in the resource line. # # fdo_name = is the name of one of the official Freedesktop.org named icons. # This key/value pair is optional. # # theme_names = is a comma (,) separated list of theme icon names which # are not part of the Freedesktop.org specification. The list will be # searched in order looking for each icon name in the current theme. # This key/value pair is also optional. # # The text in a value field may contain the vertical delimiter (|) symbol. # If it does the text on each side should be a complete resource path or # theme icon name. Text to the left is the ON state of the icon, to the right # is the OFF state. This is used for icons which show a different picture # depending on state. Play/Pause in a media player would be a classic example. # # The text in a resource value field may also contain whitespace. If # it does the text on each side should be a complete resource path. Left # of the whitespace is the base picture in raw_art, to the right is the # overlay file to place over the raw_art icon. This is only for # internal icons from the resource file. # # If this file becomes corrupted by editing or by other means is can be # regenerated simply by deleting it, then stopping and starting CMST. # # Icon selections at runtime are as follows: # If the -i (--icon-theme) command line switch or preferences setting is not # used then the resource name specified here is used if found, if not found # the hard coded internal icon will be used. # # If the -i (--icon-theme) command line switch or preferences settings is used # then icons are searched in the following order until one is found: # theme_names from left to right (match will only occur if one of the names # can be found in the current or specified theme.) # fdo_name # resource location as specified in this file # hard coded internal icon # # # # # interface icons [icon] icon_name = state_error resource = :/icons/images/raw_art/application-exit1.png colorize = no fdo_name = network_error [icon] icon_name = state_ready resource = :/icons/images/raw_art/network-idle.png colorize = yes fdo_name = network-idle [icon] icon_name = state_online resource = :/icons/images/raw_art/network-transmit-receive.png colorize = yes fdo_name = network-transmit-receive [icon] icon_name = state_not_ready resource = :/icons/images/raw_art/network-offline.png :/icons/images/overlay/overlay-warningnet9.png colorize = yes fdo_name = network-offline [icon] icon_name = state_vpn_connected resource = :/icons/images/raw_art/stock_lock.png colorize = yes theme-names = network-vpn.png, emblem-locked.png [icon] icon_name = favorite resource = :/icons/images/raw_art/nm-signal-100.png colorize = yes fdo_name = emblem-favorite [icon] icon_name = offline_mode_engaged resource = :/icons/images/raw_art/golfball_green.png colorize = no [icon] icon_name = offline_mode_disengaged resource = :/icons/images/raw_art/golfball_red.png colorize = no [icon] icon_name = whats_this resource = :/icons/images/raw_art/info2.png colorize = 1361D9 fdo_name = system-help # # systemtray icons [icon] icon_name = connection_failure resource = :/icons/images/raw_art/application-exit1.png colorize = no fdo_name = network-error [icon] icon_name = connection_ready resource = :/icons/images/raw_art/network-idle.png colorize = yes fdo_name = network-idle [icon] icon_name = connection_not_ready resource = :/icons/images/raw_art/network-offline.png :/icons/images/overlay/overlay-warningnet9.png colorize = yes fdo_name = network-offline [icon] icon_name = connection_wired resource = :/icons/images/raw_art/network-transmit-receive.png colorize = yes fdo_name = network-wired [icon] icon_name = connection_wireless resource = :/icons/images/raw_art/nm-signal-100.png colorize = yes fdo_name = network-wireless [icon] icon_name = connection_wifi_000 resource = :/icons/images/raw_art/nm-signal-00.png colorize = yes theme_names = network-wireless-signal-none-symbolic, network-wireless-connected-00 [icon] icon_name = connection_wifi_025 resource = :/icons/images/raw_art/nm-signal-25.png colorize = yes theme_names = network-wireless-signal-weak-symbolic, network-wireless-connected-25 [icon] icon_name = connection_wifi_050 resource = :/icons/images/raw_art/nm-signal-50.png colorize = yes theme_names = network-wireless-signal-ok-symbolic, network-wireless-connected-50 [icon] icon_name = connection_wifi_075 resource = :/icons/images/raw_art/nm-signal-75.png colorize = yes theme_names = network-wireless-signal-good-symbolic, network-wireless-connected-75 [icon] icon_name = connection_wifi_100 resource = :/icons/images/raw_art/nm-signal-100.png colorize = yes theme_names = network-wireless-signal-excellent-symbolic, network-wireless-connected-100 [icon] icon_name = connection_vpn resource = :/icons/images/raw_art/stock_lock.png colorize = yes theme-names = network-vpn.png, emblem-locked.png [icon] icon_name = connection_vpn_acquiring resource = :/icons/images/raw_art/network-vpn-acquiring.png colorize = yes cmst/text/eduroam_long.txt000644 001750 000144 00000000251 12645570501 016361 0ustar00andyusers000000 000000 [service_eduroam] Type=wifi Name=eduroam EAP=peap CACertFile=/etc/ssl/certs/ca-certificates.crt Phase2=MSCHAPV2 Identity=yourusername@domain.edu Passphrase=yourpassword cmst/text/changelog.txt000644 001750 000144 00000021414 12651776465 015657 0ustar00andyusers000000 000000
Connman System Tray (CMST)
Change Log
2016.01.26
  • Added a VPN tab to the main controlbox.
  • Can connect and disconnect already provisioned VPN services from controlbox.
  • Check for screen size at startup and adjust the initial size to fit if working on a small screen.
  • SignalBar class removed and replaced with QProgressBar styled using QStyleSheets.
  • VPN Editor available to help create new VPN connections.
  • OpenVPN files in .opvn format can be imported and used to provision a VPN service.
2015.12.03
  • CMST icon by Progandy was reworked and made cleaner by Hagabaka.
  • Added feature to run an external program automatically after a connect. The Advanced Controls checkbox must be checked to access this.
  • Expanded functionality of system tray icon menu to toggle power for technologies and to connect or disconnect wifi services.
  • System tray menu can be torn off and live in its own window on the desktop.
  • Internal icons can be colorized (color selector control on Preferences Tab).
  • Reworked internals to store text returned by Connman as is and only translate for display.
  • Fixed issue #118 (tray icon not visible in Plasma 5)
  • Fixed issue #119 (not starting when XDG_CURRENT_DESKTOP=kde is set and not actually running KDE).
2015.10.03
  • Browser selections in Agent dialog improved and added xdg-open option (by Yaohan Chen).
  • -i (--icon-theme) command line option will now accept a theme name.
  • Theme icons not part of the standard Freedesktop.org icon naming specification (mainly wifi signal strengths) will be used if available.
  • Counter update rate in preferences upper limit changed from 600 seconds to 86400 seconds.
  • Minimize to tray when ESC is pressed (by kriesoff).
  • Restoring window size and geometry is now independent from the other settings.
  • Added -b command line option to bypass restoring window state if that option is set in Preferences.
  • Added -B command line option to bypass all startup options set in Preferences.
  • New CMST icon (by Progandy).
2015.03.01
  • Translation to Chinese by Jianfeng Zhang.
  • Option to create a entry in the users autostart direcory (coded by Lester Bico).
  • Added --use-mate command line option to try and work around system tray icon oddities.
  • Start options formally only available from the command line may now be set in preferences.
  • Added --fake-transparency command line option to try and work around system trays that display transparent backgrounds as opaque (generally white).
2014.12.14
  • If a Wifi service falls into the failure state provide an option to try and automatically reconnect.
  • Removed -r (--wife-scan-rate) command line option and all code internal for having CMST to WiFi scans. This was conflicting with Connman auto scans.
  • Available services now shown with right click on system tray icon.
2014.12.05
  • Adding translations (Russian Complete).
  • Fixed response time for Agent dialog when it is needed.
2014.11.24
  • Added CMST icon.
  • Added --use-xfce command line option. Code for XFCE that breaks KDE now must be called with this option.
  • Fixed integer overflow for counters.
2014.11.18
  • Removed incorrect validator from Properties Editor domains field.
  • Provisioning Editor to create and edit Connman service configuration files.
  • Systemtray icon will show "online" if there is exactly one connection showing in the ready state and no connections showing the online state.
  • Systemtray icon added for a connection in the "failure" state.
  • Fixed and cleaned up behavior of notifications and message boxes for various error conditions.
2014.10.15
  • Connect, Disconnect, and Remove buttons in the Wifi tab are disabled if no Wifi services are available.
  • If only one WiFi service exists it is no longer necessary to select it first before pressing the Connect button.
  • If only one WiFi service is connected it is no longer necessary to select it first before pressing the Disconnect button.
  • Single instance code now checked using a local socket, not shared memory.
  • If an instance of CMST is started while one is running the running copy will be raised, and a message about a second instance trying to start will be printed to stderr.
  • Wifi signal strength bar and techonlogy buttons now have frames around them so that they do not fill an entire table cell
  • Autoconnect property can be set or unset from the property editor.
  • Fixed the IPv6 validator in the properties editor.
2014.08.23
  • Removed tooltips for obvious controls. Tooltips now are only available for dynamic GUI elements (unless the user disables them in preferences).
  • Detailed service configuration dialog.
  • Added scrollbars and additional information to the service details tab.
2014.07.19
  • UI updated to allow notifications from the system tray icon or from a notification server.
  • Notifications can be sent to a notification server if present.
  • Accomodate P2P technologies (display only)
  • Scan WiFi button moved to Technologies box and renamed "Rescan". No change in function, just a more accurate representation of what the button does.
  • Connections in the "Ready" state show ready with an appropriate icon in the system tray instead of showing disconnected.
2014.07.01
  • Added "scan wifi" button to force a rescan of wifi sevices.
  • Added a checkbox to preferences to reset the counters at startup and when a service changes.
  • Finished the internal rework to catch and process dbus signals.
2014.06.22
  • Check to make sure only a single instance of the program can be run.
  • Shipped with a .desktop file and icon.
  • Internal changes to catching dbus signals.
2014.06.14
  • Selecting "Maximize" from the tray icon will show the dialog "normal" instead of "maximized".
  • Enabled display of size grip in corner of dialog
  • Added option to show fewer details in the Services box on page 1
  • Fixed wordwrap in the Counters tab
  • Added an entry for the Counters tab in the Help tab, and added scroll bars to the help field.
  • GUI settings can be saved and restored between sessions.
  • Improved response when toggling the power state of a technology.
  • Added Preferences tab, tooltips are now disabled by default, added checkbox in Preferences to enable them.
  • Forced small delay in starting the system tray icon.
  • Limit the amount the dialog can shrink.
  • Replaced Nuvola icons with AwOken icons.
  • A manpage is now provided and installed.
  • The system tray icon can optionally show notify messages in popups.
2014.05.10
  • Left mouse click in system tray will toggle the interface up and down (coded by: Brett Dutro)
  • Option to use system icon theme if available
  • Added MoveBefore and MoveAfter buttons to services on first page
2014.03.29 - Revised per input from Arch Linux Forums
  • Added command line option to wait a specified time to create the system tray
2014.03.13 - Revised per input from Arch Linux Forums
  • Command line options to show help, version, disable the system tray and start the program minimized.
  • Added SSID field to the agent request information dialog.
  • Added check to make sure a system tray exists before we try to use it.
  • Added option to log the input request from the connman daemon.
2014.01.18 - Revised
  • Improved error dialog in Agent and ask for retry on bad password.
2014.01.14 - Revised
  • Fixed up tooltip popup on system tray icon
2014.01.11 - Posted to Arch Linux Forum
  • Added the counters and the Counters tab
  • Fixed a SEGFAULT when connecting a Wifi service after the service order had changed.
  • Added message dialogs in the logerrors function to show errors to the user (errors are still logged to the journal).
  • Fixed SEGFAULTS if the program fails to find or connect to DBUS
  • Added a button on the WiFi page to remove a Wifi service
2014.01.05 - Initial Version
  • View and set global connection properties
  • List known technologies and services
  • View detailed information about services
  • Basic WiFi service management
cmst/text/000755 001750 000144 00000000000 12651776465 013165 5ustar00andyusers000000 000000