summaryrefslogtreecommitdiff
path: root/src/mapsector.cpp
blob: 3eefa5410796ac5da4a805e98525116735c99b32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#include "mapsector.h"
#include "exceptions.h"
#include "mapblock.h"
#include "serialization.h"

MapSector::MapSector(Map *parent, v2s16 pos, IGameDef *gamedef):
		m_parent(parent),
		m_pos(pos),
		m_gamedef(gamedef)
{
}

MapSector::~MapSector()
{
	deleteBlocks();
}

void MapSector::deleteBlocks()
{
	// Clear cache
	m_block_cache = nullptr;

	// Delete all
	for (auto &block : m_blocks) {
		delete block.second;
	}

	// Clear container
	m_blocks.clear();
}

MapBlock * MapSector::getBlockBuffered(s16 y)
{
	MapBlock *block;

	if (m_block_cache && y == m_block_cache_y) {
		return m_block_cache;
	}

	// If block doesn't exist, return NULL
	std::unordered_map<s16, MapBlock*>::const_iterator n = m_blocks.find(y);
	block = (n != m_blocks.end() ? n->second : nullptr);

	// Cache the last result
	m_block_cache_y = y;
	m_block_cache = block;

	return block;
}

MapBlock * MapSector::getBlockNoCreateNoEx(s16 y)
{
	return getBlockBuffered(y);
}

MapBlock * MapSector::createBlankBlockNoInsert(s16 y)
{
	assert(getBlockBuffered(y) == NULL);	// Pre-condition

	v3s16 blockpos_map(m_pos.X, y, m_pos.Y);

	MapBlock *block = new MapBlock(m_parent, blockpos_map, m_gamedef);

	return block;
}

MapBlock * MapSector::createBlankBlock(s16 y)
{
	MapBlock *block = createBlankBlockNoInsert(y);

	m_blocks[y] = block;

	return block;
}

void MapSector::insertBlock(MapBlock *block)
{
	s16 block_y = block->getPos().Y;

	MapBlock *block2 = getBlockBuffered(block_y);
	if (block2) {
		throw AlreadyExistsException("Block already exists");
	}

	v2s16 p2d(block->getPos().X, block->getPos().Z);
	assert(p2d == m_pos);

	// Insert into container
	m_blocks[block_y] = block;
}

void MapSector::deleteBlock(MapBlock *block)
{
	s16 block_y = block->getPos().Y;

	// Clear from cache
	m_block_cache = nullptr;

	// Remove from container
	m_blocks.erase(block_y);

	// Delete
	delete block;
}

