From 02c8625411dcb96e1f63d58c47460284e15b2e80 Mon Sep 17 00:00:00 2001
From: oleibman <10341515+oleibman@users.noreply.github.com>
Date: Thu, 26 Dec 2024 21:10:37 -0800
Subject: [PATCH] Backport Html Writer Security Patches
---
CHANGELOG.md | 3 ++-
src/PhpSpreadsheet/Writer/Html.php | 9 ++++---
.../Writer/Html/BadCustomPropertyTest.php | 23 ++++++++++++++++++
.../Writer/Html/BadHyperlinkBaseTest.php | 23 ++++++++++++++++++
.../Writer/Html/BadHyperlinkTest.php | 23 ++++++++++++++++++
tests/data/Reader/XLSX/sec-j47r.dontuse | Bin 0 -> 8884 bytes
tests/data/Reader/XLSX/sec-p66w.dontuse | Bin 0 -> 8301 bytes
tests/data/Reader/XLSX/sec-q229.dontuse | Bin 0 -> 8940 bytes
8 files changed, 76 insertions(+), 5 deletions(-)
create mode 100644 tests/PhpSpreadsheetTests/Writer/Html/BadCustomPropertyTest.php
create mode 100644 tests/PhpSpreadsheetTests/Writer/Html/BadHyperlinkBaseTest.php
create mode 100644 tests/PhpSpreadsheetTests/Writer/Html/BadHyperlinkTest.php
create mode 100644 tests/data/Reader/XLSX/sec-j47r.dontuse
create mode 100644 tests/data/Reader/XLSX/sec-p66w.dontuse
create mode 100644 tests/data/Reader/XLSX/sec-q229.dontuse
diff --git a/CHANGELOG.md b/CHANGELOG.md
index feed1a0965..4eae723305 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com)
and this project adheres to [Semantic Versioning](https://semver.org).
-# TBD - 1.29.7
+# 2024-12-26 - 1.29.7
### Deprecated
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org).
- More context options may be needed for http(s) image. Backport of [PR #4276](https://github.com/PHPOffice/PhpSpreadsheet/pull/4276)
- Backported security patches for Samples.
+- Backported security patches for Html Writer.
## 1.29.6 - 2024-12-08
diff --git a/src/PhpSpreadsheet/Writer/Html.php b/src/PhpSpreadsheet/Writer/Html.php
index 66a0ec89b6..000ea36b81 100644
--- a/src/PhpSpreadsheet/Writer/Html.php
+++ b/src/PhpSpreadsheet/Writer/Html.php
@@ -407,12 +407,12 @@ public function generateHTMLHeader($includeStyles = false)
} else {
$propertyValue = (string) $propertyValue;
}
- $html .= self::generateMeta($propertyValue, "custom.$propertyQualifier.$customProperty");
+ $html .= self::generateMeta($propertyValue, htmlspecialchars("custom.$propertyQualifier.$customProperty"));
}
}
if (!empty($properties->getHyperlinkBase())) {
- $html .= '
5hUbz^_Ps|?*y_f2R}*hB8Q zX<^opSMyCL$cg%CsuuAdXQ8TPHlFf*$2C4TJ>FE+Z5lnm+xvI6?B&Ff`l+*hULO8q z;+ZL70>crBM}QC>;NKI^%*pA0d51{2e;pa|GLU(0oM1T01r5$3mB^w7PC$vdqV93I z84^MsRr4)gS2Bi`#C@BNsU4e`_1unL_kvx>DJ@cqnjFWDebfm5l1q$+N@YiOnh2X& zH1Z`ui^r@v;E`r}>A$LA;;ofVO=RipkM;<)L=Kdoqm}FMny=neqGAJ(v8|nvh z(9Jz}0N%+^K4ump3ahv?KM_@
10n~#+y`pH^8pZ1mti5}RP~GdUU!=;5$om0C!N7o-il2yI}GD# z4@vF$Da*p|Xlgr>xDyf(-b*^m#kBI!i^-!lZt =SU 1N>}O@cz-2`aQt!_3d8)`bmEV_^aCe9s0Y%{{=;%{0aR|(=C xDz1NF0f24<`ah)hclfVU s?mj !QY4wl!v+WDO2G@^mZ28LW3I-sm^<&67ZFhsx2Q2qiMrifX1+;P zsE4zVp-;Kp<0bAt5TFipHyPff1H$##^vIl0ew;0pxG0H~tG6XsxAm%-sMEAfYu|9; z8FYV-1W@@44J$P`=zhRw6yPkwg458z0b=FI&i3>AKl=R_bM8++y)af$xs3xm_(0|+ zr2BkgAsSCi-u1amJ&n4zuk1W-W#ngiiiM`fKs N2nD 2xZ-Tr|2UMwk#&+baq#t>(-89ygTgGnJ6@?SV+BfWq!*GI6(~ zk=abKSGN_-=_R>_nz;b9)F|EI8Lhj4iB kcA^4INHOUP0huTgvuw;-@WqaNVkJ{^hRl$9 zYAU)L OLJ=?26fz6zu1|St0f;I5gt=V}TB@MaNy|XgQoEeCR$=@8Kvd{3ykLuR zoaehx!z(_q(GbkmMf|C0*$a 6CF-HXw)s>&&$a6z~@1%3u3+mb(nqEX5bO&v6s|5p5-w z#f^<4G~kD~J}R^W&TbFe`Rqv3eIkhSy6x2GB4bg73>dVck94n)FGHS?T<^GJV4O9< zBy0j<^rtF7LR^8ERN4$TM;_%**m2aMarD -<8Jb)9UMl>xM$^rK@))fbV>$Qy{Y0I&vu@txJRc zMVl2Upa%#DOVuV@#UfpVncF7x;y4%_DMMhiT3KHET>3DzYLYQg&5))m!;+(-J8LNo zv~v}M7Vk&jIp+>2d9~U)8 pO 2A3S;^#eruzG?gEnDfL$=N hp-*CQ>aA)C(AyMXHP4NvR-T({n-+aW9xD zw4;8lBR)Shl=+2;{&>%3i3gVLY8yo-Q0pt20F@z8c^}3a7Toj!B;DM1F#tY_O%Kw% z0@~}pwZ!QFKWcm q!Gxw~ zl)+GPrc5rQT+wUpcCjw- D#OojG2M>MfBwVS%vD9ofJTBAkx^&Iw{EV~ UUBr|Yl^zYaTMET zWjht+D|{?P*$m^}hbNpuO(5WW2 Ss;zZi^+M{OQwbni` z%g3GQaNdQCa#1ey(t_5mBT4J0IhXaIr#xO$mwb*Fs19Qu@dK?uJsi&DiCoMN&0e3J zk~X_<;X-@=FY1>u4az98+RL)YR+KaKvTHGxX>h5lGP23^GozLj`tD+i$F-Xj#LFd) zuda_b5a@!Cz{YAI!BmrI9cgjug8sp7siyuxDG{ )$*hgd_{f4lycg1b5cQ54n0 zO=#WsqWyZ4{o9_e1%`9^&h|Z4-s`Q)$i@fj588>U)-w|!U~Y}e`yoO{ `(nl;>`VHABto;j0 z+Mb9ZXxXlZGQ*nOoVe di%pzH z;qR5LF+qHpp(E>FBnwuRa|1wF5DUMcQ>)-W&Jy|NAtK61X(SuC!~d~`L1D)Q8Hq8# zoVqQXL8eHpteHD>RsTzkg!mJ+;3-Nu`&JP4^=mxQ?TK5vYg?9gxae%Mmio;S``A!n znL%VljVVun4vb)ZgKw$9?e6sL*1h{t2MK%nJ=UWUNEVky!aR*q0;HDe?yl?p_SAK| z>HcmG*Wj)vG7)l9;B$93QN45<@1boG#H4?BS)gU$b9&6~b8$yy@T}q-IXz*8keo0~ zsT<_cZ|o*&jF~Eu9G)txK&!xt0ray8`5qI_vfM+?O;W6EMJP-h4SCgkU10Wbs$8a! z$hrT9Bb;@abE|MDXbgaR`U-@ltl2XPuGM~TAH~^dHvn!9+gKiX67)k(?+F_ISMzkP z4~z};7%yb*JBKjrg%-@>bzHzX+$|sj#vf#oZxqrPl85t&WrBujB3sxkNuJwPLQ>aq z^M;al@ qZdVF z^9*z3d>QS-uJgH?9E)p{Fusr 9vSlnd>G@;Ve#NFg HWwvneexNoeOsZOxPN}2QDtje^9`M-(w&&hk8*}$X&&N(7H*t=$7G&Zvs=#Jqj zqQWS7dcujFk{%CLu(|eyA}3zC8zN#=6HRwhw@ldPg%8qx5c6T=(Cg3c*I)<9)dp6@ zkn!HCJ1AB|g^N~=g@ g1EZ zE(TlnhORg7R3-KpJvaTbdp;Uk<>Z3JBrN}M&>-?+E})X$z^{Jj( ;=$f&%hNBc4ezIc)zn^dfD8;^}TJi6kAR*;20#_)VpeMHS3@t*Ja+ z ~ zE3$MH2q@k^Cx5Ts#GA)6_t~2tN9yz=?y}c)t$#IXnxms`bM}h!f%HELz4963Xg<8* z)ItRS9{fw_9i7~*AdWw~%q$IS%Q+6bJK<>`ysQ0Qmo*lQD*3T-mF?clN4o_^ePMa} z5m{M-op+wfF8aV{RU_VE%DH2XLko0zqXn9n6_8GcA}*j_AStKD_wWLZ;3g5`7G%1e zyf1mf;Sjejmd0KYAGxAAjI$ckei~mD-Zsmv6f&BsSKP9DK{iSLX*v|Lk5~r6r#m@x zUi!#j5`?TI$@CKM dGt`K?88D)Jg*azuLVV ni1lQCI6Z7QT8u~x{EW?8~L|kRqDQvTj`bMSu397WCaX5Q%Zt%=!z+F zSv@j4w@IjU)p|OLm)^oY$9Yk)2%s;gwa3l)umD%ZfcYKiDE!AnJWl<2h!4$eMfS*- zGnea5IrQd5K4}H-f8r+tQtPz}=~<|?oC-hPSngG8u|Sh}U{G{B^$pcKaaN!P(Ot*B zZZsUzKn~Y|C-Xxr#?f|0bJP`feNoJ8w^&{MleWVoFG3s!qB1_u2Je-l5OeTZ$m @oQ?YrGcVs<@1!{PBc|nPEAq91 zAMtT}l{J-x+nRVqTy<8@I^&TE&z$S$o9{Z7PA=%y=pRZ_v~l0;xZFYNYFJkd2?igx zY{!CHc#_%uO`Nz5Si+&CA$(0}YRgF6nG`zim?f5`C<>V6>@EhYYdwi8EuV6i7G7k6 z*M%dyR-6ffp4*d2wU{eBZZYvnMwTS#cza~-ol4Z>>v=r*5 I*kh}BbWqb3bHP`tr?aL$^Y>Ij`>dr@A%n!^A22xnzMiX|Q}ySF4SqFHd# z8c4w(65_ZR&5BcoE!?90A|DvTD22eNY5&nhz+;xBO#rj-bNE=9YV>D1?FvRVcCH*X zO)@u*_o!>g)6H@5iphf`ivnpzRx_0Jl`*c2>^97F`6s&NZ7F50bx0rDkFe$K;?<<> zk+4riCBU)e2>BukGl=|cD*nhDEDZQ9OZsS1vm)#jz1>Vff)-2pQG%w9lVJhZh8>25 zJI}s6w#LrLSWZ0s{ S;R)BEs;O^XFVXqaJVTUKMb-B!F~itjvnGpf8>$g6 z296TXU!BiaNui-pUKm2P*0O|@Z4P+l)#>fI9>@|fj6JAT%Jm-5Pu=pFxAk{HE5kkV zSrvlO(yd~sm|W~S5*hrZoWf580bNQ-FAuJxvUB07rwjL8@!(JVC-q+2+5ODCG_{s@ zV;p!ex+B~eTxNc&G#2xqx_4T`D0>JJ*)ECY_6(7g?;Z(_76*^KP9cx1{fM|w0 >SF!UDv8O<&DWQ}Gomf3_p+!YVP|4FH zA4 L0!RhXxzZr`I d zQUq%C<6+=(9=L5E#-`2T%l%OZ`L!3h{kLu;?~*Ns5g!7Qt}s`!_7|NU(IuoOX+=(( z;J4OhtqEaBSKnI+g`N7`%+Sxe+-KF_cGBlvpq|}KtDJvecAxZFjlNo)dNw-H5iX+4 zSF8s~vU+JERL0bye#{E;IB~&abidl!4lM5sBv!wkxTA3~{&8`m>0}S?S=tbyF^)Rt zYs9=oQ;|nNWCi?x$G-4&{mb}=L*QQn{Pn=<&*%_%ru^yn>Q~^eCjKALLbzi8V(I@1 z{;S*g2NVDh#rzHY|9FqT#`)Ei`XiDd_J3aDZywdJQGWFl{)n=T^N$Y0uK|ATRsIMt z^6<9+e{?RtLjNiWe*gi1Y_dPG^xp#U6D|T@|9_@6{qJ~c_?;T~C;0Cq#{~SG0l>Xm kQh;Wr#T1L?+)tO~FGEEh1-^a&00#VH1lOt4M?b&)A1&MY4FCWD literal 0 HcmV?d00001 diff --git a/tests/data/Reader/XLSX/sec-q229.dontuse b/tests/data/Reader/XLSX/sec-q229.dontuse new file mode 100644 index 0000000000000000000000000000000000000000..edb902498776b741084eb98330e431b4d97f7f48 GIT binary patch literal 8940 zcmeHNg 1Jy~myL?doC!ciT>roEU%UdPu_JcfT!gacaaRP<4Vos~ z*~P5LI18M5_fAk=c}lb2#8_k=ox6;hKF^~=P0 Sn1wg3 z3*c(Q;#mqw!svSUkLc%(S`#MrZwThL-sDd`Ez3*{1<`ghQG1zQL`IH44--B@q8}u* zLuyesH;41FUr;b$266yiYHZe3OSkwRlHAaQivfG6sdr!rf#VmMGtiYw_qITGC-jh7 ze%}U8&wJvsD!0k9v|P$|0V6xXlY7-8Q2}%@LF@Ks{Ffjl4WCnotm_KWLdAK WQn z7imfasauL>H#h*m-5m-*?Qeo4F=z)PBLumO&>IdykcN(68z&&=&*T4u_+PBPzubCh zjItsMH(}7B-yQvEo9H4d!;}qBc3au(7KuCQ)<`fZD!2LeT<(c;R{aBy)C$*h_oP$v z>KwNmLeJO4@v>NcspiuyTHT7bjg1&Y9~|W(_CVcl8ElGoOHO$sSU0ogP9?%h*RlgR z8Si{4T%Kw5`H45Zf(YrvIa27JC=e7gzKYwtAGA!RHpbTn17V6fp=3*3v|hFf2r5@V zMm(THc@Np5@}I(@US34aOMg4&&(_Myd(>6wJ-ib#e9d5r^5C)VZN~PY^`yGG9AjWI zO4`@UJt4H()?8U95}(gWa$Z|ptvmz;I(ERJ>~roaaZ{M~xF9j?OZ63E75-B)KOFma z%uoP;5=2NNKwRNw19XKtTAM(j)<5G{sirYBM~Lv&d+HXW*ELKT7iq>B4aqrfK{M{_ zf;c2E4o9UDTgXD`L-E3$w<#v1 4`Q?mgY 8j*m(vByFb1l~`&_DDc^sOVoV2asGY{-O{6{r44Z717t!h%!_82YWD?zFO?U0 ztBmn V fg+mJ#q3>;2B`zOn#1t;vvfv(h^%!%$%iDDTNcvEz(gg<_} zvt5|HrCw{22LmiT0MYhEMn`;aA>DiLWKTt0#pt=#9E71Ybxp^1=)2kGXM8eZNs;@} znlWJG4dIx$z0>HsW3r05B|3e7JAn*H8JlL3oUC5ly;oHx<|@W4^?OS}djbvvY?UJI z>q^SkYjj)G5K >X_^$mxDM-gi8jpe k^_pzEtXQxPQ79(6Jn zgLJ{bIhYcT^_WD5p`GWtIPeA5Ee{=jBd(_pS3BohZaH0+W?4&f-eX3^hZgC=Z{vg^ zHqp$XWkMlUn@l8Y1!g?Tp|iZz%WB`QAF1tH Jqx7w*nMtXho4q7toB-oX$QaV0fAS)?j85eJUKAk#~;H65oIp(0V`4}7m( z-Z*Cv+(p{WmI%|_N%4)uDAdLB`2=*Nq3QM2qA}tjAuTtUna)N|qB6(eTHNbGs$QFW z7&T(ErsBY(y0jNpitlsUWw5?@yBJ=Ke~{JgcPlbuTE8rAQyvuYChd!Uvwie->)|q7 za6m7l-Q=-|h3jJxn4}@FLiMCgAz}HTMk6g}S145FJo4VV?F#S}Sgackk=}1#@z?`f zMe;OVVEmIHBZ3#~R}ezvK*TUA045SbkpBu}f0gAQAq@$UTO#7!fA=Vj9 kNTgSvRwwV?0F_AeQP5z0&ZPZU zlqNoi7fnPig&uDI10}`Ap=0v!JJC$B-51xoGM{J1GmBXs{n)o#=4;Dyg+@LUZt|6i zhk(e{;zBt>gE~?fpLLF0jER4bNe|SzqH!>IXN}({e!u;VnEkUyB?HxcLaO&D#jZDg zkpB}uh#Hb$>IiOdAc_tO#Do9cVLMrZ!Ol*=-zMo;x*0@!cX9X&_=%FtXY>BxOw2 zaM#VGEwn{!&%?a#ztf3fV*x7Mc~;zyp&Vqw1!Zoz9z?@#c5+1=0lT@Aj1fH{#1q{! z>QKe2-7S$s^)<0s{=@K~nDnm6g1%YcaZZ)!EV7#)>b}B)$1-`i@TA`wC!e_GXGpl_ z=k*!8q+O09kJem~_@|QrES&spgxJ@ZJ$w ;4yUNujo2mpC`8%!Y1U?Ugysi-* zUG(`!s(!5FkGt4)wI}%$wRVfIo{=Bxt`QKFhXm&5j&p _s0*w zAPr%mtZw2q7o_p(%focA6XRNGJo*7p+!o2rRzBZih{8qQ%Rh4P($tHD!0qJm@RnWS z!NT4sO}660=Em myQ$6Cr-Q88Qz(C3z4)W~swKXimKyBt~ zO`aF(%$%T6HuUOJ-#u)Z54~n3u?h(@Ya27I#CnV<;-(smqA6xky3b_jN=9K5avh^E zIZ4Wpw?P2;fTEvn;O_2s(;y|)Q)PCA@liIdL3w4iDovgVUTt;eVWn~3D#af-o!R*c z*z%W*jF(MZ269#=3RXlR7NxmS@fn85>)VU-+X-9bU~-Gx{P?+_4(2}-hclzvCyj`E zA!7Jh{Qky6XG^dx82H=qHwy0Qjzv;8kab`T-bsz>e;VEPG!~vH5Ij5ZSdG))0LjM& z8NlqN)LYm{k+8RB6yG94CKca)@n8-^xAaAC+KA*fdZ>ICBIYQUyc!nP2A7I4aRu_u z9E!ugwhasjMmn8;C`ru1VR*DDKZ|p4@ql3{d>m4}=b_59uCOShzH0WKQWZ3-N3!$A z@o+uzU=4*VI*~3)bpz?ZBU*juNgb;NSNP`r^cYlcJ$oWkv<8!xX*gb39;RA&Z#rH^ za4U<&u29TK=(2BzXNGF+EG;tAayKf+&Y CY?WwdA{fooK3 84f-g6^$&de0rsu(u+CFTUcpOMI*Ajt&&e44K^UB44tpTO6Z7)LKHK&fTJ8 z`O8#akC4$OD Ic}dVmX&0Krg|HD^5mx^2W8n}W-&Zt&B0TX*i?`^bUm zcR2Sa!MQw|@t^5c;=xU{aQML8?WyZ_#~pl;zz{wZkpR9a@qxoXHZ0%9dgxdMvKYWG zOSBDrPJaM>F5t9=BDLqJ>G7*1R3xD)gNz=drfyQE*eQ}pVJY%T3`!hWG;i&KzeR_! zuMAP~l9#L6kVue4fnRlAmss4JtpSyix{Tg%g>kHKZ 6gWX2(FL?7e_~$;PFXJ~98cOU3f}0J>#pt`ec~;h2=2dj%d_887w+O_ zqrSl`8I=8D!(k5o3}QVxiQ#%L=fsew_%+&hi$nO9KB)Jr^EJ2LfPgx)$HA0)fH3f3 z@QoMYs*sCgzWj@RZ`N`8r`#f&!)TIU))YS1?ldT+THV*j+m$h{WEaYUjT|4S|Ch zY1&&=8`~bt+Pn>A8##Gu1D;LKgl%tE#A{j75_KOjrjz)kdwnyS*eU`a`Ru9uV zpnXEI87OX74GG|ppXG01`4OVPW;Q+;bGYi%+8*!rNhq{xuHX{2)h_VhMW>0gnp>~= z7I+0K@CU(KA0+k}v2(1SXRYckB%rKKaaqx|wLEaML-3_(C1=Kxv%Vj0Qx)!`Gr{^X zR9 {jE?ADq&Z0!`O5AWJ*=NsaoILV8CU+Xg++Wg)` z`Q;ZHXSTBFisyePIo!WyXEwF48XJt}E2G7#;6LWZO-_%6DA`^6LQoT~+>MZN8c62` z>AF5b3&UUxsnR~oT>7JVqnbcQg{FY|Xi9 UW^p?0Z&?sN{5X9bJ~T`ODC^T#b>*9Fi!8|C z#HkZJs+H{)V#Hxf3HTnza%6@I?QwUGzdn#8vll#dDX=e+RZTIep~9vrI}1LlQ(>5O zL{S`0@?+d4{^W-F4kp8!`nnD6Bx03Eh2AaK`@Gu*D;UVjSWR{(P{c^4j#m}V^Dd?I z!{y`rFw9=d&!;EH(4M!9Ord5QB9+cQMH|v>E8dWe&fWTiA(JQO#e3&dA@$C$aabf2 z@4*ZsE*Aak9vQxE8PC3COs 4fEDQ@R&9Z$;=N3-)O55F3x)gC`jS@0~yRA^Ck zid?Es3795^ww(HZJ}vwx+M8d=_ZEr|8?jjQy26baAXFjJW*6Nz$NHQ!#UoDE-=HC3 zxRsz}9?Epw#Hmp80-nfDm}cnGHlZo}HF&_Czmr%hC7E1nPHW=j{=A<@&4_FbS_>I$ zc+UE?n4>jrj;6*gP}zD?R!`qnWyYn<&ioVpNcuvqu_;UALLEcx5L(cbu;}QRBXA>$ zElzvEK2Xc=b=&e)guxp^0d%sCB?`@Nb 9Jv*O>(wnORau9L!FDf- z9tfe{*0N;c_cSQo+SuFKG|I@5&tB_l{9go@rBGMlP`b`&DK;9k(@JuDR)6D((wQFP znkl=F9&u0RXoAG&YE#y~Y&~e^TFI28c|Q jeY #bx;`ubPA^80~yiGFFi)bjV)$HM0NxpZIpfUt>!R}(?QWCuj%)i<<+@?*#OSPC4} z-!5Ws4qo5CCs&=iR2D1X%;IZB9bp-|U} >vewi#*j5>mA;OO?(0!i-^p{CwGOzGezoe5Chf{@G^H zZD{=q-^bmLR24aDpWx^E!(1N7GVVSsr!L^|$n4)Hr`6LK>MLJ<*Ov3ai q=f*=ZCxtx!i &SuED@r}HiMd~IYRB7fTmDK@K0VN+Qt8?tr21mk1 oV~+(a>@O-VmT7JIN7}<~9bkBuHjhhINW#hLSk;L8m;rrO zoHO}SswM7jfyldsYqiB>q?QEt#)gk;QX$<|C jrM ztupQo`qc7ilF4|VV%w(iR`}inD^Z^byO1_?su4VOmU0xJI}I)p0a#G5MrEe<$;Ylh zD^MQpXP~6 K>-dMomX9=X zkW`hPM|jgatV19H`j=-55_hKUcngMuG9h;)KzT=Th6hOC_o@=lF46vpddBitgrNxP z5h0qcgny-;vAzBOn1`U;?;|zl33QPQH}DYUiWYZ?T6jqf_id>ONc*JH7%8USLOI_w ztNKw$Y4qM~Wc}pKyvMhQ4NteLr}9fQB8DeXlYMHTo7tpjsMOZvXK`+GOZwhqXfarI z-?^n2-}|n~8G5Ow(2$rp`l3BUEq$sOtEHZ8o5kB`BwRVw` Ww9!-kbsXo zR8rj EGKa;RS%ADV;sY;7imUI8&$iY%>Mf_Dkjj)ML;e~hQN?hu@ zu$_7%!|I$I&bZVDE9;10evI9IH&n)D^luMFD{CVhDC@pKKKkb+;yC-b*=lEB*b<_r zDx5Hhl7v*DFV2M5se)cg_T7YY0J36i5`#>I&tcZ*vcP93 6x++n)?hi{gg*a}fr*=H6h8$jspP289U_D$PjoxPn@= z1}XdkY^`W(3%~hPJWqBWx1UP;GF{*bT=E{mkLaG$Vhi#o>jN>DmuT_hc03?}Q$57V zD;`#1>pFVG{>2;z_=dZg99`EqT84S#2rE++v+CxN8AMw}OQonTnz3=3@9C_|h-}s+ zT_7^C`W5KH=!s%S$J$X+LbyF!^^}*2#qxWNL${;^_~hdkik56a9q*WdVIgwfjgd~0 znO(3*+O@|S =IA_ iK#>m>A89Qjl>7Igrig|h004lE_~almB3`