(+vm-dev)
Esteban, thanks very much for your views. You write:
On 10/16/2015 07:53 AM, Esteban Lorenzano wrote:
So… my plan is:
- NB to FFI port (should be ready soon)
- spur32 bits (should be ready soon, we are just waiting the NB to FFI)
- spur64 bits (Eliot is working on the JIT, I need to manage the
migration of Pharo)
- FFI 64bits (0% done here… just some stubs waiting for effort). But
we want to move Pharo to 64bits… we are losing a train here...
- FFI MT
and of course you are buried in existing tasks, especially the transition to 64-bits. It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes. Kinda why I would desire MTVM before 64-bits, then I assume less work would be needed overall. But that's my uneducated guess.
Perhaps Eliot could shine some light for us on the progress of MTVM and what's needed.
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
- NB to FFI port (should be ready soon) - spur32 bits (should be ready soon, we are just waiting the NB to FFI) - FFI MT - spur64 bits (Eliot is working on the JIT, I need to manage the migration of Pharo) - FFI 64bits (0% done here… just some stubs waiting for effort). But we want to move Pharo to 64bits… we are losing a train here...
If *anyone* wants to collaborate in any part of this list (is a
MASSIVE effort), I would be very happy and willing to provide as much assistance/guiding/peer programming as I can.
Yes, please, and I appreciate you willingness to mentor.
Best, Robert
On 10/16/2015 07:53 AM, Esteban Lorenzano wrote:
On 16 Oct 2015, at 13:22, Robert Withers robert.w.withers@gmail.com wrote:
Bonjour Stef,
I believe the change everyone would be waiting for is a Multi-threaded VM, that supports threaded callouts and callbacks. So I suppose the questions become:
multi thread ffi vm exists as a prototype, and according to its author (Eliot) needs no less than 4 months of someone skilled working on it to finish it.
- will existing NB syntax require change with the introduction of a MTVM?
nothing will be equal… why? because you will need to provide callbacks. There is no magic here, if you want something to happen while doing something else, you need to provide a way to be called back when that thing finishes.
now we have:
nbCall:module:
to call FFI (will change to a more generic ffiCall:module:, btw… but we’ll keep old notation some versions to provide backward compatibility)
So I can imagine an API like this:
ffiAsyncCall:callback:module:
So yes… you need change. But that’s inevitable… Of course you can do a fwk forking in image and starting a continuation, etc. But well, I will let you guys to think on that (also you still will need the fork) :)
- to what degree will NB syntax need to be extended to support threaded callouts.
as described, I suppose. No exact idea until we implement.
- what NB syntax changes are needed for callbacks.
NB used some magic there. Shadow classes and etc. We do not need/want that anymore.
now you have a new FFICallback api, where you can do:
FFICallback signature: #(int (int handle, int *pitch, int x, int y, int w, int h)) block: [ :handle :pitch :x :y :w :h | pitch signedLongAt: 1 put: (self get_stride: handle). self get_data: handle ]
(I extracted that example from my ongoing port of Athens)
- timing: when is MTVM expected and can we operate on the leading edge?
we are lacking resources: Is just me (in the Pharo part, of course… Eliot and some others work also in the exclusively VM part, but they have other agendas).
So… my plan is:
- NB to FFI port (should be ready soon)
- spur32 bits (should be ready soon, we are just waiting the NB to FFI)
- spur64 bits (Eliot is working on the JIT, I need to manage the migration of Pharo)
- FFI 64bits (0% done here… just some stubs waiting for effort). But we want to move Pharo to 64bits… we are losing a train here...
- FFI MT
So… not very hight priority. According as how I see things now, I *think* I can have that some point of 2017… yes, as far as that. Also because I have a lot other stuff to do, not just the lowlevel parts.
Of course this is not good and we have talked with some people to speed up this. We talked with Igor about taking the MT stuff (yes, we also believe is VERY important), but he fade in the blur… I didn’t hear from him since 3 months (I’m still waiting for some feedback on OSWindow work he did, he)… yes I’m a bit frustrated.
If *anyone* wants to collaborate in any part of this list (is a MASSIVE effort), I would be very happy and willing to provide as much assistance/guiding/peer programming as I can.
hope this helps
Esteban
Personally, in SqueakElib, I have my network and session layers working for encrypted connections, so I just have the presentation layer to go. Once done, I would be very interested in working in the VM with whomever is also interested with an eye towards threading (MTVM). I am no expert here so it will be a challenge I am looking forward to.
Regards, Robert
On 10/16/2015 06:59 AM, stepharo wrote:
In pharodays presentations we explictly mentioned our strategy: - we keep NB syntax - we change the assembly generation to be able to get Spur.
Stef
I can tell you that if I could get a lua kind of jit now I would sign immediately and also for having pharo as a dll. Now it takes time to do soemthing.
Le 15/10/15 17:35, Robert Withers a écrit :
I am reticent to invest in learning FFI that is changing without an idea of the direction of the change. So
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
Yes, exactly. I do realize I was consciously changing that effort synchronization order. I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know. I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog. I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers robert.w.withers@gmail.com wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting... * http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648... * http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
Hi,
just to be clear. When we talk about MTVM, we talk about a MT-FFI, *not* a MTVM in general. In general, a “common” approach to MT cannot be applied in Pharo (or Smalltalk in general) and to get a VM *and* an image working properly is an effort that makes what I called massive some mails above like a small stone compared to a mountain.
Said that:
- What is in plans is MT-FFI, and that will be available eventually. - There is an approach I want to re-work, that would allow us profit of multicores without going multithread: the “hydra” experiment made some years ago by Igor creates a good basis to this. But is also a lot of of work (but a lot less than a complete MT), and not a real priority for now… I hope to resume work on that area some day… just not anytime soon.
Esteban
On 18 Oct 2015, at 17:56, Ben Coman btc@openInWorld.com wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers robert.w.withers@gmail.com wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
- http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
- http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
Hi Esteban,
On 10/19/2015 05:10 AM, Esteban Lorenzano wrote:
Hi,
just to be clear. When we talk about MTVM, we talk about a MT-FFI, *not* a MTVM in general. In general, a “common” approach to MT cannot be applied in Pharo (or Smalltalk in general) and to get a VM *and* an image working properly is an effort that makes what I called massive some mails above like a small stone compared to a mountain.
Could you please help me by talking further about the different models and scopes of what is meant by MT?
a) MT-FFI I believe gives the developer a way to call and be invoked on callback, asynchronously. Is it so? b) General MTVM means other system services are threaded, like I/O events and scheduling and heartbeat.
I think that the right model (my stack/priQueue/pool intuition?) will change a Herculean task into a fairly straightfoward task and achievable. Change the problem, to get better answers.
I appreciate you and this MT discussion.
Said that:
- What is in plans is MT-FFI, and that will be available eventually.
- There is an approach I want to re-work, that would allow us profit of multicores without going multithread: the “hydra” experiment made some years ago by Igor creates a good basis to this. But is also a lot of of work (but a lot less than a complete MT), and not a real priority for now… I hope to resume work on that area some day… just not anytime soon.
Yes, please. I recall those discussions. Hydra is cosmological.
Regards, Robert
Esteban
On 18 Oct 2015, at 17:56, Ben Coman btc@openInWorld.com wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers robert.w.withers@gmail.com wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
- http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
- http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
Hi Robert,
_,,,^..^,,,_ (phone)
On Oct 19, 2015, at 5:03 AM, Robert Withers robert.w.withers@gmail.com wrote:
Hi Esteban,
On 10/19/2015 05:10 AM, Esteban Lorenzano wrote:
Hi,
just to be clear. When we talk about MTVM, we talk about a MT-FFI, *not* a MTVM in general. In general, a “common” approach to MT cannot be applied in Pharo (or Smalltalk in general) and to get a VM *and* an image working properly is an effort that makes what I called massive some mails above like a small stone compared to a mountain.
Could you please help me by talking further about the different models and scopes of what is meant by MT?
a) MT-FFI I believe gives the developer a way to call and be invoked on callback, asynchronously. Is it so?
It's a bit more than that. It is the sharing of the VM between different threads, but only allowing one thread to own the VM at any one time, changing ownership in call out or Smalltalk process switch time. This approach provides interleaved concurrency but not parallelism in your Smalltalk code and it means the Smalltalk class library doesn't have to be made thread-safe, which as Esteban said is a huge task.
See http://lists.gforge.inria.fr/pipermail/pharo-project/2011-January/038943.htm...
and google "eliot Miranda Simmons own thread" to find more messages.
b) General MTVM means other system services are threaded, like I/O events and scheduling and heartbeat.
No; at least not in my opinion. In the standard single-threaded VM the heartbeat is ideally a thread (it can be an interval timer, but that's problematic; system calls get interrupted), and maybe an incremental global GC could be in its own thread.
So I'm defining the MTVM to be the sharing of the VM between threads, and /not/ just the use of threads to implement non-Smalltalk sub tasks of the VM, and /not/ a full-blown multithreaded Smalltalk VM providing concurrent execution of Smalltalk processes in parallel.
I think that the right model (my stack/priQueue/pool intuition?) will change a Herculean task into a fairly straightfoward task and achievable. Change the problem, to get better answers.
This has been well thought through and discussed. The definition above is very useful. It provides a system that can inter operate with concurrent code without having to implement a system that provides parallelism. It is used in David Simmons' VMs for S# etc and a similar (but less performant) scheme is available in Python VMs.
Please, let's get this scheme working first. I'm not at all happy (read, extremely unhappy) that there is not much focus on working together to get our current VM to an excellent state and instead lots of work on other VMs that is speculative and a long way away from being production ready. We have a huge amount of work to do on Cog:
- event-driven VM (that hence costs 0% processor time at idle) - 64-bits (x64 and ARM and...?) - Sista adaptive optimizer - FFI via dynamic generation of marshaling code, as required for efficient and correct call outs on x64 - MTVM as defined above - an incremental global mark-sweep GC for Spur - running on Xen/Unikernels/containers - providing a JavaScript plugin to proved rendering and events so we can run an efficient VM in a web browser - a port of the Interpreter/Context VM to Spur
IMO, things that can /and should/ wait are - throwing away Slang and providing a true written-in-pure-Smalltalk VM that is self-bootstrapped a la Gerardo Richarte and Xavier Burroni - a truly parallel multi/threaded VM
and things we shouldn't go anywhere near are - using libffi - targeting JavaScript, Java or any other dynamic language de jour that happens to run in a web browser but either provides abysmal performance or doesn't support full Smalltalk semantics - implementing the VM in other VM frameworks such as PyPy which simply strengthens that community and weakens our own
Right now there are only a handful of people who make commits to the VM and three who are "full time", and we're all overloaded. But the VM is the base of the pillar and if we want to provide high-quality solutions that people will pay money to use we have to have a high-quality VM. In Spur we have a VM that is significantly faster that VW, and very reliable. In Sista we will have a system that is much faster and can be improved upon for years to come and a system that can migrate to future VMs (because it is mostly Smalltalk), and useful support for a high quality FFI. People like have stepped up and made significant contributions to give us what is a respectable VM that is on an arc to providing a really high-quality production Smalltalk VM written in Smalltalk produced by a very small community. But it is now 2015 and Cog started 7 years ago. All the work on other VMs, deployment platforms etc, IMO dilutes and delays in delivering to our community a truly world-class VM that we can compete with against Java HotSpot, node.js v8, lua luajit, factor, swift et al. Please get on board. We'd love the help and we can guarantee you'll have fun and you can guarantee you'll have an impact.
I appreciate you and this MT discussion.
Said that:
- What is in plans is MT-FFI, and that will be available eventually.
- There is an approach I want to re-work, that would allow us profit of multicores without going multithread: the “hydra” experiment made some years ago by Igor creates a good basis to this. But is also a lot of of work (but a lot less than a complete MT), and not a real priority for now… I hope to resume work on that area some day… just not anytime soon.
Yes, please. I recall those discussions. Hydra is cosmological.
Regards, Robert
Esteban
On 18 Oct 2015, at 17:56, Ben Coman btc@openInWorld.com wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers robert.w.withers@gmail.com wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
- http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
- http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
On Mon, 19 Oct 2015 07:10:31 -0700 Eliot Miranda eliot.miranda@gmail.com wrote:
- an incremental global mark-sweep GC for Spur
One experiment with multi-cores might be interesting -- concurrent GC.
The attached paper indicates an interesting strategy which worked OK for SML in terms of short pause times. Multiple cores could really reduce the total run (gc+mutate) time.
The basic strategy seems simple enough that it would not be tons of work to try out.
Not that I have much time either.. 8^(
Cheers, KenD Ken.Dickey@Whidbey.com
Hi Ken,
I have this very paper on my desk, printed out from (alas, much) earlier in the year. Anyone who has energy to address this would be very very welcome. Writing a concurrent incremental mark-sweep that handles ephemeron is the task. Making it function both in small bursts, e.g. after scavenging, and in its own thread is I think important; a non-threaded solution can be extremely efficient in certain contexts.
On Mon, Oct 19, 2015 at 12:04 PM, KenD Ken.Dickey@whidbey.com wrote:
On Mon, 19 Oct 2015 07:10:31 -0700 Eliot Miranda eliot.miranda@gmail.com wrote:
- an incremental global mark-sweep GC for Spur
One experiment with multi-cores might be interesting -- concurrent GC.
The attached paper indicates an interesting strategy which worked OK for SML in terms of short pause times. Multiple cores could really reduce the total run (gc+mutate) time.
The basic strategy seems simple enough that it would not be tons of work to try out.
Not that I have much time either.. 8^(
Cheers, KenD Ken.Dickey@Whidbey.com
Hi Eliot,
... ^^ robert
On 10/19/2015 10:10 AM, Eliot Miranda wrote:
Hi Robert,
_,,,^..^,,,_ (phone)
On Oct 19, 2015, at 5:03 AM, Robert Withers <robert.w.withers@gmail.com mailto:robert.w.withers@gmail.com> wrote:
Could you please help me by talking further about the different models and scopes of what is meant by MT?
a) MT-FFI I believe gives the developer a way to call and be invoked on callback, asynchronously. Is it so?
It's a bit more than that. It is the sharing of the VM between different threads, but only allowing one thread to own the VM at any one time, changing ownership in call out or Smalltalk process switch time. This approach provides interleaved concurrency but not parallelism in your Smalltalk code and it means the Smalltalk class library doesn't have to be made thread-safe, which as Esteban said is a huge task.
See http://lists.gforge.inria.fr/pipermail/pharo-project/2011-January/038943.htm...
and google "eliot Miranda Simmons own thread" to find more messages.
b) General MTVM means other system services are threaded, like I/O events and scheduling and heartbeat.
No; at least not in my opinion. In the standard single-threaded VM the heartbeat is ideally a thread (it can be an interval timer, but that's problematic; system calls get interrupted), and maybe an incremental global GC could be in its own thread.
So I'm defining the MTVM to be the sharing of the VM between threads,
I apologize if I am off the rails again, Eliot. I must watch that. Let's see if I can express it right.
I think, not entirely sure mind you, that I am talking about single threading the image and not sharing the VM between different threads. I need to read the links you provided and hopefully you'd welcome discussion about alternatives, long as it doesn't consume your needed time; that's your discretion, I acknowledge.
Why change owners of the vm process and deal with thread contention edge cases? If you put a Elib-style vat in the core of the vm and run a single-osthread instance image, you get hydra, soft virtual semaphores, threaded FFI and real virtualization, as all external vat communication must go through the vats' queue. All plugins would have to be changed to talk through the scheduling queue as pointers to function calls, sort of thing - continuations queue? Perhaps outbound calls as well so no thread-safing the plugins...
and /not/ just the use of threads to implement non-Smalltalk sub tasks
I suppose I'm thinking of it more as this, yet it seems your goal is to not have to thread safe the plugins, which is safe & reliable. This I understand.
Perhaps both are possible, by placing a queue in front of every thread, preparatory or sensory worker threads or main image thread. This is where I'm at with my thinking. I'd welcome your thoughts.
of the VM, and /not/ a full-blown multithreaded Smalltalk VM providing
I see this as an escalation of your idea, surely too much and violating encapsulation of decentralization. I think shared memory is bad and copyOnWrite sort of thing is much better. Yet perhaps in some cases. Do all store bytecodes lock the page they access?
concurrent execution of Smalltalk processes in parallel.
Hydra is with separate threads for separate images, isn't it? A new Hydra, with an elib vm automatically gets this if we enforce all inter-vat communications go through each vat's queue.
Does the question come down to complexity, then? May be too much.
I think that the right model (my stack/priQueue/pool intuition?) will change a Herculean task into a fairly straightfoward task and achievable. Change the problem, to get better answers.
This has been well thought through and discussed. The definition above is very useful. It provides a system that can inter operate with concurrent code without having to implement a system that provides parallelism. It is used in David Simmons' VMs for S# etc and a similar (but less performant) scheme is available in Python VMs.
I would love to learn more about it.
Please, let's get this scheme working first. I'm not at all happy (read, extremely unhappy) that there is not much focus on working together to get our current VM to an excellent state and instead lots of work on other VMs that is speculative and a long way away from being production ready.
Thank you for discussing and defining multi-threading; I welcome it. Thanks as well for the task specification...
I put this together, with a few details from some of the other emails, mostly sub-tasks. However, I did not see ARM or Pharo modernization on the list, so I added those. You'll find a Word doc and pdf attached, thank you! This is most beneficial to have a bird's eye view. So I added the "Current items in play"
...
We have a huge amount of work to do on Cog:
- event-driven VM (that hence costs 0% processor time at idle)
- 64-bits (x64 and ARM and...?)
- Sista adaptive optimizer
- FFI via dynamic generation of marshaling code, as required for
efficient and correct call outs on x64
- MTVM as defined above
- an incremental global mark-sweep GC for Spur
- running on Xen/Unikernels/containers
- providing a JavaScript plugin to proved rendering and events so we can
run an efficient VM in a web browser
- a port of the Interpreter/Context VM to Spur
IMO, things that can /and should/ wait are
- throwing away Slang and providing a true written-in-pure-Smalltalk VM
that is self-bootstrapped a la Gerardo Richarte and Xavier Burroni
- a truly parallel multi/threaded VM
and things we shouldn't go anywhere near are
- using libffi
- targeting JavaScript, Java or any other dynamic language de jour that
happens to run in a web browser but either provides abysmal performance or doesn't support full Smalltalk semantics
- implementing the VM in other VM frameworks such as PyPy which simply
strengthens that community and weakens our own
Right now there are only a handful of people who make commits to the VM and three who are "full time", and we're all overloaded. But the VM is the base of the pillar and if we want to provide high-quality solutions that people will pay money to use we have to have a high-quality VM. In Spur we have a VM that is significantly faster that VW, and very reliable. In Sista we will have a system that is much faster and can be improved upon for years to come and a system that can migrate to future VMs (because it is mostly Smalltalk), and useful support for a high quality FFI. People like have stepped up and made significant contributions to give us what is a respectable VM that is on an arc to providing a really high-quality production Smalltalk VM written in Smalltalk produced by a very small community. But it is now 2015 and Cog started 7 years ago. All the work on other VMs, deployment platforms etc, IMO dilutes and delays in delivering to our community a truly world-class VM that we can compete with against Java HotSpot, node.js v8, lua luajit, factor, swift et al. Please get on board. We'd love the help and we can guarantee you'll have fun and you can guarantee you'll have an impact.
What else can man want in life that the opportunity to take up challenges when life so graciously lays these obstacles in one's path. It stuns me what you all have done. Truly amazing the targets and varieties you offer. A smörgåsbord of multiple generated VMs. Amazing.
Unless you feel otherwise, I think I will focus on 2, 4 & 5 of the current items:
- 64-bit vm support - MTVM discussions - Pharo support and modernization
I love Pharo and what they have done and are doing - it's fantastic and I want to make an impact there as well. They really need FileDirectory, though, if only a wrapper, as compatibility code for VMMaker.oscog. :)
I appreciate you and this MT discussion.
Thank you , Robert
Said that:
- What is in plans is MT-FFI, and that will be available eventually.
- There is an approach I want to re-work, that would allow us profit
of multicores without going multithread: the “hydra” experiment made some years ago by Igor creates a good basis to this. But is also a lot of of work (but a lot less than a complete MT), and not a real priority for now… I hope to resume work on that area some day… just not anytime soon.
Yes, please. I recall those discussions. Hydra is cosmological.
Regards, Robert
Esteban
On 18 Oct 2015, at 17:56, Ben Coman <btc@openInWorld.com mailto:btc@openinworld.com> wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers <robert.w.withers@gmail.com mailto:robert.w.withers@gmail.com> wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote: > > Because of that assumption I've made and without the responsibilities > you have, Esteban, but recognizing modernizing NB to FFI, my desired > list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
On Mon, Oct 19, 2015 at 7:10 AM, Eliot Miranda eliot.miranda@gmail.com wrote:
- a port of the Interpreter/Context VM to Spur
What does the Context Interpreter do that the Stack Interpreter doesn't? I thought 64-bit support was the last gap.
On Mon, Oct 19, 2015 at 7:10 AM, Eliot Miranda eliot.miranda@gmail.com wrote:
- a port of the Interpreter/Context VM to Spur
What does the Context Interpreter do that the Stack Interpreter doesn't? I thought 64-bit support was the last gap.
In principle, there should be nothing at all that the context interpreter does that the stack interpreter cannot do. I practice, the context interpreter in VMM trunk supports pre-closure images, and also can run any combination of 32/64 bit image and VM.
One of my personal objectives in helping Eliot with merge issues was to get the stack interpreter to do those things also. I think is actually quite close to being able to do that, but the work is not complete.
Dave
On Mon, Oct 19, 2015 at 11:05 PM, Ryan Macnak rmacnak@gmail.com wrote:
On Mon, Oct 19, 2015 at 7:10 AM, Eliot Miranda eliot.miranda@gmail.com wrote:
- a port of the Interpreter/Context VM to Spur
What does the Context Interpreter do that the Stack Interpreter doesn't? I thought 64-bit support was the last gap.
It is conceptually simpler. It supports experiments more easily than the StackInterpreter. It reflects the language specification in the blue book and the image-level meta-circular interpreter much more closely.
_,,,^..^,,,_ best, Eliot
+1 (I'm amazed that you can type all that on an iPhone).
Eliot I hope that the blog and the lecture clement is designing will help people to get closer to the VM. I would love that Inria hires a VM researcher and that the rmod group gets exposed and push the VM. It did not work with Stefan Marr which could have got a position but was home sick :). If you know people that have a good cv and want to live in France, we can fight to get a permanent life researcher position.
Stef Le 19/10/15 16:10, Eliot Miranda a écrit :
Hi Robert,
_,,,^..^,,,_ (phone)
On Oct 19, 2015, at 5:03 AM, Robert Withers <robert.w.withers@gmail.com mailto:robert.w.withers@gmail.com> wrote:
Hi Esteban,
On 10/19/2015 05:10 AM, Esteban Lorenzano wrote:
Hi,
just to be clear. When we talk about MTVM, we talk about a MT-FFI, *not* a MTVM in general. In general, a “common” approach to MT cannot be applied in Pharo (or Smalltalk in general) and to get a VM *and* an image working properly is an effort that makes what I called massive some mails above like a small stone compared to a mountain.
Could you please help me by talking further about the different models and scopes of what is meant by MT?
a) MT-FFI I believe gives the developer a way to call and be invoked on callback, asynchronously. Is it so?
It's a bit more than that. It is the sharing of the VM between different threads, but only allowing one thread to own the VM at any one time, changing ownership in call out or Smalltalk process switch time. This approach provides interleaved concurrency but not parallelism in your Smalltalk code and it means the Smalltalk class library doesn't have to be made thread-safe, which as Esteban said is a huge task.
See http://lists.gforge.inria.fr/pipermail/pharo-project/2011-January/038943.htm...
and google "eliot Miranda Simmons own thread" to find more messages.
b) General MTVM means other system services are threaded, like I/O events and scheduling and heartbeat.
No; at least not in my opinion. In the standard single-threaded VM the heartbeat is ideally a thread (it can be an interval timer, but that's problematic; system calls get interrupted), and maybe an incremental global GC could be in its own thread.
So I'm defining the MTVM to be the sharing of the VM between threads, and /not/ just the use of threads to implement non-Smalltalk sub tasks of the VM, and /not/ a full-blown multithreaded Smalltalk VM providing concurrent execution of Smalltalk processes in parallel.
I think that the right model (my stack/priQueue/pool intuition?) will change a Herculean task into a fairly straightfoward task and achievable. Change the problem, to get better answers.
This has been well thought through and discussed. The definition above is very useful. It provides a system that can inter operate with concurrent code without having to implement a system that provides parallelism. It is used in David Simmons' VMs for S# etc and a similar (but less performant) scheme is available in Python VMs.
Please, let's get this scheme working first. I'm not at all happy (read, extremely unhappy) that there is not much focus on working together to get our current VM to an excellent state and instead lots of work on other VMs that is speculative and a long way away from being production ready. We have a huge amount of work to do on Cog:
- event-driven VM (that hence costs 0% processor time at idle)
- 64-bits (x64 and ARM and...?)
- Sista adaptive optimizer
- FFI via dynamic generation of marshaling code, as required for
efficient and correct call outs on x64
- MTVM as defined above
- an incremental global mark-sweep GC for Spur
- running on Xen/Unikernels/containers
- providing a JavaScript plugin to proved rendering and events so we
can run an efficient VM in a web browser
- a port of the Interpreter/Context VM to Spur
IMO, things that can /and should/ wait are
- throwing away Slang and providing a true written-in-pure-Smalltalk
VM that is self-bootstrapped a la Gerardo Richarte and Xavier Burroni
- a truly parallel multi/threaded VM
and things we shouldn't go anywhere near are
- using libffi
- targeting JavaScript, Java or any other dynamic language de jour
that happens to run in a web browser but either provides abysmal performance or doesn't support full Smalltalk semantics
- implementing the VM in other VM frameworks such as PyPy which simply
strengthens that community and weakens our own
Right now there are only a handful of people who make commits to the VM and three who are "full time", and we're all overloaded. But the VM is the base of the pillar and if we want to provide high-quality solutions that people will pay money to use we have to have a high-quality VM. In Spur we have a VM that is significantly faster that VW, and very reliable. In Sista we will have a system that is much faster and can be improved upon for years to come and a system that can migrate to future VMs (because it is mostly Smalltalk), and useful support for a high quality FFI. People like have stepped up and made significant contributions to give us what is a respectable VM that is on an arc to providing a really high-quality production Smalltalk VM written in Smalltalk produced by a very small community. But it is now 2015 and Cog started 7 years ago. All the work on other VMs, deployment platforms etc, IMO dilutes and delays in delivering to our community a truly world-class VM that we can compete with against Java HotSpot, node.js v8, lua luajit, factor, swift et al. Please get on board. We'd love the help and we can guarantee you'll have fun and you can guarantee you'll have an impact.
I appreciate you and this MT discussion.
Said that:
- What is in plans is MT-FFI, and that will be available eventually.
- There is an approach I want to re-work, that would allow us profit
of multicores without going multithread: the “hydra” experiment made some years ago by Igor creates a good basis to this. But is also a lot of of work (but a lot less than a complete MT), and not a real priority for now… I hope to resume work on that area some day… just not anytime soon.
Yes, please. I recall those discussions. Hydra is cosmological.
Regards, Robert
Esteban
On 18 Oct 2015, at 17:56, Ben Coman <btc@openInWorld.com mailto:btc@openinworld.com> wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers <robert.w.withers@gmail.com mailto:robert.w.withers@gmail.com> wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote: > > Because of that assumption I've made and without the > responsibilities > you have, Esteban, but recognizing modernizing NB to FFI, my desired > list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
Eliot, you wrote this post on your phone? That's non-trivial. I'm hoping you used a bluetooth keyboard.
You asked me to join the VM development effort. Thank you so much for the welcome, I'd love to help where I can.
Best, Robert
On 10/22/2015 03:05 AM, stepharo wrote:
+1 (I'm amazed that you can type all that on an iPhone).
Eliot I hope that the blog and the lecture clement is designing will help people to get closer to the VM. I would love that Inria hires a VM researcher and that the rmod group gets exposed and push the VM. It did not work with Stefan Marr which could have got a position but was home sick :). If you know people that have a good cv and want to live in France, we can fight to get a permanent life researcher position.
Stef Le 19/10/15 16:10, Eliot Miranda a écrit :
Hi Robert,
_,,,^..^,,,_ (phone)
On Oct 19, 2015, at 5:03 AM, Robert Withers robert.w.withers@gmail.com wrote:
Hi Esteban,
On 10/19/2015 05:10 AM, Esteban Lorenzano wrote:
Hi,
just to be clear. When we talk about MTVM, we talk about a MT-FFI, *not* a MTVM in general. In general, a “common” approach to MT cannot be applied in Pharo (or Smalltalk in general) and to get a VM *and* an image working properly is an effort that makes what I called massive some mails above like a small stone compared to a mountain.
Could you please help me by talking further about the different models and scopes of what is meant by MT?
a) MT-FFI I believe gives the developer a way to call and be invoked on callback, asynchronously. Is it so?
It's a bit more than that. It is the sharing of the VM between different threads, but only allowing one thread to own the VM at any one time, changing ownership in call out or Smalltalk process switch time. This approach provides interleaved concurrency but not parallelism in your Smalltalk code and it means the Smalltalk class library doesn't have to be made thread-safe, which as Esteban said is a huge task.
See http://lists.gforge.inria.fr/pipermail/pharo-project/2011-January/038943.htm...
and google "eliot Miranda Simmons own thread" to find more messages.
b) General MTVM means other system services are threaded, like I/O events and scheduling and heartbeat.
No; at least not in my opinion. In the standard single-threaded VM the heartbeat is ideally a thread (it can be an interval timer, but that's problematic; system calls get interrupted), and maybe an incremental global GC could be in its own thread.
So I'm defining the MTVM to be the sharing of the VM between threads, and /not/ just the use of threads to implement non-Smalltalk sub tasks of the VM, and /not/ a full-blown multithreaded Smalltalk VM providing concurrent execution of Smalltalk processes in parallel.
I think that the right model (my stack/priQueue/pool intuition?) will change a Herculean task into a fairly straightfoward task and achievable. Change the problem, to get better answers.
This has been well thought through and discussed. The definition above is very useful. It provides a system that can inter operate with concurrent code without having to implement a system that provides parallelism. It is used in David Simmons' VMs for S# etc and a similar (but less performant) scheme is available in Python VMs.
Please, let's get this scheme working first. I'm not at all happy (read, extremely unhappy) that there is not much focus on working together to get our current VM to an excellent state and instead lots of work on other VMs that is speculative and a long way away from being production ready. We have a huge amount of work to do on Cog:
- event-driven VM (that hence costs 0% processor time at idle)
- 64-bits (x64 and ARM and...?)
- Sista adaptive optimizer
- FFI via dynamic generation of marshaling code, as required for
efficient and correct call outs on x64
- MTVM as defined above
- an incremental global mark-sweep GC for Spur
- running on Xen/Unikernels/containers
- providing a JavaScript plugin to proved rendering and events so we
can run an efficient VM in a web browser
- a port of the Interpreter/Context VM to Spur
IMO, things that can /and should/ wait are
- throwing away Slang and providing a true written-in-pure-Smalltalk
VM that is self-bootstrapped a la Gerardo Richarte and Xavier Burroni
- a truly parallel multi/threaded VM
and things we shouldn't go anywhere near are
- using libffi
- targeting JavaScript, Java or any other dynamic language de jour
that happens to run in a web browser but either provides abysmal performance or doesn't support full Smalltalk semantics
- implementing the VM in other VM frameworks such as PyPy which
simply strengthens that community and weakens our own
Right now there are only a handful of people who make commits to the VM and three who are "full time", and we're all overloaded. But the VM is the base of the pillar and if we want to provide high-quality solutions that people will pay money to use we have to have a high-quality VM. In Spur we have a VM that is significantly faster that VW, and very reliable. In Sista we will have a system that is much faster and can be improved upon for years to come and a system that can migrate to future VMs (because it is mostly Smalltalk), and useful support for a high quality FFI. People like have stepped up and made significant contributions to give us what is a respectable VM that is on an arc to providing a really high-quality production Smalltalk VM written in Smalltalk produced by a very small community. But it is now 2015 and Cog started 7 years ago. All the work on other VMs, deployment platforms etc, IMO dilutes and delays in delivering to our community a truly world-class VM that we can compete with against Java HotSpot, node.js v8, lua luajit, factor, swift et al. Please get on board. We'd love the help and we can guarantee you'll have fun and you can guarantee you'll have an impact.
I appreciate you and this MT discussion.
Said that:
- What is in plans is MT-FFI, and that will be available eventually.
- There is an approach I want to re-work, that would allow us
profit of multicores without going multithread: the “hydra” experiment made some years ago by Igor creates a good basis to this. But is also a lot of of work (but a lot less than a complete MT), and not a real priority for now… I hope to resume work on that area some day… just not anytime soon.
Yes, please. I recall those discussions. Hydra is cosmological.
Regards, Robert
Esteban
On 18 Oct 2015, at 17:56, Ben Coman <btc@openInWorld.com mailto:btc@openinworld.com> wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers robert.w.withers@gmail.com wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote: > > > On 16-10-15 14:05, Robert Withers wrote: >> >> Because of that assumption I've made and without the >> responsibilities >> you have, Esteban, but recognizing modernizing NB to FFI, my >> desired >> list is: > > > I would expect the least total effort to be needed by keeping > the work > of Esteban and Eliot as much as possible aligned. That is what > Esteban's > list achieves. > > Stephan > >
On Thu, Oct 22, 2015 at 12:05 AM, stepharo stepharo@free.fr wrote:
+1 (I'm amazed that you can type all that on an iPhone).
Eliot I hope that the blog and the lecture clement is designing will help people to get closer to the VM. I would love that Inria hires a VM researcher and that the rmod group gets exposed and push the VM. It did not work with Stefan Marr which could have got a position but was home sick :). If you know people that have a good cv and want to live in France, we can fight to get a permanent life researcher position.
Good to hear! I'll keep my eyes peeled, as they say :-)
Stef
Le 19/10/15 16:10, Eliot Miranda a écrit :
Hi Robert,
_,,,^..^,,,_ (phone)
On Oct 19, 2015, at 5:03 AM, Robert Withers < robert.w.withers@gmail.com robert.w.withers@gmail.com> wrote:
Hi Esteban,
On 10/19/2015 05:10 AM, Esteban Lorenzano wrote:
Hi,
just to be clear.
When we talk about MTVM, we talk about a MT-FFI, *not* a MTVM in general.
In general, a “common” approach to MT cannot be applied in Pharo (or Smalltalk in general) and to get a VM *and* an image working properly is an effort that makes what I called massive some mails above like a small stone compared to a mountain.
Could you please help me by talking further about the different models and scopes of what is meant by MT?
a) MT-FFI I believe gives the developer a way to call and be invoked on callback, asynchronously. Is it so?
It's a bit more than that. It is the sharing of the VM between different threads, but only allowing one thread to own the VM at any one time, changing ownership in call out or Smalltalk process switch time. This approach provides interleaved concurrency but not parallelism in your Smalltalk code and it means the Smalltalk class library doesn't have to be made thread-safe, which as Esteban said is a huge task.
See
http://lists.gforge.inria.fr/pipermail/pharo-project/2011-January/038943.htm...
and google "eliot Miranda Simmons own thread" to find more messages.
b) General MTVM means other system services are threaded, like I/O events and scheduling and heartbeat.
No; at least not in my opinion. In the standard single-threaded VM the heartbeat is ideally a thread (it can be an interval timer, but that's problematic; system calls get interrupted), and maybe an incremental global GC could be in its own thread.
So I'm defining the MTVM to be the sharing of the VM between threads, and /not/ just the use of threads to implement non-Smalltalk sub tasks of the VM, and /not/ a full-blown multithreaded Smalltalk VM providing concurrent execution of Smalltalk processes in parallel.
I think that the right model (my stack/priQueue/pool intuition?) will change a Herculean task into a fairly straightfoward task and achievable. Change the problem, to get better answers.
This has been well thought through and discussed. The definition above is very useful. It provides a system that can inter operate with concurrent code without having to implement a system that provides parallelism. It is used in David Simmons' VMs for S# etc and a similar (but less performant) scheme is available in Python VMs.
Please, let's get this scheme working first. I'm not at all happy (read, extremely unhappy) that there is not much focus on working together to get our current VM to an excellent state and instead lots of work on other VMs that is speculative and a long way away from being production ready. We have a huge amount of work to do on Cog:
- event-driven VM (that hence costs 0% processor time at idle)
- 64-bits (x64 and ARM and...?)
- Sista adaptive optimizer
- FFI via dynamic generation of marshaling code, as required for efficient
and correct call outs on x64
- MTVM as defined above
- an incremental global mark-sweep GC for Spur
- running on Xen/Unikernels/containers
- providing a JavaScript plugin to proved rendering and events so we can
run an efficient VM in a web browser
- a port of the Interpreter/Context VM to Spur
IMO, things that can /and should/ wait are
- throwing away Slang and providing a true written-in-pure-Smalltalk VM
that is self-bootstrapped a la Gerardo Richarte and Xavier Burroni
- a truly parallel multi/threaded VM
and things we shouldn't go anywhere near are
- using libffi
- targeting JavaScript, Java or any other dynamic language de jour that
happens to run in a web browser but either provides abysmal performance or doesn't support full Smalltalk semantics
- implementing the VM in other VM frameworks such as PyPy which simply
strengthens that community and weakens our own
Right now there are only a handful of people who make commits to the VM and three who are "full time", and we're all overloaded. But the VM is the base of the pillar and if we want to provide high-quality solutions that people will pay money to use we have to have a high-quality VM. In Spur we have a VM that is significantly faster that VW, and very reliable. In Sista we will have a system that is much faster and can be improved upon for years to come and a system that can migrate to future VMs (because it is mostly Smalltalk), and useful support for a high quality FFI. People like have stepped up and made significant contributions to give us what is a respectable VM that is on an arc to providing a really high-quality production Smalltalk VM written in Smalltalk produced by a very small community. But it is now 2015 and Cog started 7 years ago. All the work on other VMs, deployment platforms etc, IMO dilutes and delays in delivering to our community a truly world-class VM that we can compete with against Java HotSpot, node.js v8, lua luajit, factor, swift et al. Please get on board. We'd love the help and we can guarantee you'll have fun and you can guarantee you'll have an impact.
I appreciate you and this MT discussion.
Said that:
What is in plans is MT-FFI, and that will be available eventually.
There is an approach I want to re-work, that would allow us profit of
multicores without going multithread: the “hydra” experiment made some years ago by Igor creates a good basis to this. But is also a lot of of work (but a lot less than a complete MT), and not a real priority for now… I hope to resume work on that area some day… just not anytime soon.
Yes, please. I recall those discussions. Hydra is cosmological.
Regards, Robert
Esteban
On 18 Oct 2015, at 17:56, Ben Coman <btc@openInWorld.com btc@openinworld.com> wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers
< robert.w.withers@gmail.comrobert.w.withers@gmail.com> wrote:
Yes, exactly. I do realize I was consciously changing that effort
synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider
community. Dealing with larger in-Image data opens the door to more
corporate project/funding opportunities. Also simplifying the install
on modern Linux platforms without requiring additional 386 libraries
will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has
sponsors influencing his priorities, it seems given that 64-bits will
happen first. I would guess any MTVM development on the old vm would
then need to be reworked.
I was doing so with the idea in mind that I and others
might dig into working on the VM, for threading support, while Eliot
maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that
many "others" and maybe they would be drawn away from helping with the
64-bit vm. If the 64-bit vm goes slower for lack of resources then
your footing for MTVM will shifting for a longer time. You may
ultimately get where you want to go faster by helping with the 64-bit
vm. The rapport built with other vm devs from working on 64-bit might
could then be applied to MTVM. (Of course, its your free time, so you
should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago...
I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on
64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648.html http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So
many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities
you have, Esteban, but recognizing modernizing NB to FFI, my desired
list is:
I would expect the least total effort to be needed by keeping the work
of Esteban and Eliot as much as possible aligned. That is what Esteban's
list achieves.
Stephan
2015-10-23 19:01 GMT+02:00 Eliot Miranda eliot.miranda@gmail.com:
On Thu, Oct 22, 2015 at 12:05 AM, stepharo stepharo@free.fr wrote:
+1 (I'm amazed that you can type all that on an iPhone).
Eliot I hope that the blog and the lecture clement is designing will help people to get closer to the VM. I would love that Inria hires a VM researcher and that the rmod group gets exposed and push the VM. It did not work with Stefan Marr which could have got a position but was home sick :). If you know people that have a good cv and want to live in France, we can fight to get a permanent life researcher position.
Good to hear! I'll keep my eyes peeled, as they say :-)
But please, let him write more code than papers ;)
Stef
Le 19/10/15 16:10, Eliot Miranda a écrit :
Hi Robert,
_,,,^..^,,,_ (phone)
On Oct 19, 2015, at 5:03 AM, Robert Withers < robert.w.withers@gmail.comrobert.w.withers@gmail.com> wrote:
Hi Esteban,
On 10/19/2015 05:10 AM, Esteban Lorenzano wrote:
Hi,
just to be clear.
When we talk about MTVM, we talk about a MT-FFI, *not* a MTVM in general.
In general, a “common” approach to MT cannot be applied in Pharo (or Smalltalk in general) and to get a VM *and* an image working properly is an effort that makes what I called massive some mails above like a small stone compared to a mountain.
Could you please help me by talking further about the different models and scopes of what is meant by MT?
a) MT-FFI I believe gives the developer a way to call and be invoked on callback, asynchronously. Is it so?
It's a bit more than that. It is the sharing of the VM between different threads, but only allowing one thread to own the VM at any one time, changing ownership in call out or Smalltalk process switch time. This approach provides interleaved concurrency but not parallelism in your Smalltalk code and it means the Smalltalk class library doesn't have to be made thread-safe, which as Esteban said is a huge task.
See
http://lists.gforge.inria.fr/pipermail/pharo-project/2011-January/038943.htm...
and google "eliot Miranda Simmons own thread" to find more messages.
b) General MTVM means other system services are threaded, like I/O events and scheduling and heartbeat.
No; at least not in my opinion. In the standard single-threaded VM the heartbeat is ideally a thread (it can be an interval timer, but that's problematic; system calls get interrupted), and maybe an incremental global GC could be in its own thread.
So I'm defining the MTVM to be the sharing of the VM between threads, and /not/ just the use of threads to implement non-Smalltalk sub tasks of the VM, and /not/ a full-blown multithreaded Smalltalk VM providing concurrent execution of Smalltalk processes in parallel.
I think that the right model (my stack/priQueue/pool intuition?) will change a Herculean task into a fairly straightfoward task and achievable. Change the problem, to get better answers.
This has been well thought through and discussed. The definition above is very useful. It provides a system that can inter operate with concurrent code without having to implement a system that provides parallelism. It is used in David Simmons' VMs for S# etc and a similar (but less performant) scheme is available in Python VMs.
Please, let's get this scheme working first. I'm not at all happy (read, extremely unhappy) that there is not much focus on working together to get our current VM to an excellent state and instead lots of work on other VMs that is speculative and a long way away from being production ready. We have a huge amount of work to do on Cog:
- event-driven VM (that hence costs 0% processor time at idle)
- 64-bits (x64 and ARM and...?)
- Sista adaptive optimizer
- FFI via dynamic generation of marshaling code, as required for
efficient and correct call outs on x64
- MTVM as defined above
- an incremental global mark-sweep GC for Spur
- running on Xen/Unikernels/containers
- providing a JavaScript plugin to proved rendering and events so we can
run an efficient VM in a web browser
- a port of the Interpreter/Context VM to Spur
IMO, things that can /and should/ wait are
- throwing away Slang and providing a true written-in-pure-Smalltalk VM
that is self-bootstrapped a la Gerardo Richarte and Xavier Burroni
- a truly parallel multi/threaded VM
and things we shouldn't go anywhere near are
- using libffi
- targeting JavaScript, Java or any other dynamic language de jour that
happens to run in a web browser but either provides abysmal performance or doesn't support full Smalltalk semantics
- implementing the VM in other VM frameworks such as PyPy which simply
strengthens that community and weakens our own
Right now there are only a handful of people who make commits to the VM and three who are "full time", and we're all overloaded. But the VM is the base of the pillar and if we want to provide high-quality solutions that people will pay money to use we have to have a high-quality VM. In Spur we have a VM that is significantly faster that VW, and very reliable. In Sista we will have a system that is much faster and can be improved upon for years to come and a system that can migrate to future VMs (because it is mostly Smalltalk), and useful support for a high quality FFI. People like have stepped up and made significant contributions to give us what is a respectable VM that is on an arc to providing a really high-quality production Smalltalk VM written in Smalltalk produced by a very small community. But it is now 2015 and Cog started 7 years ago. All the work on other VMs, deployment platforms etc, IMO dilutes and delays in delivering to our community a truly world-class VM that we can compete with against Java HotSpot, node.js v8, lua luajit, factor, swift et al. Please get on board. We'd love the help and we can guarantee you'll have fun and you can guarantee you'll have an impact.
I appreciate you and this MT discussion.
Said that:
What is in plans is MT-FFI, and that will be available eventually.
There is an approach I want to re-work, that would allow us profit of
multicores without going multithread: the “hydra” experiment made some years ago by Igor creates a good basis to this. But is also a lot of of work (but a lot less than a complete MT), and not a real priority for now… I hope to resume work on that area some day… just not anytime soon.
Yes, please. I recall those discussions. Hydra is cosmological.
Regards, Robert
Esteban
On 18 Oct 2015, at 17:56, Ben Coman <btc@openInWorld.com btc@openinworld.com> wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers
< robert.w.withers@gmail.comrobert.w.withers@gmail.com> wrote:
Yes, exactly. I do realize I was consciously changing that effort
synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider
community. Dealing with larger in-Image data opens the door to more
corporate project/funding opportunities. Also simplifying the install
on modern Linux platforms without requiring additional 386 libraries
will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has
sponsors influencing his priorities, it seems given that 64-bits will
happen first. I would guess any MTVM development on the old vm would
then need to be reworked.
I was doing so with the idea in mind that I and others
might dig into working on the VM, for threading support, while Eliot
maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that
many "others" and maybe they would be drawn away from helping with the
64-bit vm. If the 64-bit vm goes slower for lack of resources then
your footing for MTVM will shifting for a longer time. You may
ultimately get where you want to go faster by helping with the 64-bit
vm. The rapport built with other vm devs from working on 64-bit might
could then be applied to MTVM. (Of course, its your free time, so you
should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago...
I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on
64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648.html http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So
many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities
you have, Esteban, but recognizing modernizing NB to FFI, my desired
list is:
I would expect the least total effort to be needed by keeping the work
of Esteban and Eliot as much as possible aligned. That is what Esteban's
list achieves.
Stephan
-- _,,,^..^,,,_ best, Eliot
Hi Eliot,
On 10/19/2015 10:10 AM, Eliot Miranda wrote:
On Oct 19, 2015, at 5:03 AM, Robert Withers <robert.w.withers@gmail.com mailto:robert.w.withers@gmail.com> wrote:
Hi Esteban,
On 10/19/2015 05:10 AM, Esteban Lorenzano wrote:
Hi,
just to be clear. When we talk about MTVM, we talk about a MT-FFI, *not* a MTVM in general. In general, a “common” approach to MT cannot be applied in Pharo (or Smalltalk in general) and to get a VM *and* an image working properly is an effort that makes what I called massive some mails above like a small stone compared to a mountain.
Could you please help me by talking further about the different models and scopes of what is meant by MT?
a) MT-FFI I believe gives the developer a way to call and be invoked on callback, asynchronously. Is it so?
It's a bit more than that. It is the sharing of the VM between different threads, but only allowing one thread to own the VM at any one time, changing ownership in call out or Smalltalk process switch time. This approach provides interleaved concurrency but not parallelism in your Smalltalk code and it means the Smalltalk class library doesn't have to be made thread-safe, which as Esteban said is a huge task.
See http://lists.gforge.inria.fr/pipermail/pharo-project/2011-January/038943.htm...
and google "eliot Miranda Simmons own thread" to find more messages.
b) General MTVM means other system services are threaded, like I/O events and scheduling and heartbeat.
No; at least not in my opinion. In the standard single-threaded VM the heartbeat is ideally a thread (it can be an interval timer, but that's problematic; system calls get interrupted), and maybe an incremental global GC could be in its own thread.
So I'm defining the MTVM to be the sharing of the VM between threads, and /not/ just the use of threads to implement non-Smalltalk sub tasks of the VM, and /not/ a full-blown multithreaded Smalltalk VM providing concurrent execution of Smalltalk processes in parallel.
I've been thinking about your definition of a concurrent, interleaved VM threading model and I get it and why its the desirable approach. This concurrent interleaved multi-threading approach combines underlying liveness with overlying safety.
Hopefully you aren't minding that I proceeded to look at an event-loop mechanism and I have three changes to a "standard" event-loop to function in the vm:
1) a thread carousel to regulate thread switching between event executions (stack), fed by the queued event frames holding special threads other than the standard event thread. 2) a pool for unscheduled events pending a signal to schedule them into the queue. Sepaphore>>#wait would interrupt the running process and unexecute and unschedule them into the pool until a signal on that semaphore. 3) a bank of FFI threads, each in a specialized, dedicated pool-event-loop
Here is a diagram I drew, trying to show this model. I am not sure it's feasible or desirable, but I hope it adds rather than subtracts to your thoughts.
Best, Robert
I think that the right model (my stack/priQueue/pool intuition?) will change a Herculean task into a fairly straightfoward task and achievable. Change the problem, to get better answers.
This has been well thought through and discussed. The definition above is very useful. It provides a system that can inter operate with concurrent code without having to implement a system that provides parallelism. It is used in David Simmons' VMs for S# etc and a similar (but less performant) scheme is available in Python VMs.
Please, let's get this scheme working first. I'm not at all happy (read, extremely unhappy) that there is not much focus on working together to get our current VM to an excellent state and instead lots of work on other VMs that is speculative and a long way away from being production ready. We have a huge amount of work to do on Cog:
- event-driven VM (that hence costs 0% processor time at idle)
- 64-bits (x64 and ARM and...?)
- Sista adaptive optimizer
- FFI via dynamic generation of marshaling code, as required for
efficient and correct call outs on x64
- MTVM as defined above
- an incremental global mark-sweep GC for Spur
- running on Xen/Unikernels/containers
- providing a JavaScript plugin to proved rendering and events so we
can run an efficient VM in a web browser
- a port of the Interpreter/Context VM to Spur
IMO, things that can /and should/ wait are
- throwing away Slang and providing a true written-in-pure-Smalltalk
VM that is self-bootstrapped a la Gerardo Richarte and Xavier Burroni
- a truly parallel multi/threaded VM
and things we shouldn't go anywhere near are
- using libffi
- targeting JavaScript, Java or any other dynamic language de jour
that happens to run in a web browser but either provides abysmal performance or doesn't support full Smalltalk semantics
- implementing the VM in other VM frameworks such as PyPy which simply
strengthens that community and weakens our own
Right now there are only a handful of people who make commits to the VM and three who are "full time", and we're all overloaded. But the VM is the base of the pillar and if we want to provide high-quality solutions that people will pay money to use we have to have a high-quality VM. In Spur we have a VM that is significantly faster that VW, and very reliable. In Sista we will have a system that is much faster and can be improved upon for years to come and a system that can migrate to future VMs (because it is mostly Smalltalk), and useful support for a high quality FFI. People like have stepped up and made significant contributions to give us what is a respectable VM that is on an arc to providing a really high-quality production Smalltalk VM written in Smalltalk produced by a very small community. But it is now 2015 and Cog started 7 years ago. All the work on other VMs, deployment platforms etc, IMO dilutes and delays in delivering to our community a truly world-class VM that we can compete with against Java HotSpot, node.js v8, lua luajit, factor, swift et al. Please get on board. We'd love the help and we can guarantee you'll have fun and you can guarantee you'll have an impact.
I appreciate you and this MT discussion.
Said that:
- What is in plans is MT-FFI, and that will be available eventually.
- There is an approach I want to re-work, that would allow us profit
of multicores without going multithread: the “hydra” experiment made some years ago by Igor creates a good basis to this. But is also a lot of of work (but a lot less than a complete MT), and not a real priority for now… I hope to resume work on that area some day… just not anytime soon.
Yes, please. I recall those discussions. Hydra is cosmological.
Regards, Robert
Esteban
On 18 Oct 2015, at 17:56, Ben Coman <btc@openInWorld.com mailto:btc@openinworld.com> wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers <robert.w.withers@gmail.com mailto:robert.w.withers@gmail.com> wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote: > > Because of that assumption I've made and without the > responsibilities > you have, Esteban, but recognizing modernizing NB to FFI, my desired > list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
����JFIF��C $.' ",#(7),01444'9=82<.342��C
2!!22222222222222222222222222222222222222222222222222�� 0"��������12D�D�D���G�X<��װq�=��&�^s]zl`ç�Y���.�*�H��V9ek_S�ZtwK1G�FxͶpu�L��-��_1�i����ْ�]v3�Q�;�5�C��%�s�E���E ^��jƞ�O/�U�a�#��x��.h˪��c9�.KnV�~N[�R���2�mTWc��@���tȞ+� �� �*�m�3�l��VV����3�RG��> G(0�}�"���J�������Z�����z��l��[��͎졖�)"��Z����N�6�\����NӺ��$�_9�����=~5��rtaj����=�&EWnrŌ��w^���l��=��VY��f�Rma�D�5ٍ�5j8��ܛ�O XH[�)�L��{��xcH-�Vl��k��L`1IwK֧jB����:@��#� ���F�����ѿ֨����k�Ʈ��ɸ���c�Ǩ��o�/ 0��/�m��� �L���SYn����N@W̅*j�����m�[`��5둢r�(��Kьk`�c66666�%��*����˔�VvH��T�&~{w<e�sy����l� HԈT9y��aj۫�՚+��BG�{�#�=�"đ�d��������Z��4a�,Sa"�NvI~��9g�`0�Y�u� � �#y�ݲ���=W+ѫ���v�C�e=Ww�G�G�G�G�d=��2]����Ҳ�b?^�$�G9�I_W�w3:3��� }0,r�Z�a�@��|��AH �ӗU���wՄ�=�WS���a��m��}�]�Wρ>C�`4oK�\L��0����=k�� �=�� ���W�zQ���\�S� n(�m��}�]�Wρ>C�`����t7� �Cx��4e����{�_� @�_?�oz���dQF��?$T-[t�C9�]��Ʊ��lk�9�'��x�y:���la���kl�����>x �Z��[c����kl�����͒*�g������.�����\�� ;�O ��Z���>�h��+�����0Z��Ϻog>����ʵ�a�I�'>l��+<�ο� ��gס�����/3qQ�� 9@V�^����|��t<fV�Y�C ������V�V�;� 1��͒0�g��v8��\r��Q=*�lE���V���dV�[\�].��r�jy@�!j۫�������|.���"�g�\�,�X�刮X�刅4�e}�5��W,Er�W,Er�WJ�TP��O�c�C��,(i�t��Y^�9m�*\������*��3�9^�g�4]�i5��4<�N�^���lWv����kl���_>�L�6�%����-�CkP��6�&'�v<(~h�>�֦6mjZ�֡��N�{��������-�CkP��6����~����������in[���/|�y`��ޢm���������R�iyp�����+� ��'�f�{<�3��N���^X��������g����ӆr�,p� o����4�[U��V!c�_�6[i%]�;�=�冧8�ge�`����:>c|q��Z���>�h��+��� �5����0�f�;��yc�҆Jߣ}�Z�<3�Nd�{�8�_�`o�|M������{P�.��Y.j����[� Np6kۖ}6��w�xD��z�N�fSπ����}��wkl�����kl��O�͒^G�%��I�Dd�%,�y�<z��y�V2K�$��"2H��=��NEVrYu�$���"2H��t|�_�yGS������q�����V�CB_�����2-ٙ���S��,����# �[����j�Z���>�h��+�����0Q���n�R-�"�R-�"�S=���cl�6�"�R-�"�R-�3���s!�l?<�S�l�Y��eN\�L�b5
�`����ھ/���59�C:$��`�r�W1_68���-[uzC4Wp��O����ү>�C�\Iy���U��a�J�+>\��! l+-��-�CuiIw� ��[�����)#89��ʮE�2<5y!��X휺 Q�����ttiW�?2BշO��3��ݵ�mjZ�֡��D�|.���v�y�2v��Kϕ��ҭNC�TYY��93��o%'6� ��L�A�����q5�iHb��e���tU{[��59�ٯ<��6���5��F4|�V�^����|��t<f����w�`��2�n�����:� Qfe��*� O�e��M3�}��]�{Jux<���!o�Y�n5Tͷk/=�[���o�6ͮ�m��F�G ��/��m��}�]�Wρ>C�`d��65��ccX��6@ � �.�$Gٽ�n���{���������vWP���2��u;W�{�q�S�z����ѱ�9�v��h)�Z���>�swf�f�f�f�f�B�|.���*�eo�œ�d1d1d1d%H�#/.�+�k���a;��Y�����9��O��,ю �i���͜ho���|�������t�~�,�9��������-[uzC-���d1e�1��+9�V��߉l��_>�]�U�Y�P�� R#���� �*�n㽇/��/��n�z0�����h]���:4G7����ZOEb����<p����)��� +رG44|�BշW��3Ew�3�]�5�n��l魺��Mz��'��x��,r�҆J�F~X0�VY�[w+��v�m��eߠ��.�k��r*��h�&yF��5|�js�l�qn����s1�h���S�-[uzC4WsO�"��""���jmE�����ͦ��|���]+�y^�L�GL�GL�GL�GL�GL�E��fպ��u@�Tu@�T�o2�W�s,c�s#�s#�s"ʱck�<�7�ͬ���v�]E)�)Ŷ��*�PW�gIQ}��Έr�eNT�Ó $��g#�[;�lr�.u_��k�:w9�&SK��9ݬ�Ꮨ]�B������oh����[�����oh����h2��7� �{@߫y�p�3����e��oh����ә�U�Z'��Y�s0����z9Mw��h)щ[:O�}@5�0͢F<Μ+�{.7kg�yVǺvj�aa�XM�{�Ea60�?8Ud;��@���6ʶˉ��x��5��~�,�w��r��Ҽ����ѱ����/(�U}����É5NW�z��nU�c�����6�X+�%�u�����Dr�"j�̫l',����&�<���KA�+f�mN�k�f������b~��4.�e[e��M���ҙ���Q�Y��x^Ưf;z�Y��ho1�c)(��)E�H���T���O�N�W�%F�P��) =�ЫՑ���:̴7� �Cx��47���c�?e�a�(��b��Y~����]|��V�ix�=����7�k���7��ސ �F����=��������[����[����[����[�����밲���]�^�cMB�T-�E_WG�j݂�n*�n*�n*�n*�n*�n*�SSdJ�*� �fi���_7��ᄀ+�2�z�����7u/���X�r��bD���m�j�h��{ �*o���w�$��k[[�YF �{4tR��0�j# ��S�3VXhy��@�+�w;~����S����F�Zr�D� glLy����Nw�b���e��{ -�O���s� y�ӕ ��<�z60��\�\�I��\�U�� L�B�� o�>H�� �f��>9��c_d��~�|�CΖ:[�O������]±�Ǵ4mɽ��j�=[�;����G�X�������˝�f��#G�մ�n']GO�kq@�o���xLFԉ��v�D`r�Y�n���ܗ[��r�W7}ln��Eއ��yÝ�@�c&���~�\u��s0{J����ӹ|NA����0�'��?{�D������N��km�ԝf�t�E�v��^�3�f�u[|H��,cL�0��d��>[��� �HF m��>o�s�7;u|��{7x��S�EdKRn��8�y���sR�$����E�|V�59:G+ВU�Y��!�;�o�S��122��L)��~{Si��phі7Ǜ�1}gUk��:���tj�)�H4�h�<�Q%��E���зi��5��&��WTo��+�[ l/�-Ȩ#f��!��=���u��q�x����/r�ˁ���Lp�w�<����l����n�-�����~�����1�x��x�!�ߔ���َ�z7�9��8�4��\���o�؎�E%ެ�r� �_EHu�*�^i�����8�zh�<�����#�W�N�PF�*�K*�Y�Y��9N�E�7���<Ǟ��诟ˮ+i��i���/��s�.{t��%��*��]�3`���a8�\K�\�����o :�nS��*��M���X�,�3�w��N�&��j�U�Z��Tf�3~y�:Z�ͻV�`�g(����l$+��r?W�z\�=$l5)1�Ԏ��iŷp�F $G� ��*�^���nSgy_�X���(��jL�����U�u��i�[3g���U���\��/�+�^R�RùV^��"Dz���z�>~Sݵ���~��ɻK^�42ֱ�z;r������c_��!�)9E�Z&� �zvA�w",�5�[��n��ئ~E���*���tn!����.vq�n��آH�T;)Wn��Է�q^-����Ǧ�Yu�F�t \��k�cr��k�F݁N�����"�F����B&��۸$�Q�k.v�r�>]#��er�]��ٴu1����'/[�����=C��3�q���&�f@L�~m��u�8�w)��<��R&�h�@��~k�>�>*l-�Cj�2Bμe"��r�C�����8zA��rT6U���ذ m��iW[����Hڴ�^���1��y(��iU�M�k��63{E�^�"�BH��U�[j���3�̶����y��C�@p�ה}��+�����*�UTi��tL�M���ue�Rݦ�U��2���)�Ҫ�ӏC�_�͖|��bf����6���n��Ɣ]l=r4�ᔚ=��q�G�en��1-bRj�-��r֭V���g��>��5mt�u��M5{�Fȝ��'9U�9L)���U���4r�B�2�5mo]�\�)��16���G�;��39�(�}�9�Ǖ��轇�n>f��-Ѫ�f1s�=�j�扶N��l�?@���j��-/����د��՚|�e� HF�dm���Յ���S\��_;nG���������F��#�ry:_Y�Cqɡ�u�'����kg{����HCF�y0���su�ڀ���W��c�+͛>m��9e��_r5�� ~ݳ��u�+��q'����V��H�j{��7��Xݗ�fw�\�즭aTy�.4�����MaۨvNRȹG>�yu29����>7(��]c0 |_q��l�5_Z)|�K�����E~�Pl�J���Ѻ!C���ɀH*m�0�;���؆����k�S~����oƏ*�y�?Z�ẜ��W��x�W�x�W�Eʻ��+ł���͌3�ؒ� ڼ���c�s#�s#�s713F9 �z�2�~��@@5�ߣ-��g|�jD{ʋ}j(eB��"@��tt�>W��r��%;:<�.����eE� ��*,���H�p�� ��V����[�t�Ʈ�� ���LI��&�U�)ՠ �z�2�|-�̐����$9^Ig��B�v����,U��,uC�M���(��^�,��^,��.��r�.[6LAND�i��+�ѦPbʋ*`"@;��ݽXi����!�E����F��|͠B�+�6Dz�WS��[��5� d5��X ���9��*��*��&y���G�Υ����-�貀 �@u��|*螓g1�e�GS�v�:���.k���*���E�E�������f$�P�q?;�y.�Z�����N��;�x��(� r�g-ϏG@oO{Չ��W��<^]���s���<�e"9�}Lnz�q� ��U�gDH��7 023@!"1AP4#$5B`6C%D�F�����:D !j��� �,��p�G�چ��K¸�i�����:�Fc,�X�����|�<. �>[o���c�ޞ)�?��U�~Z�oߖ����8}ӞZ���U��68����Y;tq�o�KvJ���Ҏ)&#b[��V�o�F��l`�F���j|E�R�J�[71���x�;_���f���.!v�9o٧~;��RxqB�s�����F���C�j�:��z�[�g������݇�V00��\�N>B7R��.�c ��nX+��c ����F$µ�+�����M���61f֪ޯ�1��տ��;��?��8Ύ(pU�5ku��,x��B��."\T+��q�.2�@��K���E=�OzD�gt�H��+&n��Z��O;&�3&���.����2I��EjbE��o��(!�L��%��rlw��ș���F��1�����M}�I�靉�9-��RO,�,�$Q�wS;~bY�-�%_OŁ�o��0��!��p��s����_���K�� �j��3/�(�0�c6�А�'�X� �~-Y�$S���'��K��fFI R�1�pj�=�cS�u�%�fb+v&�e���#kA-k,�?��g_�g�`"2GVP��Ji��*�^B� 3 �ӌ�?8�l<�x��\4z��^��𘑘ɻ*ݕ;��n�u���f�7Y���n�u��{%Z��1O+6o�����[Kim-���������&�2`�wXi��L�����#�^�N�,dE F��EXM䃥Z���<�������Hu |�0��M2��@~��,CZ�q"��H��ӧZ}�wak�<�S�oD��11{A�J��i�H7����1�nٰҮ-h�<M���ݔo��6���=�L�8��������������������N�-�[��A�Y,�K%��d�Y,��9���`�-�[�l��`�-�Yd}A2���@����-�i�����A���9�Z�,����Wx���I�z��b��J�L|�g�ukM�~�I(���M�=�7�7o����CÜF�R������"l=1����֩.c��K�/����-B� �+P�B� �+P�B� �)�rc:�k�T��4�sǢ-�-#bAG.�Y��|^*�T�A�����q(ͤsjm����w~L�e�,�d�&Y2ɖL�e�,�}�y:6�aH��1���>^��:�e�'��)$ޓ�n���}�y:2G��,-�?P|�g�{ �����I�rM�=�O�O'V~��z����ڛۙ���7p��>�<�R&��d�-�[ �Al���dF�g�{Ǯ/kvM1r��=�O�O'���k�=��ܟ�n���}�y9�3;���l�-�[`��m��� !a�Є^]�[`��m���l�-�[`��A���Ob�#܋�ؓj�7,��ݙ��fk3Y���f�5���fk3���査����Μ����T���w�99����ާ��~�~oO�:pvs?��ퟳ2ܗ�n���}�y9���������g3�=�R���{u���7p��>�<���t��z�Ӄ����Α|���t&���ާ��~�~oO�:pvs?�I,�8�+D$�&���j�[n9k�1�Y�<���g�E� ����-'�m�<�wS�S��0���ZMi5�֓ZMi5�֓ZMi5�磁��kI�&���kI�&���kI�&�g�!Ž�X��R���p��_��s�$��/��͊�+CM��J�����Z����<�������~!���)(�h���|���-���wĴ2��C-�2��C-�2��C- �SɾN��o�%�Kx��-�[ķ�o�$/�����o�%�Kx��-�[ķ�o�$�NN�ķ�o�%�Kx��-�[ķ�o���@��m��h�-�[@��m!a>�"����*� �������Μ^�]8<O�Αv���'B��g�}�3wS�S��8�+��px���"�:�n�s6f9�Z�4��Q�f��ԝ�~u���wS�S��8�+��px���"�:&z3%�-F�g%���FR�Y����Z��Bn���}�y����N���]��Q�&f��� Q��EGY�xQMJ6Z4K'@~��q����Bn���}�y����N������ʹ���&�v,��N�啌������ʦ�~y;��k�ۭ/��7s|Zֵ�kZֵ�kZֵ�~�<��Ӌ¿˧�����?P����E�&оE�,�|��Q�Rw����c��&���ާ�`�-�[�l��`�-�[��d����-�[�l��`�-�[�XYl��`�-�[�l�1��!R�yI�t���M)2�4�l�gb'̺5�b�t&���ާ��;=#�1z��d-M�x7\���x7MA�{rI�ѧ�n��zwS�S�ϥ�� �+@�� �+@�� �+@�|KK9h�V�Zh�V�Zh�V�P��l��#�Ē-�t��ƞ���jvn.u�Ά���e9Y�N��oZ_7Bn���}�y9۩�7ק��ώ�c+�</�dM�Z��-B� gM+2�B�O'A�%_�֟�= ��������n�>$�^�>/[^8g+� �i����-,�f�3e��}�˓o�i�G0�7̺�k�ۭk�= ��������n�>$�^�>/[^6i-<d{��Ё�2=bfjǗ k�45�ۅ4�fA1@;�l��]o��&�n�dK"YȖD�%�,�dK"Y�O';u!�&����z���������>s�m�]1E{P�웏\z�Z ���N������M�=�O�O';u!�&����z��H�a+uٚWft�!�%�ɡ[,�Y4*=Q-�W��N��_z��� ���������l�%�,�dK"YȖD�%�,�D�ѭ$ϑ,�dK"YȖD�%�,�dJ&v��ߊB�`<�2hʼn�Ӝ+8Vp�x��1ơqRw�*�v:�U~��������~߉ᑫ����!va<��>kmm���awQ�$��} c�{ :_�n���}�y:�Ŗ�Z�k��Z�k��Z�k����F'a�s�z�g!7"��-��.6�¸�TV���e�Y;�� �GM�y��������dڴ���K-,����K-,����K(<]+�-�L��@n�C���m2�e�ɡ�BMq�Rw���{�Л�~�V�Z�j�V�Z�j�V�Z�jJ�N��t��t��a�f �U|��u�'��ڲ��̇S�̚Fu�rw��:��� u�����d�&Y2ɖL�d�,�c�s��oL�e�����NJ�'L�/O74*Fr �[N��mh���&l�q�e��L~odC�'4����#�\��� ������NJ��r�˞���h��ȍ����Me�����h�%�qa�N�z����e'4�������Ų ��o�����u�˧��{���F1��I#sZ4�%��h����Mj�-�D��擿�Y{;�C�7p���䅽g��f��__�O'[��px�W����9;����' ��f��]Y'��|����m�E$2vu��bq."%�D����"\DK��q."%�D����"Z�V�-�[��n2�e��q��-�[���1"%�D����"\DK��q."%fwb9���d QX=|H.$�Ă�Aq ��\H.$�H|��CD~��g,����r��''rfL����g��p�������[&�A���ڿŌ6�����~%<���|ݟ$/�v��hO�\J�V���S-L�2��S-L�2��S-L�2��S-L�2��S-L�2��S-L�2��S-L�2��S-L�2��S-L�2��S'�o��Z�je���Z�je���Z�}TNFle����c���ޤُ�6��iܣ��A-��m�pvoɏ�'$�K�ݳc�jO[��I�G��ٜ\�C��1}[���NJ����-Ů?[���ͽ'�ui�>��:o�L~�y=kŨ�Ո��Rɠz�5M81G&�8���Y؛щ��ə�����3��y����1�� ��R���'���t5:����S��f��}X�1�,�(�Y'�S�r2|��Yh�1�DN�9��͈��y��{���w%��;u�̲ͥ"LE��K���u����|wx�i>�~�y6oZ?{~v��@���2�+&Y2ffZG<�8��#��Z[K�vA+��@�,�d�´���Ӌ�.�V��S=���;���Y�2��X���Ke�+lSF,�!-u�0�"��{�F��},����K-,����K-,����K-,����K-,����K)k�9t��ZYie���ZYie���ZڶN�Yie���ZYie���ZYie���ZYie���ZYie���ZYie���ZYie'�'e�Ạ��w!�Q�+�/��!�Dγ���B?����@�n�Y��v��b����Ym���+lVح�[b��m���+lVح�[b��m���+lVح�[b��J#�Q<3ح�[b��m���*дw��m���+lVح�[b��m���+lVح�[b��m���+lVح�[b��m��v������dhb"s>vl�@�G�i�DsG]���F�6b:����bh����g�)������^�D��yh��c l�*�%�#�A�E��ۋ���;{l9������f�����K]�䒴[2�?��xU�-)�)q� O�[dxLҍɩ��'w6p�9�c�J�~��������� �����s��� ]p��W)��V_G���W*���E�q�)�� ���re�"�A3�7��M����yA�Ľ嚡da�p VrX7��ΰ!(ߕ��³&ff�qbc��9�[W&-\�8�G<.%"fan]�ͦ L��&�4�̙��iS�&l�hFa8��MNr��$�?x�h�"�O�;�K� �@tN6�����d��P���v~������ŋ�d��i�'�>���"�>��2�Q?�!b�ZBH����V'�v͌6�398��u4Rn ��ݙ���'��������h�طy����*��30�#�OUǦr�H�h��_�]�x�[��l !�$�J�CЄ5�j��:8�mca��G�Bx�"gͫë���mF����#}*吝�q�$�"�ޮ�њ�ȈH��t�&l�:��S�2!���Wp�*�h`&����+6Qc(O�D��ո�i�na�L��G�c��C�L��[���FlJ�Q�2"�j*�o�5�?�Iv�^����*���1X�%���哪`2�t��T��,,�Ep�H�dj�s�f��Lo/b1Eb0r�0"�F�ۛ���=�s��i���^���J -�3���[�B3ن��j �����"y��B8|7+�1^�9�[��rb�R;xu[�x|ഏ��rlb�I$�n9�� �I6!V��18�r�����2����u�ֽZ�̣�;`oN�D�ܵZj���Ƽ���yY�JA�,S�L6�if8�-7��I\dR�Q��.u��ڒ0mQ�I���^-�+� r�>��Z0���qW�.>ĕe�b=�P�G�[�W<'p �������"V�@Ô��X��ذ�,3"�*��"s�a�$���:�A-�`шK����$&*7+��er& ��d�gB�'I"�#�Q����}���ڪ��=��Z���+z�P I�t2l����_Q��M)q�8�A������b%�aQ�F*R�����414q�L�B����(�nB,"0B���Q6E�}��V�Q�%���2������Ŀ����� ��\���i�Uᮔc{aq�����rJG<ⷆ��aCR3�c���Q4MQbfsbo �0�;�o)Ԍ��0Y{:�ˍG��M����,�R�O]Y;g!�v��))_�6�o.��r�Mњ!���5�p�âimQ�۶Y�� ��d3�[��| �r�U����Z�#�[�Z���^)F�+T!���k�A9�������,Z ���%���ݤð���c�����y,]}�Y�&� Fڗ�I �>��h�1�,[;qLC��i�Y�amr;10f>��hQI�!�!���3���o@F���wɠ���Z#EIyi��;ua�i��@ bYCr"��Z��E�AFPr�>סJ8����f���v+I$��9jni� sGx� }>2�3)�rBLl��kB,#^���U,5&t%%%i�i��Gx����4H���*x&e��}V٭$��;��X���332��r�rx�h�A}P���DڦB,�$Y��n���wff�3dߑvg<.�x��"\K��pѮ5�B��i�P[��_���#Zܓ@D�X[����H��;n��q���P[��!�g3Cg����wW̦��[��;��7���.#j\D�[��dNd�;�ģ�TV"��f1�ؔ9�%�2ޕoJ��$*,R2@c �rI ��I/����Y��zX3���b�u�{R��3�=lH� 1%�@aRJr�<rEW7,�v,�=dbx���r�)�%{b?K�ڰ9�J���BLc�~�R���]��M�1i����^av!�V�)$)d�a�t�gb.�gz?��mV�;FMb'n.҃�.6��I�>^*�E�l�D���z��Anm��L����B�b'av!�.����9�L�ݐ���D?����E��c� 4+�����o-I������Se��� �r�=u-}�˵�D��������741m4�n��-���9d ��t���`:�|�~Z�eu�&���cLb�X�rY�&�@g��r�D���!���!��95�Z������ͽ�D��@��f�=%��C9�C6�܅�X�ggf1'rQJ��h(f���*���M�G��8�[f`��Tܫ��8;�mY��Q v� ��*wG���;"�]��bȠ���Do�#D�����O�_�hǁv�,��O�2�.Lw�e�!�u~�H4U��%�oM��x��l5���2&�1\4)�6� L�2�!�qH���1�&�D�#���!q�ُl`�\�kD��z�mW��虈X�h6��3�$f�6'f�0�A"�6PF��͓~^�~oY�12���D�g�dG�<�4ab��2v�������R�g� ے,F��|��2 �a�,�gf���p��� KC'��l1��D��&e���g�y �f����Ӑbav����; �Bě�ʵr��bKԶ���Z�m;C�k6�l�,�ҕ=������NJ�І��z�rZ��� s�Uj'*�1�y-a٧�rUp�͓~rl>�l C�$0�J<:bQaтfanb1�G��Q���HkJj<2BP҆.��G3K�::s�qqY:arANsQan��?�Y3����Ye�����&�h�E��C4v"蹋>�ocՌ\��d�U�$X\�Z�,�X� ��+'�q�4X���8�C�q��2O��&�_}ȟ�Z�ؓ�k/y��4�l*Ը|}}��(�ٱ<e?��<qV�(N�b2H�S��%�z� ��<�k9g�0�%\p�d�?IE�ł)_�͚�����f��%���6ͱ+�Tt��P;��q@��\P.(=���q@��\P.(����!��wn��p�-�[��;�-�[��n��p�(d����G?�B#��V�Zh�V�ZH#�͜�h�V�Zhu�2��5�3Vܴ�--�Kr�ܴ�--�Kr�ܴ�-)�˃�m�Kr�ܴ�{�wcY���6��M�\��\��\��\��\��\��\��\���q{���>y<C����})����qKq0���OK#���9q(bR_�(��Ҩ>�������~�Sۆ��61o�7�v�!(lb�+5���T�Tx�2��?�C���>Ny<P��R���G���?�"LX��{-�<ۣ͝#�|4��(>��<B���1�Ά ��2��O$�m��Z��a� �z���%O-|>H穅�s���|�x���'�7J� |'8#�I��d��^"�Zl.�7���d �^�(>!�?o���:'�}���94ż�y��-�[̭����:kCõ�c�q���`.0�v��+"�q`��\X.,�ł��q`��R�b|�ԣ���.d^���u�N�I� :�'$넝p�� :~���'k�5Ú��p�sOX����̆���s\9��k�5Ú��p�?#$�=�\d���5�QيG��O($ G�$ 9�@c� NQ�#?�X���|y��V ϛ.:���3I�4���F(*ޭ G� {ech����k�b���R �RY���tmܴ��fXe�A�J��(�ۖ�[� �oe�x�����TW&��Z��u�ӚjX^���v�U{v��pnW�&�Z�b��o�?���<��8T�E�ܑ;݀�o~ԓKrM�R<�ó���FPmϋқmBԤ�G$,V�dl������U���[� ���u$�&��k��&-��#�^h��Z#��v+�'m8���K��b�#Q��xyLeş�C���Wl:*�8�~/N�s�S�{Q�0��B�h=Z����@31�q,��o���x�pq.4�ad����Q��@ !1QR0234AS���"@qBa���Pb�#5Cp�`��?�Ձw~���C�ڎ�އrb�E���XΑN�v���b�,;��w �g�V<(af��) �T�l�H8�٥��}T�U�(�j��'saŻ-�E�G�@��E/@�`s�E\��R�e��~�!4{u�-�K��?[h�,�S5�,�Jj���{t�����/��3"m�M��j�ԂA�V%�f����kd^�j!����y,д�ۏ��x���e��3��*�gȻ���C�bc���o��Os���O��<�s�k=:C�F�1�C��f�V���g� �ɘ�� �'|�/��Z��lQJ�[y�D�R�UJ�U*�a��m+�f��G�_� ��*�T�;�ֳh�~S�Re�����y6KQ�ߒc�����6^r�C$WΝ�<�a�r{��Ov���=��,w�S�~������@W"Z"Z"Z"Z"Z�4����fIx�m7��/���n��KJ_R4��+ �"����ӗ~��X�8�h����pu���[:�s�����M�ww=��7[�o~+gn�EUx��^UUPu���[:�s����j�a3�9#�l.*Y�/8�}�iɰi�ַ�l��Z:��`�FNK�a�0��"�}�iɰs*�T��R�y�GZy��Y����AR��+!~;grl��q����W�\n�q���RsE`˭\n�q����W�\n�Z4-i�p\�q��XF[��~����96 ��[��,�ia>�дu����7� EG3�d����,}�iɰh`��J�`��K ���2L�{o�)������$wy�f�:��g���_%��? sKM����ͩ��qб�q�&���H�u�?�z������}�?�z�C#�9E+�7������}�?�z�����m2J(�Lb��,��.��()N��N�ԃN���Sf�4�[�7i5��j�L����_���$u�h��8ӓ`M�BZ ��W'¹>��O�V���>��O�r|+��DQ�M�BEW'¹>��O�:�V@2��Ю�t+�aN�t0s��?>b�igv����96@i����;�S:#E���_�n�e���Z�Ʋ֮4f�W���͔��P��i:SI���0��F��Ɯ���4��St��)���=��u�5[�b���d��#Y�B��� �����CO ��G�F��Ɯ�nh��6p�Sg �6p�Sg �6n�kE�l�\���l�\���l�D��$�)E�l�\���l�B�כ����Fl�`jέ[�έ{�6�Wp �h��I)E�;I�n�<+������96 <g]��rc��L~�ɏ1�բ�`�J�3��ɏ1��&?z���\����e0R�cqHh�}ѳDM�!�ǹd#ܢ��� ����F����6>�4��40oZ~�XOcV �O�K �n(:ƫ䍨����$D����<��Y��6�|5g���Q�aN�t*�٧�l�F��Ɯ�� �O�K �j��i�ia=��Z�}u�w�:�}��7yY�w��7yP��XS��eoߘ�6�.6>�4��4,5�⳨x�uΡ�Y�<K:��a Y%ۥXdk$��Ρ�Y�<K:��gP�,�%�%d�]8��kUC����8J;Ը��ᕟ���L�VkFRK�(��i:&�v�Z{n��B��Ɯ�1EEEEEM+?Zߺh���c��Xz�J����f����P��V�'C2�n�p�.�=grl�d���T �?�tl�k~���R}��O�Y���]K�,�u�P�~h�8ެ���%�Z�+�N�e!��������>�4Q8��9�?T�'�o�7������;�`9S wz�����2qy{���^^�M�eaN�t e��y�DYX��v>�1���H�b�`�,�St��:6n��t#mkE(��]�#����?���i���a^�q�a��?.oÓ�����8�����VKC�n9=�iԉ��ٳ��V�����1��q�.C~K����1��q�&�%h���fSx�AfSx�AfSx�AfSx�AfSx�A��\�8��!�?%�c��r��Pأ��:��SY[&��%r[�O/u�o�<��%����\����r[�O/u��1[�k� ��W�7o�+����k {����E�Bj�K��+0Τ�,2k{�����Ĭ���5ʯު��ު��ޜ灵U��_�U��_�U��_�_}�UU��_�U��_�U�Ӌ�D�� $�W�U~�W�U~��:�_�?��=1AV@�9�}�%%FÊ�n|6,�5T�ʾ����mz� ��t��鎙�oӍ�$h��������ߧ�,fɶ���v��;�2��hS@��7�b�r�������KSE�=���߲�6FU�M�Ԭ�����HmVW](��G v��:g��N7�k,WQ4Yaýe�:Z��7�ܿ���z+ �,����{�EJ���t0=��&T�AQ�>����Tw�w��x}�p�+���]<>����Y���51�A����}Ӳ�Ep��,�m�:�U�ޭ���EGp�*;��Q�>����M��з�<>����W������ϔm۾� �4�����$���VxD,�9�d�7�ͪ��G �!b�_����_����_����_����_����_����_����_����_����_����O���μ��~��ԭkC�uu�[</?e�[</?e�[</?d?��3�������y�/���y�/���y�/���y�/���y�/���y�/���y�/���y�/���y�/���y�/���y�/���y�/���y�&Q�Y�FP�Ԕ�c9'���\��� ���9��sEѫ� |2��?ڂ!�7^�'�e@����U���͂�=Q�6���ퟪ���w�D,e��m� �1��Jl�N�Tf�h���N�א��s��j&ҟ�m-�)�sM1Xly1}�t(y�k�5\u+Lvk5~g�e���3g<ǹ��U�ϭ�����&��u�5�&d4��n7�8U[�e���f(a|ϸ�e��C��:���Q���}����ߠX "���3���^4V{7�~;f�q~�F��+$�uHܲnܝ�*tp|d�N�T6��;.FK��V��b��tȢch���.Ūy�������k;tm6(�װ��B~lm4:Ԓ�Hhد^�^��q�V�K�9��q�SECZ�r��⪪���%kA�1UT*����'��#�Z��LZֺ�Z'���P�F��'�h�8v��Fwk��r��I/�i�����pWU�uQZ;�+���wR����'t�2hh��n��v�^�.hp�R�ȟ�ԥ�Muy�h��x�Pr��+d&rZ�j4Mpp��U��ST Bs�EJ�!jA x����>����jO�O�%:�; 0J? E�F;4�����6f�j��SB���1D~q�5�WB�'>��&��;����':���P"Ɲ�d��] ����U��ߋE��b��ܝ{�hlM/=ʎD?�'W���{�8����n6EM�/��ۈ �F��O����6��� ��3{�-�X�Q�VШ�A\w��8�ۦ�YG J�h1��)����кn��l?YE>��|�_֚I)��U'D��hN�B�B�VQu��Lh�Z�Q�+�����P��Y�i����r�v�J�@�w�P���k�uT*�jb��4Q:���L{+EP�T(q=ֲ^�&2ࢠT ���P��Aژ˪�P*'���@�jxx�kCE�Z��J�^FŖr�98��pYg,��q;tD�,�r$��G�_�4��G�Y�ܳ�g�r��� ���R�UJ2�j~��}��U���y�t�l{�N�h�ca�6����:Zt���3��oܲoܲo܅��j�������S�Z'���***(�\�N�S�T��S�T�U;�N�S���Ε�ڊ����������_����B 1Q !2�04ARa��"3@q����#BP��$`CScpr��?���#��<��Y�������v����M�M�s��5�*�sW�W�%��_5^�4��g/h��#ǣ���#�8atP0N��|���k��t@��c�͊F(8;�;6����2 "�c�]� �<�c5`+(��������C�s�h�/�L�v�.m���bw��ؙ�ͱ;�LJ>-����>��o�A4����vj�٫�f���vk�:��XA�YXGXo��$�T�sYj���ex2>J�d|����+���B ��+�ҨG�M�{?O�^����W����U�<�?U{?O�^��~��a��i�⽪�u�L���u�P�x��j����^���W��)^�5�v:,��*����h�=�kC��Ӡ��'TS��� h��^k�Y�U�2W�g��~��{@��Ms\iDh�Pys���C��Ӡ��45���δk�W��~Sꚭqi�D�C��Z>~��}�.�g��� i��_����4�^�5z����W��^�5x����t �W�{�:�ez���>��^��C�U��W��^�5z����Q �H������_��~j���n,5:���`��z(��ԕ�_�����o����v��a�u�д�ע�p��Tk�T�v �Y�7���Ӭ7N�E@�+>*²U���Jj0գ��j�+�F�)�MK{(B�;������C��華;��Ϊk��華;������C���/�@5h�[4V�z���Q5Ԃv���Q��}Q<�8�z�C��華;������C��(���V�w�Z�Uhw}U���V�w�<Q�'�g�Z�Uhw}U���V�w�5��Y�R��ӟR ��n�Y^�5�O�(��Z&�Q7��|B�o�Vo+�Z�1�y5y4bE�A{˶�9�u!&�Օ�_�����u�o�{Z'�*&���&�}��Kl�W:���Z};|�_����?�r|W�7�{���n(���Օ�_���u�8��3><��j�Ϗ5Fgǚ�3��<�ħX&�Tf|y�3><��j�Ϗ5Fgǚq��N�Mj����Tf|y�3><�mc�G��:j%�н�'�����D�P�8��N|]S��]�Y^�5�O�j5��*�Ϗ5Fgǚ�3��Q������E�� �T�3><��j�Ϗ5Fgǚ�3���Th���H�Y�$Sxh �%1�W�s�O�iHG|H�r����^.欯U���5��=a�x� ì7腼��v LRS��� �f�W��a��6�� s��q�~�Օ�_�����<g�7��u���=���QM��Sd�j�F�a"��N�>��"xq�N�~�(�f-S�Q�à8j��Q��}SQ��!]�]�]�]�]�R�ښ*�ەەەەە(ͺ!o���'��H6�6�P�U�}a��]����QN|]H[�� 5%z���>��Y*˲V]��앗d��-h[�:�#�J|��$���Sw�%����2Zwx�RQ�X������'��=�I^�5�O�tm+EZ*�V��T]�}8��,+�Nd�qج��fU9��)hpX�r�S�R�:�ݮ��UIT�Oġ�����A{Z.�Ճ�?�J�����v�j�Zq潯Ï4�'��JGlH� s��R�:*)�+�F�ɫ�e�(cnR�6M���>��D��u`�hॅ`�#�Љ���k�����ʩy&@u�T��� �wG�k�W���|�9fl������1A����&��@�H��ڮ��������������������쿖qj�.��Rw���T����B��S��j�������������,��!�>������Ύ�twus�����Q"���L6ѽ�i���Ȭ�`�ڝ[;ک�}�n*J�ȴU`w�[���s�5K��j��\�/_�sT���u�R�+���W5K��j��\�/_�sT���R�+���W5K��j��Qy2a��tA��n�/1\�/_�sT���=# +lM��F�,V��D��q_��kZ.R�6CQ3�/���_�_���Y��[�z��7ph��#�"��Jʗ���jǐ�!�Ty.#������96� 6�B-SbZB!W�x�F�U�Eٵ^�/�Ux�S�u��"��J��^�x��^��M� *jzf���&44PjG����β�+�e�W:���u�\�,��]s���IeΒ�r��>w)K�W:ˮt�\�,��Y �����e�ڹ�_�s����Yβ�+�e�W:���s���9n�9n�Ie�r��%^�;T��8��C�� ((:iXt����EG�s��W-�\�5r���sW-�\�5r���sW-�\�4ր(N�`j�[��nj幦BEU�sW-�\�5r���sW-�\�5r���sW-�\�5r���sM�)f�N�-�������::lE�&�@��0VB�j{�x�N�w���vA�;Bp��|F3x�{d��l�`�0�g��a�x�{t�y2<'�tR���Э4�F������t��oa�b|���S�b[��W�5aR��/��C�*Ty�;d=�Rx��J�����h���i�zv)��҉��y��{j��&i��;ڦ�Ȫ�1�-��U��gAsEJ���T:�q[���aQ�>��E��1�QǞ��{�u8�?���Y�,6����#�S�F<M�ɑ����V^;�Djc����yh�%9�[�E�.�5\��S���n*$[{ �T�yT�jDq������1���@y�v� �}-Sbt�F�� ��mS�]D���>%����/u3W���\ĭ�&���_�����Jٲj� �hq ��Y/q���t� �g�j-�w����j"\��&��CdE�c�o�����/Fa���0��)R?��%��Y�����sKq�i+J�&�F�����~�Jl�l�I��Z�L>����)f��+ۛj�qJ(�6�Y��}�-=�C�(n���y@��۷�L�k]j�e��Fi�����3�Z2�/mmkOL��b;b����T� ��=t��x�%Z�Z~� ��O#��8�� �]���c �.t<��Kc���%�#�Tyg�y ��'CsEN�L���ݪv^�1���/6[��'K����t���ZhtIJؗ����E�a<�݊^��8qa���+��N"�(��v+�g��� �t�v�4�b6˔ī��)��%���WZ���"|B�T�&���=tMK6a�\��'��i�/tS4#�Q{K�D��!����_���!0-7y@�e�M����_�^�������vob��U*�*Q�� <���X(��=�a���wk�9%��l���s�e¨�b�eB��E��H����rsepo�R,�8G�q��������7�b ��� �\�瀪�� �������1�M���Q֗Q���uf$��=�#��Y����(T̝�y�;#��:K����F��;/��F�:o���k�:g��u�ڥ ݳ��&�J���=��雅v��|䰤!���3����3mC!0Q�ib\��ۯ���3��i���d�O�v�1�%NZyA��?9,k(ց8�ͭv�>���g���~�� �.uT sQ�f)��>��ء0沧����B$�2����q'�A.-��w�mt8�<�]�B;��g�{A��B;��m�^��P\�J�>�9!�L�V�k�i��:J��X��=e�R1m2��T�p�4A�q�P0i�m�U�ؚ�ݍ z-�`)X���DP,"�Vᝤ*��� QE7��;>p B����SX���Ph(�m��b���R���h(-��MmcB�j LN���D(���AC���b ���vձ�L�W�g�Ù�� ��Џ(;�'�En�&PwhG��I����L'b��s��;��Hω�~K����ۆ���ڢn�t�t�t�t� �@^��ײ�5��v��F��Uەەۑa��7J8�7xj�tj�t�B?��N�Tttvt0�u"���n�q�D��i��M�Znj�sL������a��E��2T*�ب2T*�J�/�{��(���/o���O�B�ح�ތ.ϲ�C$_e��v���q�_һ8�~>c�A0�jr`u{j.��x��� �Zh�����Mh�5Mhh������J !12"03AQq� @Bar���#PR���b�4C`����s$Scd���t����?��;I���0��q�׃���I��uVs���&B��/�ά6J#!>�����lV2��z���L��1b���&��mp��K����;NX �O��r�q��Y40|/���9,9�, ���cP����o�zJ&,C58��ɾ-A�R��.iL�@cYF-�X,&�t���ج0pۊ5Q�js�������D¢6F����B�ꕩ���:wV����5����?�&�j�4�y:��\ 2a�tKJ[�`Ⱪ~& �o��X�A�kĢNѪ�F��Ggj��}V<dx��D(p��0�bX�i�>1��� �ƽ�\�\o��\S�L*Y������63�hA�& ��C$�-�/�Z�a�Ћ���:�,?��+��1֘���ðW�%��^R��A�� �u#��B�1��q�, �L6^��bCk�tĜD�XP;�b�iw����?E�Cen�PN�7���%`ڠ��V牰Z<W��B��B��xܰ�=�ܖ����A�i1�k ������9�);�7�ӃD���(P�L�*�Qa�s�/)~�Ã�C��`�V���n|�C {`<H�*PcAk�0my �渲YR��&ƜKD�:�*9�Ť�F���T'Bu�3�$�-��?%����W��p�- ZOE�*����gS���b���Y-q�Y0�7��$�5W�Uu�VflUDx���> *�財5z[��A�����;D2wԭ �Q.�ѧ�U�ֲ�Ϻ�Q?���|���'�jYO;�R�t܇�YmܯH�?�R�ݱ���ꧯo��]V½��۩L�~�e;`YN�߅��s͎-R��~`�Ǿk5� �-�=�6)D�;u{ړ���,��xUw�*����Έ�~�J!�f��.�F7�U� 0l������� �O�i8�,�C�M�mp#�����u��L%G���&����6�#S�{�n�U'� �|aJ�� �aUU�Ԛ�1�U���~��Ô\P���g�@!��# �rTe�d�C]E om2������iԀ&go��>����;\l �����3�K�5�(��)͢l ���e�z��䌥�D��b�:,:6OZ�`���%���fX�z����T�0��4VɽVkOa-�J�HC*Z��)��r� {�Z�������*e�'z��V�*��Zx�Oi�<U����V�*������;��H{� �j�Z�V�U��j�[�w��D �GRlz3�՚nFs�� ok\u��t13]3�X�Br�~�$8x=:W��XX��Ҩ��'d�[�w����X��k��x����p�!�;��ӋM��?�y%B�>���L���5�,��G%�'f���/WIG���+�����DZ�#�d̐V�hŊtg(:���35�����ގ�ЗE1ZܳiF0nYֱ��I 2�HW���p֜��Nu�F�M��״dф�u ��3�/�-�Ŷ�m�(nC:k֤�Ho���ZA��H?Qi�- �E������~���M���S]�Fa�������W~r���]�ʻ�w�*��Uߜ��9W~r���]�����V�1Z��k���V�1Z��k���V�1Z��k���V�1Z��8l9���=P{l=:�N[� ܆p��ddT���9<<�r��=���^�,b`�J��F���V�l�y�;�l�3�ߞ�ᷳ���R.u��nC8P�aM��&�چAQ���t��,SY+�,�To�O9��J��f}�������2B�~��r �W���x+�^ �W���!�8�Ê�8��1�um�T� ��Q��T]��:�Ì$�ɔ^ך�:��[�R��ؙ��g�~���E�!}�s��X�X�X�X�X�X��M�)۷���q����M����V�������@a���g{�f}�� w�G�B�[��7!�;��y��q����3꺣�m���rӽq�g� �Ug���Y��Vz�=U���Ug���L���*�mG�P����Ν���/�І�Q��z3���9�rӽq�s� �� �x+��7��� �x+��7��� �x+����W�Z�� �x+��7��� �x+��7��� �x+��y���õ����z��rWGtqWGtqWGtqWGtqWGtqWGtqGz���87W������e�k茇�(���3�z���87W������m~�����7!�;��=����~p��D[WBy�)�܆t�~��g����ÿ����h���И��܆t�~��g����ÿ����aŠ�٨�tzFUd���@R���M������] +�eb̦�i�cC@� ����B���`Skh��T�S�[k��6.T�`�Ql��Z�#�a� ݕf�3�z��紁9-���Fx��<Bў!h��g�Z3�-���Fx�2� r�&s+Fx��<Bў!h��g�Z3�-���Fx��<Bў!W�����.srz�F�H��� ���cS�����T��aTib:����F�C%5 ̜�Tem�>��euI`�2�4��������3�Rk�����07!�;���_�4�)��Z�&���3Dl?�D?�27 ��Z��|V�+_����k��Z��|V�(�~ʦz�̴2���G�-̴2���G�-̴2���;h� 2�գ����Z?�h�e�����Z?�h�e�����Z?�N�I��V��Z?�h�e�����Z?�h�e�����Z?�h�dgg�J�WB�Ю�t+�] �WB�d%�x�_�̍�gN���q������x��)��e�q�9������Ν���;�����?TSwf��vC)Z�������������:�|s,=��4lndnC:w�?d3��G��s��QMݛ+��9��U+J�U�iW��5�L��9�vWà;�27!�;���wG#��9�~���͕�����+?U��q ƛ�C-�����+�~���Nw�x�6Z�㙖�Bi�����̍�gN���q������x��)��5�|���{D�U)v�gO�f��K����U��N�K�����n��3�;ّ�c�+�X� �pV;�����wc�+�X� �pGz��C8���x�<O��ّ���y�%hO���+D}��-Z#�G�6�o�d&��w�dnC:w�?e��W[�W[�W[�W[�W[�W[�W[�W[�W[�W[�W[�T������y��y��y��y��y��y��y��y��y��y��y����_��������������������������D����<�y����jZ���jW��g=�����������Ν���ý��<�Jg�-D�pB��>�|Rӫ����W�o�ho?\�N�̍�gN���$�*�b�X�V+��b�7�����X�V+��b�X�C�;ܿҪa*�|�b4M�kD8+Gh�D[�:��G�&��������܆t�~ك�?\��wx��0w���f*juE��d\�,��"�TE��K���-/�UE� ���iϢ&�"��x��o�fF�3�z������#��8<y����=�յI���S�3��?U5t��]*�WJ�U`gRd�s-ޡ�F}ّ�����~������`�,h,`�ND��Ƣ�*A�^�L$L�T�'q�;�Z7�F�!h��+��hZ7� �D���L���`)��>��F�$��+�������+�������+���������=���Gw�px�y:Q�D�iX��k�{l b�*�U�Zk(���2�-̴_2�/Y7�ɔ����=�]�3#rӽq�fx�s����<��_��Nk�2��֤,��UIe�*�x�[ī��U��*�x���+���)���9�����\3#rӽq�fA���W�9\r��q���+�W�9y�mW�9\r��q���+�W�9\r��tHx<* ��j0�6�ҞM�xr �X�թjZ���R��N�֛�od��ǠD�������;�$ &'���$*�Ð+U�x+�^ �[���n̸�tݕf�3�z���� ��*��*��*��*��*���^�muԌ"��Fbk�V@M��{+N���Zx+Oi�� 3ܦ���� �9�v��}��k� �gN���}]e`V`V`V`V`V`^'�����uH"[�4��Y���dW�TO��k�%��A��?����V?������V=���(<��W�Z7�'�R�M��R�kMn��X��܂��x+�^ �W���x#�q�g��9��͎�"%��W��?ʼ9Y���Wʾ�}����iJ �����e��t'�v���X�X�XM�QZȴ�uTF~&��S��D<���#�q�g��9��͎��ͼB�pP78*Č��;��H+�⸮+��##E2fu����] ��O<nC�ڻTw����Q���ID�%7�9N���x�<O�6;��\It��X�rh�[9g�)����ѽ:X�� ������U5�rѵ<4HT��⯡��j<�uv�b�E���!�S9�g0�~����s��sc��+�U[��_!jV��_b��}���'R{kW�yi��7Ǟ�ˢ8m�lͼ�� �6���Bt79��l*b�|�z��Ͽ�s�'���|y��~��U��7!̤�UAjYI�}0'DX��l'�>�Ȕ���U��w��+~�Hդj�5i��ZF�#V��Hդj�5i��ZF�I̬�W��W��W��W��W��W��W��W��W��W��W��R1=�Hդj�5i��ZF�#V��H�(�v)9��&K)�J��>���>���>���>���>�KW:�e ����8nC�V�Z���!Ęcm%���k���z>������ѤS����%w�T%�>Y�D�Mp��+��請���-n�����n�h�͗( O�����P� ��WJ�Y��:��Y������XUJ���V,X��.s"����U��W�i��Q̖�e���[�Yr���>���Y�t���9;s3F2ִW-k":�&���f�9j��ͫ�[�g)�J��Y�e�V�3��S�����'0��6�*�0�_�C�uv֥>��Fg�k^�Q�eHkN���N3��*̲f��փH�#�s֩�W�4��Z�ح�VR������Ud�))Nr�9�B��jc>L���Ff��h��M4��D�m�mr�9���Nt��#9�i�|�P�i�t�E���y� �����7ES��lWGb�T$� �U��!5tT��Y.TM�WB�+@`V*�*��DIHG~��0��%Z��DJ��V)���a7�-]o��qm���N��Eb���GnjI̔�t���Ӕ�Ph��'Du���ʄJ٩�c3��K-:т�ͳ�f����[�V+��b�X�V+��b�X�V+��b�X��&�d cb���V+��b�`�N�V+��b�X�V+��b�X�V+��b�X�V+�eì�M�Z�l鮈u\�My�tX���C,��<�Tdް֚�/m+�¢��1��cO#\�7���d�Q1bS�lӠ�p~M)��TL̬B){�m}�0��.���ӡ�yp2�,$��7Q�(Ql�&ȓLI8�{a�@�sN��ʘ�8kO����عRu�YO��s�+_���z�T�^&hј"�m8���ڿ��G�zk`��33oFsp�H��V�T�UPP[�����Յ�Q�m����si����Q���"��-h�r�Z'E�!@l�.�2�a{������c����X�fЎbI�JIЃ�]mJ��]�'�Ds�Z[��t3K�z�⼽��`Rn�$3Ϭ�y� �+�o*�ഞ��ஃ���o2������.�a�S�8�G�V��*S;k&�jW?�]��W��I���C|M�1LձQp�6��,r�av�~�n]Cb°}p��N~NA�Rx��I�e{C>�J@Hs�D3.¤D�j��5 ��~���������˅�7�h�� $9�l�v�{Q1�0f:C���j��i��R �����_M��0�E��jv��0T��*f�m��QY?��1"&�gә!�T���U�b���^ac.X�,A��5l; ��3J�ٵRm��m�f��R�-'TЃ@��r��G���LbA˃��5��6�r�Q�h��3"�����J�3���U��Q�������b���D�Q��F�k.���?qR����j��"&(u�f�ܛ�:�S��3�� 1o�=h<���4D�;T9O�X����]q֘h>O���h�3����0"Eof��oh`p���LZ���h9�� /�fy���}�q�)��<��fK����6a|5�vy��L�+ ��ЩE����nK���Ď`�2hU"f(��욄hä�Y��!�UUR`����ʲ�2(����1prz� ��f���c e�3?��X��4� ����v�a7*z�3kJ���9��m��,�ݪ�����P0xn��t����Q֚�&�n����}������+ �P��o[^�����3ie���Zؐ�=W(8CZ�o��b8,p�D�%�Xp�P�z��4<C^���jN�ֳ��p�(�P�(�BV�8ÓeHWgb����c�Ed�m�Z7x�8�Adܜ&�ܡ�ϭT��k[5�k�U�E�[U��&r���1ml�R�th]3A��$LH)[eV�[eV�a��t���4l �H�bC`At3]:I�#�]-F�6 �n��1_D��j3�f�VD�ӱO�)Ӯ�^(���@�XN"'��mV(Q���M�e9��L6��C�I�\��~ܑ"�T�5��)b�v&�8K�ɝH�bJՋtqJ�%D��Aa?��(M"�Kǂͫ0.T"F�%5�/� �=�m6r8|?rS �b�3lЇ�d ���7I�\�V0,aSA�;,���V �B`tHP���6=S�x�X9�ы#�2��G���9�a}�.S�v��C^$X�*�-��΄*�X���7Wb�B�YT�O����Ub���|F������2�;*Qa�S�c��% �r�б]j$*Nef�!/d���t��1*����_�X;9b�f}��n�{�0������O�C��X|+%�����Xq�ٕ,�� g��,�(��<��V�xN=�T�A`��旉T5':+��U�j�XkW��R��k�9(�?��1D0�%�5Ҭ�3�q��B6:<�t�J��:��n��Zt_��+�*���::Nе���2�Z����:��h��+ 0��_6�X vق(1��a�t(6���"���LZ�sH ��ݼ鸀;T�Ɔ��]57ҥ++��~��ٗ1�0�K��T�0|"�i9�qM�B��N|�)�eȺ���dg0u�*B$'Raט��*r��R��˙6dE�ڶ�3�{s�=����m���X�[(|2�`O��Xu%T���TXƵ�R�B��@!N+&&�왗{&Ջ���E��ƃhQcC[�I�2��hsN���6JU,X���R�ư~Q$�!2n�ѵ4�1F�6�(����>�U�6�- �Rd&5�CV3��E��tMdQA��r4��l��;�^N*T�ڄ�h�^2�`�;��-�-���'0�l�8m�5�w o�E~$�����~�q��r�X6�@k'��*^+Ƕ$� xqo`X�A�k.|�,"f&d�rؿk5��O�MA�*+��pzNc�T8Rް�0�']9#��c1��]�����M�e.��2#�: ~�2v&��Ԛ�3� ���0�5�b¡KF�Û���ixt���d��d�֩��ng���9C��4�&��W�(z��E�� �C��dXQ1q����p�B�X�B|��Ю�3�XCg(Z��ṇ�|'N�Č���]BTk� ��g^��Ĥ��m����{.��D(��7c/=�(��9sNK��cS�ȀJ�7Jj- DE���/��X�ԡ5��b�fD,c_:�e^ބL��)S����T�T;��;��dB|L�Sm���C���)�Ԙ�]{�QaN!��y3qL��ɂBy��^�j�3�GA�"����k��$e6<1�[-��c^�M��&�<1�My���È�FMs��ئ���Ӑ���Sl��eeﳂ��}G���+-�%ڥb� �90��Ԇ1���9^�d�D%�[T�ځd8�3�,Mxk�s�����H�U\�gTT�A�� ַ�r��du��b���ְwb��d V�8�Θ�-a���bj���6�r�j8�חCmn��&�i�6"�^w��������2�|+R�{5�ij�]p�r�5� �Оω�,*�6�L�EB���`�ģ�TQ�N�]��2N����Lk�|�mn6��N�B�XV-��v�6��>���r{�FO�a�lP�-Ʉ�q �B�a��lK ��r� Ʀ��C�^�@��Q��� ��l�!`�e����CM��V�� T% ���4�A�<S���_J�۔���LDu�l�XCa����n�I5�P���>c��8�T(�L�O�?����U�*�F�%kx�����R��3u�`�).N���ߧ:�13��O2������@�s99,�����W2�:��R���UC12d���r���U�V��Uv[����]o1]n+��]9V��h���(�U����"h���`xO��\��d1���:���M��4;5,�g{kR�̕!=�&�]R�CL�s���H�'c���8��T�<�w������&B��� �%�M8��>%[��d<��i�R�u�ٙL�U,\9v����Դ��*�N� D�Q^��W�x=��Op�Qk1��Y C�T���-+����J��,�T������O2 P����� [��9L�U& �ܪݩ�(ɿ�LTU���M�`�hC��T�8��)1ťE�~�G�e�5*N�P��4��a�R�9d+�l��d����sL��0a�S�>���l�: �9���a tGX{�9�K�����m�Yٞ���������Qs�w"C����Q�y��؛j���*T�=�A��F����~�i��`��6+��Eވ��-�LXy�|5��D�����ʵ�шy��#��7���O9��ίPP�@�����������s�F!�d�@�&��{72�a3w9����<>��l�JH�r� ر��)s�v��\�f�\���:��Ϝ���g)�=R�-���vs�{��?�\�gb����ICihm+UNT�|UB{&���56�䦨P m<�yEt�Q��̢H��ڍb���w)R�52d��"�-T���e�����S�Ѯjx�7l�s�A*E�R�%�j`�)�p�@e�PcX\�T-��}���Q�P��E �PE�e�ց�M��8Pi-��mP�e>O��ob{6X����p���L֘�dڬn��4 �Mk�tښ!V�H�lB'��9c�ʹ_��.�VՃ�|)���@آҢA갨-n����j,��Ň�yQi��{���Zr�A�Vt�5*-*T�"�Ӥ�֫�J窗!�w"�n�SD[j.�j�F���D����rj��l�Rx��^�V�f���Z�6@ �.Y;L�ز��ڊ�)6rF���[f��.F� ��z��1�[%h� �X��*��5&�A� &�4��� 4X�|k����3 ��&u�L �)Q+Q����RmHn�n�Lco3��e)�8�*iΪ���-!>}Q;$�ҕ��f4�l��x���R6�̚����W�-��Nɱ^t�9r�/�yi�H=y��U�u�U9�NrR��Nh�;*�.Icl�1a��cg0VD���Y�-�f�s�$�f$Pu'6��x�����b���C3 �m��16�R{e���n�E��N�H��AR��HY�ٷ �,�8v*����SIܫ�o4���8ẏaWg�e4���0�Yrj����e�k�?�ʸgµX�%J���d6���vg����P� Ԙl<�(E��L6��X6��� �.�ahp�-?���`P`K� �Z�b���l���!m��FeE�����Λ),��p�_�'j�0|m&���P�`�C�����%����IQX�O,q�Z?�+���XL8����LDn����ium�B�+��� R����fI���}z2��a�=�Wʭ�~�L�X��hpXtG����FP���:"kl)T�ґ6��nXf�q�Ęv(كŇ �{�6����O� +@4�!D��'�`�A�Ⲡ�0!��L�sO\lX E,�47)��X4lDF� p�������3�a�j4X�������6 3�!�������aQE��`߃���ZCr��p��tJ�b�:�O�A������L[���R�[����C�[JGr���#`�,6��V �b��@ {[P�1�e���U&�;�6pY�c,�4M"{��*��*��*��*��*��*�ٽ��_�W_�W_�W_�W_�W_�W_�W_�W_�W_�W_�W_�TE)���8� �⯷���*�x��⯷���*�x���2W��_o}�U��W��_o}�Uoo�1�͢���]�C�] �WB�Ю�t+�;$X�O�?et+�] �WB��,8T~e�QN{�P�� .��~����������?���x�����W�/�����_���_�w����~������������ C����~����������?��0���K=33 ��������>��`vV�v'v'v'v'v'v'v'v'�d�9WҢ� tf�Ba��KZ�� 6���m��͍�E���CZMfEې�e�a�e���qq�2�H�:<vDș.���K�$:�R֠�lOj�M�P��D�v�YIN�F�|��c{���(9��Oxm*"rڡ��u�5�MXS��x�Ҩ����i� T��������d�Ņ ��I��Px0�wMCh��#1��0� y�FK�A��(}јv��~ه�P��훆�r'w�o67{����'l�XD��$S������ /�_���������u����:#'E�������KY �R3;z��':��S�b�c~Ppq�ea���Tc��I%3��z<[���>���Ȃ��ņc6 ~��XC��2��:��(/ye���-���-a�2�Y�1w�3ܡwO�0��p��l�lQ���(qٺӱEd��2*�8t]F��y� w�Dbj:� �2� 2���98��!:�������P<s?�Ңn �-|��U��J��)W_�*���]��7x��*YQHR���:?��a�Ʃ�ѕ���Eh���Z8��V�?����Eh���Z8��S�*=���g��t��-�r���'-�r���'-�r���'-�r���'-�r���'!(Q�:"��� �,��ՎkZ�z &գ+FV��Z2�eh�єC��.�^)�-/ʴ�*���K�/ʴ�*����?�I���/ʴ�*���K�/ʴ�*���K�/ʩ�ΩY�,��!��T�vʅ�*A�v�WG��X��C{^6�Ϛh=������8�'Y�k�ddy�����kA�{����NӴ�kRq��9?z���9���L�y�,WQ`�簃�Bo|�̤$���Q2���XS�a��]JB��F�@cEx��JK|&R��Tƒ���5�xS�ް�*Ov���M���k�bc0hMqu�}�_��D*E���v'�dSL�2sr��@B��c��w�X,'2 ��;.����d�2a�j�df�k�DvH���P����B�East) 4�6v(�q,F,kX%H�d yB�Ճ��ƻ ��6!�cIk��]z�X��5�T��Z��X��!��T7a-�a���9�@� �v4W��&!m&�N@v�"R��_�� �kX��!23j���sT����~.L��H��W� �6��2f�<V�`��L�E~<1̍DE���+ȯC*.���_u1��J�Obn�����ĸ�$8&G��тq� �rðv�a&#���Q��s��p%Ԗ�0~Ҋ�&C��b���T|.?���F�6&�f�F �.���K�@� +sKC�ʑO�����q��xv, ��0s����6�>EG�!ن��|K��CQ%�X�<*0����,)�21�b�R��m�aae�F�pl��bJ�Y�` ��}�'����)Q�1�m��� �������(��u�����0�Dfڜɺ�ɂ'Bi����0�W阮�W�X�b�J��qm��Uj��AR�L�|TkN�f��Z$��I���}��ھ!b��&�G�R�n��0̰Oj���W��\��5 %�����- !1AQaq�� 0������@�P`����?!���nd`�,_Fpw1v�M�:.H����Db�D�0˃���M�y��j�(`#�� p�L�B38?�q��4xRw����69M��9(�t]���W#c�>��Hb�j'I���N�ґ�(� �-��� B7�6�"��d���8kHrf�Ղ�ѱubcP��FX HT�s:,�����kuM�$��6'b��fW=2(3�4;���'LAV�x3l�� X ��8�7�A��D��W4��$�˲E����g�Ad Pц!�MG$n��6ZR�-�%�F��dc� ��f����uU���(�� �1-����V��[�Y�d�9��i��'1Zw}�� Yv�E�f����#��D�Mn��)7���L�� ��vL�,� t�g�7�1`�R�ס���'��!�&s� N��&���$E�d榧�E�`�d.���3���"!��^�\����2)b!L^�E���P��~��������E������+�gBP.� ��!�"RNx�Fd:/E?���I�[I��`��,������E��R��$b��Af��E�l��\ $��V+��#r�jL�ڒ��Mt�(t������������&���1�q�M9)�r£Qy�)؊I�2^/D�9�̠���w�*�8�/�#��đ��8�8�a��q(����a�& �9��DlH�D��fL���~C��c���6.���D$�*� "&["�;�HdG����3U�4��곯���Θ��JB V�7�V'��0;*%h@��Vtt@@$e~�n D�hU�K��oZ&D�9�I�O�����}��p�Y ��<��'1��6�5���'��W�! e�������4��Q�D�?���A�"� ���FSu�"7@,%������"��W��\3�����):a�. �0,z"�@���C(aw{�[d���\���1G� [��⅂L�b���ɯ�_L��}2�e����/�_L��.Z�p�H�C#qCv?�f=�u���ZYie���ZYie���ZYieR,$-]�� �PLP9*�(�"�j����$y"�,0/��!�6K]�BJcV��h�0b�(�p�"+V��y�u���9��Wp�H�p��$�_sE"�.�D�%�G�o��(M�m6��4(tTl�4-�Tf�� �֭g�� �����&�@n�g�qNc���8@w,�C���7e3�s�|��I�I!�Ȟaԁ2M�' 71@0(P�."KrMDf$dr@b��^hw0���".�C���� J��e��Ť&������_Q�}G����{_Q�}G����{_Q���Sӑ�A.����OjLY�׆�5� xk�^�׆�F��b��-b��-b��-b��-b��-b��-b��&v���8�H�,G��pHX�@�͖�,�Iӧ�@ lQ"D(^&�5`�a5��`X�Y l�t7�U�Dh�:tb�� {(���w������t��ʓ5�}ۛ�ٛ,��&YA:t�������=�<N�C�\�YD�:�WN�>�0���w�����J$D9�r��"�v�ۛ"���/�����/�����/���� �V���{_UYX#�1lE�!���9kidPf�J������94L�EK�n'yۏ��q��pl* 1a��Fwh7-( ��]�����/��b���/��b���/��b�;��dɓ&L�2e������BQ�b]Sq;��}}��E XQ��$$�(���٤w3e���9��o` 6e�7�����?9.�o�u���͖��;��b]Sq;��}}�����r�н�w6Y�S���s�Ei��%�KL��-2Zd��i��%�Jy8���Èqbg�l=?4D����l��8�1�M�$��?y�l������{ٲ����u7|��0+��/�_�|����/�Q+%6�N[���/�_�|����!��_p�G%��)� #+Kb2@��{6O�r�ܴKA��KA��KA��KA��KA��KA���]����i�m:w&c���~8��b rl�#!�Hy�͖��;���w�Ӯ�t�L�_p�v�¹?�x ��g�qNc���w|M:��N���w���4�6�RɿB[�Ho��?�s����i�m:w&c���~F.�<��C�$�}ˁ�,��)�wSw�]���8�������(8XM� �C@���,г'=�L��ID0��ڈ�@���ȣ1��r���q0@�#�q���y~,~x�����u7|��.i+HyZC��V��<�!�i+HyZC�N�v�b�V��<�!�i+HyZC��V�x�$�o��06�h�#� ]���f@��`�^��H���0��BOIN�@��$ z0��*��D�ڕ�~��\��F�\�g�qNc���I��p�!T `*U{����2?��A64@08�f����3Zf��i��5�kL֙�3Zf��H���j���v�v�v�v�v�v�v�v�v�v�v��`�f� ��]��]��]��]��]��]��]��]��]��]��]��66�Ȗ��Օ�L�L�L�L�L�L�L�L�L�L$�4�!��]� ��_|e��_|e��_1S�v������6jホ,��)�wSx��,�8�#DK,��ML�?���"^�!烛,��)�wSx��,�8�#DK,��ML�<a��n+Y�!h1D|���gBݦ"�Y�4������pJ��-��=|z��6Y�S���M�Y�qF��Ye�<����J$`e��H�]���E�'��^ ���@���7��opϞl��8�1�M�\�`��,��8y53`c8�CMrr��DŽ�"Ž"8=-W��z#r�5X�^���t�I������^p�9��vpse���9��o��$h�e�Y��k<-���˽���F�)����y��9�]C,���-�R�-s*�9�L4^vd�'���ѻ�k.9>3��#v�Ƙ&jg��jg��jg��jg��jg��jg��rW���Sk�l@��%�Yg=����jA0�h6Z�D9k��֗���� !��iKK�DL1 ��~uaR�8����ǃ�,��)�wSQr8#Kش��Kش��Kش��Kش��Kش��K00 X�\����Z^ť�Z^ť�Z^ť�Z^ť�Z^ť�@c`��`5/Z^ť�Z^ť�Z^ť�Z^ť�QD6fv>�&�H��z�@�܀� Ү:U�J�NL��J��1Z�(PC�<�F���>�k��,��)�wS�2폴 )��F$^ )`� �0�H�A�@��� �'OU���p��� lx9�����u7�Q͵�j�V�Z�j�V�Z�j�V�ڜ�K֡Z�j�V�Z�j�V�Z�j�=�2$��N�4V��f^k"�k��*Cl�d2q�K�� d�l�&OÄ, n�pc6Y�S��� m�'w�f�o9�w2�R<LK�9lər���v�b`��Y���>��$�h�kz��j����Z���%d�8"�Һ�Y�8�n�pse���9��o���w}�h��3��s"Bf��Q�J)���M(��pB(�.A�-Z��BijЄ�@��i��DC�<�ɲ�^r�pse���9��o���w}�h��3��s&GaB)ՄŴ���z��EQ�((L��+@�Z�6.�!@��xD�#3p�iBxpI�@�(F\v.�B}�sd$�b��������̩x��Sx����D����;�r �\D���〄� @B6�]3Z#�2L�y%2D��F��Lѓ�zO���_�l�=b�}�$��pA�i�?�A(|pse���9��o���w}�h��3��s"EH�a�M0���,D��#��dL���6��h�+G�A&����+��˄'���(�����u��l��8�1�M�E��զL�-0Z`��i���L� 8�͓R�A j��L�-0Z`��i���L�ķ=̫�q�g�X8 ~����)! ��P)#j���M �OÃ���kf����f�?�s���� ȃqtX�K�S6D�!���H�rZAi��H��SFğF0! ���O��M�=�f�?�s��8Jby�Zֵ�kZ��㇒y@(��M��)�5�1ir@`P6�}z������h����2dd�89`��l�9O���3e���9��oy�1Q|e��_|e��_|e��RtE�˻5�τ�h4c����r���wE����}��� �� 4ن�&�y@�����~�LU��Øq���fȁd��/�����/�����/���� g���$h���v)�<�Au�vL��� jo��q2�ޓ�{^�|^�|^�>3ȥ�&��)=��AK�d�8C��9�&�8b"�p���]�����/��b���"��Qgm3�W`8��^!!b���.㺛�$h���v(��ǴN*;l�J$p/$B 2��C�-FZ��8���bJ��$�Μ�����0a1��l��7�f9H&����ADc<t2T:`�9��o@��.Yؠ�`<"C�.�7 ����� 1���8f!Dq0x��B�!s�'6Hc��_1����=ɦM���8Dy�͖�� �T�G2�S�4�&<�I�hĶ��u7� H�$�T����S#��`��L1���:�aD9�����S�;Q"%$��cZD'�q�N�`�_��C����g�n�m�'�|t��N��rP:�O(C�l9��o@��.QاN�a���oŝ����VFc�?��͖��`��]�Q-C�t��"�� Q(�!=����9�谆�>����/������/������/�������G> &����/������/�����=�)�n;�]�h' �Dz���{/��Dz���{/��Dz����2.�|� ";�����9���f�?�l%���@%�P*�AA,j�v\�i�w������Y"C�����h��T�MCO���BpX�Ԯa���SMCP�5ɨ�p��5UUUUUUUUT`� �V2:�����`�أ@�F����tT`�g��-�b�v��X��cg�����__�l$��C�+��>����Tc��~�@1��-�sKr%�b�lj�� �*b�^2���N��x�|h���9� �`Q�"���."�p���2��A!y�|U)��O�. �������y���ʾC^6H���O� X�B�Z3�>�D�r�c%(6�����*��Z[�D� �W;�'� 2=�D����̆���x�6>����py ��جE�q�܈"M5�f�kxW�֨ yZ��01Ʌ%��q���.d�!�"���К`� �$�bL5��@'�� �`@�؞5u0T�b,J Ū^���:j�d�M/�V�F�,1��4X��2�?�h�Ŝ��C�3�$'�`LdI�G ��0���6` �7�2JqF+�Sv@_� AB� i* *@����l �6M��ݿi$?Q�*o���i.oi���$�!�fh+,Zݔwc���*B&p֙:,� "B`pf��Ĝ2=�8[�fJ��]3����̦A��Lm!�8��`tL��BI�*�����``O�|H� (�,*�%�<��`�j&p�����P�q{I(��1rb��q'$���d�,�ϱ�ȱ��튐���n��䪪���K��L��xJ��� �iK��UUUUUS��a����!E���ͦ��Y�nT�X,���հ5-��Dpn u�rKȼ���*L�(���}0�(80�U\U�\��\��\��\��\��\��\��\��\��\��\�Q�`�S�b�F�+����������gg��j�j�j�j�j�j�j�j�j�j�j�j�j�j�X�D1fLN���,ױG����0�C�W�0��e()0GE�8(r4b���C@�\����$���T0l`�^�4/��(�qVv2�"�}��x#�Q�S�V%\����ޖV���G0,c� <�#�Y��*3��x¦�f�#���b_���Aa���xK��k��;k�В���c �qBi�ƈ)�1A��@L��.@F��@3&��-,u8F�Q���oD������"U���&��>��� �`�F���1/�t����F� F%ӹ�r�Ή�8�h�H�͑��Yl< $���RnHc�kS�D>-��所� m����v�n�� �]���k�u��#0/0�˞� ��2�7�S��C���r������>�C����lO��� ��3�d��N��C�;�bQsb�y��LxK���Ċ�'�7����� �V8{�S,�%Jn+x��|hT>��@ADW�0y�d���t�g]��ȁ�&��Kc- �a�GJH��*���,��/���bLrc��x�ܕ09�ɚ�S�lI�2P8"Ch��d��h��]q���:��Ō�@�X,(�Yq�-�@���!9Dx���[b�h�@��Ұ5�\�L����h0AS�������vܲ��� =��͗$�^���o���R��\��O�10@�2<e:��ÄH�D!�pxϸ�'T!����9G�~��� ӑ� S���hC���s�8���'@ �W�9�!��������Ǻ�{���)Xٝ��%��r0���[/4CRn`*�PnA7]����0R�#��<�U�lya�J=tS2��O�?��� r��(y���q�(�DA%2F~�&I�1'Q���0V������NqLU�I�Ē�)-L'0�A�Xj@�(�cH�B�W#�����2�7@o��uPX4�t����2XԀ&����Y� �(r�-4�.G�p�?neBq��b���������{����`yPx� Ox��EB ��[�oX���J��A��A�$����8#��<e4&@Bp�T��#���C2_iҨ�l%�GvrPwn3��#[���6�B4��e6�5)�����"U�h���"&$����u��ѬtD�DI[�`�Bԓ�P`�^A� ��GLp�8�9�`2(���$�1������c@#��UF�LPt�n����@&����q�� VRypNNg�mf��5�6�&����𦵽�uS�Av+�A9D$9Cd��;y:D��̝���ӢT �#�D�D���HS�</S_r�TC0��r��^�1�9Ðb����3�3�HM��1��3>��5�!Xw�ò�Ca���1�E�Dx��,t��vf�ݐf���J>0ay�Z�`X�E�yt�I����S�&����D�h˱)�pAAG��MT��DP.��!��*����>�����7 ��� �tNeJ�3j7��G*1h�M��@�uh� C�$��pC��F�����c87� � H�Ѱ�#=��Q� A��;�(��n2�S�&�[� ���J0̆/dSD��T���$�8���Su!/�Y��L[a���f��L���L�LL�0r:�M�hɤ[�1r]��,�X���8�k�T0F>H�e],E��E�B��r�h�KF�pvf�}���d�ub"q\��#�d�;7�-�UV8!"��[�"!�r��F-=���N����`H�~j��gg�}&�^T��5���-�1�����Ʌ��A #�DF�f uW4B�p`�c�0�$v����� �HFAc�2!�?vGd�@3m�dXɃVc�&V&>+Q�@9,A�B �QI��ԁ�p`ٲc�v��U�@؛Y@����s����t}'l�<Ja�L���=��Y������N�i7�װX�v��1.#�4�����|X���aH� -���#8��)�5$\�]�ʷ%77D� �'N¼Я<�`��q�%�e20J��!yYp � E�>z�c3��fS�R���:(�Xe>�����p�C�?���,�v��#�r�P�y.�t�da����W��HBL#d>�oYT �>@�^�� wi`Ko5���}�GL 4Ȅn!A�����C4`���Ҏ;�E�}X�� 3l����@�uF8c�9 �(OY���2�D�zI.����?�&�,A1$=�̚�488쨉JO9y����0��r�zRb��u�Ï�h��-G-����� ��FI��+��r�j�����4R��~�^`sq*�!D�e��mہ�d�4 ��$ c �.�Myb�b)�((�@1h:1p@Z=��(��j���`9���T�B�]�چ�| ��~�wcS�N!<!���!c0�3:@H1$۳8-fb���bq4�(:��5�:��>�Z�{2����(Q��zm���0��Ɣ [�A7IJE���ҚcB��|W��b�� �Ŋ�o��@d+$|SnX�68P�L@7�� �n>T���� {�\�fY��T�0�Kf������nBe�=�`�p1��j��`~�\IO�f����J,eBIɘ숸Jj�cp@x�1�r� ��%j�}�01���1.����)�+*,\�f �c@���(,�w,�! Ƣ�Ar]�7dq�h�\�h��ى !�(�I�!H�\��p�cut?�k�tXc�����@y����1�y����_�!�-�(G���.L��Vho\Zs=�HA.g��7@�0mG�A��v"���U MJΕC�p� 2��� �P��a>�*{���� �f�����D�սOf��$u�V���Z��9 n��L`���`A٨zN������u8ه��9��H@H�"�]s�NJ�0~�G��#�q�����7I�� C/{���"`T�����;=�� �m���DC���F��~��%�/pfF`bkY�$bld@9n���<�g'T<��TNa����2����>c�1CӀH�2|+ �"���{+�ܣ�x�L���{'�t�qԣ���nt�{�LUt`��F�Ҟ-��䉔xݒ?�"H�"�LcjH���̣NB��@h7�m��ؤ,0�pK�O�I�2�:�����l�yD�S�xl�R����% R��80 ���J����#�݈�lQp8*TTg��.���z��O"x_�9������/h�����X5�<u����e�B�#�`\�����"�1��0�8a�=�HV ��Je�d��/��Zc�����;���9c�*X�H�"u�܈�ŔPpV�.w�<4EMKa~����=od��r'O��*��'Y~����_�&�iU�T�M�v3�ҫ!�rgB�faFO� ﱙ�x�A!�H��G�c: *� ������}����M���9�V�>����!$P�H���d�s�=3 ��'1"胩� T��L�� t�������� ������AA����Ӣ�8�H-%�ɉ�@P��.�NM�s��DG���&z e��( ��\w��B��u�ɲ1'2L`28A��dI��ی���8g� ƈ��%M0TG ��APC�v�(�&r� m2���r� �G½�)�L$ȮP@���qGbb �,���H��!-@B�H��l#&���E�s��#�u"��ڔ�M��O�Hȣů@e! n����dn,�v� d���(���pQ�Ӛ%�OH��`@mVh&6� ��f�2�R��I!��D�O�Y�?���6�&�M<�t��MDl�`�4HZ�bȀ���<�#6@��E�qE���/����!BA�� �x��`ј!�" kU��(��E �Ml11l�A���B`0� ����l�`"�Ĉ9$��7A�5L@c$H�Qs�T�ц�4̩G��4�XS���2,�j2D���'Ē'��0�D:lD�D�e[X�T�ם��Q�8#���c� N������G�F�Q��B�yF�hXMA�-��y�d���1�3�ag��#�*:j�"@�Z؛@c'� +R���`�h��$�Pce�`� YD ��af�/]��x�h�XK�.����`蔘@*A�DP1c`X/6`�i�"�1U,�G@$ M��D��B"@x�I�+T�T#��%����v�������M Y�,༛Tء0*�����A�:�P��$�:*~�������_Tnp&�g�`6��@?ܘb�A����QÎ&.�cb�?dN �7�$|` ����̏T!F�bB���Ւ��� KU���4@���ڊ�=8 ��5 �蚛��<�\y�͋�0�����uB������ @��7$H���_���``�?]�4��!��>��@c44�<�r� ����Y�dǑV�\�g�|S"#2'��+�H���}�@a��'(rM�`(�!���`�h:2�D�������B�q!@J)�!�Z�����Lȑ,� �3�Be# b�D�2=@Z�5�rJ�#��, � �$�"�H�`j����W&�Kѝ�{Z���"�!��C.�dCO�v��Ӵ�2�Dxn�`d�%0�Q3b�1Q� `n 9A3(���=j�H���愃�pwH�rÝ%�.W9?�(��9��D�@/�_v��}����k��Ph��E�k��ݯ�_v��}����k��ݦ�x��O/۰��|����/�A��p��Y��81@@8.?�g����"�r�+ூ� �+ூ�Y� �|U�W�_|U�P����A��t L�1e���������� :��(�J ��_�_�Z \�g�v�,Q�}�@���~#���>��_0�a|������"�#�i-B�gۃ����B�#���I�wX��29i"t�#�J%�As`;B3F/c$Њ��-:��m|��8���2�bV�n�.�����x�gbG2@f�$M�b�j�@�m9�a4F��t�4�U�N���x�v"2AX3E��,�lQ��_��-B�gۃ�sۉ@���/�w.�Y�+�R"��p�oY'�X5䀄�H�S����!�S���GcG�r#eA��SB�q3�v$�]������*��� ]�@;�e $����!�k�hW�l�DB',��HI�A�ap���-B�gۃ�sۉF�n���/�������^` ���7ɰ8�00@� 6�9 &s�f��E��z`h��F&]C�����Ѭ~,v/զX��1ټ�I$��3��9�;� ��^�h��w\�O��|-S�j�T�Z���>x� >)�&����W���-U�j�UxZ���^��W��F,�8&���'��X�|Kp�@0a-�e�J��2�7.����㼁�E!�DR� �0A$o�i �n�0@ �z�I��!S�g�K�V��v6�ݐC����/&��]�@e�����ydžN������vI���?ӄ�~�@\d�q����^D�(#�F���T�� ^Gr�� n�$x���9�b +�P�A�a�%o^ �i�cj���~� ȣ�RS�@�x��pˢQu ��$�˚�׳�NE�$��@K:�� ���B�7�w8D���!�ANt �����p�G�������O�ራF"`�T�� �d��N%������p���<�8�Z~1{; �V2i���XQ��ȱ^ � P��N�Q�qG�{C;�`��8JdC���J&���a�A�@�!f�����7�r�8��m�Bt8�U0�r�BE�L�C`f4dՑ�L[�Jq< o��$���/�� F�n�3\B�b;��Q�`��'#�DK%zW��Dm�K�8�y��b����X$�Uy�i#"�C��:�/��9�O��*c� ,D�B Ø��-�[�a9�}|���:���f�l#�X��*�F6��jd���.A�F�s%8��� X�0�����F���@�v����L ��$1����wQ�#Y��B��7ra������<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<�8��0��4��4��<��<��<��<��<��<��<��<��<���� џ�\����<��<��<��<��<��<��<��<��<��<�ˌ��<����<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��u�>����<��<��<��<��<��<��<��<��<�L{�������<��<��<��<��<��<��<��<��O���������ż��<��<��<��<��<��<��2���������������<��<��<��<��<��<�Ͼ������������>��<��<��<��<��<��z�q��������������<��<��<��<��7�#����������������<��<��<��<��>����������ᆴŐ潾����<��<��<��<��}��}��<�<�0�/����{�����<��<��<��]��}���ܟ�c=��}��<��<W�����<��<��<�������p3��}��j��<���������<��<��9��}��}��<�Ϝ��}�ڼ��<��~����<��<��<�����}��}��<��<8�8�<��<�_��������<��<�߾�<��<���-8�;jN8�o�<W�����<��<��(����}��Ͻ��}Z�}��j�����ᄃo<��<�Ͼ��}��}��<��}��V��}�ڼ��9ׯ0��s�<��<�O���}��}��<����������<�{M������<��=��������0�8ݎ8�81�8��,��-���<��<�������}�߿��}�o���} _}�ڨ�3��Ͼ��<��<�߾��}��}�����~[�}��CW�}�*���Sᄉ_<��<�����<��{����T�����W����/i0V\����<��+����}��~��<�����?����΄���>����<�������}������}��}�����5O���<��<���������o<�}��k��}�����6T������<��<����}��}��<�����z�����;�>[�Ӕ����<��+W���}��~��<��=��}�o<�υ��2n]>�����<������������<��|��<S�<�K���O��O<��<�������|��<��<��}��V��<��1k�����<��<����yV����<��<��}�ռ��;�T����<��<�O����9;�<��<�A��=�\ �'��o<��<��<��R�k$���<��<��<��<��zz�<����<��<��<S������P@�@��|��<��<��,��<�j��(d(�G8���<U���<��<��<��~��;<����q��u۸4��<��}�;���<��<��<��<��AA �AAA�o<��<��<��+��<�����^;V� '�~������8�O<��<�����^���������D�A߹� A=� A�O<��<�pp��V������?���C�A:A�VA�<��<`�\��,��a���_��:��A3�C��7W�qO�<�����<��>�o�_/�fj^��Lʓ�;�d@��<2���P?<�̶�����G,a,�7�E|��<��<��<��<��sNx��o��A�� '���<��<��<��<��<��<��/s�} �|��1�|���1����<��<��<��<��<��<��<������o������<��<��<��<��<��<��<��<��?�ɿ��G�������������<��<��<��<��<��<�ż�<���<��|�<��<��<��<��<��<��<�f8?H]��J���3uV\��<��<��<��<��<��<��<K�;�o�[ӗ��6��VYnF��<��<��<��<��<��<��<`Ǟv�������s�<��<��<��<��<��<��<��,�����,��?��>s<��<��<����3�<���<��<��<��<��<��<��<��<��<��<`����p����<��<��<��<��<��<��<��<��<��,��D�M%<�����<��<��<��<�q�<��<��<�������W�<��<�6]�:��<��<A[ �!<��<��1� 3�=���<��r�?_�<��<�� <����<��<��<�O<��<��<��<��<��<��<��<��`����<��<�MP�(m�j����<��<��<��<��<����"�<��<��<��<��<��<��<��<��<��<��<��w�<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<��<����+!1a AQq������0��@�P`��?����h�F��dK�LĊ��+���#wD"2�Y9`�q��7}��h�%�!H2�C�BA��9��(M�^N?��23+� kO+�?��:�!z���^�T�Cʗ���no��"T.&?��*zq�$��������tT��PH&�����)��$v� ?��&W��!(��$��p���!���fb4b��p3��"0�$x�8��#Db�{+�q���Rh���f�ńk4��`���qE�E�0bY����"Dn���bt��H�� �M�ڐ�(C����ə�����e� ��2�̈0�R%��0y�H:���&bK��q0Đ""`���Q[���-��P��/�HC�"���w���TUEQTU8�����H��Ģip#8�� �Alx��Q/���S3 �,��� A���)y���w������bP<���1�GP�tT:*�@E�� P��U5MST�4cJ�Q3�0k�TWo��D��&�4�,��8|� E��3NA���E�|�A>b@Q~���r��#/�)�}"yw� �����om��ɖ_4h��~���lX�'�D���zX�����r> ���������L����o{��۹���|߀�[�|��'ۯ/�{��ଫ*ʲ��&~ ��D�M�3���� ^v��/�{�����T�M�T�M�T�A�8 ��� �@�� �@�� ��7������'��m�{�������k߆x@������f�/�{���1���.#ks�����^A����g���� pE ""�B��(��|&���R!�ß<B�/�{��ñ�J�@�4 �@�4 �@�'�9X�M��*M��*M+�K"$��v@$$����NN�f���JTXf�# �rk%l��L�$>*�\q�i�uʑf�~Áb(��@�I%͎_6���2��'UDꨝU�8'^���Q:�'UDꨝU�@�b��U��uTN�����/�U��D*!Q@�qa�P���~ѵ-g�ͽ�b�#�&]6������~EB�8Y@������80��B6`��@�Î������_6���؎,�t�[����r� Ԥ]�/� !s@���@���B���T@[`��/�{���EQ���Tl�6U;t<�FʣeQ���Tl�jB��%Q���Tl����2��0�qV�@x�~���S���0�7�X��N���6y|���6 ��P�wT;���Q�ʈȌ���uC���P����t q#r%ު����<c��Bb��,�@-���g�ͽ�ccب��� �[�ۦ�r��X�(5���Zd�B�H!3����P�$�0`� ����H!H��[�g�ͽ�ccب��� �[�ۦ�r�b�c6N�A�Ș9D���_�~'�� g�<��qa�G([�cg�ͽ�ca�A��L��2�T�3"��2 �*eL��2�A�~���Pf�3��U'A2^�������?`{} �#ܗ`8�A���(�.$X��o{���;��N�;['*5��KBw���S�ȋ����g��D]�xN��e�Xuns�|.�lr����~�\%IRT�%�6v�SQp�0�h���(���Pn>���"�&6&!��qb<�|v�\���z�(��~�o{�`-n ���D�H��@�\P�jE0I"�W�]3RSjG��0>���9���X��w" 1���()C����6���عA���{���/F^̽�M�`8�J#��q����y|�?��t�\�Q�&dBr�O���U~�U~�U~�U~�U~�U~�U~�A0��6�)JD '�5W�5W�5W�5W�4p!�}��H8�Y�2�'�hB��3L'=qj?����n,��W�r�%�ɒ͐����0f��8>`�U�� �@JZ/h��������?��9/h��������{@��J�!{ҋ�������{@�xB3��W��j�0���/h�����A�=�׃��^c��B �_ b:L�Ě�4�y���A��A��9�C�h�p}��� 0��<�׃�&���u�(��؟ǩ0��11�� ���f����Ћ��*�L��6� �0?�.q'����\�5�yQ�ÎB(g�O�h������4b1�ڈ��ܟ����� ��� }0�& �� 䀄�։�����&�1�E�ܶ� �V�P ��PD�#S�?�$���UZ�*�|���Q>���~�QUD������!�!�a"Bb`j1{�jF��$w(��;����&rdO�1s֪�_%U�����Uk䪵�UZ�!�%����=���~x�^��w�%����|S��g�����T��'��@<�ɘ^ț̕v��Е��BWhJ� ]�+�%v��Ѓ��Ǯ������*�BWhJ�_��,�^v��Е��BWhJ� ]�+�%v��Е��BWhB��^�1��}b��v|�9r!����O�#���/ y����~!�B0�p᱾��c�0ǽ1Ω�pޮG.tQ�\� )����*D8D8�$����M����ȇ �s}� �{��$^@�R��Nb�� ����Ȃ�@�I`��߾��FJ� ���sW��n�' �����~`21��-ʪ�)�A���@��QM�e��'�(hSvB�/7�w����f ]e�(��� D�L�B�W�9ad<� �8���� ����g�����;zt8)&0~�7�?B��|�!"'��Mk6@ @���!!_����)�0s2����TD ��������[-Ԏ��D��&@P�k��A�q�������"�ė��,"08S2��4H_"~Jkk?�ՠ/RZ|�:Ӈd�d�l�LgurG3��qP�2��@L��:9S�Cp�cD'_�;"H{����S|yA���!l�X� ^]Y�[C��f8]���t(��!�cf������@�(����$��u�e)"$9=��'� \P�������g�`��6(�w8��F O#�0n� ��ɓ�@'�q'T@4���GD�oW����Զ�&6�����!A�Se5c��N���s��Ble�K���Vb�1mf#��?������P��S[�����a��L@�zA_HN�2��7��(�RNȕg�_܇ˡ�3�<�����h0�Q�،F^��&x���P�x�n�b�0@���M@0T�B�1�!����( ��?��������$"��c�@k�x8���T���$0��A���5�$�X�eK�'�����@)*}Bx:LQ����B`��&�VG�q��ć=I,LB�Y-�j�������*8��!(zM8����a�+��Ө����c�pE����� ��C��������N(�DnP2& B�->���q�R=�&�F�>X(Ǯ� �W�\��2#/O����$�TB 8wd��%="Q����7�Q"M==��E7��/_�rm�a`�� d���� 9/J~$d�r����� 2��9Q��,"����w"?������tJ�� (L��\� �C��J��j@qw$�H����������&�t����y����F�=Y��/�D�e;=�Q��T�%�U��#9���Q��yXѷo(�V�N��i��r>��DY��'�LL�b鉘���$i� �s'�)�.�)�xA��� �F>��{��(��#ۑ�Z���+�Q�m�Z�Yj�N'.�Xu{`ž�J��*ȳ�����ݎlHT��:��Čv���'�A�+�I�|)�L ���3-���doj���E���Q�W�"��*�n� ȴG)���T��:��F3�!%��t?'`��vH�@���*�R��(�fN��R��*�R��*�R�\�A,�Vd��p9�t��,|7r�♃�\��!���E�=MA���2/4����HĒ1�Y��r�_�;�K�������۳�����b��FD{5��������db_=���!9à����+!1aAQq���� ���0�@�P`��?��ӠG��D7�S0j�Y�����@{�D�㴹���O��Ȇ���L�ڦg;�� ��Aϖ!�6��/x�)���ޜ�F�?�p������8�9��~�f\�3�~&�����ۧ�����?�PJrW,խ���Qɐ3�<tl��&��*���$D(D[�������:4> �9�Iq��Q�$'A�� ������(�:��i�����6A�q/�:��a�����a�G}"��6��1i^�1���X���EwUJ�U*�T��cx�� ;U� <�t����>����@!��X��)��U�!e]����Q0q���q����Fl�(}@ڈmj���PrO�8������d _ H�H� � B]��9ǩՖ�|���;�HT�PD�ji�v ��F���E�������.�����a�7 ϣE�uœ~}�t��#������,Q��<�3����:01��H�j1F����=���������n�F�`�8�H?a (�/�߮nM� �r�v��n}-��a�w���0 �so�߮nY Ɋ�̪�ʫ̪�ʫ̢@��?F�`� �A������2dɓ)�x=SXjUy�W�Uy�W�Uy�A����ż�W�Uy�W�Uy�W�LCL�h��qb<�S���th��sp�z4�]Zo%����F�`�[�#��#�\�<�7�V��iF�o�أ`�v7I�tDY=EE&=.�~7Ӥ��F���7�-��a�n1T�b���Sq���hC;^�o*n1T�b���Sq���@��=�s`�h�zr�]1�/�A7}<~����@-KǣDwNS��9NS�7#G���Sq���M�*��PH��a��M�*��U7�n1T�b�@���'��n1T�b���Sq� ��h@&L�2���i���A�)�Ӣ;����Z��HZӺ�թ;�IߧP�B�9�>���~'%��&K�;�m��p�t��sp�V������jN�Rw�!09B�Ņ��,�uR/5�j�G�! #��[�;�L&���;Ӣ;�((((()�x(�(�d=���Ud� �Y�� DZJ"���U�J��Ud� �Y�N��ț��U�J��Ud��/�Ӡ� �m��2wuCW��gu�GS�3�����߮nAv���.UY��%VA*� U�G3�����܈�Q��*��Ud� �Y��#��bCM�n���@$܌d�"+탿b���z*\�f(d��c�S�0�]�tG~��x=��ST6M`�ժ|$�q� N7�B(�,���ě��A6J!&);�@S���Z:tGtɓ&L�M���� ����k��P��%b9��`�#^�DLc7v�+�� O0A�lzf�0�UN�t������P���sp�z2n<�ǵ����3�c���{D�-h���<�ǵ����3�c���{D�-h��J刈 0�B[- <��1�ژ�\b�Nl�#ZyAN�t��N�:4G~��x?@<@*�%Y���Vd�2R���DLL �GD`9r;�A66gE�{��%n�IFC,oh�����:��Ѣ;�L�2d�n� �UR��T��U+Vw��d���$!�xIÉx��q�J��zNI0l�@��AN�tF/<���<�h��'D`d+&T��q�����O�՝�w[!�$<(gԴ��(��)�}�< � �D ��`:���������W�u�B<����2$3X�ƺx?D��Yߧ}�t8������xuU�gڮs>����t�ijE���`�G����{}���s �Rd��F�a"3��� K���!J�B��`⨜�Q9��s D���%�J'0��8��K��!.B\����cҢs D���%�F�4,|�LlPk�2��Qf��TY�,�h��6$|�f>��V|���^Pp�+l�%���Jo�t��̀ff?J ��9;.B� �+��B����B� �+��B� ���r�W!\�rItsr��� �+��B�����;��%��fG�)�>�lӦב1l@L�2�/Ru��y�.G���մ�s�3;s��3[#"7�7 :&0PFr셨���A�W9���-l��@&��p��3� �����I�d�@��ȃ���@M�t[e7��q��Ł=�v��s��}001���0l�� �>����G;n��yZS�WP8ȗ/��� �.��\��?W �\��^9 )�/��*%���8<�� � �b�4rD�/��rOF`�al����?W �\��r��?W �B���<~�%t��P(�2��/.����������B�8�B骜�UN_��/�S����T���r�U9~���UN_�� ��0A�a��r�U9~���P�w�T���r�U9~���UN_��/�S����T���r�U9~���UN_��2/(H悄����� �a�%���m!�?BC�"�� Y+qt]2t@�%�˶@�ԋ�D�>�=�\a0�,Aw��Ab(�}fxn���f����-� f��a��O�`�H���A����&@n�h�D�B�g�6�P�˨ɉ����Kl����ѳ�Z}v�Is�u�X{p� 6Y�+?�S0���8�0 "���`�1�����r�n�@8�)�Z���r���Y �w�A�H(��1�==ȹRDQ='���a���_Me�:�nv.4�Ap�B��pQ^o*%�P�" ff."~�D ����"���?M�S�G1F��[�k�G��tt���j6e�����8T�z,�F,*� ��備���� 16�Gt$�,����r6ñl��A�\39!�"���ɭ�"�ct��;�t>%�Q�M�,�!� �.1 ���hW�pM�E�D;;N��b�{"�1� E ���� <`H248(����<�̘�(M=�IAe��s͜D�gcgD{��"�w��b�q�M���g5�JV��c�=.� �CO�i�~��>d� $^���/Ș)�a#}�L��I!��`Z��52��K���8.�H�.&=��ƈ�10����I��bn��A�����r( f @04�ih$����qaE:@�k���a��vFE�F����!��O�C}�ɰ? 9I3�X"��I ;��a���31@��YN�=� ���E�8�����?��� �C%c^��5q�9�����F<Z썏����4R�zW�SD4�O��s�sw�cgl#"d�Ye��qNVh�����pBp]�o)�{ fv�8 ���@����C��������s#AZ�0�~����d]N��{��;�(�P:�Ko�bȄ�c�Z��wh#h��9Z�VHAD %?s8�����Hu`6��8Q��̲D��ɀ�8���\�G i��4ݿ��F��tHI6�W��4��`*=�9� ��}�^�0R|D�������,;ڈ�ްX,���W}ʚ3���N# (Q^;��@�E��Ύ�|��{O����ړ���p)d��9(�"��,�_�Y3���"�a�G��G�!�& 7�b3@RNȋ^E��t��vr1�Dz�xR�(�f�Nvvn�%�����6B�(�����ɼbs���Ba4�X ��A��ȃAG@b�ܔ(EهA�(�@��JH`(C���K��˴]��" @|��Si�R����L�"��,>A"B�G,�G�M�I��H�(���������.|�f��]���.� ���1�"W1�6! ��dYpP�c��Ї�� d��@��EQ��nL������x�dOx�ļAD�{`��M$�3��w*��3Z"�rdP \PDZ~��J�`���Ԑ9����I�L&?�kL��ٓ��k��kP�^7������R�5G����"�P<�2M�d$��B\�s8���䡋���yL���S��#E��@A�W3" �����)��d�N��2D��؉!��XS;/�ҋ���Ha!.Y:!FC �ɳ�� A2�A���Y�de U�O�E!��m�,��cf-e��Łfa���`�̐`��������=ԈK�Yr��1v"�(�B�= ��L%��(,��Nd~y(A+Ir���鱺Ђ]�%�� � ���_�p\b��QRP�,�@,�4B��捒�'&(܃q�2���>�j��h��ھ�E����!�~g���1v<�'�R<&��'���[�@��M�p%��\��� G����zNf_�.1E g�� G���7!$K��-�",�T*�U �@�T*�l�q�= 9o��R�"� EQTP'�e�S�7�t�7?D,8����6��� b�:�X ��d�d�މ���d$�ǵ�n<r�h|��}-�&A��߲�T��R-��W� �B3X�r�O��yjp�'����Sd6ASd �*l���*l���*l������O����/���� �F?\l)>��h��.l�k�Mn���s����mPh��(��l]�d�'n��*@�G7!��(���Q:����b|�� h:;l�E��Æ@c�M@wxd4 �P5?}�� O�G4 �6���@pQ�T�x:�L�<��>�?����-!1AQaq��0���� @��P�`����?��t���-�dž!_��<H��N>�H�4 ��"I���WafYeҷ� �D��bq��|Vrf$Oҡ��� �L�~pEX,.�v�:FKo��S���L,��rjB����bY(_�$be�ŖH��Nb�����Z�X���T&��347�\¨�Z�Ɵ�PIG�TFʲ�t�L��$ �MTl�}�+�pgQ�Zb�Y���r��J�FZDBQ"5�xފ��������K��cc�ir�Pa U��qR��_��w�L�#�F(%1��[27�����l����M1IeZL%�%;^��XAN�*��Z�q�(E�g:4DT��ƌWa�Q`I�-�L,�Z��$�3z.=fM�ķ ��K/eO0B[�L���}� d��X���XHb��M��1L�|%��B) �S"8ԕ|�36��NL�b�q�ݤ����y� �F�.-L�zƄ�x� 4m�"P�v�z��I!�uD�������i&'jo=^⁺N��D%lD|�1��T�r�����3���l�6h&CN��,'A�m�3�}�V��6�% N���%�C5d6�u���������H<���T�p2(H��(' 0�*40 ��+�N4����Wv5h1D�c�bb����'u�Z;��F�/��Q۱����ş"XN�&xS��<����v&U9���$.��a�t��o@Цa�}�Rx����r_b��t�������HD��k�4|�2q������>���4�m�z����z`{����r��x�Tg�~�����4��̮���]6!����6��I�F�|�zS㠧Zk,�i�=�����Ʃ�r��J��I�0��AS�Ț����3|��Ǖ ���@ ���Q@N�*��z��~�rϒЀDG ��(M�'���D�Zu���*Fw���6��C<�1�#��'T��]Ң{O��AN�gbm�_���(�:y���������0��aHB7u,?�9Twy�y�Ƃ��Ȝ�� 2��w q�Dv8Qr��vol��Şy�B�8�^yz�ѫ�'�d`ƛ�+C�J��Pu|���n�1�%h �����n-�2?ꆩ��V��#�߁D�*T�[���S`�)�|m�ZH�M������ؙ`��z�Q�I!ŗ�(F�/��LR�8X��s-���R�s��@U` ،�<��sF�2�,�ʺ��͉�@n�^���"�˲i������ ^*;�������+8����J�L� Ö��Kh.� �LYm4�F¸}�mg�\7�9�Y��58t��P�%��sS��I�*g�[��C��[ỻ�Z���r�50�!/,�|^���g�#�]k��Y�I��H�$�u�5/���R�䁵Y͍q5":�����B6r��K�p�0���9(YX@��TX����Ba�h`����&��B�I�5jr$������r,$��?6���i���F�@�q,���pkz.��#0�%իְ��M�K�U�6Wh������g;q�X L�ť���E�a؈�kMH� o8�j����,�������CRC9���j�"�Od��?�8&D�&a�vG�vG�:Q$�L�o|�o|�o|�o|�o|�o|�o|�o|�o|�o|�o|�?�QbMy��������]���� ����*��I��~+�Nm9��ӛNm9��ӛNm9����9)��O�/83xpK�*_8�.�,�4����!�JYC"�LOJ0�-�{SBAX�tR�n�uCNJ!F�җ��4���R��a�|�B���),O�l ��$JIB��x�C��g�.߲�k���]ߟ@w#!��QV95p_Z�5� A��-�O�@СV ^C�L���X�<h�)T��� iiI%��Je9�mP�sD�X��Wg���:�I���z��1���ש�?�A$ZejWX2���hG��w��wxt@+�X�/�1[%������<�,�X.hQ!��I �p�*�R��1V5��_��*�z�0�}�8�t�p�e�5@��S��n%���m(c�g��4]���@�g,[��ՙ�w�0�����qi�d��fNgW�w����w��eB�ԁ#�0K��8p�Ç8<f�C*�^��XDcf4��� ^�����+���'Q:��N�u��D�'Q:�߄.�N��pk85�� g��Y����pk85�� g��Y%�P�$�|��|�K`�\�j)JI��;#g���͡��P�]�r�k��z��.�ښ4���FQf���\lX�Q�UA�b�3Fq�@�[��3���{�Eh�!3Ƶ+`08"H[Y�KMD_FD�;���;��!"#!5�U�x���I}�|�.�t5b���qX)C�G�ӼnW�{�OT������NY7�;-B��Z��Z�]i�Wʔ�F�$ Ɣ�Q^ZQ�b�4h�f�S$s�;|?U�x���B�4ܡ��P��A�Y_̐��1��<�}{�� R�W�u��7_���u��7_���u��7H�iچ��R������V�\�E��'�i�2,��Jɮ���2�ؐ!���h�HD6��(%іk-���B�B]��,D@�A3>Nf�����Ѽx���G��I7�0�DO�#v��OT�*��7(� +')_�W���)_�W���)_�W��� Y�Q{+ ���Cb��PبlT6* ������L/�}���Bx=�e}W���7�P�k�̅���I��oS1�h��˜i�w����w��wW��xR���H�:g�������{��o��Df,�4��R1�!�?"��c���r.Տ��nW�{�^˺�'����{��o��$A¿���:~8"���M�t��}��r�k���]��=�4���8�sk���\g��8��Ƹ��5��q�?��q��k���\g��8Ѩ�AS_ѿ#�VR��3`�4/4�hh���3�}��r�k���]��=�������>Fߍ/%���^A�w����w��wW��}�&� 1�v��v��v��v��v��v��v��v��v��v��v��fQ}�PS &�Ʈ���������������������������������|$?�~P�dN&N!N"�A����k��!�XD�~��L�H���|[,��,��,��T�b���Ͽ�}�'b����w����ٷ��R_%����8�џO��nW�{�^˺�'����o�ط��v]��F�9g }a�PD���ݹT���������w��wW��}�S��;�?�˿��߇ $lӭ\�wry���m� G�r����z�컫�{>�������e���oĥ���.���U����xܯZ�x��uzOg��>��o������V�V��I˽^�E����ց�#K���N̘͘���Z#8��f �.H�bć,�;=�ʈ,>tG)43x]��Ng@ �٘��J tH4iv���� ��R)SM��Tc,1-��y�z�EŃ�ľ>^xܯZ�x��uzOg�Dv� �)�(P�B� (P�k��*�]��]��j�x�(P�B� (π`^�TXsK;3 �P@*�ň�2�J0r \��E�8=ErٻO���=��=����5�6�^<�Ř�A%�B˦) H1�P�oʥ0ґ)b��B�+�|�|��"ɴ���KW�a�d���nW�{�^˺�'����xT�K)d4��#+�����ѓ� �!<�c�b=IDNx�r�Q �9jW�Ƹݞ5���7g�q�<k���\n��vx��Ƹݞ5���7g�@$�gUzOeM��c�i��i��i��� $��ѧ0N��i��i��i�{�%0�7����N��i��i��i�m"X�xP�/B�!B��"|��<Q��P=S��������w��wW��W��zWt�����=CڻvLJ�>����\���x���ïB<�nW�{�^˺�'����һ�ϧx��y��۶<?Y��N�I�7����b�T)/'�p�i��1q�O����9e�-�#ϗ��7C�>ٍ����z�컫�{+�|=+�l�w��W���]�c���j��ո��p���X��҆1n�_�]��� ěo7�y���Q�4�Z-���j��+q���M�N�^���{.�����_J�>���{Wn���gڽ;�g<@(��m��p�*d�,h�P;i��Jn�_ѧ�ʢ� ��v ���5vgց��j�C�>xܯZ�x��uzOe}/��wM�N���=��lx3y � �"�����*pm�tZ-x��E�F|&�����d�uب�8k�E���f���0����k<�sF�O���9k1�c���|'K���������F<�F�a.Zx�a�a�a�JBC�zOe}/��wM�N���=��lx=�zZiq�Ѩ�D�r5B��B�A+���[��������IK�=SS���Y�e���՛�H�<u#�ўxܯZ�x��uzOec�6r�T�*N' ��I¤�Rp�8T�*N${6D�����p�8T�*N' ��I¤�Rp�8T�*D�"V�x��#��N' ��I¤�Rp�8T�*A��j贴����qi(E�X����d!~��/�E��� �ʮ�k�/�F����_�i��w�x��� ���7+ֽ�/e�^���7�{�~�_���q){vD?$ -� �-�⿵��j��YCLZ�+�Z�����L����-��|�^���{.������Z]������a~밿u�_��/�v��]������a~鬊��g�Cl� �/�v��]������a~밿u�_��/�v��M�V�l0�;h�Of�@�$��D� + Qn������w��ju��=���7IgK��^�R uSoO����8f���{��z�컫�{?u���{�Wi�J#l��C��<�Fc@�Ah0j,�Fm�ER�)eu���L1s{ӔB��!_����v�r��kH��+?���@I���Sֲ�7��p����=�r�k���]��=������v�����l�����5(��2F���F����[��FWhf*��(j���_���bU�u'~5�/ڌ9aw�<0ap��RuhIA���J).A����۳�w����w��wW��~&��������X>R�%p��8%�$���ʜ��~��FX���d��h�, l���K�U R��!t�4ۘ_�J#þ�7�J��5�B�n�ҁ����8|�EdBb�+���� �����\7O�n��p�?��u�t����� �����\7O�H�����{?u���{�U�ŚP\Zf÷ :�m�H ���Љr4)��=����f�zR�ȵ�-�$R�� p�p�G��f��eO�����ӿ��S�]ɯ\�OxܯZ�x��uzOg�`���jQ�Y��ݭ\:*Z�феX-@�'\#����$Ud�ţ7�=D��b@,q�����>� ɔ���[ʉ��R#����z�q���?��:�)x?xܯZ�x��uzOg�&����m�Wm�Wm�Wm�Wm�Wm�Wm�Wm�Wm�Wm�Wm�R�1U���OA��)5�]��]��]��]��]��]��]��]��]��]��]��H�vY%'���6���fiu���@aI�9�g�)JU.�i��MiŜ�f���]�����Q��If��HX��(bG��K�S>���c��N*��<C�%9)�'�R�a'����^���I���6����a�E6s�*���统� E6�$�5> LH���5�*?�T���@���+�G1?��/0c�=t��@Ig�������� F�H��ɗ�O��7+ֽ�/e�^���d+�o�-���u�����ߺ�[�_�~��o�-���t`Iq GyjG�����k1V]��֔��Qi5q�^�ߠ�A��s<����һ�����)j:�!��x'��� �`(C��̗�����$�7���7+ֽ�/e�^���ĉeC�_�W��_�W��_�W�@B�X��]ec�A,�4�^�r ��:a���aϡMW]����=t7էN���=5<mJ7���X��y ek��7�4:��B��4�&G��nQ�*��7_���u��7_���u��7_���u��H�Q5��'�����!�>�Vȶ�)5I�y^1Ws�Ks$�&��MTA*-&A��� �����_������ �"�v�y��{��`�̫�#�ē���@�������+�J�R����(����mݨ'��ӘHWZ�A��Dڣ<�� �R���>j����7���%��`�(��y�:�nN� ��u����Ē��wڻ��J$��!�]��?�ؔsڜ��Y���A�1<��Z3�~��5��G��>��^����a���ˑ���Q�\p��j�wc{&�Ԟ���#o�e�^���������a*�B�"c E�R���� $,K���/#r\R� 9S��R��i�u�����Ԛ�B��G�fL,�}&�A�m9!����q���A�>��^���`(�ʨ& iB�@D�Zr�D�`Rte�'ײ�I�����ym`E�3$�kׅ]��TPB^�E0��@�����S��j,(/��Nޕ�o꿭�SU͔�a��$T�sn5���"�8Pg�qI������@~����t�x}��r�k��\c�]�v��A����E�v�La����$��q�RT��|� &�N˺�'�����!���?�嚴>H�?��uǐ�}��r�k��>|X!�Z�n�������fO-hv�YB-�4�8ґ�M����O��"�D��o�e�@��d����B�!B��z���]��]��]��]��]��]��]��]��]��]��]��W_H�$~| �!B���|�҇A��KKI^����!�ۊp��hѣF�4h\�v����<�(qpqj/�������4��Ї ��w����w�D}Φ�hhr+���N�&L�x���Ub����'0L�ײ�P{�ɚ�K��3P&�n��8KNe�+�_�8��M �&V덳�~��1v��,�5Y6�]�����n>V�p觏+�A�Jߴ�:4���I�^�Dn�������v����f�I%Ǖs�W?�s�W?�s�W?�s�W?�s�W?�s�W3�s�W?�s�W?�s�W?�s�W?�s�W?�s�W?��=+�ҹ�+�ҹ�+�ҹ�+�ҹ�+�ҹ�+�ҹ�)�-E�s�W?�s�W?�s�W?�s�W?�s�W?�i��s�}�(V��/W��Q7��j�����^��A_}b����0BYV�S���:6 ���䋹�+���*�5����0��q���ޚ-M[��Y��>٠���n'���$G%I9mL�#�z��k���Y���o� �7T�-�h,h�{αh��4s�rx��asF���Yg���7?�ٞ(�]zU�2VN�#<U��\�(|��HքAD�}I|̍,���B2�� K2�L���zs�~L�WH'M�E�<�O��ʼ��x��f���!�]Z��_��\���s����p1�v�J�YW+�L�0�߽]X�!��R!m����4Zhl���/p.\��-��Lw�O��2���Z`��I�����'X�i*;D&~��d w��" �z��÷غ��7~��f������oBʺD�Սߩ��~Z�+���;�)I��7��4��4 �H�| ��F�!�<�f'�fcVZW=J�]qTd�\�4�BWNYg��(�m̠syPV�b!c6�Kѕ$�VHd���>�)[qPj,��#I�:f$ RsN.��dC�P]p���2�J�p��lŸPX��)ͩ�"j� b��H�������^ �"3��b("1�5�0�r�)�Rރa3�($D� M1E����.9U�g�Yd��M����r�It��C�S+��@(r���D��"ɹA��Z���/��u I7'��(�@���Lۗ T�K][�`�&ߑ�bX���OH�akbž��PA��5 �^�,Z��&��A����i%0$FD�~�s�}�H � C+Ձ�歘1��9�:/�F��$D6�Q�\J˻�b䃣jY��.5����˺(eL3KN�,&L5��J�����t�,�&�& �.�L�<ɤ�$%��,���i�R Yi�m��"w�W��Tz����R�N_HB�N+� ���C�f4�&�����@�LB�ޔd&�����~4�ҙr�@�F����8b�('0LP%� m)�ZF����(_*.�B5�2�T���c% fW5w��l]d�e(EC���\4P�ĸ�gZ��N��J��7?��D!<Ǝ:��P���b�Fq�7���d��ֹ�k�ֹ�k�ֹ�j�_�s��?�s��?�s��?�s��?�s��?�s��?�Iu�|� Kc�ϵs��?�s��?�s��?�s��?�s��X�#�N���>c@2OZ���Z���Z���Z���Z���Z���Z���Y�Z���Z���Z���Z���Z���Z���lQ��֊�U�f�s�Qdo�q^w��T�%˖�<�my\��l��x&Y��ȧ�7_V�%�]&��J$O`�����ij'U�Smϧ�9P�bv�j���Fa4� �����4[#���6�P���c��AF~?wwwwwwwwwwqm8�T�]yǟ�o�@�[u�h����:$�`����������������� ����yz�mM���6�w�#,�fjt'-6:�,CUb !WF���%m�U�LЕ<�8�È�)7��^�Rt�L�p��d��[Y�{��hZLJ�e!��mJx�� ��h�)B�`}/E���ANe����L�+;���-ւJ�p��d���,D�/�K�s�n�F�L"@3$�N' :CY�t�H�4D�V�ᆟ\���T 9H��7ڒ���!0���l�e�J����]��_����G9U���oK�P�t���JN�ހ^�i���K���V �+& ����F���ש��A�ӆ�%��0W`��m@���R�JT���?��Sq![�B��m9�&&[�Q��%e�[[]�]�z1�\�B��1"�B���fԦ�@J�Դ ������<� ���1j8�n��A���2v<'nӹ��� �X�Y4��e�ЗXu��p��U} ��srD�ٌ�o�`�����|�(:¸s�y�2�\�%�Wn8_X{U�&��_T��uI��H|�+&�S�/�K��0��"6�5ˡ��,e,;�kR2���`:ʼn�V�U�����u����J�S��h<��d�*�;�9�k\0|��Q��N��g���|KLu�$ ΅����}�t��dk;�;�:P���/���du��E�@ ��]hR�T��#�d��"�e�� ��51x�����4\E����;���Qa��_5�U�B/���D��E)-�|������1͊���0���}�{r���G���ј`Z��]�e<��P��Gܥ�����]��s$�oW �o\��_/��CGt������wNt. !��K��u=�j$�0\����O�$���il���M�2�D�0�=F�0h��C���q�"_ �*J�Jl�����_�NH~voD��M�W� ���.'qQ�P.���_d �;Y��т�5I+l2z.ޢ�2;<<C����s�rdMS�ចx\Rw��� J�:���Mm�vq��DPPլ�d�-00]��æ��9"U�,����ijM�^Q��,��Cۣ���H���*jY�I��N?B�^$Xj��Z]YZ��!�p�>ME)�(%����� �{��K��.�*�`(�-�L^�,���!By0�:����g���P0DdO�[P8̾)��[�"%�� U�"d/)�jO�o��^��((� �*�C�Q�<�H�7<$Bl�+6�~�&.Cx�g �D� ��\�ݿ�d�b��Y7!m�b�?,� ��Pb�h X��ƷJ[�<)�F 4%���l� ��2nBۜ<<$��<�|�sh@�0D9�6�+K]����c0,d���U0�?>ո4�$�N* �"���1a���A��,2Ƈjݡ� p>��[Q�� η��,�Ҥ�9�`��`�0I������$8�4�sv��A˱^GA�|<��p�-������O���j{k}�|JP��}��* A��wj1lN���Y�U���T�cy�]J��]�����:��\]�Wܣޜ�L�fP#AX��Q }ʕá`e�3��;�n%��g��Kw1�S ��@2C����,�C[g1���<)�^���#��,��`���E���bQ���ޙ�l�)�jE�Ȓ x��h�Hn{��(7���4I�5s�i0T(CY�18K�jP�3%�AU��*0Q��q����J �Y;��M�'�:����pSB��`�Jz$QbY&��a%������� �IGtt���*�Z������0�0i���[��z�^1���/��i�S��<��Fv���PR�]y�8xm�,�en%ljV���7psJ�ϟ
��Y �a��ED��7�㔑 ��ㄉ�J@�)T6��̦
Z�m�Թ�f�2��fnR���$n�X�C�":2)��qWo�fp����d�.���K��z:(��|���ِ��t����1>S¬���@X �� �dY���%7�,I!Df�)B�x�EJ��[D��e�RS���H\����R^͋N���e��R}E�96��R�����,�B@Dj���bt��y���F�:���#��},a11m�I�H� � ���)0�1�*[g�$��j � V`u��'6.�t (&��.`0A���)�3tY���S���-04� x��3X1N�1��Q���a��5r�Q���l�k�xq���X�N�RQ��e͵ul"a`�6�@��31ripT�w\M��!��^P5וD��@ � 啋TaH|�v���Wlt�M��@�n��F8�r��z�f�'&�@yY^�mz.�z�(�����'��%K�;��_K��3�_S �ڜ02�B��3I�T,������f�nb��Y�\��a6���:t��2\菝f�����V��Z�[����h����,(�5)w1� 3��~����a���l�K-�^�3��p�MnT��H�i�ep�j��I ��{���_'�V��KgdA,ܶ�Җ�u�f��ɌL������� �ַ꧍R%(��jVeVhY�P�Цm�,ULc��Q*��� ���8=���G1�Ho�Ma�T�Y�P��!��4J�1l������ �,�i�� �<As�Lgae���E���iH��@��X��/ɢRD��6PM)�$(�J]A�Ŧ��Eg��_�~����~�_d��̼�+�@JY�-��qD�%8���6�TP2&����NgђVp�D�0ݮ�D����r����.hq�)�*�N4S��l���"�3�t��LL��毤^$OQ�i��k�������;]��*rg�Q����������,���E`�L����APDm_4ϧIX `�`��`aH�v�j��Nr�o*�m`�T�"r�0Y¤h�u����(Ʒ`-�R7iU}-y6F����b8R�9�����)k��.� ^�"�5<���R�E �(�dcı4:� ��St�9�M]]ᱢqƂ ���!x��hX6���s��}�HIfV��"�0E�4�֡?��1��%�=I��2y� ~���6�ɛ���U�����橝!$�`XVGqx����z2�%،�ތ6M*�Ba�P�:��f[' �z���.�����'�I@r�.q�� g�#����A�9"�`ř)ޡ���4��&XX��>t"U�C&(�I:m�d7cj��H[5B�z�jn�I�1���]�gۚ@K]�7����H�狑��������ሥ���t}�[d���Bk2��}| �l�:� �s�yR`I� ��p���G/%��}�Ҵ�z���9�cd�#ۃI( ��5%��t#˦�q����?��pC $�QE<�IJ7t�v�^v���O�F��,:% �[��A����%#���kR��C`�/� ������D<Y�e2h&ʁ�E>�>J�D�pʠ�y֡~�h!Rg1!kV��j��t� �B��Y�xXQ��i4��rI %w4q�p�d,��5�w��0���Q& �Y��y`E�O��v@�Xc�]�}�Q�<ji%�意4xP�������q $�R�76ɶ]�$Ȇ��-54����<��E$J"�ݦ��V����� W6��e ��K��pp�c�Fp *7��b� ��<O9X@,6\���1c�`qh��n\�ޅ��g��"II$�,��p�Јd��*����`�o�3���0���i�\nz(��f���M��nY�ُ�!��=!�C@M�a�1@Ȟ�g��T���. ���TdD��0K̢��o����L��.�ff-�K�Y3��@�JY,�,��2�z�����oR� *�w�F�HE��ī��������|��UK�8�^`�����0��lH~/G�a�LS���V�����"GLe�6h$'֝"fH�R 1��R�x�T���4�LD�Ί�z�8ࠤ����I��� a�3�X���7O�`j�e u<�!]x��+^F�}�E|u<�s�PR�ud��GA��Rn��$�,8��Y8-D�:�j�)$����B� �D��gJR��T����3.��:�c�m.��B��(`>��+e�0C��AhCD�ZH11�lO�)�k�(D6d�K�&:r��rJ}&�-��(�!�-j1u$Z�\�7U���Ƅ3 Êz�o�NS�@pq3�F�����Ӑ=�`�̩Tx��f�����W�0�j��Һ��#z HHm�=+�9���x�4P��G���M�W����M ��y}O������'���F��^�q���h��d�TD`��%3���u8b�D�G�2��0G ���Ӑ�c����W_�� ��c��%��q��I)4n@%���m�Qqj��lk�ˤB��@�J4M���%�����i�P�űJ�˚{�z��V<�٬k�~Փ���ʻ��1�| ���X_j�k{.TC��GJ�Hb���yQFs˭Z���r5zp�d�#��}�"$�F�I.�T�C�V'��������\�<�zR�Ӵ_�t�ΙG���o��'���.|ԜG�@9[��M*L19�)�C/#Z��h'�It�4�ѐ��e���~Z�K��\�Zr�K�c"[.Z Ȥ���E�� �iɕ���e�F.G�yJ�7���π��`���C�[��!x":�Ҧ��'BU����i�y���E =�Ch;���R�D��5<x@a+�C9f��G���ҲX{Wg�ҙSe��i��)�Aiޗ:4ywH9px���5x����z��t���dg��U'f�uX��E�a�� ��1���B�]统����V��LT�c���<��D�Ff!�^1����[ [�0yx�ev�L'�;`�|�=��ǩ��U�ip?)�הcԼ(��t,��7����GPԣz�2����~�2�������\�_��6=�ߢ�a�� �*��}�*-����wZ&�>\��V\�h���Û�G`#bW|���H�<�=JgQ$i�n ��V ����px��_+���D©��/^X��^f-��Y([�%�$敏�Fyu��1�w?]�ț+��k�,��5y<�e-��j��%�}��'��(�S6��f���̨��B3�P�$F�vpX�ʹ��igF��͗��ߘ:Ws�ѹx�I0U�hC���`�y����Wg��b�D�5�]���ө�iv�l�����V'vq )R�a��܅������,�Mv��n��J؎��m�F�k*�u!�[��k%���MB�{�%bpg�^�jXң�C:��pJ��g�n�����(d]�~�ӎ�?���<�I��O�v�w����z�~+/�^rX�e� ㄶH��^rX�e���57��oK$yV�}��*�8�3�[zY#ʴ��D�}��8~��\�z��:�Y��r`�cz*:c8H4ڱ=3Nh��PJ��B`z3Q�C.�$�2%B�B�3��R�b���ه�ׇ �������&��W �]B}�][���"/<V��K�ڸ�åt���M�r <�k��K$�Ғ�S,�+�t#�,������6���@���ԆD1ah`�2���|���$ȑ�S�.SGy;,��� ��šgdS~_WS�����@`YwH}����a7/j����J6.#66��`)�(��R�&�4QK�8L��P�ha��z"3��O$��3A|0=a�M �������v���~ursg�T.�82��]%�=����)$bޓ�]�D�X˫@�� Z*�a`��*�`"��~��X�]I���c��Z �a8T�٭_�a��6(�� L�bƀ��2�g��Y�i0h�i�H�0�qs���:���Eן�*+���YKt����"2���Kn��b�b�qS���}�1W[h��A�Z��4zP��o��2��T�6���4��X��]��@��,A78}��Et��u�W�p|��ͩ����-����f�!��"�!�%Q�Ru�K� ��.���f��jo{���4 A�J�ߙ|ߢ��./ �0"� x�yTgIk������Ap�yP�J[<sH���S����&ٿ�V�TNIz;=��9�y�<�h{)F6�:��V᧕4(�e���,]y�ߢv��ӏ�<����?���I�B��vN�::�[�29�E��I�)1Қ2��5�CIr�_��� L+����0G��U��&� ����?�}�ǟ��2�}�E��VW�,b3<=�4��v�����j�n@�I�JQ� �l�~�+�� �q43i����3��� �o�Z��V��;5�6���ɵ�ͯO��R������mqPo0��q@��2!�mS~h+���3�K��l�QbS�U�W�j�1t�d�4�$A46]g���0Z��/6���#fK��r����:�I��%�#Pp�Y���3L�����Ԋ���ĥ� �#q��h,`�%2Zs����U�7���-AZfwW�Р�g4�h�mY�!"},�&ȰV�V@ H�� ^�"�,]8Q$�t��T��X&�-9ђ��h8�ŞQB�x},�]0�=VƩ��j�~��h,�C���D܆��0����Pp4��J]���g��)F��72<g��R �#.� 逈�"��E�g����f��Lfh���RNn?�����Wr�%B-�gNY���Q�4=][�(p�y�<�8��u< �[k� �#ݎw(j��*�u~�HGZ4�w`y���mLb'��bƻqxf�nd���z�5�6�@!iu�e�H�ȝhHq��0�����%6�"�t)�=�~jy`��:E��K�����}�����H��h�sL�3Ly�ڷ��a7"���=�<�Ď��Ξ6J#�Ry*�|����,���ayI,PM,=��9��(�0ر�Sk�r�=*1:�q����}��C�!��C���0������ס�2 %_��ƀp�f����F!�Q��ծ�$`3Q�k��l���7�A����S6<�,j�g�,��2L19���s�VZ���5mr��,���Τ���fZX��tɁ�ۍ���.��vYz!�@�Hq��zR$� Lh�� ���WT�Gi?W�]��)��Ҙ�X��bԇ�y�*�5��A?3Do"O�Ҟ�W6���#�hI! vǷj��#�Ǖ-��j��/�T�q�[ ֢7X�+кDN4�Yb�)���p���*Q���CY���N e2�ūD���M�*g��Vb�NmHW���/00�f��\4�f6�Q�)�K X��!8�!Ў.�*b�v��7����-b`9Ѓ�,^�����D�墟��E�o:U�=�L���i�|�^LFء��Aٞ� � �`��UհK�+��4�ӕ�M�2��D�zVE��� �5���D�X�% �������������9���ϥv?�v?�v?�v?�v?�v?�v?�v?�v?�v?�v?�Hcd�S����[�y?u�_5�_5�_5�_5�_5�_5�_5�_4hsa"k������u�O���?��'�H�=hH4a3q<CL##�W�D�����wR�ʛ�_���5�M_���5�M �K�٢��i�-_����-V��q�yoM/9�����P�K�Y��8p�Ç8Q�Q������}��.IC�S'(�3g�8�l�nM���a"��Dl�a�#d[~P��&e)�_5�_5�_5�_5�_5�_5�_5�_4ҁ �����[<���Lَ&Z5���(z�����mϬ_�i�h�#�/#tX�g$�͢f�l��(���7�5�:���c-?S[�!�uU�$� 'Z\ܲ�H,o��^W�SE'�i�!<��7�巃��+7��FX�v��xj:oBg��f6��ȶ�ؠ]2HZ�\��,L�+p{A(/&�'-M>���F`�\��ޚH��t�3j�^AsR���㺻V����d�{�O�ˌ"$$�9�'�3��B���7�Sܓ�"���A3 :%ND�b$���Shw%�c\8~��w���d�7y(D��c�{�����%�����K��`n�N )�� >� ��<��6�gF1��i�A�@;52�" ���KC�-��eķa'BdF��,�f�<)��̖AB����ڶx�w�'{��}������o'�*��JBn5���HLp�Χo���(�z�JM{$���V���cE��>��1`&������j[�v6�C�X%�2���81'�n�o��~P�;U����o�����������jmJ�5x�^N�{1t�n`Q��>�a�UB��x�~����l�3�Qc��������0`�����T�#k��g�27*r��e�8n_ �`��D�'U@�y�&Tۖ$��OJ��������������������������~S�Q�'Z��wG�]������t~�P�"�4 [O�>�S�J�o]������t~�?u����wG�]���ܨ�_G�A��g�.�T�+|N�覤M�����hp_A����v&�E���4������'ڝM<�l�}�(�@e�X�>��Bi�Cd����na/��mRA p�1�Zd��?�T�dT�,$���gm�0BDp�E�A��(�����=J@�\������Z3i^�A��|��� Fv�wj4c P^���Ɣ��3z(-f�(��,�&�����6� � AQ�"��z���H�l(TP���f�d}s��8&iU��� �p-�S�@���\�)�rpU-u�'��*[�Կۄ$�YIG�')�t����*&�\�+���b�$� ��aP`>h��*$ ��eb��8�B�Q��Px�f� R3ba0r�?��l����'Tz�X�wm�au!X�(gv��H��IcN�#,�D����]��Hň~i�RRRMa��8�*8�oq��/ĩ+����QGQB�W���P�0� g�+"�Ņ����i�!�S��*�̆b$Qs�X���K�����I xT�����$0�iN4@dLDI��Й��3&LjԨ7��P��z.�`��Pm����i�8��I��:��hxNq��?�=&��Bo��d"�@Ff;i��L! $1�����4j$L�� x5h���qC�!��RA ��z��(R�F��ڢw\�P Xf8TM��FD^��W�蟦�k"����<8T#�Ta"�RB`�2A���z����٢��O�3�2Bȋ_j|�B��1:���Hj_���O��pP���K�������R�D�"���X�`����!1����z�&�Ө���Z`��-��@��ZD�G��;���z]�:2s��n-J¤�E�JG7d�x����j�8���Q� ��� ��J��+/�|�zQ�"�����
Thank you for your response, Ben. I'm here to help where I may be helpful, so let me know where. I have interest in the Pi and the ARM simulator was expressed as an area needing more resources. 64-bit is the strategic effort, so if I can help.
I'd hope we could agree that whether is goes 64-bit then MT (which is what's up) or MT then 64-bit (as I was so rashly suggesting) there will be an integration cost. As 64-bit is a Spur ObjectMemory effort and MT is a process/stack oriented facet, are they not orthogonal and fairly non-interfering, aside from a few touch points. If there is integration cost, why not proceed in parallel? Certainly the discussion about what exactly MT is seems alright.
I'm guessing the answer to that you have mentioned: resources. We need a bunch of hardcore CompSci students to catch the fire.
Please let me know where I can help best. Rapport is key to team, this I have experienced.
As well, thanks so much for those links! Those are gold and will be reread recursively.
Regards, Robert
On 10/18/2015 11:56 AM, Ben Coman wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers robert.w.withers@gmail.com wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
- http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
- http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
On Mon, Oct 19, 2015 at 7:55 PM, Robert Withers robert.w.withers@gmail.com wrote:
Thank you for your response, Ben. I'm here to help where I may be helpful, so let me know where. I have interest in the Pi and the ARM simulator was expressed as an area needing more resources. 64-bit is the strategic effort, so if I can help.
You may find these interesting... * http://forum.world.st/ARM-Cog-progress-td4827195.html * http://markmail.org/message/tfqa4lgriw6xchh3 * http://www.slideshare.net/esug/pharo-arm-status
I'd hope we could agree that whether is goes 64-bit then MT (which is what's up) or MT then 64-bit (as I was so rashly suggesting) there will be an integration cost.
Agreed, but I guess the former shares that cost amongst more people.
As 64-bit is a Spur ObjectMemory effort and MT is a process/stack oriented facet, are they not orthogonal and fairly non-interfering, aside from a few touch points. If there is integration cost, why not proceed in parallel?
Naturally you'll get more support working in an area where the vm devs *need* more help, but I can't judge this. I'm not familiar with what the interference points might be. Maybe this helps... http://lists.squeakfoundation.org/pipermail/vm-dev/2014-October/016781.html
Certainly the discussion about what exactly MT is seems alright.
Sure. MT has several meanings. Its good to scope a common understanding.
I'm guessing the answer to that you have mentioned: resources. We need a bunch of hardcore CompSci students to catch the fire.
Please let me know where I can help best. Rapport is key to team, this I have experienced.
I learn a lot listening in on [vm-dev], but I've still only dabbled around the fringe of the vm. The best reference is Eliot overall and Esteban from a Pharo perspective. btw, have you seen... * http://www.mirandabanda.org/cogblog/cog-projects/
cheers -ben
Regards, Robert
On 10/18/2015 11:56 AM, Ben Coman wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers robert.w.withers@gmail.com wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
Hi Ben,
... ^^ robert
On 10/19/2015 11:06 AM, Ben Coman wrote:
On Mon, Oct 19, 2015 at 7:55 PM, Robert Withers robert.w.withers@gmail.com wrote:
Thank you for your response, Ben. I'm here to help where I may be helpful, so let me know where. I have interest in the Pi and the ARM simulator was expressed as an area needing more resources. 64-bit is the strategic effort, so if I can help.
You may find these interesting...
Thank you, their in my vm list of reading.
I'd hope we could agree that whether is goes 64-bit then MT (which is what's up) or MT then 64-bit (as I was so rashly suggesting) there will be an integration cost.
Agreed, but I guess the former shares that cost amongst more people.
Yes, good point. I am happy with having the MY discussion, only at this time, and helping the broader effort as you point out so that cost is less.
As 64-bit is a Spur ObjectMemory effort and MT is a process/stack oriented facet, are they not orthogonal and fairly non-interfering, aside from a few touch points. If there is integration cost, why not proceed in parallel?
Naturally you'll get more support working in an area where the vm devs *need* more help, but I can't judge this. I'm not familiar with what the interference points might be. Maybe this helps... http://lists.squeakfoundation.org/pipermail/vm-dev/2014-October/016781.html
Thank you again, for later consumption.
Certainly the discussion about what exactly MT is seems alright.
Sure. MT has several meanings. Its good to scope a common understanding.
Yes, it's good.
I'm guessing the answer to that you have mentioned: resources. We need a bunch of hardcore CompSci students to catch the fire.
Please let me know where I can help best. Rapport is key to team, this I have experienced.
I learn a lot listening in on [vm-dev], but I've still only dabbled around the fringe of the vm. The best reference is Eliot overall and Esteban from a Pharo perspective. btw, have you seen...
I had seen those. Sista sounds interesting as does an event vm. Isn't the event vm solved by the MTVM?
Cheers, Robert
cheers -ben
Regards, Robert
On 10/18/2015 11:56 AM, Ben Coman wrote:
On Sat, Oct 17, 2015 at 2:25 AM, Robert Withers robert.w.withers@gmail.com wrote:
Yes, exactly. I do realize I was consciously changing that effort synchronization order.
I see 64-bit being higher priority than multi-threaded for the wider community. Dealing with larger in-Image data opens the door to more corporate project/funding opportunities. Also simplifying the install on modern Linux platforms without requiring additional 386 libraries will help acceptance there.
It is my humble opinion, without really knowing, that 64-bit would have to be redone after the MTVM completes.
I would assume it was the other way around. Presuming that Eliot has sponsors influencing his priorities, it seems given that 64-bits will happen first. I would guess any MTVM development on the old vm would then need to be reworked.
I was doing so with the idea in mind that I and others might dig into working on the VM, for threading support, while Eliot maintains focus on 64-bits...a tall order, I know.
The usual downside of splitting resources applies. There are not that many "others" and maybe they would be drawn away from helping with the 64-bit vm. If the 64-bit vm goes slower for lack of resources then your footing for MTVM will shifting for a longer time. You may ultimately get where you want to go faster by helping with the 64-bit vm. The rapport built with other vm devs from working on 64-bit might could then be applied to MTVM. (Of course, its your free time, so you should pursue what interests you.)
I was barely familiar with the VM, slang, interpreter, it years ago... I'm totally unfamiliar with cog.
The experience you gain from working beside Esteban and Eliot on 64-bit Cog/Spur could then be applied to a MTVM.
btw, you may find these threads interesting...
http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-April/108648...
http://forum.world.st/Copy-on-write-for-a-multithreaded-VM-td4837905.html
cheers -ben
I believe another item on that list ought to be modernizing slang. So many big items!
Robert
On 10/16/2015 12:48 PM, Stephan Eggermont wrote:
On 16-10-15 14:05, Robert Withers wrote:
Because of that assumption I've made and without the responsibilities you have, Esteban, but recognizing modernizing NB to FFI, my desired list is:
I would expect the least total effort to be needed by keeping the work of Esteban and Eliot as much as possible aligned. That is what Esteban's list achieves.
Stephan
vm-dev@lists.squeakfoundation.org