Slime0: i drew a picture of the map during statistics today =)
Slime0: scanning and coloring for the heck of it
ThiveerTM: Ha =) Can I see it?
ThiveerTM: ah, k
ThiveerTM wants to directly connect.
ThiveerTM is now directly connected.
Slime0: here, i dont think i'll color it actually, not worth it. one sec
ThiveerTM: hmm... it works well...
Slime0: works?
ThiveerTM: What's the thing on the right?
Slime0: oh, that's sort of a cliff sort of thing
ThiveerTM: makes sense to look at
Slime0: (ah)
ThiveerTM: hmm...
Slime0: understand the cliff thing?
ThiveerTM: I think so...
Slime0: with the "druid" rocks at the top, possibly =)
ThiveerTM: yah
Slime0: there are also cliffs along the ocean at the right, those could be used for something
ThiveerTM: The road doesn't look like much from this angle...
ThiveerTM: it doesn't go anywhere...
Slime0: oh, yeah, it sort of goes down to the docks below... they're small docks though, that i drew
Slime0: with a fishing community there
ThiveerTM: I'm wondering if maybe it should go through a pass in the mountains or something...
Slime0: which part of it?
ThiveerTM: I dunno... but it seems... ah, whatever
ThiveerTM: mmm... map in general just doesn't quite look right... source of fresh water with the town way away from it, random castle... mm... Ah, whatever... now need to make rooms and places and stuff...
ThiveerTM: er, points and locations and events and stuff...
Slime0: =)
Slime0: yup
Slime0: i was thinking...
Slime0: the whole thing could be sort of boring if we didnt have some major conflict throughout it
Slime0: what we need is some evil guy intent on destroying the world, and the game players can choose to follow him or be "good" - and we can increase his power if no one follows him so that he can be a real protagonist, or else it could make the game really interesting. 'cause without something like that, it could get sort of pointless - there's no incentive to help anyone
Slime0: uh, antagonist*
ThiveerTM: hmm...
ThiveerTM: You mean, have people at the beginning choose to follow "chaos" or "order," or have this evil guy go around recruiting newbies?
Slime0: sort of, but they wouldnt have to really make a choice and hit a radio button for it - they could simply help out whoever they wanted to, that would enable them to go around as spies, or change sides when they were convinced they should, sort of like real life
ThiveerTM: ah, nifty
Slime0: then we only have to program the AI evil guy to recognize whether someone's helping him or not
ThiveerTM: aye...
Slime0: any antagonist ideas?
ThiveerTM: or just give people a generic good/bad ranking related to their deeds..
Slime0: yeah, thats the basic idea
ThiveerTM: you, who he'd be and what he'd do?
ThiveerTM: hmmmmmmmmmmm...........
Slime0: =) wizards are always good for bad guys =)
Slime0: dragon maybe? dunno
Slime0: dragons dont have much personality
ThiveerTM: Aye... I'm always partial to just the generic ethereal subversive spirit type thing, but that could be weird... hmm... Some kind of master thief could be nifty... dragons, wizards... a weird demon or monster type guy hiding at the depths of some dark catacomb to the east...
ThiveerTM: who sends out little demonic death people or something to do his bidding...
Slime0: oooh i like that =)
Slime0: we'll have to give him a name
ThiveerTM: hmm...
Slime0: George - nah
ThiveerTM: Bob =)
Slime0: =) that'd be hilarious, except no one would get it =)
ThiveerTM: heh...
ThiveerTM: Zolmordt...
ThiveerTM: Veltrig'tn...
ThiveerTM: ah...
Slime0: sounds like "voldmort"
Slime0: where are you getting those? they're good
ThiveerTM: making up...
ThiveerTM: Dautregh...
Slime0: they're good, but try to reduce the number of consonant clumps
ThiveerTM: alrighty...
ThiveerTM: hmm...
ThiveerTM: consonant clumps make things sound more evil, cause they're hard to say...
Slime0: true, true
ThiveerTM: Drath
ThiveerTM: Droth
ThiveerTM: I like Droth
Slime0: Drath is good
Slime0: hmm
ThiveerTM: hmm...
Slime0: drath. droth.
ThiveerTM: Drawth...
Slime0: I am Droth, you shall die.
I am Drath, you shall die.
I am Drawth, you shall die.

ThiveerTM: Droth.
Slime0: i like drath, sounds like "death" and "wrath" together
Slime0: maybe you're right though
ThiveerTM: hmm... was supposed to be "death" and "wroth" together...
ThiveerTM: ha...
Slime0: drath sounds silly now
Slime0: =)
ThiveerTM: hmm...
Slime0: Droth. that's good. unless we can find a better one later.
ThiveerTM: "I am Droth; you shall die" sounds rather silly too...
ThiveerTM: Ah, okay.
Slime0: heh, we'll change the sentance =)
ThiveerTM: heh
Slime0: yeah actually maybe we should get two syllables in there
ThiveerTM: Dormoth...
Slime0: "Drozath"
ThiveerTM: haha door-moth, nope won't do...
ThiveerTM: drozath works
Slime0: =)
Slime0: Drozath?
Slime0: hmm
ThiveerTM: Drozoth? too many o's..
ThiveerTM: mm and sounds like elictrical shock
ThiveerTM: *electrical
ThiveerTM: Zordoth...
Slime0: Yeah! that's closer
Slime0: Zordath Zordeth
ThiveerTM: Zardoth...
ThiveerTM: Zordeth!
ThiveerTM: mmm, sounds feminine...
Slime0: true
ThiveerTM: mmm, could be feminine
Slime0: that could be neat, yeah
Slime0: aren't many female evil magical people in games.
ThiveerTM: hmm...
Slime0: Zardoth
Slime0: Zardeth
Slime0: Zoink
ThiveerTM: zoink?

Slime0: just kidding =)
ThiveerTM: hmm...
Slime0: Zarddak?
ThiveerTM: hmm...
Slime0: i dunno...
ThiveerTM: aye
Slime0: Zardoth was good
ThiveerTM: alrighty
Slime0: cool then. Zardoth = evil bad guy, living underground somewhere in the East.
ThiveerTM: aye
ThiveerTM: or maybe at the top of a mountain, who knows...
ThiveerTM: he'd have like this big network of caverns under the mountains or something, perhaps...
Slime0: we'll have to come up with something. Is he an actual character in the game? I think we should do some complicated labyrinth
Slime0: yeah...
ThiveerTM: I dunno...
Slime0: we can't really let him be killed though
ThiveerTM: well, he could be controlled by some even bigger power that nobody really knows mcuh about which would infest somebody else if he were killed...
ThiveerTM: *much
ThiveerTM: or something...
ThiveerTM: It'd be nifty it were *possible* some how for people to come and confront him if they all worked together and spent a bunch of months on it and stuff...
Slime0: true, that's not a bad idea
Slime0: yeah! but we have to make it so they *have* to work together
ThiveerTM: yeah
Slime0: we can force each character to choose between certain ways of developing themselves eventually... focus on black or white magic, strength, other stuff
ThiveerTM: yeah...
ThiveerTM: or just watch what they do, and put a perm limit on stuff they don't use after a while...
Slime0: yup
Slime0: we'll have to create an elaborate way of getting closer to all those things though, stronger in all the different ways
ThiveerTM: hmm... gonna be hard to put all these actions into effect, and have people work with eachother and stuff with cgi...
ThiveerTM: what do you mean?
Slime0: yeah, was thinking the same thing
ThiveerTM: things'll be slower than normal adventure games
Slime0: like, there have to be a ton of quests each for gaining a little experience in some area
ThiveerTM: yah... but also just things like climbing trees, throwing stuff, casting spells on people and things...
Slime0: we also face the problem of time zones - people can only help each other if they're on the same side of the world
ThiveerTM: that shouldn't be too much of a problem... the people who are asleep when the others are awake probably won't know them too well...
Slime0: well, for one thing, i assume we're not having any real "fighting" interface, right? just puzzles/mazes/etc?
Slime0: true
ThiveerTM: I dunno... you'll have to be able to give stuff to people, maybe you can throw stuff or cast stuff at them too...
ThiveerTM: should people be able to die? fall off cliff, drown in waterfall, get eaten by bugblatter beast?
Slime0: they should be able to become unconsious and wake up in some healer's room in the town
Slime0: healer = guy who heals i guess =)
ThiveerTM: heh
ThiveerTM: then there's the problem of logging... hmm...
Slime0: although, falling and stuff wont happen
ThiveerTM: unless there's some puzzle to avoid falling and stuff...
Slime0: only things like when they enter some "trial" that they're not ready for
Slime0: yeah
Slime0: so now we face the problem of having multiple characters interact
ThiveerTM: one way to get around movement problems...
ThiveerTM: is to have like a 1 minute timer
ThiveerTM: over the intervals of which you can do stuff
ThiveerTM: but that slows things down a lot...
ThiveerTM: hmmm...
ThiveerTM: if there were some way to auto-reload when things change...
Slime0: there is
Slime0: sort of
ThiveerTM: could just reload every thirty seconds or something...
Slime0: CGI programs can send things to the client which says "i got your response, but dont change the page you have displayed"
ThiveerTM: huh?
ThiveerTM: oh
Slime0: so we can use javascript to send requests every 10 seconds or so, and only get a page back when something changes
ThiveerTM: ah.......
ThiveerTM: that'd work
ThiveerTM: only be ugh to bandwidth on server
ThiveerTM: *although
Slime0: we could have "sound clips" for talking - you can say something, and if other people are there, it will appear on their screen: "joey says: hey johnny! what's up?"
Slime0: yeah thats the problem
ThiveerTM: could have a chat for each room, that lists the last things said in the room...
ThiveerTM: cause troubles of people moving around
Slime0: we could also put that in a separate frame
ThiveerTM: hmm...
ThiveerTM: could have one chat thing for every location, and then allow individual communication...
Slime0: how do you define "chat thing"?
ThiveerTM: chat box with history
ThiveerTM: that lists things said by people
Slime0: when you said "location" did you mean "point"?
ThiveerTM: reloaded automagically every 60 seconds or something...
ThiveerTM: no, I meant location
Slime0: ah. hmm. we'll have to make locations smaller though
ThiveerTM: could do points...
ThiveerTM: although that could get pretty messy
Slime0: like, we cant have people talking through walls or through long distances in caves. but yeah, what you said.
ThiveerTM: could divide locations into rooms into points =)
Slime0: =) would be even messier though, i think
ThiveerTM: mm, guess so...
Slime0: i have an idea, maybe...
Slime0: we could have people allowed to say things directed to other people, if that other person is in the same box as them. That will go in a file to be opened the next time the other person sends a server request, provided it's less than, say, 45 seconds from when they said it. if that person has moved when they "hear" it, then it will tell them where the "sayer" is located (if we can do that) and tell the "sayer" that the other person did hear them.
Slime0: box = point, sorry
ThiveerTM: hmm...
ThiveerTM: but you'd also want a way to say things to multiple people
ThiveerTM: mmm, could just do a bunch of those
Slime0: we could have a text box with a multiple-select box next to it - select who you want to hear, and type what you want to say, and hit submit.
ThiveerTM: yah...
ThiveerTM: problem is then there's no generic chatter, so you have to already know people to talk to them...
ThiveerTM: ah, just add a "send to all" function...
Slime0: yup
Slime0: the select box would list everyone in the same "point" as you
ThiveerTM: yah
ThiveerTM: and can add a whisper feature or something that would pop up an alert
ThiveerTM: get attention...
Slime0: maybe we could provide some magical way of communicating from a distance or something. or we can allow people to leave "notes" for other people that they would see when they reached the same spot.
ThiveerTM: hmm...
Slime0: eh, what i just said isnt a priority, never mind for now.
ThiveerTM: could have some kind of magic communication center at town for sending messages...
ThiveerTM: alrighty
Slime0: good idea though
Slime0: we'll think about that after we get the regular talking worked out
ThiveerTM: zoup
Slime0: if this thing gets too big, it'll be a problem.
Slime0: and if it stays too small, that'll be a problem too.
ThiveerTM: so... it's not possible?
Slime0: dunno
Slime0: it needs to be easily expandable, and we need to make sure we get enough people to play it that they have a chance of working together to solve a problem.
ThiveerTM: aye
ThiveerTM: whole map is arleady might big...
Slime0: true
Slime0: maybe we could put in AI players at the beginning, nah, that wouldnt work, too complicated
Slime0: maybe we should be more careful about the borders. then we can make it just a town to begin with, and slowly release more parts as people join, if they do.
ThiveerTM: yah...
ThiveerTM: although then expansion could be difficult, cause so many rooms need to be modified -- I mena locations need to be modified to add more map stuff...
ThiveerTM: mm, 'twould work
Slime0: only real problem with *that* is that we have to have mini plots until it gets big enough for, um, Zardoth.
ThiveerTM: well, probably will need sidequests and minipuzzles and stuff anyway
Slime0: true
Slime0: sounds good, that's the plan, i guess...
Slime0: we could sort of *introduce* Zardoth in a conversation here and there, maybe, but not really do much with him until there's enough people to do so.
ThiveerTM: aye
Slime0: this also makes our job more feasible. it's easier to create a town for now.
ThiveerTM: yah
Slime0: To Do:

Create/map out town
Talking thing
Create Mini Plots
AI people

Slime0: oh, and a prettier interface, too
ThiveerTM: heh
ThiveerTM: probably need some kind of theme image
Slime0: yeah
ThiveerTM: also need engine to do actions
Slime0: what are we going to call this thing?
ThiveerTM: *shrug*
ThiveerTM: ZardothQuest, hah
Slime0: action engine, yes, that will need to be made.
Slime0: =)
ThiveerTM: Tides of Doom. Adventurelight. EternalQuest. The UnGame. also sortsa weird meaningless names
ThiveerTM: JKAdv
Slime0: dont understand that one
ThiveerTM: JohnKarlAdventure?
Slime0: =D
ThiveerTM: hmm... probably need more plot for title...
Slime0: yeah
Slime0: of course, there's Everquest, (a game which i suppose is similar to what we're doing) which doesnt tell us anything about the plot from it's name
ThiveerTM: well, it's an online rpg, and thus a never-ending quest game... with mmorpgs usually the plot doesn't mean much -- it's all char interection...
ThiveerTM: I guess that's sorta what this is...
Slime0: i suppose
ThiveerTM: hmm...
Slime0: i'll have to teach you some Perl somehow
ThiveerTM: yah...
Slime0: not that i'm the expert, but, eh
ThiveerTM: some of that stuff in that "simplistic" engine thing was pretty weirdlookin'...
Slime0: some of it is shortcuts
Slime0: it is sort of weird though
ThiveerTM: is it "chomp" that eats up file-matter? =)
Slime0: =)
ThiveerTM: hmm...
Slime0: it cuts off the last character in a sring, which, when you're reading lines from a file, is "\n"
ThiveerTM: ah, k
Slime0: might actually just be cuts off whitespace from the ends, or something, i forget. does the trick though.
ThiveerTM: zoup
Slime0: but that line involves a shortcut too
Slime0: it does the action to the default variable, which is called $_
had I wanted to do it to a different variable, I would have said

chomp $linestring;

Slime0: otherwise it defaults to $_.
ThiveerTM: ah
Slime0: important variable information:
Slime0: any variable beginning with $ is a scalar - that means it's like a Javascript variable. it can be a string, number, reference, whatever.
Slime0: One that begins with a @ is an array, and one that begins with a % is a hash, which is like an array except that it has key-value pairs, so $myhash{'name'} == 'John'.
ThiveerTM: key-value pairs...
ThiveerTM: don't get it
ThiveerTM: was $ supposed to be % there?
Slime0: like, an array has elements like this:

0 - John
1 - Karl
2 - George
3 - Bob

Slime0: well, sort of, but i'll explain in one second
Slime0: hash is more like this:

name - John
grade - 12
gender - boy

Slime0: the numbers aren't numbers, they're strings.
ThiveerTM: ah, a hash is a structure
Slime0: i suppose =)
Slime0: anyway, the reason I used $...
Slime0: if i were referring to the hash in general, I would have said %myhash. for instance:

foreach $guy (%allguys)

But, when I'm referring to a *single element* of the hash, I use $. That's because the element that I'm referring to is a scalar variable.

$allguys{'thecoolone'} = 'John';

Slime0: see, it's weird.
ThiveerTM: ah
Slime0: whether you use $ or @ changes the "context" of the expression being evaluated. If the expression is evaluated in "scalar context", then it will return a scalar variable. For instance:

$arraylength = @arrray;

Since the left variable is obviously a scaler, since it starts with $, the right hand side knows it must return a scalar - it's in "scalar context". Arrays in scalar context return their length.

Slime0: there's also "list context", which tries to return a list, even if it turns out to be a list with just a single element.
ThiveerTM: hashes the number of elements?
Slime0: i suppose.
Slime0: Consider the following expression:

($myname, $myage, $mygender) = &allaboutme();

First of all, you should know that & indicates that a sub/function follows. &allaboutme() is a function. On the left hand of the assignment is what's called a list - not necessarily an array, but a list. Lists are denoted with parenthesis and comma separated elements. Since we're assigning to a list of variables, the right hand side is evaluated in List context. That means the function knows it's trying to return a list, rather than a scalar. It may therefore return an array with the elements 'john', '17', and 'male', which will be assigned to the respective scalars in the list on the left.

ThiveerTM: What happens if it returns a scalar, or an incorrectly dimensioned list?
Slime0: if it returns a scalar, that's the same as a list with one element, which brings us to an incorrectly dimensioned list. Extra values in the returned list will be discarded, and if there are too few then the remaining variables that would have been assigned to will just be undefined.
Slime0: got that?
ThiveerTM: yah
Slime0: ok, let's see. The file handle.
Slime0: file handles are typically all UPPERCASE... the only way i know of right now to create a file handle is with the open() function. open(MYFILE, "mycoolfile.txt") will put the file mycoolfile.txt into the file handle MYFILE.
Slime0: then you can read from MYFILE, line by line, with the angle operator: <>. For instance, <MYFILE> will return the first line of the file.
ThiveerTM: ah.......
Slime0: and, if it's not assigned to anything, then the string of that line in the file will go into the variable $_.
ThiveerTM: k...
Slime0: one more thing you should know...
Slime0: the expression

$mystring = "hello";

in JavaScript, that would assign "hello" to $mystring, and then return the value "hello", which we could do something with if we wanted to. In Perl, however, it assigns the variable and then actually returns $mystring - the variable itself. That means if we do

($mystring = "hello") .= "hi";

then $mystring ends up being "hellohi".

if you're wondering what .= means, it's like +=, but the concatenation operator for strings is just a period (.).

ThiveerTM: okayyyyy.............
Slime0: yeah, strings work differently than scalars when it comes to operators. In addition to (.), there's the (x) operator. "hello" x 3 returns "hellohellohello". (I may have it backwards, it might be 3 x "hello", but I think i had it right.)

For strings, instead of == you use "eq". You also use "lt" for <, "gt" for >, "le" for less than or equal to, "ge" for greater than or equal to.
ThiveerTM direct connection is closed.
Slime0: you there?
ThiveerTM: er, yeah...
ThiveerTM: slime0 direct conneciton closed
Slime0: (i didnt close it)
ThiveerTM: hmm
Slime0: hmm, i hate that.
ThiveerTM: dirty line
Slime0 wants to directly connect.
Slime0: =)
ThiveerTM is now directly connected.
ThiveerTM: less than etc. for strings refers to length or value?
Slime0: alphabetically, i would assume.
ThiveerTM: value
Slime0: Oh, boolean-ness... this is weird.
Slime0: i dont think there's any real true or false. Instead, anything that evaluates to the empty string "" or the string "0" is considered false, everything else is considered true. Note that strings and numbers convert back and forth, so the number 0 is false, since it's the same as "0".
ThiveerTM: mm, that's the way it is with other langs -- 0 is false, everything else is true; just have constants true and false defined as boolean 1 and 0.
Slime0: ah
Slime0: oh yeah, and i think "" is the same as the value zero when forced into a numeric value, so that's the same.
Slime0: all 0 is false. all else is true.
ThiveerTM: yah
Slime0: ooh! that reminds me. perl has a couple of cool things: unless() is like if() only it's the opposite, that is, if(!(condition)) is the same as unless(condition)

also, there's an until() which is the opposite of while() - same sort of idea.

