From f817dbfd7d4ec0ab9b337ee5aad8c8e29d80750f Mon Sep 17 00:00:00 2001 From: Raphael Goetter Date: Wed, 1 Jan 2014 12:00:49 +0100 Subject: [PATCH] Minor addons, better commented code --- bower.json | 2 +- css/knacss.css | 184 +++++++++++++++++++++++++------------------ less/_01-base.less | 192 ++++++++++++++++++++++++++++----------------- less/knackLESS.zip | Bin 9125 -> 9249 bytes less/knacss.less | 2 +- 5 files changed, 227 insertions(+), 153 deletions(-) diff --git a/bower.json b/bower.json index 6d0a91e..39e87cf 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "KNACSS", - "version": "2.9.1", + "version": "2.9.2", "homepage": "http://www.knacss.com/", "authors": [ "Raphaƫl GOETTER, Alsacreations" diff --git a/css/knacss.css b/css/knacss.css index 74b977d..034e2a0 100644 --- a/css/knacss.css +++ b/css/knacss.css @@ -1,15 +1,58 @@ /*! -* www.KNACSS.com V2.9 (2013-10) @author: Raphael Goetter, Alsacreations +* www.KNACSS.com V2.9.2 (2014-01) @author: Raphael Goetter, Alsacreations * Licence WTFPL http://www.wtfpl.net/ */ /* ----------------------------- */ -/* ==reset */ +/* == soft reset */ +/* ----------------------------- */ + +/* switching box model for all elements */ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* soft reset */ +html, +body { + margin: 0; + padding: 0; +} +ul, +ol { + padding-left: 2em; +} +ul.unstyled { + list-style: none; +} +img { + vertical-align: middle; + border: 0; +} +audio, +canvas, +video { + display: inline-block; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 0; +} + + +/* ----------------------------- */ +/* == typography */ /* ----------------------------- */ /* base font-size corresponds to 10px and is adapted to rem unit */ html { font-size: 62.5%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; } body { background-color: #fff; @@ -85,23 +128,11 @@ h6, .h6-like { font-size: 1.4286em; /* equiv 20px */ } -/* soft reset */ -html, -body { - margin: 0; - padding: 0; -} -ul, -ol { - padding-left: 2em; -} -ul.unstyled { - list-style: none; -} code, pre, samp, kbd { + white-space: pre-line; /* IE fix */ white-space: pre-wrap; font-family: consolas, 'DejaVu Sans Mono', courier, monospace; line-height: 1em; @@ -139,7 +170,47 @@ sup { sub { top: .5ex; } -table { margin-bottom: 1.5em; } + +/* ----------------------------- */ +/* == hiding content */ +/* ----------------------------- */ + +/* hiding content */ +.visually-hidden { + position: absolute; + left: -7000px; + overflow: hidden; +} +[dir=rtl] .visually-hidden { + left: auto; + right: -7000px; +} +.desktop-hidden { display: none; } /* hidden on desktop */ + + +/* ----------------------------- */ +/* == skip links styling */ +/* ----------------------------- */ + +.skip-links { + position: absolute; +} +.skip-links a { + position: absolute; + left: -7000px; + padding: 0.5em; + background: #000; + color:#fff; + text-decoration: none; +} +.skip-links a:focus { + position: static; +} + + +/* ----------------------------- */ +/* == browsers consistency */ +/* ----------------------------- */ /* avoid top margins on first content element */ p:first-child, @@ -169,10 +240,10 @@ li ol { img, table, td, blockquote, code, pre, textarea, input, video { max-width: 100%; } -/* pictures */ -img { - vertical-align: middle; -} + +/* margin-bottom on tables */ +table { margin-bottom: 1.5em; } + /* Google Gmap3 bug fix on images */ :not(.gm-style) img { height: auto !important; @@ -186,38 +257,14 @@ img { max-width: none !important; } -a img { border: 0; } - /* scripts */ body > script {display: none !important;} -/* skip-links */ -.skip-links { - position: absolute; -} -.skip-links a { - position: absolute; - left: -7000px; - padding: 0.5em; - background: #000; - color:#fff; - text-decoration: none; -} -.skip-links a:focus { - position: static; -} /* ----------------------------- */ /* ==layout and modules */ /* ----------------------------- */ -/* switching box model for all elements */ -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - /* float layout */ /* module, gains superpower "BFC" Block Formating Context */ .mod { @@ -286,6 +333,11 @@ img.left, img.right { .txtright { text-align: right; } .txtcenter { text-align: center; } +/* ----------------------------- */ +/* == width helpers */ +/* .. use only when needed */ +/* ----------------------------- */ + /* blocks widths (percentages and pixels) */ .w10 { width: 10%; } .w20 { width: 20%; } @@ -317,6 +369,12 @@ img.left, img.right { .w1140p { width: 1140px; } .mw1140p { max-width: 1140px; } + +/* ----------------------------- */ +/* == spacing helpers */ +/* .. use only when needed */ +/* ----------------------------- */ + /* spacing helpers p,m = padding,margin a,t,r,b,l = all,top,right,bottom,left @@ -366,21 +424,9 @@ source https://github.com/stubbornella/oocss/blob/master/core/spacing/space.css .pl2, .plm { padding-left: 20px; } .pl3, .pll { padding-left: 30px; } -/* hiding content */ -.visually-hidden { - position: absolute; - left: -7000px; - overflow: hidden; -} -[dir=rtl] .visually-hidden { - left: auto; - right: -7000px; -} - -.desktop-hidden { display: none; } /* hidden on desktop */ /* ----------------------------- */ -/* ==iefix */ +/* == iefix */ /* ----------------------------- */ /* hasLayout for IE6/IE7 */ @@ -408,15 +454,15 @@ source https://github.com/stubbornella/oocss/blob/master/core/spacing/space.css /* @source https://github.com/Schepp/box-sizing-polyfill */ /* .ie67 * { - behavior: url(/js/boxsizing.htc); + behavior: url(/lib/box-sizing-polyfill/boxsizing.htc); } */ + /* ----------------------------- */ -/* ==print */ +/* == quick print reset */ /* ----------------------------- */ -/* quick print reset */ @media print { p, blockquote { @@ -441,21 +487,3 @@ source https://github.com/stubbornella/oocss/blob/master/core/spacing/space.css background: pink; outline: 3px solid maroon; } - -/* orientation iOS font-size fix */ -@media (orientation: landscape) and (max-device-width: 768px) { - html, - body { - -webkit-text-size-adjust: 100%; - } -} - -/* ----------------------------- */ -/* ==own stylesheet */ -/* ----------------------------- */ - -/* Here should go your own CSS styles */ -/* You can link them with an @import or, better for webperf, just paste them here */ - -/* @import url(my-styles.css); */ - diff --git a/less/_01-base.less b/less/_01-base.less index 1a47bce..44d4c9d 100644 --- a/less/_01-base.less +++ b/less/_01-base.less @@ -1,11 +1,55 @@ /* ----------------------------- */ -/* ==reset */ +/* == soft reset */ +/* ----------------------------- */ + +/* switching box model for all elements */ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* soft reset */ +html, +body { + margin: 0; + padding: 0; +} +ul, +ol { + padding-left: 2em; +} +ul.unstyled { + list-style: none; +} +img { + vertical-align: middle; + border: 0; +} +audio, +canvas, +video { + display: inline-block; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 0; +} + + + +/* ----------------------------- */ +/* == typography */ /* ----------------------------- */ /* base font-size corresponds to 10px and is adapted to rem unit */ html { font-size: 62.5%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; } body { background-color: @basebg; @@ -71,23 +115,11 @@ h6, .h6-like { .em(@basefont + 6); } -/* soft reset */ -html, -body { - margin: 0; - padding: 0; -} -ul, -ol { - padding-left: 2em; -} -ul.unstyled { - list-style: none; -} code, pre, samp, kbd { + white-space: pre-line; /* IE fix */ white-space: pre-wrap; font-family: @fontstack2; line-height: 1; @@ -114,7 +146,61 @@ mark { padding:2px 4px; background: #ff0; } -table { margin-bottom: 1.5em; } +sup, +sub { + vertical-align: 0; + position: relative; +} +sup { + bottom: 1ex; +} +sub { + top: .5ex; +} + + +/* ----------------------------- */ +/* == hiding content */ +/* ----------------------------- */ + +/* hiding content */ +.visually-hidden { + position: absolute; + left: -7000px; + overflow: hidden; +} +[dir=rtl] .visually-hidden { + left: auto; + right: -7000px; +} +.desktop-hidden { display: none; } /* hidden on desktop */ + + +/* ----------------------------- */ +/* == skip links styling */ +/* ----------------------------- */ + +.skip-links { + position: absolute; + + a { + position: absolute; + left: -7000px; + padding: 0.5em; + background: black; + color: white; + text-decoration: none; + + &:focus { + position: static; + } + } +} + + +/* ----------------------------- */ +/* == browsers consistency */ +/* ----------------------------- */ /* avoid top margins on first content element */ p, ul, ol, dl, @@ -138,10 +224,9 @@ img, table, td, blockquote, code, pre, textarea, input, video { max-width: 100%; } -/* pictures */ -img { - vertical-align: middle; -} +/* margin-bottom on tables */ +table { margin-bottom: 1.5em; } + /* Google Gmap3 bug fix on images */ :not(.gm-style) img { height: auto !important; @@ -155,40 +240,14 @@ img { max-width: none !important; } -a img { border: 0; } - /* scripts */ body > script {display: none !important;} -/* skip-links */ -.skip-links { - position: absolute; - - a { - position: absolute; - left: -7000px; - padding: 0.5em; - background: black; - color: white; - text-decoration: none; - - &:focus { - position: static; - } - } -} /* ----------------------------- */ /* ==layout and modules */ /* ----------------------------- */ -/* switching box model for all elements */ -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - /* float layout */ /* module, gains superpower "BFC" Block Formating Context */ .mod { @@ -259,6 +318,11 @@ img.left, img.right { .txtcenter { text-align: center; } +/* ----------------------------- */ +/* == width helpers */ +/* .. use only when needed */ +/* ----------------------------- */ + /* blocks widths (percentage and pixels) */ .w10 { width: 10%; } .w20 { width: 20%; } @@ -290,6 +354,12 @@ img.left, img.right { .w1140p { width: 1140px; } .mw1140p { max-width: 1140px; } + +/* ----------------------------- */ +/* == spacing helpers */ +/* .. use only when needed */ +/* ----------------------------- */ + /* spacing helpers p,m = padding,margin a,t,r,b,l = all,top,right,bottom,left @@ -339,25 +409,9 @@ source https://github.com/stubbornella/oocss/blob/master/core/spacing/space.css .pl2, .plm { padding-left: @mediumvalue; } .pl3, .pll { padding-left: @largevalue; } -/* hiding content */ -.visually-hidden { - position: absolute; - left: -7000px; - overflow: hidden; -} -[dir=rtl] .visually-hidden { - left: auto; - right: -7000px; -} - -/* hidden on desktop */ -.desktop-hidden { display: none; } -/* hidden on mobile */ -.mobile-hidden { display: block; } - /* ----------------------------- */ -/* ==iefix */ +/* == iefix */ /* ----------------------------- */ /* Make sure you are using Conditional Classes in your HTML */ @@ -407,15 +461,15 @@ source https://github.com/stubbornella/oocss/blob/master/core/spacing/space.css /* @source https://github.com/Schepp/box-sizing-polyfill */ /* .ie67 * { - behavior: url(/inc/box-sizing-polyfill/boxsizing.htc); + behavior: url(/lib/box-sizing-polyfill/boxsizing.htc); } */ + /* ----------------------------- */ -/* ==print */ +/* == quick print reset */ /* ----------------------------- */ -/* quick print reset */ @media print { p, blockquote { @@ -440,11 +494,3 @@ source https://github.com/stubbornella/oocss/blob/master/core/spacing/space.css background: pink; outline: 3px solid maroon; } - -/* orientation iOS font-size fix */ -@media (orientation: landscape) and (max-device-width: @smallscreen) { - html, - body { - -webkit-text-size-adjust: 100%; - } -} \ No newline at end of file diff --git a/less/knackLESS.zip b/less/knackLESS.zip index ae7ec16083b899cbd648e24352221d211fa66bc7..f53a275d486828386189635529220dc3c5b8ba99 100644 GIT binary patch delta 3533 zcmV;;4KnhjN1;ftCIf%*T_HpVyLteI3jhGcBme*n0001AFflD+VRL0JY-MwEwOZYC z+cpw^c4qQF;L_=hor?OFY|E35+fLfc%=PK+?dBdp5|VHR2^0V=yPf>+x4Qr-QjpUm zH>XZz5&PT4VzFNU^ZM1~Ez3UjVQ(j|5%lgIb9(EU6;60|`iXy_KbJ%>caXl=%X-Ih z{lqF=3dOeCGOiR8N>rluj?iz}AFp3sWCxKyNS^^XbMklK+W@02g~g#eK!65WrGNi4 zf<7-IKDN3Y7l|6|eWgaPU*)=dCS59Sce38FDGD{bEJ@Nd2xt(h6#*kHQ)25kY%Z!6 zGHz<;pOq*Hrlf!K89i@Ut!oibvf2^#QCKevt}?FV4rZ-nSt`U_1l_xtc~eRalNY>x z2ro{v}G-u0Z$i>E-#c=?~k!Cua$({Eds$}0CV;$zQm za$Y>_tZwQuE40$EbN9G_e20?yBlP>ORcgyCsbKH!@yU4*GP@fpjH|i4Bvu?{6PW#K z#6)# z&dz`H-EkhmIDZzj?iN%)T|q|(uH<-yKKGD^ynEP7FEVF%0Wk!K47VPl<1PE}o^9n5 ztvW>=Aai{pIOmBI&4M;T7npp+!0#SHN(kl0@=`VqN`#4J2vXD^U5tmyAUza-B9NW8 zy51cjhd5KNRT&WN8js~E3h%1M43eYMN|t}@o7>ylql!Z|U}DS2*rl%xv%8#MPDl9P zcuITHCa`bv+3b#yv~HEHv=@YZv)#r@;u_o^*W_m_U#Pd*Nep?=K`8F!qv%+pMMEsl z#8XQM(n92~L|5oPv(SW+1(guvpiP8dU$RaFQD8kv*Fe-fXQAE(n|15tIc!tospNl$ zP9nRWPN%_+=WF%9N@?F&ul~)>$_`R^<28z~!FP^AF}$E6Jb=YIF4naW)SIQl`8s{r4J4P{C5c8t>V4M^61?#5f?ZwYH){KGc=897z zb2|G(T-bE^+fo*nv_ zgVs{i#q*aN6idOQme?^F7V4zKo!&|dS+{lH*r~^I&Y+qzDCX?6ma~w5v4~=c!~%%r z4U5-)O-2BNpx_LS1S({%LB*!fZ>`a()>Es7S^(|c;N+kr!*l|FsLO!Au`hp5B%kR6 z+L7WwiCY_AwnuvA(`x9b13GMJr*UbRu#OVL{U&bDwKO&$V`i6{7Bs7%Rb%TERUl zVcaAdg>zbArHPwOUH12Ji2X50SAFg;jwg_!8&Bs5IHfkYAzzcAu&Y*@dluzI)*y1k zb{riUikPrQAE5bp^W)Dyy@K@2=bjw{pkdgB7-2mgXkmqUA95F4%`jN$(KCr|4{HY(_GFUWrsEg~pzf(VOhA#wU4 zBn-yv{pXw2EAiy0Y%i3-IzRYC(0I%mCm{E$XXr^pO~DTV|226lIu}g}z6Num=1@_{ z-wZ^La>3umhuJjPxC^CkgAESzAz^+btcHYDOIQp!79Gc8F(fR;3;49u<&bUJv8{%L zRYzD43F{+aJtTju$7}es)axPJb;ou+T+wy6qMISdO~-LNB;0lcNJV`@D6_$%VLfKJ z9&q=L%M7`Wq}7nr(khJKLmP69AM_LU@s~%}RB&~a->mlj7N4go3ZhEBK z^?-zrkyHg5hJDvk^vH+VY&kRuK6ku>Z0I zno&r3uV3+zAK6hpQb2=);t0yjh?3VR?Y& zD3B;F7xWw3uFL5a@aYE91>Fa_&1ABZe&6I!Osk3WO`dC8LjmOztqbQSkZJNs#i5nA z6F4}DNnC#e{S{+?ynYp0pNy{OM{Hd2DQi8Xl}R8&=hOchk5pi&7m^+H2lXvhoO_hEfEG~|ZHyHk1^9^{9{R|zr=5pqQ1 zRRVuaB9lDP*uHv0S2W~`#<~=dsz|^Rg#?2D3xLpul&q1 z8mhJwc#CrO^JNA3SNPx!+gOvW0;?4;Nr?~KD?r;D6_3!O8 zP6)PX->e-DhcQ=<7go^yqNAD$rL!r-L`kTfw>LLg5yWLhI|Wu-ct){fdiNQ$ix)if zmMh-%3|@BO3zp%lu9jooS2SWshTd%CS7hvFdTGPB~WRIM#nX zj`b-=`kHLdUA$_*_oE-)uO}bgU&oU@NMYTb$EX`=FI2))rOV@k)raFld(rT_rW?MO zZV~Y8b-aQ|)ByN_+nSmK5*coP!pTwB=Ty#pJ<#I#@X}?)-Km;@zv=GqV!s?t)1c3N z-s~`xf~q&|{UGW3LxHbydjB-z+=74ZUv4Ja>7KR{Jin#qDU_LYMLk9V+k+5Omg7f6x&U`@zp_Ip?7+eHiZeJWP zpu?@Xwr0<3e3yuugL|M4?bF8r9=Yja{31Hsg@H4DmP0~$$YkwgDK_Dvz2!cI^nl-U z`d;97eE*)X({0|6yWQzh;Kg(}lmzd4s5x}@Ss>8v^xm)-S<`J8gc@BMvPJja5?T+f z<7MZ60kcyMdJzruULiyWOBD4_0RRAtliD95e{EOi*T!H&`~ZiD6~!yb+S4VNCMC(} z_U}zxCu=V>aBkkb=Sj|+M8Q$N7eHOt;p5Z%CQZXkmGG8?*I@$3Njw~pcz6Ocy0%Q| zF}%=3`CX?E$sRm#MYLVWoUl8a&;7j^>0t z@WaKJQ3+HS1%k^jpKu8^w+!g+0rrD69lvvyTe4$?u6(#b^bM0aAxRGLT_HpVyLteI z3jhGcB$JRKO99Q3+#x#wev=p?JOW=6lU5=+3|JNb0ADaQEoozKZj)dl7L&3f8Uh*_ zlg=VI0rryzBRyd!9smGeFgPu6a%paKE^K9Ub5KhG0u%rg000080Q6oVL;)<8i}uC4-nDOy3$6*0G(dxXNWT^RKuPp2Yf9vil-JJT{(EPJltiuM zTw2rz>@GRa3?Gs+!?(LQU%X|r-}_^47Z(V6|K18GJe&TDpf7)0B3RCyU=OEisXv$A8`)qL~y{l)p` zi}PHUFC@-+@wm6TsmocRm9{(f0UOWvfICZT==XhV@PSuSy?_Wy&V!Nb`(b0q_EpA2b%lRGC2KJ|2)RFaFrp6kY_SM^!JfS6# zYTu5m!O^!*f;|cAWx>_VzW76xF@NCoBaPd^d$U_Coc?I%4|dT54~SflC6is8Hwr#9 zew6r;D_uN(Y_u0pfM(#+m-umj55;qVATORhw}QjZ0(yTTb&cx6bE#a$F3un1z5!ME zb->{^H24*_ds)xCHaj-I-H7VGugtagy4tbjqlW=cGOW30%52r_SK=U)^ghEL=^4n_^jJ67vj1XQ6* za>(G)j#udWk9klz9;6pDXLtcRfS4UEH}|iH|LTAK)J?C`R={k=pj(e2>1bODJF~o$ zjRW51Ibb1yed@AEpesFBvIt`5t*-YyW*pN8CI<|C3~UVB z!vjR-bnwTA?c!v|mBVQD9W<6&1>mz;l@tWD!H_9RQ8W8=@Wqb&Ua#(TN^I%&$t z!b8gL8X|bNW`I}jAwnxzmMX>*==`Mh9;WiAikmgd8(661GmeL>_&!?N)!JXq_f>H4 zE7n?W!-hAoQvFF*MqAHoA571s*xuf;PHm(`+!+H3KmUNp12`Hrhsvo|M&(+&!U}&; zr!~e(aGln0GA@`gMvN}bdBCzZvX;H8f^li$v{O?1Hde7urF2H|m$B7O_fZ;H6L856 z3BE5=P-!P|b%lY-A&wi5gAesQc@4KR+3j+<41t(rh*uC{S$-aLR{N zfzC85VLxPfXenmYGZaGL=%NW!Q#OB)BR!?DGmM)wcD}qLq`f7KnQlDo`YK&E3cTrm z+*`V%^bpsONOS#+#)P8%6fTj2fPG87fGnFoN)OTa92eeQoN}zf9?dHK+wX{9m9!%O z%Rcukb};rO^f6<5jv2)@Mp&bdu>QXJ?#J)nuIzO?O zV!mK8ZWf_Bc=2VN20AN|nX5k(EJ?Ir<`{;>oT`u_&E<|DfdM4MUK&?18xwT9HzTW5 zd15xyC3dNzH{8pk<&e}8!)@~!o5Z*4>Be-?H!q-l@Gto5wjaSPE<=C!Y}kiThx6~B zJ@pgSC?CeTprL3HfxrnObgG5K=7*3_8CR1un#d1fRv{T629{KsSp$BmT$tJU@p>70 z(>d+ep|#^`C|LD^%}}su1?!>4y3<&%hl2Hd4S%ilW~g@4scnXWO()n61>0V*9SXMd zE&R38+o9TRr*=E+(QSX%qr0KTU8nJGD0tTiAm~#;*k=Uaf&Q3bf55RiEi=^WMVp~0 z(OM0)R*BYnC|W0?o1y3?5p9N|O(NP3McYJlI~3g}qPwB!E)l)k4n$atqAJKRz`8wE zB0gSU-wcNY%bjkJ4wMr>Skd8>hO6K~C14O`|jo8_4T87%f0 zB+iV&F$`mR;w;oR8U}1T(0Ri?tU(pSD>dG2ur$T zal6H0Fa4p(VR@()&Nn%%{532Ie4%yW+yWvxUsN1U33dTHDY1xspl>k;2<$&-F`v;f zIb-vRFIk(U+TDNV+;n0?;^eR##*bfBiOl>Gnfbb7)*hw;aZh95-HCWS4xYxrSEs=7 zSa=!>uTGJt<55|nW)o_0F=@$JB4^zQFs5gTo~_2vF+qPz1g#olM-+3Sm?sqblV?N_ z$J~t(W0E6cuNzQ1jngEYzk~f+>rFr6xhTPHQZUQnUO8#i_Y6?7NN)BmqHH98gC66>J zr8;m)LoR8Q8v({N$tR7f#?UcIa!RAr7(4PxSRLW)hl^wSTrhuDo1#p8TQa{)`=_li3w z9Gu_6v(R7v@yp-ZW}Fag*FNhUkHQrMjrLj&l)~6clDUF*%ta2GEb@G|M=AGV91f4Gfjda%N}+m5WOX|Ga3snTU% zu=>~++AD_NG+m1)jSlV)@GRJ0K8$Dp{K$W8O`9k(8SZ^(PmMt{K{@yJfJI+;?V95L zlqTTsx=Yo#e-Gzq;PWAG_83cn>Ro$bOI-g_c=;q)e|t97p%1Tbx_>PW!k9&`KQmgr zJV>RYa@&`1&6kSo=zn1h~(D~h#CJd&2; zNfx3#nTB;eye(W2#rU*&*1c_Z7s_Fl)<66nT1O^HPKoZRBjO`n@QE<$rCGK&oWU*N}68{ob4xrP3A# zpTi-kcLvi#_lg<>V|M~g%N-NH)Ao9#feEBcxhBgHlyt&QZ9pPst^N^NYn~YoI8evL z(v^b@rqI&QNUn6zb)OUNuH02Gh_14Zc1d!9+m+gO!B?czT-s)i0LWhpe2~sGo2g1R zp)f=Xtv}V6{wMv|9#Fe{nc9d9*2-t4!PDK>XinGzKU|C{l|Y42Ah`VU2^Uat%YfDo zupg}H_?@%Zk(w2{^5F*2H