DMA shared memory - qnx6.21 vs qnx6.3

Hi ,

Situation:
We made a Pci board using the PLX9054 PCI chips with a TI DSP on the
local-bus (TMS320C6103B). We start to devellop on QNX6.21 and everything
works ok. We use 2 transfert modes with that board. DMA channels of the
PLX9054 chip (PC memory to DSP memory transfers) and Burst transfert
initiated by the DSP (DSP memory to PC memory transfers) using the DSP
Dma channel).

For the first way, the PLX chip is master on both bus (PCI bus and his
localbus where is the DSP). The other way, the DSP is master for the
localbus (where the plx is slave) and the plx is master on the PCI bus.
Anyway, I don’t want to go to much in details here… I just want to give
an idea of our setup.

For both type of transfert, we reserved a shared memory with mmap using
the MAP_PHYS | MAP_ANON | MAP_NOX64K flags. I use mem_offset to give the
physical Addresses to the PLX and the DSP for their respective
source/destination memory in the PC RAM. Each block is 1M and It’s works
no problem with QNX 6.21. I made a library to access that board, I use
it on 2 different program, everything works ok.

The Problem:
I take the same program on the same computer, I run it under QNX 6.3,
the DMA channel used on the PLX work, but the Burst transfers initiated
by the DSP does’nt, I get nothing on my shared memory. I also tried to
recompile everything under 6.3, does’nt help.

The Question:
What I miss ? Is there a new function I must use in QNX 6.3 to make it
work ? Should I set something somewhere on the PCI bus registers ?

Thanks for your help.

Martin Gagnon, b.Eng.

Martin Gagnon wrote:

The Problem:
I take the same program on the same computer, I run it under QNX 6.3,
the DMA channel used on the PLX work, but the Burst transfers initiated
by the DSP does’nt, I get nothing on my shared memory. I also tried to
recompile everything under 6.3, does’nt help.

What triggers the DSP’s transfer? Is the DSP even trying?


Evan

Evan Hillas wrote:

Martin Gagnon wrote:

The Problem:
I take the same program on the same computer, I run it under QNX 6.3,
the DMA channel used on the PLX work, but the Burst transfers
initiated by the DSP does’nt, I get nothing on my shared memory. I
also tried to recompile everything under 6.3, does’nt help.


What triggers the DSP’s transfer? Is the DSP even trying?


Evan

I’ve run a test program in the DSP that just wait a command from the PC
program (using the PLX DMA channel). I first send some data from the PC
to the DSP memory and trig the DSP program to start the transfers to
send back this data to the DMA shared memory. After I compare with the
initial values. The same test I did sucessfully under 6.21. I receive
nothing in 6.3.

Everything else work in 6.3. I can map the board memory, single
read/write access work, PLX DMA channels too, but not the Burst
transfers used by the DSP.

I wonder what QNX 6.3 does different than 6.21…


Martin Gagnon

Martin Gagnon wrote:

I’ve run a test program in the DSP that just wait a command from the PC
program (using the PLX DMA channel). I first send some data from the PC
to the DSP memory and trig the DSP program to start the transfers to
send back this data to the DMA shared memory. After I compare with the
initial values. The same test I did sucessfully under 6.21. I receive
nothing in 6.3.

I still don’t see anything there that confirms that the DSP is being triggered. Is there something like a digital output the DSP can turn on when it has received the trigger command?


Evan

Evan Hillas wrote:

I still don’t see anything there that confirms that the DSP is being
triggered. Is there something like a digital output the DSP can turn on
when it has received the trigger command?


Evan

On each Loop when the DSP wait for the trigger command, after it start
the Burst transfert… it’s increment variable and put it to a fixe
memory address. I Read this address from my PC program using single
read/write commande and I can see it increment… So the DSP main program
loop is running. When it’s waiting for the trigger command, it’s just
wait there. So if the value to that fixe address increment… it’s mean
the DSP receive the trigger.


Martin

Excellent method. I’ll leave you to the gurus from here …


Evan

Shouldn’t you be using mmap_device_memory() instead of mmap() ?

dB

“Martin Gagnon” <martin@yanos.org> wrote in message
news:djdf2m$kjo$1@inn.qnx.com

Hi ,

Situation:
We made a Pci board using the PLX9054 PCI chips with a TI DSP on the
local-bus (TMS320C6103B). We start to devellop on QNX6.21 and everything
works ok. We use 2 transfert modes with that board. DMA channels of the
PLX9054 chip (PC memory to DSP memory transfers) and Burst transfert
initiated by the DSP (DSP memory to PC memory transfers) using the DSP Dma
channel).

For the first way, the PLX chip is master on both bus (PCI bus and his
localbus where is the DSP). The other way, the DSP is master for the
localbus (where the plx is slave) and the plx is master on the PCI bus.
Anyway, I don’t want to go to much in details here… I just want to give
an idea of our setup.

For both type of transfert, we reserved a shared memory with mmap using
the MAP_PHYS | MAP_ANON | MAP_NOX64K flags. I use mem_offset to give the
physical Addresses to the PLX and the DSP for their respective
source/destination memory in the PC RAM. Each block is 1M and It’s works
no problem with QNX 6.21. I made a library to access that board, I use it
on 2 different program, everything works ok.

The Problem:
I take the same program on the same computer, I run it under QNX 6.3, the
DMA channel used on the PLX work, but the Burst transfers initiated by the
DSP does’nt, I get nothing on my shared memory. I also tried to recompile
everything under 6.3, does’nt help.

The Question:
What I miss ? Is there a new function I must use in QNX 6.3 to make it
work ? Should I set something somewhere on the PCI bus registers ?

Thanks for your help.

Martin Gagnon, b.Eng.

David Bacon wrote:

Shouldn’t you be using mmap_device_memory() instead of mmap() ?

dB

I use mmap_device_memory to map the Pci board memory, but for the shared
memory for DMA… I use mmap, that’s how it should be.

Martin.

One notorious incompatibility between 6.21 and 6.3 is that mmap() no longer
implicitly treats the offset argument as unsigned. If you have high offset
values (2Gb+) then mmap() would fail. Don’t know whether you check the
return for errors… but beware that if you’re doing so without proper type
casting then error checking does not actually work :wink:

It is recommended to use mmap_device_memory(), which is a wrapper for
mmap64(). Of course you can just use mmap64() directly.

“David Bacon” <dbacon@qnx.com> wrote in message
news:djig04$914$1@inn.qnx.com

Shouldn’t you be using mmap_device_memory() instead of mmap() ?

dB

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:djdf2m$kjo$> 1@inn.qnx.com> …
Hi ,

Situation:
We made a Pci board using the PLX9054 PCI chips with a TI DSP on the
local-bus (TMS320C6103B). We start to devellop on QNX6.21 and everything
works ok. We use 2 transfert modes with that board. DMA channels of the
PLX9054 chip (PC memory to DSP memory transfers) and Burst transfert
initiated by the DSP (DSP memory to PC memory transfers) using the DSP
Dma channel).

For the first way, the PLX chip is master on both bus (PCI bus and his
localbus where is the DSP). The other way, the DSP is master for the
localbus (where the plx is slave) and the plx is master on the PCI bus.
Anyway, I don’t want to go to much in details here… I just want to give
an idea of our setup.

For both type of transfert, we reserved a shared memory with mmap using
the MAP_PHYS | MAP_ANON | MAP_NOX64K flags. I use mem_offset to give the
physical Addresses to the PLX and the DSP for their respective
source/destination memory in the PC RAM. Each block is 1M and It’s works
no problem with QNX 6.21. I made a library to access that board, I use it
on 2 different program, everything works ok.

The Problem:
I take the same program on the same computer, I run it under QNX 6.3, the
DMA channel used on the PLX work, but the Burst transfers initiated by
the DSP does’nt, I get nothing on my shared memory. I also tried to
recompile everything under 6.3, does’nt help.

The Question:
What I miss ? Is there a new function I must use in QNX 6.3 to make it
work ? Should I set something somewhere on the PCI bus registers ?

Thanks for your help.

Martin Gagnon, b.Eng.

Thanks, I will try with mmap64 to see if it’s solve the problem. For
mmap_device_memory, how can I use it ? I don’t want to have to specify
the physical adresses … I tought mmap_device_memory is only for
mapping device memory like some memory space on a PCI card.

Martin

Igor Kovalenko wrote:

One notorious incompatibility between 6.21 and 6.3 is that mmap() no longer
implicitly treats the offset argument as unsigned. If you have high offset
values (2Gb+) then mmap() would fail. Don’t know whether you check the
return for errors… but beware that if you’re doing so without proper type
casting then error checking does not actually work > :wink:

It is recommended to use mmap_device_memory(), which is a wrapper for
mmap64(). Of course you can just use mmap64() directly.

“David Bacon” <> dbacon@qnx.com> > wrote in message
news:djig04$914$> 1@inn.qnx.com> …

Shouldn’t you be using mmap_device_memory() instead of mmap() ?

dB

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:djdf2m$kjo$> 1@inn.qnx.com> …

Hi ,

Situation:
We made a Pci board using the PLX9054 PCI chips with a TI DSP on the
local-bus (TMS320C6103B). We start to devellop on QNX6.21 and everything
works ok. We use 2 transfert modes with that board. DMA channels of the
PLX9054 chip (PC memory to DSP memory transfers) and Burst transfert
initiated by the DSP (DSP memory to PC memory transfers) using the DSP
Dma channel).

For the first way, the PLX chip is master on both bus (PCI bus and his
localbus where is the DSP). The other way, the DSP is master for the
localbus (where the plx is slave) and the plx is master on the PCI bus.
Anyway, I don’t want to go to much in details here… I just want to give
an idea of our setup.

For both type of transfert, we reserved a shared memory with mmap using
the MAP_PHYS | MAP_ANON | MAP_NOX64K flags. I use mem_offset to give the
physical Addresses to the PLX and the DSP for their respective
source/destination memory in the PC RAM. Each block is 1M and It’s works
no problem with QNX 6.21. I made a library to access that board, I use it
on 2 different program, everything works ok.

The Problem:
I take the same program on the same computer, I run it under QNX 6.3, the
DMA channel used on the PLX work, but the Burst transfers initiated by
the DSP does’nt, I get nothing on my shared memory. I also tried to
recompile everything under 6.3, does’nt help.

The Question:
What I miss ? Is there a new function I must use in QNX 6.3 to make it
work ? Should I set something somewhere on the PCI bus registers ?

Thanks for your help.

Martin Gagnon, b.Eng.
\

Yes, it is intended for that purpose. If you’re doing something different,
you have mmap64().

“Martin Gagnon” <martin@yanos.org> wrote in message
news:djiq08$g29$1@inn.qnx.com

Thanks, I will try with mmap64 to see if it’s solve the problem. For
mmap_device_memory, how can I use it ? I don’t want to have to specify the
physical adresses … I tought mmap_device_memory is only for mapping
device memory like some memory space on a PCI card.

Martin

Igor Kovalenko wrote:
One notorious incompatibility between 6.21 and 6.3 is that mmap() no
longer implicitly treats the offset argument as unsigned. If you have
high offset values (2Gb+) then mmap() would fail. Don’t know whether you
check the return for errors… but beware that if you’re doing so without
proper type casting then error checking does not actually work > :wink:

It is recommended to use mmap_device_memory(), which is a wrapper for
mmap64(). Of course you can just use mmap64() directly.

“David Bacon” <> dbacon@qnx.com> > wrote in message
news:djig04$914$> 1@inn.qnx.com> …

Shouldn’t you be using mmap_device_memory() instead of mmap() ?

dB

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:djdf2m$kjo$> 1@inn.qnx.com> …

Hi ,

Situation:
We made a Pci board using the PLX9054 PCI chips with a TI DSP on the
local-bus (TMS320C6103B). We start to devellop on QNX6.21 and everything
works ok. We use 2 transfert modes with that board. DMA channels of the
PLX9054 chip (PC memory to DSP memory transfers) and Burst transfert
initiated by the DSP (DSP memory to PC memory transfers) using the DSP
Dma channel).

For the first way, the PLX chip is master on both bus (PCI bus and his
localbus where is the DSP). The other way, the DSP is master for the
localbus (where the plx is slave) and the plx is master on the PCI bus.
Anyway, I don’t want to go to much in details here… I just want to give
an idea of our setup.

For both type of transfert, we reserved a shared memory with mmap using
the MAP_PHYS | MAP_ANON | MAP_NOX64K flags. I use mem_offset to give the
physical Addresses to the PLX and the DSP for their respective
source/destination memory in the PC RAM. Each block is 1M and It’s works
no problem with QNX 6.21. I made a library to access that board, I use
it on 2 different program, everything works ok.

The Problem:
I take the same program on the same computer, I run it under QNX 6.3,
the DMA channel used on the PLX work, but the Burst transfers initiated
by the DSP does’nt, I get nothing on my shared memory. I also tried to
recompile everything under 6.3, does’nt help.

The Question:
What I miss ? Is there a new function I must use in QNX 6.3 to make it
work ? Should I set something somewhere on the PCI bus registers ?

Thanks for your help.

Martin Gagnon, b.Eng.

I don’t have my QNX 6.3 right now on my hand to test… but the mmap64
seems to work better with 6.21, so I suspect it to solve my problem with
6.3 too, I will see that soon. With 6.21, at least, I’m was not able to
choose the value I want for the size of the shared memory, the function
return no errors, but it was not working, with mmap64, that problem is
fixed now. Thanks for the hints, I hope it will solve all my problems in
6.3 now.

Martin

On 2005-10-24, Igor Kovalenko <kovalenko@comcast.net> wrote:

Yes, it is intended for that purpose. If you’re doing something different,
you have mmap64().

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:djiq08$g29$> 1@inn.qnx.com> …
Thanks, I will try with mmap64 to see if it’s solve the problem. For
mmap_device_memory, how can I use it ? I don’t want to have to specify the
physical adresses … I tought mmap_device_memory is only for mapping
device memory like some memory space on a PCI card.

Martin

Finally, I’ve tried on QNX6.3 with mmap64 (and mem_offset64) and it
didn’t help … thanks for the recommendation, but the problem seems to
be something else.

Martin.


On 2005-10-24, Igor Kovalenko <kovalenko@comcast.net> wrote:

Yes, it is intended for that purpose. If you’re doing something different,
you have mmap64().

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:djiq08$g29$> 1@inn.qnx.com> …
Thanks, I will try with mmap64 to see if it’s solve the problem. For
mmap_device_memory, how can I use it ? I don’t want to have to specify the
physical adresses … I tought mmap_device_memory is only for mapping
device memory like some memory space on a PCI card.

Martin

Igor Kovalenko wrote:
One notorious incompatibility between 6.21 and 6.3 is that mmap() no
longer implicitly treats the offset argument as unsigned. If you have
high offset values (2Gb+) then mmap() would fail. Don’t know whether you
check the return for errors… but beware that if you’re doing so without
proper type casting then error checking does not actually work > :wink:

It is recommended to use mmap_device_memory(), which is a wrapper for
mmap64(). Of course you can just use mmap64() directly.

“David Bacon” <> dbacon@qnx.com> > wrote in message
news:djig04$914$> 1@inn.qnx.com> …

Shouldn’t you be using mmap_device_memory() instead of mmap() ?

dB

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:djdf2m$kjo$> 1@inn.qnx.com> …

Hi ,

Situation:
We made a Pci board using the PLX9054 PCI chips with a TI DSP on the
local-bus (TMS320C6103B). We start to devellop on QNX6.21 and everything
works ok. We use 2 transfert modes with that board. DMA channels of the
PLX9054 chip (PC memory to DSP memory transfers) and Burst transfert
initiated by the DSP (DSP memory to PC memory transfers) using the DSP
Dma channel).

For the first way, the PLX chip is master on both bus (PCI bus and his
localbus where is the DSP). The other way, the DSP is master for the
localbus (where the plx is slave) and the plx is master on the PCI bus.
Anyway, I don’t want to go to much in details here… I just want to give
an idea of our setup.

For both type of transfert, we reserved a shared memory with mmap using
the MAP_PHYS | MAP_ANON | MAP_NOX64K flags. I use mem_offset to give the
physical Addresses to the PLX and the DSP for their respective
source/destination memory in the PC RAM. Each block is 1M and It’s works
no problem with QNX 6.21. I made a library to access that board, I use
it on 2 different program, everything works ok.

The Problem:
I take the same program on the same computer, I run it under QNX 6.3,
the DMA channel used on the PLX work, but the Burst transfers initiated
by the DSP does’nt, I get nothing on my shared memory. I also tried to
recompile everything under 6.3, does’nt help.

The Question:
What I miss ? Is there a new function I must use in QNX 6.3 to make it
work ? Should I set something somewhere on the PCI bus registers ?

Thanks for your help.

Martin Gagnon, b.Eng.
\

I’m still confused. Why are you specifying MAP_PHYS if
you don’t want to specify a physical address?

dB

“Martin Gagnon” <martin@yanos.org> wrote in message
news:slrndlt55g.klu.martin@parrot.island.com

Finally, I’ve tried on QNX6.3 with mmap64 (and mem_offset64) and it
didn’t help … thanks for the recommendation, but the problem seems to
be something else.

Martin.


On 2005-10-24, Igor Kovalenko <> kovalenko@comcast.net> > wrote:
Yes, it is intended for that purpose. If you’re doing something
different,
you have mmap64().

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:djiq08$g29$> 1@inn.qnx.com> …
Thanks, I will try with mmap64 to see if it’s solve the problem. For
mmap_device_memory, how can I use it ? I don’t want to have to specify
the
physical adresses … I tought mmap_device_memory is only for mapping
device memory like some memory space on a PCI card.

Martin

Igor Kovalenko wrote:
One notorious incompatibility between 6.21 and 6.3 is that mmap() no
longer implicitly treats the offset argument as unsigned. If you have
high offset values (2Gb+) then mmap() would fail. Don’t know whether
you
check the return for errors… but beware that if you’re doing so
without
proper type casting then error checking does not actually work > :wink:

It is recommended to use mmap_device_memory(), which is a wrapper for
mmap64(). Of course you can just use mmap64() directly.

“David Bacon” <> dbacon@qnx.com> > wrote in message
news:djig04$914$> 1@inn.qnx.com> …

Shouldn’t you be using mmap_device_memory() instead of mmap() ?

dB

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:djdf2m$kjo$> 1@inn.qnx.com> …

Hi ,

Situation:
We made a Pci board using the PLX9054 PCI chips with a TI DSP on the
local-bus (TMS320C6103B). We start to devellop on QNX6.21 and
everything
works ok. We use 2 transfert modes with that board. DMA channels of
the
PLX9054 chip (PC memory to DSP memory transfers) and Burst transfert
initiated by the DSP (DSP memory to PC memory transfers) using the DSP
Dma channel).

For the first way, the PLX chip is master on both bus (PCI bus and his
localbus where is the DSP). The other way, the DSP is master for the
localbus (where the plx is slave) and the plx is master on the PCI
bus.
Anyway, I don’t want to go to much in details here… I just want to
give
an idea of our setup.

For both type of transfert, we reserved a shared memory with mmap
using
the MAP_PHYS | MAP_ANON | MAP_NOX64K flags. I use mem_offset to give
the
physical Addresses to the PLX and the DSP for their respective
source/destination memory in the PC RAM. Each block is 1M and It’s
works
no problem with QNX 6.21. I made a library to access that board, I use
it on 2 different program, everything works ok.

The Problem:
I take the same program on the same computer, I run it under QNX 6.3,
the DMA channel used on the PLX work, but the Burst transfers
initiated
by the DSP does’nt, I get nothing on my shared memory. I also tried to
recompile everything under 6.3, does’nt help.

The Question:
What I miss ? Is there a new function I must use in QNX 6.3 to make it
work ? Should I set something somewhere on the PCI bus registers ?

Thanks for your help.

Martin Gagnon, b.Eng.
\

David Bacon wrote:

I’m still confused. Why are you specifying MAP_PHYS if
you don’t want to specify a physical address?

MAP_PHYS | MAP_ANON | MAP_NOX64K is used to get DMA-safe memory.
In particular, the combination of PHYS and ANON gives you
physically contiguous memory; it is only when PHYS used in
conjunction with PRIVATE or SHARED that it means a set physical
address.

On 2005-10-25, John Garvey <jgarvey@qnx.com> wrote:

David Bacon wrote:
I’m still confused. Why are you specifying MAP_PHYS if
you don’t want to specify a physical address?

MAP_PHYS | MAP_ANON | MAP_NOX64K is used to get DMA-safe memory.
In particular, the combination of PHYS and ANON gives you
physically contiguous memory; it is only when PHYS used in
conjunction with PRIVATE or SHARED that it means a set physical
address.

That’s exactly my case here… thanks to give this nice explanation, I
could not do better because of my “relatively poor” english skills.

I know that the MAP_NOX64K is not always needed but in my case, it’s a
lot simplier because where I specify the physical addresse on the PLX
chip, I can only put a multiple of 64K (the 16 lower bits are not
accessible).

I’ve use this kind of thing with another PCI board, based on a DSP that
have the PCI interface chip inside. That one work on both, QNX6.21 and
QNX6.3 with mmap (never try mmap64).

Now for my board with the PLX9054, I have no idea. May be the physical
address I try to give is not valid for the PLX (if qnx 6.3
mmap/mem_offset give different result than 6.21). May be QNX6.3 act
differently with the memory management unit or with the PCI bus, I don’t
know ?

Martin.

If I remember right, PLX9054 is a non-transparent PCI-PCI bridge. I have
posted this before, but to save you the trouble, here is is again.

Compile the pcitest.c and run it with vendor and device id of your board as
parameters. Compare the output to what pci -v says. If there is anything odd
in the output (look for bad IRQ numbers, 0 for memory ranges, etc) then
replace the pci-bios with pci-bios.igor and run pcitest again. If it fixes
the problem, try running your app again.

Basically, pci-bios shipped with QNX (all versions) has a bug (or should I
say ‘feature’) that prevents it from working properly with any
non-transparent PCI bridge. Since you said your app worked with 6.21, your
problem could be with something else, but I would be very surprized if this
issue did not have a hand in it.

– igor

“Martin Gagnon” <martin@yanos.org> wrote in message
news:slrndlv0s0.4d8.martin@parrot.island.com

On 2005-10-25, John Garvey <> jgarvey@qnx.com> > wrote:
David Bacon wrote:
I’m still confused. Why are you specifying MAP_PHYS if
you don’t want to specify a physical address?

MAP_PHYS | MAP_ANON | MAP_NOX64K is used to get DMA-safe memory.
In particular, the combination of PHYS and ANON gives you
physically contiguous memory; it is only when PHYS used in
conjunction with PRIVATE or SHARED that it means a set physical
address.


That’s exactly my case here… thanks to give this nice explanation, I
could not do better because of my “relatively poor” english skills.

I know that the MAP_NOX64K is not always needed but in my case, it’s a
lot simplier because where I specify the physical addresse on the PLX
chip, I can only put a multiple of 64K (the 16 lower bits are not
accessible).

I’ve use this kind of thing with another PCI board, based on a DSP that
have the PCI interface chip inside. That one work on both, QNX6.21 and
QNX6.3 with mmap (never try mmap64).

Now for my board with the PLX9054, I have no idea. May be the physical
address I try to give is not valid for the PLX (if qnx 6.3
mmap/mem_offset give different result than 6.21). May be QNX6.3 act
differently with the memory management unit or with the PCI bus, I don’t
know ?

Martin.