void MapSector::getBlocks(MapBlockVect &dest)
{
	for (auto &block : m_blocks) {
		dest.push_back(block.second);
	}
}
]e!Agw}aOP4L Oz1C~-cьr=a=3ANXGW8eo9R9zT8/|r$nQ9wMh>t-Ky-LOTfl?B72FhrSkI Mc=F%̓ L2{̥@x2]*s dX?`9P b9Z.ٞ2O8s:ەގN@~?):|/֖_gQULKܚ)Mtk4gsjvU.|Z[WVnl>U/>mmm^Ǜou9Z%gB_ؿm_;2,|o4n.+yee07"$wc8L]{2v6Է|+˫[ٮ6g[awd2PnjyP^EUw|D)"eEF€KŽR."G~XzW'—6ED/-}1 [d[[- /3Lj | \!ί޺z;\*}ke }VK\.O,'0^M;_^LJOIY*ŻE 9Lgl~Jx5 {"!<VE4RSyN4Fzڱs bݴx:bt0֢`-X! ǜYI|6%eg@Ի`[6|)g%9,JH>2M\HJ P80)ՅB.$JƸߦWap&ǛHr,j57r7h# h8zC%ZSlnךry#w vy\:^vHxU7`2QVC mX՟>,V+TW)_vs:A̔#  h^Aa(L_N[knUrMм3`)nGa9w&J,b/]T.Ubh<&&PG4=HCgMb0 E*ꋋŹg"GNe%)1(eFƮN3S^rҀ( 3}1qSh"qFˉq]IYォ R@LfoѹLkQ/w^X8"bJ3UoyS G 5h#@6 =%\ HXpɑ/6n;4JTҰ(j6,/aCd֝V9Վ,Ί8jB.ZM~?A{h@ @q 1g״vq.sC׻LuTe]ʯe?ʐu@e JG3Xume%Ï"]D2!R2*E#N30l2U2ǖ඗^x'qsZk2{+$-oV[J6wke{eVai-˯,/{bw,v'-bwf}cQmnёH"mR{?05gc 7cZ_~95xYVPI Th\Mo(r,^vay EZn)rai5}6`-ߒVP2Nx~`mU,G*AZʓw\Ag w`np;"$yYY0*)7K;aYWkV*xE1cc,dW(ϳ_A_]Y^ZtDuq+Qh W*NW6Adw ʈ&]*.40D̂~a#ȣ!U-߭tň;e,t)J9_9}9FsLVx!D~TON gՁJOXVV_Zy WbE< cV/ŧ_*Vi?RX'xؾ'3:I(nn_o֋{F3Z(uy~TEgýbTX!M }Jhޗ(0ޑwQ0I5x>Ѭ7J ՊI,/Y)K*s) "H)O5@\ a׉0zan 2* 6&b1u3F -׌zz13 A@K.nTH[yn+jZiK"K I d@ikX+oNWITybG=Kʻ]vWK )dWKeMXxO v*̳mĩAƬ.V}2.4W&@(axG#m-Ӧ6w&{5{2)hzJlJ(t"A6D7C !&BFߣb 3]G @[@Ǐp:X$zh3 AEaVVңQ(bulXˢ{S(wuQm2~ɭ1)'ML/4 `6F ]=Z0xՍ"CCw mA`b<*-un&Mc4^4Sdhd(Ԥㅶ12(&ݰ@@34Bunq0 @hHJ8@džfEQҠYb4g=ضGn=:fa h6Ժ9 Š~ a}1-kfH,x1kBG +>*[t-ž@Uzu&赸CE xmI2[I}mf-X 4+>04kK١V3n{MR|lYm&Ά0~T8}E$Ԃ Knjn4-F06E$Mɣ5;=md-"/J') ͮ+$}-m 6<""zLhTLJZw gic`JMnLJ FWAzZgݡ̫ܦNZL6 >rdhYƅf! ;Q`@?Ɖ*Mл Xt6MřC/C6& } ͜t#<\DŽf$м%0u&DFK2?ci5Ljh)ȁ-'A?z4j2V3Қ`lJ+%h ϓ O7M1:`L8I'B̉j"f =A4  ݏ.4u]8=/Ay:N>C~"tB{)>#j"t@0&B̋qF [V'B:OdJ4DhyTr>G]/a2K y[ë? 2dq9J+$p"W'!* HcݺӤvg /ޏ{R'IxҷWWAЍ^!o%}_nJ<;A5Q~L}WO?6ہO3e_ZRn >(xxt6{)NY\˪[.,ѕB|$1_Xh۷9@$F[TD*,wߪ f^ҕ7 `%ȒM3Zq~acYmZi Q9{l^=ܫWdcyШ f ~5,{jsP) iHXOגNƫVW? P[Ocd[DZ?Ogd^e;Ld Bhr '!T<](3%Ȓ1C={>he\1? F}|[ ctz9v7?wlCf?<;_,L'̐ːfV ^e?~otQ}il>D{y&h|Wׅe?7u+EgcGa /\E?41L]V?_YK|ʿ˕>omOҷ|?h>h}/*r 얿>\ nK/}_U6/_9;=Կ۷ן\o7WܝS,~a~_/~;w~ ?3w/}?>яэ捍|o>5s3owп/o_#/W~o5^I\Ódz-__O~^_~{O]_'ޯїw\/~7|~o_5w~᧿=#O?~a׿[G^~~c}[t {s?zV??W~{>7' owog~o+p'8;?k˿7~%?O|Kk;TO>/=|ˏQO}Oo_L~}_OM}߾~~{??sgv}_o?l/'?YM?ޛBu m$%Z #}R)KZL 3cK(QҢR(R!m(ʒ}1c鳼}?s=s=>Y(pfn}ўosސ;?xz+IQ?ܿԴ!!*|޽t$.'.)2[n6Pb{^>O碲W.I8[zYT0OԬ[lUX xH{f8_OW(9]e'^quB)/V9NZ i>ڐї/╽k e^~l32B{/d@j\릭?T=mRkM7y>R籖ᩝk}ϦlcJgJyït5Eܤz~.SOtD:k %?49F V'f΍ݩK/~Kݼ xj] N>fmxu־TagHkV4Ƈ+6Tr)zduЍfZT&l&ѾI[0i~A(8XVsi_ٲnr:o%oկYu1?,$N˼(=uiSӧIT|.qYSʼڨJma 3芼S5o|}>+lΧSc[֥Wi\]Ոu SfygnX{*sPѲY*7se ܵvL}4ܗ֕wcw{hG*G5}%{9I*CH{cuy//s-`%sU׸L;=#CQtC!ZT~&8>}7E9d*/7~?a:^5;% >޸2h낏Js6ZEXj(Ok3 {z$E(BDB&LzK=;ܤ">ُ9z2.g?X:]F5߁tgE?̏-.DfWheǻj1:nv%+DȈ=<'+7=YJSH_O >~Mĝ_>\n,ƦvYTdNGg~GsU+DR8*;=!k\mEijr,Wpͬ47YSxVTp[D}߃2IdF [ e D7DKn(:mm9vR< h4!ͯ^xzTWլ|{$*/ݻHCΤȥ? /۾ ?jXg~!~NYμj/kv-)ʲwM@N3YJߩ1)=25sOtH}+UQ\.r^~<덺Z˧R?W>:^FO&܌'^կʵGrbwЛb69 FspSש9'-5K#;l _A"y)wTHVp٘4Pf;ӱIC&]W=RDbב9JC'SxfM̳oogx6 q}(p (?O7doId-ˈՖQ-*Z?&t^M|E\bg.ceVfu>.Ǥ7 y>Z}IU4}\ ݏ mP:hgړ*&0J]s#ӽ5h]Āۇr5&%,|ԗo62 g%+=kpwPha۽%+h?jo Ȳ\p&/ݯiҶ}_g}9f֒5IrˎpY:IڱSyO˚ҹ~IíhrrU}ꮽfB<(sh-[#R֣m-;BVLœe\QK\66ZQg?»a}U-w\ϻzh:0Otly[r.~j{wZ;j錠mV7Z- >fIl' uYx=y nqz6YˬjKۄ|ng,եJ]{ wqٜ+Wó.&g+ܮ߬tIÑ)_O,;eFBOc?62w j||uL4U+,Ƃӷ6|)ȓ\Q7Zy)dOXU}.V|F4V}S}ٳ0ç鍖ukjm@Yܰ}/ɿ|^zeJW񻔮-h^׉-d~dޯ85:V}ҢkcEl*&i'Ɯx,YZfѯ zѸ|N$mN޹ܵie2Nk/|y3.0oeǒX238;tO~VI]HZ>-~rݠM޻U/-Kes6_WE}Yrf˂]MNQ'pM-H1*qKNoK l&=dsb/EO\{nJpVrM;ыzZ4f]9ˈoI&?ּ}-J)ڗgIy}:7N:GMIo/~sC+` lMWn7>|?tDP"E'm'd%2CRKV<)pT} E˥zVL8N(9Ҽrƒ+4"b= =>-UDiUŞR+V#睩K|ZQi?/Uڿ=yrz*ItjؒVݲ`Se1UMXk.z_}x댟=)JO%]'B3s~;Vgfش-t6>?`zΑǏUe)KښglLZoV$n+^eZ߫T {6<HdPБ{QO%O_=*.q~ެhw;o359zSs֠s {-iz+dfkǷv|Td„fMYn}ŔHU?F?':ג]-J~z?ކzsuۗ묛oU^bSfE)לMwfzyzz5%D?]C TeQ˝/l :g6 fX\b2=72q ƻK;Lp59^nBViox5ErDL-km.[sQ~תcUK~pZJN)Jgi^@>Nk}[U«[fJ[D|`%:Dg>vM n `iNsQw?ۣD{Ucs˗m>qI |tɛبԆ5K|^'Y#M+עOG|IG0vt nԩޱcrE464V϶oz"46Hg%UxOagI嘹, 3ysu\XYscQ2ISK44W57ȫڮ?$Bx?_jm֬C_t1 ѿ^њ랟/טR1.*@QU/YgG_2 %{NٝK-?2E(rpA͓Yaګ|oqwC)݅yi]Rīsh9b+7CDsDE8{ߟo.+AYn v k>Ip'w~kc CۃOoMT! v58=t鈗otFVƓ2$:6V^2xLLPzΗd_;ds;cmZ2o%6Y^)Wj2cmԃOORDvLiSy=[U'3}f[ÇǭI.^f8,uGbCC%X|b(5U^>:PurOm~ wW=$']7E)IuK݆n^~{<\IkwmD7\(SbO^_{Eȼx?B3[V?j#ͥi"rIeN*I+xB6YT~ヮ[N~d׾p~k4RJ;6)zJin~-+h/~4S7?)[w]Lx q;oT~}е s]r;]%6_h<"(6'zP i(pK0_^o\d}P3|F|7;Zmdm>U[\R*6YD\5nLܡ[y9%sfwv.P!=ͼZ=ՊV*+uF^,AS]k5;6 ״$ǒLE-_ez?~矗_[=>Hw\Gp?']??l(6zAHkJ\bGۡ_$H%c6^)[-^͞e$[6s9=G-ek\u֮]yNo#P`1++ tZu+W)9K_FN7?ʌUֹ'qY' gyn͈nHY戎B4L6ۣ!̓1TWz"t֙@Inb( ta_,۽bSHom*{ C[0gCYkW۟Q 6tW1􈸾qUqz }:bMo~4E:uKOݥ__ lX5~[ WeuJZ> Xh`^4;i|o_W8T~1Sw?Y}"U6(f}.Nn:[MlGCL5,%/󸐋2aw2᎖u6 `Ќ_*j_H1oNyԛxVv:P]Q3 k q $U7H$Mrv\O5+ zZɷhT>/+Ö̿m&>u: n%[\IF-36Ln(PLEmOÍ2CqS+iS=޴EXE!BP$y"g*T췾N=9{QHU>\vuNo-K+ڑyq2}?OųÇ/JYJ-_s/lwk˸M- ~Sn\寽-]-^aޯWe)]~x6o_|Lwx.,_7?6 _ 43p qO/$oH xTfN2ySv H?]4BWiIb7.>:EUSY`QAFz=irW/Αiذ/6K2h^L#h_"m[mmrk[>\̓r;ISwדqHOtD fM_A#%N]tﵶ۰%QG >cڦ@)ST6 ,u!k.o(2=bGgA~M[֧D&pOx«G_0^]2NB|w_+7C.과Q#aI %bem1/TZ+>c<~:M |?]?Er~`=JkEbE*Z.L/zN"9deP4MUfH<;V7h(?;z(MTO^N0eBu9GP CuŮuOu%&[f?~COy`Ҥ,>[356\0br*MNu; .}i ND%PD&rqG+]v$>8X;>饷wcP2J==xZvt`tFȟ7wU#g6LJ}=[4y*C]kDt]3:lTqKtG V NwjcaDv]h@j{ԮW{= pO랢%X7*k7i1ϝŭ{[ :5ģ}2'/vO&]b Wo]iYw1z'wUE N+qɿbϩE/}j@TBhʠg]N]nw(u'2Ñ]H`7z[8bpߚ3wmhaD۞;e{r-o?[/goCǿ{$ٕ]na\+YE9 _*D2fAM>(GzAyU@cp勒揟>ad`R_bcS}ay?ei[exzuwF/(r]W^)T~zvu!jh߿?矗_^+w>o\?M9YnE\\3ϣs;¼ߦGf4ь}) 7oмu7D~q֙ͼ5;/~-~Q]=%Byd<|mG ŖW^צJlJO埅3\ܯdɽJ 7w LOU~lo{&[}c{Up[.XxrwoJ3^LHKj4jlIc Mvi˧lW3{vX_ >nn<[#^n^5я4_'qˊ1-xTLujO>y"HkMdEs,{q)?z%ǎRH#ֿ:0ȕ}Y9K5EH[r3~Y^"38^܉뇚W$ YG^P[nK[s_韝=h(nOO RXP̈́zZϴI+u۹75H_VMt2ɴJ[͍fqvEG:f*h/}|tK 'O)LZA Jx GbnKK:i2)7}bIh y{ܶw!g(3__ӻQB畃S%= =Nɗl+ɿz;H:)0`ʾTK[^gK+}333u/2Թ/~OS|(7{ZgS5 j!mI~kKRg`.8]'Ώ9iMN-\io7,xrҺU -{A*35_/^pyW6]׭3o󧨛[6vP=:V%/7=q)s|*m6G;զJ&`&A0N{R_l:)xՆ{IDyNHd^d:/5O~[3Cf}꽢U$_ \:ABiop3$oV=1Op391PrR`"Lc]KmV[/hj{WlޒnV?}RkǫڛF7]x9YV܈%}kGM vxEɩ>Hcşr}M17nz^UQ֊o ex]^gSWjM5ݨY\oC'lZXw&xA~ףmY7W̜"~=;;^<7Tw|5/Sݢ{}B~a6 ] psI: 7uv!d$T{E.<تڨZkIuhnW/|K})6Sg߽+xޔ@.OK-V}Q?uEyŶ A+W?^No?'D)z? 's>heL1K#:wr+ -^"qJ{ʼntΦ;n Y>I֢)Sc, I!R` w^0)ϝ.%O.}C~zs[%G6]p9gR{Kd39N|~Z>+>?6-?k6gSO'꘶$>ew^Zbj㟶t?$zkE5=}/ERgfZ˴*{=gGxDݞo_97|IcgڸvoyDzogsF :5PpLUQaEb\n}Eک.:OpJwjwpZQE, /nWnM.Οt6^!:^:[ i)ەmu.9 wV%6?9u'TR;n[+2;[~VELz`|j3 H}]Ѹ/VעD\<5/lҚs6M_`Ydv%%޽{1ml|CecMyo*=Z?)WM湎W5 $3\wDqȅߪJo{db724N+RS;\hvay}|WT͌f/9ǿ/sIKuki,s:В`OjHq>Qk.T.m3bhgzV7{fs)r?x[ܲ^<󴍈/.t'Ac`uo>](?&?!7>#\iG{pU"-)[^9Tf\8dM6}ہ/|k^y 9^Mu54}Pko% #jю P;M髧Nm|fVdeBU=}\ܼG6=XձcBz +Ew]~/&tvi>ѸSzjr[ x}T͝j<ɝ6AK/䆓i:7ĶO=i¡f2K$aޕ^Z^Twt5.Cμ1e/nx-4}ů8?oWyi4_%i^r7|ZW;֨6hO{+^ Mj(=WK$Wڇń;gHz6̳W=Fu/jyۜur?@Q77սՙw\[I~jToZrYAq1ɞ`>ACK x\ZrOS%~+#>^8qri˥Fʕf)(!e}QN?ʓ։tܸGWޓ!Lzg{Tm5{6Rq8%A(խ+²mgʿy0|tG=+z:<[w+#^>.UOx3Z.5t=_Yڋ^ޗ.m+ň{K1Ne]Y{*pΧh[CmVb끔XnKq4\Gbۓ9=חns#'/MXu#.tvz's)<3$|VXPDùYJg-knZiQwGcsUJQSy,-6[VTP=U$eq*QA,ʽll Sdy5mmH/81%TQhCuq/REzEyۍiz3Kkмv_lɒj[?o{03Nロt =v/RHtL_emݱo݊g_=V k8Q/ؚldNndzyy5k-PL`mG5f~>5̭FnkDpQbKgTolo٬c(oE֐z:8zbQbv]KIQC< ԗ6|T2NY(dU~/".ܷ|PF`dO]Ʊ{t-KvC0M,WM`2/5#.U`G-^<2/pNw]qs}WV~ŝՁò-?{/̭kBzp| }2䣏O1+0h'ciM!"0f R{Ylw]1'giL[rJisB& d,}\#vGJ8uիOo6xF]{ݘ9.'^޵>>- eg0fw@QUnqS*8fW=QyLfFnVUw̓vS7S.}xN񱉯&$;*OM7(K~'jc/ڰKHii4mIy:`f +QV+Z~ݲmsW/9mxvi%f$wTG{-tUd~acY7oӸ_X-&hnNbS>Ǣikꊸ?s.>!kr@{]FgG[6Z/ZJ*>۝[k.Fdl<(]U2zsޙ&(.baϒ&!O~BDfƚ3x"ICg+Flsù j;xûܳV1kva}i@ׇC>;>'hM9A#͖}(цϗV#c(S'HzRlÍ`s\.ʭ[O,Xaf@n;6mzO\vZ'˶uw ?$H^TKI)w\]bfdcBN^p%F;gp[tO!O-~ >?6X~C%?>T`rYWI8mQ@ԥF'IukZ_G+̗:/V9KK}^"n9d2ZRC1Ӿ-&3ӫ;5ՏĖ\I4n'9]+eO.ZlzHO%4\L֊ Hu,nqzЊEUĪii&na Օ_{g~/;8 H+Um܂v߭7||=%-iYnr[FJUcovjk>hj$w!j]sٕEzV/(UiQDƟ(*jݪσʯ&i{1z k[mGd`T/:~4t*AXBҐٳ$9gc#&fE \tKuжW9=P% ۬NR޶ɞS!iuI7Q ۹җ#w/tYit;g-qTu>jNC2W\rcm]AvJת.{/d3<"d[iҥaӄ/2FkQZ;sEcf k};)/?),6-1|0X'+>KE/cd݉rַ±oMwlqTQIRHeFCn)榖u-,+,(7Gqs./ R~$߬K~<xpO[u?~֢Uj%~a,\ً, PÈJS<7֖ȶZY_wu˃gN]{(k#E2>_][el/xV!1ϛƙW ?GB`s/*zn:kseL霥i4;@39v۳9-Q}t>Z%!>5~?A䳾Y;yNyͽCJWz*F'ok`Bk,N, }Okf֩p:ɞ%)ڴTs{sifE_"6xZ{{ᒆv}Q$@UXm:`q۹[Ѵ)ݶ9Sb3JmOVvK[+pqCL@WR>[MZfxiS[D9]Dpdž ^jMuރKqo",TA<%mi33Bpx %fДЦZSv C6A=zL.w.J]Ax>i]J3 vY䕰[lD}+vt_t )^}+`ԔO{Bvx~Ŏ> j^Sh,j{%;K$'Kb =Ӕhd[ᶅ}zO-Ό~0`'?Ԣ'v?hdtnI8Jw·"VcIIJl]UY?)s\Y[ fZA;^iKvR>IsƷ(SYn8xg9yQKX?0+cMkϲ5Mj2R{]@.E]CxڹhCs"?wfoQ7Lr(UXenqla]tV55h8'O.p ۙQJ^dNv{W\mWVN_Pab^B8>E /Zl^N/WUlJFT/ʭ^Q49mѳz߂ls W̖yBW; ,,usZV^鉰42['ٷdKUaekf#x2$91?)-ݛZ9ܚ)}飲E5mkkG͝f\io?,~(9{FD_$Y,f՝@k8m)Jޞl)Z(w}sBkkzWٵ4Țxl.zsDKTRz_?Rn|sn[B?}ն<$uZnLݖOSeޱknedgj?/_*m͙݁ߺ$ˎ[p!m]C}AkPyţ.C KeZ~Eog]rqҏL(^ҺUuϹַeWl۱$Q/l`{WM?ƼslgLVo`I[=}S'-*QX^u 9b:Xbaoy9wN3ڷ_-W,9o[IImNY#z˼U}xrUKKv_c߲5A&Dt]O5=f1׺Rt']K؝nbNgT-HR$|{3™h*wM<;z{vݱҘYZUQ!~{F2=va)E)R6q4JxTUǼYCU]ᣳʏ@)d]V"])x"]KwD\c jK5!ӘoE{Z 4Wec])^ 8oOXEorGA-Dox.ڍH"9{2}\0݃ 8 !EѸHh ~Jg-BQ`d0,0=DEdt*; 7F xM"~1\*+`w*ΏHE[GF-!nO$Ok Pã̷.j h!Nb4dx FAN%(_7ǹzS)dc*xw˖?cSNy{]iXkwծǡ`Ԍj~o_Jh1 Ax) ~U`]G% |~jlAx32d@FAh*>6#0X$Éem0Ea~ʠܠ"@h@\`L8"hdxMY]f I(Hzũ *F p$:薍PdI8/  Yɠ0.pP F #LB\=(i GdDP("d K#RWKGi TcěJcD0LJ&H[Bҧ݈Tx)~X. dP@yq/ #@Kڑ 2`١/2P4ՏHfE4Hu!&HGQ`PfL=4?3P*`ʕ<rPQ$$s3LLL.t SV1F$( 26n͘ˆ) t4L, dS t_*63SC!BL4mІC(NAQ~аƉe]L Pfŀf )XE@l(6f:B4>A(ºA",QPly60k)2nH'88Brrc(\\9 jB`B+, jJQB⃉` ]2-8@#e4%@2Ts"mؑ R@`%bF%2baX rv@pb"\Ln/!x>"_B³ ٗI d TcY6B~=Y8`( ِ#/o%P*3R .*н2,ܐLjMjLh#ʇB6QAqаC!2 4&q#ȿ. c\A0aJ+qx</ M= b?v(i5u1aҘtuF5`q1 weNnX9W3΀ bi=! 8"C44kMEG$?|hnznqc~B=@SZ/0kCi*#` 0c 9 q*,WBD#FB-9 PO p$?Z@xR0 (Xc("Dodn`z~a؈%l( %@i- d TJ ; hCzƢ‡L*;j~  t)CȄ1FJuuYs|<awhk&uݟAGc2@zf-1hS"ꏵ5xDDLޏ t GrfOL,];e^FF_3;9{F_Lj`/ aH6+7|e l+,EskN_9j~B`yΔ KF80HIH4bGd 3F<78C7h:(A0piU '&Eք ;3Vh43H-EAN$FR^.8*\lȪduvp# #-CX <(P o"@F -^X9E0;tPtdyLH B@!ΓBL/PNFHQIL$dQ.`eOcBPd>V!t2>v 5 EŰOf/V,)}@ T S 0fk1F"fAʲ%@3 Χj2١ R '#NCAX fwnc,>1{''<0 '">LgD}'kT=TVT: CŎ85+#6I) bI.@kKѓ@0b:K* gIrlZo4?ZIdaD2@uU&¸i@d9rÏ0s)&G@!3aJ9p/V*,Z{EX~rT1,hvM1RUڌ7szʌƈm lE?!sسDZL ]H`X[,}\ߘ- c-B%{H/a&,=Δi.\EÀ1 "L<#0!~oE5EU1翕: WT!G14R T7Mg ǟ ulVBxkf`Ps d„ǣDxMt5aTF6@ xL3]f?y  SEv6D uQn- VSm ?}l CBFt*q6p )`!Uj zdtm@0c1.0g %iCfVd,@H7El&FM  :!1 ق$WQTdFaXV,8(Y&ݸ\h-j;cE> 9YٚYY:[YB!c UH@cX͔6P,I Q_ re!gMIO0Σ*jÿ`kHG2P޾4k83Ff.t c^@ s#ӞĢvq14jD0Cb2B`y  ,af?$pS@ |p'POC1 >$>#À„®1h`ehldikd-ďL.~F29?jQ ǂn6,*c*Jwǩ03ǬFi1k587(-4vm[elI1H=; Ј*MH!rHI !F3h4 #"8>R5c5pL,O"F/0XBH:ktd'UYYkP8=;Ősg9A x)'brB0or(MnZ̰]A1PQBVCGoQLe0 \"óU)Wڌ'Q}IN#8-gN@lgCYyC5q,0'8~1Ggg-_0~f }i7 -k04꿆 /—xeݟٍM ֎,BYY!9e c^u-XGV8H%c5BxG.1>G6Q 1=lťľ1@@hE腅4 oNt⨁4طÑ'P]i_`vz)?;=&ӿ{a*H[F>'%5/Oiߐ TD2%2en**K>* VihpZp B1qp]%T KCFSe|ɮIV3 0p4C~>pڲ v1O`a& ~8pH!cQ 94H . GGtGxGg|l6Z[Y1B2eB: