From 532c01c388c7ab408b0e244fd73849ace8d96f0a Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Thu, 27 Feb 2025 19:51:36 +0000 Subject: [PATCH] LibWeb: Implement text-decoration: spelling-error and grammar-error --- Libraries/LibWeb/CSS/ComputedProperties.cpp | 7 ++- Libraries/LibWeb/CSS/Enums.json | 4 +- Libraries/LibWeb/CSS/Keywords.json | 2 + .../LibWeb/CSS/Parser/PropertyParsing.cpp | 12 +++++ Libraries/LibWeb/Painting/PaintableBox.cpp | 44 +++++++++++++++++- .../Screenshot/images/text-decorations.png | Bin 15304 -> 22572 bytes .../Screenshot/input/text-decorations.html | 4 ++ .../parsing/text-decoration-line-computed.txt | 7 ++- .../parsing/text-decoration-line-valid.txt | 7 ++- 9 files changed, 74 insertions(+), 13 deletions(-) diff --git a/Libraries/LibWeb/CSS/ComputedProperties.cpp b/Libraries/LibWeb/CSS/ComputedProperties.cpp index 89330897b58..966722f3188 100644 --- a/Libraries/LibWeb/CSS/ComputedProperties.cpp +++ b/Libraries/LibWeb/CSS/ComputedProperties.cpp @@ -1008,8 +1008,11 @@ Vector ComputedProperties::text_decoration_line() const return lines; } - if (value.is_keyword() && value.to_keyword() == Keyword::None) - return {}; + if (value.is_keyword()) { + if (value.to_keyword() == Keyword::None) + return {}; + return { keyword_to_text_decoration_line(value.to_keyword()).release_value() }; + } dbgln("FIXME: Unsupported value for text-decoration-line: {}", value.to_string(CSSStyleValue::SerializationMode::Normal)); return {}; diff --git a/Libraries/LibWeb/CSS/Enums.json b/Libraries/LibWeb/CSS/Enums.json index 6b03f3f473c..eb328f1d00c 100644 --- a/Libraries/LibWeb/CSS/Enums.json +++ b/Libraries/LibWeb/CSS/Enums.json @@ -545,7 +545,9 @@ "underline", "overline", "line-through", - "blink" + "blink", + "spelling-error", + "grammar-error" ], "text-decoration-style": [ "dashed", diff --git a/Libraries/LibWeb/CSS/Keywords.json b/Libraries/LibWeb/CSS/Keywords.json index 5c6267ed0b9..82a1d38bd59 100644 --- a/Libraries/LibWeb/CSS/Keywords.json +++ b/Libraries/LibWeb/CSS/Keywords.json @@ -190,6 +190,7 @@ "fullscreen", "grab", "grabbing", + "grammar-error", "graytext", "grid", "groove", @@ -404,6 +405,7 @@ "space-around", "space-between", "space-evenly", + "spelling-error", "square", "square-button", "srgb", diff --git a/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp b/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp index 03b0b84e6a3..896253fe0b7 100644 --- a/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp +++ b/Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp @@ -3510,6 +3510,8 @@ RefPtr Parser::parse_text_decoration_line_value(TokenStream Parser::parse_text_decoration_line_value(TokenStream Parser::parse_text_decoration_line_value(TokenStream 1 && includes_spelling_or_grammar_error_value) + return nullptr; + + if (style_values.size() == 1) + return *style_values.first(); + quick_sort(style_values, [](auto& left, auto& right) { return *keyword_to_text_decoration_line(left->to_keyword()) < *keyword_to_text_decoration_line(right->to_keyword()); }); diff --git a/Libraries/LibWeb/Painting/PaintableBox.cpp b/Libraries/LibWeb/Painting/PaintableBox.cpp index 70f6c55050f..d7ae415cc31 100644 --- a/Libraries/LibWeb/Painting/PaintableBox.cpp +++ b/Libraries/LibWeb/Painting/PaintableBox.cpp @@ -682,6 +682,7 @@ void paint_text_decoration(PaintContext& context, TextPaintable const& paintable auto baseline = fragment.baseline(); auto line_color = paintable.computed_values().text_decoration_color(); + auto line_style = paintable.computed_values().text_decoration_style(); auto const& text_paintable = static_cast(fragment.paintable()); auto device_line_thickness = context.rounded_device_pixels(text_paintable.text_decoration_thickness()); @@ -690,6 +691,24 @@ void paint_text_decoration(PaintContext& context, TextPaintable const& paintable DevicePixelPoint line_start_point {}; DevicePixelPoint line_end_point {}; + if (line == CSS::TextDecorationLine::SpellingError) { + // https://drafts.csswg.org/css-text-decor-4/#valdef-text-decoration-line-spelling-error + // This value indicates the type of text decoration used by the user agent to highlight spelling mistakes. + // Its appearance is UA-defined, and may be platform-dependent. It is often rendered as a red wavy underline. + line_color = Color::Red; + device_line_thickness = context.rounded_device_pixels(1); + line_style = CSS::TextDecorationStyle::Wavy; + line = CSS::TextDecorationLine::Underline; + } else if (line == CSS::TextDecorationLine::GrammarError) { + // https://drafts.csswg.org/css-text-decor-4/#valdef-text-decoration-line-grammar-error + // This value indicates the type of text decoration used by the user agent to highlight grammar mistakes. + // Its appearance is UA defined, and may be platform-dependent. It is often rendered as a green wavy underline. + line_color = Color::DarkGreen; + device_line_thickness = context.rounded_device_pixels(1); + line_style = CSS::TextDecorationStyle::Wavy; + line = CSS::TextDecorationLine::Underline; + } + switch (line) { case CSS::TextDecorationLine::None: return; @@ -710,9 +729,13 @@ void paint_text_decoration(PaintContext& context, TextPaintable const& paintable case CSS::TextDecorationLine::Blink: // Conforming user agents may simply not blink the text return; + case CSS::TextDecorationLine::SpellingError: + case CSS::TextDecorationLine::GrammarError: + // Handled above. + VERIFY_NOT_REACHED(); } - switch (paintable.computed_values().text_decoration_style()) { + switch (line_style) { case CSS::TextDecorationStyle::Solid: painter.draw_line(line_start_point.to_type(), line_end_point.to_type(), line_color, device_line_thickness.value(), Gfx::LineStyle::Solid); break; @@ -742,7 +765,24 @@ void paint_text_decoration(PaintContext& context, TextPaintable const& paintable painter.draw_line(line_start_point.to_type(), line_end_point.to_type(), line_color, device_line_thickness.value(), Gfx::LineStyle::Dotted); break; case CSS::TextDecorationStyle::Wavy: - painter.draw_triangle_wave(line_start_point.to_type(), line_end_point.to_type(), line_color, device_line_thickness.value() + 1, device_line_thickness.value()); + auto amplitude = device_line_thickness.value() * 3; + switch (line) { + case CSS::TextDecorationLine::Underline: + line_start_point.translate_by(0, device_line_thickness + context.rounded_device_pixels(1)); + line_end_point.translate_by(0, device_line_thickness + context.rounded_device_pixels(1)); + break; + case CSS::TextDecorationLine::Overline: + line_start_point.translate_by(0, -device_line_thickness - context.rounded_device_pixels(1)); + line_end_point.translate_by(0, -device_line_thickness - context.rounded_device_pixels(1)); + break; + case CSS::TextDecorationLine::LineThrough: + line_start_point.translate_by(0, -device_line_thickness / 2); + line_end_point.translate_by(0, -device_line_thickness / 2); + break; + default: + VERIFY_NOT_REACHED(); + } + painter.draw_triangle_wave(line_start_point.to_type(), line_end_point.to_type(), line_color, amplitude, device_line_thickness.value()); break; } } diff --git a/Tests/LibWeb/Screenshot/images/text-decorations.png b/Tests/LibWeb/Screenshot/images/text-decorations.png index 74bf0e3938f77443f91f4ebaed464c3f9d63d605..dfb47c2b2b69ddbb799bfdeb01e73f0b4a954226 100644 GIT binary patch literal 22572 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV2a>iVqjnp6%kcuUEaktaqI0}&J7}| z^PgAWo5`VEwQTN-kKb;*J@eHnce}H6OY)6vi^JE4@7=eS=hlubJNCT0y}E54ct+Fm38!;%ZXpe#E4qz|orMIZjgXG+i}sw!$Qt>oO@Pu+h#F?(Wy4srD zulwh-{dC?dYcu^UkJ@T`PRfcu@axm*L-+sJE{xl|iJjSIt@GtSm+g0^t9l0Maz|Wg z{P*sCouBc?2bqC)S6uT8{xwO(^U^;42zU9|X(4?Ui`J+ec`X0$;q&F1I}8q7jf~**V{1{FW<5RiRbR`njm!XVf*yf8UKICpO)kKuw~1{bz#2B zo|8gu=U<+1>se9MqpaH|lTXh~LX6s(5~KTRcg{lTF8SlFHv( z4O`3J-iq9uR{QN{`t9xc_pMiNEq;D(?=~IJNlW%hZ7|Ebb7Noa@2cH%YQNpwoPPcu z_iEFkCmv$u-|v?1ZddWVR42M&g<@>+SyPs|%=|VVe!X6A|NqZtNxLT#oS&VW8~yn8 z#@yT6N?%`__`K}Rjf0mrCLfn8x!}kvZC1kXIcdpXt%Qk19wF>91qZ&oyqtXIxO{!h zAx`xPTQUx<$!R)~lOElj9w(#WIqBQxhO28LjfKw7Ex$KY_UEtH>y3>T zoxip=T3kPFPTZo&VOQpVILvQpC2DeSQ3_w4+_3d#k_CGfw9_>^)s? zu2HI&RQ&$B+Gl$*E-KB-ySHa%U%a$gPDi9^{=Ge=udiiaThsYqYv$!;Z?r zq0i=%htT;42b(u5hp&w~dSa$=y3w7r(c2gI+f|*OrrY`{@1@9gtCAN2lR+Bej?FMk zPWsa$Xdu)uLo)y>rD zvSl|C-`?69z4!I8w^Mb!C#kF~V_h@9?$^pgdz^N5Ow8Z+Q|<6%b^o-AS65c@T;6j0 zLvp{Z*u)i%&1^P*A2jp75UD>Z8ZOW|O*i_O_xpXn^H_9*g1THT>UgAfKYa1PwB|=a zTmHVE&mvv~y2~C7W|Dt9)pxd8?@a&MX1eu}proRmaM2??@xY>+eG_AziXZ+`zx-q0 z!-dZ6M*pUU$0b(W+f(^5?pMymwi~O%_1oNgBo2CS;WYAjU;0l~%XfxB7nvHM=2i`XgGo7rqHIgXw< zZ~xzB-lZGIgFjt(*e-w0L1p%f<*a%BvpxkY7N;hyvQI62c}dlE3rB=*)RvCvQCqW) z2EU5_pr|L(Ynu{*5#=e>zB_W0YWPzx9Zo{&yeC*P-@<&(t@JGb#9?npg7?PJh#zqu8+b`(CY_;o9L zz3Zye@zYd1gL3yw{$2fkuej`)Om>?u7n~oby^F8?8ak`tw~2!%@Hx1)n-Q2A1f8O@{or+%%+vVN-fBs4J zoTPH~(*N#)zrVhIk*r^E=f%av-m@QCmA{ku`E1?pcV5bx<$-G+xqUby`)vDh8mu773@p}g=U6`k-cuwMpAc4#1jiMMAcS)`6hPq!bm&;n0U0G#%Z)frI zZ*OnkEuN&Z@*S&=)0va%^JCV>?VYL}o_75Ei;IgxSBKgE`|)^R)Z>ZD?wi8O@7Hd( z_MfD3buZU7Ms^v8DUn+;0?VEh9+y3Sf>+w?&DPL6+j4L3Dt&F1cSmCD7NjEUx#y%M zyTmu}S-&yZbmh&>&6g#V{FdkmosWw?+R80{O?!LF$w`OSy}C6$zV79@$ts?u`U$eN zUoIY*RerzLymw)NXyo(T`TL)~Z05JCI4)a$W{#!t-l&^vj`c`hULU_-;@`t|`Df?n z+t>a1v9I>`vWXEJlU(25+xz^?%)=ipE%jdRGjr0h>+9p~uU<0CzqhCC?X3v0%~|*M zRKC8p_WGJg;e*+im-*g&8U`-1YK1rWS-n(AIy*am-^^ocqPA)=g|W<%&fhcfp_p#e zhb^_gzwz8JILx~_?X1?^tE}QN2T~00Ec2aRC7H5b!an&J&pbW}gN6wu=PaKafP$l< zGv~-jSJANP@@0SfvjyMZ-AzuK#n*4~sH6D2?eu9b z$I4$^Xq@=@+1c*xHGe)H?-tj8cXhS+VP&_T2dcMNB$s`+`Y$w9&1c4ef{?XIn_lpm z<=il6%arU{YLa!OV>!EgjlscgYm1n=pHFS(nq&t3+oa+->6`C?T`v}Od#Hr;Uz*V= ztnQYwFkZxee&w^7IgZ&^Rs{0gumAtou<-f0xtq@x$L=agd~#)F@MdLyi-#?%*YBG( z%{@*j@aTzkvAe~}?zU>Papd;&pNn&D=S%%DEjq7r`no-zyynfTd^Yo=NtD+8ipRa+ zoc?xpgKKP8jMHs-+avbBUM%Lf|6@>^8MUv*Qh3joOWq&9%+BAZ`DRuA-Qx4Mn!oN; zKA*cpW|y1cJn0NkqrE#`teW~M_`yH!k3m=FZ{kSrnQvEH#TBvAUEKWXBhAt^6}OiA z&%d%}Cb%@L72dEzoH=xUmFkN#N3K@3e#&M}=9&KWb-7l+-DLS_q+yO=O%HZXGHo13p6x!6j-Fm&k zivwIJUb6eWzG#JgVfgu+U5j}2LYwc^{eJrumF%#C-^lEe-W?&egnk zbgpa?54dRD9Q!5C{`Z^B-r>!BpY|L%B~mu^Y~J3l*D6+~pPy&5ba}YV(lcVVPd`sr z^_;Xt|NrLnbw?j3IjnoIxL?G4$|9X9af_Z?T-AB^_TS&{_m9sA_Ooo&5I$UTM(J3Z{KULzC zGOwQSGB~_3`MBNpJH_^YJ~;oI^7hu&=q`7Jb@@9`4d`jC zzxPYfMQ>1=|HEs3C*YUZn`2%vrB_1*H`x7tvzcpp>6JitQ6t_d_iH})f-POz@b&Gp z{NFV<+K=xy`6qtJ_xHEA-En^pAFf~V-T&*Y(#+{@>moKTir-(CKDYE*Wxd7wZH?P) zjUP*@bx&XBH}}_#0hNxvqB!O{=f2aebnE>S#D<8*K}U_x0_n5 zx%c+#qpSOOy@RxzTfY3>ZaqrZO{FLf9AjcfBxgEMp^!t zt#zUcyYhaVxBIQr+uy5~bL7;K)n`<$MNU%5e9yWjPX5a;%i~8L*H2ZI&{Kc1^!@(- z`(9iB)=urLrdWKkAM3s>^i7z{%_gryr^9zFQ@v)MD7AvR;{0) z`@8Pu{`WuLD|i3dUHw0H?|v>J{(})W0iP_B~Ewt!*$>H8N6aWRy^^+dBr#DU;SNo`2C}+n;Q48y1vA7 za)fG=tpDcXx-It?w|?U0QBJt~^+4>+@cZ#U{%uMlAtA6k1 zum5ectA&5QfsGK)(q&g3l-;Uae(~_%1HpVTzwTa|F;DJAkGx@$%bx9zU-bDnsQh}= ztuJwTXK{L5?2ZD(!;A0B#eTbFKQ(p1j_Zd%J*|JW{Al#7Z<$qZg|EA&EZ=uzR4?no8{zic3vrw?q&b2^=-dgaNc-M-PFD_+%x>j?LPZ|6>(WNHauK9 zJ?_+r`rZHU&uBP#=jkMs%=mjJ=Y~uv5{8)h@ZLC1J?5VBtLx+EFE81cK4V|Z%?4LvCI9L#F9iK}=1f>FU;n4@Tkr*| zlP5eUtL@yZ3ht60Suj!Aolo9wPLELXv0iC+*Hyl=%`Pg;sQLMHddreve_PYp6CQng z-Lml7+UVt)=Pe%hoQN)*%=&KLQ3JznE8(kZ@A%G}cBX9IeBRFb?&dE`Ci^Yg1nOry zRW>WvzG~-@6w)tj*Uj4p$~i}ZpB=Wj{Ip%sE45opwn&-M!;7d5usEj%v!F4J>Th&prF z+mCOz-@mkd?(FyVf{6VX0 zx0vCw@bz&YOKxsToqG1|A#VK?rmPUl?4u@UPT8t^PI{GcVAro#tCfZ3mfgx+?AANW zw))$xt=ZknB#qO2e2U+0y`FabvZr?F{(ZmSSsx21>oPn$%XIO_jj5-n@!NcGxOnHB z?e`cpizgGD-|c#>#}%s^wMF58sBiJz((8fOiq1n?0eU;1OuDo$VB)k%ox=~xn*FHTx zeR+zkby-jN{vVIJPfe?M)TwU7`2X1&QQq#74=_(1{{dkII@D7*48ygZucD>M?A0<88Jm2s3QfOF$M!t3&tg?$@bMKd% zJ1_74zQ6x|zkhDOS99-Sr``wk4?N9fr>b~pXKi)oO%c3{` z&8&XAn%^}24EJU?+uf;`kJ&$OF1>X5d(F3ZGw#b3+?_FLNv+t1YqdLb?kI1cG(Rr0 z{^kVhbFWMP*}JTJRr&7z*S)Xm_ulx^gM0hnu#?y}S1zf8OqI|JPlX z&N#kpt$p5)z9L!qGWog{l85J~Sohbz`DXj;<+l}ISMR^^>+!NnA635k->b=dJWGG| zoWrNT#~gA?5dU+_Ra`g8Kj+M=`Yx@tk=qjP?Kl`;Z+}D{WtyuK-lmGXJ?Xyfb>A(Kq)qZ;QjJ)UP zHXYCZQPOIAd7V}Dm*Ttszu&jJ^<#s1_1&L;S1r969{;vNReM9##Wz~djW>P1>htqq zM|#~`E)m^DyQDvx>pa^2D-ozQ&Xm%ZJ*^HRV>xEg15#h^~vvM z`I&ZaKAP~l?)c93^+(Y`pSJyflP*sBethZ2{<)v;|LnQ1^LNP$XG3kX)30Ommo!KH zl*+rm>!S*PYm3a1FD^g*NcXXP?$^6r=ZmgQv$goT^W5y~YnLv*cWi5X zsF~#L^nlZD@;sF}haQ(tRh|89`qJquGI?_@PM8?4_hW+C^FO_xe>IyMKD~YZ{&@rK zV{Sk4o<7nt&wQ!$$y{xI>$gI_hMCIq=Kb-h{`MnJhe<~LkLw2W`!BDzPCNT*+VpMt zv+wL?-mH~>A@)a>ew&vs3Nf z^S#(saB6kohhm3KwSVqSSt7+9arphd3Hd4evbvAimliS~t2av2NMHOT(#L(~eB*;N z7;R)PzPt2gYuuIY?usel=TjvVFPE#0gj49}AX{yZ!cAMdyPmeS=wMoC+|9}18#b_q7TFSTR=WN5@FS`x}S9+#}o#XPa-DZ4QXTE8xSuop|FPhk+?Lr950yTdryW`UWyL1djfY$}XwT0GvfnN5`F8g|foa7P1omH& z5!-89_50fVQ$deU9WANxd0+MDkn-w3hgCA_?23h6`}8Qk_J2{Du5xQ%xO{wx2hYyO zcQ(y8dCGe3ji352ciCC>H~Dx3_AmSTUdmqDBH1iswA#T@S znSIgf-*;}$uvwmU?EAhyGdAhJ_;i`)`FoA(56R}y>pCvmESKMRE%WI@`?E9J^G?NU zsLuK1by)J_mzVZ3M=zgWwpY&oWoBI2GmFRTE#(WWI)x5d|CRU1U+&Bks(Mbi=lLDs zi5h+hr_+6xW*Gk1R_~i`cP>b9gT>FK#xjMC(^upyO}ns&Uo`gesZ$l{e@y3Vr1_mY z5g(SiqTb-|=Ie7DZu5$=ZsV8#`TWuSDHA^?t~6Y7*)mW$ZmHM7;IOuz!N$rHkFW@u ze>PA4cG=aaqt8VoU&6nB!5q=PDDN{9E*D3>uzb8e`C`89)v|EOeCCrzmp-icy{?x< zQgp8G{d#AkiYIISAFG^uex8%u@;^C86w_S}%=+Q-n!`;;JD25B&^f8F9UXsqCD%Tb z;cPkG>A!8Ik!1Lej*PbCvp1Dx7?#ZW=j-3S=k$4oxJ5gSH}NfvndfG3Yui)zZ{AO; z#ZF0o{_kM1Zj*GEeajD#Ka9s_H0u60f2!eCqGNl^<*(81%a<9?r!C|;Y1f-8WEy@? zj@{<&p-W9kgqY)J=N1XI|B=3rfKy zht_>6+OWdp%f3JJA8D2f&bxFe=OI&=PVN#g}2!hz>HcNX4cO#f1{t($G-iOSW_&U+|!ey)8bG-bc! z=J|a`dtcS?er#2_`}|aWT1}m_jOHpGv(kOfW~+X-t9W@aLiJkjXY+O!pUA&cy^8M-HraMt~cK72FpW}1=I9;Ji(?OzBU6ZWdG`f~0wSLogJB^iR2 z(vv$En;q*@d*&vx`qOlWmr8auOUq^aavY)_wQbFu^vNprLdUIC`GQ9qw!A30v+PpN z)VX&eZ(IDySeojd|Etcos?)T8zHQAeiNkl2E>C^;<;Oy!&rg?g?SJ!HZ0>;>xi{CW zvzYe7gZWF7r?SP5mx0g2m#bX$InWhnJ{*V!D3L*ZYrN&VH(XWeeYX-ZygU%UA3O_~bdYVN+-Iy@|GqFaKVy<63KAXFVy3 zL)_z1O7Oll*X#PS{kM6lZ^)V3b|mcA!bKb0&uY$d^L~2hP&y`*ZTDs?W|FRBGIF(ptJ%mic0J z=VhC((x14l-wZtXYiD3-IDej=ZjWK+ywhnuPc&KgUpjg*Z>sN46W>o$-UO|9_3G#% z*C#nXQu{Z_&zDk}dhtclkJVy=y~{s#m__#eDf#PYV&cxxw=_li?xGXnH}Cp$)n^s` zwUaWJ)R=N7S(R_+mCU(^BBn%nmsgpje11Opp4{1GACnvG*F~JHGyk*yqLeq6{wrQh z&s%>RT-#2tb+`O-+@>ISRA^TCsm&)oUv$@sTeP-OZ1RsyYR(_DD}P;x`#F8j(Vb?o z?_4gb?tAe#w2JY+%!X6D!`;G%Yq(`y+|8EO^sZQRyxY(-pr{vEkuDo3P z-~1Izzwjb`@~LE#zeju?RqX|b>L2OpI#X&Vd^)x-CwyVh#H7W}p=%O<+FDO@?|kul zs`ra$^WS=lw9eTi^?ZSQ5|6a{u_YP;w|nRLFAd)kDCv9j#HOGNr&MqH)lJomb@_L! zr^cC6>-nZmE%Af?eDmyzUtW~n7a1w#eyVHk_P^O)33tpEt&j+d`!Of-X%Xl8Kc6)B zE)+N2oO4KT^@`pKHK}6na;ti^)Z7>R_oj3$vkwm#a()zql`KFZ!}kSNq$P__-mHb&3D) z1aAMBShAs4ZpRhoMeYS%E`m%P!l|;)-|t_y;q@msDfZy*8|P~`m%Zy*cYNvI=tq2u zMBTW~y+}0=n`^o9i}OV0O^L0=m*(fC1^(Prw4r3#bI0S)Ggf!ql3sp0Xa4seF)Mww zvJ|hhbM0Pt?aZ}rpTGrlYHRt@?N8c!UX;p-&vm`?&{1iLc$A38B5k2W!`aE3(qD5Z zt<1l$?%l)x5}EThS8tP@nYQN5R>3b3O5IaR(@ur%0+q$SX;<7=*B|b_ePrg+bs^+~Dn0EGQsGfP))Ea-|k~e1;NgFQNw&#V$2$vu`ypO|~&j~w5z zHR#LSMR(V(a69BV>vOqcv9Q{!2$795jJPsw9=(|dDpm7tHMBn}+I-^j)3Y_Ri>^(p zN?gT!^l94D>>akNI%`<`&d=G|S&}nZByqFtsZ8I0JO5vvCVx36Q`YS%y8>bobVmEjO}5@A)q&5qvt`;*ay2DKk8~_6N2<{*hun zanU1tZ;Agea$nlX8m`XRfBN{p-e-H}uV>5n)L#;;&F`tbvuK*3{+%!XKT5Z4d;B8u z{N+o|vwlT>;ato*joIRFWZ+-jDR;k?)Y zEWOQ-_BdI#ONB1n6D*SJe6!kcNuA%zgG;l1erH)^CJ?AomvX#wzSxQv8BW&R-4DXt zT4Qz9TxLoo%o6^@xqTq}79uFnURCx#zZi?jLSJjnK5~joFsU`A4tj7D`I}y&rtpK)P$*kBbg-bQzcN zMc$3#1$v-?aAEM3iYLo>yt$=fDXifcm7>K6~EyxMeCr{+Qss!{j#>LVEk903-eJ(YO`YvW;@n)`lZ)n;X0qtKx%)r7z5C^&$<>MG@A-Gm zy=?ihNsDjxiZ^ZI`=6bAvuEyRowts6X03js^yf_V>iv@S*3W!o_3kd2;(D2TtxnC9 z_58~}Uzy^@r>6Ae`pLS*QTsTyg>GBtsiUktUG;JN=KIALTIXLl_LReAh1UDir{W%` zbFy>3%<9iG^!)XiH)85v`SW%)KR!GRU#=p#q2|Yj!~>I-{N3Ie039}j%re1;4RLZ; z_OY+20vmL=z2EBV1jf_t{PG}v;(<*d!#u-4hCe*q&aWL|l<@Ndh$U~w6JaLk1+{6* zdFE@^)<&D>+}MzIc9y7im`>!TCzJi{ettO2zub5Bw!+89{+NS?(0+e=o0oLeqEEYT z-QR!4?`~{7ymy)X>c^)xxBb&$y7uU3x3oz{!GlKjYpah`zu)`)vcLV^%I9-GKRdg+ zfKS=IFJ;s2_xq~-*L?r*@Nj(9%cb&lKNfz=IrV4lLaCBB8;=)d2!8+m`23A^vDS8v zwb$=?6t{YJedpE>)(fY}hgW}Dqj+^%gX`W`_p0ANz5Vdn?EHPdUaju8dbQ$2sJmR{ zllS%ie|PKc$~e@*`A4X0qEC!fJ7NXF9pTq^_t)1?yS*}a`K-Bbx8>fxwl>FMe3vky;^diCq;>-s+*k5`-$JW=+Hwj#3n`RqTN&)X@NoSSc7KVK)ddL{q0x7+WZoB#B}Lg(&dpN}8- zv9tKOn3kq{{m-Y`7YjgrP`b4o6G zUSW;il5y~Z+^v<`;p_H1>e7x7F8a_RsQj(@unFJ(H}9kTbZd@^e9L=$RBo<)eN2s8 z-N}^K^7m^#``)$n@Up)+?{@YdU)h=u2Q%eEe@@?Vz3h8_{N#w4iq35x7(tWuzu)bC z->tt-bySG|Tz0NYNi+QT^_j=w*uJcmXr?1Y-U$XbJZ=Yi`+r~u8`)?;N&DLkt zS;Vt@XZ-#;*T2`sK3!_Wb+vd~3g4 zbWh)Z=jY8T=(3U8MOpvM{=VD&evz5Lf3-6^Q%_I(qt^G{ZrPeO|5;+cYjn89PMA3% ze!0)gLuC~|9=2cZFN#Y&d%Ra#d~;I#@}q{5@-0*e*Zs*`K%D@4FQ$)mvYG<2Y%*?dD@WlEJ@PCxm|K+*G|b&Hm!6tE+!< zET2=vRc~SVf6o3Ra}M)FZ_BCt{dRk&PRWFX<-sPW)``|{SeX;>WqUy6ycM6U7h1hw zs(!h2I%vW-uzpeK!Y}U^Wn_n|RmXfR{E?J@cbDnse*I&9|? zU7%7hV{YlS$cs6X{_Z;WQ||e7;vp z^=Nd~s_8LBoc_PRy*=$c<@@HlOES(q){OnO>FfDFtwFv|bwkR%?;BNqdh$ZYwQ^2Z zc}z9aF7XdqqIGTY6%Sj#90N^(Y)!c=Iqe~6Rw-^#$JyXh?{BucH7j>7-q{i-awXZ{ z{%^^#=jB}IZb~t;^Xcpr+U(rU_wkteyb2{VK5v^RfKP`E$lfe z@r^0@#a{vc`?cTimUINY^56SCsr+*Ibmq3Q!>`xxx7%BCuk!g(?>DJ@7uDz2eA;$9 z@ASW^M;*^Kp8e3Rzc1ox*}9v}D(TftOE-I3p3A&-LhiuN`_dmfH&y3uw-;RN+Hdp8 z$_hdMmv>#QWqG5) zYZy1@MlAiiUF-Lfn@gY9Ge3XRv}m(iOw80@7`+1+!% zXVFaMc}C8&6g7g~7xRk?eAIdxHt*7x!v?Nj27H@546fq`O>Kch6Xw`HY@X(c^Awj}nwdUtrq*-u_?ki=;j`@LZ9e;4 z+-er`Aoi)X2K-79_6seY+%!hW3sPeJ{{)lE*OdA9}MiZ9sP zu>9jru9@6dl8-Mvy?asa#JPUi9t#)!&JDX^FWeKKpoF{(OAcH{sOpQD^IvcIh4Ya`k82Da$iS;mfWbkW8O5@tu_D+T_ODrN`Wv z!`qKeEv(u5fxYNzXt=9&^3?1mclp{W%T0Km$~VTmoSD0xeXf|-f4xo7yNz6ri{?h$ zRC{0{=aqjv_{Y<;d$s-`Cl(WqWoBP8p7y_gqP72I`Qsj8dHa2TE?;}b6<`-)@+R!3 z@42qK_5c5F;l9jp>c@`bIp?-J{wp`?y?8Tu&8eluQwY0 zQ*2D{;tyTkF_S5LnpkPi1E*lU>(48eo(|dacY4_?ttof7C%R?NI&3Mh^SOIg;qr;r zeQU2=Z+UR^VEBzv>7Y&G>o0BZ%r}`PA$&Y_*Ba;6@5}lZPm7qaY>DaI#C`6MQW{Fu zpXLhPX8NPKf1Y_v*xB^wuXUaslP^##{#q9``ODtJ*R^HmEn4k$xoBm(W9y?Y=i8DN zUc9N~a@}y9egE={i#7ZtVm{8^&z-bcJoEOp+&#CJcuxLOI^Swp&7Y6Qc`n;G=b4vS zbeuE)@>0{Pccbqk=cCus+>ig*k+J8)>D_M)=e_?@;q|<&WYsgJw-w@dKW&ONR0<5; zw&qHzR_)BN7pvFr>+-4m_w)JZt7p=l=*anRwwJz?=6PH3*CoTY^Kz$s)jNN5)x2K2 z-Ai12J4dIq`H_uN{8}t;?@Z&LH0P~nzkJ={4O1*OFY=#n_mkZpni>|pxH9SQ&*`7{ zPAQ)8aewdxwZ-Y`^*VdB|7mk41tea-yUpvrn9?e>`1-%4--@5E;jC|{VHTKI;hieq ztK;OOXl2lT<+8|}7;jL5u>NnYB^z#A{q2cnqr&X}mu@}N{)L=!)`X3q-Pi0>-ufw=9a?xqwC3(;1hR#7_LqKR_0Z6*yyS0^_auu zyc?Gt5-#2*p8hA%y|RCP%tV7nYmU{|AFo6{Hp%Mdg|xz zH=EDv#j=}mJYOi1y+V6K{|r03PxAkNxYy}_3Kd=d$#zEXAyGZ;I_KiDmFEtgzm~lE z*iYpNvfMMP?`?2SuG!@uz3@+6T8J8G5#_0<+*?~b1snAvFFCiCS3T)-{FBnJpK8Y% ze`;mXGr~Af&s~DZSi-mU2{)ltxe{j~0 zTRK62(^~Iq!r#rD%C(=5l!}I~^PI!CdXMGh<@4)K-OtgPa{k26d5?9KJTBgMEz1sH z_F~7QbY@TU++9D!RvDRx|M2XdHt#ddSwH$ryy{&8<1MUg7`o^Si`1 zWUk{Kf8By6ySCzbU+dr@I!9pG*b>gsd*|2vdU?+J{T%cBxYl9`%OaJ@ zpapu>NqgJ*<^Nss*8ltAF#qq@eTvu5&9N-LxhZw`$9rXOZ*6=UU-@)u#VMb(^Yiv* zUS9V1cfh^H$7id6CaPA1->rVX_sR0v`TKspTD{)x)r!SR;j)!aChq_L_r3nE7mGNB z)dJKyiS74lIqZMBcWKz#sH5zAUM`!x%J}26v$G>hx@O1jDtWk<-|k0(&EEh2epgzh zpPMu5mY2%5+EB&Qb(a?L?sM-q_nh?2Lw?Qe{QYw$e*t$}i@lQn+}T;oJ#|ZHEk?KX zbl}(Y-31R1b@Z6D{ks)SmUxPY25kiG?fG)wOSoU&eqNc(taWj9KU2?5 z3105EwrHn(?U#!y0vE^Ce!VKF?8YN))-&y(#QET9)el?6jsE=oet&aJ)WJ>pDW(<5 zj8B(L_LDNn2q-hP;QefJZL+aU>jbA|dEw9*e)8$8cjyW!?~8`#R$%U@q#umAmayZyf( z$u_CV2CH9QUM{}3d+%YrWbLo7u6FZA%w^qpdPT-2dzs`;PD;DB<#(C&eFMqURsa8fkNlr^cb9JLE|a}So+t4i ztFhQ%DUxjCx^?;dx~e-n3O6RzWZkOSZ2ZKWv;D}%<8r6{r!RVxl=^v!%G-9v*ZuW> zl+%sQNxDAvw|K~MZ2z}g*>kcN&-nma;qSdfV;*P)ZENSExR^QrSJ`X?Erq(dU8d|t z;zuFxCz{^NlM27xOgBDLX&$O?VegvRTQ7N@A^nm1yo#oEzxGJ2mRg&?MBvxVi!Xlu zd_I5q_fM~ySh>A6vp#d-?H^0|?ILN*-cB;dH{h;k?w%_kKXKJaXolc2oU4784 zJHaINl*qA|qLZo{Wxbf=Cran<`S_rjzwhC-wbAL9&sRR5d;D_w{o3h?P2!p=LI(_w z%S^tz;p+SMu4YR!j_jV{Y-avvm2Jn52X}Xur$2ohy2+JGW9r(tZZ-iY>TUfR-oM*v(0j&QtO}e+y9%feNN@GnRCvq zOfmS|sXlLpmZV^$M!?Y`$K@NHmQ6RG(KF4+@1db@$b%Km20j-x)Y9hJ%(W;?vU%Dw zJNL^IpZ!%|v)JV7ek2~N|8_IoQhQEq{+FG7`vOds2F|ktEnYQ|7cPF(b4^c6>GSjR z`8PME`p7FP2&p_T%1St*qjviJwMlKS`S_4?1@ z`oBFlOYeD6ksMjrGGQ&JiFkaCp+9JWXq?wiwZv@kRaw)Q*ee;DC&fHJH}|n>neUVf ze70XM%m|gaDsm<%^->~3Rz>S4xtxzvz8gs%-RW_lLnsZJbh|AMiQE3o?>aV_VbLT< zZgKmwkMCUAo_~Kza*(;^tj}FcUQ@-d3UgF&FW+)$yU#ou%X7AKzO6X5G;bt7jr56DgA$@q}~I)0fNVpZoFj^z`tZ zhd#zhl}qeE6vHUbNL&lw#9+^ z>0dX^H`#r#yU$!}rD5?V1;*)*vO`W+yu6jYK6UnloE<{jd}o{WfOh#5+p$_t%v{ts zW3O}4ZsU2lRO8>r*)5OF zo}IUOJl%8KqX;X1&r5X@8&*Vz{P4CC5`ErZA+>xXxMlS2`I9NO*C&Oqs?TTLRpu(B z^>(LEbNHMCk2KRSSj=|g>fEfRI@zSwMA?nAQAZ+EIj$@2_RGbEe16M+PSp+hpc;6%$XJUe^l>Q?rakzg4deczmokcwbN4+mtCzmFx>< z@Go6l;&yy-zuhdm5R*xpvWtGH99_2KK@)ez_C?X5CcMinc1TwXq;$;S+}+?BUv@L~ zWyGn-y>Had=6zW7`0dQ}d7azc87DP2ChDz7nPF3YM9_W0MM*WQ<*O1?&)NU~v&Bfp z?2qmd!Fhik$$5&GO|_(!KWcGTpK)ki+_8&pV(BqnUgz!q*G%2plbO=FU8eTS#V^c{ zOC;uAwp?!X>Br-K{Xd(`BhDCjS!kXr$m`bf+rn}*(mvE>QNf|k4HI@AcP!z2e*eXx z`^)|1rDm_n5j?%moJ(uvmB1UN3mHJQ4|`CG-Gy_a*FpAccw1|^divibH+kbq_7u+EGNU-g_hi+wpvWo5A8}}Q8Hsjr_?9>{4zg^RjCG-KG2;LEa`tbDzHB@>Q}~T?UXz%N0ZKCBlLs&O{isuR5J+~G*w_j1UvAXl&+m~rv`flEv-uHgCec>mv-tGGQlIm3%0zPZ) zFRs>^`=*mA(6DRH#Q6*k*L+qVx49hGA!onkiQD>mu4KbnlaP(9i=LM*torW$V3&Pc z<~HwxD^8u}*S_7n@{eb<96Ou*{5zA)^3T0Wwa+YT7MIOWKGt*cn~?H0qce>YAL;C6 zco}&@(dEav{Iz}8;;hae6`Uk0`*P9KjUP@&w}x)3y>wS~(NTdCyY6{eKR>4gUpREy z{oH#kb z74>>|@1%a+x(Ux~JPVb+&Rw*;X3o-}+K$U+&mSLJcY8w7qbH&3WK=#cofLXUqN#Mn zhkIWNf7Zq{i3b<0UcTdy_E#~l?{+H!zU`e-v#8wisfpF9&8d&J{V=IJdgNo_isZl} zj~)l8bi2AN={Ur1sUVe}x%AZgW>IsU4)0&d%Uuq19g;|Ydd0U_?9z%?uIdJ13o>{9 z>9d>of5m6R=xtf1yW5|?IT-RUCaU;@ZxA&<(fp3o=c~u?LD?(LgunHo5EaF zy1HcB9oP80+9*D8qS?Mvr$P!JW{H{ZJaP6-a9zTLu+F@XCiU|~&To1cG--=Hi;mv@ zMHjp3bXzA$3t#wjbf@uLaZ7gh$-H~xGKA0E>sGX~PrazCS-*3ozPC_r@OjzA2o5uUe=>K|E%+Skmco- z6u5Sw=7bU%Q0Dju4#v^wyHdEGR=!SZ@Nmw$w(=6 z&y>0o^>6N!_+M{1;&XDsy!xqUC&+r~8Xrnpz#a9^CVBRg=Q*B1vfL4-O)nhEmCo5t z3ElB&^_Szdty6id)C(oGje4j(LRN{3TqxtnNU?E*3)v(Is0L zS1c>owB&?)xr|a;=4|n7r^fa&r7GWzsac=z?zP(0e3r?#HG*}P|NPRP^$ zQgOjMLJWR$H~KsNQGFC58TVaA@0`N6qPfcUY@gO2pQ0kUVM$c4-_tAlnx8JVMbG{3 z=P+r>EbfRexwo!{Kl7J)EOGqJVZ%S6Y45IRd9KQ4>~@=T|L?j#U(c`@zL7X?kv6~Q z;rdPURMS0IU1rp-{?2l~ps&y;S6bQgmi(`Tn{JOKj$hekI7!7Cv_TKtuOoIfGgvWb z%O2zm2`KmJw!FK$5)ZeTW?x$qu`%i7BvsJvns)g*i`-jVdZo>u?FVfQy}doZT=;!$ z&No@>vK_K2pl$8hA0Hj%l`^sTaDe%B=%c;g@BMzceEz#VpU+i(eimxcK2h1-=;qz> z`+L=|RsZ<#P=D{2OZ@hKHtc^VQS|oAOylXg(c7fo=U!hY8x7jh-?{uu%C|Q+XPf1I zDwwX4DbKF+D)jrkYW<%t@l9(^@k~+?o_;Rz&5e!hvLykB+jzepsrvr@{`{w9udb|2 zOWzGS@gZ=|?Ov`6`IY%ALsy4=WX#|7a@i}NJ(Zu+#O6Lqo30mI@xGbgPQw5F{{MCJ z&doGlzHFONXRd$vi5oLcPuIVH+1*|`_wB8%b=)44zD1(+@`M*k*q6V%AZ;d2b0g{_m8?*z&uj zS0hb+w{~(K%;Y(G6m+CQ+xs1l`Qnx)e&3#7W^||a``zPr{4AeNSw62Si$C;e*t(d? zqoUy(M2h}^rZO)qv`;?PGuh9oQ!2MxOjlyv-1_Qm>y(Er*Vo7IU-VIA zi^TtP*6$5$vahZ2oU9fos_{l^b%5N0|6#K#{`~m3Mfy_7*H5SQCvz_In;Z4C2((o< zaIxFoU$0ir$!O=5b~~NW^IY@v-VcYkCI9{V{XSA}ZG!7j&U+pX4^^x(E-ZMHCGfjK z>h(#^o+MAj;O(p9_uCc6ZOI6{IP1f-K3VH$TW(I>SAKe$ZvOtiX1z;HwtahXv3XI* z%jg?R(&v_jg|KYSc9Kg93y-TzE&awP{cVCXpXHwqhabQE_4W1szu#`l*Z(n`w@Glu z)h{nEci%gDFLCj?3=$5!V`U9nmVbZW>hSexGkjgD zOTJxQKEG~P?eA|gTJG|-C1(3Je>pB!{bu+3eT)B^96heIBzoDxo3o^(W!X2+-r})2 z?d%QB8Wyp_Gls{P{E}yvwpIVV#FG1IJ5Pl-JH_Teyp@sr~f*BZ|o<=xrw zqxiv#)KgntSATyen|gGq_w-NqvgGz!ex3pf{;$XF|4sZXaQ_Wb@33&uA!mMD5&ema zDo$nU%nj_SDh!NV`Dsnft<2@A_ls^MwjcG@nYdhMF4s*^TiSqAIrOxJqZ_1ac=36s z`n(4{r&n)Wb@7)Q*TOc(#m}G5ub+4C^lEM~9gVYMJqM=ks(Yi*L=_UrFni@%fAm8L(Le|M$pM1~tzj?35E%=`iBy?m_w z_2uDPP!xSmy!d9>A}`T{9Y=%>XT8eosrhozz4F(;-|sKKJHrqjHQ`Luwj56Z&#hZ- z__hcY=`z15VUj$qBK>glc{^?06BD;3p9-0~)N#)8oX-~*yBin0*?2rGY=Li*?c^&( zXV>}EGc74@n{ASL=$Ff1oo|BKb+D5FUdg~hTvU|1?xT3Gy0A;L;Qykg=kcGs=B%>Z z{Ao&)yN~3?wo@!WA0HKu&$+cFbL!vwmW-dL8K1YAeA&SM#ms+4g#CR?XLsoQInw{M z$uGIpM?c>{a%tbYyStB@1U4>a5I*Z~X!!Zb%Ojn_k2OnMbFQ{12(^l73HRvRdZwq| zm#+P@SYJdv@Rmux^*f7s_X-a48XBg*%ecO{!La^cO_P(4f2gMF3DEX_CVs>2lb?3m z#)5VZb4%=dy>9m=Mr}KV`Ln!4Gu2i#TwHKcYvbk>>Vls-6jpu-QrvdB>d^>)Cdu3FXAXMzN}KmdZj!H*l5a1y zc+{b6!Eni~FH_@a>hjJKq04jX|NRtX_srLs<^1u2Gk6Cr{Gih^>wk5%b1fwY#;k8$ntb(c;4&Xz9iYyRPVVwEU;Z=9#+r!XYTsglOgcr zg4XW%8-+!SzN$Z+amBam*`7rWK~H^UEG~W$>#|y!KhvhNXin6NHvdqyxj8SYkE{-y zT=B3~{E~G3-mhWDCKLsgS$@3|%so?VOZxm;v)vam3Q`K!Ms0m$N= zR_L$w=DA;VS~qj<;`RX&** zVO2P1&9QgZk9&+e%1z!*)oa=yYOLb=af+>z=!9gQxTkxcMD-n*(e`-4#3yE29anZG zNjdq4uqgjJp00msp>uoA!T!=@_CgM5KQdZzd+mf3;)2t7B`(?7IYiMiq2GhpV>ROaGr9As?&v2HdM|TYld5drV^Z z`D`IKvzmgkHUIXCzPKft{^HWSPk{^%OoaV41&?ML1$oRi%avI6V(PN~v?D(j%0ExI zelaz>jceg^`yLa`S$ew3o$YF#FqVwmOeqGMeA5IUDfL`#k`L#Uy2#UE?!iq z#UwU8L$s_^sNZbU37~Y$)qXrGZu9oq+UQ;SZgsm;I+&tcdNMXHk{3F>#c*k{{XwPN4;@CJ zg#_X8wV`t_8|P+e>R+m~-+K0GeEsoz=~7%a7a6=}Y8`VwqIq{-%*+{^SPk{oR(|pB zF2C3|gO6dtpG9*dw{H0nb8(@TSH?%?hJu-V4J($qZh3m#!N>Xf>WKD?_s_&#zy9x9 zv|ORn?6$P6^abzR*OF}mt12D;U7T&~4?fCZPUla*{oih7cOSc4Z+Y9%VqIwhZoDw-@Y8(b#8&{ruV%yGnp7W#Bbhnx~MQ? z*8D|ZCUL2kwD)%f9$66LyOJl;c&*%LpXx@pjW14%%1+Yg5iN_&6^~vp>+j;nk6qkz z7Ws79{hTf@q<8aKP1g&hX-rim#$F4zeK>v2C+7I{Lse$&7mw@J9^1mll2^5R`Ju!; z+GUPicU_*m*yXaft3#4q$US*hx>=y>{T)|SS6eL#d_OaNp60KE0@C{rt(_vZ)myn5 z94!AdEarKycbTYi^h|_e3`o_QNz!8rJc)%M@J&TQ`q4q%oBeGoz%+XIcOD9 zk^jr$@iEm3!&H$F4)%%q!J12rZhjB?)Vc1Oh{}r<=caYuestMv`r3B^#}{=RJ>JRv zTA)+it9;7VMTKUi7uNZdJngIII^x&aAlhm;Dc)+ayRdZW#1|~bxJ-1X-@mN!Nq%C- zO*iqc0;yBATn~q7?Q$`%x#iQX)-CraN0M)$#*>ulDnYB@vqq-1pBx``?a5f)*FUqW z&2@uv<&mT1R}OSsym-26sd1sn+GCIg8EH=S|$3(e<_3chW1L166-M9?#tJ$h>OdlVdDfY9`ik?Ve?9 zk?blh$!oiXGwuD+3BTs5EM0zs%l}Md;I{|!g3g|Hy{Y+0=I1g{2X(o>pBZGfSN*X^ zMW9y49~W=o^_RGgX_}p4_BqKQ${J<7*gK%^_@6h`%CbdeDm#|2nF`#x^ks?OtQ8$S zH>dX4Wr?`1sJJNK-RC0m{L^l$#?_jdovxNG5{?yJedklScR3Xsm$y}advj9Gr?%E3 zImCL0-4p}&=8#v<;w8To{aQcy$C8V6Qikii0v#6J+_K^Iz2!NROP;1FUY=@KdR{3d zprGr`B&&bv<%YM_KZ%8lE;*NVWn;$@%^soMD+4Ck%qZT~GI>$>of9UXtk{`L*OW}= z7E*s5cC&Vymh;@HizjBYdTh^`lToW?9&EA3!1d$K8#Dg+hHl%bWnESL%=2&0w1EH8 zUZ9bX)ouc^FZ_;3Hf`ckKYD5YgVrv+IOUWJr;dG1-P3CPbp77#ru%HBhbIdFpqCq2sT5V^776Q#{V_Jo%n- zKU~YYO4XB1=kL!&niFDNdna(eUc?$UX^H*ohONoZ`-11&Z_QYeEc19qlwI4ThdYiw z{*yI%$t{TuKl=XN-Me4A`sY1+UxCAYg+0kxZzcW}ZC>v+DJ%TIseer0-aM5!e&wj) zq$RiRv7i1Xe%xZ2Uf)EOn4`MG_a>$DahU7i<&}Tp|uoKp2HhF*t<57J+3+=YoS2p_gGU@W-DFzyUrQ(a=+{KuHLkv+!qdaFCLiqjz$u zka&zCIBLKd2b>o`ZX06B8!d>y$qXF4-~c3oOGE-j7iVqjnp6%kcuV6g7@ba4!+xb^lf`v%$6 zS!x+)eOLr-FZz7hU|X_z^VTzA=8M%hrY($=65BQ{X|=S(g2LDts}4DvuJ~|I+VP?7 zq3A%7L)}96I0OPJ8e76SmG^8v#JzCy`@Qm~yxv{46`C?(;e2%?k(YUC^Um1JeE;*m zeQ>iC1H+lH<~K|X42;|i4hNVR1U4{$F^djZ2qyePj(yGb`1fXLnY&(HV&_kQO8|KJ1@!{;pJa?@r8hRy#q4_%LY%_Dp3 z^ZObTHim?_df&sh^Y`24-Py5xeqGh8D=UlBHZSv?ZFc+`D}#YM^R;&Qx{3#l?0mEG z&YE7Av9J3hb7M{5Vz<=N-|u#>S7u?TSYsI^|zbpvn#&8TD{)NiQ&L^t%Tg|cgs9& zs^9HQuYOW`J$Cv;(b{D`Ge4a%K5sJllE>;(^B*nlx2yVeQayj)&u7KwEYp8{czD)E zfA5z|k?C{4dfbb?`qJk6o#OI4h3>|6A08Zx{B)#K*!agu_4!L4UVn0Oa(1Bgn+=EW zRlomxEjmB+!>=EY`)|)Sxv-0Y;n~iHtv?=htAC8C`FQm0#PxeVdAaq;TATenE>nCa z$Xoa8&*$^Yt7b1|KT9JamB+{aW$2-d%xX!c|U*u z->jfbfo$`uUakBRU-@+EOaDWwT|&7f4U=4!r6EiL?@tj$5-u8RQ0WYU4rNB_`WhvT!uO4{arM=GM|F_%u@!GLPCsmDS9GL#= zl%jLnl|%3M{eJiEH50>(?Mz`>FViG81m#YjSb1vwugm{zrq*9+eHgs#>blL|S09Q+=SVls)_D$l_}{}fstQj%I_5VK21Kl zRkr-jMz!2+H`63zO0R}yZ@4E@__)`+EMA=9fQ|TuOIBJFRgb#9O=r6-prt&&{@+h2 zpVWA^$?bJN4$CiFKFN3M<*q&Rww&~zdu?*3@6X`d58LJMxoqKzuztHG*!NcH^;qK> zMQfyNe!tl~J7|j@D3qQvg~`1*9ld^1?5C2rs7=pj9-LyY>XEzm>$SP-_s1Qf zRaJkhm~LM3){lL=$jZ2?Ipc}qLA%M99PA!n_R#)2J+3PASNXll=d(&qD7L2*tlfHT z)xqrbd$$F}elKNYIMbb9wEz3P>eY>vuNdn;G|OK(eJ4Kq@Ampi{li74b;Drn z{(d95Uuq`TZpFQ;3RXw0PgneVed@Lt-^o9{^>(WKU0JrqQ+<9-5!?01^tnBG{VU|8IWYqxOHjUzYCbiPj7a4Xg|b35;OO5y8N~BnHM$m^+ z<8k@j((C^Ae@pUmKduN|yeSk^k~On4oT*oh;MUpTu;|Q@PT||i(__nS_RO)V{3LVx zi2lAGkN$qY|Np~b{?$5f+oba%G8VRmMdzBb^E1r&&vb23x85ur)4D%D(tMQsmabEo zXSuCYSj|V`%Illy^WXaD$5wy68ZK+YknoQ?!drK1NYYu`?{_ZucpeN*om+mdQoY$- zw)Bcz^&7*oH#gE=Idt#(_v>{#zkJ+Z`PwfRC;Qt~em-kHzxbTx*%K8nmrg%t^?HrF zT&2q2^S0mb$d=!^*duRKQ4l=s+e!8LpnSA-olaJ}Y}t+K_j~VGyz4oQeM)_gSw?^Sk;msatp3Ijh%8 z)C?czAARPiyO{ zo2yK3Je?jt@81=kYf)kGwO@Jk_IxPpYfuh*irH!X<`VLNa0`Ak{kwX5OrbN?OYvtE;C_vM1~?W@J0y4dYr<@333C!W^d z{|8h8&N_}L0e?mBSf##D_wnkD*Hfp*PWy*m2xe*J@A-HPT&P=h#y( zm6DscYzxshJ8v9U^>XRU`<2h$RxWZ0q-ayTzl{QVL2~F~8Rr1^t_{ zy=vR#&{q#;U0SgF-LBPtueJ5$&wKy-K{NlS_DbBC- zUiEg>*I%=;*WIi)zT{vxd6VJXmq*ifzuDyNYxVQVWaAmr;!I~GZOhWUUkmcgXZz}N zn=2|M4E#SV?G1_3n3}XOEhwsQxrz4svikRXzh|BC(q217BlvITjHzFYOI}>~b2YB| zZRtT)@hd+xgO@GYkab#jyU!g@*`%};N2Vn$2ep}IB=^1C&+A#5sUIKOp80aBshZ{0 zCA0H(W&Zto-M=)2_nG~-%=Vp)pca`q^ELCLyQSBcKK&i@$L42!>7}GKQahO$&LlHt zUs&)yot;4;fir^P!2Xw7P7DlF5*QgcBACP&7IX=Ko1m~}D5wbv!qAo}vM?hzxOEB< zvYLBxvbz26H=F++um5&4-QVtKikk0St5UxFylX$6PLH?BVK`7Dxna_Lwy#zH|9=1N zQ}w7*Ju7I^wVazBIv?7k^DN%)`E2*=#o~9xas>w%Bj1OH$38v5$nZJ-fY-WJB40lo z=Kns^B<;+Mp7_kAQ`4@y2T;6O4f83u#@ ztZOnaFZ=s|-QHu?&L@++fBEbJHAU)X=WcuXU;U%5S<>gT=Ia~2e!1*_z980HZ)eK# zP{*IoX6J+J1Cb5)emDR}uKn7t{+#CQauo^lSK8Zud*1x7?gC@G{Dq#HmrJL& z@yqW!CY8PB_vg~`-5J}B87_%=KHZMOnvg39imcJ2zh?Ds`T_T;-DU_urXk?f3ERI&~$s z{O;F=Y`zTtzc)GUqpMyn&0g9rQ{?f#q4d|w<=3z9n%^mCW7O8&sO9+g?D>DoY`>nk z-6vyRmUHa?tML6*?{+>nvo78I?=}yE!E>f-OTMf9ZD06*;ieP&?SI_o|J6N@W%9IV zpenD5P2YUS%vtl!%(0KG`FPa$<+5~JHk?kVKB>-Uzwz?#hD6pid;4yz zw*9(~^E;@LdwkhRJ2hYO%n3V?o7|;$+W-Ie`KrpFu8ZLzO`d_l!4J26+NHg`^>>rD z?vFdW&tLtM**Nc`vU}f}{jybOFPxd+@#Rsse%hIZ?Q*kL3aj~e{5LI+y=?sQeYH`* z-q#OX#sA&#)2=sq@z^)&ai?)Dh9wcBoG?f-F9-{@03-|y*XCft-MVo1o_chYv{ zij$$4uj+1PE;nt~49!Ygz1{N7w%d7gU!MPa)n@(vdza_@dC<(C7geb0XR5Ei_xHQq zmnZMq(_{a*$2hA-Z0i9g?vVPRaNP}yf^-$LJ^vpSkB^xQYR#n@oZXXE@Z!Qk-x=QA zzqs{wD9rwQdHz2WW&K?*l-Q*iX8dM+y>|P(ETOAA3LgsMlyem}NE zM!Pk_-}dX3o9XjoKR>z3GjrGff4|igOPB38-JkYZb zbnEZhck}E2RXX|K@;-Zvx8m*A>wb1WpDcT!{a?4l>tfK2ZO7%REiQqJ^k=f~_k8xd zwe9)SXic8e-rH9F6$7`oK}~QFMr(q@gm4I>HSIshvaA6$Yd4=YlQv2@@ox9~x(AKy za+Oaes?V!{NB&s z_y7N!SN-nf6;K)e=ElbJcE59UbDx};n7w}Qx2Wv3ThrE?UW-WndNn*gck9)#w_l%3 z_D`GV%xAe|W_oYjS(}&hjZ(dyNgAj5Tmx50sRz8)NttYT+;4C9c~1SmpUt~KZL{pm z=W~kvrr%WapEsuxG|bVMb|YhPZ&2qIwk^5e_S=GHJ}<|R-uR4#t#<$ad_FVN(==`S z-7;?{uf!WKm(Q=eSNZ(u`b}G+9)sG8l45Zc51sjKzsyMP^AwEwm-XYrLuI#~9pCR& zXV06G7P^g@0n`gIyPXp}Q6n>RL1oa#@Xv2{yoO= z+stcrf=6@lt4*OZ)w_$HFf{x$O32-KR7|upEUxk?sB8Y`$H)Brf6L}quG|0b*R1r_ zYqw?f`zxouGG(jrnOx`KL)A|-FP zT=wHEsC{;`>h;>-HPA5nb@P1Pwf(vwOP3y7yZzp+mJQN*I}|HlEb7+tN`18Lc3$-3 z*_W0r?zh_&dE&vr=F3%ocRcQUz4=&A&a=p@l}oS1mfzLceBQ=0?fJawb;|4vXQne| z@BMo1wfu&CKOS{|vnjt{TRwf+Yt8Pe*K4EGN zd#SxYHz@ohV+szk&b}UB8l~#LbxZBHo6lQ>{Z<@j7M{9p*Q-_be;)Fio(DB|pT?cc zQlDEAbZ;l9vAD!CT+TRWR=w(zQcY%Nh8fG5uYEeLA3yQMM0YvKjCnSSGbD}DdDXg} zs&Y$CHjB8t%s2b|&hPiC`9mhpm~MK-CUdsw1si_*KLuw$Kb;<5_v2wZ)W53JA{Irt zES-_Hpz>b*|Gy@#=TBdoZJ7BaZlZ>MS^oK-2ifKKe7WRZ`MG)(U-0va%f9AIUH`O- z$IaND`1I_1Q-7(Pr6pRaAuB8QJnpmp)bR+^&1qVlm9LcC^K4f3tb;3qm&=viNc`!a|7(9@;{u>W?0035ipp_Iz z!l0f$2*ZT16g4&a%-61H&aeM=kzIc8=U>0q+y4LdSvYRK#k;4+-_14ow(Y$AygPsS zm)HJ$x7(eSS>!kNx|; zwYR75XgQw0Pi1p#{h6}+%m12gx4WWz{eRk>tIzBHeQf_f&Hvi%^Edv#tX}v3GV{8* zoCjjKBi`?~dbv!v%(HISs{_6Ica!fXzW$s0bk*eRKkd)m{3Bnt`>>X9eSK_KaaIb~ z_FwuBSKeM{lecxhRsQP#)%)%_#@87>y?pZhvK@NzWqNfh*wF0hepRsbgn(fyg zzT*2oeo-!dHia!AZ`;9L&o-}Y~i$+j;~Lz=-X91Ui!0&eecgR z$)Za4>mKqKe{}AZF7?~?a8yU+5nG zR`Y)9^IO67<|UhR4!jmVe!j$VG2dOKVmp&hXYzM3)`l6bw*KrNadiHphxg~sb+xs5 zHRtBm&*^^`bjL6hTO~Zro1*=xdHVcY=`~zijQ;IpcU%5{>hbsW&+bWodb~r;_ve?z z{r78?-)^5Z^MAqft1FYL-yG|f+xzd($LoCc@BT%neG0CAB|g9QN1d+0^nZUo<@xV@ zyQOx$<)7*LwngQ^Mp|MD{+GNkNuse9gRwyeF;7Nw`u<5!nTWyHqr`SYVz zlcVy@GQs|PA8xy^+pRD)($uc`X50ODAN*hbf6`pOX?}d=qsDLYY1W@5&;NhgwYRnV z`nK<()9>DRetGLt|2(_G>*euPyG~zw#&NIm-op8N{+CI;s{QdToB8atzs5<=ufE^^ zWy!_mZ>~R&x}R;jw_G&*QQ-Hf*NoidK78KQzSJ=yOMQ0rtEsxYpJn{GUvB%|J|3!c2 z&WMis|1@UDUHi0c-+Xtyob_v&xctvrw#~;{mOQ+@ZpuIDzMK2hRClC&=uMY<`*~rJ z{+iY&^QNp+E{lBJV)}o(bpP$bPqWvT#D`Cx{U~y_-sOLjbvCG_@~0bATeqe^|NrT~ z=l_qZ|F8FTjM}#Rnf=H4|G&RF*>`GL*wmQscW?YFsXY{&Kk>{CJ?Wa~JKNLdi66T= z(dzP-Cl}jYCI`0X%!@9azb3N$BTRauLjy>5nH)-v&!_O4VN+WL0OMkc5(AC#d zIx;~i@YwQmR-2#R7e9V~>Y)u^;y1kQFBaLA^N=U}Vr_cZpR8Rouc@3X5Vf4Le4YJ{ zTA9hWme&i$o$#FWLquA>{b3aA;XVv_iX;PE(@6{DvvH35>jU7M#+_*h`w(#Rg zU)}j{Zx(uM8Le~u`IH?c{iRiPm%fM z1%6EoK6c^GIbqYREH6!?8NDYz1*c7O2{I13^Jbs)?fL5_Ihv|?J@h@c+%{l3@48LX zq7w4X+b&F>x_?dR{jy(mm%BfzsYixM?fZ2-I<#qx(A@s})y5|uw3zP;``nsaALej!PTxLn+j*bKA9=z9uNK_= zBr|aigQul9Pvp)|d39_lL948_UoX)xZx-#@_v6oHndzs#M`r%p@LOEvd1$r!)9!%z zO7RDziZ7n~Z+tXRbJ6Kr**;U_xA9jMA4=c8M8fF!mT#U@cRoA+y2XFYbJH>&}MsUltKlP3CMp zdH;ICDOaNzvzDFvl78w{(fr?er@Vu9T@z+JZ?$6CzArCqcivC`95nex@o$^D=RIeb z`@gF16jZZWx@qOk=p|kne?x^Pub86t=jHm@si)Yg4teG42F>R$y?0GJWRuSaFO!`W z*G*@CxsV#m{4;CbYyCI-yMyKgd!J5b-?`YleD|setLA(^HJRT`QSTKUTiJ*}Lmir*C`S&u5$a@7JH~-0FFA+nxQzURP}PTUT8E*T2Bd z@YkhtUw-XinY(6VtV*!?5B2=rO25~}`cC6o@Act(uZ7}cVK1YKoAX|mrG1+>(QfsN zO~%H>Q+uB}s6Pu6nf+3~@!#r-7ppeEDmlgH<9p}n?=|*kGduEqW^yN>X}n?*Uz{8Sz@Z@y*l>#{{`3ir)~_NckgFa^!6;4 zX-B{5WL-`bk`HG5d*!Wi@u%gkbG_9Myy1-ax_a0Dxyyt?^>&*^Xg+WB_Rp)E_59y0 zKmMJP=c`UnS~6$etEr~{vU%@as&>xZ_V8YJ-|E@HQ+F&mv0Rh$#mt{iY;To++4AqD zXW;kycjRVnnqZ?aQ)~9U(%9djG1j^BpRrxjTke_k`v1aJ3HqsirV*x7g^$Htt&L^& z4BqDD^jG>~IAip?V$&H8k=<+A46h2U<8%(qxPIs2?)S&OEkFJ2tEbc5*`LEF22Gp) z@5#bnlb2jF+2-xPHSScd-Ba_E+Lh<@R3qX;SNY{1oa@e=?X&reC;z=!2St8-jgNh` z_Lio7=wwNsvX^JxygUjH<=~%J|NYQx_BokhYWT-(^@>xMU#;>pORxL<$1&6-oMYYA zE!uZiO~_xceSXQmh^N2eLi3g_zx-ZSyY!T4@3mlqFxRzz`Kv-xp1;2Qr!sW*wf@GM zomtB5`JexX<>mxc%)d5)q2_nPRGy1`V!c!3w{WYh+Mse(dvD~EKUvD5lY_2Lkea+J zLf!dE_$TJ+ys!VAh`yUW`}o|T7eV5`X3Yva5YM{i-m|M$J6^RVmuD>UKczmY=#t5* zm3MNOTwa~~WwO$**T>hZ)@%OR70Ygh#$SH!{B+&T;DC)^xlCtFnyPi^<-T=#LE^#n zrKk4mOe@R3`6g@5ylsCZD{r-Vm+ZUuYwf!QSI;fel=Hsoue)U4_1B;>NALeNWo}#f zCEGWxzZOLcS19MBwbQrzKmK=?8B&~d&3iRt@3q&)cD~E2aPi3MXa3XM&WDDFrsnUwyY2R#>(8@ZEm@_b^3-|mOaJU`r@!q2CE(SQ zrv3^2tbW(oZL8J#_H$bAmUt`qXm8O{Sh>uDv-_>g<$clN0-3kieDmf0l}~+ET%Lbj zdAZc;zd0^ZI;!1YOwwMh`meR?{h3up-alWg+5chDf2~!M^sM*PSAURsbjsX!`mN8; zcoW~o*j@g5ZJFBr z?23#(*cexDak0i)+m3KSGgINig(YAn>W#G@*RC)uFp?G<||FUGjF+l$kx1DQA<~6?atae z@6^P9vnR5BvVCf`SAXh@&kNsKy}$ldC)zsRtU7r?Y3Z(gEJjE9SN`#;Sre`udVA%S z-Cs48Px@MYfA9BN)kpKVmtxqnHBDPeO3UAaQt7*Q-2Lm0pVjjJ9`?ERPHJ{=+>I&B zS0AVCjkeh8CHz^isQTPo>xp{5mvnA;EB17y@4r=lFF&7e*6sT?;`5v6ri4?Om&8`x z{P|XCwTZ~?ZymY2-e3B+`o%uu)nYrIZ{UmE*>}t5zWSwl(Y^f^e{yA~M0p6;ua?n! zp3WB>6!JHn(|rDp=+E=|qC&3TFP;84`f6poE$@bZ_m|F$%J-tyTNEVJVC-cLQ!R?JT7np?E` zbo!h9l9`cHcjt%7e)}1)v-;`EuOaT+y5(mXm|xhnD`VCklUULIrBnUC74KTMKq+&v zTyM^z+`P}8$#3_seU^8(Jo)!!Rq3Vbu2L)at_`!kEAQeFm|89UNhkg3+Nxb^<($2L ze_xhmVXdY6adp#(wjFbMAh=o&0%X@Y~s3JD#m90QhTVAq!`!757tb3u~ zw*KdS{m@#gM~(a3hjw;`&58+U#ddCe!ZyLXOp5cVoK5%s&f>?OeJ7hUS5|xZ*F|j4 zcD{A#+^%|-H)n4C4_D{E9IE{N-1Zv#Cs*#A6V?yvnjCxO^P%qiPif!&RKDA^lK<4| zomFy&^8dbF^ZuB9?6f&WJD#a7jVz5?__d|~-rJLJ_pJ2t=JRuT5$E?!eb({tiM3bt zuKVbChrRPWcK^wa@`-AHICCpy6a}-Ey-z(Gc>4ULIVzsv_g~5}|JW|Qf$f+5yi%*V z=avdP9Jutdgh}kc_wB^Ze?9x$VCu2_^2-vdyERu86JC~B&GlO@ydgx8iD3bYH&{Y7 zf+GSXdif=bPG}1Q185YY*fzm;rcvsrCnxjwe!b?czxT_V&FAet9uelZ{c_=M`Tf5S z+vUstAI`kI%y+KURlT%rrz@v!eqH@va{r%C-tN8i!Oy4eX8W(kbj|p@&E_LQ-a0!T zG&Qpoyx;r1?%U1u>UTSzg9arJtM*8lYHfbI`~ANAN6X?1kBUx@DLUycUu*LI&8c_Q z%{Mb(BL-zYk%svWMo@5iJ6Kl=agc-SW0CueK5za=Xr?cM$s>AW3@3tPpaa<^XH z*Zp?igC_1x_ni4GQ@-ha>(<{_@&E7lV2kg%bx%s~OZV#hf4lwuzjgiDb|<*?_k7rE z=^Nbk>ma*)&99fsO=lPz{I*Pg@crd#&^oIpcQWdXW$J!B{MiFq{qU!H(wCnu_g@C? z{`G1#Xj)ff`}tqyg?uyiMt?e`y*_0+-u>k-Nlc`5@e1B+?{>eRxBhAB^w?|ZHT!rZ|KCXNFJ;r{tNVI2e1G>_&{*N- zd$MIW78-M>p4+_d2B)yv71ocp|DJod&-~FrcKI04NW0#S%YN2N|65zF(BJ>()3Vul zvvfWA zde;}VFPK|@PeE}{+ArTZ$?d=W?@zil!&`r^iG0Dvqhi0muCM?5s9XQr|F|#rZ_jN! zeKqZO<<-=;_e=cGeOPC>_WGV;*ICBlpCk;ET*`9Zl^3VJJ+rW3s>bBQHZ?y!*gXzj zF!kg9|9{_Kw$Hn>1GJuCXTvjdU!^j=m1obG->)e?RN=LJ{hm*!Y82n^`Fw8Xy6+F$ z<}2|&%+iZtvqh>rL`~w%=|%bFW;Mb~=C8%Vkj^eWjasotefz>C+XdGnG?)S20h& zoOwOAJabw8xju} zshK=3HhNwiQmrFB|M1-!Yq7|biSqwGw4a>>T7953=f%GH>F+%+)z)u|t^fP=uRcd^ ztzF>n6=(1HfBE%#{d46tTP}J1e01g0?i%6UbJ9Nkd_Mnv>Gjx7olJ#^&GVcVe+zrc zeOpBO%TGO?De7rezB5EKnSOW2|9Nz$`25;W%dcpC`5*V?=56N8`Qbk;c5ZmT_xrub zx>yO&!lnG_j=$IMJuSN9wBn2U>nCPTxSZ2#dTmA4B&y)T}`>Gc|(5rsDs9W#Vf0bvB z?6M*Cpwanj=T1sZe-rw+{7&KVp7pCvZYlQpnksg0DPtYi_TTGMcRroAdZoL3ZAq`? zqYmXD@d-h{zAWe1^*b=4?&nkEXsP+j?DJoE{Ac3U3HWVkYP9u${NESunorLeWp7v& zXk^Oz`{skq=d4!W?770aMAnn7xN3=mUFr{C8txbC{Ldi!%*n~i)I--# z^t_$7J2y8dOKDcr+BdJFGUbkXwEDf8dTIZ)sO-}C>pG|6L+=Kk+bA`8@dU%nzX8qP z?-ctNcP(47KXY$*yLE19@u4O6KnrD4jWh3-USI2JdCJn&-}>#AyJff6{?%PQ*+#wW zSN-qX_s^BspT9SG$?1PRYixI$Jg;13c1ykB`)jw_Mc)E{Uz@M7)m42?!J&oia=Wg_ zRo|`u|99)OnrP$teUCSP@_kb@YpI^*YsmcCZ?XI}c^Ya_dy zhh_cL+-uD$u}e-Z`1fR5bl%EW^K9HFf7CSb`@g7L@79@_pB`R$S{miA|NQ6NDxM{B zMqN5fR#|2laQm3Lbgf){Nu6IHHLEMyc*d&vUzWd8|NHavGyh%omF5@jd7LcEt+C~w z`ut^9X7>8MWzS#dE1lTv{nNa^-K4)HwP1Gcww1ZB&)j;=^Jz|0aNWIil_!(q-yXDi zGxy&g&+n_#l{9*?-2QLoSI~0Px5A4xFQ5B&CgEP$#D6w(x4c@l+D!GibnceG zv%y!{)8|#D%}>t_Vv6T}AMYHv)p%vx%7a!Zp*izjb=uW$J;bHGL~h~lT}u5TsX=j} z7iP9zFAMqWx@4b1^VgkLYuT^7K498k9(p&4uPV#g%DC$OGoI|UVE^lLl2@AN*w4G0 z3QknN|D7pc6}K?ts^RiEMPA=ax7tI>uqn&9P5-ZnnZ9dITB*kDvmK#fkxMJHL$3Bs z-Lr19UDT788>)=-rcbYNG`nB(c~$zHm(z}bmYp07;VHFe{=6i8_ddHz84Le^U$l2S z`=#f5ykx_6bL}|S{%`%`mo7n>rX=5wx8cPbDgcf zW}1D9zNgve$OB%|P0zM+}1H*zu)t( zTz&an??_10aw{A4qm#y_|3isQ0?#uNFYSpP(x6Gb)O*6fA=Ie~S zZHaB~m#yDywsFBs!LQcThc!dg`b{n6E^q!ywj1oy73SEUcdaC z<~{4RpWgb+4&4=i{=a)nc6&BAXVpwLv#rfbzN!9oVOIWghwDG8GWLA_ zy8Ufx&AOMSGmi0|U2Dakc|CqWuD7B z6T64)w!QSMyO-XyXL(OI{P||3mUmvwuO`j#5IQ_3pwf`i& z-^RLipQP2YS6XM!sr`2IuK&Dm>RIwzZ~pFF73lr@dHnR(LDMhm{I_KATVd+IRK*np6Iz?k7(-7IClX zm~44@@_k{=4WQMV>9-oToW6IWcJ;m25t4?|6TDOMEazV9mY@ALXTP6j_>D6=pH7Q@ z7BxA-_^@>GZqfAGjjJp4?RRP=UWwKH|2J@(BKy*vEX#kEO|G_L-hbIXeCe}mLHA!h z>zZ@@*b?6iy~T51>L;DMQuRIdR?f5U8Sg@O&V9l*^R(CIGk?~c={r?xIQ{pV4_WVL za%a4|pS^Bp+W*`Wd?#yHbed|0pD;Z2=j+7(U*rFq?iVj!xoYK3zHN&?@LUhwzp%J` z=G4jd)%w+2-^r`q+<3X_xi4QvZ~nc@*Iw4nkMvSAyPdOHB>U~=^LD;2CtS^5Cbs2Q zosn+-GCadF1cFI5h7tXo86|{*&WzDYq;(wl!_m?DQX=zt_MUL>?-( z@ArJ3wLW5{xqa#WN%h^g*_r&T>!QdU{u0v{ zb-sD0w!dnb`SRA}^PjX&{QqJ3pLNYmrTblfo}AjQ?JxB7;QW8~@o5#tCp2foZ_&&? zJO4?{|7Gd^>l}BgK5^Vuv;Fo{|HvXeJ<0jOX0|)eoK32AdG7zC-uM%1#=Vs@=2eNU z|1A55KO?fDc211Wu03t}>0sQKJ;{;augCfJ;uksY`$*-~A^49-rTO*vy@}{YToyN}ILD+4|<| zABTqT*QxndccW~d&x3s*k4ak_S08<`rv6gnx&w3be^h;ssVS0sHh1aGw{LelOxOOo zeaGVxO|P7P{wLpsf2x@s)G{rdZTIyp=T4bguGIc%G=I_G%I7y~S$gl3f;+~UPxOfH zIU_CNhfV7<;oJoP+8{t+0RX5s4#H%ci{uKBRUix#!eK6wFi0f`LxqstizM98kSfjq z9yh?^N~l(ly&#OF4Totsgh84?7-j$tbCHBWDnS@3gu`59VUS7?#_tV~nIH^RiEIE4 zVUS7?#&0gN?}$q?NY;TggD^}8hjp|v7s)!13qTkuM77`nnF+$wHWxY6XcauPG8Y;a zFfY&|coY(Dvf|psgd=W2&H-VVbC6t#Ll~qIgrO>Nn2Rh7QVGJ;&Qc&VL6|giHy{1a af9Tlr1vgrc$T2W5FnGH9xvX @@ -17,5 +19,7 @@

This underline should match the text color

This should have an underline, overline and line-through, all in glorious magenta.

+

This should look like a spelling error.

+

This should look like a grammar error.

diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-text-decor/parsing/text-decoration-line-computed.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-text-decor/parsing/text-decoration-line-computed.txt index 4bf73195b20..7e200ec73e3 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-text-decor/parsing/text-decoration-line-computed.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-text-decor/parsing/text-decoration-line-computed.txt @@ -2,8 +2,7 @@ Harness status: OK Found 18 tests -16 Pass -2 Fail +18 Pass Pass Property text-decoration-line value 'none' Pass Property text-decoration-line value 'underline' Pass Property text-decoration-line value 'overline' @@ -20,5 +19,5 @@ Pass Property text-decoration-line value 'underline overline blink' Pass Property text-decoration-line value 'underline line-through blink' Pass Property text-decoration-line value 'overline line-through blink' Pass Property text-decoration-line value 'underline overline line-through blink' -Fail Property text-decoration-line value 'spelling-error' -Fail Property text-decoration-line value 'grammar-error' \ No newline at end of file +Pass Property text-decoration-line value 'spelling-error' +Pass Property text-decoration-line value 'grammar-error' \ No newline at end of file diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-text-decor/parsing/text-decoration-line-valid.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-text-decor/parsing/text-decoration-line-valid.txt index 1bbd4f0b608..1ddf11c6b53 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-text-decor/parsing/text-decoration-line-valid.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-text-decor/parsing/text-decoration-line-valid.txt @@ -2,8 +2,7 @@ Harness status: OK Found 67 tests -65 Pass -2 Fail +67 Pass Pass e.style['text-decoration-line'] = "none" should set the property value Pass e.style['text-decoration-line'] = "underline" should set the property value Pass e.style['text-decoration-line'] = "overline" should set the property value @@ -69,5 +68,5 @@ Pass e.style['text-decoration-line'] = "blink overline underline line-through" s Pass e.style['text-decoration-line'] = "blink overline line-through underline" should set the property value Pass e.style['text-decoration-line'] = "blink line-through underline overline" should set the property value Pass e.style['text-decoration-line'] = "blink line-through overline underline" should set the property value -Fail e.style['text-decoration-line'] = "spelling-error" should set the property value -Fail e.style['text-decoration-line'] = "grammar-error" should set the property value \ No newline at end of file +Pass e.style['text-decoration-line'] = "spelling-error" should set the property value +Pass e.style['text-decoration-line'] = "grammar-error" should set the property value \ No newline at end of file