ThiveerTM: nifty
Slime0: i guess that's enough for now
Slime0: you know what i'll do to speed things up?
ThiveerTM: eh?
Slime0: i'll have a file containing a list of names, all on one line. That way, the javascript request sending thing can have it check that list first, and if the person's name is not in the file, it'll know there's nothing special for them to see, and send an answer back immediately. But if their name is in the file, then it knows it needs to check if they were talked to or something like that.
ThiveerTM: that'd work, I guess...
ThiveerTM: be weird to modify
Slime0: could be buggu
Slime0: buggy*
Slime0: we'll see, anyway.
Slime0: i'm going to go, my fingers hurt from typing. i'm sure i'll be back later
ThiveerTM: alrighty
Slime0: probably not too long either =)
ThiveerTM: Farewell, homind.
Slime0: see ya
ThiveerTM: *hominidJFIFC     C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?((((((((((((((((((p 9vPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEGwtq,+2*;n }iH$tX[xW/R(cKuskN41BXМg 9Ybp*ij;8v+jStS_Ԡ{R1Ktʃh=?MK"[L? ;OWӼ? %Vcyv,s#'j^rMʔ _ܻdqQ!YU~ lgӊR՝9R>SxDL`[T>Nz[[Mwd"#xc?\*nvg88ʯc|Ɉ&, [`cB*ܣ*2@=֓×xj;^Ln-Ԇ=l͏ 5oJO.Cn'oV!Rk v6ͧ?C\o\/nЉ,,1|;fDl7Ks'% y2ִhHVDEVS@P85Ok#]i˴mF]8Ȁ}rv PeĄ2&" xCuQdZS]

4rm$}]YAgD% *p@@՜7WLig:H`G|G|/t>ѡ.(1L`0<1ǩ>'{CEiVf[Dag'NBN?5"%P?9 c{cל~7,|3JcO0L 5-u|=mـڔp7+'om >mpE$D0mߐM6VH$ = 5nB6'|<b/x( p$\3bXy9w?kx֋!wCܢ(Z;&C1`@=v?ZnaͧNHIdbpF+?|ewsz?ߊN3 1"4$j9xҼsaQ2x6cyfrALF2ttI#n; n$1HU9<[xk1Ėut exT}M/mF<@>,ݬ]#AU.O nǦEkkt"}Rͯ->c d)r~[Ob4(UT@)hO(∬u>#Wcx—ɽ@($I@8' և)r7D\F}MYx輳Ga%ܦ"1nr/ O٨ځ/?<bm#r3끏i`.X6HK!`cT?jV5ǘ?x-Ͷ0 G3u TVug^!TaB8[QEQEQEQE>n94Q@Q@Q@!`Z 繠lG($89: ( (f 8%W =('a <'MS'K;GE^ dl\TKDvA"NOcR-mDJnR=EgizzԱM=JO,8Tjs~ytOlcB;ըY벌GHX.H9MsZƏ Z_:g3-j 8S899o+OuO7د5-ͱڮ<;# mÒ9o5k+cӭ3}z v+u{`p8|SqS1OkKk_jzu§̐(8>Ꞅƀ>Pl {i{5ts̑FG&7 |ٯM- 8P.H3ހ{REP*Ĭ qoIot'&kkIX UqRC rdgJ(khno{{(%p0ku/R߳υ[[ܘoumt:NI¿%f={ I5eZ4`}1?y+_ПEYdߍG.6x#dcf~riio?aVwٮl7QgY('Nz 1jOcdfVٗ?g56(F> IE %p3q]W>!W?\L_@ZN*$Kn'=;?~;~=#kw76=Ž{#BP2/k_~:/IU.vmIcb( wAfKV>u>,Y|NVúxŶTsjP|5\Ȉ[~2(,SJ O7uDƙuSZ_A$.&W(FA#8A-|F=gš_1xQk>!m4 5# nfRw*<R|lOxM'iF\I.ʼnKУ9w-~_7ï>!bϋtTE"@ M E~^#uMKN%ǂ4z s$([VTH6siv.p ϔ AڑUE$iRUKxgֹ?<3.I|~עxL7##1(̧ V5__4M-gܕ[38Ҁ)QOh¼eWl:d\0* <bLu>=5s^pBKmpYrVw? DNƏi*(jTu؈7 qt8={0Exs"@ tYQw|nƒV_*/xH5)s^>&t}OM,`KIcp!9%`=pMtWV6Wјom"aX=5=!k_߂V֊ pyЂaA@ljm'˨KXpH $<Oߍ2hV!2|cδTO;CZծ2*mG$((((((QE&Hxas*Z4ۆzPEmd}0\(X29I5[W i0Y.!\)U_\5z5fU|=jLmg!IS΀2~wS[jϐ0$I#Sq'5sD{{ 8?DZ_5tKFy% &4x<I?Ҷ|AI%ՌьmAC<PYCwrʒK9!wۏC~ή=nu_?ɔ֥:6$g keyb™.s׀O ٵW3Mo .㿵H#x"+Cjq&>k=OIڧnn؜]X.3nF ~?_Z>*ҤӼcki>C,x AKsg5߄p;pnnQH51c)c>ff9 lIK/~ pl#kzd1Z4VX$[Kf𹑦21mT|(Oς-5"|CebSLkv͖OP~ϖg~:x)tOY\_[" NkqFC~ʺAS-AYFK2GxԲ!k}`ȭlAQLW9\kw}(v؄o9 VwTĂ(iw3c }9?>"=OzRK?KG9v&Wy*CcIIyɥ DrHB8z@,XIKGy-YെP+H@O''kn}Y1=N_^GEzn~-}b;[;((Q*GU(,PFM"(;\\[B7SQªROJ~.4ƚ׮X̑d+@)I5&mC].F}zyN+uT32|,-[\=-ihĒE Jnjy̍[sAvߥޫ_kUIwz8@ 2vƊT)])B@όaaHc6#^ F@s]vڭ6Ѥ !Ttb>9> ᯈ|i}xgrxZױKr$0NBE}IS)~i}# |6?w}ݞsl,,4(.kh# A5U=IfgPdqt#&ǂՏV>Wyoq9@ ʬXd<ם~4O#ϖKjJ][p)|k"7c$)E!B̄`{P7Rpo4mq=KAd 9*+\r0ǐ:zV c&? JgpgŎ:6ځ86 epÒ9=o'M/g} 䔪{\,`t]XEzk)ac{|3| o=-R-k"GUPQ{ۮi{X刻̘e^I=lt'u-;V aD߷~i+Hdg4۷04,9Gv?Ajw4|dFG_LåJ[IUPQ=-f#lL@FH1sV$t==0h4P3JfI)QEQEQEQEQEQEQr?EFH(қ&yyTgҡiH4Q nAЏƥN"lqPmz=>anmoHm: dHj<ऎ}:Њ^i4e6#7б19m(;x2/]6 0F1ԼM2Ejk9cӴxF{qf'@#X8Y:G^U?D}z hV[Eng(Gg=N8߆sO?9l<h"nQ.;N#q Z>.|smG߲>ݞ,u+k-6viAiNv#ؿe_r<]Ҭy,ZhԙD2frztq|23Vp<URIqO>F8OzтzhVRZΣ14#4_̀z^u <cx4T~yC|D~"=džgmow0S3K*ʙHcAƊA9_3*kPa>q=s$$:(es60 x^5վ!_2Vå-t;VFv8P8P;xß;4N%IҴˎ 羜E3(P2sj|u՞=O]$wVđEu#;|UİȻmȭ3|T>?|C{j_hm=%"u&F4뵑 d>xVm[DbϵW'b P*)F=J0~P@43v[tP;=i  ˟ޖ6V@ɜGjuOuaZ)FKӊEdP1!lݒG4*432̥t Qs Wsf c p{:omf=٘:>p\֝so]-e]Gu_!qJӲcMCVKmu+!E#dZoͩ!w5-Y .۸"$)=k|JEZ^wdxcfJ8,>ڽ,*)+gr~k>$IŌq8"u%d\Jy~$|?Mi 1O-'t6Aʰʰ X~ 4Mi>|LT?VP嶒aV 1﨣=zё|QE'{┞ íu4owĐ>;*%-4FV ^Mn{{J0 Eq? 1~?ӯoR}|5D|kӿg;orOix|=w$ky$7(v/"vv kOgO@4/wkV1Ho/a8b # 1S(׻Vx ģYVk񦸒PҪ@0f@Q%wHоxV"w"[DF$h?5҅ v@L@==kI>x)kB$7Np u$p7kxO+׵;-+h۲I2Hv嶰POjovA}>ðZXiGε~AId8$T.q1X%_ٻha&75(L];< sozOAt $^𬲿 ~cQʳ Ԃ0 ?*|槩㍥r[ii+,LH*aZx7Ӯ.-Tk,̊0703RC<3>!BH$GadSҀ"rݼhs* zH A $)h5 w'&`\+$,cR2z dparzoJX*3 HE|fsyRSړ`'sO`GJ\`F:yH E.qz1U;cCѮ5-^ JZGq8WpU?1a\Ëþ{u=ogPkeFڣorX /~:Pﭛ/dOאFnL.wHT6p@RmSҾ}_ &y x hZ.iW,OEe #V*+ 8_?ڷlW~3\ZeK̥gP3p͒rzۢHp9T|C-z?Cih-^]*FO<Ó݌'uɯuQ+p1W? ͥlO,G;? 4HL΅ .Che<$$ם~V_|.s*ĺ[&gc}Ȁ,OsXJv`(>@ db61O `c#*~`N֩_ e[;I23>pmPV׏Μ6b?TlBicۜOG>er?PB-Rit飞}6hؑ$sU{)D a;=Jf G3@#l>`J:dT6ʖ|$<oxo{ kqq-p?$z_K᎗y{jJr V|cӁhjVҾ #,׬Ժ-&qRbU0O͸6SмxkOK}?NXm uf?~fc1$MxO? ַ>dZ/Bch<瑛78B@+?E@"3yj w港~ #[udy"mt{P V!;e!E1@/(㵲;XTrM|ijz߉/<1-tI2ZZcIv`6 s[.vji\o{w)('>xfuqZ-ZΞ<Ќ7 Q~F*IQ _ f |Zk,&.u; cdİ"XI"ag*8X[=H=Ck\D0$ ڧM|ZNH"*j.і%*;dN$I4 u<@ G9(9fVg|ҤG=N##mךŠeLv9y\HAR0biπ}͖bFT.\($3J*OJ ^~6|M"hWurJr;7),q@Ꮘ|f5Ow6!bU"1C xXmŀ9Ŀ K 将5S>.㑊e&}H,: |3exK+Ŗר|?oyos%ͪNN ;AjuS\M.q,lfm"!#*ÀFI'`Cm.VCsͼA_%3aa{"=ƹ|5` '5iÝckN[C`B%.rmPC}mG]Z.11bHY2pۦHȖ~K1, VĒI'z,+'^ájZ|wQǧCm{/JY[kj #L\<\HĖ`<'G5xgΙ:}M~֊QЉ*ɠgE|Cɤk|WV2A2nRU)Ǩ {r~𗍵O_ipҬxsY5K]ސ4N$`nSpEiR;R 2*Z(?mѼ!>7E sVu[ =qP%!+"۪Wiqq#85߷('Xm([Yt$tx=$21qЫ3@_z@-M6ՉFԐ;w``M$&ekKugaI1r:jeٕv*;I^xIA#3RPEPEPEPwvY_[G4F42dt#X A^aw=^7'u=t'šϠ)0NNPN2hm ^K\mxLe)+sg:.b PdX<GU]5_h!OFE'F|XBpq[g?4{q݄]+Yfo,$8b h_Շ~>%y|MO_YѴuyrAtB@X!ڄ<]kOWMeow$~}U`12k}Z)k >%&xt$q8|#X0!SA_9o!KJ4m^XehG<5y:.;@$HAoq;acR@# Ӿ+>.|z4oU9a25ߓi'+lx1ֱ7,?B%~jkyyklID mO |.,mj-$z(z:|SŲx寈.Ti>bc**G!bOj> /ZTi#!H)ncx6گ tg6#Ϋ#_OKyn籎=TUI5/َ%Ġ:E5>"HJ[D~xld ѼqxL-=qeݪHL8ߒN#<=98[rߵ//ĻoLU5/ K>J"O"9c'y/v2|"EcCw͞拣r4|.ʽ\HmxcJ5[H7-;Y  9_^Ƶx_nx̌/ `q*ݚc+H]}?Y|o4p˥77K[V1;=Q$r)?>h[*^jP歩σ=Ċp@0yGwÿ 5.MnPʪŚr$нȯ-c(E.T `1`6ʠM8d` \ҊLg:t[GB4})Ys-Uo K`ilŶ=ʡ3OZD6궶VСgqAܞp+?#|StuhpK Cd)no9wOil]Zyk2] &f(p7(w=Gxs:muV֧;&u,!R(S'2eGzoTҮXol-ne۾AЅCxz?%o|.6Z%ޡnnM5Z{ʯ; G} :; _çXӴ1IWf%ݙؖfbI$wrxPϤ߅+Z޽_%А,)Q|yovWI>d[r{w{0}cqcd%!ERW@$I0 AxQ20p*pP=- }* )h>iZ' "KH(O[vb!xNYu{=GD4ڒ\ha jldl=]ex+~˽^}>G[yB4JG'':GO!GQN;W?;{mgh0OiJ.bdRBls]QEQEQEQEQEQEQEy>?e麄I+jz}.|˙Ǖ :º/xKjZ.Rzxggj)xK`Mnn`tޢї,:c2BG_\]I6xWzDoSSHҴHkx'-\w;ö#ڌ7U]֙} An2|{,;{btv}ȝv9(W?/zdڥ qێj<]٭kܑPB;"s<֍p|5W9dNbլZ%d',%K%tv7Я5(ty{+KKmBݠy|n˸d ׯxoúw,HtMBJ K+%٘a뺥 Eef,?%IUn>+4IOTߪa@q>$"7DM>|5hkEu!Sʴ<+gMß wzVo=o[f6^TB.\p+<A_iz\Y]DF Hhl'TQ{P=") sZ(u(y9)hGv5?x/7~%'! [vFPlp2€!/~-8,44h 8#1\bAj~$6kk;88in FZGe9Z0"CԭH~InF&a>(]om{uxGK&i=Ŧ VI"GdHBso~'k:ogҳiZ%  `%T1m NCѭ`X@f!a43Ij~-DWtgOdBjK0<_d}B1) ƺ<ۍFV]՞779\w>Ll5Ծd2,JĒ}>;/)`!V5Js}@4u\7#H\nH?Zᯋ іOkgӇ)\nf=q~|.CIu$1Gh+dy9\hw|5=oxWݐKq*f X\CoNy!2&..b*{)!5G¿ )c7O K 28B#R|N4oo@2$`dt3騆2I{ ?4Ӧr@-&3cΙYϬEm4$\Km/-O7eƍ ZMec;l?|dHBX G Wwç:Ʒrk"xWtZ# $(\`(ޡ'CgkmqH"{l6tuOh5vÅWwþO[CwioZsHt8mp,OBY g9?55x5ٙ l3v!27 (((<AYh^3)gZʚL\MA"gqp VՍl-t.!1b1oHhόlWst~ ~f{#J 1i$23P|9M/<7«vdq_1 {zΠqB@zwuKI'1:܎p(NJ09>x+.O (`<5e $,lyXq^^q|lIŶڴGb Ҡl|㬫PmOhx?J[!#U<@Op"(p9$p})[̠#r94$`WbĞH5%QEQEQEQEQEQEwyLL6bs|%3b~@3s4dU<'ힼtY.݊C{}áPE1x`kC7tw>!t_a5kWEQYC}@?\ |>&]5MvQTM d'xlRxǚ_H\;aV$#iZFxh$y.rDIkq7q|1ׅ?YLקC/fWR)iR9byD P<5寀ФXԡalSM+8ǖLhѩ.8. u>MU n_,„:ÞtTQEQEA 0j8mmѣ0ʼrOI?Hh'tMfͩ]zN$#=sdNdZو$xC(skkbʬ%;t@>R(& h{4Q<5~!x]}aI8F@N=Ͻr;VQ4_KmykzdBV,Y6O9sCe$pMoQ#xyƀjzvh}ͼs tl+Eľ/ +ZkH$B0XgRτaOFtHg @[idz㴏wQkr:tVV|X$aik$[ Y? hר/-5 Txe]M #*LJ?sFXI83^dr= 2B:H@8-aLD y,v<y @I `fػCM h ҼZ䟭i4q;S<ؐl$s<sډX/{Z-EvQOzր'U G@8Q@Q@Q@Q@Q@Q@Q@Q@Iybڸ__iƯ]j0\xn/03EJzrɟdZقcu$akxk]iiXi6rF?75fc)`袊FtI%Ara2Du 8 C1' .Y`dƢ5o5\["oc’7Sּard pOڸGS,NFdcFo;f,,Vܼ9Yz q@4-;S{l>Ng% dHْ p3=?/ĺT^>ՕHWW4'IWEW8\zH$M^Q ?1|e5IIvm$HQ ,n%wVU@*0qMi}l`a Ƞ &6şh 3mʾČێ3(. Ey$'bGN4_LH לT@%iwc`a&*XD}:U{#&934k tlV)(EC9 #OAt/BƬY@ NX:2G8G~iOt Ej$42*=`oZn$y~_M|%vdAoH2G%Pο^"&y}r 9$yOO RY,/}5^VH vD{H`3?clQ;uda}M[]*g 8vL11$"0@;q?Lh:巍\Z@)Ų |-ONl(ՋrUG .T.J( 9/h ൾWҵp<*HWM yϡ }KI6}: w<0Ccq:]sa{q,Ptva;yBʄp7>7zd'= F]'+4K~X4J Q䷑knb,ewu|B@辧Tr1mt;(smαEo pO##9-=}V(@Q:~5\ AznChD1P 8Ϯ;PMqPF@:UuĺQh :pSG#(]m.IpɈǰ<< ]͌,zRy$}G( ( ( ( ( ( ( ( wN|'ߴ'>` dښ DWXfTR@dz TN(aH?ni^"_j~Vohs`e_>(|(((((((((((((((((?]Ⱦ"Z[]d4]3\}J?hA:~Uuv gNGw_xfנcr~KxQ. ;$м;-AL9v t`W7LӸB(G8&q*&%R@÷|7|vZZ[`A&(9Qkb I.g;MK )'$SN((((((((((0{QEQEׂWHc1EnGe?O4z?<]Jϧ{HfHT-9GyΝH#nZ}ԕ$H?!NrǁZ(>u3EZ'(<ڌNzuB LPΫIqN$ dh8'8.Pր?+Ccj"#|rH?hQU4{D֢ڽk[`IJ8FA-PN>QFAތg#PN) 鴎O9Gqw&y*(@W-*tujC훁5˱ˉI I߉ߴ_ ůx2yreppBya Yo~|ow~ѨJcp;~Ϟ"_j^5})[<A#=ׯޥi,jeknUGf%cX lvc$ZvAa:3€y@wgӵN"aUpj̎ €A 9GWb \yJ/HP(RnǚZ(((((((((((((0 V-3+V+# &2G@t][Ku[d6ꎎax3şbΥ<ȘYߟ2k<7Y¬C F@rEy^Zx#JԠmᶵq0O^9>5BYyOQ+4N"GRXA:4gH@մ{B< uxdByVV0bk엡͓zo4 cK+ȄCy4Zb=1Kd+߷|`[(IuO_Zx9޲d^*w?$D#|%ԙ;N)GّIlƀ=h( cxԵX1`lou^ȃqE#I};߲,UMl=UlN (8g"RHf JrCCum7:Z3`w.F-7S>']ö:24 In>ʡ'Ȋ1mV,.fKO%Z?ji߂ Z_U6#wUVMOhѩɥlʢ3QLΖzfu꤮&bUHlԚZGz=Qa&FٓM?kc%`1Q#^jXgO;f¸2Iigp FLgqow-'W Xk9f=634GLk?.pk_g폣ZϊE}A&D .&)e :ox?lĮ:xzUg/s3I~>5v-4:L [{3en4AMүw{z)4#_Q&7ReeY[#(LJwk$+⎧s8"oK$SDp da@ՏŸ?So5{nG <7EŸts.jbZe4_~=eh <O\>O|1'iEƗ]&ŊZ=ŎWFџd2Ev@F{iG|m㯆^6(uu3sF?/\ҡ#>2+GPFA|<|WG5]7,uhLdF2l˥yo_اV!<6bvls2yG~~_|&--mAd;~ = #T8M{K]_8*- Rd薀3Qvr 08?]aEM|C:$[n!BJYl' nMREϊ[1O D7\.f@VK 3aD~;[xJF5s,SEW qrz<* eìxCCӦ#YL]H;FFk2TѴDݯ.2A%UbNI`9ڀ3!4(t_xZ h"dn_p9]B=ё@HIZ(((((((((((((((((9ϭ#"7P~րc(<_koN?ÿ Eu9mu#&Oduf ?jmQ}P4S]Νo,H#y@YG9<x'J}u?kSKu{AznT# Appy"I|KZ.OM}};WxX; \rJʹ׭NrT_e 19\n2ʓ9>`,qx?v/gd~ѡ_1ԭ-eG]ոmY"OCh='G/Vg?:&MN3"qpܜ q^n~~L~^15\iE|l[{vcdP|ZM׆Ѿ$>Chk+^Tx?fxoּOM1ah$21oYlf72IBufh~ھ ^Ŋ\hׅr6'g*>:|#?LFn_Td)uhr?*c@k>?ֵWY߄/򏕢9 Cukk>մhi.|IsL+#.dC(/~oſ>(7 5nR+1ɉbx^1(,zb,c۷Nb=yf98(wxvľdOZWP Iˈ$1RBx8 2NSH˻ihfT'jZ~wre!1$+nX<=>0$&IqϷ> KXx fvi {rx~:=Oǭ:Ko*@dlxNB]`L9uqU+-gWc8cXQ@TQJQ@p6f?&,ud͐7F7}=fpA<֩(Q@hOryvڥ@8P95R+Jd#'Ǡ@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETtۍEy!>m{T )ڋxRO{hm=0 (*dU1K&^6?o~^,voi^0I+73&NcPB XV⾂l-ⵎ|:(v {{q\g?^4 '~yԾe <:"IYub A@-4KKR](VR ƬefyEkeLyV@*S?ےE 2<@ |&f?>i:Dн풴2A*EpwαWV+k> hޡqӠ /熉ԁHRl|үƯl`\}Iͬ'P:n zogN>N%6ۋr?y bD+KG]KmB7gkțY+ q@[VȨ,:C|+pcMiR\5fau%Ҽ;zx7D0( χzqW"$[W!Pܩ&x/b=/e|׈tf% D(H}iZY_4 @2zdY&T4R]݀ =I=+-?3M0\l톓kW"ߛH팢&O,t{9$1 s7s\~ߴ_>7cʳzIʁw B#qս?jLLKby$ eTzԾºbf!GL.ͬ )]v"<)~"zӮ'\i_u,.,!9e[W Bo?#~%S^#]oWS?t)ZjSFdf8 eUe,Y/ßڞ>i"RYvQ(po+1\E i|6fyd)| ܮF 8:Oſ $d_f6~hvcP^=3|0_fy|9h^]>Rn:88ڀ7, "BCH9r 2O` p8jNh6$Qu&ϰ>`u'2Na9'< LZ.ZOC J곐A O Ƞm0#'ۄ<]Z%wxOZ/|F3Ɉ->E|~Wo)sxzY|!ƵgOrd+nXWdJÖZ/ou~=YIZ'_H %hp[o2Vmu+HeYmu; Ȍw6QnWS-}P|1_W}E6V(o[΍ry\z(ʗƍGoV0.|?ZDNYcR`p ?~.;˪ iLW֬ŜsBI]%pg Z_Rϋ i_.}#3 tZ( EeZZx+F813sgq}n"|$(}h((((((((((((((9=83ӃgP3)PP~h >4Q@Q@y"(w8#jZ( q~zREH_ dgih݌x \dZ0=F1=(3M9|y|x8dAZ3'P4=4(}?Z1}=}cEt( u>-f((#ފ(((((((((((((((((((((((((((((((((((((((