begin 666 pci-bios.igor
M?T5,1@$!0````````````(``P!4(T$"#0```"HJ0```````#0`( `& M`"@`&@`9``8T-( $" # P 4$`````P```/0` M``#T@ 0(`````!04! $!``````````" ! @`@ 0(HHD` M`**)```%`````! ```$```# B0``P!D%", 9!0@X`@``[ L```8`````$ `` M`@```'"+``!P&P4(`````(@```"(!@0$^(L````````` M```&, LM)0`````````T(0I```````` M`"P````G! 6!$````Q````*P#HX
M-PX-0```!<O&P```#8.P```"09
M.0```#(/`````````````````````````````````````@ M``````````````````````````````4`````````````````````````"0`` M``0```````````````T`````````% ```````````````````!@````````` M````````````````$P`````````:```````````````C````'@```!T````5 M````)@```"H````#```````````````(````* ```!(````B`````````" ` M``````````````P````!````'P```"X````S```````````````````````` M``L```!HB@0()P```!(````2````>(H$")4````2````(P```(B*! @U```` M$@```"P```!P&P4(`````!$`\?\U````F(H$",X````2````1@`````<!0@$ M````$0`2`$,"``"D_ 0(`````!$`\?],````J(H$"",````2````80```+B* M! @E````$@```' ```#(B@0(<@```!(```!Z````V(H$""X````2````@0`` M`.B*! C^`@``$@```(\````$' 4(! ```!$`$@"<````^(H$"+H````2```` MHP````@<!0@$````$0`2`"P"```(BP0(5@```!(```"J````&(L$""@````2 M````$0(``"B+! @2````$@```+(````XBP0(E0```!(```##````2(L$""4` M```2````RP```%B+! B(````$@```-@```!HBP0(* ```!(```#?````>(L$ M"$0````2````-@(``(B+! AC````$@```.8```"8BP0(8 ```!(```#N```` M#!P%" 0````1`!(`]0```*B+! @.````$@````4!``"XBP0(40```!(````, M`0``R(L$"+4)```2````$P$``-B+! C@````$@```#P"``!(C00(`````!$` M"@`B`0``Z(L$"(\!```2````* $``/B+! C\````$@```%$"``#X&P4(```` M`!$`\?\S`0``"(P$"+ "```2````.@$``!B,! AS````$@```$$!```D]00( M/P,``!(`"@!&`0``*(P$"#T````2````'@(``#B,! @]````$@```% !``!( MC 0(, ```!(```!7`0``6(P$"&(````2````; $``&B,! @Y````$@```'0! M``!XC 0(10```!(```![`0``B(P$"#T````2````A0$``)B,! C-````$@`` M`(\!``"HC 0(HP```!(```"@`0``N(P$""0````2````L $``! <!0A0```` M$0`2`$H"``#X&P4(`````!$`\?^X`0``K!H%" `````1`/'_70(``*PE!0@` M````$0#Q_\X!``#(C 0(C ```!(```#A`0``V(P$",X````2````\@$``.B, M! @E````$@```/<!``#XC 0()@```!(````G`@``"(T$""D````2````_ $` M`!B-! @C````$@````,"```HC00(80```!(````,`@``.(T$",X````2```` M1%E.04U)0P!I;V9U;F-?871T<E]I;FET`&5R<FYO`')E<VUG<E]C;VYT97AT M7V%L;&]C`')E<VUG<E]H86YD;&5R`%]I;G1R7W8X-@!M96UC<'D`<F5S;6=R M<F-D8FUG<E]C<F5A=&4`9&QC;&]S90!R97-M9W)?8FQO8VL`<W1R=&]L`&-A MM&5M<V5T`&UA:6X`37-G4F5P;'EV`'-T<F-M< !P=&AR96%D7VUU=&5X7W5N M;$93151?5$%"3$5?`'!T:')E861?;75T97A?;&]C:P!I;V9U;F-?9G5N8U]I M;@4(!0\```P<!0@%&@``$!P%" 4P``"X&@4(!P$``+P:!0@'`@``P!H%" <# M``4(:! ```#IP/____\EQ!H%"&@8````Z;#_____)<@:!0AH( ```.F@____ M_P```.D0_____R7P&@4(:' ```#I`/____\E]!H%"&AX````Z?#^____)?@: M!00;!0AHF ```.FP_O___R4(&P4(:* ```#IH/[___\E#!L%"&BH````Z9#^ M____)1 ;!0AHL ```.F _O___R44&P4(:+@```#I</[___\E&!L%"&C ```` MZ6#^____)1P;!0AHR ```.E0_O___R4@&P4(:- ```#I0/[___\E)!L%"&C8 M````Z3#^____)2@;!0AHX ```.D@_O___R4L&P4(:.@```#I$/[___\E,!L% M"&CP````Z0#^____)30;!0AH^ ```.GP_?___R4X&P4(: `!``#IX/W___\E M//\E2!L%"&@@`0``Z:#]____)4P;!0AH* $``.F0_?___R50&P4(:# !``#I M@ #I4/W___\E8!L%"&A0`0``Z4#]____)60;!0AH6 $``.DP_?___R5H&P4( M:& !``#I(/W___\E;!L%"&AH`0``Z1#]__].24%-)/4$"(G3BW0D`(U,) 2- M!+&-> 2-4 B#> 0`= R-=@"+`H/"!(7 =?=34E=15NAY_O__:*3\! CH[_[_ M_X/$!.B__/__QP4`' 4(`````.B$9P``4.A"____S)!5B>6#[!13Z ````!; M@</XC ``ZQ:-=@"+@Q3___^-4 2)DQ3___^+`/_0BX,4____@S@`=>);R<.- M=@!5B>6#[!13Z ````!;@<.\C ``6\G#D)!5B>6#[!13BUT,BU40BT44BTT( M@-CO#[=1!(M%'.\/MQ$QP.];R<.)]E6)Y8/L6(M%$(M5#,'B"(E5S(E%T,=% M\ ````!J`&H`C46\4&H&Z"7____)PXUV`%6)Y8/L3%=64XMU#(M5$(U]O#'; MB=C\N1$```#SJXGPP> (@^+\"=")1<R+11RH`70.BT44P> ("T48B474ZP?' M1=0`````QT7P`````,=%] #P``!J`&H`C46\4&H/Z+S^__^-9:A;7E_)PU6) MY8/L#%=64XM5"(M]$(MU%,=%_ ````"+'8 =!0B#Q/B-1?Q0:@1J/%>+10Q0 M4NB[_O__B<&%R0^%W ```(M%_"7_````B47\@_@/=Q&)!HM5&,<"`0```.FZ M`'T1BU4,.1-U[3E[!'7HN $```"%P'0S,=(QR8M%&#L(<R2_`0```(UV`(GX MTW0<NB :!0B0BP2*B0:#Q@1!BT48.PAS!H,\B@!UZDF+51B+`CG(=@*)R(M5 M&(D"QP8`````,<"-9>A;7E_)PY!5B>6#[$Q75E.+=0B-?;PQP/RY$0```/.K M#[<^@\<&@\3T5^AD^O__B<.#Q!"%VW4+N/_____IG@```)"#Q/Q7:@!3Z&3[ M__\/MP9FB0-FQT,"!@AFQT,$``#'1<P`````QT7P`````,=%] #P``#'1;P` M" ``5U.-1;Q0:@[H#?W__XG'@\0@A?]T#(/$]%/H-_S__^M D(U.!@^W!F8[ M`W,%#[?0ZP,/MQ.-0P:#Q/Q24%'HL_G__P^W`V:)!H/$]%/H!/S__X-]# !T M"8M%S(M5#&:)`HGXC66H6UY?R<.-=@!5B>4QP,G#D%6)Y8/L5%>-?;PQP/RY M$8M5U ^VTHM%"(D0BU7,#[?2BT4,B1"+5=@/MM*+11")$(G(BWVHR<-5B>6+ M10R+51"+312)`8E1!#' R<.-=@!5B>6#[ B#Q/3_=0CH4_O__S' R<.-=@!5 MB>6#[%Q75E.+50BA@!T%"(E%M+N@'04(B=\Q]HGP_+D!`@``\ZMFJV;'!: = M!0@`"(/$^%)3Z$3^__^)1;R#Q!"%P'064&C%_ 0(:@5J$>C7:0``Z6,!``") M]B+D! ```_#'`\Z9T!!G`#"#^S]^&8/$_&C=_ 0(:@5J$>A@:0``Z>P```"- M=@`QVXL]8!H%"(E]L.MTC78`BU6X#[8"BTVTB0$/MD(!B4$$,<F#P@*)5:R) M]HT$28M]K( \. !T-XM5N&:#?! #`'0L#[=$$ .+?;2)1P@QTHT$28M]N ^W M=#@#C47 B?8/H]9S!(E4D/Q"@_H/?O%!@_D#?K=#@T6X$(-%M S_1;")V@^W M!: =!0AFP>@$9H/X,7<0)?__```YPP^";____^L*D(/Z,0^&8____XM%L*-@ M&@4(,<DQVXU5P+X@&@4(C78`C02=`````(,\$ !T!XL$$(D$CD%#@_L/?N;' M!(T@&@4(`````(M%O(UEF%M>7\G#58GE@^P@5U.+50B+70R+`@M"!'4'BP,+ M0P1T0HU]Z#' _+D&````\ZN+`HM2!(E%Z(E5[(L#BU,$B47PB57TBT40@,R MB47X@\3X:@&-1>A0Z"[W__^#Q!"#^/]T!C' ZQB)]H/$_&CT_ 0(:@)J$>CO M9P``N P```"-9=A;7\G#C78`58GE@>QL`P``5U93QX7,_/__`````,>%T/S_ M_P````"A!!P%" ^W4 YFP>H%#[?*B8W8_/__#[=0#(T<$,>%U/S__P````#' MA=S\__\`````.8W4_/__#XWW````C78`]D,4$ ^%SP```&:#>Q0`#X3$```` M@\3T#[=#$E#HJF,``(F%R/P```#\J #SIG5\BX74_/__P> $BQ.+2P2)E"C@ M_/__B8PHY/S__XM3"(M+#(F4*.C\__^)C"CL_/___X74_/__B[7(_/__OPS] M! BY!P```/RH`/.F=2^+M=#\__\Y<PQW$HGP.4,,=1V+E<S\__\Y4PAV$HM# M"(M3#(F%S/S__XF5T/S__X/#(/^%W/S__XN5V/S__SF5W/S__P^,#/____^- MU/S__XGV,=O'A=S\__\`````BXW4_/__.8W<_/__#XT!`0``C;W@_/__C;7H M_/__B;6T_/__BXW<_/__P>$$BX7<_/__0(G"P>($BT0Y!#M$.@1W$@^%L@`` M`(L$.3L$.@^&I@```(N=W/S__\'C!(L$.XM4.P2)A<#\__^)E<3\__^+C;3\ M__^+% N+3 L$B96X_/__B8V\_/__BXW<_/__0<'A!(F-I/S__XL$.8M4.02) M!#N)5#L$B[6T_/__BP0QBU0Q!(GQB00+B50+!(N=P/S__XNUQ/S__XN%I/S_ M_XD<.(ET. 2+E;C\__^+C;S\__^+G;3\__^+M:3\__^)%!Z)3!X$NP$```#_ MA=S\__^+A=3\__\YA=S\__\/C!'___^%VP^%V?[__\>%W/S__P````"+E=3\ M__\YE=S\__\/CZ4!``"-C>B%J/S__XF5K/S__XGVBX7<_/__P> $BXW0_/__ MBY6P_/__.TP0! ^'`@$``(G+.UP0!'4/B[7,_/__.S00#X?K````BX74_/__ M.87<_/__#XW9````BX7<_/__0(G#P>,$C8W@_/__BX7<_/__P> $B[6P_/__ MBU0P!(L$,(/ `8/2`#E4"P1W#P^%GP```#D$"P^&E@```(N%W/S__\'@!(N- ML/S__XM4" 2+! B#P &#T@")A9S\__^)E:#\__\E__\/`(/B`(F%S/S__XF5 MT/S__XN%S/S__PG0="R+A9S\__^+E:#\__\%```0`(/2`"N%S/S__QN5T/S_ M_XF%G/S__XF5H/S__XN%W/S__T#!X 2+G"C@_/__B[0HY/S__XF=J/S__XFU MK/S___^%W/S__XNUU/S__SFUW/S__P^.Q_[__XN%J/S__XN5K/S__Z-P' 4( MB15T' 4(BY6<_/__BXV@_/\`C7W ,<#\N1 ```#SJX/$_(U%O%"-1;A0C46T M4.B:^/__B<.#Q!"%VW1Q@\3TZ-GR____,%-H0/T$"&H":A'H.&,``(/$(&H` M:'+]! AH=OT$"&C__P``Z.,(:@)J$>CK8@``N!,```#IV $``)#V1;P"=!Z# MQ/QHP/T$"&H":A'HR6(``+CQ__^C@!T%"(/$$(7 #X7(````N P```#I=0$` M`(GV@\3\C46P4&AD&@4(C44(4.CG\O__@\00@_C_#X2;````@WVP``^$D0`` M`(/X`70T?PJ%P'0.Z8$```"0@_@"=$/K>9"#Q/QJ`&H`_W6PZ"GQ__^)PJ%@ M' 4(B1"#Q!#K6XUV`(/$_&H`:@#_=;#H"?'__XG"H6 <!0B)4 2#Q!#K.HGV MO@$````QVXM5L$J)5:SK`4.#^P]W(H/$_&H*C46L4(M%K$!0Z!_Q__^)PHU% MP(D4F(/$$(72==B#?0@`= R+10B . `/A3+___^A8!P%"(,X`'4&QP#X# `` MH6 <!0B#> 0`=0?'0 3\# ``Z*?Y__^#Q/QJ!&AP' 4(:&@<!0CH#_G__X/$ M$(7 = BX`0```.M<D(M-#,<!`````(/$](U%JE#H(_?__V:%]G0U,=N-1<"# M?< `=!^_(!H%"(GVC0R=`````(G"BP01B00Y0XG0@SR:`'7HQP2=(!H%" `` M``"A8!P%"(M5#(D",<"-98A;7E_)PY!5B>6+50BX`/X$"(,]`/X$" !T%#G0 M=0BX`0```.L+D(/ "(,X`'7L,<#)PU6)Y8/L$%93BW4(NP#^! B#/0#^! @` M=".-=@"#Q/A6_S/HW?#__X/$$(7 =0:)V.L6B?:#PPB#.P!UX(/$^/]U#%;H M//#__XUEZ%M>R<.058GE@^P05E.+70B+=0R#Q/13Z&W___^#Q!"%P'46@\3X M5E/H+/#__^LYB?:+0P3K,HUV`(M;!(,[`'0:@\3X_S-6Z&WP__^#Q!"%P'3> M@\,(@SL`=>;HN>___\<``@"#Q/13Z!_O__^+7>C)PXGV58GE@^P(@\3TZ&KO M____,.A#[O__R<.058GE@^P(@SV(&@4(!'XIC444@\3\4/]U$&@0' 4(Z+WP M__^#Q/AH=/X$"&@0' 4(Z!OO__^#Q""-1110_W40_W4,_W4(Z(9>``#)PU6) MY8,]G!P%" !T*(L5G!P%"(M%"(D0BQ68' 4(BT4,B1"+%: <!0B+11")$#' MZPB-=@"X@0```,G#D%6)Y8'L' $``%=64XI%"(B%__[__\>%]/[__P````"! M?10``0``=@RXB0```.G5````B?:#Q/1H=!H%".BW[___BW40@^;\BU44P>H" M0HF5^/[__S'_C9T`____@\00.==]=)"#Q/BAJ"4%"(L04VH$5HM%#% /MH7_ M_O__4/\U;!T%"(M"$/_0B87T_O__@\0@A<!T,H/$]&AT&@4(Z.7N__^#Q!"# M/8@:!0@#?E*+E?3^__]2:';^! AJ!6H1Z+3^___K.XGV1X/#!(/&!#N]^/[_ M_WR-BT40@^ #C80H`/___X/$_(M5%%)0_W48Z!3M__^#Q/1H=!H%".B'[O__ MBX7T_O__C:78_O__6UY?R<.)]E6)Y8'L' $``%=64XI%"(B%^_[__\>%\/[_ M_P````"+110!P#T``0``=@VXB0```.D.`0``C78`BT40J %T#;B'````Z?H` M``"-=@"#Q/1H=!H%".B+[O__BW40@^;\BT44P>@!0(F%]/[__S'_C9T`____ M@\00.<</C9(```"0@\3XH:@E!0B+$(V%_/[__U!J!%:+10Q0#[:%^_[__U#_ M-6P=!0B+0A#_T(F%\/[__X/$((7 =#"#Q/1H=!H%".BO[?__@\00@SV(&@4( M`WYLBX7P_O__4&B-_@0(:@5J$>A^_?__ZU6+A?S^__]FB0.#PP(/MX7^_O__ M9HD#@\,"1X/&!#N]]/[__P^,;____XM%$(/@`XM5% '2C80H`/___X/$_%)0 M_W48Z,3K__^#Q/1H=!H%".@W[?__BX7P_O__C:78_O__6UY?R<.)]E6)Y8/L M'%=64XM=$(I%"(A%_\=%^ ````#VPP-T"KB'````Z90```"#Q/1H=!H%".A? M[?__,?^+=1B#Q! [?11S:HGV@\3XH:@E!0B+$%9J!%.+10Q0#[9%_U#_-6P= M!0B+0A#_T(E%^(/$((7 =#"-=@!'@\8$@\,$.WT4<IB#Q/1H=!H%".AK[/__ MBT7XC6786UY?R<-5B>6![!P!``!75E.*10B(A?_^___'A?3^__\`````@7T4 M``$``'8,N(D```#I.P$``(GV@\3T:'0:!0CHC^S__XMU$(/F_(M5%,'J`D*) ME?C^__\Q_XV=`/___X/$$#G7?7R0@\3XH:@E!0B+$%-J!%:+10Q0#[:%__[_ M_U#_-6P=!0B+0A#_T(F%]/[__X/$((7 =#J#Q/1H=!H%".B]Z___@\00@SV( M&@4(`P^.M ```(N5]/[__U)HO?X$"&H%:A'HB/O__^F:````C78`1X/#!(/& M!#N]^/[__WR%BT40@^ #C80H`/___X/$_(M5%%+_=1A0Z.3I__^+=1"#YOPQ M_XV=`/___X/$$#N]^/[__WU%C78`@\3XH:@E!0B+$/\S:@16BT4,4 ^VA?_^ M__]0_S5L'04(BT(4_]")A?3^__^#Q""%P'4/1X/#!(/&!#N]^/[__WR^@\3T M:'0:!0CH^>K__XN%]/[__XVEV/[__UM>7\G#58GE@>P<`0``5U93BD4(B(7[ M_O__QX7P_O__`````(M%% ' /0`!``!V#;B)````Z90!``"-=@"+11"H`70- MN(<```#I@ $``(UV`(/$]&AT&@4(Z/_J__^+=1"#YOR+113!Z % B87T_O__ M,?^-G0#___^#Q! YQP^-F@```)"#Q/BAJ"4%"(L0C87\_O__4&H$5HM%#% / MMH7[_O__4/\U;!T%"(M"$/_0B87P_O__@\0@A<!T.(/$]&AT&@4(Z"/J__^# MQ!"#/8@:!0@##X[N````BX7P_O__4&C5_@0(:@5J$>CN^?__Z=0```"0BX7\ M_O__9HD#@\,"#[>%_O[__V:)`X/#`D>#Q@0[O?3^__\/C&?___\Q_XM%$(/@ M`XV<* #___^+51@[?11S$@^W`F:)`X/"`H/#`D<[?11R[HMU$(/F_#'_C9T` M____.[WT_O__?5X/MP.)A?S^__^#PP(/MP/!X! )A?S^__^#PP*#Q/BAJ"4% M"(L0_[7\_O__:@16BT4,4 ^VA?O^__]0_S5L'04(BT(4_]")A?#^__^#Q""% MP'4,1X/&!#N]]/[__WRB@\3T:'0:!0CH)>G__XN%\/[__XVEV/[__UM>7\G# M58GE@^P<5U93BUT0BD4(B$7_QT7X`````/;#`W0*N(<```#IE ```(/$]&AT M&@4(Z$_I__\Q_XMU&(/$$#M]%'-JB?:#Q/BAJ"4%"(L0_S9J!%.+10Q0#[9% M_U#_-6P=!0B+0A3_T(E%^(/$((7 ="^#Q/1H=!H%".B6Z/__@\00@SV(&@4( M`WXOBT7X4&CN_@0(:@5J$>AH^/__ZQN)]D>#Q@2#PP0[?11RF(/$]&AT&@4( MZ%OH__^+1?B-9=A;7E_)PU6)Y8/L#%=64XM]#(I5"(MU$(,]?!H%" !U+H/$ M](U%_E!J`6H$5P^VVE/HK/E64XM]#(/$](U%_E!J`6H$5P^V=0A6Z&;Y__\/ MMUW^@\0@@SU\&@4(`'46@&7^_(/$](U%_E!J`6H$5U;HS/S__P^WPXUEZ%M> M7\G#D%6)Y8/L#%=64XI%"(A%_XI%#(A%_HL=E!P%"(,]B!H%" )^'H/$] ^V M1?Y0#[9%_U!H!_\$"&H%:A'H6??__X/$((/$^&H0:@'H>N;__XG'@\00A?]U M"3' Z<T```")]H/$^&I8:@'H7.;__XG&@\00A?9U!X/$]%?K,)"%VW4(B364 M' 4(ZU"#Q/0/MD7_4.B?````B<.#Q!"%VW46@\3T5^CAY___@\3T5NC8Y___ M,<#K=XE>!(,[`'4$B3/K&(L;BD7_.$,0=0[K`XM;"(-[" !U]XES"(E^4+I8 M_@0(H5C^! B)!XM"!(E'!(M""(E'"(M"#(E'#(I%_XA&$(I%_HA&$:"<' 4( MB$82_P6<' 4(@\3\#[9%_E!H%_\$"(U&2%#HC^;__XGPC67H6UY?R<.058GE M@^P44XI%"(A%_XL=E!P%"(,]B!H%" )^&P^V1?]0:!__! AJ!6H1Z#7V___K M!HUV`(M;"(7;=#.*1?\X0Q'0,<#\N0P```#SJ\=%T $```#'1=0`````QT7H M`````,=%[ ````#'1> `````QT7D`````,=%\ 0```"#Q/AJ`8U%T%#H6.7_ M_X/$]*&H)04(BPAH`@``@(U%R%"+1>"+5>124/\U;!T%"(M!)/_0@\0P@SV( M&@4(`GXD@\3\BU7(BTW,45*+1>"+5>124&A _P0(:@5J$>BE]/__@\0@BT7@ MBU7DHZ@<!0B)%:P<!0B+1<@``,=%U ````#'1>@`````QT7L`````,=%X `` M``#'1>0`````QT7P!! ``(/$^&H!4^B*Y/__@\0@@\3TH:@E!0B+"&@"``" MC47(4(M%X(M5Y%)0_S5L'04(BT$D_]"#Q""#/8@:!0@"?BJ#Q/R+5<B+3<Q1 M4HM%X(M5Y(/ _X/2_U)0:&#$' 4(@\3X:@&-7=!3Z,OA__^)WS' _+D,```` M\ZO'1= !````QT74`````,>#Q""#Q/2AJ"4%"(L(: $``("-1<A0BT7@BU7D M4E#_-6P=!0B+023_T(/$((,]B!H%" )^)(/$_(M5R(M-S%%2BT7@BU7D4E!H M@/\$"&H%:A'H_?+__X/$((O__XG?,<#\N0P```#SJ\=%T $```#'1=0````` MQT7H`````,=%[ ````#'1> `````QT7D`````,=%\ (0``"#Q/AJ`5/HXN+_ M_X/$((-]Y !W"W47@7W@L/\``'8.QT7@L/\``,=%Y ````"#Q/2AJ"4%"(L( M: $``("-1<A0BT7@BU7D4E#_-6P=!0B+023_T(/$((,]B!H%" )^*H/$_(M5 MR(M-S%%2BT7@BU7D@\#_@]+_4E!HG?\$"&H%:A'H!_+__X/$((M%X(M5Y*/0 M' 4(B174' 4(BT7(BU7,H^ <!0B)%>0<!0B#Q/AJ`8U%T%#H!.#__XUEN%M? MR<.058GE@^P,5U93BWT8BT4<B$7_,=N$P'0P@\3T#[;P5NA$^___B<.#Q!"% MVW4;5FB[_P0(:@)J$>B0\?__N!8```#I+0$``(GV]\<!````=$" ??\`=!Z+ M0R@+0RQU"(M#, M#-'0.BU,HBTLLBW,TBULPZVZ+%=@<!0B+#=P<!0B+'> < M!0B+->0<!0CK5(GV@'W_`'0T]\<@````= Z+4SB+2SR+<T2+6T#K#(M3&(M+ M'(MS)(M;((!]_P!T#(G0"<@(`GXA@\3\BT40BU444E"+10B+50Q24&C/_P0( M:@5J$>A>\/__N $```"-9>A;7E_)PY!5B>6#[$Q75E.*71 Q]HM%"(!X$ `/ MC%H#``"$VW0A@\3T#[;#4.C!^?__B<:#Q!"%]G4,N!8```#I.0,``(GVC7W0 M,<#\N0P```#SJXM-"(M!"(M1#(E%T(E5U/9!$"8/A$X!``")R(,@#X-@! "$ MVP^$H0```/9 $"!T1X/$]*&H)04(BPAH`@``0(U%X%"+1CB+5CQ24/\U;!T% M"(M!)/_0@\0@@\3TH:@E!0B+"&@"``! C47H4(M&0(M61.M%C78`@\3TH:@E M!0B+"&@"``! C47@4(M&&(M6'%)0_S5L'04(BT$D_]"#Q""#Q/2AJ"4%"(L( M: (``$"-1>A0BT8@BU8D4E#_-6P=!0B+023_T(/$(.L<QT7H`````,=%[ `` M``#'1> `````QT7D`````(-]# !T$HM5#(E5V,=%W ````#K#XUV`(M%T(M5 MU(E%V(E5W(M%X#M%Z'4PBT7D.T7L=2C'1>@`````QT7L`````,=%X ````#' M1>0`````QT7P!!(``.L*C78`QT7P! 8``(,]B!H%" (/CED!``"#Q/AHZ/\$ M".D'`0``C78`BTT(]D$0`0^$<_[__XG(@R #@V $`(3;=%:#Q/2AJ"4%"(L( M: $``$"-1>!0BT8HBU8L4E#_-6P=!0B+023_T(/$((/$]*&H)04(BPAH`0`` M0(U%Z%"+1C"+5C124/\U;!T`=!*+50R)5=C'1=P`````ZP^-=@"+1="+5=2) M1=B)5=R+1> [1>AU-(M%Y#L6`.L(D,=%\ (&``"#/8@:!0@"?DV#Q/AH\/\$ M"(U%O%#HK]W__X/$$(,]B!H%" )^,(/$^(M%T(M5U%)0BU7HBTWL45*+1>"+ M5>124(U%O%!H```%"&H%:A'H5NW__X/$,(/$^&H!C4704.BEW?__@\00A<!T M)H,]B!H%" (/CA7]__^#Q/QH+@`%"&H%:A'H(.W__^G__/__C78`@SV(&@4( M`GXA@\3\BU7HBTWL45*+1>"+5>124&@U``4(:@5J$>CN[/__BTT(BP&+400+ M1> +5>2)`8E1!#' C66H6UY?R80\`0``C7W0,<#\N0P```#SJXM#"(M3#(72 M=Q-U!ST``0``=PJX``$``+H`````B470B574A?9T"(/&2(EU_.L'QT7\```` M`/9#$"9T,XL#BU,$)/"#XO^)1>")5>3'1? $! ``@R,/@V,$`(,]B!H%" )^ M4H/$^&A/``4(ZSR)]O9#$ $/A+8```"+$XM+!(/B_(/A_XE5X(E-Y,=%\ ($ M``"#(P.#8P0`@SV(&@4(`GX4@\3X:%P`!0B-1;Q0Z '<__^#Q!"+1>"+5>0# M1= 35=2#P/^#TO^)1>B)5>R#/1'H9.O__[@6````ZR60@SV(&@4(`GX9@\3T MBU7@BTWD45)HI@`%"&H%:A'H.NO__S' C66H6UY?R<-5B>6#[!Q75E.+70B+ M?0R#Q/AJ,%?H1MK__XG&@\00A?8/A.H```")\#'2B?F$R71DB?D/MLF)3?A) MB4W\C78`QP`!````QT $`````(L+B4@0QT 4`````(L+B4@8QT <`````(/# M!(/_`74+QT @`0P``.L)B?;'0" !! ``A?]T"3M5_'T$@$@A0$*#P# [5?A\ MJX/$^%=6Z/':__^#Q!"#^/]T.8,]B!H%" )^'X/$^/]V((M&$(M6%%)0:+4` M!0AJ!6H1Z&3J__^#Q""+7A"#Q/16Z$7;__^)V.LTD(,]B!H%" )^'X/$^/]V M((M6$(M.%%%2:,\`!0AJ!6H1Z"OJ__^#Q""#Q/16Z _;__\QP(UEV%M>7\G# MD%6)Y8/L0%=3BUT(C7W0,<#\N0P```#SJ\=%T $```#'1=0`````B=@QTHE% MX(E5Y(E%Z(E5[,=%\ $$``"#Q"!74XM="(U]Z#'2B=#\N08```#SJXG8,=*) M1?")5?2)1>B)5>S'1?@!0 ``@SV(&@4(`GX6@\3T4E!H!@$%"&H%:A'H,^G_ M_X/$((/$^&H!C47H4.@2V/__C6786U_)PXUV`%6)Y8/L/%=64XM]#(I%"(A% MVX,]B!H%" )^&H/$]%</MD7;4&@@`04(:@5J$>CFZ/__@\0@@\3T#[8%G!P% M"%#H;_+__XG&@\00A?9U(H/$^ ^V!9P<!0A0#[9%VU#H'?'__XG&@\00A?8/ MA%@#``"#Q/2-1>10:@%J"%</MD7;4.A^Z___@\0@A< /A3<#``#!;>0(BT7D M)0#__P`]```&``^$A 4``(/$] G"B57DQD7F@\0@@\3TC47D4&H!:AA74^@G M[___@\0@@\3TC47B4&H!:@174^BRZ?__@$WB__^#Q""%P ^%+P(``&;'1> ` M`/9%X@]T(8/$](U%X%!J`6HP5P^V1=M0Z/GH__^#Q""%P ^%`@(```^W5>#! MXA /MT7B)? ````E__\``,'@" G"B58HP?H?B58L9L=%X ``]D7C#W0A@\3T MC47@4&H!:C)7#[9%VU#HJ>C__X/$((7 #X6R`GX@4E"+1BB+5BQ24 ^V1=M0 M:( !!0AJ!6H1Z+CF__^#Q""+1BP[1C1W"G4DBT8H.T8P=AS'1C `````QT8T M`````,=&* ````#'1BP`````@\3TC47D4&H!:B!7#[9%VU#H7>G__X/$((7 M#X46`0``BT7D)?__```QT@^DPA#!X!")1AB)5AR+1>0-__\/`#'2B48@B58D M@SV(&@4(`GX@4E"+5AB+3AQ14@^V1=M0:, !!0AJ!6H1Z!GF__^#Q""+1AP[ M1B1W"G4DBT88.T8@=AS'1B `````QT8D````1=PQTHG",<"+3>2!X?#_``#! MX1 QVPG("=J)1CB)5CRX`````+H`````]D7F1=PQTHG!B=.)RS')BT7D)0`` M\/\QT@G("=H%__\/`(/2`(E&0(E61(,]B!H%" )^(%)0BT8XBU8\4E /MD7; M4&@``@4(:@5J$>CUY/__@\0@BT8\.T9$=PIUC0```(U]Z#' _+D&````\ZN# MQ/2AJ"4%"(L`: $``$"-7>A3BU8HBTXL45+_-6P=!0B+0"3_T(/$((/$]*&H M)04(BPAH`0``0(U%\%"+1C"+5C124/\U;!T%"(M!)/_0QT7X`D ``(/$((/$ M^&H!4^@WT___@\00@_C_=12#Q/QH)0(%"&H"0(U%\%"+1B"+5B124/\U;!T% M"(M!)/_0QT7X!$ ``(/$((/$^&H!4^B>TO___+D&````\ZN#Q/2AJ"4%"(L` M: (``$"-7>A3BU8XBTX\45+_-6P=!0B+0"3_T(/$((/$]*&H)04(BPAH`@`` M0(U%\%"+1D"+5D124/\U;!T%"(M!)/_0QT7X!$ ``(/$((/$^&H!4^@%TO__ M@\00@_C_=2&#Q/R+5?"+3?114HM%Z(M5[%)0P\9%_@"(1?^#Q/2-1?]0:@%J M&%8/ML-0Z&#F__^#Q""%P ^%+@$``(/$](U%_U!J`6H95@^VPU#H&./__X/$ M((7 #X4.`0``@'W_`'0,#[9%_SL%G!P%"'8HH)P<!0B(1?Z#Q/2-1?Y0:@%J M&58/ML-0Z ;F__^#Q""%P ^%U ```(/$](U%_U!J`6H:5@^VPU#HON+__X/$ M((7 #X6T````@\3TC47^4&H!:AI6#[;#4.C&Y?__@\0@A< /A90```"#Q/Q7 M5@^VPU#H/00``(/$$(/X_P^$G ```(/$](U%_U!J`6H]5@^VPU#H9.+__X/$ M((7 =5Z*1?^(AQH!``"#Q/2-1?A0:@%J0%8/Q!"%P'4<@\3X#[8%G!P%"%!3 MZ./I__^%P'4'N/_____K&X-_! !U`XE'!(-X# !U`XEX#,:'&0$```$QP(UE MV%M>7\G#D%6)Y8/L'%=64Z!P'04(B$7Z@\3T#[9%^E#HRNK__XG#@\00A=MU M'8/$_&B,`@4(:@)J$>@4X?__N/_____I`0$``(GVBT,,BE (B%7[#[9X"0^V M0Q"C<!T%"(/$](U%_%!J`6H(5P^VPE#HR>/__X/$((7 = JX_____^G#```` MP6W\"(M%_"4`__\`/0``!@`/A(D```"#Q/2-5?R#Q""#Q/2-1?Q0:@%J&%=6 MZ&GG__^#Q""#/8@:!0@"?C6#Q/C_=?Q75FB@`@4(:@5J$>A+X/__@\0@ZQJ) M]HI5^SA0"'00BD (B$7[H)P<!0C^R(A#$H-[@^P\5U93BUT(BW4,B=@)\'1_ M@WT0`'1YC7W0,<#\N0P```#SJXE=X(EUY(M%$(E%T,=%U ````"+5="+3=0! MVA'QB57HB4WLBTT4@,T$B4WP@\3X:@&-1=!0Z/[/__^#Q!"#^/]U*H,]B!H% M" )^%X/$^(M%$%!64VC@`@4(:@)J$>AVW___N P```#K!8UV`#' C66X6UY? MR<.)]E6)Y8/L'%=64XI%"(A%[X/$](U%^%!J`8M%$%"+10Q0#[9=[U/H(N+_ M_X/$((-]& !T'8/$](U%_%!J`8M%$(/ !%"+10Q04^C_X?__@\0@QT7T____ M_X/$](U%]%!J`8M%$%"+10Q0#[9=[U/HZN7__X/$((-]& !T'8/$](U%]%!J M`8M%$(/ !%"+10Q04^C'Y?__@\0@@\3TC47T4&H!BT404(M%#% /MGWO5^B9 MX?__BUWT,?:#Q""#?1@`="J#Q/2-1?!0:@&+"^L?D(-]% 1T$NL6@^/\@^;_ MZPZ#X_"#YO_K!H/C_H/F_XG8"?!T*H7V=R9U"('[__\``'<,"QT,`P4("S40 M`P4(A?9W# L=% ,%" LU& ,%"(/$](U%^%!J`8M%$%"+10Q0#[9][U?H]^3_ M_X/$((-]& !T&H/$](U%_%!J`8M%$(/ !%"+10Q05^C4Y/__B=CWT(GR]]*# MP &#T@"-9=A;7E_)PXGV58GE@^Q,5U93BD4(B$73QT7 `````(/$^(M5#%(/ MMD734.BMY?__9HE%O(/@`XE%Q(/$$(,]@!H%" !U+HM%$(M0&('B``#_``^W M1;R!^@```P!T$('Z```&`'0(@?H```L`=0(,51"-=,(@BT7,C3R%$ ```(/$ M](U%_%!J`5>+50Q2#[9=TU/H\=___X/$(/9%_ $/A(0!``"#Q/1J`&H!5XM% M#%!3Z(;]__^)1>R)5?")T8G"@\0@B= )R ^$T0,``(E6"(E.#(!.$ &#Q/A3 M_W80BT7LBU7P4E"+1?PD_#'24E#HW.K__X/$:A'H<MS__XM5$(M"&"4```\` M@\0P/0```0!T!\=%Q ````"#/8@:!0@`="*#90(``(GV@\3TH:@E!0B+"(M& M$ T```! 4(U%]%"+!HM6!%)0_S5L'04(BT$D_]"#Q"!J`O]U[(M%]"3\,=)2 M4.BM^___@\00A<!T)(/$_(M%[(M5\%)0BT7TBU7X4E!H=P,%"&H":A'HA=O_ M_X/$((M%](M5^.EP`@``C78`QT7(`````(M%_(/@!H/X!'56QT7L`````,=% M\ ````"#Q/2-1>Q0:@&-1P10BU4,4@^V1=-0Z"7>__^+1>R+5?")1>C'1>0` M````BT7\,=()1>0)5>C'1<@!````_T7,@\0@ZQ"-=@"+5?R)5>3'1>@````` M@\3TBT7(4&H"5XM5#%(/MD734.B'^___B47LB57PC47L@\0@@W@$`'<0#X71 M`0``@WWL!P^&QP$``(M%[(M5\(E&"(E6#(!.Y(M5Z"3P@^+_4E#HKNC__X/$ M((7 =#F#Q/B+1>R+5?!24(M%Y(M5Z"3P@^+_4E"+51#_<A@/MT(04 ^W0A)0 M:* #!0AJ`VH1Z#W:__^#Q#"#/8@:!0@`=$6+\(/B_U)0:/4#!0AJ!6H1Z._9 M__^#Q""#?<0`=0B#9>0/@V7H`(M%Y(M5Z(D&B58$@WW$`'51@\3TC47D4&H! M5XM5#%(/MEW34^BQX/__@\0@@WW(``^$J@```(M%Z(E%Y,=%Z ````"#Q/2- M1>10:@&-1P10BU4,4E/H@.#__X/$(.E^````:@3_=>R+1=R+5> D\(/B_U)0 MZ#CY__^#Q!"%P'0D@\3\BT7LBU7P4E"+1=R+@WW,``^.M_O__^L+D(-]S 4/ MCJK[__^#?< `=!R#Q/P/MT6\4(M5#%(/MD734.B"X/__Z4H"``"0OS ```"# MQ/2-1?Q0:@%J,(M%#% /MEW34^B*V___BW40@<:P````@\0@@\3T:@!J`FHP MBU4,4E/H'_G__XE%[(E5\(U%[(/$((-X! !W! ````"+1>R+5?")1@B)5@R M3A $@\3X#[9%TU#_=A"+1>R+5?!24(M%_"3^,=)24.@_YO__@\0@A<!T.X,] MB!H%" !T78/$](M%[(M5\%)0BT7\)/Y0BU40BU7P4E"+1?PD_E!H;00%"&H% M:A'HH=?__X/$((-]Q !U)(%E_/X'``"#Q/2-1?Q0:@%7BU4,4@^V1=-0Z'7> M___I`0$``(/$]*&H)04(BPB+1A -````0%"-1=10BP:+5@124/\U;!T%"(M! M)/_0@\0@:@3_=>R+1=2+5=A24.@V]___@$X0@(/$_ ^W1;Q0BU4,4@^V1=-0 MZ-S>__^#Q""#/8@:!0@`#X29````QT7,`````)"+5<R-!%*+51"-=,(@@WX0 M`'1Q]D80`70?@\3\BT8(BU8,4E"+!HM6!"3\!0CK'(/$_(M&"(M6#%)0BP:+ M5@0D_H/B_U)0:)8$!0AJ!6H1Z(/6__^#Q"#_1<R#?<P%#XYO____,<"-9:A; M7E_)PY!5B>6#[!Q75E.*10B(1?B*50R(5?>#Q/AH( $``&H!Z'3%__^)QH/$ M$(7V=0NX_____^E!! ``D(L=C!P%"(,]B!H%" !T)X/$^(M%$(/@!U"+11#! MZ -0#[9%^%!HP 0%"&H%:A'H_=7__X/$((I%^(A&"(I5$(A6"8/$](U%_%!J M`6H`BT404 ^V1?A0Z,'8__^+??QFB7X0BT7\P>@09HE%[F:)1A*#Q""%VW0M MQT7P`````(GV9CE[$'45#[=5[F8Y4Q)U"P^V@Q4!``! B47PBQN%VW7?ZPB0 MQT7P`````(I%\(B&%0$``(/$](U%_%!J`6H(BU404@^V1?A0Z$_8__^*1?R( MAA@!``#!;?P(BT7\B488@\0@@SV(&@4(`'0DK][__X/$$(7 =2B#Q/A3#[9% M^%#H9MW__X/$$(7 =1.#Q/16Z-[%__^X_____^GT`@``BWA0@WX$`'4#B48$ M@W@,`'4#B7 ,@SV,' 4(`'4*B36,' 4(ZPF)Z*OQ__^#Q!"#Q/2-1?I0:@%J M!HM%$% /MD7X4.@+UO__@\0@@'WZ`'P$QD<#`/9%^B!U!,9'!0`/MT7Z)0`& M``!FP>@)#[?0#[9'`CG"?@.(5P*#Q/2-1?E0:@%J/HM5$%(/MEWX4^BLU/__ MBD7YB(86`0``@\0@@\3TC47Y4&H!:C^+11!04^B+U/__BD7YB(87`0``@\0@ M9H.^%@$````/A)8```" OA8!````= R*AA8!"(,]B!H%" !T)8/$^% /MH87 M`0``4 ^VAA8!``!0:$ %!0AJ!6H1Z%;3__^#Q""#Q/2-1?E0:@%J#HM%$% / MMD7X4.C"T___BD7YB$8*@\0@]D7Y?P^%-0$`5HM5$%(/MEWX4^@L]?__@\3T MC47\4&H!:BR+11!04^C#U?__BT7\9HE&%(M%_,'H$&:)1A:#Q#"#Q/2-1?E0 M:@%J/8M5$%)3Z#;3__^#Q"" ??D`=1''1@S_____QH8:`0```.MHD(I%^8B& M&@$``(/$](U%^5!J`6H\BT404 ^V1?A0Z/K2__^#Q""X_____X!]^?]T! ^V M1?F)1@R ??G_="J#Q/0/MD7Y4.C*Z/__@\00A<!T%@^V1?E0:&T%!0AJ`FH1 MZ##2__^#Q!"#Q/2-1?E0:@%J#8M5$%(/MEWX4^B<TO__@\0@@'WY`'49QD7Y M((/$](U%^5!J`6H-BT404%/HHM7__S' C6786UY?R<-5B>6#[!Q75E.*10B( M1?>#/8@:!0@"?A^#Q/3_-9P<!0@/MD7W4&B@!04(:@5J$>BTT?__@\0@QT7P M^V=?>)]L=%[ $Q_^G0B?:#??@#X3#````@WWX_P^$N0`` M,%M^ B%W4J@\3TC47_4&H!:@Y35NCNT?__?\ ?0?'1>P(BT7X)0 `_ MP ] ``& '5XBD7W.@1H%"'4(.QWH' 4(=&6+1?@E`/\``#T`! ``=5:#Q/A3 M5NC[Y___@\3\4Z"<' 4(_L@E_P```%!6Z)3Z__^#Q""%P'0)N/_____K=HGV M@\3TH)P<!0C^R"7_``B#Q/2-1?A0:@%J"%-6Z(O3__^#Q""%P ^$`/___Z&< M' 4(.P6(' 4(<PW_1?"#?? ?#X[6_O__,<"-9=A;7E_)PU6)Y8/L$%93BUT( MBW4,@\3TC47\4&H!:@A6#[;#4.@YT___@\0@A<!T$E!HOP4%"&H":A'H-]#_ M_^M5D(-]_ !T3H-]_/]T2,%M_ B+1?PE`/__`#T```8`=36#/8@:!0@"?A.# MQ/164VC5!04(:@5J$8/L'%=64\=%] #'1? #[9]])#'1>P!```` M,?;K>9"#??@`='&#??C_=&O!;?@(A?9U)H/$](U%_U!J`6H.4U?H#M#__X/$ M((7 =7> ??\`?0?'1>P(````@\3TC47X4&H!:@!35^A,TO__BU7X#[?2BT7X MP>@0@\0@4%)6BT7P4 %J"%-7Z/_1__^#Q""%P ^$7/____]%\(-]\!\/CD/_ M____1?2#??0$#XXJ____C6786UY?R<.)]E6)Y8/L'%=64\9%[P"+'8P<!0B% MVW0WZP^-=@"#Q/13Z,<%@!P%" ````"#/8@:!0@#?@7HJO[__\=%] ````"- M=@#'1? !````,?_K<)" ??\`?0?'1? (````@\3X5@^V7>]3Z-W]__^#Q!"% MP'5,@\3X5E/H).7__X/$$(7 #X5#`0``BQV<' 4(A=MT`4N#Q/Q6#[;#4 ^V M1>]0Z*SW__^#Q!"%P ^%&P$``(/$] ^VPU#H%?S__X/$$$<[??!]+XM%],'@ M`XG&"?Z%_W6+@\3TC47_4&H!:@Y6#[9%[U#H6,[__X/$((7 #X1=_____T7T M@WWT'P^.1/___\9%[P"#/8@<!0@`#XX4`0``C78`QT7T)#'1? ! M,?_IJP```(GV@WWX``^$G@```(-]^/\/A)0```"%_W4N@\3TC47_4&H!:@Y6 M#[9%[U#HYLW__X/$((7 #X6@@'W'T'QT7P" ```(/$](U%^%!J6H(
M5@^V7>]3Z!S0__^#Q""%P’5V@WWX'1P@WWX_W1JP6WX"(%E^ #__P"!??@
M8`="6!??@`! 8`=!R#Q/Q64U/HC?;__X/$$(7 = JX_____^M6C78`1SM] M\'TKBT7TP> #B<8)_H/$](U%^%!J`6H`5@^V1>]0Z*K/__^#Q""%P ^$)___ M__]%](-]]!\/C@K__T"X_____^F)`PB?:#Q/2+5=12Z"2]^X___^EQ
MP``B?:+3=B)#9 <!0B#Q/17Z :]__^#Q!#I1P,``(GVBT74B470QD7?(,]
MB!P%" /C& !``"0QT7T``````^V5=^)5<2)]L=%[ $```#'1? `````Z>D
M"0BTW$BT70B0B)< 2#P B)1=#_1>"Z`0```.MGD(-]^ `/A+\```"#??C_ M#X2U````@WWP`'4M@\3TC47_4&H!:@Y6BU7$4N@-S/__@\0@A< /A<4```" M??\`?0?'1>P(````BSV,' 4(,=*0BDW?.$\(=0@/MD<).?!TA(L_A?]UZO]% MY(72=5R#Q/2-1?A0:@%J"%8/MEW?4^@=SO__@\0@A<!U=8-]^ !T;X-]^/]T M:<%M^ B!9?@`__\`@7WX```&`'0?@7WX0&'06@\3\5E-3Z([T__^#Q!"% MP ^%J_[___]%\(M%[#E%\'TKBT7TP> #BW7P"<:#Q/2-1?A0:@%J%:+5<12
MZ
S-^#Q""%P ^$?____]%](-]]!\/CL3^___^1=\/MD7?.P6(' 4(#XZA M_O__BTWH.4WD#XW"0BT7DHX <!0B+/8P<!0B-=@`QTL=%Y ````"+3=2) M3= [5>!]0 ^V1P@[`740#[9'"3M!! ^$>P$(UV/]%Y(-%T B+1> Y1>1] M&0^V1PB+3= [77F#[9’"3M!!'7=N@$"%T@^%2 $``(-]V !U"HL'HXP< M!0CK")"+!XM5V(D"QT7(`````(GVBTW(C01)C43'((E%S(G"BP(+0@1T-8L: MBW($B=&+`8M1!"3\@P!T&H-_# !T%(-_#/]T#H/$]/]W#.A/W___@\00BX?X M````"X?\````=!>#Q/@/MD<(4(V'^ %#H;MS__X/$$(N’R N'S `` M`'07@\3X#[9'"%"-A\@```!0Z$G<__^#Q!"+A^ +A^0!T%X/$^ ^V M1PA0C8?@````4.@DW/__@\00@S\`#X3 _/__@\3T5^C/N?__BWW8@\00ZP:- M=@")?=B+/X7_#X5/_O__@\3TBT744.BKN?__,<"-9:A;7E_)PY!5B>6#[ Q7 M5E.+?0R+'8P<!0@Q]H/$]&AT&@4(Z ^Y__^#Q!"%VW0GBT4(.4,8=1DY_G44 M@\3T:'0:!0CH?[C__XG8ZQF-=@!&BQN%VW79@\3T:'0:!0CH9+C__S' C67H M6UY?R<.)]E6)Y8/L#%=64XM]#(MU$(L=C!P%"(/$]&AT&@4(Z*:X__^#Q!"% MVW0QC78`#[=#$"'X.T4(=1T/MH,5`0``.?!U$H/$]&AT&@4(Z FX__^)V.L6 MD(L;A=MUTH/$]&AT&G0:!0CH,KC__X/$$(7;=#V-=@`/MT,0(T40.T4(=2@/ MMT,2(?@[10QU'0^V@Q4!Y’42@\3T:'0:!0CHB;?XG8ZQ:0BQN%VW7&
M@\3T:'0:!0CH<;?S’ C67H6UY?R<.-=@!5B>6#[!!64XMU#(I%"(A%XL=
MC!P%"(/$]&AT&@4(Z+"W
^#Q!"%VW0KD(I%SA#"‘4<#[9#“3GP=12#Q/1H
M=!H%”.@;M___B=CK&(UV(L;A=MUUH/$]&AT&@4(Z &W__\QP(UEZ%M>R<-5 MB>6+50B+30P/MP68' 4(9HD"#[<%@!P%"&:)3’ R<.-=@!5B>6#[ B#Q/3

M=1!H
`&C__P``_W4(_W4,Z,_^__^)P87)=!6*40B+112($ ^V40F+11B) M$#' ZP6XA@```,G#D%6)Y8/L"(/$^/]U#/]U".B\_?__B<&%R706BE$(BT40 MB! /ME$)BT44B1 QP.L&D+B&````R<.058GE@^P05E.+=0R*70B#Q/2-1?]0 M:@%J/%8/ML-0Z*W&__^#Q""%P'5V@'W_#W<(N $```#K:Y#&1?P)@\3TC47\ M4&H!:CQ6#[;#4.BGR?__@\0@A<!U2(/$](U%_5!J6H\5@^VPU#H8;X/$
M((7 =2R#Q/2-1?]0:@%J/%8/ML-0Z&_)
^%P’43BD7.D7]#Y3 )?`#K M!8UV`#' C67H6U[)PXUV`%6)Y8/L$%93BUT(BW4,@\3TH:@E!0B+$&@!"
MC47X4&H:@!3BT(D_]"+1?B+5?SWV(/2/?:B488B58<@\0@@\3TH:@E!0B+
M$&@"" C47X4&H`:@!3BT(D_]"+1?B+5?SWV(/2`/?:B48@B58D@\0@@\3T MH:@E!0B+$&@(" C47X4&H:@!3BT(D_]"+1?B+5?SWV(/2/?:B48HB58L
M@\0@@\3TH:@E!0B+$&@0" C47X4&H`:@!3BT(D_]"+1?B+5?R)1C")5C0Q MP(UEZ%M>R<.-=@!5B>6!['P!!75E.+50B+71#'A0#
`QX7X_O__ M`````,>%]/[__P#‘A?#^`QX6T_O__`````(M%',<``````(M- M#,'I&H/A`8F-N/[___9%#O\/E, /MLB)C?S^__^%TG0XB94(____@\3X#[9" M"5")U@^V1@A0Z$K,___'A?#^__\!QX4____0(/$$.F `0``B?:+ M110/MS /MW@"BT4,)? "#^"!T:W<’@@0=!;K6(/X0’0/8 /A+ ` M``#K1HGVNO____^+30SVQ0%T!XMU% ^W5@:#Q/P/M\-0#[?"4 ^WQU#H=/O_ M_^F4C78@\3X#[?#4(MU%/]V$.CR^O__ZWUFA?9U!6:%_W1"NO____^) MT8M%#/;$70+BTT4#[=1!@^W202#Q/0/M-0#[?!4 ^WPE /M\90#[?'4.B,
M^B84(@\0@ZSN0BW44@WX0'03@\3X#[?#4/]V$.B,^O__ZQ>)]H/$ M^(M5% ^V0@E0#[9""%#HS_O__XF%"/___X/$$(.]"/___P!U)8M-',<!$P`` M(,]B!H%" (/CHP%"#Q/QH, 8%".EV!0B?:+M0C
^ OA0!=$.# MO;C^__\`=3"#O?S^__C^__\!BW4<@SX=!J#/8@:!0@"#XX6!0``@\3\ M:#H&!0CI``4``(N%"/___X"X&P$```!U$8J5N/[__XB0&P$``.L-C78QX7X
M_O__0```(N-"/___P^W01*+=11FB08/MT$09HE&HM!&(E&$(I!"(B%[[
M_XA&" ^V40F)E>C^P(.]_/[__P!T!\=%# ``_P#'A=S^__\`````QX74 M_O__`````,>%X/[__P````#'A>3^__\`````QX7,_O__`````,>%T/[__P`` M``#'A;S^__\`````QX7 _O__`````,>%Q/[__P````#'A<C^__\`````QX78 M_O__`````,>%!/___P````#'A9C^__\0Z48!``"+C9C^__^%30P/A",! M``"+M03___^-!':+E?__B;0H*/____^%M/[__XM#$"6 ````"84BP.+
M4P3V0Q != V%TG<>=?[__P/A8<```"#O?C^__\=7[V0Q !=":+0PB+4PR%
MTG<3=0<]$’<*N !``"Z``````&%Y/[__^M3D/9#$"!T)HM;" &=U/[_ M_XN-V/[__SF-U/[__W8UB[74_O__B;78_O__ZR>0BX7<_O__,=(Y4PQW!W4. M.4,(=@F+0PB)A=S^__^+6P@!G>#^____A03___^+E9C^__\!THF5F/[__X.] M]/[__P!T$8.]!/___P/CJ3^K#XGV@[T$
!0^.D
[XM-#/?!" M``^$K@(N="/X’#L /9#$ 0/A)@"#O?3^`#X6+BT,0 M)8 ```"#>P0`=Q-U#XNU"/___X.^L %WC' A<!U9H.]_/[__P!U78.] M^/[__P!U5(N%W/[__S'2.5,,=P=U#CE#"'8)BT,(B87<_O__BU,(97@O
MBXVT_O__P>$$BT,(BU,B80I(/XF4*23
’A"DH
!@/^%M/[_ M_X.]Y/[__P`/A)D"-?>@QP/RY!@/.KQT7X`0(NUY/[XEU,=%
M] "#Q/P/MH7O_O__4&H`C47H4.B3SO__BU4<B0*#Q!"%P'0/@\3\:#\& M!0CI4@$``(GVBT7HBU7LB86\_O__B97 _O__BXT(____B8'XB9’` MB[7D_O__B;$``0``QX$$`0```````,>!" $$"#O>#^__\`#X2?```` MC7W0,<#\N08#SJ=%X ("+M>#^__^)==C'1=P`````@\3\#[:%[_[_ M_U"+A=S^__]0C4704.CHS?__BU4<B0*#Q!"%P'00@\3\:% &!0CIIP(UV
M(M%T(M5U(F%Q/[__XF5R/[__XN-"/___XF!R ```(F1S ```(NUX/[__XFQ MT ```,>!U ````````#'@=@````"````@[W4_O__``^$IP```(U]T#' _+D& M````\ZO'1> @````B[74_O__B778QT7<`````(/$_ ^VA>_^__]0BX78_O__ M4(U%T%#H/,W__XM5'(D"@\00A<!T&(/$_&AA!@4(:@)J$>AOO?__,<#I'0H
M(M%T(M5U(F%S/[__XF5T/[__XN-"/___XF!X ```(F1Y ```(NUU/[__XFQ MZ ```,>![ ````````#'@? ````@````BX6T_O__2(F%H/[__XUV#’;QX4$
M
__(N5H/[__SF5!/___P^-NP```(V](/___XV-*/___XF-I/[__XN% M!/___T#!X 2+C03____!X02+5#@$.U0Y!'<*=7*+!#@[!#EV:HN=!/___\'C M!(NUI/[__XLT,XL$.XM4.P2)A:C^__^)E:S^__^+C03___]!P>$$BP0YBU0Y M!(D$.XE4.P2+E:3^__^+!!&)!!.+A:C^__^+E:S^__^)!#F)5#D$BY6D_O__ MB301NP$```#_A03___^+C:#^__\YC03___\/C%?___^%VP^%'____X.]X/[_ M_P!U%H.]Y/[__P!U#8.]U/[__P`/A)@!``"#O?S^__\`#X6+`0``QX4$____ M(NUM/[SFU!/P^-;P$(UV`(N%!/___\'@!(NT*"C___^#_@9U M#XN="/___X'#L ```.L.D(T$=HN5"/___XU<PB"#/8@:!0@`=!V#Q/B+0PB+ M4PQ24%9H<P8%"&H%:A'HE+O__X/$((L#BU,$]D,0`706A=(/A^H```!U'X/X M`P^'WP```.L4D(72#X?4````=0F#^ \/A\D```"+0P@+0PP/A+T```#V0Q ! M=$^+E;S^__^+C<#^__\)$PE+!(.]]/[__P!T!(!+$("+0PB+4PR%TG<3=0<] M$'<*N `!"Z&%O/[__Q&5P/[__XM#"(M3#.MH]D,0('0RBX7, M_O__BY70_O__"0,)4P2#O?3^__\`= 2 2Q" BU,(`97,_O__BU,,$970_O__ MZS"+A<3^__^+E<C^__\)`PE3!(.]]/[__P!T!(!+$("+4P@!E<3^__^+4PP1 ME<C^____A03___^+C;3^__\YC03___\/C)3^___'A03___\`````QX68_O__ M```$`#'_Z9T!``"0B[68_O__A74,#X1Y`0``BY4$____C012BXT(____C5S! M((M#" M## ^$6@$``(/$]*&H)04(BPB+0Q -````@%"-A1C___]0BP.+4P12 M4/\U;!T%"(M!)/_0@\0@]D,0`719BY4$____P>(#B96<_O__BY48____BXT< M____BW44BX6<_O__B50P.(E,,#R+$XM+!(MU%(N%G/[__XE4,&B)3#!LBT,( MBY4$____B826F ```(//`>M=B?;V0Q "=%6+C03____!X0.)C9S^__^+E1C_ M__^+C1S___^+=12+A9S^__^)5# XB4PP/(L3BTL$BW44BX6<_O__B50P:(E, M,&R+0PB+E03___^)A):8````@\\"@[W\_O__`'5HBX48____B844____@\3T MC844____4&H!BXT$____C02-$ ```%"+A>C^__]0#[:%[_[__U#H`L#__X/$ M((7 =">+51S'`@8```"#/8@:!0@"#XYZ^___BXT$____46B$!@4(Z6#[____ MA03___^+M9C^__\!]HFUF/[__X.]]/[__P!T#X.]!/___P`/CD[^___K#8.] M!/___P4/CC_^__^+G0C___^!P[ ```#V0Q $#X0$`0``BT4,J0```@`/A/8` M``"#O?3^__\`#X7I````@\3TH:@E!0B+"(M#$ T```" 4(V%&/___U"+E0C_ M__^+@K ```"+DK0```!24/\U;!T%"(M!)/_0BX48____BY4<____BTT4B8&P M````B9&T````B[4(____BX:P````BY:T````BTT4B8&X````B9&\````BT,( MB8' ````@\0@@[W\_O__`'5<B[48____@\X!B;44____@\3TC844____4&H! M:C"+A>C^__]0#[:%[_[__U#HK[[__X/$((7 ="2+51S'`@8```"#/8@:!0@" M#XXG^O__@\3\:)0&!0CI$?K__Y"#SP*#O?S^__\`=0F#O?C^__\`=!>+C0C_ M__^+00R+=12)1A3I?P(``(UV`,>%$/___P````"+113'0!3_````BY4(____ M@+H:`0````^$50(``(M-#/?!```!``^$1@(``(/$^(N%Z/[__U /MH7O_O__ M4.C'\/__@\00A< /A"0"``"*G>_^__^+M>C^__^+E0C___^#>@0`="F#O?3^ M__\`=2"+0@2+0 R!>(40____4(U%D%!6#[;#4/\U;!T%"(M"(/_0@\0@A<!T M)8M-',<!!@```(,]B!H%" (/C@CY__^#Q/QHI08%".GR^/__B?:#O?3^__\" M=1N+E0C___^+0@2+0 R#> P`= F+0 SI@0```)"#O?C^__\`=7J#Q/P/ML-0 M_[40____C4604.CURO__BXT(____B4$,@\00A<!U.8.]$/___P%T)(MU',<& M!@```(,]B!H%" (/CH?X__^#Q/QHK 8%".EQ^/__D(M%D(N5"/___^L9D(.] M]/[__P)U$HN-"/___XM!!(M0#(M!#(E"#(N5"/___XM"#(M-%(E!%(,]D!H% M" !T;8-Z#/]T9X.]$&H1Z#^U__^#Q""+E0C___^*0@R(A0____^#Q/2-A0__ M__]0:@%J/%8/ML-0Z,6X__^#Q""%P'0NBTT<QP$&````@SV(&@4(`@^.B??_ M_X/$_&C3!@4(:@)J$>CGM/__Z7/W__^)]H/$^(MU%%;_-6P=!0CH,N___X/$ M$(M%#*D````!= .#SP2+E0C___^+0A@E``#_`#T```,`=2Z#Q/2-A0S___]0 M:@%J!(N-Z/[__U$/MH7O_O__4.@CMO__"[T,____@\\!@\0@@[W\_O__``^% M`@$``(/$_ ^WQU"+A>C^__]0#[:%[_[__U#H$[S__XN5"/___X.Z$ $````/ MA< ```"+30R)BA !`!2+10S!Z $D`8N5"/___XB"&0$``(M-&(-Y& !U#8NU M"/___XEQ(.M8B?;'A03___\`````BY4(____BT48.5 @=#Z#>" `=0:)4"#K M,Y#_A03___^#O03___\$?R.+E03____!X@*+11B#P""+C0C___\Y# )T"8,\ M`@!UT8D,`HMU&/]&&.LQB?:+50R+A0C___\)D! !``#K'HUV`(.]\/[__P!U M$HN-"/____Z!% $``(MU&/]&'(N%"/___XVE>/[__UM>7\G#58GE@^P<5U93 MBWT(QT7\`````(M'&"4``/\`/0```P`/E, /MM")5?3'1?@`````BU7XC012 MC73'((M&$"6 ````"?__@\0@BPZ+7@2)R(G:@^ /@^(`]@8!= J)R(G:@^ # M@^(`B0:)5@3_1?B#??@%?H^-M[ ```"+1A E@ ````E%](N'L ````M&!'0T M@'X0`'PN@\3TC47\4&H!:C /MD<)4 ^V1PA0Z%^Y__^!I[ ```#^!P``@Z>T M`````(/$((N'^ ```(/$^ ^V1PA0C8?(````4.@XQ?__@\00BX?@````"X?D M````=!>#Q/@/MD<(4(-_#/]T"X/$]/]W#.B=Q___BT7TC6786UY?R<.)]E6) MY8/L#%=64XMU#(L=C!P%",=%_ $```"_A@```(/$]&AT&@4(Z/FA__^#Q!"% MVP^$S ```(GV.UT(#Q0!```I3ASK&HGV_HL4`0``ZQ" NQL!````= ?&@QL! M````BX,0`0``)0``_P" NQD!````=26%P'0A@+L4`0```'48@+L;`0```'4/ M@\3T4^BE_?__B47\@\00A?9T*X"[% $```!U(C')C58@D(T$C0`````Y'!!U M"L<$$ ````#_3AA!@PA?]U08M#&"4/\`/0```P!T,CT```8`="L] M```+`'0D@+L9`0```'4;@WW\`'45@\3X#[9#"5 /MD,(4.A4N/__@\00@\3T M:'0:!0CH0*#__XGXC:___XGPZ:,```"+'8P<!0B%VP^$DP```(GVBT,8)0
M#P]```&’5X]D,)!W5R@\3TBT,$#[9 $5#H[G__XG"@\00A=)TGXMR4(,] MB!H%" )^(X/$^ ^V0A)0#[9"$5 /MD(04&@!P4(:@5J$>@RK
@\0@H:@E
M!0B+$%8/MD,)4 ^V0PA0_S5L’04(BT(,_]")QH/$$(7V#X51____BQN%VP^%
M;S’ C67H6U[)PU6)Y8/L#%=64XM]"(,]B!H%" !T%(/$&AJ!P4(:@5J
M$>ARKO
@\00,=N-=R")]HT$G0"#/# `= ^#Q/A7_S0PZ*O\__^#Q!!# M@_L$?MZ#Q/17Z"V?_X-_! UT"[A9Z9L$"0QX7,_?__``````^W1P*- ME>C]__^#Q/Q05U+H<9S__X/$$ ^W1P:#^!$/A_$##
)(5X!P4(B?:#Q/2-
MA0#^
]0#[=#!E /MT,$4 ^W0P)0#[8#4.@NKO__ZT:#Q/2-A0#^]0#[=#
M!E /MT,$4 ^W0P)0#[8#4.@>K___ZR*#Q/2-A0#^
]0#[=#!E /MT,$4 ^W
M0P)0#[8#4.AL/B<&!A<C](0``@\0@Z78#``")]H/$](U#"% /MT,& M4 ^W0P10#[=#E /M@-0Z-FP___I^@((/$](U#"% /MT,&4 ^W0P10#[=# M`E /M@-0Z"VR___IU@((/$](U#"% /MT,&4 ^W0P10#[=#E /M@-0Z-VS M___IL@(``&:#?P8&#PB#^ )T(W<)@_@!= SK.HGV@_@$="/K,9"ZT)P$"(7_ M="FZ^)\$".LBNN2=! B%_W09NG"A! CK$KHTGP0(A?]T";I$HP0(ZP(QTH72 M#X2"@@\3TC84$_G8`BS:%]@^%5O___^D]`@D(/$](V%Y/W__U"-A>/]
M__]0_W,$#[=#E /MP-0Z"KE__^)P0^VA>/]__^)A0#^__^+A>3]__^)A03^ M__^#A<C]__\0@\0@Z? !``"-A>3]__]0C87C_?__4/]S!/\SZ"SE__^)P0^V MA>/]__^)A0#^__^+A>3]__^)A03^__^#A<C]__\0@\00Z:X!``")]H/$_(V% MW/W__U"-A>3]__]0C878_?__4.BOJ___B<&+A=C]__^)A?C]__^+A>3]__^) MA?S]__^+A=S]__^)A0#^__^#A<C]__\,@\00Z5H!``")]H/$]*&H)04(BPC_ M<PB-A=#]__]0BP,QTE)0_S5L'04(BT$D_]")P8N%T/W__XF%_/W__X.%R/W_ M_PR#Q"#I%@$``(GV@\3XC87Z_?__4(V%^/W__U#HZN/__XG!@X7(_?__!(/$ M$.GM````D(/$^(V%S/W__U"+11!0C84$_O__4 ^W0PA0_S/_<P3HW.7__XF% M_/W__X/$((7 = J!A<C]___<````,<F#O<C]__\#X6BN88```#IF `` M`(/$^(M5$%+_,^BZ^/__B<&#Q!#I@ ```(/$^*&H)04(BQ!J`0^W0P90#[=# M!% /MT,"4 ^W`U#_-6P=!0B+0AS_T(G!@\0@ZT^-=@#HD]W__XG!ZT.-=@"# MQ/BAJ"4%"(L0C87X_0```#')@[W,_?__`'5?BT4(QT!(`````(F-\/W__X.% MR/W__PB+E<C]__^)E8M%"/\PZ%69__^X@.L(B?:+A<S]^-I:C]];
M7E_)PXUV%6)Y8'L# $``%=64X-]" !U+H-]# !U*+@\_@0(C97\_O__ZP:- M=@"#P B#. !T5W3V@___4.@0E___ZQJ)]H/$_(M%#%!HPP<%"(V%_/[__U#H M])C__X/$$(/$^&H,:H(```"#Q/AH,/X$"%?HV*?__XG&@\00A?9T/X/$^(U# M!%"+10A0BT8$_]"#Q!"%P'5&BT,$HVP=!0B#/:@E!0@= NAJ"4%"(E#"(E8
M"(D=J"4%"(DS,<#K98/$](M%#%#_-8P:!0AHS0<%"&H":A’H
:C__X/$((/$
M]%?HU:?^LWC78@\3TC87\_O__4/\UC!H%"&C@!P4(:@)J$>CZI___ZQ3_ M-8P:!0AH``@%"&H":A'HY*?__[@3````C:7H_O__6UY?R<-5B>6#[!13@WT( M#W53BQVH)04(A=MT/9"+X-X" !T+8/$]/]S!/\UC!H%"&@H" 4(:@5J$>B:
MI
_@\0@@\3TBP/<P2+0 C_T(/$$(M;"(7;=<2#Q/1J.@6F/__B?:+7>C) MPXUV%6)Y8/L%%.+7?^0@\3T4^B;E?__@\00Z:)]E6)Y8’LW %=64XM= M"(MU#,>%//___P````4(:$T(!0AJ`FH1Z,RF__^X`0.G2@``B?;H*Y?_ M_XF%./___X7 =1W_-FC___\4````B85L____.1T,' 4(#XW ````@\3\:(D( M!0A64^@9EO__@\00@_C_=0G_!0P<!0CKU9"#P)Z#^!9W?/\DA3P)!0B0@\3T M_S4(' 4(Z-J6__^CB!P%".MSC78@\3X_S4(’ 4(H0P<!0C-(;HLOS__>%
M//_P$#K3HGV@#60&@4(`>E\____QP6 &@4(`0.EM____D/%B!H%
M".EA____D,<%?!H%" $#I4?___Y#_-8P:!0AHD@@%"&H#:A'HL*7__X/$ M$.DT____@SV(&@4(`'0D@\3X:*0(!0AHK0@%"/\UC!H%"&BY" 4(:@5J$>A^ MI?__@\0@@[T\____`'4/@\3X:@!J`.@._/__@\00@SVH)04(`'4>_S6,&@4( M:,((!0AJ`FH1Z$:E__^#Q/1J`>C<E?__C;U,____,<#\N08#SJ>%0/

M_P(#'A43___]8[00(QX5(____L.T$"(V%0/___XF%7/___VH`:@!H@"$` M`(UUJ%;H0)/__XV-3/___XE-J&@`'04(:AJ-7813:@CH997__\<%3!T%"!3N M! B#Q"!6: `=!0A3:@!J`&C4" 4(C85D____4(N%./___U#H19/__X/$((/X M_W4=@\3\:-T(!0AJ`FH1Z(RD__^#Q/1J`>@BE?__B?:#Q/2+C3C___]1Z-&2 M__^)PX/$$(7;=1R#Q/QH``D%"&H":A'H5Z3__X/$]&H!Z.V4__^0Z"/T__^% MP'0?_S6,&@4(:"()!0AJ`FH1Z"^D__^#Q/1J`>C%E/__D(/$^&H&:@#HJ)/_ M_X/$^&AT] 0(:@_H>9/__X/$((/$]%/HD?S__X/$]&H`Z).4__^-=@"-I1C_ M__];7E_)PY!5BQ4$' 4(#[=",(GE`= #10C)PU6)Y8/L$%93BUT(BW4,B?:# MQ/B#Q/0/MT,&4.C,_P")P@^W0PB-'!#KN9 QP(UEZ%M>R<.-=@!5B>6#[ Q7 M5E.-=1 Q_^L@Z#>2_T4(/?__``!T"HT<, ^W0P2-'(-F@SL`=0JX__\``.L8 MC78`@\3X5U/H+O___X/$$(7 =-@I\XG8C67H6UY?R<.0D)!5B>6#[!Q75E.+ M?0B#/90:!0C_=0K'!90:!0@! BQ64&@4(N (!"!^@```$!U!;@"```` M9HE%\(M%$(E%]&;'1?(0`,=%^ ````#'1?P`````C47PB0?'1P00````@\3T M:@!J`(MU#$965U+H9)+__XG#@\0@@_O_=43HQ9'__XL`@_A9= 6#^ EU,X/$ M^&H!:)@)!0CH"I/__Z.4&@4(@\00@_C_=!=FQT7P`@&#Q/1J`&H`5E=0Z!B2 M__^)PXUEV(G86UY?R<-5B>6#[#13BU4,BT44B57<BUT0BTT(B47\C57<B5WX MB4W@B57PQT7T# ```!^1___'`!8```"X_____^MUB?:-7=R)G5C___^-7>B- M310QTHV]7/___XF=5/___SG"?16)_HG#C78`@\$$BT'\B0260CG:?/*+10R) M1=R+10B)1>"+A5C___^)1?"+11#!X *)1?S'1?0,````B7WX@\3\@\ ,4&H" MBYU4____4^A5_O__C>C*C___B<:#Q!"#_O\/A,0```!&@?[X`P=@6^^ , M(U^#.L+D+$! OO@#"-7P.#X_SHLX___SG#<PN-1P\D"G$B>?KC'_ MA?]U$N@9D/__QP,N/_____K=(U'#(E%[(M%%%"+11!05HM%[%#H5(__ M_X/$$(/X_W140(GS.<-^`HG#BT4,J AT'XM%[(/$_,9$&/\*4U!J`NBHC___ MBT7LQD08_P"#Q!"+10P,"(D'BT4(B4<$C4,,B47\B7WX@\3\4&H!C47P4.A0 M_?__C6786UY?R<-5B>6#[ B-1110_W40_W4,_W4(Z.C^___)PY"058L5!!P% M"(GE#[="% '0R<.0D)!5B>6#[!13Z !;@<-8’@BX/L____@SC_="&) M]HN#[/___XL`_]"+@^S___^-4/R)D^S___^#>/S_=>%;R<.)]E6)Y8/L%%/H M`````%N!PQ0>!;R<.0D.C_D/__P@````````````````````````````!0
M0TD@$=E="!R;W5T:71O('-E960@<F5S;W5R8V4<WES<F%M')O;0!I<G%L M:7-T&-B87-E&)A<V4``````````````````````````````'!C:2UB:6]S M.B!.;R!"24]3('!R96DM8FEO<SH@2%=)(')E<&]R=',@4$-)+"!S;R!C;VYT M:6YU:6YG’!C:2UB:6]S.B!(5TD@9F%I;&5D(02&%R9'=A<F4@;65C:&%N M:7-M(#(@;F]T('-U< ````````!P8VDM8FEO<RYS;P``````,/X$". 9!0@` M`````````'!C:5]E;G1R>0```$S^! @@_@0(``````````!P8VDM8FEO<RYS M;P_P!0```0IW@<`````<&-I7W-E<G9E<CH"@!R96%D7V-O;F9I9S@@
M<W1A=‘5S("5X')E861?8V]N9FEG,38@<W1A='5S("5X’)E861?8V]N9FEG
M,S(@<W1A=‘5S("5X'=R:71E7V-O;F9I9S@@<W1A='5S("5X’=R:71E7V-O
M;F9I9S$V(’-T871U<V)U<R4P,F09FEN9%]B=7,@)60````````````````` M````````````3&]W(&UE;6]R>2!#4%4@)6QL>" M(%!#22 E;&QX``!(:6=H M(&UE;6]R>2!#4%4@)2!E($UE;6]R>2 1G)E92!0;W)T( ``````````````
M!B=7,@)60@+2!D979F=6YC("5X```````````````` M!T(“5L;’@@+2!I;V5N9” E;&QX````````````````
M``````````````````````````!B=7,@)60@;65M<W1A<G0@)6QL>" M(&UE
…;65N9" E;&QX````````
`
end

begin 666 pcitest.c
M:#X*(VEN8VQU9&4@/’-T9&EO+F@^“B-I;F-L=61E(#QS=&1L:6(N:#X*(VEN
M8VQU9&4@/&QI8F=E;BYH/@H*:6YT(&UA:6XH:6YT(&%R9V,L(&-H87(@BIA
M1&5V:6-E261<;BAU<V4@:&5X('9A;'5E<RE<;B(L(&)A<V5N86UE
&%R9W9;
M,%TI3L"0EE>&ET*“TQ3L"7T*“B @(” OB!#;VYN96-T(‘1O(‘1H92!0
M:68H(’!H9&P@/3T@+3$@2![“B @(” @(" @9G!R:6YT9B@@<W1D97)R+" B
M+"!S:7IE;V8H(&EN9B I("D[“B @(”!P:61X(#T@,#L
"B @("!S<V-A;F8H
M7V%T=&%C:%]D979I8V4H($Y53$PL(%!#25])3DE47T%,3"P@<&ED>“P@)FEN
M97(@B*(" @(" @("!I;G0@:3L(” @(" @(" "0EF<’)I;G1F’-T9&5R
M:3TP.R!I/’-I>F5O9BAI;F8I.R!I
RLI('L*(” @(” @( D)=6YS:6=N960@
M(")P8VE?9&5V7VEN9F@<W1R=6-T=7)E+BXN7&XB3L"0EF<’)I;G1F*’-T
M9&5R<BP@(D1E=FEC94ED.EQT7’0@)6AX7&XB+"!I;F8N1&5V:6-E260I.PH)
M96YD;W))9"D["@D)9G!R:6YT9BAS=&1E<G(L(")3=6)S>7-T96U)9#I<=%QT
M(“5H>%QN(BP@:6YF+E-U8G-Y<W1E;4ED3L"0EF<’)I;G1F*’-T9&5R<BP@
M(E-U8G-Y<W1E;59E;F1O<DED.EQT(“5H>%QN(BP@:6YF+E-U8G-Y<W1E;59E
M;F1O<DED3L"0EF<’)I;G1F*’-T9&5R<BP@(D)U<TYU;6)E<CI<=%QT(“5H
M1G5N8SI<=%QT(“5H:‘4Z)6AH=5QN(BP@4$-)7T1%5DY/&EN9BY$979&=6YC
M
2P@4$-)7T953D-.3RAI;F8N1&5V1G5N8RDI.PH)"69P<FEN=&8H<W1D97)R
M"0EF<’)I;G1F*’-T9&5R<BP@(B5H:’@@(BP@:6YF+E)S=F1;:5TI.PH)“69P
M(DER<3I<=%QT7’0@)61<;B(L(&EN9BY)<G$I.PH*“0EF<’)I;G1F*’-T9&5R
M<BP@(D-P=4EO5’)A;G-L871I;VXZ7’0@)6QL>%QN(BP@:6YF+D-P=4EO5’)A
M;VXZ7’0@)6QL>%QN(BP@:6YF+D-P=4UE;51R86YS;&%T:6]N3L"0EF<’)I
M;G1F*’-T9&5R<BP@(D-P=4ES851R86YS;&%T:6]N.EQT(“5L;'A<;B(L(&EN
M9BY#<'5)<V%4<F%N<VQA=&EO;BD[”@D)9G!R:6YT9BAS=&1E<G(L(”)#<'5”
M;7-T<E1R86YS;&%T:6]N.EQT(“5L;'A<;B(L(&EN9BY#<'5”;7-T<E1R86YS
M;&%T:6]N3L"0EF<’)I;G1F*’-T9&5R<BP@(E!C:4)A<V5!9&1R97-S6S9=
M<RDO<VEZ96]F*&EN9BY08VE"87-E061D<F5S<ULP72D[(&DKRD@"@D)"69P
M
&EN9BY#<‘5"87-E061D<F5S<RDO<VEZ96]F*&EN9BY#<‘5"87-E061D<F5S
M;W(H:3TP.R!I/’-I>F5O9BAI;F8N0F%S94%D9’)E<W-3:7IE2]S:7IE;V8H
M:6YF+D)A<V5!9&1R97-S4VEZ95LP72D[(&DK
RD@”@D)“69P<FEN=&8H<W1D
M97)R+” B)7@@(BP@:6YF+D)A<V5!9&1R97-S4VEZ95MI72D[”@D)9G!R:6YT
M;&QX7&XB+”!I;F8N4&-I4F]M3L"0EF<’)I;G1F*’-T9&5R<B)#<'52;VTZ
M7’1<=%QT(“5L;'A<;B(L(&EN9BY#<'52;VTI.PH)“69P<FEN=&8H<W1D97)R
M+” B4F]M4VEZ93I<=%QT(“5X7&XB+”!I;F8N4F]M4VEZ92D[”@D)9G!R:6YT
M9BAS=&1E<G(L(”)2<W9D,5LS73I<=%QT("(I.PH)“69O<BAI/3 [(&D<VEZ
M96]F*&EN9BY2<W9D,2DO<VEZ96]F*&EN9BY2<W9D,5LP72D[(&AD;” I.PH@
?(" @“B @(”!R971U<FX@15A)5%]354-#15-3.PI]"@``
`
end

So, do I have to put back the Class code to the default one ?

Because it was not working with the default class code (it was
“bridge” i think), I change it to something else (I put “Pci I/O
accelerator” I think). With the default class code, I’m was not able to
get the BaseAdress of the board, with the other ones, it’s start
working but with the problem with the DMA safe memory for the Burst
mode in QNX6.3.

Martin


On 2005-10-26, Igor Kovalenko <kovalenko@comcast.net> wrote:

If I remember right, PLX9054 is a non-transparent PCI-PCI bridge. I have
posted this before, but to save you the trouble, here is is again.

Compile the pcitest.c and run it with vendor and device id of your board as
parameters. Compare the output to what pci -v says. If there is anything odd
in the output (look for bad IRQ numbers, 0 for memory ranges, etc) then
replace the pci-bios with pci-bios.igor and run pcitest again. If it fixes
the problem, try running your app again.

Basically, pci-bios shipped with QNX (all versions) has a bug (or should I
say ‘feature’) that prevents it from working properly with any
non-transparent PCI bridge. Since you said your app worked with 6.21, your
problem could be with something else, but I would be very surprized if this
issue did not have a hand in it.

– igor

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:> slrndlv0s0.4d8.martin@parrot.island.com> …
On 2005-10-25, John Garvey <> jgarvey@qnx.com> > wrote:
David Bacon wrote:
I’m still confused. Why are you specifying MAP_PHYS if
you don’t want to specify a physical address?

MAP_PHYS | MAP_ANON | MAP_NOX64K is used to get DMA-safe memory.
In particular, the combination of PHYS and ANON gives you
physically contiguous memory; it is only when PHYS used in
conjunction with PRIVATE or SHARED that it means a set physical
address.


That’s exactly my case here… thanks to give this nice explanation, I
could not do better because of my “relatively poor” english skills.

I know that the MAP_NOX64K is not always needed but in my case, it’s a
lot simplier because where I specify the physical addresse on the PLX
chip, I can only put a multiple of 64K (the 16 lower bits are not
accessible).

I’ve use this kind of thing with another PCI board, based on a DSP that
have the PCI interface chip inside. That one work on both, QNX6.21 and
QNX6.3 with mmap (never try mmap64).

Now for my board with the PLX9054, I have no idea. May be the physical
address I try to give is not valid for the PLX (if qnx 6.3
mmap/mem_offset give different result than 6.21). May be QNX6.3 act
differently with the memory management unit or with the PCI bus, I don’t
know ?

Martin.

With the SP2 pci server (pci-bios) there is a ‘-B’ option, This option
causes the pci server to enumerate PCI-PCI Bridge devices. You should be
able to get access to the BaseAddress of the board with the default
class code (68000 I think).

Regards,

Joe

Martin Gagnon wrote:

So, do I have to put back the Class code to the default one ?

Because it was not working with the default class code (it was
“bridge” i think), I change it to something else (I put “Pci I/O
accelerator” I think). With the default class code, I’m was not able to
get the BaseAdress of the board, with the other ones, it’s start
working but with the problem with the DMA safe memory for the Burst
mode in QNX6.3.

Martin


On 2005-10-26, Igor Kovalenko <> kovalenko@comcast.net> > wrote:

If I remember right, PLX9054 is a non-transparent PCI-PCI bridge. I have
posted this before, but to save you the trouble, here is is again.

Compile the pcitest.c and run it with vendor and device id of your board as
parameters. Compare the output to what pci -v says. If there is anything odd
in the output (look for bad IRQ numbers, 0 for memory ranges, etc) then
replace the pci-bios with pci-bios.igor and run pcitest again. If it fixes
the problem, try running your app again.

Basically, pci-bios shipped with QNX (all versions) has a bug (or should I
say ‘feature’) that prevents it from working properly with any
non-transparent PCI bridge. Since you said your app worked with 6.21, your
problem could be with something else, but I would be very surprized if this
issue did not have a hand in it.

– igor

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:> slrndlv0s0.4d8.martin@parrot.island.com> …

On 2005-10-25, John Garvey <> jgarvey@qnx.com> > wrote:

David Bacon wrote:

I’m still confused. Why are you specifying MAP_PHYS if
you don’t want to specify a physical address?

MAP_PHYS | MAP_ANON | MAP_NOX64K is used to get DMA-safe memory.
In particular, the combination of PHYS and ANON gives you
physically contiguous memory; it is only when PHYS used in
conjunction with PRIVATE or SHARED that it means a set physical
address.


That’s exactly my case here… thanks to give this nice explanation, I
could not do better because of my “relatively poor” english skills.

I know that the MAP_NOX64K is not always needed but in my case, it’s a
lot simplier because where I specify the physical addresse on the PLX
chip, I can only put a multiple of 64K (the 16 lower bits are not
accessible).

I’ve use this kind of thing with another PCI board, based on a DSP that
have the PCI interface chip inside. That one work on both, QNX6.21 and
QNX6.3 with mmap (never try mmap64).

Now for my board with the PLX9054, I have no idea. May be the physical
address I try to give is not valid for the PLX (if qnx 6.3
mmap/mem_offset give different result than 6.21). May be QNX6.3 act
differently with the memory management unit or with the PCI bus, I don’t
know ?

Martin.

Hell must be freezing over. Or aboyd is writing another 3c509 driver …

Yes, Martin, you don’t have to fake the class code with the replaced server
(or with this new -B option I guess).

“Joe Mammone” <hw@qnx.com> wrote in message news:djoogt$m8$1@inn.qnx.com

With the SP2 pci server (pci-bios) there is a ‘-B’ option, This option
causes the pci server to enumerate PCI-PCI Bridge devices. You should be
able to get access to the BaseAddress of the board with the default class
code (68000 I think).

Regards,

Joe

Martin Gagnon wrote:
So, do I have to put back the Class code to the default one ? Because it
was not working with the default class code (it was
“bridge” i think), I change it to something else (I put “Pci I/O
accelerator” I think). With the default class code, I’m was not able to
get the BaseAdress of the board, with the other ones, it’s start
working but with the problem with the DMA safe memory for the Burst
mode in QNX6.3.

Martin


On 2005-10-26, Igor Kovalenko <> kovalenko@comcast.net> > wrote:

If I remember right, PLX9054 is a non-transparent PCI-PCI bridge. I have
posted this before, but to save you the trouble, here is is again.

Compile the pcitest.c and run it with vendor and device id of your board
as parameters. Compare the output to what pci -v says. If there is
anything odd in the output (look for bad IRQ numbers, 0 for memory
ranges, etc) then replace the pci-bios with pci-bios.igor and run pcitest
again. If it fixes the problem, try running your app again.

Basically, pci-bios shipped with QNX (all versions) has a bug (or should
I say ‘feature’) that prevents it from working properly with any
non-transparent PCI bridge. Since you said your app worked with 6.21,
your problem could be with something else, but I would be very surprized
if this issue did not have a hand in it.

– igor

“Martin Gagnon” <> martin@yanos.org> > wrote in message
news:> slrndlv0s0.4d8.martin@parrot.island.com> …

On 2005-10-25, John Garvey <> jgarvey@qnx.com> > wrote:

David Bacon wrote:

I’m still confused. Why are you specifying MAP_PHYS if
you don’t want to specify a physical address?

MAP_PHYS | MAP_ANON | MAP_NOX64K is used to get DMA-safe memory.
In particular, the combination of PHYS and ANON gives you
physically contiguous memory; it is only when PHYS used in
conjunction with PRIVATE or SHARED that it means a set physical
address.


That’s exactly my case here… thanks to give this nice explanation, I
could not do better because of my “relatively poor” english skills.

I know that the MAP_NOX64K is not always needed but in my case, it’s a
lot simplier because where I specify the physical addresse on the PLX
chip, I can only put a multiple of 64K (the 16 lower bits are not
accessible).

I’ve use this kind of thing with another PCI board, based on a DSP that
have the PCI interface chip inside. That one work on both, QNX6.21 and
QNX6.3 with mmap (never try mmap64).

Now for my board with the PLX9054, I have no idea. May be the physical
address I try to give is not valid for the PLX (if qnx 6.3
mmap/mem_offset give different result than 6.21). May be QNX6.3 act
differently with the memory management unit or with the PCI bus, I don’t
know ?

Martin.