aboutsummaryrefslogtreecommitdiffstats
path: root/network-scripts
Commit message (Collapse)AuthorAgeFilesLines
* ifup-routes: Revert quotesJan Macku2022-01-241-4/+4
| | | | | | | | Quotes were introduced in a71dcfd392cc1022c255208fdd94a0fc6c13ceb0 (cherry picked from commit f0171b8449033400db59a47a610124fc285dfe06) Resolves: #2040679
* ifup-routes: Use `ip replace` only on type `route`Jan Macku2022-01-241-4/+6
| | | | | | | | Since other types might fail due to `replace` to be undefined. (cherry picked from commit 28f50e5582f3641afac795e0e009fd22875b8dbb) Related: #2040679
* ifup-routes: Log when using `ip $type replace`Jan Macku2022-01-141-2/+12
| | | | | | (cherry picked from commit a31060817ef8b03814b240442811ea5caa082d1c) Resolves: #2040679
* ifup-routes: Use `ip route repace` to avoid raceJan Macku2022-01-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | This should resolve the scenario when the link is brought up prior to disabling accept_ra. This only happens when both IPv4 and IPv6 address is on the interface, because network-scripts does IPv4 first and brings up the interface. Then it does IPv6 which disables the RA's, at that point the node has already learned the route from RA and setting a default route fails. Using `ip route replace` we ensure if the above scenario happens we end-up with the correct default ipv6 route. Huge thanks to Harald who debugged this issue and prepared a patch! (cherry picked from commit a71dcfd392cc1022c255208fdd94a0fc6c13ceb0) Resolves: #2040679 Co-authored-by: hjensas <hjensas@redhat.com>
* added veth supportGeiger2021-06-241-0/+11
|
* ifup-eth: add a new PERSISTENT_DHCLIENT_IPV6 option for IPv6 dhclient daemonZhiqiang Liu2021-06-241-1/+1
| | | | | | | | | | | | | | | | | | | | | In 76226a34 ("ifup-eth: apply PERSISTENT_DHCLIENT to IPv6 dhclient daemon"), one PERSISTENT_DHCLIENT option works for both IPv4 and IPv6, so the IPv4 and IPv6 settings are consistent. However, the user settings for IPv4 and IPv6 are limited. For example, users try to adopt both IPv4 and IPv6 protocol. DHCPv6 servers may be not stable as DHCP servers, thus the expectation for obtaining IPv6 address is lower than IPv4 address. For users, IPv4 address must be obtained for the basic communication. So the PERSISTENT_DHCLIENT option is set to be "yes | 1" for IPv4 address. However, the network service may be stuck until it fails due to missing DHCPv6 servers, and the remaining devices also cannot obtain both IPv4 and IPv6 addresses. The problem is very serious for users. Here, I add a new PERSISTENT_DHCLIENT_IPV6 option only for IPv6 dhclient daemon, so users can set IPv4 and IPv6 separately. Fixes: 76226a3 ("ifup-eth: apply PERSISTENT_DHCLIENT to IPv6 dhclient daemon") Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
* ifdown removes veth pair if both peers are downGeiger2021-06-241-0/+6
|
* network scripts: Avoid infinite loop of arpingJan Macku2021-02-122-4/+5
| | | | | | | | | Introduced in the bonding driver (commit ae46f184bc1f) now reports transmission failures. Before that, it silently dropped the packet and replied with success error code. The arping of iputils retries endlessly when a transmission error occurs. This patch fix this behavior.
* network: fix condition in set_link_up()Jan Macku2021-02-041-2/+5
|
* network: fix set_link_up()Jan Macku2020-12-171-3/+1
| | | | This patch fixes issue, when interface wasn't bring up.
* network: add option to keep the link downJan Macku2020-12-039-16/+25
| | | | | | | | Some interfaces like Open vSwitch bridges using the userspace datapath, needs the link to be kept down to avoid issues. Add a LINKSTATUS=[down|up] ifcfg parameter to add this functionality. If not specified, the link will default to up as before. Patch provided by Matteo Croce <mcroce@redhat.com>
* network-scripts: Use net_log() instead of loggerJan Macku2020-11-052-10/+8
| | | | Use internal network-scripts function net_log() instead of /usr/bin/logger if possible to make code more consistent and cleaner.
* Add warning to warn user when ETHTOOL_OPTS is set and ethtool binary is ↵Jan Macku2020-08-121-17/+21
| | | | missing - Olav Vitters
* Add optional 'dev' keywordJan Macku2020-07-242-3/+3
| | | | | | | | Fix the problem when the device name could be interpreted as an iproute2 keyword. For example, for a bridge slave named "a" the iproute2 would treat the name as a prefix of keyword "address" and the network-scripts would fail to set the bridge master. Related: rhbz #1859785
* Maintain permisision to set umaskzhangnaru06052020-07-141-0/+3
| | | set umask in case resolv.conf doesn't exist
* Correct spelling, IP, …Allan Nordhøy2020-07-141-1/+1
|
* Fix spelling, for more infoAllan Nordhøy2020-07-141-1/+1
|
* Wait for scope link addresses as well as for scope global addressesJan Macku2020-03-241-3/+3
| | | | Resolves: rhbz#1773798
* Use function is_true for testing true conditionsJan Macku2020-03-092-2/+2
|
* network-function: bridges are created by ifup-ethLukáš Nykrýn2019-10-171-0/+3
| | | Resolves: rhbz#1404265
* Repalace hardcoded tests for yes and no with testing functionsJan Macku2019-09-129-60/+60
| | | Resolve issue: #42
* ifup-eth: Fix bridge setting stp optionBell2019-08-211-1/+1
| | | | | | | | | | | Fixes https://bugzilla.redhat.com/1743522 An uninitialized variable was copied from a closed PR [1] to submitted PR [2]. [1] https://github.com/fedora-sysv/initscripts/pull/212 [2] https://github.com/fedora-sysv/initscripts/pull/213 Signed-off-by: Bell Levin <blevin@redhat.com>
* ifup-eth: Check that device name is setJan Macku2019-08-191-0/+5
|
* Add ip6gre tunnel optionJan Macku2019-07-312-1/+6
| | | | Resolve: BZ #1691552
* ifup/ifdown: print DEPRECATION_WARNING_ISSUED waring info after source_configZhiqiang Liu2019-07-252-12/+12
| | | | | | | | | In ifup/ifdown scripts, move deprecation waring info after source_config, so users can config DEPRECATION_WARNING_ISSUED in ifcfg-** file to decide whether show deprecation waring info when calling ifup/ifdown. Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
* ifup-eth: apply PERSISTENT_DHCLIENT to IPv6 dhclient daemonZhiqiang Liu2019-02-121-1/+7
| | | | | | | | | | | | | | | | | | | IPv6 dhclient daemon only tries one time to obtain a IPv6 address from a DHCPv6 server regardless of the setting of PERSISTENT_DHCLIENT. PERSISTENT_DHCLIENT option is only used for IPv4 dhclient daemon. With the popularization of IPv6 protocol, some users prefer setting IPv6 like IPv4. I think there are two solutions as follows, 1. adopt PERSISTENT_DHCLIENT option to both IPv4 and IPv6. 2. create a new option, such as PERSISTENT_DHCLIENT_IPV6 option, just for IPv6. The first solution does not introduce addition options, and the IPv4 and IPv6 settings are consistent. So I perfer choosing the first solution. Fixes: bf00a0048 ("Replace /var/run with /run everywhere") Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
* ifup-post: fix incorrect condition for RESOLV_MODSDavid Kaspar [Dee'Kej]2018-08-241-1/+1
| | | | | | | | | | This was causing the /etc/resolv.conf file to be always updated when RESOLV_MODS was not set... Before the commit 5d6156454bf8f6dab4a5fdd7e1bf6 we were not updating the /etc/resolv.conf file if the RESOLV_MODS was empty. See https://bugzilla.redhat.com/show_bug.cgi?id=1610411 for more info.
* network/ifup/ifdown: deprecations warnings redirected to stderrDavid Kaspar [Dee'Kej]2018-08-062-6/+6
|
* ifup-eth: use 'bc' instead of 'expr' when computing $forward_delayDavid Kaspar [Dee'Kej]2018-08-031-2/+4
| | | | | | | | | | | | | | | | Because the return value of 'convert2sec()' function can sometimes be decimal, the follow up 'expr' call can fail, since 'expr' does not support floating point calculations. This can sometimes lead to error: """ expr: non-integer argument /etc/sysconfig/network-scripts/ifup-eth: line 91: [: 0: unary operator expected """ To solve this bug, we switch to 'bc' utility, which supports floating point computations. We also have to change the comparison condition of $LINKDELAY and $forward_delay to use 'bc' as well.
* network/ifup/ifdown: deprecation warnings for 'network-scripts' addedDavid Kaspar [Dee'Kej]2018-08-022-0/+12
| | | | | In case of 'network' service these warnings are displayed only once, to not spam unnecessarily user's journalctl if they have many NICs.
* network-scripts: Add previously dropped error checkingPhil Sutter2018-06-141-2/+2
| | | | | When converting from brctl to ip-link, the call to exit in case bridge adding failed was dropped by accident.
* network-scripts: Replace brctl with ip-linkPhil Sutter2018-06-142-17/+19
| | | | | Since ip-link has full support for Linux bridges (and slave ports), use that instead of the deprecated brctl from bridge-utils.
* network-scripts: setting of firewall ZONE fixedDavid Kaspar [Dee'Kej]2018-06-073-5/+6
| | | | | | | | | | | | | For currently unknown reason the dbus-send calls will fail to set the firewall zone for the given interface if we omit the --print-reply option... This looks like some kind of race-condition in dbus-send, since the --print-reply makes the call synchronous and slower. Hopefully this is only a temporary workaround until DBus is fixed. Resolves: #1586284
* ifdown-post: artifact whitespace removed from the DBus callDavid Kaspar [Dee'Kej]2018-06-071-1/+1
| | | | | | | This was causing the DBus call to fail, and we didn't catch it before since we were forwarding everything into /dev/null... Related: RHBZ#1586284
* netreport functionality droppedDavid Kaspar [Dee'Kej]2018-05-304-35/+0
| | | | This concept is quite outdated, and not sane to use at all.
* Repository scheme updated to new layoutDavid Kaspar [Dee'Kej]2018-05-3027-0/+4971
NOTE: This commit just moves files around, without actually fixing the Makefiles and specfile. See follow up commits which resolve this.
o/C :q.wqϦ. ̏+~b7Q"e WAkpƒ:a1;\^k#'Yx@55Iplf'* 5XG nO5q:M( pn>stfbgx[}UXtUSY5ևfVX#, ѣq ޘBs ]g&Z"J 9CZG|dG bcX7V3m u#"0仫EÓB8TDX^^;ApTϮ"bd͊5hc*mEZ=)Ms %QP"kv5 E_i+G}X]m;*D "CL7ΪH ~f]5mg"'mI>QodWFѦwpd]iNmtێkD_XcK+GP1¸M' ~Y~1pwe`qx_$Kbi]~aClY"~#RK>%qlڢ1WszӅi2!_9鳠}d~iy15n .P刅w#Fǥze|F"3ڄA:üLk< ^mlrn HN_m!nf}GqXZc,AVzjd]Š\G=g15~̍) [=;n]+JqFqlٛ4%vx&0ph\.Ff]KfCA*V$ACZ|wA׉V) TVf)zXI E+ۨ 5RK{/~x2&t.(J;]noU4"PXL4<^L@_ROWW,b's,]9hcە9z'ͥWq+Ĝ>u+= :r1߀:5 Pm i]쌱UDkL\D(7 eZ![7B&oeZ:H3 Lȑ> $~A*1 ,ҫNXQ> GqX%!3| }[@^*MA2UDnT2UfsRA%O7TYįc)8vVS!W+v(27u/^OZ#q\hz/jUqެ;QyLZx}0|DFngʁ(@Ԃ!0D"u nuk}yh_PLS &(?Uq־TuJge$'Zm=OK(uaؽyÏԢii95Y+L0SFb[n4PFYIym$Fq|{ 7/Er$k8byD'U%%?gR*]$h\3;'ФkՒty@9C9W8.m@Aĵitn T:wC(R.sOt$ 2N;:yG%mvӰEʊ<dX…\Sw;{M.+ W&$hݽ `gneŀ 2]9gi3sg ފ9%}qdBED'"!By fA Ӈ(5y%8@>cN68<]_iWdpS,$oY_7E`;)-*˘!;DZ oj\Wո-PGIFH`: Mrvyvj۹yVa_FOG +{S trXE2 Ph?_$3\BklD8X% EA柹lbh&HD B)0bʄ-D%-9rԷ d1~8(0a|bc++R&2nj}r{V -CJ,ۿ}BK2OShߏV0ni v?M=-|94 ~KVDcپ@tё"G}^rGD_ ],e+cd|tD}wb2⍑~{w)PᱵtfHܫ8(As׳]^9;K &ɐr}[cMJ jKW ]Sm'+NcKI%h8Ed,:fa'dJlAɭm*~X(P u#"ZsoN`?exp4^r/z#릥nؾ:.0X^X[o"g4٢"nd+jrd2nδou=o/@楇J]Ε`%JF{шkЇ37MJ'oj6lKE {mV.0 !jd"Y&RH=n-T`M@. U8e!sY zO(h{pZ&-ݴw0m -ej-:zfG~XX2eZglך;)*6/ T4'A%@z,*x>(V A}ai95; ?0R_ PM3g>TzÍY)M Hmq9з:S=醀s_B pٍBsw#${McZ343rq:o.Mx{]WdZO!K8)YB4]6r`Mȉh$8ש٫Ef1U6*PQckg!T~Ag ғ߼5^| /ErM4e\%;Z sjډ\e+<.sQ,PB> o!Җ7|ɻsJfɞ8g;s֛2Q2nGd=riCw4b|~He-Uh@A;~vQ, V%LJgUy qL,ag)Q^HTՃfvYU f7U{f}r}J:Iz4`Pg#* %y"3BTղ#}J 1q&Xh2eZ υ(:>)>/wN/%2ҥnuN 1XnXT "/St]uv[^iڢ0sҤڪҩ([MLwUsleVtW&a&- dR<,6@ 7*1<:[8?cdgVq*&*`\doͦf BCQ]HBjGDIN2Ҵ荆A. 34mR5V$q]%id٫ʈC/@P%uCʌBr C<P1b~EAp,#S$?9 )?,0eJ/zOM}YWg?KּM_s8m'uZ>v_J7E|gVthwH9_&q_&㒷uVΩjgTn,[D#7L|x9oo + ^#Ǐ+.4у!=R"K8 wsTٕl$N=M_#%XiJ~\x/9taM=;.cGƿ.vHs8~8_Wq :qc3~[<]Zt!Si{y{ ʤ. 0Rd̤誻A[Wds-"J?TnpكX5][猓4#X#nT\ACzS;TIkfBGtA1c|m ~Aح2.q~ - \wL8 ܩv Drh^D4=QŲ[-= 6 AkzDk:j )6V64]j8= _kU%_Z&$e>sN: ?C(X4_ [*shQ97 Pk7h|r VxW 5q?-Un V_Tw-')CK] :l_a `ÞR-g܀o>@h}f4EӗETy ":e\GGpL%h*λqǸ(jظhGT!1;ID@i-]8Yͨ3>]&rݪCONOUZY,獽O#FmaLZKZ=j MrvR\\h4yk!* LTa̽<`F0[ݭ[x4GcZQӹ >Mj}F;AZ5k7ĥuVKͭUKu;O{Q9{< ^b@fzaFl(gJ3>PٴWK xM|B$%m(@$]7x24>UrGŮOp/"a,[x  K\kP!+G5ٹ 1& S2^,GX1W[^_R} T#N*b]v".>VpP+s?dѹ@(b*^NrzdFس#-k<5D+$ϟT'}O :]\JB5SYe(?maoL{N}d6iKtq:]Xޮdq_ڡ>I*V,>m;`2(ccz81u8!/McayP"qU4&L Ǽ?5I7KVFMt-o=+khOՒJ5 Yu W/\ܥʿ[rX?^%)?:7vAx@1]P,pס)ƣ;EhCm'߰FS֫^|. -P->2 WkԤͺ5s=l;so(m0n+;M$25"fA|4jq.2l@/x!?|[ pu o$" 8Q PB}w Q=SLiߧ;O>&ː+rCF_T3tM9JAHQU1p0x$i_'g +}y8)<|:7kf])8z(^D2VWS`Хӂr<xĴ}a,w1BK[ǟ#SȚJ=4J(P m_!wX<ҋh3cQ즀Y4"Š -"^ DrTnOViN4aq߼%;,x!BxG3U^и3Nm+BX~ }$va # (9ƺ4㣵yDvǾnZljwepx|aW4rHdVth>E u'8 ޥlͦ FdZ;-`5\:Z³I^;OU)UD(ZfANdx;bҕR\"\,? \rka-J6jtFҦz8ԗJux|Szva!PCY!z|{s{g3Xg\ѝeFC4۫$ Rݕ xkSB4h*ֻ?BvM5y`BunfPpT>]^Otu92դqpZ>gP(Y r:ǩN#- +M>FwVkC 庯ޣ]`lԥ/@^cF˱6p,=xI f6:\r̦õgL>8\j9*ma t ߑbI$uC _E Թ*j|h%s#3h c֯hϳaX:~޶A`)H?FGnMcA9FJpYi* c<Ǿ+G_X]02n- Յ<Aaòʸ8$V.?``ZlrJP8 %ucs]o _'4 }FԪ]ێMeZ0,;0a zS.b@6ꨔ0(DōKΝo,*7P٩+" <&1IG2| pƸ+!XMMߪ ẠIV3MeN#!)0cB}Hk^ Ϊip!q>nM7\o 2q  _$S# R_X\ YqEs8g@u*(5Cv7*x7ɗ}rcs O+i-T?ԟع+FY,ًaGd)3W"1MHVG,sMm^V3U\ܝq8A7UeX?K6vyhQ]-.9|6иeNWL l̶v5̩xt)p.Zx..3ޠ^Q]BN9V )gGiRl6I|!i6< GmPGx }_xq ƥD$A9"PKL{w`P ,Ds/yxs޹jՅd cGk;"Y?gvԜ MVhG,<"bPJfR6=L`COZj% 3v ju,^v;cذ^xϏ:(c'5Xȳ?VO8Vy?A5BW6 2kM`ʭgD%A-V&?r_@-.Q*@=PÏ$eRdT_;5ӂ=St%!!^gI7?8kz}JcirgИwcIU+d>Y@aIR%H# AQ8}:K9c5'txZDO;C&#mQ;UdlHڜUuwnhTUp"Rp1Obqє)ڢ({N`(|eʒֳ`q621L5M^X-HOx!q!i ~cޔR|T5r8dz.ZyFP>ҾoZ@:,*1%aXv#p4T xo;sE&α˜ސ:s6cGkS~t;_wv\0#)/5[HTdae恴*jT6t)%T+uK(we)9AbqS; 5qK:ZO 8e7d9UlCՊ(K%_ljN2r|^HO$䰑l6U_pyUedWBGln"']ytj?]Ar'/tli_V{W%!:~ bRE^&8s)ޭȇEXNhȠ@݃yhwH$6uHW6\<ߍReɹ-v^o)t;[F35U7 n@`U @_c3 >MhL(mf~ ,qyԁFmRw|M{f wۣ]061?BdA8D:jyFLiӨȸ˰Л5U!@A1xb[ r:PvmwbYtuڦ,l_4Dv=B):* Hh pqր-`Oѩ5Y!֚ஓd!܀ Xw1ia'3VܿT7oh(,n8ϺFD-0(mM"g2z.9mz)/bLR려MO t|t+"6צt2`!hB.Z Z=-1x|'(gYzBdB7uVAPeD`k4=X,"rJθ׳JUS|D!iԵ7Kёk LMX,nS;y1BXNrJX_IS]QTqSz݀ Gk @2bx'si{`y6V/OG}a$MDC5@,øX?j+:;Qtblm E:z|ȂC_v,>}/떻صx|J\ LLH՞H`4sm4&,i[7Ljh 9Ztm JUq)> jgGgvgڹP{XFK72RO Yz*E~a]*5L=O.jG,uKkWNg?Eʹ"x;Ԏ5&*4Ӄ2E$HGT3!kۘ"|XPK9[h 0+c7G{i9En?<."yBVדҎ5M`j$rylRv| Ȑ4Ӛ!̤Z78Wat`V{ٸ0Bc-GP4'+AhF||{ XC)3؀5]OO+`<Ir\ [ܕ*FډDQM+?kcո6+9/Q_VAӡWI n i!OiKX9;{ys;A +o;:Wnqkw5]FgS:{0n` I .|xX[]4+`ZNꉲ;0jew CfN sVųbO2:60\%u$p^]B W6ױi\o9/Dմv{/1skaf1z߭Xt{W,% 6LdW҅iߏ[},W ?O+c-9bz7/=;1 hĥpZ+ODH@}L.@=@2W妸+Ot%o Huc=I]sXjvبEHho君bb][~6oVصҼb@#t纊afnW~q2톫YzPFvKDރk[=c+rAュC#TMQ7K7eSs&}A(/߈t`dor5ıCMEm]0 "ʴ Nus+B .w+Z'1nܞH\SG\ha;C TTpՒk`n2Lmm/h;2G(dzxLe_-bۺ7F͓f7g}cN3#m|,I npI+ݣwlĦ@mG bE_ԩ^0 RsBQ-k %&@^ w6ʸo>5`0Âca)C<QOeQ[`ŞY;E>ţL_p+Ȳ8Ͷ%tNŒE=Դ4H}5Y[<"צom(^YS$sE 2K Ep]t[C/ܺGK&l\QT< ƬH@s$"H "6+yǺ\b,G&p<-=!XR(-Kk<-YM`Zrj 8nbtn%/\Q#>!T/o$z=I z> n  NVz4]"o䩞/<#05:hQŽd[b+#RMZ!QkoRr6|'Wz|cY;vx DO*3%#(ʴ#eW;GtD܇Pt/}|oC+uȨ"3T͒ξ?v-?tngw'5TH?~7XPT-. )dJǛ+bXM;~jrSmP{MzA#gl5y_,$U Y6yJ/c6@QiHB^U)r e}y}afrI=7)d-{8jM2vd9"dUUѽemSzrw}XIa0H/&Yx{%Cϣ D2ЧdS+[hOwz}`.z| :dGiMcK3Otا̻s꾃$pB)Mc̄قEQ@a:u8}|Ci;>%Ѿؼ_%sR%= 7ϒ[*@:n#/* P/&>{?WsAnFw :.[Ԗ:aslu aYm^ y$]6kN7۝EE0ybfQٙ 9!fUJ ٕ8@';]B?++DK5pS`K@.o6ƟظD9H㊱a뎌 CѼCpVa5$#\g$/ 7vL8 ӱ c|67V YVU]&z0>Q%I[}0ݟ,T^8c'ױ֭ZC9O?cNrLkj! B Q6_X2^z 18L{P|̮́A=/= 7g-bmF$(ScE?;g0֠jE`b]e"~G zԑ/MWd7 ]۴cRw^RKjgZ(F'YaZKBGrV\1͆99*0B2P&$9ZE(1<ÌdFJ[λWphxf@qMD'd D0_)W[Lʯp;h780uq]@6Ȟ}ӥbq)a X!b'\m0=ҵZmC+_MHJ%?Ң` 3V7-sL@B{bw*Щ!Uםtf W2MdV 0)fF|ZގFA/QG1txؚ 9Aj3 }2?Zژ`oV'id g\ᄝhk㉭tj/ Ÿ?xsNKMr4.?ֿj3'ŢxGՓYĐſ[|Aj@/mEfY#1<>=vZ@5, L^UcY$ S+v!e=. J"S߲G)qDY ؗ9 ʂ m˄ܘBA ]_1jG-K Ʈ<u1dI{:24 o4g; <]CXct˭Z.r|U$1KggtFoO-ߣǬy#`{# ldHK2v( S Ku?df!ǭBpy&{Luľ%4CٔF1t`IcY>t0ALM%MKOF05"Tz]48d*?C'.c$U<{]M:PAHJg.6ޛ_vqnO8 1LnAbBlr &<1ûq7)f=CFG"vNz{|wYllHӛQǒ-u9L ųѮJ&ͅqDQn̖L0sDW1JZ%htI`cȎ'@^{I \`AYitd2*QihrAo1}RR(Y֍fRc/0%2x](>uDZ8:x[ Qٟ|8#0yG #'o.pn8c{̓fq@3[5+,ذUF(9F V_ Rf`x=[t+76PTCuy/qN|.'tDԨC9 p_Q| Σq{wLTrc6qhsgJ\[U$Qaƶ Ԁ+=p|D)NMgFE>U?4:˛,6B7kă/QmSW@-YXs c{[0I3 \bp"w:WWCI.mRgD;8q7&Ge)*p mKt@^KOX!Um-cto>Y䯊DK ȝ. \ϐq6+U16d'N$ *[*,{ I {W>s6`ny xSKMr@8LT4(?4̫X3YHM5}>iЋT 0#_1Mњxc Z:57 H`_M PF:V ~V޴8ǜ7꼈jw_75[G:d!n_V4W2 jݡrhi_t%9>+ʫ^ވ+DK5(6&jOA"HZ.y$\˖+$I\lh6HDG3u8Ӆ !5EfN u :K e=rq֫! SQ`|ƾ zgd "Sx>UBwޭC:ś"G xJJh dlYd5!Vme|^Tgu!At%a˱YFC.ÿ$!+`+#3̔_g+sIԮz6O¹y݋o%\Z}rJ"i.ꀗ-KVjn֚.”P H ph(/.t2.A!B}-_{ڳoZ**X@}x+dy?Y4aqFGB xb\;i W "euPBԃdb򄤗X{rcwX廬\SޱOWt@